From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-eopbgr740042.outbound.protection.outlook.com [40.107.74.42]) by gabe.freedesktop.org (Postfix) with ESMTPS id BB05F89C27 for ; Wed, 5 Jun 2019 14:44:44 +0000 (UTC) From: Nicholas Kazlauskas Date: Wed, 5 Jun 2019 10:44:32 -0400 Message-ID: <20190605144432.12552-4-nicholas.kazlauskas@amd.com> In-Reply-To: <20190605144432.12552-1-nicholas.kazlauskas@amd.com> References: <20190605144432.12552-1-nicholas.kazlauskas@amd.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 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 aW11bSBicGMuCgpDYzogSGFycnkgV2VudGxhbmQgPGhhcnJ5LndlbnRsYW5kQGFtZC5jb20+CkNj OiBMZW8gTGkgPHN1bnBlbmcubGlAYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTogTmljaG9sYXMgS2F6 bGF1c2thcyA8bmljaG9sYXMua2F6bGF1c2thc0BhbWQuY29tPgotLS0KIHRlc3RzL01ha2VmaWxl LnNvdXJjZXMgICB8ICAgMSArCiB0ZXN0cy9hbWRncHUvYW1kX2hkci5jICAgfCA3MDMgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9hbWRncHUvbWVzb24uYnVp bGQgfCAgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCA3MDUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHRlc3RzL2FtZGdwdS9hbWRfaGRyLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCAwMjdlZDgyZi4uMzhl YWU1OGQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFr ZWZpbGUuc291cmNlcwpAQCAtOCw2ICs4LDcgQEAgQU1ER1BVX1RFU1RTID0gXAogCWFtZGdwdS9h bWRfYmFzaWMgXAogCWFtZGdwdS9hbWRfY29sb3IgXAogCWFtZGdwdS9hbWRfY3Nfbm9wIFwKKwlh bWRncHUvYW1kX2hkciBcCiAJYW1kZ3B1L2FtZF9wcmltZSBcCiAJYW1kZ3B1L2FtZF9hYm0gXAog CSQoTlVMTCkKZGlmZiAtLWdpdCBhL3Rlc3RzL2FtZGdwdS9hbWRfaGRyLmMgYi90ZXN0cy9hbWRn cHUvYW1kX2hkci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi41NmVlYTU0 NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2FtZGdwdS9hbWRfaGRyLmMKQEAgLTAsMCArMSw3 MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMu CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hU IEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPGZjbnRs Lmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisvKiBEUk0g SERSIGRlZmluaXRpb25zLiBOb3QgaW4gdGhlIFVBUEkgaGVhZGVyLCB1bmZvcnR1bmF0ZWx5LiAq LworCitlbnVtIGhkbWlfbWV0YWRhdGFfdHlwZSB7CisJSERNSV9TVEFUSUNfTUVUQURBVEFfVFlQ RTEgPSAxLAorfTsKKworZW51bSBoZG1pX2VvdGYgeworCUhETUlfRU9URl9UUkFESVRJT05BTF9H QU1NQV9TRFIsCisJSERNSV9FT1RGX1RSQURJVElPTkFMX0dBTU1BX0hEUiwKKwlIRE1JX0VPVEZf U01QVEVfU1QyMDg0LAorfTsKKworLyogVGVzdCBmbGFncy4gKi8KK2VudW0geworCVRFU1RfTk9O RSA9IDAsCisJVEVTVF9EUE1TID0gMSA8PCAwLAorCVRFU1RfU1VTUEVORCA9IDEgPDwgMSwKK307 CisKKy8qIEJQQyBjb25uZWN0b3Igc3RhdGUuICovCit0eXBlZGVmIHN0cnVjdCBvdXRwdXRfYnBj IHsKKwl1bnNpZ25lZCBpbnQgY3VycmVudDsKKwl1bnNpZ25lZCBpbnQgbWF4aW11bTsKK30gb3V0 cHV0X2JwY190OworCisvKiBDb21tb24gdGVzdCBkYXRhLiAqLwordHlwZWRlZiBzdHJ1Y3QgZGF0 YSB7CisJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OworCWlndF9wbGFuZV90ICpwcmltYXJ5OworCWln dF9vdXRwdXRfdCAqb3V0cHV0OworCWlndF9waXBlX3QgKnBpcGU7CisJaWd0X3BpcGVfY3JjX3Qg KnBpcGVfY3JjOworCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKKwllbnVtIHBpcGUgcGlwZV9pZDsK KwlpbnQgZmQ7CisJaW50IHNlbnNvcl9mZDsKKwlpbnQgdzsKKwlpbnQgaDsKK30gZGF0YV90Owor CisvKiBDb252ZXJ0cyBhIGRvdWJsZSB0byA4NjEtRyBzcGVjIEZQIGZvcm1hdC4gKi8KK3N0YXRp YyB1aW50MTZfdCBjYWxjX2hkcl9mbG9hdChkb3VibGUgdmFsKQoreworCXJldHVybiAodWludDE2 X3QpKHZhbCAqIDUwMDAwLjApOworfQorCisvKiBQUSBJbnZlcnNlLCBMIG5vcm1hbGl6ZWQgbHVt aW5hbmNlIHRvIHNpZ25hbCB2YWx1ZSBWLiAqLworc3RhdGljIGRvdWJsZSBjYWxjX3BxX2ludmVy c2UoZG91YmxlIGwpCit7CisJZG91YmxlIGMxID0gMC44MzU5Mzc1OworCWRvdWJsZSBjMiA9IDE4 Ljg1MTU2MjU7CisJZG91YmxlIGMzID0gMTguNjg3NTsKKwlkb3VibGUgbTEgPSAwLjE1OTMwMTc1 NzgxMjU7CisJZG91YmxlIG0yID0gNzguODQzNzU7CisJZG91YmxlIGxtID0gcG93KGwsIG0xKTsK KworCXJldHVybiBwb3coKGMxICsgYzIgKiBsbSkgLyAoMS4wICsgYzMgKiBsbSksIG0yKTsKK30K KworLyogQXNzZXJ0cyB0aGF0IHR3byBnaXZlbiB2YWx1ZXMgaW4gbml0cyBhcmUgZXF1YWwgd2l0 aGluIGEgZ2l2ZW4gdGhyZXNob2xkLiAqLworc3RhdGljIHZvaWQgYXNzZXJ0X25pdHNfZXF1YWwo ZG91YmxlIG4wLCBkb3VibGUgbjEsIGRvdWJsZSB0aHJlc2hvbGQpCit7CisJZG91YmxlIGRpZmYg PSBmYWJzKG4wIC0gbjEpOworCisJaWd0X2Fzc2VydF9mKGRpZmYgPD0gdGhyZXNob2xkLAorCQkg ICAgICJOaXRzIG5vdCBpbiB0aHJlc2hvbGQ6IHwgJS4zZiAtICUuM2YgfCA+ICUuM2ZcbiIsCisJ CSAgICAgbjAsIG4xLCB0aHJlc2hvbGQpOworfQorCisvKiBGaWxscyBzb21lIHRlc3QgdmFsdWVz IGZvciBIRFIgbWV0YWRhdGEgdGFyZ2V0aW5nIFNEUi4gKi8KK3N0YXRpYyB2b2lkIGZpbGxfaGRy X291dHB1dF9tZXRhZGF0YV9zZHIoc3RydWN0IGhkcl9vdXRwdXRfbWV0YWRhdGEgKm1ldGEpCit7 CisJbWVtc2V0KG1ldGEsIDAsIHNpemVvZigqbWV0YSkpOworCisJbWV0YS0+bWV0YWRhdGFfdHlw ZSA9IEhETUlfU1RBVElDX01FVEFEQVRBX1RZUEUxOworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlw ZTEuZW90ZiA9IEhETUlfRU9URl9UUkFESVRJT05BTF9HQU1NQV9TRFI7CisKKwkvKiBSZWMuIDcw OSAqLworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEuZGlzcGxheV9wcmltYXJpZXNbMF0ueCA9 CisJCWNhbGNfaGRyX2Zsb2F0KDAuNjQwKTsgLyogUmVkICovCisJbWV0YS0+aGRtaV9tZXRhZGF0 YV90eXBlMS5kaXNwbGF5X3ByaW1hcmllc1swXS55ID0KKwkJY2FsY19oZHJfZmxvYXQoMC4zMzAp OworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEuZGlzcGxheV9wcmltYXJpZXNbMV0ueCA9CisJ CWNhbGNfaGRyX2Zsb2F0KDAuMzAwKTsgLyogR3JlZW4gKi8KKwltZXRhLT5oZG1pX21ldGFkYXRh X3R5cGUxLmRpc3BsYXlfcHJpbWFyaWVzWzFdLnkgPQorCQljYWxjX2hkcl9mbG9hdCgwLjYwMCk7 CisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS5kaXNwbGF5X3ByaW1hcmllc1syXS54ID0KKwkJ Y2FsY19oZHJfZmxvYXQoMC4xNTApOyAvKiBCbHVlICovCisJbWV0YS0+aGRtaV9tZXRhZGF0YV90 eXBlMS5kaXNwbGF5X3ByaW1hcmllc1syXS55ID0KKwkJY2FsY19oZHJfZmxvYXQoMC4wMDYpOwor CW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEud2hpdGVfcG9pbnQueCA9IGNhbGNfaGRyX2Zsb2F0 KDAuMzEyNyk7CisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS53aGl0ZV9wb2ludC55ID0gY2Fs Y19oZHJfZmxvYXQoMC4zMjkwKTsKKworCW1ldGEtPmhkbWlfbWV0YWRhdGFfdHlwZTEubWF4X2Rp c3BsYXlfbWFzdGVyaW5nX2x1bWluYW5jZSA9IDA7CisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBl MS5taW5fZGlzcGxheV9tYXN0ZXJpbmdfbHVtaW5hbmNlID0gMDsKKwltZXRhLT5oZG1pX21ldGFk YXRhX3R5cGUxLm1heF9mYWxsID0gMDsKKwltZXRhLT5oZG1pX21ldGFkYXRhX3R5cGUxLm1heF9j bGwgPSAwOworfQorCisvKiBGaWxscyBzb21lIHRlc3QgdmFsdWVzIGZvciBTVDIwNDggSERSIG91 dHB1dCBtZXRhZGF0YS4KKyAqCisgKiBOb3RlOiB0aGVyZSBpc24ndCByZWFsbHkgYSBzdGFuZGFy ZCBmb3Igd2hhdCB0aGUgbWV0YWRhdGEgaXMgc3VwcG9zZWQKKyAqIHRvIGRvIG9uIHRoZSBkaXNw bGF5IHNpZGUgb2YgdGhpbmdzLiBUaGUgZGlzcGxheSBpcyBmcmVlIHRvIGlnbm9yZSBpdAorICog YW5kIGNsaXAgdGhlIG91dHB1dCwgdXNlIGl0IHRvIGhlbHAgdG9uZW1hcCB0byB0aGUgY29udGVu dCByYW5nZSwKKyAqIG9yIGRvIGFueXRoaW5nIHRoZXkgd2FudCwgcmVhbGx5LgorICovCitzdGF0 aWMgdm9pZCBmaWxsX2hkcl9vdXRwdXRfbWV0YWRhdGFfc3QyMDQ4KHN0cnVjdCBoZHJfb3V0cHV0 X21ldGFkYXRhICptZXRhKQoreworCW1lbXNldChtZXRhLCAwLCBzaXplb2YoKm1ldGEpKTsKKwor CW1ldGEtPm1ldGFkYXRhX3R5cGUgPSBIRE1JX1NUQVRJQ19NRVRBREFUQV9UWVBFMTsKKwltZXRh LT5oZG1pX21ldGFkYXRhX3R5cGUxLmVvdGYgPSBIRE1JX0VPVEZfU01QVEVfU1QyMDg0OworCisJ LyogUmVjLiAyMDIwICovCisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS5kaXNwbGF5X3ByaW1h cmllc1swXS54ID0KKwkJY2FsY19oZHJfZmxvYXQoMC43MDgpOyAvKiBSZWQgKi8KKwltZXRhLT5o ZG1pX21ldGFkYXRhX3R5cGUxLmRpc3BsYXlfcHJpbWFyaWVzWzBdLnkgPQorCQljYWxjX2hkcl9m bG9hdCgwLjI5Mik7CisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS5kaXNwbGF5X3ByaW1hcmll c1sxXS54ID0KKwkJY2FsY19oZHJfZmxvYXQoMC4xNzApOyAvKiBHcmVlbiAqLworCW1ldGEtPmhk bWlfbWV0YWRhdGFfdHlwZTEuZGlzcGxheV9wcmltYXJpZXNbMV0ueSA9CisJCWNhbGNfaGRyX2Zs b2F0KDAuNzk3KTsKKwltZXRhLT5oZG1pX21ldGFkYXRhX3R5cGUxLmRpc3BsYXlfcHJpbWFyaWVz WzJdLnggPQorCQljYWxjX2hkcl9mbG9hdCgwLjEzMSk7IC8qIEJsdWUgKi8KKwltZXRhLT5oZG1p X21ldGFkYXRhX3R5cGUxLmRpc3BsYXlfcHJpbWFyaWVzWzJdLnkgPQorCQljYWxjX2hkcl9mbG9h dCgwLjA0Nik7CisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS53aGl0ZV9wb2ludC54ID0gY2Fs Y19oZHJfZmxvYXQoMC4zMTI3KTsKKwltZXRhLT5oZG1pX21ldGFkYXRhX3R5cGUxLndoaXRlX3Bv aW50LnkgPSBjYWxjX2hkcl9mbG9hdCgwLjMyOTApOworCisJbWV0YS0+aGRtaV9tZXRhZGF0YV90 eXBlMS5tYXhfZGlzcGxheV9tYXN0ZXJpbmdfbHVtaW5hbmNlID0KKwkJMTAwMDsgLyogMTAwMCBu aXRzICovCisJbWV0YS0+aGRtaV9tZXRhZGF0YV90eXBlMS5taW5fZGlzcGxheV9tYXN0ZXJpbmdf bHVtaW5hbmNlID0KKwkJNTAwOwkJCQkgICAvKiAwLjA1IG5pdHMgKi8KKwltZXRhLT5oZG1pX21l dGFkYXRhX3R5cGUxLm1heF9mYWxsID0gMTAwMDsgLyogMTAwMCBuaXRzICovCisJbWV0YS0+aGRt aV9tZXRhZGF0YV90eXBlMS5tYXhfY2xsID0gNTAwOyAgIC8qIDUwMCBuaXRzICovCit9CisKKy8q IFNldHMgdGhlIEhEUiBvdXRwdXQgbWV0YWRhdGEgcHJvcC4gKi8KK3N0YXRpYyB2b2lkIHNldF9o ZHJfb3V0cHV0X21ldGFkYXRhKGRhdGFfdCAqZGF0YSwKKwkJCQkgICAgc3RydWN0IGhkcl9vdXRw dXRfbWV0YWRhdGEgY29uc3QgKm1ldGEpCit7CisJaWd0X291dHB1dF9yZXBsYWNlX3Byb3BfYmxv YihkYXRhLT5vdXRwdXQsCisJCQkJICAgICBJR1RfQ09OTkVDVE9SX0hEUl9PVVRQVVRfTUVUQURB VEEsIG1ldGEsCisJCQkJICAgICBtZXRhID8gc2l6ZW9mKCptZXRhKSA6IDApOworfQorCisvKiBD b21tb24gdGVzdCBzZXR1cC4gKi8KK3N0YXRpYyB2b2lkIHRlc3RfaW5pdChkYXRhX3QgKmRhdGEp Cit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCisJLyogSXQg ZG9lc24ndCBtYXR0ZXIgd2hpY2ggcGlwZSB3ZSBjaG9vc2Ugb24gYW1kcGd1LiAqLworCWRhdGEt PnBpcGVfaWQgPSBQSVBFX0E7CisJZGF0YS0+cGlwZSA9ICZkYXRhLT5kaXNwbGF5LnBpcGVzW2Rh dGEtPnBpcGVfaWRdOworCisJaWd0X2Rpc3BsYXlfcmVzZXQoZGlzcGxheSk7CisKKwkvKgorCSAq IFRPRE86IExvb2sgZm9yIGFuIG91dHB1dCB0aGF0IGlzIEhEUiBjYXBhYmxlIGFuZCBmYXZvciB0 aGF0LgorCSAqIEJ1dCBmb3Igbm93IGp1c3QgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IGNvbm5lY3Rl ZCBkaXNwbGF5IHN1cHBvcnRzCisJICogSERSIGFuZCAxMGJwYy4KKwkgKi8KKwlkYXRhLT5vdXRw dXQgPSBpZ3RfZ2V0X3NpbmdsZV9vdXRwdXRfZm9yX3BpcGUoZGlzcGxheSwgZGF0YS0+cGlwZV9p ZCk7CisJaWd0X3JlcXVpcmUoZGF0YS0+b3V0cHV0KTsKKwlpZ3RfcmVxdWlyZShpZ3Rfb3V0cHV0 X2hhc19wcm9wKGRhdGEtPm91dHB1dCwgSUdUX0NPTk5FQ1RPUl9NQVhfQlBDKSk7CisKKwlkYXRh LT5tb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShkYXRhLT5vdXRwdXQpOworCWlndF9hc3NlcnQo ZGF0YS0+bW9kZSk7CisKKwlkYXRhLT5wcmltYXJ5ID0KKwkJaWd0X3BpcGVfZ2V0X3BsYW5lX3R5 cGUoZGF0YS0+cGlwZSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7CisKKwlkYXRhLT5waXBlX2Ny YyA9IGlndF9waXBlX2NyY19uZXcoZGF0YS0+ZmQsIGRhdGEtPnBpcGVfaWQsCisJCQkJCSAgSU5U RUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworCisJaWd0X291dHB1dF9zZXRfcGlwZShkYXRhLT5v dXRwdXQsIGRhdGEtPnBpcGVfaWQpOworCisJZGF0YS0+dyA9IGRhdGEtPm1vZGUtPmhkaXNwbGF5 OworCWRhdGEtPmggPSBkYXRhLT5tb2RlLT52ZGlzcGxheTsKKwlkYXRhLT5zZW5zb3JfZmQgPSAt MTsKK30KKworLyogQ29tbW9uIHRlc3QgY2xlYW51cC4gKi8KK3N0YXRpYyB2b2lkIHRlc3RfZmlu aShkYXRhX3QgKmRhdGEpCit7CisJY2xvc2UoZGF0YS0+c2Vuc29yX2ZkKTsKKwlpZ3RfcGlwZV9j cmNfZnJlZShkYXRhLT5waXBlX2NyYyk7CisJaWd0X2Rpc3BsYXlfcmVzZXQoJmRhdGEtPmRpc3Bs YXkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2N5Y2xlX2ZsYWdzKGRhdGFfdCAqZGF0YSwgdWlu dDMyX3QgdGVzdF9mbGFncykKK3sKKworCWlmICh0ZXN0X2ZsYWdzICYgVEVTVF9EUE1TKSB7CisJ CWttc3Rlc3Rfc2V0X2Nvbm5lY3Rvcl9kcG1zKGRhdGEtPmZkLAorCQkJCQkgICBkYXRhLT5vdXRw dXQtPmNvbmZpZy5jb25uZWN0b3IsCisJCQkJCSAgIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwkJa21z dGVzdF9zZXRfY29ubmVjdG9yX2RwbXMoZGF0YS0+ZmQsCisJCQkJCSAgIGRhdGEtPm91dHB1dC0+ Y29uZmlnLmNvbm5lY3RvciwKKwkJCQkJICAgRFJNX01PREVfRFBNU19PTik7CisJfQorCisJaWYg KHRlc3RfZmxhZ3MgJiBURVNUX1NVU1BFTkQpCisJCWlndF9zeXN0ZW1fc3VzcGVuZF9hdXRvcmVz dW1lKFNVU1BFTkRfU1RBVEVfTUVNLAorCQkJCQkgICAgICBTVVNQRU5EX1RFU1RfTk9ORSk7Cit9 CisKKy8qIFJldHVybnMgdGhlIGN1cnJlbnQgYW5kIG1heGltdW0gYnBjIGZyb20gdGhlIGNvbm5l Y3RvciBkZWJ1Z2ZzLiAqLworc3RhdGljIG91dHB1dF9icGNfdCBnZXRfb3V0cHV0X2JwYyhkYXRh X3QgKmRhdGEpCit7CisJY2hhciBidWZbMjU2XTsKKwljaGFyICpzdGFydF9sb2M7CisJaW50IGZk LCByZXM7CisJb3V0cHV0X2JwY190IGluZm87CisKKwlmZCA9IGlndF9kZWJ1Z2ZzX2Nvbm5lY3Rv cl9kaXIoZGF0YS0+ZmQsIGRhdGEtPm91dHB1dC0+bmFtZSwgT19SRE9OTFkpOworCWlndF9hc3Nl cnQoZmQgPj0gMCk7CisKKwlyZXMgPSBpZ3RfZGVidWdmc19zaW1wbGVfcmVhZChmZCwgIm91dHB1 dF9icGMiLCBidWYsIHNpemVvZihidWYpKTsKKwlpZ3RfcmVxdWlyZShyZXMgPiAwKTsKKworCWNs b3NlKGZkKTsKKworCWlndF9hc3NlcnQoc3RhcnRfbG9jID0gc3Ryc3RyKGJ1ZiwgIkN1cnJlbnQ6 ICIpKTsKKwlpZ3RfYXNzZXJ0X2VxKHNzY2FuZihzdGFydF9sb2MsICJDdXJyZW50OiAldSIsICZp bmZvLmN1cnJlbnQpLCAxKTsKKworCWlndF9hc3NlcnQoc3RhcnRfbG9jID0gc3Ryc3RyKGJ1Ziwg Ik1heGltdW06ICIpKTsKKwlpZ3RfYXNzZXJ0X2VxKHNzY2FuZihzdGFydF9sb2MsICJNYXhpbXVt OiAldSIsICZpbmZvLm1heGltdW0pLCAxKTsKKworCXJldHVybiBpbmZvOworfQorCisvKiBWZXJp ZmllcyB0aGF0IGNvbm5lY3RvciBoYXMgdGhlIGNvcnJlY3Qgb3V0cHV0IGJwYy4gKi8KK3N0YXRp YyB2b2lkIGFzc2VydF9vdXRwdXRfYnBjKGRhdGFfdCAqZGF0YSwgdW5zaWduZWQgaW50IGJwYykK K3sKKwlvdXRwdXRfYnBjX3QgaW5mbyA9IGdldF9vdXRwdXRfYnBjKGRhdGEpOworCisJaWd0X3Jl cXVpcmVfZihpbmZvLm1heGltdW0gPj0gYnBjLAorCQkgICAgICAiTW9uaXRvciBkb2Vzbid0IHN1 cHBvcnQgJXUgYnBjLCBtYXggaXMgJXVcbiIsIGJwYywKKwkJICAgICAgaW5mby5tYXhpbXVtKTsK KworCWlndF9hc3NlcnRfZXEoaW5mby5jdXJyZW50LCBicGMpOworfQorCisvKgorICogTG9hZHMg dGhlIHNlbnNvciBpZiB1bmxvYWRlZC4gVGhlIHNlbnNvciBpcyBhIHNlcmlhbCB0byBVU0IgaW50 ZXJmYWNlIHRoYXQKKyAqIHByaW50cyB0aGUgY3VycmVudCBtZWFzdXJlZCBsdW1pbmFuY2UgKG5p dHMpIGFzIGEgZmxvYXQsIHNlcGFyYXRlZCBieSBhCisgKiBuZXdsaW5lLiBVc2VzIGJhdWRyYXRl IDk2MDAuCisgKi8KK3N0YXRpYyB2b2lkIG9wZW5fc2Vuc29yKGRhdGFfdCAqZGF0YSkKK3sKKwlz dHJ1Y3QgdGVybWlvcyB0b3B0aW9uczsKKwlpbnQgcmVzOworCisJLyogUmV0dXJuIGlmIGFscmVh ZHkgbG9hZGVkLiAqLworCWlmIChkYXRhLT5zZW5zb3JfZmQgPj0gMCkKKwkJcmV0dXJuOworCisJ ZGF0YS0+c2Vuc29yX2ZkID0gb3BlbigiL2Rldi90dHlVU0IwIiwgT19SRFdSIHwgT19OT0NUVFkp OworCWlmIChkYXRhLT5zZW5zb3JfZmQgPCAwKSB7CisJCWlndF9pbmZvKCJMdW1pbmFuY2Ugc2Vu c29yIG5vdCBmb3VuZC5cbiIpOworCQlyZXR1cm47CisJfQorCisJcmVzID0gdGNnZXRhdHRyKGRh dGEtPnNlbnNvcl9mZCwgJnRvcHRpb25zKTsKKwlpZ3RfYXNzZXJ0X2x0ZSgwLCByZXMpOworCisJ Y2ZzZXRpc3BlZWQoJnRvcHRpb25zLCBCOTYwMCk7CisJY2ZzZXRvc3BlZWQoJnRvcHRpb25zLCBC OTYwMCk7CisKKwl0b3B0aW9ucy5jX2NmbGFnICY9IH4oUEFSRU5CIHwgQ1NUT1BCIHwgQ1NJWkUp OworCXRvcHRpb25zLmNfY2ZsYWcgfD0gKENTOCB8IENSRUFEIHwgQ0xPQ0FMKTsKKwl0b3B0aW9u cy5jX2xmbGFnIHw9IElDQU5PTjsKKworCWNmbWFrZXJhdygmdG9wdGlvbnMpOworCisJcmVzID0g dGNzZXRhdHRyKGRhdGEtPnNlbnNvcl9mZCwgVENTQU5PVywgJnRvcHRpb25zKTsKKwlpZ3RfYXNz ZXJ0X2x0ZSgwLCByZXMpOworCisJcmVzID0gdGNzZXRhdHRyKGRhdGEtPnNlbnNvcl9mZCwgVENT QUZMVVNILCAmdG9wdGlvbnMpOworCWlndF9hc3NlcnRfbHRlKDAsIHJlcyk7Cit9CisKKy8qIFJl YWRzIGEgc3RyaW5nIGZyb20gdGhlIHNlbnNvci4gKi8KK3N0YXRpYyB2b2lkIGdldF9zZW5zb3Jf c3RyKGRhdGFfdCAqZGF0YSwgY2hhciAqZHN0LCBpbnQgZHN0X2J5dGVzKQoreworCWNoYXIgYyA9 IDA7CisJaW50IGkgPSAwOworCisJaWd0X3JlcXVpcmUoZGF0YS0+c2Vuc29yX2ZkID49IDApOwor CWlndF9zZXRfdGltZW91dCgzLCAiV2FpdGluZyBmb3Igc2Vuc29yIHJlYWRcbiIpOworCisJZHN0 X2J5dGVzIC09IDE7CisKKwl3aGlsZSAoYyAhPSAnXG4nICYmIGkgPCBkc3RfYnl0ZXMpIHsKKwkJ aW50IG4gPSByZWFkKGRhdGEtPnNlbnNvcl9mZCwgJmMsIDEpOworCQlpZ3RfYXNzZXJ0X2x0ZSgw LCBuKTsKKworCQlkc3RbaSsrXSA9IGM7CisJfQorCisJaWd0X3Jlc2V0X3RpbWVvdXQoKTsKKwor CWlmIChkc3RfYnl0ZXMgPiAwKSB7CisJCWRzdFtpXSA9IDA7CisJfQorfQorCisvKiBSZXR1cm5z IHRoZSBjdXJyZW50IGx1bWluYW5jZSByZWFkaW5nIGZyb20gdGhlIHNlbnNvciBpbiBjZC9tXjIu ICovCitzdGF0aWMgZmxvYXQgZ2V0X3NlbnNvcl9uaXRzKGRhdGFfdCAqZGF0YSkKK3sKKwlmbG9h dCBuaXRzID0gLTEuMGY7CisJY2hhciBidWZbMzJdOworCisJLyogU2Vuc29yIG9wZW5pbmcgaXMg ZGVmZXJyZWQgdW50aWwgd2UgYWN0dWFsbHkgbmVlZCBpdCAtIGhlcmUuICovCisJb3Blbl9zZW5z b3IoZGF0YSk7CisKKwkvKiBGbHVzaCBvbGQgZGF0YSBmcm9tIHRoZSBidWZmZXIgaW4gY2FzZSBp dCdzIGJlZW4gYSB3aGlsZS4gKi8KKwlpZ3RfcmVxdWlyZShkYXRhLT5zZW5zb3JfZmQgPj0gMCk7 CisJdGNmbHVzaChkYXRhLT5zZW5zb3JfZmQsIFRDSU9GTFVTSCk7CisKKwkvKiBSZWFkIHR3aWNl IHNvIHdlIGdldCBhIGNsZWFuIGxpbmUuICovCisJZ2V0X3NlbnNvcl9zdHIoZGF0YSwgYnVmLCBB UlJBWV9TSVpFKGJ1ZikpOworCWdldF9zZW5zb3Jfc3RyKGRhdGEsIGJ1ZiwgQVJSQVlfU0laRShi dWYpKTsKKworCXNzY2FuZihidWYsICIlZiIsICZuaXRzKTsKKworCXJldHVybiBuaXRzOworfQor CisvKiBMb2dzIHRoZSBjdXJzb3Igc2Vuc29yIG5pdHMuICovCitzdGF0aWMgdm9pZCBsb2dfc2Vu c29yX25pdHMoZG91YmxlIG5pdHMpCit7CisJaWd0X2luZm8oIlNlbnNvcjogJS4zZiBuaXRzXG4i LCBuaXRzKTsKK30KKworLyoKKyAqIFdhaXRzIGZvciB0aGUgbW9uaXRvciB0byBsaWdodC11cCB0 byBhIGdpdmVuIHRocmVzaG9sZCwgdXNlZnVsIGZvcgorICogcG9zdC1tb2Rlc2V0IG1lYXN1cmVt ZW50LgorICovCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl90aHJlc2hvbGQoZGF0YV90ICpkYXRhLCBk b3VibGUgdGhyZXNob2xkKQoreworCS8qCisJICogSWYgd2UgcmVhZCB0b28gcXVpY2sgdGhlIHNl bnNvciBtaWdodCBzdGlsbCBiZSBsaXQgdXAuCisJICogRWFzeSBoYWNrOiBqdXN0IHdhaXQgYSBz ZWNvbmQuCisJICovCisJc2xlZXAoMSk7CisKKwkvKiBQb2xsIHNlbnNvciB1bnRpbCBsaWdodHVw LiAqLworCWlndF9zZXRfdGltZW91dCg1LCAiV2FpdGluZyBmb3Igc2Vuc29yIHJlYWRcbiIpOwor CisJZm9yICg7OykgeworCQlkb3VibGUgbml0cyA9IGdldF9zZW5zb3Jfbml0cyhkYXRhKTsKKwor CQlpZiAobml0cyA+PSB0aHJlc2hvbGQpCisJCQlicmVhazsKKwl9CisKKwlpZ3RfcmVzZXRfdGlt ZW91dCgpOworfQorCisvKiBTa2lwcyB0aGUgdGVzdCBpZiB0aGUgb3V0cHV0IGlzbid0IEhEUi4g Ki8KK3N0YXRpYyB2b2lkIHRlc3RfcmVxdWlyZV9oZHIoZGF0YV90ICpkYXRhKQoreworCWlndF9y ZXF1aXJlKGlndF9vdXRwdXRfaGFzX3Byb3AoZGF0YS0+b3V0cHV0LAorCQkJCQlJR1RfQ09OTkVD VE9SX0hEUl9PVVRQVVRfTUVUQURBVEEpKTsKK30KKworLyogRmlsbHMgdGhlIEZCIHdpdGggYSBz b2xpZCBjb2xvciBnaXZlbiBtYXBwaW5nIHRvIGEgbGlnaHQgdmFsdWUgaW4gbml0cy4gKi8KK3N0 YXRpYyB2b2lkIGRyYXdfbGlnaHQoaWd0X2ZiX3QgKmZiLCBkb3VibGUgbml0cykKK3sKKwljYWly b190ICpjcjsKKwlkb3VibGUgbCwgdjsKKwlpbnQgeCwgeSwgdywgaDsKKworCWNyID0gaWd0X2dl dF9jYWlyb19jdHgoZmItPmZkLCBmYik7CisKKwlsID0gbml0cyAvIDEwMDAwLjA7CisJdiA9IGNh bGNfcHFfaW52ZXJzZShsKTsKKworCS8qCisJICogRHJhdyBhIHdoaXRlIHJlY3QgaW4gdGhlIGJv dHRvbSBjZW50ZXIgb2YgdGhlIHNjcmVlbiBmb3IgdGhlIHNlbnNvci4KKwkgKiBJdCdzIG9ubHkg MTAlIG9mIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzY3JlZW4gc2luY2Ugbm90IGV2ZXJ5 CisJICogbW9uaXRvciBpcyBjYXBhYmxlIG9mIGZ1bGwgSERSIGJyaWdodG5lc3MgZm9yIHRoZSB3 aG9sZSBzY3JlZW4uCisJICovCisJdyA9IGZiLT53aWR0aCAqIDAuMTA7CisJaCA9IGZiLT5oZWln aHQgKiAwLjEwOworCXggPSAoZmItPndpZHRoIC0gdykgLyAyOworCXkgPSAoZmItPmhlaWdodCAt IGgpOworCisJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQs IDAuMCwgMC4wLCAwLjApOworCWlndF9wYWludF9jb2xvcihjciwgeCwgeSwgdywgaCwgdiwgdiwg dik7CisKKwlpZ3RfcHV0X2NhaXJvX2N0eChmYi0+ZmQsIGZiLCBjcik7Cit9CisKKy8qIEZpbGxz IHRoZSBGQiB3aXRoIGEgdGVzdCBIRFIgcGF0dGVybi4gKi8KK3N0YXRpYyB2b2lkIGRyYXdfaGRy X3BhdHRlcm4oaWd0X2ZiX3QgKmZiKQoreworCWNhaXJvX3QgKmNyID0gaWd0X2dldF9jYWlyb19j dHgoZmItPmZkLCBmYik7CisKKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIGZiLT53aWR0aCwg ZmItPmhlaWdodCwgMS4wLCAxLjAsIDEuMCk7CisJaWd0X3BhaW50X3Rlc3RfcGF0dGVybihjciwg ZmItPndpZHRoLCBmYi0+aGVpZ2h0KTsKKworCWlndF9wdXRfY2Fpcm9fY3R4KGZiLT5mZCwgZmIs IGNyKTsKK30KKworLyoKKyAqIFZhbGlkYXRlcyBzd2l0Y2hpbmcgYmV0d2VlbiBkaWZmZXJlbnQg ZGlzcGxheSBvdXRwdXQgYnBjIG1vZGVzLgorICogVE9ETzogSG9vayB1cCBhIGRlYnVnZnMgZW50 cnkgdG8gdmVyaWZ5IGRyaXZlciBiZWhhdmlvciBiZXlvbmQKKyAqIGp1c3QgY2hlY2tpbmcgaWYg dGhlIGNvbW1pdHMgc3VjY2VlZGVkLgorICovCitzdGF0aWMgdm9pZCB0ZXN0X2JwY19zd2l0Y2go ZGF0YV90ICpkYXRhLCB1aW50MzJfdCBmbGFncykKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5 ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IHJlZl9jcmMsIG5ld19jcmM7CisJaWd0X2Zi X3QgYWZiOworCisJdGVzdF9pbml0KGRhdGEpOworCisgICAgICAgIC8qIDEwLWJpdCBmb3JtYXRz IGFyZSBzbG93LCBzbyBsaW1pdCB0aGUgc2l6ZS4gKi8KKyAgICAgICAgaWd0X2NyZWF0ZV9mYihk YXRhLT5mZCwgNTEyLCA1MTIsIERSTV9GT1JNQVRfWFJHQjIxMDEwMTAsIDAsICZhZmIpOworCWRy YXdfaGRyX3BhdHRlcm4oJmFmYik7CisKKyAgICAgICAgLyogU3RhcnQgaW4gOGJwYy4gKi8KKwlp Z3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1hcnksICZhZmIpOworCWlndF9wbGFuZV9zZXRfc2l6 ZShkYXRhLT5wcmltYXJ5LCBkYXRhLT53LCBkYXRhLT5oKTsKKwlpZ3Rfb3V0cHV0X3NldF9wcm9w X3ZhbHVlKGRhdGEtPm91dHB1dCwgSUdUX0NPTk5FQ1RPUl9NQVhfQlBDLCA4KTsKKwlpZ3RfZGlz cGxheV9jb21taXRfYXRvbWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VU LCBOVUxMKTsKKwlhc3NlcnRfb3V0cHV0X2JwYyhkYXRhLCA4KTsKKworICAgICAgICAvKiBTd2l0 Y2ggdG8gMTBicGMuICovCisgICAgICAgIGlndF9vdXRwdXRfc2V0X3Byb3BfdmFsdWUoZGF0YS0+ b3V0cHV0LCBJR1RfQ09OTkVDVE9SX01BWF9CUEMsIDEwKTsKKwlpZ3RfZGlzcGxheV9jb21taXRf YXRvbWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsKKwlh c3NlcnRfb3V0cHV0X2JwYyhkYXRhLCAxMCk7CisKKwkvKiBWZXJpZnkgdGhhdCB0aGUgQ1JDIGFy ZSBlcXVhbCBhZnRlciBEUE1TIG9yIHN1c3BlbmQuICovCisJaWd0X3BpcGVfY3JjX2NvbGxlY3Rf Y3JjKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7CisJdGVzdF9jeWNsZV9mbGFncyhkYXRhLCBm bGFncyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmbmV3X2Ny Yyk7CisKKyAgICAgICAgLyogRHJvcCBiYWNrIHRvIDhicGMuICovCisJaWd0X291dHB1dF9zZXRf cHJvcF92YWx1ZShkYXRhLT5vdXRwdXQsIElHVF9DT05ORUNUT1JfTUFYX0JQQywgOCk7CisJaWd0 X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9E RVNFVCwgTlVMTCk7CisJYXNzZXJ0X291dHB1dF9icGMoZGF0YSwgOCk7CisKKwkvKiBDUkMgY2Fw dHVyZSBpcyBjbGFtcGVkIHRvIDhicGMsIHNvIGNhcHR1cmUgc2hvdWxkIG1hdGNoLiAqLworCWln dF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmbmV3X2NyYyk7CisKKwl0ZXN0X2ZpbmkoZGF0 YSk7CisgICAgICAgIGlndF9yZW1vdmVfZmIoZGF0YS0+ZmQsICZhZmIpOworfQorCisvKiBUZXN0 cyBzd2FwcGluZyBzdGF0aWMgSERSIG1ldGFkYXRhLiAqLworc3RhdGljIHZvaWQgdGVzdF9zdGF0 aWNfc3dhcChkYXRhX3QgKmRhdGEpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRh LT5kaXNwbGF5OworCWlndF9jcmNfdCByZWZfY3JjLCBuZXdfY3JjOworCWlndF9mYl90IGFmYjsK KwlzdHJ1Y3QgaGRyX291dHB1dF9tZXRhZGF0YSBoZHI7CisKKwl0ZXN0X2luaXQoZGF0YSk7CisJ dGVzdF9yZXF1aXJlX2hkcihkYXRhKTsKKworCS8qIDEwLWJpdCBmb3JtYXRzIGFyZSBzbG93LCBz byBsaW1pdCB0aGUgc2l6ZS4gKi8KKwlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmZkLCA1MTIsIDUxMiwg RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwgMCwgJmFmYik7CisJZHJhd19oZHJfcGF0dGVybigmYWZi KTsKKworCS8qIFN0YXJ0IGluIFNEUi4gKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1h cnksICZhZmIpOworCWlndF9wbGFuZV9zZXRfc2l6ZShkYXRhLT5wcmltYXJ5LCBkYXRhLT53LCBk YXRhLT5oKTsKKwlpZ3Rfb3V0cHV0X3NldF9wcm9wX3ZhbHVlKGRhdGEtPm91dHB1dCwgSUdUX0NP Tk5FQ1RPUl9NQVhfQlBDLCA4KTsKKwlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKGRpc3BsYXks IERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsKKwlhc3NlcnRfb3V0cHV0X2Jw YyhkYXRhLCA4KTsKKworCS8qIEVudGVyIEhEUiwgYSBtb2Rlc2V0IGlzIGFsbG93ZWQgaGVyZS4g Ki8KKwlmaWxsX2hkcl9vdXRwdXRfbWV0YWRhdGFfc3QyMDQ4KCZoZHIpOworCXNldF9oZHJfb3V0 cHV0X21ldGFkYXRhKGRhdGEsICZoZHIpOworCWlndF9vdXRwdXRfc2V0X3Byb3BfdmFsdWUoZGF0 YS0+b3V0cHV0LCBJR1RfQ09OTkVDVE9SX01BWF9CUEMsIDEwKTsKKwlpZ3RfZGlzcGxheV9jb21t aXRfYXRvbWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsK Kwlhc3NlcnRfb3V0cHV0X2JwYyhkYXRhLCAxMCk7CisKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9j cmMoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjKTsKKworCS8qIENoYW5nZSB0aGUgbWFzdGVyaW5n IGluZm9ybWF0aW9uLCBubyBtb2Rlc2V0IGFsbG93ZWQuICovCisJaGRyLmhkbWlfbWV0YWRhdGFf dHlwZTEubWF4X2Rpc3BsYXlfbWFzdGVyaW5nX2x1bWluYW5jZSA9IDIwMDsKKwloZHIuaGRtaV9t ZXRhZGF0YV90eXBlMS5tYXhfZmFsbCA9IDIwMDsKKwloZHIuaGRtaV9tZXRhZGF0YV90eXBlMS5t YXhfY2xsID0gMTAwOworCisJc2V0X2hkcl9vdXRwdXRfbWV0YWRhdGEoZGF0YSwgJmhkcik7CisJ aWd0X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5LCAwLCBOVUxMKTsKKworCS8qIEVudGVy IFNEUiB2aWEgbWV0YWRhdGEsIG5vIG1vZGVzZXQgYWxsb3dlZC4gKi8KKwlmaWxsX2hkcl9vdXRw dXRfbWV0YWRhdGFfc2RyKCZoZHIpOworCXNldF9oZHJfb3V0cHV0X21ldGFkYXRhKGRhdGEsICZo ZHIpOworCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwgMCwgTlVMTCk7CisKKwlp Z3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZuZXdfY3JjKTsKKworCS8q IEV4aXQgU0RSIGFuZCBlbnRlciA4YnBjLCBjbGVhbnVwLiAqLworCXNldF9oZHJfb3V0cHV0X21l dGFkYXRhKGRhdGEsIE5VTEwpOworCWlndF9vdXRwdXRfc2V0X3Byb3BfdmFsdWUoZGF0YS0+b3V0 cHV0LCBJR1RfQ09OTkVDVE9SX01BWF9CUEMsIDgpOworCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9t aWMoZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCWFzc2Vy dF9vdXRwdXRfYnBjKGRhdGEsIDgpOworCisJLyogVmVyaWZ5IHRoYXQgdGhlIENSQyBkaWRuJ3Qg Y2hhbmdlIHdoaWxlIGN5Y2xpbmcgbWV0YWRhdGEuICovCisJaWd0X2Fzc2VydF9jcmNfZXF1YWwo JnJlZl9jcmMsICZuZXdfY3JjKTsKKworCXRlc3RfZmluaShkYXRhKTsKKwlpZ3RfcmVtb3ZlX2Zi KGRhdGEtPmZkLCAmYWZiKTsKK30KKworLyoKKyAqIFRlc3RzIHRoYXQgc2V0dGluZyB0aGUgc3Rh dGljIG1ldGFkYXRhIGFjdHVhbGx5IGVudGVycyBIRFIgbW9kZS4KKyAqCisgKiBOb3RlOiBUaGlz IHRlc3QgaXMgZGlzcGxheSBzcGVjaWZpYyBpbiB0aGUgc2Vuc2UgdGhhdCBpdCByZXF1cmllcwor ICogYSBkaXNwbGF5IHRoYXQgaXMgY2FwYWJsZSBvZiBnb2luZyBhYm92ZSBTRFIgYnJpZ2h0bmVz cyBsZXZlbHMuCisgKiBNb3N0IEhEUjQwMCBvciBoaWdoZXIgY2VydGlmaWVkIGRpc3BsYXlzIHNo b3VsZCBiZSBjYXBhYmxlIG9mIHRoaXMuCisgKgorICogU29tZSBkaXNwbGF5cyBtYXkgcmVxdWly ZSBmaXJzdCBsaW1pdGluZyB0aGUgb3V0cHV0IGJyaWdodG5lc3MKKyAqIGluIHRoZSBPU0QgZm9y IHRoaXMgdG8gd29yay4KKyAqCisgKiBSZXF1aXJlcyB0aGUgbHVtaW5hbmNlIHNlbnNvciB0byBi ZSBhdHRhY2hlZCB0byB0aGUgdGVzdCBtYWNoaW5lLgorICovCitzdGF0aWMgdm9pZCB0ZXN0X3N0 YXRpY19vdXRwdXQoZGF0YV90ICpkYXRhKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAm ZGF0YS0+ZGlzcGxheTsKKwlpZ3RfZmJfdCBhZmI7CisJc3RydWN0IGhkcl9vdXRwdXRfbWV0YWRh dGEgaGRyOworCWRvdWJsZSBsaWdodHVwID0gMTAwLjA7CisJZG91YmxlIHRocmVzaG9sZCA9IDE1 LjA7CisJZG91YmxlIG5pdHNfc2RyMCwgbml0c19zZHIxLCBuaXRzX3NkcjIsIG5pdHNfaGRyOwor CisJdGVzdF9pbml0KGRhdGEpOworCXRlc3RfcmVxdWlyZV9oZHIoZGF0YSk7CisKKwlpZ3RfY3Jl YXRlX2ZiKGRhdGEtPmZkLCBkYXRhLT53LCBkYXRhLT5oLCBEUk1fRk9STUFUX1hSR0IyMTAxMDEw LCAwLCAmYWZiKTsKKwlkcmF3X2xpZ2h0KCZhZmIsIDEwMDAwLjApOworCisJaWd0X2luZm8oIlRl c3QgU0RSLCA4YnBjXG4iKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1hcnksICZhZmIp OworCWlndF9wbGFuZV9zZXRfc2l6ZShkYXRhLT5wcmltYXJ5LCBkYXRhLT53LCBkYXRhLT5oKTsK KwlpZ3Rfb3V0cHV0X3NldF9wcm9wX3ZhbHVlKGRhdGEtPm91dHB1dCwgSUdUX0NPTk5FQ1RPUl9N QVhfQlBDLCA4KTsKKwlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKGRpc3BsYXksIERSTV9NT0RF X0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsKKwlhc3NlcnRfb3V0cHV0X2JwYyhkYXRhLCA4 KTsKKworCXdhaXRfZm9yX3RocmVzaG9sZChkYXRhLCBsaWdodHVwKTsKKwluaXRzX3NkcjAgPSBn ZXRfc2Vuc29yX25pdHMoZGF0YSk7CisJbG9nX3NlbnNvcl9uaXRzKG5pdHNfc2RyMCk7CisKKwlp Z3RfaW5mbygiVGVzdCBTRFIsIDEwYnBjXG4iKTsKKwlpZ3Rfb3V0cHV0X3NldF9wcm9wX3ZhbHVl KGRhdGEtPm91dHB1dCwgSUdUX0NPTk5FQ1RPUl9NQVhfQlBDLCAxMCk7CisJaWd0X2Rpc3BsYXlf Y29tbWl0X2F0b21pYyhkaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVM TCk7CisJYXNzZXJ0X291dHB1dF9icGMoZGF0YSwgMTApOworCisJd2FpdF9mb3JfdGhyZXNob2xk KGRhdGEsIGxpZ2h0dXApOworCW5pdHNfc2RyMSA9IGdldF9zZW5zb3Jfbml0cyhkYXRhKTsKKwls b2dfc2Vuc29yX25pdHMobml0c19zZHIxKTsKKworCWlndF9pbmZvKCJUZXN0IEhEUiwgMTBicGNc biIpOworCWZpbGxfaGRyX291dHB1dF9tZXRhZGF0YV9zdDIwNDgoJmhkcik7CisJc2V0X2hkcl9v dXRwdXRfbWV0YWRhdGEoZGF0YSwgJmhkcik7CisJaWd0X291dHB1dF9zZXRfcHJvcF92YWx1ZShk YXRhLT5vdXRwdXQsIElHVF9DT05ORUNUT1JfTUFYX0JQQywgMTApOworCWlndF9kaXNwbGF5X2Nv bW1pdF9hdG9taWMoZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwp OworCisJd2FpdF9mb3JfdGhyZXNob2xkKGRhdGEsIGxpZ2h0dXApOworCW5pdHNfaGRyID0gZ2V0 X3NlbnNvcl9uaXRzKGRhdGEpOworCWxvZ19zZW5zb3Jfbml0cyhuaXRzX2hkcik7CisKKwlpZ3Rf aW5mbygiRXhpdCBIRFIgaW50byBTRFIsIDhicGNcbiIpOworCXNldF9oZHJfb3V0cHV0X21ldGFk YXRhKGRhdGEsIE5VTEwpOworCWlndF9vdXRwdXRfc2V0X3Byb3BfdmFsdWUoZGF0YS0+b3V0cHV0 LCBJR1RfQ09OTkVDVE9SX01BWF9CUEMsIDgpOworCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMo ZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCWFzc2VydF9v dXRwdXRfYnBjKGRhdGEsIDgpOworCisJd2FpdF9mb3JfdGhyZXNob2xkKGRhdGEsIGxpZ2h0dXAp OworCW5pdHNfc2RyMiA9IGdldF9zZW5zb3Jfbml0cyhkYXRhKTsKKwlsb2dfc2Vuc29yX25pdHMo bml0c19zZHIyKTsKKworCS8qIFZlcmlmeSB0aGF0IGFsbCBuaXQgdmFsdWVzIHdlcmUgYXMgZXhw ZWN0ZWQuICovCisJYXNzZXJ0X25pdHNfZXF1YWwobml0c19zZHIwLCBuaXRzX3NkcjEsIHRocmVz aG9sZCk7CisJYXNzZXJ0X25pdHNfZXF1YWwobml0c19zZHIwLCBuaXRzX3NkcjIsIHRocmVzaG9s ZCk7CisKKwlpZ3RfYXNzZXJ0X2Yobml0c19oZHIgLSBuaXRzX3NkcjAgPiB0aHJlc2hvbGQgKiAy LjAsCisJCSAgICAgIk5vIG1lYXN1cmFibGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFNEUiBhbmQgSERS IGx1bWluYW5jZTogIgorCQkgICAgICJ0aHJlc2hvbGQ9JS4xZiBhY3R1YWw9JS4xZlxuIiwKKwkJ ICAgICB0aHJlc2hvbGQgKiAyLjAsIG5pdHNfaGRyIC0gbml0c19zZHIwKTsKKworCXRlc3RfZmlu aShkYXRhKTsKKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmZkLCAmYWZiKTsKK30KKworLyogVGVzdHMg ZW50ZXJpbmcgYW5kIGV4aXRpbmcgSERSIG1vZGUuICovCitzdGF0aWMgdm9pZCB0ZXN0X3N0YXRp Y190b2dnbGUoZGF0YV90ICpkYXRhLCB1aW50MzJfdCBmbGFncykKK3sKKwlpZ3RfZGlzcGxheV90 ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IHJlZl9jcmMsIG5ld19jcmM7 CisJaWd0X2ZiX3QgYWZiOworCXN0cnVjdCBoZHJfb3V0cHV0X21ldGFkYXRhIGhkcjsKKworCXRl c3RfaW5pdChkYXRhKTsKKwl0ZXN0X3JlcXVpcmVfaGRyKGRhdGEpOworCisgICAgICAgIC8qIDEw LWJpdCBmb3JtYXRzIGFyZSBzbG93LCBzbyBsaW1pdCB0aGUgc2l6ZS4gKi8KKwlpZ3RfY3JlYXRl X2ZiKGRhdGEtPmZkLCA1MTIsIDUxMiwgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwgMCwgJmFmYik7 CisJZHJhd19oZHJfcGF0dGVybigmYWZiKTsKKworCWZpbGxfaGRyX291dHB1dF9tZXRhZGF0YV9z dDIwNDgoJmhkcik7CisKKyAgICAgICAgLyogU3RhcnQgd2l0aCBubyBtZXRhZGF0YS4gKi8KKwlp Z3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1hcnksICZhZmIpOworCWlndF9wbGFuZV9zZXRfc2l6 ZShkYXRhLT5wcmltYXJ5LCBkYXRhLT53LCBkYXRhLT5oKTsKKwlzZXRfaGRyX291dHB1dF9tZXRh ZGF0YShkYXRhLCBOVUxMKTsKKwlpZ3Rfb3V0cHV0X3NldF9wcm9wX3ZhbHVlKGRhdGEtPm91dHB1 dCwgSUdUX0NPTk5FQ1RPUl9NQVhfQlBDLCA4KTsKKwlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWlj KGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsKKwlhc3NlcnRf b3V0cHV0X2JwYyhkYXRhLCA4KTsKKworICAgICAgICAvKiBBcHBseSBIRFIgbWV0YWRhdGEgYW5k IDEwYnBjLiBXZSBleHBlY3QgYSBtb2Rlc2V0IGZvciBlbnRlcmluZy4gKi8KKwlzZXRfaGRyX291 dHB1dF9tZXRhZGF0YShkYXRhLCAmaGRyKTsKKyAgICAgICAgaWd0X291dHB1dF9zZXRfcHJvcF92 YWx1ZShkYXRhLT5vdXRwdXQsIElHVF9DT05ORUNUT1JfTUFYX0JQQywgMTApOworCWlndF9kaXNw bGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQs IE5VTEwpOworCWFzc2VydF9vdXRwdXRfYnBjKGRhdGEsIDEwKTsKKworCS8qIFZlcmlmeSB0aGF0 IHRoZSBDUkMgYXJlIGVxdWFsIGFmdGVyIERQTVMgb3Igc3VzcGVuZC4gKi8KKwlpZ3RfcGlwZV9j cmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjKTsKKwl0ZXN0X2N5Y2xlX2Zs YWdzKGRhdGEsIGZsYWdzKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9j cmMsICZuZXdfY3JjKTsKKworICAgICAgICAvKiBEaXNhYmxlIEhEUiBtZXRhZGF0YSBhbmQgZHJv cCBiYWNrIHRvIDhicGMuIFdlIGV4cGVjdCBhIG1vZGVzZXQgZm9yIGV4aXRpbmcuICovCisJc2V0 X2hkcl9vdXRwdXRfbWV0YWRhdGEoZGF0YSwgTlVMTCk7CisJaWd0X291dHB1dF9zZXRfcHJvcF92 YWx1ZShkYXRhLT5vdXRwdXQsIElHVF9DT05ORUNUT1JfTUFYX0JQQywgOCk7CisJaWd0X2Rpc3Bs YXlfY29tbWl0X2F0b21pYyhkaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwg TlVMTCk7CisJYXNzZXJ0X291dHB1dF9icGMoZGF0YSwgOCk7CisKKwlpZ3RfYXNzZXJ0X2NyY19l cXVhbCgmcmVmX2NyYywgJm5ld19jcmMpOworCisJdGVzdF9maW5pKGRhdGEpOworCWlndF9yZW1v dmVfZmIoZGF0YS0+ZmQsICZhZmIpOworfQorCitpZ3RfbWFpbgoreworCWRhdGFfdCBkYXRhOwor CisJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOworCisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2Yo ZGF0YSkpOworCisJaWd0X2ZpeHR1cmUKKwl7CisJCWRhdGEuZmQgPSBkcm1fb3Blbl9kcml2ZXJf bWFzdGVyKERSSVZFUl9BTURHUFUpOworCisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUo KTsKKworCQlpZ3RfZGlzcGxheV9yZXF1aXJlKCZkYXRhLmRpc3BsYXksIGRhdGEuZmQpOworCQlp Z3RfcmVxdWlyZShkYXRhLmRpc3BsYXkuaXNfYXRvbWljKTsKKwkJaWd0X2Rpc3BsYXlfcmVxdWly ZV9vdXRwdXQoJmRhdGEuZGlzcGxheSk7CisJfQorCisJaWd0X3N1YnRlc3QoImJwYy1zd2l0Y2gi KSB0ZXN0X2JwY19zd2l0Y2goJmRhdGEsIDApOworCWlndF9zdWJ0ZXN0KCJicGMtc3dpdGNoLWRw bXMiKSB0ZXN0X2JwY19zd2l0Y2goJmRhdGEsIFRFU1RfRFBNUyk7CisJaWd0X3N1YnRlc3QoImJw Yy1zd2l0Y2gtc3VzcGVuZCIpIHRlc3RfYnBjX3N3aXRjaCgmZGF0YSwgVEVTVF9TVVNQRU5EKTsK KworCWlndF9zdWJ0ZXN0KCJzdGF0aWMtb3V0cHV0IikgdGVzdF9zdGF0aWNfb3V0cHV0KCZkYXRh KTsKKwlpZ3Rfc3VidGVzdCgic3RhdGljLXN3YXAiKSB0ZXN0X3N0YXRpY19zd2FwKCZkYXRhKTsK KworCWlndF9zdWJ0ZXN0KCJzdGF0aWMtdG9nZ2xlIikgdGVzdF9zdGF0aWNfdG9nZ2xlKCZkYXRh LCAwKTsKKwlpZ3Rfc3VidGVzdCgic3RhdGljLXRvZ2dsZS1kcG1zIikgdGVzdF9zdGF0aWNfdG9n Z2xlKCZkYXRhLCBURVNUX0RQTVMpOworCWlndF9zdWJ0ZXN0KCJzdGF0aWMtdG9nZ2xlLXN1c3Bl bmQiKQorCQl0ZXN0X3N0YXRpY190b2dnbGUoJmRhdGEsIFRFU1RfU1VTUEVORCk7CisKKwlpZ3Rf Zml4dHVyZQorCXsKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKKwl9Cit9CmRp ZmYgLS1naXQgYS90ZXN0cy9hbWRncHUvbWVzb24uYnVpbGQgYi90ZXN0cy9hbWRncHUvbWVzb24u YnVpbGQKaW5kZXggNDIwODYzNzQuLjljNjU4NWJiIDEwMDY0NAotLS0gYS90ZXN0cy9hbWRncHUv bWVzb24uYnVpbGQKKysrIGIvdGVzdHMvYW1kZ3B1L21lc29uLmJ1aWxkCkBAIC02LDYgKzYsNyBA QCBpZiBsaWJkcm1fYW1kZ3B1LmZvdW5kKCkKIAkJCSAgJ2FtZF9iYXNpYycsCiAJCQkgICdhbWRf Y29sb3InLAogCQkJICAnYW1kX2NzX25vcCcsCisJCQkgICdhbWRfaGRyJywKIAkJCSAgJ2FtZF9w cmltZScsCiAJCQldCiAJYW1kZ3B1X2RlcHMgKz0gbGliZHJtX2FtZGdwdQotLSAKMi4xNy4xCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1h aWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=