From: Dave Airlie Subject: [PATCH] amdgpu/dc: drop dml display_mode_support.c Date: Thu, 28 Sep 2017 12:19:51 +1000 Message-ID: <20170928021951.21824-1-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgY29kZSBpc24ndCB1 c2VkLCBhbmQgdGhpcyBmdW5jdGlvbiBpcyBodWdlLCByZWltcG9ydCBsYXRlciBpZgpnb2luZyB0 byBiZSB1c2VkLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNv bT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL01ha2VmaWxlICAgICAg ICB8ICAgIDQgKy0KIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVf bGliLmggIHwgICAgMSAtCiAuLi4vZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVf c3VwcG9ydC5jICB8IDIzMjcgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9kcm0vYW1kL2Rpc3Bs YXkvZGMvZG1sL2Rpc3BsYXlfbW9kZV9zdXBwb3J0LmggIHwgICAgNSAtCiA0IGZpbGVzIGNoYW5n ZWQsIDEgaW5zZXJ0aW9uKCspLCAyMzM2IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvZGlzcGxheV9tb2RlX3N1cHBvcnQu YwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL01ha2VmaWxlCmluZGV4IGE2 YmYzNjQuLmVjNzEyZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9kbWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9N YWtlZmlsZQpAQCAtMTAsMTIgKzEwLDEwIEBAIENGTEFHU19kaXNwbGF5X3JxX2RsZ19oZWxwZXJz Lm8gOj0gLW1oYXJkLWZsb2F0IC1tc3NlIC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5CiBDRkxB R1NfZGlzcGxheV93YXRlcm1hcmsubyA6PSAtbWhhcmQtZmxvYXQgLW1zc2UgLW1wcmVmZXJyZWQt c3RhY2stYm91bmRhcnk9NAogQ0ZMQUdTX3NvY19ib3VuZGluZ19ib3gubyA6PSAtbWhhcmQtZmxv YXQgLW1zc2UgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NAogQ0ZMQUdTX2RtbF9jb21tb25f ZGVmcy5vIDo9IC1taGFyZC1mbG9hdCAtbXNzZSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00 Ci1DRkxBR1NfZGlzcGxheV9tb2RlX3N1cHBvcnQubyA6PSAtbWhhcmQtZmxvYXQgLW1zc2UgLW1w cmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NAotCiAKIERNTCA9IGRpc3BsYXlfbW9kZV9saWIubyBk aXNwbGF5X3JxX2RsZ19jYWxjLm8gXAogCSAgZGlzcGxheV9ycV9kbGdfaGVscGVycy5vIGRpc3Bs YXlfd2F0ZXJtYXJrLm8gXAotCSAgc29jX2JvdW5kaW5nX2JveC5vIGRtbF9jb21tb25fZGVmcy5v IGRpc3BsYXlfbW9kZV9zdXBwb3J0Lm8KKwkgIHNvY19ib3VuZGluZ19ib3gubyBkbWxfY29tbW9u X2RlZnMubwogCiBBTURfREFMX0RNTCA9ICQoYWRkcHJlZml4ICQoQU1EREFMUEFUSCkvZGMvZG1s LywkKERNTCkpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k bWwvZGlzcGxheV9tb2RlX2xpYi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Rt bC9kaXNwbGF5X21vZGVfbGliLmgKaW5kZXggZWIxYzhlNi4uZTBhZjI4ZCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVfbGliLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVfbGliLmgK QEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJzb2NfYm91bmRpbmdfYm94LmgiCiAjaW5jbHVk ZSAiZGlzcGxheV93YXRlcm1hcmsuaCIKICNpbmNsdWRlICJkaXNwbGF5X3JxX2RsZ19jYWxjLmgi Ci0jaW5jbHVkZSAiZGlzcGxheV9tb2RlX3N1cHBvcnQuaCIKIAogZW51bSBkbWxfcHJvamVjdCB7 CiAJRE1MX1BST0pFQ1RfVU5ERUZJTkVELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVfc3VwcG9ydC5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVfc3VwcG9ydC5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBhYzU3MzU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9kbWwvZGlzcGxheV9tb2RlX3N1cHBvcnQuYworKysgL2Rldi9udWxsCkBA IC0xLDIzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEFkdmFuY2VkIE1pY3JvIERl dmljZXMsIEluYy4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK LSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Ci0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRI RSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVS IERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOiBBTUQKLSAqCi0gKi8K LQotI2luY2x1ZGUgImRpc3BsYXlfbW9kZV9zdXBwb3J0LmgiCi0jaW5jbHVkZSAiZGlzcGxheV9t b2RlX2xpYi5oIgotCi0jaW5jbHVkZSAiZG1sX2lubGluZV9kZWZzLmgiCi1pbnQgZG1sX21zX2No ZWNrKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCXN0cnVjdCBfdmNz X2RwaV9kaXNwbGF5X2UyZV9waXBlX3BhcmFtc19zdCAqZTJlLAotCQlpbnQgbnVtX3BpcGVzKQot ewotCXN0cnVjdCBfdmNzX2RwaV9pcF9wYXJhbXNfc3QgKmlwOwotCXN0cnVjdCBfdmNzX2RwaV9z b2NfYm91bmRpbmdfYm94X3N0ICpzb2M7Ci0Jc3RydWN0IF92Y3NfZHBpX21vZGVfZXZhbHVhdGlv bl9zdCAqbWU7Ci0Jc3RydWN0IGRtbF9tc19pbnRlcm5hbF92YXJzICp2OwotCWludCBudW1fcGxh bmVzLCBpLCBqLCBpaiwgaywgaWprOwotCi0JaXAgPSAmKG1vZGVfbGliLT5pcCk7Ci0Jc29jID0g Jihtb2RlX2xpYi0+c29jKTsKLQltZSA9ICYobW9kZV9saWItPm1lKTsKLQl2ID0gJihtb2RlX2xp Yi0+dmFycyk7Ci0JbnVtX3BsYW5lcyA9IGRtbF93bV9lMmVfdG9fd20obW9kZV9saWIsIGUyZSwg bnVtX3BpcGVzLCB2LT5wbGFuZXMpOwotCi0JLy9pbnN0YW50aWF0aW5nIHZhcmlhYmxlcyB0byB6 ZXJvCi0Jdi0+TWFjcm9UaWxlQmxvY2tXaWR0aEMgPSAwOwotCXYtPlN3YXRoV2lkdGhHcmFudWxh cml0eUMgPSAwOwotCi0Jdi0+RENGQ0xLUGVyU3RhdGVbNV0gPSAwOwotCXYtPkRDRkNMS1BlclN0 YXRlWzRdID0gMDsKLQl2LT5EQ0ZDTEtQZXJTdGF0ZVszXSA9IDA7Ci0Jdi0+RENGQ0xLUGVyU3Rh dGVbMl0gPSAwOwotCXYtPkRDRkNMS1BlclN0YXRlWzFdID0gMDsKLQl2LT5EQ0ZDTEtQZXJTdGF0 ZVswXSA9IDA7Ci0KLQlpZiAoc29jLT52bWluLmRjZmNsa19taHogPiAwKSB7Ci0JCXYtPkRDRkNM S1BlclN0YXRlWzVdID0gc29jLT52bWluLmRjZmNsa19taHo7Ci0JCXYtPkRDRkNMS1BlclN0YXRl WzRdID0gc29jLT52bWluLmRjZmNsa19taHo7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzNdID0gc29j LT52bWluLmRjZmNsa19taHo7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzJdID0gc29jLT52bWluLmRj ZmNsa19taHo7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzFdID0gc29jLT52bWluLmRjZmNsa19taHo7 Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzBdID0gc29jLT52bWluLmRjZmNsa19taHo7Ci0JfQotCi0J aWYgKHNvYy0+dm1pZC5kY2ZjbGtfbWh6ID4gMCkgewotCQl2LT5EQ0ZDTEtQZXJTdGF0ZVs1XSA9 IHNvYy0+dm1pZC5kY2ZjbGtfbWh6OwotCQl2LT5EQ0ZDTEtQZXJTdGF0ZVs0XSA9IHNvYy0+dm1p ZC5kY2ZjbGtfbWh6OwotCQl2LT5EQ0ZDTEtQZXJTdGF0ZVszXSA9IHNvYy0+dm1pZC5kY2ZjbGtf bWh6OwotCQl2LT5EQ0ZDTEtQZXJTdGF0ZVsyXSA9IHNvYy0+dm1pZC5kY2ZjbGtfbWh6OwotCQl2 LT5EQ0ZDTEtQZXJTdGF0ZVsxXSA9IHNvYy0+dm1pZC5kY2ZjbGtfbWh6OwotCX0KLQotCWlmIChz b2MtPnZub20uZGNmY2xrX21oeiA+IDApIHsKLQkJdi0+RENGQ0xLUGVyU3RhdGVbNV0gPSBzb2Mt PnZub20uZGNmY2xrX21oejsKLQkJdi0+RENGQ0xLUGVyU3RhdGVbNF0gPSBzb2MtPnZub20uZGNm Y2xrX21oejsKLQkJdi0+RENGQ0xLUGVyU3RhdGVbM10gPSBzb2MtPnZub20uZGNmY2xrX21oejsK LQkJdi0+RENGQ0xLUGVyU3RhdGVbMl0gPSBzb2MtPnZub20uZGNmY2xrX21oejsKLQl9Ci0KLQlp ZiAoc29jLT52bWF4LmRjZmNsa19taHogPiAwKSB7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzVdID0g c29jLT52bWF4LmRjZmNsa19taHo7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzRdID0gc29jLT52bWF4 LmRjZmNsa19taHo7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzNdID0gc29jLT52bWF4LmRjZmNsa19t aHo7Ci0JfQotCi0Jdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzVdID0gMDsKLQl2 LT5GYWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbNF0gPSAwOwotCXYtPkZhYnJpY0FuZERS QU1CYW5kd2lkdGhQZXJTdGF0ZVszXSA9IDA7Ci0Jdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBl clN0YXRlWzJdID0gMDsKLQl2LT5GYWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbMV0gPSAw OwotCXYtPkZhYnJpY0FuZERSQU1CYW5kd2lkdGhQZXJTdGF0ZVswXSA9IDA7Ci0KLQlpZiAoc29j LT52bWluLmRyYW1fYndfcGVyX2NoYW5fZ2JwcyA+IDApIHsKLQkJdi0+RmFicmljQW5kRFJBTUJh bmR3aWR0aFBlclN0YXRlWzVdID0gc29jLT52bWluLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJ di0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzRdID0gc29jLT52bWluLmRyYW1fYndf cGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzNdID0g c29jLT52bWluLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3 aWR0aFBlclN0YXRlWzJdID0gc29jLT52bWluLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+ RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzFdID0gc29jLT52bWluLmRyYW1fYndfcGVy X2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzBdID0gc29j LT52bWluLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQl9Ci0KLQlpZiAoc29jLT52bWlkLmRyYW1f YndfcGVyX2NoYW5fZ2JwcyA+IDApIHsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0 YXRlWzVdID0gc29jLT52bWlkLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5k RFJBTUJhbmR3aWR0aFBlclN0YXRlWzRdID0gc29jLT52bWlkLmRyYW1fYndfcGVyX2NoYW5fZ2Jw czsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzNdID0gc29jLT52bWlkLmRy YW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRl WzJdID0gc29jLT52bWlkLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJB TUJhbmR3aWR0aFBlclN0YXRlWzFdID0gc29jLT52bWlkLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsK LQl9Ci0KLQlpZiAoc29jLT52bm9tLmRyYW1fYndfcGVyX2NoYW5fZ2JwcyA+IDApIHsKLQkJdi0+ RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzVdID0gc29jLT52bm9tLmRyYW1fYndfcGVy X2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzRdID0gc29j LT52bm9tLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0 aFBlclN0YXRlWzNdID0gc29jLT52bm9tLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFi cmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzJdID0gc29jLT52bm9tLmRyYW1fYndfcGVyX2No YW5fZ2JwczsKLQl9Ci0KLQlpZiAoc29jLT52bWF4LmRyYW1fYndfcGVyX2NoYW5fZ2JwcyA+IDAp IHsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzVdID0gc29jLT52bWF4LmRy YW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRl WzRdID0gc29jLT52bWF4LmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJB TUJhbmR3aWR0aFBlclN0YXRlWzNdID0gc29jLT52bWF4LmRyYW1fYndfcGVyX2NoYW5fZ2JwczsK LQl9Ci0KLQl2LT5QSFlDTEtQZXJTdGF0ZVs1XSA9IDA7Ci0Jdi0+UEhZQ0xLUGVyU3RhdGVbNF0g PSAwOwotCXYtPlBIWUNMS1BlclN0YXRlWzNdID0gMDsKLQl2LT5QSFlDTEtQZXJTdGF0ZVsyXSA9 IDA7Ci0Jdi0+UEhZQ0xLUGVyU3RhdGVbMV0gPSAwOwotCXYtPlBIWUNMS1BlclN0YXRlWzBdID0g MDsKLQotCWlmIChzb2MtPnZtaW4ucGh5Y2xrX21oeiA+IDApIHsKLQkJdi0+UEhZQ0xLUGVyU3Rh dGVbNV0gPSBzb2MtPnZtaW4ucGh5Y2xrX21oejsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbNF0gPSBz b2MtPnZtaW4ucGh5Y2xrX21oejsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbM10gPSBzb2MtPnZtaW4u cGh5Y2xrX21oejsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbMl0gPSBzb2MtPnZtaW4ucGh5Y2xrX21o ejsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbMV0gPSBzb2MtPnZtaW4ucGh5Y2xrX21oejsKLQkJdi0+ UEhZQ0xLUGVyU3RhdGVbMF0gPSBzb2MtPnZtaW4ucGh5Y2xrX21oejsKLQl9Ci0KLQlpZiAoc29j LT52bWlkLnBoeWNsa19taHogPiAwKSB7Ci0JCXYtPlBIWUNMS1BlclN0YXRlWzVdID0gc29jLT52 bWlkLnBoeWNsa19taHo7Ci0JCXYtPlBIWUNMS1BlclN0YXRlWzRdID0gc29jLT52bWlkLnBoeWNs a19taHo7Ci0JCXYtPlBIWUNMS1BlclN0YXRlWzNdID0gc29jLT52bWlkLnBoeWNsa19taHo7Ci0J CXYtPlBIWUNMS1BlclN0YXRlWzJdID0gc29jLT52bWlkLnBoeWNsa19taHo7Ci0JCXYtPlBIWUNM S1BlclN0YXRlWzFdID0gc29jLT52bWlkLnBoeWNsa19taHo7Ci0JfQotCi0JaWYgKHNvYy0+dm5v bS5waHljbGtfbWh6ID4gMCkgewotCQl2LT5QSFlDTEtQZXJTdGF0ZVs1XSA9IHNvYy0+dm5vbS5w aHljbGtfbWh6OwotCQl2LT5QSFlDTEtQZXJTdGF0ZVs0XSA9IHNvYy0+dm5vbS5waHljbGtfbWh6 OwotCQl2LT5QSFlDTEtQZXJTdGF0ZVszXSA9IHNvYy0+dm5vbS5waHljbGtfbWh6OwotCQl2LT5Q SFlDTEtQZXJTdGF0ZVsyXSA9IHNvYy0+dm5vbS5waHljbGtfbWh6OwotCX0KLQotCWlmIChzb2Mt PnZtYXgucGh5Y2xrX21oeiA+IDApIHsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbNV0gPSBzb2MtPnZt YXgucGh5Y2xrX21oejsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbNF0gPSBzb2MtPnZtYXgucGh5Y2xr X21oejsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbM10gPSBzb2MtPnZtYXgucGh5Y2xrX21oejsKLQl9 Ci0KLQl2LT5NYXhEaXNwY2xrWzVdID0gMDsKLQl2LT5NYXhEaXNwY2xrWzRdID0gMDsKLQl2LT5N YXhEaXNwY2xrWzNdID0gMDsKLQl2LT5NYXhEaXNwY2xrWzJdID0gMDsKLQl2LT5NYXhEaXNwY2xr WzFdID0gMDsKLQl2LT5NYXhEaXNwY2xrWzBdID0gMDsKLQotCWlmIChzb2MtPnZtaW4uZGlzcGNs a19taHogPiAwKSB7Ci0JCXYtPk1heERpc3BjbGtbNV0gPSBzb2MtPnZtaW4uZGlzcGNsa19taHo7 Ci0JCXYtPk1heERpc3BjbGtbNF0gPSBzb2MtPnZtaW4uZGlzcGNsa19taHo7Ci0JCXYtPk1heERp c3BjbGtbM10gPSBzb2MtPnZtaW4uZGlzcGNsa19taHo7Ci0JCXYtPk1heERpc3BjbGtbMl0gPSBz b2MtPnZtaW4uZGlzcGNsa19taHo7Ci0JCXYtPk1heERpc3BjbGtbMV0gPSBzb2MtPnZtaW4uZGlz cGNsa19taHo7Ci0JCXYtPk1heERpc3BjbGtbMF0gPSBzb2MtPnZtaW4uZGlzcGNsa19taHo7Ci0J fQotCi0JaWYgKHNvYy0+dm1pZC5kaXNwY2xrX21oeiA+IDApIHsKLQkJdi0+TWF4RGlzcGNsa1s1 XSA9IHNvYy0+dm1pZC5kaXNwY2xrX21oejsKLQkJdi0+TWF4RGlzcGNsa1s0XSA9IHNvYy0+dm1p ZC5kaXNwY2xrX21oejsKLQkJdi0+TWF4RGlzcGNsa1szXSA9IHNvYy0+dm1pZC5kaXNwY2xrX21o ejsKLQkJdi0+TWF4RGlzcGNsa1syXSA9IHNvYy0+dm1pZC5kaXNwY2xrX21oejsKLQkJdi0+TWF4 RGlzcGNsa1sxXSA9IHNvYy0+dm1pZC5kaXNwY2xrX21oejsKLQl9Ci0KLQlpZiAoc29jLT52bm9t LmRpc3BjbGtfbWh6ID4gMCkgewotCQl2LT5NYXhEaXNwY2xrWzVdID0gc29jLT52bm9tLmRpc3Bj bGtfbWh6OwotCQl2LT5NYXhEaXNwY2xrWzRdID0gc29jLT52bm9tLmRpc3BjbGtfbWh6OwotCQl2 LT5NYXhEaXNwY2xrWzNdID0gc29jLT52bm9tLmRpc3BjbGtfbWh6OwotCQl2LT5NYXhEaXNwY2xr WzJdID0gc29jLT52bm9tLmRpc3BjbGtfbWh6OwotCX0KLQotCWlmIChzb2MtPnZtYXguZGlzcGNs a19taHogPiAwKSB7Ci0JCXYtPk1heERpc3BjbGtbNV0gPSBzb2MtPnZtYXguZGlzcGNsa19taHo7 Ci0JCXYtPk1heERpc3BjbGtbNF0gPSBzb2MtPnZtYXguZGlzcGNsa19taHo7Ci0JCXYtPk1heERp c3BjbGtbM10gPSBzb2MtPnZtYXguZGlzcGNsa19taHo7Ci0JfQotCi0Jdi0+TWF4RHBwY2xrWzVd ID0gMDsKLQl2LT5NYXhEcHBjbGtbNF0gPSAwOwotCXYtPk1heERwcGNsa1szXSA9IDA7Ci0Jdi0+ TWF4RHBwY2xrWzJdID0gMDsKLQl2LT5NYXhEcHBjbGtbMV0gPSAwOwotCXYtPk1heERwcGNsa1sw XSA9IDA7Ci0KLQlpZiAoc29jLT52bWluLmRwcGNsa19taHogPiAwKSB7Ci0JCXYtPk1heERwcGNs a1s1XSA9IHNvYy0+dm1pbi5kcHBjbGtfbWh6OwotCQl2LT5NYXhEcHBjbGtbNF0gPSBzb2MtPnZt aW4uZHBwY2xrX21oejsKLQkJdi0+TWF4RHBwY2xrWzNdID0gc29jLT52bWluLmRwcGNsa19taHo7 Ci0JCXYtPk1heERwcGNsa1syXSA9IHNvYy0+dm1pbi5kcHBjbGtfbWh6OwotCQl2LT5NYXhEcHBj bGtbMV0gPSBzb2MtPnZtaW4uZHBwY2xrX21oejsKLQkJdi0+TWF4RHBwY2xrWzBdID0gc29jLT52 bWluLmRwcGNsa19taHo7Ci0JfQotCi0JaWYgKHNvYy0+dm1pZC5kcHBjbGtfbWh6ID4gMCkgewot CQl2LT5NYXhEcHBjbGtbNV0gPSBzb2MtPnZtaWQuZHBwY2xrX21oejsKLQkJdi0+TWF4RHBwY2xr WzRdID0gc29jLT52bWlkLmRwcGNsa19taHo7Ci0JCXYtPk1heERwcGNsa1szXSA9IHNvYy0+dm1p ZC5kcHBjbGtfbWh6OwotCQl2LT5NYXhEcHBjbGtbMl0gPSBzb2MtPnZtaWQuZHBwY2xrX21oejsK LQkJdi0+TWF4RHBwY2xrWzFdID0gc29jLT52bWlkLmRwcGNsa19taHo7Ci0JfQotCi0JaWYgKHNv Yy0+dm5vbS5kcHBjbGtfbWh6ID4gMCkgewotCQl2LT5NYXhEcHBjbGtbNV0gPSBzb2MtPnZub20u ZHBwY2xrX21oejsKLQkJdi0+TWF4RHBwY2xrWzRdID0gc29jLT52bm9tLmRwcGNsa19taHo7Ci0J CXYtPk1heERwcGNsa1szXSA9IHNvYy0+dm5vbS5kcHBjbGtfbWh6OwotCQl2LT5NYXhEcHBjbGtb Ml0gPSBzb2MtPnZub20uZHBwY2xrX21oejsKLQl9Ci0KLQlpZiAoc29jLT52bWF4LmRwcGNsa19t aHogPiAwKSB7Ci0JCXYtPk1heERwcGNsa1s1XSA9IHNvYy0+dm1heC5kcHBjbGtfbWh6OwotCQl2 LT5NYXhEcHBjbGtbNF0gPSBzb2MtPnZtYXguZHBwY2xrX21oejsKLQkJdi0+TWF4RHBwY2xrWzNd ID0gc29jLT52bWF4LmRwcGNsa19taHo7Ci0JfQotCi0JaWYgKG1lLT52b2x0YWdlX292ZXJyaWRl ID09IGRtX3ZtYXgpIHsKLQkJdi0+Vm9sdGFnZU92ZXJyaWRlTGV2ZWwgPSBOdW1iZXJPZlN0YXRl cyAtIDE7Ci0JfSBlbHNlIGlmIChtZS0+dm9sdGFnZV9vdmVycmlkZSA9PSBkbV92bm9tKSB7Ci0J CXYtPlZvbHRhZ2VPdmVycmlkZUxldmVsID0gTnVtYmVyT2ZTdGF0ZXMgLSAyOwotCX0gZWxzZSBp ZiAobWUtPnZvbHRhZ2Vfb3ZlcnJpZGUgPT0gZG1fdm1pZCkgewotCQl2LT5Wb2x0YWdlT3ZlcnJp ZGVMZXZlbCA9IE51bWJlck9mU3RhdGVzIC0gMzsKLQl9IGVsc2UgewotCQl2LT5Wb2x0YWdlT3Zl cnJpZGVMZXZlbCA9IDA7Ci0JfQotCi0JLy8gU2NhbGUgUmF0aW8gU3VwcG9ydCBDaGVjawotCi0J di0+U2NhbGVSYXRpb1N1cHBvcnQgPSAxOwotCi0JZm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7 IGsrKykgewotCQlzdHJ1Y3QgX3Zjc19kcGlfc2NhbGVyX3JhdGlvX2RlcHRoX3N0IHNjYWxlX3Jh dGlvX2RlcHRoID0KLQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2FsZV9y YXRpb19kZXB0aDsKLQkJc3RydWN0IF92Y3NfZHBpX3NjYWxlcl90YXBzX3N0IHNjYWxlX3RhcHMg PQotCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLnNjYWxlX3RhcHM7Ci0JCXN0 cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVfc291cmNlX3BhcmFtc19zdCBzcmMgPQotCQkJCWUy ZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLnNyYzsKLQotCQlpZiAoc2NhbGVfcmF0aW9f ZGVwdGguaHNjbF9yYXRpbyA+IGlwLT5tYXhfaHNjbF9yYXRpbwotCQkJCXx8IHNjYWxlX3JhdGlv X2RlcHRoLnZzY2xfcmF0aW8gPiBpcC0+bWF4X3ZzY2xfcmF0aW8KLQkJCQl8fCBzY2FsZV9yYXRp b19kZXB0aC5oc2NsX3JhdGlvID4gc2NhbGVfdGFwcy5odGFwcwotCQkJCXx8IHNjYWxlX3JhdGlv X2RlcHRoLnZzY2xfcmF0aW8gPiBzY2FsZV90YXBzLnZ0YXBzCi0JCQkJfHwgKHNyYy5zb3VyY2Vf Zm9ybWF0ICE9IGRtXzQ0NF82NCAmJiBzcmMuc291cmNlX2Zvcm1hdCAhPSBkbV80NDRfMzIKLQkJ CQkJCSYmIHNyYy5zb3VyY2VfZm9ybWF0ICE9IGRtXzQ0NF8xNgotCQkJCQkJJiYgKChzY2FsZV9y YXRpb19kZXB0aC5oc2NsX3JhdGlvIC8gMgotCQkJCQkJCQk+IHNjYWxlX3RhcHMuaHRhcHNfYykK LQkJCQkJCQkJfHwgKHNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8gLyAyCi0JCQkJCQkJCQkJ PiBzY2FsZV90YXBzLnZ0YXBzX2MpKSkpCi0KLQkJCQl7Ci0JCQl2LT5TY2FsZVJhdGlvU3VwcG9y dCA9IDA7Ci0JCX0KLQl9Ci0KLQkvLyBTb3VyY2UgRm9ybWF0LCBQaXhlbCBGb3JtYXQgYW5kIFNj YW4gU3VwcG9ydCBDaGVjawotCi0Jdi0+U291cmNlRm9ybWF0UGl4ZWxBbmRTY2FuU3VwcG9ydCA9 IDE7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCXN0cnVjdCBfdmNz X2RwaV9kaXNwbGF5X3BpcGVfc291cmNlX3BhcmFtc19zdCBzcmMgPQotCQkJCWUyZVt2LT5wbGFu ZXNba10uZTJlX2luZGV4XS5waXBlLnNyYzsKLQotCQlpZiAoKHNyYy5zd19tb2RlID09IGRtX3N3 X2xpbmVhciAmJiBzcmMuc291cmNlX3NjYW4gIT0gZG1faG9yeikKLQkJCQl8fCAoKHNyYy5zd19t b2RlID09IGRtX3N3XzRrYl9kIHx8IHNyYy5zd19tb2RlID09IGRtX3N3XzRrYl9kX3gKLQkJCQkJ CXx8IHNyYy5zd19tb2RlID09IGRtX3N3XzY0a2JfZAotCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0g ZG1fc3dfNjRrYl9kX3QKLQkJCQkJCXx8IHNyYy5zd19tb2RlID09IGRtX3N3XzY0a2JfZF94Ci0J CQkJCQl8fCBzcmMuc3dfbW9kZSA9PSBkbV9zd192YXJfZAotCQkJCQkJfHwgc3JjLnN3X21vZGUg PT0gZG1fc3dfdmFyX2RfeCkKLQkJCQkJCSYmIChzcmMuc291cmNlX2Zvcm1hdCAhPSBkbV80NDRf NjQpKSkgewotCQkJdi0+U291cmNlRm9ybWF0UGl4ZWxBbmRTY2FuU3VwcG9ydCA9IDA7Ci0JCX0K LQl9Ci0KLQkvLyBCYW5kd2lkdGggU3VwcG9ydCBDaGVjawotCi0JZm9yIChrID0gMDsgayA8IG51 bV9wbGFuZXM7IGsrKykgewotCQlzdHJ1Y3QgX3Zjc19kcGlfZGlzcGxheV9waXBlX3NvdXJjZV9w YXJhbXNfc3Qgc3JjID0KLQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zcmM7 Ci0KLQkJaWYgKHNyYy5zb3VyY2Vfc2NhbiA9PSBkbV9ob3J6KSB7Ci0JCQl2LT5Td2F0aFdpZHRo WVNpbmdsZURQUFtrXSA9IHNyYy52aWV3cG9ydF93aWR0aDsKLQkJfSBlbHNlIHsKLQkJCXYtPlN3 YXRoV2lkdGhZU2luZ2xlRFBQW2tdID0gc3JjLnZpZXdwb3J0X2hlaWdodDsKLQkJfQotCi0JCWlm IChzcmMuc291cmNlX2Zvcm1hdCA9PSBkbV80NDRfNjQpIHsKLQkJCXYtPkJ5dGVQZXJQaXhlbElu REVUWVtrXSA9IDg7Ci0JCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVENba10gPSAwOwotCQl9IGVsc2Ug aWYgKHNyYy5zb3VyY2VfZm9ybWF0ID09IGRtXzQ0NF8zMikgewotCQkJdi0+Qnl0ZVBlclBpeGVs SW5ERVRZW2tdID0gNDsKLQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9IDA7Ci0JCX0gZWxz ZSBpZiAoc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDQ0XzE2KSB7Ci0JCQl2LT5CeXRlUGVyUGl4 ZWxJbkRFVFlba10gPSAyOwotCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRDW2tdID0gMDsKLQkJfSBl bHNlIGlmIChzcmMuc291cmNlX2Zvcm1hdCA9PSBkbV80MjBfOCkgewotCQkJdi0+Qnl0ZVBlclBp eGVsSW5ERVRZW2tdID0gMTsKLQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9IDI7Ci0JCX0g ZWxzZSB7Ci0JCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10gPSA0LjAwIC8gMy4wMDsKLQkJCXYt PkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9IDguMDAgLyAzLjAwOwotCQl9Ci0JfQotCi0Jdi0+VG90 YWxSZWFkQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29uZCA9IDA7Ci0KLQlmb3IgKGsgPSAw OyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVf c291cmNlX3BhcmFtc19zdCBzcmMgPQotCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5w aXBlLnNyYzsKLQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBk ZXN0ID0KLQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5kZXN0OwotCQlzdHJ1 Y3QgX3Zjc19kcGlfc2NhbGVyX3JhdGlvX2RlcHRoX3N0IHNjYWxlX3JhdGlvX2RlcHRoID0KLQkJ CQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQot CQl2LT5SZWFkQmFuZHdpZHRoW2tdID0KLQkJCQl2LT5Td2F0aFdpZHRoWVNpbmdsZURQUFtrXQot CQkJCQkJKiAoZG1sX2NlaWxfZXgodi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdLCAxKQotCQkJCQkJ CQkqIHNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJKyAoZG1sX2NlaWxfZXgo Ci0JCQkJCQkJCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRDW2tdLAotCQkJCQkJCQkJCTIpIC8gMikK LQkJCQkJCQkJCQkqIChzY2FsZV9yYXRpb19kZXB0aC52c2NsX3JhdGlvCi0JCQkJCQkJCQkJCQkv IDIpKQotCQkJCQkJLyAoZGVzdC5odG90YWwgLyBkZXN0LnBpeGVsX3JhdGVfbWh6KTsKLQotCQlp ZiAoc3JjLmRjYyA9PSAxKSB7Ci0JCQl2LT5SZWFkQmFuZHdpZHRoW2tdID0gdi0+UmVhZEJhbmR3 aWR0aFtrXSAqICgxICsgMSAvIDI1Nik7Ci0JCX0KLQotCQlpZiAoaXAtPnB0ZV9lbmFibGUgPT0g MSAmJiBzcmMuc291cmNlX3NjYW4gIT0gZG1faG9yegotCQkJCSYmIChzcmMuc3dfbW9kZSA9PSBk bV9zd180a2JfcyB8fCBzcmMuc3dfbW9kZSA9PSBkbV9zd180a2Jfc194Ci0JCQkJCQl8fCBzcmMu c3dfbW9kZSA9PSBkbV9zd180a2JfZAotCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNGti X2RfeCkpIHsKLQkJCXYtPlJlYWRCYW5kd2lkdGhba10gPSB2LT5SZWFkQmFuZHdpZHRoW2tdICog KDEgKyAxIC8gNjQpOwotCQl9IGVsc2UgaWYgKGlwLT5wdGVfZW5hYmxlID09IDEgJiYgc3JjLnNv dXJjZV9zY2FuID09IGRtX2hvcnoKLQkJCQkmJiAoc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDQ0 XzY0IHx8IHNyYy5zb3VyY2VfZm9ybWF0ID09IGRtXzQ0NF8zMikKLQkJCQkmJiAoc3JjLnN3X21v ZGUgPT0gZG1fc3dfNjRrYl9zIHx8IHNyYy5zd19tb2RlID09IGRtX3N3XzY0a2Jfc190Ci0JCQkJ CQl8fCBzcmMuc3dfbW9kZSA9PSBkbV9zd182NGtiX3NfeAotCQkJCQkJfHwgc3JjLnN3X21vZGUg PT0gZG1fc3dfNjRrYl9kCi0JCQkJCQl8fCBzcmMuc3dfbW9kZSA9PSBkbV9zd182NGtiX2RfdAot CQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNjRrYl9kX3gpKSB7Ci0JCQl2LT5SZWFkQmFu ZHdpZHRoW2tdID0gdi0+UmVhZEJhbmR3aWR0aFtrXSAqICgxICsgMSAvIDI1Nik7Ci0JCX0gZWxz ZSBpZiAoaXAtPnB0ZV9lbmFibGUgPT0gMSkgewotCQkJdi0+UmVhZEJhbmR3aWR0aFtrXSA9IHYt PlJlYWRCYW5kd2lkdGhba10gKiAoMSArIDEgLyA1MTIpOwotCQl9Ci0KLQkJdi0+VG90YWxSZWFk QmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29uZCA9Ci0JCQkJdi0+VG90YWxSZWFkQmFuZHdp ZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29uZAotCQkJCQkJKyB2LT5SZWFkQmFuZHdpZHRoW2tdIC8g MTAwMDsKLQl9Ci0KLQl2LT5Ub3RhbFdyaXRlQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29u ZCA9IDA7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCXN0cnVjdCBf dmNzX2RwaV9kaXNwbGF5X3BpcGVfZGVzdF9wYXJhbXNfc3QgZGVzdCA9Ci0JCQkJZTJlW3YtPnBs YW5lc1trXS5lMmVfaW5kZXhdLnBpcGUuZGVzdDsKLQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlf b3V0cHV0X3BhcmFtc19zdCBkb3V0ID0gZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLmRvdXQ7 Ci0KLQkJaWYgKGRvdXQub3V0cHV0X3R5cGUgPT0gZG1fd2IgJiYgZG91dC5vdXRwdXRfZm9ybWF0 ID09IGRtXzQ0NCkgewotCQkJdi0+V3JpdGVCYW5kd2lkdGhba10gPSBkZXN0LnJlY291dF93aWR0 aAotCQkJCQkvIChkZXN0Lmh0b3RhbCAvIGRlc3QucGl4ZWxfcmF0ZV9taHopICogNDsKLQkJfSBl bHNlIGlmIChkb3V0Lm91dHB1dF90eXBlID09IGRtX3diKSB7Ci0JCQl2LT5Xcml0ZUJhbmR3aWR0 aFtrXSA9IGRlc3QucmVjb3V0X3dpZHRoCi0JCQkJCS8gKGRlc3QuaHRvdGFsIC8gZGVzdC5waXhl bF9yYXRlX21oeikgKiAxLjU7Ci0JCX0gZWxzZSB7Ci0JCQl2LT5Xcml0ZUJhbmR3aWR0aFtrXSA9 IDA7Ci0JCX0KLQotCQl2LT5Ub3RhbFdyaXRlQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29u ZCA9Ci0JCQkJdi0+VG90YWxXcml0ZUJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNvbmQKLQkJ CQkJCSsgdi0+V3JpdGVCYW5kd2lkdGhba10gLyAxMDAwOwotCX0KLQotCXYtPlRvdGFsQmFuZHdp ZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29uZCA9IHYtPlRvdGFsUmVhZEJhbmR3aWR0aENvbnN1bWVk R0J5dGVQZXJTZWNvbmQKLQkJCSsgdi0+VG90YWxXcml0ZUJhbmR3aWR0aENvbnN1bWVkR0J5dGVQ ZXJTZWNvbmQ7Ci0KLQl2LT5EQ0NFbmFibGVkSW5BbnlQbGFuZSA9IDA7Ci0KLQlmb3IgKGsgPSAw OyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVf c291cmNlX3BhcmFtc19zdCBzcmMgPQotCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5w aXBlLnNyYzsKLQotCQlpZiAoc3JjLmRjYyA9PSAxKSB7Ci0JCQl2LT5EQ0NFbmFibGVkSW5BbnlQ bGFuZSA9IDE7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTnVtYmVyT2ZTdGF0ZXNQbHVz VHdvOyBpKyspIHsKLQkJdi0+UmV0dXJuQldUb0RDTlBlclN0YXRlID0gZG1sX21pbigKLQkJCQlz b2MtPnJldHVybl9idXNfd2lkdGhfYnl0ZXMgKiB2LT5EQ0ZDTEtQZXJTdGF0ZVtpXSwKLQkJCQl2 LT5GYWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbaV0gKiAxMDAwCi0JCQkJCQkqIHNvYy0+ aWRlYWxfZHJhbV9id19hZnRlcl91cmdlbnRfcGVyY2VudCAvIDEwMCk7Ci0KLQkJdi0+UmV0dXJu QldQZXJTdGF0ZVtpXSA9IHYtPlJldHVybkJXVG9EQ05QZXJTdGF0ZTsKLQotCQlpZiAodi0+REND RW5hYmxlZEluQW55UGxhbmUgPT0gMQotCQkJCSYmIHYtPlJldHVybkJXVG9EQ05QZXJTdGF0ZQot CQkJCQkJPiAodi0+RENGQ0xLUGVyU3RhdGVbaV0KLQkJCQkJCQkJKiBzb2MtPnJldHVybl9idXNf d2lkdGhfYnl0ZXMgLyA0KSkgewotCQkJdi0+UmV0dXJuQldQZXJTdGF0ZVtpXSA9Ci0JCQkJCWRt bF9taW4oCi0JCQkJCQkJdi0+UmV0dXJuQldQZXJTdGF0ZVtpXSwKLQkJCQkJCQl2LT5SZXR1cm5C V1RvRENOUGVyU3RhdGUgKiA0Ci0JCQkJCQkJCQkqICgxCi0JCQkJCQkJCQkJCS0gc29jLT51cmdl bnRfbGF0ZW5jeV91cwotCQkJCQkJCQkJCQkJCS8gKChpcC0+cm9iX2J1ZmZlcl9zaXplX2tieXRl cwotCQkJCQkJCQkJCQkJCQkJLSBpcC0+cGl4ZWxfY2h1bmtfc2l6ZV9rYnl0ZXMpCi0JCQkJCQkJ CQkJCQkJCQkqIDEwMjQKLQkJCQkJCQkJCQkJCQkJCS8gKHYtPlJldHVybkJXVG9EQ05QZXJTdGF0 ZQotCQkJCQkJCQkJCQkJCQkJCQktIHYtPkRDRkNMS1BlclN0YXRlW2ldCi0JCQkJCQkJCQkJCQkJ CQkJCQkJKiBzb2MtPnJldHVybl9idXNfd2lkdGhfYnl0ZXMKLQkJCQkJCQkJCQkJCQkJCQkJCQkv IDQpCi0JCQkJCQkJCQkJCQkJCQkrIHNvYy0+dXJnZW50X2xhdGVuY3lfdXMpKSk7Ci0JCX0KLQot CQl2LT5Dcml0aWNhbFBvaW50ID0gMiAqIHNvYy0+cmV0dXJuX2J1c193aWR0aF9ieXRlcyAqIHYt PkRDRkNMS1BlclN0YXRlW2ldCi0JCQkJKiBzb2MtPnVyZ2VudF9sYXRlbmN5X3VzCi0JCQkJLyAo di0+UmV0dXJuQldUb0RDTlBlclN0YXRlICogc29jLT51cmdlbnRfbGF0ZW5jeV91cwotCQkJCQkJ KyAoaXAtPnJvYl9idWZmZXJfc2l6ZV9rYnl0ZXMKLQkJCQkJCQkJLSBpcC0+cGl4ZWxfY2h1bmtf c2l6ZV9rYnl0ZXMpCi0JCQkJCQkJCSogMTAyNCk7Ci0KLQkJaWYgKHYtPkRDQ0VuYWJsZWRJbkFu eVBsYW5lID09IDEgJiYgdi0+Q3JpdGljYWxQb2ludCA+IDEgJiYgdi0+Q3JpdGljYWxQb2ludCA8 IDQpIHsKLQkJCXYtPlJldHVybkJXUGVyU3RhdGVbaV0gPQotCQkJCQlkbWxfbWluKAotCQkJCQkJ CXYtPlJldHVybkJXUGVyU3RhdGVbaV0sCi0JCQkJCQkJNCAqIHYtPlJldHVybkJXVG9EQ05QZXJT dGF0ZQotCQkJCQkJCQkJKiAoaXAtPnJvYl9idWZmZXJfc2l6ZV9rYnl0ZXMKLQkJCQkJCQkJCQkJ LSBpcC0+cGl4ZWxfY2h1bmtfc2l6ZV9rYnl0ZXMpCi0JCQkJCQkJCQkqIDEwMjQKLQkJCQkJCQkJ CSogc29jLT5yZXR1cm5fYnVzX3dpZHRoX2J5dGVzCi0JCQkJCQkJCQkqIHYtPkRDRkNMS1BlclN0 YXRlW2ldCi0JCQkJCQkJCQkqIHNvYy0+dXJnZW50X2xhdGVuY3lfdXMKLQkJCQkJCQkJCS8gZG1s X3BvdygKLQkJCQkJCQkJCQkJKHYtPlJldHVybkJXVG9EQ05QZXJTdGF0ZQotCQkJCQkJCQkJCQkJ CSogc29jLT51cmdlbnRfbGF0ZW5jeV91cwotCQkJCQkJCQkJCQkJCSsgKGlwLT5yb2JfYnVmZmVy X3NpemVfa2J5dGVzCi0JCQkJCQkJCQkJCQkJCQktIGlwLT5waXhlbF9jaHVua19zaXplX2tieXRl cykKLQkJCQkJCQkJCQkJCQkJCSogMTAyNCksCi0JCQkJCQkJCQkJCTIpKTsKLQkJfQotCi0JCXYt PlJldHVybkJXVG9EQ05QZXJTdGF0ZSA9IGRtbF9taW4oCi0JCQkJc29jLT5yZXR1cm5fYnVzX3dp ZHRoX2J5dGVzICogdi0+RENGQ0xLUGVyU3RhdGVbaV0sCi0JCQkJdi0+RmFicmljQW5kRFJBTUJh bmR3aWR0aFBlclN0YXRlW2ldICogMTAwMCk7Ci0KLQkJaWYgKHYtPkRDQ0VuYWJsZWRJbkFueVBs YW5lID09IDEKLQkJCQkmJiB2LT5SZXR1cm5CV1RvRENOUGVyU3RhdGUKLQkJCQkJCT4gKHYtPkRD RkNMS1BlclN0YXRlW2ldCi0JCQkJCQkJCSogc29jLT5yZXR1cm5fYnVzX3dpZHRoX2J5dGVzIC8g NCkpIHsKLQkJCXYtPlJldHVybkJXUGVyU3RhdGVbaV0gPQotCQkJCQlkbWxfbWluKAotCQkJCQkJ CXYtPlJldHVybkJXUGVyU3RhdGVbaV0sCi0JCQkJCQkJdi0+UmV0dXJuQldUb0RDTlBlclN0YXRl ICogNAotCQkJCQkJCQkJKiAoMQotCQkJCQkJCQkJCQktIHNvYy0+dXJnZW50X2xhdGVuY3lfdXMK LQkJCQkJCQkJCQkJCQkvICgoaXAtPnJvYl9idWZmZXJfc2l6ZV9rYnl0ZXMKLQkJCQkJCQkJCQkJ CQkJCS0gaXAtPnBpeGVsX2NodW5rX3NpemVfa2J5dGVzKQotCQkJCQkJCQkJCQkJCQkJKiAxMDI0 Ci0JCQkJCQkJCQkJCQkJCQkvICh2LT5SZXR1cm5CV1RvRENOUGVyU3RhdGUKLQkJCQkJCQkJCQkJ CQkJCQkJLSB2LT5EQ0ZDTEtQZXJTdGF0ZVtpXQotCQkJCQkJCQkJCQkJCQkJCQkJCSogc29jLT5y ZXR1cm5fYnVzX3dpZHRoX2J5dGVzCi0JCQkJCQkJCQkJCQkJCQkJCQkJLyA0KQotCQkJCQkJCQkJ CQkJCQkJKyBzb2MtPnVyZ2VudF9sYXRlbmN5X3VzKSkpOwotCQl9Ci0KLQkJdi0+Q3JpdGljYWxQ b2ludCA9IDIgKiBzb2MtPnJldHVybl9idXNfd2lkdGhfYnl0ZXMgKiB2LT5EQ0ZDTEtQZXJTdGF0 ZVtpXQotCQkJCSogc29jLT51cmdlbnRfbGF0ZW5jeV91cwotCQkJCS8gKHYtPlJldHVybkJXVG9E Q05QZXJTdGF0ZSAqIHNvYy0+dXJnZW50X2xhdGVuY3lfdXMKLQkJCQkJCSsgKGlwLT5yb2JfYnVm ZmVyX3NpemVfa2J5dGVzCi0JCQkJCQkJCS0gaXAtPnBpeGVsX2NodW5rX3NpemVfa2J5dGVzKQot CQkJCQkJCQkqIDEwMjQpOwotCi0JCWlmICh2LT5EQ0NFbmFibGVkSW5BbnlQbGFuZSA9PSAxICYm IHYtPkNyaXRpY2FsUG9pbnQgPiAxICYmIHYtPkNyaXRpY2FsUG9pbnQgPCA0KSB7Ci0JCQl2LT5S ZXR1cm5CV1BlclN0YXRlW2ldID0KLQkJCQkJZG1sX21pbigKLQkJCQkJCQl2LT5SZXR1cm5CV1Bl clN0YXRlW2ldLAotCQkJCQkJCTQgKiB2LT5SZXR1cm5CV1RvRENOUGVyU3RhdGUKLQkJCQkJCQkJ CSogKGlwLT5yb2JfYnVmZmVyX3NpemVfa2J5dGVzCi0JCQkJCQkJCQkJCS0gaXAtPnBpeGVsX2No dW5rX3NpemVfa2J5dGVzKQotCQkJCQkJCQkJKiAxMDI0Ci0JCQkJCQkJCQkqIHNvYy0+cmV0dXJu X2J1c193aWR0aF9ieXRlcwotCQkJCQkJCQkJKiB2LT5EQ0ZDTEtQZXJTdGF0ZVtpXQotCQkJCQkJ CQkJKiBzb2MtPnVyZ2VudF9sYXRlbmN5X3VzCi0JCQkJCQkJCQkvIGRtbF9wb3coCi0JCQkJCQkJ CQkJCSh2LT5SZXR1cm5CV1RvRENOUGVyU3RhdGUKLQkJCQkJCQkJCQkJCQkqIHNvYy0+dXJnZW50 X2xhdGVuY3lfdXMKLQkJCQkJCQkJCQkJCQkrIChpcC0+cm9iX2J1ZmZlcl9zaXplX2tieXRlcwot CQkJCQkJCQkJCQkJCQkJLSBpcC0+cGl4ZWxfY2h1bmtfc2l6ZV9rYnl0ZXMpCi0JCQkJCQkJCQkJ CQkJCQkqIDEwMjQpLAotCQkJCQkJCQkJCQkyKSk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBp IDwgTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvOyBpKyspIHsKLQkJaWYgKCh2LT5Ub3RhbFJlYWRCYW5k d2lkdGhDb25zdW1lZEdCeXRlUGVyU2Vjb25kICogMTAwMCA8PSB2LT5SZXR1cm5CV1BlclN0YXRl W2ldKQotCQkJCSYmICh2LT5Ub3RhbEJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNvbmQgKiAx MDAwCi0JCQkJCQk8PSB2LT5GYWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbaV0gKiAxMDAw Ci0JCQkJCQkJCSogc29jLT5pZGVhbF9kcmFtX2J3X2FmdGVyX3VyZ2VudF9wZXJjZW50Ci0JCQkJ CQkJCS8gMTAwKSkgewotCQkJdi0+QmFuZHdpZHRoU3VwcG9ydFtpXSA9IDE7Ci0JCX0gZWxzZSB7 Ci0JCQl2LT5CYW5kd2lkdGhTdXBwb3J0W2ldID0gMDsKLQkJfQotCX0KLQotCS8vIFdyaXRlYmFj ayBMYXRlbmN5IHN1cHBvcnQgY2hlY2sKLQotCXYtPldyaXRlYmFja0xhdGVuY3lTdXBwb3J0ID0g MTsKLQotCWZvciAoayA9IDA7IGsgPCBudW1fcGxhbmVzOyBrKyspIHsKLQkJc3RydWN0IF92Y3Nf ZHBpX2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJCQllMmVbdi0+cGxhbmVz W2tdLmUyZV9pbmRleF0ucGlwZS5kZXN0OwotCQlzdHJ1Y3QgX3Zjc19kcGlfZGlzcGxheV9vdXRw dXRfcGFyYW1zX3N0IGRvdXQgPSBlMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0uZG91dDsKLQot CQlpZiAoZG91dC5vdXRwdXRfdHlwZSA9PSBkbV93YiAmJiBkb3V0Lm91dHB1dF9mb3JtYXQgPT0g ZG1fNDQ0Ci0JCQkJJiYgKGRlc3QucmVjb3V0X3dpZHRoIC8gKGRlc3QuaHRvdGFsIC8gZGVzdC5w aXhlbF9yYXRlX21oeikgKiA0KQotCQkJCQkJPiAoKGlwLT53cml0ZWJhY2tfbHVtYV9idWZmZXJf c2l6ZV9rYnl0ZXMKLQkJCQkJCQkJKyBpcC0+d3JpdGViYWNrX2Nocm9tYV9idWZmZXJfc2l6ZV9r Ynl0ZXMpCi0JCQkJCQkJCSogMTAyNCAvIHNvYy0+d3JpdGViYWNrX2xhdGVuY3lfdXMpKSB7Ci0J CQl2LT5Xcml0ZWJhY2tMYXRlbmN5U3VwcG9ydCA9IDA7Ci0JCX0gZWxzZSBpZiAoZG91dC5vdXRw dXRfdHlwZSA9PSBkbV93YgotCQkJCSYmIChkZXN0LnJlY291dF93aWR0aCAvIChkZXN0Lmh0b3Rh bCAvIGRlc3QucGl4ZWxfcmF0ZV9taHopKQotCQkJCQkJPiAoZG1sX21pbigKLQkJCQkJCQkJaXAt PndyaXRlYmFja19sdW1hX2J1ZmZlcl9zaXplX2tieXRlcywKLQkJCQkJCQkJMgotCQkJCQkJCQkJ CSogaXAtPndyaXRlYmFja19jaHJvbWFfYnVmZmVyX3NpemVfa2J5dGVzKQotCQkJCQkJCQkqIDEw MjQgLyBzb2MtPndyaXRlYmFja19sYXRlbmN5X3VzKSkgewotCQkJdi0+V3JpdGViYWNrTGF0ZW5j eVN1cHBvcnQgPSAwOwotCQl9Ci0JfQotCi0JLy8gUmUtb3JkZXJpbmcgQnVmZmVyIFN1cHBvcnQg Q2hlY2sKLQotCWZvciAoaSA9IDA7IGkgPCBOdW1iZXJPZlN0YXRlc1BsdXNUd287IGkrKykgewot CQl2LT5VcmdlbnRSb3VuZFRyaXBBbmRPdXRPZk9yZGVyTGF0ZW5jeVBlclN0YXRlW2ldID0KLQkJ CQkoc29jLT5yb3VuZF90cmlwX3BpbmdfbGF0ZW5jeV9kY2ZjbGtfY3ljbGVzICsgMzIpCi0JCQkJ CQkvIHYtPkRDRkNMS1BlclN0YXRlW2ldCi0JCQkJCQkrIHNvYy0+dXJnZW50X291dF9vZl9vcmRl cl9yZXR1cm5fcGVyX2NoYW5uZWxfYnl0ZXMKLQkJCQkJCQkJKiBzb2MtPm51bV9jaGFucwotCQkJ CQkJCQkvIHYtPlJldHVybkJXUGVyU3RhdGVbaV07Ci0KLQkJaWYgKChpcC0+cm9iX2J1ZmZlcl9z aXplX2tieXRlcyAtIGlwLT5waXhlbF9jaHVua19zaXplX2tieXRlcykgKiAxMDI0Ci0JCQkJLyB2 LT5SZXR1cm5CV1BlclN0YXRlW2ldCi0JCQkJPiB2LT5VcmdlbnRSb3VuZFRyaXBBbmRPdXRPZk9y ZGVyTGF0ZW5jeVBlclN0YXRlW2ldKSB7Ci0JCQl2LT5ST0JTdXBwb3J0W2ldID0gMTsKLQkJfSBl bHNlIHsKLQkJCXYtPlJPQlN1cHBvcnRbaV0gPSAwOwotCQl9Ci0JfQotCi0JLy8gRGlzcGxheSBJ TyBTdXBwb3J0IENoZWNrCi0KLQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0J CXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVfZGVzdF9wYXJhbXNfc3QgZGVzdCA9Ci0JCQkJ ZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLnBpcGUuZGVzdDsKLQkJc3RydWN0IF92Y3NfZHBp X2Rpc3BsYXlfb3V0cHV0X3BhcmFtc19zdCBkb3V0ID0gZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5k ZXhdLmRvdXQ7Ci0KLQkJaWYgKGRvdXQub3V0cHV0X2Zvcm1hdCA9PSBkbV80MjApIHsKLQkJCXYt PlJlcXVpcmVkT3V0cHV0QlcgPSBkZXN0LnBpeGVsX3JhdGVfbWh6ICogMyAvIDI7Ci0JCX0gZWxz ZSB7Ci0JCQl2LT5SZXF1aXJlZE91dHB1dEJXID0gZGVzdC5waXhlbF9yYXRlX21oeiAqIDM7Ci0J CX0KLQotCQlpZiAoZG91dC5vdXRwdXRfdHlwZSA9PSBkbV9oZG1pKSB7Ci0JCQl2LT5SZXF1aXJl ZFBIWUNMS1trXSA9IHYtPlJlcXVpcmVkT3V0cHV0QlcgLyAzOwotCQl9IGVsc2UgaWYgKGRvdXQu b3V0cHV0X3R5cGUgPT0gZG1fZHApIHsKLQkJCXYtPlJlcXVpcmVkUEhZQ0xLW2tdID0gdi0+UmVx dWlyZWRPdXRwdXRCVyAvIDQ7Ci0JCX0gZWxzZSB7Ci0JCQl2LT5SZXF1aXJlZFBIWUNMS1trXSA9 IDA7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvOyBp KyspIHsKLQkJdi0+RElPU3VwcG9ydFtpXSA9IDE7Ci0KLQkJZm9yIChrID0gMDsgayA8IG51bV9w bGFuZXM7IGsrKykgewotCQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfb3V0cHV0X3BhcmFtc19z dCBkb3V0ID0KLQkJCQkJZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLmRvdXQ7Ci0KLQkJCWlm ICgodi0+UmVxdWlyZWRQSFlDTEtba10gPiB2LT5QSFlDTEtQZXJTdGF0ZVtpXSkKLQkJCQkJfHwg KGRvdXQub3V0cHV0X3R5cGUgPT0gZG1faGRtaQotCQkJCQkJCSYmIHYtPlJlcXVpcmVkUEhZQ0xL W2tdID4gNjAwKSkgewotCQkJCXYtPkRJT1N1cHBvcnRbaV0gPSAwOwotCQkJfQotCQl9Ci0JfQot Ci0JLy8gVG90YWwgQXZhaWxhYmxlIFdyaXRlYmFjayBTdXBwb3J0IENoZWNrCi0KLQl2LT5Ub3Rh bE51bWJlck9mQWN0aXZlV3JpdGViYWNrID0gMDsKLQotCWZvciAoayA9IDA7IGsgPCBudW1fcGxh bmVzOyBrKyspIHsKLQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfb3V0cHV0X3BhcmFtc19zdCBk b3V0ID0gZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLmRvdXQ7Ci0KLQkJaWYgKGRvdXQub3V0 cHV0X3R5cGUgPT0gZG1fd2IpIHsKLQkJCXYtPlRvdGFsTnVtYmVyT2ZBY3RpdmVXcml0ZWJhY2sg PSB2LT5Ub3RhbE51bWJlck9mQWN0aXZlV3JpdGViYWNrICsgMTsKLQkJfQotCX0KLQotCWlmICh2 LT5Ub3RhbE51bWJlck9mQWN0aXZlV3JpdGViYWNrIDw9IGlwLT5tYXhfbnVtX3diKSB7Ci0JCXYt PlRvdGFsQXZhaWxhYmxlV3JpdGViYWNrU3VwcG9ydCA9IDE7Ci0JfSBlbHNlIHsKLQkJdi0+VG90 YWxBdmFpbGFibGVXcml0ZWJhY2tTdXBwb3J0ID0gMDsKLQl9Ci0KLQkvLyBNYXhpbXVtIERJU1BD TEsvRFBQQ0xLIFN1cHBvcnQgY2hlY2sKLQotCWZvciAoayA9IDA7IGsgPCBudW1fcGxhbmVzOyBr KyspIHsKLQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBkZXN0 ID0KLQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5kZXN0OwotCQlzdHJ1Y3Qg X3Zjc19kcGlfc2NhbGVyX3JhdGlvX2RlcHRoX3N0IHNjYWxlX3JhdGlvX2RlcHRoID0KLQkJCQll MmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQkJc3Ry dWN0IF92Y3NfZHBpX3NjYWxlcl90YXBzX3N0IHNjYWxlX3RhcHMgPQotCQkJCWUyZVt2LT5wbGFu ZXNba10uZTJlX2luZGV4XS5waXBlLnNjYWxlX3RhcHM7Ci0KLQkJaWYgKHNjYWxlX3JhdGlvX2Rl cHRoLmhzY2xfcmF0aW8gPiAxKSB7Ci0JCQl2LT5QU0NMX0ZBQ1RPUltrXSA9IGRtbF9taW4oCi0J CQkJCWlwLT5tYXhfZGNodWJfcHNjbF9id19waXhfcGVyX2NsaywKLQkJCQkJaXAtPm1heF9wc2Ns X2xiX2J3X3BpeF9wZXJfY2xrCi0JCQkJCQkJKiBzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlv Ci0JCQkJCQkJLyBkbWxfY2VpbF9leChzY2FsZV90YXBzLmh0YXBzIC8gNiwgMSkpOwotCQl9IGVs c2UgewotCQkJdi0+UFNDTF9GQUNUT1Jba10gPSBkbWxfbWluKAotCQkJCQlpcC0+bWF4X2RjaHVi X3BzY2xfYndfcGl4X3Blcl9jbGssCi0JCQkJCWlwLT5tYXhfcHNjbF9sYl9id19waXhfcGVyX2Ns ayk7Ci0JCX0KLQotCQlpZiAodi0+Qnl0ZVBlclBpeGVsSW5ERVRDW2tdID09IDApIHsKLQkJCXYt PlBTQ0xfRkFDVE9SX0NIUk9NQVtrXSA9IDA7Ci0JCQl2LT5NaW5EUFBDTEtVc2luZ1NpbmdsZURQ UFtrXSA9Ci0JCQkJCWRlc3QucGl4ZWxfcmF0ZV9taHoKLQkJCQkJCQkqIGRtbF9tYXgoCi0JCQkJ CQkJCQlzY2FsZV90YXBzLnZ0YXBzIC8gNgotCQkJCQkJCQkJCQkqIGRtbF9taW4oCi0JCQkJCQkJ CQkJCQkJMSwKLQkJCQkJCQkJCQkJCQlzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlvKSwKLQkJ CQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJCXNjYWxlX3JhdGlvX2RlcHRoLmhzY2xfcmF0aW8K LQkJCQkJCQkJCQkJCQkqIHNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJCQkJ CQkvIHYtPlBTQ0xfRkFDVE9SW2tdLAotCQkJCQkJCQkJCQkxKSk7Ci0KLQkJfSBlbHNlIHsKLQkJ CWlmIChzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlvIC8gMiA+IDEpIHsKLQkJCQl2LT5QU0NM X0ZBQ1RPUl9DSFJPTUFba10gPSBkbWxfbWluKAotCQkJCQkJaXAtPm1heF9kY2h1Yl9wc2NsX2J3 X3BpeF9wZXJfY2xrLAotCQkJCQkJaXAtPm1heF9wc2NsX2xiX2J3X3BpeF9wZXJfY2xrCi0JCQkJ CQkJCSogc2NhbGVfcmF0aW9fZGVwdGguaHNjbF9yYXRpbyAvIDIKLQkJCQkJCQkJLyBkbWxfY2Vp bF9leCgKLQkJCQkJCQkJCQlzY2FsZV90YXBzLmh0YXBzX2MKLQkJCQkJCQkJCQkJCS8gNiwKLQkJ CQkJCQkJCQkxKSk7Ci0JCQl9IGVsc2UgewotCQkJCXYtPlBTQ0xfRkFDVE9SX0NIUk9NQVtrXSA9 IGRtbF9taW4oCi0JCQkJCQlpcC0+bWF4X2RjaHViX3BzY2xfYndfcGl4X3Blcl9jbGssCi0JCQkJ CQlpcC0+bWF4X3BzY2xfbGJfYndfcGl4X3Blcl9jbGspOwotCQkJfQotCQkJdi0+TWluRFBQQ0xL VXNpbmdTaW5nbGVEUFBba10gPQotCQkJCQlkZXN0LnBpeGVsX3JhdGVfbWh6Ci0JCQkJCQkJKiBk bWxfbWF4KAotCQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQkJc2NhbGVfdGFwcy52dGFwcwot CQkJCQkJCQkJCQkJCS8gNgotCQkJCQkJCQkJCQkJCSogZG1sX21pbigKLQkJCQkJCQkJCQkJCQkJ CTEsCi0JCQkJCQkJCQkJCQkJCQlzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlvKSwKLQkJCQkJ CQkJCQkJc2NhbGVfcmF0aW9fZGVwdGguaHNjbF9yYXRpbwotCQkJCQkJCQkJCQkJCSogc2NhbGVf cmF0aW9fZGVwdGgudnNjbF9yYXRpbwotCQkJCQkJCQkJCQkJCS8gdi0+UFNDTF9GQUNUT1Jba10p LAotCQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQkJCQlz Y2FsZV90YXBzLnZ0YXBzX2MKLQkJCQkJCQkJCQkJCQkJCS8gNgotCQkJCQkJCQkJCQkJCQkJKiBk bWxfbWluKAotCQkJCQkJCQkJCQkJCQkJCQkxLAotCQkJCQkJCQkJCQkJCQkJCQlzY2FsZV9yYXRp b19kZXB0aC5oc2NsX3JhdGlvCi0JCQkJCQkJCQkJCQkJCQkJCQkJLyAyKSwKLQkJCQkJCQkJCQkJ CQlzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlvCi0JCQkJCQkJCQkJCQkJCQkqIHNjYWxlX3Jh dGlvX2RlcHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJCQkJCQkJCS8gNAotCQkJCQkJCQkJCQkJCQkJ LyB2LT5QU0NMX0ZBQ1RPUl9DSFJPTUFba10pLAotCQkJCQkJCQkJCQkxKSk7Ci0KLQkJfQotCX0K LQotCWZvciAoayA9IDA7IGsgPCBudW1fcGxhbmVzOyBrKyspIHsKLQkJc3RydWN0IF92Y3NfZHBp X2Rpc3BsYXlfcGlwZV9zb3VyY2VfcGFyYW1zX3N0IHNyYyA9Ci0JCQkJZTJlW3YtPnBsYW5lc1tr XS5lMmVfaW5kZXhdLnBpcGUuc3JjOwotCQlzdHJ1Y3QgX3Zjc19kcGlfc2NhbGVyX3JhdGlvX2Rl cHRoX3N0IHNjYWxlX3JhdGlvX2RlcHRoID0KLQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRl eF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQkJc3RydWN0IF92Y3NfZHBpX3NjYWxlcl90YXBz X3N0IHNjYWxlX3RhcHMgPQotCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLnNj YWxlX3RhcHM7Ci0KLQkJaWYgKHNyYy5zb3VyY2VfZm9ybWF0ID09IGRtXzQ0NF82NCB8fCBzcmMu c291cmNlX2Zvcm1hdCA9PSBkbV80NDRfMzIKLQkJCQl8fCBzcmMuc291cmNlX2Zvcm1hdCA9PSBk bV80NDRfMTYpIHsKLQkJCWlmIChzcmMuc3dfbW9kZSA9PSBkbV9zd19saW5lYXIpIHsKLQkJCQl2 LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdID0gMTsKLQkJCX0gZWxzZSBpZiAoc3JjLnNvdXJjZV9m b3JtYXQgPT0gZG1fNDQ0XzY0KSB7Ci0JCQkJdi0+UmVhZDI1NkJsb2NrSGVpZ2h0WVtrXSA9IDQ7 Ci0JCQl9IGVsc2UgewotCQkJCXYtPlJlYWQyNTZCbG9ja0hlaWdodFlba10gPSA4OwotCQkJfQot Ci0JCQl2LT5SZWFkMjU2QmxvY2tXaWR0aFlba10gPSAyNTYgLyBkbWxfY2VpbF9leCh2LT5CeXRl UGVyUGl4ZWxJbkRFVFlba10sIDEpCi0JCQkJCS8gdi0+UmVhZDI1NkJsb2NrSGVpZ2h0WVtrXTsK LQkJCXYtPlJlYWQyNTZCbG9ja0hlaWdodENba10gPSAwOwotCQkJdi0+UmVhZDI1NkJsb2NrV2lk dGhDW2tdID0gMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChzcmMuc3dfbW9kZSA9PSBkbV9zd19saW5l YXIpIHsKLQkJCQl2LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdID0gMTsKLQkJCQl2LT5SZWFkMjU2 QmxvY2tIZWlnaHRDW2tdID0gMTsKLQkJCX0gZWxzZSBpZiAoc3JjLnNvdXJjZV9mb3JtYXQgPT0g ZG1fNDIwXzgpIHsKLQkJCQl2LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdID0gMTY7Ci0JCQkJdi0+ UmVhZDI1NkJsb2NrSGVpZ2h0Q1trXSA9IDg7Ci0JCQl9IGVsc2UgewotCQkJCXYtPlJlYWQyNTZC bG9ja0hlaWdodFlba10gPSA4OwotCQkJCXYtPlJlYWQyNTZCbG9ja0hlaWdodENba10gPSA4Owot CQkJfQotCi0JCQl2LT5SZWFkMjU2QmxvY2tXaWR0aFlba10gPSAyNTYgLyBkbWxfY2VpbF9leCh2 LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10sIDEpCi0JCQkJCS8gdi0+UmVhZDI1NkJsb2NrSGVpZ2h0 WVtrXTsKLQkJCXYtPlJlYWQyNTZCbG9ja1dpZHRoQ1trXSA9IDI1NiAvIGRtbF9jZWlsX2V4KHYt PkJ5dGVQZXJQaXhlbEluREVUQ1trXSwgMikKLQkJCQkJLyB2LT5SZWFkMjU2QmxvY2tIZWlnaHRD W2tdOwotCQl9Ci0KLQkJaWYgKHNyYy5zb3VyY2Vfc2NhbiA9PSBkbV9ob3J6KSB7Ci0JCQl2LT5N YXhTd2F0aEhlaWdodFlba10gPSB2LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdOwotCQkJdi0+TWF4 U3dhdGhIZWlnaHRDW2tdID0gdi0+UmVhZDI1NkJsb2NrSGVpZ2h0Q1trXTsKLQkJfSBlbHNlIHsK LQkJCXYtPk1heFN3YXRoSGVpZ2h0WVtrXSA9IHYtPlJlYWQyNTZCbG9ja1dpZHRoWVtrXTsKLQkJ CXYtPk1heFN3YXRoSGVpZ2h0Q1trXSA9IHYtPlJlYWQyNTZCbG9ja1dpZHRoQ1trXTsKLQkJfQot Ci0JCWlmIChzcmMuc291cmNlX2Zvcm1hdCA9PSBkbV80NDRfNjQgfHwgc3JjLnNvdXJjZV9mb3Jt YXQgPT0gZG1fNDQ0XzMyCi0JCQkJfHwgc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDQ0XzE2KSB7 Ci0JCQlpZiAoc3JjLnN3X21vZGUgPT0gZG1fc3dfbGluZWFyCi0JCQkJCXx8IChzcmMuc291cmNl X2Zvcm1hdCA9PSBkbV80NDRfNjQKLQkJCQkJCQkmJiAoc3JjLnN3X21vZGUgPT0gZG1fc3dfNGti X3MKLQkJCQkJCQkJCXx8IHNyYy5zd19tb2RlCi0JCQkJCQkJCQkJCT09IGRtX3N3XzRrYl9zX3gK LQkJCQkJCQkJCXx8IHNyYy5zd19tb2RlCi0JCQkJCQkJCQkJCT09IGRtX3N3XzY0a2JfcwotCQkJ CQkJCQkJfHwgc3JjLnN3X21vZGUKLQkJCQkJCQkJCQkJPT0gZG1fc3dfNjRrYl9zX3QKLQkJCQkJ CQkJCXx8IHNyYy5zd19tb2RlCi0JCQkJCQkJCQkJCT09IGRtX3N3XzY0a2Jfc194Ci0JCQkJCQkJ CQl8fCBzcmMuc3dfbW9kZQotCQkJCQkJCQkJCQk9PSBkbV9zd192YXJfcwotCQkJCQkJCQkJfHwg c3JjLnN3X21vZGUKLQkJCQkJCQkJCQkJPT0gZG1fc3dfdmFyX3NfeCkKLQkJCQkJCQkmJiBzcmMu c291cmNlX3NjYW4gPT0gZG1faG9yeikpIHsKLQkJCQl2LT5NaW5Td2F0aEhlaWdodFlba10gPSB2 LT5NYXhTd2F0aEhlaWdodFlba107Ci0JCQl9IGVsc2UgewotCQkJCXYtPk1pblN3YXRoSGVpZ2h0 WVtrXSA9IHYtPk1heFN3YXRoSGVpZ2h0WVtrXSAvIDI7Ci0JCQl9Ci0JCQl2LT5NaW5Td2F0aEhl aWdodENba10gPSB2LT5NYXhTd2F0aEhlaWdodENba107Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoc3Jj LnN3X21vZGUgPT0gZG1fc3dfbGluZWFyKSB7Ci0JCQkJdi0+TWluU3dhdGhIZWlnaHRZW2tdID0g di0+TWF4U3dhdGhIZWlnaHRZW2tdOwotCQkJCXYtPk1pblN3YXRoSGVpZ2h0Q1trXSA9IHYtPk1h eFN3YXRoSGVpZ2h0Q1trXTsKLQkJCX0gZWxzZSBpZiAoc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1f NDIwXzggJiYgc3JjLnNvdXJjZV9zY2FuID09IGRtX2hvcnopIHsKLQkJCQl2LT5NaW5Td2F0aEhl aWdodFlba10gPSB2LT5NYXhTd2F0aEhlaWdodFlba10gLyAyOwotCQkJCWlmIChpcC0+YnVnX2Zv cmNpbmdfTENfcmVxX3NhbWVfc2l6ZV9maXhlZCA9PSAxKSB7Ci0JCQkJCXYtPk1pblN3YXRoSGVp Z2h0Q1trXSA9IHYtPk1heFN3YXRoSGVpZ2h0Q1trXTsKLQkJCQl9IGVsc2UgewotCQkJCQl2LT5N aW5Td2F0aEhlaWdodENba10gPSB2LT5NYXhTd2F0aEhlaWdodENba10gLyAyOwotCQkJCX0KLQkJ CX0gZWxzZSBpZiAoc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDIwXzEwICYmIHNyYy5zb3VyY2Vf c2NhbiA9PSBkbV9ob3J6KSB7Ci0JCQkJdi0+TWluU3dhdGhIZWlnaHRDW2tdID0gdi0+TWF4U3dh dGhIZWlnaHRDW2tdIC8gMjsKLQkJCQlpZiAoaXAtPmJ1Z19mb3JjaW5nX0xDX3JlcV9zYW1lX3Np emVfZml4ZWQgPT0gMSkgewotCQkJCQl2LT5NaW5Td2F0aEhlaWdodFlba10gPSB2LT5NYXhTd2F0 aEhlaWdodFlba107Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+TWluU3dhdGhIZWlnaHRZW2tdID0g di0+TWF4U3dhdGhIZWlnaHRZW2tdIC8gMjsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXYtPk1p blN3YXRoSGVpZ2h0WVtrXSA9IHYtPk1heFN3YXRoSGVpZ2h0WVtrXTsKLQkJCQl2LT5NaW5Td2F0 aEhlaWdodENba10gPSB2LT5NYXhTd2F0aEhlaWdodENba107Ci0JCQl9Ci0JCX0KLQotCQlpZiAo c3JjLnN3X21vZGUgPT0gZG1fc3dfbGluZWFyKSB7Ci0JCQl2LT5NYXhpbXVtU3dhdGhXaWR0aCA9 IDgxOTI7Ci0JCX0gZWxzZSB7Ci0JCQl2LT5NYXhpbXVtU3dhdGhXaWR0aCA9IDUxMjA7Ci0JCX0K LQotCQl2LT5OdW1iZXJPZkRQUFJlcXVpcmVkRm9yREVUU2l6ZSA9Ci0JCQkJZG1sX2NlaWxfZXgo Ci0JCQkJCQl2LT5Td2F0aFdpZHRoWVNpbmdsZURQUFtrXQotCQkJCQkJCQkvIGRtbF9taW4oCi0J CQkJCQkJCQkJdi0+TWF4aW11bVN3YXRoV2lkdGgsCi0JCQkJCQkJCQkJaXAtPmRldF9idWZmZXJf c2l6ZV9rYnl0ZXMKLQkJCQkJCQkJCQkJCSogMTAyNAotCQkJCQkJCQkJCQkJLyAyCi0JCQkJCQkJ CQkJCQkvICh2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10KLQkJCQkJCQkJCQkJCQkJKiB2LT5NaW5T d2F0aEhlaWdodFlba10KLQkJCQkJCQkJCQkJCQkJKyB2LT5CeXRlUGVyUGl4ZWxJbkRFVENba10K LQkJCQkJCQkJCQkJCQkJCQkvIDIKLQkJCQkJCQkJCQkJCQkJCQkqIHYtPk1pblN3YXRoSGVpZ2h0 Q1trXSkpLAotCQkJCQkJMSk7Ci0KLQkJaWYgKHYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9PSAw KSB7Ci0JCQl2LT5OdW1iZXJPZkRQUFJlcXVpcmVkRm9yTEJTaXplID0KLQkJCQkJZG1sX2NlaWxf ZXgoCi0JCQkJCQkJKHNjYWxlX3RhcHMudnRhcHMKLQkJCQkJCQkJCSsgZG1sX21heCgKLQkJCQkJ CQkJCQkJZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJc2NhbGVfcmF0aW9fZGVwdGgudnNjbF9y YXRpbywKLQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJCS0gMiwKLQkJCQkJCQkJCQkJMCkp Ci0JCQkJCQkJCQkqIHYtPlN3YXRoV2lkdGhZU2luZ2xlRFBQW2tdCi0JCQkJCQkJCQkvIGRtbF9t YXgoCi0JCQkJCQkJCQkJCXNjYWxlX3JhdGlvX2RlcHRoLmhzY2xfcmF0aW8sCi0JCQkJCQkJCQkJ CTEpCi0JCQkJCQkJCQkqIHNjYWxlX3JhdGlvX2RlcHRoLmxiX2RlcHRoCi0JCQkJCQkJCQkvIGlw LT5saW5lX2J1ZmZlcl9zaXplX2JpdHMsCi0JCQkJCQkJMSk7Ci0JCX0gZWxzZSB7Ci0JCQl2LT5O dW1iZXJPZkRQUFJlcXVpcmVkRm9yTEJTaXplID0KLQkJCQkJZG1sX21heCgKLQkJCQkJCQlkbWxf Y2VpbF9leCgKLQkJCQkJCQkJCShzY2FsZV90YXBzLnZ0YXBzCi0JCQkJCQkJCQkJCSsgZG1sX21h eCgKLQkJCQkJCQkJCQkJCQlkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkJCXNjYWxlX3JhdGlv X2RlcHRoLnZzY2xfcmF0aW8sCi0JCQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJCQkJLSAy LAotCQkJCQkJCQkJCQkJCTApKQotCQkJCQkJCQkJCQkqIHYtPlN3YXRoV2lkdGhZU2luZ2xlRFBQ W2tdCi0JCQkJCQkJCQkJCS8gZG1sX21heCgKLQkJCQkJCQkJCQkJCQlzY2FsZV9yYXRpb19kZXB0 aC5oc2NsX3JhdGlvLAotCQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCSogc2NhbGVfcmF0aW9f ZGVwdGgubGJfZGVwdGgKLQkJCQkJCQkJCQkJLyBpcC0+bGluZV9idWZmZXJfc2l6ZV9iaXRzLAot CQkJCQkJCQkJMSksCi0JCQkJCQkJZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkoc2NhbGVfdGFwcy52 dGFwc19jCi0JCQkJCQkJCQkJCSsgZG1sX21heCgKLQkJCQkJCQkJCQkJCQlkbWxfY2VpbF9leCgK LQkJCQkJCQkJCQkJCQkJCXNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJCQkJ CQkJCQkJLyAyLAotCQkJCQkJCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJCQkJCS0gMiwKLQkJCQkJ CQkJCQkJCQkwKSkKLQkJCQkJCQkJCQkJKiB2LT5Td2F0aFdpZHRoWVNpbmdsZURQUFtrXQotCQkJ CQkJCQkJCQkvIDIKLQkJCQkJCQkJCQkJLyBkbWxfbWF4KAotCQkJCQkJCQkJCQkJCXNjYWxlX3Jh dGlvX2RlcHRoLmhzY2xfcmF0aW8KLQkJCQkJCQkJCQkJCQkJCS8gMiwKLQkJCQkJCQkJCQkJCQkx KQotCQkJCQkJCQkJCQkqIHNjYWxlX3JhdGlvX2RlcHRoLmxiX2RlcHRoCi0JCQkJCQkJCQkJCS8g aXAtPmxpbmVfYnVmZmVyX3NpemVfYml0cywKLQkJCQkJCQkJCTEpKTsKLQkJfQotCi0JCXYtPk51 bWJlck9mRFBQUmVxdWlyZWRGb3JERVRBbmRMQlNpemVba10gPSBkbWxfbWF4KAotCQkJCXYtPk51 bWJlck9mRFBQUmVxdWlyZWRGb3JERVRTaXplLAotCQkJCXYtPk51bWJlck9mRFBQUmVxdWlyZWRG b3JMQlNpemUpOwotCi0JfQotCi0JZm9yIChpID0gMDsgaSA8IE51bWJlck9mU3RhdGVzUGx1c1R3 bzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJCXYtPlRvdGFsTnVtYmVy T2ZBY3RpdmVEUFBbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGldID0gMDsKLQkJCXYtPlJl cXVpcmVkRElTUENMS1tqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPSAwOwotCQkJdi0+ RElTUENMS19EUFBDTEtfU3VwcG9ydFtqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPSAx OwotCi0JCQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCQkJc3RydWN0IF92 Y3NfZHBpX2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJCQkJCWUyZVt2LT5w bGFuZXNba10uZTJlX2luZGV4XS5waXBlLmRlc3Q7Ci0JCQkJaWprID0gayAqIDIgKiBOdW1iZXJP ZlN0YXRlc1BsdXNUd28gKyBqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaTsKLQotCQkJCXYt Pk1pbkRpc3BjbGtVc2luZ1NpbmdsZURQUCA9IGRtbF9tYXgoCi0JCQkJCQlkZXN0LnBpeGVsX3Jh dGVfbWh6LAotCQkJCQkJdi0+TWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBba10gKiAoaiArIDEpKQot CQkJCQkJKiAoMSArIHNvYy0+ZG93bnNwcmVhZF9wZXJjZW50IC8gMTAwKTsKLQkJCQl2LT5NaW5E aXNwY2xrVXNpbmdEdWFsRFBQID0gZG1sX21heCgKLQkJCQkJCWRlc3QucGl4ZWxfcmF0ZV9taHos Ci0JCQkJCQl2LT5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXSAvIDIgKiAoaiArIDEpKQotCQkJ CQkJKiAoMSArIHNvYy0+ZG93bnNwcmVhZF9wZXJjZW50IC8gMTAwKTsKLQotCQkJCWlmIChpIDwg TnVtYmVyT2ZTdGF0ZXMpIHsKLQkJCQkJdi0+TWluRGlzcGNsa1VzaW5nU2luZ2xlRFBQID0KLQkJ CQkJCQl2LT5NaW5EaXNwY2xrVXNpbmdTaW5nbGVEUFAKLQkJCQkJCQkJCSogKDEKLQkJCQkJCQkJ CQkJKyBpcC0+ZGlzcGNsa19yYW1wX21hcmdpbl9wZXJjZW50Ci0JCQkJCQkJCQkJCQkJLyAxMDAp OwotCQkJCQl2LT5NaW5EaXNwY2xrVXNpbmdEdWFsRFBQID0KLQkJCQkJCQl2LT5NaW5EaXNwY2xr VXNpbmdEdWFsRFBQCi0JCQkJCQkJCQkqICgxCi0JCQkJCQkJCQkJCSsgaXAtPmRpc3BjbGtfcmFt cF9tYXJnaW5fcGVyY2VudAotCQkJCQkJCQkJCQkJCS8gMTAwKTsKLQkJCQl9Ci0KLQkJCQlpZiAo di0+TWluRGlzcGNsa1VzaW5nU2luZ2xlRFBQCi0JCQkJCQk8PSBkbWxfbWluKAotCQkJCQkJCQl2 LT5NYXhEaXNwY2xrW2ldLAotCQkJCQkJCQkoaiArIDEpICogdi0+TWF4RHBwY2xrW2ldKQotCQkJ CQkJJiYgdi0+TnVtYmVyT2ZEUFBSZXF1aXJlZEZvckRFVEFuZExCU2l6ZVtrXSA8PSAxKSB7Ci0J CQkJCXYtPk5vT2ZEUFBbaWprXSA9IDE7Ci0JCQkJCXYtPlJlcXVpcmVkRElTUENMS1tqICogTnVt YmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPSBkbWxfbWF4KAotCQkJCQkJCXYtPlJlcXVpcmVkRElT UENMS1tqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvCi0JCQkJCQkJCQkrIGldLAotCQkJCQkJCXYt Pk1pbkRpc3BjbGtVc2luZ1NpbmdsZURQUCk7Ci0JCQkJfSBlbHNlIGlmICh2LT5NaW5EaXNwY2xr VXNpbmdEdWFsRFBQCi0JCQkJCQk8PSBkbWxfbWluKAotCQkJCQkJCQl2LT5NYXhEaXNwY2xrW2ld LAotCQkJCQkJCQkoaiArIDEpICogdi0+TWF4RHBwY2xrW2ldKSkgewotCQkJCQl2LT5Ob09mRFBQ W2lqa10gPSAyOwotCQkJCQl2LT5SZXF1aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1 c1R3byArIGldID0gZG1sX21heCgKLQkJCQkJCQl2LT5SZXF1aXJlZERJU1BDTEtbaiAqIE51bWJl ck9mU3RhdGVzUGx1c1R3bwotCQkJCQkJCQkJKyBpXSwKLQkJCQkJCQl2LT5NaW5EaXNwY2xrVXNp bmdEdWFsRFBQKTsKLQkJCQl9IGVsc2UgewotCQkJCQl2LT5Ob09mRFBQW2lqa10gPSAyOwotCQkJ CQl2LT5SZXF1aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGldID0gZG1s X21heCgKLQkJCQkJCQl2LT5SZXF1aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3 bwotCQkJCQkJCQkJKyBpXSwKLQkJCQkJCQl2LT5NaW5EaXNwY2xrVXNpbmdEdWFsRFBQKTsKLQkJ CQkJdi0+RElTUENMS19EUFBDTEtfU3VwcG9ydFtqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsg aV0gPQotCQkJCQkJCTA7Ci0JCQkJfQotCi0JCQkJdi0+VG90YWxOdW1iZXJPZkFjdGl2ZURQUFtq ICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPQotCQkJCQkJdi0+VG90YWxOdW1iZXJPZkFj dGl2ZURQUFtqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvCi0JCQkJCQkJCSsgaV0gKyB2LT5Ob09m RFBQW2lqa107Ci0JCQl9Ci0KLQkJCWlmICh2LT5Ub3RhbE51bWJlck9mQWN0aXZlRFBQW2ogKiBO dW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpXQotCQkJCQk+IGlwLT5tYXhfbnVtX2RwcCkgewotCQkJ CXYtPlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGld ID0gMDsKLQkJCQl2LT5SZXF1aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byAr IGldID0gMDsKLQkJCQl2LT5ESVNQQ0xLX0RQUENMS19TdXBwb3J0W2ogKiBOdW1iZXJPZlN0YXRl c1BsdXNUd28gKyBpXSA9IDE7Ci0KLQkJCQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysr KSB7Ci0JCQkJCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVfZGVzdF9wYXJhbXNfc3QgZGVz dCA9Ci0JCQkJCQkJZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLnBpcGUuZGVzdDsKLQkJCQkJ aWprID0gayAqIDIgKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28KLQkJCQkJCQkrIGogKiBOdW1iZXJP ZlN0YXRlc1BsdXNUd28gKyBpOwotCi0JCQkJCXYtPk1pbkRpc3BjbGtVc2luZ1NpbmdsZURQUCA9 IGRtbF9tYXgoCi0JCQkJCQkJZGVzdC5waXhlbF9yYXRlX21oeiwKLQkJCQkJCQl2LT5NaW5EUFBD TEtVc2luZ1NpbmdsZURQUFtrXSAqIChqICsgMSkpCi0JCQkJCQkJKiAoMSArIHNvYy0+ZG93bnNw cmVhZF9wZXJjZW50IC8gMTAwKTsKLQkJCQkJdi0+TWluRGlzcGNsa1VzaW5nRHVhbERQUCA9IGRt bF9tYXgoCi0JCQkJCQkJZGVzdC5waXhlbF9yYXRlX21oeiwKLQkJCQkJCQl2LT5NaW5EUFBDTEtV c2luZ1NpbmdsZURQUFtrXSAvIDIgKiAoaiArIDEpKQotCQkJCQkJCSogKDEgKyBzb2MtPmRvd25z cHJlYWRfcGVyY2VudCAvIDEwMCk7Ci0KLQkJCQkJaWYgKGkgPCBOdW1iZXJPZlN0YXRlcykgewot CQkJCQkJdi0+TWluRGlzcGNsa1VzaW5nU2luZ2xlRFBQID0KLQkJCQkJCQkJdi0+TWluRGlzcGNs a1VzaW5nU2luZ2xlRFBQCi0JCQkJCQkJCQkJKiAoMQotCQkJCQkJCQkJCQkJKyBpcC0+ZGlzcGNs a19yYW1wX21hcmdpbl9wZXJjZW50Ci0JCQkJCQkJCQkJCQkJCS8gMTAwKTsKLQkJCQkJCXYtPk1p bkRpc3BjbGtVc2luZ0R1YWxEUFAgPQotCQkJCQkJCQl2LT5NaW5EaXNwY2xrVXNpbmdEdWFsRFBQ Ci0JCQkJCQkJCQkJKiAoMQotCQkJCQkJCQkJCQkJKyBpcC0+ZGlzcGNsa19yYW1wX21hcmdpbl9w ZXJjZW50Ci0JCQkJCQkJCQkJCQkJCS8gMTAwKTsKLQkJCQkJfQotCi0JCQkJCWlmICh2LT5OdW1i ZXJPZkRQUFJlcXVpcmVkRm9yREVUQW5kTEJTaXplW2tdIDw9IDEpIHsKLQkJCQkJCXYtPk5vT2ZE UFBbaWprXSA9IDE7Ci0JCQkJCQl2LT5SZXF1aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVz UGx1c1R3byArIGldID0KLQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQl2LT5SZXF1aXJlZERJ U1BDTEtbagotCQkJCQkJCQkJCQkJKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28KLQkJCQkJCQkJCQkJ CSsgaV0sCi0JCQkJCQkJCQkJdi0+TWluRGlzcGNsa1VzaW5nU2luZ2xlRFBQKTsKLQkJCQkJCWlm ICh2LT5NaW5EaXNwY2xrVXNpbmdTaW5nbGVEUFAKLQkJCQkJCQkJPiBkbWxfbWluKAotCQkJCQkJ CQkJCXYtPk1heERpc3BjbGtbaV0sCi0JCQkJCQkJCQkJKGogKyAxKQotCQkJCQkJCQkJCQkJKiB2 LT5NYXhEcHBjbGtbaV0pKSB7Ci0JCQkJCQkJdi0+RElTUENMS19EUFBDTEtfU3VwcG9ydFtqCi0J CQkJCQkJCQkqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGldID0KLQkJCQkJCQkJCTA7Ci0JCQkJ CQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQl2LT5Ob09mRFBQW2lqa10gPSAyOwotCQkJCQkJdi0+ UmVxdWlyZWRESVNQQ0xLW2ogKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpXSA9Ci0JCQkJCQkJ CWRtbF9tYXgoCi0JCQkJCQkJCQkJdi0+UmVxdWlyZWRESVNQQ0xLW2oKLQkJCQkJCQkJCQkJCSog TnVtYmVyT2ZTdGF0ZXNQbHVzVHdvCi0JCQkJCQkJCQkJCQkrIGldLAotCQkJCQkJCQkJCXYtPk1p bkRpc3BjbGtVc2luZ0R1YWxEUFApOwotCQkJCQkJaWYgKHYtPk1pbkRpc3BjbGtVc2luZ0R1YWxE UFAKLQkJCQkJCQkJPiBkbWxfbWluKAotCQkJCQkJCQkJCXYtPk1heERpc3BjbGtbaV0sCi0JCQkJ CQkJCQkJKGogKyAxKQotCQkJCQkJCQkJCQkJKiB2LT5NYXhEcHBjbGtbaV0pKSB7Ci0JCQkJCQkJ di0+RElTUENMS19EUFBDTEtfU3VwcG9ydFtqCi0JCQkJCQkJCQkqIE51bWJlck9mU3RhdGVzUGx1 c1R3byArIGldID0KLQkJCQkJCQkJCTA7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJdi0+VG90YWxO dW1iZXJPZkFjdGl2ZURQUFtqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPQotCQkJCQkJ CXYtPlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbagotCQkJCQkJCQkJKiBOdW1iZXJPZlN0YXRlc1Bs dXNUd28gKyBpXQotCQkJCQkJCQkJKyB2LT5Ob09mRFBQW2lqa107Ci0JCQkJfQotCQkJfQotCQl9 Ci0JfQotCi0JLy8gVmlld3BvcnQgU2l6ZSBDaGVjawotCi0Jdi0+Vmlld3BvcnRTaXplU3VwcG9y dCA9IDE7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCWlmICh2LT5O dW1iZXJPZkRQUFJlcXVpcmVkRm9yREVUQW5kTEJTaXplW2tdID4gMikgewotCQkJdi0+Vmlld3Bv cnRTaXplU3VwcG9ydCA9IDA7Ci0JCX0KLQl9Ci0KLQkvLyBUb3RhbCBBdmFpbGFibGUgUGlwZXMg U3VwcG9ydCBDaGVjawotCi0JZm9yIChpID0gMDsgaSA8IE51bWJlck9mU3RhdGVzUGx1c1R3bzsg aSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJCWlmICh2LT5Ub3RhbE51bWJl ck9mQWN0aXZlRFBQW2ogKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpXQotCQkJCQk8PSBpcC0+ bWF4X251bV9kcHApIHsKLQkJCQl2LT5Ub3RhbEF2YWlsYWJsZVBpcGVzU3VwcG9ydFtqICogTnVt YmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPSAxOwotCQkJfSBlbHNlIHsKLQkJCQl2LT5Ub3RhbEF2 YWlsYWJsZVBpcGVzU3VwcG9ydFtqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPSAwOwot CQkJfQotCQl9Ci0JfQotCi0JLy8gVXJnZW50IExhdGVuY3kgU3VwcG9ydCBDaGVjawotCi0JZm9y IChqID0gMDsgaiA8IDI7IGorKykgewotCQlmb3IgKGkgPSAwOyBpIDwgTnVtYmVyT2ZTdGF0ZXNQ bHVzVHdvOyBpKyspIHsKLQkJCWlqID0gaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0J CQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCQkJc3RydWN0IF92Y3NfZHBp X2Rpc3BsYXlfcGlwZV9zb3VyY2VfcGFyYW1zX3N0IHNyYyA9Ci0JCQkJCQllMmVbdi0+cGxhbmVz W2tdLmUyZV9pbmRleF0ucGlwZS5zcmM7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlw ZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4 XS5waXBlLmRlc3Q7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX3NjYWxlcl9yYXRpb19kZXB0aF9zdCBz Y2FsZV9yYXRpb19kZXB0aCA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlw ZS5zY2FsZV9yYXRpb19kZXB0aDsKLQkJCQlzdHJ1Y3QgX3Zjc19kcGlfc2NhbGVyX3RhcHNfc3Qg c2NhbGVfdGFwcyA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2Fs ZV90YXBzOwotCQkJCWlqayA9IGsgKiAyICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaiAqIE51 bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0KLQkJCQl2LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lq a10gPSB2LT5Td2F0aFdpZHRoWVNpbmdsZURQUFtrXQotCQkJCQkJLyB2LT5Ob09mRFBQW2lqa107 Ci0KLQkJCQl2LT5Td2F0aFdpZHRoR3JhbnVsYXJpdHlZID0gMjU2Ci0JCQkJCQkvIGRtbF9jZWls X2V4KHYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXSwgMSkKLQkJCQkJCS8gdi0+TWF4U3dhdGhIZWln aHRZW2tdOwotCQkJCXYtPlJvdW5kZWRVcE1heFN3YXRoU2l6ZUJ5dGVzWSA9IChkbWxfY2VpbF9l eCgKLQkJCQkJCXYtPlN3YXRoV2lkdGhZUGVyU3RhdGVbaWprXSAtIDEsCi0JCQkJCQl2LT5Td2F0 aFdpZHRoR3JhbnVsYXJpdHlZKQotCQkJCQkJKyB2LT5Td2F0aFdpZHRoR3JhbnVsYXJpdHlZKQot CQkJCQkJKiB2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10gKiB2LT5NYXhTd2F0aEhlaWdodFlba107 Ci0JCQkJaWYgKHNyYy5zb3VyY2VfZm9ybWF0ID09IGRtXzQyMF8xMCkgewotCQkJCQl2LT5Sb3Vu ZGVkVXBNYXhTd2F0aFNpemVCeXRlc1kgPSBkbWxfY2VpbF9leCgKLQkJCQkJCQl2LT5Sb3VuZGVk VXBNYXhTd2F0aFNpemVCeXRlc1ksCi0JCQkJCQkJMjU2KSArIDI1NjsKLQkJCQl9Ci0JCQkJaWYg KHYtPk1heFN3YXRoSGVpZ2h0Q1trXSA+IDApIHsKLQkJCQkJdi0+U3dhdGhXaWR0aEdyYW51bGFy aXR5QyA9IDI1NgotCQkJCQkJCS8gZG1sX2NlaWxfZXgodi0+Qnl0ZVBlclBpeGVsSW5ERVRDW2td LCAyKQotCQkJCQkJCS8gdi0+TWF4U3dhdGhIZWlnaHRDW2tdOwotCQkJCX0KLQkJCQl2LT5Sb3Vu ZGVkVXBNYXhTd2F0aFNpemVCeXRlc0MgPSAoZG1sX2NlaWxfZXgoCi0JCQkJCQl2LT5Td2F0aFdp ZHRoWVBlclN0YXRlW2lqa10gLyAyIC0gMSwKLQkJCQkJCXYtPlN3YXRoV2lkdGhHcmFudWxhcml0 eUMpCi0JCQkJCQkrIHYtPlN3YXRoV2lkdGhHcmFudWxhcml0eUMpCi0JCQkJCQkqIHYtPkJ5dGVQ ZXJQaXhlbEluREVUQ1trXSAqIHYtPk1heFN3YXRoSGVpZ2h0Q1trXTsKLQkJCQlpZiAoc3JjLnNv dXJjZV9mb3JtYXQgPT0gZG1fNDIwXzEwKSB7Ci0JCQkJCXYtPlJvdW5kZWRVcE1heFN3YXRoU2l6 ZUJ5dGVzQyA9IGRtbF9jZWlsX2V4KAotCQkJCQkJCXYtPlJvdW5kZWRVcE1heFN3YXRoU2l6ZUJ5 dGVzQywKLQkJCQkJCQkyNTYpICsgMjU2OwotCQkJCX0KLQotCQkJCWlmICh2LT5Sb3VuZGVkVXBN YXhTd2F0aFNpemVCeXRlc1kgKyB2LT5Sb3VuZGVkVXBNYXhTd2F0aFNpemVCeXRlc0MKLQkJCQkJ CTw9IGlwLT5kZXRfYnVmZmVyX3NpemVfa2J5dGVzICogMTAyNCAvIDIpIHsKLQkJCQkJdi0+U3dh dGhIZWlnaHRZUGVyU3RhdGVbaWprXSA9IHYtPk1heFN3YXRoSGVpZ2h0WVtrXTsKLQkJCQkJdi0+ U3dhdGhIZWlnaHRDUGVyU3RhdGVbaWprXSA9IHYtPk1heFN3YXRoSGVpZ2h0Q1trXTsKLQkJCQl9 IGVsc2UgewotCQkJCQl2LT5Td2F0aEhlaWdodFlQZXJTdGF0ZVtpamtdID0gdi0+TWluU3dhdGhI ZWlnaHRZW2tdOwotCQkJCQl2LT5Td2F0aEhlaWdodENQZXJTdGF0ZVtpamtdID0gdi0+TWluU3dh dGhIZWlnaHRDW2tdOwotCQkJCX0KLQotCQkJCWlmICh2LT5CeXRlUGVyUGl4ZWxJbkRFVENba10g PT0gMCkgewotCQkJCQl2LT5MaW5lc0luREVUTHVtYSA9IGlwLT5kZXRfYnVmZmVyX3NpemVfa2J5 dGVzICogMTAyNAotCQkJCQkJCS8gdi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdCi0JCQkJCQkJLyB2 LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lqa107Ci0KLQkJCQkJdi0+TGluZXNJbkRFVENocm9tYSA9 IDA7Ci0JCQkJfSBlbHNlIGlmICh2LT5Td2F0aEhlaWdodFlQZXJTdGF0ZVtpamtdCi0JCQkJCQk8 PSB2LT5Td2F0aEhlaWdodENQZXJTdGF0ZVtpamtdKSB7Ci0JCQkJCXYtPkxpbmVzSW5ERVRMdW1h ID0gaXAtPmRldF9idWZmZXJfc2l6ZV9rYnl0ZXMgKiAxMDI0IC8gMgotCQkJCQkJCS8gdi0+Qnl0 ZVBlclBpeGVsSW5ERVRZW2tdCi0JCQkJCQkJLyB2LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lqa107 Ci0JCQkJCXYtPkxpbmVzSW5ERVRDaHJvbWEgPSBpcC0+ZGV0X2J1ZmZlcl9zaXplX2tieXRlcyAq IDEwMjQgLyAyCi0JCQkJCQkJLyB2LT5CeXRlUGVyUGl4ZWxJbkRFVENba10KLQkJCQkJCQkvICh2 LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lqa10gLyAyKTsKLQkJCQl9IGVsc2UgewotCQkJCQl2LT5M aW5lc0luREVUTHVtYSA9IGlwLT5kZXRfYnVmZmVyX3NpemVfa2J5dGVzICogMTAyNCAqIDIKLQkJ CQkJCQkvIDMgLyB2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10KLQkJCQkJCQkvIHYtPlN3YXRoV2lk dGhZUGVyU3RhdGVbaWprXTsKLQkJCQkJdi0+TGluZXNJbkRFVENocm9tYSA9IGlwLT5kZXRfYnVm ZmVyX3NpemVfa2J5dGVzICogMTAyNCAvIDMKLQkJCQkJCQkvIHYtPkJ5dGVQZXJQaXhlbEluREVU WVtrXQotCQkJCQkJCS8gKHYtPlN3YXRoV2lkdGhZUGVyU3RhdGVbaWprXSAvIDIpOwotCQkJCX0K LQotCQkJCXYtPkVmZmVjdGl2ZUxCTGF0ZW5jeUhpZGluZ1NvdXJjZUxpbmVzTHVtYSA9Ci0JCQkJ CQlkbWxfbWluKAotCQkJCQkJCQlpcC0+bWF4X2xpbmVfYnVmZmVyX2xpbmVzLAotCQkJCQkJCQlk bWxfZmxvb3JfZXgoCi0JCQkJCQkJCQkJaXAtPmxpbmVfYnVmZmVyX3NpemVfYml0cwotCQkJCQkJ CQkJCQkJLyBzY2FsZV9yYXRpb19kZXB0aC5sYl9kZXB0aAotCQkJCQkJCQkJCQkJLyAodi0+U3dh dGhXaWR0aFlQZXJTdGF0ZVtpamtdCi0JCQkJCQkJCQkJCQkJCS8gZG1sX21heCgKLQkJCQkJCQkJ CQkJCQkJCQlzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlvLAotCQkJCQkJCQkJCQkJCQkJCTEp KSwKLQkJCQkJCQkJCQkxKSkKLQkJCQkJCQkJLSAoc2NhbGVfdGFwcy52dGFwcyAtIDEpOwotCi0J CQkJdi0+RWZmZWN0aXZlTEJMYXRlbmN5SGlkaW5nU291cmNlTGluZXNDaHJvbWEgPQotCQkJCQkJ ZG1sX21pbigKLQkJCQkJCQkJaXAtPm1heF9saW5lX2J1ZmZlcl9saW5lcywKLQkJCQkJCQkJZG1s X2Zsb29yX2V4KAotCQkJCQkJCQkJCWlwLT5saW5lX2J1ZmZlcl9zaXplX2JpdHMKLQkJCQkJCQkJ CQkJCS8gc2NhbGVfcmF0aW9fZGVwdGgubGJfZGVwdGgKLQkJCQkJCQkJCQkJCS8gKHYtPlN3YXRo V2lkdGhZUGVyU3RhdGVbaWprXQotCQkJCQkJCQkJCQkJCQkvIDIKLQkJCQkJCQkJCQkJCQkJLyBk bWxfbWF4KAotCQkJCQkJCQkJCQkJCQkJCXNjYWxlX3JhdGlvX2RlcHRoLmhzY2xfcmF0aW8KLQkJ CQkJCQkJCQkJCQkJCQkJCS8gMiwKLQkJCQkJCQkJCQkJCQkJCQkxKSksCi0JCQkJCQkJCQkJMSkp Ci0JCQkJCQkJCS0gKHNjYWxlX3RhcHMudnRhcHNfYyAtIDEpOwotCi0JCQkJdi0+RWZmZWN0aXZl REVUTEJMaW5lc0x1bWEgPQotCQkJCQkJZG1sX2Zsb29yX2V4KAotCQkJCQkJCQl2LT5MaW5lc0lu REVUTHVtYQotCQkJCQkJCQkJCSsgZG1sX21pbigKLQkJCQkJCQkJCQkJCXYtPkxpbmVzSW5ERVRM dW1hCi0JCQkJCQkJCQkJCQkJCSogdi0+UmVxdWlyZWRESVNQQ0xLW2lqXQotCQkJCQkJCQkJCQkJ CQkqIHYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXQotCQkJCQkJCQkJCQkJCQkqIHYtPlBTQ0xfRkFD VE9SW2tdCi0JCQkJCQkJCQkJCQkJCS8gdi0+UmV0dXJuQldQZXJTdGF0ZVtpXSwKLQkJCQkJCQkJ CQkJCXYtPkVmZmVjdGl2ZUxCTGF0ZW5jeUhpZGluZ1NvdXJjZUxpbmVzTHVtYSksCi0JCQkJCQkJ CXYtPlN3YXRoSGVpZ2h0WVBlclN0YXRlW2lqa10pOwotCi0JCQkJdi0+RWZmZWN0aXZlREVUTEJM aW5lc0Nocm9tYSA9Ci0JCQkJCQlkbWxfZmxvb3JfZXgoCi0JCQkJCQkJCXYtPkxpbmVzSW5ERVRD aHJvbWEKLQkJCQkJCQkJCQkrIGRtbF9taW4oCi0JCQkJCQkJCQkJCQl2LT5MaW5lc0luREVUQ2hy b21hCi0JCQkJCQkJCQkJCQkJCSogdi0+UmVxdWlyZWRESVNQQ0xLW2lqXQotCQkJCQkJCQkJCQkJ CQkqIHYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXQotCQkJCQkJCQkJCQkJCQkqIHYtPlBTQ0xfRkFD VE9SX0NIUk9NQVtrXQotCQkJCQkJCQkJCQkJCQkvIHYtPlJldHVybkJXUGVyU3RhdGVbaV0sCi0J CQkJCQkJCQkJCQl2LT5FZmZlY3RpdmVMQkxhdGVuY3lIaWRpbmdTb3VyY2VMaW5lc0Nocm9tYSks Ci0JCQkJCQkJCXYtPlN3YXRoSGVpZ2h0Q1BlclN0YXRlW2lqa10pOwotCi0JCQkJaWYgKHYtPkJ5 dGVQZXJQaXhlbEluREVUQ1trXSA9PSAwKSB7Ci0JCQkJCXYtPlVyZ2VudExhdGVuY3lTdXBwb3J0 VXNQZXJTdGF0ZVtpamtdID0KLQkJCQkJCQl2LT5FZmZlY3RpdmVERVRMQkxpbmVzTHVtYQotCQkJ CQkJCQkJKiAoZGVzdC5odG90YWwKLQkJCQkJCQkJCQkJLyBkZXN0LnBpeGVsX3JhdGVfbWh6KQot CQkJCQkJCQkJLyBzY2FsZV9yYXRpb19kZXB0aC52c2NsX3JhdGlvCi0JCQkJCQkJCQktIHYtPkVm ZmVjdGl2ZURFVExCTGluZXNMdW1hCi0JCQkJCQkJCQkJCSogdi0+U3dhdGhXaWR0aFlQZXJTdGF0 ZVtpamtdCi0JCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJdi0+Qnl0ZVBl clBpeGVsSW5ERVRZW2tdLAotCQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCS8gKHYtPlJldHVy bkJXUGVyU3RhdGVbaV0KLQkJCQkJCQkJCQkJCQkvIHYtPk5vT2ZEUFBbaWprXSk7Ci0JCQkJfSBl bHNlIHsKLQkJCQkJdi0+VXJnZW50TGF0ZW5jeVN1cHBvcnRVc1BlclN0YXRlW2lqa10gPQotCQkJ CQkJCWRtbF9taW4oCi0JCQkJCQkJCQl2LT5FZmZlY3RpdmVERVRMQkxpbmVzTHVtYQotCQkJCQkJ CQkJCQkqIChkZXN0Lmh0b3RhbAotCQkJCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21oeikK LQkJCQkJCQkJCQkJLyBzY2FsZV9yYXRpb19kZXB0aC52c2NsX3JhdGlvCi0JCQkJCQkJCQkJCS0g di0+RWZmZWN0aXZlREVUTEJMaW5lc0x1bWEKLQkJCQkJCQkJCQkJCQkqIHYtPlN3YXRoV2lkdGhZ UGVyU3RhdGVbaWprXQotCQkJCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJ CQl2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJ CQkJCS8gKHYtPlJldHVybkJXUGVyU3RhdGVbaV0KLQkJCQkJCQkJCQkJCQkJCS8gdi0+Tm9PZkRQ UFtpamtdKSwKLQkJCQkJCQkJCXYtPkVmZmVjdGl2ZURFVExCTGluZXNDaHJvbWEKLQkJCQkJCQkJ CQkJKiAoZGVzdC5odG90YWwKLQkJCQkJCQkJCQkJCQkvIGRlc3QucGl4ZWxfcmF0ZV9taHopCi0J CQkJCQkJCQkJCS8gKHNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJCQkJCQkv IDIpCi0JCQkJCQkJCQkJCS0gdi0+RWZmZWN0aXZlREVUTEJMaW5lc0Nocm9tYQotCQkJCQkJCQkJ CQkJCSogdi0+U3dhdGhXaWR0aFlQZXJTdGF0ZVtpamtdCi0JCQkJCQkJCQkJCQkJLyAyCi0JCQkJ CQkJCQkJCQkJKiBkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbElu REVUQ1trXSwKLQkJCQkJCQkJCQkJCQkJCTIpCi0JCQkJCQkJCQkJCQkJLyAodi0+UmV0dXJuQldQ ZXJTdGF0ZVtpXQotCQkJCQkJCQkJCQkJCQkJLyB2LT5Ob09mRFBQW2lqa10pKTsKLQkJCQl9Ci0K LQkJCX0KLQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBOdW1iZXJPZlN0YXRlc1BsdXNUd287 IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCQlpaiA9IGogKiBOdW1iZXJP ZlN0YXRlc1BsdXNUd28gKyBpOwotCi0JCQl2LT5VcmdlbnRMYXRlbmN5U3VwcG9ydFtpal0gPSAx OwotCQkJZm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsrKykgewotCQkJCWlqayA9IGsgKiAy ICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7 Ci0KLQkJCQlpZiAodi0+VXJnZW50TGF0ZW5jeVN1cHBvcnRVc1BlclN0YXRlW2lqa10KLQkJCQkJ CTwgc29jLT51cmdlbnRfbGF0ZW5jeV91cyAvIDEpIHsKLQkJCQkJdi0+VXJnZW50TGF0ZW5jeVN1 cHBvcnRbaWpdID0gMDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvLyBQcmVmZXRjaCBDaGVj awotCi0JZm9yIChpID0gMDsgaSA8IE51bWJlck9mU3RhdGVzUGx1c1R3bzsgaSsrKSB7Ci0JCWZv ciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJCWlqID0gaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3 byArIGk7Ci0KLQkJCXYtPlRvdGFsTnVtYmVyT2ZEQ0NBY3RpdmVEUFBbaWpdID0gMDsKLQkJCWZv ciAoayA9IDA7IGsgPCBudW1fcGxhbmVzOyBrKyspIHsKLQkJCQlzdHJ1Y3QgX3Zjc19kcGlfZGlz cGxheV9waXBlX3NvdXJjZV9wYXJhbXNfc3Qgc3JjID0KLQkJCQkJCWUyZVt2LT5wbGFuZXNba10u ZTJlX2luZGV4XS5waXBlLnNyYzsKLQkJCQlpamsgPSBrICogMiAqIE51bWJlck9mU3RhdGVzUGx1 c1R3byArIGogKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpOwotCi0JCQkJaWYgKHNyYy5kY2Mg PT0gMSkgewotCQkJCQl2LT5Ub3RhbE51bWJlck9mRENDQWN0aXZlRFBQW2lqXSA9Ci0JCQkJCQkJ di0+VG90YWxOdW1iZXJPZkRDQ0FjdGl2ZURQUFtpal0KLQkJCQkJCQkJCSsgdi0+Tm9PZkRQUFtp amtdOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBOdW1iZXJPZlN0 YXRlc1BsdXNUd287IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCQlpaiA9 IGogKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpOwotCi0JCQl2LT5Qcm9qZWN0ZWREQ0ZDTEtE ZWVwU2xlZXAgPSA4OwotCi0JCQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0J CQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJ CQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLmRlc3Q7Ci0JCQkJc3RydWN0IF92 Y3NfZHBpX3NjYWxlcl9yYXRpb19kZXB0aF9zdCBzY2FsZV9yYXRpb19kZXB0aCA9Ci0JCQkJCQll MmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQkJCQlp amsgPSBrICogMiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGogKiBOdW1iZXJPZlN0YXRlc1Bs dXNUd28gKyBpOwotCi0JCQkJdi0+UHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwID0gZG1sX21heCgK LQkJCQkJCXYtPlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCwKLQkJCQkJCWRlc3QucGl4ZWxfcmF0 ZV9taHogLyAxNik7Ci0JCQkJaWYgKHYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9PSAwKSB7Ci0J CQkJCWlmIChzY2FsZV9yYXRpb19kZXB0aC52c2NsX3JhdGlvIDw9IDEpIHsKLQkJCQkJCXYtPlBy b2plY3RlZERDRkNMS0RlZXBTbGVlcCA9Ci0JCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJdi0+ UHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwLAotCQkJCQkJCQkJCTEuMQotCQkJCQkJCQkJCQkJKiBk bWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdLAotCQkJ CQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJLyA2NAotCQkJCQkJCQkJCQkJKiBzY2FsZV9yYXRp b19kZXB0aC5oc2NsX3JhdGlvCi0JCQkJCQkJCQkJCQkqIGRlc3QucGl4ZWxfcmF0ZV9taHoKLQkJ CQkJCQkJCQkJCS8gdi0+Tm9PZkRQUFtpamtdKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXYtPlBy b2plY3RlZERDRkNMS0RlZXBTbGVlcCA9Ci0JCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJdi0+ UHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwLAotCQkJCQkJCQkJCTEuMQotCQkJCQkJCQkJCQkJKiBk bWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdLAotCQkJ CQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJLyA2NAotCQkJCQkJCQkJCQkJKiB2LT5QU0NMX0ZB Q1RPUltrXQotCQkJCQkJCQkJCQkJKiB2LT5SZXF1aXJlZERJU1BDTEtbaWpdCi0JCQkJCQkJCQkJ CQkvICgxCi0JCQkJCQkJCQkJCQkJCSsgaikpOwotCQkJCQl9Ci0KLQkJCQl9IGVsc2UgewotCQkJ CQlpZiAoc2NhbGVfcmF0aW9fZGVwdGgudnNjbF9yYXRpbyA8PSAxKSB7Ci0JCQkJCQl2LT5Qcm9q ZWN0ZWREQ0ZDTEtEZWVwU2xlZXAgPQotCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCXYtPlBy b2plY3RlZERDRkNMS0RlZXBTbGVlcCwKLQkJCQkJCQkJCQkxLjEKLQkJCQkJCQkJCQkJCSogZG1s X2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXSwKLQkJCQkJ CQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJCS8gMzIKLQkJCQkJCQkJCQkJCSogc2NhbGVfcmF0aW9f ZGVwdGguaHNjbF9yYXRpbwotCQkJCQkJCQkJCQkJKiBkZXN0LnBpeGVsX3JhdGVfbWh6Ci0JCQkJ CQkJCQkJCQkvIHYtPk5vT2ZEUFBbaWprXSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQl2LT5Qcm9q ZWN0ZWREQ0ZDTEtEZWVwU2xlZXAgPQotCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCXYtPlBy b2plY3RlZERDRkNMS0RlZXBTbGVlcCwKLQkJCQkJCQkJCQkxLjEKLQkJCQkJCQkJCQkJCSogZG1s X2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXSwKLQkJCQkJ CQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJCS8gMzIKLQkJCQkJCQkJCQkJCSogdi0+UFNDTF9GQUNU T1Jba10KLQkJCQkJCQkJCQkJCSogdi0+UmVxdWlyZWRESVNQQ0xLW2lqXQotCQkJCQkJCQkJCQkJ LyAoMQotCQkJCQkJCQkJCQkJCQkrIGopKTsKLQkJCQkJfQotCQkJCQlpZiAoKHNjYWxlX3JhdGlv X2RlcHRoLnZzY2xfcmF0aW8gLyAyKSA8PSAxKSB7Ci0JCQkJCQl2LT5Qcm9qZWN0ZWREQ0ZDTEtE ZWVwU2xlZXAgPQotCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCXYtPlByb2plY3RlZERDRkNM S0RlZXBTbGVlcCwKLQkJCQkJCQkJCQkxLjEKLQkJCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0J CQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSwKLQkJCQkJCQkJCQkJCQkJMikK LQkJCQkJCQkJCQkJCS8gMzIKLQkJCQkJCQkJCQkJCSogc2NhbGVfcmF0aW9fZGVwdGguaHNjbF9y YXRpbwotCQkJCQkJCQkJCQkJLyAyCi0JCQkJCQkJCQkJCQkqIGRlc3QucGl4ZWxfcmF0ZV9taHoK LQkJCQkJCQkJCQkJCS8gdi0+Tm9PZkRQUFtpamtdKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXYt PlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCA9Ci0JCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJ di0+UHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwLAotCQkJCQkJCQkJCTEuMQotCQkJCQkJCQkJCQkJ KiBkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRDW2tdLAot CQkJCQkJCQkJCQkJCQkyKQotCQkJCQkJCQkJCQkJLyAzMgotCQkJCQkJCQkJCQkJKiB2LT5QU0NM X0ZBQ1RPUl9DSFJPTUFba10KLQkJCQkJCQkJCQkJCSogdi0+UmVxdWlyZWRESVNQQ0xLW2lqXQot CQkJCQkJCQkJCQkJLyAoMQotCQkJCQkJCQkJCQkJCQkrIGopKTsKLQkJCQkJfQotCi0JCQkJfQot CQkJfQotCi0JCQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCQkJc3RydWN0 IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9zb3VyY2VfcGFyYW1zX3N0IHNyYyA9Ci0JCQkJCQllMmVb di0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zcmM7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX2Rp c3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJCQkJCWUyZVt2LT5wbGFuZXNba10u ZTJlX2luZGV4XS5waXBlLmRlc3Q7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX3NjYWxlcl9yYXRpb19k ZXB0aF9zdCBzY2FsZV9yYXRpb19kZXB0aCA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9p bmRleF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQkJCQlzdHJ1Y3QgX3Zjc19kcGlfc2NhbGVy X3RhcHNfc3Qgc2NhbGVfdGFwcyA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0u cGlwZS5zY2FsZV90YXBzOwotCQkJCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X291dHB1dF9wYXJh bXNfc3QgZG91dCA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0uZG91dDsKLQkJ CQlpamsgPSBrICogMiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGogKiBOdW1iZXJPZlN0YXRl c1BsdXNUd28gKyBpOwotCi0JCQkJaWYgKHNyYy5kY2MgPT0gMSkgewotCQkJCQl2LT5NZXRhUmVx SGVpZ2h0WSA9IDggKiB2LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdOwotCQkJCQl2LT5NZXRhUmVx V2lkdGhZID0gNjQgKiAyNTYKLQkJCQkJCQkvIGRtbF9jZWlsX2V4KHYtPkJ5dGVQZXJQaXhlbElu REVUWVtrXSwgMSkKLQkJCQkJCQkvIHYtPk1ldGFSZXFIZWlnaHRZOwotCQkJCQl2LT5NZXRhU3Vy ZmFjZVdpZHRoWSA9IGRtbF9jZWlsX2V4KAotCQkJCQkJCXNyYy52aWV3cG9ydF93aWR0aCAvIHYt Pk5vT2ZEUFBbaWprXSAtIDEsCi0JCQkJCQkJdi0+TWV0YVJlcVdpZHRoWSkgKyB2LT5NZXRhUmVx V2lkdGhZOwotCQkJCQl2LT5NZXRhU3VyZmFjZUhlaWdodFkgPSBkbWxfY2VpbF9leCgKLQkJCQkJ CQlzcmMudmlld3BvcnRfaGVpZ2h0IC0gMSwKLQkJCQkJCQl2LT5NZXRhUmVxSGVpZ2h0WSkgKyB2 LT5NZXRhUmVxSGVpZ2h0WTsKLQkJCQkJaWYgKGlwLT5wdGVfZW5hYmxlID09IDEpIHsKLQkJCQkJ CXYtPk1ldGFQdGVCeXRlc1BlckZyYW1lWSA9Ci0JCQkJCQkJCShkbWxfY2VpbF9leCgKLQkJCQkJ CQkJCQkodi0+TWV0YVN1cmZhY2VXaWR0aFkKLQkJCQkJCQkJCQkJCSogdi0+TWV0YVN1cmZhY2VI ZWlnaHRZCi0JCQkJCQkJCQkJCQkqIGRtbF9jZWlsX2V4KAotCQkJCQkJCQkJCQkJCQl2LT5CeXRl UGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCQkvIDI1Ni4w Ci0JCQkJCQkJCQkJCQktIDQwOTYpCi0JCQkJCQkJCQkJCQkvIDgKLQkJCQkJCQkJCQkJCS8gNDA5 NiwKLQkJCQkJCQkJCQkxKSArIDEpICogNjQ7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQl2LT5NZXRh UHRlQnl0ZXNQZXJGcmFtZVkgPSAwOwotCQkJCQl9Ci0JCQkJCWlmIChzcmMuc291cmNlX3NjYW4g PT0gZG1faG9yeikgewotCQkJCQkJdi0+TWV0YVJvd0J5dGVzWSA9Ci0JCQkJCQkJCXYtPk1ldGFT dXJmYWNlV2lkdGhZCi0JCQkJCQkJCQkJKiB2LT5NZXRhUmVxSGVpZ2h0WQotCQkJCQkJCQkJCSog ZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJ CQkJCQkJCQkxKQotCQkJCQkJCQkJCS8gMjU2OwotCQkJCQl9IGVsc2UgewotCQkJCQkJdi0+TWV0 YVJvd0J5dGVzWSA9Ci0JCQkJCQkJCXYtPk1ldGFTdXJmYWNlSGVpZ2h0WQotCQkJCQkJCQkJCSog di0+TWV0YVJlcVdpZHRoWQotCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQl2 LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCS8gMjU2 OwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+TWV0YVB0ZUJ5dGVzUGVyRnJhbWVZID0g MDsKLQkJCQkJdi0+TWV0YVJvd0J5dGVzWSA9IDA7Ci0JCQkJfQotCi0JCQkJaWYgKGlwLT5wdGVf ZW5hYmxlID09IDEpIHsKLQkJCQkJaWYgKHNyYy5zd19tb2RlID09IGRtX3N3X2xpbmVhcikgewot CQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tTaXplQnl0ZXNZID0gMjU2OwotCQkJCQkJdi0+TWFjcm9U aWxlQmxvY2tIZWlnaHRZID0gMTsKLQkJCQkJfSBlbHNlIGlmIChzcmMuc3dfbW9kZSA9PSBkbV9z d180a2JfcwotCQkJCQkJCXx8IHNyYy5zd19tb2RlID09IGRtX3N3XzRrYl9zX3gKLQkJCQkJCQl8 fCBzcmMuc3dfbW9kZSA9PSBkbV9zd180a2JfZAotCQkJCQkJCXx8IHNyYy5zd19tb2RlID09IGRt X3N3XzRrYl9kX3gpIHsKLQkJCQkJCXYtPk1hY3JvVGlsZUJsb2NrU2l6ZUJ5dGVzWSA9IDQwOTY7 Ci0JCQkJCQl2LT5NYWNyb1RpbGVCbG9ja0hlaWdodFkgPSA0Ci0JCQkJCQkJCSogdi0+UmVhZDI1 NkJsb2NrSGVpZ2h0WVtrXTsKLQkJCQkJfSBlbHNlIGlmIChzcmMuc3dfbW9kZSA9PSBkbV9zd182 NGtiX3MKLQkJCQkJCQl8fCBzcmMuc3dfbW9kZSA9PSBkbV9zd182NGtiX3NfdAotCQkJCQkJCXx8 IHNyYy5zd19tb2RlID09IGRtX3N3XzY0a2Jfc194Ci0JCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0g ZG1fc3dfNjRrYl9kCi0JCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNjRrYl9kX3QKLQkJ CQkJCQl8fCBzcmMuc3dfbW9kZSA9PSBkbV9zd182NGtiX2RfeCkgewotCQkJCQkJdi0+TWFjcm9U aWxlQmxvY2tTaXplQnl0ZXNZID0gNjQgKiAxMDI0OwotCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tI ZWlnaHRZID0gMTYKLQkJCQkJCQkJKiB2LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdOwotCQkJCQl9 IGVsc2UgewotCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tTaXplQnl0ZXNZID0gMjU2ICogMTAyNDsK LQkJCQkJCXYtPk1hY3JvVGlsZUJsb2NrSGVpZ2h0WSA9IDMyCi0JCQkJCQkJCSogdi0+UmVhZDI1 NkJsb2NrSGVpZ2h0WVtrXTsKLQkJCQkJfQotCQkJCQlpZiAodi0+TWFjcm9UaWxlQmxvY2tTaXpl Qnl0ZXNZIDw9IDY1NTM2KSB7Ci0JCQkJCQl2LT5EYXRhUFRFUmVxSGVpZ2h0WSA9IHYtPk1hY3Jv VGlsZUJsb2NrSGVpZ2h0WTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXYtPkRhdGFQVEVSZXFIZWln aHRZID0gMTYKLQkJCQkJCQkJKiB2LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdOwotCQkJCQl9Ci0J CQkJCXYtPkRhdGFQVEVSZXFXaWR0aFkgPSA0MDk2Ci0JCQkJCQkJLyBkbWxfY2VpbF9leCh2LT5C eXRlUGVyUGl4ZWxJbkRFVFlba10sIDEpCi0JCQkJCQkJLyB2LT5EYXRhUFRFUmVxSGVpZ2h0WSAq IDg7Ci0JCQkJCWlmIChzcmMuc3dfbW9kZSA9PSBkbV9zd19saW5lYXIpIHsKLQkJCQkJCXYtPkRQ VEVCeXRlc1BlclJvd1kgPQotCQkJCQkJCQk2NAotCQkJCQkJCQkJCSogKGRtbF9jZWlsX2V4KAot CQkJCQkJCQkJCQkJKHNyYy52aWV3cG9ydF93aWR0aAotCQkJCQkJCQkJCQkJCQkvIHYtPk5vT2ZE UFBbaWprXQotCQkJCQkJCQkJCQkJCQkqIGRtbF9taW4oCi0JCQkJCQkJCQkJCQkJCQkJMTI4LAot CQkJCQkJCQkJCQkJCQkJCWRtbF9wb3coCi0JCQkJCQkJCQkJCQkJCQkJCQkyLAotCQkJCQkJCQkJ CQkJCQkJCQkJZG1sX2Zsb29yX2V4KAotCQkJCQkJCQkJCQkJCQkJCQkJCQlkbWxfbG9nKAotCQkJ CQkJCQkJCQkJCQkJCQkJCQkJCWlwLT5kcHRlX2J1ZmZlcl9zaXplX2luX3B0ZV9yZXFzCi0JCQkJ CQkJCQkJCQkJCQkJCQkJCQkJCQkqIHYtPkRhdGFQVEVSZXFXaWR0aFkKLQkJCQkJCQkJCQkJCQkJ CQkJCQkJCQkJCS8gKHNyYy52aWV3cG9ydF93aWR0aAotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJ CQkvIHYtPk5vT2ZEUFBbaWprXSksCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJMiksCi0JCQkJCQkJ CQkJCQkJCQkJCQkJCTEpKSkKLQkJCQkJCQkJCQkJCQkJLSAxKQotCQkJCQkJCQkJCQkJCQkvIHYt PkRhdGFQVEVSZXFXaWR0aFksCi0JCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJKyAxKTsKLQkJ CQkJfSBlbHNlIGlmIChzcmMuc291cmNlX3NjYW4gPT0gZG1faG9yeikgewotCQkJCQkJdi0+RFBU RUJ5dGVzUGVyUm93WSA9Ci0JCQkJCQkJCTY0Ci0JCQkJCQkJCQkJKiAoZG1sX2NlaWxfZXgoCi0J CQkJCQkJCQkJCQkoc3JjLnZpZXdwb3J0X3dpZHRoCi0JCQkJCQkJCQkJCQkJCS8gdi0+Tm9PZkRQ UFtpamtdCi0JCQkJCQkJCQkJCQkJCS0gMSkKLQkJCQkJCQkJCQkJCQkJLyB2LT5EYXRhUFRFUmVx V2lkdGhZLAotCQkJCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJCSsgMSk7Ci0JCQkJCX0gZWxzZSB7 Ci0JCQkJCQl2LT5EUFRFQnl0ZXNQZXJSb3dZID0KLQkJCQkJCQkJNjQKLQkJCQkJCQkJCQkqIChk bWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCShzcmMudmlld3BvcnRfaGVpZ2h0Ci0JCQkJCQkJCQkJ CQkJCS0gMSkKLQkJCQkJCQkJCQkJCQkJLyB2LT5EYXRhUFRFUmVxSGVpZ2h0WSwKLQkJCQkJCQkJ CQkJCTEpCi0JCQkJCQkJCQkJCQkrIDEpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+ RFBURUJ5dGVzUGVyUm93WSA9IDA7Ci0JCQkJfQotCi0JCQkJaWYgKHNyYy5zb3VyY2VfZm9ybWF0 ICE9IGRtXzQ0NF82NCAmJiBzcmMuc291cmNlX2Zvcm1hdCAhPSBkbV80NDRfMzIKLQkJCQkJCSYm IHNyYy5zb3VyY2VfZm9ybWF0ICE9IGRtXzQ0NF8xNikgewotCQkJCQlpZiAoc3JjLmRjYyA9PSAx KSB7Ci0JCQkJCQl2LT5NZXRhUmVxSGVpZ2h0QyA9IDggKiB2LT5SZWFkMjU2QmxvY2tIZWlnaHRD W2tdOwotCQkJCQkJdi0+TWV0YVJlcVdpZHRoQyA9Ci0JCQkJCQkJCTY0ICogMjU2Ci0JCQkJCQkJ CQkJLyBkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSwK LQkJCQkJCQkJCQkJCTIpCi0JCQkJCQkJCQkJLyB2LT5NZXRhUmVxSGVpZ2h0QzsKLQkJCQkJCXYt Pk1ldGFTdXJmYWNlV2lkdGhDID0gZG1sX2NlaWxfZXgoCi0JCQkJCQkJCXNyYy52aWV3cG9ydF93 aWR0aCAvIHYtPk5vT2ZEUFBbaWprXQotCQkJCQkJCQkJCS8gMiAtIDEsCi0JCQkJCQkJCXYtPk1l dGFSZXFXaWR0aEMpCi0JCQkJCQkJCSsgdi0+TWV0YVJlcVdpZHRoQzsKLQkJCQkJCXYtPk1ldGFT dXJmYWNlSGVpZ2h0QyA9IGRtbF9jZWlsX2V4KAotCQkJCQkJCQlzcmMudmlld3BvcnRfaGVpZ2h0 IC8gMiAtIDEsCi0JCQkJCQkJCXYtPk1ldGFSZXFIZWlnaHRDKQotCQkJCQkJCQkrIHYtPk1ldGFS ZXFIZWlnaHRDOwotCQkJCQkJaWYgKGlwLT5wdGVfZW5hYmxlID09IDEpIHsKLQkJCQkJCQl2LT5N ZXRhUHRlQnl0ZXNQZXJGcmFtZUMgPQotCQkJCQkJCQkJKGRtbF9jZWlsX2V4KAotCQkJCQkJCQkJ CQkodi0+TWV0YVN1cmZhY2VXaWR0aEMKLQkJCQkJCQkJCQkJCQkqIHYtPk1ldGFTdXJmYWNlSGVp Z2h0QwotCQkJCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJCQl2LT5CeXRl UGVyUGl4ZWxJbkRFVENba10sCi0JCQkJCQkJCQkJCQkJCQkyKQotCQkJCQkJCQkJCQkJCS8gMjU2 LjAKLQkJCQkJCQkJCQkJCQktIDQwOTYpCi0JCQkJCQkJCQkJCQkJLyA4Ci0JCQkJCQkJCQkJCQkJ LyA0MDk2LAotCQkJCQkJCQkJCQkxKSArIDEpCi0JCQkJCQkJCQkJCSogNjQ7Ci0JCQkJCQl9IGVs c2UgewotCQkJCQkJCXYtPk1ldGFQdGVCeXRlc1BlckZyYW1lQyA9IDA7Ci0JCQkJCQl9Ci0JCQkJ CQlpZiAoc3JjLnNvdXJjZV9zY2FuID09IGRtX2hvcnopIHsKLQkJCQkJCQl2LT5NZXRhUm93Qnl0 ZXNDID0KLQkJCQkJCQkJCXYtPk1ldGFTdXJmYWNlV2lkdGhDCi0JCQkJCQkJCQkJCSogdi0+TWV0 YVJlcUhlaWdodEMKLQkJCQkJCQkJCQkJKiBkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQl2LT5C eXRlUGVyUGl4ZWxJbkRFVENba10sCi0JCQkJCQkJCQkJCQkJMikKLQkJCQkJCQkJCQkJLyAyNTY7 Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCXYtPk1ldGFSb3dCeXRlc0MgPQotCQkJCQkJCQkJdi0+ TWV0YVN1cmZhY2VIZWlnaHRDCi0JCQkJCQkJCQkJCSogdi0+TWV0YVJlcVdpZHRoQwotCQkJCQkJ CQkJCQkqIGRtbF9jZWlsX2V4KAotCQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1tr XSwKLQkJCQkJCQkJCQkJCQkyKQotCQkJCQkJCQkJCQkvIDI1NjsKLQkJCQkJCX0KLQkJCQkJfSBl bHNlIHsKLQkJCQkJCXYtPk1ldGFQdGVCeXRlc1BlckZyYW1lQyA9IDA7Ci0JCQkJCQl2LT5NZXRh Um93Qnl0ZXNDID0gMDsKLQkJCQkJfQotCi0JCQkJCWlmIChpcC0+cHRlX2VuYWJsZSA9PSAxKSB7 Ci0JCQkJCQlpZiAoc3JjLnN3X21vZGUgPT0gZG1fc3dfbGluZWFyKSB7Ci0JCQkJCQkJdi0+TWFj cm9UaWxlQmxvY2tTaXplQnl0ZXNDID0gMjU2OwotCQkJCQkJCXYtPk1hY3JvVGlsZUJsb2NrSGVp Z2h0QyA9IDE7Ci0JCQkJCQl9IGVsc2UgaWYgKHNyYy5zd19tb2RlID09IGRtX3N3XzRrYl9zCi0J CQkJCQkJCXx8IHNyYy5zd19tb2RlID09IGRtX3N3XzRrYl9zX3gKLQkJCQkJCQkJfHwgc3JjLnN3 X21vZGUgPT0gZG1fc3dfNGtiX2QKLQkJCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNGti X2RfeCkgewotCQkJCQkJCXYtPk1hY3JvVGlsZUJsb2NrU2l6ZUJ5dGVzQyA9IDQwOTY7Ci0JCQkJ CQkJdi0+TWFjcm9UaWxlQmxvY2tIZWlnaHRDID0gNAotCQkJCQkJCQkJKiB2LT5SZWFkMjU2Qmxv Y2tIZWlnaHRDW2tdOwotCQkJCQkJfSBlbHNlIGlmIChzcmMuc3dfbW9kZSA9PSBkbV9zd182NGti X3MKLQkJCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNjRrYl9zX3QKLQkJCQkJCQkJfHwg c3JjLnN3X21vZGUgPT0gZG1fc3dfNjRrYl9zX3gKLQkJCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0g ZG1fc3dfNjRrYl9kCi0JCQkJCQkJCXx8IHNyYy5zd19tb2RlID09IGRtX3N3XzY0a2JfZF90Ci0J CQkJCQkJCXx8IHNyYy5zd19tb2RlID09IGRtX3N3XzY0a2JfZF94KSB7Ci0JCQkJCQkJdi0+TWFj cm9UaWxlQmxvY2tTaXplQnl0ZXNDID0gNjQgKiAxMDI0OwotCQkJCQkJCXYtPk1hY3JvVGlsZUJs b2NrSGVpZ2h0QyA9IDE2Ci0JCQkJCQkJCQkqIHYtPlJlYWQyNTZCbG9ja0hlaWdodENba107Ci0J CQkJCQl9IGVsc2UgewotCQkJCQkJCXYtPk1hY3JvVGlsZUJsb2NrU2l6ZUJ5dGVzQyA9IDI1NiAq IDEwMjQ7Ci0JCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tIZWlnaHRDID0gMzIKLQkJCQkJCQkJCSog di0+UmVhZDI1NkJsb2NrSGVpZ2h0Q1trXTsKLQkJCQkJCX0KLQkJCQkJCXYtPk1hY3JvVGlsZUJs b2NrV2lkdGhDID0KLQkJCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tTaXplQnl0ZXNDCi0JCQkJCQkJ CQkJLyBkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSwK LQkJCQkJCQkJCQkJCTIpCi0JCQkJCQkJCQkJLyB2LT5NYWNyb1RpbGVCbG9ja0hlaWdodEM7Ci0J CQkJCQlpZiAodi0+TWFjcm9UaWxlQmxvY2tTaXplQnl0ZXNDIDw9IDY1NTM2KSB7Ci0JCQkJCQkJ di0+RGF0YVBURVJlcUhlaWdodEMgPQotCQkJCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tIZWlnaHRD OwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQl2LT5EYXRhUFRFUmVxSGVpZ2h0QyA9IDE2Ci0JCQkJ CQkJCQkqIHYtPlJlYWQyNTZCbG9ja0hlaWdodENba107Ci0JCQkJCQl9Ci0JCQkJCQl2LT5EYXRh UFRFUmVxV2lkdGhDID0KLQkJCQkJCQkJNDA5NgotCQkJCQkJCQkJCS8gZG1sX2NlaWxfZXgoCi0J CQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVENba10sCi0JCQkJCQkJCQkJCQkyKQotCQkJ CQkJCQkJCS8gdi0+RGF0YVBURVJlcUhlaWdodEMKLQkJCQkJCQkJCQkqIDg7Ci0JCQkJCQlpZiAo c3JjLnN3X21vZGUgPT0gZG1fc3dfbGluZWFyKSB7Ci0JCQkJCQkJdi0+RFBURUJ5dGVzUGVyUm93 QyA9Ci0JCQkJCQkJCQk2NAotCQkJCQkJCQkJCQkqIChkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJ CQkoc3JjLnZpZXdwb3J0X3dpZHRoCi0JCQkJCQkJCQkJCQkJCQkvIHYtPk5vT2ZEUFBbaWprXQot CQkJCQkJCQkJCQkJCQkJLyAyCi0JCQkJCQkJCQkJCQkJCQkqIGRtbF9taW4oCi0JCQkJCQkJCQkJ CQkJCQkJCTEyOCwKLQkJCQkJCQkJCQkJCQkJCQkJZG1sX3BvdygKLQkJCQkJCQkJCQkJCQkJCQkJ CQkyLAotCQkJCQkJCQkJCQkJCQkJCQkJCWRtbF9mbG9vcl9leCgKLQkJCQkJCQkJCQkJCQkJCQkJ CQkJCWRtbF9sb2coCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWlwLT5kcHRlX2J1ZmZlcl9zaXpl X2luX3B0ZV9yZXFzCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJKiB2LT5EYXRhUFRFUmVxV2lk dGhDCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLyAoc3JjLnZpZXdwb3J0X3dpZHRoCi0JCQkJ CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvIHYtPk5vT2ZEUFBbaWprXQotCQkJCQkJCQkJCQkJCQkJ CQkJCQkJCQkJCQkJLyAyKSwKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJMiksCi0JCQkJCQkJCQkJ CQkJCQkJCQkJCQkxKSkpCi0JCQkJCQkJCQkJCQkJCQktIDEpCi0JCQkJCQkJCQkJCQkJCQkvIHYt PkRhdGFQVEVSZXFXaWR0aEMsCi0JCQkJCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJCQkrIDEpOwot CQkJCQkJfSBlbHNlIGlmIChzcmMuc291cmNlX3NjYW4gPT0gZG1faG9yeikgewotCQkJCQkJCXYt PkRQVEVCeXRlc1BlclJvd0MgPQotCQkJCQkJCQkJNjQKLQkJCQkJCQkJCQkJKiAoZG1sX2NlaWxf ZXgoCi0JCQkJCQkJCQkJCQkJKHNyYy52aWV3cG9ydF93aWR0aAotCQkJCQkJCQkJCQkJCQkJLyB2 LT5Ob09mRFBQW2lqa10KLQkJCQkJCQkJCQkJCQkJCS8gMgotCQkJCQkJCQkJCQkJCQkJLSAxKQot CQkJCQkJCQkJCQkJCQkJLyB2LT5EYXRhUFRFUmVxV2lkdGhDLAotCQkJCQkJCQkJCQkJCTEpCi0J CQkJCQkJCQkJCQkJKyAxKTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJdi0+RFBURUJ5dGVzUGVy Um93QyA9Ci0JCQkJCQkJCQk2NAotCQkJCQkJCQkJCQkqIChkbWxfY2VpbF9leCgKLQkJCQkJCQkJ CQkJCQkoc3JjLnZpZXdwb3J0X2hlaWdodAotCQkJCQkJCQkJCQkJCQkJLyAyCi0JCQkJCQkJCQkJ CQkJCQktIDEpCi0JCQkJCQkJCQkJCQkJCQkvIHYtPkRhdGFQVEVSZXFIZWlnaHRDLAotCQkJCQkJ CQkJCQkJCTEpCi0JCQkJCQkJCQkJCQkJKyAxKTsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJ CQkJCXYtPkRQVEVCeXRlc1BlclJvd0MgPSAwOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJ di0+RFBURUJ5dGVzUGVyUm93QyA9IDA7Ci0JCQkJCXYtPk1ldGFQdGVCeXRlc1BlckZyYW1lQyA9 IDA7Ci0JCQkJCXYtPk1ldGFSb3dCeXRlc0MgPSAwOwotCQkJCX0KLQotCQkJCXYtPkRQVEVCeXRl c1BlclJvd1trXSA9IHYtPkRQVEVCeXRlc1BlclJvd1kgKyB2LT5EUFRFQnl0ZXNQZXJSb3dDOwot CQkJCXYtPk1ldGFQVEVCeXRlc1BlckZyYW1lW2tdID0gdi0+TWV0YVB0ZUJ5dGVzUGVyRnJhbWVZ Ci0JCQkJCQkrIHYtPk1ldGFQdGVCeXRlc1BlckZyYW1lQzsKLQkJCQl2LT5NZXRhUm93Qnl0ZXNb a10gPSB2LT5NZXRhUm93Qnl0ZXNZICsgdi0+TWV0YVJvd0J5dGVzQzsKLQotCQkJCXYtPlZJbml0 WSA9IChzY2FsZV9yYXRpb19kZXB0aC52c2NsX3JhdGlvICsgc2NhbGVfdGFwcy52dGFwcyArIDEK LQkJCQkJCSsgZGVzdC5pbnRlcmxhY2VkICogMC41Ci0JCQkJCQkJCSogc2NhbGVfcmF0aW9fZGVw dGgudnNjbF9yYXRpbykKLQkJCQkJCS8gMi4wOwotCQkJCXYtPlByZWZpbGxZW2tdID0gZG1sX2Zs b29yX2V4KHYtPlZJbml0WSwgMSk7Ci0JCQkJdi0+TWF4TnVtU3dZW2tdID0gZG1sX2NlaWxfZXgo Ci0JCQkJCQkodi0+UHJlZmlsbFlba10gLSAxLjApCi0JCQkJCQkJCS8gdi0+U3dhdGhIZWlnaHRZ UGVyU3RhdGVbaWprXSwKLQkJCQkJCTEpICsgMS4wOwotCi0JCQkJaWYgKHYtPlByZWZpbGxZW2td ID4gMSkgewotCQkJCQl2LT5NYXhQYXJ0aWFsU3dZID0gKChpbnQpICh2LT5QcmVmaWxsWVtrXSAt IDIpKQotCQkJCQkJCSUgKChpbnQpIHYtPlN3YXRoSGVpZ2h0WVBlclN0YXRlW2lqa10pOwotCQkJ CX0gZWxzZSB7Ci0JCQkJCXYtPk1heFBhcnRpYWxTd1kgPSAoKGludCkgKHYtPlByZWZpbGxZW2td Ci0JCQkJCQkJKyB2LT5Td2F0aEhlaWdodFlQZXJTdGF0ZVtpamtdIC0gMikpCi0JCQkJCQkJJSAo KGludCkgdi0+U3dhdGhIZWlnaHRZUGVyU3RhdGVbaWprXSk7Ci0JCQkJfQotCQkJCXYtPk1heFBh cnRpYWxTd1kgPSBkbWxfbWF4KDEsIHYtPk1heFBhcnRpYWxTd1kpOwotCi0JCQkJdi0+UHJlZmV0 Y2hMaW5lc1lba10gPSB2LT5NYXhOdW1Td1lba10KLQkJCQkJCSogdi0+U3dhdGhIZWlnaHRZUGVy U3RhdGVbaWprXSArIHYtPk1heFBhcnRpYWxTd1k7Ci0KLQkJCQlpZiAoc3JjLnNvdXJjZV9mb3Jt YXQgIT0gZG1fNDQ0XzY0ICYmIHNyYy5zb3VyY2VfZm9ybWF0ICE9IGRtXzQ0NF8zMgotCQkJCQkJ JiYgc3JjLnNvdXJjZV9mb3JtYXQgIT0gZG1fNDQ0XzE2KSB7Ci0JCQkJCXYtPlZJbml0QyA9Ci0J CQkJCQkJKHNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8gLyAyCi0JCQkJCQkJCQkrIHNjYWxl X3RhcHMudnRhcHMgKyAxCi0JCQkJCQkJCQkrIGRlc3QuaW50ZXJsYWNlZCAqIDAuNQotCQkJCQkJ CQkJCQkqIHNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJCQkJLyAyKSAvIDIu MDsKLQkJCQkJdi0+UHJlZmlsbENba10gPSBkbWxfZmxvb3JfZXgodi0+VkluaXRDLCAxKTsKLQkJ CQkJdi0+TWF4TnVtU3dDW2tdID0KLQkJCQkJCQlkbWxfY2VpbF9leCgKLQkJCQkJCQkJCSh2LT5Q cmVmaWxsQ1trXSAtIDEuMCkKLQkJCQkJCQkJCQkJLyB2LT5Td2F0aEhlaWdodENQZXJTdGF0ZVtp amtdLAotCQkJCQkJCQkJMSkgKyAxLjA7Ci0JCQkJCWlmICh2LT5QcmVmaWxsQ1trXSA+IDEpIHsK LQkJCQkJCXYtPk1heFBhcnRpYWxTd0MgPQotCQkJCQkJCQkoKGludCkgKHYtPlByZWZpbGxDW2td IC0gMikpCi0JCQkJCQkJCQkJJSAoKGludCkgdi0+U3dhdGhIZWlnaHRDUGVyU3RhdGVbaWprXSk7 Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQl2LT5NYXhQYXJ0aWFsU3dDID0KLQkJCQkJCQkJKChpbnQp ICh2LT5QcmVmaWxsQ1trXQotCQkJCQkJCQkJCSsgdi0+U3dhdGhIZWlnaHRDUGVyU3RhdGVbaWpr XQotCQkJCQkJCQkJCS0gMikpCi0JCQkJCQkJCQkJJSAoKGludCkgdi0+U3dhdGhIZWlnaHRDUGVy U3RhdGVbaWprXSk7Ci0JCQkJCX0KLQkJCQkJdi0+TWF4UGFydGlhbFN3QyA9IGRtbF9tYXgoMSwg di0+TWF4UGFydGlhbFN3Qyk7Ci0KLQkJCQkJdi0+UHJlZmV0Y2hMaW5lc0Nba10gPSB2LT5NYXhO dW1Td0Nba10KLQkJCQkJCQkqIHYtPlN3YXRoSGVpZ2h0Q1BlclN0YXRlW2lqa10KLQkJCQkJCQkr IHYtPk1heFBhcnRpYWxTd0M7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+UHJlZmV0Y2hMaW5lc0Nb a10gPSAwOwotCQkJCX0KLQotCQkJCXYtPmRzdF94X2FmdGVyX3NjYWxlciA9IDkwICogZGVzdC5w aXhlbF9yYXRlX21oegotCQkJCQkJLyAodi0+UmVxdWlyZWRESVNQQ0xLW2lqXSAvIChqICsgMSkp Ci0JCQkJCQkrIDQyICogZGVzdC5waXhlbF9yYXRlX21oeiAvIHYtPlJlcXVpcmVkRElTUENMS1tp al07Ci0JCQkJaWYgKHYtPk5vT2ZEUFBbaWprXSA+IDEpIHsKLQkJCQkJdi0+ZHN0X3hfYWZ0ZXJf c2NhbGVyID0gdi0+ZHN0X3hfYWZ0ZXJfc2NhbGVyCi0JCQkJCQkJKyBkZXN0LnJlY291dF93aWR0 aCAvIDIuMDsKLQkJCQl9Ci0KLQkJCQlpZiAoZG91dC5vdXRwdXRfZm9ybWF0ID09IGRtXzQyMCkg ewotCQkJCQl2LT5kc3RfeV9hZnRlcl9zY2FsZXIgPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXYt PmRzdF95X2FmdGVyX3NjYWxlciA9IDA7Ci0JCQkJfQotCi0JCQkJdi0+VGltZUNhbGMgPSAyNCAv IHYtPlByb2plY3RlZERDRkNMS0RlZXBTbGVlcDsKLQotCQkJCXYtPlZVcGRhdGVPZmZzZXQgPSBk bWxfY2VpbF9leChkZXN0Lmh0b3RhbCAvIDQsIDEpOwotCQkJCXYtPlRvdGFsUmVwZWF0ZXJEZWxh eSA9IGlwLT5tYXhfaW50ZXJfZGNuX3RpbGVfcmVwZWF0ZXJzCi0JCQkJCQkqICgyIC8gKHYtPlJl cXVpcmVkRElTUENMS1tpal0gLyAoaiArIDEpKQotCQkJCQkJCQkrIDMgLyB2LT5SZXF1aXJlZERJ U1BDTEtbaWpdKTsKLQkJCQl2LT5WVXBkYXRlV2lkdGggPSAoMTQgLyB2LT5Qcm9qZWN0ZWREQ0ZD TEtEZWVwU2xlZXAKLQkJCQkJCSsgMTIgLyAodi0+UmVxdWlyZWRESVNQQ0xLW2lqXSAvIChqICsg MSkpCi0JCQkJCQkrIHYtPlRvdGFsUmVwZWF0ZXJEZWxheSkgKiBkZXN0LnBpeGVsX3JhdGVfbWh6 OwotCQkJCXYtPlZSZWFkeU9mZnNldCA9Ci0JCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkxNTAKLQkJ CQkJCQkJCQkvICh2LT5SZXF1aXJlZERJU1BDTEtbaWpdCi0JCQkJCQkJCQkJCQkvIChqCi0JCQkJ CQkJCQkJCQkJCSsgMSkpLAotCQkJCQkJCQl2LT5Ub3RhbFJlcGVhdGVyRGVsYXkKLQkJCQkJCQkJ CQkrIDIwCi0JCQkJCQkJCQkJCQkvIHYtPlByb2plY3RlZERDRkNMS0RlZXBTbGVlcAotCQkJCQkJ CQkJCSsgMTAKLQkJCQkJCQkJCQkJCS8gKHYtPlJlcXVpcmVkRElTUENMS1tpal0KLQkJCQkJCQkJ CQkJCQkJLyAoagotCQkJCQkJCQkJCQkJCQkJCSsgMSkpKQotCQkJCQkJCQkqIGRlc3QucGl4ZWxf cmF0ZV9taHo7Ci0KLQkJCQl2LT5UaW1lU2V0dXAgPQotCQkJCQkJKHYtPlZVcGRhdGVPZmZzZXQg KyB2LT5WVXBkYXRlV2lkdGgKLQkJCQkJCQkJKyB2LT5WUmVhZHlPZmZzZXQpCi0JCQkJCQkJCS8g ZGVzdC5waXhlbF9yYXRlX21oejsKLQotCQkJCXYtPkV4dHJhTGF0ZW5jeSA9Ci0JCQkJCQl2LT5V cmdlbnRSb3VuZFRyaXBBbmRPdXRPZk9yZGVyTGF0ZW5jeVBlclN0YXRlW2ldCi0JCQkJCQkJCSsg KHYtPlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbaWpdCi0JCQkJCQkJCQkJKiBpcC0+cGl4ZWxfY2h1 bmtfc2l6ZV9rYnl0ZXMKLQkJCQkJCQkJCQkrIHYtPlRvdGFsTnVtYmVyT2ZEQ0NBY3RpdmVEUFBb aWpdCi0JCQkJCQkJCQkJCQkqIGlwLT5tZXRhX2NodW5rX3NpemVfa2J5dGVzKQotCQkJCQkJCQkJ CSogMTAyNAotCQkJCQkJCQkJCS8gdi0+UmV0dXJuQldQZXJTdGF0ZVtpXTsKLQotCQkJCWlmIChp cC0+cHRlX2VuYWJsZSA9PSAxKSB7Ci0JCQkJCXYtPkV4dHJhTGF0ZW5jeSA9IHYtPkV4dHJhTGF0 ZW5jeQotCQkJCQkJCSsgdi0+VG90YWxOdW1iZXJPZkFjdGl2ZURQUFtpal0KLQkJCQkJCQkJCSog aXAtPnB0ZV9jaHVua19zaXplX2tieXRlcwotCQkJCQkJCQkJKiAxMDI0Ci0JCQkJCQkJCQkvIHYt PlJldHVybkJXUGVyU3RhdGVbaV07Ci0JCQkJfQotCi0JCQkJaWYgKGlwLT5jYW5fdnN0YXJ0dXBf bGluZXNfZXhjZWVkX3ZzeW5jX3BsdXNfYmFja19wb3JjaF9saW5lc19taW51c19vbmUKLQkJCQkJ CT09IDEpIHsKLQkJCQkJdi0+TWF4aW11bVZTdGFydHVwID0gZGVzdC52dG90YWwgLSBkZXN0LnZh Y3RpdmUgLSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXYtPk1heGltdW1WU3RhcnR1cCA9IGRlc3Qu dnN5bmNfcGx1c19iYWNrX3BvcmNoIC0gMTsKLQkJCQl9Ci0KLQkJCQl2LT5MaW5lVGltZXNGb3JQ cmVmZXRjaFtrXSA9Ci0JCQkJCQl2LT5NYXhpbXVtVlN0YXJ0dXAKLQkJCQkJCQkJLSBzb2MtPnVy Z2VudF9sYXRlbmN5X3VzCi0JCQkJCQkJCQkJLyAoZGVzdC5odG90YWwKLQkJCQkJCQkJCQkJCS8g ZGVzdC5waXhlbF9yYXRlX21oeikKLQkJCQkJCQkJLSAodi0+VGltZUNhbGMgKyB2LT5UaW1lU2V0 dXApCi0JCQkJCQkJCQkJLyAoZGVzdC5odG90YWwKLQkJCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9y YXRlX21oeikKLQkJCQkJCQkJLSAodi0+ZHN0X3lfYWZ0ZXJfc2NhbGVyCi0JCQkJCQkJCQkJKyB2 LT5kc3RfeF9hZnRlcl9zY2FsZXIKLQkJCQkJCQkJCQkJCS8gZGVzdC5odG90YWwpOwotCi0JCQkJ di0+TGluZVRpbWVzRm9yUHJlZmV0Y2hba10gPSBkbWxfZmxvb3JfZXgoCi0JCQkJCQk0LjAgKiAo di0+TGluZVRpbWVzRm9yUHJlZmV0Y2hba10gKyAwLjEyNSksCi0JCQkJCQkxKSAvIDQ7Ci0KLQkJ CQl2LT5QcmVmZXRjaEJXW2tdID0KLQkJCQkJCSh2LT5NZXRhUFRFQnl0ZXNQZXJGcmFtZVtrXSAr IDIgKiB2LT5NZXRhUm93Qnl0ZXNba10KLQkJCQkJCQkJKyAyICogdi0+RFBURUJ5dGVzUGVyUm93 W2tdCi0JCQkJCQkJCSsgdi0+UHJlZmV0Y2hMaW5lc1lba10KLQkJCQkJCQkJCQkqIHYtPlN3YXRo V2lkdGhZUGVyU3RhdGVbaWprXQotCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJ CQl2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkrIHYt PlByZWZldGNoTGluZXNDW2tdCi0JCQkJCQkJCQkJKiB2LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lq a10KLQkJCQkJCQkJCQkvIDIKLQkJCQkJCQkJCQkqIGRtbF9jZWlsX2V4KAotCQkJCQkJCQkJCQkJ di0+Qnl0ZVBlclBpeGVsSW5ERVRDW2tdLAotCQkJCQkJCQkJCQkJMikpCi0JCQkJCQkJCS8gKHYt PkxpbmVUaW1lc0ZvclByZWZldGNoW2tdCi0JCQkJCQkJCQkJKiBkZXN0Lmh0b3RhbAotCQkJCQkJ CQkJCS8gZGVzdC5waXhlbF9yYXRlX21oeik7Ci0JCQl9Ci0KLQkJCXYtPkJXQXZhaWxhYmxlRm9y SW1tZWRpYXRlRmxpcCA9IHYtPlJldHVybkJXUGVyU3RhdGVbaV07Ci0KLQkJCWZvciAoayA9IDA7 IGsgPCBudW1fcGxhbmVzOyBrKyspIHsKLQkJCQl2LT5CV0F2YWlsYWJsZUZvckltbWVkaWF0ZUZs aXAgPSB2LT5CV0F2YWlsYWJsZUZvckltbWVkaWF0ZUZsaXAKLQkJCQkJCS0gZG1sX21heCh2LT5S ZWFkQmFuZHdpZHRoW2tdLCB2LT5QcmVmZXRjaEJXW2tdKTsKLQkJCX0KLQotCQkJdi0+VG90YWxJ bW1lZGlhdGVGbGlwQnl0ZXMgPSAwOwotCi0JCQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsg aysrKSB7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9zb3VyY2VfcGFyYW1zX3N0 IHNyYyA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zcmM7Ci0KLQkJ CQlpZiAoc3JjLnNvdXJjZV9mb3JtYXQgIT0gZG1fNDIwXzgKLQkJCQkJCSYmIHNyYy5zb3VyY2Vf Zm9ybWF0ICE9IGRtXzQyMF8xMCkgewotCQkJCQl2LT5Ub3RhbEltbWVkaWF0ZUZsaXBCeXRlcyA9 IHYtPlRvdGFsSW1tZWRpYXRlRmxpcEJ5dGVzCi0JCQkJCQkJKyB2LT5NZXRhUFRFQnl0ZXNQZXJG cmFtZVtrXQotCQkJCQkJCSsgdi0+TWV0YVJvd0J5dGVzW2tdCi0JCQkJCQkJKyB2LT5EUFRFQnl0 ZXNQZXJSb3dba107Ci0JCQkJfQotCQkJfQotCi0JCQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5l czsgaysrKSB7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9zb3VyY2VfcGFyYW1z X3N0IHNyYyA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zcmM7Ci0J CQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJ CQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLmRlc3Q7Ci0JCQkJaWprID0gayAq IDIgKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsg aTsKLQotCQkJCWlmIChpcC0+cHRlX2VuYWJsZSA9PSAxICYmIHNyYy5kY2MgPT0gMSkgewotCQkJ CQl2LT5UaW1lRm9yTWV0YVBURVdpdGhJbW1lZGlhdGVGbGlwID0KLQkJCQkJCQlkbWxfbWF4KAot CQkJCQkJCQkJdi0+TWV0YVBURUJ5dGVzUGVyRnJhbWVba10KLQkJCQkJCQkJCQkJLyB2LT5QcmVm ZXRjaEJXW2tdLAotCQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQkJdi0+TWV0YVBURUJ5dGVz UGVyRnJhbWVba10KLQkJCQkJCQkJCQkJCQkqIHYtPlRvdGFsSW1tZWRpYXRlRmxpcEJ5dGVzCi0J CQkJCQkJCQkJCQkJLyAodi0+QldBdmFpbGFibGVGb3JJbW1lZGlhdGVGbGlwCi0JCQkJCQkJCQkJ CQkJCQkqICh2LT5NZXRhUFRFQnl0ZXNQZXJGcmFtZVtrXQotCQkJCQkJCQkJCQkJCQkJCQkrIHYt Pk1ldGFSb3dCeXRlc1trXQotCQkJCQkJCQkJCQkJCQkJCQkrIHYtPkRQVEVCeXRlc1BlclJvd1tr XSkpLAotCQkJCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCQkJCXYtPkV4dHJhTGF0ZW5jeSwK LQkJCQkJCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCQkJCQkJc29jLT51cmdlbnRfbGF0ZW5j eV91cywKLQkJCQkJCQkJCQkJCQkJCWRlc3QuaHRvdGFsCi0JCQkJCQkJCQkJCQkJCQkJCS8gZGVz dC5waXhlbF9yYXRlX21oegotCQkJCQkJCQkJCQkJCQkJCQkvIDQpKSkpOwotCi0JCQkJCXYtPlRp bWVGb3JNZXRhUFRFV2l0aG91dEltbWVkaWF0ZUZsaXAgPQotCQkJCQkJCWRtbF9tYXgoCi0JCQkJ CQkJCQl2LT5NZXRhUFRFQnl0ZXNQZXJGcmFtZVtrXQotCQkJCQkJCQkJCQkvIHYtPlByZWZldGNo Qldba10sCi0JCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCQl2LT5FeHRyYUxhdGVuY3ksCi0J CQkJCQkJCQkJCWRlc3QuaHRvdGFsCi0JCQkJCQkJCQkJCQkJLyBkZXN0LnBpeGVsX3JhdGVfbWh6 Ci0JCQkJCQkJCQkJCQkJLyA0KSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+VGltZUZvck1ldGFQ VEVXaXRoSW1tZWRpYXRlRmxpcCA9IGRlc3QuaHRvdGFsCi0JCQkJCQkJLyBkZXN0LnBpeGVsX3Jh dGVfbWh6IC8gNDsKLQkJCQkJdi0+VGltZUZvck1ldGFQVEVXaXRob3V0SW1tZWRpYXRlRmxpcCA9 IGRlc3QuaHRvdGFsCi0JCQkJCQkJLyBkZXN0LnBpeGVsX3JhdGVfbWh6IC8gNDsKLQkJCQl9Ci0K LQkJCQlpZiAoaXAtPnB0ZV9lbmFibGUgPT0gMSB8fCBzcmMuZGNjID09IDEpIHsKLQkJCQkJdi0+ VGltZUZvck1ldGFBbmREUFRFUm93V2l0aEltbWVkaWF0ZUZsaXAgPQotCQkJCQkJCWRtbF9tYXgo Ci0JCQkJCQkJCQkodi0+TWV0YVJvd0J5dGVzW2tdCi0JCQkJCQkJCQkJCSsgdi0+RFBURUJ5dGVz UGVyUm93W2tdKQotCQkJCQkJCQkJCQkvIHYtPlByZWZldGNoQldba10sCi0JCQkJCQkJCQlkbWxf bWF4KAotCQkJCQkJCQkJCQkodi0+TWV0YVJvd0J5dGVzW2tdCi0JCQkJCQkJCQkJCQkJKyB2LT5E UFRFQnl0ZXNQZXJSb3dba10pCi0JCQkJCQkJCQkJCQkJKiB2LT5Ub3RhbEltbWVkaWF0ZUZsaXBC eXRlcwotCQkJCQkJCQkJCQkJCS8gKHYtPkJXQXZhaWxhYmxlRm9ySW1tZWRpYXRlRmxpcAotCQkJ CQkJCQkJCQkJCQkJKiAodi0+TWV0YVBURUJ5dGVzUGVyRnJhbWVba10KLQkJCQkJCQkJCQkJCQkJ CQkJKyB2LT5NZXRhUm93Qnl0ZXNba10KLQkJCQkJCQkJCQkJCQkJCQkJKyB2LT5EUFRFQnl0ZXNQ ZXJSb3dba10pKSwKLQkJCQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQkJCQlkZXN0Lmh0b3Rh bAotCQkJCQkJCQkJCQkJCQkJLyBkZXN0LnBpeGVsX3JhdGVfbWh6Ci0JCQkJCQkJCQkJCQkJCQkt IHYtPlRpbWVGb3JNZXRhUFRFV2l0aEltbWVkaWF0ZUZsaXAsCi0JCQkJCQkJCQkJCQkJZG1sX21h eCgKLQkJCQkJCQkJCQkJCQkJCXYtPkV4dHJhTGF0ZW5jeSwKLQkJCQkJCQkJCQkJCQkJCTIKLQkJ CQkJCQkJCQkJCQkJCQkJKiBzb2MtPnVyZ2VudF9sYXRlbmN5X3VzKSkpKTsKLQotCQkJCQl2LT5U aW1lRm9yTWV0YUFuZERQVEVSb3dXaXRob3V0SW1tZWRpYXRlRmxpcCA9Ci0JCQkJCQkJZG1sX21h eCgKLQkJCQkJCQkJCSh2LT5NZXRhUm93Qnl0ZXNba10KLQkJCQkJCQkJCQkJKyB2LT5EUFRFQnl0 ZXNQZXJSb3dba10pCi0JCQkJCQkJCQkJCS8gdi0+UHJlZmV0Y2hCV1trXSwKLQkJCQkJCQkJCWRt bF9tYXgoCi0JCQkJCQkJCQkJCWRlc3QuaHRvdGFsCi0JCQkJCQkJCQkJCQkJLyBkZXN0LnBpeGVs X3JhdGVfbWh6Ci0JCQkJCQkJCQkJCQkJLSB2LT5UaW1lRm9yTWV0YVBURVdpdGhvdXRJbW1lZGlh dGVGbGlwLAotCQkJCQkJCQkJCQl2LT5FeHRyYUxhdGVuY3kpKTsKLQkJCQl9IGVsc2UgewotCQkJ CQl2LT5UaW1lRm9yTWV0YUFuZERQVEVSb3dXaXRoSW1tZWRpYXRlRmxpcCA9Ci0JCQkJCQkJZG1s X21heCgKLQkJCQkJCQkJCWRlc3QuaHRvdGFsCi0JCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRl X21oegotCQkJCQkJCQkJCQktIHYtPlRpbWVGb3JNZXRhUFRFV2l0aEltbWVkaWF0ZUZsaXAsCi0J CQkJCQkJCQl2LT5FeHRyYUxhdGVuY3kKLQkJCQkJCQkJCQkJLSB2LT5UaW1lRm9yTWV0YVBURVdp dGhJbW1lZGlhdGVGbGlwKTsKLQkJCQkJdi0+VGltZUZvck1ldGFBbmREUFRFUm93V2l0aG91dElt bWVkaWF0ZUZsaXAgPQotCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQlkZXN0Lmh0b3RhbAotCQkJ CQkJCQkJCQkvIGRlc3QucGl4ZWxfcmF0ZV9taHoKLQkJCQkJCQkJCQkJLSB2LT5UaW1lRm9yTWV0 YVBURVdpdGhvdXRJbW1lZGlhdGVGbGlwLAotCQkJCQkJCQkJdi0+RXh0cmFMYXRlbmN5Ci0JCQkJ CQkJCQkJCS0gdi0+VGltZUZvck1ldGFQVEVXaXRob3V0SW1tZWRpYXRlRmxpcCk7Ci0JCQkJfQot Ci0JCQkJdi0+TGluZXNGb3JNZXRhUFRFV2l0aEltbWVkaWF0ZUZsaXBba10gPQotCQkJCQkJZG1s X2Zsb29yX2V4KAotCQkJCQkJCQk0LjAKLQkJCQkJCQkJCQkqICh2LT5UaW1lRm9yTWV0YVBURVdp dGhJbW1lZGlhdGVGbGlwCi0JCQkJCQkJCQkJCQkvIChkZXN0Lmh0b3RhbAotCQkJCQkJCQkJCQkJ CQkvIGRlc3QucGl4ZWxfcmF0ZV9taHopCi0JCQkJCQkJCQkJCQkrIDAuMTI1KSwKLQkJCQkJCQkJ MSkgLyA0LjA7Ci0KLQkJCQl2LT5MaW5lc0Zvck1ldGFQVEVXaXRob3V0SW1tZWRpYXRlRmxpcFtr XSA9Ci0JCQkJCQlkbWxfZmxvb3JfZXgoCi0JCQkJCQkJCTQuMAotCQkJCQkJCQkJCSogKHYtPlRp bWVGb3JNZXRhUFRFV2l0aG91dEltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJCQkJCS8gKGRlc3QuaHRv dGFsCi0JCQkJCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21oeikKLQkJCQkJCQkJCQkJCSsg MC4xMjUpLAotCQkJCQkJCQkxKSAvIDQuMDsKLQotCQkJCXYtPkxpbmVzRm9yTWV0YUFuZERQVEVS b3dXaXRoSW1tZWRpYXRlRmxpcFtrXSA9Ci0JCQkJCQlkbWxfZmxvb3JfZXgoCi0JCQkJCQkJCTQu MAotCQkJCQkJCQkJCSogKHYtPlRpbWVGb3JNZXRhQW5kRFBURVJvd1dpdGhJbW1lZGlhdGVGbGlw Ci0JCQkJCQkJCQkJCQkvIChkZXN0Lmh0b3RhbAotCQkJCQkJCQkJCQkJCQkvIGRlc3QucGl4ZWxf cmF0ZV9taHopCi0JCQkJCQkJCQkJCQkrIDAuMTI1KSwKLQkJCQkJCQkJMSkgLyA0LjA7Ci0KLQkJ CQl2LT5MaW5lc0Zvck1ldGFBbmREUFRFUm93V2l0aG91dEltbWVkaWF0ZUZsaXBba10gPQotCQkJ CQkJZG1sX2Zsb29yX2V4KAotCQkJCQkJCQk0LjAKLQkJCQkJCQkJCQkqICh2LT5UaW1lRm9yTWV0 YUFuZERQVEVSb3dXaXRob3V0SW1tZWRpYXRlRmxpcAotCQkJCQkJCQkJCQkJLyAoZGVzdC5odG90 YWwKLQkJCQkJCQkJCQkJCQkJLyBkZXN0LnBpeGVsX3JhdGVfbWh6KQotCQkJCQkJCQkJCQkJKyAw LjEyNSksCi0JCQkJCQkJCTEpIC8gNC4wOwotCi0JCQkJdi0+TGluZVRpbWVzVG9SZXF1ZXN0UHJl ZmV0Y2hQaXhlbERhdGFXaXRoSW1tZWRpYXRlRmxpcCA9Ci0JCQkJCQl2LT5MaW5lVGltZXNGb3JQ cmVmZXRjaFtrXQotCQkJCQkJCQktIHYtPkxpbmVzRm9yTWV0YVBURVdpdGhJbW1lZGlhdGVGbGlw W2tdCi0JCQkJCQkJCS0gdi0+TGluZXNGb3JNZXRhQW5kRFBURVJvd1dpdGhJbW1lZGlhdGVGbGlw W2tdOwotCi0JCQkJdi0+TGluZVRpbWVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGFXaXRob3V0 SW1tZWRpYXRlRmxpcCA9Ci0JCQkJCQl2LT5MaW5lVGltZXNGb3JQcmVmZXRjaFtrXQotCQkJCQkJ CQktIHYtPkxpbmVzRm9yTWV0YVBURVdpdGhvdXRJbW1lZGlhdGVGbGlwW2tdCi0JCQkJCQkJCS0g di0+TGluZXNGb3JNZXRhQW5kRFBURVJvd1dpdGhvdXRJbW1lZGlhdGVGbGlwW2tdOwotCi0JCQkJ aWYgKHYtPkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0aEltbWVkaWF0ZUZs aXAgPiAwKSB7Ci0JCQkJCXYtPlZSYXRpb1ByZVlXaXRoSW1tZWRpYXRlRmxpcFtpamtdID0KLQkJ CQkJCQl2LT5QcmVmZXRjaExpbmVzWVtrXQotCQkJCQkJCQkJLyB2LT5MaW5lVGltZXNUb1JlcXVl c3RQcmVmZXRjaFBpeGVsRGF0YVdpdGhJbW1lZGlhdGVGbGlwOwotCQkJCQlpZiAodi0+U3dhdGhI ZWlnaHRZUGVyU3RhdGVbaWprXSA+IDQpIHsKLQkJCQkJCWlmICh2LT5MaW5lVGltZXNUb1JlcXVl c3RQcmVmZXRjaFBpeGVsRGF0YVdpdGhJbW1lZGlhdGVGbGlwCi0JCQkJCQkJCS0gKHYtPlByZWZp bGxZW2tdIC0gMy4wKSAvIDIuMAotCQkJCQkJCQk+IDApIHsKLQkJCQkJCQl2LT5WUmF0aW9QcmVZ V2l0aEltbWVkaWF0ZUZsaXBbaWprXSA9Ci0JCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCQl2 LT5WUmF0aW9QcmVZV2l0aEltbWVkaWF0ZUZsaXBbaWprXSwKLQkJCQkJCQkJCQkJKHYtPk1heE51 bVN3WVtrXQotCQkJCQkJCQkJCQkJCSogdi0+U3dhdGhIZWlnaHRZUGVyU3RhdGVbaWprXSkKLQkJ CQkJCQkJCQkJCQkvICh2LT5MaW5lVGltZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YVdpdGhJ bW1lZGlhdGVGbGlwCi0JCQkJCQkJCQkJCQkJCQktICh2LT5QcmVmaWxsWVtrXQotCQkJCQkJCQkJ CQkJCQkJCQktIDMuMCkKLQkJCQkJCQkJCQkJCQkJCQkJLyAyLjApKTsKLQkJCQkJCX0gZWxzZSB7 Ci0JCQkJCQkJdi0+VlJhdGlvUHJlWVdpdGhJbW1lZGlhdGVGbGlwW2lqa10gPQotCQkJCQkJCQkJ OTk5OTk5OwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCXYtPlZSYXRpb1ByZUNXaXRoSW1tZWRpYXRl RmxpcFtpamtdID0KLQkJCQkJCQl2LT5QcmVmZXRjaExpbmVzQ1trXQotCQkJCQkJCQkJLyB2LT5M aW5lVGltZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YVdpdGhJbW1lZGlhdGVGbGlwOwotCQkJ CQlpZiAodi0+U3dhdGhIZWlnaHRDUGVyU3RhdGVbaWprXSA+IDQpIHsKLQkJCQkJCWlmICh2LT5M aW5lVGltZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YVdpdGhJbW1lZGlhdGVGbGlwCi0JCQkJ CQkJCS0gKHYtPlByZWZpbGxDW2tdIC0gMy4wKSAvIDIuMAotCQkJCQkJCQk+IDApIHsKLQkJCQkJ CQl2LT5WUmF0aW9QcmVDV2l0aEltbWVkaWF0ZUZsaXBbaWprXSA9Ci0JCQkJCQkJCQlkbWxfbWF4 KAotCQkJCQkJCQkJCQl2LT5WUmF0aW9QcmVDV2l0aEltbWVkaWF0ZUZsaXBbaWprXSwKLQkJCQkJ CQkJCQkJKHYtPk1heE51bVN3Q1trXQotCQkJCQkJCQkJCQkJCSogdi0+U3dhdGhIZWlnaHRDUGVy U3RhdGVbaWprXSkKLQkJCQkJCQkJCQkJCQkvICh2LT5MaW5lVGltZXNUb1JlcXVlc3RQcmVmZXRj aFBpeGVsRGF0YVdpdGhJbW1lZGlhdGVGbGlwCi0JCQkJCQkJCQkJCQkJCQktICh2LT5QcmVmaWxs Q1trXQotCQkJCQkJCQkJCQkJCQkJCQktIDMuMCkKLQkJCQkJCQkJCQkJCQkJCQkJLyAyLjApKTsK LQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJdi0+VlJhdGlvUHJlQ1dpdGhJbW1lZGlhdGVGbGlwW2lq a10gPQotCQkJCQkJCQkJOTk5OTk5OwotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJdi0+UmVxdWly ZWRQcmVmZXRjaFBpeGVsRGF0YUJXV2l0aEltbWVkaWF0ZUZsaXBbaWprXSA9Ci0JCQkJCQkJdi0+ Tm9PZkRQUFtpamtdCi0JCQkJCQkJCQkqICh2LT5QcmVmZXRjaExpbmVzWVtrXQotCQkJCQkJCQkJ CQkvIHYtPkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0aEltbWVkaWF0ZUZs aXAKLQkJCQkJCQkJCQkJKiBkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4 ZWxJbkRFVFlba10sCi0JCQkJCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJKyB2LT5QcmVmZXRjaExp bmVzQ1trXQotCQkJCQkJCQkJCQkJCS8gdi0+TGluZVRpbWVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhl bERhdGFXaXRoSW1tZWRpYXRlRmxpcAotCQkJCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJ CQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVENba10sCi0JCQkJCQkJCQkJCQkJCQkyKQot CQkJCQkJCQkJCQkJCS8gMikKLQkJCQkJCQkJCSogdi0+U3dhdGhXaWR0aFlQZXJTdGF0ZVtpamtd Ci0JCQkJCQkJCQkvIChkZXN0Lmh0b3RhbAotCQkJCQkJCQkJCQkvIGRlc3QucGl4ZWxfcmF0ZV9t aHopOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXYtPlZSYXRpb1ByZVlXaXRoSW1tZWRpYXRlRmxpcFtp amtdID0gOTk5OTk5OwotCQkJCQl2LT5WUmF0aW9QcmVDV2l0aEltbWVkaWF0ZUZsaXBbaWprXSA9 IDk5OTk5OTsKLQkJCQkJdi0+UmVxdWlyZWRQcmVmZXRjaFBpeGVsRGF0YUJXV2l0aEltbWVkaWF0 ZUZsaXBbaWprXSA9Ci0JCQkJCQkJOTk5OTk5OwotCQkJCX0KLQotCQkJCWlmICh2LT5MaW5lVGlt ZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YVdpdGhvdXRJbW1lZGlhdGVGbGlwCi0JCQkJCQk+ IDApIHsKLQkJCQkJdi0+VlJhdGlvUHJlWVdpdGhvdXRJbW1lZGlhdGVGbGlwW2lqa10gPQotCQkJ CQkJCXYtPlByZWZldGNoTGluZXNZW2tdCi0JCQkJCQkJCQkvIHYtPkxpbmVUaW1lc1RvUmVxdWVz dFByZWZldGNoUGl4ZWxEYXRhV2l0aG91dEltbWVkaWF0ZUZsaXA7Ci0JCQkJCWlmICh2LT5Td2F0 aEhlaWdodFlQZXJTdGF0ZVtpamtdID4gNCkgewotCQkJCQkJaWYgKHYtPkxpbmVUaW1lc1RvUmVx dWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0aG91dEltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJLSAodi0+ UHJlZmlsbFlba10gLSAzLjApIC8gMi4wCi0JCQkJCQkJCT4gMCkgewotCQkJCQkJCXYtPlZSYXRp b1ByZVlXaXRob3V0SW1tZWRpYXRlRmxpcFtpamtdID0KLQkJCQkJCQkJCWRtbF9tYXgoCi0JCQkJ CQkJCQkJCXYtPlZSYXRpb1ByZVlXaXRob3V0SW1tZWRpYXRlRmxpcFtpamtdLAotCQkJCQkJCQkJ CQkodi0+TWF4TnVtU3dZW2tdCi0JCQkJCQkJCQkJCQkJKiB2LT5Td2F0aEhlaWdodFlQZXJTdGF0 ZVtpamtdKQotCQkJCQkJCQkJCQkJCS8gKHYtPkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4 ZWxEYXRhV2l0aG91dEltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJCQkJCQkJCS0gKHYtPlByZWZpbGxZ W2tdCi0JCQkJCQkJCQkJCQkJCQkJCS0gMy4wKQotCQkJCQkJCQkJCQkJCQkJCQkvIDIuMCkpOwot CQkJCQkJfSBlbHNlIHsKLQkJCQkJCQl2LT5WUmF0aW9QcmVZV2l0aG91dEltbWVkaWF0ZUZsaXBb aWprXSA9Ci0JCQkJCQkJCQk5OTk5OTk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJdi0+VlJhdGlv UHJlQ1dpdGhvdXRJbW1lZGlhdGVGbGlwW2lqa10gPQotCQkJCQkJCXYtPlByZWZldGNoTGluZXND W2tdCi0JCQkJCQkJCQkvIHYtPkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0 aG91dEltbWVkaWF0ZUZsaXA7Ci0JCQkJCWlmICh2LT5Td2F0aEhlaWdodENQZXJTdGF0ZVtpamtd ID4gNCkgewotCQkJCQkJaWYgKHYtPkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRh V2l0aG91dEltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJLSAodi0+UHJlZmlsbENba10gLSAzLjApIC8g Mi4wCi0JCQkJCQkJCT4gMCkgewotCQkJCQkJCXYtPlZSYXRpb1ByZUNXaXRob3V0SW1tZWRpYXRl RmxpcFtpamtdID0KLQkJCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJCXYtPlZSYXRpb1ByZUNX aXRob3V0SW1tZWRpYXRlRmxpcFtpamtdLAotCQkJCQkJCQkJCQkodi0+TWF4TnVtU3dDW2tdCi0J CQkJCQkJCQkJCQkJKiB2LT5Td2F0aEhlaWdodENQZXJTdGF0ZVtpamtdKQotCQkJCQkJCQkJCQkJ CS8gKHYtPkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0aG91dEltbWVkaWF0 ZUZsaXAKLQkJCQkJCQkJCQkJCQkJCS0gKHYtPlByZWZpbGxDW2tdCi0JCQkJCQkJCQkJCQkJCQkJ CS0gMy4wKQotCQkJCQkJCQkJCQkJCQkJCQkvIDIuMCkpOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJ CQl2LT5WUmF0aW9QcmVDV2l0aG91dEltbWVkaWF0ZUZsaXBbaWprXSA9Ci0JCQkJCQkJCQk5OTk5 OTk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQotCQkJCQl2LT5SZXF1aXJlZFByZWZldGNoUGl4ZWxEYXRh QldXaXRob3V0SW1tZWRpYXRlRmxpcFtpamtdID0KLQkJCQkJCQl2LT5Ob09mRFBQW2lqa10KLQkJ CQkJCQkJCSogKHYtPlByZWZldGNoTGluZXNZW2tdCi0JCQkJCQkJCQkJCS8gdi0+TGluZVRpbWVz VG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGFXaXRob3V0SW1tZWRpYXRlRmxpcAotCQkJCQkJCQkJ CQkqIGRtbF9jZWlsX2V4KAotCQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXSwK LQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkrIHYtPlByZWZldGNoTGluZXNDW2tdCi0JCQkJ CQkJCQkJCQkJLyB2LT5MaW5lVGltZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YVdpdGhvdXRJ bW1lZGlhdGVGbGlwCi0JCQkJCQkJCQkJCQkJKiBkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkJ CXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSwKLQkJCQkJCQkJCQkJCQkJCTIpCi0JCQkJCQkJCQkJ CQkJLyAyKQotCQkJCQkJCQkJKiB2LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lqa10KLQkJCQkJCQkJ CS8gKGRlc3QuaHRvdGFsCi0JCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21oeik7Ci0JCQkJ fSBlbHNlIHsKLQkJCQkJdi0+VlJhdGlvUHJlWVdpdGhvdXRJbW1lZGlhdGVGbGlwW2lqa10gPSA5 OTk5OTk7Ci0JCQkJCXYtPlZSYXRpb1ByZUNXaXRob3V0SW1tZWRpYXRlRmxpcFtpamtdID0gOTk5 OTk5OwotCQkJCQl2LT5SZXF1aXJlZFByZWZldGNoUGl4ZWxEYXRhQldXaXRob3V0SW1tZWRpYXRl RmxpcFtpamtdID0KLQkJCQkJCQk5OTk5OTk7Ci0JCQkJfQotCQkJfQotCi0JCQl2LT5NYXhpbXVt UmVhZEJhbmR3aWR0aFdpdGhQcmVmZXRjaFdpdGhJbW1lZGlhdGVGbGlwID0gMDsKLQotCQkJZm9y IChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsrKykgewotCQkJCXN0cnVjdCBfdmNzX2RwaV9kaXNw bGF5X3BpcGVfc291cmNlX3BhcmFtc19zdCBzcmMgPQotCQkJCQkJZTJlW3YtPnBsYW5lc1trXS5l MmVfaW5kZXhdLnBpcGUuc3JjOwotCQkJCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVfZGVz dF9wYXJhbXNfc3QgZGVzdCA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlw ZS5kZXN0OwotCQkJCWlqayA9IGsgKiAyICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaiAqIE51 bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0KLQkJCQlpZiAoc3JjLnNvdXJjZV9mb3JtYXQgIT0g ZG1fNDIwXzgKLQkJCQkJCSYmIHNyYy5zb3VyY2VfZm9ybWF0ICE9IGRtXzQyMF8xMCkgewotCQkJ CQl2LT5NYXhpbXVtUmVhZEJhbmR3aWR0aFdpdGhQcmVmZXRjaFdpdGhJbW1lZGlhdGVGbGlwID0K LQkJCQkJCQl2LT5NYXhpbXVtUmVhZEJhbmR3aWR0aFdpdGhQcmVmZXRjaFdpdGhJbW1lZGlhdGVG bGlwCi0JCQkJCQkJCQkrIGRtbF9tYXgoCi0JCQkJCQkJCQkJCXYtPlJlYWRCYW5kd2lkdGhba10s Ci0JCQkJCQkJCQkJCXYtPlJlcXVpcmVkUHJlZmV0Y2hQaXhlbERhdGFCV1dpdGhJbW1lZGlhdGVG bGlwW2lqa10pCi0JCQkJCQkJCQkrIGRtbF9tYXgoCi0JCQkJCQkJCQkJCXYtPk1ldGFQVEVCeXRl c1BlckZyYW1lW2tdCi0JCQkJCQkJCQkJCQkJLyAodi0+TGluZXNGb3JNZXRhUFRFV2l0aEltbWVk aWF0ZUZsaXBba10KLQkJCQkJCQkJCQkJCQkJCSogZGVzdC5odG90YWwKLQkJCQkJCQkJCQkJCQkJ CS8gZGVzdC5waXhlbF9yYXRlX21oeiksCi0JCQkJCQkJCQkJCSh2LT5NZXRhUm93Qnl0ZXNba10K LQkJCQkJCQkJCQkJCQkrIHYtPkRQVEVCeXRlc1BlclJvd1trXSkKLQkJCQkJCQkJCQkJCQkvICh2 LT5MaW5lc0Zvck1ldGFBbmREUFRFUm93V2l0aEltbWVkaWF0ZUZsaXBba10KLQkJCQkJCQkJCQkJ CQkJCSogZGVzdC5odG90YWwKLQkJCQkJCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21oeikp OwotCQkJCX0gZWxzZSB7Ci0JCQkJCXYtPk1heGltdW1SZWFkQmFuZHdpZHRoV2l0aFByZWZldGNo V2l0aEltbWVkaWF0ZUZsaXAgPQotCQkJCQkJCXYtPk1heGltdW1SZWFkQmFuZHdpZHRoV2l0aFBy ZWZldGNoV2l0aEltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJCSsgZG1sX21heCgKLQkJCQkJCQkJCQkJ di0+UmVhZEJhbmR3aWR0aFtrXSwKLQkJCQkJCQkJCQkJdi0+UmVxdWlyZWRQcmVmZXRjaFBpeGVs RGF0YUJXV2l0aG91dEltbWVkaWF0ZUZsaXBbaWprXSk7Ci0JCQkJfQotCQkJfQotCi0JCQl2LT5N YXhpbXVtUmVhZEJhbmR3aWR0aFdpdGhQcmVmZXRjaFdpdGhvdXRJbW1lZGlhdGVGbGlwID0gMDsK LQotCQkJZm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsrKykgewotCQkJCWlqayA9IGsgKiAy ICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7 Ci0KLQkJCQl2LT5NYXhpbXVtUmVhZEJhbmR3aWR0aFdpdGhQcmVmZXRjaFdpdGhvdXRJbW1lZGlh dGVGbGlwID0KLQkJCQkJCXYtPk1heGltdW1SZWFkQmFuZHdpZHRoV2l0aFByZWZldGNoV2l0aG91 dEltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJKyBkbWxfbWF4KAotCQkJCQkJCQkJCXYtPlJlYWRCYW5k d2lkdGhba10sCi0JCQkJCQkJCQkJdi0+UmVxdWlyZWRQcmVmZXRjaFBpeGVsRGF0YUJXV2l0aG91 dEltbWVkaWF0ZUZsaXBbaWprXSk7Ci0JCQl9Ci0KLQkJCXYtPlByZWZldGNoU3VwcG9ydGVkV2l0 aEltbWVkaWF0ZUZsaXBbaWpdID0gMTsKLQkJCWlmICh2LT5NYXhpbXVtUmVhZEJhbmR3aWR0aFdp dGhQcmVmZXRjaFdpdGhJbW1lZGlhdGVGbGlwCi0JCQkJCT4gdi0+UmV0dXJuQldQZXJTdGF0ZVtp XSkgewotCQkJCXYtPlByZWZldGNoU3VwcG9ydGVkV2l0aEltbWVkaWF0ZUZsaXBbaWpdID0gMDsK LQkJCX0KLQkJCWZvciAoayA9IDA7IGsgPCBudW1fcGxhbmVzOyBrKyspIHsKLQkJCQlpZiAodi0+ TGluZVRpbWVzRm9yUHJlZmV0Y2hba10gPCAyCi0JCQkJCQl8fCB2LT5MaW5lc0Zvck1ldGFQVEVX aXRoSW1tZWRpYXRlRmxpcFtrXSA+PSA4Ci0JCQkJCQl8fCB2LT5MaW5lc0Zvck1ldGFBbmREUFRF Um93V2l0aEltbWVkaWF0ZUZsaXBba10KLQkJCQkJCQkJPj0gMTYpIHsKLQkJCQkJdi0+UHJlZmV0 Y2hTdXBwb3J0ZWRXaXRoSW1tZWRpYXRlRmxpcFtpal0gPSAwOwotCQkJCX0KLQkJCX0KLQotCQkJ di0+UHJlZmV0Y2hTdXBwb3J0ZWRXaXRob3V0SW1tZWRpYXRlRmxpcFtpal0gPSAxOwotCQkJaWYg KHYtPk1heGltdW1SZWFkQmFuZHdpZHRoV2l0aFByZWZldGNoV2l0aG91dEltbWVkaWF0ZUZsaXAK LQkJCQkJPiB2LT5SZXR1cm5CV1BlclN0YXRlW2ldKSB7Ci0JCQkJdi0+UHJlZmV0Y2hTdXBwb3J0 ZWRXaXRob3V0SW1tZWRpYXRlRmxpcFtpal0gPSAwOwotCQkJfQotCQkJZm9yIChrID0gMDsgayA8 IG51bV9wbGFuZXM7IGsrKykgewotCQkJCWlmICh2LT5MaW5lVGltZXNGb3JQcmVmZXRjaFtrXSA8 IDIKLQkJCQkJCXx8IHYtPkxpbmVzRm9yTWV0YVBURVdpdGhvdXRJbW1lZGlhdGVGbGlwW2tdID49 IDgKLQkJCQkJCXx8IHYtPkxpbmVzRm9yTWV0YUFuZERQVEVSb3dXaXRob3V0SW1tZWRpYXRlRmxp cFtrXQotCQkJCQkJCQk+PSAxNikgewotCQkJCQl2LT5QcmVmZXRjaFN1cHBvcnRlZFdpdGhvdXRJ bW1lZGlhdGVGbGlwW2lqXSA9IDA7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JZm9yIChpID0g MDsgaSA8IE51bWJlck9mU3RhdGVzUGx1c1R3bzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCAy OyBqKyspIHsKLQkJCWlqID0gaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0KLQkJCXYt PlZSYXRpb0luUHJlZmV0Y2hTdXBwb3J0ZWRXaXRoSW1tZWRpYXRlRmxpcFtpal0gPSAxOwotCQkJ Zm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsrKykgewotCQkJCXN0cnVjdCBfdmNzX2RwaV9k aXNwbGF5X3BpcGVfc291cmNlX3BhcmFtc19zdCBzcmMgPQotCQkJCQkJZTJlW3YtPnBsYW5lc1tr XS5lMmVfaW5kZXhdLnBpcGUuc3JjOwotCQkJCWlqayA9IGsgKiAyICogTnVtYmVyT2ZTdGF0ZXNQ bHVzVHdvICsgaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0KLQkJCQlpZiAoKChzcmMu c291cmNlX2Zvcm1hdCAhPSBkbV80MjBfOAotCQkJCQkJJiYgc3JjLnNvdXJjZV9mb3JtYXQgIT0g ZG1fNDIwXzEwKQotCQkJCQkJJiYgKHYtPlZSYXRpb1ByZVlXaXRoSW1tZWRpYXRlRmxpcFtpamtd ID4gNAotCQkJCQkJCQl8fCB2LT5WUmF0aW9QcmVDV2l0aEltbWVkaWF0ZUZsaXBbaWprXQotCQkJ CQkJCQkJCT4gNCkpCi0JCQkJCQl8fCAoKHNyYy5zb3VyY2VfZm9ybWF0ID09IGRtXzQyMF84Ci0J CQkJCQkJCXx8IHNyYy5zb3VyY2VfZm9ybWF0ID09IGRtXzQyMF8xMCkKLQkJCQkJCQkJJiYgKHYt PlZSYXRpb1ByZVlXaXRob3V0SW1tZWRpYXRlRmxpcFtpamtdCi0JCQkJCQkJCQkJPiA0Ci0JCQkJ CQkJCQkJfHwgdi0+VlJhdGlvUHJlQ1dpdGhvdXRJbW1lZGlhdGVGbGlwW2lqa10KLQkJCQkJCQkJ CQkJCT4gNCkpKSB7Ci0JCQkJCXYtPlZSYXRpb0luUHJlZmV0Y2hTdXBwb3J0ZWRXaXRoSW1tZWRp YXRlRmxpcFtpal0gPSAwOwotCQkJCX0KLQkJCX0KLQkJCXYtPlZSYXRpb0luUHJlZmV0Y2hTdXBw b3J0ZWRXaXRob3V0SW1tZWRpYXRlRmxpcFtpal0gPSAxOwotCQkJZm9yIChrID0gMDsgayA8IG51 bV9wbGFuZXM7IGsrKykgewotCQkJCWlqayA9IGsgKiAyICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdv ICsgaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0KLQkJCQlpZiAodi0+VlJhdGlvUHJl WVdpdGhvdXRJbW1lZGlhdGVGbGlwW2lqa10gPiA0Ci0JCQkJCQl8fCB2LT5WUmF0aW9QcmVDV2l0 aG91dEltbWVkaWF0ZUZsaXBbaWprXSA+IDQpIHsKLQkJCQkJdi0+VlJhdGlvSW5QcmVmZXRjaFN1 cHBvcnRlZFdpdGhvdXRJbW1lZGlhdGVGbGlwW2lqXSA9IDA7Ci0JCQkJfQotCQkJfQotCQl9Ci0J fQotCi0JLy8gTW9kZSBTdXBwb3J0LCBWb2x0YWdlIFN0YXRlIGFuZCBTT0MgQ29uZmlndXJhdGlv bgotCi0JZm9yIChpID0gKE51bWJlck9mU3RhdGVzUGx1c1R3byAtIDEpOyBpID49IDA7IGktLSkg Ly8gdXNlIGludCB0eXBlIGhlcmUKLQkJCXsKLQkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewot CQkJaWogPSBqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaTsKLQotCQkJaWYgKHYtPlNjYWxl UmF0aW9TdXBwb3J0ID09IDEgJiYgdi0+U291cmNlRm9ybWF0UGl4ZWxBbmRTY2FuU3VwcG9ydCA9 PSAxCi0JCQkJCSYmIHYtPlZpZXdwb3J0U2l6ZVN1cHBvcnQgPT0gMQotCQkJCQkmJiB2LT5CYW5k d2lkdGhTdXBwb3J0W2ldID09IDEgJiYgdi0+RElPU3VwcG9ydFtpXSA9PSAxCi0JCQkJCSYmIHYt PlVyZ2VudExhdGVuY3lTdXBwb3J0W2lqXSA9PSAxICYmIHYtPlJPQlN1cHBvcnRbaV0gPT0gMQot CQkJCQkmJiB2LT5ESVNQQ0xLX0RQUENMS19TdXBwb3J0W2lqXSA9PSAxCi0JCQkJCSYmIHYtPlRv dGFsQXZhaWxhYmxlUGlwZXNTdXBwb3J0W2lqXSA9PSAxCi0JCQkJCSYmIHYtPlRvdGFsQXZhaWxh YmxlV3JpdGViYWNrU3VwcG9ydCA9PSAxCi0JCQkJCSYmIHYtPldyaXRlYmFja0xhdGVuY3lTdXBw b3J0ID09IDEpIHsKLQkJCQlpZiAodi0+UHJlZmV0Y2hTdXBwb3J0ZWRXaXRoSW1tZWRpYXRlRmxp cFtpal0gPT0gMQotCQkJCQkJJiYgdi0+VlJhdGlvSW5QcmVmZXRjaFN1cHBvcnRlZFdpdGhJbW1l ZGlhdGVGbGlwW2lqXQotCQkJCQkJCQk9PSAxKSB7Ci0JCQkJCXYtPk1vZGVTdXBwb3J0V2l0aElt bWVkaWF0ZUZsaXBbaWpdID0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQl2LT5Nb2RlU3VwcG9ydFdp dGhJbW1lZGlhdGVGbGlwW2lqXSA9IDA7Ci0JCQkJfQotCQkJCWlmICh2LT5QcmVmZXRjaFN1cHBv cnRlZFdpdGhvdXRJbW1lZGlhdGVGbGlwW2lqXSA9PSAxCi0JCQkJCQkmJiB2LT5WUmF0aW9JblBy ZWZldGNoU3VwcG9ydGVkV2l0aG91dEltbWVkaWF0ZUZsaXBbaWpdCi0JCQkJCQkJCT09IDEpIHsK LQkJCQkJdi0+TW9kZVN1cHBvcnRXaXRob3V0SW1tZWRpYXRlRmxpcFtpal0gPSAxOwotCQkJCX0g ZWxzZSB7Ci0JCQkJCXYtPk1vZGVTdXBwb3J0V2l0aG91dEltbWVkaWF0ZUZsaXBbaWpdID0gMDsK LQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXYtPk1vZGVTdXBwb3J0V2l0aEltbWVkaWF0ZUZsaXBb aWpdID0gMDsKLQkJCQl2LT5Nb2RlU3VwcG9ydFdpdGhvdXRJbW1lZGlhdGVGbGlwW2lqXSA9IDA7 Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAoTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvIC0gMSk7 IGkgPj0gMDsgaS0tKSAvLyB1c2UgaW50IHR5cGUgaGVyZQotCQkJewotCQlpZiAoKGkgPT0gKE51 bWJlck9mU3RhdGVzUGx1c1R3byAtIDEpCi0JCQkJfHwgdi0+TW9kZVN1cHBvcnRXaXRoSW1tZWRp YXRlRmxpcFsxICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0KLQkJCQkJCT09IDEKLQkJCQl8 fCB2LT5Nb2RlU3VwcG9ydFdpdGhJbW1lZGlhdGVGbGlwWzAgKiBOdW1iZXJPZlN0YXRlc1BsdXNU d28gKyBpXQotCQkJCQkJPT0gMSkgJiYgaSA+PSB2LT5Wb2x0YWdlT3ZlcnJpZGVMZXZlbCkgewot CQkJdi0+Vm9sdGFnZUxldmVsV2l0aEltbWVkaWF0ZUZsaXAgPSBpOwotCQl9Ci0JfQotCi0JZm9y IChpID0gKE51bWJlck9mU3RhdGVzUGx1c1R3byAtIDEpOyBpID49IDA7IGktLSkgLy8gdXNlIGlu dCB0eXBlIGhlcmUKLQkJCXsKLQkJaWYgKChpID09IChOdW1iZXJPZlN0YXRlc1BsdXNUd28gLSAx KQotCQkJCXx8IHYtPk1vZGVTdXBwb3J0V2l0aG91dEltbWVkaWF0ZUZsaXBbMSAqIE51bWJlck9m U3RhdGVzUGx1c1R3byArIGldCi0JCQkJCQk9PSAxCi0JCQkJfHwgdi0+TW9kZVN1cHBvcnRXaXRo b3V0SW1tZWRpYXRlRmxpcFswICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0KLQkJCQkJCT09 IDEpICYmIGkgPj0gdi0+Vm9sdGFnZU92ZXJyaWRlTGV2ZWwpIHsKLQkJCXYtPlZvbHRhZ2VMZXZl bFdpdGhvdXRJbW1lZGlhdGVGbGlwID0gaTsKLQkJfQotCX0KLQotCWlmICh2LT5Wb2x0YWdlTGV2 ZWxXaXRoSW1tZWRpYXRlRmxpcCA9PSAoTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvIC0gMSkpIHsKLQkJ di0+SW1tZWRpYXRlRmxpcFN1cHBvcnRlZCA9IDA7Ci0JCXYtPlZvbHRhZ2VMZXZlbCA9IHYtPlZv bHRhZ2VMZXZlbFdpdGhvdXRJbW1lZGlhdGVGbGlwOwotCX0gZWxzZSB7Ci0JCXYtPkltbWVkaWF0 ZUZsaXBTdXBwb3J0ZWQgPSAxOwotCQl2LT5Wb2x0YWdlTGV2ZWwgPSB2LT5Wb2x0YWdlTGV2ZWxX aXRoSW1tZWRpYXRlRmxpcDsKLQl9Ci0KLQl2LT5EQ0ZDTEsgPSB2LT5EQ0ZDTEtQZXJTdGF0ZVso aW50KSB2LT5Wb2x0YWdlTGV2ZWxdOwotCXYtPkZhYnJpY0FuZERSQU1CYW5kd2lkdGggPSB2LT5G YWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbKGludCkgdi0+Vm9sdGFnZUxldmVsXTsKLQot CWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJdi0+UmVxdWlyZWRESVNQQ0xLUGVyUmF0aW9b al0gPSB2LT5SZXF1aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3bwotCQkJCSsg KGludCkgdi0+Vm9sdGFnZUxldmVsXTsKLQkJZm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsr KykgewotCQkJdi0+RFBQUGVyUGxhbmVQZXJSYXRpb1trICogMiArIGpdID0gdi0+Tm9PZkRQUFtr ICogMiAqIE51bWJlck9mU3RhdGVzUGx1c1R3bwotCQkJCQkrIGogKiBOdW1iZXJPZlN0YXRlc1Bs dXNUd28gKyAoaW50KSB2LT5Wb2x0YWdlTGV2ZWxdOwotCQl9Ci0JCXYtPkRJU1BDTEtfRFBQQ0xL X1N1cHBvcnRQZXJSYXRpb1tqXSA9IHYtPkRJU1BDTEtfRFBQQ0xLX1N1cHBvcnRbagotCQkJCSog TnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgKGludCkgdi0+Vm9sdGFnZUxldmVsXTsKLQl9Ci0KLQlB U1NFUlQodi0+SW1tZWRpYXRlRmxpcFN1cHBvcnRlZCB8fCB2LT5NYWNyb1RpbGVCbG9ja1dpZHRo QyB8fCB2LT5EQ0ZDTEsgfHwgdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aCk7Ci0KLQlyZXR1cm4g KHYtPlZvbHRhZ2VMZXZlbCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9kYy9kbWwvZGlzcGxheV9tb2RlX3N1cHBvcnQuaCBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9kbWwvZGlzcGxheV9tb2RlX3N1cHBvcnQuaAppbmRleCBlYWQ0OTQyLi5k NGVhMDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL2Rp c3BsYXlfbW9kZV9zdXBwb3J0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L2RtbC9kaXNwbGF5X21vZGVfc3VwcG9ydC5oCkBAIC0xOTEsOSArMTkxLDQgQEAgc3RydWN0IGRt bF9tc19pbnRlcm5hbF92YXJzIHsKIAlzdHJ1Y3QgX3Zjc19kcGlfd21fY2FsY19waXBlX3BhcmFt c19zdCBwbGFuZXNbRENfX05VTV9QSVBFU19fTUFYXTsKIH07CiAKLWludCBkbWxfbXNfY2hlY2so Ci0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJc3RydWN0IF92Y3NfZHBp X2Rpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0ICplMmUsCi0JCWludCBudW1fcGlwZXMpOwotCiAj ZW5kaWYKLS0gCjIuOS40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK