From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH i-g-t 10/12] i915/gem_exec_balancer: Exercise bonded pairs Date: Wed, 22 May 2019 12:37:10 +0100 Message-ID: <20190522113712.23512-10-chris@chris-wilson.co.uk> References: <20190522113712.23512-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190522113712.23512-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhlIHN1Ym1pdC1mZW5jZSArIGxvYWRfYmFsYW5jaW5nIGFwaXMgYWxsb3cgZm9yIHVzIHRvIGV4 ZWN1dGUgYSBuYW1lZApwYWlyIG9mIGVuZ2luZXMgaW4gcGFyYWxsZWw7IHRoYXQgdGhpcyBieSBz dWJtaXR0aW5nIGEgcmVxdWVzdCB0byBvbmUKZW5naW5lLCB3ZSBjYW4gdGhlbiB1c2UgdGhlIGdl bmVyYXRlZCBzdWJtaXQtZmVuY2UgdG8gc3VibWl0IGEgc2Vjb25kCnJlcXVlc3QgdG8gYW5vdGhl ciBlbmdpbmUgYW5kIGhhdmUgaXQgZXhlY3V0ZSBhdCB0aGUgc2FtZSB0aW1lLgpGdXJ0aGVybW9y ZSwgYnkgc3BlY2lmeWluZyBib25kZWQgcGFpcnMsIHdlIGNhbiBkaXJlY3QgdGhlIHZpcnR1YWwK ZW5naW5lIHRvIHVzZSBhIHBhcnRpY3VsYXIgZW5naW5lIGluIHBhcmFsbGVsIHRvIHRoZSBmaXJz dCByZXF1ZXN0LgoKdjI6IE1lYXN1cmUgbG9hZCBhY3Jvc3MgYWxsIGJvbmRlZCBzaWJsaW5ncyB0 byBjaGVjayB3ZSBkb24ndAptaXNzIGFuIGFjY2lkZW50YWwgZXhlY3V0aW9uIG9uIGFub3RoZXIu CgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K LS0tCiB0ZXN0cy9pOTE1L2dlbV9leGVjX2JhbGFuY2VyLmMgfCAyNzcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tCiAxIGZpbGUgY2hhbmdlZCwgMjYyIGluc2VydGlvbnMoKyksIDE1 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfYmFsYW5jZXIu YyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfYmFsYW5jZXIuYwppbmRleCA0MGEyNzE5YzAuLmM3NjEx MzQ3NiAxMDA2NDQKLS0tIGEvdGVzdHMvaTkxNS9nZW1fZXhlY19iYWxhbmNlci5jCisrKyBiL3Rl c3RzL2k5MTUvZ2VtX2V4ZWNfYmFsYW5jZXIuYwpAQCAtOTgsOSArOTgsMzUgQEAgbGlzdF9lbmdp bmVzKGludCBpOTE1LCB1aW50MzJfdCBjbGFzc19tYXNrLCB1bnNpZ25lZCBpbnQgKm91dCkKIAly ZXR1cm4gZW5naW5lczsKIH0KIAorc3RhdGljIGludCBfX3NldF9lbmdpbmVzKGludCBpOTE1LCB1 aW50MzJfdCBjdHgsCisJCQkgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNl ICpjaSwKKwkJCSB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJSTkxNV9ERUZJTkVfQ09OVEVYVF9Q QVJBTV9FTkdJTkVTKGVuZ2luZXMsIGNvdW50KTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRl eHRfcGFyYW0gcCA9IHsKKwkJLmN0eF9pZCA9IGN0eCwKKwkJLnBhcmFtID0gSTkxNV9DT05URVhU X1BBUkFNX0VOR0lORVMsCisJCS5zaXplID0gc2l6ZW9mKGVuZ2luZXMpLAorCQkudmFsdWUgPSB0 b191c2VyX3BvaW50ZXIoJmVuZ2luZXMpCisJfTsKKworCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IDA7 CisJbWVtY3B5KGVuZ2luZXMuZW5naW5lcywgY2ksIHNpemVvZihlbmdpbmVzLmVuZ2luZXMpKTsK KworCXJldHVybiBfX2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7Cit9CisKK3N0YXRp YyB2b2lkIHNldF9lbmdpbmVzKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCisJCQljb25zdCBzdHJ1 Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAorCQkJdW5zaWduZWQgaW50IGNvdW50 KQoreworCWlndF9hc3NlcnRfZXEoX19zZXRfZW5naW5lcyhpOTE1LCBjdHgsIGNpLCBjb3VudCks IDApOworfQorCiBzdGF0aWMgaW50IF9fc2V0X2xvYWRfYmFsYW5jZXIoaW50IGk5MTUsIHVpbnQz Ml90IGN0eCwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFu Y2UgKmNpLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKKwkJCSAgICAgICB1bnNpZ25l ZCBpbnQgY291bnQsCisJCQkgICAgICAgdm9pZCAqZXh0KQogewogCUk5MTVfREVGSU5FX0NPTlRF WFRfRU5HSU5FU19MT0FEX0JBTEFOQ0UoYmFsYW5jZXIsIGNvdW50KTsKIAlJOTE1X0RFRklORV9D T05URVhUX1BBUkFNX0VOR0lORVMoZW5naW5lcywgMSArIGNvdW50KTsKQEAgLTExMyw2ICsxMzks NyBAQCBzdGF0aWMgaW50IF9fc2V0X2xvYWRfYmFsYW5jZXIoaW50IGk5MTUsIHVpbnQzMl90IGN0 eCwKIAogCW1lbXNldCgmYmFsYW5jZXIsIDAsIHNpemVvZihiYWxhbmNlcikpOwogCWJhbGFuY2Vy LmJhc2UubmFtZSA9IEk5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9MT0FEX0JBTEFOQ0U7CisJYmFs YW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcihleHQpOwogCiAJaWd0 X2Fzc2VydChjb3VudCk7CiAJYmFsYW5jZXIubnVtX3NpYmxpbmdzID0gY291bnQ7CkBAIC0xMzEs OSArMTU4LDEwIEBAIHN0YXRpYyBpbnQgX19zZXRfbG9hZF9iYWxhbmNlcihpbnQgaTkxNSwgdWlu dDMyX3QgY3R4LAogCiBzdGF0aWMgdm9pZCBzZXRfbG9hZF9iYWxhbmNlcihpbnQgaTkxNSwgdWlu dDMyX3QgY3R4LAogCQkJICAgICAgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3Rh bmNlICpjaSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKKwkJCSAgICAgIHVuc2lnbmVk IGludCBjb3VudCwKKwkJCSAgICAgIHZvaWQgKmV4dCkKIHsKLQlpZ3RfYXNzZXJ0X2VxKF9fc2V0 X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCBjaSwgY291bnQpLCAwKTsKKwlpZ3RfYXNzZXJ0X2Vx KF9fc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCBjaSwgY291bnQsIGV4dCksIDApOwogfQog CiBzdGF0aWMgdWludDMyX3QgbG9hZF9iYWxhbmNlcl9jcmVhdGUoaW50IGk5MTUsCkBAIC0xNDMs NyArMTcxLDcgQEAgc3RhdGljIHVpbnQzMl90IGxvYWRfYmFsYW5jZXJfY3JlYXRlKGludCBpOTE1 LAogCXVpbnQzMl90IGN0eDsKIAogCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKLQlz ZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIGNpLCBjb3VudCk7CisJc2V0X2xvYWRfYmFsYW5j ZXIoaTkxNSwgY3R4LCBjaSwgY291bnQsIE5VTEwpOwogCiAJcmV0dXJuIGN0eDsKIH0KQEAgLTI4 Nyw2ICszMTUsNzQgQEAgc3RhdGljIHZvaWQgaW52YWxpZF9iYWxhbmNlcihpbnQgaTkxNSkKIAl9 CiB9CiAKK3N0YXRpYyB2b2lkIGludmFsaWRfYm9uZHMoaW50IGk5MTUpCit7CisJSTkxNV9ERUZJ TkVfQ09OVEVYVF9FTkdJTkVTX0JPTkQoYm9uZHNbMTZdLCAxKTsKKwlJOTE1X0RFRklORV9DT05U RVhUX1BBUkFNX0VOR0lORVMoZW5naW5lcywgMSk7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250 ZXh0X3BhcmFtIHAgPSB7CisJCS5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSksCisJ CS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTLAorCQkudmFsdWUgPSB0b191c2Vy X3BvaW50ZXIoJmVuZ2luZXMpLAorCQkuc2l6ZSA9IHNpemVvZihlbmdpbmVzKSwKKwl9OworCXVp bnQzMl90IGhhbmRsZTsKKwl2b2lkICpwdHI7CisKKwltZW1zZXQoJmVuZ2luZXMsIDAsIHNpemVv ZihlbmdpbmVzKSk7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKKworCW1lbXNl dChib25kcywgMCwgc2l6ZW9mKGJvbmRzKSk7CisJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9T SVpFKGJvbmRzKTsgbisrKSB7CisJCWJvbmRzW25dLmJhc2UubmFtZSA9IEk5MTVfQ09OVEVYVF9F TkdJTkVTX0VYVF9CT05EOworCQlib25kc1tuXS5iYXNlLm5leHRfZXh0ZW5zaW9uID0KKwkJCW4g PyB0b191c2VyX3BvaW50ZXIoJmJvbmRzW24gLSAxXSkgOiAwOworCQlib25kc1tuXS5udW1fYm9u ZHMgPSAxOworCX0KKwllbmdpbmVzLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmJvbmRz KTsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOworCisJYm9uZHNbMF0uYmFzZS5u ZXh0X2V4dGVuc2lvbiA9IC0xdWxsOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRf cGFyYW0oaTkxNSwgJnApLCAtRUZBVUxUKTsKKworCWJvbmRzWzBdLmJhc2UubmV4dF9leHRlbnNp b24gPSB0b191c2VyX3BvaW50ZXIoJmJvbmRzWzBdKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUUyQklHKTsKKworCWVuZ2luZXMuZXh0ZW5zaW9u cyA9IHRvX3VzZXJfcG9pbnRlcigmYm9uZHNbMV0pOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29u dGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRTJCSUcpOworCWJvbmRzWzBdLmJhc2UubmV4dF9l eHRlbnNpb24gPSAwOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7CisKKwloYW5k bGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYgKiAzKTsKKwlwdHIgPSBnZW1fbW1hcF9fZ3R0KGk5 MTUsIGhhbmRsZSwgNDA5NiAqIDMsIFBST1RfV1JJVEUpOworCWdlbV9jbG9zZShpOTE1LCBoYW5k bGUpOworCisJbWVtY3B5KHB0ciArIDQwOTYsICZib25kc1swXSwgc2l6ZW9mKGJvbmRzWzBdKSk7 CisJZW5naW5lcy5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKHB0cikgKyA0MDk2OworCWdl bV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7CisKKwltZW1jcHkocHRyLCAmYm9uZHNbMF0s IHNpemVvZihib25kc1swXSkpOworCWJvbmRzWzBdLmJhc2UubmV4dF9leHRlbnNpb24gPSB0b191 c2VyX3BvaW50ZXIocHRyKTsKKwltZW1jcHkocHRyICsgNDA5NiwgJmJvbmRzWzBdLCBzaXplb2Yo Ym9uZHNbMF0pKTsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOworCisJbXVubWFw KHB0ciwgNDA5Nik7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1 LCAmcCksIC1FRkFVTFQpOworCisJYm9uZHNbMF0uYmFzZS5uZXh0X2V4dGVuc2lvbiA9IDA7CisJ bWVtY3B5KHB0ciArIDgxOTIsICZib25kc1swXSwgc2l6ZW9mKGJvbmRzWzBdKSk7CisJYm9uZHNb MF0uYmFzZS5uZXh0X2V4dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcihwdHIpICsgODE5MjsKKwlt ZW1jcHkocHRyICsgNDA5NiwgJmJvbmRzWzBdLCBzaXplb2YoYm9uZHNbMF0pKTsKKwlnZW1fY29u dGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOworCisJbXVubWFwKHB0ciArIDgxOTIsIDQwOTYpOwor CWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUZBVUxU KTsKKworCW11bm1hcChwdHIgKyA0MDk2LCA0MDk2KTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUVGQVVMVCk7CisKKwlnZW1fY29udGV4dF9kZXN0 cm95KGk5MTUsIHAuY3R4X2lkKTsKK30KKwogc3RhdGljIHZvaWQga2lja19rdGhyZWFkcyh2b2lk KQogewogCXVzbGVlcCgyMCAqIDEwMDApOyAvKiAyMG1zIHNob3VsZCBiZSBlbm91Z2ggZm9yIGtz b2Z0aXJxZCEgKi8KQEAgLTM0Niw2ICs0NDIsMzggQEAgc3RhdGljIGRvdWJsZSBtZWFzdXJlX21p bl9sb2FkKGludCBwbXUsIHVuc2lnbmVkIGludCBudW0sIGludCBwZXJpb2RfdXMpCiAJcmV0dXJu IG1pbiAvIChkb3VibGUpZF90OwogfQogCitzdGF0aWMgdm9pZCBtZWFzdXJlX2FsbF9sb2FkKGlu dCBwbXUsIGRvdWJsZSAqdiwgdW5zaWduZWQgaW50IG51bSwgaW50IHBlcmlvZF91cykKK3sKKwl1 aW50NjRfdCBkYXRhWzIgKyBudW1dOworCXVpbnQ2NF90IGRfdCwgZF92W251bV07CisKKwlraWNr X2t0aHJlYWRzKCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0 YSkpLCBzaXplb2YoZGF0YSkpOworCWZvciAodW5zaWduZWQgaW50IG4gPSAwOyBuIDwgbnVtOyBu KyspCisJCWRfdltuXSA9IC1kYXRhWzIgKyBuXTsKKwlkX3QgPSAtZGF0YVsxXTsKKworCXVzbGVl cChwZXJpb2RfdXMpOworCisJaWd0X2Fzc2VydF9lcShyZWFkKHBtdSwgZGF0YSwgc2l6ZW9mKGRh dGEpKSwgc2l6ZW9mKGRhdGEpKTsKKworCWRfdCArPSBkYXRhWzFdOworCWZvciAodW5zaWduZWQg aW50IG4gPSAwOyBuIDwgbnVtOyBuKyspIHsKKwkJZF92W25dICs9IGRhdGFbMiArIG5dOworCQlp Z3RfZGVidWcoImVuZ2luZVslZF06ICUuMWYlJVxuIiwKKwkJCSAgbiwgZF92W25dIC8gKGRvdWJs ZSlkX3QgKiAxMDApOworCQl2W25dID0gZF92W25dIC8gKGRvdWJsZSlkX3Q7CisJfQorfQorCitz dGF0aWMgaW50IGFkZF9wbXUoaW50IHBtdSwgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNz X2luc3RhbmNlICpjaSkKK3sKKwlyZXR1cm4gcGVyZl9pOTE1X29wZW5fZ3JvdXAoSTkxNV9QTVVf RU5HSU5FX0JVU1koY2ktPmVuZ2luZV9jbGFzcywKKwkJCQkJCQkgY2ktPmVuZ2luZV9pbnN0YW5j ZSksCisJCQkJICAgIHBtdSk7Cit9CisKIHN0YXRpYyB2b2lkIGNoZWNrX2luZGl2aWR1YWxfZW5n aW5lKGludCBpOTE1LAogCQkJCSAgICB1aW50MzJfdCBjdHgsCiAJCQkJICAgIGNvbnN0IHN0cnVj dCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2ksCkBAIC0zOTQsNyArNTIyLDcgQEAgc3Rh dGljIHZvaWQgaW5kaXZpZHVhbChpbnQgaTkxNSkKIAkJZm9yIChpbnQgcGFzcyA9IDA7IHBhc3Mg PCBjb3VudDsgcGFzcysrKSB7IC8qIGFwcHJveC4gY291bnQhICovCiAJCQlpZ3RfYXNzZXJ0KHNp emVvZigqY2kpID09IHNpemVvZihpbnQpKTsKIAkJCWlndF9wZXJtdXRlX2FycmF5KGNpLCBjb3Vu dCwgaWd0X2V4Y2hhbmdlX2ludCk7Ci0JCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIGNp LCBjb3VudCk7CisJCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIGNpLCBjb3VudCwgTlVM TCk7CiAJCQlmb3IgKHVuc2lnbmVkIGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspCiAJCQkJY2hl Y2tfaW5kaXZpZHVhbF9lbmdpbmUoaTkxNSwgY3R4LCBjaSwgbik7CiAJCX0KQEAgLTQwNiw2ICs1 MzQsMTIzIEBAIHN0YXRpYyB2b2lkIGluZGl2aWR1YWwoaW50IGk5MTUpCiAJZ2VtX3F1aWVzY2Vu dF9ncHUoaTkxNSk7CiB9CiAKK3N0YXRpYyB2b2lkIGJvbmRlZChpbnQgaTkxNSwgdW5zaWduZWQg aW50IGZsYWdzKQorI2RlZmluZSBDT1JLIDB4MQoreworCUk5MTVfREVGSU5FX0NPTlRFWFRfRU5H SU5FU19CT05EKGJvbmRzWzE2XSwgMSk7CisJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3Rh bmNlICptYXN0ZXJfZW5naW5lczsKKwl1aW50MzJfdCBtYXN0ZXI7CisKKwkvKgorCSAqIEk5MTVf Q09OVEVYVF9QQVJBTV9FTkdJTkUgcHJvdmlkZXMgYW4gZXh0ZW5zaW9uIHRoYXQgYWxsb3dzIHVz CisJICogdG8gc3BlY2lmeSB3aGljaCBlbmdpbmUocykgdG8gcGFpciB3aXRoIGEgcGFyYWxsZWwg KEVYRUNfU1VCTUlUKQorCSAqIHJlcXVlc3Qgc3VibWl0dGVkIHRvIGFub3RoZXIgZW5naW5lLgor CSAqLworCisJbWFzdGVyID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKKworCW1lbXNldChib25k cywgMCwgc2l6ZW9mKGJvbmRzKSk7CisJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpFKGJv bmRzKTsgbisrKSB7CisJCWJvbmRzW25dLmJhc2UubmFtZSA9IEk5MTVfQ09OVEVYVF9FTkdJTkVT X0VYVF9CT05EOworCQlib25kc1tuXS5iYXNlLm5leHRfZXh0ZW5zaW9uID0KKwkJCW4gPyB0b191 c2VyX3BvaW50ZXIoJmJvbmRzW24gLSAxXSkgOiAwOworCQlib25kc1tuXS5udW1fYm9uZHMgPSAx OworCX0KKworCWZvciAoaW50IGNsYXNzID0gMDsgY2xhc3MgPCAzMjsgY2xhc3MrKykgeworCQlz dHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKnNpYmxpbmdzOworCQl1bnNpZ25lZCBp bnQgY291bnQsIGxpbWl0OworCQl1aW50MzJfdCBjdHg7CisJCWludCBwbXVbMTZdOworCQlpbnQg bjsKKworCQlzaWJsaW5ncyA9IGxpc3RfZW5naW5lcyhpOTE1LCAxdSA8PCBjbGFzcywgJmNvdW50 KTsKKwkJaWYgKCFzaWJsaW5ncykKKwkJCWNvbnRpbnVlOworCisJCWlmIChjb3VudCA8IDIpIHsK KwkJCWZyZWUoc2libGluZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQltYXN0ZXJfZW5naW5l cyA9IGxpc3RfZW5naW5lcyhpOTE1LCB+KDF1IDw8IGNsYXNzKSwgJmxpbWl0KTsKKwkJc2V0X2Vu Z2luZXMoaTkxNSwgbWFzdGVyLCBtYXN0ZXJfZW5naW5lcywgbGltaXQpOworCisJCWxpbWl0ID0g bWluKGNvdW50LCBsaW1pdCk7CisJCWlndF9hc3NlcnQobGltaXQgPD0gQVJSQVlfU0laRShib25k cykpOworCQlmb3IgKG4gPSAwOyBuIDwgbGltaXQ7IG4rKykgeworCQkJYm9uZHNbbl0ubWFzdGVy ID0gbWFzdGVyX2VuZ2luZXNbbl07CisJCQlib25kc1tuXS5lbmdpbmVzWzBdID0gc2libGluZ3Nb bl07CisJCX0KKworCQljdHggPSBnZW1fY29udGV4dF9jbG9uZShpOTE1LAorCQkJCQltYXN0ZXIs IEk5MTVfQ09OVEVYVF9DTE9ORV9WTSwKKwkJCQkJSTkxNV9DT05URVhUX0NSRUFURV9GTEFHU19T SU5HTEVfVElNRUxJTkUpOworCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIHNpYmxpbmdz LCBjb3VudCwgJmJvbmRzW2xpbWl0IC0gMV0pOworCisJCXBtdVswXSA9IC0xOworCQlmb3IgKG4g PSAwOyBuIDwgbGltaXQ7IG4rKykKKwkJCXBtdVtuXSA9IGFkZF9wbXUocG11WzBdLCAmc2libGlu Z3Nbbl0pOworCisJCWZvciAobiA9IDA7IG4gPCBsaW1pdDsgbisrKSB7CisJCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViOworCQkJaWd0X3NwaW5fdCAqc3BpbiwgKnBsdWc7CisJ CQlJR1RfQ09SS19IQU5ETEUoY29yayk7CisJCQlkb3VibGUgdltsaW1pdF07CisKKwkJCWlndF9h c3NlcnQoc2libGluZ3Nbbl0uZW5naW5lX2NsYXNzICE9IG1hc3Rlcl9lbmdpbmVzW25dLmVuZ2lu ZV9jbGFzcyk7CisKKwkJCXBsdWcgPSBOVUxMOworCQkJaWYgKGZsYWdzICYgQ09SSykgeworCQkJ CXBsdWcgPSBfX2lndF9zcGluX25ldyhpOTE1LAorCQkJCQkJICAgICAgLmN0eCA9IG1hc3RlciwK KwkJCQkJCSAgICAgIC5lbmdpbmUgPSBuLAorCQkJCQkJICAgICAgLmRlcGVuZGVuY3kgPSBpZ3Rf Y29ya19wbHVnKCZjb3JrLCBpOTE1KSk7CisJCQl9CisKKwkJCXNwaW4gPSBfX2lndF9zcGluX25l dyhpOTE1LAorCQkJCQkgICAgICAuY3R4ID0gbWFzdGVyLAorCQkJCQkgICAgICAuZW5naW5lID0g biwKKwkJCQkJICAgICAgLmZsYWdzID0gSUdUX1NQSU5fRkVOQ0VfT1VUKTsKKworCQkJZWIgPSBz cGluLT5leGVjYnVmOworCQkJZWIucnN2ZDEgPSBjdHg7CisJCQllYi5yc3ZkMiA9IHNwaW4tPm91 dF9mZW5jZTsKKwkJCWViLmZsYWdzID0gSTkxNV9FWEVDX0ZFTkNFX1NVQk1JVDsKKwkJCWdlbV9l eGVjYnVmKGk5MTUsICZlYik7CisKKwkJCWlmIChwbHVnKSB7CisJCQkJaWd0X2NvcmtfdW5wbHVn KCZjb3JrKTsKKwkJCQlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHBsdWcpOworCQkJfQorCisJCQltZWFz dXJlX2FsbF9sb2FkKHBtdVswXSwgdiwgbGltaXQsIDEwMDAwKTsKKwkJCWlndF9zcGluX2ZyZWUo aTkxNSwgc3Bpbik7CisKKwkJCWlndF9hc3NlcnRfZih2W25dID4gMC45MCwKKwkJCQkgICAgICJl bmdpbmUgJWQgKGNsYXNzOmluc3RhbmNlICVkOiVkKSB3YXMgZm91bmQgdG8gYmUgb25seSAlLjFm JSUgYnVzeVxuIiwKKwkJCQkgICAgIG4sIHNpYmxpbmdzW25dLmVuZ2luZV9jbGFzcywgc2libGlu Z3Nbbl0uZW5naW5lX2luc3RhbmNlLAorCQkJCSAgICAgMTAwICogdltuXSk7CisJCQlmb3IgKGlu dCBvdGhlciA9IDA7IG90aGVyIDwgbGltaXQ7IG90aGVyKyspIHsKKwkJCQlpZiAob3RoZXIgPT0g bikKKwkJCQkJY29udGludWU7CisKKwkJCQlpZ3RfYXNzZXJ0X2YodltvdGhlcl0gPT0gMCwKKwkJ CQkJICAgICAiZW5naW5lICVkIChjbGFzczppbnN0YW5jZSAlZDolZCkgd2FzIG5vdCBpZGxlLCBh bmQgYWN0dWFsbHkgJS4xZiUlIGJ1c3lcbiIsCisJCQkJCSAgICAgb3RoZXIsIHNpYmxpbmdzW290 aGVyXS5lbmdpbmVfY2xhc3MsIHNpYmxpbmdzW290aGVyXS5lbmdpbmVfaW5zdGFuY2UsCisJCQkJ CSAgICAgMTAwICogdltvdGhlcl0pOworCQkJfQorCQl9CisKKwkJY2xvc2UocG11WzBdKTsKKwkJ Z2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOworCQlmcmVlKG1hc3Rlcl9lbmdpbmVzKTsK KwkJZnJlZShzaWJsaW5ncyk7CisJfQorCisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBtYXN0 ZXIpOworfQorCiBzdGF0aWMgdm9pZCBpbmRpY2VzKGludCBpOTE1KQogewogCUk5MTVfREVGSU5F X0NPTlRFWFRfUEFSQU1fRU5HSU5FUyhlbmdpbmVzLCBJOTE1X0VYRUNfUklOR19NQVNLICsgMSk7 CkBAIC01NjQsMTMgKzgwOSw2IEBAIHN0YXRpYyB2b2lkIGJ1c3koaW50IGk5MTUpCiAJZ2VtX3F1 aWVzY2VudF9ncHUoaTkxNSk7CiB9CiAKLXN0YXRpYyBpbnQgYWRkX3BtdShpbnQgcG11LCBjb25z dCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpKQotewotCXJldHVybiBwZXJm X2k5MTVfb3Blbl9ncm91cChJOTE1X1BNVV9FTkdJTkVfQlVTWShjaS0+ZW5naW5lX2NsYXNzLAot CQkJCQkJCSBjaS0+ZW5naW5lX2luc3RhbmNlKSwKLQkJCQkgICAgcG11KTsKLX0KLQogc3RhdGlj IHZvaWQgZnVsbChpbnQgaTkxNSwgdW5zaWduZWQgaW50IGZsYWdzKQogI2RlZmluZSBQVUxTRSAw eDEKICNkZWZpbmUgTEFURSAweDIKQEAgLTg2MCw3ICsxMDk4LDcgQEAgc3RhdGljIHZvaWQgc2Vt YXBob3JlKGludCBpOTE1KQogCQljb3VudCA9IEFSUkFZX1NJWkUoYmxvY2spOwogCiAJCWZvciAo aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwg YmxvY2tbaV0sIGNpLCBjb3VudCk7CisJCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBibG9ja1tp XSwgY2ksIGNvdW50LCBOVUxMKTsKIAkJCXNwaW5baV0gPSBfX2lndF9zcGluX25ldyhpOTE1LAog CQkJCQkJIC5jdHggPSBibG9ja1tpXSwKIAkJCQkJCSAuZGVwZW5kZW5jeSA9IHNjcmF0Y2gpOwpA QCAtODcxLDcgKzExMDksNyBAQCBzdGF0aWMgdm9pZCBzZW1hcGhvcmUoaW50IGk5MTUpCiAJCSAq IG9yIHdlIGxldCB0aGUgdmlwIHRocm91Z2guIElmIG5vdCwgd2UgaGFuZy4KIAkJICovCiAJCXZp cCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKLQkJc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwg dmlwLCBjaSwgY291bnQpOworCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCB2aXAsIGNpLCBjb3Vu dCwgTlVMTCk7CiAJCXBpbmcoaTkxNSwgdmlwLCAwKTsKIAkJZ2VtX2NvbnRleHRfZGVzdHJveShp OTE1LCB2aXApOwogCkBAIC05ODYsNyArMTIyNCw3IEBAIHN0YXRpYyBib29sIGhhc19sb2FkX2Jh bGFuY2VyKGludCBpOTE1KQogCWludCBlcnI7CiAKIAljdHggPSBnZW1fY29udGV4dF9jcmVhdGUo aTkxNSk7Ci0JZXJyID0gX19zZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsICZjaSwgMSk7CisJ ZXJyID0gX19zZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsICZjaSwgMSwgTlVMTCk7CiAJZ2Vt X2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOwogCiAJcmV0dXJuIGVyciA9PSAwOwpAQCAtMTAx Miw2ICsxMjUwLDkgQEAgaWd0X21haW4KIAlpZ3Rfc3VidGVzdCgiaW52YWxpZC1iYWxhbmNlciIp CiAJCWludmFsaWRfYmFsYW5jZXIoaTkxNSk7CiAKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1ib25k cyIpCisJCWludmFsaWRfYm9uZHMoaTkxNSk7CisKIAlpZ3Rfc3VidGVzdCgiaW5kaXZpZHVhbCIp CiAJCWluZGl2aWR1YWwoaTkxNSk7CiAKQEAgLTEwNDYsNiArMTI4NywxMiBAQCBpZ3RfbWFpbgog CWlndF9zdWJ0ZXN0KCJzbW9rZSIpCiAJCXNtb2tldGVzdChpOTE1LCAyMCk7CiAKKwlpZ3Rfc3Vi dGVzdCgiYm9uZGVkLWltbSIpCisJCWJvbmRlZChpOTE1LCAwKTsKKworCWlndF9zdWJ0ZXN0KCJi b25kZWQtY29yayIpCisJCWJvbmRlZChpOTE1LCBDT1JLKTsKKwogCWlndF9maXh0dXJlIHsKIAkJ aWd0X3N0b3BfaGFuZ19kZXRlY3RvcigpOwogCX0KLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Chris Wilson Date: Wed, 22 May 2019 12:37:10 +0100 Message-Id: <20190522113712.23512-10-chris@chris-wilson.co.uk> In-Reply-To: <20190522113712.23512-1-chris@chris-wilson.co.uk> References: <20190522113712.23512-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 10/12] i915/gem_exec_balancer: Exercise bonded pairs 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: intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-ID: VGhlIHN1Ym1pdC1mZW5jZSArIGxvYWRfYmFsYW5jaW5nIGFwaXMgYWxsb3cgZm9yIHVzIHRvIGV4 ZWN1dGUgYSBuYW1lZApwYWlyIG9mIGVuZ2luZXMgaW4gcGFyYWxsZWw7IHRoYXQgdGhpcyBieSBz dWJtaXR0aW5nIGEgcmVxdWVzdCB0byBvbmUKZW5naW5lLCB3ZSBjYW4gdGhlbiB1c2UgdGhlIGdl bmVyYXRlZCBzdWJtaXQtZmVuY2UgdG8gc3VibWl0IGEgc2Vjb25kCnJlcXVlc3QgdG8gYW5vdGhl ciBlbmdpbmUgYW5kIGhhdmUgaXQgZXhlY3V0ZSBhdCB0aGUgc2FtZSB0aW1lLgpGdXJ0aGVybW9y ZSwgYnkgc3BlY2lmeWluZyBib25kZWQgcGFpcnMsIHdlIGNhbiBkaXJlY3QgdGhlIHZpcnR1YWwK ZW5naW5lIHRvIHVzZSBhIHBhcnRpY3VsYXIgZW5naW5lIGluIHBhcmFsbGVsIHRvIHRoZSBmaXJz dCByZXF1ZXN0LgoKdjI6IE1lYXN1cmUgbG9hZCBhY3Jvc3MgYWxsIGJvbmRlZCBzaWJsaW5ncyB0 byBjaGVjayB3ZSBkb24ndAptaXNzIGFuIGFjY2lkZW50YWwgZXhlY3V0aW9uIG9uIGFub3RoZXIu CgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K LS0tCiB0ZXN0cy9pOTE1L2dlbV9leGVjX2JhbGFuY2VyLmMgfCAyNzcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tCiAxIGZpbGUgY2hhbmdlZCwgMjYyIGluc2VydGlvbnMoKyksIDE1 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfYmFsYW5jZXIu YyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfYmFsYW5jZXIuYwppbmRleCA0MGEyNzE5YzAuLmM3NjEx MzQ3NiAxMDA2NDQKLS0tIGEvdGVzdHMvaTkxNS9nZW1fZXhlY19iYWxhbmNlci5jCisrKyBiL3Rl c3RzL2k5MTUvZ2VtX2V4ZWNfYmFsYW5jZXIuYwpAQCAtOTgsOSArOTgsMzUgQEAgbGlzdF9lbmdp bmVzKGludCBpOTE1LCB1aW50MzJfdCBjbGFzc19tYXNrLCB1bnNpZ25lZCBpbnQgKm91dCkKIAly ZXR1cm4gZW5naW5lczsKIH0KIAorc3RhdGljIGludCBfX3NldF9lbmdpbmVzKGludCBpOTE1LCB1 aW50MzJfdCBjdHgsCisJCQkgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNl ICpjaSwKKwkJCSB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJSTkxNV9ERUZJTkVfQ09OVEVYVF9Q QVJBTV9FTkdJTkVTKGVuZ2luZXMsIGNvdW50KTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRl eHRfcGFyYW0gcCA9IHsKKwkJLmN0eF9pZCA9IGN0eCwKKwkJLnBhcmFtID0gSTkxNV9DT05URVhU X1BBUkFNX0VOR0lORVMsCisJCS5zaXplID0gc2l6ZW9mKGVuZ2luZXMpLAorCQkudmFsdWUgPSB0 b191c2VyX3BvaW50ZXIoJmVuZ2luZXMpCisJfTsKKworCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IDA7 CisJbWVtY3B5KGVuZ2luZXMuZW5naW5lcywgY2ksIHNpemVvZihlbmdpbmVzLmVuZ2luZXMpKTsK KworCXJldHVybiBfX2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7Cit9CisKK3N0YXRp YyB2b2lkIHNldF9lbmdpbmVzKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCisJCQljb25zdCBzdHJ1 Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAorCQkJdW5zaWduZWQgaW50IGNvdW50 KQoreworCWlndF9hc3NlcnRfZXEoX19zZXRfZW5naW5lcyhpOTE1LCBjdHgsIGNpLCBjb3VudCks IDApOworfQorCiBzdGF0aWMgaW50IF9fc2V0X2xvYWRfYmFsYW5jZXIoaW50IGk5MTUsIHVpbnQz Ml90IGN0eCwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFu Y2UgKmNpLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKKwkJCSAgICAgICB1bnNpZ25l ZCBpbnQgY291bnQsCisJCQkgICAgICAgdm9pZCAqZXh0KQogewogCUk5MTVfREVGSU5FX0NPTlRF WFRfRU5HSU5FU19MT0FEX0JBTEFOQ0UoYmFsYW5jZXIsIGNvdW50KTsKIAlJOTE1X0RFRklORV9D T05URVhUX1BBUkFNX0VOR0lORVMoZW5naW5lcywgMSArIGNvdW50KTsKQEAgLTExMyw2ICsxMzks NyBAQCBzdGF0aWMgaW50IF9fc2V0X2xvYWRfYmFsYW5jZXIoaW50IGk5MTUsIHVpbnQzMl90IGN0 eCwKIAogCW1lbXNldCgmYmFsYW5jZXIsIDAsIHNpemVvZihiYWxhbmNlcikpOwogCWJhbGFuY2Vy LmJhc2UubmFtZSA9IEk5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9MT0FEX0JBTEFOQ0U7CisJYmFs YW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcihleHQpOwogCiAJaWd0 X2Fzc2VydChjb3VudCk7CiAJYmFsYW5jZXIubnVtX3NpYmxpbmdzID0gY291bnQ7CkBAIC0xMzEs OSArMTU4LDEwIEBAIHN0YXRpYyBpbnQgX19zZXRfbG9hZF9iYWxhbmNlcihpbnQgaTkxNSwgdWlu dDMyX3QgY3R4LAogCiBzdGF0aWMgdm9pZCBzZXRfbG9hZF9iYWxhbmNlcihpbnQgaTkxNSwgdWlu dDMyX3QgY3R4LAogCQkJICAgICAgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3Rh bmNlICpjaSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKKwkJCSAgICAgIHVuc2lnbmVk IGludCBjb3VudCwKKwkJCSAgICAgIHZvaWQgKmV4dCkKIHsKLQlpZ3RfYXNzZXJ0X2VxKF9fc2V0 X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCBjaSwgY291bnQpLCAwKTsKKwlpZ3RfYXNzZXJ0X2Vx KF9fc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCBjaSwgY291bnQsIGV4dCksIDApOwogfQog CiBzdGF0aWMgdWludDMyX3QgbG9hZF9iYWxhbmNlcl9jcmVhdGUoaW50IGk5MTUsCkBAIC0xNDMs NyArMTcxLDcgQEAgc3RhdGljIHVpbnQzMl90IGxvYWRfYmFsYW5jZXJfY3JlYXRlKGludCBpOTE1 LAogCXVpbnQzMl90IGN0eDsKIAogCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKLQlz ZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIGNpLCBjb3VudCk7CisJc2V0X2xvYWRfYmFsYW5j ZXIoaTkxNSwgY3R4LCBjaSwgY291bnQsIE5VTEwpOwogCiAJcmV0dXJuIGN0eDsKIH0KQEAgLTI4 Nyw2ICszMTUsNzQgQEAgc3RhdGljIHZvaWQgaW52YWxpZF9iYWxhbmNlcihpbnQgaTkxNSkKIAl9 CiB9CiAKK3N0YXRpYyB2b2lkIGludmFsaWRfYm9uZHMoaW50IGk5MTUpCit7CisJSTkxNV9ERUZJ TkVfQ09OVEVYVF9FTkdJTkVTX0JPTkQoYm9uZHNbMTZdLCAxKTsKKwlJOTE1X0RFRklORV9DT05U RVhUX1BBUkFNX0VOR0lORVMoZW5naW5lcywgMSk7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250 ZXh0X3BhcmFtIHAgPSB7CisJCS5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSksCisJ CS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTLAorCQkudmFsdWUgPSB0b191c2Vy X3BvaW50ZXIoJmVuZ2luZXMpLAorCQkuc2l6ZSA9IHNpemVvZihlbmdpbmVzKSwKKwl9OworCXVp bnQzMl90IGhhbmRsZTsKKwl2b2lkICpwdHI7CisKKwltZW1zZXQoJmVuZ2luZXMsIDAsIHNpemVv ZihlbmdpbmVzKSk7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKKworCW1lbXNl dChib25kcywgMCwgc2l6ZW9mKGJvbmRzKSk7CisJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9T SVpFKGJvbmRzKTsgbisrKSB7CisJCWJvbmRzW25dLmJhc2UubmFtZSA9IEk5MTVfQ09OVEVYVF9F TkdJTkVTX0VYVF9CT05EOworCQlib25kc1tuXS5iYXNlLm5leHRfZXh0ZW5zaW9uID0KKwkJCW4g PyB0b191c2VyX3BvaW50ZXIoJmJvbmRzW24gLSAxXSkgOiAwOworCQlib25kc1tuXS5udW1fYm9u ZHMgPSAxOworCX0KKwllbmdpbmVzLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmJvbmRz KTsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOworCisJYm9uZHNbMF0uYmFzZS5u ZXh0X2V4dGVuc2lvbiA9IC0xdWxsOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRf cGFyYW0oaTkxNSwgJnApLCAtRUZBVUxUKTsKKworCWJvbmRzWzBdLmJhc2UubmV4dF9leHRlbnNp b24gPSB0b191c2VyX3BvaW50ZXIoJmJvbmRzWzBdKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUUyQklHKTsKKworCWVuZ2luZXMuZXh0ZW5zaW9u cyA9IHRvX3VzZXJfcG9pbnRlcigmYm9uZHNbMV0pOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29u dGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRTJCSUcpOworCWJvbmRzWzBdLmJhc2UubmV4dF9l eHRlbnNpb24gPSAwOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7CisKKwloYW5k bGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYgKiAzKTsKKwlwdHIgPSBnZW1fbW1hcF9fZ3R0KGk5 MTUsIGhhbmRsZSwgNDA5NiAqIDMsIFBST1RfV1JJVEUpOworCWdlbV9jbG9zZShpOTE1LCBoYW5k bGUpOworCisJbWVtY3B5KHB0ciArIDQwOTYsICZib25kc1swXSwgc2l6ZW9mKGJvbmRzWzBdKSk7 CisJZW5naW5lcy5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKHB0cikgKyA0MDk2OworCWdl bV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7CisKKwltZW1jcHkocHRyLCAmYm9uZHNbMF0s IHNpemVvZihib25kc1swXSkpOworCWJvbmRzWzBdLmJhc2UubmV4dF9leHRlbnNpb24gPSB0b191 c2VyX3BvaW50ZXIocHRyKTsKKwltZW1jcHkocHRyICsgNDA5NiwgJmJvbmRzWzBdLCBzaXplb2Yo Ym9uZHNbMF0pKTsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOworCisJbXVubWFw KHB0ciwgNDA5Nik7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1 LCAmcCksIC1FRkFVTFQpOworCisJYm9uZHNbMF0uYmFzZS5uZXh0X2V4dGVuc2lvbiA9IDA7CisJ bWVtY3B5KHB0ciArIDgxOTIsICZib25kc1swXSwgc2l6ZW9mKGJvbmRzWzBdKSk7CisJYm9uZHNb MF0uYmFzZS5uZXh0X2V4dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcihwdHIpICsgODE5MjsKKwlt ZW1jcHkocHRyICsgNDA5NiwgJmJvbmRzWzBdLCBzaXplb2YoYm9uZHNbMF0pKTsKKwlnZW1fY29u dGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOworCisJbXVubWFwKHB0ciArIDgxOTIsIDQwOTYpOwor CWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUZBVUxU KTsKKworCW11bm1hcChwdHIgKyA0MDk2LCA0MDk2KTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUVGQVVMVCk7CisKKwlnZW1fY29udGV4dF9kZXN0 cm95KGk5MTUsIHAuY3R4X2lkKTsKK30KKwogc3RhdGljIHZvaWQga2lja19rdGhyZWFkcyh2b2lk KQogewogCXVzbGVlcCgyMCAqIDEwMDApOyAvKiAyMG1zIHNob3VsZCBiZSBlbm91Z2ggZm9yIGtz b2Z0aXJxZCEgKi8KQEAgLTM0Niw2ICs0NDIsMzggQEAgc3RhdGljIGRvdWJsZSBtZWFzdXJlX21p bl9sb2FkKGludCBwbXUsIHVuc2lnbmVkIGludCBudW0sIGludCBwZXJpb2RfdXMpCiAJcmV0dXJu IG1pbiAvIChkb3VibGUpZF90OwogfQogCitzdGF0aWMgdm9pZCBtZWFzdXJlX2FsbF9sb2FkKGlu dCBwbXUsIGRvdWJsZSAqdiwgdW5zaWduZWQgaW50IG51bSwgaW50IHBlcmlvZF91cykKK3sKKwl1 aW50NjRfdCBkYXRhWzIgKyBudW1dOworCXVpbnQ2NF90IGRfdCwgZF92W251bV07CisKKwlraWNr X2t0aHJlYWRzKCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0 YSkpLCBzaXplb2YoZGF0YSkpOworCWZvciAodW5zaWduZWQgaW50IG4gPSAwOyBuIDwgbnVtOyBu KyspCisJCWRfdltuXSA9IC1kYXRhWzIgKyBuXTsKKwlkX3QgPSAtZGF0YVsxXTsKKworCXVzbGVl cChwZXJpb2RfdXMpOworCisJaWd0X2Fzc2VydF9lcShyZWFkKHBtdSwgZGF0YSwgc2l6ZW9mKGRh dGEpKSwgc2l6ZW9mKGRhdGEpKTsKKworCWRfdCArPSBkYXRhWzFdOworCWZvciAodW5zaWduZWQg aW50IG4gPSAwOyBuIDwgbnVtOyBuKyspIHsKKwkJZF92W25dICs9IGRhdGFbMiArIG5dOworCQlp Z3RfZGVidWcoImVuZ2luZVslZF06ICUuMWYlJVxuIiwKKwkJCSAgbiwgZF92W25dIC8gKGRvdWJs ZSlkX3QgKiAxMDApOworCQl2W25dID0gZF92W25dIC8gKGRvdWJsZSlkX3Q7CisJfQorfQorCitz dGF0aWMgaW50IGFkZF9wbXUoaW50IHBtdSwgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNz X2luc3RhbmNlICpjaSkKK3sKKwlyZXR1cm4gcGVyZl9pOTE1X29wZW5fZ3JvdXAoSTkxNV9QTVVf RU5HSU5FX0JVU1koY2ktPmVuZ2luZV9jbGFzcywKKwkJCQkJCQkgY2ktPmVuZ2luZV9pbnN0YW5j ZSksCisJCQkJICAgIHBtdSk7Cit9CisKIHN0YXRpYyB2b2lkIGNoZWNrX2luZGl2aWR1YWxfZW5n aW5lKGludCBpOTE1LAogCQkJCSAgICB1aW50MzJfdCBjdHgsCiAJCQkJICAgIGNvbnN0IHN0cnVj dCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2ksCkBAIC0zOTQsNyArNTIyLDcgQEAgc3Rh dGljIHZvaWQgaW5kaXZpZHVhbChpbnQgaTkxNSkKIAkJZm9yIChpbnQgcGFzcyA9IDA7IHBhc3Mg PCBjb3VudDsgcGFzcysrKSB7IC8qIGFwcHJveC4gY291bnQhICovCiAJCQlpZ3RfYXNzZXJ0KHNp emVvZigqY2kpID09IHNpemVvZihpbnQpKTsKIAkJCWlndF9wZXJtdXRlX2FycmF5KGNpLCBjb3Vu dCwgaWd0X2V4Y2hhbmdlX2ludCk7Ci0JCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIGNp LCBjb3VudCk7CisJCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIGNpLCBjb3VudCwgTlVM TCk7CiAJCQlmb3IgKHVuc2lnbmVkIGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspCiAJCQkJY2hl Y2tfaW5kaXZpZHVhbF9lbmdpbmUoaTkxNSwgY3R4LCBjaSwgbik7CiAJCX0KQEAgLTQwNiw2ICs1 MzQsMTIzIEBAIHN0YXRpYyB2b2lkIGluZGl2aWR1YWwoaW50IGk5MTUpCiAJZ2VtX3F1aWVzY2Vu dF9ncHUoaTkxNSk7CiB9CiAKK3N0YXRpYyB2b2lkIGJvbmRlZChpbnQgaTkxNSwgdW5zaWduZWQg aW50IGZsYWdzKQorI2RlZmluZSBDT1JLIDB4MQoreworCUk5MTVfREVGSU5FX0NPTlRFWFRfRU5H SU5FU19CT05EKGJvbmRzWzE2XSwgMSk7CisJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3Rh bmNlICptYXN0ZXJfZW5naW5lczsKKwl1aW50MzJfdCBtYXN0ZXI7CisKKwkvKgorCSAqIEk5MTVf Q09OVEVYVF9QQVJBTV9FTkdJTkUgcHJvdmlkZXMgYW4gZXh0ZW5zaW9uIHRoYXQgYWxsb3dzIHVz CisJICogdG8gc3BlY2lmeSB3aGljaCBlbmdpbmUocykgdG8gcGFpciB3aXRoIGEgcGFyYWxsZWwg KEVYRUNfU1VCTUlUKQorCSAqIHJlcXVlc3Qgc3VibWl0dGVkIHRvIGFub3RoZXIgZW5naW5lLgor CSAqLworCisJbWFzdGVyID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKKworCW1lbXNldChib25k cywgMCwgc2l6ZW9mKGJvbmRzKSk7CisJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpFKGJv bmRzKTsgbisrKSB7CisJCWJvbmRzW25dLmJhc2UubmFtZSA9IEk5MTVfQ09OVEVYVF9FTkdJTkVT X0VYVF9CT05EOworCQlib25kc1tuXS5iYXNlLm5leHRfZXh0ZW5zaW9uID0KKwkJCW4gPyB0b191 c2VyX3BvaW50ZXIoJmJvbmRzW24gLSAxXSkgOiAwOworCQlib25kc1tuXS5udW1fYm9uZHMgPSAx OworCX0KKworCWZvciAoaW50IGNsYXNzID0gMDsgY2xhc3MgPCAzMjsgY2xhc3MrKykgeworCQlz dHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKnNpYmxpbmdzOworCQl1bnNpZ25lZCBp bnQgY291bnQsIGxpbWl0OworCQl1aW50MzJfdCBjdHg7CisJCWludCBwbXVbMTZdOworCQlpbnQg bjsKKworCQlzaWJsaW5ncyA9IGxpc3RfZW5naW5lcyhpOTE1LCAxdSA8PCBjbGFzcywgJmNvdW50 KTsKKwkJaWYgKCFzaWJsaW5ncykKKwkJCWNvbnRpbnVlOworCisJCWlmIChjb3VudCA8IDIpIHsK KwkJCWZyZWUoc2libGluZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQltYXN0ZXJfZW5naW5l cyA9IGxpc3RfZW5naW5lcyhpOTE1LCB+KDF1IDw8IGNsYXNzKSwgJmxpbWl0KTsKKwkJc2V0X2Vu Z2luZXMoaTkxNSwgbWFzdGVyLCBtYXN0ZXJfZW5naW5lcywgbGltaXQpOworCisJCWxpbWl0ID0g bWluKGNvdW50LCBsaW1pdCk7CisJCWlndF9hc3NlcnQobGltaXQgPD0gQVJSQVlfU0laRShib25k cykpOworCQlmb3IgKG4gPSAwOyBuIDwgbGltaXQ7IG4rKykgeworCQkJYm9uZHNbbl0ubWFzdGVy ID0gbWFzdGVyX2VuZ2luZXNbbl07CisJCQlib25kc1tuXS5lbmdpbmVzWzBdID0gc2libGluZ3Nb bl07CisJCX0KKworCQljdHggPSBnZW1fY29udGV4dF9jbG9uZShpOTE1LAorCQkJCQltYXN0ZXIs IEk5MTVfQ09OVEVYVF9DTE9ORV9WTSwKKwkJCQkJSTkxNV9DT05URVhUX0NSRUFURV9GTEFHU19T SU5HTEVfVElNRUxJTkUpOworCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIHNpYmxpbmdz LCBjb3VudCwgJmJvbmRzW2xpbWl0IC0gMV0pOworCisJCXBtdVswXSA9IC0xOworCQlmb3IgKG4g PSAwOyBuIDwgbGltaXQ7IG4rKykKKwkJCXBtdVtuXSA9IGFkZF9wbXUocG11WzBdLCAmc2libGlu Z3Nbbl0pOworCisJCWZvciAobiA9IDA7IG4gPCBsaW1pdDsgbisrKSB7CisJCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViOworCQkJaWd0X3NwaW5fdCAqc3BpbiwgKnBsdWc7CisJ CQlJR1RfQ09SS19IQU5ETEUoY29yayk7CisJCQlkb3VibGUgdltsaW1pdF07CisKKwkJCWlndF9h c3NlcnQoc2libGluZ3Nbbl0uZW5naW5lX2NsYXNzICE9IG1hc3Rlcl9lbmdpbmVzW25dLmVuZ2lu ZV9jbGFzcyk7CisKKwkJCXBsdWcgPSBOVUxMOworCQkJaWYgKGZsYWdzICYgQ09SSykgeworCQkJ CXBsdWcgPSBfX2lndF9zcGluX25ldyhpOTE1LAorCQkJCQkJICAgICAgLmN0eCA9IG1hc3RlciwK KwkJCQkJCSAgICAgIC5lbmdpbmUgPSBuLAorCQkJCQkJICAgICAgLmRlcGVuZGVuY3kgPSBpZ3Rf Y29ya19wbHVnKCZjb3JrLCBpOTE1KSk7CisJCQl9CisKKwkJCXNwaW4gPSBfX2lndF9zcGluX25l dyhpOTE1LAorCQkJCQkgICAgICAuY3R4ID0gbWFzdGVyLAorCQkJCQkgICAgICAuZW5naW5lID0g biwKKwkJCQkJICAgICAgLmZsYWdzID0gSUdUX1NQSU5fRkVOQ0VfT1VUKTsKKworCQkJZWIgPSBz cGluLT5leGVjYnVmOworCQkJZWIucnN2ZDEgPSBjdHg7CisJCQllYi5yc3ZkMiA9IHNwaW4tPm91 dF9mZW5jZTsKKwkJCWViLmZsYWdzID0gSTkxNV9FWEVDX0ZFTkNFX1NVQk1JVDsKKwkJCWdlbV9l eGVjYnVmKGk5MTUsICZlYik7CisKKwkJCWlmIChwbHVnKSB7CisJCQkJaWd0X2NvcmtfdW5wbHVn KCZjb3JrKTsKKwkJCQlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHBsdWcpOworCQkJfQorCisJCQltZWFz dXJlX2FsbF9sb2FkKHBtdVswXSwgdiwgbGltaXQsIDEwMDAwKTsKKwkJCWlndF9zcGluX2ZyZWUo aTkxNSwgc3Bpbik7CisKKwkJCWlndF9hc3NlcnRfZih2W25dID4gMC45MCwKKwkJCQkgICAgICJl bmdpbmUgJWQgKGNsYXNzOmluc3RhbmNlICVkOiVkKSB3YXMgZm91bmQgdG8gYmUgb25seSAlLjFm JSUgYnVzeVxuIiwKKwkJCQkgICAgIG4sIHNpYmxpbmdzW25dLmVuZ2luZV9jbGFzcywgc2libGlu Z3Nbbl0uZW5naW5lX2luc3RhbmNlLAorCQkJCSAgICAgMTAwICogdltuXSk7CisJCQlmb3IgKGlu dCBvdGhlciA9IDA7IG90aGVyIDwgbGltaXQ7IG90aGVyKyspIHsKKwkJCQlpZiAob3RoZXIgPT0g bikKKwkJCQkJY29udGludWU7CisKKwkJCQlpZ3RfYXNzZXJ0X2YodltvdGhlcl0gPT0gMCwKKwkJ CQkJICAgICAiZW5naW5lICVkIChjbGFzczppbnN0YW5jZSAlZDolZCkgd2FzIG5vdCBpZGxlLCBh bmQgYWN0dWFsbHkgJS4xZiUlIGJ1c3lcbiIsCisJCQkJCSAgICAgb3RoZXIsIHNpYmxpbmdzW290 aGVyXS5lbmdpbmVfY2xhc3MsIHNpYmxpbmdzW290aGVyXS5lbmdpbmVfaW5zdGFuY2UsCisJCQkJ CSAgICAgMTAwICogdltvdGhlcl0pOworCQkJfQorCQl9CisKKwkJY2xvc2UocG11WzBdKTsKKwkJ Z2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOworCQlmcmVlKG1hc3Rlcl9lbmdpbmVzKTsK KwkJZnJlZShzaWJsaW5ncyk7CisJfQorCisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBtYXN0 ZXIpOworfQorCiBzdGF0aWMgdm9pZCBpbmRpY2VzKGludCBpOTE1KQogewogCUk5MTVfREVGSU5F X0NPTlRFWFRfUEFSQU1fRU5HSU5FUyhlbmdpbmVzLCBJOTE1X0VYRUNfUklOR19NQVNLICsgMSk7 CkBAIC01NjQsMTMgKzgwOSw2IEBAIHN0YXRpYyB2b2lkIGJ1c3koaW50IGk5MTUpCiAJZ2VtX3F1 aWVzY2VudF9ncHUoaTkxNSk7CiB9CiAKLXN0YXRpYyBpbnQgYWRkX3BtdShpbnQgcG11LCBjb25z dCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpKQotewotCXJldHVybiBwZXJm X2k5MTVfb3Blbl9ncm91cChJOTE1X1BNVV9FTkdJTkVfQlVTWShjaS0+ZW5naW5lX2NsYXNzLAot CQkJCQkJCSBjaS0+ZW5naW5lX2luc3RhbmNlKSwKLQkJCQkgICAgcG11KTsKLX0KLQogc3RhdGlj IHZvaWQgZnVsbChpbnQgaTkxNSwgdW5zaWduZWQgaW50IGZsYWdzKQogI2RlZmluZSBQVUxTRSAw eDEKICNkZWZpbmUgTEFURSAweDIKQEAgLTg2MCw3ICsxMDk4LDcgQEAgc3RhdGljIHZvaWQgc2Vt YXBob3JlKGludCBpOTE1KQogCQljb3VudCA9IEFSUkFZX1NJWkUoYmxvY2spOwogCiAJCWZvciAo aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwg YmxvY2tbaV0sIGNpLCBjb3VudCk7CisJCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBibG9ja1tp XSwgY2ksIGNvdW50LCBOVUxMKTsKIAkJCXNwaW5baV0gPSBfX2lndF9zcGluX25ldyhpOTE1LAog CQkJCQkJIC5jdHggPSBibG9ja1tpXSwKIAkJCQkJCSAuZGVwZW5kZW5jeSA9IHNjcmF0Y2gpOwpA QCAtODcxLDcgKzExMDksNyBAQCBzdGF0aWMgdm9pZCBzZW1hcGhvcmUoaW50IGk5MTUpCiAJCSAq IG9yIHdlIGxldCB0aGUgdmlwIHRocm91Z2guIElmIG5vdCwgd2UgaGFuZy4KIAkJICovCiAJCXZp cCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKLQkJc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwg dmlwLCBjaSwgY291bnQpOworCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCB2aXAsIGNpLCBjb3Vu dCwgTlVMTCk7CiAJCXBpbmcoaTkxNSwgdmlwLCAwKTsKIAkJZ2VtX2NvbnRleHRfZGVzdHJveShp OTE1LCB2aXApOwogCkBAIC05ODYsNyArMTIyNCw3IEBAIHN0YXRpYyBib29sIGhhc19sb2FkX2Jh bGFuY2VyKGludCBpOTE1KQogCWludCBlcnI7CiAKIAljdHggPSBnZW1fY29udGV4dF9jcmVhdGUo aTkxNSk7Ci0JZXJyID0gX19zZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsICZjaSwgMSk7CisJ ZXJyID0gX19zZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsICZjaSwgMSwgTlVMTCk7CiAJZ2Vt X2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOwogCiAJcmV0dXJuIGVyciA9PSAwOwpAQCAtMTAx Miw2ICsxMjUwLDkgQEAgaWd0X21haW4KIAlpZ3Rfc3VidGVzdCgiaW52YWxpZC1iYWxhbmNlciIp CiAJCWludmFsaWRfYmFsYW5jZXIoaTkxNSk7CiAKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1ib25k cyIpCisJCWludmFsaWRfYm9uZHMoaTkxNSk7CisKIAlpZ3Rfc3VidGVzdCgiaW5kaXZpZHVhbCIp CiAJCWluZGl2aWR1YWwoaTkxNSk7CiAKQEAgLTEwNDYsNiArMTI4NywxMiBAQCBpZ3RfbWFpbgog CWlndF9zdWJ0ZXN0KCJzbW9rZSIpCiAJCXNtb2tldGVzdChpOTE1LCAyMCk7CiAKKwlpZ3Rfc3Vi dGVzdCgiYm9uZGVkLWltbSIpCisJCWJvbmRlZChpOTE1LCAwKTsKKworCWlndF9zdWJ0ZXN0KCJi b25kZWQtY29yayIpCisJCWJvbmRlZChpOTE1LCBDT1JLKTsKKwogCWlndF9maXh0dXJlIHsKIAkJ aWd0X3N0b3BfaGFuZ19kZXRlY3RvcigpOwogCX0KLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0 LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2