From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t 03/12] i915/gem_ctx_create: Basic checks for constructor properties Date: Thu, 23 May 2019 14:41:30 +0100 Message-ID: <3b06c89b-1e6d-eeca-d83c-ee2cf3f2776a@linux.intel.com> References: <20190522113712.23512-1-chris@chris-wilson.co.uk> <20190522113712.23512-3-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190522113712.23512-3-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDIyLzA1LzIwMTkgMTI6MzcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBDaGVjayB0aGF0IHRo ZSBleHRlbmRlZCBjcmVhdGUgaW50ZXJmYWNlIGFjY2VwdHMgc2V0cGFyYW0uCj4gCj4gU2lnbmVk LW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4g ICB0ZXN0cy9pOTE1L2dlbV9jdHhfY3JlYXRlLmMgfCAyMjUgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tCj4gICAxIGZpbGUgY2hhbmdlZCwgMjEzIGluc2VydGlvbnMoKyksIDEy IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9jdHhfY3JlYXRl LmMgYi90ZXN0cy9pOTE1L2dlbV9jdHhfY3JlYXRlLmMKPiBpbmRleCBhNjY0MDcwZGIuLjliNGZk ZGJlNyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9pOTE1L2dlbV9jdHhfY3JlYXRlLmMKPiArKysgYi90 ZXN0cy9pOTE1L2dlbV9jdHhfY3JlYXRlLmMKPiBAQCAtMzMsNiArMzMsNyBAQAo+ICAgI2luY2x1 ZGUgPHRpbWUuaD4KPiAgIAo+ICAgI2luY2x1ZGUgImlndF9yYW5kLmgiCj4gKyNpbmNsdWRlICJz d19zeW5jLmgiCj4gICAKPiAgICNkZWZpbmUgTE9DQUxfSTkxNV9FWEVDX0JTRF9TSElGVCAgICAg ICgxMykKPiAgICNkZWZpbmUgTE9DQUxfSTkxNV9FWEVDX0JTRF9NQVNLICAgICAgICgzIDw8IExP Q0FMX0k5MTVfRVhFQ19CU0RfU0hJRlQpCj4gQEAgLTQ1LDEyICs0NiwzMyBAQCBzdGF0aWMgdW5z aWduZWQgYWxsX25lbmdpbmU7Cj4gICBzdGF0aWMgdW5zaWduZWQgcHBndHRfZW5naW5lc1sxNl07 Cj4gICBzdGF0aWMgdW5zaWduZWQgcHBndHRfbmVuZ2luZTsKPiAgIAo+IC1zdGF0aWMgaW50IF9f Z2VtX2NvbnRleHRfY3JlYXRlX2xvY2FsKGludCBmZCwgc3RydWN0IGRybV9pOTE1X2dlbV9jb250 ZXh0X2NyZWF0ZSAqYXJnKQo+ICtzdGF0aWMgaW50IGNyZWF0ZV9pb2N0bChpbnQgZmQsIHN0cnVj dCBkcm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGUgKmFyZykKPiAgIHsKPiAtCWludCByZXQgPSAw Owo+IC0JaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9DUkVBVEUs IGFyZykpCj4gLQkJcmV0ID0gLWVycm5vOwo+IC0JcmV0dXJuIHJldDsKPiArCWludCBlcnI7Cj4g Kwo+ICsJZXJyID0gMDsKPiArCWlmIChpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9D T05URVhUX0NSRUFURSwgYXJnKSkgewo+ICsJCWVyciA9IC1lcnJubzsKPiArCQlpZ3RfYXNzZXJ0 KGVycik7Cj4gKwl9Cj4gKwo+ICsJZXJybm8gPSAwOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsK PiArc3RhdGljIGludCBjcmVhdGVfZXh0X2lvY3RsKGludCBpOTE1LAo+ICsJCQkgICAgc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHQgKmFyZykKPiArewo+ICsJaW50IGVycjsK PiArCj4gKwllcnIgPSAwOwo+ICsJaWYgKGlndF9pb2N0bChpOTE1LCBEUk1fSU9DVExfSTkxNV9H RU1fQ09OVEVYVF9DUkVBVEVfRVhULCBhcmcpKSB7Cj4gKwkJZXJyID0gLWVycm5vOwo+ICsJCWln dF9hc3N1bWUoZXJyKTsKPiArCX0KPiArCj4gKwllcnJubyA9IDA7Cj4gKwlyZXR1cm4gZXJyOwo+ ICAgfQo+ICAgCj4gICBzdGF0aWMgZG91YmxlIGVsYXBzZWQoY29uc3Qgc3RydWN0IHRpbWVzcGVj ICpzdGFydCwKPiBAQCAtMzA4LDYgKzMzMCwxODcgQEAgc3RhdGljIHZvaWQgbWF4aW11bShpbnQg ZmQsIGludCBuY3B1cywgdW5zaWduZWQgbW9kZSkKPiAgIAlmcmVlKGNvbnRleHRzKTsKPiAgIH0K PiAgIAo+ICtzdGF0aWMgdm9pZCBiYXNpY19leHRfcGFyYW0oaW50IGk5MTUpCj4gK3sKPiArCXN0 cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGVfZXh0X3NldHBhcmFtIGV4dCA9IHsKPiAr CQl7IC5uYW1lID0gSTkxNV9DT05URVhUX0NSRUFURV9FWFRfU0VUUEFSQU0gfSwKPiArCX07Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2V4dCBjcmVhdGUgPSB7Cj4gKwkJ LmZsYWdzID0gSTkxNV9DT05URVhUX0NSRUFURV9GTEFHU19VU0VfRVhURU5TSU9OUwo+ICsJfTsK PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBnZXQ7Cj4gKwo+ICsJaWd0X3Jl cXVpcmUoY3JlYXRlX2V4dF9pb2N0bChpOTE1LCAmY3JlYXRlKSA9PSAwKTsKPiArCWdlbV9jb250 ZXh0X2Rlc3Ryb3koaTkxNSwgY3JlYXRlLmN0eF9pZCk7Cj4gKwo+ICsJY3JlYXRlLmV4dGVuc2lv bnMgPSAtMXVsbDsKPiArCWlndF9hc3NlcnRfZXEoY3JlYXRlX2V4dF9pb2N0bChpOTE1LCAmY3Jl YXRlKSwgLUVGQVVMVCk7Cj4gKwo+ICsJY3JlYXRlLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50 ZXIoJmV4dCk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKGNyZWF0ZV9leHRfaW9jdGwoaTkxNSwgJmNyZWF0 ZSksIC1FSU5WQUwpOwoKSGVyZSBJIHdhbnRlZCBqdXN0IG9uZSBtb3JlIHRlc3QgdG8gY2hlY2sg Zm9yIC1FSU5WQUwgd2l0aCBub24temVybyAKZXh0LmN0eF9pZC4KCldpdGggdGhhdDoKClJldmll d2VkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgoKUmVnYXJk cywKClR2cnRrbwoKPiArCj4gKwlleHQucGFyYW0ucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1f UFJJT1JJVFk7Cj4gKwlpZiAoY3JlYXRlX2V4dF9pb2N0bChpOTE1LCAmY3JlYXRlKSAhPSAtRU5P REVWKSB7Cj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjcmVhdGUuY3R4X2lkKTsKPiAr Cj4gKwkJZXh0LmJhc2UubmV4dF9leHRlbnNpb24gPSAtMXVsbDsKPiArCQlpZ3RfYXNzZXJ0X2Vx KGNyZWF0ZV9leHRfaW9jdGwoaTkxNSwgJmNyZWF0ZSksIC1FRkFVTFQpOwo+ICsJCWV4dC5iYXNl Lm5leHRfZXh0ZW5zaW9uID0gdG9fdXNlcl9wb2ludGVyKCZleHQpOwo+ICsJCWlndF9hc3NlcnRf ZXEoY3JlYXRlX2V4dF9pb2N0bChpOTE1LCAmY3JlYXRlKSwgLUUyQklHKTsKPiArCQlleHQuYmFz ZS5uZXh0X2V4dGVuc2lvbiA9IDA7Cj4gKwo+ICsJCWV4dC5wYXJhbS52YWx1ZSA9IDMyOwo+ICsJ CWlndF9hc3NlcnRfZXEoY3JlYXRlX2V4dF9pb2N0bChpOTE1LCAmY3JlYXRlKSwgMCk7Cj4gKwo+ ICsJCW1lbXNldCgmZ2V0LCAwLCBzaXplb2YoZ2V0KSk7Cj4gKwkJZ2V0LmN0eF9pZCA9IGNyZWF0 ZS5jdHhfaWQ7Cj4gKwkJZ2V0LnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1BSSU9SSVRZOwo+ ICsJCWdlbV9jb250ZXh0X2dldF9wYXJhbShpOTE1LCAmZ2V0KTsKPiArCQlpZ3RfYXNzZXJ0X2Vx KGdldC52YWx1ZSwgZXh0LnBhcmFtLnZhbHVlKTsKPiArCj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJv eShpOTE1LCBjcmVhdGUuY3R4X2lkKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2hl Y2tfc2luZ2xlX3RpbWVsaW5lKGludCBpOTE1LCB1aW50MzJfdCBjdHgsIGludCBudW1fZW5naW5l cykKPiArewo+ICsjZGVmaW5lIFJDU19USU1FU1RBTVAgKDB4MjAwMCArIDB4MzU4KQo+ICsJY29u c3QgaW50IGdlbiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKTsKPiArCWNv bnN0IGludCBoYXNfNjRiaXRfcmVsb2MgPSBnZW4gPj0gODsKPiArCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY19vYmplY3QyIHJlc3VsdHMgPSB7IC5oYW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQw OTYpIH07Cj4gKwljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJ aW50IHRpbWVsaW5lID0gc3dfc3luY190aW1lbGluZV9jcmVhdGUoKTsKPiArCXVpbnQzMl90IGxh c3QsICptYXA7Cj4gKwo+ICsJewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIg ZXhlY2J1ZiA9IHsKPiArCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZyZXN1bHRz KSwKPiArCQkJLmJ1ZmZlcl9jb3VudCA9IDEsCj4gKwkJCS5yc3ZkMSA9IGN0eCwKPiArCQl9Owo+ ICsJCWdlbV93cml0ZShpOTE1LCByZXN1bHRzLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkp Owo+ICsJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPiArCQlyZXN1bHRzLmZsYWdzID0g RVhFQ19PQkpFQ1RfUElOTkVEOwo+ICsJfQo+ICsKPiArCWZvciAoaW50IGkgPSAwOyBpIDwgbnVt X2VuZ2luZXM7IGkrKykgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9i alsyXSA9IHsKPiArCQkJcmVzdWx0cywgLyogd3JpdGUgaGF6YXJkIGxpZXMhICovCj4gKwkJCXsg LmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkxNSwgNDA5NikgfSwKPiArCQl9Owo+ICsJCXN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKPiArCQkJLmJ1ZmZlcnNfcHRyID0g dG9fdXNlcl9wb2ludGVyKG9iaiksCj4gKwkJCS5idWZmZXJfY291bnQgPSAyLAo+ICsJCQkucnN2 ZDEgPSBjdHgsCj4gKwkJCS5yc3ZkMiA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlX2ZlbmNlKHRp bWVsaW5lLCBudW1fZW5naW5lcyAtIGkpLAo+ICsJCQkuZmxhZ3MgPSBpIHwgSTkxNV9FWEVDX0ZF TkNFX0lOLAo+ICsJCX07Cj4gKwkJdWludDY0X3Qgb2Zmc2V0ID0gcmVzdWx0cy5vZmZzZXQgKyA0 ICogaTsKPiArCQl1aW50MzJfdCAqY3M7Cj4gKwkJaW50IGogPSAwOwo+ICsKPiArCQljcyA9IGdl bV9tbWFwX19jcHUoaTkxNSwgb2JqWzFdLmhhbmRsZSwgMCwgNDA5NiwgUFJPVF9XUklURSk7Cj4g Kwo+ICsJCWNzW2pdID0gMHgyNCA8PCAyMyB8IDE7IC8qIFNSTSAqLwo+ICsJCWlmIChoYXNfNjRi aXRfcmVsb2MpCj4gKwkJCWNzW2pdKys7Cj4gKwkJaisrOwo+ICsJCWNzW2orK10gPSBSQ1NfVElN RVNUQU1QOwo+ICsJCWNzW2orK10gPSBvZmZzZXQ7Cj4gKwkJaWYgKGhhc182NGJpdF9yZWxvYykK PiArCQkJY3NbaisrXSA9IG9mZnNldCA+PiAzMjsKPiArCQljc1tqKytdID0gTUlfQkFUQ0hfQlVG RkVSX0VORDsKPiArCj4gKwkJbXVubWFwKGNzLCA0MDk2KTsKPiArCj4gKwkJZ2VtX2V4ZWNidWYo aTkxNSwgJmV4ZWNidWYpOwo+ICsJCWdlbV9jbG9zZShpOTE1LCBvYmpbMV0uaGFuZGxlKTsKPiAr CQljbG9zZShleGVjYnVmLnJzdmQyKTsKPiArCX0KPiArCWNsb3NlKHRpbWVsaW5lKTsKPiArCWdl bV9zeW5jKGk5MTUsIHJlc3VsdHMuaGFuZGxlKTsKPiArCj4gKwltYXAgPSBnZW1fbW1hcF9fY3B1 KGk5MTUsIHJlc3VsdHMuaGFuZGxlLCAwLCA0MDk2LCBQUk9UX1JFQUQpOwo+ICsJZ2VtX3NldF9k b21haW4oaTkxNSwgcmVzdWx0cy5oYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9DUFUsIDApOwo+ICsJ Z2VtX2Nsb3NlKGk5MTUsIHJlc3VsdHMuaGFuZGxlKTsKPiArCj4gKwlsYXN0ID0gbWFwWzBdOwo+ ICsJZm9yIChpbnQgaSA9IDE7IGkgPCBudW1fZW5naW5lczsgaSsrKSB7Cj4gKwkJaWd0X2Fzc2Vy dF9mKChtYXBbaV0gLSBsYXN0KSA+IDAsCj4gKwkJCSAgICAgIkVuZ2luZSBpbnN0YW5jZSBbJWRd IGV4ZWN1dGVkIHRvbyBlYXJseTogdGhpczoleCwgbGFzdDoleFxuIiwKPiArCQkJICAgICBpLCBt YXBbaV0sIGxhc3QpOwo+ICsJCWxhc3QgPSBtYXBbaV07Cj4gKwl9Cj4gKwltdW5tYXAobWFwLCA0 MDk2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXJpc19waXBlbGluZShpbnQgaTkxNSkKPiAr ewo+ICsjaWZkZWYgSTkxNV9ERUZJTkVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTCj4gKyNkZWZpbmUg UkNTMCB7MCwgMH0KPiArCUk5MTVfREVGSU5FX0NPTlRFWFRfUEFSQU1fRU5HSU5FUyhlbmdpbmVz LCAyKSA9IHsKPiArCQkuZW5naW5lcyA9IHsgUkNTMCwgUkNTMCB9Cj4gKwl9Owo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHRfc2V0cGFyYW0gcF9lbmdpbmVzID0gewo+ ICsJCS5iYXNlID0gewo+ICsJCQkubmFtZSA9IEk5MTVfQ09OVEVYVF9DUkVBVEVfRVhUX1NFVFBB UkFNLAo+ICsJCQkubmV4dF9leHRlbnNpb24gPSAwLCAvKiBlbmQgb2YgY2hhaW4gKi8KPiArCQl9 LAo+ICsJCS5wYXJhbSA9IHsKPiArCQkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX0VOR0lO RVMsCj4gKwkJCS52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmZW5naW5lcyksCj4gKwkJCS5zaXpl ID0gc2l6ZW9mKGVuZ2luZXMpLAo+ICsJCX0sCj4gKwl9Owo+ICsJc3RydWN0IGRybV9pOTE1X2dl bV9jb250ZXh0X2NyZWF0ZV9leHRfc2V0cGFyYW0gcF9yZWNvdmVyID0gewo+ICsJCS5iYXNlID0g ewo+ICsJCQkubmFtZSA9STkxNV9DT05URVhUX0NSRUFURV9FWFRfU0VUUEFSQU0sCj4gKwkJCS5u ZXh0X2V4dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcigmcF9lbmdpbmVzKSwKPiArCQl9LAo+ICsJ CS5wYXJhbSA9IHsKPiArCQkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1JFQ09WRVJBQkxF LAo+ICsJCQkudmFsdWUgPSAwLAo+ICsJCX0sCj4gKwl9Owo+ICsJc3RydWN0IGRybV9pOTE1X2dl bV9jb250ZXh0X2NyZWF0ZV9leHRfc2V0cGFyYW0gcF9wcmlvID0gewo+ICsJCS5iYXNlID0gewo+ ICsJCQkubmFtZSA9STkxNV9DT05URVhUX0NSRUFURV9FWFRfU0VUUEFSQU0sCj4gKwkJCS5uZXh0 X2V4dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcigmcF9yZWNvdmVyKSwKPiArCQl9LAo+ICsJCS5w YXJhbSA9IHsKPiArCQkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1BSSU9SSVRZLAo+ICsJ CQkudmFsdWUgPSA3NjgsCj4gKwkJfSwKPiArCX07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2Nv bnRleHRfY3JlYXRlX2V4dCBjcmVhdGUgPSB7Cj4gKwkJLmZsYWdzID0gKEk5MTVfQ09OVEVYVF9D UkVBVEVfRkxBR1NfU0lOR0xFX1RJTUVMSU5FIHwKPiArCQkJICBJOTE1X0NPTlRFWFRfQ1JFQVRF X0ZMQUdTX1VTRV9FWFRFTlNJT05TKSwKPiArCX07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2Nv bnRleHRfcGFyYW0gZ2V0Owo+ICsKPiArCWlndF9yZXF1aXJlKGNyZWF0ZV9leHRfaW9jdGwoaTkx NSwgJmNyZWF0ZSkgPT0gMCk7Cj4gKwo+ICsJY3JlYXRlLmV4dGVuc2lvbnMgPSB0b191c2VyX3Bv aW50ZXIoJnBfcHJpbyk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKGNyZWF0ZV9leHRfaW9jdGwoaTkxNSwg JmNyZWF0ZSksIDApOwo+ICsKPiArCW1lbXNldCgmZ2V0LCAwLCBzaXplb2YoZ2V0KSk7Cj4gKwln ZXQuY3R4X2lkID0gY3JlYXRlLmN0eF9pZDsKPiArCWdldC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9Q QVJBTV9QUklPUklUWTsKPiArCWdlbV9jb250ZXh0X2dldF9wYXJhbShpOTE1LCAmZ2V0KTsKPiAr CWlndF9hc3NlcnRfZXEoZ2V0LnZhbHVlLCBwX3ByaW8ucGFyYW0udmFsdWUpOwo+ICsKPiArCW1l bXNldCgmZ2V0LCAwLCBzaXplb2YoZ2V0KSk7Cj4gKwlnZXQuY3R4X2lkID0gY3JlYXRlLmN0eF9p ZDsKPiArCWdldC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9SRUNPVkVSQUJMRTsKPiArCWdl bV9jb250ZXh0X2dldF9wYXJhbShpOTE1LCAmZ2V0KTsKPiArCWlndF9hc3NlcnRfZXEoZ2V0LnZh bHVlLCAwKTsKPiArCj4gKwljaGVja19zaW5nbGVfdGltZWxpbmUoaTkxNSwgY3JlYXRlLmN0eF9p ZCwgMik7Cj4gKwo+ICsJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjcmVhdGUuY3R4X2lkKTsK PiArI2VuZGlmIC8qIEk5MTVfREVGSU5FX0NPTlRFWFRfUEFSQU1fRU5HSU5FUyAqLwo+ICt9Cj4g Kwo+ICAgaWd0X21haW4KPiAgIHsKPiAgIAljb25zdCBpbnQgbmNwdXMgPSBzeXNjb25mKF9TQ19O UFJPQ0VTU09SU19PTkxOKTsKPiBAQCAtMzQwLDE3ICs1NDMsMTUgQEAgaWd0X21haW4KPiAgIAkJ bWVtc2V0KCZjcmVhdGUsIDAsIHNpemVvZihjcmVhdGUpKTsKPiAgIAkJY3JlYXRlLmN0eF9pZCA9 IHJhbmQoKTsKPiAgIAkJY3JlYXRlLnBhZCA9IDA7Cj4gLQkJaWd0X2Fzc2VydF9lcShfX2dlbV9j b250ZXh0X2NyZWF0ZV9sb2NhbChmZCwgJmNyZWF0ZSksIDApOwo+ICsJCWlndF9hc3NlcnRfZXEo Y3JlYXRlX2lvY3RsKGZkLCAmY3JlYXRlKSwgMCk7Cj4gICAJCWlndF9hc3NlcnQoY3JlYXRlLmN0 eF9pZCAhPSAwKTsKPiAgIAkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3JlYXRlLmN0eF9pZCk7 Cj4gICAJfQo+ICAgCj4gLQlpZ3Rfc3VidGVzdCgiaW52YWxpZC1wYWQiKSB7Cj4gLQkJbWVtc2V0 KCZjcmVhdGUsIDAsIHNpemVvZihjcmVhdGUpKTsKPiAtCQljcmVhdGUuY3R4X2lkID0gcmFuZCgp Owo+IC0JCWNyZWF0ZS5wYWQgPSAxOwo+IC0JCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9j cmVhdGVfbG9jYWwoZmQsICZjcmVhdGUpLCAtRUlOVkFMKTsKPiAtCX0KPiArCWlndF9zdWJ0ZXN0 KCJleHQtcGFyYW0iKQo+ICsJCWJhc2ljX2V4dF9wYXJhbShmZCk7Cj4gKwlpZ3Rfc3VidGVzdCgi aXJpcy1waXBlbGluZSIpCj4gKwkJaXJpc19waXBlbGluZShmZCk7Cj4gICAKPiAgIAlpZ3Rfc3Vi dGVzdCgibWF4aW11bS1tZW0iKQo+ICAgCQltYXhpbXVtKGZkLCBuY3B1cywgQ0hFQ0tfUkFNKTsK PiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4