From dev-return-15791-apmail-apr-dev-archive=apr.apache.org@apr.apache.org Fri Mar 24 08:37:19 2006 Return-Path: Delivered-To: apmail-apr-dev-archive@www.apache.org Received: (qmail 68039 invoked from network); 24 Mar 2006 08:37:18 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 24 Mar 2006 08:37:18 -0000 Received: (qmail 49070 invoked by uid 500); 24 Mar 2006 08:37:16 -0000 Delivered-To: apmail-apr-dev-archive@apr.apache.org Received: (qmail 48988 invoked by uid 500); 24 Mar 2006 08:37:15 -0000 Mailing-List: contact dev-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Id: Delivered-To: mailing list dev@apr.apache.org Received: (qmail 48671 invoked by uid 99); 24 Mar 2006 08:37:14 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 24 Mar 2006 00:37:14 -0800 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [128.195.23.9] (HELO straightwhiskey.ucf.ics.uci.edu) (128.195.23.9) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 24 Mar 2006 00:37:12 -0800 Received: from jug.ucf.ics.uci.edu (jug.ucf.ics.uci.edu [128.195.23.240]) by straightwhiskey.ucf.ics.uci.edu (Postfix) with ESMTP id E73C83A7D3 for ; Fri, 24 Mar 2006 00:36:51 -0800 (PST) Date: Fri, 24 Mar 2006 00:36:05 -0800 (PST) From: Dirk Groeneveld X-X-Sender: marvin@jug.ucf.ics.uci.edu To: dev@apr.apache.org Subject: [PATCH/RFC] apr_proc_mutex_attach() Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-1014960105-888758188-1143167148=:10517" Content-ID: X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1014960105-888758188-1143167148=:10517 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; format=flowed Content-ID: Hi! This patch adds apr_proc_mutex_attach() functionality to process mutexes. It also contains modifications to test/testprocmutex, to test the new functionality. I tested it on linux/x86 and mac os x. It passed. Only SYSV semaphores have a apr_proc_mutex_attach() implementation that doesn't just return APR_ENOTIMPL right now. All mechanisms have _detach and _destroy functions. I can add others later, but I was hoping for some comments to avoid running down a wrong path, because there are some issues, and this is my first real patch. The function table for the mutexes (apr_proc_mutex_unix_lock_methods_t) has changed in a binary-incompatible way. I figured that would be ok because that structure is never passed outside the library. apr_proc_mutex_t itself has changed as well, also in a binary incompatible way. To my knowledge, only pointers to it are ever given out, but if an old version of apr accesses a proc mutex that was created by a new version or vice versa, things will go bad. Cleaning up is very different now. If you create a lock with apr_proc_mutex_create(), the default cleanup action will be to destroy the lock. This is the same behavior that existed before the patch. If you create it with apr_proc_mutex_attach(), the default action is to just detach from it. You can override the default behavior by calling _destroy() or _detach() by hand. Consequently, what used to be "cleanup" is now "destroy". _cleanup() just calls the either _destroy() or _detach(), depending on the way the lock was created. The pre-patch version allows unrelated process-families to use the same named mutex, at least for a few implementations. For example, in the implementation using posix semaphores, the semaphore is "predeleted" already when it is created, allowing other process-families to use the same name without conflict. Since the whole point of _attach() is to make them use the same mutex if the name is the same, that is no longer possible. I don't know if this will break any existing code. For a similar reason, the practice of not using the name at all will no longer work. Again in the posix sems implementation, the name is completely ignored and replaced by apr's own semaphore naming scheme, because on certain platforms there are limitations to the name. These limitations are not exported/documented by apr, so it would confusing to throw APR_ENAMETOOLONG on some platforms but not on others. Limiting names to the lowest common denominator on all platforms is, well, limiting, and might break existing code. wrowe suggested hashing the name at some point. I'm a little scared of that because while the chance of a collision might be small, the effects of it happening would be extremely bad. Thank you for any feedback you might have :-) Dirk ---1014960105-888758188-1143167148=:10517 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=apr_proc_mutex_attach.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME=apr_proc_mutex_attach.patch SW5kZXg6IGxvY2tzL3VuaXgvcHJvY19tdXRleC5jDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gbG9ja3MvdW5peC9wcm9jX211dGV4LmMJKHJldmlz aW9uIDM4ODMyMSkNCisrKyBsb2Nrcy91bml4L3Byb2NfbXV0ZXguYwkod29y a2luZyBjb3B5KQ0KQEAgLTE5LDExICsxOSwxNyBAQA0KICNpbmNsdWRlICJh cHJfYXJjaF9wcm9jX211dGV4LmgiDQogI2luY2x1ZGUgImFwcl9hcmNoX2Zp bGVfaW8uaCIgLyogZm9yIGFwcl9ta3N0ZW1wKCkgKi8NCiANCi1BUFJfREVD TEFSRShhcHJfc3RhdHVzX3QpIGFwcl9wcm9jX211dGV4X2Rlc3Ryb3koYXBy X3Byb2NfbXV0ZXhfdCAqbXV0ZXgpDQorc3RhdGljIGFwcl9zdGF0dXNfdCBw cm9jX211dGV4X25vX3RyeWFjcXVpcmUoYXByX3Byb2NfbXV0ZXhfdCAqbmV3 X211dGV4KQ0KIHsNCi0gICAgcmV0dXJuIGFwcl9wb29sX2NsZWFudXBfcnVu KG11dGV4LT5wb29sLCBtdXRleCwgYXByX3Byb2NfbXV0ZXhfY2xlYW51cCk7 DQorICAgIHJldHVybiBBUFJfRU5PVElNUEw7DQogfQ0KIA0KK3N0YXRpYyBh cHJfc3RhdHVzX3QgcHJvY19tdXRleF9ub19hdHRhY2goYXByX3Byb2NfbXV0 ZXhfdCAqbXV0ZXgsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpmbmFtZSkNCit7DQorICAgIHJldHVy biBBUFJfRU5PVElNUEw7DQorfQ0KKw0KICNpZiBBUFJfSEFTX1BPU0lYU0VN X1NFUklBTElaRSB8fCBBUFJfSEFTX0ZDTlRMX1NFUklBTElaRSB8fCBcDQog ICAgIEFQUl9IQVNfUFJPQ19QVEhSRUFEX1NFUklBTElaRSB8fCBBUFJfSEFT X1NZU1ZTRU1fU0VSSUFMSVpFDQogc3RhdGljIGFwcl9zdGF0dXNfdCBwcm9j X211dGV4X25vX2NoaWxkX2luaXQoYXByX3Byb2NfbXV0ZXhfdCAqKm11dGV4 LA0KQEAgLTQwLDkgKzQ2LDEyIEBADQogI2RlZmluZSBTRU1fRkFJTEVEICgt MSkNCiAjZW5kaWYNCiANCi1zdGF0aWMgYXByX3N0YXR1c190IHByb2NfbXV0 ZXhfcG9zaXhfY2xlYW51cCh2b2lkICptdXRleF8pDQorc3RhdGljIGFwcl9z dGF0dXNfdCBwcm9jX211dGV4X3Bvc2l4X2Rlc3Ryb3kodm9pZCAqbXV0ZXhf KQ0KIHsNCiAgICAgYXByX3Byb2NfbXV0ZXhfdCAqbXV0ZXggPSBtdXRleF87 DQorDQorICAgIC8qIEFoaGguIFRoZSBqb3lzIG9mIFBvc2l4IHNlbXMuIFBy ZWRlbGV0ZSBpdC4uLiAqLw0KKyAgICBzZW1fdW5saW5rKG11dGV4LT5mbmFt ZSk7DQogICAgIA0KICAgICBpZiAoc2VtX2Nsb3NlKG11dGV4LT5wc2VtX2lu dGVycHJvYykgPCAwKSB7DQogICAgICAgICByZXR1cm4gZXJybm87DQpAQCAt NTEsNiArNjAsMTcgQEANCiAgICAgcmV0dXJuIEFQUl9TVUNDRVNTOw0KIH0g ICAgDQogDQorc3RhdGljIGFwcl9zdGF0dXNfdCBwcm9jX211dGV4X3Bvc2l4 X2RldGFjaCh2b2lkICptdXRleF8pDQorew0KKyAgICBhcHJfcHJvY19tdXRl eF90ICptdXRleCA9IG11dGV4XzsNCisgICAgDQorICAgIGlmIChzZW1fY2xv c2UobXV0ZXgtPnBzZW1faW50ZXJwcm9jKSA8IDApIHsNCisgICAgICAgIHJl dHVybiBlcnJubzsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gQVBSX1NVQ0NF U1M7DQorfSAgICANCisNCiBzdGF0aWMgYXByX3N0YXR1c190IHByb2NfbXV0 ZXhfcG9zaXhfY3JlYXRlKGFwcl9wcm9jX211dGV4X3QgKm5ld19tdXRleCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmZuYW1lKQ0KIHsNCkBAIC0xMDEsMTMgKzEyMSw5IEBA DQogICAgIGlmIChwc2VtID09IChzZW1fdCAqKVNFTV9GQUlMRUQpIHsNCiAg ICAgICAgIHJldHVybiBlcnJubzsNCiAgICAgfQ0KLSAgICAvKiBBaGhoLiBU aGUgam95cyBvZiBQb3NpeCBzZW1zLiBQcmVkZWxldGUgaXQuLi4gKi8NCi0g ICAgc2VtX3VubGluayhzZW1uYW1lKTsNCiAgICAgbmV3X211dGV4LT5wc2Vt X2ludGVycHJvYyA9IHBzZW07DQogICAgIG5ld19tdXRleC0+Zm5hbWUgPSBh cHJfcHN0cmR1cChuZXdfbXV0ZXgtPnBvb2wsIHNlbW5hbWUpOw0KLSAgICBh cHJfcG9vbF9jbGVhbnVwX3JlZ2lzdGVyKG5ld19tdXRleC0+cG9vbCwgKHZv aWQgKiluZXdfbXV0ZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXByX3Byb2NfbXV0ZXhfY2xlYW51cCwgDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXByX3Bvb2xfY2xlYW51cF9udWxsKTsNCisgICAg bmV3X211dGV4LT5jbGVhbnVwID0gcHJvY19tdXRleF9wb3NpeF9kZXN0cm95 Ow0KICAgICByZXR1cm4gQVBSX1NVQ0NFU1M7DQogfQ0KIA0KQEAgLTE1MSwx MCArMTY3LDEyIEBADQogICAgIDAsDQogI2VuZGlmDQogICAgIHByb2NfbXV0 ZXhfcG9zaXhfY3JlYXRlLA0KKyAgICBwcm9jX211dGV4X25vX2F0dGFjaCwN CiAgICAgcHJvY19tdXRleF9wb3NpeF9hY3F1aXJlLA0KICAgICBwcm9jX211 dGV4X3Bvc2l4X3RyeWFjcXVpcmUsDQogICAgIHByb2NfbXV0ZXhfcG9zaXhf cmVsZWFzZSwNCi0gICAgcHJvY19tdXRleF9wb3NpeF9jbGVhbnVwLA0KKyAg ICBwcm9jX211dGV4X3Bvc2l4X2RldGFjaCwNCisgICAgcHJvY19tdXRleF9w b3NpeF9kZXN0cm95LA0KICAgICBwcm9jX211dGV4X25vX2NoaWxkX2luaXQs DQogICAgICJwb3NpeHNlbSINCiB9Ow0KQEAgLTE4MCw1MSArMTk4LDEyNyBA QA0KICAgICBwcm9jX211dGV4X29wX29mZi5zZW1fZmxnID0gU0VNX1VORE87 DQogfQ0KIA0KLXN0YXRpYyBhcHJfc3RhdHVzX3QgcHJvY19tdXRleF9zeXN2 X2NsZWFudXAodm9pZCAqbXV0ZXhfKQ0KK3N0YXRpYyBhcHJfc3RhdHVzX3Qg cHJvY19tdXRleF9zeXN2X2Rlc3Ryb3kodm9pZCAqbXV0ZXhfKQ0KIHsNCisg ICAgYXByX3N0YXR1c190IHJ2Ow0KICAgICBhcHJfcHJvY19tdXRleF90ICpt dXRleD1tdXRleF87DQogICAgIHVuaW9uIHNlbXVuIGljazsNCi0gICAgDQot ICAgIGlmIChtdXRleC0+aW50ZXJwcm9jLT5maWxlZGVzICE9IC0xKSB7DQor DQorICAgIC8qIGxldCBnbyBvZiB0aGUgc2VtYXBob3JlICovDQorICAgIGlm IChtdXRleC0+c2VtaWQgIT0gLTEpIHsNCiAgICAgICAgIGljay52YWwgPSAw Ow0KLSAgICAgICAgc2VtY3RsKG11dGV4LT5pbnRlcnByb2MtPmZpbGVkZXMs IDAsIElQQ19STUlELCBpY2spOw0KKyAgICAgICAgc2VtY3RsKG11dGV4LT5z ZW1pZCwgMCwgSVBDX1JNSUQsIGljayk7DQogICAgIH0NCisNCisgICAgLyog cmVtb3ZlIHRoZSBmaWxlICovDQorICAgIGlmIChtdXRleC0+aW50ZXJwcm9j ICE9IE5VTEwpIHsNCisgICAgICAgIGNvbnN0IGNoYXIqIGZuYW1lOw0KKyAg ICAgICAgcnYgPSBhcHJfZmlsZV9uYW1lX2dldCgmZm5hbWUsIG11dGV4LT5p bnRlcnByb2MpOw0KKyAgICAgICAgaWYocnYgPT0gQVBSX1NVQ0NFU1MpDQor ICAgICAgICAgICAgYXByX2ZpbGVfcmVtb3ZlKGZuYW1lLCBtdXRleC0+cG9v bCk7DQorDQorICAgICAgICAvKiBjbG9zZSB0aGUgZmlsZSAqLw0KKyAgICAg ICAgYXByX2ZpbGVfY2xvc2UobXV0ZXgtPmludGVycHJvYyk7DQorICAgIH0N CisgICAgDQogICAgIHJldHVybiBBUFJfU1VDQ0VTUzsNCiB9ICAgIA0KIA0K K3N0YXRpYyBhcHJfc3RhdHVzX3QgcHJvY19tdXRleF9zeXN2X2RldGFjaCh2 b2lkICptdXRleF8pDQorew0KKyAgICByZXR1cm4gQVBSX1NVQ0NFU1M7DQor fSAgICANCisNCiBzdGF0aWMgYXByX3N0YXR1c190IHByb2NfbXV0ZXhfc3lz dl9jcmVhdGUoYXByX3Byb2NfbXV0ZXhfdCAqbmV3X211dGV4LA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpmbmFtZSkNCiB7DQorICAgIG5ld19tdXRleC0+c2VtaWQgPSAtMTsN CisgICAgbmV3X211dGV4LT5pbnRlcnByb2MgPSBOVUxMOw0KKw0KKyAgICBh cHJfc3RhdHVzX3QgcnY7DQogICAgIHVuaW9uIHNlbXVuIGljazsNCi0gICAg YXByX3N0YXR1c190IHJ2Ow0KLSAgICANCi0gICAgbmV3X211dGV4LT5pbnRl cnByb2MgPSBhcHJfcGFsbG9jKG5ld19tdXRleC0+cG9vbCwgc2l6ZW9mKCpu ZXdfbXV0ZXgtPmludGVycHJvYykpOw0KLSAgICBuZXdfbXV0ZXgtPmludGVy cHJvYy0+ZmlsZWRlcyA9IHNlbWdldChJUENfUFJJVkFURSwgMSwgSVBDX0NS RUFUIHwgMDYwMCk7DQorICAgIGtleV90IGs7DQogDQotICAgIGlmIChuZXdf bXV0ZXgtPmludGVycHJvYy0+ZmlsZWRlcyA8IDApIHsNCisgICAgaWYoZm5h bWUgIT0gTlVMTCkgew0KKyAgICAgICAgLyogY3JlYXRlIHRoZSBmaWxlICov DQorICAgICAgICBydiA9IGFwcl9maWxlX29wZW4oDQorICAgICAgICAgICAg JihuZXdfbXV0ZXgtPmludGVycHJvYyksIGZuYW1lLA0KKyAgICAgICAgICAg IEFQUl9GT1BFTl9SRUFEIHwgQVBSX0ZPUEVOX0NSRUFURSB8IEFQUl9GT1BF Tl9FWENMLA0KKyAgICAgICAgICAgIEFQUl9GUFJPVF9VUkVBRCB8IEFQUl9G UFJPVF9VV1JJVEUsDQorICAgICAgICAgICAgbmV3X211dGV4LT5wb29sKTsN CisgICAgICAgIGlmIChydiAhPSBBUFJfU1VDQ0VTUykNCisgICAgICAgICAg ICByZXR1cm4gcnY7DQorDQorICAgICAgICAvKiBnZXQgb3VyIGtleSAqLw0K KyAgICAgICAgayA9IGZ0b2soZm5hbWUsIEFQUl9TWVNWX1BST0pJRCk7DQor ICAgICAgICBpZiAoayA8IDApIHsNCisgICAgICAgICAgICBydiA9IGVycm5v Ow0KKyAgICAgICAgICAgIHByb2NfbXV0ZXhfc3lzdl9kZXN0cm95KG5ld19t dXRleCk7DQorICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KKyAgICAgICAgfQ0K KyAgICB9IGVsc2Ugew0KKyAgICAgICAgayA9IElQQ19QUklWQVRFOw0KKyAg ICB9DQorDQorICAgIC8qIGNyZWF0ZSB0aGUgc2VtYXBob3JlICovDQorICAg IG5ld19tdXRleC0+c2VtaWQgPSBzZW1nZXQoaywgMSwgSVBDX0NSRUFUIHwg SVBDX0VYQ0wgfCAwNjAwKTsNCisgICAgaWYgKG5ld19tdXRleC0+c2VtaWQg PCAwKSB7DQogICAgICAgICBydiA9IGVycm5vOw0KLSAgICAgICAgcHJvY19t dXRleF9zeXN2X2NsZWFudXAobmV3X211dGV4KTsNCisgICAgICAgIHByb2Nf bXV0ZXhfc3lzdl9kZXN0cm95KG5ld19tdXRleCk7DQogICAgICAgICByZXR1 cm4gcnY7DQogICAgIH0NCisNCisgICAgLyogaW5pdGlhbGl6ZSB0aGUgc2Vt YXBob3JlICovDQogICAgIGljay52YWwgPSAxOw0KLSAgICBpZiAoc2VtY3Rs KG5ld19tdXRleC0+aW50ZXJwcm9jLT5maWxlZGVzLCAwLCBTRVRWQUwsIGlj aykgPCAwKSB7DQorICAgIGlmKHNlbWN0bChuZXdfbXV0ZXgtPnNlbWlkLCAw LCBTRVRWQUwsIGljaykgPCAwKSB7DQogICAgICAgICBydiA9IGVycm5vOw0K LSAgICAgICAgcHJvY19tdXRleF9zeXN2X2NsZWFudXAobmV3X211dGV4KTsN CisgICAgICAgIHByb2NfbXV0ZXhfc3lzdl9kZXN0cm95KG5ld19tdXRleCk7 DQogICAgICAgICByZXR1cm4gcnY7DQogICAgIH0NCisNCiAgICAgbmV3X211 dGV4LT5jdXJyX2xvY2tlZCA9IDA7DQotICAgIGFwcl9wb29sX2NsZWFudXBf cmVnaXN0ZXIobmV3X211dGV4LT5wb29sLA0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh2b2lkICopbmV3X211dGV4LCBhcHJfcHJvY19tdXRl eF9jbGVhbnVwLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh cHJfcG9vbF9jbGVhbnVwX251bGwpOw0KKyAgICBuZXdfbXV0ZXgtPmNsZWFu dXAgPSBwcm9jX211dGV4X3N5c3ZfZGVzdHJveTsNCiAgICAgcmV0dXJuIEFQ Ul9TVUNDRVNTOw0KIH0NCiANCitzdGF0aWMgYXByX3N0YXR1c190IHByb2Nf bXV0ZXhfc3lzdl9hdHRhY2goYXByX3Byb2NfbXV0ZXhfdCAqbmV3X211dGV4 LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpmbmFtZSkNCit7DQorICAgIG5ld19tdXRleC0+aW50 ZXJwcm9jID0gTlVMTDsNCisgICAgbmV3X211dGV4LT5zZW1pZCA9IC0xOw0K Kw0KKyAgICBhcHJfc3RhdHVzX3QgcnY7DQorICAgIHVuaW9uIHNlbXVuIGlj azsNCisNCisgICAgLyogb3BlbiB0aGUgZmlsZSAqLw0KKyAgICBydiA9IGFw cl9maWxlX29wZW4oDQorICAgICAgICAmKG5ld19tdXRleC0+aW50ZXJwcm9j KSwgZm5hbWUsDQorICAgICAgICBBUFJfRk9QRU5fUkVBRCwgQVBSX0ZQUk9U X1VSRUFEIHwgQVBSX0ZQUk9UX1VXUklURSwNCisgICAgICAgIG5ld19tdXRl eC0+cG9vbCk7DQorICAgIGlmIChydiAhPSBBUFJfU1VDQ0VTUykNCisgICAg ICAgIHJldHVybiBydjsNCisNCisgICAgLyogZ2V0IG91ciBrZXkgKi8NCisg ICAga2V5X3QgayA9IGZ0b2soZm5hbWUsIEFQUl9TWVNWX1BST0pJRCk7DQor ICAgIGlmIChrIDwgMCkNCisgICAgICAgIHJldHVybiBlcnJubzsNCisNCisg ICAgLyogb3BlbiB0aGUgc2VtYXBob3JlICovDQorICAgIG5ld19tdXRleC0+ c2VtaWQgPSBzZW1nZXQoaywgMSwgMDYwMCk7DQorICAgIGlmIChuZXdfbXV0 ZXgtPnNlbWlkIDwgMCkNCisgICAgICAgIHJldHVybiBlcnJubzsNCisNCisg ICAgbmV3X211dGV4LT5jdXJyX2xvY2tlZCA9IDA7DQorICAgIG5ld19tdXRl eC0+Y2xlYW51cCA9IHByb2NfbXV0ZXhfc3lzdl9kZXRhY2g7DQorICAgIHJl dHVybiBBUFJfU1VDQ0VTUzsNCit9DQorDQogc3RhdGljIGFwcl9zdGF0dXNf dCBwcm9jX211dGV4X3N5c3ZfYWNxdWlyZShhcHJfcHJvY19tdXRleF90ICpt dXRleCkNCiB7DQogICAgIGludCByYzsNCiANCiAgICAgZG8gew0KLSAgICAg ICAgcmMgPSBzZW1vcChtdXRleC0+aW50ZXJwcm9jLT5maWxlZGVzLCAmcHJv Y19tdXRleF9vcF9vbiwgMSk7DQorICAgICAgICByYyA9IHNlbW9wKG11dGV4 LT5zZW1pZCwgJnByb2NfbXV0ZXhfb3Bfb24sIDEpOw0KICAgICB9IHdoaWxl IChyYyA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOw0KICAgICBpZiAocmMgPCAw KSB7DQogICAgICAgICByZXR1cm4gZXJybm87DQpAQCAtMjM4LDcgKzMzMiw3 IEBADQogICAgIGludCByYzsNCiANCiAgICAgZG8gew0KLSAgICAgICAgcmMg PSBzZW1vcChtdXRleC0+aW50ZXJwcm9jLT5maWxlZGVzLCAmcHJvY19tdXRl eF9vcF90cnksIDEpOw0KKyAgICAgICAgcmMgPSBzZW1vcChtdXRleC0+c2Vt aWQsICZwcm9jX211dGV4X29wX3RyeSwgMSk7DQogICAgIH0gd2hpbGUgKHJj IDwgMCAmJiBlcnJubyA9PSBFSU5UUik7DQogICAgIGlmIChyYyA8IDApIHsN CiAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIHsNCkBAIC0yNTYsNyAr MzUwLDcgQEANCiANCiAgICAgbXV0ZXgtPmN1cnJfbG9ja2VkID0gMDsNCiAg ICAgZG8gew0KLSAgICAgICAgcmMgPSBzZW1vcChtdXRleC0+aW50ZXJwcm9j LT5maWxlZGVzLCAmcHJvY19tdXRleF9vcF9vZmYsIDEpOw0KKyAgICAgICAg cmMgPSBzZW1vcChtdXRleC0+c2VtaWQsICZwcm9jX211dGV4X29wX29mZiwg MSk7DQogICAgIH0gd2hpbGUgKHJjIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7 DQogICAgIGlmIChyYyA8IDApIHsNCiAgICAgICAgIHJldHVybiBlcnJubzsN CkBAIC0yNzIsMTAgKzM2NiwxMiBAQA0KICAgICAwLA0KICNlbmRpZg0KICAg ICBwcm9jX211dGV4X3N5c3ZfY3JlYXRlLA0KKyAgICBwcm9jX211dGV4X3N5 c3ZfYXR0YWNoLA0KICAgICBwcm9jX211dGV4X3N5c3ZfYWNxdWlyZSwNCiAg ICAgcHJvY19tdXRleF9zeXN2X3RyeWFjcXVpcmUsDQogICAgIHByb2NfbXV0 ZXhfc3lzdl9yZWxlYXNlLA0KLSAgICBwcm9jX211dGV4X3N5c3ZfY2xlYW51 cCwNCisgICAgcHJvY19tdXRleF9zeXN2X2RldGFjaCwNCisgICAgcHJvY19t dXRleF9zeXN2X2Rlc3Ryb3ksDQogICAgIHByb2NfbXV0ZXhfbm9fY2hpbGRf aW5pdCwNCiAgICAgInN5c3ZzZW0iDQogfTsNCkBAIC0yODQsNyArMzgwLDcg QEANCiANCiAjaWYgQVBSX0hBU19QUk9DX1BUSFJFQURfU0VSSUFMSVpFDQog DQotc3RhdGljIGFwcl9zdGF0dXNfdCBwcm9jX211dGV4X3Byb2NfcHRocmVh ZF9jbGVhbnVwKHZvaWQgKm11dGV4XykNCitzdGF0aWMgYXByX3N0YXR1c190 IHByb2NfbXV0ZXhfcHJvY19wdGhyZWFkX2Rlc3Ryb3kodm9pZCAqbXV0ZXhf KQ0KIHsNCiAgICAgYXByX3Byb2NfbXV0ZXhfdCAqbXV0ZXg9bXV0ZXhfOw0K ICAgICBhcHJfc3RhdHVzX3QgcnY7DQpAQCAtMzEyLDYgKzQwOCwyNiBAQA0K ICAgICByZXR1cm4gQVBSX1NVQ0NFU1M7DQogfQ0KIA0KK3N0YXRpYyBhcHJf c3RhdHVzX3QgcHJvY19tdXRleF9wcm9jX3B0aHJlYWRfZGV0YWNoKHZvaWQg Km11dGV4XykNCit7DQorICAgIGFwcl9wcm9jX211dGV4X3QgKm11dGV4PW11 dGV4XzsNCisgICAgYXByX3N0YXR1c190IHJ2Ow0KKw0KKyAgICBpZiAobXV0 ZXgtPmN1cnJfbG9ja2VkID09IDEpIHsNCisgICAgICAgIGlmICgocnYgPSBw dGhyZWFkX211dGV4X3VubG9jayhtdXRleC0+cHRocmVhZF9pbnRlcnByb2Mp KSkgew0KKyNpZmRlZiBQVEhSRUFEX1NFVFNfRVJSTk8NCisgICAgICAgICAg ICBydiA9IGVycm5vOw0KKyNlbmRpZg0KKyAgICAgICAgICAgIHJldHVybiBy djsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBpZiAobXVubWFwKChjYWRk cl90KW11dGV4LT5wdGhyZWFkX2ludGVycHJvYywgc2l6ZW9mKHB0aHJlYWRf bXV0ZXhfdCkpKSB7DQorICAgICAgICByZXR1cm4gZXJybm87DQorICAgIH0N CisgICAgcmV0dXJuIEFQUl9TVUNDRVNTOw0KK30NCisNCisNCiBzdGF0aWMg YXByX3N0YXR1c190IHByb2NfbXV0ZXhfcHJvY19wdGhyZWFkX2NyZWF0ZShh cHJfcHJvY19tdXRleF90ICpuZXdfbXV0ZXgsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqZm5hbWUpDQogew0KQEAgLTM0MSwxNCArNDU3LDE0IEBADQogI2lmZGVm IFBUSFJFQURfU0VUU19FUlJOTw0KICAgICAgICAgcnYgPSBlcnJubzsNCiAj ZW5kaWYNCi0gICAgICAgIHByb2NfbXV0ZXhfcHJvY19wdGhyZWFkX2NsZWFu dXAobmV3X211dGV4KTsNCisgICAgICAgIHByb2NfbXV0ZXhfcHJvY19wdGhy ZWFkX2Rlc3Ryb3kobmV3X211dGV4KTsNCiAgICAgICAgIHJldHVybiBydjsN CiAgICAgfQ0KICAgICBpZiAoKHJ2ID0gcHRocmVhZF9tdXRleGF0dHJfc2V0 cHNoYXJlZCgmbWF0dHIsIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQpKSkgew0K ICNpZmRlZiBQVEhSRUFEX1NFVFNfRVJSTk8NCiAgICAgICAgIHJ2ID0gZXJy bm87DQogI2VuZGlmDQotICAgICAgICBwcm9jX211dGV4X3Byb2NfcHRocmVh ZF9jbGVhbnVwKG5ld19tdXRleCk7DQorICAgICAgICBwcm9jX211dGV4X3By b2NfcHRocmVhZF9kZXN0cm95KG5ld19tdXRleCk7DQogICAgICAgICBwdGhy ZWFkX211dGV4YXR0cl9kZXN0cm95KCZtYXR0cik7DQogICAgICAgICByZXR1 cm4gcnY7DQogICAgIH0NCkBAIC0zNTksNyArNDc1LDcgQEANCiAjaWZkZWYg UFRIUkVBRF9TRVRTX0VSUk5PDQogICAgICAgICBydiA9IGVycm5vOw0KICNl bmRpZg0KLSAgICAgICAgcHJvY19tdXRleF9wcm9jX3B0aHJlYWRfY2xlYW51 cChuZXdfbXV0ZXgpOw0KKyAgICAgICAgcHJvY19tdXRleF9wcm9jX3B0aHJl YWRfZGVzdHJveShuZXdfbXV0ZXgpOw0KICAgICAgICAgcHRocmVhZF9tdXRl eGF0dHJfZGVzdHJveSgmbWF0dHIpOw0KICAgICAgICAgcmV0dXJuIHJ2Ow0K ICAgICB9DQpAQCAtMzY3LDcgKzQ4Myw3IEBADQogI2lmZGVmIFBUSFJFQURf U0VUU19FUlJOTw0KICAgICAgICAgcnYgPSBlcnJubzsNCiAjZW5kaWYNCi0g ICAgICAgIHByb2NfbXV0ZXhfcHJvY19wdGhyZWFkX2NsZWFudXAobmV3X211 dGV4KTsNCisgICAgICAgIHByb2NfbXV0ZXhfcHJvY19wdGhyZWFkX2Rlc3Ry b3kobmV3X211dGV4KTsNCiAgICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2Rl c3Ryb3koJm1hdHRyKTsNCiAgICAgICAgIHJldHVybiBydjsNCiAgICAgfQ0K QEAgLTM3Nyw3ICs0OTMsNyBAQA0KICNpZmRlZiBQVEhSRUFEX1NFVFNfRVJS Tk8NCiAgICAgICAgIHJ2ID0gZXJybm87DQogI2VuZGlmDQotICAgICAgICBw cm9jX211dGV4X3Byb2NfcHRocmVhZF9jbGVhbnVwKG5ld19tdXRleCk7DQor ICAgICAgICBwcm9jX211dGV4X3Byb2NfcHRocmVhZF9kZXN0cm95KG5ld19t dXRleCk7DQogICAgICAgICBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZt YXR0cik7DQogICAgICAgICByZXR1cm4gcnY7DQogICAgIH0NCkBAIC0zODgs MTQgKzUwNCwxMSBAQA0KICNpZmRlZiBQVEhSRUFEX1NFVFNfRVJSTk8NCiAg ICAgICAgIHJ2ID0gZXJybm87DQogI2VuZGlmDQotICAgICAgICBwcm9jX211 dGV4X3Byb2NfcHRocmVhZF9jbGVhbnVwKG5ld19tdXRleCk7DQorICAgICAg ICBwcm9jX211dGV4X3Byb2NfcHRocmVhZF9kZXN0cm95KG5ld19tdXRleCk7 DQogICAgICAgICByZXR1cm4gcnY7DQogICAgIH0NCiANCi0gICAgYXByX3Bv b2xfY2xlYW51cF9yZWdpc3RlcihuZXdfbXV0ZXgtPnBvb2wsDQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiluZXdfbXV0ZXgsDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Byb2NfbXV0ZXhf Y2xlYW51cCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy X3Bvb2xfY2xlYW51cF9udWxsKTsNCisgICAgbmV3X211dGV4LT5jbGVhbnVw ID0gcHJvY19tdXRleF9wcm9jX3B0aHJlYWRfZGVzdHJveTsNCiAgICAgcmV0 dXJuIEFQUl9TVUNDRVNTOw0KIH0NCiANCkBAIC00NjcsMTAgKzU4MCwxMiBA QA0KIHsNCiAgICAgQVBSX1BST0NFU1NfTE9DS19NRUNIX0lTX0dMT0JBTCwN CiAgICAgcHJvY19tdXRleF9wcm9jX3B0aHJlYWRfY3JlYXRlLA0KKyAgICBw cm9jX211dGV4X25vX2F0dGFjaCwNCiAgICAgcHJvY19tdXRleF9wcm9jX3B0 aHJlYWRfYWNxdWlyZSwNCiAgICAgcHJvY19tdXRleF9wcm9jX3B0aHJlYWRf dHJ5YWNxdWlyZSwNCiAgICAgcHJvY19tdXRleF9wcm9jX3B0aHJlYWRfcmVs ZWFzZSwNCi0gICAgcHJvY19tdXRleF9wcm9jX3B0aHJlYWRfY2xlYW51cCwN CisgICAgcHJvY19tdXRleF9wcm9jX3B0aHJlYWRfZGV0YWNoLA0KKyAgICBw cm9jX211dGV4X3Byb2NfcHRocmVhZF9kZXN0cm95LA0KICAgICBwcm9jX211 dGV4X25vX2NoaWxkX2luaXQsDQogICAgICJwdGhyZWFkIg0KIH07DQpAQCAt NDk4LDcgKzYxMyw3IEBADQogICAgIHByb2NfbXV0ZXhfdW5sb2NrX2l0Lmxf cGlkID0gMDsgICAgICAgICAgIC8qIHBpZCBub3QgYWN0dWFsbHkgaW50ZXJl c3RpbmcgKi8NCiB9DQogDQotc3RhdGljIGFwcl9zdGF0dXNfdCBwcm9jX211 dGV4X2ZjbnRsX2NsZWFudXAodm9pZCAqbXV0ZXhfKQ0KK3N0YXRpYyBhcHJf c3RhdHVzX3QgcHJvY19tdXRleF9mY250bF9kZXN0cm95KHZvaWQgKm11dGV4 XykNCiB7DQogICAgIGFwcl9zdGF0dXNfdCBzdGF0dXM7DQogICAgIGFwcl9w cm9jX211dGV4X3QgKm11dGV4PW11dGV4XzsNCkBAIC01MDgsMTAgKzYyMywy NSBAQA0KICAgICAgICAgaWYgKHN0YXR1cyAhPSBBUFJfU1VDQ0VTUykNCiAg ICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KICAgICB9DQorICAgIHVubGlu ayhtdXRleC0+Zm5hbWUpOw0KICAgICAgICAgDQogICAgIHJldHVybiBhcHJf ZmlsZV9jbG9zZShtdXRleC0+aW50ZXJwcm9jKTsNCiB9ICAgIA0KIA0KK3N0 YXRpYyBhcHJfc3RhdHVzX3QgcHJvY19tdXRleF9mY250bF9kZXRhY2godm9p ZCAqbXV0ZXhfKQ0KK3sNCisgICAgYXByX3N0YXR1c190IHN0YXR1czsNCisg ICAgYXByX3Byb2NfbXV0ZXhfdCAqbXV0ZXg9bXV0ZXhfOw0KKw0KKyAgICBp ZiAobXV0ZXgtPmN1cnJfbG9ja2VkID09IDEpIHsNCisgICAgICAgIHN0YXR1 cyA9IHByb2NfbXV0ZXhfZmNudGxfcmVsZWFzZShtdXRleCk7DQorICAgICAg ICBpZiAoc3RhdHVzICE9IEFQUl9TVUNDRVNTKQ0KKyAgICAgICAgICAgIHJl dHVybiBzdGF0dXM7DQorICAgIH0NCisgICAgICAgIA0KKyAgICByZXR1cm4g YXByX2ZpbGVfY2xvc2UobXV0ZXgtPmludGVycHJvYyk7DQorfSAgICANCisN CiBzdGF0aWMgYXByX3N0YXR1c190IHByb2NfbXV0ZXhfZmNudGxfY3JlYXRl KGFwcl9wcm9jX211dGV4X3QgKm5ld19tdXRleCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZu YW1lKQ0KIHsNCkBAIC01MzYsMTEgKzY2Niw3IEBADQogICAgIH0NCiANCiAg ICAgbmV3X211dGV4LT5jdXJyX2xvY2tlZCA9IDA7DQotICAgIHVubGluayhu ZXdfbXV0ZXgtPmZuYW1lKTsNCi0gICAgYXByX3Bvb2xfY2xlYW51cF9yZWdp c3RlcihuZXdfbXV0ZXgtPnBvb2wsDQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHZvaWQqKW5ld19tdXRleCwNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcHJfcHJvY19tdXRleF9jbGVhbnVwLCANCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF9jbGVhbnVwX251 bGwpOw0KKyAgICBuZXdfbXV0ZXgtPmNsZWFudXAgPSBwcm9jX211dGV4X2Zj bnRsX2Rlc3Ryb3k7DQogICAgIHJldHVybiBBUFJfU1VDQ0VTUzsgDQogfQ0K IA0KQEAgLTU5NywxMCArNzIzLDEyIEBADQogICAgIDAsDQogI2VuZGlmDQog ICAgIHByb2NfbXV0ZXhfZmNudGxfY3JlYXRlLA0KKyAgICBwcm9jX211dGV4 X25vX2F0dGFjaCwNCiAgICAgcHJvY19tdXRleF9mY250bF9hY3F1aXJlLA0K ICAgICBwcm9jX211dGV4X2ZjbnRsX3RyeWFjcXVpcmUsDQogICAgIHByb2Nf bXV0ZXhfZmNudGxfcmVsZWFzZSwNCi0gICAgcHJvY19tdXRleF9mY250bF9j bGVhbnVwLA0KKyAgICBwcm9jX211dGV4X2ZjbnRsX2RldGFjaCwNCisgICAg cHJvY19tdXRleF9mY250bF9kZXN0cm95LA0KICAgICBwcm9jX211dGV4X25v X2NoaWxkX2luaXQsDQogICAgICJmY250bCINCiB9Ow0KQEAgLTYxMSw3ICs3 MzksNyBAQA0KIA0KIHN0YXRpYyBhcHJfc3RhdHVzX3QgcHJvY19tdXRleF9m bG9ja19yZWxlYXNlKGFwcl9wcm9jX211dGV4X3QgKik7DQogDQotc3RhdGlj IGFwcl9zdGF0dXNfdCBwcm9jX211dGV4X2Zsb2NrX2NsZWFudXAodm9pZCAq bXV0ZXhfKQ0KK3N0YXRpYyBhcHJfc3RhdHVzX3QgcHJvY19tdXRleF9mbG9j a19kZXN0cm95KHZvaWQgKm11dGV4XykNCiB7DQogICAgIGFwcl9zdGF0dXNf dCBzdGF0dXM7DQogICAgIGFwcl9wcm9jX211dGV4X3QgKm11dGV4PW11dGV4 XzsNCkBAIC02MjgsNiArNzU2LDIyIEBADQogICAgIHJldHVybiBBUFJfU1VD Q0VTUzsNCiB9ICAgIA0KIA0KK3N0YXRpYyBhcHJfc3RhdHVzX3QgcHJvY19t dXRleF9mbG9ja19kZXRhY2godm9pZCAqbXV0ZXhfKQ0KK3sNCisgICAgYXBy X3N0YXR1c190IHN0YXR1czsNCisgICAgYXByX3Byb2NfbXV0ZXhfdCAqbXV0 ZXg9bXV0ZXhfOw0KKw0KKyAgICBpZiAobXV0ZXgtPmN1cnJfbG9ja2VkID09 IDEpIHsNCisgICAgICAgIHN0YXR1cyA9IHByb2NfbXV0ZXhfZmxvY2tfcmVs ZWFzZShtdXRleCk7DQorICAgICAgICBpZiAoc3RhdHVzICE9IEFQUl9TVUND RVNTKQ0KKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQorICAgIH0NCisg ICAgaWYgKG11dGV4LT5pbnRlcnByb2MpIHsgLyogaWYgaXQgd2FzIG9wZW5l ZCBwcm9wZXJseSAqLw0KKyAgICAgICAgYXByX2ZpbGVfY2xvc2UobXV0ZXgt PmludGVycHJvYyk7DQorICAgIH0NCisgICAgcmV0dXJuIEFQUl9TVUNDRVNT Ow0KK30gICAgDQorDQogc3RhdGljIGFwcl9zdGF0dXNfdCBwcm9jX211dGV4 X2Zsb2NrX2NyZWF0ZShhcHJfcHJvY19tdXRleF90ICpuZXdfbXV0ZXgsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpmbmFtZSkNCiB7DQpAQCAtNjQ4LDEzICs3OTIsMTEgQEAN CiAgICAgfQ0KICANCiAgICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7DQot ICAgICAgICBwcm9jX211dGV4X2Zsb2NrX2NsZWFudXAobmV3X211dGV4KTsN CisgICAgICAgIHByb2NfbXV0ZXhfZmxvY2tfZGVzdHJveShuZXdfbXV0ZXgp Ow0KICAgICAgICAgcmV0dXJuIGVycm5vOw0KICAgICB9DQogICAgIG5ld19t dXRleC0+Y3Vycl9sb2NrZWQgPSAwOw0KLSAgICBhcHJfcG9vbF9jbGVhbnVw X3JlZ2lzdGVyKG5ld19tdXRleC0+cG9vbCwgKHZvaWQgKiluZXdfbXV0ZXgs DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Byb2NfbXV0 ZXhfY2xlYW51cCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh cHJfcG9vbF9jbGVhbnVwX251bGwpOw0KKyAgICBuZXdfbXV0ZXgtPmNsZWFu dXAgPSBwcm9jX211dGV4X2Zsb2NrX2Rlc3Ryb3k7DQogICAgIHJldHVybiBB UFJfU1VDQ0VTUzsNCiB9DQogDQpAQCAtNzM1LDEwICs4NzcsMTIgQEANCiAg ICAgMCwNCiAjZW5kaWYNCiAgICAgcHJvY19tdXRleF9mbG9ja19jcmVhdGUs DQorICAgIHByb2NfbXV0ZXhfbm9fYXR0YWNoLA0KICAgICBwcm9jX211dGV4 X2Zsb2NrX2FjcXVpcmUsDQogICAgIHByb2NfbXV0ZXhfZmxvY2tfdHJ5YWNx dWlyZSwNCiAgICAgcHJvY19tdXRleF9mbG9ja19yZWxlYXNlLA0KLSAgICBw cm9jX211dGV4X2Zsb2NrX2NsZWFudXAsDQorICAgIHByb2NfbXV0ZXhfZmxv Y2tfZGV0YWNoLA0KKyAgICBwcm9jX211dGV4X2Zsb2NrX2Rlc3Ryb3ksDQog ICAgIHByb2NfbXV0ZXhfZmxvY2tfY2hpbGRfaW5pdCwNCiAgICAgImZsb2Nr Ig0KIH07DQpAQCAtODQ1LDYgKzk4OSwzNyBAQA0KICAgICByZXR1cm4gQVBS X1NVQ0NFU1M7DQogfQ0KIA0KK0FQUl9ERUNMQVJFKGFwcl9zdGF0dXNfdCkg YXByX3Byb2NfbXV0ZXhfZGV0YWNoKGFwcl9wcm9jX211dGV4X3QgKm11dGV4 KQ0KK3sNCisgICAgYXByX3Bvb2xfY2xlYW51cF9raWxsKG11dGV4LT5wb29s LCAodm9pZCAqKW11dGV4LCBhcHJfcHJvY19tdXRleF9jbGVhbnVwKTsNCisg ICAgcmV0dXJuIG11dGV4LT5tZXRoLT5kZXRhY2gobXV0ZXgpOw0KK30NCisN CitBUFJfREVDTEFSRShhcHJfc3RhdHVzX3QpIGFwcl9wcm9jX211dGV4X2Rl c3Ryb3koYXByX3Byb2NfbXV0ZXhfdCAqbXV0ZXgpDQorew0KKyAgICBhcHJf cG9vbF9jbGVhbnVwX2tpbGwobXV0ZXgtPnBvb2wsICh2b2lkICopbXV0ZXgs IGFwcl9wcm9jX211dGV4X2NsZWFudXApOw0KKyAgICByZXR1cm4gbXV0ZXgt Pm1ldGgtPmRlc3Ryb3kobXV0ZXgpOw0KK30NCisNCitzdGF0aWMgYXByX3N0 YXR1c190IHByb2NfbXV0ZXhfYXR0YWNoKGFwcl9wcm9jX211dGV4X3QgKm5l d19tdXRleCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9sb2NrbWVjaF9lIG1lY2gsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbmFtZSkNCit7DQor ICAgIGFwcl9zdGF0dXNfdCBydjsNCisNCisgICAgaWYgKChydiA9IHByb2Nf bXV0ZXhfY2hvb3NlX21ldGhvZChuZXdfbXV0ZXgsIG1lY2gpKSAhPSBBUFJf U1VDQ0VTUykgew0KKyAgICAgICAgcmV0dXJuIHJ2Ow0KKyAgICB9DQorDQor ICAgIG5ld19tdXRleC0+bWV0aCA9IG5ld19tdXRleC0+aW50ZXJfbWV0aDsN CisNCisgICAgaWYgKChydiA9IG5ld19tdXRleC0+bWV0aC0+YXR0YWNoKG5l d19tdXRleCwgZm5hbWUpKSAhPSBBUFJfU1VDQ0VTUykgew0KKyAgICAgICAg cmV0dXJuIHJ2Ow0KKyAgICB9DQorDQorICAgIHJldHVybiBBUFJfU1VDQ0VT UzsNCit9DQorDQogQVBSX0RFQ0xBUkUoYXByX3N0YXR1c190KSBhcHJfcHJv Y19tdXRleF9jcmVhdGUoYXByX3Byb2NfbXV0ZXhfdCAqKm11dGV4LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmZuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9sb2NrbWVjaF9lIG1lY2gs DQpAQCAtODU5LDEwICsxMDM0LDMzIEBADQogICAgIGlmICgocnYgPSBwcm9j X211dGV4X2NyZWF0ZShuZXdfbXV0ZXgsIG1lY2gsIGZuYW1lKSkgIT0gQVBS X1NVQ0NFU1MpDQogICAgICAgICByZXR1cm4gcnY7DQogDQorICAgIGFwcl9w b29sX2NsZWFudXBfcmVnaXN0ZXIobmV3X211dGV4LT5wb29sLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopbmV3X211dGV4LA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wcm9jX211dGV4 X2NsZWFudXAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy X3Bvb2xfY2xlYW51cF9udWxsKTsNCisNCiAgICAgKm11dGV4ID0gbmV3X211 dGV4Ow0KICAgICByZXR1cm4gQVBSX1NVQ0NFU1M7DQogfQ0KIA0KK0FQUl9E RUNMQVJFKGFwcl9zdGF0dXNfdCkgYXByX3Byb2NfbXV0ZXhfYXR0YWNoKGFw cl9wcm9jX211dGV4X3QgKiptdXRleCwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbmFt ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhcHJfbG9ja21lY2hfZSBtZWNoLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3Qg KnBvb2wpDQorew0KKyAgICBhcHJfcHJvY19tdXRleF90ICpuZXdfbXV0ZXg7 DQorICAgIGFwcl9zdGF0dXNfdCBydjsNCisNCisgICAgbmV3X211dGV4ID0g YXByX3BjYWxsb2MocG9vbCwgc2l6ZW9mKGFwcl9wcm9jX211dGV4X3QpKTsN CisgICAgbmV3X211dGV4LT5wb29sID0gcG9vbDsNCisNCisgICAgaWYgKChy diA9IHByb2NfbXV0ZXhfYXR0YWNoKG5ld19tdXRleCwgbWVjaCwgZm5hbWUp KSAhPSBBUFJfU1VDQ0VTUykNCisgICAgICAgIHJldHVybiBydjsNCisNCisg ICAgKm11dGV4ID0gbmV3X211dGV4Ow0KKyAgICByZXR1cm4gQVBSX1NVQ0NF U1M7DQorfQ0KKw0KIEFQUl9ERUNMQVJFKGFwcl9zdGF0dXNfdCkgYXByX3By b2NfbXV0ZXhfY2hpbGRfaW5pdChhcHJfcHJvY19tdXRleF90ICoqbXV0ZXgs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmZuYW1lLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9v bF90ICpwb29sKQ0KQEAgLTg4Nyw3ICsxMDg1LDcgQEANCiANCiBBUFJfREVD TEFSRShhcHJfc3RhdHVzX3QpIGFwcl9wcm9jX211dGV4X2NsZWFudXAodm9p ZCAqbXV0ZXgpDQogew0KLSAgICByZXR1cm4gKChhcHJfcHJvY19tdXRleF90 ICopbXV0ZXgpLT5tZXRoLT5jbGVhbnVwKG11dGV4KTsNCisgICAgcmV0dXJu ICgoYXByX3Byb2NfbXV0ZXhfdCAqKW11dGV4KS0+Y2xlYW51cChtdXRleCk7 DQogfQ0KIA0KIEFQUl9ERUNMQVJFKGNvbnN0IGNoYXIgKikgYXByX3Byb2Nf bXV0ZXhfbmFtZShhcHJfcHJvY19tdXRleF90ICptdXRleCkNCkBAIC05NDgs NCArMTE0NiwzIEBADQogI2VuZGlmDQogICAgIHJldHVybiBBUFJfU1VDQ0VT UzsNCiB9DQotDQpJbmRleDogdGVzdC90ZXN0cHJvY211dGV4LmMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSB0ZXN0L3Rlc3Rwcm9jbXV0ZXguYwko cmV2aXNpb24gMzg4MzIxKQ0KKysrIHRlc3QvdGVzdHByb2NtdXRleC5jCSh3 b3JraW5nIGNvcHkpDQpAQCAtMzEsOSArMzEsMTEgQEANCiAjZGVmaW5lIE1B WF9JVEVSIDIwMA0KICNkZWZpbmUgQ0hJTERSRU4gNg0KICNkZWZpbmUgTUFY X0NPVU5URVIgKE1BWF9JVEVSICogQ0hJTERSRU4pDQorI2RlZmluZSBDT0RF X05PVElNUEwgNDINCiANCiBzdGF0aWMgYXByX3Byb2NfbXV0ZXhfdCAqcHJv Y19sb2NrOw0KIHN0YXRpYyB2b2xhdGlsZSBpbnQgKng7DQorc3RhdGljIGlu dCBleHBlY3RlZF94Ow0KIA0KIC8qIGEgc2xvd2VyIG1vcmUgcmFjeSB3YXkg dG8gaW1wbGVtZW50ICgqeCkrKyAqLw0KIHN0YXRpYyBpbnQgaW5jcmVtZW50 KGludCBuKQ0KQEAgLTQyLDcgKzQ0LDggQEANCiAgICAgcmV0dXJuIG4rMTsN CiB9DQogDQotc3RhdGljIHZvaWQgbWFrZV9jaGlsZChhYnRzX2Nhc2UgKnRj LCBhcHJfcHJvY190ICoqcHJvYywgYXByX3Bvb2xfdCAqcCkNCitzdGF0aWMg dm9pZCBtYWtlX2NoaWxkKGFidHNfY2FzZSAqdGMsIGFwcl9wcm9jX3QgKipw cm9jLCBjb25zdCBjaGFyKiBsb2NrbmFtZSwNCisgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9sb2NrbWVjaF9lIG1lY2gsIGFwcl9wb29sX3QgKnApDQog ew0KICAgICBhcHJfc3RhdHVzX3QgcnY7DQogDQpAQCAtNjMsMTggKzY2LDMw IEBADQogICAgICAgICAgKiBkaWUuICBUaGF0IG1lYW5zIHRoYXQgdGhlIHRl c3Qgd2lsbCBtb3N0IGxpa2VseSBmYWlsLg0KICAgICAgICAgICovDQogICAg ICAgICBhcHJfaW5pdGlhbGl6ZSgpOw0KKyAgICAgICAgYXByX3Byb2NfbXV0 ZXhfdCogbXV0ZXggPSBwcm9jX2xvY2s7DQogDQotICAgICAgICBpZiAoYXBy X3Byb2NfbXV0ZXhfY2hpbGRfaW5pdCgmcHJvY19sb2NrLCBOVUxMLCBwKSkN CisgICAgICAgIGlmIChsb2NrbmFtZSA9PSBOVUxMKQ0KKyAgICAgICAgICAg IHJ2ID0gYXByX3Byb2NfbXV0ZXhfY2hpbGRfaW5pdCgmbXV0ZXgsIE5VTEws IHApOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHJ2ID0gYXByX3By b2NfbXV0ZXhfYXR0YWNoKCZtdXRleCwgbG9ja25hbWUsIG1lY2gsIHApOw0K KyAgICAgICAgaWYgKEFQUl9TVEFUVVNfSVNfRU5PVElNUEwocnYpKQ0KKyAg ICAgICAgICAgIGV4aXQoQ09ERV9OT1RJTVBMKTsNCisgICAgICAgIGVsc2Ug aWYgKHJ2KQ0KICAgICAgICAgICAgIGV4aXQoMSk7DQogDQogICAgICAgICBk byB7DQotICAgICAgICAgICAgaWYgKGFwcl9wcm9jX211dGV4X2xvY2socHJv Y19sb2NrKSkNCisgICAgICAgICAgICBpZiAoYXByX3Byb2NfbXV0ZXhfbG9j ayhtdXRleCkpDQogICAgICAgICAgICAgICAgIGV4aXQoMSk7DQogICAgICAg ICAgICAgaSsrOw0KICAgICAgICAgICAgICp4ID0gaW5jcmVtZW50KCp4KTsN Ci0gICAgICAgICAgICBpZiAoYXByX3Byb2NfbXV0ZXhfdW5sb2NrKHByb2Nf bG9jaykpDQorICAgICAgICAgICAgaWYgKGFwcl9wcm9jX211dGV4X3VubG9j ayhtdXRleCkpDQogICAgICAgICAgICAgICAgIGV4aXQoMSk7DQogICAgICAg ICB9IHdoaWxlIChpIDwgTUFYX0lURVIpOw0KKw0KKyAgICAgICAgaWYobG9j a25hbWUgIT0gTlVMTCkNCisgICAgICAgICAgICBpZihhcHJfcHJvY19tdXRl eF9kZXRhY2gobXV0ZXgpKQ0KKyAgICAgICAgICAgICAgICBleGl0KDEpOw0K KyAgICAgICAgDQogICAgICAgICBleGl0KDApOw0KICAgICB9IA0KIA0KQEAg LTkwLDcgKzEwNSwxMiBAQA0KIA0KICAgICBydiA9IGFwcl9wcm9jX3dhaXQo cHJvYywgJmNvZGUsICZ3aHksIEFQUl9XQUlUKTsNCiAgICAgQUJUU19BU1NF UlQodGMsICJjaGlsZCBkaWQgbm90IHRlcm1pbmF0ZSB3aXRoIHN1Y2Nlc3Mi LA0KLSAgICAgICAgICAgICBydiA9PSBBUFJfQ0hJTERfRE9ORSAmJiB3aHkg PT0gQVBSX1BST0NfRVhJVCAmJiBjb2RlID09IDApOw0KKyAgICAgICAgICAg ICBydiA9PSBBUFJfQ0hJTERfRE9ORSAmJg0KKyAgICAgICAgICAgICB3aHkg PT0gQVBSX1BST0NfRVhJVCAmJg0KKyAgICAgICAgICAgICAoY29kZSA9PSAw IHx8IGNvZGUgPT0gQ09ERV9OT1RJTVBMKSk7DQorICAgIA0KKyAgICBpZihj b2RlID09IENPREVfTk9USU1QTCkNCisgICAgICAgIGV4cGVjdGVkX3ggLT0g TUFYX0lURVI7DQogfQ0KIA0KIHN0YXRpYyB2b2lkIHRlc3RfZXhjbHVzaXZl KGFidHNfY2FzZSAqdGMsIGNvbnN0IGNoYXIgKmxvY2tuYW1lLCANCkBAIC0x MDQsMTQgKzEyNCwyMCBAQA0KICAgICBBUFJfQVNTRVJUX1NVQ0NFU1ModGMs ICJjcmVhdGUgdGhlIG11dGV4IiwgcnYpOw0KICAgICBpZiAocnYgIT0gQVBS X1NVQ0NFU1MpDQogICAgICAgICByZXR1cm47DQorDQorICAgICp4ID0gMDsN CisgICAgZXhwZWN0ZWRfeCA9IE1BWF9DT1VOVEVSOw0KICANCiAgICAgZm9y IChuID0gMDsgbiA8IENISUxEUkVOOyBuKyspDQotICAgICAgICBtYWtlX2No aWxkKHRjLCAmY2hpbGRbbl0sIHApOw0KKyAgICAgICAgbWFrZV9jaGlsZCh0 YywgJmNoaWxkW25dLCBsb2NrbmFtZSwgbWVjaCwgcCk7DQogDQogICAgIGZv ciAobiA9IDA7IG4gPCBDSElMRFJFTjsgbisrKQ0KICAgICAgICAgYXdhaXRf Y2hpbGQodGMsIGNoaWxkW25dKTsNCiAgICAgDQotICAgIEFCVFNfQVNTRVJU KHRjLCAiTG9ja3MgZG9uJ3QgYXBwZWFyIHRvIHdvcmsiLCAqeCA9PSBNQVhf Q09VTlRFUik7DQorICAgIEFCVFNfQVNTRVJUKHRjLCAiTG9ja3MgZG9uJ3Qg YXBwZWFyIHRvIHdvcmsiLCAqeCA9PSBleHBlY3RlZF94KTsNCisgICAgDQor ICAgIHJ2ID0gYXByX3Byb2NfbXV0ZXhfZGVzdHJveShwcm9jX2xvY2spOw0K KyAgICBBUFJfQVNTRVJUX1NVQ0NFU1ModGMsICJkZXN0cm95IHRoZSBtdXRl eCIsIHJ2KTsNCiB9DQogI2VuZGlmDQogDQpAQCAtMTIwLDYgKzE0Niw3IEBA DQogI2lmIEFQUl9IQVNfRk9SSw0KICAgICBhcHJfc3RhdHVzX3QgcnY7DQog ICAgIGNvbnN0IGNoYXIgKnNobW5hbWUgPSAidHBtLnNobSI7DQorICAgIGNv bnN0IGNoYXIgKmxja25hbWUgPSAidHBtLmxjayI7DQogICAgIGFwcl9zaG1f dCAqc2htOw0KICAgICBhcHJfbG9ja21lY2hfZSAqbWVjaCA9IGRhdGE7DQog DQpAQCAtMTM1LDcgKzE2MiwxMCBAQA0KICAgICAgICAgcmV0dXJuOw0KIA0K ICAgICB4ID0gYXByX3NobV9iYXNlYWRkcl9nZXQoc2htKTsNCisgICAgLyog dGVzdCB1bm5hbWVkIGxvY2sgKi8NCiAgICAgdGVzdF9leGNsdXNpdmUodGMs IE5VTEwsICptZWNoKTsNCisgICAgLyogdGVzdCBuYW1lZCBsb2NrICovDQor ICAgIHRlc3RfZXhjbHVzaXZlKHRjLCBsY2tuYW1lLCAqbWVjaCk7DQogICAg IHJ2ID0gYXByX3NobV9kZXN0cm95KHNobSk7DQogICAgIEFQUl9BU1NFUlRf U1VDQ0VTUyh0YywgIkVycm9yIGRlc3Ryb3lpbmcgc2hhcmVkIG1lbW9yeSBi bG9jayIsIHJ2KTsNCiAjZWxzZQ0KSW5kZXg6IGluY2x1ZGUvYXJjaC91bml4 L2Fwcl9hcmNoX3Byb2NfbXV0ZXguaA0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGluY2x1ZGUvYXJjaC91bml4L2Fwcl9hcmNoX3Byb2NfbXV0ZXgu aAkocmV2aXNpb24gMzg4MzIxKQ0KKysrIGluY2x1ZGUvYXJjaC91bml4L2Fw cl9hcmNoX3Byb2NfbXV0ZXguaAkod29ya2luZyBjb3B5KQ0KQEAgLTcwLDEw ICs3MCwxMiBAQA0KIHN0cnVjdCBhcHJfcHJvY19tdXRleF91bml4X2xvY2tf bWV0aG9kc190IHsNCiAgICAgdW5zaWduZWQgaW50IGZsYWdzOw0KICAgICBh cHJfc3RhdHVzX3QgKCpjcmVhdGUpKGFwcl9wcm9jX211dGV4X3QgKiwgY29u c3QgY2hhciAqKTsNCisgICAgYXByX3N0YXR1c190ICgqYXR0YWNoKShhcHJf cHJvY19tdXRleF90ICosIGNvbnN0IGNoYXIgKik7DQogICAgIGFwcl9zdGF0 dXNfdCAoKmFjcXVpcmUpKGFwcl9wcm9jX211dGV4X3QgKik7DQogICAgIGFw cl9zdGF0dXNfdCAoKnRyeWFjcXVpcmUpKGFwcl9wcm9jX211dGV4X3QgKik7 DQogICAgIGFwcl9zdGF0dXNfdCAoKnJlbGVhc2UpKGFwcl9wcm9jX211dGV4 X3QgKik7DQotICAgIGFwcl9zdGF0dXNfdCAoKmNsZWFudXApKHZvaWQgKik7 DQorICAgIGFwcl9zdGF0dXNfdCAoKmRldGFjaCkodm9pZCAqKTsNCisgICAg YXByX3N0YXR1c190ICgqZGVzdHJveSkodm9pZCAqKTsNCiAgICAgYXByX3N0 YXR1c190ICgqY2hpbGRfaW5pdCkoYXByX3Byb2NfbXV0ZXhfdCAqKiwgYXBy X3Bvb2xfdCAqLCBjb25zdCBjaGFyICopOw0KICAgICBjb25zdCBjaGFyICpu YW1lOw0KIH07DQpAQCAtOTgsNiArMTAwLDcgQEANCiAgICAgY2hhciAqZm5h bWU7DQogI2lmIEFQUl9IQVNfU1lTVlNFTV9TRVJJQUxJWkUgfHwgQVBSX0hB U19GQ05UTF9TRVJJQUxJWkUgfHwgQVBSX0hBU19GTE9DS19TRVJJQUxJWkUN CiAgICAgYXByX2ZpbGVfdCAqaW50ZXJwcm9jOw0KKyAgICBpbnQgc2VtaWQ7 DQogI2VuZGlmDQogI2lmIEFQUl9IQVNfUE9TSVhTRU1fU0VSSUFMSVpFDQog ICAgIHNlbV90ICpwc2VtX2ludGVycHJvYzsNCkBAIC0xMDUsOSArMTA4LDE0 IEBADQogI2lmIEFQUl9IQVNfUFJPQ19QVEhSRUFEX1NFUklBTElaRQ0KICAg ICBwdGhyZWFkX211dGV4X3QgKnB0aHJlYWRfaW50ZXJwcm9jOw0KICNlbmRp Zg0KKyAgICBhcHJfc3RhdHVzX3QgKCpjbGVhbnVwKSh2b2lkICopOw0KIH07 DQogDQogdm9pZCBhcHJfcHJvY19tdXRleF91bml4X3NldHVwX2xvY2sodm9p ZCk7DQogDQorI2lmIEFQUl9IQVNfU1lTVlNFTV9TRVJJQUxJWkUNCisjZGVm aW5lIEFQUl9TWVNWX1BST0pJRCA0Mg0KKyNlbmRpZg0KKw0KICNlbmRpZiAg LyogUFJPQ19NVVRFWF9IICovDQogDQpJbmRleDogaW5jbHVkZS9hcHJfcHJv Y19tdXRleC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaW5jbHVk ZS9hcHJfcHJvY19tdXRleC5oCShyZXZpc2lvbiAzODgzMjEpDQorKysgaW5j bHVkZS9hcHJfcHJvY19tdXRleC5oCSh3b3JraW5nIGNvcHkpDQpAQCAtNzUs MTEgKzc1LDQzIEBADQogICogQHNlZSBhcHJfbG9ja21lY2hfZQ0KICAqIEB3 YXJuaW5nIENoZWNrIEFQUl9IQVNfZm9vX1NFUklBTElaRSBkZWZpbmVzIHRv IHNlZSBpZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMNCiAgKiAgICAgICAgICBB UFJfTE9DS19mb28uICBPbmx5IEFQUl9MT0NLX0RFRkFVTFQgaXMgcG9ydGFi bGUuDQorICogQHJlbWFyayBUaGUgZGVmYXVsdCBjbGVhbnVwIGFjdGlvbiBm b3IgbXV0ZXhlcyBjcmVhdGVkIHdpdGggdGhpcyBmdW5jdGlvbiBpcw0KKyAq ICAgICAgICAgdG8gZGVzdHJveSB0aGVtLiBJZiB5b3Ugd2FudCB0byBkZXRh Y2ggZnJvbSB0aGVtIGluc3RlYWQsIHlvdSB3aWxsDQorICogICAgICAgICBo YXZlIHRvIGRvIHNvIGV4cGxpY2l0bHkgd2l0aCBhIGNhbGwgdG8gOjphcHJf cHJvY19tdXRleF9kZXRhY2goKS4NCiAgKi8NCiBBUFJfREVDTEFSRShhcHJf c3RhdHVzX3QpIGFwcl9wcm9jX211dGV4X2NyZWF0ZShhcHJfcHJvY19tdXRl eF90ICoqbXV0ZXgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm5hbWUsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy X2xvY2ttZWNoX2UgbWVjaCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsNCisv KioNCisgKiBBdHRhY2ggdG8gYSBuYW1lZCBtdXRleCB0aGF0IGNhbiBiZSB1 c2VkIHRvIHN5bmNocm9uaXplIHByb2Nlc3Nlcy4NCisgKg0KKyAqIFRoaXMg aXMgdmVyeSBtdWNoIGxpa2UgYXByX3Byb2NfbXV0ZXhfY3JlYXRlKCksIGJ1 dCBpdCBhdHRhY2hlcyB0byBhIG11dGV4DQorICogdGhhdCBoYXMgYWxyZWFk eSBiZWVuIGNyZWF0ZWQuDQorICogQHBhcmFtIG11dGV4IHRoZSBtZW1vcnkg YWRkcmVzcyB3aGVyZSB0aGUgbmV3bHkgY3JlYXRlZCBtdXRleCB3aWxsIGJl DQorICogICAgICAgIHN0b3JlZC4NCisgKiBAcGFyYW0gZm5hbWUgQSBmaWxl IG5hbWUgdG8gdXNlLiBUaGlzIGFyZ3VtZW50IHNob3VsZCBoYXMgdG8gYmUg cHJvdmlkZWQuDQorICogQHBhcmFtIG1lY2ggVGhlIG1lY2hhbmlzbSB0byB1 c2UgZm9yIHRoZSBpbnRlcnByb2Nlc3MgbG9jaywgaWYgYW55OyBvbmUgb2YN CisgKiA8UFJFPg0KKyAqICAgICAgICAgICAgQVBSX0xPQ0tfRkNOVEwNCisg KiAgICAgICAgICAgIEFQUl9MT0NLX0ZMT0NLDQorICogICAgICAgICAgICBB UFJfTE9DS19TWVNWU0VNDQorICogICAgICAgICAgICBBUFJfTE9DS19QT1NJ WFNFTQ0KKyAqICAgICAgICAgICAgQVBSX0xPQ0tfUFJPQ19QVEhSRUFEDQor ICogICAgICAgICAgICBBUFJfTE9DS19ERUZBVUxUICAgICBwaWNrIHRoZSBk ZWZhdWx0IG1lY2hhbmlzbSBmb3IgdGhlIHBsYXRmb3JtDQorICogPC9QUkU+ DQorICogQHBhcmFtIHBvb2wgdGhlIHBvb2wgZnJvbSB3aGljaCB0byBhbGxv Y2F0ZSB0aGUgbXV0ZXguDQorICogQHNlZSBhcHJfbG9ja21lY2hfZQ0KKyAq IEB3YXJuaW5nIENoZWNrIEFQUl9IQVNfZm9vX1NFUklBTElaRSBkZWZpbmVz IHRvIHNlZSBpZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMNCisgKiAgICAgICAg ICBBUFJfTE9DS19mb28uICBPbmx5IEFQUl9MT0NLX0RFRkFVTFQgaXMgcG9y dGFibGUuDQorICogQHJlbWFyayBUaGUgZGVmYXVsdCBjbGVhbnVwIGFjdGlv biBmb3IgbXV0ZXhlcyBjcmVhdGVkIHdpdGggdGhpcyBmdW5jdGlvbiBpcw0K KyAqICAgICAgICAgdG8gZGV0YWNoIGZyb20gdGhlbS4gSWYgeW91IHdhbnQg dG8gZGVzdHJveSB0aGVtIGluc3RlYWQsIHlvdSB3aWxsDQorICogICAgICAg ICBoYXZlIHRvIGRvIHNvIGV4cGxpY2l0bHkgd2l0aCBhIGNhbGwgdG8gOjph cHJfcHJvY19tdXRleF9kZXN0cm95KCkuDQorICovDQorQVBSX0RFQ0xBUkUo YXByX3N0YXR1c190KSBhcHJfcHJvY19tdXRleF9hdHRhY2goYXByX3Byb2Nf bXV0ZXhfdCAqKm11dGV4LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZuYW1lLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFwcl9sb2NrbWVjaF9lIG1lY2gsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7 DQogDQogLyoqDQogICogUmUtb3BlbiBhIG11dGV4IGluIGEgY2hpbGQgcHJv Y2Vzcy4NCkBAIC0xMTksNiArMTUxLDEyIEBADQogQVBSX0RFQ0xBUkUoYXBy X3N0YXR1c190KSBhcHJfcHJvY19tdXRleF91bmxvY2soYXByX3Byb2NfbXV0 ZXhfdCAqbXV0ZXgpOw0KIA0KIC8qKg0KKyAqIERldGFjaCBmcm9tIHRoZSBt dXRleCBhbmQgZnJlZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUg bG9jay4NCisgKiBAcGFyYW0gbXV0ZXggdGhlIG11dGV4IHRvIGRldGFjaCBm cm9tLg0KKyAqLw0KK0FQUl9ERUNMQVJFKGFwcl9zdGF0dXNfdCkgYXByX3By b2NfbXV0ZXhfZGV0YWNoKGFwcl9wcm9jX211dGV4X3QgKm11dGV4KTsNCisN CisvKioNCiAgKiBEZXN0cm95IHRoZSBtdXRleCBhbmQgZnJlZSB0aGUgbWVt b3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9jay4NCiAgKiBAcGFyYW0gbXV0 ZXggdGhlIG11dGV4IHRvIGRlc3Ryb3kuDQogICovDQo= ---1014960105-888758188-1143167148=:10517--