From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH i-g-t 18/24] i915: Exercise creating context with shared GTT Date: Fri, 22 Mar 2019 09:21:49 +0000 Message-ID: <20190322092155.1656-18-chris@chris-wilson.co.uk> References: <20190322092155.1656-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: <20190322092155.1656-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 djI6IFRlc3QgZWFjaCBzaGFyZWQgY29udGV4dCBpcyBpdHMgb3duIHRpbWVsaW5lIGFuZCBhbGxv d3MgcmVxdWVzdApyZW9yZGVyaW5nIGJldHdlZW4gc2hhcmVkIGNvbnRleHRzLgoKU2lnbmVkLW9m Zi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBKb29uYXMg TGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBUdnJ0a28gVXJz dWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5r dW9wcGFsYUBsaW51eC5pbnRlbC5jb20+CkNjOiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2Fq ZGVjemtvQGludGVsLmNvbT4KLS0tCiBsaWIvaTkxNS9nZW1fY29udGV4dC5jICAgICAgICB8ICA2 OCArKysKIGxpYi9pOTE1L2dlbV9jb250ZXh0LmggICAgICAgIHwgIDEzICsKIHRlc3RzL01ha2Vm aWxlLnNvdXJjZXMgICAgICAgIHwgICAxICsKIHRlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYyAg IHwgODY3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL2k5MTUvZ2Vt X2V4ZWNfd2hpc3Blci5jIHwgIDMyICstCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgICAgICB8 ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDk3MyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYwoKZGlmZiAt LWdpdCBhL2xpYi9pOTE1L2dlbV9jb250ZXh0LmMgYi9saWIvaTkxNS9nZW1fY29udGV4dC5jCmlu ZGV4IDhiNGQ1YjcwNC4uZTAwNTE5MmQ0IDEwMDY0NAotLS0gYS9saWIvaTkxNS9nZW1fY29udGV4 dC5jCisrKyBiL2xpYi9pOTE1L2dlbV9jb250ZXh0LmMKQEAgLTI3MSwzICsyNzEsNzEgQEAgdm9p ZCBnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaW50IGZkLCB1aW50MzJfdCBjdHhfaWQsIGludCBw cmlvKQogewogCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGN0 eF9pZCwgcHJpbyksIDApOwogfQorCitpbnQKK19fZ2VtX2NvbnRleHRfY2xvbmUoaW50IGk5MTUs CisJCSAgICB1aW50MzJfdCBzcmMsIHVuc2lnbmVkIGludCBzaGFyZSwKKwkJICAgIHVuc2lnbmVk IGludCBmbGFncywKKwkJICAgIHVpbnQzMl90ICpvdXQpCit7CisJc3RydWN0IGRybV9pOTE1X2dl bV9jb250ZXh0X2NyZWF0ZV9leHRfY2xvbmUgY2xvbmUgPSB7CisJCXsgLm5hbWUgPSBJOTE1X0NP TlRFWFRfQ1JFQVRFX0VYVF9DTE9ORSB9LAorCQkuY2xvbmVfaWQgPSBzcmMsCisJCS5mbGFncyA9 IHNoYXJlLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHQgYXJn ID0geworCQkuZmxhZ3MgPSBmbGFncyB8IEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfVVNFX0VY VEVOU0lPTlMsCisJCS5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKCZjbG9uZSksCisJfTsK KwlpbnQgZXJyID0gMDsKKworCWlmIChpZ3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VN X0NPTlRFWFRfQ1JFQVRFX0VYVCwgJmFyZykpCisJCWVyciA9IC1lcnJubzsKKworCSpvdXQgPSBh cmcuY3R4X2lkOworCisJZXJybm8gPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBib29s IF9fZ2VtX2NvbnRleHRfaGFzKGludCBpOTE1LCB1aW50MzJfdCBzaGFyZSwgdW5zaWduZWQgaW50 IGZsYWdzKQoreworCXVpbnQzMl90IGN0eDsKKworCV9fZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwg MCwgc2hhcmUsIGZsYWdzLCAmY3R4KTsKKwlpZiAoY3R4KQorCQlnZW1fY29udGV4dF9kZXN0cm95 KGk5MTUsIGN0eCk7CisKKwllcnJubyA9IDA7CisJcmV0dXJuIGN0eDsKK30KKworYm9vbCBnZW1f Y29udGV4dHNfaGFzX3NoYXJlZF9ndHQoaW50IGk5MTUpCit7CisJcmV0dXJuIF9fZ2VtX2NvbnRl eHRfaGFzKGk5MTUsIEk5MTVfQ09OVEVYVF9DTE9ORV9WTSwgMCk7Cit9CisKK2Jvb2wgZ2VtX2hh c19xdWV1ZXMoaW50IGk5MTUpCit7CisJcmV0dXJuIF9fZ2VtX2NvbnRleHRfaGFzKGk5MTUsCisJ CQkJIEk5MTVfQ09OVEVYVF9DTE9ORV9WTSwKKwkJCQkgSTkxNV9DT05URVhUX0NSRUFURV9GTEFH U19TSU5HTEVfVElNRUxJTkUpOworfQorCit1aW50MzJfdCBnZW1fY29udGV4dF9jbG9uZShpbnQg aTkxNSwKKwkJCSAgIHVpbnQzMl90IHNyYywgdW5zaWduZWQgaW50IHNoYXJlLAorCQkJICAgdW5z aWduZWQgaW50IGZsYWdzKQoreworCXVpbnQzMl90IGN0eDsKKworCWlndF9hc3NlcnRfZXEoX19n ZW1fY29udGV4dF9jbG9uZShpOTE1LCBzcmMsIHNoYXJlLCBmbGFncywgJmN0eCksIDApOworCisJ cmV0dXJuIGN0eDsKK30KKwordWludDMyX3QgZ2VtX3F1ZXVlX2NyZWF0ZShpbnQgaTkxNSkKK3sK KwlyZXR1cm4gZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwgMCwKKwkJCQkgSTkxNV9DT05URVhUX0NM T05FX1ZNLAorCQkJCSBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1NJTkdMRV9USU1FTElORSk7 Cit9CmRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fY29udGV4dC5oIGIvbGliL2k5MTUvZ2VtX2Nv bnRleHQuaAppbmRleCBhZWY2OGRkYTYuLmNlMjYxNzk4MCAxMDA2NDQKLS0tIGEvbGliL2k5MTUv Z2VtX2NvbnRleHQuaAorKysgYi9saWIvaTkxNS9nZW1fY29udGV4dC5oCkBAIC0yOSw2ICsyOSwx OSBAQCBpbnQgX19nZW1fY29udGV4dF9jcmVhdGUoaW50IGZkLCB1aW50MzJfdCAqY3R4X2lkKTsK IHZvaWQgZ2VtX2NvbnRleHRfZGVzdHJveShpbnQgZmQsIHVpbnQzMl90IGN0eF9pZCk7CiBpbnQg X19nZW1fY29udGV4dF9kZXN0cm95KGludCBmZCwgdWludDMyX3QgY3R4X2lkKTsKIAoraW50IF9f Z2VtX2NvbnRleHRfY2xvbmUoaW50IGk5MTUsCisJCQl1aW50MzJfdCBzcmMsIHVuc2lnbmVkIGlu dCBzaGFyZSwKKwkJCXVuc2lnbmVkIGludCBmbGFncywKKwkJCXVpbnQzMl90ICpvdXQpOwordWlu dDMyX3QgZ2VtX2NvbnRleHRfY2xvbmUoaW50IGk5MTUsCisJCQkgICB1aW50MzJfdCBzcmMsIHVu c2lnbmVkIGludCBzaGFyZSwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncyk7CisKK3VpbnQzMl90 IGdlbV9xdWV1ZV9jcmVhdGUoaW50IGk5MTUpOworCitib29sIGdlbV9jb250ZXh0c19oYXNfc2hh cmVkX2d0dChpbnQgaTkxNSk7Citib29sIGdlbV9oYXNfcXVldWVzKGludCBpOTE1KTsKKwogYm9v bCBnZW1faGFzX2NvbnRleHRzKGludCBmZCk7CiB2b2lkIGdlbV9yZXF1aXJlX2NvbnRleHRzKGlu dCBmZCk7CiB2b2lkIGdlbV9jb250ZXh0X3JlcXVpcmVfYmFubmFibGUoaW50IGZkKTsKZGlmZiAt LWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmlu ZGV4IDEyZjRiYmQ3NS4uN2UwNmM5NjlmIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTIyLDYgKzIyLDcgQEAgVEVTVFNf cHJvZ3MgPSBcCiAJZHJtX21tIFwKIAlkcm1fcmVhZCBcCiAJaTkxNS9nZW1fY3R4X2Nsb25lIFwK KwlpOTE1L2dlbV9jdHhfc2hhcmVkIFwKIAlpOTE1L2dlbV92bV9jcmVhdGUgXAogCWttc18zZCBc CiAJa21zX2FkZGZiX2Jhc2ljIFwKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX2N0eF9zaGFy ZWQuYyBiL3Rlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLjc3N2VkMjNmMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2k5MTUv Z2VtX2N0eF9zaGFyZWQuYwpAQCAtMCwwICsxLDg2NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAy MDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiaWd0LmgiCisKKyNpbmNsdWRlIDx1bmlz dGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRl IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j bHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2lu Y2x1ZGUgPGRybS5oPgorCisjaW5jbHVkZSAiaWd0X3JhbmQuaCIKKyNpbmNsdWRlICJpZ3Rfdmdl bS5oIgorI2luY2x1ZGUgInN5bmNfZmlsZS5oIgorCisjZGVmaW5lIExPIDAKKyNkZWZpbmUgSEkg MQorI2RlZmluZSBOT0lTRSAyCisKKyNkZWZpbmUgTUFYX1BSSU8gTE9DQUxfSTkxNV9DT05URVhU X01BWF9VU0VSX1BSSU9SSVRZCisjZGVmaW5lIE1JTl9QUklPIExPQ0FMX0k5MTVfQ09OVEVYVF9N SU5fVVNFUl9QUklPUklUWQorCitzdGF0aWMgaW50IHByaW9yaXRpZXNbXSA9IHsKKwlbTE9dID0g TUlOX1BSSU8gLyAyLAorCVtISV0gPSBNQVhfUFJJTyAvIDIsCit9OworCisjZGVmaW5lIE1BWF9F TFNQX1FMRU4gMTYKKworSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3Qgc2hhcmVkIGNvbnRleHRz LiIpOworCitzdGF0aWMgdm9pZCBjcmVhdGVfc2hhcmVkX2d0dChpbnQgaTkxNSwgdW5zaWduZWQg aW50IGZsYWdzKQorI2RlZmluZSBERVRBQ0hFRCAweDEKK3sKKwljb25zdCB1aW50MzJfdCBiYmUg PSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3Qy IG9iaiA9IHsKKwkJLmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5NiksCisJfTsKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7CisJCS5idWZmZXJzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKKwkJLmJ1ZmZlcl9jb3VudCA9IDEsCisJfTsKKwl1aW50 MzJfdCBwYXJlbnQsIGNoaWxkOworCisJZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsICZi YmUsIHNpemVvZihiYmUpKTsKKwlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisJZ2VtX3N5 bmMoaTkxNSwgb2JqLmhhbmRsZSk7CisKKwljaGlsZCA9IGZsYWdzICYgREVUQUNIRUQgPyBnZW1f Y29udGV4dF9jcmVhdGUoaTkxNSkgOiAwOworCWlndF91bnRpbF90aW1lb3V0KDIpIHsKKwkJcGFy ZW50ID0gZmxhZ3MgJiBERVRBQ0hFRCA/IGNoaWxkIDogMDsKKwkJY2hpbGQgPSBnZW1fY29udGV4 dF9jbG9uZShpOTE1LAorCQkJCQkgIHBhcmVudCwgSTkxNV9DT05URVhUX0NMT05FX1ZNLAorCQkJ CQkgIDApOworCQlleGVjYnVmLnJzdmQxID0gY2hpbGQ7CisJCWdlbV9leGVjYnVmKGk5MTUsICZl eGVjYnVmKTsKKworCQlpZiAoZmxhZ3MgJiBERVRBQ0hFRCkgeworCQkJZ2VtX2NvbnRleHRfZGVz dHJveShpOTE1LCBwYXJlbnQpOworCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCQl9 IGVsc2UgeworCQkJcGFyZW50ID0gY2hpbGQ7CisJCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUs IHBhcmVudCk7CisJCX0KKworCQlleGVjYnVmLnJzdmQxID0gcGFyZW50OworCQlpZ3RfYXNzZXJ0 X2VxKF9fZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpLCAtRU5PRU5UKTsKKwkJaWd0X2Fzc2Vy dF9lcShfX2dlbV9jb250ZXh0X2Nsb25lKGk5MTUsCisJCQkJCQkgIHBhcmVudCwgSTkxNV9DT05U RVhUX0NMT05FX1ZNLAorCQkJCQkJICAwLCAmcGFyZW50KSwgLUVOT0VOVCk7CisJfQorCWlmIChm bGFncyAmIERFVEFDSEVEKQorCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGNoaWxkKTsKKwor CWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOworCWdlbV9jbG9zZShpOTE1LCBvYmouaGFuZGxl KTsKK30KKworc3RhdGljIHZvaWQgZGlzam9pbnRfdGltZWxpbmVzKGludCBpOTE1KQoreworCUlH VF9DT1JLX0hBTkRMRShjb3JrKTsKKwlpZ3Rfc3Bpbl90ICpzcGluWzJdOworCXVpbnQzMl90IHBs dWcsIGNoaWxkOworCisJaWd0X3JlcXVpcmUoZ2VtX2hhc19leGVjbGlzdHMoaTkxNSkpOworCisJ LyoKKwkgKiBFYWNoIGNvbnRleHQsIGFsdGhvdWdoIHRoZXkgc2hhcmUgYSB2bSwgYXJlIGV4cGVj dGVkIHRvIGJlCisJICogZGlzdGluY3QgdGltZWxpbmVzLiBBIHJlcXVlc3QgcXVldWVkIHRvIG9u ZSBjb250ZXh0IHNob3VsZCBiZQorCSAqIGluZGVwZW5kZW50IG9mIGFueSBzaGFyZWQgY29udGV4 dHMuCisJICovCisJY2hpbGQgPSBnZW1fY29udGV4dF9jbG9uZShpOTE1LCAwLCBJOTE1X0NPTlRF WFRfQ0xPTkVfVk0sIDApOworCXBsdWcgPSBpZ3RfY29ya19wbHVnKCZjb3JrLCBpOTE1KTsKKwor CXNwaW5bMF0gPSBfX2lndF9zcGluX2JhdGNoX25ldyhpOTE1LCAuY3R4ID0gMCwgLmRlcGVuZGVu Y3kgPSBwbHVnKTsKKwlzcGluWzFdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoaTkxNSwgLmN0eCA9 IGNoaWxkKTsKKworCS8qIFdhaXQgZm9yIHRoZSBzZWNvbmQgc3Bpbm5lciwgd2lsbCBoYW5nIGlm IHN0dWNrIGJlaGluZCB0aGUgZmlyc3QgKi8KKwlpZ3Rfc3Bpbl9iYXRjaF9lbmQoc3BpblsxXSk7 CisJZ2VtX3N5bmMoaTkxNSwgc3BpblsxXS0+aGFuZGxlKTsKKworCWlndF9jb3JrX3VucGx1Zygm Y29yayk7CisKKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGk5MTUsIHNwaW5bMV0pOworCWlndF9zcGlu X2JhdGNoX2ZyZWUoaTkxNSwgc3BpblswXSk7Cit9CisKK3N0YXRpYyBpbnQgcmVvcGVuX2RyaXZl cihpbnQgZmQpCit7CisJY2hhciBwYXRoWzI1Nl07CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2Yo cGF0aCksICIvcHJvYy9zZWxmL2ZkLyVkIiwgZmQpOworCWZkID0gb3BlbihwYXRoLCBPX1JEV1Ip OworCWlndF9hc3NlcnRfbHRlKDAsIGZkKTsKKworCXJldHVybiBmZDsKK30KKworc3RhdGljIHZv aWQgZXhoYXVzdF9zaGFyZWRfZ3R0KGludCBpOTE1LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisjZGVm aW5lIEVYSEFVU1RfTFJDIDB4MQoreworCWk5MTUgPSByZW9wZW5fZHJpdmVyKGk5MTUpOworCisJ aWd0X2ZvcmsocGlkLCAxKSB7CisJCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZF Ul9FTkQ7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKKwkJCS5o YW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpCisJCX07CisJCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcigmb2JqKSwKKwkJCS5idWZmZXJfY291bnQgPSAxLAorCQl9OworCQl1aW50MzJfdCBwYXJl bnQsIGNoaWxkOworCQl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKKwkJaW50IGVycjsKKworCQln ZW1fd3JpdGUoaTkxNSwgb2JqLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOworCisJCWNo aWxkID0gMDsKKwkJZm9yICg7OykgeworCQkJcGFyZW50ID0gY2hpbGQ7CisJCQllcnIgPSBfX2dl bV9jb250ZXh0X2Nsb25lKGk5MTUsCisJCQkJCQkgIHBhcmVudCwgSTkxNV9DT05URVhUX0NMT05F X1ZNLAorCQkJCQkJICAwLCAmY2hpbGQpOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKworCQkJ aWYgKGZsYWdzICYgRVhIQVVTVF9MUkMpIHsKKwkJCQlleGVjYnVmLnJzdmQxID0gY2hpbGQ7CisJ CQkJZXJyID0gX19nZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisJCQkJaWYgKGVycikKKwkJ CQkJYnJlYWs7CisJCQl9CisKKwkJCWNvdW50Kys7CisJCX0KKwkJZ2VtX3N5bmMoaTkxNSwgb2Jq LmhhbmRsZSk7CisKKwkJaWd0X2luZm8oIkNyZWF0ZWQgJWx1IHNoYXJlZCBjb250ZXh0cywgYmVm b3JlICVkICglcylcbiIsCisJCQkgY291bnQsIGVyciwgc3RyZXJyb3IoLWVycikpOworCX0KKwlj bG9zZShpOTE1KTsKKwlpZ3Rfd2FpdGNoaWxkcmVuKCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNf c2hhcmVkX2d0dChpbnQgaTkxNSwgdW5zaWduZWQgaW50IHJpbmcpCit7CisJY29uc3QgaW50IGdl biA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKTsKKwljb25zdCB1aW50MzJf dCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyIG9iaiA9IHsKKwkJLmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5NikKKwl9Owor CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNf cHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwkJLmZs YWdzID0gcmluZywKKwl9OworCXVpbnQzMl90IHNjcmF0Y2ggPSBvYmouaGFuZGxlOworCXVpbnQz Ml90IGJhdGNoWzE2XTsKKwlpbnQgaTsKKworCWdlbV9yZXF1aXJlX3JpbmcoaTkxNSwgcmluZyk7 CisJaWd0X3JlcXVpcmUoZ2VtX2Nhbl9zdG9yZV9kd29yZChpOTE1LCByaW5nKSk7CisKKwkvKiBM b2FkIG9iamVjdCBpbnRvIHBsYWNlIGluIHRoZSBHVFQgKi8KKwlnZW1fd3JpdGUoaTkxNSwgb2Jq LmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOworCWdlbV9leGVjYnVmKGk5MTUsICZleGVj YnVmKTsKKworCS8qIFByZXN1bWUgbm90aGluZyBjYXVzZXMgYW4gZXZpY3Rpb24gaW4gdGhlIG1l YW50aW1lICovCisKKwlvYmouaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KTsKKworCWkg PSAwOworCWJhdGNoW2ldID0gTUlfU1RPUkVfRFdPUkRfSU1NIHwgKGdlbiA8IDYgPyAxIDw8IDIy IDogMCk7CisJaWYgKGdlbiA+PSA4KSB7CisJCWJhdGNoWysraV0gPSBvYmoub2Zmc2V0OworCQli YXRjaFsrK2ldID0gMDsKKwl9IGVsc2UgaWYgKGdlbiA+PSA0KSB7CisJCWJhdGNoWysraV0gPSAw OworCQliYXRjaFsrK2ldID0gb2JqLm9mZnNldDsKKwl9IGVsc2UgeworCQliYXRjaFtpXS0tOwor CQliYXRjaFsrK2ldID0gb2JqLm9mZnNldDsKKwl9CisJYmF0Y2hbKytpXSA9IDB4YzBmZmVlOwor CWJhdGNoWysraV0gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCWdlbV93cml0ZShpOTE1LCBvYmou aGFuZGxlLCAwLCBiYXRjaCwgc2l6ZW9mKGJhdGNoKSk7CisKKwlvYmoub2Zmc2V0ICs9IDQwOTY7 IC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBjYXVzZSBhbiBldmljdGlvbiEgKi8KKwlvYmouZmxhZ3Mg fD0gRVhFQ19PQkpFQ1RfUElOTkVEOworCWV4ZWNidWYucnN2ZDEgPSBnZW1fY29udGV4dF9jbG9u ZShpOTE1LCAwLCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sIDApOworCWlmIChnZW4gPiAzICYmIGdl biA8IDYpCisJCWV4ZWNidWYuZmxhZ3MgfD0gSTkxNV9FWEVDX1NFQ1VSRTsKKworCWdlbV9leGVj YnVmKGk5MTUsICZleGVjYnVmKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGV4ZWNidWYu cnN2ZDEpOworCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOyAvKiB3cml0ZSBoYXphcmQgbGll cyAqLworCWdlbV9jbG9zZShpOTE1LCBvYmouaGFuZGxlKTsKKworCWdlbV9yZWFkKGk5MTUsIHNj cmF0Y2gsIDAsIGJhdGNoLCBzaXplb2YodWludDMyX3QpKTsKKwlnZW1fY2xvc2UoaTkxNSwgc2Ny YXRjaCk7CisKKwlpZ3RfYXNzZXJ0X2VxX3UzMigqYmF0Y2gsIDB4YzBmZmVlKTsKK30KKworc3Rh dGljIGludCBub3Bfc3luYyhpbnQgaTkxNSwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBpbnQgcmlu ZywgaW50NjRfdCB0aW1lb3V0KQoreworCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JV RkZFUl9FTkQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geworCQku aGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwl9OworCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2lu dGVyKCZvYmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwkJLmZsYWdzID0gcmluZywKKwkJLnJz dmQxID0gY3R4LAorCX07CisJaW50IGVycjsKKworCWdlbV93cml0ZShpOTE1LCBvYmouaGFuZGxl LCAwLCAmYmJlLCBzaXplb2YoYmJlKSk7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOwor CWVyciA9IGdlbV93YWl0KGk5MTUsIG9iai5oYW5kbGUsICZ0aW1lb3V0KTsKKwlnZW1fY2xvc2Uo aTkxNSwgb2JqLmhhbmRsZSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgYm9vbCBoYXNf c2luZ2xlX3RpbWVsaW5lKGludCBpOTE1KQoreworCXVpbnQzMl90IGN0eDsKKworCV9fZ2VtX2Nv bnRleHRfY2xvbmUoaTkxNSwgMCwgMCwKKwkJCSAgICBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdT X1NJTkdMRV9USU1FTElORSwKKwkJCSAgICAmY3R4KTsKKwlpZiAoY3R4KQorCQlnZW1fY29udGV4 dF9kZXN0cm95KGk5MTUsIGN0eCk7CisKKwlyZXR1cm4gY3R4ICE9IDA7Cit9CisKK3N0YXRpYyBi b29sIGlnbm9yZV9lbmdpbmUodW5zaWduZWQgZW5naW5lKQoreworCWlmIChlbmdpbmUgPT0gMCkK KwkJcmV0dXJuIHRydWU7CisKKwlpZiAoZW5naW5lID09IEk5MTVfRVhFQ19CU0QpCisJCXJldHVy biB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBzaW5nbGVfdGltZWxp bmUoaW50IGk5MTUpCit7CisJY29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VO RDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmogPSB7CisJCS5oYW5kbGUg PSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj YnVmZmVyMiBleGVjYnVmID0geworCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9i aiksCisJCS5idWZmZXJfY291bnQgPSAxLAorCX07CisJc3RydWN0IHN5bmNfZmVuY2VfaW5mbyBy aW5nc1sxNl07CisJc3RydWN0IHN5bmNfZmlsZV9pbmZvIHN5bmNfZmlsZV9pbmZvID0geworCQku bnVtX2ZlbmNlcyA9IDEsCisJfTsKKwl1bnNpZ25lZCBpbnQgZW5naW5lOworCWludCBuOworCisJ aWd0X3JlcXVpcmUoaGFzX3NpbmdsZV90aW1lbGluZShpOTE1KSk7CisKKwlnZW1fd3JpdGUoaTkx NSwgb2JqLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOworCWdlbV9leGVjYnVmKGk5MTUs ICZleGVjYnVmKTsKKwlnZW1fc3luYyhpOTE1LCBvYmouaGFuZGxlKTsKKworCS8qCisJICogRm9y IGEgInNpbmdsZSB0aW1lbGluZSIgY29udGV4dCwgZWFjaCByaW5nIGlzIG9uIHRoZSBjb21tb24K KwkgKiB0aW1lbGluZSwgdW5saWtlIGEgbm9ybWFsIGNvbnRleHQgd2hlcmUgZWFjaCByaW5nIGhh cyBhbgorCSAqIGluZGVwZW5kZW50IHRpbWVsaW5lLiBUaGF0IGlzIG5vIG1hdHRlciB3aGljaCBl bmdpbmUgd2Ugc3VibWl0CisJICogdG8sIGl0IHJlcG9ydHMgdGhlIHNhbWUgdGltZWxpbmUgbmFt ZSBhbmQgZmVuY2UgY29udGV4dC4gSG93ZXZlciwKKwkgKiB0aGUgZmVuY2UgY29udGV4dCBpcyBu b3QgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgc3luY19mZW5jZV9pbmZvLgorCSAqLworCWV4ZWNidWYu cnN2ZDEgPQorCQlnZW1fY29udGV4dF9jbG9uZShpOTE1LCAwLCAwLAorCQkJCSAgSTkxNV9DT05U RVhUX0NSRUFURV9GTEFHU19TSU5HTEVfVElNRUxJTkUpOworCWV4ZWNidWYuZmxhZ3MgPSBJOTE1 X0VYRUNfRkVOQ0VfT1VUOworCW4gPSAwOworCWZvcl9lYWNoX2VuZ2luZShpOTE1LCBlbmdpbmUp IHsKKwkJZ2VtX2V4ZWNidWZfd3IoaTkxNSwgJmV4ZWNidWYpOworCQlzeW5jX2ZpbGVfaW5mby5z eW5jX2ZlbmNlX2luZm8gPSB0b191c2VyX3BvaW50ZXIoJnJpbmdzW25dKTsKKwkJZG9faW9jdGwo ZXhlY2J1Zi5yc3ZkMiA+PiAzMiwgU1lOQ19JT0NfRklMRV9JTkZPLCAmc3luY19maWxlX2luZm8p OworCQljbG9zZShleGVjYnVmLnJzdmQyID4+IDMyKTsKKworCQlpZ3RfaW5mbygicmluZ1slZF0g ZmVuY2U6ICVzICVzXG4iLAorCQkJIG4sIHJpbmdzW25dLmRyaXZlcl9uYW1lLCByaW5nc1tuXS5v YmpfbmFtZSk7CisJCW4rKzsKKwl9CisJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7CisJZ2Vt X2Nsb3NlKGk5MTUsIG9iai5oYW5kbGUpOworCisJZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKysp IHsKKwkJaWd0X2Fzc2VydCghc3RyY21wKHJpbmdzWzBdLmRyaXZlcl9uYW1lLCByaW5nc1tpXS5k cml2ZXJfbmFtZSkpOworCQlpZ3RfYXNzZXJ0KCFzdHJjbXAocmluZ3NbMF0ub2JqX25hbWUsIHJp bmdzW2ldLm9ial9uYW1lKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBleGVjX3NpbmdsZV90aW1l bGluZShpbnQgaTkxNSwgdW5zaWduZWQgaW50IHJpbmcpCit7CisJdW5zaWduZWQgaW50IG90aGVy OworCWlndF9zcGluX3QgKnNwaW47CisJdWludDMyX3QgY3R4OworCisJZ2VtX3JlcXVpcmVfcmlu ZyhpOTE1LCByaW5nKTsKKwlpZ3RfcmVxdWlyZShoYXNfc2luZ2xlX3RpbWVsaW5lKGk5MTUpKTsK KworCS8qCisJICogT24gYW4gb3JkaW5hcnkgY29udGV4dCwgYSBibG9ja2FnZSBvbiBvbmUgcmlu ZyBkb2Vzbid0IHByZXZlbnQKKwkgKiBleGVjdXRpb24gb24gYW4gb3RoZXIuCisJICovCisJY3R4 ID0gMDsKKwlzcGluID0gTlVMTDsKKwlmb3JfZWFjaF9lbmdpbmUoaTkxNSwgb3RoZXIpIHsKKwkJ aWYgKG90aGVyID09IHJpbmcgfHwgaWdub3JlX2VuZ2luZShvdGhlcikpCisJCQljb250aW51ZTsK KworCQlpZiAoc3BpbiA9PSBOVUxMKSB7CisJCQlzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXco aTkxNSwgLmN0eCA9IGN0eCwgLmVuZ2luZSA9IG90aGVyKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJCQkuYnVmZmVyc19wdHIg PSBzcGluLT5leGVjYnVmLmJ1ZmZlcnNfcHRyLAorCQkJCS5idWZmZXJfY291bnQgPSBzcGluLT5l eGVjYnVmLmJ1ZmZlcl9jb3VudCwKKwkJCQkuZmxhZ3MgPSBvdGhlciwKKwkJCQkucnN2ZDEgPSBj dHgsCisJCQl9OworCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCQl9CisJfQorCWln dF9yZXF1aXJlKHNwaW4pOworCWlndF9hc3NlcnRfZXEobm9wX3N5bmMoaTkxNSwgY3R4LCByaW5n LCBOU0VDX1BFUl9TRUMpLCAwKTsKKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGk5MTUsIHNwaW4pOwor CisJLyoKKwkgKiBCdXQgaWYgd2UgY3JlYXRlIGEgY29udGV4dCB3aXRoIGp1c3QgYSBzaW5nbGUg c2hhcmVkIHRpbWVsaW5lLAorCSAqIHRoZW4gaXQgd2lsbCBibG9jayB3YWl0aW5nIGZvciB0aGUg ZWFybGllciByZXF1ZXN0cyBvbiB0aGUKKwkgKiBvdGhlciBlbmdpbmVzLgorCSAqLworCWN0eCA9 IGdlbV9jb250ZXh0X2Nsb25lKGk5MTUsIDAsIDAsCisJCQkJSTkxNV9DT05URVhUX0NSRUFURV9G TEFHU19TSU5HTEVfVElNRUxJTkUpOworCXNwaW4gPSBOVUxMOworCWZvcl9lYWNoX2VuZ2luZShp OTE1LCBvdGhlcikgeworCQlpZiAob3RoZXIgPT0gcmluZyB8fCBpZ25vcmVfZW5naW5lKG90aGVy KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzcGluID09IE5VTEwpIHsKKwkJCXNwaW4gPSBfX2ln dF9zcGluX2JhdGNoX25ldyhpOTE1LCAuY3R4ID0gY3R4LCAuZW5naW5lID0gb3RoZXIpOworCQl9 IGVsc2UgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewor CQkJCS5idWZmZXJzX3B0ciA9IHNwaW4tPmV4ZWNidWYuYnVmZmVyc19wdHIsCisJCQkJLmJ1ZmZl cl9jb3VudCA9IHNwaW4tPmV4ZWNidWYuYnVmZmVyX2NvdW50LAorCQkJCS5mbGFncyA9IG90aGVy LAorCQkJCS5yc3ZkMSA9IGN0eCwKKwkJCX07CisJCQlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1 Zik7CisJCX0KKwl9CisJaWd0X2Fzc2VydChzcGluKTsKKwlpZ3RfYXNzZXJ0X2VxKG5vcF9zeW5j KGk5MTUsIGN0eCwgcmluZywgTlNFQ19QRVJfU0VDKSwgLUVUSU1FKTsKKwlpZ3Rfc3Bpbl9iYXRj aF9mcmVlKGk5MTUsIHNwaW4pOworfQorCitzdGF0aWMgdm9pZCBzdG9yZV9kd29yZChpbnQgaTkx NSwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCByaW5nLAorCQkJdWludDMyX3QgdGFyZ2V0LCB1aW50 MzJfdCBvZmZzZXQsIHVpbnQzMl90IHZhbHVlLAorCQkJdWludDMyX3QgY29yaywgdW5zaWduZWQg d3JpdGVfZG9tYWluKQoreworCWNvbnN0IGludCBnZW4gPSBpbnRlbF9nZW4oaW50ZWxfZ2V0X2Ry bV9kZXZpZChpOTE1KSk7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzNd OworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvYzsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJdWludDMyX3QgYmF0Y2hbMTZdOwor CWludCBpOworCisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNi dWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqICsgIWNvcmspOworCWV4ZWNidWYu YnVmZmVyX2NvdW50ID0gMiArICEhY29yazsKKwlleGVjYnVmLmZsYWdzID0gcmluZzsKKwlpZiAo Z2VuIDwgNikKKwkJZXhlY2J1Zi5mbGFncyB8PSBJOTE1X0VYRUNfU0VDVVJFOworCWV4ZWNidWYu cnN2ZDEgPSBjdHg7CisKKwltZW1zZXQob2JqLCAwLCBzaXplb2Yob2JqKSk7CisJb2JqWzBdLmhh bmRsZSA9IGNvcms7CisJb2JqWzFdLmhhbmRsZSA9IHRhcmdldDsKKwlvYmpbMl0uaGFuZGxlID0g Z2VtX2NyZWF0ZShpOTE1LCA0MDk2KTsKKworCW1lbXNldCgmcmVsb2MsIDAsIHNpemVvZihyZWxv YykpOworCXJlbG9jLnRhcmdldF9oYW5kbGUgPSBvYmpbMV0uaGFuZGxlOworCXJlbG9jLnByZXN1 bWVkX29mZnNldCA9IDA7CisJcmVsb2Mub2Zmc2V0ID0gc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxv Yy5kZWx0YSA9IG9mZnNldDsKKwlyZWxvYy5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5f SU5TVFJVQ1RJT047CisJcmVsb2Mud3JpdGVfZG9tYWluID0gd3JpdGVfZG9tYWluOworCW9ialsy XS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZyZWxvYyk7CisJb2JqWzJdLnJlbG9jYXRp b25fY291bnQgPSAxOworCisJaSA9IDA7CisJYmF0Y2hbaV0gPSBNSV9TVE9SRV9EV09SRF9JTU0g fCAoZ2VuIDwgNiA/IDEgPDwgMjIgOiAwKTsKKwlpZiAoZ2VuID49IDgpIHsKKwkJYmF0Y2hbKytp XSA9IG9mZnNldDsKKwkJYmF0Y2hbKytpXSA9IDA7CisJfSBlbHNlIGlmIChnZW4gPj0gNCkgewor CQliYXRjaFsrK2ldID0gMDsKKwkJYmF0Y2hbKytpXSA9IG9mZnNldDsKKwkJcmVsb2Mub2Zmc2V0 ICs9IHNpemVvZih1aW50MzJfdCk7CisJfSBlbHNlIHsKKwkJYmF0Y2hbaV0tLTsKKwkJYmF0Y2hb KytpXSA9IG9mZnNldDsKKwl9CisJYmF0Y2hbKytpXSA9IHZhbHVlOworCWJhdGNoWysraV0gPSBN SV9CQVRDSF9CVUZGRVJfRU5EOworCWdlbV93cml0ZShpOTE1LCBvYmpbMl0uaGFuZGxlLCAwLCBi YXRjaCwgc2l6ZW9mKGJhdGNoKSk7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCWdl bV9jbG9zZShpOTE1LCBvYmpbMl0uaGFuZGxlKTsKK30KKworc3RhdGljIHVpbnQzMl90IGNyZWF0 ZV9oaWdoZXN0X3ByaW9yaXR5KGludCBpOTE1KQoreworCXVpbnQzMl90IGN0eCA9IGdlbV9jb250 ZXh0X2NyZWF0ZShpOTE1KTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgbm8gcHJpb3JpdHkgc3Vw cG9ydCwgYWxsIGNvbnRleHRzIHdpbGwgaGF2ZSBlcXVhbAorCSAqIHByaW9yaXR5IChhbmQgdGhl cmVmb3JlIHRoZSBtYXggdXNlciBwcmlvcml0eSksIHNvIG5vIGNvbnRleHQKKwkgKiBjYW4gb3Zl cnRha2UgdXMsIGFuZCB3ZSBlZmZlY3RpdmVseSBjYW4gZm9ybSBhIHBsdWcuCisJICovCisJX19n ZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4LCBNQVhfUFJJTyk7CisKKwlyZXR1cm4g Y3R4OworfQorCitzdGF0aWMgdm9pZCB1bnBsdWdfc2hvd19xdWV1ZShpbnQgaTkxNSwgc3RydWN0 IGlndF9jb3JrICpjLCB1bnNpZ25lZCBpbnQgZW5naW5lKQoreworCWlndF9zcGluX3QgKnNwaW5b TUFYX0VMU1BfUUxFTl07CisKKwlmb3IgKGludCBuID0gMDsgbiA8IEFSUkFZX1NJWkUoc3Bpbik7 IG4rKykgeworCQljb25zdCBzdHJ1Y3QgaWd0X3NwaW5fZmFjdG9yeSBvcHRzID0geworCQkJLmN0 eCA9IGNyZWF0ZV9oaWdoZXN0X3ByaW9yaXR5KGk5MTUpLAorCQkJLmVuZ2luZSA9IGVuZ2luZSwK KwkJfTsKKwkJc3BpbltuXSA9IF9faWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShpOTE1LCAmb3B0cyk7 CisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgb3B0cy5jdHgpOworCX0KKworCWlndF9jb3Jr X3VucGx1ZyhjKTsgLyogYmF0Y2hlcyB3aWxsIG5vdyBiZSBxdWV1ZWQgb24gdGhlIGVuZ2luZSAq LworCWlndF9kZWJ1Z2ZzX2R1bXAoaTkxNSwgImk5MTVfZW5naW5lX2luZm8iKTsKKworCWZvciAo aW50IG4gPSAwOyBuIDwgQVJSQVlfU0laRShzcGluKTsgbisrKQorCQlpZ3Rfc3Bpbl9iYXRjaF9m cmVlKGk5MTUsIHNwaW5bbl0pOworfQorCitzdGF0aWMgdWludDMyX3Qgc3RvcmVfdGltZXN0YW1w KGludCBpOTE1LAorCQkJCXVpbnQzMl90IGN0eCwgdW5zaWduZWQgcmluZywKKwkJCQl1bnNpZ25l ZCBtbWlvX2Jhc2UpCit7CisJY29uc3QgYm9vbCByNjRiID0gaW50ZWxfZ2VuKGludGVsX2dldF9k cm1fZGV2aWQoaTkxNSkpID49IDg7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg b2JqID0geworCQkuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwkJLnJlbG9jYXRp b25fY291bnQgPSAxLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 IHJlbG9jID0geworCQkudGFyZ2V0X2hhbmRsZSA9IG9iai5oYW5kbGUsCisJCS5vZmZzZXQgPSAy ICogc2l6ZW9mKHVpbnQzMl90KSwKKwkJLmRlbHRhID0gNDA5MiwKKwkJLnJlYWRfZG9tYWlucyA9 IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVy KCZvYmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwkJLmZsYWdzID0gcmluZywKKwkJLnJzdmQx ID0gY3R4LAorCX07CisJdWludDMyX3QgYmF0Y2hbXSA9IHsKKwkJMHgyNCA8PCAyMyB8ICgxICsg cjY0YiksIC8qIFNSTSAqLworCQltbWlvX2Jhc2UgKyAweDM1OCwKKwkJNDA5MiwKKwkJMCwKKwkJ TUlfQkFUQ0hfQlVGRkVSX0VORAorCX07CisKKwlpZ3RfcmVxdWlyZShpbnRlbF9nZW4oaW50ZWxf Z2V0X2RybV9kZXZpZChpOTE1KSkgPj0gNyk7CisKKwlnZW1fd3JpdGUoaTkxNSwgb2JqLmhhbmRs ZSwgMCwgYmF0Y2gsIHNpemVvZihiYXRjaCkpOworCW9iai5yZWxvY3NfcHRyID0gdG9fdXNlcl9w b2ludGVyKCZyZWxvYyk7CisKKwlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisKKwlyZXR1 cm4gb2JqLmhhbmRsZTsKK30KKworc3RhdGljIHZvaWQgaW5kZXBlbmRlbnQoaW50IGk5MTUsIHVu c2lnbmVkIHJpbmcsIHVuc2lnbmVkIGZsYWdzKQoreworCXVpbnQzMl90IGhhbmRsZVtBUlJBWV9T SVpFKHByaW9yaXRpZXMpXTsKKwlpZ3Rfc3Bpbl90ICpzcGluW01BWF9FTFNQX1FMRU5dOworCXVu c2lnbmVkIGludCBtbWlvX2Jhc2U7CisKKwkvKiBYWFggaTkxNV9xdWVyeSgpISAqLworCXN3aXRj aCAocmluZykgeworCWNhc2UgSTkxNV9FWEVDX0RFRkFVTFQ6CisJY2FzZSBJOTE1X0VYRUNfUkVO REVSOgorCQltbWlvX2Jhc2UgPSAweDIwMDA7CisJCWJyZWFrOworI2lmIDAKKwljYXNlIEk5MTVf RVhFQ19CU0Q6CisJCW1taW9fYmFzZSA9IDB4MTIwMDA7CisJCWJyZWFrOworI2VuZGlmCisJY2Fz ZSBJOTE1X0VYRUNfQkxUOgorCQltbWlvX2Jhc2UgPSAweDIyMDAwOworCQlicmVhazsKKworCWNh c2UgSTkxNV9FWEVDX1ZFQk9YOgorCQlpZiAoaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQo aTkxNSkpID49IDExKQorCQkJbW1pb19iYXNlID0gMHgxZDgwMDA7CisJCWVsc2UKKwkJCW1taW9f YmFzZSA9IDB4MWEwMDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaWd0X3NraXAoIm1taW8g YmFzZSBub3Qga25vd25cbiIpOworCX0KKworCWZvciAoaW50IG4gPSAwOyBuIDwgQVJSQVlfU0la RShzcGluKTsgbisrKSB7CisJCWNvbnN0IHN0cnVjdCBpZ3Rfc3Bpbl9mYWN0b3J5IG9wdHMgPSB7 CisJCQkuY3R4ID0gY3JlYXRlX2hpZ2hlc3RfcHJpb3JpdHkoaTkxNSksCisJCQkuZW5naW5lID0g cmluZywKKwkJfTsKKwkJc3BpbltuXSA9IF9faWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShpOTE1LCAm b3B0cyk7CisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgb3B0cy5jdHgpOworCX0KKworCWZv ciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmlvcml0aWVzKTsgaSsrKSB7CisJCXVpbnQz Ml90IGN0eCA9IGdlbV9xdWV1ZV9jcmVhdGUoaTkxNSk7CisJCWdlbV9jb250ZXh0X3NldF9wcmlv cml0eShpOTE1LCBjdHgsIHByaW9yaXRpZXNbaV0pOworCQloYW5kbGVbaV0gPSBzdG9yZV90aW1l c3RhbXAoaTkxNSwgY3R4LCByaW5nLCBtbWlvX2Jhc2UpOworCQlnZW1fY29udGV4dF9kZXN0cm95 KGk5MTUsIGN0eCk7CisJfQorCisJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpFKHNwaW4p OyBuKyspCisJCWlndF9zcGluX2JhdGNoX2ZyZWUoaTkxNSwgc3BpbltuXSk7CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpb3JpdGllcyk7IGkrKykgeworCQl1aW50MzJfdCAq cHRyOworCisJCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgaGFuZGxlW2ldLCA0MDk2LCBQUk9U X1JFQUQpOworCQlnZW1fc2V0X2RvbWFpbihpOTE1LCBoYW5kbGVbaV0sIC8qIG5vIHdyaXRlIGhh emFyZCBsaWVzISAqLworCQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RP TUFJTl9HVFQpOworCQlnZW1fY2xvc2UoaTkxNSwgaGFuZGxlW2ldKTsKKworCQloYW5kbGVbaV0g PSBwdHJbMTAyM107CisJCW11bm1hcChwdHIsIDQwOTYpOworCisJCWlndF9kZWJ1ZygiY3R4WyVk XSAucHJpbz0lZCwgdGltZXN0YW1wPSV1XG4iLAorCQkJICBpLCBwcmlvcml0aWVzW2ldLCBoYW5k bGVbaV0pOworCX0KKworCWlndF9hc3NlcnQoKGludDMyX3QpKGhhbmRsZVtISV0gLSBoYW5kbGVb TE9dKSA8IDApOworfQorCitzdGF0aWMgdm9pZCByZW9yZGVyKGludCBpOTE1LCB1bnNpZ25lZCBy aW5nLCB1bnNpZ25lZCBmbGFncykKKyNkZWZpbmUgRVFVQUwgMQoreworCUlHVF9DT1JLX0hBTkRM RShjb3JrKTsKKwl1aW50MzJfdCBzY3JhdGNoOworCXVpbnQzMl90ICpwdHI7CisJdWludDMyX3Qg Y3R4WzJdOworCXVpbnQzMl90IHBsdWc7CisKKwljdHhbTE9dID0gZ2VtX3F1ZXVlX2NyZWF0ZShp OTE1KTsKKwlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4W0xPXSwgTUlOX1BSSU8p OworCisJY3R4W0hJXSA9IGdlbV9xdWV1ZV9jcmVhdGUoaTkxNSk7CisJZ2VtX2NvbnRleHRfc2V0 X3ByaW9yaXR5KGk5MTUsIGN0eFtISV0sIGZsYWdzICYgRVFVQUwgPyBNSU5fUFJJTyA6IDApOwor CisJc2NyYXRjaCA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5Nik7CisJcGx1ZyA9IGlndF9jb3JrX3Bs dWcoJmNvcmssIGk5MTUpOworCisJLyogV2UgZXhwZWN0IHRoZSBoaWdoIHByaW9yaXR5IGNvbnRl eHQgdG8gYmUgZXhlY3V0ZWQgZmlyc3QsIGFuZAorCSAqIHNvIHRoZSBmaW5hbCByZXN1bHQgd2ls bCBiZSB2YWx1ZSBmcm9tIHRoZSBsb3cgcHJpb3JpdHkgY29udGV4dC4KKwkgKi8KKwlzdG9yZV9k d29yZChpOTE1LCBjdHhbTE9dLCByaW5nLCBzY3JhdGNoLCAwLCBjdHhbTE9dLCBwbHVnLCAwKTsK KwlzdG9yZV9kd29yZChpOTE1LCBjdHhbSEldLCByaW5nLCBzY3JhdGNoLCAwLCBjdHhbSEldLCBw bHVnLCAwKTsKKworCXVucGx1Z19zaG93X3F1ZXVlKGk5MTUsICZjb3JrLCByaW5nKTsKKwlnZW1f Y2xvc2UoaTkxNSwgcGx1Zyk7CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtMT10p OworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4W0hJXSk7CisKKwlwdHIgPSBnZW1fbW1h cF9fZ3R0KGk5MTUsIHNjcmF0Y2gsIDQwOTYsIFBST1RfUkVBRCk7CisJZ2VtX3NldF9kb21haW4o aTkxNSwgc2NyYXRjaCwgLyogbm8gd3JpdGUgaGF6YXJkIGxpZXMhICovCisJCSAgICAgICBJOTE1 X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwlnZW1fY2xvc2UoaTkxNSwg c2NyYXRjaCk7CisKKwlpZiAoZmxhZ3MgJiBFUVVBTCkgLyogZXF1YWwgcHJpb3JpdHksIHJlc3Vs dCB3aWxsIGJlIGZpZm8gKi8KKwkJaWd0X2Fzc2VydF9lcV91MzIocHRyWzBdLCBjdHhbSEldKTsK KwllbHNlCisJCWlndF9hc3NlcnRfZXFfdTMyKHB0clswXSwgY3R4W0xPXSk7CisJbXVubWFwKHB0 ciwgNDA5Nik7Cit9CisKK3N0YXRpYyB2b2lkIHByb21vdGlvbihpbnQgaTkxNSwgdW5zaWduZWQg cmluZykKK3sKKwlJR1RfQ09SS19IQU5ETEUoY29yayk7CisJdWludDMyX3QgcmVzdWx0LCBkZXA7 CisJdWludDMyX3QgKnB0cjsKKwl1aW50MzJfdCBjdHhbM107CisJdWludDMyX3QgcGx1ZzsKKwor CWN0eFtMT10gPSBnZW1fcXVldWVfY3JlYXRlKGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9wcmlv cml0eShpOTE1LCBjdHhbTE9dLCBNSU5fUFJJTyk7CisKKwljdHhbSEldID0gZ2VtX3F1ZXVlX2Ny ZWF0ZShpOTE1KTsKKwlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4W0hJXSwgMCk7 CisKKwljdHhbTk9JU0VdID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKKwlnZW1fY29udGV4dF9z ZXRfcHJpb3JpdHkoaTkxNSwgY3R4W05PSVNFXSwgTUlOX1BSSU8vMik7CisKKwlyZXN1bHQgPSBn ZW1fY3JlYXRlKGk5MTUsIDQwOTYpOworCWRlcCA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5Nik7CisK KwlwbHVnID0gaWd0X2NvcmtfcGx1ZygmY29yaywgaTkxNSk7CisKKwkvKiBFeHBlY3QgdGhhdCBI SSBwcm9tb3RlcyBMTywgc28gdGhlIG9yZGVyIHdpbGwgYmUgTE8sIEhJLCBOT0lTRS4KKwkgKgor CSAqIGZpZm8gd291bGQgYmUgTk9JU0UsIExPLCBISS4KKwkgKiBzdHJpY3QgcHJpb3JpdHkgd291 bGQgYmUgIEhJLCBOT0lTRSwgTE8KKwkgKi8KKwlzdG9yZV9kd29yZChpOTE1LCBjdHhbTk9JU0Vd LCByaW5nLCByZXN1bHQsIDAsIGN0eFtOT0lTRV0sIHBsdWcsIDApOworCXN0b3JlX2R3b3JkKGk5 MTUsIGN0eFtMT10sIHJpbmcsIHJlc3VsdCwgMCwgY3R4W0xPXSwgcGx1ZywgMCk7CisKKwkvKiBs aW5rIExPIDwtPiBISSB2aWEgYSBkZXBlbmRlbmN5IG9uIGFub3RoZXIgYnVmZmVyICovCisJc3Rv cmVfZHdvcmQoaTkxNSwgY3R4W0xPXSwgcmluZywgZGVwLCAwLCBjdHhbTE9dLCAwLCBJOTE1X0dF TV9ET01BSU5fSU5TVFJVQ1RJT04pOworCXN0b3JlX2R3b3JkKGk5MTUsIGN0eFtISV0sIHJpbmcs IGRlcCwgMCwgY3R4W0hJXSwgMCwgMCk7CisKKwlzdG9yZV9kd29yZChpOTE1LCBjdHhbSEldLCBy aW5nLCByZXN1bHQsIDAsIGN0eFtISV0sIDAsIDApOworCisJdW5wbHVnX3Nob3dfcXVldWUoaTkx NSwgJmNvcmssIHJpbmcpOworCWdlbV9jbG9zZShpOTE1LCBwbHVnKTsKKworCWdlbV9jb250ZXh0 X2Rlc3Ryb3koaTkxNSwgY3R4W05PSVNFXSk7CisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBj dHhbTE9dKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtISV0pOworCisJcHRyID0g Z2VtX21tYXBfX2d0dChpOTE1LCBkZXAsIDQwOTYsIFBST1RfUkVBRCk7CisJZ2VtX3NldF9kb21h aW4oaTkxNSwgZGVwLCAvKiBubyB3cml0ZSBoYXphcmQgbGllcyEgKi8KKwkJCUk5MTVfR0VNX0RP TUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCWdlbV9jbG9zZShpOTE1LCBkZXApOwor CisJaWd0X2Fzc2VydF9lcV91MzIocHRyWzBdLCBjdHhbSEldKTsKKwltdW5tYXAocHRyLCA0MDk2 KTsKKworCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgcmVzdWx0LCA0MDk2LCBQUk9UX1JFQUQp OworCWdlbV9zZXRfZG9tYWluKGk5MTUsIHJlc3VsdCwgLyogbm8gd3JpdGUgaGF6YXJkIGxpZXMh ICovCisJCQlJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwlnZW1f Y2xvc2UoaTkxNSwgcmVzdWx0KTsKKworCWlndF9hc3NlcnRfZXFfdTMyKHB0clswXSwgY3R4W05P SVNFXSk7CisJbXVubWFwKHB0ciwgNDA5Nik7Cit9CisKK3N0YXRpYyB2b2lkIHNtb2tldGVzdChp bnQgaTkxNSwgdW5zaWduZWQgcmluZywgdW5zaWduZWQgdGltZW91dCkKK3sKKwljb25zdCBpbnQg bmNwdXMgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKKwl1bnNpZ25lZCBlbmdpbmVz WzE2XTsKKwl1bnNpZ25lZCBuZW5naW5lOworCXVuc2lnbmVkIGVuZ2luZTsKKwl1aW50MzJfdCBz Y3JhdGNoOworCXVpbnQzMl90ICpwdHI7CisKKwluZW5naW5lID0gMDsKKwlmb3JfZWFjaF9lbmdp bmUoaTkxNSwgZW5naW5lKSB7CisJCWlmIChpZ25vcmVfZW5naW5lKGVuZ2luZSkpCisJCQljb250 aW51ZTsKKworCQllbmdpbmVzW25lbmdpbmUrK10gPSBlbmdpbmU7CisJfQorCWlndF9yZXF1aXJl KG5lbmdpbmUpOworCisJc2NyYXRjaCA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5Nik7CisJaWd0X2Zv cmsoY2hpbGQsIG5jcHVzKSB7CisJCXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOworCQl1aW50MzJf dCBjdHg7CisKKwkJaGFyc19wZXRydXNrYV9mNTRfMV9yYW5kb21fcGVydHVyYihjaGlsZCk7CisK KwkJY3R4ID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKKwkJaWd0X3VudGlsX3RpbWVvdXQodGlt ZW91dCkgeworCQkJaW50IHByaW87CisKKwkJCXByaW8gPSBoYXJzX3BldHJ1c2thX2Y1NF8xX3Jh bmRvbV91bnNhZmVfbWF4KE1BWF9QUklPIC0gTUlOX1BSSU8pICsgTUlOX1BSSU87CisJCQlnZW1f Y29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4LCBwcmlvKTsKKworCQkJZW5naW5lID0gZW5n aW5lc1toYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4KG5lbmdpbmUpXTsKKwkJ CXN0b3JlX2R3b3JkKGk5MTUsIGN0eCwgZW5naW5lLCBzY3JhdGNoLAorCQkJCSAgICA4KmNoaWxk ICsgMCwgfmNoaWxkLAorCQkJCSAgICAwLCAwKTsKKwkJCWZvciAodW5zaWduZWQgaW50IHN0ZXAg PSAwOyBzdGVwIDwgODsgc3RlcCsrKQorCQkJCXN0b3JlX2R3b3JkKGk5MTUsIGN0eCwgZW5naW5l LCBzY3JhdGNoLAorCQkJCQkgICAgOCpjaGlsZCArIDQsIGNvdW50KyssCisJCQkJCSAgICAwLCAw KTsKKwkJfQorCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisJfQorCWlndF93YWl0 Y2hpbGRyZW4oKTsKKworCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgc2NyYXRjaCwgNDA5Niwg UFJPVF9SRUFEKTsKKwlnZW1fc2V0X2RvbWFpbihpOTE1LCBzY3JhdGNoLCAvKiBubyB3cml0ZSBo YXphcmQgbGllcyEgKi8KKwkJCUk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9H VFQpOworCWdlbV9jbG9zZShpOTE1LCBzY3JhdGNoKTsKKworCWZvciAodW5zaWduZWQgbiA9IDA7 IG4gPCBuY3B1czsgbisrKSB7CisJCWlndF9hc3NlcnRfZXFfdTMyKHB0clsyKm5dLCB+bik7CisJ CS8qCisJCSAqIE5vdGUgdGhpcyBjb3VudCBpcyBhcHByb3hpbWF0ZSBkdWUgdG8gdW5jb25zdHJh aW5lZAorCQkgKiBvcmRlcmluZyBvZiB0aGUgZHdvcmQgd3JpdGVzIGJldHdlZW4gZW5naW5lcy4K KwkJICoKKwkJICogVGFrZSB0aGUgcmVzdWx0IHdpdGggYSBwaW5jaCBvZiBzYWx0LgorCQkgKi8K KwkJaWd0X2luZm8oIkNoaWxkWyVkXSBjb21wbGV0ZWQgJXUgY3ljbGVzXG4iLCAgbiwgcHRyWzIq bisxXSk7CisJfQorCW11bm1hcChwdHIsIDQwOTYpOworfQorCitpZ3RfbWFpbgoreworCWNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lICplOworCWludCBpOTE1ID0gLTE7CisKKwlp Z3RfZml4dHVyZSB7CisJCWk5MTUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKwkJ aWd0X3JlcXVpcmVfZ2VtKGk5MTUpOworCX0KKworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0 X2ZpeHR1cmUgeworCQkJaWd0X3JlcXVpcmUoZ2VtX2NvbnRleHRzX2hhc19zaGFyZWRfZ3R0KGk5 MTUpKTsKKwkJCWlndF9mb3JrX2hhbmdfZGV0ZWN0b3IoaTkxNSk7CisJCX0KKworCQlpZ3Rfc3Vi dGVzdCgiY3JlYXRlLXNoYXJlZC1ndHQiKQorCQkJY3JlYXRlX3NoYXJlZF9ndHQoaTkxNSwgMCk7 CisKKwkJaWd0X3N1YnRlc3QoImRldGFjaGVkLXNoYXJlZC1ndHQiKQorCQkJY3JlYXRlX3NoYXJl ZF9ndHQoaTkxNSwgREVUQUNIRUQpOworCisJCWlndF9zdWJ0ZXN0KCJkaXNqb2ludC10aW1lbGlu ZXMiKQorCQkJZGlzam9pbnRfdGltZWxpbmVzKGk5MTUpOworCisJCWlndF9zdWJ0ZXN0KCJzaW5n bGUtdGltZWxpbmUiKQorCQkJc2luZ2xlX3RpbWVsaW5lKGk5MTUpOworCisJCWlndF9zdWJ0ZXN0 KCJleGhhdXN0LXNoYXJlZC1ndHQiKQorCQkJZXhoYXVzdF9zaGFyZWRfZ3R0KGk5MTUsIDApOwor CisJCWlndF9zdWJ0ZXN0KCJleGhhdXN0LXNoYXJlZC1ndHQtbHJjIikKKwkJCWV4aGF1c3Rfc2hh cmVkX2d0dChpOTE1LCBFWEhBVVNUX0xSQyk7CisKKwkJZm9yIChlID0gaW50ZWxfZXhlY3V0aW9u X2VuZ2luZXM7IGUtPm5hbWU7IGUrKykgeworCQkJaWd0X3N1YnRlc3RfZigiZXhlYy1zaGFyZWQt Z3R0LSVzIiwgZS0+bmFtZSkKKwkJCQlleGVjX3NoYXJlZF9ndHQoaTkxNSwgZS0+ZXhlY19pZCB8 IGUtPmZsYWdzKTsKKworCQkJaWYgKCFpZ25vcmVfZW5naW5lKGUtPmV4ZWNfaWQgfCBlLT5mbGFn cykpIHsKKwkJCQlpZ3Rfc3VidGVzdF9mKCJleGVjLXNpbmdsZS10aW1lbGluZS0lcyIsCisJCQkJ CSAgICAgIGUtPm5hbWUpCisJCQkJCWV4ZWNfc2luZ2xlX3RpbWVsaW5lKGk5MTUsCisJCQkJCQkJ ICAgICBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpOworCQkJfQorCisJCQkvKgorCQkJICogQ2hlY2sg dGhhdCB0aGUgc2hhcmVkIGNvbnRleHRzIG9wZXJhdGUgaW5kZXBlbmRlbnRseSwKKwkJCSAqIHRo YXQgaXMgcmVxdWVzdHMgb24gb25lICgicXVldWUiKSBjYW4gYmUgc2NoZWR1bGVkCisJCQkgKiBh cm91bmQgYW5vdGhlciBxdWV1ZS4gV2Ugb25seSBjaGVjayB0aGUgYmFzaWNzIGhlcmUsCisJCQkg KiBlbm91Z2ggdG8gcmVkdWNlIHRoZSBxdWV1ZSBpbnRvIGp1c3QgYW5vdGhlciBjb250ZXh0LAor CQkJICogYW5kIHNvIHJlbHkgb24gZ2VtX2V4ZWNfc2NoZWR1bGUgdG8gcHJvdmUgdGhlIHJlc3Qu CisJCQkgKi8KKwkJCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJCQlpZ3RfZml4dHVyZSB7CisJCQkJ CWdlbV9yZXF1aXJlX3JpbmcoaTkxNSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzKTsKKwkJCQkJaWd0 X3JlcXVpcmUoZ2VtX2Nhbl9zdG9yZV9kd29yZChpOTE1LCBlLT5leGVjX2lkKSB8IGUtPmZsYWdz KTsKKwkJCQkJaWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9lbmFibGVkKGk5MTUpKTsKKwkJCQkJ aWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9oYXNfY3R4X3ByaW9yaXR5KGk5MTUpKTsKKwkJCQl9 CisKKwkJCQlpZ3Rfc3VidGVzdF9mKCJRLWluZGVwZW5kZW50LSVzIiwgZS0+bmFtZSkKKwkJCQkJ aW5kZXBlbmRlbnQoaTkxNSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCAwKTsKKworCQkJCWlndF9z dWJ0ZXN0X2YoIlEtaW4tb3JkZXItJXMiLCBlLT5uYW1lKQorCQkJCQlyZW9yZGVyKGk5MTUsIGUt PmV4ZWNfaWQgfCBlLT5mbGFncywgRVFVQUwpOworCisJCQkJaWd0X3N1YnRlc3RfZigiUS1vdXQt b3JkZXItJXMiLCBlLT5uYW1lKQorCQkJCQlyZW9yZGVyKGk5MTUsIGUtPmV4ZWNfaWQgfCBlLT5m bGFncywgMCk7CisKKwkJCQlpZ3Rfc3VidGVzdF9mKCJRLXByb21vdGlvbi0lcyIsIGUtPm5hbWUp CisJCQkJCXByb21vdGlvbihpOTE1LCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpOworCisJCQkJaWd0 X3N1YnRlc3RfZigiUS1zbW9rZXRlc3QtJXMiLCBlLT5uYW1lKQorCQkJCQlzbW9rZXRlc3QoaTkx NSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCA1KTsKKwkJCX0KKwkJfQorCisJCWlndF9zdWJ0ZXN0 KCJRLXNtb2tldGVzdC1hbGwiKSB7CisJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2VuYWJs ZWQoaTkxNSkpOworCQkJaWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9oYXNfY3R4X3ByaW9yaXR5 KGk5MTUpKTsKKwkJCXNtb2tldGVzdChpOTE1LCAtMSwgMzApOworCQl9CisKKwkJaWd0X2ZpeHR1 cmUgeworCQkJaWd0X3N0b3BfaGFuZ19kZXRlY3RvcigpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0 IGEvdGVzdHMvaTkxNS9nZW1fZXhlY193aGlzcGVyLmMgYi90ZXN0cy9pOTE1L2dlbV9leGVjX3do aXNwZXIuYwppbmRleCA2YzNiNTM3NTYuLmQzZTBiMGJhMiAxMDA2NDQKLS0tIGEvdGVzdHMvaTkx NS9nZW1fZXhlY193aGlzcGVyLmMKKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhlY193aGlzcGVyLmMK QEAgLTg3LDYgKzg3LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3JlbG9jKGludCBmZCwgdWludDMy X3QgaGFuZGxlLAogI2RlZmluZSBIQU5HIDB4MjAKICNkZWZpbmUgU1lOQyAweDQwCiAjZGVmaW5l IFBSSU9SSVRZIDB4ODAKKyNkZWZpbmUgUVVFVUVTIDB4MTAwCiAKIHN0cnVjdCBoYW5nIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmo7CkBAIC0xNzEsNyArMTcyLDcgQEAg c3RhdGljIHZvaWQgY3R4X3NldF9yYW5kb21fcHJpb3JpdHkoaW50IGZkLCB1aW50MzJfdCBjdHgp CiB7CiAJaW50IHByaW8gPSBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4KDEw MjQpIC0gNTEyOwogCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4LCBwcmlvKTsKLX07 Cit9CiAKIHN0YXRpYyB2b2lkIHdoaXNwZXIoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2ln bmVkIGZsYWdzKQogewpAQCAtMjI2LDYgKzIyNyw5IEBAIHN0YXRpYyB2b2lkIHdoaXNwZXIoaW50 IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2lnbmVkIGZsYWdzKQogCWlmIChmbGFncyAmIENPTlRF WFRTKQogCQlnZW1fcmVxdWlyZV9jb250ZXh0cyhmZCk7CiAKKwlpZiAoZmxhZ3MgJiBRVUVVRVMp CisJCWlndF9yZXF1aXJlKGdlbV9oYXNfcXVldWVzKGZkKSk7CisKIAlpZiAoZmxhZ3MgJiBIQU5H KQogCQlpbml0X2hhbmcoJmhhbmcpOwogCkBAIC0yOTAsNiArMjk0LDEwIEBAIHN0YXRpYyB2b2lk IHdoaXNwZXIoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2lnbmVkIGZsYWdzKQogCQkJZm9y IChuID0gMDsgbiA8IDY0OyBuKyspCiAJCQkJY29udGV4dHNbbl0gPSBnZW1fY29udGV4dF9jcmVh dGUoZmQpOwogCQl9CisJCWlmIChmbGFncyAmIFFVRVVFUykgeworCQkJZm9yIChuID0gMDsgbiA8 IDY0OyBuKyspCisJCQkJY29udGV4dHNbbl0gPSBnZW1fcXVldWVfY3JlYXRlKGZkKTsKKwkJfQog CQlpZiAoZmxhZ3MgJiBGRFMpIHsKIAkJCWZvciAobiA9IDA7IG4gPCA2NDsgbisrKQogCQkJCWZk c1tuXSA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwpAQCAtNDAzLDcgKzQxMSw3IEBA IHN0YXRpYyB2b2lkIHdoaXNwZXIoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2lnbmVkIGZs YWdzKQogCQkJCQkJZXhlY2J1Zi5mbGFncyAmPSB+RU5HSU5FX01BU0s7CiAJCQkJCQlleGVjYnVm LmZsYWdzIHw9IGVuZ2luZXNbcmFuZCgpICUgbmVuZ2luZV07CiAJCQkJCX0KLQkJCQkJaWYgKGZs YWdzICYgQ09OVEVYVFMpIHsKKwkJCQkJaWYgKGZsYWdzICYgKENPTlRFWFRTIHwgUVVFVUVTKSkg ewogCQkJCQkJZXhlY2J1Zi5yc3ZkMSA9IGNvbnRleHRzW3JhbmQoKSAlIDY0XTsKIAkJCQkJCWlm IChmbGFncyAmIFBSSU9SSVRZKQogCQkJCQkJCWN0eF9zZXRfcmFuZG9tX3ByaW9yaXR5KHRoaXNf ZmQsIGV4ZWNidWYucnN2ZDEpOwpAQCAtNDg2LDcgKzQ5NCw3IEBAIHN0YXRpYyB2b2lkIHdoaXNw ZXIoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2lnbmVkIGZsYWdzKQogCQkJZm9yIChuID0g MDsgbiA8IDY0OyBuKyspCiAJCQkJY2xvc2UoZmRzW25dKTsKIAkJfQotCQlpZiAoZmxhZ3MgJiBD T05URVhUUykgeworCQlpZiAoZmxhZ3MgJiAoQ09OVEVYVFMgfCBRVUVVRVMpKSB7CiAJCQlmb3Ig KG4gPSAwOyBuIDwgNjQ7IG4rKykKIAkJCQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjb250ZXh0 c1tuXSk7CiAJCX0KQEAgLTUyMiwxOCArNTMwLDI0IEBAIGlndF9tYWluCiAJCXsgImNoYWluLWZv cmtlZCIsIENIQUlOIHwgRk9SS0VEIH0sCiAJCXsgImNoYWluLWludGVycnVwdGlibGUiLCBDSEFJ TiB8IElOVEVSUlVQVElCTEUgfSwKIAkJeyAiY2hhaW4tc3luYyIsIENIQUlOIHwgU1lOQyB9LAot CQl7ICJjb250ZXh0cyIsIENPTlRFWFRTIH0sCi0JCXsgImNvbnRleHRzLWludGVycnVwdGlibGUi LCBDT05URVhUUyB8IElOVEVSUlVQVElCTEV9LAotCQl7ICJjb250ZXh0cy1mb3JrZWQiLCBDT05U RVhUUyB8IEZPUktFRH0sCi0JCXsgImNvbnRleHRzLXByaW9yaXR5IiwgQ09OVEVYVFMgfCBGT1JL RUQgfCBQUklPUklUWSB9LAotCQl7ICJjb250ZXh0cy1jaGFpbiIsIENPTlRFWFRTIHwgQ0hBSU4g fSwKLQkJeyAiY29udGV4dHMtc3luYyIsIENPTlRFWFRTIHwgU1lOQyB9LAogCQl7ICJmZHMiLCBG RFMgfSwKIAkJeyAiZmRzLWludGVycnVwdGlibGUiLCBGRFMgfCBJTlRFUlJVUFRJQkxFfSwKIAkJ eyAiZmRzLWZvcmtlZCIsIEZEUyB8IEZPUktFRH0sCiAJCXsgImZkcy1wcmlvcml0eSIsIEZEUyB8 IEZPUktFRCB8IFBSSU9SSVRZIH0sCiAJCXsgImZkcy1jaGFpbiIsIEZEUyB8IENIQUlOfSwKIAkJ eyAiZmRzLXN5bmMiLCBGRFMgfCBTWU5DfSwKKwkJeyAiY29udGV4dHMiLCBDT05URVhUUyB9LAor CQl7ICJjb250ZXh0cy1pbnRlcnJ1cHRpYmxlIiwgQ09OVEVYVFMgfCBJTlRFUlJVUFRJQkxFfSwK KwkJeyAiY29udGV4dHMtZm9ya2VkIiwgQ09OVEVYVFMgfCBGT1JLRUR9LAorCQl7ICJjb250ZXh0 cy1wcmlvcml0eSIsIENPTlRFWFRTIHwgRk9SS0VEIHwgUFJJT1JJVFkgfSwKKwkJeyAiY29udGV4 dHMtY2hhaW4iLCBDT05URVhUUyB8IENIQUlOIH0sCisJCXsgImNvbnRleHRzLXN5bmMiLCBDT05U RVhUUyB8IFNZTkMgfSwKKwkJeyAicXVldWVzIiwgUVVFVUVTIH0sCisJCXsgInF1ZXVlcy1pbnRl cnJ1cHRpYmxlIiwgUVVFVUVTIHwgSU5URVJSVVBUSUJMRX0sCisJCXsgInF1ZXVlcy1mb3JrZWQi LCBRVUVVRVMgfCBGT1JLRUR9LAorCQl7ICJxdWV1ZXMtcHJpb3JpdHkiLCBRVUVVRVMgfCBGT1JL RUQgfCBQUklPUklUWSB9LAorCQl7ICJxdWV1ZXMtY2hhaW4iLCBRVUVVRVMgfCBDSEFJTiB9LAor CQl7ICJxdWV1ZXMtc3luYyIsIFFVRVVFUyB8IFNZTkMgfSwKIAkJeyBOVUxMIH0KIAl9OwogCWlu dCBmZDsKZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQK aW5kZXggN2MxOTRjM2UzLi5lMDA1Yzc5YzQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxk CisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBAIC0xMTMsNiArMTEzLDcgQEAgaTkxNV9wcm9ncyA9 IFsKIAknZ2VtX2N0eF9leGVjJywKIAknZ2VtX2N0eF9pc29sYXRpb24nLAogCSdnZW1fY3R4X3Bh cmFtJywKKwknZ2VtX2N0eF9zaGFyZWQnLAogCSdnZW1fY3R4X3N3aXRjaCcsCiAJJ2dlbV9jdHhf dGhyYXNoJywKIAknZ2VtX2RvdWJsZV9pcnFfbG9vcCcsCi0tIAoyLjIwLjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Chris Wilson Date: Fri, 22 Mar 2019 09:21:49 +0000 Message-Id: <20190322092155.1656-18-chris@chris-wilson.co.uk> In-Reply-To: <20190322092155.1656-1-chris@chris-wilson.co.uk> References: <20190322092155.1656-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 18/24] i915: Exercise creating context with shared GTT 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: Tvrtko Ursulin , igt-dev@lists.freedesktop.org List-ID: djI6IFRlc3QgZWFjaCBzaGFyZWQgY29udGV4dCBpcyBpdHMgb3duIHRpbWVsaW5lIGFuZCBhbGxv d3MgcmVxdWVzdApyZW9yZGVyaW5nIGJldHdlZW4gc2hhcmVkIGNvbnRleHRzLgoKU2lnbmVkLW9m Zi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBKb29uYXMg TGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBUdnJ0a28gVXJz dWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5r dW9wcGFsYUBsaW51eC5pbnRlbC5jb20+CkNjOiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2Fq ZGVjemtvQGludGVsLmNvbT4KLS0tCiBsaWIvaTkxNS9nZW1fY29udGV4dC5jICAgICAgICB8ICA2 OCArKysKIGxpYi9pOTE1L2dlbV9jb250ZXh0LmggICAgICAgIHwgIDEzICsKIHRlc3RzL01ha2Vm aWxlLnNvdXJjZXMgICAgICAgIHwgICAxICsKIHRlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYyAg IHwgODY3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL2k5MTUvZ2Vt X2V4ZWNfd2hpc3Blci5jIHwgIDMyICstCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgICAgICB8 ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDk3MyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYwoKZGlmZiAt LWdpdCBhL2xpYi9pOTE1L2dlbV9jb250ZXh0LmMgYi9saWIvaTkxNS9nZW1fY29udGV4dC5jCmlu ZGV4IDhiNGQ1YjcwNC4uZTAwNTE5MmQ0IDEwMDY0NAotLS0gYS9saWIvaTkxNS9nZW1fY29udGV4 dC5jCisrKyBiL2xpYi9pOTE1L2dlbV9jb250ZXh0LmMKQEAgLTI3MSwzICsyNzEsNzEgQEAgdm9p ZCBnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaW50IGZkLCB1aW50MzJfdCBjdHhfaWQsIGludCBw cmlvKQogewogCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGN0 eF9pZCwgcHJpbyksIDApOwogfQorCitpbnQKK19fZ2VtX2NvbnRleHRfY2xvbmUoaW50IGk5MTUs CisJCSAgICB1aW50MzJfdCBzcmMsIHVuc2lnbmVkIGludCBzaGFyZSwKKwkJICAgIHVuc2lnbmVk IGludCBmbGFncywKKwkJICAgIHVpbnQzMl90ICpvdXQpCit7CisJc3RydWN0IGRybV9pOTE1X2dl bV9jb250ZXh0X2NyZWF0ZV9leHRfY2xvbmUgY2xvbmUgPSB7CisJCXsgLm5hbWUgPSBJOTE1X0NP TlRFWFRfQ1JFQVRFX0VYVF9DTE9ORSB9LAorCQkuY2xvbmVfaWQgPSBzcmMsCisJCS5mbGFncyA9 IHNoYXJlLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHQgYXJn ID0geworCQkuZmxhZ3MgPSBmbGFncyB8IEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfVVNFX0VY VEVOU0lPTlMsCisJCS5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKCZjbG9uZSksCisJfTsK KwlpbnQgZXJyID0gMDsKKworCWlmIChpZ3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VN X0NPTlRFWFRfQ1JFQVRFX0VYVCwgJmFyZykpCisJCWVyciA9IC1lcnJubzsKKworCSpvdXQgPSBh cmcuY3R4X2lkOworCisJZXJybm8gPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBib29s IF9fZ2VtX2NvbnRleHRfaGFzKGludCBpOTE1LCB1aW50MzJfdCBzaGFyZSwgdW5zaWduZWQgaW50 IGZsYWdzKQoreworCXVpbnQzMl90IGN0eDsKKworCV9fZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwg MCwgc2hhcmUsIGZsYWdzLCAmY3R4KTsKKwlpZiAoY3R4KQorCQlnZW1fY29udGV4dF9kZXN0cm95 KGk5MTUsIGN0eCk7CisKKwllcnJubyA9IDA7CisJcmV0dXJuIGN0eDsKK30KKworYm9vbCBnZW1f Y29udGV4dHNfaGFzX3NoYXJlZF9ndHQoaW50IGk5MTUpCit7CisJcmV0dXJuIF9fZ2VtX2NvbnRl eHRfaGFzKGk5MTUsIEk5MTVfQ09OVEVYVF9DTE9ORV9WTSwgMCk7Cit9CisKK2Jvb2wgZ2VtX2hh c19xdWV1ZXMoaW50IGk5MTUpCit7CisJcmV0dXJuIF9fZ2VtX2NvbnRleHRfaGFzKGk5MTUsCisJ CQkJIEk5MTVfQ09OVEVYVF9DTE9ORV9WTSwKKwkJCQkgSTkxNV9DT05URVhUX0NSRUFURV9GTEFH U19TSU5HTEVfVElNRUxJTkUpOworfQorCit1aW50MzJfdCBnZW1fY29udGV4dF9jbG9uZShpbnQg aTkxNSwKKwkJCSAgIHVpbnQzMl90IHNyYywgdW5zaWduZWQgaW50IHNoYXJlLAorCQkJICAgdW5z aWduZWQgaW50IGZsYWdzKQoreworCXVpbnQzMl90IGN0eDsKKworCWlndF9hc3NlcnRfZXEoX19n ZW1fY29udGV4dF9jbG9uZShpOTE1LCBzcmMsIHNoYXJlLCBmbGFncywgJmN0eCksIDApOworCisJ cmV0dXJuIGN0eDsKK30KKwordWludDMyX3QgZ2VtX3F1ZXVlX2NyZWF0ZShpbnQgaTkxNSkKK3sK KwlyZXR1cm4gZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwgMCwKKwkJCQkgSTkxNV9DT05URVhUX0NM T05FX1ZNLAorCQkJCSBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1NJTkdMRV9USU1FTElORSk7 Cit9CmRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fY29udGV4dC5oIGIvbGliL2k5MTUvZ2VtX2Nv bnRleHQuaAppbmRleCBhZWY2OGRkYTYuLmNlMjYxNzk4MCAxMDA2NDQKLS0tIGEvbGliL2k5MTUv Z2VtX2NvbnRleHQuaAorKysgYi9saWIvaTkxNS9nZW1fY29udGV4dC5oCkBAIC0yOSw2ICsyOSwx OSBAQCBpbnQgX19nZW1fY29udGV4dF9jcmVhdGUoaW50IGZkLCB1aW50MzJfdCAqY3R4X2lkKTsK IHZvaWQgZ2VtX2NvbnRleHRfZGVzdHJveShpbnQgZmQsIHVpbnQzMl90IGN0eF9pZCk7CiBpbnQg X19nZW1fY29udGV4dF9kZXN0cm95KGludCBmZCwgdWludDMyX3QgY3R4X2lkKTsKIAoraW50IF9f Z2VtX2NvbnRleHRfY2xvbmUoaW50IGk5MTUsCisJCQl1aW50MzJfdCBzcmMsIHVuc2lnbmVkIGlu dCBzaGFyZSwKKwkJCXVuc2lnbmVkIGludCBmbGFncywKKwkJCXVpbnQzMl90ICpvdXQpOwordWlu dDMyX3QgZ2VtX2NvbnRleHRfY2xvbmUoaW50IGk5MTUsCisJCQkgICB1aW50MzJfdCBzcmMsIHVu c2lnbmVkIGludCBzaGFyZSwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncyk7CisKK3VpbnQzMl90 IGdlbV9xdWV1ZV9jcmVhdGUoaW50IGk5MTUpOworCitib29sIGdlbV9jb250ZXh0c19oYXNfc2hh cmVkX2d0dChpbnQgaTkxNSk7Citib29sIGdlbV9oYXNfcXVldWVzKGludCBpOTE1KTsKKwogYm9v bCBnZW1faGFzX2NvbnRleHRzKGludCBmZCk7CiB2b2lkIGdlbV9yZXF1aXJlX2NvbnRleHRzKGlu dCBmZCk7CiB2b2lkIGdlbV9jb250ZXh0X3JlcXVpcmVfYmFubmFibGUoaW50IGZkKTsKZGlmZiAt LWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmlu ZGV4IDEyZjRiYmQ3NS4uN2UwNmM5NjlmIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTIyLDYgKzIyLDcgQEAgVEVTVFNf cHJvZ3MgPSBcCiAJZHJtX21tIFwKIAlkcm1fcmVhZCBcCiAJaTkxNS9nZW1fY3R4X2Nsb25lIFwK KwlpOTE1L2dlbV9jdHhfc2hhcmVkIFwKIAlpOTE1L2dlbV92bV9jcmVhdGUgXAogCWttc18zZCBc CiAJa21zX2FkZGZiX2Jhc2ljIFwKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX2N0eF9zaGFy ZWQuYyBiL3Rlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLjc3N2VkMjNmMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2k5MTUv Z2VtX2N0eF9zaGFyZWQuYwpAQCAtMCwwICsxLDg2NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAy MDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiaWd0LmgiCisKKyNpbmNsdWRlIDx1bmlz dGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRl IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j bHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2lu Y2x1ZGUgPGRybS5oPgorCisjaW5jbHVkZSAiaWd0X3JhbmQuaCIKKyNpbmNsdWRlICJpZ3Rfdmdl bS5oIgorI2luY2x1ZGUgInN5bmNfZmlsZS5oIgorCisjZGVmaW5lIExPIDAKKyNkZWZpbmUgSEkg MQorI2RlZmluZSBOT0lTRSAyCisKKyNkZWZpbmUgTUFYX1BSSU8gTE9DQUxfSTkxNV9DT05URVhU X01BWF9VU0VSX1BSSU9SSVRZCisjZGVmaW5lIE1JTl9QUklPIExPQ0FMX0k5MTVfQ09OVEVYVF9N SU5fVVNFUl9QUklPUklUWQorCitzdGF0aWMgaW50IHByaW9yaXRpZXNbXSA9IHsKKwlbTE9dID0g TUlOX1BSSU8gLyAyLAorCVtISV0gPSBNQVhfUFJJTyAvIDIsCit9OworCisjZGVmaW5lIE1BWF9F TFNQX1FMRU4gMTYKKworSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3Qgc2hhcmVkIGNvbnRleHRz LiIpOworCitzdGF0aWMgdm9pZCBjcmVhdGVfc2hhcmVkX2d0dChpbnQgaTkxNSwgdW5zaWduZWQg aW50IGZsYWdzKQorI2RlZmluZSBERVRBQ0hFRCAweDEKK3sKKwljb25zdCB1aW50MzJfdCBiYmUg PSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3Qy IG9iaiA9IHsKKwkJLmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5NiksCisJfTsKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7CisJCS5idWZmZXJzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKKwkJLmJ1ZmZlcl9jb3VudCA9IDEsCisJfTsKKwl1aW50 MzJfdCBwYXJlbnQsIGNoaWxkOworCisJZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsICZi YmUsIHNpemVvZihiYmUpKTsKKwlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisJZ2VtX3N5 bmMoaTkxNSwgb2JqLmhhbmRsZSk7CisKKwljaGlsZCA9IGZsYWdzICYgREVUQUNIRUQgPyBnZW1f Y29udGV4dF9jcmVhdGUoaTkxNSkgOiAwOworCWlndF91bnRpbF90aW1lb3V0KDIpIHsKKwkJcGFy ZW50ID0gZmxhZ3MgJiBERVRBQ0hFRCA/IGNoaWxkIDogMDsKKwkJY2hpbGQgPSBnZW1fY29udGV4 dF9jbG9uZShpOTE1LAorCQkJCQkgIHBhcmVudCwgSTkxNV9DT05URVhUX0NMT05FX1ZNLAorCQkJ CQkgIDApOworCQlleGVjYnVmLnJzdmQxID0gY2hpbGQ7CisJCWdlbV9leGVjYnVmKGk5MTUsICZl eGVjYnVmKTsKKworCQlpZiAoZmxhZ3MgJiBERVRBQ0hFRCkgeworCQkJZ2VtX2NvbnRleHRfZGVz dHJveShpOTE1LCBwYXJlbnQpOworCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCQl9 IGVsc2UgeworCQkJcGFyZW50ID0gY2hpbGQ7CisJCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUs IHBhcmVudCk7CisJCX0KKworCQlleGVjYnVmLnJzdmQxID0gcGFyZW50OworCQlpZ3RfYXNzZXJ0 X2VxKF9fZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpLCAtRU5PRU5UKTsKKwkJaWd0X2Fzc2Vy dF9lcShfX2dlbV9jb250ZXh0X2Nsb25lKGk5MTUsCisJCQkJCQkgIHBhcmVudCwgSTkxNV9DT05U RVhUX0NMT05FX1ZNLAorCQkJCQkJICAwLCAmcGFyZW50KSwgLUVOT0VOVCk7CisJfQorCWlmIChm bGFncyAmIERFVEFDSEVEKQorCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGNoaWxkKTsKKwor CWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOworCWdlbV9jbG9zZShpOTE1LCBvYmouaGFuZGxl KTsKK30KKworc3RhdGljIHZvaWQgZGlzam9pbnRfdGltZWxpbmVzKGludCBpOTE1KQoreworCUlH VF9DT1JLX0hBTkRMRShjb3JrKTsKKwlpZ3Rfc3Bpbl90ICpzcGluWzJdOworCXVpbnQzMl90IHBs dWcsIGNoaWxkOworCisJaWd0X3JlcXVpcmUoZ2VtX2hhc19leGVjbGlzdHMoaTkxNSkpOworCisJ LyoKKwkgKiBFYWNoIGNvbnRleHQsIGFsdGhvdWdoIHRoZXkgc2hhcmUgYSB2bSwgYXJlIGV4cGVj dGVkIHRvIGJlCisJICogZGlzdGluY3QgdGltZWxpbmVzLiBBIHJlcXVlc3QgcXVldWVkIHRvIG9u ZSBjb250ZXh0IHNob3VsZCBiZQorCSAqIGluZGVwZW5kZW50IG9mIGFueSBzaGFyZWQgY29udGV4 dHMuCisJICovCisJY2hpbGQgPSBnZW1fY29udGV4dF9jbG9uZShpOTE1LCAwLCBJOTE1X0NPTlRF WFRfQ0xPTkVfVk0sIDApOworCXBsdWcgPSBpZ3RfY29ya19wbHVnKCZjb3JrLCBpOTE1KTsKKwor CXNwaW5bMF0gPSBfX2lndF9zcGluX2JhdGNoX25ldyhpOTE1LCAuY3R4ID0gMCwgLmRlcGVuZGVu Y3kgPSBwbHVnKTsKKwlzcGluWzFdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoaTkxNSwgLmN0eCA9 IGNoaWxkKTsKKworCS8qIFdhaXQgZm9yIHRoZSBzZWNvbmQgc3Bpbm5lciwgd2lsbCBoYW5nIGlm IHN0dWNrIGJlaGluZCB0aGUgZmlyc3QgKi8KKwlpZ3Rfc3Bpbl9iYXRjaF9lbmQoc3BpblsxXSk7 CisJZ2VtX3N5bmMoaTkxNSwgc3BpblsxXS0+aGFuZGxlKTsKKworCWlndF9jb3JrX3VucGx1Zygm Y29yayk7CisKKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGk5MTUsIHNwaW5bMV0pOworCWlndF9zcGlu X2JhdGNoX2ZyZWUoaTkxNSwgc3BpblswXSk7Cit9CisKK3N0YXRpYyBpbnQgcmVvcGVuX2RyaXZl cihpbnQgZmQpCit7CisJY2hhciBwYXRoWzI1Nl07CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2Yo cGF0aCksICIvcHJvYy9zZWxmL2ZkLyVkIiwgZmQpOworCWZkID0gb3BlbihwYXRoLCBPX1JEV1Ip OworCWlndF9hc3NlcnRfbHRlKDAsIGZkKTsKKworCXJldHVybiBmZDsKK30KKworc3RhdGljIHZv aWQgZXhoYXVzdF9zaGFyZWRfZ3R0KGludCBpOTE1LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisjZGVm aW5lIEVYSEFVU1RfTFJDIDB4MQoreworCWk5MTUgPSByZW9wZW5fZHJpdmVyKGk5MTUpOworCisJ aWd0X2ZvcmsocGlkLCAxKSB7CisJCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZF Ul9FTkQ7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKKwkJCS5o YW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpCisJCX07CisJCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcigmb2JqKSwKKwkJCS5idWZmZXJfY291bnQgPSAxLAorCQl9OworCQl1aW50MzJfdCBwYXJl bnQsIGNoaWxkOworCQl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKKwkJaW50IGVycjsKKworCQln ZW1fd3JpdGUoaTkxNSwgb2JqLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOworCisJCWNo aWxkID0gMDsKKwkJZm9yICg7OykgeworCQkJcGFyZW50ID0gY2hpbGQ7CisJCQllcnIgPSBfX2dl bV9jb250ZXh0X2Nsb25lKGk5MTUsCisJCQkJCQkgIHBhcmVudCwgSTkxNV9DT05URVhUX0NMT05F X1ZNLAorCQkJCQkJICAwLCAmY2hpbGQpOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKworCQkJ aWYgKGZsYWdzICYgRVhIQVVTVF9MUkMpIHsKKwkJCQlleGVjYnVmLnJzdmQxID0gY2hpbGQ7CisJ CQkJZXJyID0gX19nZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisJCQkJaWYgKGVycikKKwkJ CQkJYnJlYWs7CisJCQl9CisKKwkJCWNvdW50Kys7CisJCX0KKwkJZ2VtX3N5bmMoaTkxNSwgb2Jq LmhhbmRsZSk7CisKKwkJaWd0X2luZm8oIkNyZWF0ZWQgJWx1IHNoYXJlZCBjb250ZXh0cywgYmVm b3JlICVkICglcylcbiIsCisJCQkgY291bnQsIGVyciwgc3RyZXJyb3IoLWVycikpOworCX0KKwlj bG9zZShpOTE1KTsKKwlpZ3Rfd2FpdGNoaWxkcmVuKCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNf c2hhcmVkX2d0dChpbnQgaTkxNSwgdW5zaWduZWQgaW50IHJpbmcpCit7CisJY29uc3QgaW50IGdl biA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKTsKKwljb25zdCB1aW50MzJf dCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyIG9iaiA9IHsKKwkJLmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5NikKKwl9Owor CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNf cHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwkJLmZs YWdzID0gcmluZywKKwl9OworCXVpbnQzMl90IHNjcmF0Y2ggPSBvYmouaGFuZGxlOworCXVpbnQz Ml90IGJhdGNoWzE2XTsKKwlpbnQgaTsKKworCWdlbV9yZXF1aXJlX3JpbmcoaTkxNSwgcmluZyk7 CisJaWd0X3JlcXVpcmUoZ2VtX2Nhbl9zdG9yZV9kd29yZChpOTE1LCByaW5nKSk7CisKKwkvKiBM b2FkIG9iamVjdCBpbnRvIHBsYWNlIGluIHRoZSBHVFQgKi8KKwlnZW1fd3JpdGUoaTkxNSwgb2Jq LmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOworCWdlbV9leGVjYnVmKGk5MTUsICZleGVj YnVmKTsKKworCS8qIFByZXN1bWUgbm90aGluZyBjYXVzZXMgYW4gZXZpY3Rpb24gaW4gdGhlIG1l YW50aW1lICovCisKKwlvYmouaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KTsKKworCWkg PSAwOworCWJhdGNoW2ldID0gTUlfU1RPUkVfRFdPUkRfSU1NIHwgKGdlbiA8IDYgPyAxIDw8IDIy IDogMCk7CisJaWYgKGdlbiA+PSA4KSB7CisJCWJhdGNoWysraV0gPSBvYmoub2Zmc2V0OworCQli YXRjaFsrK2ldID0gMDsKKwl9IGVsc2UgaWYgKGdlbiA+PSA0KSB7CisJCWJhdGNoWysraV0gPSAw OworCQliYXRjaFsrK2ldID0gb2JqLm9mZnNldDsKKwl9IGVsc2UgeworCQliYXRjaFtpXS0tOwor CQliYXRjaFsrK2ldID0gb2JqLm9mZnNldDsKKwl9CisJYmF0Y2hbKytpXSA9IDB4YzBmZmVlOwor CWJhdGNoWysraV0gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCWdlbV93cml0ZShpOTE1LCBvYmou aGFuZGxlLCAwLCBiYXRjaCwgc2l6ZW9mKGJhdGNoKSk7CisKKwlvYmoub2Zmc2V0ICs9IDQwOTY7 IC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBjYXVzZSBhbiBldmljdGlvbiEgKi8KKwlvYmouZmxhZ3Mg fD0gRVhFQ19PQkpFQ1RfUElOTkVEOworCWV4ZWNidWYucnN2ZDEgPSBnZW1fY29udGV4dF9jbG9u ZShpOTE1LCAwLCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sIDApOworCWlmIChnZW4gPiAzICYmIGdl biA8IDYpCisJCWV4ZWNidWYuZmxhZ3MgfD0gSTkxNV9FWEVDX1NFQ1VSRTsKKworCWdlbV9leGVj YnVmKGk5MTUsICZleGVjYnVmKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGV4ZWNidWYu cnN2ZDEpOworCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOyAvKiB3cml0ZSBoYXphcmQgbGll cyAqLworCWdlbV9jbG9zZShpOTE1LCBvYmouaGFuZGxlKTsKKworCWdlbV9yZWFkKGk5MTUsIHNj cmF0Y2gsIDAsIGJhdGNoLCBzaXplb2YodWludDMyX3QpKTsKKwlnZW1fY2xvc2UoaTkxNSwgc2Ny YXRjaCk7CisKKwlpZ3RfYXNzZXJ0X2VxX3UzMigqYmF0Y2gsIDB4YzBmZmVlKTsKK30KKworc3Rh dGljIGludCBub3Bfc3luYyhpbnQgaTkxNSwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBpbnQgcmlu ZywgaW50NjRfdCB0aW1lb3V0KQoreworCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JV RkZFUl9FTkQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geworCQku aGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwl9OworCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2lu dGVyKCZvYmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwkJLmZsYWdzID0gcmluZywKKwkJLnJz dmQxID0gY3R4LAorCX07CisJaW50IGVycjsKKworCWdlbV93cml0ZShpOTE1LCBvYmouaGFuZGxl LCAwLCAmYmJlLCBzaXplb2YoYmJlKSk7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOwor CWVyciA9IGdlbV93YWl0KGk5MTUsIG9iai5oYW5kbGUsICZ0aW1lb3V0KTsKKwlnZW1fY2xvc2Uo aTkxNSwgb2JqLmhhbmRsZSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgYm9vbCBoYXNf c2luZ2xlX3RpbWVsaW5lKGludCBpOTE1KQoreworCXVpbnQzMl90IGN0eDsKKworCV9fZ2VtX2Nv bnRleHRfY2xvbmUoaTkxNSwgMCwgMCwKKwkJCSAgICBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdT X1NJTkdMRV9USU1FTElORSwKKwkJCSAgICAmY3R4KTsKKwlpZiAoY3R4KQorCQlnZW1fY29udGV4 dF9kZXN0cm95KGk5MTUsIGN0eCk7CisKKwlyZXR1cm4gY3R4ICE9IDA7Cit9CisKK3N0YXRpYyBi b29sIGlnbm9yZV9lbmdpbmUodW5zaWduZWQgZW5naW5lKQoreworCWlmIChlbmdpbmUgPT0gMCkK KwkJcmV0dXJuIHRydWU7CisKKwlpZiAoZW5naW5lID09IEk5MTVfRVhFQ19CU0QpCisJCXJldHVy biB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBzaW5nbGVfdGltZWxp bmUoaW50IGk5MTUpCit7CisJY29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VO RDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmogPSB7CisJCS5oYW5kbGUg PSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj YnVmZmVyMiBleGVjYnVmID0geworCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9i aiksCisJCS5idWZmZXJfY291bnQgPSAxLAorCX07CisJc3RydWN0IHN5bmNfZmVuY2VfaW5mbyBy aW5nc1sxNl07CisJc3RydWN0IHN5bmNfZmlsZV9pbmZvIHN5bmNfZmlsZV9pbmZvID0geworCQku bnVtX2ZlbmNlcyA9IDEsCisJfTsKKwl1bnNpZ25lZCBpbnQgZW5naW5lOworCWludCBuOworCisJ aWd0X3JlcXVpcmUoaGFzX3NpbmdsZV90aW1lbGluZShpOTE1KSk7CisKKwlnZW1fd3JpdGUoaTkx NSwgb2JqLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOworCWdlbV9leGVjYnVmKGk5MTUs ICZleGVjYnVmKTsKKwlnZW1fc3luYyhpOTE1LCBvYmouaGFuZGxlKTsKKworCS8qCisJICogRm9y IGEgInNpbmdsZSB0aW1lbGluZSIgY29udGV4dCwgZWFjaCByaW5nIGlzIG9uIHRoZSBjb21tb24K KwkgKiB0aW1lbGluZSwgdW5saWtlIGEgbm9ybWFsIGNvbnRleHQgd2hlcmUgZWFjaCByaW5nIGhh cyBhbgorCSAqIGluZGVwZW5kZW50IHRpbWVsaW5lLiBUaGF0IGlzIG5vIG1hdHRlciB3aGljaCBl bmdpbmUgd2Ugc3VibWl0CisJICogdG8sIGl0IHJlcG9ydHMgdGhlIHNhbWUgdGltZWxpbmUgbmFt ZSBhbmQgZmVuY2UgY29udGV4dC4gSG93ZXZlciwKKwkgKiB0aGUgZmVuY2UgY29udGV4dCBpcyBu b3QgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgc3luY19mZW5jZV9pbmZvLgorCSAqLworCWV4ZWNidWYu cnN2ZDEgPQorCQlnZW1fY29udGV4dF9jbG9uZShpOTE1LCAwLCAwLAorCQkJCSAgSTkxNV9DT05U RVhUX0NSRUFURV9GTEFHU19TSU5HTEVfVElNRUxJTkUpOworCWV4ZWNidWYuZmxhZ3MgPSBJOTE1 X0VYRUNfRkVOQ0VfT1VUOworCW4gPSAwOworCWZvcl9lYWNoX2VuZ2luZShpOTE1LCBlbmdpbmUp IHsKKwkJZ2VtX2V4ZWNidWZfd3IoaTkxNSwgJmV4ZWNidWYpOworCQlzeW5jX2ZpbGVfaW5mby5z eW5jX2ZlbmNlX2luZm8gPSB0b191c2VyX3BvaW50ZXIoJnJpbmdzW25dKTsKKwkJZG9faW9jdGwo ZXhlY2J1Zi5yc3ZkMiA+PiAzMiwgU1lOQ19JT0NfRklMRV9JTkZPLCAmc3luY19maWxlX2luZm8p OworCQljbG9zZShleGVjYnVmLnJzdmQyID4+IDMyKTsKKworCQlpZ3RfaW5mbygicmluZ1slZF0g ZmVuY2U6ICVzICVzXG4iLAorCQkJIG4sIHJpbmdzW25dLmRyaXZlcl9uYW1lLCByaW5nc1tuXS5v YmpfbmFtZSk7CisJCW4rKzsKKwl9CisJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7CisJZ2Vt X2Nsb3NlKGk5MTUsIG9iai5oYW5kbGUpOworCisJZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKysp IHsKKwkJaWd0X2Fzc2VydCghc3RyY21wKHJpbmdzWzBdLmRyaXZlcl9uYW1lLCByaW5nc1tpXS5k cml2ZXJfbmFtZSkpOworCQlpZ3RfYXNzZXJ0KCFzdHJjbXAocmluZ3NbMF0ub2JqX25hbWUsIHJp bmdzW2ldLm9ial9uYW1lKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBleGVjX3NpbmdsZV90aW1l bGluZShpbnQgaTkxNSwgdW5zaWduZWQgaW50IHJpbmcpCit7CisJdW5zaWduZWQgaW50IG90aGVy OworCWlndF9zcGluX3QgKnNwaW47CisJdWludDMyX3QgY3R4OworCisJZ2VtX3JlcXVpcmVfcmlu ZyhpOTE1LCByaW5nKTsKKwlpZ3RfcmVxdWlyZShoYXNfc2luZ2xlX3RpbWVsaW5lKGk5MTUpKTsK KworCS8qCisJICogT24gYW4gb3JkaW5hcnkgY29udGV4dCwgYSBibG9ja2FnZSBvbiBvbmUgcmlu ZyBkb2Vzbid0IHByZXZlbnQKKwkgKiBleGVjdXRpb24gb24gYW4gb3RoZXIuCisJICovCisJY3R4 ID0gMDsKKwlzcGluID0gTlVMTDsKKwlmb3JfZWFjaF9lbmdpbmUoaTkxNSwgb3RoZXIpIHsKKwkJ aWYgKG90aGVyID09IHJpbmcgfHwgaWdub3JlX2VuZ2luZShvdGhlcikpCisJCQljb250aW51ZTsK KworCQlpZiAoc3BpbiA9PSBOVUxMKSB7CisJCQlzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXco aTkxNSwgLmN0eCA9IGN0eCwgLmVuZ2luZSA9IG90aGVyKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJCQkuYnVmZmVyc19wdHIg PSBzcGluLT5leGVjYnVmLmJ1ZmZlcnNfcHRyLAorCQkJCS5idWZmZXJfY291bnQgPSBzcGluLT5l eGVjYnVmLmJ1ZmZlcl9jb3VudCwKKwkJCQkuZmxhZ3MgPSBvdGhlciwKKwkJCQkucnN2ZDEgPSBj dHgsCisJCQl9OworCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCQl9CisJfQorCWln dF9yZXF1aXJlKHNwaW4pOworCWlndF9hc3NlcnRfZXEobm9wX3N5bmMoaTkxNSwgY3R4LCByaW5n LCBOU0VDX1BFUl9TRUMpLCAwKTsKKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGk5MTUsIHNwaW4pOwor CisJLyoKKwkgKiBCdXQgaWYgd2UgY3JlYXRlIGEgY29udGV4dCB3aXRoIGp1c3QgYSBzaW5nbGUg c2hhcmVkIHRpbWVsaW5lLAorCSAqIHRoZW4gaXQgd2lsbCBibG9jayB3YWl0aW5nIGZvciB0aGUg ZWFybGllciByZXF1ZXN0cyBvbiB0aGUKKwkgKiBvdGhlciBlbmdpbmVzLgorCSAqLworCWN0eCA9 IGdlbV9jb250ZXh0X2Nsb25lKGk5MTUsIDAsIDAsCisJCQkJSTkxNV9DT05URVhUX0NSRUFURV9G TEFHU19TSU5HTEVfVElNRUxJTkUpOworCXNwaW4gPSBOVUxMOworCWZvcl9lYWNoX2VuZ2luZShp OTE1LCBvdGhlcikgeworCQlpZiAob3RoZXIgPT0gcmluZyB8fCBpZ25vcmVfZW5naW5lKG90aGVy KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzcGluID09IE5VTEwpIHsKKwkJCXNwaW4gPSBfX2ln dF9zcGluX2JhdGNoX25ldyhpOTE1LCAuY3R4ID0gY3R4LCAuZW5naW5lID0gb3RoZXIpOworCQl9 IGVsc2UgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewor CQkJCS5idWZmZXJzX3B0ciA9IHNwaW4tPmV4ZWNidWYuYnVmZmVyc19wdHIsCisJCQkJLmJ1ZmZl cl9jb3VudCA9IHNwaW4tPmV4ZWNidWYuYnVmZmVyX2NvdW50LAorCQkJCS5mbGFncyA9IG90aGVy LAorCQkJCS5yc3ZkMSA9IGN0eCwKKwkJCX07CisJCQlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1 Zik7CisJCX0KKwl9CisJaWd0X2Fzc2VydChzcGluKTsKKwlpZ3RfYXNzZXJ0X2VxKG5vcF9zeW5j KGk5MTUsIGN0eCwgcmluZywgTlNFQ19QRVJfU0VDKSwgLUVUSU1FKTsKKwlpZ3Rfc3Bpbl9iYXRj aF9mcmVlKGk5MTUsIHNwaW4pOworfQorCitzdGF0aWMgdm9pZCBzdG9yZV9kd29yZChpbnQgaTkx NSwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCByaW5nLAorCQkJdWludDMyX3QgdGFyZ2V0LCB1aW50 MzJfdCBvZmZzZXQsIHVpbnQzMl90IHZhbHVlLAorCQkJdWludDMyX3QgY29yaywgdW5zaWduZWQg d3JpdGVfZG9tYWluKQoreworCWNvbnN0IGludCBnZW4gPSBpbnRlbF9nZW4oaW50ZWxfZ2V0X2Ry bV9kZXZpZChpOTE1KSk7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzNd OworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvYzsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJdWludDMyX3QgYmF0Y2hbMTZdOwor CWludCBpOworCisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNi dWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqICsgIWNvcmspOworCWV4ZWNidWYu YnVmZmVyX2NvdW50ID0gMiArICEhY29yazsKKwlleGVjYnVmLmZsYWdzID0gcmluZzsKKwlpZiAo Z2VuIDwgNikKKwkJZXhlY2J1Zi5mbGFncyB8PSBJOTE1X0VYRUNfU0VDVVJFOworCWV4ZWNidWYu cnN2ZDEgPSBjdHg7CisKKwltZW1zZXQob2JqLCAwLCBzaXplb2Yob2JqKSk7CisJb2JqWzBdLmhh bmRsZSA9IGNvcms7CisJb2JqWzFdLmhhbmRsZSA9IHRhcmdldDsKKwlvYmpbMl0uaGFuZGxlID0g Z2VtX2NyZWF0ZShpOTE1LCA0MDk2KTsKKworCW1lbXNldCgmcmVsb2MsIDAsIHNpemVvZihyZWxv YykpOworCXJlbG9jLnRhcmdldF9oYW5kbGUgPSBvYmpbMV0uaGFuZGxlOworCXJlbG9jLnByZXN1 bWVkX29mZnNldCA9IDA7CisJcmVsb2Mub2Zmc2V0ID0gc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxv Yy5kZWx0YSA9IG9mZnNldDsKKwlyZWxvYy5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5f SU5TVFJVQ1RJT047CisJcmVsb2Mud3JpdGVfZG9tYWluID0gd3JpdGVfZG9tYWluOworCW9ialsy XS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZyZWxvYyk7CisJb2JqWzJdLnJlbG9jYXRp b25fY291bnQgPSAxOworCisJaSA9IDA7CisJYmF0Y2hbaV0gPSBNSV9TVE9SRV9EV09SRF9JTU0g fCAoZ2VuIDwgNiA/IDEgPDwgMjIgOiAwKTsKKwlpZiAoZ2VuID49IDgpIHsKKwkJYmF0Y2hbKytp XSA9IG9mZnNldDsKKwkJYmF0Y2hbKytpXSA9IDA7CisJfSBlbHNlIGlmIChnZW4gPj0gNCkgewor CQliYXRjaFsrK2ldID0gMDsKKwkJYmF0Y2hbKytpXSA9IG9mZnNldDsKKwkJcmVsb2Mub2Zmc2V0 ICs9IHNpemVvZih1aW50MzJfdCk7CisJfSBlbHNlIHsKKwkJYmF0Y2hbaV0tLTsKKwkJYmF0Y2hb KytpXSA9IG9mZnNldDsKKwl9CisJYmF0Y2hbKytpXSA9IHZhbHVlOworCWJhdGNoWysraV0gPSBN SV9CQVRDSF9CVUZGRVJfRU5EOworCWdlbV93cml0ZShpOTE1LCBvYmpbMl0uaGFuZGxlLCAwLCBi YXRjaCwgc2l6ZW9mKGJhdGNoKSk7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCWdl bV9jbG9zZShpOTE1LCBvYmpbMl0uaGFuZGxlKTsKK30KKworc3RhdGljIHVpbnQzMl90IGNyZWF0 ZV9oaWdoZXN0X3ByaW9yaXR5KGludCBpOTE1KQoreworCXVpbnQzMl90IGN0eCA9IGdlbV9jb250 ZXh0X2NyZWF0ZShpOTE1KTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgbm8gcHJpb3JpdHkgc3Vw cG9ydCwgYWxsIGNvbnRleHRzIHdpbGwgaGF2ZSBlcXVhbAorCSAqIHByaW9yaXR5IChhbmQgdGhl cmVmb3JlIHRoZSBtYXggdXNlciBwcmlvcml0eSksIHNvIG5vIGNvbnRleHQKKwkgKiBjYW4gb3Zl cnRha2UgdXMsIGFuZCB3ZSBlZmZlY3RpdmVseSBjYW4gZm9ybSBhIHBsdWcuCisJICovCisJX19n ZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4LCBNQVhfUFJJTyk7CisKKwlyZXR1cm4g Y3R4OworfQorCitzdGF0aWMgdm9pZCB1bnBsdWdfc2hvd19xdWV1ZShpbnQgaTkxNSwgc3RydWN0 IGlndF9jb3JrICpjLCB1bnNpZ25lZCBpbnQgZW5naW5lKQoreworCWlndF9zcGluX3QgKnNwaW5b TUFYX0VMU1BfUUxFTl07CisKKwlmb3IgKGludCBuID0gMDsgbiA8IEFSUkFZX1NJWkUoc3Bpbik7 IG4rKykgeworCQljb25zdCBzdHJ1Y3QgaWd0X3NwaW5fZmFjdG9yeSBvcHRzID0geworCQkJLmN0 eCA9IGNyZWF0ZV9oaWdoZXN0X3ByaW9yaXR5KGk5MTUpLAorCQkJLmVuZ2luZSA9IGVuZ2luZSwK KwkJfTsKKwkJc3BpbltuXSA9IF9faWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShpOTE1LCAmb3B0cyk7 CisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgb3B0cy5jdHgpOworCX0KKworCWlndF9jb3Jr X3VucGx1ZyhjKTsgLyogYmF0Y2hlcyB3aWxsIG5vdyBiZSBxdWV1ZWQgb24gdGhlIGVuZ2luZSAq LworCWlndF9kZWJ1Z2ZzX2R1bXAoaTkxNSwgImk5MTVfZW5naW5lX2luZm8iKTsKKworCWZvciAo aW50IG4gPSAwOyBuIDwgQVJSQVlfU0laRShzcGluKTsgbisrKQorCQlpZ3Rfc3Bpbl9iYXRjaF9m cmVlKGk5MTUsIHNwaW5bbl0pOworfQorCitzdGF0aWMgdWludDMyX3Qgc3RvcmVfdGltZXN0YW1w KGludCBpOTE1LAorCQkJCXVpbnQzMl90IGN0eCwgdW5zaWduZWQgcmluZywKKwkJCQl1bnNpZ25l ZCBtbWlvX2Jhc2UpCit7CisJY29uc3QgYm9vbCByNjRiID0gaW50ZWxfZ2VuKGludGVsX2dldF9k cm1fZGV2aWQoaTkxNSkpID49IDg7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg b2JqID0geworCQkuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwkJLnJlbG9jYXRp b25fY291bnQgPSAxLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 IHJlbG9jID0geworCQkudGFyZ2V0X2hhbmRsZSA9IG9iai5oYW5kbGUsCisJCS5vZmZzZXQgPSAy ICogc2l6ZW9mKHVpbnQzMl90KSwKKwkJLmRlbHRhID0gNDA5MiwKKwkJLnJlYWRfZG9tYWlucyA9 IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVy KCZvYmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwkJLmZsYWdzID0gcmluZywKKwkJLnJzdmQx ID0gY3R4LAorCX07CisJdWludDMyX3QgYmF0Y2hbXSA9IHsKKwkJMHgyNCA8PCAyMyB8ICgxICsg cjY0YiksIC8qIFNSTSAqLworCQltbWlvX2Jhc2UgKyAweDM1OCwKKwkJNDA5MiwKKwkJMCwKKwkJ TUlfQkFUQ0hfQlVGRkVSX0VORAorCX07CisKKwlpZ3RfcmVxdWlyZShpbnRlbF9nZW4oaW50ZWxf Z2V0X2RybV9kZXZpZChpOTE1KSkgPj0gNyk7CisKKwlnZW1fd3JpdGUoaTkxNSwgb2JqLmhhbmRs ZSwgMCwgYmF0Y2gsIHNpemVvZihiYXRjaCkpOworCW9iai5yZWxvY3NfcHRyID0gdG9fdXNlcl9w b2ludGVyKCZyZWxvYyk7CisKKwlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisKKwlyZXR1 cm4gb2JqLmhhbmRsZTsKK30KKworc3RhdGljIHZvaWQgaW5kZXBlbmRlbnQoaW50IGk5MTUsIHVu c2lnbmVkIHJpbmcsIHVuc2lnbmVkIGZsYWdzKQoreworCXVpbnQzMl90IGhhbmRsZVtBUlJBWV9T SVpFKHByaW9yaXRpZXMpXTsKKwlpZ3Rfc3Bpbl90ICpzcGluW01BWF9FTFNQX1FMRU5dOworCXVu c2lnbmVkIGludCBtbWlvX2Jhc2U7CisKKwkvKiBYWFggaTkxNV9xdWVyeSgpISAqLworCXN3aXRj aCAocmluZykgeworCWNhc2UgSTkxNV9FWEVDX0RFRkFVTFQ6CisJY2FzZSBJOTE1X0VYRUNfUkVO REVSOgorCQltbWlvX2Jhc2UgPSAweDIwMDA7CisJCWJyZWFrOworI2lmIDAKKwljYXNlIEk5MTVf RVhFQ19CU0Q6CisJCW1taW9fYmFzZSA9IDB4MTIwMDA7CisJCWJyZWFrOworI2VuZGlmCisJY2Fz ZSBJOTE1X0VYRUNfQkxUOgorCQltbWlvX2Jhc2UgPSAweDIyMDAwOworCQlicmVhazsKKworCWNh c2UgSTkxNV9FWEVDX1ZFQk9YOgorCQlpZiAoaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQo aTkxNSkpID49IDExKQorCQkJbW1pb19iYXNlID0gMHgxZDgwMDA7CisJCWVsc2UKKwkJCW1taW9f YmFzZSA9IDB4MWEwMDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaWd0X3NraXAoIm1taW8g YmFzZSBub3Qga25vd25cbiIpOworCX0KKworCWZvciAoaW50IG4gPSAwOyBuIDwgQVJSQVlfU0la RShzcGluKTsgbisrKSB7CisJCWNvbnN0IHN0cnVjdCBpZ3Rfc3Bpbl9mYWN0b3J5IG9wdHMgPSB7 CisJCQkuY3R4ID0gY3JlYXRlX2hpZ2hlc3RfcHJpb3JpdHkoaTkxNSksCisJCQkuZW5naW5lID0g cmluZywKKwkJfTsKKwkJc3BpbltuXSA9IF9faWd0X3NwaW5fYmF0Y2hfZmFjdG9yeShpOTE1LCAm b3B0cyk7CisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgb3B0cy5jdHgpOworCX0KKworCWZv ciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmlvcml0aWVzKTsgaSsrKSB7CisJCXVpbnQz Ml90IGN0eCA9IGdlbV9xdWV1ZV9jcmVhdGUoaTkxNSk7CisJCWdlbV9jb250ZXh0X3NldF9wcmlv cml0eShpOTE1LCBjdHgsIHByaW9yaXRpZXNbaV0pOworCQloYW5kbGVbaV0gPSBzdG9yZV90aW1l c3RhbXAoaTkxNSwgY3R4LCByaW5nLCBtbWlvX2Jhc2UpOworCQlnZW1fY29udGV4dF9kZXN0cm95 KGk5MTUsIGN0eCk7CisJfQorCisJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpFKHNwaW4p OyBuKyspCisJCWlndF9zcGluX2JhdGNoX2ZyZWUoaTkxNSwgc3BpbltuXSk7CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpb3JpdGllcyk7IGkrKykgeworCQl1aW50MzJfdCAq cHRyOworCisJCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgaGFuZGxlW2ldLCA0MDk2LCBQUk9U X1JFQUQpOworCQlnZW1fc2V0X2RvbWFpbihpOTE1LCBoYW5kbGVbaV0sIC8qIG5vIHdyaXRlIGhh emFyZCBsaWVzISAqLworCQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RP TUFJTl9HVFQpOworCQlnZW1fY2xvc2UoaTkxNSwgaGFuZGxlW2ldKTsKKworCQloYW5kbGVbaV0g PSBwdHJbMTAyM107CisJCW11bm1hcChwdHIsIDQwOTYpOworCisJCWlndF9kZWJ1ZygiY3R4WyVk XSAucHJpbz0lZCwgdGltZXN0YW1wPSV1XG4iLAorCQkJICBpLCBwcmlvcml0aWVzW2ldLCBoYW5k bGVbaV0pOworCX0KKworCWlndF9hc3NlcnQoKGludDMyX3QpKGhhbmRsZVtISV0gLSBoYW5kbGVb TE9dKSA8IDApOworfQorCitzdGF0aWMgdm9pZCByZW9yZGVyKGludCBpOTE1LCB1bnNpZ25lZCBy aW5nLCB1bnNpZ25lZCBmbGFncykKKyNkZWZpbmUgRVFVQUwgMQoreworCUlHVF9DT1JLX0hBTkRM RShjb3JrKTsKKwl1aW50MzJfdCBzY3JhdGNoOworCXVpbnQzMl90ICpwdHI7CisJdWludDMyX3Qg Y3R4WzJdOworCXVpbnQzMl90IHBsdWc7CisKKwljdHhbTE9dID0gZ2VtX3F1ZXVlX2NyZWF0ZShp OTE1KTsKKwlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4W0xPXSwgTUlOX1BSSU8p OworCisJY3R4W0hJXSA9IGdlbV9xdWV1ZV9jcmVhdGUoaTkxNSk7CisJZ2VtX2NvbnRleHRfc2V0 X3ByaW9yaXR5KGk5MTUsIGN0eFtISV0sIGZsYWdzICYgRVFVQUwgPyBNSU5fUFJJTyA6IDApOwor CisJc2NyYXRjaCA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5Nik7CisJcGx1ZyA9IGlndF9jb3JrX3Bs dWcoJmNvcmssIGk5MTUpOworCisJLyogV2UgZXhwZWN0IHRoZSBoaWdoIHByaW9yaXR5IGNvbnRl eHQgdG8gYmUgZXhlY3V0ZWQgZmlyc3QsIGFuZAorCSAqIHNvIHRoZSBmaW5hbCByZXN1bHQgd2ls bCBiZSB2YWx1ZSBmcm9tIHRoZSBsb3cgcHJpb3JpdHkgY29udGV4dC4KKwkgKi8KKwlzdG9yZV9k d29yZChpOTE1LCBjdHhbTE9dLCByaW5nLCBzY3JhdGNoLCAwLCBjdHhbTE9dLCBwbHVnLCAwKTsK KwlzdG9yZV9kd29yZChpOTE1LCBjdHhbSEldLCByaW5nLCBzY3JhdGNoLCAwLCBjdHhbSEldLCBw bHVnLCAwKTsKKworCXVucGx1Z19zaG93X3F1ZXVlKGk5MTUsICZjb3JrLCByaW5nKTsKKwlnZW1f Y2xvc2UoaTkxNSwgcGx1Zyk7CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtMT10p OworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4W0hJXSk7CisKKwlwdHIgPSBnZW1fbW1h cF9fZ3R0KGk5MTUsIHNjcmF0Y2gsIDQwOTYsIFBST1RfUkVBRCk7CisJZ2VtX3NldF9kb21haW4o aTkxNSwgc2NyYXRjaCwgLyogbm8gd3JpdGUgaGF6YXJkIGxpZXMhICovCisJCSAgICAgICBJOTE1 X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwlnZW1fY2xvc2UoaTkxNSwg c2NyYXRjaCk7CisKKwlpZiAoZmxhZ3MgJiBFUVVBTCkgLyogZXF1YWwgcHJpb3JpdHksIHJlc3Vs dCB3aWxsIGJlIGZpZm8gKi8KKwkJaWd0X2Fzc2VydF9lcV91MzIocHRyWzBdLCBjdHhbSEldKTsK KwllbHNlCisJCWlndF9hc3NlcnRfZXFfdTMyKHB0clswXSwgY3R4W0xPXSk7CisJbXVubWFwKHB0 ciwgNDA5Nik7Cit9CisKK3N0YXRpYyB2b2lkIHByb21vdGlvbihpbnQgaTkxNSwgdW5zaWduZWQg cmluZykKK3sKKwlJR1RfQ09SS19IQU5ETEUoY29yayk7CisJdWludDMyX3QgcmVzdWx0LCBkZXA7 CisJdWludDMyX3QgKnB0cjsKKwl1aW50MzJfdCBjdHhbM107CisJdWludDMyX3QgcGx1ZzsKKwor CWN0eFtMT10gPSBnZW1fcXVldWVfY3JlYXRlKGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9wcmlv cml0eShpOTE1LCBjdHhbTE9dLCBNSU5fUFJJTyk7CisKKwljdHhbSEldID0gZ2VtX3F1ZXVlX2Ny ZWF0ZShpOTE1KTsKKwlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4W0hJXSwgMCk7 CisKKwljdHhbTk9JU0VdID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKKwlnZW1fY29udGV4dF9z ZXRfcHJpb3JpdHkoaTkxNSwgY3R4W05PSVNFXSwgTUlOX1BSSU8vMik7CisKKwlyZXN1bHQgPSBn ZW1fY3JlYXRlKGk5MTUsIDQwOTYpOworCWRlcCA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5Nik7CisK KwlwbHVnID0gaWd0X2NvcmtfcGx1ZygmY29yaywgaTkxNSk7CisKKwkvKiBFeHBlY3QgdGhhdCBI SSBwcm9tb3RlcyBMTywgc28gdGhlIG9yZGVyIHdpbGwgYmUgTE8sIEhJLCBOT0lTRS4KKwkgKgor CSAqIGZpZm8gd291bGQgYmUgTk9JU0UsIExPLCBISS4KKwkgKiBzdHJpY3QgcHJpb3JpdHkgd291 bGQgYmUgIEhJLCBOT0lTRSwgTE8KKwkgKi8KKwlzdG9yZV9kd29yZChpOTE1LCBjdHhbTk9JU0Vd LCByaW5nLCByZXN1bHQsIDAsIGN0eFtOT0lTRV0sIHBsdWcsIDApOworCXN0b3JlX2R3b3JkKGk5 MTUsIGN0eFtMT10sIHJpbmcsIHJlc3VsdCwgMCwgY3R4W0xPXSwgcGx1ZywgMCk7CisKKwkvKiBs aW5rIExPIDwtPiBISSB2aWEgYSBkZXBlbmRlbmN5IG9uIGFub3RoZXIgYnVmZmVyICovCisJc3Rv cmVfZHdvcmQoaTkxNSwgY3R4W0xPXSwgcmluZywgZGVwLCAwLCBjdHhbTE9dLCAwLCBJOTE1X0dF TV9ET01BSU5fSU5TVFJVQ1RJT04pOworCXN0b3JlX2R3b3JkKGk5MTUsIGN0eFtISV0sIHJpbmcs IGRlcCwgMCwgY3R4W0hJXSwgMCwgMCk7CisKKwlzdG9yZV9kd29yZChpOTE1LCBjdHhbSEldLCBy aW5nLCByZXN1bHQsIDAsIGN0eFtISV0sIDAsIDApOworCisJdW5wbHVnX3Nob3dfcXVldWUoaTkx NSwgJmNvcmssIHJpbmcpOworCWdlbV9jbG9zZShpOTE1LCBwbHVnKTsKKworCWdlbV9jb250ZXh0 X2Rlc3Ryb3koaTkxNSwgY3R4W05PSVNFXSk7CisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBj dHhbTE9dKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtISV0pOworCisJcHRyID0g Z2VtX21tYXBfX2d0dChpOTE1LCBkZXAsIDQwOTYsIFBST1RfUkVBRCk7CisJZ2VtX3NldF9kb21h aW4oaTkxNSwgZGVwLCAvKiBubyB3cml0ZSBoYXphcmQgbGllcyEgKi8KKwkJCUk5MTVfR0VNX0RP TUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCWdlbV9jbG9zZShpOTE1LCBkZXApOwor CisJaWd0X2Fzc2VydF9lcV91MzIocHRyWzBdLCBjdHhbSEldKTsKKwltdW5tYXAocHRyLCA0MDk2 KTsKKworCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgcmVzdWx0LCA0MDk2LCBQUk9UX1JFQUQp OworCWdlbV9zZXRfZG9tYWluKGk5MTUsIHJlc3VsdCwgLyogbm8gd3JpdGUgaGF6YXJkIGxpZXMh ICovCisJCQlJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwlnZW1f Y2xvc2UoaTkxNSwgcmVzdWx0KTsKKworCWlndF9hc3NlcnRfZXFfdTMyKHB0clswXSwgY3R4W05P SVNFXSk7CisJbXVubWFwKHB0ciwgNDA5Nik7Cit9CisKK3N0YXRpYyB2b2lkIHNtb2tldGVzdChp bnQgaTkxNSwgdW5zaWduZWQgcmluZywgdW5zaWduZWQgdGltZW91dCkKK3sKKwljb25zdCBpbnQg bmNwdXMgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKKwl1bnNpZ25lZCBlbmdpbmVz WzE2XTsKKwl1bnNpZ25lZCBuZW5naW5lOworCXVuc2lnbmVkIGVuZ2luZTsKKwl1aW50MzJfdCBz Y3JhdGNoOworCXVpbnQzMl90ICpwdHI7CisKKwluZW5naW5lID0gMDsKKwlmb3JfZWFjaF9lbmdp bmUoaTkxNSwgZW5naW5lKSB7CisJCWlmIChpZ25vcmVfZW5naW5lKGVuZ2luZSkpCisJCQljb250 aW51ZTsKKworCQllbmdpbmVzW25lbmdpbmUrK10gPSBlbmdpbmU7CisJfQorCWlndF9yZXF1aXJl KG5lbmdpbmUpOworCisJc2NyYXRjaCA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5Nik7CisJaWd0X2Zv cmsoY2hpbGQsIG5jcHVzKSB7CisJCXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOworCQl1aW50MzJf dCBjdHg7CisKKwkJaGFyc19wZXRydXNrYV9mNTRfMV9yYW5kb21fcGVydHVyYihjaGlsZCk7CisK KwkJY3R4ID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKKwkJaWd0X3VudGlsX3RpbWVvdXQodGlt ZW91dCkgeworCQkJaW50IHByaW87CisKKwkJCXByaW8gPSBoYXJzX3BldHJ1c2thX2Y1NF8xX3Jh bmRvbV91bnNhZmVfbWF4KE1BWF9QUklPIC0gTUlOX1BSSU8pICsgTUlOX1BSSU87CisJCQlnZW1f Y29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4LCBwcmlvKTsKKworCQkJZW5naW5lID0gZW5n aW5lc1toYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4KG5lbmdpbmUpXTsKKwkJ CXN0b3JlX2R3b3JkKGk5MTUsIGN0eCwgZW5naW5lLCBzY3JhdGNoLAorCQkJCSAgICA4KmNoaWxk ICsgMCwgfmNoaWxkLAorCQkJCSAgICAwLCAwKTsKKwkJCWZvciAodW5zaWduZWQgaW50IHN0ZXAg PSAwOyBzdGVwIDwgODsgc3RlcCsrKQorCQkJCXN0b3JlX2R3b3JkKGk5MTUsIGN0eCwgZW5naW5l LCBzY3JhdGNoLAorCQkJCQkgICAgOCpjaGlsZCArIDQsIGNvdW50KyssCisJCQkJCSAgICAwLCAw KTsKKwkJfQorCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisJfQorCWlndF93YWl0 Y2hpbGRyZW4oKTsKKworCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgc2NyYXRjaCwgNDA5Niwg UFJPVF9SRUFEKTsKKwlnZW1fc2V0X2RvbWFpbihpOTE1LCBzY3JhdGNoLCAvKiBubyB3cml0ZSBo YXphcmQgbGllcyEgKi8KKwkJCUk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9H VFQpOworCWdlbV9jbG9zZShpOTE1LCBzY3JhdGNoKTsKKworCWZvciAodW5zaWduZWQgbiA9IDA7 IG4gPCBuY3B1czsgbisrKSB7CisJCWlndF9hc3NlcnRfZXFfdTMyKHB0clsyKm5dLCB+bik7CisJ CS8qCisJCSAqIE5vdGUgdGhpcyBjb3VudCBpcyBhcHByb3hpbWF0ZSBkdWUgdG8gdW5jb25zdHJh aW5lZAorCQkgKiBvcmRlcmluZyBvZiB0aGUgZHdvcmQgd3JpdGVzIGJldHdlZW4gZW5naW5lcy4K KwkJICoKKwkJICogVGFrZSB0aGUgcmVzdWx0IHdpdGggYSBwaW5jaCBvZiBzYWx0LgorCQkgKi8K KwkJaWd0X2luZm8oIkNoaWxkWyVkXSBjb21wbGV0ZWQgJXUgY3ljbGVzXG4iLCAgbiwgcHRyWzIq bisxXSk7CisJfQorCW11bm1hcChwdHIsIDQwOTYpOworfQorCitpZ3RfbWFpbgoreworCWNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lICplOworCWludCBpOTE1ID0gLTE7CisKKwlp Z3RfZml4dHVyZSB7CisJCWk5MTUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKwkJ aWd0X3JlcXVpcmVfZ2VtKGk5MTUpOworCX0KKworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0 X2ZpeHR1cmUgeworCQkJaWd0X3JlcXVpcmUoZ2VtX2NvbnRleHRzX2hhc19zaGFyZWRfZ3R0KGk5 MTUpKTsKKwkJCWlndF9mb3JrX2hhbmdfZGV0ZWN0b3IoaTkxNSk7CisJCX0KKworCQlpZ3Rfc3Vi dGVzdCgiY3JlYXRlLXNoYXJlZC1ndHQiKQorCQkJY3JlYXRlX3NoYXJlZF9ndHQoaTkxNSwgMCk7 CisKKwkJaWd0X3N1YnRlc3QoImRldGFjaGVkLXNoYXJlZC1ndHQiKQorCQkJY3JlYXRlX3NoYXJl ZF9ndHQoaTkxNSwgREVUQUNIRUQpOworCisJCWlndF9zdWJ0ZXN0KCJkaXNqb2ludC10aW1lbGlu ZXMiKQorCQkJZGlzam9pbnRfdGltZWxpbmVzKGk5MTUpOworCisJCWlndF9zdWJ0ZXN0KCJzaW5n bGUtdGltZWxpbmUiKQorCQkJc2luZ2xlX3RpbWVsaW5lKGk5MTUpOworCisJCWlndF9zdWJ0ZXN0 KCJleGhhdXN0LXNoYXJlZC1ndHQiKQorCQkJZXhoYXVzdF9zaGFyZWRfZ3R0KGk5MTUsIDApOwor CisJCWlndF9zdWJ0ZXN0KCJleGhhdXN0LXNoYXJlZC1ndHQtbHJjIikKKwkJCWV4aGF1c3Rfc2hh cmVkX2d0dChpOTE1LCBFWEhBVVNUX0xSQyk7CisKKwkJZm9yIChlID0gaW50ZWxfZXhlY3V0aW9u X2VuZ2luZXM7IGUtPm5hbWU7IGUrKykgeworCQkJaWd0X3N1YnRlc3RfZigiZXhlYy1zaGFyZWQt Z3R0LSVzIiwgZS0+bmFtZSkKKwkJCQlleGVjX3NoYXJlZF9ndHQoaTkxNSwgZS0+ZXhlY19pZCB8 IGUtPmZsYWdzKTsKKworCQkJaWYgKCFpZ25vcmVfZW5naW5lKGUtPmV4ZWNfaWQgfCBlLT5mbGFn cykpIHsKKwkJCQlpZ3Rfc3VidGVzdF9mKCJleGVjLXNpbmdsZS10aW1lbGluZS0lcyIsCisJCQkJ CSAgICAgIGUtPm5hbWUpCisJCQkJCWV4ZWNfc2luZ2xlX3RpbWVsaW5lKGk5MTUsCisJCQkJCQkJ ICAgICBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpOworCQkJfQorCisJCQkvKgorCQkJICogQ2hlY2sg dGhhdCB0aGUgc2hhcmVkIGNvbnRleHRzIG9wZXJhdGUgaW5kZXBlbmRlbnRseSwKKwkJCSAqIHRo YXQgaXMgcmVxdWVzdHMgb24gb25lICgicXVldWUiKSBjYW4gYmUgc2NoZWR1bGVkCisJCQkgKiBh cm91bmQgYW5vdGhlciBxdWV1ZS4gV2Ugb25seSBjaGVjayB0aGUgYmFzaWNzIGhlcmUsCisJCQkg KiBlbm91Z2ggdG8gcmVkdWNlIHRoZSBxdWV1ZSBpbnRvIGp1c3QgYW5vdGhlciBjb250ZXh0LAor CQkJICogYW5kIHNvIHJlbHkgb24gZ2VtX2V4ZWNfc2NoZWR1bGUgdG8gcHJvdmUgdGhlIHJlc3Qu CisJCQkgKi8KKwkJCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJCQlpZ3RfZml4dHVyZSB7CisJCQkJ CWdlbV9yZXF1aXJlX3JpbmcoaTkxNSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzKTsKKwkJCQkJaWd0 X3JlcXVpcmUoZ2VtX2Nhbl9zdG9yZV9kd29yZChpOTE1LCBlLT5leGVjX2lkKSB8IGUtPmZsYWdz KTsKKwkJCQkJaWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9lbmFibGVkKGk5MTUpKTsKKwkJCQkJ aWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9oYXNfY3R4X3ByaW9yaXR5KGk5MTUpKTsKKwkJCQl9 CisKKwkJCQlpZ3Rfc3VidGVzdF9mKCJRLWluZGVwZW5kZW50LSVzIiwgZS0+bmFtZSkKKwkJCQkJ aW5kZXBlbmRlbnQoaTkxNSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCAwKTsKKworCQkJCWlndF9z dWJ0ZXN0X2YoIlEtaW4tb3JkZXItJXMiLCBlLT5uYW1lKQorCQkJCQlyZW9yZGVyKGk5MTUsIGUt PmV4ZWNfaWQgfCBlLT5mbGFncywgRVFVQUwpOworCisJCQkJaWd0X3N1YnRlc3RfZigiUS1vdXQt b3JkZXItJXMiLCBlLT5uYW1lKQorCQkJCQlyZW9yZGVyKGk5MTUsIGUtPmV4ZWNfaWQgfCBlLT5m bGFncywgMCk7CisKKwkJCQlpZ3Rfc3VidGVzdF9mKCJRLXByb21vdGlvbi0lcyIsIGUtPm5hbWUp CisJCQkJCXByb21vdGlvbihpOTE1LCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpOworCisJCQkJaWd0 X3N1YnRlc3RfZigiUS1zbW9rZXRlc3QtJXMiLCBlLT5uYW1lKQorCQkJCQlzbW9rZXRlc3QoaTkx NSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCA1KTsKKwkJCX0KKwkJfQorCisJCWlndF9zdWJ0ZXN0 KCJRLXNtb2tldGVzdC1hbGwiKSB7CisJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2VuYWJs ZWQoaTkxNSkpOworCQkJaWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9oYXNfY3R4X3ByaW9yaXR5 KGk5MTUpKTsKKwkJCXNtb2tldGVzdChpOTE1LCAtMSwgMzApOworCQl9CisKKwkJaWd0X2ZpeHR1 cmUgeworCQkJaWd0X3N0b3BfaGFuZ19kZXRlY3RvcigpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0 IGEvdGVzdHMvaTkxNS9nZW1fZXhlY193aGlzcGVyLmMgYi90ZXN0cy9pOTE1L2dlbV9leGVjX3do aXNwZXIuYwppbmRleCA2YzNiNTM3NTYuLmQzZTBiMGJhMiAxMDA2NDQKLS0tIGEvdGVzdHMvaTkx NS9nZW1fZXhlY193aGlzcGVyLmMKKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhlY193aGlzcGVyLmMK QEAgLTg3LDYgKzg3LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3JlbG9jKGludCBmZCwgdWludDMy X3QgaGFuZGxlLAogI2RlZmluZSBIQU5HIDB4MjAKICNkZWZpbmUgU1lOQyAweDQwCiAjZGVmaW5l IFBSSU9SSVRZIDB4ODAKKyNkZWZpbmUgUVVFVUVTIDB4MTAwCiAKIHN0cnVjdCBoYW5nIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmo7CkBAIC0xNzEsNyArMTcyLDcgQEAg c3RhdGljIHZvaWQgY3R4X3NldF9yYW5kb21fcHJpb3JpdHkoaW50IGZkLCB1aW50MzJfdCBjdHgp CiB7CiAJaW50IHByaW8gPSBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4KDEw MjQpIC0gNTEyOwogCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4LCBwcmlvKTsKLX07 Cit9CiAKIHN0YXRpYyB2b2lkIHdoaXNwZXIoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2ln bmVkIGZsYWdzKQogewpAQCAtMjI2LDYgKzIyNyw5IEBAIHN0YXRpYyB2b2lkIHdoaXNwZXIoaW50 IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2lnbmVkIGZsYWdzKQogCWlmIChmbGFncyAmIENPTlRF WFRTKQogCQlnZW1fcmVxdWlyZV9jb250ZXh0cyhmZCk7CiAKKwlpZiAoZmxhZ3MgJiBRVUVVRVMp CisJCWlndF9yZXF1aXJlKGdlbV9oYXNfcXVldWVzKGZkKSk7CisKIAlpZiAoZmxhZ3MgJiBIQU5H KQogCQlpbml0X2hhbmcoJmhhbmcpOwogCkBAIC0yOTAsNiArMjk0LDEwIEBAIHN0YXRpYyB2b2lk IHdoaXNwZXIoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2lnbmVkIGZsYWdzKQogCQkJZm9y IChuID0gMDsgbiA8IDY0OyBuKyspCiAJCQkJY29udGV4dHNbbl0gPSBnZW1fY29udGV4dF9jcmVh dGUoZmQpOwogCQl9CisJCWlmIChmbGFncyAmIFFVRVVFUykgeworCQkJZm9yIChuID0gMDsgbiA8 IDY0OyBuKyspCisJCQkJY29udGV4dHNbbl0gPSBnZW1fcXVldWVfY3JlYXRlKGZkKTsKKwkJfQog CQlpZiAoZmxhZ3MgJiBGRFMpIHsKIAkJCWZvciAobiA9IDA7IG4gPCA2NDsgbisrKQogCQkJCWZk c1tuXSA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwpAQCAtNDAzLDcgKzQxMSw3IEBA IHN0YXRpYyB2b2lkIHdoaXNwZXIoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2lnbmVkIGZs YWdzKQogCQkJCQkJZXhlY2J1Zi5mbGFncyAmPSB+RU5HSU5FX01BU0s7CiAJCQkJCQlleGVjYnVm LmZsYWdzIHw9IGVuZ2luZXNbcmFuZCgpICUgbmVuZ2luZV07CiAJCQkJCX0KLQkJCQkJaWYgKGZs YWdzICYgQ09OVEVYVFMpIHsKKwkJCQkJaWYgKGZsYWdzICYgKENPTlRFWFRTIHwgUVVFVUVTKSkg ewogCQkJCQkJZXhlY2J1Zi5yc3ZkMSA9IGNvbnRleHRzW3JhbmQoKSAlIDY0XTsKIAkJCQkJCWlm IChmbGFncyAmIFBSSU9SSVRZKQogCQkJCQkJCWN0eF9zZXRfcmFuZG9tX3ByaW9yaXR5KHRoaXNf ZmQsIGV4ZWNidWYucnN2ZDEpOwpAQCAtNDg2LDcgKzQ5NCw3IEBAIHN0YXRpYyB2b2lkIHdoaXNw ZXIoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2lnbmVkIGZsYWdzKQogCQkJZm9yIChuID0g MDsgbiA8IDY0OyBuKyspCiAJCQkJY2xvc2UoZmRzW25dKTsKIAkJfQotCQlpZiAoZmxhZ3MgJiBD T05URVhUUykgeworCQlpZiAoZmxhZ3MgJiAoQ09OVEVYVFMgfCBRVUVVRVMpKSB7CiAJCQlmb3Ig KG4gPSAwOyBuIDwgNjQ7IG4rKykKIAkJCQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjb250ZXh0 c1tuXSk7CiAJCX0KQEAgLTUyMiwxOCArNTMwLDI0IEBAIGlndF9tYWluCiAJCXsgImNoYWluLWZv cmtlZCIsIENIQUlOIHwgRk9SS0VEIH0sCiAJCXsgImNoYWluLWludGVycnVwdGlibGUiLCBDSEFJ TiB8IElOVEVSUlVQVElCTEUgfSwKIAkJeyAiY2hhaW4tc3luYyIsIENIQUlOIHwgU1lOQyB9LAot CQl7ICJjb250ZXh0cyIsIENPTlRFWFRTIH0sCi0JCXsgImNvbnRleHRzLWludGVycnVwdGlibGUi LCBDT05URVhUUyB8IElOVEVSUlVQVElCTEV9LAotCQl7ICJjb250ZXh0cy1mb3JrZWQiLCBDT05U RVhUUyB8IEZPUktFRH0sCi0JCXsgImNvbnRleHRzLXByaW9yaXR5IiwgQ09OVEVYVFMgfCBGT1JL RUQgfCBQUklPUklUWSB9LAotCQl7ICJjb250ZXh0cy1jaGFpbiIsIENPTlRFWFRTIHwgQ0hBSU4g fSwKLQkJeyAiY29udGV4dHMtc3luYyIsIENPTlRFWFRTIHwgU1lOQyB9LAogCQl7ICJmZHMiLCBG RFMgfSwKIAkJeyAiZmRzLWludGVycnVwdGlibGUiLCBGRFMgfCBJTlRFUlJVUFRJQkxFfSwKIAkJ eyAiZmRzLWZvcmtlZCIsIEZEUyB8IEZPUktFRH0sCiAJCXsgImZkcy1wcmlvcml0eSIsIEZEUyB8 IEZPUktFRCB8IFBSSU9SSVRZIH0sCiAJCXsgImZkcy1jaGFpbiIsIEZEUyB8IENIQUlOfSwKIAkJ eyAiZmRzLXN5bmMiLCBGRFMgfCBTWU5DfSwKKwkJeyAiY29udGV4dHMiLCBDT05URVhUUyB9LAor CQl7ICJjb250ZXh0cy1pbnRlcnJ1cHRpYmxlIiwgQ09OVEVYVFMgfCBJTlRFUlJVUFRJQkxFfSwK KwkJeyAiY29udGV4dHMtZm9ya2VkIiwgQ09OVEVYVFMgfCBGT1JLRUR9LAorCQl7ICJjb250ZXh0 cy1wcmlvcml0eSIsIENPTlRFWFRTIHwgRk9SS0VEIHwgUFJJT1JJVFkgfSwKKwkJeyAiY29udGV4 dHMtY2hhaW4iLCBDT05URVhUUyB8IENIQUlOIH0sCisJCXsgImNvbnRleHRzLXN5bmMiLCBDT05U RVhUUyB8IFNZTkMgfSwKKwkJeyAicXVldWVzIiwgUVVFVUVTIH0sCisJCXsgInF1ZXVlcy1pbnRl cnJ1cHRpYmxlIiwgUVVFVUVTIHwgSU5URVJSVVBUSUJMRX0sCisJCXsgInF1ZXVlcy1mb3JrZWQi LCBRVUVVRVMgfCBGT1JLRUR9LAorCQl7ICJxdWV1ZXMtcHJpb3JpdHkiLCBRVUVVRVMgfCBGT1JL RUQgfCBQUklPUklUWSB9LAorCQl7ICJxdWV1ZXMtY2hhaW4iLCBRVUVVRVMgfCBDSEFJTiB9LAor CQl7ICJxdWV1ZXMtc3luYyIsIFFVRVVFUyB8IFNZTkMgfSwKIAkJeyBOVUxMIH0KIAl9OwogCWlu dCBmZDsKZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQK aW5kZXggN2MxOTRjM2UzLi5lMDA1Yzc5YzQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxk CisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBAIC0xMTMsNiArMTEzLDcgQEAgaTkxNV9wcm9ncyA9 IFsKIAknZ2VtX2N0eF9leGVjJywKIAknZ2VtX2N0eF9pc29sYXRpb24nLAogCSdnZW1fY3R4X3Bh cmFtJywKKwknZ2VtX2N0eF9zaGFyZWQnLAogCSdnZW1fY3R4X3N3aXRjaCcsCiAJJ2dlbV9jdHhf dGhyYXNoJywKIAknZ2VtX2RvdWJsZV9pcnFfbG9vcCcsCi0tIAoyLjIwLjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0 CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==