From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chunming Zhou Subject: [PATCH i-g-t] igt: add timeline test cases v2 Date: Tue, 11 Dec 2018 18:37:35 +0800 Message-ID: <20181211103735.26058-1-david1.zhou@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Christian.Koenig@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org djI6IGFkYXB0IHRvIG5ldyB0cmFuc2ZlciBpb2N0bAoKU2lnbmVkLW9mZi1ieTogQ2h1bm1pbmcg WmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4KLS0tCiBpbmNsdWRlL2RybS11YXBpL2RybS5oICAg fCAgIDMzICsrCiBsaWIvaWd0X3N5bmNvYmouYyAgICAgICAgfCAgMjA2ICsrKysrKysrCiBsaWIv aWd0X3N5bmNvYmouaCAgICAgICAgfCAgIDE5ICsKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICB8 ICAgIDEgKwogdGVzdHMvc3luY29ial90aW1lbGluZS5jIHwgMTAzMiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxMjkxIGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMKCmRpZmYgLS1n aXQgYS9pbmNsdWRlL2RybS11YXBpL2RybS5oIGIvaW5jbHVkZS9kcm0tdWFwaS9kcm0uaAppbmRl eCA4NWM2ODVhMi4uZGNkMjQ1ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtLXVhcGkvZHJtLmgK KysrIGIvaW5jbHVkZS9kcm0tdWFwaS9kcm0uaApAQCAtNzMxLDYgKzczMSw4IEBAIHN0cnVjdCBk cm1fc3luY29ial9oYW5kbGUgewogCiAjZGVmaW5lIERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJ VF9BTEwgKDEgPDwgMCkKICNkZWZpbmUgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9T VUJNSVQgKDEgPDwgMSkKKy8qIHdhaXQgZm9yIHRpbWUgcG9pbnQgdG8gYmVjb21lIGF2YWlsYWJs ZSAqLworI2RlZmluZSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfQVZBSUxBQkxFICgxIDw8 IDIpCiBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdCB7CiAJX191NjQgaGFuZGxlczsKIAkvKiBhYnNv bHV0ZSB0aW1lb3V0ICovCkBAIC03NDEsMTEgKzc0MywzOCBAQCBzdHJ1Y3QgZHJtX3N5bmNvYmpf d2FpdCB7CiAJX191MzIgcGFkOwogfTsKIAorc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dh aXQgeworICAgICAgICBfX3U2NCBoYW5kbGVzOworICAgICAgICAvKiB3YWl0IG9uIHNwZWNpZmlj IHRpbWVsaW5lIHBvaW50IGZvciBldmVyeSBoYW5kbGVzKi8KKyAgICAgICAgX191NjQgcG9pbnRz OworICAgICAgICAvKiBhYnNvbHV0ZSB0aW1lb3V0ICovCisgICAgICAgIF9fczY0IHRpbWVvdXRf bnNlYzsKKyAgICAgICAgX191MzIgY291bnRfaGFuZGxlczsKKyAgICAgICAgX191MzIgZmxhZ3M7 CisgICAgICAgIF9fdTMyIGZpcnN0X3NpZ25hbGVkOyAvKiBvbmx5IHZhbGlkIHdoZW4gbm90IHdh aXRpbmcgYWxsICovCisgICAgICAgIF9fdTMyIHBhZDsKK307CisKIHN0cnVjdCBkcm1fc3luY29i al9hcnJheSB7CiAJX191NjQgaGFuZGxlczsKIAlfX3UzMiBjb3VudF9oYW5kbGVzOwogCV9fdTMy IHBhZDsKIH07CitzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgeworICAgICAgIF9f dTY0IGhhbmRsZXM7CisgICAgICAgX191NjQgcG9pbnRzOworICAgICAgIF9fdTMyIGNvdW50X2hh bmRsZXM7CisgICAgICAgX191MzIgcGFkOworfTsKKworc3RydWN0IGRybV9zeW5jb2JqX3RyYW5z ZmVyIHsKKyAgICAgICAgX191MzIgc3JjX2hhbmRsZTsKKyAgICAgICAgX191MzIgZHN0X2hhbmRs ZTsKKyAgICAgICAgX191NjQgc3JjX3BvaW50OworICAgICAgICBfX3U2NCBkc3RfcG9pbnQ7Cisg ICAgICAgIF9fdTMyIGZsYWdzOworICAgICAgICBfX3UzMiBwYWQ7Cit9OwogCiAvKiBRdWVyeSBj dXJyZW50IHNjYW5vdXQgc2VxdWVuY2UgbnVtYmVyICovCiBzdHJ1Y3QgZHJtX2NydGNfZ2V0X3Nl cXVlbmNlIHsKQEAgLTkwMiw2ICs5MzEsMTAgQEAgZXh0ZXJuICJDIiB7CiAjZGVmaW5lIERSTV9J T0NUTF9NT0RFX0xJU1RfTEVTU0VFUwlEUk1fSU9XUigweEM3LCBzdHJ1Y3QgZHJtX21vZGVfbGlz dF9sZXNzZWVzKQogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRfTEVBU0UJRFJNX0lPV1IoMHhD OCwgc3RydWN0IGRybV9tb2RlX2dldF9sZWFzZSkKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfUkVW T0tFX0xFQVNFCURSTV9JT1dSKDB4QzksIHN0cnVjdCBkcm1fbW9kZV9yZXZva2VfbGVhc2UpCisj ZGVmaW5lIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1dBSVQgRFJNX0lPV1IoMHhDQSwgc3Ry dWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQpCisjZGVmaW5lIERSTV9JT0NUTF9TWU5DT0JK X1FVRVJZICAgICAgICAgRFJNX0lPV1IoMHhDQiwgc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5l X2FycmF5KQorI2RlZmluZSBEUk1fSU9DVExfU1lOQ09CSl9UUkFOU0ZFUiAgICBEUk1fSU9XUigw eENDLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIpCisjZGVmaW5lIERSTV9JT0NUTF9TWU5D T0JKX1RJTUVMSU5FX1NJR05BTCAgICBEUk1fSU9XUigweENELCBzdHJ1Y3QgZHJtX3N5bmNvYmpf dGltZWxpbmVfYXJyYXkpCiAKIC8qKgogICogRGV2aWNlIHNwZWNpZmljIGlvY3RscyBzaG91bGQg b25seSBiZSBpbiB0aGVpciByZXNwZWN0aXZlIGhlYWRlcnMKZGlmZiAtLWdpdCBhL2xpYi9pZ3Rf c3luY29iai5jIGIvbGliL2lndF9zeW5jb2JqLmMKaW5kZXggZDkxMTRjYTguLmVmYTJhZGM0IDEw MDY0NAotLS0gYS9saWIvaWd0X3N5bmNvYmouYworKysgYi9saWIvaWd0X3N5bmNvYmouYwpAQCAt Mjg2LDMgKzI4NiwyMDkgQEAgc3luY29ial9zaWduYWwoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxl cywgdWludDMyX3QgY291bnQpCiB7CiAJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfc2lnbmFsKGZk LCBoYW5kbGVzLCBjb3VudCksIDApOwogfQorCitzdGF0aWMgaW50CitfX3N5bmNvYmpfdGltZWxp bmVfc2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsIHVp bnQzMl90IGNvdW50KQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcnJh eSA9IHsgMCB9OworCWludCBlcnIgPSAwOworCisJYXJyYXkuaGFuZGxlcyA9IHRvX3VzZXJfcG9p bnRlcihoYW5kbGVzKTsKKwlhcnJheS5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIocG9pbnRzKTsK KwlhcnJheS5jb3VudF9oYW5kbGVzID0gY291bnQ7CisJaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9D VExfU1lOQ09CSl9USU1FTElORV9TSUdOQUwsICZhcnJheSkpCisJCWVyciA9IC1lcnJubzsKKwly ZXR1cm4gZXJyOworfQorCisvKioKKyAqIHN5bmNvYmpfc2lnbmFsOgorICogQGZkOiBUaGUgRFJN IGZpbGUgZGVzY3JpcHRvci4KKyAqIEBoYW5kbGVzOiBBcnJheSBvZiBzeW5jb2JqIGhhbmRsZXMg dG8gc2lnbmFsCisgKiBAcG9pbnRzOiBMaXN0IG9mIHBvaW50IG9mIGhhbmRsZXMgdG8gc2lnbmFs LgorICogQGNvdW50OiBDb3VudCBvZiBzeW5jb2JqIGhhbmRsZXMuCisgKgorICogU2lnbmFsIGEg c2V0IG9mIHN5bmNvYmpzLgorICovCit2b2lkCitzeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChpbnQg ZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLCB1aW50MzJfdCBjb3VudCkK K3sKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsIGhhbmRsZXMs IHBvaW50cywgY291bnQpLCAwKTsKK30KK2ludAorX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9j dGwoaW50IGZkLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCAqYXJncykKK3sKKwlp bnQgZXJyID0gMDsKKwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5F X1dBSVQsIGFyZ3MpKQorCQllcnIgPSAtZXJybm87CisJcmV0dXJuIGVycjsKK30KK3N0YXRpYyBp bnQKK19fc3luY29ial90aW1lbGluZV93YWl0KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVp bnQ2NF90ICpwb2ludHMsCisJCQl1bnNpZ25lZCBudW1faGFuZGxlcywKKwkJCWludDY0X3QgdGlt ZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncywKKwkJCXVpbnQzMl90ICpmaXJzdF9zaWduYWxlZCkK K3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCBhcmdzOworCWludCByZXQ7CisK KwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoaGFuZGxlcyk7CisJYXJncy5wb2ludHMg PSAodWludDY0X3QpdG9fdXNlcl9wb2ludGVyKHBvaW50cyk7CisJYXJncy50aW1lb3V0X25zZWMg PSB0aW1lb3V0X25zZWM7CisJYXJncy5jb3VudF9oYW5kbGVzID0gbnVtX2hhbmRsZXM7CisJYXJn cy5mbGFncyA9IGZsYWdzOworCWFyZ3MuZmlyc3Rfc2lnbmFsZWQgPSAwOworCWFyZ3MucGFkID0g MDsKKworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlU LCAmYXJncyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtZXJybm87CisKKwlpZiAoZmlyc3Rf c2lnbmFsZWQpCisJCSpmaXJzdF9zaWduYWxlZCA9IGFyZ3MuZmlyc3Rfc2lnbmFsZWQ7CisKKwly ZXR1cm4gcmV0OworfQoraW50CitzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGludCBmZCwgdWlu dDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsCisJCQkgIHVuc2lnbmVkIG51bV9oYW5k bGVzLAorCQkJICBpbnQ2NF90IHRpbWVvdXRfbnNlYywgdW5zaWduZWQgZmxhZ3MpCit7CisJcmV0 dXJuIF9fc3luY29ial90aW1lbGluZV93YWl0KGZkLCBoYW5kbGVzLCBwb2ludHMsIG51bV9oYW5k bGVzLAorCQkJCSAgICAgICB0aW1lb3V0X25zZWMsIGZsYWdzLCBOVUxMKTsKK30KKworLyoqCisg KiBzeW5jb2JqX3RpbWVsaW5lX3dhaXQ6CisgKiBAZmQ6IFRoZSBEUk0gZmlsZSBkZXNjcmlwdG9y CisgKiBAaGFuZGxlczogTGlzdCBvZiBzeW5jb2JqIGhhbmRsZXMgdG8gd2FpdCBmb3IuCisgKiBA cG9pbnRzOiBMaXN0IG9mIHBvaW50IG9mIGhhbmRsZXMgdG8gd2FpdCBmb3IuCisgKiBAbnVtX2hh bmRsZXM6IENvdW50IG9mIGhhbmRsZXMKKyAqIEB0aW1lb3V0X25zZWM6IEFic29sdXRlIHdhaXQg dGltZW91dCBpbiBuYW5vc2Vjb25kcy4KKyAqIEBmbGFnczogV2FpdCBpb2N0bCBmbGFncy4KKyAq IEBmaXJzdF9zaWduYWxlZDogUmV0dXJuZWQgaGFuZGxlIGZvciBmaXJzdCBzaWduYWxlZCBzeW5j b2JqLgorICoKKyAqIFdhaXRzIGluIHRoZSBrZXJuZWwgZm9yIGFueS9hbGwgdGhlIHJlcXVlc3Rl ZCBzeW5jb2JqcyB0aW1lbGluZSBwb2ludAorICogdXNpbmcgdGhlIHRpbWVvdXQgYW5kIGZsYWdz LgorICogUmV0dXJuczogYm9vbCB2YWx1ZSAtIGZhbHNlID0gdGltZWRvdXQsIHRydWUgPSBzaWdu YWxlZAorICovCitib29sCitzeW5jb2JqX3RpbWVsaW5lX3dhaXQoaW50IGZkLCB1aW50MzJfdCAq aGFuZGxlcywgdWludDY0X3QgKnBvaW50cywKKwkJICAgICAgdW5zaWduZWQgbnVtX2hhbmRsZXMs CisJCSAgICAgIGludDY0X3QgdGltZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncywKKwkJICAgICAg dWludDMyX3QgKmZpcnN0X3NpZ25hbGVkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBfX3N5bmNv YmpfdGltZWxpbmVfd2FpdChmZCwgaGFuZGxlcywgcG9pbnRzLCBudW1faGFuZGxlcywKKwkJCQkg ICAgICB0aW1lb3V0X25zZWMsIGZsYWdzLCBmaXJzdF9zaWduYWxlZCk7CisJaWYgKHJldCA9PSAt RVRJTUUpCisJCXJldHVybiBmYWxzZTsKKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisKKwlyZXR1 cm4gdHJ1ZTsKKworfQorCitzdGF0aWMgaW50CitfX3N5bmNvYmpfdGltZWxpbmVfcXVlcnkoaW50 IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKipwb2ludHMsCisJCQkgdWludDMyX3Qg aGFuZGxlX2NvdW50KQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcmdz OworCWludCByZXQ7CisKKwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoaGFuZGxlcyk7 CisJYXJncy5wb2ludHMgPSAodWludDY0X3QpdG9fdXNlcl9wb2ludGVyKHBvaW50cyk7CisJYXJn cy5jb3VudF9oYW5kbGVzID0gaGFuZGxlX2NvdW50OworCWFyZ3MucGFkID0gMDsKKworCXJldCA9 IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9RVUVSWSwgJmFyZ3MpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc3luY29ial90aW1lbGlu ZV9xdWVyeToKKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3IuCisgKiBAaGFuZGxlczog QXJyYXkgb2Ygc3luY29iaiBoYW5kbGVzLgorICogQHBvaW50czogQXJyYXkgb2Ygc3luY29iaiBw b2ludHMgcXVlcmllZC4KKyAqIEBjb3VudDogQ291bnQgb2Ygc3luY29iaiBoYW5kbGVzLgorICoK KyAqIHF1ZXJ5IGEgc2V0IG9mIHN5bmNvYmpzLgorICovCit2b2lkCitzeW5jb2JqX3RpbWVsaW5l X3F1ZXJ5KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICoqcG9pbnRzLAorCQkg ICAgICAgdWludDMyX3QgY291bnQpCit7CisJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxp bmVfcXVlcnkoZmQsIGhhbmRsZXMsIHBvaW50cywgY291bnQpLCAwKTsKK30KKworc3RhdGljIGlu dAorX19zeW5jb2JqX2JpbmFyeV90b190aW1lbGluZShpbnQgZmQsIHVpbnQzMl90IHRpbWVsaW5l X2hhbmRsZSwKKwkJCSAgICAgdWludDY0X3QgcG9pbnQsIHVpbnQzMl90IGJpbmFyeV9oYW5kbGUp Cit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyIGFyZ3M7CisKKwlhcmdzLnNyY19oYW5k bGUgPSBiaW5hcnlfaGFuZGxlOworCWFyZ3MuZHN0X2hhbmRsZSA9IHRpbWVsaW5lX2hhbmRsZTsK KwlhcmdzLnNyY19wb2ludCA9IDA7CisJYXJncy5kc3RfcG9pbnQgPSBwb2ludDsKKwlhcmdzLmZs YWdzID0gMDsKKwlhcmdzLnBhZCA9IDA7CisJcmV0dXJuIGRybUlvY3RsKGZkLCBEUk1fSU9DVExf U1lOQ09CSl9UUkFOU0ZFUiwgJmFyZ3MpOworfQorCisvKioKKyAqIHN5bmNvYmpfYmluYXJ5X3Rv X3RpbWVsaW5lOgorICogQGZkOiBUaGUgRFJNIGZpbGUgZGVzY3JpcHRvci4KKyAqIEB0aW1lbGlu ZV9oYW5kbGVzOiBBcnJheSBvZiB0aW1lbGluZSBzeW5jb2JqIGhhbmRsZXMuCisgKiBAcG9pbnQ6 IHN5bmNvYmogcG9pbnQuCisgKiBAYmluYXJ5X2hhbmRsZTogQXJyYXkgb2YgYmluYXJ5IHN5bmNv YmogaGFuZGxlcy4KKyAqCisgKiBxdWVyeSBhIHNldCBvZiBzeW5jb2Jqcy4KKyAqLwordm9pZAor c3luY29ial9iaW5hcnlfdG9fdGltZWxpbmUoaW50IGZkLCB1aW50MzJfdCB0aW1lbGluZV9oYW5k bGUsCisJCQkgICB1aW50NjRfdCBwb2ludCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSkKK3sKKwlp Z3RfYXNzZXJ0X2VxKF9fc3luY29ial9iaW5hcnlfdG9fdGltZWxpbmUoZmQsIHRpbWVsaW5lX2hh bmRsZSwgcG9pbnQsCisJCQkJCQkgICBiaW5hcnlfaGFuZGxlKSwgMCk7Cit9CisKK3N0YXRpYyBp bnQKK19fc3luY29ial90aW1lbGluZV90b19iaW5hcnkoaW50IGZkLCB1aW50MzJfdCBiaW5hcnlf aGFuZGxlLAorCQkJICAgICB1aW50MzJfdCB0aW1lbGluZV9oYW5kbGUsCisJCQkgICAgIHVpbnQ2 NF90IHBvaW50LAorCQkJICAgICB1aW50MzJfdCBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNv YmpfdHJhbnNmZXIgYXJnczsKKworCWFyZ3MuZHN0X2hhbmRsZSA9IGJpbmFyeV9oYW5kbGU7CisJ YXJncy5zcmNfaGFuZGxlID0gdGltZWxpbmVfaGFuZGxlOworCWFyZ3MuZHN0X3BvaW50ID0gMDsK KwlhcmdzLnNyY19wb2ludCA9IHBvaW50OworCWFyZ3MuZmxhZ3MgPSBmbGFnczsKKwlhcmdzLnBh ZCA9IDA7CisJcmV0dXJuIGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9UUkFOU0ZFUiwg JmFyZ3MpOworfQorCisvKioKKyAqIHN5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lOgorICogQGZk OiBUaGUgRFJNIGZpbGUgZGVzY3JpcHRvci4KKyAqIEB0aW1lbGluZV9oYW5kbGVzOiBBcnJheSBv ZiB0aW1lbGluZSBzeW5jb2JqIGhhbmRsZXMuCisgKiBAcG9pbnQ6IHN5bmNvYmogcG9pbnQuCisg KiBAYmluYXJ5X2hhbmRsZTogQXJyYXkgb2YgYmluYXJ5IHN5bmNvYmogaGFuZGxlcy4KKyAqCisg KiBxdWVyeSBhIHNldCBvZiBzeW5jb2Jqcy4KKyAqLwordm9pZAorc3luY29ial90aW1lbGluZV90 b19iaW5hcnkoaW50IGZkLCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlLAorCQkJICAgdWludDMyX3Qg dGltZWxpbmVfaGFuZGxlLAorCQkJICAgdWludDY0X3QgcG9pbnQsCisJCQkgICB1aW50MzJfdCBm bGFncykKK3sKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV90b19iaW5hcnkoZmQs IGJpbmFyeV9oYW5kbGUsCisJCQkJCQkgICB0aW1lbGluZV9oYW5kbGUsIHBvaW50LAorCQkJCQkJ ICAgZmxhZ3MpLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pZ3Rfc3luY29iai5oIGIvbGliL2ln dF9zeW5jb2JqLmgKaW5kZXggNDRkMTM3OGQuLjE3NWU1MDI3IDEwMDY0NAotLS0gYS9saWIvaWd0 X3N5bmNvYmouaAorKysgYi9saWIvaWd0X3N5bmNvYmouaApAQCAtNjUsNyArNjUsMjYgQEAgaW50 IHN5bmNvYmpfd2FpdF9lcnIoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDMyX3QgY291 bnQsCiBib29sIHN5bmNvYmpfd2FpdChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50MzJf dCBjb3VudCwKIAkJICB1aW50NjRfdCBhYnNfdGltZW91dF9uc2VjLCB1aW50MzJfdCBmbGFncywK IAkJICB1aW50MzJfdCAqZmlyc3Rfc2lnbmFsZWQpOworaW50IF9fc3luY29ial90aW1lbGluZV93 YWl0X2lvY3RsKGludCBmZCwKKwkJCQkgIHN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0 ICphcmdzKTsKK2Jvb2wgc3luY29ial90aW1lbGluZV93YWl0KGludCBmZCwgdWludDMyX3QgKmhh bmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsCisJCQkgICB1bnNpZ25lZCBudW1faGFuZGxlcywKKwkJ CSAgIGludDY0X3QgdGltZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncywKKwkJCSAgIHVpbnQzMl90 ICpmaXJzdF9zaWduYWxlZCk7CitpbnQgc3luY29ial90aW1lbGluZV93YWl0X2VycihpbnQgZmQs IHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLAorCQkJICAgICAgdW5zaWduZWQg bnVtX2hhbmRsZXMsCisJCQkgICAgICBpbnQ2NF90IHRpbWVvdXRfbnNlYywgdW5zaWduZWQgZmxh Z3MpOwogdm9pZCBzeW5jb2JqX3Jlc2V0KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQz Ml90IGNvdW50KTsKIHZvaWQgc3luY29ial9zaWduYWwoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxl cywgdWludDMyX3QgY291bnQpOwordm9pZCBzeW5jb2JqX3RpbWVsaW5lX3F1ZXJ5KGludCBmZCwg dWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICoqcG9pbnRzLAorCQkJICAgIHVpbnQzMl90IGNv dW50KTsKK3ZvaWQgc3luY29ial9iaW5hcnlfdG9fdGltZWxpbmUoaW50IGZkLCB1aW50MzJfdCB0 aW1lbGluZV9oYW5kbGUsCisJCQkJdWludDY0X3QgcG9pbnQsIHVpbnQzMl90IGJpbmFyeV9oYW5k bGUpOwordm9pZCBzeW5jb2JqX3RpbWVsaW5lX3RvX2JpbmFyeShpbnQgZmQsIHVpbnQzMl90IGJp bmFyeV9oYW5kbGUsCisJCQkJdWludDMyX3QgdGltZWxpbmVfaGFuZGxlLAorCQkJCXVpbnQ2NF90 IHBvaW50LAorCQkJCXVpbnQzMl90IGZsYWdzKTsKK3ZvaWQgc3luY29ial90aW1lbGluZV9zaWdu YWwoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBvaW50cywKKwkJCSAgICAg dWludDMyX3QgY291bnQpOwogCiAjZW5kaWYgLyogSUdUX1NZTkNPQkpfSCAqLwpkaWZmIC0tZ2l0 IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCBiOGE2ZTYxYi4u YmRkYzIyM2MgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29u LmJ1aWxkCkBAIC03Nyw2ICs3Nyw3IEBAIHRlc3RfcHJvZ3MgPSBbCiAJJ3N3X3N5bmMnLAogCSdz eW5jb2JqX2Jhc2ljJywKIAknc3luY29ial93YWl0JywKKwknc3luY29ial90aW1lbGluZScsCiAJ J3RlbXBsYXRlJywKIAkndG9vbHNfdGVzdCcsCiAJJ3YzZF9nZXRfYm9fb2Zmc2V0JywKZGlmZiAt LWdpdCBhL3Rlc3RzL3N5bmNvYmpfdGltZWxpbmUuYyBiL3Rlc3RzL3N5bmNvYmpfdGltZWxpbmUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNTA1ZmQ5ZWQKLS0tIC9kZXYv bnVsbAorKysgYi90ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMKQEAgLTAsMCArMSwxMDMyIEBACisv KgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgor I2luY2x1ZGUgInN3X3N5bmMuaCIKKyNpbmNsdWRlICJpZ3Rfc3luY29iai5oIgorI2luY2x1ZGUg PHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNp bmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSAiZHJtLmgi CisKK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0cyBmb3IgdGhlIGRybSB0aW1lbGluZSBzeW5j IG9iamVjdCBBUEkiKTsKKworLyogT25lIHRlbnRoIG9mIGEgc2Vjb25kICovCisjZGVmaW5lIFNI T1JUX1RJTUVfTlNFQyAxMDAwMDAwMDB1bGwKKworI2RlZmluZSBOU0VDU19QRVJfU0VDIDEwMDAw MDAwMDB1bGwKKworc3RhdGljIHVpbnQ2NF90CitnZXR0aW1lX25zKHZvaWQpCit7CisJc3RydWN0 IHRpbWVzcGVjIGN1cnJlbnQ7CisJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZjdXJy ZW50KTsKKwlyZXR1cm4gKHVpbnQ2NF90KWN1cnJlbnQudHZfc2VjICogTlNFQ1NfUEVSX1NFQyAr IGN1cnJlbnQudHZfbnNlYzsKK30KKworc3RhdGljIHZvaWQKK3NsZWVwX25zZWModWludDY0X3Qg dGltZV9uc2VjKQoreworCXN0cnVjdCB0aW1lc3BlYyB0OworCXQudHZfc2VjID0gdGltZV9uc2Vj IC8gTlNFQ1NfUEVSX1NFQzsKKwl0LnR2X25zZWMgPSB0aW1lX25zZWMgJSBOU0VDU19QRVJfU0VD OworCWlndF9hc3NlcnRfZXEobmFub3NsZWVwKCZ0LCBOVUxMKSwgMCk7Cit9CisKK3N0YXRpYyB1 aW50NjRfdAorc2hvcnRfdGltZW91dCh2b2lkKQoreworCXJldHVybiBnZXR0aW1lX25zKCkgKyBT SE9SVF9USU1FX05TRUM7Cit9CisKK3N0YXRpYyBpbnQKK3N5bmNvYmpfYXR0YWNoX3N3X3N5bmMo aW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHBvaW50KQoreworCXN0cnVjdCBkcm1f c3luY29ial9oYW5kbGU7CisJdWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAw KTsKKwlpbnQgdGltZWxpbmUsIGZlbmNlOworCisJdGltZWxpbmUgPSBzd19zeW5jX3RpbWVsaW5l X2NyZWF0ZSgpOworCWZlbmNlID0gc3dfc3luY190aW1lbGluZV9jcmVhdGVfZmVuY2UodGltZWxp bmUsIDEpOworCXN5bmNvYmpfaW1wb3J0X3N5bmNfZmlsZShmZCwgc3luY29iaiwgZmVuY2UpOwor CXN5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lKGZkLCBoYW5kbGUsIHBvaW50LCBzeW5jb2JqKTsK KwljbG9zZShmZW5jZSk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOworCXJldHVy biB0aW1lbGluZTsKK30KKworc3RhdGljIHZvaWQKK3N5bmNvYmpfdHJpZ2dlcihpbnQgZmQsIHVp bnQzMl90IGhhbmRsZSwgdWludDY0X3QgcG9pbnQpCit7CisJaW50IHRpbWVsaW5lID0gc3luY29i al9hdHRhY2hfc3dfc3luYyhmZCwgaGFuZGxlLCBwb2ludCk7CisJc3dfc3luY190aW1lbGluZV9p bmModGltZWxpbmUsIDEpOworCWNsb3NlKHRpbWVsaW5lKTsKK30KKworc3RhdGljIHRpbWVyX3QK K3NldF90aW1lcih2b2lkICgqY2IpKHVuaW9uIHNpZ3ZhbCksIHZvaWQgKnB0ciwgaW50IGksIHVp bnQ2NF90IG5zZWMpCit7CisgICAgICAgIHRpbWVyX3QgdGltZXI7CisgICAgICAgIHN0cnVjdCBz aWdldmVudCBzZXY7CisgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjIGl0czsKKworICAgICAgICBt ZW1zZXQoJnNldiwgMCwgc2l6ZW9mKHNldikpOworICAgICAgICBzZXYuc2lnZXZfbm90aWZ5ID0g U0lHRVZfVEhSRUFEOworCWlmIChwdHIpCisJCXNldi5zaWdldl92YWx1ZS5zaXZhbF9wdHIgPSBw dHI7CisJZWxzZQorCQlzZXYuc2lnZXZfdmFsdWUuc2l2YWxfaW50ID0gaTsKKyAgICAgICAgc2V2 LnNpZ2V2X25vdGlmeV9mdW5jdGlvbiA9IGNiOworICAgICAgICBpZ3RfYXNzZXJ0KHRpbWVyX2Ny ZWF0ZShDTE9DS19NT05PVE9OSUMsICZzZXYsICZ0aW1lcikgPT0gMCk7CisKKyAgICAgICAgbWVt c2V0KCZpdHMsIDAsIHNpemVvZihpdHMpKTsKKyAgICAgICAgaXRzLml0X3ZhbHVlLnR2X3NlYyA9 IG5zZWMgLyBOU0VDX1BFUl9TRUM7CisgICAgICAgIGl0cy5pdF92YWx1ZS50dl9uc2VjID0gbnNl YyAlIE5TRUNfUEVSX1NFQzsKKyAgICAgICAgaWd0X2Fzc2VydCh0aW1lcl9zZXR0aW1lKHRpbWVy LCAwLCAmaXRzLCBOVUxMKSA9PSAwKTsKKworCXJldHVybiB0aW1lcjsKK30KKworc3RydWN0IGZk X2hhbmRsZV9wYWlyIHsKKwlpbnQgZmQ7CisJdWludDMyX3QgaGFuZGxlOworCXVpbnQ2NF90IHBv aW50OworfTsKKworc3RhdGljIHZvaWQKK3RpbWVsaW5lX2luY19mdW5jKHVuaW9uIHNpZ3ZhbCBz aWd2YWwpCit7CisJc3dfc3luY190aW1lbGluZV9pbmMoc2lndmFsLnNpdmFsX2ludCwgMSk7Cit9 CisKK3N0YXRpYyB2b2lkCitzeW5jb2JqX3RyaWdnZXJfZnJlZV9wYWlyX2Z1bmModW5pb24gc2ln dmFsIHNpZ3ZhbCkKK3sKKwlzdHJ1Y3QgZmRfaGFuZGxlX3BhaXIgKnBhaXIgPSBzaWd2YWwuc2l2 YWxfcHRyOworCXN5bmNvYmpfdHJpZ2dlcihwYWlyLT5mZCwgcGFpci0+aGFuZGxlLCBwYWlyLT5w b2ludCk7CisJZnJlZShwYWlyKTsKK30KKworc3RhdGljIHRpbWVyX3QKK3N5bmNvYmpfdHJpZ2dl cl9kZWxheWVkKGludCBmZCwgdWludDMyX3Qgc3luY29iaiwgdWludDY0X3QgcG9pbnQsIHVpbnQ2 NF90IG5zZWMpCit7CisJc3RydWN0IGZkX2hhbmRsZV9wYWlyICpwYWlyID0gbWFsbG9jKHNpemVv ZigqcGFpcikpOworCisJcGFpci0+ZmQgPSBmZDsKKwlwYWlyLT5oYW5kbGUgPSBzeW5jb2JqOwor CXBhaXItPnBvaW50ID0gc3luY29iajsKKworCXJldHVybiBzZXRfdGltZXIoc3luY29ial90cmln Z2VyX2ZyZWVfcGFpcl9mdW5jLCBwYWlyLCAwLCBuc2VjKTsKK30KKworc3RhdGljIHZvaWQKK3Rl c3Rfd2FpdF9iYWRfZmxhZ3MoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGlu ZV93YWl0IHdhaXQgPSB7IDAgfTsKKwl3YWl0LmZsYWdzID0gMHhkZWFkYmVlZjsKKwlpZ3RfYXNz ZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1FSU5WQUwp OworfQorCitzdGF0aWMgdm9pZAordGVzdF93YWl0X3plcm9faGFuZGxlcyhpbnQgZmQpCit7CisJ c3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQgd2FpdCA9IHsgMCB9OworCWlndF9hc3Nl cnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwoZmQsICZ3YWl0KSwgLUVJTlZBTCk7 Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dhaXRfaWxsZWdhbF9oYW5kbGUoaW50IGZkKQorewor CXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdhaXQgPSB7IDAgfTsKKwl1aW50MzJf dCBoYW5kbGUgPSAwOworCisJd2FpdC5jb3VudF9oYW5kbGVzID0gMTsKKwl3YWl0LmhhbmRsZXMg PSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGlt ZWxpbmVfd2FpdF9pb2N0bChmZCwgJndhaXQpLCAtRU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQK K3Rlc3RfcXVlcnlfemVyb19oYW5kbGVzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpf dGltZWxpbmVfYXJyYXkgYXJncyA9IHsgMCB9OworCWludCByZXQ7CisKKwlyZXQgPSBkcm1Jb2N0 bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfUVVFUlksICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9 PSAtMSAmJiBlcnJubyA9PSAgRUlOVkFMKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlf aWxsZWdhbF9oYW5kbGUoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9h cnJheSBhcmdzID0geyAwIH07CisJdWludDMyX3QgaGFuZGxlID0gMDsKKwlpbnQgcmV0OworCisJ YXJncy5jb3VudF9oYW5kbGVzID0gMTsKKwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIo JmhhbmRsZSk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZLCAm YXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsKK30KKwor c3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfb25lX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlz dHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJyYXkgPSB7IDAgfTsKKwl1aW50MzJf dCBzeW5jb2Jqc1szXTsKKwl1aW50NjRfdCBpbml0aWFsX3BvaW50ID0gMTsKKwlpbnQgcmV0Owor CisJc3luY29ianNbMF0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJc3luY29ianNbMV0gPSAw OworCXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCisJc3luY29ial90aW1l bGluZV9zaWduYWwoZmQsICZzeW5jb2Jqc1swXSwgJmluaXRpYWxfcG9pbnQsIDEpOworCXN5bmNv YmpfdGltZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNbMl0sICZpbml0aWFsX3BvaW50LCAxKTsK KwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1sw XSwKKwkJCQkJCSZpbml0aWFsX3BvaW50LCAxLCAwLCAwKSwgMCk7CisJaWd0X2Fzc2VydF9lcShz eW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29ianNbMl0sCisJCQkJCQkmaW5pdGlh bF9wb2ludCwgMSwgMCwgMCksIDApOworCisJYXJyYXkuY291bnRfaGFuZGxlcyA9IDM7CisJYXJy YXkuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihzeW5jb2Jqcyk7CisJcmV0ID0gZHJtSW9jdGwo ZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZLCAmYXJyYXkpOworCWlndF9hc3NlcnQocmV0ID09 IC0xICYmIGVycm5vID09IEVOT0VOVCk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpz WzBdKTsKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzJdKTsKK30KKworc3RhdGljIHZv aWQKK3Rlc3RfcXVlcnlfYmFkX3BhZChpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3Rp bWVsaW5lX2FycmF5IGFycmF5ID0geyAwIH07CisJdWludDMyX3QgaGFuZGxlID0gMDsKKwlpbnQg cmV0OworCisJYXJyYXkucGFkID0gMHhkZWFkYmVlZjsKKwlhcnJheS5jb3VudF9oYW5kbGVzID0g MTsKKwlhcnJheS5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCXJldCA9IGRy bUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9RVUVSWSwgJmFycmF5KTsKKwlpZ3RfYXNzZXJ0 KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5WQUwpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9z aWduYWxfemVyb19oYW5kbGVzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxp bmVfYXJyYXkgYXJncyA9IHsgMCB9OworCWludCByZXQ7CisKKwlyZXQgPSBkcm1Jb2N0bChmZCwg RFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfU0lHTkFMLCAmYXJncyk7CisJaWd0X2Fzc2VydChy ZXQgPT0gLTEgJiYgZXJybm8gPT0gIEVJTlZBTCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3Np Z25hbF9pbGxlZ2FsX2hhbmRsZShpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVs aW5lX2FycmF5IGFyZ3MgPSB7IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUgPSAwOworCWludCByZXQ7 CisKKwlhcmdzLmNvdW50X2hhbmRsZXMgPSAxOworCWFyZ3MuaGFuZGxlcyA9IHRvX3VzZXJfcG9p bnRlcigmaGFuZGxlKTsKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElN RUxJTkVfU0lHTkFMLCAmYXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0g RU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc2lnbmFsX2lsbGVnYWxfcG9pbnQoaW50 IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcmdzID0geyAwIH07 CisJdWludDMyX3QgaGFuZGxlID0gMTsKKwl1aW50NjRfdCBwb2ludCA9IDA7CisJaW50IHJldDsK KworCWFyZ3MuY291bnRfaGFuZGxlcyA9IDE7CisJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2lu dGVyKCZoYW5kbGUpOworCWFyZ3MucG9pbnRzID0gdG9fdXNlcl9wb2ludGVyKCZwb2ludCk7CisJ cmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFy Z3MpOworCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7Cit9CitzdGF0 aWMgdm9pZAordGVzdF9zaWduYWxfb25lX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlzdHJ1 Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJyYXkgPSB7IDAgfTsKKwl1aW50MzJfdCBz eW5jb2Jqc1szXTsKKwl1aW50NjRfdCBpbml0aWFsX3BvaW50ID0gMTsKKwlpbnQgcmV0OworCisJ c3luY29ianNbMF0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJc3luY29ianNbMV0gPSAwOwor CXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCisJc3luY29ial90aW1lbGlu ZV9zaWduYWwoZmQsICZzeW5jb2Jqc1swXSwgJmluaXRpYWxfcG9pbnQsIDEpOworCXN5bmNvYmpf dGltZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNbMl0sICZpbml0aWFsX3BvaW50LCAxKTsKKwlp Z3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1swXSwK KwkJCQkJCSZpbml0aWFsX3BvaW50LCAxLCAwLCAwKSwgMCk7CisJaWd0X2Fzc2VydF9lcShzeW5j b2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29ianNbMl0sCisJCQkJCQkmaW5pdGlhbF9w b2ludCwgMSwgMCwgMCksIDApOworCisJYXJyYXkuY291bnRfaGFuZGxlcyA9IDM7CisJYXJyYXku aGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihzeW5jb2Jqcyk7CisJcmV0ID0gZHJtSW9jdGwoZmQs IERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFycmF5KTsKKwlpZ3RfYXNzZXJ0 KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpOworCisJc3luY29ial9kZXN0cm95KGZkLCBz eW5jb2Jqc1swXSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1syXSk7Cit9CisKK3N0 YXRpYyB2b2lkCit0ZXN0X3NpZ25hbF9iYWRfcGFkKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5 bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJyYXkgPSB7IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUgPSAw OworCWludCByZXQ7CisKKwlhcnJheS5wYWQgPSAweGRlYWRiZWVmOworCWFycmF5LmNvdW50X2hh bmRsZXMgPSAxOworCWFycmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJ cmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFy cmF5KTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5WQUwpOworfQorCitz dGF0aWMgdm9pZAordGVzdF9zaWduYWxfYXJyYXkoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNv YmpzWzRdOworCXVpbnQ2NF90IHBvaW50c1s0XSA9IHsxLCAxLCAxLCAwfTsKKworCXN5bmNvYmpz WzBdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5bmNvYmpzWzFdID0gc3luY29ial9jcmVh dGUoZmQsIDApOworCXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5bmNv YmpzWzNdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCisJc3luY29ial90aW1lbGluZV9zaWdu YWwoZmQsIHN5bmNvYmpzLCBwb2ludHMsIDQpOworCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1l bGluZV93YWl0X2VycihmZCwgc3luY29ianMsCisJCQkJCQlwb2ludHMsIDMsIDAsIDApLCAwKTsK KwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1szXSwgMSwgMCwg MCksIDApOworCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1swXSk7CisJc3luY29ial9k ZXN0cm95KGZkLCBzeW5jb2Jqc1sxXSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1sy XSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1szXSk7Cit9CisKK3N0YXRpYyB2b2lk Cit0ZXN0X3RyYW5zZmVyX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5 bmNvYmpfdHJhbnNmZXIgYXJncyA9IHsgMCB9OworCXVpbnQzMl90IGhhbmRsZSA9IDA7CisJaW50 IHJldDsKKworCWFyZ3Muc3JjX2hhbmRsZSA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsKKwlh cmdzLmRzdF9oYW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJYXJncy5zcmNfcG9p bnQgPSAxOworCWFyZ3MuZHN0X3BvaW50ID0gMDsKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lP Q1RMX1NZTkNPQkpfVFJBTlNGRVIsICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBl cnJubyA9PSBFTk9FTlQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF90cmFuc2Zlcl9iYWRfcGFk KGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIgYXJnID0geyAwIH07CisJ dWludDMyX3QgaGFuZGxlID0gMDsKKwlpbnQgcmV0OworCisJYXJnLnBhZCA9IDB4ZGVhZGJlZWY7 CisJYXJnLnNyY19oYW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJYXJnLmRzdF9o YW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERS TV9JT0NUTF9TWU5DT0JKX1RSQU5TRkVSLCAmYXJnKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAm JiBlcnJubyA9PSBFSU5WQUwpOworfQorCisjZGVmaW5lIFdBSVRfRk9SX1NVQk1JVAkJKDEgPDwg MCkKKyNkZWZpbmUgV0FJVF9BTEwJCSgxIDw8IDEpCisjZGVmaW5lIFdBSVRfQVZBSUxBQkxFCQko MSA8PCAyKQorI2RlZmluZSBXQUlUX1VOU1VCTUlUVEVECSgxIDw8IDMpCisjZGVmaW5lIFdBSVRf U1VCTUlUVEVECQkoMSA8PCA0KQorI2RlZmluZSBXQUlUX1NJR05BTEVECQkoMSA8PCA1KQorI2Rl ZmluZSBXQUlUX0ZMQUdTX01BWAkJKDEgPDwgNikgLSAxCisKK3N0YXRpYyB1aW50MzJfdAorZmxh Z3NfZm9yX3Rlc3RfZmxhZ3ModWludDMyX3QgdGVzdF9mbGFncykKK3sKKwl1aW50MzJfdCBmbGFn cyA9IDA7CisKKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkKKwkJZmxhZ3MgfD0g RFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQ7CisKKwlpZiAodGVzdF9mbGFn cyAmIFdBSVRfQVZBSUxBQkxFKQorCQlmbGFncyB8PSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dB SVRfQVZBSUxBQkxFOworCisJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0FMTCkKKwkJZmxhZ3MgfD0g RFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0FMTDsKKworCXJldHVybiBmbGFnczsKK30KKwor c3RhdGljIHZvaWQKK3Rlc3Rfc2luZ2xlX3dhaXQoaW50IGZkLCB1aW50MzJfdCB0ZXN0X2ZsYWdz LCBpbnQgZXhwZWN0KQoreworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwg MCk7CisJdWludDMyX3QgZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdzKTsK Kwl1aW50NjRfdCBwb2ludCA9IDE7CisJaW50IHRpbWVsaW5lID0gLTE7CisKKwlpZiAodGVzdF9m bGFncyAmIChXQUlUX1NVQk1JVFRFRCB8IFdBSVRfU0lHTkFMRUQpKQorCQl0aW1lbGluZSA9IHN5 bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmosIHBvaW50KTsKKworCWlmICh0ZXN0X2Zs YWdzICYgV0FJVF9TSUdOQUxFRCkKKwkJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmUsIDEp OworCisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29i aiwgJnBvaW50LCAxLAorCQkJCQkJMCwgZmxhZ3MpLCBleHBlY3QpOworCisJaWd0X2Fzc2VydF9l cShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LCAxLAorCQkJ CQkJc2hvcnRfdGltZW91dCgpLCBmbGFncyksIGV4cGVjdCk7CisKKwlpZiAoZXhwZWN0ICE9IC1F VElNRSkgeworCQlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZz eW5jb2JqLCAmcG9pbnQsIDEsCisJCQkJCQkJVUlOVDY0X01BWCwgZmxhZ3MpLCBleHBlY3QpOwor CX0KKworCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29iaik7CisJaWYgKHRpbWVsaW5lICE9IC0x KQorCQljbG9zZSh0aW1lbGluZSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dhaXRfZGVsYXll ZF9zaWduYWwoaW50IGZkLCB1aW50MzJfdCB0ZXN0X2ZsYWdzKQoreworCXVpbnQzMl90IHN5bmNv YmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDMyX3QgZmxhZ3MgPSBmbGFnc19mb3Jf dGVzdF9mbGFncyh0ZXN0X2ZsYWdzKTsKKwl1aW50NjRfdCBwb2ludCA9IDE7CisJaW50IHRpbWVs aW5lID0gLTE7CisJdGltZXJfdCB0aW1lcjsKKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9GT1Jf U1VCTUlUKSB7CisJCXRpbWVyID0gc3luY29ial90cmlnZ2VyX2RlbGF5ZWQoZmQsIHN5bmNvYmos IHBvaW50LCBTSE9SVF9USU1FX05TRUMpOworCX0gZWxzZSB7CisJCXRpbWVsaW5lID0gc3luY29i al9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29iaiwgcG9pbnQpOworCQl0aW1lciA9IHNldF90aW1l cih0aW1lbGluZV9pbmNfZnVuYywgTlVMTCwKKwkJCQkgIHRpbWVsaW5lLCBTSE9SVF9USU1FX05T RUMpOworCX0KKworCWlndF9hc3NlcnQoc3luY29ial90aW1lbGluZV93YWl0KGZkLCAmc3luY29i aiwgJnBvaW50LCAxLAorCQkJCWdldHRpbWVfbnMoKSArIFNIT1JUX1RJTUVfTlNFQyAqIDIsCisJ CQkJZmxhZ3MsIE5VTEwpKTsKKworCXRpbWVyX2RlbGV0ZSh0aW1lcik7CisKKwlpZiAodGltZWxp bmUgIT0gLTEpCisJCWNsb3NlKHRpbWVsaW5lKTsKKworCXN5bmNvYmpfZGVzdHJveShmZCwgc3lu Y29iaik7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3Jlc2V0X3Vuc2lnbmFsZWQoaW50IGZkKQor eworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDY0X3Qg cG9pbnQgPSAxOworCisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZk LCAmc3luY29iaiwgJnBvaW50LAorCQkJCQkJMSwgMCwgMCksIC1FSU5WQUwpOworCisJc3luY29i al9yZXNldChmZCwgJnN5bmNvYmosIDEpOworCisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVs aW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LAorCQkJCQkJMSwgMCwgMCksIC1FSU5W QUwpOworCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2JqKTsKK30KKworc3RhdGljIHZvaWQK K3Rlc3RfcmVzZXRfc2lnbmFsZWQoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5j b2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDY0X3QgcG9pbnQgPSAxOworCisJc3luY29ial90cmln Z2VyKGZkLCBzeW5jb2JqLCBwb2ludCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxp bmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkxLCAwLCAwKSwgMCk7CisK KwlzeW5jb2JqX3Jlc2V0KGZkLCAmc3luY29iaiwgMSk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNv YmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkxLCAwLCAw KSwgLUVJTlZBTCk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOworfQorCitzdGF0 aWMgdm9pZAordGVzdF9yZXNldF9tdWx0aXBsZV9zaWduYWxlZChpbnQgZmQpCit7CisJdWludDY0 X3QgcG9pbnRzWzNdID0gezEsIDEsIDF9OworCXVpbnQzMl90IHN5bmNvYmpzWzNdOworCWludCBp OworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlzeW5jb2Jqc1tpXSA9IHN5bmNvYmpf Y3JlYXRlKGZkLCAwKTsKKwkJc3luY29ial90cmlnZ2VyKGZkLCBzeW5jb2Jqc1tpXSwgcG9pbnRz W2ldKTsKKwl9CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQs IHN5bmNvYmpzLCBwb2ludHMsIDMsIDAsIDApLCAwKTsKKworCXN5bmNvYmpfcmVzZXQoZmQsIHN5 bmNvYmpzLCAzKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWd0X2Fzc2VydF9l cShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29ianNbaV0sCisJCQkJCQkJJnBv aW50c1tpXSwgMSwKKwkJCQkJCQkwLCAwKSwgLUVJTlZBTCk7CisJCXN5bmNvYmpfZGVzdHJveShm ZCwgc3luY29ianNbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X2FuZF90cmlnZ2Vy X2Z1bmModW5pb24gc2lndmFsIHNpZ3ZhbCkKK3sKKwlzdHJ1Y3QgZmRfaGFuZGxlX3BhaXIgKnBh aXIgPSBzaWd2YWwuc2l2YWxfcHRyOworCXN5bmNvYmpfcmVzZXQocGFpci0+ZmQsICZwYWlyLT5o YW5kbGUsIDEpOworCXN5bmNvYmpfdHJpZ2dlcihwYWlyLT5mZCwgcGFpci0+aGFuZGxlLCBwYWly LT5wb2ludCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3Jlc2V0X2R1cmluZ193YWl0X2Zvcl9z dWJtaXQoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwg MCk7CisJdWludDMyX3QgZmxhZ3MgPSBMT0NBTF9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1Jf U1VCTUlUOworCXN0cnVjdCBmZF9oYW5kbGVfcGFpciBwYWlyOworCXVpbnQ2NF90IHBvaW50ID0g MTsKKwl0aW1lcl90IHRpbWVyOworCisJcGFpci5mZCA9IGZkOworCXBhaXIuaGFuZGxlID0gc3lu Y29iajsKKwl0aW1lciA9IHNldF90aW1lcihyZXNldF9hbmRfdHJpZ2dlcl9mdW5jLCAmcGFpciwg MCwgU0hPUlRfVElNRV9OU0VDKTsKKworCS8qIEEgcmVzZXQgc2hvdWxkIGJlIGEgbm8tb3AgZXZl biBpZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd2FpdCAqLworCWlndF9hc3NlcnQoc3luY29i al90aW1lbGluZV93YWl0KGZkLCAmc3luY29iaiwgJnBvaW50LCAxLAorCQkJCWdldHRpbWVfbnMo KSArIFNIT1JUX1RJTUVfTlNFQyAqIDIsCisJCQkJZmxhZ3MsIE5VTEwpKTsKKworCXRpbWVyX2Rl bGV0ZSh0aW1lcik7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOworfQorCitzdGF0 aWMgdm9pZAordGVzdF9zaWduYWwoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5j b2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDMyX3QgZmxhZ3MgPSBMT0NBTF9TWU5DT0JKX1dBSVRf RkxBR1NfV0FJVF9GT1JfU1VCTUlUOworCXVpbnQ2NF90IHBvaW50ID0gMTsKKworCWlndF9hc3Nl cnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwKKwkJ CQkJCTEsIDAsIDApLCAtRUlOVkFMKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVf d2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkxLCAwLCBmbGFncyksIC1FVElN RSk7CisKKwlzeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChmZCwgJnN5bmNvYmosICZwb2ludCwgMSk7 CisKKwlpZ3RfYXNzZXJ0KHN5bmNvYmpfdGltZWxpbmVfd2FpdChmZCwgJnN5bmNvYmosICZwb2lu dCwgMSwgMCwgMCwgTlVMTCkpOworCWlndF9hc3NlcnQoc3luY29ial90aW1lbGluZV93YWl0KGZk LCAmc3luY29iaiwgJnBvaW50LCAxLCAwLCBmbGFncywgTlVMTCkpOworCisJc3luY29ial9kZXN0 cm95KGZkLCBzeW5jb2JqKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfbXVsdGlfd2FpdChpbnQg ZmQsIHVpbnQzMl90IHRlc3RfZmxhZ3MsIGludCBleHBlY3QpCit7CisJdWludDMyX3Qgc3luY29i anNbM107CisJdWludDMyX3QgdGZsYWcsIGZsYWdzOworCWludCBpLCBmaWR4LCB0aW1lbGluZTsK Kwl1aW50NjRfdCBwb2ludHNbM10gPSB7MSwgMSwgMX07CisKKwlzeW5jb2Jqc1swXSA9IHN5bmNv YmpfY3JlYXRlKGZkLCAwKTsKKwlzeW5jb2Jqc1sxXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsK KwlzeW5jb2Jqc1syXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKworCWZsYWdzID0gZmxhZ3Nf Zm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7CisJdGVzdF9mbGFncyAmPSB+KFdBSVRfQUxMIHwg V0FJVF9GT1JfU1VCTUlUIHwgV0FJVF9BVkFJTEFCTEUpOworCisJZm9yIChpID0gMDsgaSA8IDM7 IGkrKykgeworCQlmaWR4ID0gZmZzKHRlc3RfZmxhZ3MpIC0gMTsKKwkJdGZsYWcgPSAoMSA8PCBm aWR4KTsKKworCQlpZiAodGVzdF9mbGFncyAmIH50ZmxhZykKKwkJCXRlc3RfZmxhZ3MgJj0gfnRm bGFnOworCisJCWlmICh0ZmxhZyAmIChXQUlUX1NVQk1JVFRFRCB8IFdBSVRfU0lHTkFMRUQpKQor CQkJdGltZWxpbmUgPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1tpXSwKKwkJ CQkJCQkgIHBvaW50c1tpXSk7CisJCWlmICh0ZmxhZyAmIFdBSVRfU0lHTkFMRUQpCisJCQlzd19z eW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZSwgMSk7CisJfQorCisJaWd0X2Fzc2VydF9lcShzeW5j b2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCBzeW5jb2JqcywgcG9pbnRzLCAzLCAwLCBmbGFncyks IGV4cGVjdCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQs IHN5bmNvYmpzLCBwb2ludHMsIDMsIHNob3J0X3RpbWVvdXQoKSwKKwkJCQkgICAgICAgZmxhZ3Mp LCBleHBlY3QpOworCisJaWYgKGV4cGVjdCAhPSAtRVRJTUUpIHsKKwkJaWd0X2Fzc2VydF9lcShz eW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCBzeW5jb2JqcywgcG9pbnRzLCAzLCBVSU5UNjRf TUFYLAorCQkJCQkgICAgICAgZmxhZ3MpLCBleHBlY3QpOworCX0KKworCXN5bmNvYmpfZGVzdHJv eShmZCwgc3luY29ianNbMF0pOworCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMV0pOwor CXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMl0pOworfQorCitzdHJ1Y3Qgd2FpdF90aHJl YWRfZGF0YSB7CisJaW50IGZkOworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdh aXQ7Cit9OworCitzdGF0aWMgdm9pZCAqCit3YWl0X3RocmVhZF9mdW5jKHZvaWQgKmRhdGEpCit7 CisJc3RydWN0IHdhaXRfdGhyZWFkX2RhdGEgKndhaXQgPSBkYXRhOworCWlndF9hc3NlcnRfZXEo X19zeW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwod2FpdC0+ZmQsICZ3YWl0LT53YWl0KSwgMCk7 CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dhaXRfc25hcHNob3QoaW50 IGZkLCB1aW50MzJfdCB0ZXN0X2ZsYWdzKQoreworCXN0cnVjdCB3YWl0X3RocmVhZF9kYXRhIHdh aXQgPSB7IDAgfTsKKwl1aW50MzJfdCBzeW5jb2Jqc1syXTsKKwl1aW50NjRfdCBwb2ludHNbMl0g PSB7MSwgMX07CisJaW50IHRpbWVsaW5lc1szXSA9IHsgLTEsIC0xLCAtMSB9OworCXB0aHJlYWRf dCB0aHJlYWQ7CisKKwlzeW5jb2Jqc1swXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwlzeW5j b2Jqc1sxXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKworCWlmICghKHRlc3RfZmxhZ3MgJiBX QUlUX0ZPUl9TVUJNSVQpKSB7CisJCXRpbWVsaW5lc1swXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5 bmMoZmQsIHN5bmNvYmpzWzBdLCBwb2ludHNbMF0pOworCQl0aW1lbGluZXNbMV0gPSBzeW5jb2Jq X2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1sxXSwgcG9pbnRzWzFdKTsKKwl9CisKKwl3YWl0 LmZkID0gZmQ7CisJd2FpdC53YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoc3luY29ianMp OworCXdhaXQud2FpdC5jb3VudF9oYW5kbGVzID0gMjsKKwl3YWl0LndhaXQucG9pbnRzID0gdG9f dXNlcl9wb2ludGVyKHBvaW50cyk7CisJd2FpdC53YWl0LnRpbWVvdXRfbnNlYyA9IHNob3J0X3Rp bWVvdXQoKTsKKwl3YWl0LndhaXQuZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2Zs YWdzKTsKKworCWlndF9hc3NlcnRfZXEocHRocmVhZF9jcmVhdGUoJnRocmVhZCwgTlVMTCwgd2Fp dF90aHJlYWRfZnVuYywgJndhaXQpLCAwKTsKKworCXNsZWVwX25zZWMoU0hPUlRfVElNRV9OU0VD IC8gNSk7CisKKwkvKiBUcnkgdG8gZmFrZSB0aGUga2VybmVsIG91dCBieSB0cmlnZ2VyaW5nIG9y IHBhcnRpYWxseSB0cmlnZ2VyaW5nCisJICogdGhlIGZpcnN0IGZlbmNlLgorCSAqLworCWlmICh0 ZXN0X2ZsYWdzICYgV0FJVF9BTEwpIHsKKwkJLyogSWYgaXQncyBXQUlUX0FMTCwgYWN0dWFsbHkg dHJpZ2dlciBpdCAqLworCQlpZiAodGltZWxpbmVzWzBdID09IC0xKQorCQkJc3luY29ial90cmln Z2VyKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsKKwkJZWxzZQorCQkJc3dfc3luY190aW1l bGluZV9pbmModGltZWxpbmVzWzBdLCAxKTsKKwl9IGVsc2UgaWYgKHRlc3RfZmxhZ3MgJiBXQUlU X0ZPUl9TVUJNSVQpIHsKKwkJdGltZWxpbmVzWzBdID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhm ZCwgc3luY29ianNbMF0sIHBvaW50c1swXSk7CisJfQorCisJc2xlZXBfbnNlYyhTSE9SVF9USU1F X05TRUMgLyA1KTsKKworCS8qIFRoZW4gcmVzZXQgaXQgKi8KKwlzeW5jb2JqX3Jlc2V0KGZkLCAm c3luY29ianNbMF0sIDEpOworCisJc2xlZXBfbnNlYyhTSE9SVF9USU1FX05TRUMgLyA1KTsKKwor CS8qIFRoZW4gInN1Ym1pdCIgaXQgaW4gYSB3YXkgdGhhdCB3aWxsIG5ldmVyIHRyaWdnZXIuICBU aGlzIHdheSwgaWYKKwkgKiB0aGUga2VybmVsIHBpY2tzIHVwIG9uIHRoZSBuZXcgZmVuY2UgKGl0 IHNob3VsZG4ndCksIHdlJ2xsIGdldCBhCisJICogdGltZW91dC4KKwkgKi8KKwl0aW1lbGluZXNb Ml0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsK KworCXNsZWVwX25zZWMoU0hPUlRfVElNRV9OU0VDIC8gNSk7CisKKwkvKiBOb3cgdHJpZ2dlciB0 aGUgc2Vjb25kIGZlbmNlIHRvIGNvbXBsZXRlIHRoZSB3YWl0ICovCisKKwlpZiAodGltZWxpbmVz WzFdID09IC0xKQorCQlzeW5jb2JqX3RyaWdnZXIoZmQsIHN5bmNvYmpzWzFdLCBwb2ludHNbMV0p OworCWVsc2UKKwkJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmVzWzFdLCAxKTsKKworCXB0 aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpOworCisJaWYgKCEodGVzdF9mbGFncyAmIFdBSVRfQUxM KSkKKwkJaWd0X2Fzc2VydF9lcSh3YWl0LndhaXQuZmlyc3Rfc2lnbmFsZWQsIDEpOworCisJY2xv c2UodGltZWxpbmVzWzBdKTsKKwljbG9zZSh0aW1lbGluZXNbMV0pOworCWNsb3NlKHRpbWVsaW5l c1syXSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1swXSk7CisJc3luY29ial9kZXN0 cm95KGZkLCBzeW5jb2Jqc1sxXSk7Cit9CisKKy8qIFRoZSBudW1iZXJzIDAtNywgZWFjaCByZXBl YXRlZCA1eCBhbmQgc2h1ZmZsZWQuICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2h1ZmZsZWRf MF83X3g0W10gPSB7CisJMiwgMCwgNiwgMSwgMSwgNCwgNSwgMiwgMCwgNywgMSwgNywgNiwgMywg NCwgNSwKKwkwLCAyLCA3LCAzLCA1LCA0LCAwLCA2LCA3LCAzLCAyLCA1LCA2LCAxLCA0LCAzLAor fTsKKworZW51bSBzeW5jb2JqX3N0YWdlIHsKKwlTVEFHRV9VTlNVQk1JVFRFRCwKKwlTVEFHRV9T VUJNSVRURUQsCisJU1RBR0VfU0lHTkFMRUQsCisJU1RBR0VfUkVTRVQsCisJU1RBR0VfUkVTVUJN SVRURUQsCit9OworCitzdGF0aWMgdm9pZAordGVzdF93YWl0X2NvbXBsZXgoaW50IGZkLCB1aW50 MzJfdCB0ZXN0X2ZsYWdzKQoreworCXN0cnVjdCB3YWl0X3RocmVhZF9kYXRhIHdhaXQgPSB7IDAg fTsKKwl1aW50MzJfdCBzeW5jb2Jqc1s4XTsKKwl1aW50NjRfdCBwb2ludHNbOF0gPSB7MSwgMSwg MSwgMSwgMSwgMSwgMSwgMX07CisJZW51bSBzeW5jb2JqX3N0YWdlIHN0YWdlWzhdOworCWludCBp LCBqLCB0aW1lbGluZXNbOF07CisJdWludDMyX3QgZmlyc3Rfc2lnbmFsZWQgPSAtMSwgbnVtX3Np Z25hbGVkID0gMDsKKwlwdGhyZWFkX3QgdGhyZWFkOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkr KykgeworCQlzdGFnZVtpXSA9IFNUQUdFX1VOU1VCTUlUVEVEOworCQlzeW5jb2Jqc1tpXSA9IHN5 bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwl9CisKKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NV Qk1JVCkgeworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJdGltZWxpbmVzW2ldID0gLTE7 CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCXRpbWVsaW5lc1tpXSA9 IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzW2ldLAorCQkJCQkJCSAgICAgIHBv aW50c1tpXSk7CisJfQorCisJd2FpdC5mZCA9IGZkOworCXdhaXQud2FpdC5oYW5kbGVzID0gdG9f dXNlcl9wb2ludGVyKHN5bmNvYmpzKTsKKwl3YWl0LndhaXQuY291bnRfaGFuZGxlcyA9IDI7CisJ d2FpdC53YWl0LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRlcihwb2ludHMpOworCXdhaXQud2FpdC50 aW1lb3V0X25zZWMgPSBnZXR0aW1lX25zKCkgKyBOU0VDU19QRVJfU0VDOworCXdhaXQud2FpdC5m bGFncyA9IGZsYWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOworCisJaWd0X2Fzc2VydF9l cShwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLCBOVUxMLCB3YWl0X3RocmVhZF9mdW5jLCAmd2FpdCks IDApOworCisJc2xlZXBfbnNlYyhOU0VDU19QRVJfU0VDIC8gNTApOworCisJbnVtX3NpZ25hbGVk ID0gMDsKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShzaHVmZmxlZF8wXzdfeDQpOyBqKysp IHsKKwkJaSA9IHNodWZmbGVkXzBfN194NFtqXTsKKwkJaWd0X2Fzc2VydF9sdChpLCBBUlJBWV9T SVpFKHN5bmNvYmpzKSk7CisKKwkJc3dpdGNoIChzdGFnZVtpXSsrKSB7CisJCWNhc2UgU1RBR0Vf VU5TVUJNSVRURUQ6CisJCQkvKiBXZSBuZWVkIHRvIHN1Ym1pdCBhdHRhY2ggYSBmZW5jZSAqLwor CQkJaWYgKCEodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkpIHsKKwkJCQkvKiBXZSBoYWQg dG8gYXR0YWNoIG9uZSB1cC1mcm9udCAqLworCQkJCWlndF9hc3NlcnRfbmVxKHRpbWVsaW5lc1tp XSwgLTEpOworCQkJCWJyZWFrOworCQkJfQorCQkJdGltZWxpbmVzW2ldID0gc3luY29ial9hdHRh Y2hfc3dfc3luYyhmZCwgc3luY29ianNbaV0sCisJCQkJCQkJICAgICAgcG9pbnRzW2ldKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgU1RBR0VfU1VCTUlUVEVEOgorCQkJLyogV2UgaGF2ZSBhIGZlbmNl LCB0cmlnZ2VyIGl0ICovCisJCQlpZ3RfYXNzZXJ0X25lcSh0aW1lbGluZXNbaV0sIC0xKTsKKwkJ CXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lc1tpXSwgMSk7CisJCQljbG9zZSh0aW1lbGlu ZXNbaV0pOworCQkJdGltZWxpbmVzW2ldID0gLTE7CisJCQlpZiAobnVtX3NpZ25hbGVkID09IDAp CisJCQkJZmlyc3Rfc2lnbmFsZWQgPSBpOworCQkJbnVtX3NpZ25hbGVkKys7CisJCQlicmVhazsK KworCQljYXNlIFNUQUdFX1NJR05BTEVEOgorCQkJLyogV2UncmUgYWxyZWFkeSBzaWduYWxlZCwg cmVzZXQgKi8KKwkJCXN5bmNvYmpfcmVzZXQoZmQsICZzeW5jb2Jqc1tpXSwgMSk7CisJCQlicmVh azsKKworCQljYXNlIFNUQUdFX1JFU0VUOgorCQkJLyogV2UncmUgcmVzZXQsIHN1Ym1pdCBhbmQg ZG9uJ3Qgc2lnbmFsICovCisJCQl0aW1lbGluZXNbaV0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5j KGZkLCBzeW5jb2Jqc1tpXSwKKwkJCQkJCQkgICAgICBwb2ludHNbaV0pOworCQkJYnJlYWs7CisK KwkJY2FzZSBTVEFHRV9SRVNVQk1JVFRFRDoKKwkJCWlndF9hc3NlcnQoISJTaG91bGQgbm90IHJl YWNoIHRoaXMgc3RhZ2UiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRlc3RfZmxhZ3MgJiBX QUlUX0FMTCkgeworCQkJaWYgKG51bV9zaWduYWxlZCA9PSBBUlJBWV9TSVpFKHN5bmNvYmpzKSkK KwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWlmIChudW1fc2lnbmFsZWQgPiAwKQorCQkJCWJy ZWFrOworCQl9CisKKwkJc2xlZXBfbnNlYyhOU0VDU19QRVJfU0VDIC8gMTAwKTsKKwl9CisKKwlw dGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9BTEwp IHsKKwkJaWd0X2Fzc2VydF9lcShudW1fc2lnbmFsZWQsIEFSUkFZX1NJWkUoc3luY29ianMpKTsK Kwl9IGVsc2UgeworCQlpZ3RfYXNzZXJ0X2VxKG51bV9zaWduYWxlZCwgMSk7CisJCWlndF9hc3Nl cnRfZXEod2FpdC53YWl0LmZpcnN0X3NpZ25hbGVkLCBmaXJzdF9zaWduYWxlZCk7CisJfQorCisJ Zm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQljbG9zZSh0aW1lbGluZXNbaV0pOworCQlzeW5j b2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0 X3dhaXRfaW50ZXJydXB0ZWQoaW50IGZkLCB1aW50MzJfdCB0ZXN0X2ZsYWdzKQoreworCXN0cnVj dCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdhaXQgPSB7IDAgfTsKKwl1aW50MzJfdCBzeW5j b2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXVpbnQ2NF90IHBvaW50ID0gMTsKKwlpbnQg dGltZWxpbmU7CisKKwl3YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJnN5bmNvYmopOwor CXdhaXQucG9pbnRzID0gdG9fdXNlcl9wb2ludGVyKCZwb2ludCk7CisJd2FpdC5jb3VudF9oYW5k bGVzID0gMTsKKwl3YWl0LmZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7 CisKKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkgeworCQl3YWl0LnRpbWVvdXRf bnNlYyA9IHNob3J0X3RpbWVvdXQoKTsKKwkJaWd0X3doaWxlX2ludGVycnVwdGlibGUodHJ1ZSkK KwkJCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwoZmQsICZ3YWl0 KSwgLUVUSU1FKTsKKwl9CisKKwl0aW1lbGluZSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQs IHN5bmNvYmosIHBvaW50KTsKKworCXdhaXQudGltZW91dF9uc2VjID0gc2hvcnRfdGltZW91dCgp OworCWlndF93aGlsZV9pbnRlcnJ1cHRpYmxlKHRydWUpCisJCWlndF9hc3NlcnRfZXEoX19zeW5j b2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwoZmQsICZ3YWl0KSwgLUVUSU1FKTsKKworCXN5bmNvYmpf ZGVzdHJveShmZCwgc3luY29iaik7CisJY2xvc2UodGltZWxpbmUpOworfQorCitzdGF0aWMgYm9v bAoraGFzX3N5bmNvYmpfdGltZWxpbmVfd2FpdChpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5j b2JqX3RpbWVsaW5lX3dhaXQgd2FpdCA9IHsgMCB9OworCXVpbnQzMl90IGhhbmRsZSA9IDA7CisJ dWludDY0X3QgdmFsdWU7CisJaW50IHJldDsKKworCWlmIChkcm1HZXRDYXAoZmQsIERSTV9DQVBf U1lOQ09CSiwgJnZhbHVlKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghdmFsdWUpCisJCXJldHVy biBmYWxzZTsKKworCS8qIFRyeSB3YWl0aW5nIGZvciB6ZXJvIHN5bmMgb2JqZWN0cyBzaG91bGQg ZmFpbCB3aXRoIEVJTlZBTCAqLworCXdhaXQuY291bnRfaGFuZGxlcyA9IDE7CisJd2FpdC5oYW5k bGVzID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1f SU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlULCAmd2FpdCk7CisJcmV0dXJuIHJldCA9PSAtMSAm JiBlcnJubyA9PSBFTk9FTlQ7Cit9CisKK2lndF9tYWluCit7CisJaW50IGZkID0gLTE7CisKKwlp Z3RfZml4dHVyZSB7CisJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9BTlkpOworCQlpZ3Rf cmVxdWlyZShoYXNfc3luY29ial90aW1lbGluZV93YWl0KGZkKSk7CisJCWlndF9yZXF1aXJlX3N3 X3N5bmMoKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC13YWl0LWJhZC1mbGFncyIpCisJ CXRlc3Rfd2FpdF9iYWRfZmxhZ3MoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtd2FpdC16 ZXJvLWhhbmRsZXMiKQorCQl0ZXN0X3dhaXRfemVyb19oYW5kbGVzKGZkKTsKKworCWlndF9zdWJ0 ZXN0KCJpbnZhbGlkLXdhaXQtaWxsZWdhbC1oYW5kbGUiKQorCQl0ZXN0X3dhaXRfaWxsZWdhbF9o YW5kbGUoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtcXVlcnktemVyby1oYW5kbGVzIikK KwkJdGVzdF9xdWVyeV96ZXJvX2hhbmRsZXMoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQt cXVlcnktaWxsZWdhbC1oYW5kbGUiKQorCQl0ZXN0X3F1ZXJ5X2lsbGVnYWxfaGFuZGxlKGZkKTsK KworCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXF1ZXJ5LW9uZS1pbGxlZ2FsLWhhbmRsZSIpCisJCXRl c3RfcXVlcnlfb25lX2lsbGVnYWxfaGFuZGxlKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlk LXF1ZXJ5LWJhZC1wYWQiKQorCQl0ZXN0X3F1ZXJ5X2JhZF9wYWQoZmQpOworCisJaWd0X3N1YnRl c3QoImludmFsaWQtc2lnbmFsLXplcm8taGFuZGxlcyIpCisJCXRlc3Rfc2lnbmFsX3plcm9faGFu ZGxlcyhmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtaWxsZWdhbC1oYW5kbGUi KQorCQl0ZXN0X3NpZ25hbF9pbGxlZ2FsX2hhbmRsZShmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52 YWxpZC1zaWduYWwtaWxsZWdhbC1wb2ludCIpCisJCXRlc3Rfc2lnbmFsX2lsbGVnYWxfcG9pbnQo ZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtc2lnbmFsLW9uZS1pbGxlZ2FsLWhhbmRsZSIp CisJCXRlc3Rfc2lnbmFsX29uZV9pbGxlZ2FsX2hhbmRsZShmZCk7CisKKwlpZ3Rfc3VidGVzdCgi aW52YWxpZC1zaWduYWwtYmFkLXBhZCIpCisJCXRlc3Rfc2lnbmFsX2JhZF9wYWQoZmQpOworCisJ aWd0X3N1YnRlc3QoImludmFsaWQtc2lnbmFsLWFycmF5IikKKwkJdGVzdF9zaWduYWxfYXJyYXko ZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtdHJhbnNmZXItaWxsZWdhbC1oYW5kbGUiKQor CQl0ZXN0X3RyYW5zZmVyX2lsbGVnYWxfaGFuZGxlKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJpbnZh bGlkLXRyYW5zZmVyLWJhZC1wYWQiKQorCQl0ZXN0X3RyYW5zZmVyX2JhZF9wYWQoZmQpOworCisJ Zm9yICh1bnNpZ25lZCBmbGFncyA9IDA7IGZsYWdzIDwgV0FJVF9GTEFHU19NQVg7IGZsYWdzKysp IHsKKwkJaW50IGVycjsKKworCQkvKiBPbmx5IG9uZSB3YWl0IG1vZGUgZm9yIHNpbmdsZS13YWl0 IHRlc3RzICovCisJCWlmIChfX2J1aWx0aW5fcG9wY291bnQoZmxhZ3MgJiAoV0FJVF9VTlNVQk1J VFRFRCB8CisJCQkJCQlXQUlUX1NVQk1JVFRFRCB8CisJCQkJCQlXQUlUX1NJR05BTEVEKSkgIT0g MSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoZmxhZ3MgJiBXQUlUX1VOU1VCTUlUVEVEKSAmJiAh KGZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSkKKwkJCWVyciA9IC1FSU5WQUw7CisJCWVsc2UgaWYg KCEoZmxhZ3MgJiBXQUlUX1NJR05BTEVEKSAmJiAhKChmbGFncyAmIFdBSVRfU1VCTUlUVEVEKSAm JiAoZmxhZ3MgJiBXQUlUX0FWQUlMQUJMRSkpKQorCQkJZXJyID0gLUVUSU1FOworCQllbHNlCisJ CQllcnIgPSAwOworCisJCWlndF9zdWJ0ZXN0X2YoIiVzc2luZ2xlLXdhaXQlcyVzJXMlcyVzJXMi LAorCQkJICAgICAgZXJyID09IC1FSU5WQUwgPyAiaW52YWxpZC0iIDogZXJyID09IC1FVElNRSA/ ICJldGltZS0iIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX0FMTCkgPyAiLWFsbCIgOiAi IiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkgPyAiLWZvci1zdWJtaXQiIDog IiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX0FWQUlMQUJMRSkgPyAiLWF2YWlsYWJsZSIgOiAi IiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfVU5TVUJNSVRURUQpID8gIi11bnN1Ym1pdHRlZCIg OiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfU1VCTUlUVEVEKSA/ICItc3VibWl0dGVkIiA6 ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9TSUdOQUxFRCkgPyAiLXNpZ25hbGVkIiA6ICIi KQorCQkJdGVzdF9zaW5nbGVfd2FpdChmZCwgZmxhZ3MsIGVycik7CisJfQorCisJaWd0X3N1YnRl c3QoIndhaXQtZGVsYXllZC1zaWduYWwiKQorCQl0ZXN0X3dhaXRfZGVsYXllZF9zaWduYWwoZmQs IDApOworCisJaWd0X3N1YnRlc3QoIndhaXQtZm9yLXN1Ym1pdC1kZWxheWVkLXN1Ym1pdCIpCisJ CXRlc3Rfd2FpdF9kZWxheWVkX3NpZ25hbChmZCwgV0FJVF9GT1JfU1VCTUlUKTsKKworCWlndF9z dWJ0ZXN0KCJ3YWl0LWFsbC1kZWxheWVkLXNpZ25hbCIpCisJCXRlc3Rfd2FpdF9kZWxheWVkX3Np Z25hbChmZCwgV0FJVF9BTEwpOworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWZvci1zdWJtaXQt ZGVsYXllZC1zdWJtaXQiKQorCQl0ZXN0X3dhaXRfZGVsYXllZF9zaWduYWwoZmQsIFdBSVRfQUxM IHwgV0FJVF9GT1JfU1VCTUlUKTsKKworCWlndF9zdWJ0ZXN0KCJyZXNldC11bnNpZ25hbGVkIikK KwkJdGVzdF9yZXNldF91bnNpZ25hbGVkKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJyZXNldC1zaWdu YWxlZCIpCisJCXRlc3RfcmVzZXRfc2lnbmFsZWQoZmQpOworCisJaWd0X3N1YnRlc3QoInJlc2V0 LW11bHRpcGxlLXNpZ25hbGVkIikKKwkJdGVzdF9yZXNldF9tdWx0aXBsZV9zaWduYWxlZChmZCk7 CisKKwlpZ3Rfc3VidGVzdCgicmVzZXQtZHVyaW5nLXdhaXQtZm9yLXN1Ym1pdCIpCisJCXRlc3Rf cmVzZXRfZHVyaW5nX3dhaXRfZm9yX3N1Ym1pdChmZCk7CisKKwlpZ3Rfc3VidGVzdCgic2lnbmFs IikKKwkJdGVzdF9zaWduYWwoZmQpOworCisJZm9yICh1bnNpZ25lZCBmbGFncyA9IDA7IGZsYWdz IDwgV0FJVF9GTEFHU19NQVg7IGZsYWdzKyspIHsKKwkJaW50IGVycjsKKworCQkvKiBBdCBsZWFz dCBvbmUgd2FpdCBtb2RlIGZvciBtdWx0aS13YWl0IHRlc3RzICovCisJCWlmICghKGZsYWdzICYg KFdBSVRfVU5TVUJNSVRURUQgfAorCQkJICAgICAgIFdBSVRfU1VCTUlUVEVEIHwKKwkJCSAgICAg ICBXQUlUX1NJR05BTEVEKSkpCisJCQljb250aW51ZTsKKworCQllcnIgPSAwOworCQlpZiAoKGZs YWdzICYgV0FJVF9VTlNVQk1JVFRFRCkgJiYgIShmbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkpIHsK KwkJCWVyciA9IC1FSU5WQUw7CisJCX0gZWxzZSBpZiAoZmxhZ3MgJiBXQUlUX0FMTCkgeworCQkJ aWYgKGZsYWdzICYgKFdBSVRfVU5TVUJNSVRURUQgfCBXQUlUX1NVQk1JVFRFRCkpCisJCQkJZXJy ID0gLUVUSU1FOworCQkJaWYgKCEoZmxhZ3MgJiBXQUlUX1VOU1VCTUlUVEVEKSAmJiAoZmxhZ3Mg JiBXQUlUX1NVQk1JVFRFRCkgJiYgKGZsYWdzICYgV0FJVF9BVkFJTEFCTEUpKQorCQkJCWVyciA9 IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoIShmbGFncyAmIFdBSVRfU0lHTkFMRUQpICYmICEoKGZs YWdzICYgV0FJVF9TVUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfQVZBSUxBQkxFKSkpCisJCQkJ ZXJyID0gLUVUSU1FOworCQl9CisKKwkJaWd0X3N1YnRlc3RfZigiJXNtdWx0aS13YWl0JXMlcyVz JXMlcyVzIiwKKwkJCSAgICAgIGVyciA9PSAtRUlOVkFMID8gImludmFsaWQtIiA6IGVyciA9PSAt RVRJTUUgPyAiZXRpbWUtIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9BTEwpID8gIi1h bGwiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpID8gIi1mb3Itc3Vi bWl0IiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9BVkFJTEFCTEUpID8gIi1hdmFpbGFi bGUiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1VOU1VCTUlUVEVEKSA/ICItdW5zdWJt aXR0ZWQiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1NVQk1JVFRFRCkgPyAiLXN1Ym1p dHRlZCIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfU0lHTkFMRUQpID8gIi1zaWduYWxl ZCIgOiAiIikKKwkJCXRlc3RfbXVsdGlfd2FpdChmZCwgZmxhZ3MsIGVycik7CisJfQorCWlndF9z dWJ0ZXN0KCJ3YWl0LWFueS1zbmFwc2hvdCIpCisJCXRlc3Rfd2FpdF9zbmFwc2hvdChmZCwgMCk7 CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1hbGwtc25hcHNob3QiKQorCQl0ZXN0X3dhaXRfc25hcHNo b3QoZmQsIFdBSVRfQUxMKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWZvci1zdWJtaXQtc25hcHNo b3QiKQorCQl0ZXN0X3dhaXRfc25hcHNob3QoZmQsIFdBSVRfRk9SX1NVQk1JVCk7CisKKwlpZ3Rf c3VidGVzdCgid2FpdC1hbGwtZm9yLXN1Ym1pdC1zbmFwc2hvdCIpCisJCXRlc3Rfd2FpdF9zbmFw c2hvdChmZCwgV0FJVF9BTEwgfCBXQUlUX0ZPUl9TVUJNSVQpOworCisJaWd0X3N1YnRlc3QoIndh aXQtYW55LWNvbXBsZXgiKQorCQl0ZXN0X3dhaXRfY29tcGxleChmZCwgMCk7CisKKwlpZ3Rfc3Vi dGVzdCgid2FpdC1hbGwtY29tcGxleCIpCisJCXRlc3Rfd2FpdF9jb21wbGV4KGZkLCBXQUlUX0FM TCk7CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1mb3Itc3VibWl0LWNvbXBsZXgiKQorCQl0ZXN0X3dh aXRfY29tcGxleChmZCwgV0FJVF9GT1JfU1VCTUlUKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFs bC1mb3Itc3VibWl0LWNvbXBsZXgiKQorCQl0ZXN0X3dhaXRfY29tcGxleChmZCwgV0FJVF9BTEwg fCBXQUlUX0ZPUl9TVUJNSVQpOworCisJaWd0X3N1YnRlc3QoIndhaXQtYW55LWludGVycnVwdGVk IikKKwkJdGVzdF93YWl0X2ludGVycnVwdGVkKGZkLCAwKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0 LWFsbC1pbnRlcnJ1cHRlZCIpCisJCXRlc3Rfd2FpdF9pbnRlcnJ1cHRlZChmZCwgV0FJVF9BTEwp OworfQotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK