From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Tvrtko Ursulin Date: Thu, 18 Jun 2020 11:47:37 +0100 Message-Id: <20200618104747.24005-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 01/11] gem_wsim: Rip out userspace balancing List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Tvrtko Ursulin List-ID: RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkV2YWx1YXRp b24gb2YgdXNlcnNwYWNlIGxvYWQgYmFsYW5jaW5nIG9wdGlvbnMgd2FzIGhvdyB0aGlzIHRvb2wg c3RhcnRlZApidXQgc2luY2Ugd2UgaGF2ZSBzZXR0bGVkIG9uIGRvaW5nIGl0IGluIHRoZSBrZXJu ZWwuCgpUb21vcnJvdyB3ZSB3aWxsIHdhbnQgdG8gdXBkYXRlIHRoZSB0b29sIGZvciBuZXcgZW5n aW5lIGludGVyZmFjZXMgYW5kIGFsbAp0aGlzIGxlZ2FjeSBjb2RlIHdpbGwganVzdCBiZSBhIGRp c3RyYWN0aW9uLgoKUmlwIG91dCBldmVyeXRoaW5nIG5vdCByZWxhdGVkIHRvIGV4cGxpY2l0IGxv YWQgYmFsYW5jaW5nIGltcGxlbWVudGVkIHZpYQpjb250ZXh0IGVuZ2luZSBtYXBzIGFuZCBhZGp1 c3QgdGhlIHdvcmtsb2FkcyB0byB1c2UgaXQuCgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgotLS0KIGJlbmNobWFya3MvTWFrZWZpbGUuYW0g ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIGJlbmNobWFya3MvTWFrZWZpbGUuc291 cmNlcyAgICAgICAgICAgICAgICAgICB8ICAgIDYgLQogYmVuY2htYXJrcy9ld21hLmggICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICA3MSAtCiBiZW5jaG1hcmtzL2dlbV93c2ltLmMgICAg ICAgICAgICAgICAgICAgICAgICAgfCAxMzk0ICstLS0tLS0tLS0tLS0tLS0tCiBiZW5jaG1hcmtz L2lsb2cyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTA0IC0tCiBiZW5jaG1hcmtz L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBiZW5jaG1hcmtz L3dzaW0vbWVkaWEtMTA4MHAtcGxheWVyLndzaW0gICAgICAgfCAgICAyICsKIGJlbmNobWFya3Mv d3NpbS9tZWRpYV8xbjJfNDgwcC53c2ltICAgICAgICAgICB8ICAgMTIgKy0KIGJlbmNobWFya3Mv d3NpbS9tZWRpYV8xbjJfYXN5LndzaW0gICAgICAgICAgICB8ICAgIDggKy0KIGJlbmNobWFya3Mv d3NpbS9tZWRpYV8xbjNfNDgwcC53c2ltICAgICAgICAgICB8ICAgMTYgKy0KIGJlbmNobWFya3Mv d3NpbS9tZWRpYV8xbjNfYXN5LndzaW0gICAgICAgICAgICB8ICAgIDggKwogYmVuY2htYXJrcy93 c2ltL21lZGlhXzFuNF80ODBwLndzaW0gICAgICAgICAgIHwgICAyMCArLQogYmVuY2htYXJrcy93 c2ltL21lZGlhXzFuNF9hc3kud3NpbSAgICAgICAgICAgIHwgICAxMCArCiBiZW5jaG1hcmtzL3dz aW0vbWVkaWFfMW41XzQ4MHAud3NpbSAgICAgICAgICAgfCAgIDI0ICstCiBiZW5jaG1hcmtzL3dz aW0vbWVkaWFfMW41X2FzeS53c2ltICAgICAgICAgICAgfCAgIDEyICsKIGJlbmNobWFya3Mvd3Np bS9tZWRpYV9sb2FkX2JhbGFuY2VfMTdpNy53c2ltICB8ICAgMTAgKy0KIGJlbmNobWFya3Mvd3Np bS9tZWRpYV9sb2FkX2JhbGFuY2VfMTkud3NpbSAgICB8ICAgIDQgKy0KIC4uLi93c2ltL21lZGlh X2xvYWRfYmFsYW5jZV80azEydTcud3NpbSAgICAgICB8ICAgIDIgKwogLi4uL3dzaW0vbWVkaWFf bG9hZF9iYWxhbmNlX2ZoZDI2dTcud3NpbSAgICAgIHwgICAxNiArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX2xvYWRfYmFsYW5jZV9oZDAxLndzaW0gIHwgICAzNCArLQogLi4uL3dzaW0vbWVkaWFf bG9hZF9iYWxhbmNlX2hkMDZtcDIud3NpbSAgICAgIHwgICAgNiArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX2xvYWRfYmFsYW5jZV9oZDEyLndzaW0gIHwgICAgNiArLQogLi4uL3dzaW0vbWVkaWFf bG9hZF9iYWxhbmNlX2hkMTdpNC53c2ltICAgICAgIHwgICAgOCArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX21mZTJfNDgwcC53c2ltICAgICAgICAgIHwgICAxMiArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX21mZTNfNDgwcC53c2ltICAgICAgICAgIHwgICAxOCArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX21mZTRfNDgwcC53c2ltICAgICAgICAgIHwgICAyNCArLQogYmVuY2htYXJrcy93c2lt L21lZGlhX25uXzEwODBwLndzaW0gICAgICAgICAgIHwgICAgNCArCiBiZW5jaG1hcmtzL3dzaW0v bWVkaWFfbm5fMTA4MHBfczEud3NpbSAgICAgICAgfCAgICA0ICstCiBiZW5jaG1hcmtzL3dzaW0v bWVkaWFfbm5fMTA4MHBfczIud3NpbSAgICAgICAgfCAgICAyICsKIGJlbmNobWFya3Mvd3NpbS9t ZWRpYV9ubl8xMDgwcF9zMy53c2ltICAgICAgICB8ICAgIDIgKwogYmVuY2htYXJrcy93c2ltL21l ZGlhX25uXzQ4MHAud3NpbSAgICAgICAgICAgIHwgICAgNCArCiBiZW5jaG1hcmtzL3dzaW0vdmNz X2JhbGFuY2VkLndzaW0gICAgICAgICAgICAgfCAgIDUyICstCiBzY3JpcHRzL01ha2VmaWxlLmFt ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBzY3JpcHRzL21lZGlhLWJlbmNo LnBsICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzM2IC0tLS0tLS0tLQogMzQgZmlsZXMgY2hh bmdlZCwgMzE0IGluc2VydGlvbnMoKyksIDIzMjcgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAx MDA2NDQgYmVuY2htYXJrcy9ld21hLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBiZW5jaG1hcmtzL2ls b2cyLmgKIGRlbGV0ZSBtb2RlIDEwMDc1NSBzY3JpcHRzL21lZGlhLWJlbmNoLnBsCgpkaWZmIC0t Z2l0IGEvYmVuY2htYXJrcy9NYWtlZmlsZS5hbSBiL2JlbmNobWFya3MvTWFrZWZpbGUuYW0KaW5k ZXggMWYwNWFkZjMxNTI3Li40NWI5MjNlYmJhZTMgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvTWFr ZWZpbGUuYW0KKysrIGIvYmVuY2htYXJrcy9NYWtlZmlsZS5hbQpAQCAtMjUsNCArMjUsNCBAQCBn ZW1fbGF0ZW5jeV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdTKQogZ2VtX2xh dGVuY3lfTERBREQgPSAkKExEQUREKSAtbHB0aHJlYWQKIGdlbV9zeXNsYXRlbmN5X0NGTEFHUyA9 ICQoQU1fQ0ZMQUdTKSAkKFRIUkVBRF9DRkxBR1MpCiBnZW1fc3lzbGF0ZW5jeV9MREFERCA9ICQo TERBREQpIC1scHRocmVhZAotZ2VtX3dzaW1fTERBREQgPSAkKExEQUREKSAkKHRvcF9idWlsZGRp cikvbGliL2xpYmlndF9wZXJmLmxhIC1scHRocmVhZAorZ2VtX3dzaW1fTERBREQgPSAkKExEQURE KSAtbHB0aHJlYWQKZGlmZiAtLWdpdCBhL2JlbmNobWFya3MvTWFrZWZpbGUuc291cmNlcyBiL2Jl bmNobWFya3MvTWFrZWZpbGUuc291cmNlcwppbmRleCBlZTA0NWZiMzA5YWQuLmRhZTNjZGRhNGNm NyAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2JlbmNobWFy a3MvTWFrZWZpbGUuc291cmNlcwpAQCAtMTksMTIgKzE5LDYgQEAgYmVuY2htYXJrc19wcm9nX2xp c3QgPQkJCVwKIAl2Z2VtX21tYXAJCQlcCiAJJChOVUxMKQogCi1nZW1fd3NpbV9TT1VSQ0VTID0g ICAgICAgICAgICAgICAgICAgICAgXAotCWdlbV93c2ltLmMgICAgICAgICAgICAgICAgICAgICAg XAotCWV3bWEuaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlsb2cyLmggICAgICAgICAg ICAgICAgICAgICAgICAgXAotCSQoTlVMTCkKLQogTElCRFJNX0lOVEVMX0JFTkNITUFSS1MgPQkJ XAogCWludGVsX3VwbG9hZF9ibGl0X2xhcmdlCQlcCiAJaW50ZWxfdXBsb2FkX2JsaXRfbGFyZ2Vf Z3R0CVwKZGlmZiAtLWdpdCBhL2JlbmNobWFya3MvZXdtYS5oIGIvYmVuY2htYXJrcy9ld21hLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MTEwMDRlZDk5Mi4uMDAwMDAwMDAwMDAw Ci0tLSBhL2JlbmNobWFya3MvZXdtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAot I2lmbmRlZiBFV01BX0gKLSNkZWZpbmUgRVdNQV9ICi0KLSNpbmNsdWRlIDxpbG9nMi5oPgotCi0j ZGVmaW5lIEJVSUxEX0JVR19PTihleHByKQotI2RlZmluZSBCVUlMRF9CVUdfT05fTk9UX1BPV0VS X09GXzIoZXhwcikKLQotLyoKLSAqIEV4cG9uZW50aWFsbHkgd2VpZ2h0ZWQgbW92aW5nIGF2ZXJh Z2UgKEVXTUEpCi0gKgotICogVGhpcyBpbXBsZW1lbnRzIGEgZml4ZWQtcHJlY2lzaW9uIEVXTUEg YWxnb3JpdGhtLCB3aXRoIGJvdGggdGhlCi0gKiBwcmVjaXNpb24gYW5kIGZhbGwtb2ZmIGNvZWZm aWNpZW50IGRldGVybWluZWQgYXQgY29tcGlsZS10aW1lCi0gKiBhbmQgYnVpbHQgaW50byB0aGUg Z2VuZXJhdGVkIGhlbHBlciBmdW50aW9ucy4KLSAqCi0gKiBUaGUgZmlyc3QgYXJndW1lbnQgdG8g dGhlIG1hY3JvIGlzIHRoZSBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkCi0gKiBmb3IgdGhlIHN0cnVj dCBhbmQgaGVscGVyIGZ1bmN0aW9ucy4KLSAqCi0gKiBUaGUgc2Vjb25kIGFyZ3VtZW50LCB0aGUg cHJlY2lzaW9uLCBleHByZXNzZXMgaG93IG1hbnkgYml0cyBhcmUKLSAqIHVzZWQgZm9yIHRoZSBm cmFjdGlvbmFsIHBhcnQgb2YgdGhlIGZpeGVkLXByZWNpc2lvbiB2YWx1ZXMuCi0gKgotICogVGhl IHRoaXJkIGFyZ3VtZW50LCB0aGUgd2VpZ2h0IHJlY2lwcm9jYWwsIGRldGVybWluZXMgaG93IHRo ZQotICogbmV3IHZhbHVlcyB3aWxsIGJlIHdlaWdoZWQgdnMuIHRoZSBvbGQgc3RhdGUsIG5ldyB2 YWx1ZXMgd2lsbAotICogZ2V0IHdlaWdodCAxL3dlaWdodF9yY3AgYW5kIG9sZCB2YWx1ZXMgMS0x L3dlaWdodF9yY3AuIE5vdGUKLSAqIHRoYXQgdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHBvd2Vy IG9mIHR3byBmb3IgZWZmaWNpZW5jeS4KLSAqLwotCi0jZGVmaW5lIERFQ0xBUkVfRVdNQShULCBu YW1lLCBfcHJlY2lzaW9uLCBfd2VpZ2h0X3JjcCkJCQlcCi0Jc3RydWN0IGV3bWFfIyNuYW1lIHsJ CQkJCQlcCi0JCVQgaW50ZXJuYWw7CQkJCQlcCi0JfTsJCQkJCQkJCVwKLQlzdGF0aWMgaW5saW5l IHZvaWQgZXdtYV8jI25hbWUjI19pbml0KHN0cnVjdCBld21hXyMjbmFtZSAqZSkJXAotCXsJCQkJ CQkJCVwKLQkJQlVJTERfQlVHX09OKCFfX2J1aWx0aW5fY29uc3RhbnRfcChfcHJlY2lzaW9uKSk7 CVwKLQkJQlVJTERfQlVHX09OKCFfX2J1aWx0aW5fY29uc3RhbnRfcChfd2VpZ2h0X3JjcCkpOwlc Ci0JCS8qCQkJCQkJCVwKLQkJICogRXZlbiBpZiB5b3Ugd2FudCB0byBmZWVkIGl0IGp1c3QgMC8x IHlvdSBzaG91bGQgaGF2ZQlcCi0JCSAqIHNvbWUgYml0cyBmb3IgdGhlIG5vbi1mcmFjdGlvbmFs IHBhcnQuLi4JCVwKLQkJICovCQkJCQkJCVwKLQkJQlVJTERfQlVHX09OKChfcHJlY2lzaW9uKSA+ IDMwKTsJCQlcCi0JCUJVSUxEX0JVR19PTl9OT1RfUE9XRVJfT0ZfMihfd2VpZ2h0X3JjcCk7CQlc Ci0JCWUtPmludGVybmFsID0gMDsJCQkJCVwKLQl9CQkJCQkJCQlcCi0Jc3RhdGljIGlubGluZSBU CQkJCQkJCVwKLQlld21hXyMjbmFtZSMjX3JlYWQoc3RydWN0IGV3bWFfIyNuYW1lICplKQkJCVwK LQl7CQkJCQkJCQlcCi0JCUJVSUxEX0JVR19PTighX19idWlsdGluX2NvbnN0YW50X3AoX3ByZWNp c2lvbikpOwlcCi0JCUJVSUxEX0JVR19PTighX19idWlsdGluX2NvbnN0YW50X3AoX3dlaWdodF9y Y3ApKTsJXAotCQlCVUlMRF9CVUdfT04oKF9wcmVjaXNpb24pID4gMzApOwkJCVwKLQkJQlVJTERf QlVHX09OX05PVF9QT1dFUl9PRl8yKF93ZWlnaHRfcmNwKTsJCVwKLQkJcmV0dXJuIGUtPmludGVy bmFsID4+IChfcHJlY2lzaW9uKTsJCQlcCi0JfQkJCQkJCQkJXAotCXN0YXRpYyBpbmxpbmUgdm9p ZCBld21hXyMjbmFtZSMjX2FkZChzdHJ1Y3QgZXdtYV8jI25hbWUgKmUsCVwKLQkJCQkJICAgICBU IHZhbCkJCQlcCi0JewkJCQkJCQkJXAotCQljb25zdCBUIHdlaWdodF9yY3AgPSBpbG9nMihfd2Vp Z2h0X3JjcCk7CQlcCi0JCWNvbnN0IFQgcHJlY2lzaW9uID0gX3ByZWNpc2lvbjsJCQkJXAotCQlU IGludGVybmFsID0gZS0+aW50ZXJuYWw7CQkJCVwKLQkJCQkJCQkJCVwKLQkJQlVJTERfQlVHX09O KCFfX2J1aWx0aW5fY29uc3RhbnRfcChfcHJlY2lzaW9uKSk7CVwKLQkJQlVJTERfQlVHX09OKCFf X2J1aWx0aW5fY29uc3RhbnRfcChfd2VpZ2h0X3JjcCkpOwlcCi0JCUJVSUxEX0JVR19PTigoX3By ZWNpc2lvbikgPiAzMCk7CQkJXAotCQlCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIoX3dlaWdo dF9yY3ApOwkJXAotCQkJCQkJCQkJXAotCQllLT5pbnRlcm5hbCA9IGludGVybmFsID8JCQkJXAot CQkJKCgoaW50ZXJuYWwgPDwgd2VpZ2h0X3JjcCkgLSBpbnRlcm5hbCkgKwlcCi0JCQkJKHZhbCA8 PCBwcmVjaXNpb24pKSA+PiB3ZWlnaHRfcmNwIDoJXAotCQkJKHZhbCA8PCBwcmVjaXNpb24pOwkJ CQlcCi0JfQotCi0jZW5kaWYgLyogRVdNQV9IICovCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL2dl bV93c2ltLmMgYi9iZW5jaG1hcmtzL2dlbV93c2ltLmMKaW5kZXggYWQ0ZWRiOTM2OTIwLi41Y2M3 MWM1NmZlNmUgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvZ2VtX3dzaW0uYworKysgYi9iZW5jaG1h cmtzL2dlbV93c2ltLmMKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlICJzd19zeW5jLmgiCiAj aW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgogCi0jaW5jbHVkZSAiZXdtYS5oIgogI2luY2x1ZGUg Imk5MTUvZ2VtX2VuZ2luZV90b3BvbG9neS5oIgogCiBlbnVtIGludGVsX2VuZ2luZV9pZCB7CkBA IC0xNTQsMjEgKzE1MywxMiBAQCBzdHJ1Y3Qgd19zdGVwCiAKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyIGViOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpvYmo7 Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jWzVdOworCXN0cnVj dCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1sxXTsKIAl1bnNpZ25lZCBsb25n IGJiX3N6OwogCXVpbnQzMl90IGJiX2hhbmRsZTsKLQl1aW50MzJfdCAqc2Vxbm9fdmFsdWU7Ci0J dWludDMyX3QgKnNlcW5vX2FkZHJlc3M7Ci0JdWludDMyX3QgKnJ0MF92YWx1ZTsKLQl1aW50MzJf dCAqcnQwX2FkZHJlc3M7Ci0JdWludDMyX3QgKnJ0MV9hZGRyZXNzOwotCXVpbnQzMl90ICpsYXRj aF92YWx1ZTsKLQl1aW50MzJfdCAqbGF0Y2hfYWRkcmVzczsKIAl1aW50MzJfdCAqcmVjdXJzaXZl X2JiX3N0YXJ0OwogfTsKIAotREVDTEFSRV9FV01BKHVpbnQ2NF90LCBydCwgNCwgMikKLQogc3Ry dWN0IGN0eCB7CiAJdWludDMyX3QgaWQ7CiAJaW50IHByaW9yaXR5OwpAQCAtMTc2LDkgKzE2Niw3 IEBAIHN0cnVjdCBjdHggewogCWVudW0gaW50ZWxfZW5naW5lX2lkICplbmdpbmVfbWFwOwogCXVu c2lnbmVkIGludCBib25kX2NvdW50OwogCXN0cnVjdCBib25kICpib25kczsKLQlib29sIHRhcmdl dHNfaW5zdGFuY2U7Ci0JYm9vbCB3YW50c19iYWxhbmNlOwotCXVuc2lnbmVkIGludCBzdGF0aWNf dmNzOworCWJvb2wgbG9hZF9iYWxhbmNlOwogCXVpbnQ2NF90IHNzZXU7CiB9OwogCkBAIC0xOTQs MTMgKzE4MiwxMSBAQCBzdHJ1Y3Qgd29ya2xvYWQKIAlwdGhyZWFkX3QgdGhyZWFkOwogCWJvb2wg cnVuOwogCWJvb2wgYmFja2dyb3VuZDsKLQljb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIg KmJhbGFuY2VyOwogCXVuc2lnbmVkIGludCByZXBlYXQ7CiAJdW5zaWduZWQgaW50IGZsYWdzOwog CWJvb2wgcHJpbnRfc3RhdHM7CiAKIAl1aW50MzJfdCBiYl9wcm5nOwotCXVpbnQzMl90IHBybmc7 CiAKIAlzdHJ1Y3QgdGltZXNwZWMgcmVwZWF0X3N0YXJ0OwogCkBAIC0yMTAsNzMgKzE5NiwyNSBA QCBzdHJ1Y3Qgd29ya2xvYWQKIAlpbnQgc3luY190aW1lbGluZTsKIAl1aW50MzJfdCBzeW5jX3Nl cW5vOwogCi0JdWludDMyX3Qgc2Vxbm9bTlVNX0VOR0lORVNdOwotCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY19vYmplY3QyIHN0YXR1c19vYmplY3RbMl07Ci0JdWludDMyX3QgKnN0YXR1c19wYWdl OwotCXVpbnQzMl90ICpzdGF0dXNfY3M7Ci0JdW5zaWduZWQgaW50IHZjc19ycjsKLQotCXVuc2ln bmVkIGxvbmcgcWRfc3VtW05VTV9FTkdJTkVTXTsKLQl1bnNpZ25lZCBsb25nIG5yX2JiW05VTV9F TkdJTkVTXTsKLQogCXN0cnVjdCBpZ3RfbGlzdF9oZWFkIHJlcXVlc3RzW05VTV9FTkdJTkVTXTsK IAl1bnNpZ25lZCBpbnQgbnJlcXVlc3RbTlVNX0VOR0lORVNdOwotCi0Jc3RydWN0IHdvcmtsb2Fk ICpnbG9iYWxfd3JrOwotCWNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqZ2xvYmFsX2Jh bGFuY2VyOwotCXB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKLQotCXVuaW9uIHsKLQkJc3RydWN0IHJ0 YXZnIHsKLQkJCXN0cnVjdCBld21hX3J0IGF2Z1tOVU1fRU5HSU5FU107Ci0JCQl1aW50MzJfdCBs YXN0W05VTV9FTkdJTkVTXTsKLQkJfSBydDsKLQl9OwotCi0Jc3RydWN0IGJ1c3lfYmFsYW5jZXIg ewotCQlpbnQgZmQ7Ci0JCWJvb2wgZmlyc3Q7Ci0JCXVuc2lnbmVkIGludCBudW1fZW5naW5lczsK LQkJdW5zaWduZWQgaW50IGVuZ2luZV9tYXBbTlVNX0VOR0lORVNdOwotCQl1aW50NjRfdCB0X3By ZXY7Ci0JCXVpbnQ2NF90IHByZXZbTlVNX0VOR0lORVNdOwotCQlkb3VibGUgYnVzeVtOVU1fRU5H SU5FU107Ci0JfSBidXN5X2JhbGFuY2VyOwogfTsKIAotc3RydWN0IGludGVsX21taW9fZGF0YSBt bWlvX2RhdGE7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5vcF9jYWxpYnJhdGlvbl91cyA9 IDEwMDA7CiBzdGF0aWMgYm9vbCBoYXNfbm9wX2NhbGlicmF0aW9uID0gZmFsc2U7CiBzdGF0aWMg Ym9vbCBzZXF1ZW50aWFsID0gdHJ1ZTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBtYXN0ZXJfcHJu ZzsKIAotc3RhdGljIHVuc2lnbmVkIGludCBjb250ZXh0X3Zjc19ycjsKLQogc3RhdGljIGludCB2 ZXJib3NlID0gMTsKIHN0YXRpYyBpbnQgZmQ7CiBzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dlbV9j b250ZXh0X3BhcmFtX3NzZXUgZGV2aWNlX3NzZXUgPSB7CiAJLnNsaWNlX21hc2sgPSAtMSAvKiBG b3JjZSByZWFkIG9uIGZpcnN0IHVzZS4gKi8KIH07CiAKLSNkZWZpbmUgU1dBUFZDUwkJKDE8PDAp Ci0jZGVmaW5lIFNFUU5PCQkoMTw8MSkKLSNkZWZpbmUgQkFMQU5DRQkJKDE8PDIpCi0jZGVmaW5l IFJUCQkoMTw8MykKLSNkZWZpbmUgVkNTMlJFTUFQCSgxPDw0KQotI2RlZmluZSBJTklUVkNTUlIJ KDE8PDUpCi0jZGVmaW5lIFNZTkNFRENMSUVOVFMJKDE8PDYpCi0jZGVmaW5lIEhFQVJUQkVBVAko MTw8NykKLSNkZWZpbmUgR0xPQkFMX0JBTEFOQ0UJKDE8PDgpCi0jZGVmaW5lIERFUFNZTkMJCSgx PDw5KQotI2RlZmluZSBJOTE1CQkoMTw8MTApCi0jZGVmaW5lIFNTRVUJCSgxPDwxMSkKLQotI2Rl ZmluZSBTRVFOT19JRFgoZW5naW5lKSAoKGVuZ2luZSkgKiAxNikKLSNkZWZpbmUgU0VRTk9fT0ZG U0VUKGVuZ2luZSkgKFNFUU5PX0lEWChlbmdpbmUpICogc2l6ZW9mKHVpbnQzMl90KSkKLQotI2Rl ZmluZSBSQ1NfVElNRVNUQU1QICgweDIwMDAgKyAweDM1OCkKLSNkZWZpbmUgUkVHKHgpICh2b2xh dGlsZSB1aW50MzJfdCAqKSgodm9sYXRpbGUgY2hhciAqKWlndF9nbG9iYWxfbW1pbyArIHgpCisj ZGVmaW5lIFNZTkNFRENMSUVOVFMJKDE8PDEpCisjZGVmaW5lIERFUFNZTkMJCSgxPDwyKQorI2Rl ZmluZSBTU0VVCQkoMTw8MykKIAogc3RhdGljIGNvbnN0IGNoYXIgKnJpbmdfc3RyX21hcFtOVU1f RU5HSU5FU10gPSB7CiAJW0RFRkFVTFRdID0gIkRFRkFVTFQiLApAQCAtNTc4LDI2ICs1MTYsNiBA QCBzdGF0aWMgdW5zaWduZWQgaW50IG51bV9lbmdpbmVzX2luX2NsYXNzKGVudW0gaW50ZWxfZW5n aW5lX2lkIGNsYXNzKQogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHZvaWQKLWZpbGxfZW5n aW5lc19jbGFzcyhzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAotCQkgICBl bnVtIGludGVsX2VuZ2luZV9pZCBjbGFzcykKLXsKLQl1bnNpZ25lZCBpbnQgaSwgaiA9IDA7Ci0K LQlpZ3RfYXNzZXJ0KGNsYXNzID09IFZDUyk7Ci0KLQlxdWVyeV9lbmdpbmVzKCk7Ci0KLQlmb3Ig KGkgPSAwOyBpIDwgX19udW1fZW5naW5lczsgaSsrKSB7Ci0JCWlmIChfX2VuZ2luZXNbaV0uZW5n aW5lX2NsYXNzICE9IEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPKQotCQkJY29udGludWU7Ci0KLQkJ Y2lbal0uZW5naW5lX2NsYXNzID0gX19lbmdpbmVzW2ldLmVuZ2luZV9jbGFzczsKLQkJY2lbal0u ZW5naW5lX2luc3RhbmNlID0gX19lbmdpbmVzW2ldLmVuZ2luZV9pbnN0YW5jZTsKLQkJaisrOwot CX0KLX0KLQogc3RhdGljIHZvaWQKIGZpbGxfZW5naW5lc19pZF9jbGFzcyhlbnVtIGludGVsX2Vu Z2luZV9pZCAqbGlzdCwKIAkJICAgICAgZW51bSBpbnRlbF9lbmdpbmVfaWQgY2xhc3MpCkBAIC03 NDQsNyArNjYyLDYgQEAgcGFyc2Vfd29ya2xvYWQoc3RydWN0IHdfYXJnICphcmcsIHVuc2lnbmVk IGludCBmbGFncywgc3RydWN0IHdvcmtsb2FkICphcHBfdykKIAljaGFyICpfdG9rZW4sICp0b2tl biwgKnRjdHggPSBOVUxMLCAqdHN0YXJ0ID0gZGVzYzsKIAljaGFyICpmaWVsZCwgKmZjdHggPSBO VUxMLCAqZnN0YXJ0OwogCXN0cnVjdCB3X3N0ZXAgc3RlcCwgKnN0ZXBzID0gTlVMTDsKLQlib29s IGJjc191c2VkID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IHZhbGlkOwogCWludCBpLCBqLCB0bXA7 CiAKQEAgLTk2Miw5ICs4NzksNiBAQCBwYXJzZV93b3JrbG9hZChzdHJ1Y3Qgd19hcmcgKmFyZywg dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3Qgd29ya2xvYWQgKmFwcF93KQogCQkJdmFsaWQrKzsK IAogCQkJc3RlcC5lbmdpbmUgPSBpOwotCi0JCQlpZiAoc3RlcC5lbmdpbmUgPT0gQkNTKQotCQkJ CWJjc191c2VkID0gdHJ1ZTsKIAkJfQogCiAJCWlmICgoZmllbGQgPSBzdHJ0b2tfcihmc3RhcnQs ICIuIiwgJmZjdHgpKSkgewpAQCAtMTA4OSw5ICsxMDAzLDYgQEAgYWRkX3N0ZXA6CiAJCX0KIAl9 CiAKLQlpZiAoYmNzX3VzZWQgJiYgKGZsYWdzICYgVkNTMlJFTUFQKSAmJiB2ZXJib3NlKQotCQlw cmludGYoIkJDUyB1c2FnZSBpbiB3b3JrbG9hZCB3aXRoIFZDUzIgcmVtYXBwaW5nIGVuYWJsZWQh XG4iKTsKLQogCXJldHVybiB3cms7CiB9CiAKQEAgLTExNDcsNyArMTA1OCw3IEBAIHN0YXRpYyB1 bnNpZ25lZCBpbnQgZ2V0X2R1cmF0aW9uKHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19z dGVwICp3KQogc3RhdGljIHN0cnVjdCBjdHggKgogX19nZXRfY3R4KHN0cnVjdCB3b3JrbG9hZCAq d3JrLCBjb25zdCBzdHJ1Y3Qgd19zdGVwICp3KQogewotCXJldHVybiAmd3JrLT5jdHhfbGlzdFt3 LT5jb250ZXh0ICogMl07CisJcmV0dXJuICZ3cmstPmN0eF9saXN0W3ctPmNvbnRleHRdOwogfQog CiBzdGF0aWMgdW5zaWduZWQgbG9uZwpAQCAtMTE3OSw4ICsxMDkwLDcgQEAgZ2V0X2JiX3N6KGNv bnN0IHN0cnVjdCB3X3N0ZXAgKncsIHVuc2lnbmVkIGludCBkdXJhdGlvbikKIAlyZXR1cm4gZDsK IH0KIAotc3RhdGljIHZvaWQKLWluaXRfYmIoc3RydWN0IHdfc3RlcCAqdywgdW5zaWduZWQgaW50 IGZsYWdzKQorc3RhdGljIHZvaWQgaW5pdF9iYihzdHJ1Y3Qgd19zdGVwICp3KQogewogCWNvbnN0 IHVuc2lnbmVkIGludCBhcmJfcGVyaW9kID0KIAkJCV9fZ2V0X2JiX3N6KHcsIHctPnByZWVtcHRf dXMpIC8gc2l6ZW9mKHVpbnQzMl90KTsKQEAgLTEyMDIsOCArMTExMiw3IEBAIGluaXRfYmIoc3Ry dWN0IHdfc3RlcCAqdywgdW5zaWduZWQgaW50IGZsYWdzKQogCW11bm1hcChwdHIsIG1tYXBfbGVu KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludAotdGVybWluYXRlX2JiKHN0cnVjdCB3X3N0ZXAg KncsIHVuc2lnbmVkIGludCBmbGFncykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGVybWluYXRlX2Ji KHN0cnVjdCB3X3N0ZXAgKncpCiB7CiAJY29uc3QgdWludDMyX3QgYmJlID0gMHhhIDw8IDIzOwog CXVuc2lnbmVkIGxvbmcgbW1hcF9zdGFydCwgbW1hcF9sZW47CkBAIC0xMjExLDEzICsxMTIwLDcg QEAgdGVybWluYXRlX2JiKHN0cnVjdCB3X3N0ZXAgKncsIHVuc2lnbmVkIGludCBmbGFncykKIAl1 bnNpZ25lZCBpbnQgciA9IDA7CiAJdWludDMyX3QgKnB0ciwgKmNzOwogCi0JaWd0X2Fzc2VydCgo KGZsYWdzICYgUlQpICYmIChmbGFncyAmIFNFUU5PKSkgfHwgIShmbGFncyAmIFJUKSk7Ci0KIAli YXRjaF9zdGFydCAtPSBzaXplb2YodWludDMyX3QpOyAvKiBiYmVuZCAqLwotCWlmIChmbGFncyAm IFNFUU5PKQotCQliYXRjaF9zdGFydCAtPSA0ICogc2l6ZW9mKHVpbnQzMl90KTsKLQlpZiAoZmxh Z3MgJiBSVCkKLQkJYmF0Y2hfc3RhcnQgLT0gMTIgKiBzaXplb2YodWludDMyX3QpOwogCiAJaWYg KHctPnVuYm91bmRfZHVyYXRpb24pCiAJCWJhdGNoX3N0YXJ0IC09IDQgKiBzaXplb2YodWludDMy X3QpOyAvKiBNSV9BUkJfQ0hLICsgTUlfQkFUQ0hfQlVGRkVSX1NUQVJUICovCkBAIC0xMjQyLDQ5 ICsxMTQ1LDYgQEAgdGVybWluYXRlX2JiKHN0cnVjdCB3X3N0ZXAgKncsIHVuc2lnbmVkIGludCBm bGFncykKIAkJKmNzKysgPSAwOwogCX0KIAotCWlmIChmbGFncyAmIFNFUU5PKSB7Ci0JCXctPnJl bG9jW3IrK10ub2Zmc2V0ID0gYmF0Y2hfc3RhcnQgKyBzaXplb2YodWludDMyX3QpOwotCQliYXRj aF9zdGFydCArPSA0ICogc2l6ZW9mKHVpbnQzMl90KTsKLQotCQkqY3MrKyA9IE1JX1NUT1JFX0RX T1JEX0lNTTsKLQkJdy0+c2Vxbm9fYWRkcmVzcyA9IGNzOwotCQkqY3MrKyA9IDA7Ci0JCSpjcysr ID0gMDsKLQkJdy0+c2Vxbm9fdmFsdWUgPSBjczsKLQkJKmNzKysgPSAwOwotCX0KLQotCWlmIChm bGFncyAmIFJUKSB7Ci0JCXctPnJlbG9jW3IrK10ub2Zmc2V0ID0gYmF0Y2hfc3RhcnQgKyBzaXpl b2YodWludDMyX3QpOwotCQliYXRjaF9zdGFydCArPSA0ICogc2l6ZW9mKHVpbnQzMl90KTsKLQot CQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKLQkJdy0+cnQwX2FkZHJlc3MgPSBjczsKLQkJ KmNzKysgPSAwOwotCQkqY3MrKyA9IDA7Ci0JCXctPnJ0MF92YWx1ZSA9IGNzOwotCQkqY3MrKyA9 IDA7Ci0KLQkJdy0+cmVsb2NbcisrXS5vZmZzZXQgPSBiYXRjaF9zdGFydCArIDIgKiBzaXplb2Yo dWludDMyX3QpOwotCQliYXRjaF9zdGFydCArPSA0ICogc2l6ZW9mKHVpbnQzMl90KTsKLQotCQkq Y3MrKyA9IDB4MjQgPDwgMjMgfCAyOyAvKiBNSV9TVE9SRV9SRUdfTUVNICovCi0JCSpjcysrID0g UkNTX1RJTUVTVEFNUDsKLQkJdy0+cnQxX2FkZHJlc3MgPSBjczsKLQkJKmNzKysgPSAwOwotCQkq Y3MrKyA9IDA7Ci0KLQkJdy0+cmVsb2NbcisrXS5vZmZzZXQgPSBiYXRjaF9zdGFydCArIHNpemVv Zih1aW50MzJfdCk7Ci0JCWJhdGNoX3N0YXJ0ICs9IDQgKiBzaXplb2YodWludDMyX3QpOwotCi0J CSpjcysrID0gTUlfU1RPUkVfRFdPUkRfSU1NOwotCQl3LT5sYXRjaF9hZGRyZXNzID0gY3M7Ci0J CSpjcysrID0gMDsKLQkJKmNzKysgPSAwOwotCQl3LT5sYXRjaF92YWx1ZSA9IGNzOwotCQkqY3Mr KyA9IDA7Ci0JfQotCiAJKmNzID0gYmJlOwogCiAJcmV0dXJuIHI7CkBAIC0xMzAxLDE3ICsxMTYx LDkgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBlYl9lbmdpbmVfbWFwW05VTV9FTkdJTkVT XSA9IHsKIH07CiAKIHN0YXRpYyB2b2lkCi1lYl9zZXRfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY2J1ZmZlcjIgKmViLAotCSAgICAgIGVudW0gaW50ZWxfZW5naW5lX2lkIGVuZ2luZSwK LQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCitlYl9zZXRfZW5naW5lKHN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY2J1ZmZlcjIgKmViLCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUpCiB7Ci0J aWYgKGVuZ2luZSA9PSBWQ1MyICYmIChmbGFncyAmIFZDUzJSRU1BUCkpCi0JCWVuZ2luZSA9IEJD UzsKLQotCWlmICgoZmxhZ3MgJiBJOTE1KSAmJiBlbmdpbmUgPT0gVkNTKQotCQllYi0+ZmxhZ3Mg PSAwOwotCWVsc2UKLQkJZWItPmZsYWdzID0gZWJfZW5naW5lX21hcFtlbmdpbmVdOworCWViLT5m bGFncyA9IGViX2VuZ2luZV9tYXBbZW5naW5lXTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludApA QCAtMTMyNCwyMCArMTE3NiwyMCBAQCBmaW5kX2VuZ2luZV9pbl9tYXAoc3RydWN0IGN0eCAqY3R4 LCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUpCiAJCQlyZXR1cm4gaSArIDE7CiAJfQogCi0J aWd0X2Fzc2VydChjdHgtPndhbnRzX2JhbGFuY2UpOworCWlndF9hc3NlcnQoY3R4LT5sb2FkX2Jh bGFuY2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZAogZWJfdXBkYXRlX2ZsYWdzKHN0 cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVwICp3LAotCQllbnVtIGludGVsX2VuZ2lu ZV9pZCBlbmdpbmUsIHVuc2lnbmVkIGludCBmbGFncykKKwkJZW51bSBpbnRlbF9lbmdpbmVfaWQg ZW5naW5lKQogewogCXN0cnVjdCBjdHggKmN0eCA9IF9fZ2V0X2N0eCh3cmssIHcpOwogCiAJaWYg KGN0eC0+ZW5naW5lX21hcCkKIAkJdy0+ZWIuZmxhZ3MgPSBmaW5kX2VuZ2luZV9pbl9tYXAoY3R4 LCBlbmdpbmUpOwogCWVsc2UKLQkJZWJfc2V0X2VuZ2luZSgmdy0+ZWIsIGVuZ2luZSwgZmxhZ3Mp OworCQllYl9zZXRfZW5naW5lKCZ3LT5lYiwgZW5naW5lKTsKIAogCXctPmViLmZsYWdzIHw9IEk5 MTVfRVhFQ19IQU5ETEVfTFVUOwogCXctPmViLmZsYWdzIHw9IEk5MTVfRVhFQ19OT19SRUxPQzsK QEAgLTEzNDcsMzIgKzExOTksMTggQEAgZWJfdXBkYXRlX2ZsYWdzKHN0cnVjdCB3b3JrbG9hZCAq d3JrLCBzdHJ1Y3Qgd19zdGVwICp3LAogCQl3LT5lYi5mbGFncyB8PSBJOTE1X0VYRUNfRkVOQ0Vf T1VUOwogfQogCi1zdGF0aWMgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKgotZ2V0 X3N0YXR1c19vYmplY3RzKHN0cnVjdCB3b3JrbG9hZCAqd3JrKQotewotCWlmICh3cmstPmZsYWdz ICYgR0xPQkFMX0JBTEFOQ0UpCi0JCXJldHVybiB3cmstPmdsb2JhbF93cmstPnN0YXR1c19vYmpl Y3Q7Ci0JZWxzZQotCQlyZXR1cm4gd3JrLT5zdGF0dXNfb2JqZWN0OwotfQotCiBzdGF0aWMgdWlu dDMyX3QKIGdldF9jdHhpZChzdHJ1Y3Qgd29ya2xvYWQgKndyaywgc3RydWN0IHdfc3RlcCAqdykK IHsKLQlzdHJ1Y3QgY3R4ICpjdHggPSBfX2dldF9jdHgod3JrLCB3KTsKLQotCWlmIChjdHgtPnRh cmdldHNfaW5zdGFuY2UgJiYgY3R4LT53YW50c19iYWxhbmNlICYmIHctPmVuZ2luZSA9PSBWQ1Mp Ci0JCXJldHVybiB3cmstPmN0eF9saXN0W3ctPmNvbnRleHQgKiAyICsgMV0uaWQ7Ci0JZWxzZQot CQlyZXR1cm4gd3JrLT5jdHhfbGlzdFt3LT5jb250ZXh0ICogMl0uaWQ7CisJcmV0dXJuIHdyay0+ Y3R4X2xpc3Rbdy0+Y29udGV4dF0uaWQ7CiB9CiAKIHN0YXRpYyB2b2lkCi1hbGxvY19zdGVwX2Jh dGNoKHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVwICp3LCB1bnNpZ25lZCBpbnQg ZmxhZ3MpCithbGxvY19zdGVwX2JhdGNoKHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19z dGVwICp3KQogewogCWVudW0gaW50ZWxfZW5naW5lX2lkIGVuZ2luZSA9IHctPmVuZ2luZTsKIAl1 bnNpZ25lZCBpbnQgaiA9IDA7Ci0JdW5zaWduZWQgaW50IG5yX29iaiA9IDMgKyB3LT5kYXRhX2Rl cHMubnI7CisJdW5zaWduZWQgaW50IG5yX29iaiA9IDIgKyB3LT5kYXRhX2RlcHMubnI7CiAJdW5z aWduZWQgaW50IGk7CiAKIAl3LT5vYmogPSBjYWxsb2MobnJfb2JqLCBzaXplb2YoKnctPm9iaikp OwpAQCAtMTM4MywxMSArMTIyMSw2IEBAIGFsbG9jX3N0ZXBfYmF0Y2goc3RydWN0IHdvcmtsb2Fk ICp3cmssIHN0cnVjdCB3X3N0ZXAgKncsIHVuc2lnbmVkIGludCBmbGFncykKIAlqKys7CiAJaWd0 X2Fzc2VydChqIDwgbnJfb2JqKTsKIAotCWlmIChmbGFncyAmIFNFUU5PKSB7Ci0JCXctPm9ialtq KytdID0gZ2V0X3N0YXR1c19vYmplY3RzKHdyaylbMF07Ci0JCWlndF9hc3NlcnQoaiA8IG5yX29i aik7Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IHctPmRhdGFfZGVwcy5ucjsgaSsrKSB7CiAJCWln dF9hc3NlcnQody0+ZGF0YV9kZXBzLmxpc3RbaV0gPD0gMCk7CiAJCWlmICh3LT5kYXRhX2RlcHMu bGlzdFtpXSkgewpAQCAtMTQxMCwyNiArMTI0MywyMCBAQCBhbGxvY19zdGVwX2JhdGNoKHN0cnVj dCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVwICp3LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJ CXctPmJiX3N6ID0gZ2V0X2JiX3N6KHcsIHctPmR1cmF0aW9uLm1heCk7CiAKIAl3LT5iYl9oYW5k bGUgPSB3LT5vYmpbal0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgdy0+YmJfc3ogKyAody0+dW5i b3VuZF9kdXJhdGlvbiA/IDQwOTYgOiAwKSk7Ci0JaW5pdF9iYih3LCBmbGFncyk7Ci0Jdy0+b2Jq W2pdLnJlbG9jYXRpb25fY291bnQgPSB0ZXJtaW5hdGVfYmIodywgZmxhZ3MpOworCWluaXRfYmIo dyk7CisJdy0+b2JqW2pdLnJlbG9jYXRpb25fY291bnQgPSB0ZXJtaW5hdGVfYmIodyk7CiAKIAlp ZiAody0+b2JqW2pdLnJlbG9jYXRpb25fY291bnQpIHsKKwkJaWd0X2Fzc2VydCh3LT51bmJvdW5k X2R1cmF0aW9uKTsKIAkJdy0+b2JqW2pdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnct PnJlbG9jKTsKLQkJZm9yIChpID0gMDsgaSA8IHctPm9ialtqXS5yZWxvY2F0aW9uX2NvdW50OyBp KyspCi0JCQl3LT5yZWxvY1tpXS50YXJnZXRfaGFuZGxlID0gMTsKLQkJaWYgKHctPnVuYm91bmRf ZHVyYXRpb24pCi0JCQl3LT5yZWxvY1swXS50YXJnZXRfaGFuZGxlID0gajsKKwkJdy0+cmVsb2Nb MF0udGFyZ2V0X2hhbmRsZSA9IGo7CiAJfQogCiAJdy0+ZWIuYnVmZmVyc19wdHIgPSB0b191c2Vy X3BvaW50ZXIody0+b2JqKTsKIAl3LT5lYi5idWZmZXJfY291bnQgPSBqICsgMTsKIAl3LT5lYi5y c3ZkMSA9IGdldF9jdHhpZCh3cmssIHcpOwogCi0JaWYgKGZsYWdzICYgU1dBUFZDUyAmJiBlbmdp bmUgPT0gVkNTMSkKLQkJZW5naW5lID0gVkNTMjsKLQllbHNlIGlmIChmbGFncyAmIFNXQVBWQ1Mg JiYgZW5naW5lID09IFZDUzIpCi0JCWVuZ2luZSA9IFZDUzE7Ci0JZWJfdXBkYXRlX2ZsYWdzKHdy aywgdywgZW5naW5lLCBmbGFncyk7CisJZWJfdXBkYXRlX2ZsYWdzKHdyaywgdywgZW5naW5lKTsK ICNpZmRlZiBERUJVRwogCXByaW50ZigiJXU6ICV1OnwiLCB3LT5pZHgsIHctPmViLmJ1ZmZlcl9j b3VudCk7CiAJZm9yIChpID0gMDsgaSA8PSBqOyBpKyspCkBAIC0xNTI4LDcgKzEzNTUsNyBAQCBz ZXRfY3R4X3NzZXUoc3RydWN0IGN0eCAqY3R4LCB1aW50NjRfdCBzbGljZV9tYXNrKQogCWlmIChz bGljZV9tYXNrID09IC0xKQogCQlzbGljZV9tYXNrID0gZGV2aWNlX3NzZXUuc2xpY2VfbWFzazsK IAotCWlmIChjdHgtPmVuZ2luZV9tYXAgJiYgY3R4LT53YW50c19iYWxhbmNlKSB7CisJaWYgKGN0 eC0+ZW5naW5lX21hcCAmJiBjdHgtPmxvYWRfYmFsYW5jZSkgewogCQlzc2V1LmZsYWdzID0gSTkx NV9DT05URVhUX1NTRVVfRkxBR19FTkdJTkVfSU5ERVg7CiAJCXNzZXUuZW5naW5lLmVuZ2luZV9j bGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQ7CiAJCXNzZXUuZW5naW5lLmVuZ2luZV9p bnN0YW5jZSA9IDA7CkBAIC0xNTY2LDUxICsxMzkzLDIyIEBAIHN0YXRpYyBzaXplX3Qgc2l6ZW9m X2VuZ2luZXNfYm9uZChpbnQgY291bnQpCiAKICNkZWZpbmUgYWxsb2NhMChzeikgKHsgc2l6ZV90 IHN6X18gPSAoc3opOyBtZW1zZXQoYWxsb2NhKHN6X18pLCAwLCBzel9fKTsgfSkKIAotc3RhdGlj IGludAotcHJlcGFyZV93b3JrbG9hZCh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCB3b3JrbG9hZCAq d3JrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IHByZXBhcmVfd29ya2xvYWQodW5z aWduZWQgaW50IGlkLCBzdHJ1Y3Qgd29ya2xvYWQgKndyaykKIHsKLQl1bnNpZ25lZCBpbnQgY3R4 X3ZjczsKKwl1aW50MzJfdCBzaGFyZV92bSA9IDA7CiAJaW50IG1heF9jdHggPSAtMTsKIAlzdHJ1 Y3Qgd19zdGVwICp3OwogCWludCBpLCBqOwogCiAJd3JrLT5pZCA9IGlkOwotCXdyay0+cHJuZyA9 IHJhbmQoKTsKIAl3cmstPmJiX3BybmcgPSAod3JrLT5mbGFncyAmIFNZTkNFRENMSUVOVFMpID8g bWFzdGVyX3BybmcgOiByYW5kKCk7CiAJd3JrLT5ydW4gPSB0cnVlOwogCi0JY3R4X3ZjcyA9ICAw OwotCWlmIChmbGFncyAmIElOSVRWQ1NSUikKLQkJY3R4X3ZjcyA9IGlkICYgMTsKLQl3cmstPnZj c19yciA9IGN0eF92Y3M7Ci0KLQlpZiAoZmxhZ3MgJiBHTE9CQUxfQkFMQU5DRSkgewotCQlpbnQg cmV0ID0gcHRocmVhZF9tdXRleF9pbml0KCZ3cmstPm11dGV4LCBOVUxMKTsKLQkJaWd0X2Fzc2Vy dChyZXQgPT0gMCk7Ci0JfQotCi0JaWYgKGZsYWdzICYgU0VRTk8pIHsKLQkJaWYgKCEoZmxhZ3Mg JiBHTE9CQUxfQkFMQU5DRSkgfHwgaWQgPT0gMCkgewotCQkJdWludDMyX3QgaGFuZGxlOwotCi0J CQloYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKLQkJCWdlbV9zZXRfY2FjaGluZyhmZCwg aGFuZGxlLCBJOTE1X0NBQ0hJTkdfQ0FDSEVEKTsKLQkJCXdyay0+c3RhdHVzX29iamVjdFswXS5o YW5kbGUgPSBoYW5kbGU7Ci0JCQl3cmstPnN0YXR1c19wYWdlID0gZ2VtX21tYXBfX2NwdShmZCwg aGFuZGxlLCAwLCA0MDk2LAotCQkJCQkJCSBQUk9UX1JFQUQpOwotCi0JCQloYW5kbGUgPSBnZW1f Y3JlYXRlKGZkLCA0MDk2KTsKLQkJCXdyay0+c3RhdHVzX29iamVjdFsxXS5oYW5kbGUgPSBoYW5k bGU7Ci0JCQl3cmstPnN0YXR1c19jcyA9IGdlbV9tbWFwX193YyhmZCwgaGFuZGxlLAotCQkJCQkJ ICAgICAgMCwgNDA5NiwgUFJPVF9XUklURSk7Ci0JCX0KLQl9Ci0KIAkvKgogCSAqIFByZS1zY2Fu IHdvcmtsb2FkIHN0ZXBzIHRvIGFsbG9jYXRlIGNvbnRleHQgbGlzdCBzdG9yYWdlLgogCSAqLwog CWZvciAoaSA9IDAsIHcgPSB3cmstPnN0ZXBzOyBpIDwgd3JrLT5ucl9zdGVwczsgaSsrLCB3Kysp IHsKLQkJaW50IGN0eCA9IHctPmNvbnRleHQgKiAyICsgMTsgLyogT2RkIHNsb3RzIGFyZSBzcGVj aWFsLiAqLworCQlpbnQgY3R4ID0gdy0+Y29udGV4dCArIDE7CiAJCWludCBkZWx0YTsKIAogCQl3 LT53cmsgPSB3cms7CkBAIC0xNjMwLDI3ICsxNDI4LDE2IEBAIHByZXBhcmVfd29ya2xvYWQodW5z aWduZWQgaW50IGlkLCBzdHJ1Y3Qgd29ya2xvYWQgKndyaywgdW5zaWduZWQgaW50IGZsYWdzKQog CX0KIAogCS8qCi0JICogSWRlbnRpZnkgaWYgY29udGV4dHMgdGFyZ2V0IHNwZWNpZmljIGVuZ2lu ZSBpbnN0YW5jZXMgYW5kIGlmIHRoZXkKLQkgKiB3YW50IHRvIGJlIGJhbGFuY2VkLgotCSAqCiAJ ICogVHJhbnNmZXIgb3ZlciBlbmdpbmUgbWFwIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgd29ya2xv YWQgc3RlcC4KIAkgKi8KLQlmb3IgKGogPSAwOyBqIDwgd3JrLT5ucl9jdHhzOyBqICs9IDIpIHsK Kwlmb3IgKGogPSAwOyBqIDwgd3JrLT5ucl9jdHhzOyBqKyspIHsKIAkJc3RydWN0IGN0eCAqY3R4 ID0gJndyay0+Y3R4X2xpc3Rbal07CiAKLQkJYm9vbCB0YXJnZXRzID0gZmFsc2U7Ci0JCWJvb2wg YmFsYW5jZSA9IGZhbHNlOwotCiAJCWZvciAoaSA9IDAsIHcgPSB3cmstPnN0ZXBzOyBpIDwgd3Jr LT5ucl9zdGVwczsgaSsrLCB3KyspIHsKLQkJCWlmICh3LT5jb250ZXh0ICE9IChqIC8gMikpCisJ CQlpZiAody0+Y29udGV4dCAhPSBqKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAody0+dHlwZSA9 PSBCQVRDSCkgewotCQkJCWlmICh3LT5lbmdpbmUgPT0gVkNTKQotCQkJCQliYWxhbmNlID0gdHJ1 ZTsKLQkJCQllbHNlCi0JCQkJCXRhcmdldHMgPSB0cnVlOwotCQkJfSBlbHNlIGlmICh3LT50eXBl ID09IEVOR0lORV9NQVApIHsKKwkJCWlmICh3LT50eXBlID09IEVOR0lORV9NQVApIHsKIAkJCQlj dHgtPmVuZ2luZV9tYXAgPSB3LT5lbmdpbmVfbWFwOwogCQkJCWN0eC0+ZW5naW5lX21hcF9jb3Vu dCA9IHctPmVuZ2luZV9tYXBfY291bnQ7CiAJCQl9IGVsc2UgaWYgKHctPnR5cGUgPT0gTE9BRF9C QUxBTkNFKSB7CkBAIC0xNjU4LDkgKzE0NDUsOSBAQCBwcmVwYXJlX3dvcmtsb2FkKHVuc2lnbmVk IGludCBpZCwgc3RydWN0IHdvcmtsb2FkICp3cmssIHVuc2lnbmVkIGludCBmbGFncykKIAkJCQkJ d3NpbV9lcnIoIkxvYWQgYmFsYW5jaW5nIG5lZWRzIGFuIGVuZ2luZSBtYXAhXG4iKTsKIAkJCQkJ cmV0dXJuIDE7CiAJCQkJfQotCQkJCWN0eC0+d2FudHNfYmFsYW5jZSA9IHctPmxvYWRfYmFsYW5j ZTsKKwkJCQljdHgtPmxvYWRfYmFsYW5jZSA9IHctPmxvYWRfYmFsYW5jZTsKIAkJCX0gZWxzZSBp ZiAody0+dHlwZSA9PSBCT05EKSB7Ci0JCQkJaWYgKCFjdHgtPndhbnRzX2JhbGFuY2UpIHsKKwkJ CQlpZiAoIWN0eC0+bG9hZF9iYWxhbmNlKSB7CiAJCQkJCXdzaW1fZXJyKCJFbmdpbmUgYm9uZHMg bmVlZCBsb2FkIGJhbGFuY2luZyBlbmdpbmUgbWFwIVxuIik7CiAJCQkJCXJldHVybiAxOwogCQkJ CX0KQEAgLTE2NzUsMTMzICsxNDYyLDUzIEBAIHByZXBhcmVfd29ya2xvYWQodW5zaWduZWQgaW50 IGlkLCBzdHJ1Y3Qgd29ya2xvYWQgKndyaywgdW5zaWduZWQgaW50IGZsYWdzKQogCQkJCQl3LT5i b25kX21hc3RlcjsKIAkJCX0KIAkJfQotCi0JCXdyay0+Y3R4X2xpc3Rbal0udGFyZ2V0c19pbnN0 YW5jZSA9IHRhcmdldHM7Ci0JCWlmIChmbGFncyAmIEk5MTUpCi0JCQl3cmstPmN0eF9saXN0W2pd LndhbnRzX2JhbGFuY2UgfD0gYmFsYW5jZTsKLQl9Ci0KLQkvKgotCSAqIEVuc3VyZSBWQ1MgaXMg bm90IGFsbG93ZWQgd2l0aCBlbmdpbmUgbWFwIGNvbnRleHRzLgotCSAqLwotCWZvciAoaiA9IDA7 IGogPCB3cmstPm5yX2N0eHM7IGogKz0gMikgewotCQlmb3IgKGkgPSAwLCB3ID0gd3JrLT5zdGVw czsgaSA8IHdyay0+bnJfc3RlcHM7IGkrKywgdysrKSB7Ci0JCQlpZiAody0+Y29udGV4dCAhPSAo aiAvIDIpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAody0+dHlwZSAhPSBCQVRDSCkKLQkJCQlj b250aW51ZTsKLQotCQkJaWYgKHdyay0+Y3R4X2xpc3Rbal0uZW5naW5lX21hcCAmJgotCQkJICAg ICF3cmstPmN0eF9saXN0W2pdLndhbnRzX2JhbGFuY2UgJiYKLQkJCSAgICAody0+ZW5naW5lID09 IFZDUyB8fCB3LT5lbmdpbmUgPT0gREVGQVVMVCkpIHsKLQkJCQl3c2ltX2VycigiQmF0Y2hlcyB0 YXJnZXR0aW5nIGVuZ2luZSBtYXBzIG11c3QgdXNlIGV4cGxpY2l0IGVuZ2luZXMhXG4iKTsKLQkJ CQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCX0KIAl9CiAKLQogCS8qCiAJICogQ3JlYXRlIGFuZCBjb25m aWd1cmUgY29udGV4dHMuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IHdyay0+bnJfY3R4czsgaSAr PSAyKSB7CisJZm9yIChpID0gMDsgaSA8IHdyay0+bnJfY3R4czsgaSsrKSB7CisJCXN0cnVjdCBk cm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGVfZXh0X3NldHBhcmFtIGV4dCA9IHsKKwkJCS5iYXNl Lm5hbWUgPSBJOTE1X0NPTlRFWFRfQ1JFQVRFX0VYVF9TRVRQQVJBTSwKKwkJCS5wYXJhbS5wYXJh bSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9WTSwKKwkJfTsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9j b250ZXh0X2NyZWF0ZV9leHQgYXJncyA9IHsgfTsKIAkJc3RydWN0IGN0eCAqY3R4ID0gJndyay0+ Y3R4X2xpc3RbaV07Ci0JCXVpbnQzMl90IGN0eF9pZCwgc2hhcmVfdm0gPSAwOworCQl1aW50MzJf dCBjdHhfaWQ7CiAKLQkJaWYgKGN0eC0+aWQpCi0JCQljb250aW51ZTsKKwkJaWd0X2Fzc2VydCgh Y3R4LT5pZCk7CiAKLQkJaWYgKChmbGFncyAmIEk5MTUpIHx8IGN0eC0+ZW5naW5lX21hcCkgewot CQkJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHRfc2V0cGFyYW0gZXh0ID0g ewotCQkJCS5iYXNlLm5hbWUgPSBJOTE1X0NPTlRFWFRfQ1JFQVRFX0VYVF9TRVRQQVJBTSwKLQkJ CQkucGFyYW0ucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fVk0sCisJCS8qIEZpbmQgZXhpc3Rp bmcgY29udGV4dCB0byBzaGFyZSBwcGd0dCB3aXRoLiAqLworCQlmb3IgKGogPSAwOyAhc2hhcmVf dm0gJiYgaiA8IHdyay0+bnJfY3R4czsgaisrKSB7CisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2Nv bnRleHRfcGFyYW0gcGFyYW0gPSB7CisJCQkJLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1ZN LAorCQkJCS5jdHhfaWQgPSB3cmstPmN0eF9saXN0W2pdLmlkLAogCQkJfTsKLQkJCXN0cnVjdCBk cm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGVfZXh0IGFyZ3MgPSB7IH07Ci0KLQkJCS8qIEZpbmQg ZXhpc3RpbmcgY29udGV4dCB0byBzaGFyZSBwcGd0dCB3aXRoLiAqLwotCQkJZm9yIChqID0gMDsg aiA8IHdyay0+bnJfY3R4czsgaisrKSB7Ci0JCQkJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0 X3BhcmFtIHBhcmFtID0gewotCQkJCQkucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fVk0sCi0J CQkJfTsKLQotCQkJCWlmICghd3JrLT5jdHhfbGlzdFtqXS5pZCkKLQkJCQkJY29udGludWU7Ci0K LQkJCQlwYXJhbS5jdHhfaWQgPSB3cmstPmN0eF9saXN0W2pdLmlkOwogCi0JCQkJZ2VtX2NvbnRl eHRfZ2V0X3BhcmFtKGZkLCAmcGFyYW0pOwotCQkJCWlndF9hc3NlcnQocGFyYW0udmFsdWUpOwot Ci0JCQkJc2hhcmVfdm0gPSBwYXJhbS52YWx1ZTsKLQotCQkJCWV4dC5wYXJhbS52YWx1ZSA9IHNo YXJlX3ZtOwotCQkJCWFyZ3MuZmxhZ3MgPQotCQkJCSAgICBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZM QUdTX1VTRV9FWFRFTlNJT05TOwotCQkJCWFyZ3MuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRl cigmZXh0KTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKCghY3R4LT5lbmdpbmVfbWFwICYm ICFjdHgtPnRhcmdldHNfaW5zdGFuY2UpIHx8Ci0JCQkgICAgKGN0eC0+ZW5naW5lX21hcCAmJiBj dHgtPndhbnRzX2JhbGFuY2UpKQotCQkJCWFyZ3MuZmxhZ3MgfD0KLQkJCQkgICAgIEk5MTVfQ09O VEVYVF9DUkVBVEVfRkxBR1NfU0lOR0xFX1RJTUVMSU5FOwotCi0JCQlkcm1Jb2N0bChmZCwgRFJN X0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfQ1JFQVRFX0VYVCwKLQkJCQkgJmFyZ3MpOworCQkJaWYg KCFwYXJhbS5jdHhfaWQpCisJCQkJY29udGludWU7CiAKLQkJCWN0eF9pZCA9IGFyZ3MuY3R4X2lk OwotCQl9IGVsc2UgewotCQkJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZSBhcmdz ID0ge307CisJCQlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZwYXJhbSk7CisJCQlpZ3RfYXNz ZXJ0KHBhcmFtLnZhbHVlKTsKKwkJCXNoYXJlX3ZtID0gcGFyYW0udmFsdWU7CisJCQlicmVhazsK KwkJfQogCi0JCQlkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfQ1JFQVRF LCAmYXJncyk7Ci0JCQljdHhfaWQgPSBhcmdzLmN0eF9pZDsKKwkJaWYgKHNoYXJlX3ZtKSB7CisJ CQlleHQucGFyYW0udmFsdWUgPSBzaGFyZV92bTsKKwkJCWFyZ3MuZmxhZ3MgPSBJOTE1X0NPTlRF WFRfQ1JFQVRFX0ZMQUdTX1VTRV9FWFRFTlNJT05TOworCQkJYXJncy5leHRlbnNpb25zID0gdG9f dXNlcl9wb2ludGVyKCZleHQpOwogCQl9CiAKLQkJaWd0X2Fzc2VydChjdHhfaWQpOworCQlkcm1J b2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfQ1JFQVRFX0VYVCwgJmFyZ3MpOwor CQlpZ3RfYXNzZXJ0KGFyZ3MuY3R4X2lkKTsKKworCQljdHhfaWQgPSBhcmdzLmN0eF9pZDsKIAkJ Y3R4LT5pZCA9IGN0eF9pZDsKIAkJY3R4LT5zc2V1ID0gZGV2aWNlX3NzZXUuc2xpY2VfbWFzazsK IAotCQlpZiAoZmxhZ3MgJiBHTE9CQUxfQkFMQU5DRSkgewotCQkJY3R4LT5zdGF0aWNfdmNzID0g Y29udGV4dF92Y3NfcnI7Ci0JCQljb250ZXh0X3Zjc19yciBePSAxOwotCQl9IGVsc2UgewotCQkJ Y3R4LT5zdGF0aWNfdmNzID0gY3R4X3ZjczsKLQkJCWN0eF92Y3MgXj0gMTsKLQkJfQotCiAJCV9f Y29uZmlndXJlX2NvbnRleHQoY3R4X2lkLCB3cmstPnByaW8pOwogCi0JCS8qCi0JCSAqIERvIHdl IG5lZWQgYSBzZXBhcmF0ZSBjb250ZXh0IHRvIHNhdGlzZnkgdGhpcyB3b3JrbG9hZHMgd2hpY2gK LQkJICogYm90aCB3YW50IHRvIHRhcmdldCBzcGVjaWZpYyBlbmdpbmVzIGFuZCBiZSBiYWxhbmNl ZCBieSBpOTE1PwotCQkgKi8KLQkJaWYgKChmbGFncyAmIEk5MTUpICYmIGN0eC0+d2FudHNfYmFs YW5jZSAmJgotCQkgICAgY3R4LT50YXJnZXRzX2luc3RhbmNlICYmICFjdHgtPmVuZ2luZV9tYXAp IHsKLQkJCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGVfZXh0X3NldHBhcmFtIGV4 dCA9IHsKLQkJCQkuYmFzZS5uYW1lID0gSTkxNV9DT05URVhUX0NSRUFURV9FWFRfU0VUUEFSQU0s Ci0JCQkJLnBhcmFtLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1ZNLAotCQkJCS5wYXJhbS52 YWx1ZSA9IHNoYXJlX3ZtLAotCQkJfTsKLQkJCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9j cmVhdGVfZXh0IGFyZ3MgPSB7Ci0JCQkJLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmV4 dCksCi0JCQkJLmZsYWdzID0KLQkJCQkgICAgSTkxNV9DT05URVhUX0NSRUFURV9GTEFHU19VU0Vf RVhURU5TSU9OUyB8Ci0JCQkJICAgIEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfU0lOR0xFX1RJ TUVMSU5FLAotCQkJfTsKLQotCQkJaWd0X2Fzc2VydChzaGFyZV92bSk7Ci0KLQkJCWRybUlvY3Rs KGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9DUkVBVEVfRVhULAotCQkJCSAmYXJncyk7 Ci0KLQkJCWlndF9hc3NlcnQoYXJncy5jdHhfaWQpOwotCQkJY3R4X2lkID0gYXJncy5jdHhfaWQ7 Ci0JCQl3cmstPmN0eF9saXN0W2kgKyAxXS5pZCA9IGFyZ3MuY3R4X2lkOwotCi0JCQlfX2NvbmZp Z3VyZV9jb250ZXh0KGN0eF9pZCwgd3JrLT5wcmlvKTsKLQkJfQotCiAJCWlmIChjdHgtPmVuZ2lu ZV9tYXApIHsKIAkJCXN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyAqc2V0X2VuZ2lu ZXMgPQogCQkJCWFsbG9jYTAoc2l6ZW9mX3BhcmFtX2VuZ2luZXMoY3R4LT5lbmdpbmVfbWFwX2Nv dW50ICsgMSkpOwpAQCAtMTgxNSw3ICsxNTIyLDcgQEAgcHJlcGFyZV93b3JrbG9hZCh1bnNpZ25l ZCBpbnQgaWQsIHN0cnVjdCB3b3JrbG9hZCAqd3JrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCQl9 OwogCQkJc3RydWN0IGk5MTVfY29udGV4dF9lbmdpbmVzX2JvbmQgKmxhc3QgPSBOVUxMOwogCi0J CQlpZiAoY3R4LT53YW50c19iYWxhbmNlKSB7CisJCQlpZiAoY3R4LT5sb2FkX2JhbGFuY2UpIHsK IAkJCQlzZXRfZW5naW5lcy0+ZXh0ZW5zaW9ucyA9CiAJCQkJCXRvX3VzZXJfcG9pbnRlcihsb2Fk X2JhbGFuY2UpOwogCkBAIC0xODY5LDM0ICsxNTc2LDYgQEAgcHJlcGFyZV93b3JrbG9hZCh1bnNp Z25lZCBpbnQgaWQsIHN0cnVjdCB3b3JrbG9hZCAqd3JrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJ CQl9CiAJCQlsb2FkX2JhbGFuY2UtPmJhc2UubmV4dF9leHRlbnNpb24gPSB0b191c2VyX3BvaW50 ZXIobGFzdCk7CiAKLQkJCWdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJnBhcmFtKTsKLQkJfSBl bHNlIGlmIChjdHgtPndhbnRzX2JhbGFuY2UpIHsKLQkJCWNvbnN0IHVuc2lnbmVkIGludCBjb3Vu dCA9IG51bV9lbmdpbmVzX2luX2NsYXNzKFZDUyk7Ci0JCQlzdHJ1Y3QgaTkxNV9jb250ZXh0X2Vu Z2luZXNfbG9hZF9iYWxhbmNlICpsb2FkX2JhbGFuY2UgPQotCQkJCWFsbG9jYTAoc2l6ZW9mX2xv YWRfYmFsYW5jZShjb3VudCkpOwotCQkJc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVz ICpzZXRfZW5naW5lcyA9Ci0JCQkJYWxsb2NhMChzaXplb2ZfcGFyYW1fZW5naW5lcyhjb3VudCAr IDEpKTsKLQkJCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBwYXJhbSA9IHsKLQkJ CQkuY3R4X2lkID0gY3R4X2lkLAotCQkJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJ TkVTLAotCQkJCS5zaXplID0gc2l6ZW9mX3BhcmFtX2VuZ2luZXMoY291bnQgKyAxKSwKLQkJCQku dmFsdWUgPSB0b191c2VyX3BvaW50ZXIoc2V0X2VuZ2luZXMpLAotCQkJfTsKLQotCQkJc2V0X2Vu Z2luZXMtPmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIobG9hZF9iYWxhbmNlKTsKLQotCQkJ c2V0X2VuZ2luZXMtPmVuZ2luZXNbMF0uZW5naW5lX2NsYXNzID0KLQkJCQlJOTE1X0VOR0lORV9D TEFTU19JTlZBTElEOwotCQkJc2V0X2VuZ2luZXMtPmVuZ2luZXNbMF0uZW5naW5lX2luc3RhbmNl ID0KLQkJCQlJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX05PTkU7Ci0JCQlmaWxsX2VuZ2luZXNf Y2xhc3MoJnNldF9lbmdpbmVzLT5lbmdpbmVzWzFdLCBWQ1MpOwotCi0JCQlsb2FkX2JhbGFuY2Ut PmJhc2UubmFtZSA9Ci0JCQkJSTkxNV9DT05URVhUX0VOR0lORVNfRVhUX0xPQURfQkFMQU5DRTsK LQkJCWxvYWRfYmFsYW5jZS0+bnVtX3NpYmxpbmdzID0gY291bnQ7Ci0KLQkJCWZpbGxfZW5naW5l c19jbGFzcygmbG9hZF9iYWxhbmNlLT5lbmdpbmVzWzBdLCBWQ1MpOwotCiAJCQlnZW1fY29udGV4 dF9zZXRfcGFyYW0oZmQsICZwYXJhbSk7CiAJCX0KIApAQCAtMTkwNCwxMSArMTU4MywxMSBAQCBw cmVwYXJlX3dvcmtsb2FkKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IHdvcmtsb2FkICp3cmssIHVu c2lnbmVkIGludCBmbGFncykKIAkJCS8qIFNldCB0byBzbGljZSAwIG9ubHksIG9uZSBzbGljZS4g Ki8KIAkJCWN0eC0+c3NldSA9IHNldF9jdHhfc3NldShjdHgsIDEpOwogCQl9Ci0KLQkJaWYgKHNo YXJlX3ZtKQotCQkJdm1fZGVzdHJveShmZCwgc2hhcmVfdm0pOwogCX0KIAorCWlmIChzaGFyZV92 bSkKKwkJdm1fZGVzdHJveShmZCwgc2hhcmVfdm0pOworCiAJLyogUmVjb3JkIGRlZmF1bHQgcHJl ZW1wdGlvbi4gKi8KIAlmb3IgKGkgPSAwLCB3ID0gd3JrLT5zdGVwczsgaSA8IHdyay0+bnJfc3Rl cHM7IGkrKywgdysrKSB7CiAJCWlmICh3LT50eXBlID09IEJBVENIKQpAQCAtMTk1NCwxNiArMTYz MywxMCBAQCBwcmVwYXJlX3dvcmtsb2FkKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IHdvcmtsb2Fk ICp3cmssIHVuc2lnbmVkIGludCBmbGFncykKIAkgKiBBbGxvY2F0ZSBiYXRjaCBidWZmZXJzLgog CSAqLwogCWZvciAoaSA9IDAsIHcgPSB3cmstPnN0ZXBzOyBpIDwgd3JrLT5ucl9zdGVwczsgaSsr LCB3KyspIHsKLQkJdW5zaWduZWQgaW50IF9mbGFncyA9IGZsYWdzOwotCQllbnVtIGludGVsX2Vu Z2luZV9pZCBlbmdpbmUgPSB3LT5lbmdpbmU7Ci0KIAkJaWYgKHctPnR5cGUgIT0gQkFUQ0gpCiAJ CQljb250aW51ZTsKIAotCQlpZiAoZW5naW5lID09IFZDUykKLQkJCV9mbGFncyAmPSB+U1dBUFZD UzsKLQotCQlhbGxvY19zdGVwX2JhdGNoKHdyaywgdywgX2ZsYWdzKTsKKwkJYWxsb2Nfc3RlcF9i YXRjaCh3cmssIHcpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTk4MCw2MDIgKzE2NTMsNiBAQCBz dGF0aWMgaW50IGVsYXBzZWRfdXMoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpzdGFydCwgY29uc3Qg c3RydWN0IHRpbWVzcGVjICplbmQpCiAJcmV0dXJuIGVsYXBzZWQoc3RhcnQsIGVuZCkgKiAxZTY7 CiB9CiAKLXN0YXRpYyBlbnVtIGludGVsX2VuZ2luZV9pZCBnZXRfdmNzX2VuZ2luZSh1bnNpZ25l ZCBpbnQgbikKLXsKLQljb25zdCBlbnVtIGludGVsX2VuZ2luZV9pZCB2Y3NfZW5naW5lc1syXSA9 IHsgVkNTMSwgVkNTMiB9OwotCi0JaWd0X2Fzc2VydChuIDwgQVJSQVlfU0laRSh2Y3NfZW5naW5l cykpOwotCi0JcmV0dXJuIHZjc19lbmdpbmVzW25dOwotfQotCi1zdGF0aWMgdWludDMyX3QgbmV3 X3NlcW5vKHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUp Ci17Ci0JdWludDMyX3Qgc2Vxbm87Ci0JaW50IHJldDsKLQotCWlmICh3cmstPmZsYWdzICYgR0xP QkFMX0JBTEFOQ0UpIHsKLQkJaWd0X2Fzc2VydCh3cmstPmdsb2JhbF93cmspOwotCQl3cmsgPSB3 cmstPmdsb2JhbF93cms7Ci0KLQkJcmV0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZ3cmstPm11dGV4 KTsKLQkJaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0JfQotCi0Jc2Vxbm8gPSArK3dyay0+c2Vxbm9b ZW5naW5lXTsKLQotCWlmICh3cmstPmZsYWdzICYgR0xPQkFMX0JBTEFOQ0UpIHsKLQkJcmV0ID0g cHRocmVhZF9tdXRleF91bmxvY2soJndyay0+bXV0ZXgpOwotCQlpZ3RfYXNzZXJ0KHJldCA9PSAw KTsKLQl9Ci0KLQlyZXR1cm4gc2Vxbm87Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotY3VycmVudF9z ZXFubyhzdHJ1Y3Qgd29ya2xvYWQgKndyaywgZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5naW5lKQot ewotCWlmICh3cmstPmZsYWdzICYgR0xPQkFMX0JBTEFOQ0UpCi0JCXJldHVybiB3cmstPmdsb2Jh bF93cmstPnNlcW5vW2VuZ2luZV07Ci0JZWxzZQotCQlyZXR1cm4gd3JrLT5zZXFub1tlbmdpbmVd OwotfQotCi1zdGF0aWMgdWludDMyX3QKLXJlYWRfc3RhdHVzX3BhZ2Uoc3RydWN0IHdvcmtsb2Fk ICp3cmssIHVuc2lnbmVkIGludCBpZHgpCi17Ci0JaWYgKHdyay0+ZmxhZ3MgJiBHTE9CQUxfQkFM QU5DRSkKLQkJcmV0dXJuIFJFQURfT05DRSh3cmstPmdsb2JhbF93cmstPnN0YXR1c19wYWdlW2lk eF0pOwotCWVsc2UKLQkJcmV0dXJuIFJFQURfT05DRSh3cmstPnN0YXR1c19wYWdlW2lkeF0pOwot fQotCi1zdGF0aWMgdWludDMyX3QKLWN1cnJlbnRfZ3B1X3NlcW5vKHN0cnVjdCB3b3JrbG9hZCAq d3JrLCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUpCi17Ci0gICAgICAgcmV0dXJuIHJlYWRf c3RhdHVzX3BhZ2Uod3JrLCBTRVFOT19JRFgoZW5naW5lKSk7Ci19Ci0KLXN0cnVjdCB3b3JrbG9h ZF9iYWxhbmNlciB7Ci0JdW5zaWduZWQgaW50IGlkOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29u c3QgY2hhciAqZGVzYzsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IG1pbl9n ZW47Ci0KLQlpbnQgKCppbml0KShjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgKmJhbGFu Y2VyLAotCQkgICAgc3RydWN0IHdvcmtsb2FkICp3cmspOwotCXVuc2lnbmVkIGludCAoKmdldF9x ZCkoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciwKLQkJCSAgICAgICBz dHJ1Y3Qgd29ya2xvYWQgKndyaywKLQkJCSAgICAgICBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdp bmUpOwotCWVudW0gaW50ZWxfZW5naW5lX2lkICgqYmFsYW5jZSkoY29uc3Qgc3RydWN0IHdvcmts b2FkX2JhbGFuY2VyICpiYWxhbmNlciwKLQkJCQkJc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVj dCB3X3N0ZXAgKncpOwotfTsKLQotc3RhdGljIGVudW0gaW50ZWxfZW5naW5lX2lkCi1ycl9iYWxh bmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqYmFsYW5jZXIsCi0JICAgc3RydWN0 IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAgKncpCi17Ci0JdW5zaWduZWQgaW50IGVuZ2lu ZTsKLQotCWVuZ2luZSA9IGdldF92Y3NfZW5naW5lKHdyay0+dmNzX3JyKTsKLQl3cmstPnZjc19y ciBePSAxOwotCi0JcmV0dXJuIGVuZ2luZTsKLX0KLQotc3RhdGljIGVudW0gaW50ZWxfZW5naW5l X2lkCi1yYW5kX2JhbGFuY2UoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNl ciwKLQkgICAgIHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVwICp3KQotewotCXJl dHVybiBnZXRfdmNzX2VuZ2luZShoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbSgmd3JrLT5wcm5n KSAmIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1nZXRfcWRfZGVwdGgoY29uc3Qgc3Ry dWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciwKLQkgICAgIHN0cnVjdCB3b3JrbG9hZCAq d3JrLCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUpCi17Ci0JcmV0dXJuIGN1cnJlbnRfc2Vx bm8od3JrLCBlbmdpbmUpIC0gY3VycmVudF9ncHVfc2Vxbm8od3JrLCBlbmdpbmUpOwotfQotCi1z dGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaWQKLV9fcWRfc2VsZWN0X2VuZ2luZShzdHJ1Y3Qgd29y a2xvYWQgKndyaywgY29uc3QgdW5zaWduZWQgbG9uZyAqcWQsIGJvb2wgcmFuZG9tKQotewotCXVu c2lnbmVkIGludCBuOwotCi0JaWYgKHFkW1ZDUzFdIDwgcWRbVkNTMl0pCi0JCW4gPSAwOwotCWVs c2UgaWYgKHFkW1ZDUzFdID4gcWRbVkNTMl0pCi0JCW4gPSAxOwotCWVsc2UgaWYgKHJhbmRvbSkK LQkJbiA9IGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tKCZ3cmstPnBybmcpICYgMTsKLQllbHNl Ci0JCW4gPSB3cmstPnZjc19ycjsKLQl3cmstPnZjc19yciA9IG4gXiAxOwotCi0JcmV0dXJuIGdl dF92Y3NfZW5naW5lKG4pOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaWQKLV9fcWRf YmFsYW5jZShjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgKmJhbGFuY2VyLAotCSAgICAg c3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAgKncsIGJvb2wgcmFuZG9tKQotewot CWVudW0gaW50ZWxfZW5naW5lX2lkIGVuZ2luZTsKLQl1bnNpZ25lZCBsb25nIHFkW05VTV9FTkdJ TkVTXTsKLQotCWlndF9hc3NlcnQody0+ZW5naW5lID09IFZDUyk7Ci0KLQlxZFtWQ1MxXSA9IGJh bGFuY2VyLT5nZXRfcWQoYmFsYW5jZXIsIHdyaywgVkNTMSk7Ci0Jd3JrLT5xZF9zdW1bVkNTMV0g Kz0gcWRbVkNTMV07Ci0KLQlxZFtWQ1MyXSA9IGJhbGFuY2VyLT5nZXRfcWQoYmFsYW5jZXIsIHdy aywgVkNTMik7Ci0Jd3JrLT5xZF9zdW1bVkNTMl0gKz0gcWRbVkNTMl07Ci0KLQllbmdpbmUgPSBf X3FkX3NlbGVjdF9lbmdpbmUod3JrLCBxZCwgcmFuZG9tKTsKLQotI2lmZGVmIERFQlVHCi0JcHJp bnRmKCJxZF9iYWxhbmNlWyV1XTogMTolbGQgMjolbGQgcnI6JXUgPSAldVx0KCV1IC0gJXUpICgl dSAtICV1KVxuIiwKLQkgICAgICAgd3JrLT5pZCwgcWRbVkNTMV0sIHFkW1ZDUzJdLCB3cmstPnZj c19yciwgZW5naW5lLAotCSAgICAgICBjdXJyZW50X3NlcW5vKHdyaywgVkNTMSksIGN1cnJlbnRf Z3B1X3NlcW5vKHdyaywgVkNTMSksCi0JICAgICAgIGN1cnJlbnRfc2Vxbm8od3JrLCBWQ1MyKSwg Y3VycmVudF9ncHVfc2Vxbm8od3JrLCBWQ1MyKSk7Ci0jZW5kaWYKLQlyZXR1cm4gZW5naW5lOwot fQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaWQKLXFkX2JhbGFuY2UoY29uc3Qgc3RydWN0 IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciwKLQkgICAgIHN0cnVjdCB3b3JrbG9hZCAqd3Jr LCBzdHJ1Y3Qgd19zdGVwICp3KQotewotCXJldHVybiBfX3FkX2JhbGFuY2UoYmFsYW5jZXIsIHdy aywgdywgZmFsc2UpOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaWQKLXFkcl9iYWxh bmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqYmFsYW5jZXIsCi0JICAgICBzdHJ1 Y3Qgd29ya2xvYWQgKndyaywgc3RydWN0IHdfc3RlcCAqdykKLXsKLQlyZXR1cm4gX19xZF9iYWxh bmNlKGJhbGFuY2VyLCB3cmssIHcsIHRydWUpOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdp bmVfaWQKLXFkYXZnX2JhbGFuY2UoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxh bmNlciwKLQkgICAgIHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVwICp3KQotewot CXVuc2lnbmVkIGxvbmcgcWRbTlVNX0VOR0lORVNdOwotCXVuc2lnbmVkIGludCBlbmdpbmU7Ci0K LQlpZ3RfYXNzZXJ0KHctPmVuZ2luZSA9PSBWQ1MpOwotCi0JZm9yIChlbmdpbmUgPSBWQ1MxOyBl bmdpbmUgPD0gVkNTMjsgZW5naW5lKyspIHsKLQkJcWRbZW5naW5lXSA9IGJhbGFuY2VyLT5nZXRf cWQoYmFsYW5jZXIsIHdyaywgZW5naW5lKTsKLQkJd3JrLT5xZF9zdW1bZW5naW5lXSArPSBxZFtl bmdpbmVdOwotCi0JCWV3bWFfcnRfYWRkKCZ3cmstPnJ0LmF2Z1tlbmdpbmVdLCBxZFtlbmdpbmVd KTsKLQkJcWRbZW5naW5lXSA9IGV3bWFfcnRfcmVhZCgmd3JrLT5ydC5hdmdbZW5naW5lXSk7Ci0J fQotCi0JZW5naW5lID0gX19xZF9zZWxlY3RfZW5naW5lKHdyaywgcWQsIGZhbHNlKTsKLSNpZmRl ZiBERUJVRwotCXByaW50ZigicWRhdmdfYmFsYW5jZVsldV06IDE6JWxkIDI6JWxkIHJyOiV1ID0g JXVcdCgldSAtICV1KSAoJXUgLSAldSlcbiIsCi0JICAgICAgIHdyay0+aWQsIHFkW1ZDUzFdLCBx ZFtWQ1MyXSwgd3JrLT52Y3NfcnIsIGVuZ2luZSwKLQkgICAgICAgY3VycmVudF9zZXFubyh3cmss IFZDUzEpLCBjdXJyZW50X2dwdV9zZXFubyh3cmssIFZDUzEpLAotCSAgICAgICBjdXJyZW50X3Nl cW5vKHdyaywgVkNTMiksIGN1cnJlbnRfZ3B1X3NlcW5vKHdyaywgVkNTMikpOwotI2VuZGlmCi0J cmV0dXJuIGVuZ2luZTsKLX0KLQotc3RhdGljIGVudW0gaW50ZWxfZW5naW5lX2lkCi1fX3J0X3Nl bGVjdF9lbmdpbmUoc3RydWN0IHdvcmtsb2FkICp3cmssIHVuc2lnbmVkIGxvbmcgKnFkLCBib29s IHJhbmRvbSkKLXsKLQlxZFtWQ1MxXSA+Pj0gMTA7Ci0JcWRbVkNTMl0gPj49IDEwOwotCi0JcmV0 dXJuIF9fcWRfc2VsZWN0X2VuZ2luZSh3cmssIHFkLCByYW5kb20pOwotfQotCi1zdHJ1Y3QgcnRf ZGVwdGggewotCXVpbnQzMl90IHNlcW5vOwotCXVpbnQzMl90IHN1Ym1pdHRlZDsKLQl1aW50MzJf dCBjb21wbGV0ZWQ7Ci19OwotCi1zdGF0aWMgdm9pZCBnZXRfcnRfZGVwdGgoc3RydWN0IHdvcmts b2FkICp3cmssCi0JCQkgdW5zaWduZWQgaW50IGVuZ2luZSwKLQkJCSBzdHJ1Y3QgcnRfZGVwdGgg KnJ0KQotewotCWNvbnN0IHVuc2lnbmVkIGludCBpZHggPSBTRVFOT19JRFgoZW5naW5lKTsKLQl1 aW50MzJfdCBsYXRjaDsKLQotCWRvIHsKLQkJbGF0Y2ggPSByZWFkX3N0YXR1c19wYWdlKHdyaywg aWR4ICsgMyk7Ci0JCXJ0LT5zdWJtaXR0ZWQgPSByZWFkX3N0YXR1c19wYWdlKHdyaywgaWR4ICsg MSk7Ci0JCXJ0LT5jb21wbGV0ZWQgPSByZWFkX3N0YXR1c19wYWdlKHdyaywgaWR4ICsgMik7Ci0J CXJ0LT5zZXFubyA9IHJlYWRfc3RhdHVzX3BhZ2Uod3JrLCBpZHgpOwotCX0gd2hpbGUgKGxhdGNo ICE9IHJ0LT5zZXFubyk7Ci19Ci0KLXN0YXRpYyBlbnVtIGludGVsX2VuZ2luZV9pZAotX19ydF9i YWxhbmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqYmFsYW5jZXIsCi0JICAgICBz dHJ1Y3Qgd29ya2xvYWQgKndyaywgc3RydWN0IHdfc3RlcCAqdywgYm9vbCByYW5kb20pCi17Ci0J dW5zaWduZWQgbG9uZyBxZFtOVU1fRU5HSU5FU107Ci0JdW5zaWduZWQgaW50IGVuZ2luZTsKLQot CWlndF9hc3NlcnQody0+ZW5naW5lID09IFZDUyk7Ci0KLQkvKiBFc3RpbWF0ZSB0aGUgInNwZWVk IiBvZiB0aGUgbW9zdCByZWNlbnQgYmF0Y2gKLQkgKiAgICAoZmluaXNoIHRpbWUgLSBzdWJtaXQg dGltZSkKLQkgKiBhbmQgdXNlIHRoYXQgYXMgYW4gYXBwcm94aW1hdGUgZm9yIHRoZSB0b3RhbCBy ZW1haW5pbmcgdGltZSBmb3IKLQkgKiBhbGwgYmF0Y2hlcyBvbiB0aGF0IGVuZ2luZSwgcGx1cyB0 aGUgdGltZSB3ZSBleHBlY3QgdGhpcyBiYXRjaCB0bwotCSAqIHRha2UuIFdlIHRyeSB0byBrZWVw IHRoZSB0b3RhbCBiYWxhbmNlZCBiZXR3ZWVuIHRoZSBlbmdpbmVzLgotCSAqLwotCWZvciAoZW5n aW5lID0gVkNTMTsgZW5naW5lIDw9IFZDUzI7IGVuZ2luZSsrKSB7Ci0JCXN0cnVjdCBydF9kZXB0 aCBydDsKLQotCQlnZXRfcnRfZGVwdGgod3JrLCBlbmdpbmUsICZydCk7Ci0JCXFkW2VuZ2luZV0g PSBjdXJyZW50X3NlcW5vKHdyaywgZW5naW5lKSAtIHJ0LnNlcW5vOwotCQl3cmstPnFkX3N1bVtl bmdpbmVdICs9IHFkW2VuZ2luZV07Ci0JCXFkW2VuZ2luZV0gPSAocWRbZW5naW5lXSArIDEpICog KHJ0LmNvbXBsZXRlZCAtIHJ0LnN1Ym1pdHRlZCk7Ci0jaWZkZWYgREVCVUcKLQkJcHJpbnRmKCJy dFswXSA9ICVkICglZCAtICVkKSB4ICVkICglZCAtICVkKSA9ICVsZFxuIiwKLQkJICAgICAgIGN1 cnJlbnRfc2Vxbm8od3JrLCBlbmdpbmUpIC0gcnQuc2Vxbm8sCi0JCSAgICAgICBjdXJyZW50X3Nl cW5vKHdyaywgZW5naW5lKSwgcnQuc2Vxbm8sCi0JCSAgICAgICBydC5jb21wbGV0ZWQgLSBydC5z dWJtaXR0ZWQsCi0JCSAgICAgICBydC5jb21wbGV0ZWQsIHJ0LnN1Ym1pdHRlZCwKLQkJICAgICAg IHFkW2VuZ2luZV0pOwotI2VuZGlmCi0JfQotCi0JcmV0dXJuIF9fcnRfc2VsZWN0X2VuZ2luZSh3 cmssIHFkLCByYW5kb20pOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaWQKLXJ0X2Jh bGFuY2UoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNlciwKLQkgICBzdHJ1 Y3Qgd29ya2xvYWQgKndyaywgc3RydWN0IHdfc3RlcCAqdykKLXsKLQotCXJldHVybiBfX3J0X2Jh bGFuY2UoYmFsYW5jZXIsIHdyaywgdywgZmFsc2UpOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9l bmdpbmVfaWQKLXJ0cl9iYWxhbmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqYmFs YW5jZXIsCi0JICAgc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAgKncpCi17Ci0J cmV0dXJuIF9fcnRfYmFsYW5jZShiYWxhbmNlciwgd3JrLCB3LCB0cnVlKTsKLX0KLQotc3RhdGlj IGVudW0gaW50ZWxfZW5naW5lX2lkCi1ydGF2Z19iYWxhbmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9h ZF9iYWxhbmNlciAqYmFsYW5jZXIsCi0JICAgc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3 X3N0ZXAgKncpCi17Ci0JdW5zaWduZWQgbG9uZyBxZFtOVU1fRU5HSU5FU107Ci0JdW5zaWduZWQg aW50IGVuZ2luZTsKLQotCWlndF9hc3NlcnQody0+ZW5naW5lID09IFZDUyk7Ci0KLQkvKiBFc3Rp bWF0ZSB0aGUgYXZlcmFnZSAic3BlZWQiIG9mIHRoZSBtb3N0IHJlY2VudCBiYXRjaGVzCi0JICog ICAgKGZpbmlzaCB0aW1lIC0gc3VibWl0IHRpbWUpCi0JICogYW5kIHVzZSB0aGF0IGFzIGFuIGFw cHJveGltYXRlIGZvciB0aGUgdG90YWwgcmVtYWluaW5nIHRpbWUgZm9yCi0JICogYWxsIGJhdGNo ZXMgb24gdGhhdCBlbmdpbmUgcGx1cyB0aGUgdGltZSB3ZSBleHBlY3QgdG8gZXhlY3V0ZSBpbi4K LQkgKiBXZSB0cnkgdG8ga2VlcCB0aGUgdG90YWwgcmVtYWluaW5nIGJhbGFuY2VkIGJldHdlZW4g dGhlIGVuZ2luZXMuCi0JICovCi0JZm9yIChlbmdpbmUgPSBWQ1MxOyBlbmdpbmUgPD0gVkNTMjsg ZW5naW5lKyspIHsKLQkJc3RydWN0IHJ0X2RlcHRoIHJ0OwotCi0JCWdldF9ydF9kZXB0aCh3cmss IGVuZ2luZSwgJnJ0KTsKLQkJaWYgKHJ0LnNlcW5vICE9IHdyay0+cnQubGFzdFtlbmdpbmVdKSB7 Ci0JCQlpZ3RfYXNzZXJ0KChsb25nKShydC5jb21wbGV0ZWQgLSBydC5zdWJtaXR0ZWQpID4gMCk7 Ci0JCQlld21hX3J0X2FkZCgmd3JrLT5ydC5hdmdbZW5naW5lXSwKLQkJCQkgICAgcnQuY29tcGxl dGVkIC0gcnQuc3VibWl0dGVkKTsKLQkJCXdyay0+cnQubGFzdFtlbmdpbmVdID0gcnQuc2Vxbm87 Ci0JCX0KLQkJcWRbZW5naW5lXSA9IGN1cnJlbnRfc2Vxbm8od3JrLCBlbmdpbmUpIC0gcnQuc2Vx bm87Ci0JCXdyay0+cWRfc3VtW2VuZ2luZV0gKz0gcWRbZW5naW5lXTsKLQkJcWRbZW5naW5lXSA9 Ci0JCQkocWRbZW5naW5lXSArIDEpICogZXdtYV9ydF9yZWFkKCZ3cmstPnJ0LmF2Z1tlbmdpbmVd KTsKLQotI2lmZGVmIERFQlVHCi0JCXByaW50ZigicnRhdmdbJWRdID0gJWQgKCVkIC0gJWQpIHgg JWxkICglZCkgPSAlbGRcbiIsCi0JCSAgICAgICBlbmdpbmUsCi0JCSAgICAgICBjdXJyZW50X3Nl cW5vKHdyaywgZW5naW5lKSAtIHJ0LnNlcW5vLAotCQkgICAgICAgY3VycmVudF9zZXFubyh3cmss IGVuZ2luZSksIHJ0LnNlcW5vLAotCQkgICAgICAgZXdtYV9ydF9yZWFkKCZ3cmstPnJ0LmF2Z1tl bmdpbmVdKSwKLQkJICAgICAgIHJ0LmNvbXBsZXRlZCAtIHJ0LnN1Ym1pdHRlZCwKLQkJICAgICAg IHFkW2VuZ2luZV0pOwotI2VuZGlmCi0JfQotCi0JcmV0dXJuIF9fcnRfc2VsZWN0X2VuZ2luZSh3 cmssIHFkLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyBlbnVtIGludGVsX2VuZ2luZV9pZAotY29udGV4 dF9iYWxhbmNlKGNvbnN0IHN0cnVjdCB3b3JrbG9hZF9iYWxhbmNlciAqYmFsYW5jZXIsCi0JCXN0 cnVjdCB3b3JrbG9hZCAqd3JrLCBzdHJ1Y3Qgd19zdGVwICp3KQotewotCXJldHVybiBnZXRfdmNz X2VuZ2luZShfX2dldF9jdHgod3JrLCB3KS0+c3RhdGljX3Zjcyk7Ci19Ci0KLXN0YXRpYyB1bnNp Z25lZCBpbnQKLWdldF9lbmdpbmVfYnVzeShjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIg KmJhbGFuY2VyLAotCQlzdHJ1Y3Qgd29ya2xvYWQgKndyaywgZW51bSBpbnRlbF9lbmdpbmVfaWQg ZW5naW5lKQotewotCXN0cnVjdCBidXN5X2JhbGFuY2VyICpiYiA9ICZ3cmstPmJ1c3lfYmFsYW5j ZXI7Ci0KLQlpZiAoZW5naW5lID09IFZDUzIgJiYgKHdyay0+ZmxhZ3MgJiBWQ1MyUkVNQVApKQot CQllbmdpbmUgPSBCQ1M7Ci0KLQlyZXR1cm4gYmItPmJ1c3lbYmItPmVuZ2luZV9tYXBbZW5naW5l XV07Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZXRfcG11X3N0YXRzKGNvbnN0IHN0cnVjdCB3b3JrbG9h ZF9iYWxhbmNlciAqYiwgc3RydWN0IHdvcmtsb2FkICp3cmspCi17Ci0Jc3RydWN0IGJ1c3lfYmFs YW5jZXIgKmJiID0gJndyay0+YnVzeV9iYWxhbmNlcjsKLQl1aW50NjRfdCB2YWxbN107Ci0JdW5z aWduZWQgaW50IGk7Ci0KLQlpZ3RfYXNzZXJ0X2VxKHJlYWQoYmItPmZkLCB2YWwsIHNpemVvZih2 YWwpKSwKLQkJICAgICAgKDIgKyBiYi0+bnVtX2VuZ2luZXMpICogc2l6ZW9mKHVpbnQ2NF90KSk7 Ci0KLQlpZiAoIWJiLT5maXJzdCkgewotCQlmb3IgKGkgPSAwOyBpIDwgYmItPm51bV9lbmdpbmVz OyBpKyspIHsKLQkJCWRvdWJsZSBkOwotCi0JCQlkID0gKHZhbFsyICsgaV0gLSBiYi0+cHJldltp XSkgKiAxMDA7Ci0JCQlkIC89IHZhbFsxXSAtIGJiLT50X3ByZXY7Ci0JCQliYi0+YnVzeVtpXSA9 IGQ7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYmItPm51bV9lbmdpbmVzOyBpKyspCi0J CWJiLT5wcmV2W2ldID0gdmFsWzIgKyBpXTsKLQotCWJiLT50X3ByZXYgPSB2YWxbMV07Ci0JYmIt PmZpcnN0ID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyBlbnVtIGludGVsX2VuZ2luZV9pZAotYnVzeV9h dmdfYmFsYW5jZShjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgKmJhbGFuY2VyLAotCQkg c3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAgKncpCi17Ci0JZ2V0X3BtdV9zdGF0 cyhiYWxhbmNlciwgd3JrKTsKLQotCXJldHVybiBxZGF2Z19iYWxhbmNlKGJhbGFuY2VyLCB3cmss IHcpOwotfQotCi1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaWQKLWJ1c3lfYmFsYW5jZShjb25z dCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgKmJhbGFuY2VyLAotCSAgICAgc3RydWN0IHdvcmts b2FkICp3cmssIHN0cnVjdCB3X3N0ZXAgKncpCi17Ci0JZ2V0X3BtdV9zdGF0cyhiYWxhbmNlciwg d3JrKTsKLQotCXJldHVybiBxZF9iYWxhbmNlKGJhbGFuY2VyLCB3cmssIHcpOwotfQotCi1zdGF0 aWMgaW50Ci1idXN5X2luaXQoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyICpiYWxhbmNl ciwgc3RydWN0IHdvcmtsb2FkICp3cmspCi17Ci0Jc3RydWN0IGJ1c3lfYmFsYW5jZXIgKmJiID0g Jndyay0+YnVzeV9iYWxhbmNlcjsKLQlzdHJ1Y3QgZW5naW5lX2Rlc2MgewotCQl1bnNpZ25lZCBj bGFzcywgaW5zdDsKLQkJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Ci0JfSAqZCwgZW5naW5lc1td ID0gewotCQl7IEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCwgUkNTIH0sCi0JCXsgSTkxNV9F TkdJTkVfQ0xBU1NfQ09QWSwgMCwgQkNTIH0sCi0JCXsgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8s IDAsIFZDUzEgfSwKLQkJeyBJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMSwgVkNTMiB9LAotCQl7 IEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDAsIFZFQ1MgfSwKLQkJeyAwLCAwLCBW Q1MgfQotCX07Ci0KLQliYi0+bnVtX2VuZ2luZXMgPSAwOwotCWJiLT5maXJzdCA9IHRydWU7Ci0J YmItPmZkID0gLTE7Ci0KLQlmb3IgKGQgPSAmZW5naW5lc1swXTsgZC0+aWQgIT0gVkNTOyBkKysp IHsKLQkJaW50IHBmZDsKLQotCQlwZmQgPSBwZXJmX2lnZnhfb3Blbl9ncm91cChJOTE1X1BNVV9F TkdJTkVfQlVTWShkLT5jbGFzcywKLQkJCQkJCQkJZC0+aW5zdCksCi0JCQkJCSAgIGJiLT5mZCk7 Ci0JCWlmIChwZmQgPCAwKSB7Ci0JCQlpZiAoZC0+aWQgIT0gVkNTMikKLQkJCQlyZXR1cm4gLSgx MCArIGJiLT5udW1fZW5naW5lcyk7Ci0JCQllbHNlCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQlp ZiAoYmItPm51bV9lbmdpbmVzID09IDApCi0JCQliYi0+ZmQgPSBwZmQ7Ci0KLQkJYmItPmVuZ2lu ZV9tYXBbZC0+aWRdID0gYmItPm51bV9lbmdpbmVzKys7Ci0JfQotCi0JaWYgKGJiLT5udW1fZW5n aW5lcyA8IDUgJiYgISh3cmstPmZsYWdzICYgVkNTMlJFTUFQKSkKLQkJcmV0dXJuIC0xOwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgYWxs X2JhbGFuY2Vyc1tdID0gewotCXsKLQkJLmlkID0gMCwKLQkJLm5hbWUgPSAicnIiLAotCQkuZGVz YyA9ICJTaW1wbGUgcm91bmQtcm9iaW4uIiwKLQkJLmJhbGFuY2UgPSBycl9iYWxhbmNlLAotCX0s Ci0JewotCQkuaWQgPSA2LAotCQkubmFtZSA9ICJyYW5kIiwKLQkJLmRlc2MgPSAiUmFuZG9tIHNl bGVjdGlvbi4iLAotCQkuYmFsYW5jZSA9IHJhbmRfYmFsYW5jZSwKLQl9LAotCXsKLQkJLmlkID0g MSwKLQkJLm5hbWUgPSAicWQiLAotCQkuZGVzYyA9ICJRdWV1ZSBkZXB0aCBlc3RpbWF0aW9uIHdp dGggcm91bmQtcm9iaW4gb24gZXF1YWwgZGVwdGguIiwKLQkJLmZsYWdzID0gU0VRTk8sCi0JCS5t aW5fZ2VuID0gOCwKLQkJLmdldF9xZCA9IGdldF9xZF9kZXB0aCwKLQkJLmJhbGFuY2UgPSBxZF9i YWxhbmNlLAotCX0sCi0JewotCQkuaWQgPSA1LAotCQkubmFtZSA9ICJxZHIiLAotCQkuZGVzYyA9 ICJRdWV1ZSBkZXB0aCBlc3RpbWF0aW9uIHdpdGggcmFuZG9tIHNlbGVjdGlvbiBvbiBlcXVhbCBk ZXB0aC4iLAotCQkuZmxhZ3MgPSBTRVFOTywKLQkJLm1pbl9nZW4gPSA4LAotCQkuZ2V0X3FkID0g Z2V0X3FkX2RlcHRoLAotCQkuYmFsYW5jZSA9IHFkcl9iYWxhbmNlLAotCX0sCi0JewotCQkuaWQg PSA3LAotCQkubmFtZSA9ICJxZGF2ZyIsCi0JCS5kZXNjID0gIkxpa2UgcWQsIGJ1dCB1c2luZyBh biBhdmVyYWdlIHF1ZXVlIGRlcHRoIGVzdGltYXRvci4iLAotCQkuZmxhZ3MgPSBTRVFOTywKLQkJ Lm1pbl9nZW4gPSA4LAotCQkuZ2V0X3FkID0gZ2V0X3FkX2RlcHRoLAotCQkuYmFsYW5jZSA9IHFk YXZnX2JhbGFuY2UsCi0JfSwKLQl7Ci0JCS5pZCA9IDIsCi0JCS5uYW1lID0gInJ0IiwKLQkJLmRl c2MgPSAiUXVldWUgZGVwdGggcGx1cyBsYXN0IHJ1bnRpbWUgZXN0aW1hdGlvbi4iLAotCQkuZmxh Z3MgPSBTRVFOTyB8IFJULAotCQkubWluX2dlbiA9IDgsCi0JCS5nZXRfcWQgPSBnZXRfcWRfZGVw dGgsCi0JCS5iYWxhbmNlID0gcnRfYmFsYW5jZSwKLQl9LAotCXsKLQkJLmlkID0gMywKLQkJLm5h bWUgPSAicnRyIiwKLQkJLmRlc2MgPSAiTGlrZSBydCBidXQgd2l0aCByYW5kb20gZW5naW5lIHNl bGVjdGlvbiBvbiBlcXVhbCBkZXB0aC4iLAotCQkuZmxhZ3MgPSBTRVFOTyB8IFJULAotCQkubWlu X2dlbiA9IDgsCi0JCS5nZXRfcWQgPSBnZXRfcWRfZGVwdGgsCi0JCS5iYWxhbmNlID0gcnRyX2Jh bGFuY2UsCi0JfSwKLQl7Ci0JCS5pZCA9IDQsCi0JCS5uYW1lID0gInJ0YXZnIiwKLQkJLmRlc2Mg PSAiSW1wcm92ZWQgdmVyc2lvbiBydCB0cmFja2luZyBhdmVyYWdlIGV4ZWN1dGlvbiBzcGVlZCBw ZXIgZW5naW5lLiIsCi0JCS5mbGFncyA9IFNFUU5PIHwgUlQsCi0JCS5taW5fZ2VuID0gOCwKLQkJ LmdldF9xZCA9IGdldF9xZF9kZXB0aCwKLQkJLmJhbGFuY2UgPSBydGF2Z19iYWxhbmNlLAotCX0s Ci0JewotCQkuaWQgPSA4LAotCQkubmFtZSA9ICJjb250ZXh0IiwKLQkJLmRlc2MgPSAiU3RhdGlj IHJvdW5kLXJvYmluIFZDUyBhc3NpZ25tZW50IGF0IGNvbnRleHQgY3JlYXRpb24uIiwKLQkJLmJh bGFuY2UgPSBjb250ZXh0X2JhbGFuY2UsCi0JfSwKLQl7Ci0JCS5pZCA9IDksCi0JCS5uYW1lID0g ImJ1c3kiLAotCQkuZGVzYyA9ICJFbmdpbmUgYnVzeW5lc3MgYmFzZWQgYmFsYW5jaW5nLiIsCi0J CS5pbml0ID0gYnVzeV9pbml0LAotCQkuZ2V0X3FkID0gZ2V0X2VuZ2luZV9idXN5LAotCQkuYmFs YW5jZSA9IGJ1c3lfYmFsYW5jZSwKLQl9LAotCXsKLQkJLmlkID0gMTAsCi0JCS5uYW1lID0gImJ1 c3ktYXZnIiwKLQkJLmRlc2MgPSAiQXZlcmFnZSBlbmdpbmUgYnVzeW5lc3MgYmFzZWQgYmFsYW5j aW5nLiIsCi0JCS5pbml0ID0gYnVzeV9pbml0LAotCQkuZ2V0X3FkID0gZ2V0X2VuZ2luZV9idXN5 LAotCQkuYmFsYW5jZSA9IGJ1c3lfYXZnX2JhbGFuY2UsCi0JfSwKLQl7Ci0JCS5pZCA9IDExLAot CQkubmFtZSA9ICJpOTE1IiwKLQkJLmRlc2MgPSAiaTkxNSBiYWxhbmNpbmcuIiwKLQkJLmZsYWdz ID0gSTkxNSwKLQl9LAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludAotZ2xvYmFsX2dldF9xZChj b25zdCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgKmJhbGFuY2VyLAotCSAgICAgIHN0cnVjdCB3 b3JrbG9hZCAqd3JrLCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUpCi17Ci0JaWd0X2Fzc2Vy dCh3cmstPmdsb2JhbF93cmspOwotCWlndF9hc3NlcnQod3JrLT5nbG9iYWxfYmFsYW5jZXIpOwot Ci0JcmV0dXJuIHdyay0+Z2xvYmFsX2JhbGFuY2VyLT5nZXRfcWQod3JrLT5nbG9iYWxfYmFsYW5j ZXIsCi0JCQkJCSAgICB3cmstPmdsb2JhbF93cmssIGVuZ2luZSk7Ci19Ci0KLXN0YXRpYyBlbnVt IGludGVsX2VuZ2luZV9pZAotZ2xvYmFsX2JhbGFuY2UoY29uc3Qgc3RydWN0IHdvcmtsb2FkX2Jh bGFuY2VyICpiYWxhbmNlciwKLQkgICAgICAgc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3 X3N0ZXAgKncpCi17Ci0JZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5naW5lOwotCWludCByZXQ7Ci0K LQlpZ3RfYXNzZXJ0KHdyay0+Z2xvYmFsX3dyayk7Ci0JaWd0X2Fzc2VydCh3cmstPmdsb2JhbF9i YWxhbmNlcik7Ci0KLQl3cmsgPSB3cmstPmdsb2JhbF93cms7Ci0KLQlyZXQgPSBwdGhyZWFkX211 dGV4X2xvY2soJndyay0+bXV0ZXgpOwotCWlndF9hc3NlcnQocmV0ID09IDApOwotCi0JZW5naW5l ID0gd3JrLT5nbG9iYWxfYmFsYW5jZXItPmJhbGFuY2Uod3JrLT5nbG9iYWxfYmFsYW5jZXIsIHdy aywgdyk7Ci0KLQlyZXQgPSBwdGhyZWFkX211dGV4X3VubG9jaygmd3JrLT5tdXRleCk7Ci0JaWd0 X2Fzc2VydChyZXQgPT0gMCk7Ci0KLQlyZXR1cm4gZW5naW5lOwotfQotCi1zdGF0aWMgY29uc3Qg c3RydWN0IHdvcmtsb2FkX2JhbGFuY2VyIGdsb2JhbF9iYWxhbmNlciA9IHsKLQkJLmlkID0gfjAs Ci0JCS5uYW1lID0gImdsb2JhbCIsCi0JCS5kZXNjID0gIkdsb2JhbCBiYWxhbmNlciIsCi0JCS5n ZXRfcWQgPSBnbG9iYWxfZ2V0X3FkLAotCQkuYmFsYW5jZSA9IGdsb2JhbF9iYWxhbmNlLAotCX07 Ci0KLXN0YXRpYyB2b2lkCi11cGRhdGVfYmJfc2Vxbm8oc3RydWN0IHdfc3RlcCAqdywgZW51bSBp bnRlbF9lbmdpbmVfaWQgZW5naW5lLCB1aW50MzJfdCBzZXFubykKLXsKLQlnZW1fc2V0X2RvbWFp bihmZCwgdy0+YmJfaGFuZGxlLAotCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX1dDLCBJOTE1X0dF TV9ET01BSU5fV0MpOwotCi0Jdy0+cmVsb2NbMF0uZGVsdGEgPSBTRVFOT19PRkZTRVQoZW5naW5l KTsKLQotCSp3LT5zZXFub192YWx1ZSA9IHNlcW5vOwotCSp3LT5zZXFub19hZGRyZXNzID0gdy0+ cmVsb2NbMF0ucHJlc3VtZWRfb2Zmc2V0ICsgdy0+cmVsb2NbMF0uZGVsdGE7Ci0KLQkvKiBJZiBu b3QgdXNpbmcgTk9fUkVMT0MsIGZvcmNlIHRoZSByZWxvY2F0aW9ucyAqLwotCWlmICghKHctPmVi LmZsYWdzICYgSTkxNV9FWEVDX05PX1JFTE9DKSkKLQkJdy0+cmVsb2NbMF0ucHJlc3VtZWRfb2Zm c2V0ID0gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkCi11cGRhdGVfYmJfcnQoc3RydWN0IHdfc3RlcCAq dywgZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5naW5lLCB1aW50MzJfdCBzZXFubykKLXsKLQlnZW1f c2V0X2RvbWFpbihmZCwgdy0+YmJfaGFuZGxlLAotCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX1dD LCBJOTE1X0dFTV9ET01BSU5fV0MpOwotCi0Jdy0+cmVsb2NbMV0uZGVsdGEgPSBTRVFOT19PRkZT RVQoZW5naW5lKSArIHNpemVvZih1aW50MzJfdCk7Ci0Jdy0+cmVsb2NbMl0uZGVsdGEgPSBTRVFO T19PRkZTRVQoZW5naW5lKSArIDIgKiBzaXplb2YodWludDMyX3QpOwotCXctPnJlbG9jWzNdLmRl bHRhID0gU0VRTk9fT0ZGU0VUKGVuZ2luZSkgKyAzICogc2l6ZW9mKHVpbnQzMl90KTsKLQotCSp3 LT5sYXRjaF92YWx1ZSA9IHNlcW5vOwotCSp3LT5sYXRjaF9hZGRyZXNzID0gdy0+cmVsb2NbM10u cHJlc3VtZWRfb2Zmc2V0ICsgdy0+cmVsb2NbM10uZGVsdGE7Ci0KLQkqdy0+cnQwX3ZhbHVlID0g KlJFRyhSQ1NfVElNRVNUQU1QKTsKLQkqdy0+cnQwX2FkZHJlc3MgPSB3LT5yZWxvY1sxXS5wcmVz dW1lZF9vZmZzZXQgKyB3LT5yZWxvY1sxXS5kZWx0YTsKLQkqdy0+cnQxX2FkZHJlc3MgPSB3LT5y ZWxvY1syXS5wcmVzdW1lZF9vZmZzZXQgKyB3LT5yZWxvY1syXS5kZWx0YTsKLQotCS8qIElmIG5v dCB1c2luZyBOT19SRUxPQywgZm9yY2UgdGhlIHJlbG9jYXRpb25zICovCi0JaWYgKCEody0+ZWIu ZmxhZ3MgJiBJOTE1X0VYRUNfTk9fUkVMT0MpKSB7Ci0JCXctPnJlbG9jWzFdLnByZXN1bWVkX29m ZnNldCA9IC0xOwotCQl3LT5yZWxvY1syXS5wcmVzdW1lZF9vZmZzZXQgPSAtMTsKLQkJdy0+cmVs b2NbM10ucHJlc3VtZWRfb2Zmc2V0ID0gLTE7Ci0JfQotfQotCiBzdGF0aWMgdm9pZAogdXBkYXRl X2JiX3N0YXJ0KHN0cnVjdCB3X3N0ZXAgKncpCiB7CkBAIC0yNjA2LDEyMyArMTY4MywxMiBAQCBz dGF0aWMgdm9pZCB3X3N5bmNfdG8oc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAg KncsIGludCB0YXJnZXQpCiAJZ2VtX3N5bmMoZmQsIHdyay0+c3RlcHNbdGFyZ2V0XS5vYmpbMF0u aGFuZGxlKTsKIH0KIAotc3RhdGljIHVpbnQzMl90ICpnZXRfc3RhdHVzX2NzKHN0cnVjdCB3b3Jr bG9hZCAqd3JrKQotewotCXJldHVybiB3cmstPnN0YXR1c19jczsKLX0KLQotI2RlZmluZSBJTklU X0NMT0NLUyAweDEKLSNkZWZpbmUgSU5JVF9BTEwgKElOSVRfQ0xPQ0tTKQotc3RhdGljIHZvaWQg aW5pdF9zdGF0dXNfcGFnZShzdHJ1Y3Qgd29ya2xvYWQgKndyaywgdW5zaWduZWQgaW50IGZsYWdz KQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1s0XSA9IHt9 OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpzdGF0dXNfb2JqZWN0ID0KLQkJ CQkJCWdldF9zdGF0dXNfb2JqZWN0cyh3cmspOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1 ZmZlcjIgZWIgPSB7Ci0JCS5idWZmZXJfY291bnQgPSBBUlJBWV9TSVpFKHdyay0+c3RhdHVzX29i amVjdCksCi0JCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihzdGF0dXNfb2JqZWN0KQot CX07Ci0JdWludDMyX3QgKmJhc2UgPSBnZXRfc3RhdHVzX2NzKHdyayk7Ci0KLQkvKiBXYW50IHRv IG1ha2Ugc3VyZSB0aGF0IHRoZSBiYWxhbmNlciBoYXMgYSByZWFzb25hYmxlIHZpZXcgb2YKLQkg KiB0aGUgYmFja2dyb3VuZCBidXN5bmVzcyBvZiBlYWNoIGVuZ2luZS4gVG8gZG8gdGhhdCB3ZSBv Y2Nhc2lvbmFsbHkKLQkgKiBzZW5kIGEgZHVtbXkgYmF0Y2ggZG93biB0aGUgcGlwZWxpbmUuCi0J ICovCi0KLQlpZiAoIWJhc2UpCi0JCXJldHVybjsKLQotCWdlbV9zZXRfZG9tYWluKGZkLCBzdGF0 dXNfb2JqZWN0WzFdLmhhbmRsZSwKLQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9XQywgSTkxNV9H RU1fRE9NQUlOX1dDKTsKLQotCXN0YXR1c19vYmplY3RbMV0ucmVsb2NzX3B0ciA9IHRvX3VzZXJf cG9pbnRlcihyZWxvYyk7Ci0Jc3RhdHVzX29iamVjdFsxXS5yZWxvY2F0aW9uX2NvdW50ID0gMjsK LQlpZiAoZmxhZ3MgJiBJTklUX0NMT0NLUykKLQkJc3RhdHVzX29iamVjdFsxXS5yZWxvY2F0aW9u X2NvdW50ICs9IDI7Ci0KLQlmb3IgKGludCBlbmdpbmUgPSAwOyBlbmdpbmUgPCBOVU1fRU5HSU5F UzsgZW5naW5lKyspIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpy ID0gcmVsb2M7Ci0JCXVpbnQ2NF90IHByZXN1bWVkX29mZnNldCA9IHN0YXR1c19vYmplY3RbMF0u b2Zmc2V0OwotCQl1aW50MzJfdCBvZmZzZXQgPSBlbmdpbmUgKiAxMjg7Ci0JCXVpbnQzMl90ICpj cyA9IGJhc2UgKyBvZmZzZXQgLyBzaXplb2YoKmNzKTsKLQkJdWludDY0X3QgYWRkcjsKLQotCQly LT5vZmZzZXQgPSBvZmZzZXQgKyBzaXplb2YodWludDMyX3QpOwotCQlyLT5kZWx0YSA9IFNFUU5P X09GRlNFVChlbmdpbmUpOwotCQlyLT5wcmVzdW1lZF9vZmZzZXQgPSBwcmVzdW1lZF9vZmZzZXQ7 Ci0JCWFkZHIgPSBwcmVzdW1lZF9vZmZzZXQgKyByLT5kZWx0YTsKLQkJcisrOwotCQkqY3MrKyA9 IE1JX1NUT1JFX0RXT1JEX0lNTTsKLQkJKmNzKysgPSBhZGRyOwotCQkqY3MrKyA9IGFkZHIgPj4g MzI7Ci0JCSpjcysrID0gbmV3X3NlcW5vKHdyaywgZW5naW5lKTsKLQkJb2Zmc2V0ICs9IDQgKiBz aXplb2YodWludDMyX3QpOwotCi0JCS8qIFdoZW4gd2UgYXJlIGJ1c3ksIHdlIGNhbiBqdXN0IHJl dXNlIHRoZSBsYXN0IHNldCBvZiB0aW1pbmdzLgotCQkgKiBJZiB3ZSBoYXZlIGJlZW4gaWRsZSBm b3IgYSB3aGlsZSwgd2Ugd2FudCB0byByZXNhbXBsZSB0aGUKLQkJICogbGF0ZW5jeSBvbiBlYWNo IGVuZ2luZSAodG8gbWVhc3VyZSBleHRlcm5hbCBsb2FkKS4KLQkJICovCi0JCWlmIChmbGFncyAm IElOSVRfQ0xPQ0tTKSB7Ci0JCQlyLT5vZmZzZXQgPSBvZmZzZXQgKyBzaXplb2YodWludDMyX3Qp OwotCQkJci0+ZGVsdGEgPSBTRVFOT19PRkZTRVQoZW5naW5lKSArIHNpemVvZih1aW50MzJfdCk7 Ci0JCQlyLT5wcmVzdW1lZF9vZmZzZXQgPSBwcmVzdW1lZF9vZmZzZXQ7Ci0JCQlhZGRyID0gcHJl c3VtZWRfb2Zmc2V0ICsgci0+ZGVsdGE7Ci0JCQlyKys7Ci0JCQkqY3MrKyA9IE1JX1NUT1JFX0RX T1JEX0lNTTsKLQkJCSpjcysrID0gYWRkcjsKLQkJCSpjcysrID0gYWRkciA+PiAzMjsKLQkJCSpj cysrID0gKlJFRyhSQ1NfVElNRVNUQU1QKTsKLQkJCW9mZnNldCArPSA0ICogc2l6ZW9mKHVpbnQz Ml90KTsKLQotCQkJci0+b2Zmc2V0ID0gb2Zmc2V0ICsgMiAqIHNpemVvZih1aW50MzJfdCk7Ci0J CQlyLT5kZWx0YSA9IFNFUU5PX09GRlNFVChlbmdpbmUpICsgMipzaXplb2YodWludDMyX3QpOwot CQkJci0+cHJlc3VtZWRfb2Zmc2V0ID0gcHJlc3VtZWRfb2Zmc2V0OwotCQkJYWRkciA9IHByZXN1 bWVkX29mZnNldCArIHItPmRlbHRhOwotCQkJcisrOwotCQkJKmNzKysgPSAweDI0IDw8IDIzIHwg MjsgLyogTUlfU1RPUkVfUkVHX01FTSAqLwotCQkJKmNzKysgPSBSQ1NfVElNRVNUQU1QOwotCQkJ KmNzKysgPSBhZGRyOwotCQkJKmNzKysgPSBhZGRyID4+IDMyOwotCQkJb2Zmc2V0ICs9IDQgKiBz aXplb2YodWludDMyX3QpOwotCQl9Ci0KLQkJci0+b2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZW9mKHVp bnQzMl90KTsKLQkJci0+ZGVsdGEgPSBTRVFOT19PRkZTRVQoZW5naW5lKSArIDMqc2l6ZW9mKHVp bnQzMl90KTsKLQkJci0+cHJlc3VtZWRfb2Zmc2V0ID0gcHJlc3VtZWRfb2Zmc2V0OwotCQlhZGRy ID0gcHJlc3VtZWRfb2Zmc2V0ICsgci0+ZGVsdGE7Ci0JCXIrKzsKLQkJKmNzKysgPSBNSV9TVE9S RV9EV09SRF9JTU07Ci0JCSpjcysrID0gYWRkcjsKLQkJKmNzKysgPSBhZGRyID4+IDMyOwotCQkq Y3MrKyA9IGN1cnJlbnRfc2Vxbm8od3JrLCBlbmdpbmUpOwotCQlvZmZzZXQgKz0gNCAqIHNpemVv Zih1aW50MzJfdCk7Ci0KLQkJKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwotCi0JCWViX3Nl dF9lbmdpbmUoJmViLCBlbmdpbmUsIHdyay0+ZmxhZ3MpOwotCQllYi5mbGFncyB8PSBJOTE1X0VY RUNfSEFORExFX0xVVDsKLQkJZWIuZmxhZ3MgfD0gSTkxNV9FWEVDX05PX1JFTE9DOwotCi0JCWVi LmJhdGNoX3N0YXJ0X29mZnNldCA9IDEyOCAqIGVuZ2luZTsKLQotCQlnZW1fZXhlY2J1ZihmZCwg JmViKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkCi1kb19lYihzdHJ1Y3Qgd29ya2xvYWQgKndyaywg c3RydWN0IHdfc3RlcCAqdywgZW51bSBpbnRlbF9lbmdpbmVfaWQgZW5naW5lLAotICAgICAgdW5z aWduZWQgaW50IGZsYWdzKQorZG9fZWIoc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0 ZXAgKncsIGVudW0gaW50ZWxfZW5naW5lX2lkIGVuZ2luZSkKIHsKLQl1aW50MzJfdCBzZXFubyA9 IG5ld19zZXFubyh3cmssIGVuZ2luZSk7CiAJdW5zaWduZWQgaW50IGk7CiAKLQllYl91cGRhdGVf ZmxhZ3Mod3JrLCB3LCBlbmdpbmUsIGZsYWdzKTsKLQotCWlmIChmbGFncyAmIFNFUU5PKQotCQl1 cGRhdGVfYmJfc2Vxbm8odywgZW5naW5lLCBzZXFubyk7Ci0JaWYgKGZsYWdzICYgUlQpCi0JCXVw ZGF0ZV9iYl9ydCh3LCBlbmdpbmUsIHNlcW5vKTsKLQorCWViX3VwZGF0ZV9mbGFncyh3cmssIHcs IGVuZ2luZSk7CiAJdXBkYXRlX2JiX3N0YXJ0KHcpOwogCiAJdy0+ZWIuYmF0Y2hfc3RhcnRfb2Zm c2V0ID0KQEAgLTI3NTgsOSArMTcyNCw4IEBAIGRvX2ViKHN0cnVjdCB3b3JrbG9hZCAqd3JrLCBz dHJ1Y3Qgd19zdGVwICp3LCBlbnVtIGludGVsX2VuZ2luZV9pZCBlbmdpbmUsCiAJfQogfQogCi1z dGF0aWMgYm9vbCBzeW5jX2RlcHMoc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3X3N0ZXAg KncpCitzdGF0aWMgdm9pZCBzeW5jX2RlcHMoc3RydWN0IHdvcmtsb2FkICp3cmssIHN0cnVjdCB3 X3N0ZXAgKncpCiB7Ci0JYm9vbCBzeW5jZWQgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAog CWZvciAoaSA9IDA7IGkgPCB3LT5kYXRhX2RlcHMubnI7IGkrKykgewpAQCAtMjc3NywxMSArMTc0 Miw3IEBAIHN0YXRpYyBib29sIHN5bmNfZGVwcyhzdHJ1Y3Qgd29ya2xvYWQgKndyaywgc3RydWN0 IHdfc3RlcCAqdykKIAkJaWd0X2Fzc2VydCh3cmstPnN0ZXBzW2RlcF9pZHhdLnR5cGUgPT0gQkFU Q0gpOwogCiAJCWdlbV9zeW5jKGZkLCB3cmstPnN0ZXBzW2RlcF9pZHhdLm9ialswXS5oYW5kbGUp OwotCi0JCXN5bmNlZCA9IHRydWU7CiAJfQotCi0JcmV0dXJuIHN5bmNlZDsKIH0KIAogc3RhdGlj IHZvaWQgKnJ1bl93b3JrbG9hZCh2b2lkICpkYXRhKQpAQCAtMjc4OSw3ICsxNzUwLDYgQEAgc3Rh dGljIHZvaWQgKnJ1bl93b3JrbG9hZCh2b2lkICpkYXRhKQogCXN0cnVjdCB3b3JrbG9hZCAqd3Jr ID0gKHN0cnVjdCB3b3JrbG9hZCAqKWRhdGE7CiAJc3RydWN0IHRpbWVzcGVjIHRfc3RhcnQsIHRf ZW5kOwogCXN0cnVjdCB3X3N0ZXAgKnc7Ci0JYm9vbCBsYXN0X3N5bmMgPSBmYWxzZTsKIAlpbnQg dGhyb3R0bGUgPSAtMTsKIAlpbnQgcWRfdGhyb3R0bGUgPSAtMTsKIAlpbnQgY291bnQ7CkBAIC0y Nzk3LDcgKzE3NTcsNiBAQCBzdGF0aWMgdm9pZCAqcnVuX3dvcmtsb2FkKHZvaWQgKmRhdGEpCiAK IAljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRfc3RhcnQpOwogCi0JaW5pdF9zdGF0 dXNfcGFnZSh3cmssIElOSVRfQUxMKTsKIAlmb3IgKGNvdW50ID0gMDsgd3JrLT5ydW4gJiYgKHdy ay0+YmFja2dyb3VuZCB8fCBjb3VudCA8IHdyay0+cmVwZWF0KTsKIAkgICAgIGNvdW50KyspIHsK IAkJdW5zaWduZWQgaW50IGN1cl9zZXFubyA9IHdyay0+c3luY19zZXFubzsKQEAgLTI4OTgsMjYg KzE4NTcsMTMgQEAgc3RhdGljIHZvaWQgKnJ1bl93b3JrbG9hZCh2b2lkICpkYXRhKQogCiAJCQlp Z3RfYXNzZXJ0KHctPnR5cGUgPT0gQkFUQ0gpOwogCi0JCQlpZiAoKHdyay0+ZmxhZ3MgJiBERVBT WU5DKSAmJiBlbmdpbmUgPT0gVkNTKQotCQkJCWxhc3Rfc3luYyA9IHN5bmNfZGVwcyh3cmssIHcp OwotCi0JCQlpZiAobGFzdF9zeW5jICYmICh3cmstPmZsYWdzICYgSEVBUlRCRUFUKSkKLQkJCQlp bml0X3N0YXR1c19wYWdlKHdyaywgMCk7Ci0KLQkJCWxhc3Rfc3luYyA9IGZhbHNlOwotCi0JCQl3 cmstPm5yX2JiW2VuZ2luZV0rKzsKLQkJCWlmIChlbmdpbmUgPT0gVkNTICYmIHdyay0+YmFsYW5j ZXIgJiYKLQkJCSAgICB3cmstPmJhbGFuY2VyLT5iYWxhbmNlKSB7Ci0JCQkJZW5naW5lID0gd3Jr LT5iYWxhbmNlci0+YmFsYW5jZSh3cmstPmJhbGFuY2VyLAotCQkJCQkJCQl3cmssIHcpOwotCQkJ CXdyay0+bnJfYmJbZW5naW5lXSsrOwotCQkJfQorCQkJaWYgKHdyay0+ZmxhZ3MgJiBERVBTWU5D KQorCQkJCXN5bmNfZGVwcyh3cmssIHcpOwogCiAJCQlpZiAodGhyb3R0bGUgPiAwKQogCQkJCXdf c3luY190byh3cmssIHcsIGkgLSB0aHJvdHRsZSk7CiAKLQkJCWRvX2ViKHdyaywgdywgZW5naW5l LCB3cmstPmZsYWdzKTsKKwkJCWRvX2ViKHdyaywgdywgZW5naW5lKTsKIAogCQkJaWYgKHctPnJl cXVlc3QgIT0gLTEpIHsKIAkJCQlpZ3RfbGlzdF9kZWwoJnctPnJxX2xpbmspOwpAQCAtMjkzMCwx MCArMTg3Niw4IEBAIHN0YXRpYyB2b2lkICpydW5fd29ya2xvYWQodm9pZCAqZGF0YSkKIAkJCWlm ICghd3JrLT5ydW4pCiAJCQkJYnJlYWs7CiAKLQkJCWlmICh3LT5zeW5jKSB7CisJCQlpZiAody0+ c3luYykKIAkJCQlnZW1fc3luYyhmZCwgdy0+b2JqWzBdLmhhbmRsZSk7Ci0JCQkJbGFzdF9zeW5j ID0gdHJ1ZTsKLQkJCX0KIAogCQkJaWYgKHFkX3Rocm90dGxlID4gMCkgewogCQkJCXdoaWxlICh3 cmstPm5yZXF1ZXN0W2VuZ2luZV0gPiBxZF90aHJvdHRsZSkgewpAQCAtMjk0Myw3ICsxODg3LDYg QEAgc3RhdGljIHZvaWQgKnJ1bl93b3JrbG9hZCh2b2lkICpkYXRhKQogCQkJCQkJCQkgcywgcnFf bGluayk7CiAKIAkJCQkJZ2VtX3N5bmMoZmQsIHMtPm9ialswXS5oYW5kbGUpOwotCQkJCQlsYXN0 X3N5bmMgPSB0cnVlOwogCiAJCQkJCXMtPnJlcXVlc3QgPSAtMTsKIAkJCQkJaWd0X2xpc3RfZGVs KCZzLT5ycV9saW5rKTsKQEAgLTI5ODYsMTMgKzE5MjksNiBAQCBzdGF0aWMgdm9pZCAqcnVuX3dv cmtsb2FkKHZvaWQgKmRhdGEpCiAJCXByaW50ZigiJWMldTogJS4zZnMgZWxhcHNlZCAoJWQgY3lj bGVzLCAlLjNmIHdvcmtsb2Fkcy9zKS4iLAogCQkgICAgICAgd3JrLT5iYWNrZ3JvdW5kID8gJyAn IDogJyonLCB3cmstPmlkLAogCQkgICAgICAgdCwgY291bnQsIGNvdW50IC8gdCk7Ci0JCWlmICh3 cmstPmJhbGFuY2VyKQotCQkJcHJpbnRmKCIgJWx1ICglbHUgKyAlbHUpIHRvdGFsIFZDUyBiYXRj aGVzLiIsCi0JCQkgICAgICAgd3JrLT5ucl9iYltWQ1NdLCB3cmstPm5yX2JiW1ZDUzFdLCB3cmst Pm5yX2JiW1ZDUzJdKTsKLQkJaWYgKHdyay0+YmFsYW5jZXIgJiYgd3JrLT5iYWxhbmNlci0+Z2V0 X3FkKQotCQkJcHJpbnRmKCIgQXZlcmFnZSBxdWV1ZSBkZXB0aHMgJS4zZiwgJS4zZi4iLAotCQkJ ICAgICAgIChkb3VibGUpd3JrLT5xZF9zdW1bVkNTMV0gLyB3cmstPm5yX2JiW1ZDU10sCi0JCQkg ICAgICAgKGRvdWJsZSl3cmstPnFkX3N1bVtWQ1MyXSAvIHdyay0+bnJfYmJbVkNTXSk7CiAJCXB1 dGNoYXIoJ1xuJyk7CiAJfQogCkBAIC0zMTE0LDggKzIwNTAsNiBAQCBjYWxpYnJhdGVfZW5naW5l cyh2b2lkKQogCiBzdGF0aWMgdm9pZCBwcmludF9oZWxwKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50 IGk7Ci0KIAlwdXRzKAogIlVzYWdlOiBnZW1fd3NpbSBbT1BUSU9OU11cbiIKICJcbiIKQEAgLTMx NDUsMzIgKzIwNzksMTEgQEAgc3RhdGljIHZvaWQgcHJpbnRfaGVscCh2b2lkKQogIiAgLWEgPGRl c2N8cGF0aD4gICAgQXBwZW5kIGEgd29ya2xvYWQgdG8gYWxsIG90aGVyIHdvcmtsb2Fkcy5cbiIK ICIgIC1yIDxuPiAgICAgICAgICAgIEhvdyBtYW55IHRpbWVzIHRvIGVtaXQgdGhlIHdvcmtsb2Fk LlxuIgogIiAgLWMgPG4+ICAgICAgICAgICAgRm9yayBOIGNsaWVudHMgZW1pdHRpbmcgdGhlIHdv cmtsb2FkIHNpbXVsdGFuZW91c2x5LlxuIgotIiAgLXggICAgICAgICAgICAgICAgU3dhcCBWQ1Mx IGFuZCBWQ1MyIGVuZ2luZXMgaW4gZXZlcnkgb3RoZXIgY2xpZW50LlxuIgotIiAgLWIgPG4+ICAg ICAgICAgICAgTG9hZCBiYWxhbmNpbmcgdG8gdXNlLlxuIgotIiAgICAgICAgICAgICAgICAgICAg QXZhaWxhYmxlIGxvYWQgYmFsYW5jZXJzIGFyZToiCi0JKTsKLQotCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGFsbF9iYWxhbmNlcnMpOyBpKyspIHsKLQkJaWd0X2Fzc2VydChhbGxfYmFsYW5j ZXJzW2ldLmRlc2MpOwotCQlwcmludGYoCi0iICAgICAgICAgICAgICAgICAgICAgICAlcyAoJXUp OiAlc1xuIiwKLQkJICAgICAgIGFsbF9iYWxhbmNlcnNbaV0ubmFtZSwgYWxsX2JhbGFuY2Vyc1tp XS5pZCwKLQkJICAgICAgIGFsbF9iYWxhbmNlcnNbaV0uZGVzYyk7Ci0JfQotCXB1dHMoCi0iICAg ICAgICAgICAgICAgICAgICAgQmFsYW5jZXJzIGNhbiBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIG5h bWVzIG9yIGFzIHRoZWlyIGlkXG4iCi0iICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGFzIGxp c3RlZCBhYm92ZS5cbiIKLSIgIC0yICAgICAgICAgICAgICAgICBSZW1hcCBWQ1MyIHRvIEJDUy5c biIKLSIgIC1SICAgICAgICAgICAgICAgICBSb3VuZC1yb2JpbiBpbml0aWFsIFZDUyBhc3NpZ25t ZW50IHBlciBjbGllbnQuXG4iCi0iICAtSCAgICAgICAgICAgICAgICAgU2VuZCBoZWFydGJlYXQg b24gc3luY2hyb25pc2F0aW9uIHBvaW50cyB3aXRoIHNlcW5vIGJhc2VkXG4iCi0iICAgICAgICAg ICAgICAgICAgICAgYmFsYW5jZXJzLiBHaXZlcyBiZXR0ZXIgZW5naW5lIGJ1c3luZXNzIHZpZXcg aW4gc29tZSBjYXNlcy5cbiIKLSIgIC1zICAgICAgICAgICAgICAgICBUdXJuIG9uIHNtYWxsIFNT RVUgY29uZmlnIGZvciB0aGUgbmV4dCB3b3JrbG9hZCBvbiB0aGVcbiIKLSIgICAgICAgICAgICAg ICAgICAgICBjb21tYW5kIGxpbmUuIFN1YnNlcXVlbnQgLXMgc3dpdGNoZXMgaXQgb2ZmLlxuIgot IiAgLVMgICAgICAgICAgICAgICAgIFN5bmNocm9uaXplIHRoZSBzZXF1ZW5jZSBvZiByYW5kb20g YmF0Y2ggZHVyYXRpb25zIGJldHdlZW5cbiIKLSIgICAgICAgICAgICAgICAgICAgICBjbGllbnRz LlxuIgotIiAgLUcgICAgICAgICAgICAgICAgIEdsb2JhbCBsb2FkIGJhbGFuY2luZyAtIGEgc2lu Z2xlIGxvYWQgYmFsYW5jZXIgd2lsbCBiZSBzaGFyZWRcbiIKLSIgICAgICAgICAgICAgICAgICAg ICBiZXR3ZWVuIGFsbCBjbGllbnRzIGFuZCB0aGVyZSB3aWxsIGJlIGEgc2luZ2xlIHNlcW5vIGRv bWFpbi5cbiIKLSIgIC1kICAgICAgICAgICAgICAgICBTeW5jIGJldHdlZW4gZGF0YSBkZXBlbmRl bmNpZXMgaW4gdXNlcnNwYWNlLiIKKyIgIC1zICAgICAgICAgICAgICAgIFR1cm4gb24gc21hbGwg U1NFVSBjb25maWcgZm9yIHRoZSBuZXh0IHdvcmtsb2FkIG9uIHRoZVxuIgorIiAgICAgICAgICAg ICAgICAgICAgY29tbWFuZCBsaW5lLiBTdWJzZXF1ZW50IC1zIHN3aXRjaGVzIGl0IG9mZi5cbiIK KyIgIC1TICAgICAgICAgICAgICAgIFN5bmNocm9uaXplIHRoZSBzZXF1ZW5jZSBvZiByYW5kb20g YmF0Y2ggZHVyYXRpb25zIGJldHdlZW5cbiIKKyIgICAgICAgICAgICAgICAgICAgIGNsaWVudHMu XG4iCisiICAtZCAgICAgICAgICAgICAgICBTeW5jIGJldHdlZW4gZGF0YSBkZXBlbmRlbmNpZXMg aW4gdXNlcnNwYWNlLiIKIAkpOwogfQogCkBAIC0zMjE4LDYyICsyMTMxLDYgQEAgYWRkX3dvcmts b2FkX2FyZyhzdHJ1Y3Qgd19hcmcgKndfYXJncywgdW5zaWduZWQgaW50IG5yX2FyZ3MsIGNoYXIg KndfYXJnLAogCXJldHVybiB3X2FyZ3M7CiB9CiAKLXN0YXRpYyBpbnQgZmluZF9iYWxhbmNlcl9i eV9uYW1lKGNoYXIgKm5hbWUpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShhbGxfYmFsYW5jZXJzKTsgaSsrKSB7Ci0JCWlmICghc3RyY2FzZWNtcChu YW1lLCBhbGxfYmFsYW5jZXJzW2ldLm5hbWUpKQotCQkJcmV0dXJuIGFsbF9iYWxhbmNlcnNbaV0u aWQ7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHdvcmtsb2Fk X2JhbGFuY2VyICpmaW5kX2JhbGFuY2VyX2J5X2lkKHVuc2lnbmVkIGludCBpZCkKLXsKLQl1bnNp Z25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbF9iYWxhbmNlcnMp OyBpKyspIHsKLQkJaWYgKGlkID09IGFsbF9iYWxhbmNlcnNbaV0uaWQpCi0JCQlyZXR1cm4gJmFs bF9iYWxhbmNlcnNbaV07Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGlu aXRfY2xvY2tzKHZvaWQpCi17Ci0Jc3RydWN0IHRpbWVzcGVjIHRfc3RhcnQsIHRfZW5kOwotCXVp bnQzMl90IHJjc19zdGFydCwgcmNzX2VuZDsKLQlkb3VibGUgb3ZlcmhlYWQsIHQ7Ci0KLQlpZiAo dmVyYm9zZSA8PSAxKQotCQlyZXR1cm47Ci0KLQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05J QywgJnRfc3RhcnQpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspCi0JCXJjc19zdGFy dCA9ICpSRUcoUkNTX1RJTUVTVEFNUCk7Ci0JY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMs ICZ0X2VuZCk7Ci0Jb3ZlcmhlYWQgPSAyICogZWxhcHNlZCgmdF9zdGFydCwgJnRfZW5kKSAvIDEw MDsKLQotCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdF9zdGFydCk7Ci0JZm9yIChp bnQgaSA9IDA7IGkgPCAxMDA7IGkrKykKLQkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMs ICZ0X2VuZCk7Ci0JY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0X2VuZCk7Ci0Jb3Zl cmhlYWQgKz0gZWxhcHNlZCgmdF9zdGFydCwgJnRfZW5kKSAvIDEwMDsKLQotCWNsb2NrX2dldHRp bWUoQ0xPQ0tfTU9OT1RPTklDLCAmdF9zdGFydCk7Ci0JcmNzX3N0YXJ0ID0gKlJFRyhSQ1NfVElN RVNUQU1QKTsKLQl1c2xlZXAoMTAwKTsKLQlyY3NfZW5kID0gKlJFRyhSQ1NfVElNRVNUQU1QKTsK LQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRfZW5kKTsKLQotCXQgPSBlbGFwc2Vk KCZ0X3N0YXJ0LCAmdF9lbmQpIC0gb3ZlcmhlYWQ7Ci0JcHJpbnRmKCIlZCBjeWNsZXMgaW4gJS4x ZnVzLCBpLmUuIDEwMjQgY3ljbGVzIHRha2VzICUxLmZ1c1xuIiwKLQkgICAgICAgcmNzX2VuZCAt IHJjc19zdGFydCwgMWU2KnQsIDEwMjRlNiAqIHQgLyAocmNzX2VuZCAtIHJjc19zdGFydCkpOwot fQotCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJdW5zaWduZWQgaW50IHJl cGVhdCA9IDE7CkBAIC0zMjg3LDkgKzIxNDQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJY2hhciAqYXBwZW5kX3dvcmtsb2FkX2FyZyA9IE5VTEw7CiAJc3RydWN0IHdfYXJn ICp3X2FyZ3MgPSBOVUxMOwogCXVuc2lnbmVkIGludCB0b2xlcmFuY2VfcGN0ID0gMTsKLQljb25z dCBzdHJ1Y3Qgd29ya2xvYWRfYmFsYW5jZXIgKmJhbGFuY2VyID0gTlVMTDsKIAlpbnQgZXhpdGNv ZGUgPSBFWElUX0ZBSUxVUkU7Ci0JY2hhciAqZW5kcHRyID0gTlVMTDsKIAlpbnQgcHJpbyA9IDA7 CiAJZG91YmxlIHQ7CiAJaW50IGksIGM7CkBAIC0zMzA0LDE3ICsyMTU5LDEzIEBAIGludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiBUaGlzIG1pbmltaXplcyB0aGUgZ2FwIGluIGVu Z2luZSB1dGlsaXphdGlvbiB0cmFja2luZyB3aGVuIG9ic2VydmVkCiAJICogdmlhIGV4dGVybmFs IHRvb2xzIGxpa2UgdHJhY2UucGwuCiAJICovCi0JZmQgPSBfX2RybV9vcGVuX2RyaXZlcihEUklW RVJfSU5URUwpOworCWZkID0gX19kcm1fb3Blbl9kcml2ZXJfcmVuZGVyKERSSVZFUl9JTlRFTCk7 CiAJaWd0X3JlcXVpcmUoZmQpOwogCi0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQoJm1taW9f ZGF0YSwgaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgZmFsc2UsIGZkKTsKLQotCWluaXRfY2xvY2tz KCk7Ci0KIAltYXN0ZXJfcHJuZyA9IHRpbWUoTlVMTCk7CiAKIAl3aGlsZSAoKGMgPSBnZXRvcHQo YXJnYywgYXJndiwKLQkJCSAgICJUaHF2MlJzU0h4R2RjOm46cjp3Olc6YTp0OmI6cDpJOiIpKSAh PSAtMSkgeworCQkJICAgIlRocXZzU2RjOm46cjp3Olc6YTp0OnA6SToiKSkgIT0gLTEpIHsKIAkJ c3dpdGNoIChjKSB7CiAJCWNhc2UgJ1cnOgogCQkJaWYgKG1hc3Rlcl93b3JrbG9hZCA+PSAwKSB7 CkBAIC0zNDEzLDUyICsyMjY0LDE1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkJY2FzZSAndic6CiAJCQl2ZXJib3NlKys7CiAJCQlicmVhazsKLQkJY2FzZSAneCc6Ci0JCQlm bGFncyB8PSBTV0FQVkNTOwotCQkJYnJlYWs7Ci0JCWNhc2UgJzInOgotCQkJZmxhZ3MgfD0gVkNT MlJFTUFQOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ1InOgotCQkJZmxhZ3MgfD0gSU5JVFZDU1JSOwot CQkJYnJlYWs7CiAJCWNhc2UgJ1MnOgogCQkJZmxhZ3MgfD0gU1lOQ0VEQ0xJRU5UUzsKIAkJCWJy ZWFrOwogCQljYXNlICdzJzoKIAkJCWZsYWdzIF49IFNTRVU7CiAJCQlicmVhazsKLQkJY2FzZSAn SCc6Ci0JCQlmbGFncyB8PSBIRUFSVEJFQVQ7Ci0JCQlicmVhazsKLQkJY2FzZSAnRyc6Ci0JCQlm bGFncyB8PSBHTE9CQUxfQkFMQU5DRTsKLQkJCWJyZWFrOwogCQljYXNlICdkJzoKIAkJCWZsYWdz IHw9IERFUFNZTkM7CiAJCQlicmVhazsKLQkJY2FzZSAnYic6Ci0JCQlpID0gZmluZF9iYWxhbmNl cl9ieV9uYW1lKG9wdGFyZyk7Ci0JCQlpZiAoaSA8IDApIHsKLQkJCQlpID0gc3RydG9sKG9wdGFy ZywgJmVuZHB0ciwgMCk7Ci0JCQkJaWYgKGVuZHB0ciAmJiAqZW5kcHRyKQotCQkJCQlpID0gLTE7 Ci0JCQl9Ci0KLQkJCWlmIChpID49IDApIHsKLQkJCQliYWxhbmNlciA9IGZpbmRfYmFsYW5jZXJf YnlfaWQoaSk7Ci0JCQkJaWYgKGJhbGFuY2VyKSB7Ci0JCQkJCWlndF9hc3NlcnQoaW50ZWxfZ2Vu KGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSA+PSBiYWxhbmNlci0+bWluX2dlbik7Ci0JCQkJCWZs YWdzIHw9IEJBTEFOQ0UgfCBiYWxhbmNlci0+ZmxhZ3M7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAo IWJhbGFuY2VyKSB7Ci0JCQkJd3NpbV9lcnIoIlVua25vd24gYmFsYW5jaW5nIG1vZGUgJyVzJyFc biIsCi0JCQkJCSBvcHRhcmcpOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCQkJYnJlYWs7CiAJCWNh c2UgJ0knOgogCQkJbWFzdGVyX3BybmcgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTsKIAkJCWJy ZWFrOwpAQCAtMzQ3MCwxNiArMjI4NCw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJfQogCX0KIAotCWlmICgoZmxhZ3MgJiBIRUFSVEJFQVQpICYmICEoZmxhZ3MgJiBTRVFO TykpIHsKLQkJd3NpbV9lcnIoIkhlYXJ0YmVhdCBuZWVkcyBhIHNlcW5vIGJhc2VkIGJhbGFuY2Vy IVxuIik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWlmICgoZmxhZ3MgJiBWQ1MyUkVNQVApICYmIChm bGFncyAmIEk5MTUpKSB7Ci0JCXdzaW1fZXJyKCJWQ1MgcmVtYXBwaW5nIG5vdCBzdXBwb3J0ZWQg d2l0aCBpOTE1IGJhbGFuY2luZyFcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KIAlpZiAoIWhhc19u b3BfY2FsaWJyYXRpb24pIHsKIAkJaWYgKHZlcmJvc2UgPiAxKSB7CiAJCQlwcmludGYoIkNhbGli cmF0aW5nIG5vcCBkZWxheXMgd2l0aCAldSUlIHRvbGVyYW5jZS4uLlxuIiwKQEAgLTM1MTksMTEg KzIzMjMsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWdvdG8gZXJyOwog CX0KIAotCWlmICgoZmxhZ3MgJiBHTE9CQUxfQkFMQU5DRSkgJiYgIWJhbGFuY2VyKSB7Ci0JCXdz aW1fZXJyKCJCYWxhbmNlciBub3Qgc3BlY2lmaWVkIGluIGdsb2JhbCBiYWxhbmNpbmcgbW9kZSFc biIpOwotCQlnb3RvIGVycjsKLQl9Ci0KIAlpZiAoYXBwZW5kX3dvcmtsb2FkX2FyZykgewogCQlh cHBlbmRfd29ya2xvYWRfYXJnID0gbG9hZF93b3JrbG9hZF9kZXNjcmlwdG9yKGFwcGVuZF93b3Jr bG9hZF9hcmcpOwogCQlpZiAoIWFwcGVuZF93b3JrbG9hZF9hcmcpIHsKQEAgLTM1NjYsMTkgKzIz NjUsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXByaW50ZigiUmFuZG9t IHNlZWQgaXMgJXUuXG4iLCBtYXN0ZXJfcHJuZyk7CiAJCXByaW50X2VuZ2luZV9jYWxpYnJhdGlv bnMoKTsKIAkJcHJpbnRmKCIldSBjbGllbnQlcy5cbiIsIGNsaWVudHMsIGNsaWVudHMgPiAxID8g InMiIDogIiIpOwotCQlpZiAoZmxhZ3MgJiBTV0FQVkNTKQotCQkJcHJpbnRmKCJTd2FwcGluZyBW Q1MgcmluZ3MgYmV0d2VlbiBjbGllbnRzLlxuIik7Ci0JCWlmIChmbGFncyAmIEdMT0JBTF9CQUxB TkNFKSB7Ci0JCQlpZiAoZmxhZ3MgJiBJOTE1KSB7Ci0JCQkJcHJpbnRmKCJJZ25vcmluZyBnbG9i YWwgYmFsYW5jaW5nIHdpdGggaTkxNSFcbiIpOwotCQkJCWZsYWdzICY9IH5HTE9CQUxfQkFMQU5D RTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRmKCJVc2luZyAlcyBiYWxhbmNlciBpbiBnbG9iYWwg bW9kZS5cbiIsCi0JCQkJICAgICAgIGJhbGFuY2VyLT5uYW1lKTsKLQkJCX0KLQkJfSBlbHNlIGlm IChiYWxhbmNlcikgewotCQkJcHJpbnRmKCJVc2luZyAlcyBiYWxhbmNlci5cbiIsIGJhbGFuY2Vy LT5uYW1lKTsKLQkJfQogCX0KIAogCXNyYW5kKG1hc3Rlcl9wcm5nKTsKQEAgLTM1OTEsNDEgKzIz NzcsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlndF9hc3NlcnQodyk7 CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2xpZW50czsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCBmbGFn c18gPSBmbGFnczsKLQogCQl3W2ldID0gY2xvbmVfd29ya2xvYWQod3JrW25yX3dfYXJncyA+IDEg PyBpIDogMF0pOwogCi0JCWlmIChmbGFncyAmIFNXQVBWQ1MgJiYgaSAmIDEpCi0JCQlmbGFnc18g Jj0gflNXQVBWQ1M7Ci0KLQkJaWYgKChmbGFncyAmIEdMT0JBTF9CQUxBTkNFKSAmJiAhKGZsYWdz ICYgSTkxNSkpIHsKLQkJCXdbaV0tPmJhbGFuY2VyID0gJmdsb2JhbF9iYWxhbmNlcjsKLQkJCXdb aV0tPmdsb2JhbF93cmsgPSB3WzBdOwotCQkJd1tpXS0+Z2xvYmFsX2JhbGFuY2VyID0gYmFsYW5j ZXI7Ci0JCX0gZWxzZSB7Ci0JCQl3W2ldLT5iYWxhbmNlciA9IGJhbGFuY2VyOwotCQl9Ci0KIAkJ d1tpXS0+ZmxhZ3MgPSBmbGFnczsKIAkJd1tpXS0+cmVwZWF0ID0gcmVwZWF0OwogCQl3W2ldLT5i YWNrZ3JvdW5kID0gbWFzdGVyX3dvcmtsb2FkID49IDAgJiYgaSAhPSBtYXN0ZXJfd29ya2xvYWQ7 CiAJCXdbaV0tPnByaW50X3N0YXRzID0gdmVyYm9zZSA+IDEgfHwKIAkJCQkgICAgKHZlcmJvc2Ug PiAwICYmIG1hc3Rlcl93b3JrbG9hZCA9PSBpKTsKIAotCQlpZiAocHJlcGFyZV93b3JrbG9hZChp LCB3W2ldLCBmbGFnc18pKSB7CisJCWlmIChwcmVwYXJlX3dvcmtsb2FkKGksIHdbaV0pKSB7CiAJ CQl3c2ltX2VycigiRmFpbGVkIHRvIHByZXBhcmUgd29ya2xvYWQgJXUhXG4iLCBpKTsKIAkJCWdv dG8gZXJyOwogCQl9Ci0KLQotCQlpZiAoYmFsYW5jZXIgJiYgYmFsYW5jZXItPmluaXQpIHsKLQkJ CWludCByZXQgPSBiYWxhbmNlci0+aW5pdChiYWxhbmNlciwgd1tpXSk7Ci0JCQlpZiAocmV0KSB7 Ci0JCQkJd3NpbV9lcnIoIkZhaWxlZCB0byBpbml0aWFsaXplIGJhbGFuY2luZyEgKCV1PSVkKVxu IiwKLQkJCQkJIGksIHJldCk7Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0JCX0KIAl9CiAKIAljbG9j a19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRfc3RhcnQpOwpAQCAtMzY3MCw2ICsyNDMzLDUg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogb3V0OgogCWV4aXRjb2RlID0gRVhJ VF9TVUNDRVNTOwogZXJyOgotCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCZtbWlvX2RhdGEp OwogCXJldHVybiBleGl0Y29kZTsKIH0KZGlmZiAtLWdpdCBhL2JlbmNobWFya3MvaWxvZzIuaCBi L2JlbmNobWFya3MvaWxvZzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk2ZDdj MjNlMGQxLi4wMDAwMDAwMDAwMDAKLS0tIGEvYmVuY2htYXJrcy9pbG9nMi5oCisrKyAvZGV2L251 bGwKQEAgLTEsMTA0ICswLDAgQEAKLSNpZm5kZWYgSUxPRzJfSAotI2RlZmluZSBJTE9HMl9ICi0K LSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotc3RhdGljIGlubGluZSBpbnQgZmxzKGludCB4KQotewot ICAgICAgICBpbnQgciA9IC0xOwotICAgICAgICBhc20oImJzcmwgJTEsJTAiIDogIj1yIiAocikg OiAicm0iICh4KSwgIjAiICgtMSkpOwotICAgICAgICByZXR1cm4gciArIDE7Ci19Ci0KLXN0YXRp YyBpbmxpbmUgaW50IGZsczY0KF9fdTY0IHgpCi17Ci0gICAgICAgIGludCByID0gLTE7Ci0gICAg ICAgIGFzbSgiYnNycSAlMSwlcTAiIDogIityIiAocikgOiAicm0iICh4KSk7Ci0gICAgICAgIHJl dHVybiByICsgMTsKLX0KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpCi1p bnQgX19pbG9nMl91MzIodWludDMyX3QgbikKLXsKLQlyZXR1cm4gZmxzKG4pIC0gMTsKLX0KLQot c3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpCi1pbnQgX19pbG9nMl91NjQodWlu dDY0X3QgbikKLXsKLQlyZXR1cm4gZmxzNjQobikgLSAxOwotfQotCi0jZGVmaW5lIGlsb2cyKG4p CQkJCVwKLSgJCQkJCQlcCi0JX19idWlsdGluX2NvbnN0YW50X3AobikgPyAoCQlcCi0JCShuKSA8 IDIgPyAwIDoJCQlcCi0JCShuKSAmICgxVUxMIDw8IDYzKSA/IDYzIDoJXAotCQkobikgJiAoMVVM TCA8PCA2MikgPyA2MiA6CVwKLQkJKG4pICYgKDFVTEwgPDwgNjEpID8gNjEgOglcCi0JCShuKSAm ICgxVUxMIDw8IDYwKSA/IDYwIDoJXAotCQkobikgJiAoMVVMTCA8PCA1OSkgPyA1OSA6CVwKLQkJ KG4pICYgKDFVTEwgPDwgNTgpID8gNTggOglcCi0JCShuKSAmICgxVUxMIDw8IDU3KSA/IDU3IDoJ XAotCQkobikgJiAoMVVMTCA8PCA1NikgPyA1NiA6CVwKLQkJKG4pICYgKDFVTEwgPDwgNTUpID8g NTUgOglcCi0JCShuKSAmICgxVUxMIDw8IDU0KSA/IDU0IDoJXAotCQkobikgJiAoMVVMTCA8PCA1 MykgPyA1MyA6CVwKLQkJKG4pICYgKDFVTEwgPDwgNTIpID8gNTIgOglcCi0JCShuKSAmICgxVUxM IDw8IDUxKSA/IDUxIDoJXAotCQkobikgJiAoMVVMTCA8PCA1MCkgPyA1MCA6CVwKLQkJKG4pICYg KDFVTEwgPDwgNDkpID8gNDkgOglcCi0JCShuKSAmICgxVUxMIDw8IDQ4KSA/IDQ4IDoJXAotCQko bikgJiAoMVVMTCA8PCA0NykgPyA0NyA6CVwKLQkJKG4pICYgKDFVTEwgPDwgNDYpID8gNDYgOglc Ci0JCShuKSAmICgxVUxMIDw8IDQ1KSA/IDQ1IDoJXAotCQkobikgJiAoMVVMTCA8PCA0NCkgPyA0 NCA6CVwKLQkJKG4pICYgKDFVTEwgPDwgNDMpID8gNDMgOglcCi0JCShuKSAmICgxVUxMIDw8IDQy KSA/IDQyIDoJXAotCQkobikgJiAoMVVMTCA8PCA0MSkgPyA0MSA6CVwKLQkJKG4pICYgKDFVTEwg PDwgNDApID8gNDAgOglcCi0JCShuKSAmICgxVUxMIDw8IDM5KSA/IDM5IDoJXAotCQkobikgJiAo MVVMTCA8PCAzOCkgPyAzOCA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMzcpID8gMzcgOglcCi0JCShu KSAmICgxVUxMIDw8IDM2KSA/IDM2IDoJXAotCQkobikgJiAoMVVMTCA8PCAzNSkgPyAzNSA6CVwK LQkJKG4pICYgKDFVTEwgPDwgMzQpID8gMzQgOglcCi0JCShuKSAmICgxVUxMIDw8IDMzKSA/IDMz IDoJXAotCQkobikgJiAoMVVMTCA8PCAzMikgPyAzMiA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMzEp ID8gMzEgOglcCi0JCShuKSAmICgxVUxMIDw8IDMwKSA/IDMwIDoJXAotCQkobikgJiAoMVVMTCA8 PCAyOSkgPyAyOSA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMjgpID8gMjggOglcCi0JCShuKSAmICgx VUxMIDw8IDI3KSA/IDI3IDoJXAotCQkobikgJiAoMVVMTCA8PCAyNikgPyAyNiA6CVwKLQkJKG4p ICYgKDFVTEwgPDwgMjUpID8gMjUgOglcCi0JCShuKSAmICgxVUxMIDw8IDI0KSA/IDI0IDoJXAot CQkobikgJiAoMVVMTCA8PCAyMykgPyAyMyA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMjIpID8gMjIg OglcCi0JCShuKSAmICgxVUxMIDw8IDIxKSA/IDIxIDoJXAotCQkobikgJiAoMVVMTCA8PCAyMCkg PyAyMCA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMTkpID8gMTkgOglcCi0JCShuKSAmICgxVUxMIDw8 IDE4KSA/IDE4IDoJXAotCQkobikgJiAoMVVMTCA8PCAxNykgPyAxNyA6CVwKLQkJKG4pICYgKDFV TEwgPDwgMTYpID8gMTYgOglcCi0JCShuKSAmICgxVUxMIDw8IDE1KSA/IDE1IDoJXAotCQkobikg JiAoMVVMTCA8PCAxNCkgPyAxNCA6CVwKLQkJKG4pICYgKDFVTEwgPDwgMTMpID8gMTMgOglcCi0J CShuKSAmICgxVUxMIDw8IDEyKSA/IDEyIDoJXAotCQkobikgJiAoMVVMTCA8PCAxMSkgPyAxMSA6 CVwKLQkJKG4pICYgKDFVTEwgPDwgMTApID8gMTAgOglcCi0JCShuKSAmICgxVUxMIDw8ICA5KSA/ ICA5IDoJXAotCQkobikgJiAoMVVMTCA8PCAgOCkgPyAgOCA6CVwKLQkJKG4pICYgKDFVTEwgPDwg IDcpID8gIDcgOglcCi0JCShuKSAmICgxVUxMIDw8ICA2KSA/ICA2IDoJXAotCQkobikgJiAoMVVM TCA8PCAgNSkgPyAgNSA6CVwKLQkJKG4pICYgKDFVTEwgPDwgIDQpID8gIDQgOglcCi0JCShuKSAm ICgxVUxMIDw8ICAzKSA/ICAzIDoJXAotCQkobikgJiAoMVVMTCA8PCAgMikgPyAgMiA6CVwKLQkJ MSApIDoJCQkJXAotCShzaXplb2YobikgPD0gNCkgPwkJCVwKLQlfX2lsb2cyX3UzMihuKSA6CQkJ XAotCV9faWxvZzJfdTY0KG4pCQkJCVwKLSApCi0KLSNlbmRpZiAvKiBJTE9HMl9IICovCmRpZmYg LS1naXQgYS9iZW5jaG1hcmtzL21lc29uLmJ1aWxkIGIvYmVuY2htYXJrcy9tZXNvbi5idWlsZApp bmRleCBlZjkzMTkzYjcwZGQuLmM3MGUxYWFjNzljNiAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy9t ZXNvbi5idWlsZAorKysgYi9iZW5jaG1hcmtzL21lc29uLmJ1aWxkCkBAIC0xMSw2ICsxMSw3IEBA IGJlbmNobWFya19wcm9ncyA9IFsKIAknZ2VtX3BydycsCiAJJ2dlbV9zZXRfZG9tYWluJywKIAkn Z2VtX3N5c2xhdGVuY3knLAorCSdnZW1fd3NpbScsCiAJJ2ttc192YmxhbmsnLAogCSdwcmltZV9s b29rdXAnLAogCSd2Z2VtX21tYXAnLApAQCAtMzQsOCArMzUsMyBAQCBmb3JlYWNoIHByb2cgOiBi ZW5jaG1hcmtfcHJvZ3MKIAkJICAgaW5zdGFsbF9kaXIgOiBiZW5jaG1hcmtzZGlyLAogCQkgICBk ZXBlbmRlbmNpZXMgOiBpZ3RfZGVwcykKIGVuZGZvcmVhY2gKLQotZXhlY3V0YWJsZSgnZ2VtX3dz aW0nLCAnZ2VtX3dzaW0uYycsCi0JICAgaW5zdGFsbCA6IHRydWUsCi0JICAgaW5zdGFsbF9kaXIg OiBiZW5jaG1hcmtzZGlyLAotCSAgIGRlcGVuZGVuY2llcyA6IGlndF9kZXBzICsgWyBsaWJfaWd0 X3BlcmYgXSkKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYS0xMDgwcC1wbGF5ZXIu d3NpbSBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYS0xMDgwcC1wbGF5ZXIud3NpbQppbmRleCBiY2Ji MGNmZDJhZDMuLmM4N2UxYWVlNGY1ZCAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlh LTEwODBwLXBsYXllci53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYS0xMDgwcC1wbGF5 ZXIud3NpbQpAQCAtMSwzICsxLDUgQEAKK00uMS5WQ1MKK0IuMQogMS5WQ1MuNTAwMC0xMDAwMC4w LjAKIDIuUkNTLjEwMDAtMjAwMC4tMS4wCiBQLjMuMQpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93 c2ltL21lZGlhXzFuMl80ODBwLndzaW0gYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW4yXzQ4MHAu d3NpbQppbmRleCAxMWE0ZGE2YmZhZTguLjNjZTE1ZWJjM2Q3MSAxMDA2NDQKLS0tIGEvYmVuY2ht YXJrcy93c2ltL21lZGlhXzFuMl80ODBwLndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlh XzFuMl80ODBwLndzaW0KQEAgLTEsOSArMSwxNSBAQAotMS5WQ1MuMTIwMDAtMTUwMDAuMC4wCitN LjEwLlZDUworQi4xMAorTS4xMS5WQ1MKK0IuMTEKK00uMTIuVkNTCitCLjEyCisxMC5WQ1MuMTIw MDAtMTUwMDAuMC4wCiAyLlJDUy4xMDAwLTIyMDAuLTEuMAogMy5SQ1MuMTAwMC0xNDAwLi0xLjAK IDMuUkNTLjEwMDAwLTEyMDAwLjAuMAotMy5WQ1MuMjUwMC0zNTAwLi0xLjAKKzExLlZDUy4yNTAw LTM1MDAuLTEuMAogNC5SQ1MuMTAwMC0yMjAwLi01LjAKIDUuUkNTLjEwMDAtMTQwMC4tMS4wCiA1 LlJDUy4xMDAwMC0xMjAwMC4wLjAKLTUuVkNTLjI1MDAtMzUwMC4tMS4xCisxMi5WQ1MuMjUwMC0z NTAwLi0xLjEKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjJfYXN5LndzaW0g Yi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW4yX2FzeS53c2ltCmluZGV4IDU4Yzk5Y2ExMTIyYy4u Zjk5NDNlYjYyZThhIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW4yX2FzeS53 c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjJfYXN5LndzaW0KQEAgLTEsOSArMSwx MSBAQAotMS5WQ1MuMTIwMDAtMTUwMDAuMC4wCitNLjEwLlZDUworQi4xMAorMTAuVkNTLjEyMDAw LTE1MDAwLjAuMAogMi5SQ1MuMTAwMC0yMjAwLi0xLjAKIDMuUkNTLjEwMDAtMTQwMC4tMS4wCiAz LlJDUy4xMDAwMC0xMjAwMC4wLjAKLTMuVkNTLjI1MDAtMzUwMC4tMS4wCisxMS5WQ1MuMjUwMC0z NTAwLi0xLjAKIDQuUkNTLjQwMC04MDAuLTUuMAogNS5SQ1MuNTAwLTcwMC4tMS4wCiA1LlJDUy41 MDAwLTYwMDAuMC4wCi01LlZDUy4xMjAwLTE1MDAuLTEuMQorMTIuVkNTLjEyMDAtMTUwMC4tMS4x CmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW4zXzQ4MHAud3NpbSBiL2JlbmNo bWFya3Mvd3NpbS9tZWRpYV8xbjNfNDgwcC53c2ltCmluZGV4IGM3MjRhYjI4YTFmNC4uNGY1ODVm YThhOGUwIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW4zXzQ4MHAud3NpbQor KysgYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW4zXzQ4MHAud3NpbQpAQCAtMSwxMyArMSwyMSBA QAotMS5WQ1MuMTIwMDAtMTUwMDAuMC4wCitNLjEwLlZDUworQi4xMAorTS4xMS5WQ1MKK0IuMTEK K00uMTIuVkNTCitCLjEyCitNLjEzLlZDUworQi4xMworMTAuVkNTLjEyMDAwLTE1MDAwLjAuMAog Mi5SQ1MuMTAwMC0yMjAwLi0xLjAKIDMuUkNTLjEwMDAtMTQwMC4tMS4wCiAzLlJDUy4xMDAwMC0x MjAwMC4wLjAKLTMuVkNTLjI1MDAtMzUwMC4tMS4wCisxMS5WQ1MuMjUwMC0zNTAwLi0xLjAKIDQu UkNTLjEwMDAtMjIwMC4tNS4wCiA1LlJDUy4xMDAwLTE0MDAuLTEuMAogNS5SQ1MuMTAwMDAtMTIw MDAuMC4wCi01LlZDUy4yNTAwLTM1MDAuLTEuMAorMTIuVkNTLjI1MDAtMzUwMC4tMS4wCiA2LlJD Uy4xMDAwLTIyMDAuLTkuMAogNy5SQ1MuMTAwMC0xNDAwLi0xLjAKIDcuUkNTLjEwMDAwLTEyMDAw LjAuMAotNy5WQ1MuMjUwMC0zNTAwLi0xLjEKKzEzLlZDUy4yNTAwLTM1MDAuLTEuMQpkaWZmIC0t Z2l0IGEvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuM19hc3kud3NpbSBiL2JlbmNobWFya3Mvd3Np bS9tZWRpYV8xbjNfYXN5LndzaW0KaW5kZXggYzc1ODgzMjhlM2YxLi5kY2U3Nzg5ZWMxZDggMTAw NjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjNfYXN5LndzaW0KKysrIGIvYmVuY2ht YXJrcy93c2ltL21lZGlhXzFuM19hc3kud3NpbQpAQCAtMSwzICsxLDExIEBACitNLjEwLlZDUwor Qi4xMAorTS4xMS5WQ1MKK0IuMTEKK00uMTIuVkNTCitCLjEyCitNLjEzLlZDUworQi4xMwogMS5W Q1MuMTIwMDAtMTUwMDAuMC4wCiAyLlJDUy4xMDAwLTIyMDAuLTEuMAogMy5SQ1MuMTAwMC0xNDAw Li0xLjAKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjRfNDgwcC53c2ltIGIv YmVuY2htYXJrcy93c2ltL21lZGlhXzFuNF80ODBwLndzaW0KaW5kZXggZTY3ZmVmYzNiZjE3Li4w NmZhOWFkZWY1ZWIgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjRfNDgwcC53 c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjRfNDgwcC53c2ltCkBAIC0xLDE3ICsx LDI3IEBACi0xLlZDUy4xMjAwMC0xNTAwMC4wLjAKK00uMTAuVkNTCitCLjEwCitNLjExLlZDUwor Qi4xMQorTS4xMi5WQ1MKK0IuMTIKK00uMTMuVkNTCitCLjEzCitNLjE0LlZDUworQi4xNAorMTAu VkNTLjEyMDAwLTE1MDAwLjAuMAogMi5SQ1MuMTAwMC0yMjAwLi0xLjAKIDMuUkNTLjEwMDAtMTQw MC4tMS4wCiAzLlJDUy4xMDAwMC0xMjAwMC4wLjAKLTMuVkNTLjI1MDAtMzUwMC4tMS4wCisxMS5W Q1MuMjUwMC0zNTAwLi0xLjAKIDQuUkNTLjEwMDAtMjIwMC4tNS4wCiA1LlJDUy4xMDAwLTE0MDAu LTEuMAogNS5SQ1MuMTAwMDAtMTIwMDAuMC4wCi01LlZDUy4yNTAwLTM1MDAuLTEuMAorMTIuVkNT LjI1MDAtMzUwMC4tMS4wCiA2LlJDUy4xMDAwLTIyMDAuLTkuMAogNy5SQ1MuMTAwMC0xNDAwLi0x LjAKIDcuUkNTLjEwMDAwLTEyMDAwLjAuMAotNy5WQ1MuMjUwMC0zNTAwLi0xLjAKKzEzLlZDUy4y NTAwLTM1MDAuLTEuMAogOC5SQ1MuMTAwMC0yMjAwLi0xMy4wCiA5LlJDUy4xMDAwLTE0MDAuLTEu MAogOS5SQ1MuMTAwMDAtMTIwMDAuMC4wCi05LlZDUy4yNTAwLTM1MDAuLTEuMQorMTQuVkNTLjI1 MDAtMzUwMC4tMS4xCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW40X2FzeS53 c2ltIGIvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuNF9hc3kud3NpbQppbmRleCBlZGU0ZmQ3YTIy MDUuLjZkYzZiNjUyZTkwMyAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuNF9h c3kud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfMW40X2FzeS53c2ltCkBAIC0xLDMg KzEsMTMgQEAKK00uMTAuVkNTCitCLjEwCitNLjExLlZDUworQi4xMQorTS4xMi5WQ1MKK0IuMTIK K00uMTMuVkNTCitCLjEzCitNLjE0LlZDUworQi4xNAogMS5WQ1MuMTIwMDAtMTUwMDAuMC4wCiAy LlJDUy4xMDAwLTIyMDAuLTEuMAogMy5SQ1MuMTAwMC0xNDAwLi0xLjAKZGlmZiAtLWdpdCBhL2Jl bmNobWFya3Mvd3NpbS9tZWRpYV8xbjVfNDgwcC53c2ltIGIvYmVuY2htYXJrcy93c2ltL21lZGlh XzFuNV80ODBwLndzaW0KaW5kZXggOWU0M2I5ODQ1NDMwLi4zNDY3YTM4Njg4N2EgMTAwNjQ0Ci0t LSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjVfNDgwcC53c2ltCisrKyBiL2JlbmNobWFya3Mv d3NpbS9tZWRpYV8xbjVfNDgwcC53c2ltCkBAIC0xLDIxICsxLDMzIEBACi0xLlZDUy4xMjAwMC0x NTAwMC4wLjAKK00uMTAuVkNTCitCLjEwCitNLjExLlZDUworQi4xMQorTS4xMi5WQ1MKK0IuMTIK K00uMTMuVkNTCitCLjEzCitNLjE0LlZDUworQi4xNAorTS4xNS5WQ1MKK0IuMTUKKzEwLlZDUy4x MjAwMC0xNTAwMC4wLjAKIDIuUkNTLjEwMDAtMjIwMC4tMS4wCiAzLlJDUy4xMDAwLTE0MDAuLTEu MAogMy5SQ1MuMTAwMDAtMTIwMDAuMC4wCi0zLlZDUy4yNTAwLTM1MDAuLTEuMAorMTEuVkNTLjI1 MDAtMzUwMC4tMS4wCiA0LlJDUy4xMDAwLTIyMDAuLTUuMAogNS5SQ1MuMTAwMC0xNDAwLi0xLjAK IDUuUkNTLjEwMDAwLTEyMDAwLjAuMAotNS5WQ1MuMjUwMC0zNTAwLi0xLjAKKzEyLlZDUy4yNTAw LTM1MDAuLTEuMAogNi5SQ1MuMTAwMC0yMjAwLi05LjAKIDcuUkNTLjEwMDAtMTQwMC4tMS4wCiA3 LlJDUy4xMDAwMC0xMjAwMC4wLjAKLTcuVkNTLjI1MDAtMzUwMC4tMS4wCisxMy5WQ1MuMjUwMC0z NTAwLi0xLjAKIDguUkNTLjEwMDAtMjIwMC4tMTMuMAogOS5SQ1MuMTAwMC0xNDAwLi0xLjAKIDku UkNTLjEwMDAwLTEyMDAwLjAuMAotOS5WQ1MuMjUwMC0zNTAwLi0xLjAKKzE0LlZDUy4yNTAwLTM1 MDAuLTEuMAogMTAuUkNTLjEwMDAtMjIwMC4tMTcuMAogMTEuUkNTLjEwMDAtMTQwMC4tMS4wCiAx MS5SQ1MuMTAwMDAtMTIwMDAuMC4wCi0xMS5WQ1MuMjUwMC0zNTAwLi0xLjEKKzE1LlZDUy4yNTAw LTM1MDAuLTEuMQpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuNV9hc3kud3Np bSBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjVfYXN5LndzaW0KaW5kZXggNzhiYjRhODZkYmNh Li40YjIwNTQ1N2E4ZDQgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV8xbjVfYXN5 LndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlhXzFuNV9hc3kud3NpbQpAQCAtMSwzICsx LDE1IEBACitNLjEwLlZDUworQi4xMAorTS4xMS5WQ1MKK0IuMTEKK00uMTIuVkNTCitCLjEyCitN LjEzLlZDUworQi4xMworTS4xNC5WQ1MKK0IuMTQKK00uMTUuVkNTCitCLjE1CiAxLlZDUy4xMjAw MC0xNTAwMC4wLjAKIDIuUkNTLjIwMDAtMzAwMC4tMS4wCiAzLlJDUy41MDAtOTAwLi0xLjAKZGlm ZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfMTdpNy53c2ltIGIv YmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV8xN2k3LndzaW0KaW5kZXggMDgzMGEz MjMxZWE5Li5iY2IxYWIyZjA0ZmEgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9s b2FkX2JhbGFuY2VfMTdpNy53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2Jh bGFuY2VfMTdpNy53c2ltCkBAIC0xLDcgKzEsOSBAQAorTS4xLlZDUworQi4xCiAxLlZDUy4yODAw LTMyMDAuMC4xCi0xLlJDUy45MDAtMTEwMC4tMS4wCi0xLlJDUy4zNjAwLTM4MDAuMC4wCi0xLlJD Uy45MDAtMTEwMC4tMi4wCisyLlJDUy45MDAtMTEwMC4tMS4wCisyLlJDUy4zNjAwLTM4MDAuMC4w CisyLlJDUy45MDAtMTEwMC4tMi4wCiAxLlZDUy4yMjAwLTI0MDAuLTIuMAotMS5SQ1MuNDUwMC00 OTAwLi0xLjAKKzIuUkNTLjQ1MDAtNDkwMC4tMS4wCiAxLlZDUy41MDAtNzAwLi0xLjEKZGlmZiAt LWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfMTkud3NpbSBiL2JlbmNo bWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfMTkud3NpbQppbmRleCAwMzg5MDc3NmZkYTMu Ljg4Y2QzNGZiNjg5OCAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFs YW5jZV8xOS53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfMTku d3NpbQpAQCAtMSwzICsxLDUgQEAKK00uMS5WQ1MKK0IuMQogMC5WRUNTLjE0MDAtMTUwMC4wLjAK IDAuUkNTLjEwMDAtMTUwMC4tMS4wCiBzLi0yCkBAIC01LDYgKzcsNiBAQCBzLi0yCiAxLlZDUy4x MzAwLTE0MDAuMC4xCiAwLlZFQ1MuMTQwMC0xNTAwLjAuMAogMC5SQ1MuMTAwLTMwMC4tMS4xCi0x LlJDUy4xMzAwLTE1MDAuMC4wCisyLlJDUy4xMzAwLTE1MDAuLTMuMAogMS5WQ1MuMTAwLTMwMC4t MS4xCiAxLlZDUy45MDAtMTQwMC4wLjEKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRp YV9sb2FkX2JhbGFuY2VfNGsxMnU3LndzaW0gYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9i YWxhbmNlXzRrMTJ1Ny53c2ltCmluZGV4IGZmMTA0MjViNmJlYy4uYTQxN2JiMThlMTIxIDEwMDY0 NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9iYWxhbmNlXzRrMTJ1Ny53c2ltCisr KyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfNGsxMnU3LndzaW0KQEAgLTEs MyArMSw1IEBACitNLjEuVkNTCitCLjEKIDEuVkNTLjQwMDAtNjAwMC4wLjAKIDIuUkNTLjQwMC04 MDAuLTEuMAogMy5SQ1MuMTkwMC0yMjAwLi0xLjAKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3Np bS9tZWRpYV9sb2FkX2JhbGFuY2VfZmhkMjZ1Ny53c2ltIGIvYmVuY2htYXJrcy93c2ltL21lZGlh X2xvYWRfYmFsYW5jZV9maGQyNnU3LndzaW0KaW5kZXggNTYxMTRkZGM0OGMyLi40YzgyMjVlMWZl MTMgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfZmhkMjZ1 Ny53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfZmhkMjZ1Ny53 c2ltCkBAIC0xLDI1ICsxLDI3IEBACitNLjMuVkNTCitCLjMKIDEuVkNTMS4xMjAwLTE4MDAuMC4w CiAxLlZDUzEuMTkwMC0yMTAwLjAuMAogMi5SQ1MuMTUwMC0yMDAwLi0xLjAKLTIuVkNTLjE0MDAt MTgwMC4tMS4xCiszLlZDUy4xNDAwLTE4MDAuLTEuMQogMS5WQ1MxLjE5MDAtMjEwMC4tMS4wCiAy LlJDUy4xNTAwLTIwMDAuLTEuMAotMi5WQ1MuMTQwMC0xODAwLi0xLjEKKzMuVkNTLjE0MDAtMTgw MC4tMS4xCiAxLlZDUzEuMTkwMC0yMTAwLi0xLjAKIDIuUkNTLjIwMC00MDAuLTEuMAogMi5SQ1Mu MTUwMC0yMDAwLjAuMAotMi5WQ1MuMTQwMC0xODAwLi0xLjEKKzMuVkNTLjE0MDAtMTgwMC4tMS4x CiAxLlZDUzEuMTkwMC0yMTAwLi0xLjAKIDIuUkNTLjE1MDAtMjAwMC4tMS4wCi0yLlZDUy4xNDAw LTE4MDAuLTEuMQorMy5WQ1MuMTQwMC0xODAwLi0xLjEKIDEuVkNTMS4xOTAwLTIxMDAuLTEuMAog Mi5SQ1MuMjAwLTQwMC4tMS4wCiAyLlJDUy4xNTAwLTIwMDAuMC4wCi0yLlZDUy4xNDAwLTE4MDAu LTEuMQorMy5WQ1MuMTQwMC0xODAwLi0xLjEKIDEuVkNTMS4xOTAwLTIxMDAuLTEuMAogMi5SQ1Mu MTUwMC0yMDAwLi0xLjAKLTIuVkNTLjE0MDAtMTgwMC4tMS4xCiszLlZDUy4xNDAwLTE4MDAuLTEu MQogMS5WQ1MxLjE5MDAtMjEwMC4tMS4wCiAyLlJDUy4xNTAwLTIwMDAuLTEuMAogMi5SQ1MuMTUw MC0yMDAwLjAuMAotMi5WQ1MuMTQwMC0xODAwLi0xLjEKKzMuVkNTLjE0MDAtMTgwMC4tMS4xCmRp ZmYgLS1naXQgYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9iYWxhbmNlX2hkMDEud3NpbSBi L2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfaGQwMS53c2ltCmluZGV4IDg2Mjkz MTUyMWM5MC4uOGU3ZTlkOTBlNDM1IDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFf bG9hZF9iYWxhbmNlX2hkMDEud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9i YWxhbmNlX2hkMDEud3NpbQpAQCAtMSwyMyArMSwyNyBAQAorTS4xLlZDUworQi4xCitNLjMuVkNT CitCLjMKIDEuVkNTLjE0MDAtMTkwMC4wLjAKLTEuUkNTLjEyMDAtMTYwMC4tMS4wCi0xLlJDUy4x MDAwLTE0MDAuLTEuMAotMi5WQ1MuODAwLTEwMDAuLTEuMAorMi5SQ1MuMTIwMC0xNjAwLi0xLjAK KzIuUkNTLjEwMDAtMTQwMC4tMS4wCiszLlZDUy44MDAtMTAwMC4tMS4wCiAxLlZDUy4xNDAwLTE5 MDAuLTQuMAotMS5SQ1MuMTIwMC0xNjAwLi0xLjAKLTEuUkNTLjEwMDAtMTQwMC4tMS4wCi0yLlZD Uy44MDAtMTAwMC4tMS4wCisyLlJDUy4xMjAwLTE2MDAuLTEuMAorMi5SQ1MuMTAwMC0xNDAwLi0x LjAKKzMuVkNTLjgwMC0xMDAwLi0xLjAKIDEuVkNTLjE0MDAtMTkwMC4tNC4wCi0xLlJDUy4xMjAw LTE2MDAuLTEuMAotMS5SQ1MuMTAwMC0xNDAwLi0xLjAKLTIuVkNTLjgwMC0xMDAwLi0xLjAKKzIu UkNTLjEyMDAtMTYwMC4tMS4wCisyLlJDUy4xMDAwLTE0MDAuLTEuMAorMy5WQ1MuODAwLTEwMDAu LTEuMAogMS5WQ1MuMTQwMC0xOTAwLi00LjAKLTEuUkNTLjEyMDAtMTYwMC4tMS4wCi0xLlJDUy4x MDAwLTE0MDAuLTEuMAotMi5WQ1MuODAwLTEwMDAuLTEuMAorMi5SQ1MuMTIwMC0xNjAwLi0xLjAK KzIuUkNTLjEwMDAtMTQwMC4tMS4wCiszLlZDUy44MDAtMTAwMC4tMS4wCiAxLlZDUy4xNDAwLTE5 MDAuLTQuMAotMS5SQ1MuMTIwMC0xNjAwLi0xLjAKLTEuUkNTLjEwMDAtMTQwMC4tMS4wCi0yLlZD Uy44MDAtMTAwMC4tMS4wCisyLlJDUy4xMjAwLTE2MDAuLTEuMAorMi5SQ1MuMTAwMC0xNDAwLi0x LjAKKzMuVkNTLjgwMC0xMDAwLi0xLjAKIHMuLTE3CiBzLi0xNAogcy4tMTEKZGlmZiAtLWdpdCBh L2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfaGQwNm1wMi53c2ltIGIvYmVuY2ht YXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5jZV9oZDA2bXAyLndzaW0KaW5kZXggMWUxZmMwMDNj NzU1Li5jZmU5ODUwMTlhN2IgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2Fk X2JhbGFuY2VfaGQwNm1wMi53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9sb2FkX2Jh bGFuY2VfaGQwNm1wMi53c2ltCkBAIC0xLDQgKzEsOCBAQAorTS4xLlZDUworQi4xCitNLjQuVkNT CitCLjQKIDEuVkNTLjkwMC0xNzAwLjAuMAogMi5SQ1MuMTAwLTQwMC4tMS4wCiAzLlJDUy44MDAt OTAwLi0xLjAKLTMuVkNTLjEwMC0yMDAuLTEuMQorNC5WQ1MuMTAwLTIwMC4tMS4xCmRpZmYgLS1n aXQgYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9iYWxhbmNlX2hkMTIud3NpbSBiL2JlbmNo bWFya3Mvd3NpbS9tZWRpYV9sb2FkX2JhbGFuY2VfaGQxMi53c2ltCmluZGV4IDhmM2I0MWNhNWFi Ni4uNjg0ZTZiNTExNzYyIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9i YWxhbmNlX2hkMTIud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9iYWxhbmNl X2hkMTIud3NpbQpAQCAtMSw0ICsxLDggQEAKK00uMS5WQ1MKK0IuMQorTS40LlZDUworQi40CiAx LlZDUy44NTAtMTMwMC4wLjAKIDIuUkNTLjUwLTI1MC4tMS4wCiAzLlJDUy40MDAtODAwLi0xLjAK LTMuVkNTLjEwMC0yMDAuLTEuMQorNC5WQ1MuMTAwLTIwMC4tMS4xCmRpZmYgLS1naXQgYS9iZW5j aG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9iYWxhbmNlX2hkMTdpNC53c2ltIGIvYmVuY2htYXJrcy93 c2ltL21lZGlhX2xvYWRfYmFsYW5jZV9oZDE3aTQud3NpbQppbmRleCBiNjE5NWI2MDViZjcuLjE0 MzBmMThkZjAzMyAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhX2xvYWRfYmFsYW5j ZV9oZDE3aTQud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbG9hZF9iYWxhbmNlX2hk MTdpNC53c2ltCkBAIC0xLDcgKzEsMTEgQEAKK00uMS5WQ1MKK0IuMQorTS4zLlZDUworQi4zCiAx LlZDUy45MDAtMTQwMC4wLjAKIDIuUkNTLjIwMC0zMDAuLTEuMAogMi5SQ1MuMTAwMC0yMDAwLjAu MAogMi5SQ1MuMTAwMC0yMDAwLjAuMAotMi5WQ1MuODAwLTEwMDAuLTEuMAotMS5SQ1MuMjgwMC0z MTAwLi0xLjAKKzMuVkNTLjgwMC0xMDAwLi0xLjAKKzQuUkNTLjI4MDAtMzEwMC4tMS4wCiAxLlZD Uy44MDAtMTAwMC4tMS4xCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbWZlMl80 ODBwLndzaW0gYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbWZlMl80ODBwLndzaW0KaW5kZXggMThi Yzc1NmYxYjU1Li4wMGVmNWMzYTc1NzQgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRp YV9tZmUyXzQ4MHAud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbWZlMl80ODBwLndz aW0KQEAgLTEsMyArMSwxMSBAQAorTS4xLlZDUworQi4xCitNLjQuVkNTCitCLjQKK00uNy5WQ1MK K0IuNworTS44LlZDUworQi44CiAxLlZDUy4xMjAwMC0xNTAwMC4wLjAKIDIuUkNTLjEwMDAtMjIw MC4tMS4wCiAzLlJDUy44MDAtMTYwMC4tMS4wCkBAIC01LDUgKzEzLDUgQEAKIDUuUkNTLjEwMDAt MjIwMC4tMS4wCiA2LlJDUy44MDAtMTYwMC4tMS4wCiA2LlJDUy4xMDAwMC0xMjAwMC4tNC4wCi02 LlZDUy4yNTAwLTM1MDAuLTEuMAotMy5WQ1MuMjUwMC0zNTAwLi0yLjEKKzcuVkNTLjI1MDAtMzUw MC4tMS4wCis4LlZDUy4yNTAwLTM1MDAuLTIuMQpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93c2lt L21lZGlhX21mZTNfNDgwcC53c2ltIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX21mZTNfNDgwcC53 c2ltCmluZGV4IGUxMmEyZTZhYzI5ZC4uM2FjNGRiMGViOGVjIDEwMDY0NAotLS0gYS9iZW5jaG1h cmtzL3dzaW0vbWVkaWFfbWZlM180ODBwLndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21lZGlh X21mZTNfNDgwcC53c2ltCkBAIC0xLDMgKzEsMTUgQEAKK00uMS5WQ1MKK0IuMQorTS40LlZDUwor Qi40CitNLjcuVkNTCitCLjcKK00uMTAuVkNTCitCLjEwCitNLjExLlZDUworQi4xMQorTS4xMi5W Q1MKK0IuMTIKIDEuVkNTLjEyMDAwLTE1MDAwLjAuMAogMi5SQ1MuMTAwMC0yMjAwLi0xLjAKIDMu UkNTLjgwMC0xNjAwLi0xLjAKQEAgLTgsNiArMjAsNiBAQAogOC5SQ1MuMTAwMC0yMjAwLi0xLjAK IDkuUkNTLjgwMC0xNjAwLi0xLjAKIDkuUkNTLjEwMDAwLTEyMDAwLi03Ly00LjAKLTkuVkNTLjI1 MDAtMzUwMC4tMS4wCi0zLlZDUy4yNTAwLTM1MDAuLTIuMAotNi5WQ1MuMjUwMC0zNTAwLi0zLjEK KzEwLlZDUy4yNTAwLTM1MDAuLTEuMAorMTEuVkNTLjI1MDAtMzUwMC4tMi4wCisxMi5WQ1MuMjUw MC0zNTAwLi0zLjEKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9tZmU0XzQ4MHAu d3NpbSBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9tZmU0XzQ4MHAud3NpbQppbmRleCA3NWQ0ZjY3 ZWE0ZmIuLjdmNjgzMTU2OTkwOCAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhX21m ZTRfNDgwcC53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9tZmU0XzQ4MHAud3NpbQpA QCAtMSwzICsxLDE5IEBACitNLjEuVkNTCitCLjEKK00uNC5WQ1MKK0IuNAorTS43LlZDUworQi43 CitNLjEwLlZDUworQi4xMAorTS4xMy5WQ1MKK0IuMTMKK00uMTQuVkNTCitCLjE0CitNLjE1LlZD UworQi4xNQorTS4xNi5WQ1MKK0IuMTYKIDEuVkNTLjEyMDAwLTE1MDAwLjAuMAogMi5SQ1MuMTAw MC0yMjAwLi0xLjAKIDMuUkNTLjgwMC0xNjAwLi0xLjAKQEAgLTExLDcgKzI3LDcgQEAKIDExLlJD Uy4xMDAwLTIyMDAuLTEuMAogMTIuUkNTLjgwMC0xNjAwLi0xLjAKIDEyLlJDUy4xMDAwMC0xMjAw MC4tNC8tNy8tMTAuMAotMTIuVkNTLjI1MDAtMzUwMC4tMS4wCi0zLlZDUy4yNTAwLTM1MDAuLTIu MAotNi5WQ1MuMjUwMC0zNTAwLi0zLjAKLTkuVkNTLjI1MDAtMzUwMC4tNC4xCisxMy5WQ1MuMjUw MC0zNTAwLi0xLjAKKzE0LlZDUy4yNTAwLTM1MDAuLTIuMAorMTUuVkNTLjI1MDAtMzUwMC4tMy4w CisxNi5WQ1MuMjUwMC0zNTAwLi00LjEKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvd3NpbS9tZWRp YV9ubl8xMDgwcC53c2ltIGIvYmVuY2htYXJrcy93c2ltL21lZGlhX25uXzEwODBwLndzaW0KaW5k ZXggZjlhM2NhMWI5OTYzLi44OGM1Yzc3MjIwMmMgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3Np bS9tZWRpYV9ubl8xMDgwcC53c2ltCisrKyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl8xMDgw cC53c2ltCkBAIC0xLDMgKzEsNyBAQAorTS4xLlZDUworQi4xCitNLjMuVkNTCitCLjMKIDEuVkNT LjEzMDAwLTE3MDAwLjAuMAogMi5SQ1MuMjAwMC00MDAwLi0xLjAKIDMuUkNTLjMwMDAtNTAwMC4t MS4wCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbm5fMTA4MHBfczEud3NpbSBi L2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl8xMDgwcF9zMS53c2ltCmluZGV4IDRmYTZjYTY1MzAw MC4uNWI0N2QyYTNjN2VjIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbm5fMTA4 MHBfczEud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbm5fMTA4MHBfczEud3NpbQpA QCAtMSwzICsxLDUgQEAKK00uNC5WQ1MKK0IuNAogZgogMS5WQ1MxLjY1MDAtODAwMC5mLTEuMAog MS5WQ1MyLjY1MDAtODAwMC5mLTIuMApAQCAtNSw0ICs3LDQgQEAgYS4tMwogMi5SQ1MuMjAwMC00 MDAwLi0yLy0zLjAKIDMuUkNTLjMwMDAtNTAwMC4tMS4wCiAzLlJDUy4yMzAwMC0yNzAwMC4wLjAK LTMuVkNTLjE2MDAwLTIwMDAwLi0xLjEKKzQuVkNTLjE2MDAwLTIwMDAwLi0xLjEKZGlmZiAtLWdp dCBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl8xMDgwcF9zMi53c2ltIGIvYmVuY2htYXJrcy93 c2ltL21lZGlhX25uXzEwODBwX3MyLndzaW0KaW5kZXggNjhmMGFjZGZiODQyLi5lMzY3OGIzOTZi NDIgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl8xMDgwcF9zMi53c2ltCisr KyBiL2JlbmNobWFya3Mvd3NpbS9tZWRpYV9ubl8xMDgwcF9zMi53c2ltCkBAIC0xLDMgKzEsNSBA QAorTS4xLlZDUworQi4xCiAxLlZDUy4xMzAwMC0xNzAwMC4wLjAKIDIuUkNTLjIwMDAtNDAwMC4t MS4wCiAzLlJDUy4zMDAwLTUwMDAuLTEuMApkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy93c2ltL21l ZGlhX25uXzEwODBwX3MzLndzaW0gYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbm5fMTA4MHBfczMu d3NpbQppbmRleCAxMjM2OGRhODNkY2EuLmVlM2I2NzVkZTllNSAxMDA2NDQKLS0tIGEvYmVuY2ht YXJrcy93c2ltL21lZGlhX25uXzEwODBwX3MzLndzaW0KKysrIGIvYmVuY2htYXJrcy93c2ltL21l ZGlhX25uXzEwODBwX3MzLndzaW0KQEAgLTEsMyArMSw1IEBACitNLjEuVkNTCitCLjEKIDEuVkNT LjEzMDAwLTE3MDAwLjAuMAogMi5SQ1MuMjAwMC00MDAwLi0xLjAKIDMuUkNTLjMwMDAtNTAwMC4t MS4wCmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbm5fNDgwcC53c2ltIGIvYmVu Y2htYXJrcy93c2ltL21lZGlhX25uXzQ4MHAud3NpbQppbmRleCBhYjY0YTQ1NjlkNzEuLjczZmM2 NDNkYzllNSAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy93c2ltL21lZGlhX25uXzQ4MHAud3NpbQor KysgYi9iZW5jaG1hcmtzL3dzaW0vbWVkaWFfbm5fNDgwcC53c2ltCkBAIC0xLDMgKzEsNyBAQAor TS4xLlZDUworQi4xCitNLjMuVkNTCitCLjMKIDEuVkNTLjEyMDAwLTE1MDAwLjAuMAogMi5SQ1Mu MTAwMC0yMjAwLi0xLjAKIDMuUkNTLjEwMDAtMTQwMC4tMS4wCmRpZmYgLS1naXQgYS9iZW5jaG1h cmtzL3dzaW0vdmNzX2JhbGFuY2VkLndzaW0gYi9iZW5jaG1hcmtzL3dzaW0vdmNzX2JhbGFuY2Vk LndzaW0KaW5kZXggZTg5NThiOGY3ZjQzLi43OGQ5NTNmYjc1NTEgMTAwNjQ0Ci0tLSBhL2JlbmNo bWFya3Mvd3NpbS92Y3NfYmFsYW5jZWQud3NpbQorKysgYi9iZW5jaG1hcmtzL3dzaW0vdmNzX2Jh bGFuY2VkLndzaW0KQEAgLTEsMjYgKzEsMjggQEAKIHEuNQotMC5WQ1MuNTAwLTIwMDAuMC4wCi0w LlZDUy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIwMDAuMC4w Ci0wLlZDUy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIwMDAu MC4wCi0wLlZDUy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAwLTIw MDAuMC4wCi0wLlZDUy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1MuNTAw LTIwMDAuMC4wCi0wLlZDUy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5WQ1Mu NTAwLTIwMDAuMC4wCi0wLlZDUy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAotMC5W Q1MuNTAwLTIwMDAuMC4wCi0wLlZDUy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAuMAot MC5WQ1MuNTAwLTIwMDAuMC4wCi0wLlZDUy41MDAtMjAwMC4wLjAKLTAuVkNTLjUwMC0yMDAwLjAu MAotMC5WQ1MuNTAwLTIwMDAuMC4wCitNLjEuVkNTCitCLjEKKzEuVkNTLjUwMC0yMDAwLjAuMAor MS5WQ1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0yMDAwLjAu MAorMS5WQ1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0yMDAw LjAuMAorMS5WQ1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUwMC0y MDAwLjAuMAorMS5WQ1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNTLjUw MC0yMDAwLjAuMAorMS5WQ1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEuVkNT LjUwMC0yMDAwLjAuMAorMS5WQ1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAKKzEu VkNTLjUwMC0yMDAwLjAuMAorMS5WQ1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4wLjAK KzEuVkNTLjUwMC0yMDAwLjAuMAorMS5WQ1MuNTAwLTIwMDAuMC4wCisxLlZDUy41MDAtMjAwMC4w LjAKKzEuVkNTLjUwMC0yMDAwLjAuMApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5hbSBi L3NjcmlwdHMvTWFrZWZpbGUuYW0KaW5kZXggZTI2YTM5ZTJmMDcyLi42NDE3MTUyOTQ5MzYgMTAw NjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuYW0KKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5hbQpA QCAtMSwyICsxLDIgQEAKLWRpc3Rfbm9pbnN0X1NDUklQVFMgPSBpbnRlbC1nZngtdHJ5Ym90IHdo by5zaCBydW4tdGVzdHMuc2ggdHJhY2UucGwgbWVkaWEtYmVuY2gucGwKK2Rpc3Rfbm9pbnN0X1ND UklQVFMgPSBpbnRlbC1nZngtdHJ5Ym90IHdoby5zaCBydW4tdGVzdHMuc2ggdHJhY2UucGwKIG5v aW5zdF9QWVRIT04gPSB0aHJvdHRsZS5weQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tZWRpYS1iZW5j aC5wbCBiL3NjcmlwdHMvbWVkaWEtYmVuY2gucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1Cmlu ZGV4IDFjZDgyMDVmZjA3Yy4uMDAwMDAwMDAwMDAwCi0tLSBhL3NjcmlwdHMvbWVkaWEtYmVuY2gu cGwKKysrIC9kZXYvbnVsbApAQCAtMSw3MzYgKzAsMCBAQAotIyEgL3Vzci9iaW4vcGVybAotIwot IyBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotIwotIyBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQotIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAotIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0jIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAotIyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSMgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSMKLSMgVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAotIyBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0jIFNvZnR3YXJlLgotIwotIyBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgotIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKLSMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0jIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCi0jIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HCi0jIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSMgSU4gVEhFIFNP RlRXQVJFLgotIwotCi11c2Ugc3RyaWN0OwotdXNlIHdhcm5pbmdzOwotdXNlIDUuMDEwOwotCi11 c2UgR2V0b3B0OjpTdGQ7Ci0KLWNob21wKG15ICRpZ3Rfcm9vdCA9IGBwd2QgLVBgKTsKLW15ICR3 c2ltID0gIiRpZ3Rfcm9vdC9iZW5jaG1hcmtzL2dlbV93c2ltIjsKLW15ICR3cmtfcm9vdCA9ICIk aWd0X3Jvb3QvYmVuY2htYXJrcy93c2ltIjsKLW15ICR0cmFjZXBsID0gIiRpZ3Rfcm9vdC9zY3Jp cHRzL3RyYWNlLnBsIjsKLW15ICR0b2xlcmFuY2UgPSAwLjAxOwotbXkgJGNsaWVudF90YXJnZXRf cyA9IDEwOwotbXkgJGlkbGVfdG9sZXJhbmNlX3BjdCA9IDIuMDsKLW15ICR2ZXJib3NlID0gMDsK LW15ICRndDIgPSAwOwotbXkgJHNob3dfY21kcyA9IDA7Ci1teSAkcmVhbHRpbWVfdGFyZ2V0ID0g MDsKLW15ICR3cHNfdGFyZ2V0ID0gMDsKLW15ICR3cHNfdGFyZ2V0X3BhcmFtID0gMDsKLW15ICRt dWx0aV9tb2RlID0gMDsKLW15IEBtdWx0aV93b3JrbG9hZHM7Ci1teSAkd19kaXJlY3Q7Ci1teSAk YmFsYW5jZXI7Ci1teSAkbm9wOwotbXkgJW9wdHM7Ci0KLW15IEBiYWxhbmNlcnMgPSAoICdycics ICdyYW5kJywgJ3FkJywgJ3FkcicsICdxZGF2ZycsICdydCcsICdydHInLCAncnRhdmcnLAotCQkg ICdjb250ZXh0JywgJ2J1c3knLCAnYnVzeS1hdmcnLCAnaTkxNScgKTsKLW15ICViYWxfc2tpcF9I ID0gKCAncnInID0+IDEsICdyYW5kJyA9PiAxLCAnY29udGV4dCcgPT4gMSwgLCAnYnVzeScgPT4g MSwKLQkJICAgJ2J1c3ktYXZnJyA9PiAxLCAnaTkxNScgPT4gMSApOwotbXkgJWJhbF9za2lwX1Ig PSAoICdpOTE1JyA9PiAxICk7Ci1teSAlYmFsX3NraXBfRyA9ICggJ2k5MTUnID0+IDEgKTsKLQot bXkgQHdvcmtsb2FkcyA9ICgKLQknbWVkaWFfbG9hZF9iYWxhbmNlXzE3aTcud3NpbScsCi0JJ21l ZGlhX2xvYWRfYmFsYW5jZV8xOS53c2ltJywKLQknbWVkaWFfbG9hZF9iYWxhbmNlXzRrMTJ1Ny53 c2ltJywKLQknbWVkaWFfbG9hZF9iYWxhbmNlX2ZoZDI2dTcud3NpbScsCi0JJ21lZGlhX2xvYWRf YmFsYW5jZV9oZDAxLndzaW0nLAotCSdtZWRpYV9sb2FkX2JhbGFuY2VfaGQwNm1wMi53c2ltJywK LQknbWVkaWFfbG9hZF9iYWxhbmNlX2hkMTIud3NpbScsCi0JJ21lZGlhX2xvYWRfYmFsYW5jZV9o ZDE3aTQud3NpbScsCi0JJ21lZGlhXzFuMl80ODBwLndzaW0nLAotCSdtZWRpYV8xbjNfNDgwcC53 c2ltJywKLQknbWVkaWFfMW40XzQ4MHAud3NpbScsCi0JJ21lZGlhXzFuNV80ODBwLndzaW0nLAot CSdtZWRpYV8xbjJfYXN5LndzaW0nLAotCSdtZWRpYV8xbjNfYXN5LndzaW0nLAotCSdtZWRpYV8x bjRfYXN5LndzaW0nLAotCSdtZWRpYV8xbjVfYXN5LndzaW0nLAotCSdtZWRpYV9tZmUyXzQ4MHAu d3NpbScsCi0JJ21lZGlhX21mZTNfNDgwcC53c2ltJywKLQknbWVkaWFfbWZlNF80ODBwLndzaW0n LAotCSdtZWRpYV9ubl8xMDgwcC53c2ltJywKLQknbWVkaWFfbm5fNDgwcC53c2ltJywKLSAgICAp OwotCi1zdWIgc2hvd19jbWQKLXsKLQlteSAoJGNtZCkgPSBAXzsKLQotCXNheSAiXG4rKysgJGNt ZCIgaWYgJHNob3dfY21kczsKLX0KLQotc3ViIGNhbGlicmF0ZV9ub3AKLXsKLQlteSAoJGRlbGF5 LCAkbm9wKTsKLQlteSAkY21kID0gIiR3c2ltIjsKLQotCXNob3dfY21kKCRjbWQpOwotCW9wZW4g V1NJTSwgIiRjbWQgfCIgb3IgZGllOwotCXdoaWxlICg8V1NJTT4pIHsKLQkJY2hvbXA7Ci0JCWlm ICgvTm9wIGNhbGlicmF0aW9uIGZvciAoXGQrKXVzIGRlbGF5IGlzIChcZCspLi8pIHsKLQkJCSRk ZWxheSA9ICQxOwotCQkJJG5vcCA9ICQyOwotCQl9Ci0KLQl9Ci0JY2xvc2UgV1NJTTsKLQotCWRp ZSB1bmxlc3MgJG5vcDsKLQotCXJldHVybiAkbm9wCi19Ci0KLXN1YiBjYW5fYmFsYW5jZV93b3Jr bG9hZAotewotCW15ICgkd3JrKSA9IEBfOwotCW15ICRyZXMgPSAwOwotCi0Jb3BlbiBXUkssICIk d3JrX3Jvb3QvJHdyayIgb3IgZGllOwotCXdoaWxlICg8V1JLPikgewotCQljaG9tcDsKLQkJaWYg KC9cLlZDU1wuLykgewotCQkJJHJlcyA9IDE7Ci0JCQlsYXN0OwotCQl9Ci0JfQotCWNsb3NlIFdS SzsKLQotCXJldHVybiAkcmVzOwotfQotCi1zdWIgYWRkX3dwc19hcmcKLXsKLQlteSAoQGFyZ3Mp ID0gQF87Ci0JbXkgJHBlcmlvZDsKLQotCXJldHVybiBAYXJncyBpZiAkcmVhbHRpbWVfdGFyZ2V0 IDw9IDA7Ci0KLQkkcGVyaW9kID0gaW50KDEwMDAwMDAgLyAkcmVhbHRpbWVfdGFyZ2V0KTsKLQlw dXNoIEBhcmdzLCAnLWEnOwotCXB1c2ggQGFyZ3MsICdwLiRwZXJpb2QnOwotCi0JcmV0dXJuIEBh cmdzOwotfQotCi1zdWIgcnVuX3dvcmtsb2FkCi17Ci0JbXkgKEBhcmdzKSA9IEBfOwotCW15ICgk dGltZSwgJHdwcywgJGNtZCk7Ci0JbXkgQHJldDsKLQotCUBhcmdzID0gYWRkX3dwc19hcmcoQGFy Z3MpOwotCXB1c2ggQGFyZ3MsICctMicgaWYgJGd0MjsKLQotCXVuc2hpZnQgQGFyZ3MsICR3c2lt OwotCSRjbWQgPSBqb2luICcgJywgQGFyZ3M7Ci0Jc2hvd19jbWQoJGNtZCk7Ci0KLQlvcGVuIFdT SU0sICIkY21kIHwiIG9yIGRpZTsKLQl3aGlsZSAoPFdTSU0+KSB7Ci0JCWNob21wOwotCQlpZiAo L14oXGQrXC5cZCspcyBlbGFwc2VkIFwoKFxkK1wuP1xkKykgd29ya2xvYWRzXC9zXCkkLykgewot CQkJJHRpbWUgPSAkMTsKLQkJCSR3cHMgPSAkMjsKLQkJfSBlbHNpZiAoLyhcZCspXDogXGQrXC5c ZCtzIGVsYXBzZWQgXChcZCsgY3ljbGVzLCAoXGQrXC4/XGQrKSB3b3JrbG9hZHNcL3NcKS8pIHsK LQkJCSRyZXRbJDFdID0gJDI7Ci0JCX0KLQl9Ci0JY2xvc2UgV1NJTTsKLQotCXJldHVybiAoJHRp bWUsICR3cHMsIFxAcmV0KTsKLX0KLQotc3ViIGR1bXBfY21kCi17Ci0JbXkgKCRjbWQsICRmaWxl KSA9IEBfOwotCi0Jc2hvd19jbWQoIiRjbWQgPiAkZmlsZSIpOwotCi0Jb3BlbiBGT1VULCAnPics ICRmaWxlIG9yIGRpZTsKLQlvcGVuIFRJTiwgIiRjbWQgfCIgb3IgZGllOwotCXdoaWxlICg8VElO PikgewotCQlwcmludCBGT1VUICRfOwotCX0KLQljbG9zZSBUSU47Ci0JY2xvc2UgRk9VVDsKLX0K LQotc3ViIHRyYWNlX3dvcmtsb2FkCi17Ci0JbXkgKCR3cmssICRiLCAkciwgJGMpID0gQF87Ci0J bXkgQGFyZ3MgPSAoJHRyYWNlcGwsICctLXRyYWNlJywgJHdzaW0sICctcScsICctbicsICRub3As ICctcicsICRyLCAnLWMnLCAkYyk7Ci0JbXkgJG1pbl9iYXRjaGVzID0gMTYgKyAkciAqICRjIC8g MjsKLQlteSBAc2tpcF9lbmdpbmU7Ci0JbXkgJWVuZ2luZXM7Ci0JbXkgKCRjbWQsICRmaWxlKTsK LQotCXB1c2ggQGFyZ3MsICctMicgaWYgJGd0MjsKLQotCXVubGVzcyAoJGIgZXEgJzxub25lPicp IHsKLQkJcHVzaCBAYXJncywgJy1SJzsKLQkJcHVzaCBAYXJncywgc3BsaXQgL1xzKy8sICRiOwot CX0KLQotCWlmIChkZWZpbmVkICR3X2RpcmVjdCkgewotCQlwdXNoIEBhcmdzLCBzcGxpdCAvXHMr LywgJHdyazsKLQl9IGVsc2UgewotCQlwdXNoIEBhcmdzLCAnLXcnOwotCQlwdXNoIEBhcmdzLCAk d3JrX3Jvb3QgLiAnLycgLiAkd3JrOwotCX0KLQotCXNob3dfY21kKGpvaW4gJyAnLCBAYXJncyk7 Ci0JaWYgKC1lICdwZXJmLmRhdGEnKSB7Ci0JCXVubGluayAncGVyZi5kYXRhJyBvciBkaWU7Ci0J fQotCXN5c3RlbShAYXJncykgPT0gMCBvciBkaWU7Ci0KLQkkY21kID0gInBlcmYgc2NyaXB0IHwg JHRyYWNlcGwiOwotCXNob3dfY21kKCRjbWQpOwotCW9wZW4gQ01ELCAiJGNtZCB8IiBvciBkaWU7 Ci0Jd2hpbGUgKDxDTUQ+KSB7Ci0JCWNob21wOwotCQlpZiAoL1JpbmcoXFMrKTogKFxkKykgYmF0 Y2hlcy4qPyhcZCtcLj9cZCspJSBpZGxlLC8pIHsKLQkJCWlmICgkMiA+PSAkbWluX2JhdGNoZXMp IHsKLQkJCQkkZW5naW5lc3skMX0gPSAkMzsKLQkJCX0gZWxzZSB7Ci0JCQkJcHVzaCBAc2tpcF9l bmdpbmUsICQxOwotCQkJfQotCQl9IGVsc2lmICgvR1BVOiAoXGQrXC4/XGQrKSUgaWRsZS8pIHsK LQkJCSRlbmdpbmVzeydncHUnfSA9ICQxOwotCQl9Ci0JfQotCWNsb3NlIENNRDsKLQotCSR3cmsg PX4gcy8kd3JrX3Jvb3QvL2c7Ci0JJHdyayA9fiBzL1wud3NpbS8vZzsKLQkkd3JrID1+IHMvLXcv Vy9nOwotCSR3cmsgPX4gcy9bIC1dL18vZzsKLQkkd3JrID1+IHMvXC8vLS9nOwotCSRiID1+IHMv WyA8Pl0vXy9nOwotCSRmaWxlID0gIiR7d3JrfV8ke2J9Xy1yJHtyfV8tYyR7Y30iOwotCi0JZHVt cF9jbWQoJ3BlcmYgc2NyaXB0JywgIiR7ZmlsZX0udHJhY2UiKTsKLQotCSRjbWQgPSAicGVyZiBz Y3JpcHQgfCAkdHJhY2VwbCAtLWh0bWwgLXggY3R4c2F2ZSAtcyAtYyAiOwotCSRjbWQgLj0gam9p biAnICcsIG1hcCgiLWkgJF8iLCBAc2tpcF9lbmdpbmUpOwotCi0JZHVtcF9jbWQoJGNtZCwgIiR7 ZmlsZX0uaHRtbCIpOwotCi0JcmV0dXJuIFwlZW5naW5lczsKLX0KLQotc3ViIGNhbGlicmF0ZV93 b3JrbG9hZAotewotCW15ICgkd3JrKSA9IEBfOwotCW15ICR0b2wgPSAkdG9sZXJhbmNlOwotCW15 ICRsb29wcyA9IDA7Ci0JbXkgJGVycm9yOwotCW15ICRyOwotCi0JJHIgPSAkcmVhbHRpbWVfdGFy Z2V0ID4gMCA/ICRyZWFsdGltZV90YXJnZXQgKiAkY2xpZW50X3RhcmdldF9zIDogMjM7Ci0JZm9y ICg7OykgewotCQlteSBAYXJncyA9ICgnLW4nLCAkbm9wLCAnLXInLCAkcik7Ci0JCW15ICgkdGlt ZSwgJHdwcyk7Ci0KLQkJaWYgKGRlZmluZWQgJHdfZGlyZWN0KSB7Ci0JCQlwdXNoIEBhcmdzLCBz cGxpdCAvXHMrLywgJHdyazsKLQkJfSBlbHNlIHsKLQkJCXB1c2ggQGFyZ3MsICctdyc7Ci0JCQlw dXNoIEBhcmdzLCAkd3JrX3Jvb3QgLiAnLycgLiAkd3JrOwotCQl9Ci0KLQkJKCR0aW1lLCAkd3Bz KSA9IHJ1bl93b3JrbG9hZChAYXJncyk7Ci0KLQkJJHdwcyA9ICRyIC8gJHRpbWUgaWYgJHdfZGly ZWN0OwotCQkkZXJyb3IgPSBhYnMoJHRpbWUgLSAkY2xpZW50X3RhcmdldF9zKSAvICRjbGllbnRf dGFyZ2V0X3M7Ci0KLQkJbGFzdCBpZiAkZXJyb3IgPD0gJHRvbDsKLQotCQkkciA9IGludCgkd3Bz ICogJGNsaWVudF90YXJnZXRfcyk7Ci0JCSRsb29wcyA9ICRsb29wcyArIDE7Ci0JCWlmICgkbG9v cHMgPj0gMykgewotCQkJJHRvbCA9ICR0b2wgKiAoMS4yICsgKCR0b2wpKTsKLQkJCSRsb29wcyA9 IDA7Ci0JCX0KLQkJbGFzdCBpZiAkdG9sID4gMC4yOwotCX0KLQotCXJldHVybiAoJHIsICRlcnJv cik7Ci19Ci0KLXN1YiBmaW5kX3NhdHVyYXRpb25fcG9pbnQKLXsKLQlteSAoJHdyaywgJHJyLCAk dmVyYm9zZSwgQGFyZ3MpID0gQF87Ci0JbXkgKCRsYXN0X3dwcywgJGMsICRzd3BzLCAkd3dwcyk7 Ci0JbXkgJHRhcmdldCA9ICRyZWFsdGltZV90YXJnZXQgPiAwID8gJHJlYWx0aW1lX3RhcmdldCA6 ICR3cHNfdGFyZ2V0OwotCW15ICRyID0gJHJyOwotCW15ICR3Y250OwotCW15ICRtYXhjOwotCW15 ICRtYXggPSAwOwotCi0JcHVzaCBAYXJncywgJy12JyBpZiAkbXVsdGlfbW9kZSBhbmQgJHdfZGly ZWN0OwotCi0JaWYgKGRlZmluZWQgJHdfZGlyZWN0KSB7Ci0JCXB1c2ggQGFyZ3MsIHNwbGl0IC9c cysvLCAkd3JrOwotCQkkd2NudCA9ICgpID0gJHdyayA9fiAvLVt3V10vZ2k7Ci0KLQl9IGVsc2Ug ewotCQlwdXNoIEBhcmdzLCAnLXcnOwotCQlwdXNoIEBhcmdzLCAkd3JrX3Jvb3QgLiAnLycgLiAk d3JrOwotCQkkd2NudCA9IDE7Ci0JfQotCi0JZm9yICgkYyA9IDE7IDsgJGMgPSAkYyArIDEpIHsK LQkJbXkgKCR0aW1lLCAkd3BzKTsKLQkJbXkgQGFyZ3NfID0gKEBhcmdzLCAoJy1yJywgJHIsICct YycsICRjKSk7Ci0KLQkJKCR0aW1lLCAkd3BzLCAkd3dwcykgPSBydW5fd29ya2xvYWQoQGFyZ3Nf KTsKLQotCQlzYXkgIiAgICAgICAgJGMgY2xpZW50cyBpcyAkd3BzIHdwcy4iIGlmICR2ZXJib3Nl OwotCi0JCWlmICgkYyA+IDEpIHsKLQkJCW15ICRkZWx0YTsKLQotCQkJaWYgKCR0YXJnZXQgPD0g MCkgewotCQkJCWlmICgkd3BzID4gJG1heCkgewotCQkJCQkkbWF4ID0gJHdwczsKLQkJCQkJJG1h eGMgPSAkYzsKLQkJCQl9Ci0JCQkJJGRlbHRhID0gKCR3cHMgLSAkbGFzdF93cHMpIC8gJGxhc3Rf d3BzOwotCQkJCWlmICgkZGVsdGEgPiAwKSB7Ci0JCQkJCWxhc3QgaWYgJGRlbHRhIDwgJHRvbGVy YW5jZTsKLQkJCQl9IGVsc2UgewotCQkJCQkkZGVsdGEgPSAoJHdwcyAtICRtYXgpIC8gJG1heDsK LQkJCQkJbGFzdCBpZiBhYnMoJGRlbHRhKSA+PSAkdG9sZXJhbmNlOwotCQkJCX0KLQkJCX0gZWxz ZSB7Ci0JCQkJJGRlbHRhID0gKCR3cHMgLyAkYyAtICR0YXJnZXQpIC8gJHRhcmdldDsKLQkJCQls YXN0IGlmICRkZWx0YSA8IDAgYW5kIGFicygkZGVsdGEpID49ICR0b2xlcmFuY2U7Ci0JCQl9Ci0J CQkkciA9IGludCgkcnIgKiAoJGNsaWVudF90YXJnZXRfcyAvICR0aW1lKSk7Ci0JCX0gZWxzaWYg KCRjID09IDEpIHsKLQkJCSRzd3BzID0gJHdwczsKLQkJCXJldHVybiAoJGMsICR3cHMsICRzd3Bz LCAkd3dwcykgaWYgJHdjbnQgPiAxIG9yCi0JCQkJCQkJICAgJG11bHRpX21vZGUgb3IKLQkJCQkJ CQkgICAoJHdwc190YXJnZXRfcGFyYW0gPCAwIGFuZAotCQkJCQkJCSAgICAkd3BzX3RhcmdldCA9 PSAwKTsKLQkJfQotCi0JCSRsYXN0X3dwcyA9ICR3cHM7Ci0JfQotCi0JaWYgKCR0YXJnZXQgPD0g MCkgewotCQlyZXR1cm4gKCRtYXhjLCAkbWF4LCAkc3dwcywgJHd3cHMpOwotCX0gZWxzZSB7Ci0J CXJldHVybiAoJGMgLSAxLCAkbGFzdF93cHMsICRzd3BzLCAkd3dwcyk7Ci0JfQotfQotCi1nZXRv cHRzKCdodjJ4bW46YjpXOkI6cjp0Omk6UjpUOnc6JywgXCVvcHRzKTsKLQotaWYgKGRlZmluZWQg JG9wdHN7J2gnfSkgewotCXByaW50IDw8RU5ESEVMUDsKLVN1cHBvcnRlZCBvcHRpb25zOgotCi0g IC1oICAgICAgICAgIEhlbHAgdGV4dC4KLSAgLXYgICAgICAgICAgQmUgdmVyYm9zZS4KLSAgLXgg ICAgICAgICAgU2hvdyBleHRlcm5hbCBjb21tYW5kcy4KLSAgLTIgICAgICAgICAgUnVuIGdlbV93 c2ltIGluIEdUMiBtb2RlLgotICAtbiBudW0gICAgICBOb3AgY2FsaWJyYXRpb24uCi0gIC1iIHN0 ciAgICAgIEJhbGFuY2VyIHRvIHByZS1zZWxlY3QuCi0gICAgICAgICAgICAgIFNraXBzIGJhbGFu Y2VyIGF1dG8tc2VsZWN0aW9uLgotICAgICAgICAgICAgICBQYXNzZWQgc3RyYWlnaHQgdGhlIGdl bV93c2ltIHNvIHVzZSBsaWtlIC1iICItYiBxZCAtUiIKLSAgLVcgYSxiLGMgICAgT3ZlcnJpZGUg dGhlIGRlZmF1bHQgbGlzdCBvZiB3b3JrbG9hZHMuCi0gIC1CIGEsYixjICAgIE92ZXJyaWRlIHRo ZSBkZWZhdWx0IGxpc3Qgb2YgYmFsYW5jZXJzLgotICAtciBzZWMgICAgICBUYXJnZXQgd29ya2xv YWQgZHVyYXRpb24uCi0gIC10IHBjdCAgICAgIENhbGlicmF0aW9uIHRvbGVyYW5jZS4KLSAgLWkg cGN0ICAgICAgRW5naW5lIGlkbGVuZXNzIHRvbGVyYW5jZS4KLSAgLVIgd3BzICAgICAgUnVuIHdv cmtsb2FkcyBpbiB0aGUgcmVhbC10aW1lIG1vZGUgYXQgd3BzIHJhdGUuCi0gIC1UIHdwcyAgICAg IENhbGlicmF0ZSB1cCB0byB3cHMvY2xpZW50IHRhcmdldCBpbnN0ZWFkIG9mIEdQVSBzYXR1cmF0 aW9uLgotICAgICAgICAgICAgICBOZWdhdGl2ZSB2YWx1ZXMgc2V0IHRoZSB0YXJnZXQgYmFzZWQg b24gdGhlIHNpbmdsZSBjbGllbnQKLSAgICAgICAgICAgICAgcGVyZm9ybWFuY2Ugd2hlcmUgdGFy Z2V0ID0gc2luZ2xlLWNsaWVudC13cHMgLyAtTi4KLSAgLXcgc3RyICAgICAgUGFzcy10aHJvdWdo IHRvIGdlbV93c2ltLiBPdmVycmlkZXMgbm9ybWFsIHdvcmtsb2FkIHNlbGVjdGlvbi4KLSAgLW0g ICAgICAgICAgTXVsdGktd29ya2xvYWQgbW9kZS4gQWxsIHNlbGVjdGVkIHdvcmtsb2FkcyB3aWxs IGJlIHJ1biBpbgotICAgICAgICAgICAgICBwYXJhbGxlbCBhbmQgb3ZlcmFsIHNjb3JlIHdpbGwg YmUgcmVsYXRpdmUgdG8gd2hlbiBydW4KLSAgICAgICAgICAgICAgaW5kaXZpZHVhbGx5LgotRU5E SEVMUAotCWV4aXQgMDsKLX0KLQotJHZlcmJvc2UgPSAxIGlmIGRlZmluZWQgJG9wdHN7J3YnfTsK LSRndDIgPSAxIGlmIGRlZmluZWQgJG9wdHN7JzInfTsKLSRzaG93X2NtZHMgPSAxIGlmIGRlZmlu ZWQgJG9wdHN7J3gnfTsKLSRtdWx0aV9tb2RlID0gMSBpZiBkZWZpbmVkICRvcHRzeydtJ307Ci1p ZiAoZGVmaW5lZCAkb3B0c3snYid9KSB7Ci0JZGllIHVubGVzcyBzdWJzdHIoJG9wdHN7J2InfSwg MCwgMikgZXEgJy1iJzsKLQkkYmFsYW5jZXIgPSAkb3B0c3snYid9OwotfQotaWYgKGRlZmluZWQg JG9wdHN7J0InfSkgewotCUBiYWxhbmNlcnMgPSBzcGxpdCAvLC8sICRvcHRzeydCJ307Ci19IGVs c2UgewotCXVuc2hpZnQgQGJhbGFuY2VycywgJyc7Ci19Ci1Ad29ya2xvYWRzID0gc3BsaXQgLywv LCAkb3B0c3snVyd9IGlmIGRlZmluZWQgJG9wdHN7J1cnfTsKLSRjbGllbnRfdGFyZ2V0X3MgPSAk b3B0c3sncid9IGlmIGRlZmluZWQgJG9wdHN7J3InfTsKLSR0b2xlcmFuY2UgPSAkb3B0c3sndCd9 IC8gMTAwLjAgaWYgZGVmaW5lZCAkb3B0c3sndCd9OwotJGlkbGVfdG9sZXJhbmNlX3BjdCA9ICRv cHRzeydpJ30gaWYgZGVmaW5lZCAkb3B0c3snaSd9OwotJHJlYWx0aW1lX3RhcmdldCA9ICRvcHRz eydSJ30gaWYgZGVmaW5lZCAkb3B0c3snUid9OwotJHdwc190YXJnZXQgPSAkb3B0c3snVCd9IGlm IGRlZmluZWQgJG9wdHN7J1QnfTsKLSR3cHNfdGFyZ2V0X3BhcmFtID0gJHdwc190YXJnZXQ7Ci0k d19kaXJlY3QgPSAkb3B0c3sndyd9IGlmIGRlZmluZWQgJG9wdHN7J3cnfTsKLQotaWYgKCRtdWx0 aV9tb2RlKSB7Ci0JZGllIGlmICR3X2RpcmVjdDsgIyBOb3Qgc3VwcG9ydGVkCi0JQG11bHRpX3dv cmtsb2FkcyA9IEB3b3JrbG9hZHM7Ci19Ci0KLUB3b3JrbG9hZHMgPSAoJHdfZGlyZWN0KSBpZiBk ZWZpbmVkICR3X2RpcmVjdDsKLQotc2F5ICJXb3JrbG9hZHM6IjsKLXByaW50IG1hcCB7ICIgICRf XG4iIH0gQHdvcmtsb2FkczsKLXByaW50ICJCYWxhbmNlcnM6ICI7Ci1zYXkgbWFwIHsgIiRfLCIg fSBAYmFsYW5jZXJzOwotc2F5ICJUYXJnZXQgd29ya2xvYWQgZHVyYXRpb24gaXMgJHtjbGllbnRf dGFyZ2V0X3N9cy4iOwotc2F5ICJDYWxpYnJhdGlvbiB0b2xlcmFuY2UgaXMgJHRvbGVyYW5jZS4i Owotc2F5ICJSZWFsLXRpbWUgbW9kZSBhdCAke3JlYWx0aW1lX3RhcmdldH0gd3BzLiIgaWYgJHJl YWx0aW1lX3RhcmdldCA+IDA7Ci1zYXkgIldwcyB0YXJnZXQgaXMgJHt3cHNfdGFyZ2V0fSB3cHMu IiBpZiAkd3BzX3RhcmdldCA+IDA7Ci1zYXkgIk11bHRpLXdvcmtsb2FkIG1vZGUuIiBpZiAkbXVs dGlfbW9kZTsKLSRub3AgPSAkb3B0c3snbid9OwotJG5vcCA9IGNhbGlicmF0ZV9ub3AoKSB1bmxl c3MgJG5vcDsKLXNheSAiTm9wIGNhbGlicmF0aW9uIGlzICRub3AuIjsKLQotZ290byBWRVJJRlkg aWYgZGVmaW5lZCAkYmFsYW5jZXI7Ci0KLW15ICglYmVzdF9iYWwsICViZXN0X2JpZCk7Ci1teSAl cmVzdWx0czsKLW15ICVzY29yZXM7Ci1teSAld3Njb3JlczsKLW15ICVjc2NvcmVzOwotbXkgJWN3 c2NvcmVzOwotbXkgJW1zY29yZXM7Ci1teSAlbXdzY29yZXM7Ci0KLXN1YiBhZGRfcG9pbnRzCi17 Ci0JbXkgKCR3cHMsICRzY29yZXMsICR3c2NvcmVzKSA9IEBfOwotCW15ICgkbWluLCAkbWF4LCAk c3ByZWFkKTsKLQlteSBAc29ydGVkOwotCi0JQHNvcnRlZCA9IHNvcnQgeyAkYiA8PT4gJGEgfSB2 YWx1ZXMgJXskd3BzfTsKLQkkbWF4ID0gJHNvcnRlZFswXTsKLQkkbWluID0gJHNvcnRlZFstMV07 Ci0JJHNwcmVhZCA9ICRtYXggLSAkbWluOwotCWRpZSBpZiAkc3ByZWFkIDwgMDsKLQotCWZvcmVh Y2ggbXkgJHcgKGtleXMgJXskd3BzfSkgewotCQlteSAoJHNjb3JlLCAkd3Njb3JlKTsKLQotCQl1 bmxlc3MgKGV4aXN0cyAkc2NvcmVzLT57JHd9KSB7Ci0JCQkkc2NvcmVzLT57JHd9ID0gMDsKLQkJ CSR3c2NvcmVzLT57JHd9ID0gMDsKLQkJfQotCi0JCSRzY29yZSA9ICR3cHMtPnskd30gLyAkbWF4 OwotCQkkc2NvcmVzLT57JHd9ID0gJHNjb3Jlcy0+eyR3fSArICRzY29yZTsKLQkJJHdzY29yZSA9 ICRzY29yZSAqICRzcHJlYWQgLyAkbWF4OwotCQkkd3Njb3Jlcy0+eyR3fSA9ICR3c2NvcmVzLT57 JHd9ICsgJHdzY29yZTsKLQl9Ci19Ci0KLW15IEBzYXR1cmF0aW9uX3dvcmtsb2FkcyA9ICRtdWx0 aV9tb2RlID8gQG11bHRpX3dvcmtsb2FkcyA6IEB3b3JrbG9hZHM7Ci1teSAlYWxsd3BzOwotbXkg JHdpZHggPSAwOwotCi1wdXNoIEBzYXR1cmF0aW9uX3dvcmtsb2FkcywgJy13ICcgLiBqb2luICcg LXcgJywgbWFwKCIkd3JrX3Jvb3QvJF8iLCBAd29ya2xvYWRzKQotICAgICBpZiAkbXVsdGlfbW9k ZTsKLQotZm9yZWFjaCBteSAkd3JrIChAc2F0dXJhdGlvbl93b3JrbG9hZHMpIHsKLQlteSBAYXJn cyA9ICggIi1uICRub3AiKTsKLQlteSAoJHIsICRlcnJvciwgJHNob3VsZF9iLCAkYmVzdCk7Ci0J bXkgKCV3cHMsICVjd3BzLCAlbXdwcyk7Ci0JbXkgQHNvcnRlZDsKLQlteSAkcmFuZ2U7Ci0KLQkk d19kaXJlY3QgPSAkd3JrIGlmICRtdWx0aV9tb2RlIGFuZCAkd2lkeCA9PSAkI3NhdHVyYXRpb25f d29ya2xvYWRzOwotCi0JJHNob3VsZF9iID0gMTsKLQkkc2hvdWxkX2IgPSBjYW5fYmFsYW5jZV93 b3JrbG9hZCgkd3JrKSB1bmxlc3MgZGVmaW5lZCAkd19kaXJlY3Q7Ci0KLQlwcmludCAiXG5FdmFs dWF0aW5nICckd3JrJy4uLiI7Ci0KLQkoJHIsICRlcnJvcikgPSBjYWxpYnJhdGVfd29ya2xvYWQo JHdyayk7Ci0Jc2F5ICIgJHtjbGllbnRfdGFyZ2V0X3N9cyBpcyAkciB3b3JrbG9hZHMuIChlcnJv cj0kZXJyb3IpIjsKLQotCXNheSAiICBGaW5kaW5nIHNhdHVyYXRpb24gcG9pbnRzIGZvciAnJHdy aycuLi4iOwotCi0JQkFMOiBmb3JlYWNoIG15ICRiYWwgKEBiYWxhbmNlcnMpIHsKLQkJR0JBTDog Zm9yZWFjaCBteSAkRyAoJycsICctRycsICctZCcsICctRyAtZCcpIHsKLQkJCWZvcmVhY2ggbXkg JEggKCcnLCAnLUgnKSB7Ci0JCQkJbXkgQHhhcmdzOwotCQkJCW15ICgkdywgJGMsICRzLCAkYnd3 cHMpOwotCQkJCW15ICRiaWQ7Ci0KLQkJCQlpZiAoJGJhbCBuZSAnJykgewotCQkJCQluZXh0IEdC QUwgaWYgJEcgPX4gJy1HJyBhbmQgZXhpc3RzICRiYWxfc2tpcF9HeyRiYWx9OwotCi0JCQkJCXB1 c2ggQHhhcmdzLCAiLWIgJGJhbCI7Ci0JCQkJCXB1c2ggQHhhcmdzLCAnLVInIHVubGVzcyBleGlz dHMgJGJhbF9za2lwX1J7JGJhbH07Ci0JCQkJCXB1c2ggQHhhcmdzLCAkRyBpZiAkRyBuZSAnJzsK LQkJCQkJcHVzaCBAeGFyZ3MsICRIIGlmICRIIG5lICcnOwotCQkJCQkkYmlkID0gam9pbiAnICcs IEB4YXJnczsKLQkJCQkJcHJpbnQgIiAgICAkYmFsIGJhbGFuY2VyICgnJGJpZCcpOiAiOwotCQkJ CX0gZWxzZSB7Ci0JCQkJCSRiaWQgPSAnPG5vbmU+JzsKLQkJCQkJcHJpbnQgIiAgICBObyBiYWxh bmNpbmc6ICI7Ci0JCQkJfQotCi0JCQkJJHdwc190YXJnZXQgPSAwIGlmICR3cHNfdGFyZ2V0X3Bh cmFtIDwgMDsKLQotCQkJCSgkYywgJHcsICRzLCAkYnd3cHMpID0KLQkJCQkJZmluZF9zYXR1cmF0 aW9uX3BvaW50KCR3cmssICRyLCAwLAotCQkJCQkJCSAgICAgIChAYXJncywgQHhhcmdzKSk7Ci0K LQkJCQlpZiAoJHdwc190YXJnZXRfcGFyYW0gPCAwKSB7Ci0JCQkJCSR3cHNfdGFyZ2V0ID0gJHMg LyAtJHdwc190YXJnZXRfcGFyYW07Ci0KLQkJCQkJKCRjLCAkdywgJHMsICRid3dwcykgPQotCQkJ CQkJZmluZF9zYXR1cmF0aW9uX3BvaW50KCR3cmssICRyLAotCQkJCQkJCQkgICAgICAwLAotCQkJ CQkJCQkgICAgICAoQGFyZ3MsCi0JCQkJCQkJCSAgICAgICBAeGFyZ3MpKTsKLQkJCQl9Ci0KLQkJ CQlpZiAoJG11bHRpX21vZGUgYW5kICR3X2RpcmVjdCkgewotCQkJCQlteSAkd2lkeDsKLQotCQkJ CQlkaWUgdW5sZXNzIHNjYWxhcihAbXVsdGlfd29ya2xvYWRzKSA9PQotCQkJCQkJICAgc2NhbGFy KEB7JGJ3d3BzfSk7Ci0JCQkJCWRpZSB1bmxlc3Mgc2NhbGFyKEBtdWx0aV93b3JrbG9hZHMpID09 Ci0JCQkJCQkgICBzY2FsYXIoa2V5cyAlYWxsd3BzKTsKLQotCQkJCQkjIFRvdGFsIG9mIGFsbCB3 b3JrbG9hZCB3cHMgZnJvbSB0aGUKLQkJCQkJIyBtaXhlZCBydW4uCi0JCQkJCSR3ID0gMDsKLQkJ CQkJZm9yZWFjaCAkd2lkeCAoMC4uJCN7JGJ3d3BzfSkgewotCQkJCQkJJHcgKz0gJGJ3d3BzLT5b JHdpZHhdOwotCQkJCQl9Ci0KLQkJCQkJIyBUb3RhbCBvZiBhbGwgd29ya2xvYWQgd3BzIGZyb20g d2hlbgotCQkJCQkjIHJhbiBpbmRpdmlkdWFsbHkgd2l0aCB0aGUgYmVzdAotCQkJCQkjIGJhbGFu Y2VyLgotCQkJCQlteSAkdG90ID0gMDsKLQkJCQkJZm9yZWFjaCBteSAkd3JrIChAbXVsdGlfd29y a2xvYWRzKSB7Ci0JCQkJCQkkdG90ICs9ICRhbGx3cHN7JHdya30tPnskYmVzdF9iaWR7JHdya319 OwotCQkJCQl9Ci0KLQkJCQkJIyBOb3JtYWxpemUgbWl4ZWQgc3VtIHdpdGggc3VtIG9mCi0JCQkJ CSMgaW5kaXZpZHVhbCBydW5zLgotCQkJCQkkdyAqPSAxMDA7Ci0JCQkJCSR3IC89ICR0b3Q7Ci0K LQkJCQkJIyBTZWNvbmQgbWV0cmljIGlzIGF2ZXJhZ2Ugb2YgZWFjaAotCQkJCQkjIHdvcmtsb2Fk IHdwcyBub3JtYWxpemVkIGJ5IHRoZWlyCi0JCQkJCSMgaW5kaXZpZHVhbCBydW4gcGVyZm9ybWFu Y2Ugd2l0aCB0aGUKLQkJCQkJIyBiZXN0IGJhbGFuY2VyLgotCQkJCQkkcyA9IDA7Ci0JCQkJCSR3 aWR4ID0gMDsKLQkJCQkJZm9yZWFjaCBteSAkd3JrIChAbXVsdGlfd29ya2xvYWRzKSB7Ci0JCQkJ CQkkcyArPSAxMDAgKiAkYnd3cHMtPlskd2lkeF0gLwotCQkJCQkJICAgICAgJGFsbHdwc3skd3Jr fS0+eyRiZXN0X2JpZHskd3JrfX07Ci0JCQkJCQkkd2lkeCsrOwotCQkJCQl9Ci0JCQkJCSRzIC89 IHNjYWxhcihAbXVsdGlfd29ya2xvYWRzKTsKLQotCQkJCQlzYXkgc3ByaW50ZignQWdncmVnYXRl IChub3JtYWxpemVkKSAlLjJmJSU7IGZhaXJuZXNzICUuMmYlJScsCi0JCQkJCQkgICAgJHcsICRz KTsKLQkJCQl9IGVsc2UgewotCQkJCQkkYWxsd3BzeyR3cmt9ID0gXCV3cHM7Ci0JCQkJfQotCi0J CQkJJHdwc3skYmlkfSA9ICR3OwotCQkJCSRjd3BzeyRiaWR9ID0gJHM7Ci0KLQkJCQlpZiAoJHJl YWx0aW1lX3RhcmdldCA+IDAgfHwgJHdwc190YXJnZXRfcGFyYW0gPiAwKSB7Ci0JCQkJCSRtd3Bz eyRiaWR9ID0gJHcgKiAkYzsKLQkJCQl9IGVsc2UgewotCQkJCQkkbXdwc3skYmlkfSA9ICR3ICsg JHM7Ci0JCQkJfQotCi0JCQkJc2F5ICIkYyBjbGllbnRzICgkdyB3cHMsICRzIHdwcyBzaW5nbGUg Y2xpZW50LCBzY29yZT0kbXdwc3skYmlkfSkuIgotCQkJCSAgICB1bmxlc3MgJG11bHRpX21vZGUg YW5kICR3X2RpcmVjdDsKLQotCQkJCWxhc3QgQkFMIHVubGVzcyAkc2hvdWxkX2I7Ci0JCQkJbmV4 dCBCQUwgaWYgJGJhbCBlcSAnJzsKLQkJCQluZXh0IEdCQUwgaWYgZXhpc3RzICRiYWxfc2tpcF9I eyRiYWx9OwotCQkJfQotCQl9Ci0JfQotCi0JJHdpZHgrKzsKLQotCUBzb3J0ZWQgPSBzb3J0IHsg JG13cHN7JGJ9IDw9PiAkbXdwc3skYX0gfSBrZXlzICVtd3BzOwotCSRiZXN0X2JpZHskd3JrfSA9 ICRzb3J0ZWRbMF07Ci0JQHNvcnRlZCA9IHNvcnQgeyAkYiA8PT4gJGEgfSB2YWx1ZXMgJW13cHM7 Ci0JJHJhbmdlID0gMSAtICRzb3J0ZWRbLTFdIC8gJHNvcnRlZFswXTsKLQkkYmVzdF9iYWx7JHdy a30gPSAkc29ydGVkWzBdOwotCi0JbmV4dCBpZiAkbXVsdGlfbW9kZSBhbmQgbm90ICR3X2RpcmVj dDsKLQotCXNheSAiICBCZXN0IGJhbGFuY2VyIGlzICckYmVzdF9iaWR7JHdya30nIChyYW5nZT0k cmFuZ2UpLiI7Ci0KLQotCSRyZXN1bHRzeyR3cmt9ID0gXCVtd3BzOwotCi0JYWRkX3BvaW50cyhc JXdwcywgXCVzY29yZXMsIFwld3Njb3Jlcyk7Ci0JYWRkX3BvaW50cyhcJW13cHMsIFwlbXNjb3Jl cywgXCVtd3Njb3Jlcyk7Ci0JYWRkX3BvaW50cyhcJWN3cHMsIFwlY3Njb3JlcywgXCVjd3Njb3Jl cyk7Ci19Ci0KLXN1YiBkdW1wX3Njb3JlYm9hcmQKLXsKLQlteSAoJG4sICRoKSA9IEBfOwotCW15 ICgkaSwgJHN0ciwgJGJhbGFuY2VyKTsKLQlteSAoJG1heCwgJHJhbmdlKTsKLQlteSBAc29ydGVk OwotCi0JQHNvcnRlZCA9IHNvcnQgeyAkYiA8PT4gJGEgfSB2YWx1ZXMgJXskaH07Ci0JJG1heCA9 ICRzb3J0ZWRbMF07Ci0JJHJhbmdlID0gMSAtICRzb3J0ZWRbLTFdIC8gJG1heDsKLQkkc3RyID0g IiRuIHJhbmsgKHJhbmdlPSRyYW5nZSk6IjsKLQlzYXkgIlxuJHN0ciI7Ci0Jc2F5ICc9JyB4IGxl bmd0aCgkc3RyKTsKLQkkaSA9IDE7Ci0JZm9yZWFjaCBteSAkdyAoc29ydCB7ICRoLT57JGJ9IDw9 PiAkaC0+eyRhfSB9IGtleXMgJXskaH0pIHsKLQkJbXkgJHNjb3JlOwotCi0JCSRiYWxhbmNlciA9 ICR3IGlmICRpID09IDE7Ci0JCSRzY29yZSA9ICRoLT57JHd9IC8gJG1heDsKLQotCQlzYXkgIiAg JGk6ICckdycgKCRzY29yZSkiOwotCi0JCSRpID0gJGkgKyAxOwotCX0KLQotCXJldHVybiAkYmFs YW5jZXI7Ci19Ci0KLWR1bXBfc2NvcmVib2FyZCgkbXVsdGlfbW9kZSA/ICdUaHJvdWdocHV0JyA6 ICdUb3RhbCB3cHMnLCBcJXNjb3Jlcyk7Ci1kdW1wX3Njb3JlYm9hcmQoJ1RvdGFsIHdlaWdodGVk IHdwcycsIFwld3Njb3JlcykgdW5sZXNzICRtdWx0aV9tb2RlOwotZHVtcF9zY29yZWJvYXJkKCRt dWx0aV9tb2RlID8gJ0ZhaXJuZXNzJyA6ICdQZXIgY2xpZW50IHdwcycsIFwlY3Njb3Jlcyk7Ci1k dW1wX3Njb3JlYm9hcmQoJ1BlciBjbGllbnQgd2VpZ2h0ZWQgd3BzJywgXCVjd3Njb3JlcykgdW5s ZXNzICRtdWx0aV9tb2RlOwotJGJhbGFuY2VyID0gZHVtcF9zY29yZWJvYXJkKCRtdWx0aV9tb2Rl ID8gJ0NvbWJpbmVkJyA6ICdDb21iaW5lZCB3cHMnLCBcJW1zY29yZXMpOwotJGJhbGFuY2VyID0g ZHVtcF9zY29yZWJvYXJkKCdDb21iaW5lZCB3ZWlnaHRlZCB3cHMnLCBcJW13c2NvcmVzKSB1bmxl c3MgJG11bHRpX21vZGU7Ci0KLVZFUklGWToKLQotbXkgJXByb2JsZW1fd3JrOwotCi1kaWUgdW5s ZXNzIGRlZmluZWQgJGJhbGFuY2VyOwotCi1zYXkgIlxuQmFsYW5jZXIgaXMgJyRiYWxhbmNlcicu IjsKLXNheSAiSWRsZW5lc3MgdG9sZXJhbmNlIGlzICRpZGxlX3RvbGVyYW5jZV9wY3QlLiI7Ci0K LWlmICgkbXVsdGlfbW9kZSkgewotCSR3X2RpcmVjdCA9ICctdyAnIC4gam9pbiAnIC13ICcsIG1h cCgiJHdya19yb290LyRfIiwgQHdvcmtsb2Fkcyk7Ci0JQHdvcmtsb2FkcyA9ICgkd19kaXJlY3Qp OwotfQotCi1mb3JlYWNoIG15ICR3cmsgKEB3b3JrbG9hZHMpIHsKLQlteSBAYXJncyA9ICggIi1u ICRub3AiICk7Ci0JbXkgKCRyLCAkZXJyb3IsICRjLCAkd3BzLCAkc3dwcyk7Ci0JbXkgJHNhdHVy YXRlZCA9IDA7Ci0JbXkgJHJlc3VsdCA9ICdQYXNzJzsKLQlteSAkdmNzMiA9ICRndDIgPyAnMTow JyA6ICcyOjEnOwotCW15ICVwcm9ibGVtOwotCW15ICRlbmdpbmVzOwotCi0JbmV4dCBpZiBub3Qg ZGVmaW5lZCAkd19kaXJlY3QgYW5kIG5vdCBjYW5fYmFsYW5jZV93b3JrbG9hZCgkd3JrKTsKLQot CXB1c2ggQGFyZ3MsICRiYWxhbmNlciB1bmxlc3MgJGJhbGFuY2VyIGVxICc8bm9uZT4nOwotCi0J aWYgKHNjYWxhcihrZXlzICVyZXN1bHRzKSkgewotCQkkciA9ICRyZXN1bHRzeyR3cmt9LT57JGJh bGFuY2VyfSAvICRiZXN0X2JhbHskd3JrfSAqIDEwMC4wOwotCX0gZWxzZSB7Ci0JCSRyID0gJy0t LSc7Ci0JfQotCXNheSAiICBcblByb2ZpbGluZyAnJHdyaycgKCRyJSBvZiBiZXN0KS4uLiI7Ci0K LQkoJHIsICRlcnJvcikgPSBjYWxpYnJhdGVfd29ya2xvYWQoJHdyayk7Ci0Jc2F5ICIgICAgICAk e2NsaWVudF90YXJnZXRfc31zIGlzICRyIHdvcmtsb2Fkcy4gKGVycm9yPSRlcnJvcikiOwotCi0J KCRjLCAkd3BzLCAkc3dwcykgPSBmaW5kX3NhdHVyYXRpb25fcG9pbnQoJHdyaywgJHIsICR2ZXJi b3NlLCBAYXJncyk7Ci0Jc2F5ICIgICAgICBTYXR1cmF0aW9uIGF0ICRjIGNsaWVudHMgKCR3cHMg d29ya2xvYWRzL3MpLiI7Ci0JcHVzaCBAYXJncywgIi1jICRjIjsKLQotCSRlbmdpbmVzID0gdHJh Y2Vfd29ya2xvYWQoJHdyaywgJGJhbGFuY2VyLCAkciwgJGMpOwotCi0JZm9yZWFjaCBteSAka2V5 IChrZXlzICV7JGVuZ2luZXN9KSB7Ci0JCW5leHQgaWYgJGtleSBlcSAnZ3B1JzsKLQkJJHNhdHVy YXRlZCA9ICRzYXR1cmF0ZWQgKyAxCi0JCQkgICAgIGlmICRlbmdpbmVzLT57JGtleX0gPCAkaWRs ZV90b2xlcmFuY2VfcGN0OwotCX0KLQotCWlmICgkc2F0dXJhdGVkID09IDApIHsKLQkJIyBOb3Qg YSBzaW5nbGUgc2F0dXJhdGVkIGVuZ2luZQotCQkkcmVzdWx0ID0gJ0ZBSUwnOwotCX0gZWxzaWYg KG5vdCBleGlzdHMgJGVuZ2luZXMtPnsnMjowJ30gb3Igbm90IGV4aXN0cyAkZW5naW5lcy0+eyR2 Y3MyfSkgewotCQkjIFZDUzEgYW5kIFZDUzIgbm90IHByZXNlbnQgaW4gYSBiYWxhbmNpbmcgd29y a2xvYWQKLQkJJHJlc3VsdCA9ICdGQUlMJzsKLQl9IGVsc2lmICgkc2F0dXJhdGVkID09IDEgYW5k Ci0JCSAoJGVuZ2luZXMtPnsnMjowJ30gPCAkaWRsZV90b2xlcmFuY2VfcGN0IG9yCi0JCSAgJGVu Z2luZXMtPnskdmNzMn0gPCAkaWRsZV90b2xlcmFuY2VfcGN0KSkgewotCQkjIE9ubHkgb25lIFZD UyBzYXR1cmF0ZWQKLQkJJHJlc3VsdCA9ICdXQVJOJzsKLQl9Ci0KLQkkcmVzdWx0ID0gJ1dBUk4n IGlmICRlbmdpbmVzLT57J2dwdSd9ID4gJGlkbGVfdG9sZXJhbmNlX3BjdDsKLQotCWlmICgkcmVz dWx0IG5lICdQYXNzJykgewotCQkkcHJvYmxlbXsnYyd9ID0gJGM7Ci0JCSRwcm9ibGVteydyJ30g PSAkcjsKLQkJJHByb2JsZW17J3N0YXRzJ30gPSAkZW5naW5lczsKLQkJJHByb2JsZW1fd3JreyR3 cmt9ID0gXCVwcm9ibGVtOwotCX0KLQotCXByaW50ICIgICAgJHJlc3VsdCBbIjsKLQlwcmludCBt YXAgIiAkXzogJGVuZ2luZXMtPnskX30lLCIsIHNvcnQga2V5cyAleyRlbmdpbmVzfTsKLQlzYXkg IiBdIjsKLX0KLQotc2F5ICJcblByb2JsZW1hdGljIHdvcmtsb2FkcyB3ZXJlOiIgaWYgc2NhbGFy KGtleXMgJXByb2JsZW1fd3JrKSA+IDA7Ci1mb3JlYWNoIG15ICR3cmsgKHNvcnQga2V5cyAlcHJv YmxlbV93cmspIHsKLQlteSAkcHJvYmxlbSA9ICRwcm9ibGVtX3dya3skd3JrfTsKLQotCXByaW50 ICIgICAkd3JrIC1jICRwcm9ibGVtLT57J2MnfSAtciAkcHJvYmxlbS0+eydyJ30gWyI7Ci0JcHJp bnQgbWFwICIgJF86ICRwcm9ibGVtLT57J3N0YXRzJ30tPnskX30lLCIsCi0JICAgICAgc29ydCBr ZXlzICV7JHByb2JsZW0tPnsnc3RhdHMnfX07Ci0Jc2F5ICIgXSI7Ci19Ci0tIAoyLjIwLjEKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFp bGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=