From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5E4A789B98 for ; Tue, 26 Feb 2019 00:20:23 +0000 (UTC) From: Antonio Argenziano Date: Mon, 25 Feb 2019 16:20:19 -0800 Message-Id: <20190226002020.21550-1-antonio.argenziano@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 1/2] lib/i915: Move mmap IOCTLs wrappers into separate file List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: TW92ZSBhbGwgbW1hcCBmbGF2b3VycyBhbmQgc3VwcG9ydCBmdW5jdGlvbiB0byBzZXBhcmF0ZSBm aWxlIGluIGk5MTUKZm9sZGVyLiBUaGlzIGhlbHBzIHdpdGggbW92aW5nIGk5MTUgc3BlY2lmaWMg ZnVuY3Rpb25zIGF3YXkgZnJvbSBjb21tb24KbGlicmFyaWVzLgoKU2lnbmVkLW9mZi1ieTogQW50 b25pbyBBcmdlbnppYW5vIDxhbnRvbmlvLmFyZ2Vuemlhbm9AaW50ZWwuY29tPgpDYzogQ2hyaXMg V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogbGliL2k5MTUvZ2VtX21tYW4u YyAgfCAyNTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGli L2k5MTUvZ2VtX21tYW4uaCAgfCAgNTUgKysrKysrKysrKwogbGliL2lvY3RsX3dyYXBwZXJzLmMg fCAyMTMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaWIvaW9jdGxfd3Jh cHBlcnMuaCB8ICAyMyArLS0tCiBsaWIvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCiA1IGZpbGVz IGNoYW5nZWQsIDMxMSBpbnNlcnRpb25zKCspLCAyMzUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliL2k5MTUvZ2VtX21tYW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pOTE1 L2dlbV9tbWFuLmgKCmRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fbW1hbi5jIGIvbGliL2k5MTUv Z2VtX21tYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uM2NmOWE2YmIK LS0tIC9kZXYvbnVsbAorKysgYi9saWIvaTkxNS9nZW1fbW1hbi5jCkBAIC0wLDAgKzEsMjU0IEBA CisvKgorICogQ29weXJpZ2h0IMKpIDIwMDcsIDIwMTEsIDIwMTMsIDIwMTQsIDIwMTkgSW50ZWwg Q29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUu CisgKgorICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+ CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImlndF9jb3JlLmgiCisjaW5jbHVkZSAi aW9jdGxfd3JhcHBlcnMuaCIKKworI2luY2x1ZGUgImdlbV9tbWFuLmgiCisKKyNpZmRlZiBIQVZF X1ZBTEdSSU5ECisjaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KKyNpbmNsdWRlIDx2YWxn cmluZC9tZW1jaGVjay5oPgorCisjZGVmaW5lIFZHKHgpIHgKKyNlbHNlCisjZGVmaW5lIFZHKHgp IGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qKgorICogX19nZW1fbW1hcF9fZ3R0OgorICog QGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgorICogQGhhbmRsZTogZ2VtIGJ1ZmZl ciBvYmplY3QgaGFuZGxlCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgZ2VtIGJ1ZmZlcgorICogQHBy b3Q6IG1lbW9yeSBwcm90ZWN0aW9uIGJpdHMgYXMgdXNlZCBieSBtbWFwKCkKKyAqCisgKiBUaGlz IGZ1bmN0aW9ucyB3cmFwcyB1cCBwcm9jZWR1cmUgdG8gZXN0YWJsaXNoIGEgbWVtb3J5IG1hcHBp bmcgdGhyb3VnaCB0aGUKKyAqIEdUVC4KKyAqCisgKiBSZXR1cm5zOiBBIHBvaW50ZXIgdG8gdGhl IGNyZWF0ZWQgbWVtb3J5IG1hcHBpbmcsIE5VTEwgb24gZmFpbHVyZS4KKyAqLwordm9pZCAqX19n ZW1fbW1hcF9fZ3R0KGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBzaXplLCB1bnNp Z25lZCBwcm90KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9ndHQgbW1hcF9hcmc7CisJ dm9pZCAqcHRyOworCisJbWVtc2V0KCZtbWFwX2FyZywgMCwgc2l6ZW9mKG1tYXBfYXJnKSk7CisJ bW1hcF9hcmcuaGFuZGxlID0gaGFuZGxlOworCWlmIChpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9J OTE1X0dFTV9NTUFQX0dUVCwgJm1tYXBfYXJnKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwdHIgPSBt bWFwNjQoMCwgc2l6ZSwgcHJvdCwgTUFQX1NIQVJFRCwgZmQsIG1tYXBfYXJnLm9mZnNldCk7CisJ aWYgKHB0ciA9PSBNQVBfRkFJTEVEKQorCQlwdHIgPSBOVUxMOworCWVsc2UKKwkJZXJybm8gPSAw OworCisJVkcoVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChwdHIsIHNpemUpKTsKKworCXJldHVy biBwdHI7Cit9CisKKy8qKgorICogZ2VtX21tYXBfX2d0dDoKKyAqIEBmZDogb3BlbiBpOTE1IGRy bSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBoYW5kbGU6IGdlbSBidWZmZXIgb2JqZWN0IGhhbmRsZQor ICogQHNpemU6IHNpemUgb2YgdGhlIGdlbSBidWZmZXIKKyAqIEBwcm90OiBtZW1vcnkgcHJvdGVj dGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1hcCgpCisgKgorICogTGlrZSBfX2dlbV9tbWFwX19ndHQo KSBleGNlcHQgd2UgYXNzZXJ0IG9uIGZhaWx1cmUuCisgKgorICogUmV0dXJuczogQSBwb2ludGVy IHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBtYXBwaW5nCisgKi8KK3ZvaWQgKmdlbV9tbWFwX19ndHQo aW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHByb3QpCit7 CisJdm9pZCAqcHRyID0gX19nZW1fbW1hcF9fZ3R0KGZkLCBoYW5kbGUsIHNpemUsIHByb3QpOwor CWlndF9hc3NlcnQocHRyKTsKKwlyZXR1cm4gcHRyOworfQorCitpbnQgZ2VtX211bm1hcCh2b2lk ICpwdHIsIHVpbnQ2NF90IHNpemUpCit7CisJaW50IHJldCA9IG11bm1hcChwdHIsIHNpemUpOwor CisJaWYgKHJldCA9PSAwKQorCQlWRyhWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhwdHIsIHNp emUpKTsKKworCXJldHVybiByZXQ7Cit9CisKK2Jvb2wgZ2VtX21tYXBfX2hhc193YyhpbnQgZmQp Cit7CisJc3RhdGljIGludCBoYXNfd2MgPSAtMTsKKworCWlmIChoYXNfd2MgPT0gLTEpIHsKKwkJ c3RydWN0IGRybV9pOTE1X2dldHBhcmFtIGdwOworCQlpbnQgbW1hcF92ZXJzaW9uID0gLTE7CisJ CWludCBndHRfdmVyc2lvbiA9IC0xOworCisJCWhhc193YyA9IDA7CisKKwkJbWVtc2V0KCZncCwg MCwgc2l6ZW9mKGdwKSk7CisJCWdwLnBhcmFtID0gSTkxNV9QQVJBTV9NTUFQX0dUVF9WRVJTSU9O OworCQlncC52YWx1ZSA9ICZndHRfdmVyc2lvbjsKKwkJaW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1 X0dFVFBBUkFNLCAmZ3ApOworCisJCW1lbXNldCgmZ3AsIDAsIHNpemVvZihncCkpOworCQlncC5w YXJhbSA9IEk5MTVfUEFSQU1fTU1BUF9WRVJTSU9OOworCQlncC52YWx1ZSA9ICZtbWFwX3ZlcnNp b247CisJCWlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKTsKKworCQkvKiBE byB3ZSBoYXZlIHRoZSBuZXcgbW1hcF9pb2N0bCB3aXRoIERPTUFJTl9XQz8gKi8KKwkJaWYgKG1t YXBfdmVyc2lvbiA+PSAxICYmIGd0dF92ZXJzaW9uID49IDIpIHsKKwkJCXN0cnVjdCBkcm1faTkx NV9nZW1fbW1hcCBhcmc7CisKKwkJCS8qIERvZXMgdGhpcyBkZXZpY2Ugc3VwcG9ydCB3Yy1tbWFw cyA/ICovCisJCQltZW1zZXQoJmFyZywgMCwgc2l6ZW9mKGFyZykpOworCQkJYXJnLmhhbmRsZSA9 IGdlbV9jcmVhdGUoZmQsIDQwOTYpOworCQkJYXJnLm9mZnNldCA9IDA7CisJCQlhcmcuc2l6ZSA9 IDQwOTY7CisJCQlhcmcuZmxhZ3MgPSBJOTE1X01NQVBfV0M7CisJCQloYXNfd2MgPSBpZ3RfaW9j dGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9NTUFQLCAmYXJnKSA9PSAwOworCQkJZ2VtX2Nsb3Nl KGZkLCBhcmcuaGFuZGxlKTsKKwkJfQorCQllcnJubyA9IDA7CisJfQorCisJcmV0dXJuIGhhc193 YyA+IDA7Cit9CisKKy8qKgorICogX19nZW1fbW1hcDoKKyAqIEBmZDogb3BlbiBpOTE1IGRybSBm aWxlIGRlc2NyaXB0b3IKKyAqIEBoYW5kbGU6IGdlbSBidWZmZXIgb2JqZWN0IGhhbmRsZQorICog QG9mZnNldDogb2Zmc2V0IGluIHRoZSBnZW0gYnVmZmVyIG9mIHRoZSBtbWFwIGFyZW5hCisgKiBA c2l6ZTogc2l6ZSBvZiB0aGUgbW1hcCBhcmVuYQorICogQHByb3Q6IG1lbW9yeSBwcm90ZWN0aW9u IGJpdHMgYXMgdXNlZCBieSBtbWFwKCkKKyAqIEBmbGFnczogZmxhZ3MgdXNlZCB0byBkZXRlcm1p bmUgY2FjaGluZworICoKKyAqIFRoaXMgZnVuY3Rpb25zIHdyYXBzIHVwIHByb2NlZHVyZSB0byBl c3RhYmxpc2ggYSBtZW1vcnkgbWFwcGluZyB0aHJvdWdoCisgKiBkaXJlY3QgY3B1IGFjY2Vzcywg YnlwYXNzaW5nIHRoZSBncHUgKHZhbGlkIGZvciB3YyA9PSBmYWxzZSkuIEZvciB3YyA9PSB0cnVl CisgKiBpdCBhbHNvIGJ5cGFzcyBjcHUgY2FjaGVzIGNvbXBsZXRlbHkgYW5kIEdUVCBzeXN0ZW0g YWdlbnQgKGkuZS4gdGhlcmUgaXMgbm8KKyAqIGF1dG9tYXRpYyB0aWxpbmcgb2YgdGhlIG1tYXBw aW5nIHRocm91Z2ggdGhlIGZlbmNlIHJlZ2lzdGVycykuCisgKgorICogUmV0dXJuczogQSBwb2lu dGVyIHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBtYXBwaW5nLCBOVUxMIG9uIGZhaWx1cmUuCisgKi8K K3N0YXRpYyB2b2lkCisqX19nZW1fbW1hcChpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0 X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBpbnQgcHJvdCwgdWludDY0X3QgZmxh Z3MpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIGFyZzsKKworCW1lbXNldCgmYXJnLCAw LCBzaXplb2YoYXJnKSk7CisJYXJnLmhhbmRsZSA9IGhhbmRsZTsKKwlhcmcub2Zmc2V0ID0gb2Zm c2V0OworCWFyZy5zaXplID0gc2l6ZTsKKwlhcmcuZmxhZ3MgPSBmbGFnczsKKworCWlmIChpZ3Rf aW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9NTUFQLCAmYXJnKSkKKwkJcmV0dXJuIE5VTEw7 CisKKwlWRyhWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKGZyb21fdXNlcl9wb2ludGVyKGFyZy5h ZGRyX3B0ciksIGFyZy5zaXplKSk7CisKKwllcnJubyA9IDA7CisJcmV0dXJuIGZyb21fdXNlcl9w b2ludGVyKGFyZy5hZGRyX3B0cik7Cit9CisKKy8qKgorICogX19nZW1fbW1hcF9fd2M6CisgKiBA ZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiBAaGFuZGxlOiBnZW0gYnVmZmVy IG9iamVjdCBoYW5kbGUKKyAqIEBvZmZzZXQ6IG9mZnNldCBpbiB0aGUgZ2VtIGJ1ZmZlciBvZiB0 aGUgbW1hcCBhcmVuYQorICogQHNpemU6IHNpemUgb2YgdGhlIG1tYXAgYXJlbmEKKyAqIEBwcm90 OiBtZW1vcnkgcHJvdGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1hcCgpCisgKgorICogVGhpcyBm dW5jdGlvbnMgd3JhcHMgdXAgcHJvY2VkdXJlIHRvIGVzdGFibGlzaCBhIG1lbW9yeSBtYXBwaW5n IHRocm91Z2gKKyAqIGRpcmVjdCBjcHUgYWNjZXNzLCBieXBhc3NpbmcgdGhlIGdwdSBhbmQgY3B1 IGNhY2hlcyBjb21wbGV0ZWx5IGFuZCBhbHNvCisgKiBieXBhc3NpbmcgdGhlIEdUVCBzeXN0ZW0g YWdlbnQgKGkuZS4gdGhlcmUgaXMgbm8gYXV0b21hdGljIHRpbGluZyBvZgorICogdGhlIG1tYXBw aW5nIHRocm91Z2ggdGhlIGZlbmNlIHJlZ2lzdGVycykuCisgKgorICogUmV0dXJuczogQSBwb2lu dGVyIHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBtYXBwaW5nLCBOVUxMIG9uIGZhaWx1cmUuCisgKi8K K3ZvaWQgKl9fZ2VtX21tYXBfX3djKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBv ZmZzZXQsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHByb3QpCit7CisJcmV0dXJuIF9fZ2VtX21t YXAoZmQsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBwcm90LCBJOTE1X01NQVBfV0MpOworfQorCisv KioKKyAqIGdlbV9tbWFwX193YzoKKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0 b3IKKyAqIEBoYW5kbGU6IGdlbSBidWZmZXIgb2JqZWN0IGhhbmRsZQorICogQG9mZnNldDogb2Zm c2V0IGluIHRoZSBnZW0gYnVmZmVyIG9mIHRoZSBtbWFwIGFyZW5hCisgKiBAc2l6ZTogc2l6ZSBv ZiB0aGUgbW1hcCBhcmVuYQorICogQHByb3Q6IG1lbW9yeSBwcm90ZWN0aW9uIGJpdHMgYXMgdXNl ZCBieSBtbWFwKCkKKyAqCisgKiBMaWtlIF9fZ2VtX21tYXBfX3djKCkgZXhjZXB0IHdlIGFzc2Vy dCBvbiBmYWlsdXJlLgorICoKKyAqIFJldHVybnM6IEEgcG9pbnRlciB0byB0aGUgY3JlYXRlZCBt ZW1vcnkgbWFwcGluZworICovCit2b2lkICpnZW1fbW1hcF9fd2MoaW50IGZkLCB1aW50MzJfdCBo YW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCkKK3sK Kwl2b2lkICpwdHIgPSBfX2dlbV9tbWFwX193YyhmZCwgaGFuZGxlLCBvZmZzZXQsIHNpemUsIHBy b3QpOworCWlndF9hc3NlcnQocHRyKTsKKwlyZXR1cm4gcHRyOworfQorCisvKioKKyAqIF9fZ2Vt X21tYXBfX2NwdToKKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBo YW5kbGU6IGdlbSBidWZmZXIgb2JqZWN0IGhhbmRsZQorICogQG9mZnNldDogb2Zmc2V0IGluIHRo ZSBnZW0gYnVmZmVyIG9mIHRoZSBtbWFwIGFyZW5hCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgbW1h cCBhcmVuYQorICogQHByb3Q6IG1lbW9yeSBwcm90ZWN0aW9uIGJpdHMgYXMgdXNlZCBieSBtbWFw KCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9ucyB3cmFwcyB1cCBwcm9jZWR1cmUgdG8gZXN0YWJsaXNo IGEgbWVtb3J5IG1hcHBpbmcgdGhyb3VnaAorICogZGlyZWN0IGNwdSBhY2Nlc3MsIGJ5cGFzc2lu ZyB0aGUgZ3B1IGNvbXBsZXRlbHkuCisgKgorICogUmV0dXJuczogQSBwb2ludGVyIHRvIHRoZSBj cmVhdGVkIG1lbW9yeSBtYXBwaW5nLCBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK3ZvaWQgKl9fZ2Vt X21tYXBfX2NwdShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0LCB1aW50 NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KQoreworCXJldHVybiBfX2dlbV9tbWFwKGZkLCBoYW5k bGUsIG9mZnNldCwgc2l6ZSwgcHJvdCwgMCk7Cit9CisKKy8qKgorICogZ2VtX21tYXBfX2NwdToK KyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBoYW5kbGU6IGdlbSBi dWZmZXIgb2JqZWN0IGhhbmRsZQorICogQG9mZnNldDogb2Zmc2V0IGluIHRoZSBnZW0gYnVmZmVy IG9mIHRoZSBtbWFwIGFyZW5hCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgbW1hcCBhcmVuYQorICog QHByb3Q6IG1lbW9yeSBwcm90ZWN0aW9uIGJpdHMgYXMgdXNlZCBieSBtbWFwKCkKKyAqCisgKiBM aWtlIF9fZ2VtX21tYXBfX2NwdSgpIGV4Y2VwdCB3ZSBhc3NlcnQgb24gZmFpbHVyZS4KKyAqCisg KiBSZXR1cm5zOiBBIHBvaW50ZXIgdG8gdGhlIGNyZWF0ZWQgbWVtb3J5IG1hcHBpbmcKKyAqLwor dm9pZCAqZ2VtX21tYXBfX2NwdShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qgb2Zm c2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KQoreworCXZvaWQgKnB0ciA9IF9fZ2Vt X21tYXBfX2NwdShmZCwgaGFuZGxlLCBvZmZzZXQsIHNpemUsIHByb3QpOworCWlndF9hc3NlcnQo cHRyKTsKKwlyZXR1cm4gcHRyOworfQpkaWZmIC0tZ2l0IGEvbGliL2k5MTUvZ2VtX21tYW4uaCBi L2xpYi9pOTE1L2dlbV9tbWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu LmY3MjQyZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2k5MTUvZ2VtX21tYW4uaApAQCAtMCww ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDcsIDIwMTEsIDIwMTMsIDIwMTQsIDIw MTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUg U09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgR0VNX01NQU5fSAorI2RlZmluZSBHRU1fTU1B Tl9ICisKK3ZvaWQgKmdlbV9tbWFwX19ndHQoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2 NF90IHNpemUsIHVuc2lnbmVkIHByb3QpOwordm9pZCAqZ2VtX21tYXBfX2NwdShpbnQgZmQsIHVp bnQzMl90IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBw cm90KTsKKworYm9vbCBnZW1fbW1hcF9faGFzX3djKGludCBmZCk7Cit2b2lkICpnZW1fbW1hcF9f d2MoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6 ZSwgdW5zaWduZWQgcHJvdCk7CisKKyNpZm5kZWYgSTkxNV9HRU1fRE9NQUlOX1dDCisjZGVmaW5l IEk5MTVfR0VNX0RPTUFJTl9XQyAweDgwCisjZW5kaWYKKwordm9pZCAqX19nZW1fbW1hcF9fZ3R0 KGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KTsK K3ZvaWQgKl9fZ2VtX21tYXBfX2NwdShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qg b2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KTsKK3ZvaWQgKl9fZ2VtX21tYXBf X3djKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNp emUsIHVuc2lnbmVkIHByb3QpOworCitpbnQgZ2VtX211bm1hcCh2b2lkICpwdHIsIHVpbnQ2NF90 IHNpemUpOworCisvKioKKyAqIGdlbV9yZXF1aXJlX21tYXBfd2M6CisgKiBAZmQ6IG9wZW4gaTkx NSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKgorICogRmVhdHVyZSB0ZXN0IG1hY3JvIHRvIHF1ZXJ5 IHdoZXRoZXIgZGlyZWN0IChpLmUuIGNwdSBhY2Nlc3MgcGF0aCwgYnlwYXNzaW5nCisgKiB0aGUg Z3R0KSB3cml0ZS1jb21iaW5lIG1lbW9yeSBtYXBwaW5ncyBhcmUgYXZhaWxhYmxlLiBBdXRvbWF0 aWNhbGx5IHNraXBzCisgKiB0aHJvdWdoIGlndF9yZXF1aXJlKCkgaWYgbm90LgorICovCisjZGVm aW5lIGdlbV9yZXF1aXJlX21tYXBfd2MoZmQpIGlndF9yZXF1aXJlKGdlbV9tbWFwX19oYXNfd2Mo ZmQpKQorCisjZW5kaWYgLyogR0VNX01NQU5fSCAqLworCmRpZmYgLS1naXQgYS9saWIvaW9jdGxf d3JhcHBlcnMuYyBiL2xpYi9pb2N0bF93cmFwcGVycy5jCmluZGV4IDQwNGMyZmJmLi4zOTkyMGY4 NyAxMDA2NDQKLS0tIGEvbGliL2lvY3RsX3dyYXBwZXJzLmMKKysrIGIvbGliL2lvY3RsX3dyYXBw ZXJzLmMKQEAgLTY0MSwyMTkgKzY0MSw2IEBAIHZvaWQgZ2VtX2V4ZWNidWZfd3IoaW50IGZkLCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjYnVmKQogCWlndF9hc3NlcnRfZXEo X19nZW1fZXhlY2J1Zl93cihmZCwgZXhlY2J1ZiksIDApOwogfQogCi0vKioKLSAqIF9fZ2VtX21t YXBfX2d0dDoKLSAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKLSAqIEBoYW5k bGU6IGdlbSBidWZmZXIgb2JqZWN0IGhhbmRsZQotICogQHNpemU6IHNpemUgb2YgdGhlIGdlbSBi dWZmZXIKLSAqIEBwcm90OiBtZW1vcnkgcHJvdGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1hcCgp Ci0gKgotICogVGhpcyBmdW5jdGlvbnMgd3JhcHMgdXAgcHJvY2VkdXJlIHRvIGVzdGFibGlzaCBh IG1lbW9yeSBtYXBwaW5nIHRocm91Z2ggdGhlCi0gKiBHVFQuCi0gKgotICogUmV0dXJuczogQSBw b2ludGVyIHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBtYXBwaW5nLCBOVUxMIG9uIGZhaWx1cmUuCi0g Ki8KLXZvaWQgKl9fZ2VtX21tYXBfX2d0dChpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0 X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXBfZ3R0 IG1tYXBfYXJnOwotCXZvaWQgKnB0cjsKLQotCW1lbXNldCgmbW1hcF9hcmcsIDAsIHNpemVvZiht bWFwX2FyZykpOwotCW1tYXBfYXJnLmhhbmRsZSA9IGhhbmRsZTsKLQlpZiAoaWd0X2lvY3RsKGZk LCBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUF9HVFQsICZtbWFwX2FyZykpCi0JCXJldHVybiBOVUxM OwotCi0JcHRyID0gbW1hcDY0KDAsIHNpemUsIHByb3QsIE1BUF9TSEFSRUQsIGZkLCBtbWFwX2Fy Zy5vZmZzZXQpOwotCWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKLQkJcHRyID0gTlVMTDsKLQllbHNl Ci0JCWVycm5vID0gMDsKLQotCVZHKFZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQocHRyLCBzaXpl KSk7Ci0KLQlyZXR1cm4gcHRyOwotfQotCi0vKioKLSAqIGdlbV9tbWFwX19ndHQ6Ci0gKiBAZmQ6 IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCi0gKiBAaGFuZGxlOiBnZW0gYnVmZmVyIG9i amVjdCBoYW5kbGUKLSAqIEBzaXplOiBzaXplIG9mIHRoZSBnZW0gYnVmZmVyCi0gKiBAcHJvdDog bWVtb3J5IHByb3RlY3Rpb24gYml0cyBhcyB1c2VkIGJ5IG1tYXAoKQotICoKLSAqIExpa2UgX19n ZW1fbW1hcF9fZ3R0KCkgZXhjZXB0IHdlIGFzc2VydCBvbiBmYWlsdXJlLgotICoKLSAqIFJldHVy bnM6IEEgcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGluZwotICovCi12b2lkICpn ZW1fbW1hcF9fZ3R0KGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBzaXplLCB1bnNp Z25lZCBwcm90KQotewotCXZvaWQgKnB0ciA9IF9fZ2VtX21tYXBfX2d0dChmZCwgaGFuZGxlLCBz aXplLCBwcm90KTsKLQlpZ3RfYXNzZXJ0KHB0cik7Ci0JcmV0dXJuIHB0cjsKLX0KLQotaW50IGdl bV9tdW5tYXAodm9pZCAqcHRyLCB1aW50NjRfdCBzaXplKQotewotCWludCByZXQgPSBtdW5tYXAo cHRyLCBzaXplKTsKLQotCWlmIChyZXQgPT0gMCkKLQkJVkcoVkFMR1JJTkRfTUFLRV9NRU1fTk9B Q0NFU1MocHRyLCBzaXplKSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1ib29sIGdlbV9tbWFwX19o YXNfd2MoaW50IGZkKQotewotCXN0YXRpYyBpbnQgaGFzX3djID0gLTE7Ci0KLQlpZiAoaGFzX3dj ID09IC0xKSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSBncDsKLQkJaW50IG1tYXBfdmVy c2lvbiA9IC0xOwotCQlpbnQgZ3R0X3ZlcnNpb24gPSAtMTsKLQotCQloYXNfd2MgPSAwOwotCi0J CW1lbXNldCgmZ3AsIDAsIHNpemVvZihncCkpOwotCQlncC5wYXJhbSA9IEk5MTVfUEFSQU1fTU1B UF9HVFRfVkVSU0lPTjsKLQkJZ3AudmFsdWUgPSAmZ3R0X3ZlcnNpb247Ci0JCWlvY3RsKGZkLCBE Uk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKTsKLQotCQltZW1zZXQoJmdwLCAwLCBzaXplb2Yo Z3ApKTsKLQkJZ3AucGFyYW0gPSBJOTE1X1BBUkFNX01NQVBfVkVSU0lPTjsKLQkJZ3AudmFsdWUg PSAmbW1hcF92ZXJzaW9uOwotCQlpb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZn cCk7Ci0KLQkJLyogRG8gd2UgaGF2ZSB0aGUgbmV3IG1tYXBfaW9jdGwgd2l0aCBET01BSU5fV0M/ ICovCi0JCWlmIChtbWFwX3ZlcnNpb24gPj0gMSAmJiBndHRfdmVyc2lvbiA+PSAyKSB7Ci0JCQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgYXJnOwotCi0JCQkvKiBEb2VzIHRoaXMgZGV2aWNlIHN1 cHBvcnQgd2MtbW1hcHMgPyAqLwotCQkJbWVtc2V0KCZhcmcsIDAsIHNpemVvZihhcmcpKTsKLQkJ CWFyZy5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKLQkJCWFyZy5vZmZzZXQgPSAwOwot CQkJYXJnLnNpemUgPSA0MDk2OwotCQkJYXJnLmZsYWdzID0gSTkxNV9NTUFQX1dDOwotCQkJaGFz X3djID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUCwgJmFyZykgPT0gMDsK LQkJCWdlbV9jbG9zZShmZCwgYXJnLmhhbmRsZSk7Ci0JCX0KLQkJZXJybm8gPSAwOwotCX0KLQot CXJldHVybiBoYXNfd2MgPiAwOwotfQotCi0vKioKLSAqIF9fZ2VtX21tYXA6Ci0gKiBAZmQ6IG9w ZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCi0gKiBAaGFuZGxlOiBnZW0gYnVmZmVyIG9iamVj dCBoYW5kbGUKLSAqIEBvZmZzZXQ6IG9mZnNldCBpbiB0aGUgZ2VtIGJ1ZmZlciBvZiB0aGUgbW1h cCBhcmVuYQotICogQHNpemU6IHNpemUgb2YgdGhlIG1tYXAgYXJlbmEKLSAqIEBwcm90OiBtZW1v cnkgcHJvdGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1hcCgpCi0gKiBAZmxhZ3M6IGZsYWdzIHVz ZWQgdG8gZGV0ZXJtaW5lIGNhY2hpbmcKLSAqCi0gKiBUaGlzIGZ1bmN0aW9ucyB3cmFwcyB1cCBw cm9jZWR1cmUgdG8gZXN0YWJsaXNoIGEgbWVtb3J5IG1hcHBpbmcgdGhyb3VnaAotICogZGlyZWN0 IGNwdSBhY2Nlc3MsIGJ5cGFzc2luZyB0aGUgZ3B1ICh2YWxpZCBmb3Igd2MgPT0gZmFsc2UpLiBG b3Igd2MgPT0gdHJ1ZQotICogaXQgYWxzbyBieXBhc3MgY3B1IGNhY2hlcyBjb21wbGV0ZWx5IGFu ZCBHVFQgc3lzdGVtIGFnZW50IChpLmUuIHRoZXJlIGlzIG5vCi0gKiBhdXRvbWF0aWMgdGlsaW5n IG9mIHRoZSBtbWFwcGluZyB0aHJvdWdoIHRoZSBmZW5jZSByZWdpc3RlcnMpLgotICoKLSAqIFJl dHVybnM6IEEgcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGluZywgTlVMTCBvbiBm YWlsdXJlLgotICovCi1zdGF0aWMgdm9pZAotKl9fZ2VtX21tYXAoaW50IGZkLCB1aW50MzJfdCBo YW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgaW50IHByb3Qs IHVpbnQ2NF90IGZsYWdzKQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCBhcmc7Ci0KLQlt ZW1zZXQoJmFyZywgMCwgc2l6ZW9mKGFyZykpOwotCWFyZy5oYW5kbGUgPSBoYW5kbGU7Ci0JYXJn Lm9mZnNldCA9IG9mZnNldDsKLQlhcmcuc2l6ZSA9IHNpemU7Ci0JYXJnLmZsYWdzID0gZmxhZ3M7 Ci0KLQlpZiAoaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUCwgJmFyZykpCi0J CXJldHVybiBOVUxMOwotCi0JVkcoVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChmcm9tX3VzZXJf cG9pbnRlcihhcmcuYWRkcl9wdHIpLCBhcmcuc2l6ZSkpOwotCi0JZXJybm8gPSAwOwotCXJldHVy biBmcm9tX3VzZXJfcG9pbnRlcihhcmcuYWRkcl9wdHIpOwotfQotCi0vKioKLSAqIF9fZ2VtX21t YXBfX3djOgotICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgotICogQGhhbmRs ZTogZ2VtIGJ1ZmZlciBvYmplY3QgaGFuZGxlCi0gKiBAb2Zmc2V0OiBvZmZzZXQgaW4gdGhlIGdl bSBidWZmZXIgb2YgdGhlIG1tYXAgYXJlbmEKLSAqIEBzaXplOiBzaXplIG9mIHRoZSBtbWFwIGFy ZW5hCi0gKiBAcHJvdDogbWVtb3J5IHByb3RlY3Rpb24gYml0cyBhcyB1c2VkIGJ5IG1tYXAoKQot ICoKLSAqIFRoaXMgZnVuY3Rpb25zIHdyYXBzIHVwIHByb2NlZHVyZSB0byBlc3RhYmxpc2ggYSBt ZW1vcnkgbWFwcGluZyB0aHJvdWdoCi0gKiBkaXJlY3QgY3B1IGFjY2VzcywgYnlwYXNzaW5nIHRo ZSBncHUgYW5kIGNwdSBjYWNoZXMgY29tcGxldGVseSBhbmQgYWxzbwotICogYnlwYXNzaW5nIHRo ZSBHVFQgc3lzdGVtIGFnZW50IChpLmUuIHRoZXJlIGlzIG5vIGF1dG9tYXRpYyB0aWxpbmcgb2YK LSAqIHRoZSBtbWFwcGluZyB0aHJvdWdoIHRoZSBmZW5jZSByZWdpc3RlcnMpLgotICoKLSAqIFJl dHVybnM6IEEgcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGluZywgTlVMTCBvbiBm YWlsdXJlLgotICovCi12b2lkICpfX2dlbV9tbWFwX193YyhpbnQgZmQsIHVpbnQzMl90IGhhbmRs ZSwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KQotewotCXJl dHVybiBfX2dlbV9tbWFwKGZkLCBoYW5kbGUsIG9mZnNldCwgc2l6ZSwgcHJvdCwgSTkxNV9NTUFQ X1dDKTsKLX0KLQotLyoqCi0gKiBnZW1fbW1hcF9fd2M6Ci0gKiBAZmQ6IG9wZW4gaTkxNSBkcm0g ZmlsZSBkZXNjcmlwdG9yCi0gKiBAaGFuZGxlOiBnZW0gYnVmZmVyIG9iamVjdCBoYW5kbGUKLSAq IEBvZmZzZXQ6IG9mZnNldCBpbiB0aGUgZ2VtIGJ1ZmZlciBvZiB0aGUgbW1hcCBhcmVuYQotICog QHNpemU6IHNpemUgb2YgdGhlIG1tYXAgYXJlbmEKLSAqIEBwcm90OiBtZW1vcnkgcHJvdGVjdGlv biBiaXRzIGFzIHVzZWQgYnkgbW1hcCgpCi0gKgotICogTGlrZSBfX2dlbV9tbWFwX193YygpIGV4 Y2VwdCB3ZSBhc3NlcnQgb24gZmFpbHVyZS4KLSAqCi0gKiBSZXR1cm5zOiBBIHBvaW50ZXIgdG8g dGhlIGNyZWF0ZWQgbWVtb3J5IG1hcHBpbmcKLSAqLwotdm9pZCAqZ2VtX21tYXBfX3djKGludCBm ZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUsIHVuc2ln bmVkIHByb3QpCi17Ci0Jdm9pZCAqcHRyID0gX19nZW1fbW1hcF9fd2MoZmQsIGhhbmRsZSwgb2Zm c2V0LCBzaXplLCBwcm90KTsKLQlpZ3RfYXNzZXJ0KHB0cik7Ci0JcmV0dXJuIHB0cjsKLX0KLQot LyoqCi0gKiBfX2dlbV9tbWFwX19jcHU6Ci0gKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNj cmlwdG9yCi0gKiBAaGFuZGxlOiBnZW0gYnVmZmVyIG9iamVjdCBoYW5kbGUKLSAqIEBvZmZzZXQ6 IG9mZnNldCBpbiB0aGUgZ2VtIGJ1ZmZlciBvZiB0aGUgbW1hcCBhcmVuYQotICogQHNpemU6IHNp emUgb2YgdGhlIG1tYXAgYXJlbmEKLSAqIEBwcm90OiBtZW1vcnkgcHJvdGVjdGlvbiBiaXRzIGFz IHVzZWQgYnkgbW1hcCgpCi0gKgotICogVGhpcyBmdW5jdGlvbnMgd3JhcHMgdXAgcHJvY2VkdXJl IHRvIGVzdGFibGlzaCBhIG1lbW9yeSBtYXBwaW5nIHRocm91Z2gKLSAqIGRpcmVjdCBjcHUgYWNj ZXNzLCBieXBhc3NpbmcgdGhlIGdwdSBjb21wbGV0ZWx5LgotICoKLSAqIFJldHVybnM6IEEgcG9p bnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGluZywgTlVMTCBvbiBmYWlsdXJlLgotICov Ci12b2lkICpfX2dlbV9tbWFwX19jcHUoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90 IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCkKLXsKLQlyZXR1cm4gX19nZW1f bW1hcChmZCwgaGFuZGxlLCBvZmZzZXQsIHNpemUsIHByb3QsIDApOwotfQotCi0vKioKLSAqIGdl bV9tbWFwX19jcHU6Ci0gKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCi0gKiBA aGFuZGxlOiBnZW0gYnVmZmVyIG9iamVjdCBoYW5kbGUKLSAqIEBvZmZzZXQ6IG9mZnNldCBpbiB0 aGUgZ2VtIGJ1ZmZlciBvZiB0aGUgbW1hcCBhcmVuYQotICogQHNpemU6IHNpemUgb2YgdGhlIG1t YXAgYXJlbmEKLSAqIEBwcm90OiBtZW1vcnkgcHJvdGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1h cCgpCi0gKgotICogTGlrZSBfX2dlbV9tbWFwX19jcHUoKSBleGNlcHQgd2UgYXNzZXJ0IG9uIGZh aWx1cmUuCi0gKgotICogUmV0dXJuczogQSBwb2ludGVyIHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBt YXBwaW5nCi0gKi8KLXZvaWQgKmdlbV9tbWFwX19jcHUoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUs IHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCkKLXsKLQl2b2lk ICpwdHIgPSBfX2dlbV9tbWFwX19jcHUoZmQsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBwcm90KTsK LQlpZ3RfYXNzZXJ0KHB0cik7Ci0JcmV0dXJuIHB0cjsKLX0KLQogLyoqCiAgKiBnZW1fbWFkdmlz ZToKICAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKZGlmZiAtLWdpdCBhL2xp Yi9pb2N0bF93cmFwcGVycy5oIGIvbGliL2lvY3RsX3dyYXBwZXJzLmgKaW5kZXggYjIyYjM2YjAu LjU0NzAzMjM1IDEwMDY0NAotLS0gYS9saWIvaW9jdGxfd3JhcHBlcnMuaAorKysgYi9saWIvaW9j dGxfd3JhcHBlcnMuaApAQCAtMzgsNiArMzgsNyBAQAogCiAjaW5jbHVkZSAiaTkxNS9nZW1fY29u dGV4dC5oIgogI2luY2x1ZGUgImk5MTUvZ2VtX3NjaGVkdWxlci5oIgorI2luY2x1ZGUgImk5MTUv Z2VtX21tYW4uaCIKIAogLyoqCiAgKiBpZ3RfaW9jdGw6CkBAIC04NCwyMiArODUsMTAgQEAgaW50 IF9fZ2VtX2V4ZWNidWZfd3IoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIy ICpleGVjYnVmKTsKIHZvaWQgZ2VtX2V4ZWNidWYoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyICpleGVjYnVmKTsKIGludCBfX2dlbV9leGVjYnVmKGludCBmZCwgc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1Zik7CiAKLXZvaWQgKmdlbV9tbWFwX19n dHQoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHByb3Qp Owotdm9pZCAqZ2VtX21tYXBfX2NwdShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qg b2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KTsKLQotYm9vbCBnZW1fbW1hcF9f aGFzX3djKGludCBmZCk7Ci12b2lkICpnZW1fbW1hcF9fd2MoaW50IGZkLCB1aW50MzJfdCBoYW5k bGUsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCk7Ci0KICNp Zm5kZWYgSTkxNV9HRU1fRE9NQUlOX1dDCiAjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9XQyAweDgw CiAjZW5kaWYKIAotdm9pZCAqX19nZW1fbW1hcF9fZ3R0KGludCBmZCwgdWludDMyX3QgaGFuZGxl LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KTsKLXZvaWQgKl9fZ2VtX21tYXBfX2NwdShp bnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1 bnNpZ25lZCBwcm90KTsKLXZvaWQgKl9fZ2VtX21tYXBfX3djKGludCBmZCwgdWludDMyX3QgaGFu ZGxlLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHByb3QpOwotCi1p bnQgZ2VtX211bm1hcCh2b2lkICpwdHIsIHVpbnQ2NF90IHNpemUpOwotCiAvKioKICAqIGdlbV9y ZXF1aXJlX3N0b2xlbl9zdXBwb3J0OgogICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3Jp cHRvcgpAQCAtMTExLDE2ICsxMDAsNiBAQCBpbnQgZ2VtX211bm1hcCh2b2lkICpwdHIsIHVpbnQ2 NF90IHNpemUpOwogCQkJaWd0X3JlcXVpcmUoZ2VtX2NyZWF0ZV9faGFzX3N0b2xlbl9zdXBwb3J0 KGZkKSAmJiBcCiAJCQkJICAgIChnZW1fdG90YWxfc3RvbGVuX3NpemUoZmQpID4gMCkpCiAKLS8q KgotICogZ2VtX3JlcXVpcmVfbW1hcF93YzoKLSAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRl c2NyaXB0b3IKLSAqCi0gKiBGZWF0dXJlIHRlc3QgbWFjcm8gdG8gcXVlcnkgd2hldGhlciBkaXJl Y3QgKGkuZS4gY3B1IGFjY2VzcyBwYXRoLCBieXBhc3NpbmcKLSAqIHRoZSBndHQpIHdyaXRlLWNv bWJpbmUgbWVtb3J5IG1hcHBpbmdzIGFyZSBhdmFpbGFibGUuIEF1dG9tYXRpY2FsbHkgc2tpcHMK LSAqIHRocm91Z2ggaWd0X3JlcXVpcmUoKSBpZiBub3QuCi0gKi8KLSNkZWZpbmUgZ2VtX3JlcXVp cmVfbW1hcF93YyhmZCkgaWd0X3JlcXVpcmUoZ2VtX21tYXBfX2hhc193YyhmZCkpCi0KIGludCBn ZW1fbWFkdmlzZShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgaW50IHN0YXRlKTsKIAogI2RlZmlu ZSBMT0NBTF9JOTE1X0dFTV9VU0VSUFRSICAgICAgIDB4MzMKZGlmZiAtLWdpdCBhL2xpYi9tZXNv bi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAppbmRleCBkZDM2ZjgxOC4uMGViNTU4NWQgMTAwNjQ0 Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTQsNiArNCw3 IEBAIGxpYl9zb3VyY2VzID0gWwogCSdpOTE1L2dlbV9zY2hlZHVsZXIuYycsCiAJJ2k5MTUvZ2Vt X3N1Ym1pc3Npb24uYycsCiAJJ2k5MTUvZ2VtX3JpbmcuYycsCisJJ2k5MTUvZ2VtX21tYW4uYycs CiAJJ2lndF9jb2xvcl9lbmNvZGluZy5jJywKIAknaWd0X2RlYnVnZnMuYycsCiAJJ2lndF9kZXZp Y2UuYycsCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRl dg==