From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-eopbgr750077.outbound.protection.outlook.com [40.107.75.77]) by gabe.freedesktop.org (Postfix) with ESMTPS id 95FEA6E7A2 for ; Thu, 25 Jul 2019 16:55:42 +0000 (UTC) From: Nicholas Kazlauskas Date: Thu, 25 Jul 2019 12:55:29 -0400 Message-ID: <20190725165529.25775-4-nicholas.kazlauskas@amd.com> In-Reply-To: <20190725165529.25775-1-nicholas.kazlauskas@amd.com> References: <20190725165529.25775-1-nicholas.kazlauskas@amd.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 4/4] tests/amdgpu: Add HDR tests for amdgpu 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: VGVzdHMgdmFyaW91cyBIRFIxMCB1c2VjYXNlcywgc3VjaCBhczoKCi0gVHJhbnNpdGlvbnMgYmV0 d2VlbiA4YnBjIGFuZCAxMGJwYwotIFRyYW5zaXRpb25zIGJldHdlZW4gU0RSIGFuZCBIRFIKLSBG YXN0IHN0YXRpYyBtZXRhZGF0YSBzd2l0Y2hlcwotIERpc3BsYXkgbGV2ZWwgdmVyaWZpY2F0aW9u IGZvciBpbmZvZnJhbWVzIHVzaW5nIGEgbHVtaW5hbmNlIHNlbnNvcgoKVGhlIHRlc3RzIHJlcXVp cmUgdGhlICJvdXRwdXRfYnBjIiBkZWJ1Z2ZzIGVudHJ5IHRvIHJlYWQgY3VycmVudAphbmQgbWF4 aW11bSBicGMuCgp2MjogcmViYXNlCgpDYzogSGFycnkgV2VudGxhbmQgPGhhcnJ5LndlbnRsYW5k QGFtZC5jb20+CkNjOiBMZW8gTGkgPHN1bnBlbmcubGlAYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTog TmljaG9sYXMgS2F6bGF1c2thcyA8bmljaG9sYXMua2F6bGF1c2thc0BhbWQuY29tPgotLS0KIHRl c3RzL01ha2VmaWxlLnNvdXJjZXMgICB8ICAgMSArCiB0ZXN0cy9hbWRncHUvYW1kX2hkci5jICAg fCA3MDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9hbWRn cHUvbWVzb24uYnVpbGQgfCAgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCA3MDUgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2FtZGdwdS9hbWRfaGRyLmMKCmRpZmYgLS1naXQg YS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCAy NTBkYmQzMy4uM2E4MWE4ZmYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysr IGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtOSw2ICs5LDcgQEAgQU1ER1BVX1RFU1RTID0g XAogCWFtZGdwdS9hbWRfYnlwYXNzIFwKIAlhbWRncHUvYW1kX2NvbG9yIFwKIAlhbWRncHUvYW1k X2NzX25vcCBcCisJYW1kZ3B1L2FtZF9oZHIgXAogCWFtZGdwdS9hbWRfcHJpbWUgXAogCWFtZGdw dS9hbWRfYWJtIFwKIAkkKE5VTEwpCmRpZmYgLS1naXQgYS90ZXN0cy9hbWRncHUvYW1kX2hkci5j IGIvdGVzdHMvYW1kZ3B1L2FtZF9oZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMC4uNTZlZWE1NDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9hbWRncHUvYW1kX2hkci5j CkBAIC0wLDAgKzEsNzAzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTkgQWR2YW5jZWQgTWljcm8g RGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICog VEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RI RVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNp bmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNsdWRlIDx1bmlzdGQu aD4KKworLyogRFJNIEhEUiBkZWZpbml0aW9ucy4gTm90IGluIHRoZSBVQVBJIGhlYWRlciwgdW5m b3J0dW5hdGVseS4gKi8KKworZW51bSBoZG1pX21ldGFkYXRhX3R5cGUgeworCUhETUlfU1RBVElD X01FVEFEQVRBX1RZUEUxID0gMSwKK307CisKK2VudW0gaGRtaV9lb3RmIHsKKwlIRE1JX0VPVEZf VFJBRElUSU9OQUxfR0FNTUFfU0RSLAorCUhETUlfRU9URl9UUkFESVRJT05BTF9HQU1NQV9IRFIs CisJSERNSV9FT1RGX1NNUFRFX1NUMjA4NCwKK307CisKKy8qIFRlc3QgZmxhZ3MuICovCitlbnVt IHsKKwlURVNUX05PTkUgPSAwLAorCVRFU1RfRFBNUyA9IDEgPDwgMCwKKwlURVNUX1NVU1BFTkQg PSAxIDw8IDEsCit9OworCisvKiBCUEMgY29ubmVjdG9yIHN0YXRlLiAqLwordHlwZWRlZiBzdHJ1 Y3Qgb3V0cHV0X2JwYyB7CisJdW5zaWduZWQgaW50IGN1cnJlbnQ7CisJdW5zaWduZWQgaW50IG1h eGltdW07Cit9IG91dHB1dF9icGNfdDsKKworLyogQ29tbW9uIHRlc3QgZGF0YS4gKi8KK3R5cGVk ZWYgc3RydWN0IGRhdGEgeworCWlndF9kaXNwbGF5X3QgZGlzcGxheTsKKwlpZ3RfcGxhbmVfdCAq cHJpbWFyeTsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlpZ3RfcGlwZV90ICpwaXBlOworCWln dF9waXBlX2NyY190ICpwaXBlX2NyYzsKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJZW51bSBw aXBlIHBpcGVfaWQ7CisJaW50IGZkOworCWludCBzZW5zb3JfZmQ7CisJaW50IHc7CisJaW50IGg7 Cit9IGRhdGFfdDsKKworLyogQ29udmVydHMgYSBkb3VibGUgdG8gODYxLUcgc3BlYyBGUCBmb3Jt YXQuICovCitzdGF0aWMgdWludDE2X3QgY2FsY19oZHJfZmxvYXQoZG91YmxlIHZhbCkKK3sKKwly ZXR1cm4gKHVpbnQxNl90KSh2YWwgKiA1MDAwMC4wKTsKK30KKworLyogUFEgSW52ZXJzZSwgTCBu b3JtYWxpemVkIGx1bWluYW5jZSB0byBzaWduYWwgdmFsdWUgVi4gKi8KK3N0YXRpYyBkb3VibGUg Y2FsY19wcV9pbnZlcnNlKGRvdWJsZSBsKQoreworCWRvdWJsZSBjMSA9IDAuODM1OTM3NTsKKwlk b3VibGUgYzIgPSAxOC44NTE1NjI1OworCWRvdWJsZSBjMyA9IDE4LjY4NzU7CisJZG91YmxlIG0x ID0gMC4xNTkzMDE3NTc4MTI1OworCWRvdWJsZSBtMiA9IDc4Ljg0Mzc1OworCWRvdWJsZSBsbSA9 IHBvdyhsLCBtMSk7CisKKwlyZXR1cm4gcG93KChjMSArIGMyICogbG0pIC8gKDEuMCArIGMzICog bG0pLCBtMik7Cit9CisKKy8qIEFzc2VydHMgdGhhdCB0d28gZ2l2ZW4gdmFsdWVzIGluIG5pdHMg YXJlIGVxdWFsIHdpdGhpbiBhIGdpdmVuIHRocmVzaG9sZC4gKi8KK3N0YXRpYyB2b2lkIGFzc2Vy dF9uaXRzX2VxdWFsKGRvdWJsZSBuMCwgZG91YmxlIG4xLCBkb3VibGUgdGhyZXNob2xkKQorewor CWRvdWJsZSBkaWZmID0gZmFicyhuMCAtIG4xKTsKKworCWlndF9hc3NlcnRfZihkaWZmIDw9IHRo cmVzaG9sZCwKKwkJICAgICAiTml0cyBub3QgaW4gdGhyZXNob2xkOiB8ICUuM2YgLSAlLjNmIHwg PiAlLjNmXG4iLAorCQkgICAgIG4wLCBuMSwgdGhyZXNob2xkKTsKK30KKworLyogRmlsbHMgc29t ZSB0ZXN0IHZhbHVlcyBmb3IgSERSIG1ldGFkYXRhIHRhcmdldGluZyBTRFIuICovCitzdGF0aWMg dm9pZCBmaWxsX2hkcl9vdXRwdXRfbWV0YWRhdGFfc2RyKHN0cnVjdCBoZHJfb3V0cHV0X21ldGFk YXRhICptZXRhKQoreworCW1lbXNldChtZXRhLCAwLCBzaXplb2YoKm1ldGEpKTsKKworCW1ldGEt Pm1ldGFkYXRhX3R5cGUgPSBIRE1JX1NUQVRJQ19NRVRBREFUQV9UWVBFMTsKKwltZXRhLT5oZG1p X21ldGFkYXRhX3R5cGUxLmVvdGYgPSBIRE1JX0VPVEZfVFJBRElUSU9OQUxfR0FNTUFfU0RSOwor CisJLyogUmVjLiA3MDkgKi8KKwltZXRhLT5oZG1pX21ldGFkYXRhX3R5cGUxLmRpc3BsYXlfcHJp bWFyaWVzWzBdLnggPQorCQljYWxjX2hkcl9mbG9hdCgwLjY0MCk7IC8qIFJlZCAqLworCW1ldGEt PmhkbWlfbWV0YWRhdGFfdHlwZTEuZGlzcGxheV9wcmltYXJpZXNbMF0ueSA9CisJCWNhbGNfaGRy X2Zsb2F0KDAuMzMwKTsKKwltZXRhLT5oZG1pX21ldGFkYXRhX3R5cGUxLmRpc3BsYXlfcHJpbWFy aWVzWzFdLnggPQorCQljYWxjX2hkcl9mbG9hdCgwLjMwMCk7IC8qIEdyZWVuICovCisJbWV0YS0+ aGRtaV9tZXRhZGF0YV90eXBlMS5kaXNwbGF5X3ByaW1hcmllc1sxXS55ID0KKwkJY2FsY19oZHJf ZmxvYXQoMC42MDApOworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEuZGlzcGxheV9wcmltYXJp ZXNbMl0ueCA9CisJCWNhbGNfaGRyX2Zsb2F0KDAuMTUwKTsgLyogQmx1ZSAqLworCW1ldGEtPmhk bWlfbWV0YWRhdGFfdHlwZTEuZGlzcGxheV9wcmltYXJpZXNbMl0ueSA9CisJCWNhbGNfaGRyX2Zs b2F0KDAuMDA2KTsKKwltZXRhLT5oZG1pX21ldGFkYXRhX3R5cGUxLndoaXRlX3BvaW50LnggPSBj YWxjX2hkcl9mbG9hdCgwLjMxMjcpOworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEud2hpdGVf cG9pbnQueSA9IGNhbGNfaGRyX2Zsb2F0KDAuMzI5MCk7CisKKwltZXRhLT5oZG1pX21ldGFkYXRh X3R5cGUxLm1heF9kaXNwbGF5X21hc3RlcmluZ19sdW1pbmFuY2UgPSAwOworCW1ldGEtPmhkbWlf bWV0YWRhdGFfdHlwZTEubWluX2Rpc3BsYXlfbWFzdGVyaW5nX2x1bWluYW5jZSA9IDA7CisJbWV0 YS0+aGRtaV9tZXRhZGF0YV90eXBlMS5tYXhfZmFsbCA9IDA7CisJbWV0YS0+aGRtaV9tZXRhZGF0 YV90eXBlMS5tYXhfY2xsID0gMDsKK30KKworLyogRmlsbHMgc29tZSB0ZXN0IHZhbHVlcyBmb3Ig U1QyMDQ4IEhEUiBvdXRwdXQgbWV0YWRhdGEuCisgKgorICogTm90ZTogdGhlcmUgaXNuJ3QgcmVh bGx5IGEgc3RhbmRhcmQgZm9yIHdoYXQgdGhlIG1ldGFkYXRhIGlzIHN1cHBvc2VkCisgKiB0byBk byBvbiB0aGUgZGlzcGxheSBzaWRlIG9mIHRoaW5ncy4gVGhlIGRpc3BsYXkgaXMgZnJlZSB0byBp Z25vcmUgaXQKKyAqIGFuZCBjbGlwIHRoZSBvdXRwdXQsIHVzZSBpdCB0byBoZWxwIHRvbmVtYXAg dG8gdGhlIGNvbnRlbnQgcmFuZ2UsCisgKiBvciBkbyBhbnl0aGluZyB0aGV5IHdhbnQsIHJlYWxs eS4KKyAqLworc3RhdGljIHZvaWQgZmlsbF9oZHJfb3V0cHV0X21ldGFkYXRhX3N0MjA0OChzdHJ1 Y3QgaGRyX291dHB1dF9tZXRhZGF0YSAqbWV0YSkKK3sKKwltZW1zZXQobWV0YSwgMCwgc2l6ZW9m KCptZXRhKSk7CisKKwltZXRhLT5tZXRhZGF0YV90eXBlID0gSERNSV9TVEFUSUNfTUVUQURBVEFf VFlQRTE7CisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS5lb3RmID0gSERNSV9FT1RGX1NNUFRF X1NUMjA4NDsKKworCS8qIFJlYy4gMjAyMCAqLworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEu ZGlzcGxheV9wcmltYXJpZXNbMF0ueCA9CisJCWNhbGNfaGRyX2Zsb2F0KDAuNzA4KTsgLyogUmVk ICovCisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS5kaXNwbGF5X3ByaW1hcmllc1swXS55ID0K KwkJY2FsY19oZHJfZmxvYXQoMC4yOTIpOworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEuZGlz cGxheV9wcmltYXJpZXNbMV0ueCA9CisJCWNhbGNfaGRyX2Zsb2F0KDAuMTcwKTsgLyogR3JlZW4g Ki8KKwltZXRhLT5oZG1pX21ldGFkYXRhX3R5cGUxLmRpc3BsYXlfcHJpbWFyaWVzWzFdLnkgPQor CQljYWxjX2hkcl9mbG9hdCgwLjc5Nyk7CisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS5kaXNw bGF5X3ByaW1hcmllc1syXS54ID0KKwkJY2FsY19oZHJfZmxvYXQoMC4xMzEpOyAvKiBCbHVlICov CisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS5kaXNwbGF5X3ByaW1hcmllc1syXS55ID0KKwkJ Y2FsY19oZHJfZmxvYXQoMC4wNDYpOworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEud2hpdGVf cG9pbnQueCA9IGNhbGNfaGRyX2Zsb2F0KDAuMzEyNyk7CisJbWV0YS0+aGRtaV9tZXRhZGF0YV90 eXBlMS53aGl0ZV9wb2ludC55ID0gY2FsY19oZHJfZmxvYXQoMC4zMjkwKTsKKworCW1ldGEtPmhk bWlfbWV0YWRhdGFfdHlwZTEubWF4X2Rpc3BsYXlfbWFzdGVyaW5nX2x1bWluYW5jZSA9CisJCTEw MDA7IC8qIDEwMDAgbml0cyAqLworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEubWluX2Rpc3Bs YXlfbWFzdGVyaW5nX2x1bWluYW5jZSA9CisJCTUwMDsJCQkJICAgLyogMC4wNSBuaXRzICovCisJ bWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS5tYXhfZmFsbCA9IDEwMDA7IC8qIDEwMDAgbml0cyAq LworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEubWF4X2NsbCA9IDUwMDsgICAvKiA1MDAgbml0 cyAqLworfQorCisvKiBTZXRzIHRoZSBIRFIgb3V0cHV0IG1ldGFkYXRhIHByb3AuICovCitzdGF0 aWMgdm9pZCBzZXRfaGRyX291dHB1dF9tZXRhZGF0YShkYXRhX3QgKmRhdGEsCisJCQkJICAgIHN0 cnVjdCBoZHJfb3V0cHV0X21ldGFkYXRhIGNvbnN0ICptZXRhKQoreworCWlndF9vdXRwdXRfcmVw bGFjZV9wcm9wX2Jsb2IoZGF0YS0+b3V0cHV0LAorCQkJCSAgICAgSUdUX0NPTk5FQ1RPUl9IRFJf T1VUUFVUX01FVEFEQVRBLCBtZXRhLAorCQkJCSAgICAgbWV0YSA/IHNpemVvZigqbWV0YSkgOiAw KTsKK30KKworLyogQ29tbW9uIHRlc3Qgc2V0dXAuICovCitzdGF0aWMgdm9pZCB0ZXN0X2luaXQo ZGF0YV90ICpkYXRhKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxh eTsKKworCS8qIEl0IGRvZXNuJ3QgbWF0dGVyIHdoaWNoIHBpcGUgd2UgY2hvb3NlIG9uIGFtZHBn dS4gKi8KKwlkYXRhLT5waXBlX2lkID0gUElQRV9BOworCWRhdGEtPnBpcGUgPSAmZGF0YS0+ZGlz cGxheS5waXBlc1tkYXRhLT5waXBlX2lkXTsKKworCWlndF9kaXNwbGF5X3Jlc2V0KGRpc3BsYXkp OworCisJLyoKKwkgKiBUT0RPOiBMb29rIGZvciBhbiBvdXRwdXQgdGhhdCBpcyBIRFIgY2FwYWJs ZSBhbmQgZmF2b3IgdGhhdC4KKwkgKiBCdXQgZm9yIG5vdyBqdXN0IGFzc3VtZSB0aGF0IHRoZSBm aXJzdCBjb25uZWN0ZWQgZGlzcGxheSBzdXBwb3J0cworCSAqIEhEUiBhbmQgMTBicGMuCisJICov CisJZGF0YS0+b3V0cHV0ID0gaWd0X2dldF9zaW5nbGVfb3V0cHV0X2Zvcl9waXBlKGRpc3BsYXks IGRhdGEtPnBpcGVfaWQpOworCWlndF9yZXF1aXJlKGRhdGEtPm91dHB1dCk7CisJaWd0X3JlcXVp cmUoaWd0X291dHB1dF9oYXNfcHJvcChkYXRhLT5vdXRwdXQsIElHVF9DT05ORUNUT1JfTUFYX0JQ QykpOworCisJZGF0YS0+bW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUoZGF0YS0+b3V0cHV0KTsK KwlpZ3RfYXNzZXJ0KGRhdGEtPm1vZGUpOworCisJZGF0YS0+cHJpbWFyeSA9CisJCWlndF9waXBl X2dldF9wbGFuZV90eXBlKGRhdGEtPnBpcGUsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOworCisJ ZGF0YS0+cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmZkLCBkYXRhLT5waXBlX2lk LAorCQkJCQkgIElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKTsKKworCWlndF9vdXRwdXRfc2V0 X3BpcGUoZGF0YS0+b3V0cHV0LCBkYXRhLT5waXBlX2lkKTsKKworCWRhdGEtPncgPSBkYXRhLT5t b2RlLT5oZGlzcGxheTsKKwlkYXRhLT5oID0gZGF0YS0+bW9kZS0+dmRpc3BsYXk7CisJZGF0YS0+ c2Vuc29yX2ZkID0gLTE7Cit9CisKKy8qIENvbW1vbiB0ZXN0IGNsZWFudXAuICovCitzdGF0aWMg dm9pZCB0ZXN0X2ZpbmkoZGF0YV90ICpkYXRhKQoreworCWNsb3NlKGRhdGEtPnNlbnNvcl9mZCk7 CisJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMpOworCWlndF9kaXNwbGF5X3Jlc2V0 KCZkYXRhLT5kaXNwbGF5KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9jeWNsZV9mbGFncyhkYXRh X3QgKmRhdGEsIHVpbnQzMl90IHRlc3RfZmxhZ3MpCit7CisKKwlpZiAodGVzdF9mbGFncyAmIFRF U1RfRFBNUykgeworCQlrbXN0ZXN0X3NldF9jb25uZWN0b3JfZHBtcyhkYXRhLT5mZCwKKwkJCQkJ ICAgZGF0YS0+b3V0cHV0LT5jb25maWcuY29ubmVjdG9yLAorCQkJCQkgICBEUk1fTU9ERV9EUE1T X09GRik7CisJCWttc3Rlc3Rfc2V0X2Nvbm5lY3Rvcl9kcG1zKGRhdGEtPmZkLAorCQkJCQkgICBk YXRhLT5vdXRwdXQtPmNvbmZpZy5jb25uZWN0b3IsCisJCQkJCSAgIERSTV9NT0RFX0RQTVNfT04p OworCX0KKworCWlmICh0ZXN0X2ZsYWdzICYgVEVTVF9TVVNQRU5EKQorCQlpZ3Rfc3lzdGVtX3N1 c3BlbmRfYXV0b3Jlc3VtZShTVVNQRU5EX1NUQVRFX01FTSwKKwkJCQkJICAgICAgU1VTUEVORF9U RVNUX05PTkUpOworfQorCisvKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFuZCBtYXhpbXVtIGJwYyBm cm9tIHRoZSBjb25uZWN0b3IgZGVidWdmcy4gKi8KK3N0YXRpYyBvdXRwdXRfYnBjX3QgZ2V0X291 dHB1dF9icGMoZGF0YV90ICpkYXRhKQoreworCWNoYXIgYnVmWzI1Nl07CisJY2hhciAqc3RhcnRf bG9jOworCWludCBmZCwgcmVzOworCW91dHB1dF9icGNfdCBpbmZvOworCisJZmQgPSBpZ3RfZGVi dWdmc19jb25uZWN0b3JfZGlyKGRhdGEtPmZkLCBkYXRhLT5vdXRwdXQtPm5hbWUsIE9fUkRPTkxZ KTsKKwlpZ3RfYXNzZXJ0KGZkID49IDApOworCisJcmVzID0gaWd0X2RlYnVnZnNfc2ltcGxlX3Jl YWQoZmQsICJvdXRwdXRfYnBjIiwgYnVmLCBzaXplb2YoYnVmKSk7CisJaWd0X3JlcXVpcmUocmVz ID4gMCk7CisKKwljbG9zZShmZCk7CisKKwlpZ3RfYXNzZXJ0KHN0YXJ0X2xvYyA9IHN0cnN0cihi dWYsICJDdXJyZW50OiAiKSk7CisJaWd0X2Fzc2VydF9lcShzc2NhbmYoc3RhcnRfbG9jLCAiQ3Vy cmVudDogJXUiLCAmaW5mby5jdXJyZW50KSwgMSk7CisKKwlpZ3RfYXNzZXJ0KHN0YXJ0X2xvYyA9 IHN0cnN0cihidWYsICJNYXhpbXVtOiAiKSk7CisJaWd0X2Fzc2VydF9lcShzc2NhbmYoc3RhcnRf bG9jLCAiTWF4aW11bTogJXUiLCAmaW5mby5tYXhpbXVtKSwgMSk7CisKKwlyZXR1cm4gaW5mbzsK K30KKworLyogVmVyaWZpZXMgdGhhdCBjb25uZWN0b3IgaGFzIHRoZSBjb3JyZWN0IG91dHB1dCBi cGMuICovCitzdGF0aWMgdm9pZCBhc3NlcnRfb3V0cHV0X2JwYyhkYXRhX3QgKmRhdGEsIHVuc2ln bmVkIGludCBicGMpCit7CisJb3V0cHV0X2JwY190IGluZm8gPSBnZXRfb3V0cHV0X2JwYyhkYXRh KTsKKworCWlndF9yZXF1aXJlX2YoaW5mby5tYXhpbXVtID49IGJwYywKKwkJICAgICAgIk1vbml0 b3IgZG9lc24ndCBzdXBwb3J0ICV1IGJwYywgbWF4IGlzICV1XG4iLCBicGMsCisJCSAgICAgIGlu Zm8ubWF4aW11bSk7CisKKwlpZ3RfYXNzZXJ0X2VxKGluZm8uY3VycmVudCwgYnBjKTsKK30KKwor LyoKKyAqIExvYWRzIHRoZSBzZW5zb3IgaWYgdW5sb2FkZWQuIFRoZSBzZW5zb3IgaXMgYSBzZXJp YWwgdG8gVVNCIGludGVyZmFjZSB0aGF0CisgKiBwcmludHMgdGhlIGN1cnJlbnQgbWVhc3VyZWQg bHVtaW5hbmNlIChuaXRzKSBhcyBhIGZsb2F0LCBzZXBhcmF0ZWQgYnkgYQorICogbmV3bGluZS4g VXNlcyBiYXVkcmF0ZSA5NjAwLgorICovCitzdGF0aWMgdm9pZCBvcGVuX3NlbnNvcihkYXRhX3Qg KmRhdGEpCit7CisJc3RydWN0IHRlcm1pb3MgdG9wdGlvbnM7CisJaW50IHJlczsKKworCS8qIFJl dHVybiBpZiBhbHJlYWR5IGxvYWRlZC4gKi8KKwlpZiAoZGF0YS0+c2Vuc29yX2ZkID49IDApCisJ CXJldHVybjsKKworCWRhdGEtPnNlbnNvcl9mZCA9IG9wZW4oIi9kZXYvdHR5VVNCMCIsIE9fUkRX UiB8IE9fTk9DVFRZKTsKKwlpZiAoZGF0YS0+c2Vuc29yX2ZkIDwgMCkgeworCQlpZ3RfaW5mbygi THVtaW5hbmNlIHNlbnNvciBub3QgZm91bmQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJlcyA9 IHRjZ2V0YXR0cihkYXRhLT5zZW5zb3JfZmQsICZ0b3B0aW9ucyk7CisJaWd0X2Fzc2VydF9sdGUo MCwgcmVzKTsKKworCWNmc2V0aXNwZWVkKCZ0b3B0aW9ucywgQjk2MDApOworCWNmc2V0b3NwZWVk KCZ0b3B0aW9ucywgQjk2MDApOworCisJdG9wdGlvbnMuY19jZmxhZyAmPSB+KFBBUkVOQiB8IENT VE9QQiB8IENTSVpFKTsKKwl0b3B0aW9ucy5jX2NmbGFnIHw9IChDUzggfCBDUkVBRCB8IENMT0NB TCk7CisJdG9wdGlvbnMuY19sZmxhZyB8PSBJQ0FOT047CisKKwljZm1ha2VyYXcoJnRvcHRpb25z KTsKKworCXJlcyA9IHRjc2V0YXR0cihkYXRhLT5zZW5zb3JfZmQsIFRDU0FOT1csICZ0b3B0aW9u cyk7CisJaWd0X2Fzc2VydF9sdGUoMCwgcmVzKTsKKworCXJlcyA9IHRjc2V0YXR0cihkYXRhLT5z ZW5zb3JfZmQsIFRDU0FGTFVTSCwgJnRvcHRpb25zKTsKKwlpZ3RfYXNzZXJ0X2x0ZSgwLCByZXMp OworfQorCisvKiBSZWFkcyBhIHN0cmluZyBmcm9tIHRoZSBzZW5zb3IuICovCitzdGF0aWMgdm9p ZCBnZXRfc2Vuc29yX3N0cihkYXRhX3QgKmRhdGEsIGNoYXIgKmRzdCwgaW50IGRzdF9ieXRlcykK K3sKKwljaGFyIGMgPSAwOworCWludCBpID0gMDsKKworCWlndF9yZXF1aXJlKGRhdGEtPnNlbnNv cl9mZCA+PSAwKTsKKwlpZ3Rfc2V0X3RpbWVvdXQoMywgIldhaXRpbmcgZm9yIHNlbnNvciByZWFk XG4iKTsKKworCWRzdF9ieXRlcyAtPSAxOworCisJd2hpbGUgKGMgIT0gJ1xuJyAmJiBpIDwgZHN0 X2J5dGVzKSB7CisJCWludCBuID0gcmVhZChkYXRhLT5zZW5zb3JfZmQsICZjLCAxKTsKKwkJaWd0 X2Fzc2VydF9sdGUoMCwgbik7CisKKwkJZHN0W2krK10gPSBjOworCX0KKworCWlndF9yZXNldF90 aW1lb3V0KCk7CisKKwlpZiAoZHN0X2J5dGVzID4gMCkgeworCQlkc3RbaV0gPSAwOworCX0KK30K KworLyogUmV0dXJucyB0aGUgY3VycmVudCBsdW1pbmFuY2UgcmVhZGluZyBmcm9tIHRoZSBzZW5z b3IgaW4gY2QvbV4yLiAqLworc3RhdGljIGZsb2F0IGdldF9zZW5zb3Jfbml0cyhkYXRhX3QgKmRh dGEpCit7CisJZmxvYXQgbml0cyA9IC0xLjBmOworCWNoYXIgYnVmWzMyXTsKKworCS8qIFNlbnNv ciBvcGVuaW5nIGlzIGRlZmVycmVkIHVudGlsIHdlIGFjdHVhbGx5IG5lZWQgaXQgLSBoZXJlLiAq LworCW9wZW5fc2Vuc29yKGRhdGEpOworCisJLyogRmx1c2ggb2xkIGRhdGEgZnJvbSB0aGUgYnVm ZmVyIGluIGNhc2UgaXQncyBiZWVuIGEgd2hpbGUuICovCisJaWd0X3JlcXVpcmUoZGF0YS0+c2Vu c29yX2ZkID49IDApOworCXRjZmx1c2goZGF0YS0+c2Vuc29yX2ZkLCBUQ0lPRkxVU0gpOworCisJ LyogUmVhZCB0d2ljZSBzbyB3ZSBnZXQgYSBjbGVhbiBsaW5lLiAqLworCWdldF9zZW5zb3Jfc3Ry KGRhdGEsIGJ1ZiwgQVJSQVlfU0laRShidWYpKTsKKwlnZXRfc2Vuc29yX3N0cihkYXRhLCBidWYs IEFSUkFZX1NJWkUoYnVmKSk7CisKKwlzc2NhbmYoYnVmLCAiJWYiLCAmbml0cyk7CisKKwlyZXR1 cm4gbml0czsKK30KKworLyogTG9ncyB0aGUgY3Vyc29yIHNlbnNvciBuaXRzLiAqLworc3RhdGlj IHZvaWQgbG9nX3NlbnNvcl9uaXRzKGRvdWJsZSBuaXRzKQoreworCWlndF9pbmZvKCJTZW5zb3I6 ICUuM2Ygbml0c1xuIiwgbml0cyk7Cit9CisKKy8qCisgKiBXYWl0cyBmb3IgdGhlIG1vbml0b3Ig dG8gbGlnaHQtdXAgdG8gYSBnaXZlbiB0aHJlc2hvbGQsIHVzZWZ1bCBmb3IKKyAqIHBvc3QtbW9k ZXNldCBtZWFzdXJlbWVudC4KKyAqLworc3RhdGljIHZvaWQgd2FpdF9mb3JfdGhyZXNob2xkKGRh dGFfdCAqZGF0YSwgZG91YmxlIHRocmVzaG9sZCkKK3sKKwkvKgorCSAqIElmIHdlIHJlYWQgdG9v IHF1aWNrIHRoZSBzZW5zb3IgbWlnaHQgc3RpbGwgYmUgbGl0IHVwLgorCSAqIEVhc3kgaGFjazog anVzdCB3YWl0IGEgc2Vjb25kLgorCSAqLworCXNsZWVwKDEpOworCisJLyogUG9sbCBzZW5zb3Ig dW50aWwgbGlnaHR1cC4gKi8KKwlpZ3Rfc2V0X3RpbWVvdXQoNSwgIldhaXRpbmcgZm9yIHNlbnNv ciByZWFkXG4iKTsKKworCWZvciAoOzspIHsKKwkJZG91YmxlIG5pdHMgPSBnZXRfc2Vuc29yX25p dHMoZGF0YSk7CisKKwkJaWYgKG5pdHMgPj0gdGhyZXNob2xkKQorCQkJYnJlYWs7CisJfQorCisJ aWd0X3Jlc2V0X3RpbWVvdXQoKTsKK30KKworLyogU2tpcHMgdGhlIHRlc3QgaWYgdGhlIG91dHB1 dCBpc24ndCBIRFIuICovCitzdGF0aWMgdm9pZCB0ZXN0X3JlcXVpcmVfaGRyKGRhdGFfdCAqZGF0 YSkKK3sKKwlpZ3RfcmVxdWlyZShpZ3Rfb3V0cHV0X2hhc19wcm9wKGRhdGEtPm91dHB1dCwKKwkJ CQkJSUdUX0NPTk5FQ1RPUl9IRFJfT1VUUFVUX01FVEFEQVRBKSk7Cit9CisKKy8qIEZpbGxzIHRo ZSBGQiB3aXRoIGEgc29saWQgY29sb3IgZ2l2ZW4gbWFwcGluZyB0byBhIGxpZ2h0IHZhbHVlIGlu IG5pdHMuICovCitzdGF0aWMgdm9pZCBkcmF3X2xpZ2h0KGlndF9mYl90ICpmYiwgZG91YmxlIG5p dHMpCit7CisJY2Fpcm9fdCAqY3I7CisJZG91YmxlIGwsIHY7CisJaW50IHgsIHksIHcsIGg7CisK KwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGZiLT5mZCwgZmIpOworCisJbCA9IG5pdHMgLyAxMDAw MC4wOworCXYgPSBjYWxjX3BxX2ludmVyc2UobCk7CisKKwkvKgorCSAqIERyYXcgYSB3aGl0ZSBy ZWN0IGluIHRoZSBib3R0b20gY2VudGVyIG9mIHRoZSBzY3JlZW4gZm9yIHRoZSBzZW5zb3IuCisJ ICogSXQncyBvbmx5IDEwJSBvZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgc2NyZWVuIHNp bmNlIG5vdCBldmVyeQorCSAqIG1vbml0b3IgaXMgY2FwYWJsZSBvZiBmdWxsIEhEUiBicmlnaHRu ZXNzIGZvciB0aGUgd2hvbGUgc2NyZWVuLgorCSAqLworCXcgPSBmYi0+d2lkdGggKiAwLjEwOwor CWggPSBmYi0+aGVpZ2h0ICogMC4xMDsKKwl4ID0gKGZiLT53aWR0aCAtIHcpIC8gMjsKKwl5ID0g KGZiLT5oZWlnaHQgLSBoKTsKKworCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgZmItPndpZHRo LCBmYi0+aGVpZ2h0LCAwLjAsIDAuMCwgMC4wKTsKKwlpZ3RfcGFpbnRfY29sb3IoY3IsIHgsIHks IHcsIGgsIHYsIHYsIHYpOworCisJaWd0X3B1dF9jYWlyb19jdHgoZmItPmZkLCBmYiwgY3IpOwor fQorCisvKiBGaWxscyB0aGUgRkIgd2l0aCBhIHRlc3QgSERSIHBhdHRlcm4uICovCitzdGF0aWMg dm9pZCBkcmF3X2hkcl9wYXR0ZXJuKGlndF9mYl90ICpmYikKK3sKKwljYWlyb190ICpjciA9IGln dF9nZXRfY2Fpcm9fY3R4KGZiLT5mZCwgZmIpOworCisJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAw LCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIDEuMCwgMS4wLCAxLjApOworCWlndF9wYWludF90ZXN0 X3BhdHRlcm4oY3IsIGZiLT53aWR0aCwgZmItPmhlaWdodCk7CisKKwlpZ3RfcHV0X2NhaXJvX2N0 eChmYi0+ZmQsIGZiLCBjcik7Cit9CisKKy8qCisgKiBWYWxpZGF0ZXMgc3dpdGNoaW5nIGJldHdl ZW4gZGlmZmVyZW50IGRpc3BsYXkgb3V0cHV0IGJwYyBtb2Rlcy4KKyAqIFRPRE86IEhvb2sgdXAg YSBkZWJ1Z2ZzIGVudHJ5IHRvIHZlcmlmeSBkcml2ZXIgYmVoYXZpb3IgYmV5b25kCisgKiBqdXN0 IGNoZWNraW5nIGlmIHRoZSBjb21taXRzIHN1Y2NlZWRlZC4KKyAqLworc3RhdGljIHZvaWQgdGVz dF9icGNfc3dpdGNoKGRhdGFfdCAqZGF0YSwgdWludDMyX3QgZmxhZ3MpCit7CisJaWd0X2Rpc3Bs YXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCByZWZfY3JjLCBuZXdf Y3JjOworCWlndF9mYl90IGFmYjsKKworCXRlc3RfaW5pdChkYXRhKTsKKworICAgICAgICAvKiAx MC1iaXQgZm9ybWF0cyBhcmUgc2xvdywgc28gbGltaXQgdGhlIHNpemUuICovCisgICAgICAgIGln dF9jcmVhdGVfZmIoZGF0YS0+ZmQsIDUxMiwgNTEyLCBEUk1fRk9STUFUX1hSR0IyMTAxMDEwLCAw LCAmYWZiKTsKKwlkcmF3X2hkcl9wYXR0ZXJuKCZhZmIpOworCisgICAgICAgIC8qIFN0YXJ0IGlu IDhicGMuICovCisJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmltYXJ5LCAmYWZiKTsKKwlpZ3Rf cGxhbmVfc2V0X3NpemUoZGF0YS0+cHJpbWFyeSwgZGF0YS0+dywgZGF0YS0+aCk7CisJaWd0X291 dHB1dF9zZXRfcHJvcF92YWx1ZShkYXRhLT5vdXRwdXQsIElHVF9DT05ORUNUT1JfTUFYX0JQQywg OCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNf QUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJYXNzZXJ0X291dHB1dF9icGMoZGF0YSwgOCk7CisKKyAg ICAgICAgLyogU3dpdGNoIHRvIDEwYnBjLiAqLworICAgICAgICBpZ3Rfb3V0cHV0X3NldF9wcm9w X3ZhbHVlKGRhdGEtPm91dHB1dCwgSUdUX0NPTk5FQ1RPUl9NQVhfQlBDLCAxMCk7CisJaWd0X2Rp c3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNF VCwgTlVMTCk7CisJYXNzZXJ0X291dHB1dF9icGMoZGF0YSwgMTApOworCisJLyogVmVyaWZ5IHRo YXQgdGhlIENSQyBhcmUgZXF1YWwgYWZ0ZXIgRFBNUyBvciBzdXNwZW5kLiAqLworCWlndF9waXBl X2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMpOworCXRlc3RfY3ljbGVf ZmxhZ3MoZGF0YSwgZmxhZ3MpOworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBl X2NyYywgJm5ld19jcmMpOworCisgICAgICAgIC8qIERyb3AgYmFjayB0byA4YnBjLiAqLworCWln dF9vdXRwdXRfc2V0X3Byb3BfdmFsdWUoZGF0YS0+b3V0cHV0LCBJR1RfQ09OTkVDVE9SX01BWF9C UEMsIDgpOworCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwgRFJNX01PREVfQVRP TUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCWFzc2VydF9vdXRwdXRfYnBjKGRhdGEsIDgpOwor CisJLyogQ1JDIGNhcHR1cmUgaXMgY2xhbXBlZCB0byA4YnBjLCBzbyBjYXB0dXJlIHNob3VsZCBt YXRjaC4gKi8KKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyYywgJm5ld19jcmMpOworCisJ dGVzdF9maW5pKGRhdGEpOworICAgICAgICBpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmZkLCAmYWZiKTsK K30KKworLyogVGVzdHMgc3dhcHBpbmcgc3RhdGljIEhEUiBtZXRhZGF0YS4gKi8KK3N0YXRpYyB2 b2lkIHRlc3Rfc3RhdGljX3N3YXAoZGF0YV90ICpkYXRhKQoreworCWlndF9kaXNwbGF5X3QgKmRp c3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3JjX3QgcmVmX2NyYywgbmV3X2NyYzsKKwlp Z3RfZmJfdCBhZmI7CisJc3RydWN0IGhkcl9vdXRwdXRfbWV0YWRhdGEgaGRyOworCisJdGVzdF9p bml0KGRhdGEpOworCXRlc3RfcmVxdWlyZV9oZHIoZGF0YSk7CisKKwkvKiAxMC1iaXQgZm9ybWF0 cyBhcmUgc2xvdywgc28gbGltaXQgdGhlIHNpemUuICovCisJaWd0X2NyZWF0ZV9mYihkYXRhLT5m ZCwgNTEyLCA1MTIsIERSTV9GT1JNQVRfWFJHQjIxMDEwMTAsIDAsICZhZmIpOworCWRyYXdfaGRy X3BhdHRlcm4oJmFmYik7CisKKwkvKiBTdGFydCBpbiBTRFIuICovCisJaWd0X3BsYW5lX3NldF9m YihkYXRhLT5wcmltYXJ5LCAmYWZiKTsKKwlpZ3RfcGxhbmVfc2V0X3NpemUoZGF0YS0+cHJpbWFy eSwgZGF0YS0+dywgZGF0YS0+aCk7CisJaWd0X291dHB1dF9zZXRfcHJvcF92YWx1ZShkYXRhLT5v dXRwdXQsIElHVF9DT05ORUNUT1JfTUFYX0JQQywgOCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0X2F0 b21pYyhkaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJYXNz ZXJ0X291dHB1dF9icGMoZGF0YSwgOCk7CisKKwkvKiBFbnRlciBIRFIsIGEgbW9kZXNldCBpcyBh bGxvd2VkIGhlcmUuICovCisJZmlsbF9oZHJfb3V0cHV0X21ldGFkYXRhX3N0MjA0OCgmaGRyKTsK KwlzZXRfaGRyX291dHB1dF9tZXRhZGF0YShkYXRhLCAmaGRyKTsKKwlpZ3Rfb3V0cHV0X3NldF9w cm9wX3ZhbHVlKGRhdGEtPm91dHB1dCwgSUdUX0NPTk5FQ1RPUl9NQVhfQlBDLCAxMCk7CisJaWd0 X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9E RVNFVCwgTlVMTCk7CisJYXNzZXJ0X291dHB1dF9icGMoZGF0YSwgMTApOworCisJaWd0X3BpcGVf Y3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7CisKKwkvKiBDaGFuZ2Ug dGhlIG1hc3RlcmluZyBpbmZvcm1hdGlvbiwgbm8gbW9kZXNldCBhbGxvd2VkLiAqLworCWhkci5o ZG1pX21ldGFkYXRhX3R5cGUxLm1heF9kaXNwbGF5X21hc3RlcmluZ19sdW1pbmFuY2UgPSAyMDA7 CisJaGRyLmhkbWlfbWV0YWRhdGFfdHlwZTEubWF4X2ZhbGwgPSAyMDA7CisJaGRyLmhkbWlfbWV0 YWRhdGFfdHlwZTEubWF4X2NsbCA9IDEwMDsKKworCXNldF9oZHJfb3V0cHV0X21ldGFkYXRhKGRh dGEsICZoZHIpOworCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwgMCwgTlVMTCk7 CisKKwkvKiBFbnRlciBTRFIgdmlhIG1ldGFkYXRhLCBubyBtb2Rlc2V0IGFsbG93ZWQuICovCisJ ZmlsbF9oZHJfb3V0cHV0X21ldGFkYXRhX3NkcigmaGRyKTsKKwlzZXRfaGRyX291dHB1dF9tZXRh ZGF0YShkYXRhLCAmaGRyKTsKKwlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKGRpc3BsYXksIDAs IE5VTEwpOworCisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmbmV3 X2NyYyk7CisKKwkvKiBFeGl0IFNEUiBhbmQgZW50ZXIgOGJwYywgY2xlYW51cC4gKi8KKwlzZXRf aGRyX291dHB1dF9tZXRhZGF0YShkYXRhLCBOVUxMKTsKKwlpZ3Rfb3V0cHV0X3NldF9wcm9wX3Zh bHVlKGRhdGEtPm91dHB1dCwgSUdUX0NPTk5FQ1RPUl9NQVhfQlBDLCA4KTsKKwlpZ3RfZGlzcGxh eV9jb21taXRfYXRvbWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBO VUxMKTsKKwlhc3NlcnRfb3V0cHV0X2JwYyhkYXRhLCA4KTsKKworCS8qIFZlcmlmeSB0aGF0IHRo ZSBDUkMgZGlkbid0IGNoYW5nZSB3aGlsZSBjeWNsaW5nIG1ldGFkYXRhLiAqLworCWlndF9hc3Nl cnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmbmV3X2NyYyk7CisKKwl0ZXN0X2ZpbmkoZGF0YSk7CisJ aWd0X3JlbW92ZV9mYihkYXRhLT5mZCwgJmFmYik7Cit9CisKKy8qCisgKiBUZXN0cyB0aGF0IHNl dHRpbmcgdGhlIHN0YXRpYyBtZXRhZGF0YSBhY3R1YWxseSBlbnRlcnMgSERSIG1vZGUuCisgKgor ICogTm90ZTogVGhpcyB0ZXN0IGlzIGRpc3BsYXkgc3BlY2lmaWMgaW4gdGhlIHNlbnNlIHRoYXQg aXQgcmVxdXJpZXMKKyAqIGEgZGlzcGxheSB0aGF0IGlzIGNhcGFibGUgb2YgZ29pbmcgYWJvdmUg U0RSIGJyaWdodG5lc3MgbGV2ZWxzLgorICogTW9zdCBIRFI0MDAgb3IgaGlnaGVyIGNlcnRpZmll ZCBkaXNwbGF5cyBzaG91bGQgYmUgY2FwYWJsZSBvZiB0aGlzLgorICoKKyAqIFNvbWUgZGlzcGxh eXMgbWF5IHJlcXVpcmUgZmlyc3QgbGltaXRpbmcgdGhlIG91dHB1dCBicmlnaHRuZXNzCisgKiBp biB0aGUgT1NEIGZvciB0aGlzIHRvIHdvcmsuCisgKgorICogUmVxdWlyZXMgdGhlIGx1bWluYW5j ZSBzZW5zb3IgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHRlc3QgbWFjaGluZS4KKyAqLworc3RhdGlj IHZvaWQgdGVzdF9zdGF0aWNfb3V0cHV0KGRhdGFfdCAqZGF0YSkKK3sKKwlpZ3RfZGlzcGxheV90 ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2ZiX3QgYWZiOworCXN0cnVjdCBoZHJf b3V0cHV0X21ldGFkYXRhIGhkcjsKKwlkb3VibGUgbGlnaHR1cCA9IDEwMC4wOworCWRvdWJsZSB0 aHJlc2hvbGQgPSAxNS4wOworCWRvdWJsZSBuaXRzX3NkcjAsIG5pdHNfc2RyMSwgbml0c19zZHIy LCBuaXRzX2hkcjsKKworCXRlc3RfaW5pdChkYXRhKTsKKwl0ZXN0X3JlcXVpcmVfaGRyKGRhdGEp OworCisJaWd0X2NyZWF0ZV9mYihkYXRhLT5mZCwgZGF0YS0+dywgZGF0YS0+aCwgRFJNX0ZPUk1B VF9YUkdCMjEwMTAxMCwgMCwgJmFmYik7CisJZHJhd19saWdodCgmYWZiLCAxMDAwMC4wKTsKKwor CWlndF9pbmZvKCJUZXN0IFNEUiwgOGJwY1xuIik7CisJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5w cmltYXJ5LCAmYWZiKTsKKwlpZ3RfcGxhbmVfc2V0X3NpemUoZGF0YS0+cHJpbWFyeSwgZGF0YS0+ dywgZGF0YS0+aCk7CisJaWd0X291dHB1dF9zZXRfcHJvcF92YWx1ZShkYXRhLT5vdXRwdXQsIElH VF9DT05ORUNUT1JfTUFYX0JQQywgOCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNw bGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJYXNzZXJ0X291dHB1 dF9icGMoZGF0YSwgOCk7CisKKwl3YWl0X2Zvcl90aHJlc2hvbGQoZGF0YSwgbGlnaHR1cCk7CisJ bml0c19zZHIwID0gZ2V0X3NlbnNvcl9uaXRzKGRhdGEpOworCWxvZ19zZW5zb3Jfbml0cyhuaXRz X3NkcjApOworCisJaWd0X2luZm8oIlRlc3QgU0RSLCAxMGJwY1xuIik7CisJaWd0X291dHB1dF9z ZXRfcHJvcF92YWx1ZShkYXRhLT5vdXRwdXQsIElHVF9DT05ORUNUT1JfTUFYX0JQQywgMTApOwor CWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9X X01PREVTRVQsIE5VTEwpOworCWFzc2VydF9vdXRwdXRfYnBjKGRhdGEsIDEwKTsKKworCXdhaXRf Zm9yX3RocmVzaG9sZChkYXRhLCBsaWdodHVwKTsKKwluaXRzX3NkcjEgPSBnZXRfc2Vuc29yX25p dHMoZGF0YSk7CisJbG9nX3NlbnNvcl9uaXRzKG5pdHNfc2RyMSk7CisKKwlpZ3RfaW5mbygiVGVz dCBIRFIsIDEwYnBjXG4iKTsKKwlmaWxsX2hkcl9vdXRwdXRfbWV0YWRhdGFfc3QyMDQ4KCZoZHIp OworCXNldF9oZHJfb3V0cHV0X21ldGFkYXRhKGRhdGEsICZoZHIpOworCWlndF9vdXRwdXRfc2V0 X3Byb3BfdmFsdWUoZGF0YS0+b3V0cHV0LCBJR1RfQ09OTkVDVE9SX01BWF9CUEMsIDEwKTsKKwlp Z3RfZGlzcGxheV9jb21taXRfYXRvbWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExPV19N T0RFU0VULCBOVUxMKTsKKworCXdhaXRfZm9yX3RocmVzaG9sZChkYXRhLCBsaWdodHVwKTsKKwlu aXRzX2hkciA9IGdldF9zZW5zb3Jfbml0cyhkYXRhKTsKKwlsb2dfc2Vuc29yX25pdHMobml0c19o ZHIpOworCisJaWd0X2luZm8oIkV4aXQgSERSIGludG8gU0RSLCA4YnBjXG4iKTsKKwlzZXRfaGRy X291dHB1dF9tZXRhZGF0YShkYXRhLCBOVUxMKTsKKwlpZ3Rfb3V0cHV0X3NldF9wcm9wX3ZhbHVl KGRhdGEtPm91dHB1dCwgSUdUX0NPTk5FQ1RPUl9NQVhfQlBDLCA4KTsKKwlpZ3RfZGlzcGxheV9j b21taXRfYXRvbWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxM KTsKKwlhc3NlcnRfb3V0cHV0X2JwYyhkYXRhLCA4KTsKKworCXdhaXRfZm9yX3RocmVzaG9sZChk YXRhLCBsaWdodHVwKTsKKwluaXRzX3NkcjIgPSBnZXRfc2Vuc29yX25pdHMoZGF0YSk7CisJbG9n X3NlbnNvcl9uaXRzKG5pdHNfc2RyMik7CisKKwkvKiBWZXJpZnkgdGhhdCBhbGwgbml0IHZhbHVl cyB3ZXJlIGFzIGV4cGVjdGVkLiAqLworCWFzc2VydF9uaXRzX2VxdWFsKG5pdHNfc2RyMCwgbml0 c19zZHIxLCB0aHJlc2hvbGQpOworCWFzc2VydF9uaXRzX2VxdWFsKG5pdHNfc2RyMCwgbml0c19z ZHIyLCB0aHJlc2hvbGQpOworCisJaWd0X2Fzc2VydF9mKG5pdHNfaGRyIC0gbml0c19zZHIwID4g dGhyZXNob2xkICogMi4wLAorCQkgICAgICJObyBtZWFzdXJhYmxlIGRpZmZlcmVuY2UgYmV0d2Vl biBTRFIgYW5kIEhEUiBsdW1pbmFuY2U6ICIKKwkJICAgICAidGhyZXNob2xkPSUuMWYgYWN0dWFs PSUuMWZcbiIsCisJCSAgICAgdGhyZXNob2xkICogMi4wLCBuaXRzX2hkciAtIG5pdHNfc2RyMCk7 CisKKwl0ZXN0X2ZpbmkoZGF0YSk7CisJaWd0X3JlbW92ZV9mYihkYXRhLT5mZCwgJmFmYik7Cit9 CisKKy8qIFRlc3RzIGVudGVyaW5nIGFuZCBleGl0aW5nIEhEUiBtb2RlLiAqLworc3RhdGljIHZv aWQgdGVzdF9zdGF0aWNfdG9nZ2xlKGRhdGFfdCAqZGF0YSwgdWludDMyX3QgZmxhZ3MpCit7CisJ aWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCByZWZf Y3JjLCBuZXdfY3JjOworCWlndF9mYl90IGFmYjsKKwlzdHJ1Y3QgaGRyX291dHB1dF9tZXRhZGF0 YSBoZHI7CisKKwl0ZXN0X2luaXQoZGF0YSk7CisJdGVzdF9yZXF1aXJlX2hkcihkYXRhKTsKKwor ICAgICAgICAvKiAxMC1iaXQgZm9ybWF0cyBhcmUgc2xvdywgc28gbGltaXQgdGhlIHNpemUuICov CisJaWd0X2NyZWF0ZV9mYihkYXRhLT5mZCwgNTEyLCA1MTIsIERSTV9GT1JNQVRfWFJHQjIxMDEw MTAsIDAsICZhZmIpOworCWRyYXdfaGRyX3BhdHRlcm4oJmFmYik7CisKKwlmaWxsX2hkcl9vdXRw dXRfbWV0YWRhdGFfc3QyMDQ4KCZoZHIpOworCisgICAgICAgIC8qIFN0YXJ0IHdpdGggbm8gbWV0 YWRhdGEuICovCisJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmltYXJ5LCAmYWZiKTsKKwlpZ3Rf cGxhbmVfc2V0X3NpemUoZGF0YS0+cHJpbWFyeSwgZGF0YS0+dywgZGF0YS0+aCk7CisJc2V0X2hk cl9vdXRwdXRfbWV0YWRhdGEoZGF0YSwgTlVMTCk7CisJaWd0X291dHB1dF9zZXRfcHJvcF92YWx1 ZShkYXRhLT5vdXRwdXQsIElHVF9DT05ORUNUT1JfTUFYX0JQQywgOCk7CisJaWd0X2Rpc3BsYXlf Y29tbWl0X2F0b21pYyhkaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVM TCk7CisJYXNzZXJ0X291dHB1dF9icGMoZGF0YSwgOCk7CisKKyAgICAgICAgLyogQXBwbHkgSERS IG1ldGFkYXRhIGFuZCAxMGJwYy4gV2UgZXhwZWN0IGEgbW9kZXNldCBmb3IgZW50ZXJpbmcuICov CisJc2V0X2hkcl9vdXRwdXRfbWV0YWRhdGEoZGF0YSwgJmhkcik7CisgICAgICAgIGlndF9vdXRw dXRfc2V0X3Byb3BfdmFsdWUoZGF0YS0+b3V0cHV0LCBJR1RfQ09OTkVDVE9SX01BWF9CUEMsIDEw KTsKKwlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19B TExPV19NT0RFU0VULCBOVUxMKTsKKwlhc3NlcnRfb3V0cHV0X2JwYyhkYXRhLCAxMCk7CisKKwkv KiBWZXJpZnkgdGhhdCB0aGUgQ1JDIGFyZSBlcXVhbCBhZnRlciBEUE1TIG9yIHN1c3BlbmQuICov CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7CisJ dGVzdF9jeWNsZV9mbGFncyhkYXRhLCBmbGFncyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3Jj KGRhdGEtPnBpcGVfY3JjLCAmbmV3X2NyYyk7CisKKyAgICAgICAgLyogRGlzYWJsZSBIRFIgbWV0 YWRhdGEgYW5kIGRyb3AgYmFjayB0byA4YnBjLiBXZSBleHBlY3QgYSBtb2Rlc2V0IGZvciBleGl0 aW5nLiAqLworCXNldF9oZHJfb3V0cHV0X21ldGFkYXRhKGRhdGEsIE5VTEwpOworCWlndF9vdXRw dXRfc2V0X3Byb3BfdmFsdWUoZGF0YS0+b3V0cHV0LCBJR1RfQ09OTkVDVE9SX01BWF9CUEMsIDgp OworCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FM TE9XX01PREVTRVQsIE5VTEwpOworCWFzc2VydF9vdXRwdXRfYnBjKGRhdGEsIDgpOworCisJaWd0 X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmMsICZuZXdfY3JjKTsKKworCXRlc3RfZmluaShkYXRh KTsKKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmZkLCAmYWZiKTsKK30KKworaWd0X21haW4KK3sKKwlk YXRhX3QgZGF0YTsKKworCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKKworCW1lbXNldCgmZGF0 YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKworCWlndF9maXh0dXJlCisJeworCQlkYXRhLmZkID0gZHJt X29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfQU1ER1BVKTsKKworCQlrbXN0ZXN0X3NldF92dF9n cmFwaGljc19tb2RlKCk7CisKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZSgmZGF0YS5kaXNwbGF5LCBk YXRhLmZkKTsKKwkJaWd0X3JlcXVpcmUoZGF0YS5kaXNwbGF5LmlzX2F0b21pYyk7CisJCWlndF9k aXNwbGF5X3JlcXVpcmVfb3V0cHV0KCZkYXRhLmRpc3BsYXkpOworCX0KKworCWlndF9zdWJ0ZXN0 KCJicGMtc3dpdGNoIikgdGVzdF9icGNfc3dpdGNoKCZkYXRhLCAwKTsKKwlpZ3Rfc3VidGVzdCgi YnBjLXN3aXRjaC1kcG1zIikgdGVzdF9icGNfc3dpdGNoKCZkYXRhLCBURVNUX0RQTVMpOworCWln dF9zdWJ0ZXN0KCJicGMtc3dpdGNoLXN1c3BlbmQiKSB0ZXN0X2JwY19zd2l0Y2goJmRhdGEsIFRF U1RfU1VTUEVORCk7CisKKwlpZ3Rfc3VidGVzdCgic3RhdGljLW91dHB1dCIpIHRlc3Rfc3RhdGlj X291dHB1dCgmZGF0YSk7CisJaWd0X3N1YnRlc3QoInN0YXRpYy1zd2FwIikgdGVzdF9zdGF0aWNf c3dhcCgmZGF0YSk7CisKKwlpZ3Rfc3VidGVzdCgic3RhdGljLXRvZ2dsZSIpIHRlc3Rfc3RhdGlj X3RvZ2dsZSgmZGF0YSwgMCk7CisJaWd0X3N1YnRlc3QoInN0YXRpYy10b2dnbGUtZHBtcyIpIHRl c3Rfc3RhdGljX3RvZ2dsZSgmZGF0YSwgVEVTVF9EUE1TKTsKKwlpZ3Rfc3VidGVzdCgic3RhdGlj LXRvZ2dsZS1zdXNwZW5kIikKKwkJdGVzdF9zdGF0aWNfdG9nZ2xlKCZkYXRhLCBURVNUX1NVU1BF TkQpOworCisJaWd0X2ZpeHR1cmUKKwl7CisJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxh eSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvYW1kZ3B1L21lc29uLmJ1aWxkIGIvdGVzdHMv YW1kZ3B1L21lc29uLmJ1aWxkCmluZGV4IGI3OTgyMjkxLi42YzZiN2ZlYiAxMDA2NDQKLS0tIGEv dGVzdHMvYW1kZ3B1L21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL2FtZGdwdS9tZXNvbi5idWlsZApA QCAtNyw2ICs3LDcgQEAgaWYgbGliZHJtX2FtZGdwdS5mb3VuZCgpCiAJCQkgICdhbWRfYnlwYXNz JywKIAkJCSAgJ2FtZF9jb2xvcicsCiAJCQkgICdhbWRfY3Nfbm9wJywKKwkJCSAgJ2FtZF9oZHIn LAogCQkJICAnYW1kX3ByaW1lJywKIAkJCV0KIAlhbWRncHVfZGVwcyArPSBsaWJkcm1fYW1kZ3B1 Ci0tIAoyLjE3LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==