ZGlmZiAtLWdpdCBhL25ldC9pcmRhL2FmX2lyZGEuYyBiL25ldC9pcmRhL2FmX2lyZGEuYwppbmRleCA3ZTFhZWE4Li5lYWJkNjgzIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9hZl9pcmRhLmMKKysrIGIvbmV0L2lyZGEvYWZfaXJkYS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJc2stPnNrX3NodXRkb3duIHw9IFNFTkRfU0hVVERPV047CiAKIAkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7Ci0gICAgICAgICAgICAgICAgc29ja19vcnBoYW4oc2spOworCQlzb2NrX29ycGhhbihzayk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAKIAkJLyogQ2xvc2Ugb3VyIFRTQVAuCkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJCWlydHRwX2Nsb3NlX3RzYXAoc2VsZi0+dHNhcCk7CiAJCQlzZWxmLT50c2FwID0gTlVMTDsKIAkJfQotICAgICAgICB9CisJfQogCiAJLyogTm90ZSA6IG9uY2Ugd2UgYXJlIHRoZXJlLCB0aGVyZSBpcyBub3QgbXVjaCB5b3Ugd2FudCB0byBkbwogCSAqIHdpdGggdGhlIHNvY2tldCBhbnltb3JlLCBhcGFydCBmcm9tIGNsb3NpbmcgaXQuCkBAIC0xMjExLDcgKzEyMTEsNyBAQAogCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKIAotICAgICAgICBpZiAoc2sgPT0gTlVMTCkKKwlpZiAoc2sgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlsb2NrX3NvY2soc2spOwpAQCAtMTI1OSw3ICsxMjU5LDcgQEAKIAkgKiBtZW1vcnkgbGVhayBpcyBub3cgZ29uZS4uLiAtIEplYW4gSUkKIAkgKi8KIAotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTEzMTIsNyArMTMxMiw3IEBACiAJCWxlbiA9IHNlbGYtPm1heF9kYXRhX3NpemU7CiAJfQogCi0Jc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgbGVuICsgc2VsZi0+bWF4X2hlYWRlcl9zaXplICsgMTYsIAorCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIGxlbiArIHNlbGYtPm1heF9oZWFkZXJfc2l6ZSArIDE2LAogCQkJCSAgbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT0JVRlM7CkBAIC0xNzE0LDcgKzE3MTQsNyBAQAogCXNlbGYtPmRhZGRyID0gREVWX0FERFJfQU5ZOwkvKiBVbnRpbCB3ZSBnZXQgcmUtY29ubmVjdGVkICovCiAJc2VsZi0+c2FkZHIgPSAweDA7CQkvKiBzbyBJckxNUCBhc3NpZ24gdXMgYW55IGxpbmsgKi8KIAotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2Rpc2NvdmVyeS5jIGIvbmV0L2lyZGEvZGlzY292ZXJ5LmMKaW5kZXggODlmZDJhMi4uNzg5NDc4YiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvZGlzY292ZXJ5LmMKKysrIGIvbmV0L2lyZGEvZGlzY292ZXJ5LmMKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAKKyAqCiAgKiBGaWxlbmFtZTogICAgICBkaXNjb3ZlcnkuYwogICogVmVyc2lvbjogICAgICAgMC4xCiAgKiBEZXNjcmlwdGlvbjogICBSb3V0aW5lcyBmb3IgaGFuZGxpbmcgZGlzY292ZXJpZXMgYXQgdGhlIElyTE1QIGxheWVyCkBAIC0xMCwyNCArMTAsMjQgQEAKICAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICAqIE1vZGlmaWVkIGF0OiAgIEZyaSBNYXkgMjggIDM6MTEgQ1NUIDE5OTkKICAqIE1vZGlmaWVkIGJ5OiAgIEhvcnN0IHZvbiBCcmFuZCA8dm9uYnJhbmRAc2xlaXBuaXIudmFscGFyYWlzby5jbD4KLSAqIAorICoKICAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKLSAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKLSAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAqICAgICAKKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTY1LDkgKzY1LDkgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYWNoZWxvZy0+aGJfc3BpbmxvY2ssIGZsYWdzKTsKIAotCS8qIAotCSAqIFJlbW92ZSBhbGwgZGlzY292ZXJpZXMgb2YgZGV2aWNlcyB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gCi0JICogZGlzY292ZXJlZCBvbiB0aGUgc2FtZSBsaW5rIHdpdGggdGhlIHNhbWUgbmFtZSAoaW5mbyksIG9yIHRoZSAKKwkvKgorCSAqIFJlbW92ZSBhbGwgZGlzY292ZXJpZXMgb2YgZGV2aWNlcyB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4KKwkgKiBkaXNjb3ZlcmVkIG9uIHRoZSBzYW1lIGxpbmsgd2l0aCB0aGUgc2FtZSBuYW1lIChpbmZvKSwgb3IgdGhlCiAJICogc2FtZSBkYWRkci4gV2UgZG8gdGhpcyBzaW5jZSBzb21lIGRldmljZXMgKG1vc3RseSBQREFzKSBjaGFuZ2UKIAkgKiB0aGVpciBkZXZpY2UgYWRkcmVzcyBiZXR3ZWVuIGV2ZXJ5IGRpc2NvdmVyeS4KIAkgKi8KQEAgLTc5LDEwICs3OSwxMCBAQAogCQlkaXNjb3ZlcnkgPSAoZGlzY292ZXJ5X3QgKikgaGFzaGJpbl9nZXRfbmV4dChjYWNoZWxvZyk7CiAKIAkJaWYgKChub2RlLT5kYXRhLnNhZGRyID09IG5ldy0+ZGF0YS5zYWRkcikgJiYKLQkJICAgICgobm9kZS0+ZGF0YS5kYWRkciA9PSBuZXctPmRhdGEuZGFkZHIpIHx8IAorCQkgICAgKChub2RlLT5kYXRhLmRhZGRyID09IG5ldy0+ZGF0YS5kYWRkcikgfHwKIAkJICAgICAoc3RyY21wKG5vZGUtPmRhdGEuaW5mbywgbmV3LT5kYXRhLmluZm8pID09IDApKSkKIAkJewotCQkJLyogVGhpcyBkaXNjb3ZlcnkgaXMgYSBwcmV2aW91cyBkaXNjb3ZlcnkgCisJCQkvKiBUaGlzIGRpc2NvdmVyeSBpcyBhIHByZXZpb3VzIGRpc2NvdmVyeQogCQkJICogZnJvbSB0aGUgc2FtZSBkZXZpY2UsIHNvIGp1c3QgcmVtb3ZlIGl0CiAJCQkgKi8KIAkJCWhhc2hiaW5fcmVtb3ZlX3RoaXMoY2FjaGVsb2csIChpcmRhX3F1ZXVlX3QgKikgbm9kZSk7CkBAIC0xMzQsNyArMTM0LDcgQEAKIAogCQlkaXNjb3ZlcnkgPSAoZGlzY292ZXJ5X3QgKikgaGFzaGJpbl9yZW1vdmVfZmlyc3QobG9nKTsKIAl9Ci0JCisKIAkvKiBEZWxldGUgdGhlIG5vdyBlbXB0eSBsb2cgKi8KIAloYXNoYmluX2RlbGV0ZShsb2csIChGUkVFX0ZVTkMpIGtmcmVlKTsKIH0KQEAgLTIzMiw3ICsyMzIsNyBAQAogCXdoaWxlIChkaXNjb3ZlcnkgIT0gTlVMTCkgewogCQlJUkRBX0RFQlVHKDAsICJEaXNjb3Zlcnk6XG4iKTsKIAkJSVJEQV9ERUJVRygwLCAiICBkYWRkcj0lMDh4XG4iLCBkaXNjb3ZlcnktPmRhdGEuZGFkZHIpOwotCQlJUkRBX0RFQlVHKDAsICIgIHNhZGRyPSUwOHhcbiIsIGRpc2NvdmVyeS0+ZGF0YS5zYWRkcik7IAorCQlJUkRBX0RFQlVHKDAsICIgIHNhZGRyPSUwOHhcbiIsIGRpc2NvdmVyeS0+ZGF0YS5zYWRkcik7CiAJCUlSREFfREVCVUcoMCwgIiAgbmlja25hbWU9JXNcbiIsIGRpc2NvdmVyeS0+ZGF0YS5pbmZvKTsKIAogCQlkaXNjb3ZlcnkgPSAoZGlzY292ZXJ5X3QgKikgaGFzaGJpbl9nZXRfbmV4dChsb2cpOwpAQCAtMzIxLDI2ICszMjEsMjYgQEAKIHsKIAlkaXNjb3ZlcnlfdCAqZGlzY292ZXJ5OwogCi0JZm9yIChkaXNjb3ZlcnkgPSAoZGlzY292ZXJ5X3QgKikgaGFzaGJpbl9nZXRfZmlyc3QoaXJsbXAtPmNhY2hlbG9nKTsgCisJZm9yIChkaXNjb3ZlcnkgPSAoZGlzY292ZXJ5X3QgKikgaGFzaGJpbl9nZXRfZmlyc3QoaXJsbXAtPmNhY2hlbG9nKTsKIAkgICAgIGRpc2NvdmVyeSAhPSBOVUxMOwogCSAgICAgZGlzY292ZXJ5ID0gKGRpc2NvdmVyeV90ICopIGhhc2hiaW5fZ2V0X25leHQoaXJsbXAtPmNhY2hlbG9nKSkgewogCQlpZiAocG9zLS0gPT0gMCkKIAkJCWJyZWFrOwogCX0KLQkJCisKIAlyZXR1cm4gZGlzY292ZXJ5OwogfQogCiBzdGF0aWMgdm9pZCAqZGlzY292ZXJ5X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CiAJc3Bpbl9sb2NrX2lycSgmaXJsbXAtPmNhY2hlbG9nLT5oYl9zcGlubG9jayk7Ci0gICAgICAgIHJldHVybiAqcG9zID8gZGlzY292ZXJ5X3NlcV9pZHgoKnBvcyAtIDEpIDogU0VRX1NUQVJUX1RPS0VOOworCXJldHVybiAqcG9zID8gZGlzY292ZXJ5X3NlcV9pZHgoKnBvcyAtIDEpIDogU0VRX1NUQVJUX1RPS0VOOwogfQogCiBzdGF0aWMgdm9pZCAqZGlzY292ZXJ5X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAkrKypwb3M7Ci0JcmV0dXJuICh2ID09IFNFUV9TVEFSVF9UT0tFTikgCisJcmV0dXJuICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJPyAodm9pZCAqKSBoYXNoYmluX2dldF9maXJzdChpcmxtcC0+Y2FjaGVsb2cpCiAJCTogKHZvaWQgKikgaGFzaGJpbl9nZXRfbmV4dChpcmxtcC0+Y2FjaGVsb2cpOwogfQpAQCAtMzU3LDkgKzM1Nyw5IEBACiAJZWxzZSB7CiAJCWNvbnN0IGRpc2NvdmVyeV90ICpkaXNjb3ZlcnkgPSB2OwogCi0JCXNlcV9wcmludGYoc2VxLCAibmlja25hbWU6ICVzLCBoaW50OiAweCUwMnglMDJ4IiwgCisJCXNlcV9wcmludGYoc2VxLCAibmlja25hbWU6ICVzLCBoaW50OiAweCUwMnglMDJ4IiwKIAkJCSAgIGRpc2NvdmVyeS0+ZGF0YS5pbmZvLAotCQkJICAgZGlzY292ZXJ5LT5kYXRhLmhpbnRzWzBdLCAKKwkJCSAgIGRpc2NvdmVyeS0+ZGF0YS5oaW50c1swXSwKIAkJCSAgIGRpc2NvdmVyeS0+ZGF0YS5oaW50c1sxXSk7CiAjaWYgMAogCQlpZiAoIGRpc2NvdmVyeS0+ZGF0YS5oaW50c1swXSAmIEhJTlRfUE5QKQpAQCAtMzc2LDIwICszNzYsMjAgQEAKIAkJCXNlcV9wdXRzKHNlcSwgIkZheCAiKTsKIAkJaWYgKCBkaXNjb3ZlcnktPmRhdGEuaGludHNbMF0gJiBISU5UX0xBTikKIAkJCXNlcV9wdXRzKHNlcSwgIkxBTiBBY2Nlc3MgIik7Ci0JCQorCiAJCWlmICggZGlzY292ZXJ5LT5kYXRhLmhpbnRzWzFdICYgSElOVF9URUxFUEhPTlkpCiAJCQlzZXFfcHV0cyhzZXEsICJUZWxlcGhvbnkgIik7CiAJCWlmICggZGlzY292ZXJ5LT5kYXRhLmhpbnRzWzFdICYgSElOVF9GSUxFX1NFUlZFUikKLQkJCXNlcV9wdXRzKHNlcSwgIkZpbGUgU2VydmVyICIpOyAgICAgICAKKwkJCXNlcV9wdXRzKHNlcSwgIkZpbGUgU2VydmVyICIpOwogCQlpZiAoIGRpc2NvdmVyeS0+ZGF0YS5oaW50c1sxXSAmIEhJTlRfQ09NTSkKIAkJCXNlcV9wdXRzKHNlcSwgIklyQ09NTSAiKTsKIAkJaWYgKCBkaXNjb3ZlcnktPmRhdGEuaGludHNbMV0gJiBISU5UX09CRVgpCiAJCQlzZXFfcHV0cyhzZXEsICJJck9CRVggIik7Ci0jZW5kaWYJCQorI2VuZGlmCiAJCXNlcV9wcmludGYoc2VxLCIsIHNhZGRyOiAweCUwOHgsIGRhZGRyOiAweCUwOHhcblxuIiwKIAkJCSAgICAgICBkaXNjb3ZlcnktPmRhdGEuc2FkZHIsCiAJCQkgICAgICAgZGlzY292ZXJ5LT5kYXRhLmRhZGRyKTsKLQkJCisKIAkJc2VxX3B1dGMoc2VxLCAnXG4nKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2NvcmUuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCmluZGV4IGFkNmI2YWYuLmMyOGVlN2IgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgCisgKgogICogRmlsZW5hbWU6ICAgICAgaXJjb21tX2NvcmUuYwogICogVmVyc2lvbjogICAgICAgMS4wCiAgKiBEZXNjcmlwdGlvbjogICBJckNPTU0gc2VydmljZSBpbnRlcmZhY2UKQEAgLTgsMjUgKzgsMjUgQEAKICAqIENyZWF0ZWQgYXQ6ICAgIFN1biBKdW4gIDYgMjA6Mzc6MzQgMTk5OQogICogTW9kaWZpZWQgYXQ6ICAgVHVlIERlYyAyMSAxMzoyNjo0MSAxOTk5CiAgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+Ci0gKiAKKyAqCiAgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAzIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KLSAqICAgICAKLSAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAotICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAotICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiAgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAotICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAotICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICAqICAgICBNQSAwMjExMS0xMzA3IFVTQQotICogICAgIAorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyY29tbV9jb3JlLmg+CiAKIHN0YXRpYyBpbnQgX19pcmNvbW1fY2xvc2Uoc3RydWN0IGlyY29tbV9jYiAqc2VsZik7Ci1zdGF0aWMgdm9pZCBpcmNvbW1fY29udHJvbF9pbmRpY2F0aW9uKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIAorc3RhdGljIHZvaWQgaXJjb21tX2NvbnRyb2xfaW5kaWNhdGlvbihzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBjbGVuKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCkBAIC02OSwyMiArNjksMjIgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXJjb21tX2luaXQodm9pZCkKIHsKLQlpcmNvbW0gPSBoYXNoYmluX25ldyhIQl9MT0NLKTsgCisJaXJjb21tID0gaGFzaGJpbl9uZXcoSEJfTE9DSyk7CiAJaWYgKGlyY29tbSA9PSBOVUxMKSB7CiAJCUlSREFfRVJST1IoIiVzKCksIGNhbid0IGFsbG9jYXRlIGhhc2hiaW4hXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JCisKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXsgc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CiAJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoImlyY29tbSIsIDAsIHByb2NfaXJkYSk7Ci0JaWYgKGVudCkgCisJaWYgKGVudCkKIAkJZW50LT5wcm9jX2ZvcHMgPSAmaXJjb21tX3Byb2NfZm9wczsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KLQkKKwogCUlSREFfTUVTU0FHRSgiSXJDT01NIHByb3RvY29sIChEYWcgQnJhdHRsaSlcbiIpOwotCQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xMzksNyArMTM5LDcgQEAKIAogCWhhc2hiaW5faW5zZXJ0KGlyY29tbSwgKGlyZGFfcXVldWVfdCAqKSBzZWxmLCBsaW5lLCBOVUxMKTsKIAotCWlyY29tbV9uZXh0X3N0YXRlKHNlbGYsIElSQ09NTV9JRExFKTsJCisJaXJjb21tX25leHRfc3RhdGUoc2VsZiwgSVJDT01NX0lETEUpOwogCiAJcmV0dXJuIHNlbGY7CiB9CkBAIC0xOTUsOCArMTk1LDggQEAKIAllbnRyeSA9IGhhc2hiaW5fcmVtb3ZlKGlyY29tbSwgc2VsZi0+bGluZSwgTlVMTCk7CiAKIAlJUkRBX0FTU0VSVChlbnRyeSA9PSBzZWxmLCByZXR1cm4gLTE7KTsKLQkKLSAgICAgICAgcmV0dXJuIF9faXJjb21tX2Nsb3NlKHNlbGYpOworCisJcmV0dXJuIF9faXJjb21tX2Nsb3NlKHNlbGYpOwogfQogCiBFWFBPUlRfU1lNQk9MKGlyY29tbV9jbG9zZSk7CkBAIC0yMDYsOSArMjA2LDkgQEAKICAqCiAgKiAgICBJbXBsLiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGRpZmZlciBmcm9tIG9uZSBvZiB0aGUgcmVmZXJlbmNlLiBUaGlzCiAgKiAgICBmdW5jdGlvbiBkb2VzIGRpc2NvdmVyeSBhcyB3ZWxsIGFzIHNlbmRpbmcgY29ubmVjdCByZXF1ZXN0Ci0gKiAKKyAqCiAgKi8KLWludCBpcmNvbW1fY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIF9fdTggZGxzYXBfc2VsLCAKK2ludCBpcmNvbW1fY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIF9fdTggZGxzYXBfc2VsLAogCQkJICAgX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgX191OCBzZXJ2aWNlX3R5cGUpCiB7CkBAIC0yNDMsMjAgKzI0MywyMCBAQAogCQkJICAgICAgIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbykKIHsKIAlpbnQgY2xlbiA9IDA7Ci0JCisKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKIAogCS8qIENoZWNrIGlmIHRoZSBwYWNrZXQgY29udGFpbnMgZGF0YSBvbiB0aGUgY29udHJvbCBjaGFubmVsICovCiAJaWYgKHNrYi0+bGVuID4gMCkKIAkJY2xlbiA9IHNrYi0+ZGF0YVswXTsKLQkKLQkvKiAKLQkgKiBJZiB0aGVyZSBhcmUgYW55IGRhdGEgaGlkaW5nIGluIHRoZSBjb250cm9sIGNoYW5uZWwsIHdlIG11c3QgCi0JICogZGVsaXZlciBpdCBmaXJzdC4gVGhlIHNpZGUgZWZmZWN0IGlzIHRoYXQgdGhlIGNvbnRyb2wgY2hhbm5lbCAKKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBkYXRhIGhpZGluZyBpbiB0aGUgY29udHJvbCBjaGFubmVsLCB3ZSBtdXN0CisJICogZGVsaXZlciBpdCBmaXJzdC4gVGhlIHNpZGUgZWZmZWN0IGlzIHRoYXQgdGhlIGNvbnRyb2wgY2hhbm5lbAogCSAqIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBza2IKIAkgKi8KIAlpZiAoc2VsZi0+bm90aWZ5LmNvbm5lY3RfaW5kaWNhdGlvbikKLQkJc2VsZi0+bm90aWZ5LmNvbm5lY3RfaW5kaWNhdGlvbihzZWxmLT5ub3RpZnkuaW5zdGFuY2UsIHNlbGYsIAorCQlzZWxmLT5ub3RpZnkuY29ubmVjdF9pbmRpY2F0aW9uKHNlbGYtPm5vdGlmeS5pbnN0YW5jZSwgc2VsZiwKIAkJCQkJCWluZm8tPnFvcywgaW5mby0+bWF4X2RhdGFfc2l6ZSwKIAkJCQkJCWluZm8tPm1heF9oZWFkZXJfc2l6ZSwgc2tiKTsKIAllbHNlIHsKQEAgLTI4Miw3ICsyODIsNyBAQAogCXJldCA9IGlyY29tbV9kb19ldmVudChzZWxmLCBJUkNPTU1fQ09OTkVDVF9SRVNQT05TRSwgdXNlcmRhdGEsIE5VTEwpOwogCiAJcmV0dXJuIHJldDsKLX0JCit9CiAKIEVYUE9SVF9TWU1CT0woaXJjb21tX2Nvbm5lY3RfcmVzcG9uc2UpOwogCkBAIC0yOTksNyArMjk5LDcgQEAKIAogCWlmIChzZWxmLT5ub3RpZnkuY29ubmVjdF9jb25maXJtICkKIAkJc2VsZi0+bm90aWZ5LmNvbm5lY3RfY29uZmlybShzZWxmLT5ub3RpZnkuaW5zdGFuY2UsCi0JCQkJCSAgICAgc2VsZiwgaW5mby0+cW9zLCAKKwkJCQkJICAgICBzZWxmLCBpbmZvLT5xb3MsCiAJCQkJCSAgICAgaW5mby0+bWF4X2RhdGFfc2l6ZSwKIAkJCQkJICAgICBpbmZvLT5tYXhfaGVhZGVyX3NpemUsIHNrYik7CiAJZWxzZSB7CkBAIC0zMjIsNyArMzIyLDcgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtRUZBVUxUOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX01BR0lDLCByZXR1cm4gLUVGQVVMVDspOwogCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm4gLUVGQVVMVDspOwotCQorCiAJcmV0ID0gaXJjb21tX2RvX2V2ZW50KHNlbGYsIElSQ09NTV9EQVRBX1JFUVVFU1QsIHNrYiwgTlVMTCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzM3LDcgKzMzNyw3IEBACiAgKgogICovCiB2b2lkIGlyY29tbV9kYXRhX2luZGljYXRpb24oc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsJCit7CiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAlJUkRBX0FTU0VSVChza2ItPmxlbiA+IDAsIHJldHVybjspOwpAQCAtMzYzLDkgKzM2Myw5IEBACiAKIAljbGVuID0gc2tiLT5kYXRhWzBdOwogCi0JLyogCi0JICogSWYgdGhlcmUgYXJlIGFueSBkYXRhIGhpZGluZyBpbiB0aGUgY29udHJvbCBjaGFubmVsLCB3ZSBtdXN0IAotCSAqIGRlbGl2ZXIgaXQgZmlyc3QuIFRoZSBzaWRlIGVmZmVjdCBpcyB0aGF0IHRoZSBjb250cm9sIGNoYW5uZWwgCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGRhdGEgaGlkaW5nIGluIHRoZSBjb250cm9sIGNoYW5uZWwsIHdlIG11c3QKKwkgKiBkZWxpdmVyIGl0IGZpcnN0LiBUaGUgc2lkZSBlZmZlY3QgaXMgdGhhdCB0aGUgY29udHJvbCBjaGFubmVsCiAJICogd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHNrYgogCSAqLwogCWlmIChjbGVuID4gMCkKQEAgLTM3NSw3ICszNzUsNyBAQAogCXNrYl9wdWxsKHNrYiwgY2xlbisxKTsKIAogCWlmIChza2ItPmxlbikKLQkJaXJjb21tX2RhdGFfaW5kaWNhdGlvbihzZWxmLCBza2IpOwkJCisJCWlyY29tbV9kYXRhX2luZGljYXRpb24oc2VsZiwgc2tiKTsKIAllbHNlIHsKIAkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgZGF0YSB3YXMgY29udHJvbCBpbmZvIG9ubHkhXG4iLAogCQkJICAgX19GVU5DVElPTl9fICk7CkBAIC0zOTEsMTMgKzM5MSwxMyBAQAogaW50IGlyY29tbV9jb250cm9sX3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmV0OwotCQorCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtRUZBVUxUOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX01BR0lDLCByZXR1cm4gLUVGQVVMVDspOwogCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm4gLUVGQVVMVDspOwotCQorCiAJcmV0ID0gaXJjb21tX2RvX2V2ZW50KHNlbGYsIElSQ09NTV9DT05UUk9MX1JFUVVFU1QsIHNrYiwgTlVMTCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNDExLDEwICs0MTEsMTAgQEAKICAqICAgIERhdGEgaGFzIGFycml2ZWQgb24gdGhlIGNvbnRyb2wgY2hhbm5lbAogICoKICAqLwotc3RhdGljIHZvaWQgaXJjb21tX2NvbnRyb2xfaW5kaWNhdGlvbihzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCAKK3N0YXRpYyB2b2lkIGlyY29tbV9jb250cm9sX2luZGljYXRpb24oc3RydWN0IGlyY29tbV9jYiAqc2VsZiwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY2xlbikKIHsKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsJCisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAkvKiBVc2UgdWRhdGEgZm9yIGRlbGl2ZXJpbmcgZGF0YSBvbiB0aGUgY29udHJvbCBjaGFubmVsICovCiAJaWYgKHNlbGYtPm5vdGlmeS51ZGF0YV9pbmRpY2F0aW9uKSB7CkBAIC00MjcsOCArNDI3LDggQEAKIAogCQkvKiBSZW1vdmUgZGF0YSBjaGFubmVsIGZyb20gY29udHJvbCBjaGFubmVsICovCiAJCXNrYl90cmltKGN0cmxfc2tiLCBjbGVuKzEpOwotCQotCQlzZWxmLT5ub3RpZnkudWRhdGFfaW5kaWNhdGlvbihzZWxmLT5ub3RpZnkuaW5zdGFuY2UsIHNlbGYsIAorCisJCXNlbGYtPm5vdGlmeS51ZGF0YV9pbmRpY2F0aW9uKHNlbGYtPm5vdGlmeS5pbnN0YW5jZSwgc2VsZiwKIAkJCQkJICAgICAgY3RybF9za2IpOwogCiAJCS8qIERyb3AgcmVmZXJlbmNlIGNvdW50IC0KQEAgLTQ1NSw3ICs0NTUsNyBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX01BR0lDLCByZXR1cm4gLTE7KTsKIAotCXJldCA9IGlyY29tbV9kb19ldmVudChzZWxmLCBJUkNPTU1fRElTQ09OTkVDVF9SRVFVRVNULCB1c2VyZGF0YSwgCisJcmV0ID0gaXJjb21tX2RvX2V2ZW50KHNlbGYsIElSQ09NTV9ESVNDT05ORUNUX1JFUVVFU1QsIHVzZXJkYXRhLAogCQkJICAgICAgJmluZm8pOwogCXJldHVybiByZXQ7CiB9CkBAIC00NzIsNyArNDcyLDcgQEAKIAkJCQkgIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbykKIHsKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKLSAgICAgICAKKwogCUlSREFfQVNTRVJUKGluZm8gIT0gTlVMTCwgcmV0dXJuOyk7CiAKIAlpZiAoc2VsZi0+bm90aWZ5LmRpc2Nvbm5lY3RfaW5kaWNhdGlvbikgewpAQCAtNDg2LDcgKzQ4Niw3IEBACiAvKgogICogRnVuY3Rpb24gaXJjb21tX2Zsb3dfcmVxdWVzdCAoc2VsZiwgZmxvdykKICAqCi0gKiAgICAKKyAqCiAgKgogICovCiB2b2lkIGlyY29tbV9mbG93X3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgTE9DQUxfRkxPVyBmbG93KQpAQCAtNTE3LDcgKzUxNyw3IEBACiAJICAgICBzZWxmID0gKHN0cnVjdCBpcmNvbW1fY2IgKikgaGFzaGJpbl9nZXRfbmV4dChpcmNvbW0pKSB7CiAJCWlmIChvZmYrKyA9PSAqcG9zKQogCQkJYnJlYWs7Ci0JCQorCiAJfQogCXJldHVybiBzZWxmOwogfQpAQCAtNTM1LDcgKzUzNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaXJjb21tX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoteyAJCit7CiAJY29uc3Qgc3RydWN0IGlyY29tbV9jYiAqc2VsZiA9IHY7CiAKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fTUFHSUMsIHJldHVybiAtRUlOVkFMOyApOwpAQCAtNTQ4LDcgKzU0OCw3IEBACiAJc2VxX3ByaW50ZihzZXEsCiAJCSAgICIgc3RhdGU6ICVzLCBzbHNhcF9zZWw6ICUjMDJ4LCBkbHNhcF9zZWw6ICUjMDJ4LCBtb2RlOiIsCiAJCSAgIGlyY29tbV9zdGF0ZVsgc2VsZi0+c3RhdGVdLAotCQkgICBzZWxmLT5zbHNhcF9zZWwsIHNlbGYtPmRsc2FwX3NlbCk7IAorCQkgICBzZWxmLT5zbHNhcF9zZWwsIHNlbGYtPmRsc2FwX3NlbCk7CiAKIAlpZihzZWxmLT5zZXJ2aWNlX3R5cGUgJiBJUkNPTU1fM19XSVJFX1JBVykKIAkJc2VxX3ByaW50ZihzZXEsICIgMy13aXJlLXJhdyIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9ldmVudC5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9ldmVudC5jCmluZGV4IDAxZjRlODAuLjIzZDA0NjggMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fZXZlbnQuYworKysgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2V2ZW50LmMKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAKKyAqCiAgKiBGaWxlbmFtZTogICAgICBpcmNvbW1fZXZlbnQuYwogICogVmVyc2lvbjogICAgICAgMS4wCiAgKiBEZXNjcmlwdGlvbjogICBJckNPTU0gbGF5ZXIgc3RhdGUgbWFjaGluZQpAQCAtOCwyNCArOCwyNCBAQAogICogQ3JlYXRlZCBhdDogICAgU3VuIEp1biAgNiAyMDozMzoxMSAxOTk5CiAgKiBNb2RpZmllZCBhdDogICBTdW4gRGVjIDEyIDEzOjQ0OjMyIDE5OTkKICAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KLSAqIAorICoKICAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKLSAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKLSAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAqICAgICAKKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNDEsMTMgKzQxLDEzIEBACiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJjb21tX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmNvbW1fZXZlbnQuaD4KIAotc3RhdGljIGludCBpcmNvbW1fc3RhdGVfaWRsZShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBJUkNPTU1fRVZFTlQgZXZlbnQsIAorc3RhdGljIGludCBpcmNvbW1fc3RhdGVfaWRsZShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBJUkNPTU1fRVZFTlQgZXZlbnQsCiAJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGlyY29tbV9zdGF0ZV93YWl0aShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBJUkNPTU1fRVZFTlQgZXZlbnQsIAorc3RhdGljIGludCBpcmNvbW1fc3RhdGVfd2FpdGkoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgSVJDT01NX0VWRU5UIGV2ZW50LAogCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlyY29tbV9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgaXJjb21tX3N0YXRlX3dhaXRyKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIElSQ09NTV9FVkVOVCBldmVudCwgCitzdGF0aWMgaW50IGlyY29tbV9zdGF0ZV93YWl0cihzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBJUkNPTU1fRVZFTlQgZXZlbnQsCiAJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJjb21tX2luZm8gKmluZm8pOwotc3RhdGljIGludCBpcmNvbW1fc3RhdGVfY29ubihzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBJUkNPTU1fRVZFTlQgZXZlbnQsIAorc3RhdGljIGludCBpcmNvbW1fc3RhdGVfY29ubihzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBJUkNPTU1fRVZFTlQgZXZlbnQsCiAJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbyk7CiAKIGNoYXIgKmlyY29tbV9zdGF0ZVtdID0gewpAQCAtNjAsMjYgKzYwLDI2IEBACiAjaWZkZWYgQ09ORklHX0lSREFfREVCVUcKIHN0YXRpYyBjaGFyICppcmNvbW1fZXZlbnRbXSA9IHsKIAkiSVJDT01NX0NPTk5FQ1RfUkVRVUVTVCIsCi0gICAgICAgICJJUkNPTU1fQ09OTkVDVF9SRVNQT05TRSIsCi0gICAgICAgICJJUkNPTU1fVFRQX0NPTk5FQ1RfSU5ESUNBVElPTiIsCisJIklSQ09NTV9DT05ORUNUX1JFU1BPTlNFIiwKKwkiSVJDT01NX1RUUF9DT05ORUNUX0lORElDQVRJT04iLAogCSJJUkNPTU1fTE1QX0NPTk5FQ1RfSU5ESUNBVElPTiIsCi0gICAgICAgICJJUkNPTU1fVFRQX0NPTk5FQ1RfQ09ORklSTSIsCisJIklSQ09NTV9UVFBfQ09OTkVDVF9DT05GSVJNIiwKIAkiSVJDT01NX0xNUF9DT05ORUNUX0NPTkZJUk0iLAogCi0gICAgICAgICJJUkNPTU1fTE1QX0RJU0NPTk5FQ1RfSU5ESUNBVElPTiIsCisJIklSQ09NTV9MTVBfRElTQ09OTkVDVF9JTkRJQ0FUSU9OIiwKIAkiSVJDT01NX1RUUF9ESVNDT05ORUNUX0lORElDQVRJT04iLAotICAgICAgICAiSVJDT01NX0RJU0NPTk5FQ1RfUkVRVUVTVCIsCisJIklSQ09NTV9ESVNDT05ORUNUX1JFUVVFU1QiLAogCi0gICAgICAgICJJUkNPTU1fVFRQX0RBVEFfSU5ESUNBVElPTiIsCisJIklSQ09NTV9UVFBfREFUQV9JTkRJQ0FUSU9OIiwKIAkiSVJDT01NX0xNUF9EQVRBX0lORElDQVRJT04iLAotICAgICAgICAiSVJDT01NX0RBVEFfUkVRVUVTVCIsCi0gICAgICAgICJJUkNPTU1fQ09OVFJPTF9SRVFVRVNUIiwKLSAgICAgICAgIklSQ09NTV9DT05UUk9MX0lORElDQVRJT04iLAorCSJJUkNPTU1fREFUQV9SRVFVRVNUIiwKKwkiSVJDT01NX0NPTlRST0xfUkVRVUVTVCIsCisJIklSQ09NTV9DT05UUk9MX0lORElDQVRJT04iLAogfTsKICNlbmRpZiAvKiBDT05GSUdfSVJEQV9ERUJVRyAqLwogCiBzdGF0aWMgaW50ICgqc3RhdGVbXSkoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgSVJDT01NX0VWRU5UIGV2ZW50LAotCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJjb21tX2luZm8gKmluZm8pID0gCisJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbykgPQogewogCWlyY29tbV9zdGF0ZV9pZGxlLAogCWlyY29tbV9zdGF0ZV93YWl0aSwKQEAgLTkzLDE0ICs5MywxNCBAQAogICogICAgSXJDT01NIGlzIGN1cnJlbnRseSBpZGxlCiAgKgogICovCi1zdGF0aWMgaW50IGlyY29tbV9zdGF0ZV9pZGxlKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIElSQ09NTV9FVkVOVCBldmVudCwgCitzdGF0aWMgaW50IGlyY29tbV9zdGF0ZV9pZGxlKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIElSQ09NTV9FVkVOVCBldmVudCwKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlyY29tbV9pbmZvICppbmZvKQogewogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgSVJDT01NX0NPTk5FQ1RfUkVRVUVTVDoKLQkJaXJjb21tX25leHRfc3RhdGUoc2VsZiwgSVJDT01NX1dBSVRJKTsJCQorCQlpcmNvbW1fbmV4dF9zdGF0ZShzZWxmLCBJUkNPTU1fV0FJVEkpOwogCQlyZXQgPSBzZWxmLT5pc3N1ZS5jb25uZWN0X3JlcXVlc3Qoc2VsZiwgc2tiLCBpbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBJUkNPTU1fVFRQX0NPTk5FQ1RfSU5ESUNBVElPTjoKQEAgLTExOSwxMCArMTE5LDEwIEBACiAvKgogICogRnVuY3Rpb24gaXJjb21tX3N0YXRlX3dhaXRpIChzZWxmLCBldmVudCwgc2tiKQogICoKLSAqICAgIFRoZSBJckNPTU0gdXNlciBoYXMgcmVxdWVzdGVkIGFuIElyQ09NTSBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgCisgKiAgICBUaGUgSXJDT01NIHVzZXIgaGFzIHJlcXVlc3RlZCBhbiBJckNPTU0gY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlCiAgKiAgICBkZXZpY2UgYW5kIGlzIGF3YWl0aW5nIGNvbmZpcm1hdGlvbgogICovCi1zdGF0aWMgaW50IGlyY29tbV9zdGF0ZV93YWl0aShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBJUkNPTU1fRVZFTlQgZXZlbnQsIAorc3RhdGljIGludCBpcmNvbW1fc3RhdGVfd2FpdGkoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgSVJDT01NX0VWRU5UIGV2ZW50LAogCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlyY29tbV9pbmZvICppbmZvKQogewogCWludCByZXQgPSAwOwpAQCAtMTUyLDggKzE1Miw4IEBACiAgKiAgICBJckNPTU0gaGFzIHJlY2VpdmVkIGFuIGluY29taW5nIGNvbm5lY3Rpb24gcmVxdWVzdCBhbmQgaXMgYXdhaXRpbmcKICAqICAgIHJlc3BvbnNlIGZyb20gdGhlIHVzZXIKICAqLwotc3RhdGljIGludCBpcmNvbW1fc3RhdGVfd2FpdHIoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgSVJDT01NX0VWRU5UIGV2ZW50LCAKLQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbykgCitzdGF0aWMgaW50IGlyY29tbV9zdGF0ZV93YWl0cihzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBJUkNPTU1fRVZFTlQgZXZlbnQsCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJjb21tX2luZm8gKmluZm8pCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTE4NSw3ICsxODUsNyBAQAogICogICAgSXJDT01NIGlzIGNvbm5lY3RlZCB0byB0aGUgcGVlciBJckNPTU0gZGV2aWNlCiAgKgogICovCi1zdGF0aWMgaW50IGlyY29tbV9zdGF0ZV9jb25uKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIElSQ09NTV9FVkVOVCBldmVudCwgCitzdGF0aWMgaW50IGlyY29tbV9zdGF0ZV9jb25uKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIElSQ09NTV9FVkVOVCBldmVudCwKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlyY29tbV9pbmZvICppbmZvKQogewogCWludCByZXQgPSAwOwpAQCAtMjI4LDcgKzIyOCw3IEBACiAgKgogICovCiBpbnQgaXJjb21tX2RvX2V2ZW50KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIElSQ09NTV9FVkVOVCBldmVudCwKLQkJICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbykgCisJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJjb21tX2luZm8gKmluZm8pCiB7CiAJSVJEQV9ERUJVRyg0LCAiJXM6IHN0YXRlPSVzLCBldmVudD0lc1xuIiwgX19GVU5DVElPTl9fICwKIAkJICAgaXJjb21tX3N0YXRlW3NlbGYtPnN0YXRlXSwgaXJjb21tX2V2ZW50W2V2ZW50XSk7CkBAIC0yNDUsNyArMjQ1LDcgQEAKIHZvaWQgaXJjb21tX25leHRfc3RhdGUoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgSVJDT01NX1NUQVRFIHN0YXRlKQogewogCXNlbGYtPnN0YXRlID0gc3RhdGU7Ci0JCi0JSVJEQV9ERUJVRyg0LCAiJXM6IG5leHQgc3RhdGU9JXMsIHNlcnZpY2UgdHlwZT0lZFxuIiwgX19GVU5DVElPTl9fICwgCisKKwlJUkRBX0RFQlVHKDQsICIlczogbmV4dCBzdGF0ZT0lcywgc2VydmljZSB0eXBlPSVkXG4iLCBfX0ZVTkNUSU9OX18gLAogCQkgICBpcmNvbW1fc3RhdGVbc2VsZi0+c3RhdGVdLCBzZWxmLT5zZXJ2aWNlX3R5cGUpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9sbXAuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fbG1wLmMKaW5kZXggYzhlMGQ4OS4uMjJiZDc1MiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9sbXAuYworKysgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2xtcC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgCisgKgogICogRmlsZW5hbWU6ICAgICAgaXJjb21tX2xtcC5jCiAgKiBWZXJzaW9uOiAgICAgICAxLjAKICAqIERlc2NyaXB0aW9uOiAgIEludGVyZmFjZSBiZXR3ZWVuIElyQ09NTSBhbmQgSXJMTVAKQEAgLTksMjUgKzksMjUgQEAKICAqIE1vZGlmaWVkIGF0OiAgIFN1biBEZWMgMTIgMTM6NDQ6MTcgMTk5OQogICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogICogU291cmNlczogICAgICAgUHJldmlvdXMgSXJMUFQgd29yayBieSBUaG9tYXMgRGF2aXMKLSAqIAorICoKICAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgotICogICAgIAotICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCi0gKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCi0gKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKKyAqCiAgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKICAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCi0gKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCi0gKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCi0gKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogICogICAgIE1BIDAyMTExLTEzMDcgVVNBCi0gKiAgICAgCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTQ1LDExICs0NSwxMSBAQAogLyoKICAqIEZ1bmN0aW9uIGlyY29tbV9sbXBfY29ubmVjdF9yZXF1ZXN0IChzZWxmLCB1c2VyZGF0YSkKICAqCi0gKiAgICAKKyAqCiAgKgogICovCi1zdGF0aWMgaW50IGlyY29tbV9sbXBfY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIAotCQkJCSAgICAgIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSwgCitzdGF0aWMgaW50IGlyY29tbV9sbXBfY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhLAogCQkJCSAgICAgIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbykKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTYxLDE0ICs2MSwxNCBAQAogCQlza2JfZ2V0KHVzZXJkYXRhKTsKIAogCXJldCA9IGlybG1wX2Nvbm5lY3RfcmVxdWVzdChzZWxmLT5sc2FwLCBpbmZvLT5kbHNhcF9zZWwsCi0JCQkJICAgIGluZm8tPnNhZGRyLCBpbmZvLT5kYWRkciwgTlVMTCwgdXNlcmRhdGEpOyAKKwkJCQkgICAgaW5mby0+c2FkZHIsIGluZm8tPmRhZGRyLCBOVUxMLCB1c2VyZGF0YSk7CiAJcmV0dXJuIHJldDsKLX0JCit9CiAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fbG1wX2Nvbm5lY3RfcmVzcG9uc2UgKHNlbGYsIHNrYikKICAqCi0gKiAgICAKKyAqCiAgKgogICovCiBzdGF0aWMgaW50IGlyY29tbV9sbXBfY29ubmVjdF9yZXNwb25zZShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLApAQCAtNzgsNyArNzgsNyBAQAogCWludCByZXQ7CiAKIAlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKLQkKKwogCS8qIEFueSB1c2VyZGF0YSBzdXBwbGllZD8gKi8KIAlpZiAodXNlcmRhdGEgPT0gTlVMTCkgewogCQl0eF9za2IgPSBhbGxvY19za2IoTE1QX01BWF9IRUFERVIsIEdGUF9BVE9NSUMpOwpAQCAtODgsOCArODgsOCBAQAogCQkvKiBSZXNlcnZlIHNwYWNlIGZvciBNVVggYW5kIExBUCBoZWFkZXIgKi8KIAkJc2tiX3Jlc2VydmUodHhfc2tiLCBMTVBfTUFYX0hFQURFUik7CiAJfSBlbHNlIHsKLQkJLyogIAotCQkgKiAgQ2hlY2sgdGhhdCB0aGUgY2xpZW50IGhhcyByZXNlcnZlZCBlbm91Z2ggc3BhY2UgZm9yIAorCQkvKgorCQkgKiAgQ2hlY2sgdGhhdCB0aGUgY2xpZW50IGhhcyByZXNlcnZlZCBlbm91Z2ggc3BhY2UgZm9yCiAJCSAqICBoZWFkZXJzCiAJCSAqLwogCQlJUkRBX0FTU0VSVChza2JfaGVhZHJvb20odXNlcmRhdGEpID49IExNUF9NQVhfSEVBREVSLApAQCAtMTA1LDIyICsxMDUsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcmNvbW1fbG1wX2Rpc2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCAKLQkJCQkJIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSwgCitzdGF0aWMgaW50IGlyY29tbV9sbXBfZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsCisJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqdXNlcmRhdGEsCiAJCQkJCSBzdHJ1Y3QgaXJjb21tX2luZm8gKmluZm8pCiB7Ci0gICAgICAgIHN0cnVjdCBza19idWZmICp0eF9za2I7CisJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsKIAlpbnQgcmV0OwogCiAJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKLSAgICAgICAgaWYgKCF1c2VyZGF0YSkgeworCWlmICghdXNlcmRhdGEpIHsKIAkJdHhfc2tiID0gYWxsb2Nfc2tiKExNUF9NQVhfSEVBREVSLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCF0eF9za2IpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJCisKIAkJLyogIFJlc2VydmUgc3BhY2UgZm9yIE1VWCBhbmQgTEFQIGhlYWRlciAqLwotCQlza2JfcmVzZXJ2ZSh0eF9za2IsIExNUF9NQVhfSEVBREVSKTsJCQorCQlza2JfcmVzZXJ2ZSh0eF9za2IsIExNUF9NQVhfSEVBREVSKTsKIAkJdXNlcmRhdGEgPSB0eF9za2I7CiAJfSBlbHNlIHsKIAkJLyogRG9uJ3QgZm9yZ2V0IHRvIHJlZmNvdW50IGl0IC0gc2hvdWxkIGJlIE5VTEwgYW55d2F5ICovCkBAIC0xMzYsNyArMTM2LDcgQEAKICAqIEZ1bmN0aW9uIGlyY29tbV9sbXBfZmxvd19jb250cm9sIChza2IpCiAgKgogICogICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGRhdGEgZnJhbWUgd2UgaGF2ZSBzZW50IHRvIElyTEFQIGhhcwotICogICAgYmVlbiBkZWFsbG9jYXRlZC4gV2UgZG8gdGhpcyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZmxvb2QgSXJMQVAgd2l0aCAKKyAqICAgIGJlZW4gZGVhbGxvY2F0ZWQuIFdlIGRvIHRoaXMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGZsb29kIElyTEFQIHdpdGgKICAqICAgIGZyYW1lcywgc2luY2Ugd2UgYXJlIG5vdCB1c2luZyB0aGUgSXJUVFAgZmxvdyBjb250cm9sIG1lY2hhbmlzbQogICovCiBzdGF0aWMgdm9pZCBpcmNvbW1fbG1wX2Zsb3dfY29udHJvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTUwLDI5ICsxNTAsMjkgQEAKIAljYiA9IChzdHJ1Y3QgaXJkYV9za2JfY2IgKikgc2tiLT5jYjsKIAogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotIAotICAgICAgICBsaW5lID0gY2ItPmxpbmU7CisKKwlsaW5lID0gY2ItPmxpbmU7CiAKIAlzZWxmID0gKHN0cnVjdCBpcmNvbW1fY2IgKikgaGFzaGJpbl9sb2NrX2ZpbmQoaXJjb21tLCBsaW5lLCBOVUxMKTsKLSAgICAgICAgaWYgKCFzZWxmKSB7CisJaWYgKCFzZWxmKSB7CiAJCUlSREFfREVCVUcoMiwgIiVzKCksIGRpZG4ndCBmaW5kIG15c2VsZlxuIiwgX19GVU5DVElPTl9fICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworCQlyZXR1cm47CiAJfQogCi0gICAgICAgIElSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CisJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fTUFHSUMsIHJldHVybjspOwogCiAJc2VsZi0+cGt0X2NvdW50LS07CiAKLSAgICAgICAgaWYgKChzZWxmLT5wa3RfY291bnQgPCAyKSAmJiAoc2VsZi0+Zmxvd19zdGF0dXMgPT0gRkxPV19TVE9QKSkgewotICAgICAgICAgICAgICAgIElSREFfREVCVUcoMiwgIiVzKCksIGFza2luZyBUVFkgdG8gc3RhcnQgYWdhaW4hXG4iLCBfX0ZVTkNUSU9OX18gKTsKLSAgICAgICAgICAgICAgICBzZWxmLT5mbG93X3N0YXR1cyA9IEZMT1dfU1RBUlQ7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGYtPm5vdGlmeS5mbG93X2luZGljYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5ub3RpZnkuZmxvd19pbmRpY2F0aW9uKHNlbGYtPm5vdGlmeS5pbnN0YW5jZSwgCisJaWYgKChzZWxmLT5wa3RfY291bnQgPCAyKSAmJiAoc2VsZi0+Zmxvd19zdGF0dXMgPT0gRkxPV19TVE9QKSkgeworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBhc2tpbmcgVFRZIHRvIHN0YXJ0IGFnYWluIVxuIiwgX19GVU5DVElPTl9fICk7CisJCXNlbGYtPmZsb3dfc3RhdHVzID0gRkxPV19TVEFSVDsKKwkJaWYgKHNlbGYtPm5vdGlmeS5mbG93X2luZGljYXRpb24pCisJCQlzZWxmLT5ub3RpZnkuZmxvd19pbmRpY2F0aW9uKHNlbGYtPm5vdGlmeS5pbnN0YW5jZSwKIAkJCQkJCSAgICAgc2VsZiwgRkxPV19TVEFSVCk7Ci0gICAgICAgIH0KKwl9CiB9Ci0gICAgCisKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fbG1wX2RhdGFfcmVxdWVzdCAoc2VsZiwgdXNlcmRhdGEpCiAgKgpAQCAtMTgwLDcgKzE4MCw3IEBACiAgKgogICovCiBzdGF0aWMgaW50IGlyY29tbV9sbXBfZGF0YV9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgCisJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICBpbnQgbm90X3VzZWQpCiB7CiAJc3RydWN0IGlyZGFfc2tiX2NiICpjYjsKQEAgLTE4OSw4ICsxODksOCBAQAogCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAogCWNiID0gKHN0cnVjdCBpcmRhX3NrYl9jYiAqKSBza2ItPmNiOwotCQotICAgICAgICBjYi0+bGluZSA9IHNlbGYtPmxpbmU7CisKKwljYi0+bGluZSA9IHNlbGYtPmxpbmU7CiAKIAlJUkRBX0RFQlVHKDQsICIlcygpLCBzZW5kaW5nIGZyYW1lXG4iLCBfX0ZVTkNUSU9OX18gKTsKIApAQCAtMTk5LDEzICsxOTksMTMgQEAKIAogCXNrYi0+ZGVzdHJ1Y3RvciA9IGlyY29tbV9sbXBfZmxvd19jb250cm9sOwogCi0gICAgICAgIGlmICgoc2VsZi0+cGt0X2NvdW50KysgPiA3KSAmJiAoc2VsZi0+Zmxvd19zdGF0dXMgPT0gRkxPV19TVEFSVCkpIHsKKwlpZiAoKHNlbGYtPnBrdF9jb3VudCsrID4gNykgJiYgKHNlbGYtPmZsb3dfc3RhdHVzID09IEZMT1dfU1RBUlQpKSB7CiAJCUlSREFfREVCVUcoMiwgIiVzKCksIGFza2luZyBUVFkgdG8gc2xvdyBkb3duIVxuIiwgX19GVU5DVElPTl9fICk7Ci0JICAgICAgICBzZWxmLT5mbG93X3N0YXR1cyA9IEZMT1dfU1RPUDsKLSAgICAgICAgICAgICAgICBpZiAoc2VsZi0+bm90aWZ5LmZsb3dfaW5kaWNhdGlvbikKLSAgICAgICAgICAgICAJICAgICAgICBzZWxmLT5ub3RpZnkuZmxvd19pbmRpY2F0aW9uKHNlbGYtPm5vdGlmeS5pbnN0YW5jZSwgCi0JCQkJICAgICAgICAgICAgICAgICAgICAgc2VsZiwgRkxPV19TVE9QKTsKLSAgICAgICAgfQorCQlzZWxmLT5mbG93X3N0YXR1cyA9IEZMT1dfU1RPUDsKKwkJaWYgKHNlbGYtPm5vdGlmeS5mbG93X2luZGljYXRpb24pCisJCQlzZWxmLT5ub3RpZnkuZmxvd19pbmRpY2F0aW9uKHNlbGYtPm5vdGlmeS5pbnN0YW5jZSwKKwkJCQkJCSAgICAgc2VsZiwgRkxPV19TVE9QKTsKKwl9CiAJcmV0ID0gaXJsbXBfZGF0YV9yZXF1ZXN0KHNlbGYtPmxzYXAsIHNrYik7CiAJaWYgKHJldCkgewogCQlJUkRBX0VSUk9SKCIlcygpLCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0yMjcsMTEgKzIyNywxMSBAQAogCXN0cnVjdCBpcmNvbW1fY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV9jYiAqKSBpbnN0YW5jZTsKIAogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fTUFHSUMsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKLQkKKwogCWlyY29tbV9kb19ldmVudChzZWxmLCBJUkNPTU1fTE1QX0RBVEFfSU5ESUNBVElPTiwgc2tiLCBOVUxMKTsKIAogCS8qIERyb3AgcmVmZXJlbmNlIGNvdW50IC0gc2VlIGlyY29tbV90dHlfZGF0YV9pbmRpY2F0aW9uKCkuICovCkBAIC0yNDEsMTUgKzI0MSwxNSBAQAogfQogCiAvKgotICogRnVuY3Rpb24gaXJjb21tX2xtcF9jb25uZWN0X2NvbmZpcm0gKGluc3RhbmNlLCBzYXAsIHFvcywgbWF4X3NkdV9zaXplLCAKKyAqIEZ1bmN0aW9uIGlyY29tbV9sbXBfY29ubmVjdF9jb25maXJtIChpbnN0YW5jZSwgc2FwLCBxb3MsIG1heF9zZHVfc2l6ZSwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2hlYWRlcl9zaXplLCBza2IpCiAgKgogICogICAgQ29ubmVjdGlvbiBoYXMgYmVlbiBjb25maXJtZWQgYnkgcGVlciBkZXZpY2UKICAqCiAgKi8KIHN0YXRpYyB2b2lkIGlyY29tbV9sbXBfY29ubmVjdF9jb25maXJtKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCi0JCQkJICAgICAgIHN0cnVjdCBxb3NfaW5mbyAqcW9zLCAKLQkJCQkgICAgICAgX191MzIgbWF4X3NlZ19zaXplLCAKKwkJCQkgICAgICAgc3RydWN0IHFvc19pbmZvICpxb3MsCisJCQkJICAgICAgIF9fdTMyIG1heF9zZWdfc2l6ZSwKIAkJCQkgICAgICAgX191OCBtYXhfaGVhZGVyX3NpemUsCiAJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0zMTIsNyArMzEyLDcgQEAKICAqICAgIFBlZXIgZGV2aWNlIGhhcyBjbG9zZWQgdGhlIGNvbm5lY3Rpb24sIG9yIHRoZSBsaW5rIHdlbnQgZG93biBmb3Igc29tZQogICogICAgb3RoZXIgcmVhc29uCiAgKi8KLXN0YXRpYyB2b2lkIGlyY29tbV9sbXBfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAorc3RhdGljIHZvaWQgaXJjb21tX2xtcF9kaXNjb25uZWN0X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKIAkJCQkJICAgICBMTV9SRUFTT04gcmVhc29uLAogCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3BhcmFtLmMgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3BhcmFtLmMKaW5kZXggYTM5ZjU3My4uZmJhYzEzZSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9wYXJhbS5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fcGFyYW0uYwpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgIAorICoKICAqIEZpbGVuYW1lOiAgICAgIGlyY29tbV9wYXJhbS5jCiAgKiBWZXJzaW9uOiAgICAgICAxLjAKICAqIERlc2NyaXB0aW9uOiAgIFBhcmFtZXRlciBoYW5kbGluZyBmb3IgdGhlIElyQ09NTSBwcm90b2NvbApAQCAtOCwyNCArOCwyNCBAQAogICogQ3JlYXRlZCBhdDogICAgTW9uIEp1biAgNyAxMDoyNToxMSAxOTk5CiAgKiBNb2RpZmllZCBhdDogICBTdW4gSmFuIDMwIDE0OjMyOjAzIDIwMDAKICAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KLSAqIAorICoKICAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqICAgICAKLSAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAotICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAotICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiAgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAotICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAotICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICAqICAgICBNQSAwMjExMS0xMzA3IFVTQQotICogICAgIAorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC00MSwyMyArNDEsMjMgQEAKIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyY29tbV9wYXJhbS5oPgogCi1zdGF0aWMgaW50IGlyY29tbV9wYXJhbV9zZXJ2aWNlX3R5cGUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIAorc3RhdGljIGludCBpcmNvbW1fcGFyYW1fc2VydmljZV90eXBlKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgICAgaW50IGdldCk7Ci1zdGF0aWMgaW50IGlyY29tbV9wYXJhbV9wb3J0X3R5cGUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIAorc3RhdGljIGludCBpcmNvbW1fcGFyYW1fcG9ydF90eXBlKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgaW50IGdldCk7Ci1zdGF0aWMgaW50IGlyY29tbV9wYXJhbV9wb3J0X25hbWUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIAorc3RhdGljIGludCBpcmNvbW1fcGFyYW1fcG9ydF9uYW1lKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgaW50IGdldCk7Ci1zdGF0aWMgaW50IGlyY29tbV9wYXJhbV9zZXJ2aWNlX3R5cGUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIAorc3RhdGljIGludCBpcmNvbW1fcGFyYW1fc2VydmljZV90eXBlKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgICAgaW50IGdldCk7Ci1zdGF0aWMgaW50IGlyY29tbV9wYXJhbV9kYXRhX3JhdGUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIAorc3RhdGljIGludCBpcmNvbW1fcGFyYW1fZGF0YV9yYXRlKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgaW50IGdldCk7Ci1zdGF0aWMgaW50IGlyY29tbV9wYXJhbV9kYXRhX2Zvcm1hdCh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwgCitzdGF0aWMgaW50IGlyY29tbV9wYXJhbV9kYXRhX2Zvcm1hdCh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwKIAkJCQkgICAgaW50IGdldCk7Ci1zdGF0aWMgaW50IGlyY29tbV9wYXJhbV9mbG93X2NvbnRyb2wodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIAorc3RhdGljIGludCBpcmNvbW1fcGFyYW1fZmxvd19jb250cm9sKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgICAgaW50IGdldCk7CiBzdGF0aWMgaW50IGlyY29tbV9wYXJhbV94b25feG9mZih2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwgaW50IGdldCk7CiBzdGF0aWMgaW50IGlyY29tbV9wYXJhbV9lbnFfYWNrKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLCBpbnQgZ2V0KTsKLXN0YXRpYyBpbnQgaXJjb21tX3BhcmFtX2xpbmVfc3RhdHVzKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLCAKK3N0YXRpYyBpbnQgaXJjb21tX3BhcmFtX2xpbmVfc3RhdHVzKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgICBpbnQgZ2V0KTsKIHN0YXRpYyBpbnQgaXJjb21tX3BhcmFtX2R0ZSh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwgaW50IGdldCk7CiBzdGF0aWMgaW50IGlyY29tbV9wYXJhbV9kY2Uodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIGludCBnZXQpOwpAQCAtODUsNyArODUsNyBAQAogc3RhdGljIHBpX21ham9yX2luZm9fdCBwaV9tYWpvcl9jYWxsX3RhYmxlW10gPSB7CiAJeyBwaV9taW5vcl9jYWxsX3RhYmxlX2NvbW1vbiwgIDMgfSwKIAl7IHBpX21pbm9yX2NhbGxfdGFibGVfbm9uX3JhdywgNiB9LAotIAl7IHBpX21pbm9yX2NhbGxfdGFibGVfOV93aXJlLCAgMyB9CisJeyBwaV9taW5vcl9jYWxsX3RhYmxlXzlfd2lyZSwgIDMgfQogLyogCXsgcGlfbWlub3JfY2FsbF90YWJsZV9jZW50cm9uaWNzIH0gICovCiB9OwogCkBAIC0xMTksMjAgKzExOSwyMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbGYtPnNwaW5sb2NrLCBmbGFncyk7CiAKLQlza2IgPSBzZWxmLT5jdHJsX3NrYjsJCisJc2tiID0gc2VsZi0+Y3RybF9za2I7CiAJaWYgKCFza2IpIHsKIAkJc2tiID0gYWxsb2Nfc2tiKDI1NiwgR0ZQX0FUT01JQyk7CiAJCWlmICghc2tiKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJCisKIAkJc2tiX3Jlc2VydmUoc2tiLCBzZWxmLT5tYXhfaGVhZGVyX3NpemUpOwogCQlzZWxmLT5jdHJsX3NrYiA9IHNrYjsKIAl9Ci0JLyogCisJLyoKIAkgKiBJbnNlcnRpbmcgaXMgYSBsaXR0bGUgYml0IHRyaWNreSBzaW5jZSB3ZSBkb24ndCBrbm93IGhvdyBtdWNoCi0JICogcm9vbSB3ZSB3aWxsIG5lZWQuIEJ1dCB0aGlzIHNob3VsZCBob3BlZnVsbHkgd29yayBPSyAKKwkgKiByb29tIHdlIHdpbGwgbmVlZC4gQnV0IHRoaXMgc2hvdWxkIGhvcGVmdWxseSB3b3JrIE9LCiAJICovCiAJY291bnQgPSBpcmRhX3BhcmFtX2luc2VydChzZWxmLCBwaSwgc2tiLT50YWlsLCBza2JfdGFpbHJvb20oc2tiKSwKIAkJCQkgICZpcmNvbW1fcGFyYW1faW5mbyk7CkBAIC0xNjIsNyArMTYyLDcgQEAKICAqICAgIHF1ZXJ5IGFuZCB0aGVuIHRoZSByZW1vdGUgZGV2aWNlIHNlbmRzIGl0cyBpbml0aWFsIHBhcmFtZXRlcnMKICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJjb21tX3BhcmFtX3NlcnZpY2VfdHlwZSh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwgCitzdGF0aWMgaW50IGlyY29tbV9wYXJhbV9zZXJ2aWNlX3R5cGUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sCiAJCQkJICAgICBpbnQgZ2V0KQogewogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGluc3RhbmNlOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJLyogRmluZCBhbGwgY29tbW9uIHNlcnZpY2UgdHlwZXMgKi8KIAlzZXJ2aWNlX3R5cGUgJj0gc2VsZi0+c2VydmljZV90eXBlOwogCWlmICghc2VydmljZV90eXBlKSB7Ci0JCUlSREFfREVCVUcoMiwgCisJCUlSREFfREVCVUcoMiwKIAkJCSAgICIlcygpLCBObyBjb21tb24gc2VydmljZSB0eXBlIHRvIHVzZSFcbiIsIF9fRlVOQ1RJT05fXyApOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTk4LDEyICsxOTgsMTIgQEAKIAllbHNlIGlmIChzZXJ2aWNlX3R5cGUgJiBJUkNPTU1fM19XSVJFX1JBVykKIAkJc2VsZi0+c2V0dGluZ3Muc2VydmljZV90eXBlID0gSVJDT01NXzNfV0lSRV9SQVc7CiAKLQlJUkRBX0RFQlVHKDAsICIlcygpLCByZXN1bHRpbmcgc2VydmljZSB0eXBlPTB4JTAyeFxuIiwgX19GVU5DVElPTl9fICwgCisJSVJEQV9ERUJVRygwLCAiJXMoKSwgcmVzdWx0aW5nIHNlcnZpY2UgdHlwZT0weCUwMnhcbiIsIF9fRlVOQ1RJT05fXyAsCiAJCSAgIHNlbGYtPnNldHRpbmdzLnNlcnZpY2VfdHlwZSk7CiAKLQkvKiAKKwkvKgogCSAqIE5vdyB0aGUgbGluZSBpcyByZWFkeSBmb3Igc29tZSBjb21tdW5pY2F0aW9uLiBDaGVjayBpZiB3ZSBhcmUgYQotICAgICAgICAgKiBzZXJ2ZXIsIGFuZCBzZW5kIG92ZXIgc29tZSBpbml0aWFsIHBhcmFtZXRlcnMuCisJICogc2VydmVyLCBhbmQgc2VuZCBvdmVyIHNvbWUgaW5pdGlhbCBwYXJhbWV0ZXJzLgogCSAqIENsaWVudCBkbyBpdCBpbiBpcmNvbW1fdHR5X3N0YXRlX3NldHVwKCkuCiAJICogTm90ZSA6IHdlIG1heSBnZXQgY2FsbGVkIGZyb20gaXJjb21tX3R0eV9nZXR2YWx1ZV9jb25maXJtKCksCiAJICogdGhlcmVmb3JlIGJlZm9yZSB3ZSBldmVuIGhhdmUgb3BlbiBhbnkgc29ja2V0LiBBbmQgc2VsZi0+Y2xpZW50CkBAIC0yMzUsMTMgKzIzNSwxMyBAQAogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm4gLTE7KTsKLQkKKwogCWlmIChnZXQpCiAJCXBhcmFtLT5wdi5pID0gSVJDT01NX1NFUklBTDsKIAllbHNlIHsKIAkJc2VsZi0+c2V0dGluZ3MucG9ydF90eXBlID0gKF9fdTgpIHBhcmFtLT5wdi5pOwogCi0JCUlSREFfREVCVUcoMCwgIiVzKCksIHBvcnQgdHlwZT0lZFxuIiwgX19GVU5DVElPTl9fICwgCisJCUlSREFfREVCVUcoMCwgIiVzKCksIHBvcnQgdHlwZT0lZFxuIiwgX19GVU5DVElPTl9fICwKIAkJCSAgIHNlbGYtPnNldHRpbmdzLnBvcnRfdHlwZSk7CiAJfQogCXJldHVybiAwOwpAQCAtMjU2LDcgKzI1Niw3IEBACiBzdGF0aWMgaW50IGlyY29tbV9wYXJhbV9wb3J0X25hbWUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIGludCBnZXQpCiB7CiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgaW5zdGFuY2U7Ci0JCisKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybiAtMTspOwogCkBAIC0yNzksNyArMjc5LDcgQEAKIHN0YXRpYyBpbnQgaXJjb21tX3BhcmFtX2RhdGFfcmF0ZSh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwgaW50IGdldCkKIHsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSBpbnN0YW5jZTsKLQkKKwogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuIC0xOyk7CiAKQEAgLTI4Nyw3ICsyODcsNyBAQAogCQlwYXJhbS0+cHYuaSA9IHNlbGYtPnNldHRpbmdzLmRhdGFfcmF0ZTsKIAllbHNlCiAJCXNlbGYtPnNldHRpbmdzLmRhdGFfcmF0ZSA9IHBhcmFtLT5wdi5pOwotCQorCiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgZGF0YSByYXRlID0gJWRcbiIsIF9fRlVOQ1RJT05fXyAsIHBhcmFtLT5wdi5pKTsKIAogCXJldHVybiAwOwpAQCAtMjk5LDcgKzI5OSw3IEBACiAgKiAgICBFeGNoYW5nZSBkYXRhIGZvcm1hdCB0byBiZSB1c2VkIGluIHRoaXMgc2V0dGluZ3MKICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJjb21tX3BhcmFtX2RhdGFfZm9ybWF0KHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLCAKK3N0YXRpYyBpbnQgaXJjb21tX3BhcmFtX2RhdGFfZm9ybWF0KHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgICBpbnQgZ2V0KQogewogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGluc3RhbmNlOwpAQCAtMzExLDcgKzMxMSw3IEBACiAJCXBhcmFtLT5wdi5pID0gc2VsZi0+c2V0dGluZ3MuZGF0YV9mb3JtYXQ7CiAJZWxzZQogCQlzZWxmLT5zZXR0aW5ncy5kYXRhX2Zvcm1hdCA9IChfX3U4KSBwYXJhbS0+cHYuaTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0zMjEsMTQgKzMyMSwxNCBAQAogICogICAgRXhjaGFuZ2UgZmxvdyBjb250cm9sIHNldHRpbmdzIHRvIGJlIHVzZWQgaW4gdGhpcyBzZXR0aW5ncwogICoKICAqLwotc3RhdGljIGludCBpcmNvbW1fcGFyYW1fZmxvd19jb250cm9sKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLCAKK3N0YXRpYyBpbnQgaXJjb21tX3BhcmFtX2Zsb3dfY29udHJvbCh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwKIAkJCQkgICAgIGludCBnZXQpCiB7CiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgaW5zdGFuY2U7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybiAtMTspOwotCQorCiAJaWYgKGdldCkKIAkJcGFyYW0tPnB2LmkgPSBzZWxmLT5zZXR0aW5ncy5mbG93X2NvbnRyb2w7CiAJZWxzZQpAQCAtMzUxLDcgKzM1MSw3IEBACiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybiAtMTspOwotCQorCiAJaWYgKGdldCkgewogCQlwYXJhbS0+cHYuaSA9IHNlbGYtPnNldHRpbmdzLnhvbnhvZmZbMF07CiAJCXBhcmFtLT5wdi5pIHw9IHNlbGYtPnNldHRpbmdzLnhvbnhvZmZbMV0gPDwgODsKQEAgLTM2MCw3ICszNjAsNyBAQAogCQlzZWxmLT5zZXR0aW5ncy54b254b2ZmWzFdID0gKF9fdTE2KSBwYXJhbS0+cHYuaSA+PiA4OwogCX0KIAotCUlSREFfREVCVUcoMCwgIiVzKCksIFhPTi9YT0ZGID0gMHglMDJ4LDB4JTAyeFxuIiwgX19GVU5DVElPTl9fICwgCisJSVJEQV9ERUJVRygwLCAiJXMoKSwgWE9OL1hPRkYgPSAweCUwMngsMHglMDJ4XG4iLCBfX0ZVTkNUSU9OX18gLAogCQkgICBwYXJhbS0+cHYuaSAmIDB4ZmYsIHBhcmFtLT5wdi5pID4+IDgpOwogCiAJcmV0dXJuIDA7CkBAIC0zNzgsNyArMzc4LDcgQEAKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuIC0xOyk7Ci0JCisKIAlpZiAoZ2V0KSB7CiAJCXBhcmFtLT5wdi5pID0gc2VsZi0+c2V0dGluZ3MuZW5xYWNrWzBdOwogCQlwYXJhbS0+cHYuaSB8PSBzZWxmLT5zZXR0aW5ncy5lbnFhY2tbMV0gPDwgODsKQEAgLTM5NiwxMCArMzk2LDEwIEBACiAvKgogICogRnVuY3Rpb24gaXJjb21tX3BhcmFtX2xpbmVfc3RhdHVzIChzZWxmLCBwYXJhbSkKICAqCi0gKiAgICAKKyAqCiAgKgogICovCi1zdGF0aWMgaW50IGlyY29tbV9wYXJhbV9saW5lX3N0YXR1cyh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwgCitzdGF0aWMgaW50IGlyY29tbV9wYXJhbV9saW5lX3N0YXR1cyh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwKIAkJCQkgICAgaW50IGdldCkKIHsKIAlJUkRBX0RFQlVHKDIsICIlcygpLCBub3QgaW1wbC5cbiIsIF9fRlVOQ1RJT05fXyApOwpAQCAtNDI3LDcgKzQyNyw3IEBACiAJCWR0ZSA9IChfX3U4KSBwYXJhbS0+cHYuaTsKIAogCQlzZWxmLT5zZXR0aW5ncy5kY2UgPSAwOwotCQkJCQorCiAJCWlmIChkdGUgJiBJUkNPTU1fREVMVEFfRFRSKQogCQkJc2VsZi0+c2V0dGluZ3MuZGNlIHw9IChJUkNPTU1fREVMVEFfRFNSfAogCQkJCQkgICAgICBJUkNPTU1fREVMVEFfUkkgfApAQCAtNDM2LDcgKzQzNiw3IEBACiAJCQlzZWxmLT5zZXR0aW5ncy5kY2UgfD0gKElSQ09NTV9EU1J8CiAJCQkJCSAgICAgIElSQ09NTV9SSSB8CiAJCQkJCSAgICAgIElSQ09NTV9DRCk7Ci0JCQorCiAJCWlmIChkdGUgJiBJUkNPTU1fREVMVEFfUlRTKQogCQkJc2VsZi0+c2V0dGluZ3MuZGNlIHw9IElSQ09NTV9ERUxUQV9DVFM7CiAJCWlmIChkdGUgJiBJUkNPTU1fUlRTKQpAQCAtNDU1LDcgKzQ1NSw3IEBACiAvKgogICogRnVuY3Rpb24gaXJjb21tX3BhcmFtX2RjZSAoaW5zdGFuY2UsIHBhcmFtKQogICoKLSAqICAgIAorICoKICAqCiAgKi8KIHN0YXRpYyBpbnQgaXJjb21tX3BhcmFtX2RjZSh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwgaW50IGdldCkKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHRwLmMgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0cC5jCmluZGV4IGQ5OGJmMzUuLmJiMDZlYmEgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHRwLmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgIAorICoKICAqIEZpbGVuYW1lOiAgICAgIGlyY29tbV90dHAuYwogICogVmVyc2lvbjogICAgICAgMS4wCiAgKiBEZXNjcmlwdGlvbjogICBJbnRlcmZhY2UgYmV0d2VlbiBJckNPTU0gYW5kIElyVFRQCkBAIC04LDI1ICs4LDI1IEBACiAgKiBDcmVhdGVkIGF0OiAgICBTdW4gSnVuICA2IDIwOjQ4OjI3IDE5OTkKICAqIE1vZGlmaWVkIGF0OiAgIE1vbiBEZWMgMTMgMTE6MzU6MTMgMTk5OQogICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgotICogCisgKgogICogICAgIENvcHlyaWdodCAoYykgMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+Ci0gKiAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKLSAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKLSAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAqICAgICAKKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNDMsOCArNDMsOCBAQAogc3RhdGljIGludCBpcmNvbW1fdHRwX2RhdGFfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIHZvaWQgaXJjb21tX3R0cF9jb25uZWN0X2NvbmZpcm0odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKLQkJCQkgICAgICAgc3RydWN0IHFvc19pbmZvICpxb3MsIAotCQkJCSAgICAgICBfX3UzMiBtYXhfc2R1X3NpemUsIAorCQkJCSAgICAgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywKKwkJCQkgICAgICAgX191MzIgbWF4X3NkdV9zaXplLAogCQkJCSAgICAgICBfX3U4IG1heF9oZWFkZXJfc2l6ZSwKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgdm9pZCBpcmNvbW1fdHRwX2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLApAQCAtNTQsMjUgKzU0LDI1IEBACiAJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgdm9pZCBpcmNvbW1fdHRwX2Zsb3dfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCSAgICAgICBMT0NBTF9GTE9XIGNtZCk7Ci1zdGF0aWMgdm9pZCBpcmNvbW1fdHRwX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKK3N0YXRpYyB2b2lkIGlyY29tbV90dHBfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCiAJCQkJCSAgICAgTE1fUkVBU09OIHJlYXNvbiwKIAkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyBpbnQgaXJjb21tX3R0cF9kYXRhX3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwKLQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIGludCBjbGVuKTsKLXN0YXRpYyBpbnQgaXJjb21tX3R0cF9jb25uZWN0X3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgCi0JCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhLCAKK3N0YXRpYyBpbnQgaXJjb21tX3R0cF9jb25uZWN0X3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqdXNlcmRhdGEsCiAJCQkJICAgICAgc3RydWN0IGlyY29tbV9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgaXJjb21tX3R0cF9jb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsCiAJCQkJICAgICAgIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSk7Ci1zdGF0aWMgaW50IGlyY29tbV90dHBfZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIAotCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhLCAKK3N0YXRpYyBpbnQgaXJjb21tX3R0cF9kaXNjb25uZWN0X3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwKKwkJCQkJIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSwKIAkJCQkJIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbyk7CiAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fb3Blbl90c2FwIChzZWxmKQogICoKLSAqICAgIAorICoKICAqCiAgKi8KIGludCBpcmNvbW1fb3Blbl90c2FwKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYpCkBAIC0xMTMsMTEgKzExMywxMSBAQAogLyoKICAqIEZ1bmN0aW9uIGlyY29tbV90dHBfY29ubmVjdF9yZXF1ZXN0IChzZWxmLCB1c2VyZGF0YSkKICAqCi0gKiAgICAKKyAqCiAgKgogICovCi1zdGF0aWMgaW50IGlyY29tbV90dHBfY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIAotCQkJCSAgICAgIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSwgCitzdGF0aWMgaW50IGlyY29tbV90dHBfY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhLAogCQkJCSAgICAgIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbykKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTEyOSwxNiArMTI5LDE2IEBACiAJCXNrYl9nZXQodXNlcmRhdGEpOwogCiAJcmV0ID0gaXJ0dHBfY29ubmVjdF9yZXF1ZXN0KHNlbGYtPnRzYXAsIGluZm8tPmRsc2FwX3NlbCwKLQkJCQkgICAgaW5mby0+c2FkZHIsIGluZm8tPmRhZGRyLCBOVUxMLCAKLQkJCQkgICAgVFRQX1NBUl9ESVNBQkxFLCB1c2VyZGF0YSk7IAorCQkJCSAgICBpbmZvLT5zYWRkciwgaW5mby0+ZGFkZHIsIE5VTEwsCisJCQkJICAgIFRUUF9TQVJfRElTQUJMRSwgdXNlcmRhdGEpOwogCiAJcmV0dXJuIHJldDsKLX0JCit9CiAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fdHRwX2Nvbm5lY3RfcmVzcG9uc2UgKHNlbGYsIHNrYikKICAqCi0gKiAgICAKKyAqCiAgKgogICovCiBzdGF0aWMgaW50IGlyY29tbV90dHBfY29ubmVjdF9yZXNwb25zZShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJaW50IHJldDsKIAogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJLyogRG9uJ3QgZm9yZ2V0IHRvIHJlZmNvdW50IGl0IC0gc2hvdWxkIGJlIE5VTEwgYW55d2F5ICovCiAJaWYodXNlcmRhdGEpCiAJCXNrYl9nZXQodXNlcmRhdGEpOwpAQCAtMTYwLDE0ICsxNjAsMTQgQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fdHRwX2RhdGFfcmVxdWVzdCAoc2VsZiwgdXNlcmRhdGEpCiAgKgotICogICAgU2VuZCBJckNPTU0gZGF0YSB0byBJclRUUCBsYXllci4gQ3VycmVudGx5IHdlIGRvIG5vdCB0cnkgdG8gY29tYmluZSAKLSAqICAgIGNvbnRyb2wgZGF0YSB3aXRoIHB1cmUgZGF0YSwgc28gdGhleSB3aWxsIGJlIHNlbnQgYXMgc2VwYXJhdGUgZnJhbWVzLiAKKyAqICAgIFNlbmQgSXJDT01NIGRhdGEgdG8gSXJUVFAgbGF5ZXIuIEN1cnJlbnRseSB3ZSBkbyBub3QgdHJ5IHRvIGNvbWJpbmUKKyAqICAgIGNvbnRyb2wgZGF0YSB3aXRoIHB1cmUgZGF0YSwgc28gdGhleSB3aWxsIGJlIHNlbnQgYXMgc2VwYXJhdGUgZnJhbWVzLgogICogICAgU2hvdWxkIG5vdCBiZSBhIGJpZyBwcm9ibGVtIHRob3VnaCwgc2luY2UgY29udHJvbCBmcmFtZXMgYXJlIHJhcmUuIEJ1dAotICogICAgc29tZSBvZiB0aGVtIGFyZSBzZW50IGFmdGVyIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgc28gdGhpcyBjYW4gCisgKiAgICBzb21lIG9mIHRoZW0gYXJlIHNlbnQgYWZ0ZXIgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBzbyB0aGlzIGNhbgogICogICAgaW5jcmVhc2UgdGhlIGxhdGVuY3kgYSBiaXQuCiAgKi8KIHN0YXRpYyBpbnQgaXJjb21tX3R0cF9kYXRhX3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwKLQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIGludCBjbGVuKQogewogCWludCByZXQ7CkBAIC0xNzYsNyArMTc2LDcgQEAKIAogCUlSREFfREVCVUcoMiwgIiVzKCksIGNsZW49JWRcbiIsIF9fRlVOQ1RJT05fXyAsIGNsZW4pOwogCi0JLyogCisJLyoKIAkgKiBJbnNlcnQgY2xlbiBmaWVsZCwgY3VycmVudGx5IHdlIGVpdGhlciBzZW5kIGRhdGEgb25seSwgb3IgY29udHJvbAogCSAqIG9ubHkgZnJhbWVzLCB0byBtYWtlIHRoaW5ncyBlYXNpZXIgYW5kIGF2b2lkIHF1ZXVlaW5nCiAJICovCkBAIC0yMTAsNyArMjEwLDcgQEAKIAlzdHJ1Y3QgaXJjb21tX2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fY2IgKikgaW5zdGFuY2U7CiAKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKLQkKKwogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX01BR0lDLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChza2IgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CkBAIC0yMjQsOCArMjI0LDggQEAKIH0KIAogc3RhdGljIHZvaWQgaXJjb21tX3R0cF9jb25uZWN0X2NvbmZpcm0odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKLQkJCQkgICAgICAgc3RydWN0IHFvc19pbmZvICpxb3MsIAotCQkJCSAgICAgICBfX3UzMiBtYXhfc2R1X3NpemUsIAorCQkJCSAgICAgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywKKwkJCQkgICAgICAgX191MzIgbWF4X3NkdV9zaXplLAogCQkJCSAgICAgICBfX3U4IG1heF9oZWFkZXJfc2l6ZSwKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTI2MSw3ICsyNjEsNyBAQAogICogRnVuY3Rpb24gaXJjb21tX3R0cF9jb25uZWN0X2luZGljYXRpb24gKGluc3RhbmNlLCBzYXAsIHFvcywgbWF4X3NkdV9zaXplLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9oZWFkZXJfc2l6ZSwgc2tiKQogICoKLSAqICAgIAorICoKICAqCiAgKi8KIHN0YXRpYyB2b2lkIGlyY29tbV90dHBfY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCkBAIC0zMDEsMTEgKzMwMSwxMSBAQAogLyoKICAqIEZ1bmN0aW9uIGlyY29tbV90dHBfZGlzY29ubmVjdF9yZXF1ZXN0IChzZWxmLCB1c2VyZGF0YSwgaW5mbykKICAqCi0gKiAgICAKKyAqCiAgKgogICovCi1zdGF0aWMgaW50IGlyY29tbV90dHBfZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIAotCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhLCAKK3N0YXRpYyBpbnQgaXJjb21tX3R0cF9kaXNjb25uZWN0X3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwKKwkJCQkJIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSwKIAkJCQkJIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbykKIHsKIAlpbnQgcmV0OwpAQCAtMzIyLDEwICszMjIsMTAgQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fdHRwX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbiAoaW5zdGFuY2UsIHNhcCwgcmVhc29uLCBza2IpCiAgKgotICogICAgCisgKgogICoKICAqLwotc3RhdGljIHZvaWQgaXJjb21tX3R0cF9kaXNjb25uZWN0X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCitzdGF0aWMgdm9pZCBpcmNvbW1fdHRwX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCQkgICAgIExNX1JFQVNPTiByZWFzb24sCiAJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTM2MSw3ICszNjEsNyBAQAogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fTUFHSUMsIHJldHVybjspOwotCQorCiAJaWYgKHNlbGYtPm5vdGlmeS5mbG93X2luZGljYXRpb24pCiAJCXNlbGYtPm5vdGlmeS5mbG93X2luZGljYXRpb24oc2VsZi0+bm90aWZ5Lmluc3RhbmNlLCBzZWxmLCBjbWQpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKaW5kZXggMjYyYmRhOC4uM2QyNDFlNCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYworKysgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgCisgKgogICogRmlsZW5hbWU6ICAgICAgaXJjb21tX3R0eS5jCiAgKiBWZXJzaW9uOiAgICAgICAxLjAKICAqIERlc2NyaXB0aW9uOiAgIElyQ09NTSBzZXJpYWwgVFRZIGRyaXZlcgpAQCAtOSwyNSArOSwyNSBAQAogICogTW9kaWZpZWQgYXQ6ICAgV2VkIEZlYiAyMyAwMDowOTowMiAyMDAwCiAgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAgKiBTb3VyY2VzOiAgICAgICBzZXJpYWwuYyBhbmQgcHJldmlvdXMgSXJDT01NIHdvcmsgYnkgVGFrYWhpZGUgSGlndWNoaQotICogCisgKgogICogICAgIENvcHlyaWdodCAoYykgMTk5OS0yMDAwIERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAzIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KLSAqICAgICAKLSAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAotICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAotICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiAgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAotICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAotICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICAqICAgICBNQSAwMjExMS0xMzA3IFVTQQotICogICAgIAorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTY5LDcgKzY5LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyBpbnQgaXJjb21tX3R0eV9jb250cm9sX2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHZvaWQgaXJjb21tX3R0eV9mbG93X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCitzdGF0aWMgdm9pZCBpcmNvbW1fdHR5X2Zsb3dfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCSAgICAgICBMT0NBTF9GTE9XIGNtZCk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBpbnQgaXJjb21tX3R0eV9yZWFkX3Byb2MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbiwKQEAgLTExMyw3ICsxMTMsNyBAQAogCWRyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoSVJDT01NX1RUWV9QT1JUUyk7CiAJaWYgKCFkcml2ZXIpCiAJCXJldHVybiAtRU5PTUVNOwotCWlyY29tbV90dHkgPSBoYXNoYmluX25ldyhIQl9MT0NLKTsgCisJaXJjb21tX3R0eSA9IGhhc2hiaW5fbmV3KEhCX0xPQ0spOwogCWlmIChpcmNvbW1fdHR5ID09IE5VTEwpIHsKIAkJSVJEQV9FUlJPUigiJXMoKSwgY2FuJ3QgYWxsb2NhdGUgaGFzaGJpbiFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXB1dF90dHlfZHJpdmVyKGRyaXZlcik7CkBAIC0xNjMsMTEgKzE2MywxMSBAQAogewogCWludCByZXQ7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsJCisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAlyZXQgPSB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyKTsKLSAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgIElSREFfRVJST1IoIiVzKCksIGZhaWxlZCB0byB1bnJlZ2lzdGVyIGRyaXZlclxuIiwKKwlpZiAocmV0KSB7CisJCUlSREFfRVJST1IoIiVzKCksIGZhaWxlZCB0byB1bnJlZ2lzdGVyIGRyaXZlclxuIiwKIAkJCSAgIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9CkBAIC0xNzksNyArMTc5LDcgQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fc3RhcnR1cCAoc2VsZikKICAqCi0gKiAgICAKKyAqCiAgKgogICovCiBzdGF0aWMgaW50IGlyY29tbV90dHlfc3RhcnR1cChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZikKQEAgLTIwMywxNyArMjAzLDE3IEBACiAJLyogVGhlc2UgY2FsbGJhY2tzIHdlIG11c3QgaGFuZGxlIG91cnNlbHZlcyAqLwogCW5vdGlmeS5kYXRhX2luZGljYXRpb24gICAgICAgPSBpcmNvbW1fdHR5X2RhdGFfaW5kaWNhdGlvbjsKIAlub3RpZnkudWRhdGFfaW5kaWNhdGlvbiAgICAgID0gaXJjb21tX3R0eV9jb250cm9sX2luZGljYXRpb247Ci0gCW5vdGlmeS5mbG93X2luZGljYXRpb24gICAgICAgPSBpcmNvbW1fdHR5X2Zsb3dfaW5kaWNhdGlvbjsKKwlub3RpZnkuZmxvd19pbmRpY2F0aW9uICAgICAgID0gaXJjb21tX3R0eV9mbG93X2luZGljYXRpb247CiAKIAkvKiBVc2UgdGhlIGlyY29tbV90dHkgaW50ZXJmYWNlIGZvciB0aGVzZSBvbmVzICovCi0gCW5vdGlmeS5kaXNjb25uZWN0X2luZGljYXRpb24gPSBpcmNvbW1fdHR5X2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbjsKKwlub3RpZnkuZGlzY29ubmVjdF9pbmRpY2F0aW9uID0gaXJjb21tX3R0eV9kaXNjb25uZWN0X2luZGljYXRpb247CiAJbm90aWZ5LmNvbm5lY3RfY29uZmlybSAgICAgICA9IGlyY29tbV90dHlfY29ubmVjdF9jb25maXJtOwotIAlub3RpZnkuY29ubmVjdF9pbmRpY2F0aW9uICAgID0gaXJjb21tX3R0eV9jb25uZWN0X2luZGljYXRpb247CisJbm90aWZ5LmNvbm5lY3RfaW5kaWNhdGlvbiAgICA9IGlyY29tbV90dHlfY29ubmVjdF9pbmRpY2F0aW9uOwogCXN0cmxjcHkobm90aWZ5Lm5hbWUsICJpcmNvbW1fdHR5Iiwgc2l6ZW9mKG5vdGlmeS5uYW1lKSk7CiAJbm90aWZ5Lmluc3RhbmNlID0gc2VsZjsKIAogCWlmICghc2VsZi0+aXJjb21tKSB7Ci0JCXNlbGYtPmlyY29tbSA9IGlyY29tbV9vcGVuKCZub3RpZnksIHNlbGYtPnNlcnZpY2VfdHlwZSwgCisJCXNlbGYtPmlyY29tbSA9IGlyY29tbV9vcGVuKCZub3RpZnksIHNlbGYtPnNlcnZpY2VfdHlwZSwKIAkJCQkJICAgc2VsZi0+bGluZSk7CiAJfQogCWlmICghc2VsZi0+aXJjb21tKQpAQCAtMjM3LDEwICsyMzcsMTAgQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fYmxvY2tfdGlsX3JlYWR5IChzZWxmLCBmaWxwKQogICoKLSAqICAgIAorICoKICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJjb21tX3R0eV9ibG9ja190aWxfcmVhZHkoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsIAorc3RhdGljIGludCBpcmNvbW1fdHR5X2Jsb2NrX3RpbF9yZWFkeShzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCWludAkJZG9fY2xvY2FsID0gMCwgZXh0cmFfY291bnQgPSAwOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQkKKwogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAJdHR5ID0gc2VsZi0+dHR5OwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJLyoKIAkgKiBJZiBub24tYmxvY2tpbmcgbW9kZSBpcyBzZXQsIG9yIHRoZSBwb3J0IGlzIG5vdCBlbmFibGVkLAogCSAqIHRoZW4gbWFrZSB0aGUgY2hlY2sgdXAgZnJvbnQgYW5kIHRoZW4gZXhpdC4KLQkgKi8JCisJICovCiAJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLIHx8IHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKXsKIAkJLyogbm9uYmxvY2sgbW9kZSBpcyBzZXQgb3IgcG9ydCBpcyBub3QgZW5hYmxlZCAqLwogCQlzZWxmLT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwpAQCAtMjY4LDE3ICsyNjgsMTcgQEAKIAkJSVJEQV9ERUJVRygxLCAiJXMoKSwgZG9pbmcgQ0xPQ0FMIVxuIiwgX19GVU5DVElPTl9fICk7CiAJCWRvX2Nsb2NhbCA9IDE7CiAJfQotCQorCiAJLyogV2FpdCBmb3IgY2FycmllciBkZXRlY3QgYW5kIHRoZSBsaW5lIHRvIGJlY29tZQogCSAqIGZyZWUgKGkuZS4sIG5vdCBpbiB1c2UgYnkgdGhlIGNhbGxvdXQpLiAgV2hpbGUgd2UgYXJlIGluCiAJICogdGhpcyBsb29wLCBzZWxmLT5vcGVuX2NvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0CiAJICogbWdzbF9jbG9zZSgpIGtub3dzIHdoZW4gdG8gZnJlZSB0aGluZ3MuICBXZSByZXN0b3JlIGl0IHVwb24KIAkgKiBleGl0LCBlaXRoZXIgbm9ybWFsIG9yIGFibm9ybWFsLgogCSAqLwotCSAKKwogCXJldHZhbCA9IDA7CiAJYWRkX3dhaXRfcXVldWUoJnNlbGYtPm9wZW5fd2FpdCwgJndhaXQpOwotCQorCiAJSVJEQV9ERUJVRygyLCAiJXMoJWQpOmJsb2NrX3RpbF9yZWFkeSBiZWZvcmUgYmxvY2sgb24gJXMgb3Blbl9jb3VudD0lZFxuIiwKIAkgICAgICBfX0ZJTEVfXyxfX0xJTkVfXywgdHR5LT5kcml2ZXItPm5hbWUsIHNlbGYtPm9wZW5fY291bnQgKTsKIApAQCAtMjkwLDcgKzI5MCw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPnNwaW5sb2NrLCBmbGFncyk7CiAJc2VsZi0+YmxvY2tlZF9vcGVuKys7Ci0JCisKIAl3aGlsZSAoMSkgewogCQlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpIHsKIAkJCS8qIEhlcmUsIHdlIHVzZSB0byBsb2NrIHRob3NlIHR3byBndXlzLCBidXQKQEAgLTI5OCw0NSArMjk4LDQ1IEBACiAJCQkgKiBJIGRvbid0IHNlZSB0aGUgcG9pbnQgKGFuZCBJIHNlZSB0aGUgZGVhZGxvY2spLgogCQkJICogSmVhbiBJSSAqLwogCQkJc2VsZi0+c2V0dGluZ3MuZHRlIHw9IElSQ09NTV9SVFMgKyBJUkNPTU1fRFRSOwotCQkgCQorCiAJCQlpcmNvbW1fcGFyYW1fcmVxdWVzdChzZWxmLCBJUkNPTU1fRFRFLCBUUlVFKTsKIAkJfQotCQkKKwogCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQkJCisKIAkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwKIAkJICAgICF0ZXN0X2JpdChBU1lOQ19CX0lOSVRJQUxJWkVELCAmc2VsZi0+ZmxhZ3MpKSB7CiAJCQlyZXR2YWwgPSAoc2VsZi0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKSA/CiAJCQkJCS1FQUdBSU4gOiAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQotCQkKLQkJLyogIAorCisJCS8qCiAJCSAqIENoZWNrIGlmIGxpbmsgaXMgcmVhZHkgbm93LiBFdmVuIGlmIENMT0NBTCBpcwogCQkgKiBzcGVjaWZpZWQsIHdlIGNhbm5vdCByZXR1cm4gYmVmb3JlIHRoZSBJckNPTU0gbGluayBpcwotCQkgKiByZWFkeSAKKwkJICogcmVhZHkKIAkJICovCi0gCQlpZiAoIXRlc3RfYml0KEFTWU5DX0JfQ0xPU0lORywgJnNlbGYtPmZsYWdzKSAmJgotIAkJICAgIChkb19jbG9jYWwgfHwgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9DRCkpICYmCisJCWlmICghdGVzdF9iaXQoQVNZTkNfQl9DTE9TSU5HLCAmc2VsZi0+ZmxhZ3MpICYmCisJCSAgICAoZG9fY2xvY2FsIHx8IChzZWxmLT5zZXR0aW5ncy5kY2UgJiBJUkNPTU1fQ0QpKSAmJgogCQkgICAgc2VsZi0+c3RhdGUgPT0gSVJDT01NX1RUWV9SRUFEWSkKIAkJewotIAkJCWJyZWFrOworCQkJYnJlYWs7CiAJCX0KLQkJCQorCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KLQkJCisKIAkJSVJEQV9ERUJVRygxLCAiJXMoJWQpOmJsb2NrX3RpbF9yZWFkeSBibG9ja2luZyBvbiAlcyBvcGVuX2NvdW50PSVkXG4iLAogCQkgICAgICBfX0ZJTEVfXyxfX0xJTkVfXywgdHR5LT5kcml2ZXItPm5hbWUsIHNlbGYtPm9wZW5fY291bnQgKTsKLQkJCisKIAkJc2NoZWR1bGUoKTsKIAl9Ci0JCisKIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnNlbGYtPm9wZW5fd2FpdCwgJndhaXQpOwotCQorCiAJaWYgKGV4dHJhX2NvdW50KSB7CiAJCS8qICsrIGlzIG5vdCBhdG9taWMsIHNvIHRoaXMgc2hvdWxkIGJlIHByb3RlY3RlZCAtIEplYW4gSUkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbGYtPnNwaW5sb2NrLCBmbGFncyk7CkBAIC0zNDQsMTQgKzM0NCwxNCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogCX0KIAlzZWxmLT5ibG9ja2VkX29wZW4tLTsKLQkKKwogCUlSREFfREVCVUcoMSwgIiVzKCVkKTpibG9ja190aWxfcmVhZHkgYWZ0ZXIgYmxvY2tpbmcgb24gJXMgb3Blbl9jb3VudD0lZFxuIiwKIAkgICAgICBfX0ZJTEVfXyxfX0xJTkVfXywgdHR5LT5kcml2ZXItPm5hbWUsIHNlbGYtPm9wZW5fY291bnQpOwotCQkJIAorCiAJaWYgKCFyZXR2YWwpCiAJCXNlbGYtPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JCQotCXJldHVybiByZXR2YWw7CQorCisJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoKQEAgLTM4NCw3ICszODQsNyBAQAogCQkJSVJEQV9FUlJPUigiJXMoKSwga21hbGxvYyBmYWlsZWQhXG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJCisKIAkJc2VsZi0+bWFnaWMgPSBJUkNPTU1fVFRZX01BR0lDOwogCQlzZWxmLT5mbG93ID0gRkxPV19TVE9QOwogCkBAIC0zOTgsMTMgKzM5OCwxMyBAQAogCQkvKiBJbml0IHNvbWUgaW1wb3J0YW50IHN0dWZmICovCiAJCWluaXRfdGltZXIoJnNlbGYtPndhdGNoZG9nX3RpbWVyKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VsZi0+b3Blbl93YWl0KTsKLSAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlbGYtPmNsb3NlX3dhaXQpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZWxmLT5jbG9zZV93YWl0KTsKIAkJc3Bpbl9sb2NrX2luaXQoJnNlbGYtPnNwaW5sb2NrKTsKIAotCQkvKiAKKwkJLyoKIAkJICogRm9yY2UgVFRZIGludG8gcmF3IG1vZGUgYnkgZGVmYXVsdCB3aGljaCBpcyB1c3VhbGx5IHdoYXQKIAkJICogd2Ugd2FudCBmb3IgSXJDT01NIGFuZCBJckxQVC4gVGhpcyB3YXkgYXBwbGljYXRpb25zIHdpbGwKLQkJICogbm90IGhhdmUgdG8gdHdpZGRsZSB3aXRoIHByaW50Y2FwIGV0Yy4gIAorCQkgKiBub3QgaGF2ZSB0byB0d2lkZGxlIHdpdGggcHJpbnRjYXAgZXRjLgogCQkgKi8KIAkJdHR5LT50ZXJtaW9zLT5jX2lmbGFnID0gMDsKIAkJdHR5LT50ZXJtaW9zLT5jX29mbGFnID0gMDsKQEAgLTQyMCw3ICs0MjAsNyBAQAogCXNlbGYtPnR0eSA9IHR0eTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogCi0JSVJEQV9ERUJVRygxLCAiJXMoKSwgJXMlZCwgY291bnQgPSAlZFxuIiwgX19GVU5DVElPTl9fICwgdHR5LT5kcml2ZXItPm5hbWUsIAorCUlSREFfREVCVUcoMSwgIiVzKCksICVzJWQsIGNvdW50ID0gJWRcbiIsIF9fRlVOQ1RJT05fXyAsIHR0eS0+ZHJpdmVyLT5uYW1lLAogCQkgICBzZWxmLT5saW5lLCBzZWxmLT5vcGVuX2NvdW50KTsKIAogCS8qIE5vdCByZWFsbHkgdXNlZCBieSB1cywgYnV0IGxldHMgZG8gaXQgYW55d2F5ICovCkBAIC00NzMsNyArNDczLDcgQEAKIAogCXJldCA9IGlyY29tbV90dHlfYmxvY2tfdGlsX3JlYWR5KHNlbGYsIGZpbHApOwogCWlmIChyZXQpIHsKLQkJSVJEQV9ERUJVRygyLCAKKwkJSVJEQV9ERUJVRygyLAogCQkgICAgICAiJXMoKSwgcmV0dXJuaW5nIGFmdGVyIGJsb2NrX3RpbF9yZWFkeSB3aXRoICVkXG4iLCBfX0ZVTkNUSU9OX18gLAogCQkgICAgICByZXQpOwogCkBAIC01MTksNyArNTE5LDcgQEAKIAkJICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRvd24uCiAJCSAqLwogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBiYWQgc2VyaWFsIHBvcnQgY291bnQ7ICIKLQkJCSAgICJ0dHktPmNvdW50IGlzIDEsIHN0YXRlLT5jb3VudCBpcyAlZFxuIiwgX19GVU5DVElPTl9fICwgCisJCQkgICAidHR5LT5jb3VudCBpcyAxLCBzdGF0ZS0+Y291bnQgaXMgJWRcbiIsIF9fRlVOQ1RJT05fXyAsCiAJCQkgICBzZWxmLT5vcGVuX2NvdW50KTsKIAkJc2VsZi0+b3Blbl9jb3VudCA9IDE7CiAJfQpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+c3BpbmxvY2ssIGZsYWdzKTsKIAogCS8qCi0JICogTm93IHdlIHdhaXQgZm9yIHRoZSB0cmFuc21pdCBidWZmZXIgdG8gY2xlYXI7IGFuZCB3ZSBub3RpZnkgCisJICogTm93IHdlIHdhaXQgZm9yIHRoZSB0cmFuc21pdCBidWZmZXIgdG8gY2xlYXI7IGFuZCB3ZSBub3RpZnkKIAkgKiB0aGUgbGluZSBkaXNjaXBsaW5lIHRvIG9ubHkgcHJvY2VzcyBYT04vWE9GRiBjaGFyYWN0ZXJzLgogCSAqLwogCXR0eS0+Y2xvc2luZyA9IDE7CkBAIC01NzYsNyArNTc2LDcgQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fdHR5X2ZsdXNoX2J1ZmZlciAodHR5KQogICoKLSAqICAgIAorICoKICAqCiAgKi8KIHN0YXRpYyB2b2lkIGlyY29tbV90dHlfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC01ODYsOSArNTg2LDkgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybjspOwogCi0JLyogCi0JICogTGV0IGRvX3NvZnRpbnQoKSBkbyB0aGlzIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIHdpdGggCi0JICogZG9fc29mdGludCgpIDstKSAKKwkvKgorCSAqIExldCBkb19zb2Z0aW50KCkgZG8gdGhpcyB0byBhdm9pZCByYWNlIGNvbmRpdGlvbiB3aXRoCisJICogZG9fc29mdGludCgpIDstKQogCSAqLwogCXNjaGVkdWxlX3dvcmsoJnNlbGYtPnRxdWV1ZSk7CiB9CkBAIC01OTcsNyArNTk3LDcgQEAKICAqIEZ1bmN0aW9uIGlyY29tbV90dHlfZG9fc29mdGludCAod29yaykKICAqCiAgKiAgICBXZSB1c2UgdGhpcyByb3V0aW5lIHRvIGdpdmUgdGhlIHdyaXRlIHdha2V1cCB0byB0aGUgdXNlciBhdCBhdCBhCi0gKiAgICBzYWZlIHRpbWUgKGFzIGZhc3QgYXMgcG9zc2libGUgYWZ0ZXIgd3JpdGUgaGF2ZSBjb21wbGV0ZWQpLiBUaGlzIAorICogICAgc2FmZSB0aW1lIChhcyBmYXN0IGFzIHBvc3NpYmxlIGFmdGVyIHdyaXRlIGhhdmUgY29tcGxldGVkKS4gVGhpcwogICogICAgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBUeCBpbnRlcnJ1cHQuCiAgKi8KIHN0YXRpYyB2b2lkIGlyY29tbV90dHlfZG9fc29mdGludChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC02MzgsNyArNjM4LDcgQEAKIAogCS8qIFVubGluayB0cmFuc21pdCBidWZmZXIgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VsZi0+c3BpbmxvY2ssIGZsYWdzKTsKLQkKKwogCXNrYiA9IHNlbGYtPnR4X3NrYjsKIAlzZWxmLT50eF9za2IgPSBOVUxMOwogCkBAIC02NTAsOSArNjUwLDkgQEAKIAkJLyogRHJvcCByZWZlcmVuY2UgY291bnQgLSBzZWUgaXJjb21tX3R0cF9kYXRhX3JlcXVlc3QoKS4gKi8KIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KLQkJCisKIAkvKiBDaGVjayBpZiB1c2VyIChzdGlsbCkgd2FudHMgdG8gYmUgd2FrZW4gdXAgKi8KLQlpZiAoKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfRE9fV1JJVEVfV0FLRVVQKSkgJiYgCisJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCiAJICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQogCXsKIAkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwpAQCAtNzE3LDEyICs3MTcsMTIgQEAKIAkvKiBGZXRjaCBjdXJyZW50IHRyYW5zbWl0IGJ1ZmZlciAqLwogCXNrYiA9IHNlbGYtPnR4X3NrYjsKIAotCS8qICAKKwkvKgogCSAqIFNlbmQgb3V0IGFsbCB0aGUgZGF0YSB3ZSBnZXQsIHBvc3NpYmx5IGFzIG11bHRpcGxlIGZyYWdtZW50ZWQKIAkgKiBmcmFtZXMsIGJ1dCB0aGlzIHdpbGwgb25seSBoYXBwZW4gaWYgdGhlIGRhdGEgaXMgbGFyZ2VyIHRoYW4gdGhlCiAJICogbWF4IGRhdGEgc2l6ZS4gVGhlIG5vcm1hbCBjYXNlIGhvd2V2ZXIgaXMganVzdCB0aGUgb3Bwb3NpdGUsIGFuZAogCSAqIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgYW5kIHdpbGwgdGhlbiBhY3R1YWxseQotCSAqIGRlZnJhZ21lbnQgdGhlIGRhdGEgYW5kIHNlbmQgaXQgb3V0IGFzIG9uZSBwYWNrZXQgYXMgc29vbiBhcyAKKwkgKiBkZWZyYWdtZW50IHRoZSBkYXRhIGFuZCBzZW5kIGl0IG91dCBhcyBvbmUgcGFja2V0IGFzIHNvb24gYXMKIAkgKiBwb3NzaWJsZSwgYnV0IGF0IGEgc2FmZXIgcG9pbnQgaW4gdGltZQogCSAqLwogCXdoaWxlIChjb3VudCkgewpAQCAtNzMxLDE2ICs3MzEsMTYgQEAKIAkJLyogQWRqdXN0IGRhdGEgc2l6ZSB0byB0aGUgbWF4IGRhdGEgc2l6ZSAqLwogCQlpZiAoc2l6ZSA+IHNlbGYtPm1heF9kYXRhX3NpemUpCiAJCQlzaXplID0gc2VsZi0+bWF4X2RhdGFfc2l6ZTsKLQkJCi0JCS8qIAorCisJCS8qCiAJCSAqIERvIHdlIGFscmVhZHkgaGF2ZSBhIGJ1ZmZlciByZWFkeSBmb3IgdHJhbnNtaXQsIG9yIGRvCi0JCSAqIHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgZnJhbWUgCisJCSAqIHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgZnJhbWUKIAkJICovCi0JCWlmIChza2IpIHsJCQkKLQkJCS8qIAotCQkJICogQW55IHJvb20gZm9yIG1vcmUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IAorCQlpZiAoc2tiKSB7CisJCQkvKgorCQkJICogQW55IHJvb20gZm9yIG1vcmUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAJCQkgKiB0cmFuc21pdCBidWZmZXI/IENhbm5vdCB1c2Ugc2tiX3RhaWxyb29tLCBzaW5jZQotCQkJICogZGV2X2FsbG9jX3NrYiBnaXZlcyB1cyBhIGxhcmdlciBza2IgdGhhbiB3ZSAKKwkJCSAqIGRldl9hbGxvY19za2IgZ2l2ZXMgdXMgYSBsYXJnZXIgc2tiIHRoYW4gd2UKIAkJCSAqIHJlcXVlc3RlZAogCQkJICogTm90ZSA6IHVzZSB0eF9kYXRhX3NpemUsIGJlY2F1c2UgbWF4X2RhdGFfc2l6ZQogCQkJICogbWF5IGhhdmUgY2hhbmdlZCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUKQEAgLTc1MSw4ICs3NTEsOCBAQAogCQkJCWlmIChzaXplID4gdGFpbHJvb20pCiAJCQkJCXNpemUgPSB0YWlscm9vbTsKIAkJCX0gZWxzZSB7Ci0JCQkJLyogCi0JCQkJICogQ3VycmVudCB0cmFuc21pdCBmcmFtZSBpcyBmdWxsLCBzbyBicmVhayAKKwkJCQkvKgorCQkJCSAqIEN1cnJlbnQgdHJhbnNtaXQgZnJhbWUgaXMgZnVsbCwgc28gYnJlYWsKIAkJCQkgKiBvdXQsIHNvIHdlIGNhbiBzZW5kIGl0IGFzIHNvb24gYXMgcG9zc2libGUKIAkJCQkgKi8KIAkJCQlicmVhazsKQEAgLTc4MiwxNSArNzgyLDE1IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogCi0JLyogICAgIAorCS8qCiAJICogU2NoZWR1bGUgYSBuZXcgdGhyZWFkIHdoaWNoIHdpbGwgdHJhbnNtaXQgdGhlIGZyYW1lIGFzIHNvb24KIAkgKiBhcyBwb3NzaWJsZSwgYnV0IGF0IGEgc2FmZSBwb2ludCBpbiB0aW1lLiBXZSBkbyB0aGlzIHNvIHRoZQogCSAqICJ1c2VyIiBjYW4gZ2l2ZSB1cyBkYXRhIG11bHRpcGxlIHRpbWVzLCBhcyBQUFAgZG9lcyAoYmVjYXVzZSBvZgogCSAqIGl0cyAyNTYgYnl0ZSB0eCBidWZmZXIpLiBXZSB3aWxsIHRoZW4gZGVmcmFnbWVudCBhbmQgc2VuZCBvdXQKLQkgKiBhbGwgdGhpcyBkYXRhIGFzIG9uZSBzaW5nbGUgcGFja2V0LiAgCisJICogYWxsIHRoaXMgZGF0YSBhcyBvbmUgc2luZ2xlIHBhY2tldC4KIAkgKi8KIAlzY2hlZHVsZV93b3JrKCZzZWxmLT50cXVldWUpOwotCQorCiAJcmV0dXJuIGxlbjsKIH0KIApAQCAtODQ2LDcgKzg0Niw3IEBACiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllcywgcG9sbF90aW1lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CkBAIC04NzYsNyArODc2LDcgQEAKICAqCiAgKiAgICBUaGlzIHJvdXRpbmUgbm90aWZpZXMgdGhlIHR0eSBkcml2ZXIgdGhhdCBpbnB1dCBidWZmZXJzIGZvciB0aGUgbGluZQogICogICAgZGlzY2lwbGluZSBhcmUgY2xvc2UgdG8gZnVsbCwgYW5kIGl0IHNob3VsZCBzb21laG93IHNpZ25hbCB0aGF0IG5vCi0gKiAgICBtb3JlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIHR0eS4gIAorICogICAgbW9yZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBzZW50IHRvIHRoZSB0dHkuCiAgKi8KIHN0YXRpYyB2b2lkIGlyY29tbV90dHlfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKQEAgLTg5MCwxNiArODkwLDE2IEBACiAJLyogU29mdHdhcmUgZmxvdyBjb250cm9sPyAqLwogCWlmIChJX0lYT0ZGKHR0eSkpCiAJCWlyY29tbV90dHlfc2VuZF94Y2hhcih0dHksIFNUT1BfQ0hBUih0dHkpKTsKLQkKKwogCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbD8gKi8KIAlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgewogCQlzZWxmLT5zZXR0aW5ncy5kdGUgJj0gfklSQ09NTV9SVFM7CiAJCXNlbGYtPnNldHRpbmdzLmR0ZSB8PSBJUkNPTU1fREVMVEFfUlRTOwotCQorCiAJCWlyY29tbV9wYXJhbV9yZXF1ZXN0KHNlbGYsIElSQ09NTV9EVEUsIFRSVUUpOwogCX0KIAotICAgICAgICBpcmNvbW1fZmxvd19yZXF1ZXN0KHNlbGYtPmlyY29tbSwgRkxPV19TVE9QKTsKKwlpcmNvbW1fZmxvd19yZXF1ZXN0KHNlbGYtPmlyY29tbSwgRkxPV19TVE9QKTsKIH0KIAogLyoKQEAgLTkzMCw3ICs5MzAsNyBAQAogCQlpcmNvbW1fcGFyYW1fcmVxdWVzdChzZWxmLCBJUkNPTU1fRFRFLCBUUlVFKTsKIAkJSVJEQV9ERUJVRygxLCAiJXMoKSwgRkxPV19TVEFSVFxuIiwgX19GVU5DVElPTl9fICk7CiAJfQotICAgICAgICBpcmNvbW1fZmxvd19yZXF1ZXN0KHNlbGYtPmlyY29tbSwgRkxPV19TVEFSVCk7CisJaXJjb21tX2Zsb3dfcmVxdWVzdChzZWxmLT5pcmNvbW0sIEZMT1dfU1RBUlQpOwogfQogCiAvKgpAQCAtOTc1LDcgKzk3NSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbGYtPnNwaW5sb2NrLCBmbGFncyk7CiAKIAlkZWxfdGltZXIoJnNlbGYtPndhdGNoZG9nX3RpbWVyKTsKLQkKKwogCS8qIEZyZWUgcGFyYW1ldGVyIGJ1ZmZlciAqLwogCWlmIChzZWxmLT5jdHJsX3NrYikgewogCQlkZXZfa2ZyZWVfc2tiKHNlbGYtPmN0cmxfc2tiKTsKQEAgLTEwMDEsNyArMTAwMSw3IEBACiAgKgogICogICAgVGhpcyByb3V0aW5lIG5vdGlmaWVzIHRoZSB0dHkgZHJpdmVyIHRoYXQgaXQgc2hvdWxkIGhhbmd1cCB0aGUgdHR5CiAgKiAgICBkZXZpY2UuCi0gKiAKKyAqCiAgKi8KIHN0YXRpYyB2b2lkIGlyY29tbV90dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CkBAIC0xMDQ0LDcgKzEwNDQsNyBAQAogICogRnVuY3Rpb24gaXJjb21tX3R0eV9zdGFydCAodHR5KQogICoKICAqICAgIFRoaXMgcm91dGluZSBub3RpZmllcyB0aGUgdHR5IGRyaXZlciB0aGF0IGl0IHJlc3VtZSBzZW5kaW5nCi0gKiAgICBjaGFyYWN0ZXJzIHRvIHRoZSB0dHkgZGV2aWNlLiAgCisgKiAgICBjaGFyYWN0ZXJzIHRvIHRoZSB0dHkgZGV2aWNlLgogICovCiB2b2lkIGlyY29tbV90dHlfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKQEAgLTEwNTcsOSArMTA1Nyw5IEBACiAgKiBGdW5jdGlvbiBpcmNvbW1fdHR5X3N0b3AgKHR0eSkKICAqCiAgKiAgICAgVGhpcyByb3V0aW5lIG5vdGlmaWVzIHRoZSB0dHkgZHJpdmVyIHRoYXQgaXQgc2hvdWxkIHN0b3Agb3V0cHV0dGluZwotICogICAgIGNoYXJhY3RlcnMgdG8gdGhlIHR0eSBkZXZpY2UuIAorICogICAgIGNoYXJhY3RlcnMgdG8gdGhlIHR0eSBkZXZpY2UuCiAgKi8KLXN0YXRpYyB2b2lkIGlyY29tbV90dHlfc3RvcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KSAKK3N0YXRpYyB2b2lkIGlyY29tbV90dHlfc3RvcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAKQEAgLTEwOTQsMTQgKzEwOTQsMTQgQEAKIAkJLyp3YWtlX3VwX2ludGVycnVwdGlibGUoJnNlbGYtPmRlbHRhX21zcl93YWl0KTsqLwogCX0KIAlpZiAoKHNlbGYtPmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpICYmIChzdGF0dXMgJiBJUkNPTU1fREVMVEFfQ0QpKSB7Ci0JCUlSREFfREVCVUcoMiwgCisJCUlSREFfREVCVUcoMiwKIAkJCSAgICIlcygpLCBpcmNvbW0lZCBDRCBub3cgJXMuLi5cbiIsIF9fRlVOQ1RJT05fXyAsIHNlbGYtPmxpbmUsCiAJCQkgICAoc3RhdHVzICYgSVJDT01NX0NEKSA/ICJvbiIgOiAib2ZmIik7CiAKIAkJaWYgKHN0YXR1cyAmIElSQ09NTV9DRCkgewogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZWxmLT5vcGVuX3dhaXQpOwogCQl9IGVsc2UgewotCQkJSVJEQV9ERUJVRygyLCAKKwkJCUlSREFfREVCVUcoMiwKIAkJCQkgICAiJXMoKSwgRG9pbmcgc2VyaWFsIGhhbmd1cC4uXG4iLCBfX0ZVTkNUSU9OX18gKTsKIAkJCWlmICh0dHkpCiAJCQkJdHR5X2hhbmd1cCh0dHkpOwpAQCAtMTExMywxMCArMTExMywxMCBAQAogCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSB7CiAJCWlmICh0dHktPmh3X3N0b3BwZWQpIHsKIAkJCWlmIChzdGF0dXMgJiBJUkNPTU1fQ1RTKSB7Ci0JCQkJSVJEQV9ERUJVRygyLCAKKwkJCQlJUkRBX0RFQlVHKDIsCiAJCQkJCSAgICIlcygpLCBDVFMgdHggc3RhcnQuLi5cbiIsIF9fRlVOQ1RJT05fXyApOwogCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7Ci0JCQkJCisKIAkJCQkvKiBXYWtlIHVwIHByb2Nlc3NlcyBibG9ja2VkIG9uIG9wZW4gKi8KIAkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNlbGYtPm9wZW5fd2FpdCk7CiAKQEAgLTExMjUsNyArMTEyNSw3IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoIShzdGF0dXMgJiBJUkNPTU1fQ1RTKSkgewotCQkJCUlSREFfREVCVUcoMiwgCisJCQkJSVJEQV9ERUJVRygyLAogCQkJCQkgICAiJXMoKSwgQ1RTIHR4IHN0b3AuLi5cbiIsIF9fRlVOQ1RJT05fXyApOwogCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCQl9CkBAIC0xMTQ1LDcgKzExNDUsNyBAQAogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGluc3RhbmNlOwogCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7Ci0JCisKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKQEAgLTExNTUsMTAgKzExNTUsMTAgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogCisJLyoKIAkgKiBJZiB3ZSByZWNlaXZlIGRhdGEgd2hlbiBoYXJkd2FyZSBpcyBzdG9wcGVkIHRoZW4gc29tZXRoaW5nIGlzIHdyb25nLgogCSAqIFdlIHRyeSB0byBwb2xsIHRoZSBwZWVycyBsaW5lIHNldHRpbmdzIHRvIGNoZWNrIGlmIHdlIGFyZSB1cCB0b2RhdGUuCi0JICogRGV2aWNlcyBsaWtlIFdpbkNFIGNhbiBkbyB0aGlzLCBhbmQgc2luY2UgdGhleSBkb24ndCBzZW5kIGFueSAKKwkgKiBEZXZpY2VzIGxpa2UgV2luQ0UgY2FuIGRvIHRoaXMsIGFuZCBzaW5jZSB0aGV5IGRvbid0IHNlbmQgYW55CiAJICogcGFyYW1zLCB3ZSBjYW4ganVzdCBhcyB3ZWxsIGRlY2xhcmUgdGhlIGhhcmR3YXJlIGZvciBydW5uaW5nLgogCSAqLwogCWlmIChzZWxmLT50dHktPmh3X3N0b3BwZWQgJiYgKHNlbGYtPmZsb3cgPT0gRkxPV19TVEFSVCkpIHsKQEAgLTExNzAsOSArMTE3MCw5IEBACiAJCWlyY29tbV90dHlfbGlua19lc3RhYmxpc2hlZChzZWxmKTsKIAl9CiAKLQkvKiAKKwkvKgogCSAqIEp1c3QgZ2l2ZSBpdCBvdmVyIHRvIHRoZSBsaW5lIGRpc2NpcGxpbmUuIFRoZXJlIGlzIG5vIG5lZWQgdG8KLQkgKiBpbnZvbHZlIHRoZSBmbGlwIGJ1ZmZlcnMsIHNpbmNlIHdlIGFyZSBub3QgcnVubmluZyBpbiBhbiBpbnRlcnJ1cHQgCisJICogaW52b2x2ZSB0aGUgZmxpcCBidWZmZXJzLCBzaW5jZSB3ZSBhcmUgbm90IHJ1bm5pbmcgaW4gYW4gaW50ZXJydXB0CiAJICogaGFuZGxlcgogCSAqLwogCXNlbGYtPnR0eS0+bGRpc2MucmVjZWl2ZV9idWYoc2VsZi0+dHR5LCBza2ItPmRhdGEsIE5VTEwsIHNrYi0+bGVuKTsKQEAgLTExOTUsMTQgKzExOTUsMTQgQEAKIAlpbnQgY2xlbjsKIAogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChza2IgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAKIAljbGVuID0gc2tiLT5kYXRhWzBdOwogCi0JaXJkYV9wYXJhbV9leHRyYWN0X2FsbChzZWxmLCBza2ItPmRhdGErMSwgSVJEQV9NSU4oc2tiLT5sZW4tMSwgY2xlbiksIAorCWlyZGFfcGFyYW1fZXh0cmFjdF9hbGwoc2VsZiwgc2tiLT5kYXRhKzEsIElSREFfTUlOKHNrYi0+bGVuLTEsIGNsZW4pLAogCQkJICAgICAgICZpcmNvbW1fcGFyYW1faW5mbyk7CiAKIAkvKiBObyBuZWVkIHRvIGtmcmVlX3NrYiAtIHNlZSBpcmNvbW1fY29udHJvbF9pbmRpY2F0aW9uKCkgKi8KQEAgLTEyMTcsNyArMTIxNyw3IEBACiAgKiAgICB0cmFuc21pc3Npb24gb2YgZGF0YS4gV2UganVzdCBtYXJrIHRoZSBoYXJkd2FyZSBhcyBzdG9wcGVkLCBhbmQgd2FpdAogICogICAgZm9yIElyVFRQIHRvIG5vdGlmeSB1cyB0aGF0IHRoaW5ncyBhcmUgT0sgYWdhaW4uCiAgKi8KLXN0YXRpYyB2b2lkIGlyY29tbV90dHlfZmxvd19pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAorc3RhdGljIHZvaWQgaXJjb21tX3R0eV9mbG93X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKIAkJCQkgICAgICAgTE9DQUxfRkxPVyBjbWQpCiB7CiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgaW5zdGFuY2U7CkBAIC0xMjQ3LDcgKzEyNDcsNyBAQAogCiBzdGF0aWMgaW50IGlyY29tbV90dHlfbGluZV9pbmZvKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCBjaGFyICpidWYpCiB7Ci0gICAgICAgIGludCAgcmV0PTA7CisJaW50ICByZXQ9MDsKIAogCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJTdGF0ZTogJXNcbiIsIGlyY29tbV90dHlfc3RhdGVbc2VsZi0+c3RhdGVdKTsKIApAQCAtMTI2MCwzNyArMTI2MCwzNyBAQAogCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiM19XSVJFX1JBVyIpOwogCWVsc2UKIAkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIk5vIGNvbW1vbiBzZXJ2aWNlIHR5cGUhXG4iKTsKLSAgICAgICAgcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7CisJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7CiAKIAlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiUG9ydCBuYW1lOiAlc1xuIiwgc2VsZi0+c2V0dGluZ3MucG9ydF9uYW1lKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJEVEUgc3RhdHVzOiAiKTsJCi0gICAgICAgIGlmIChzZWxmLT5zZXR0aW5ncy5kdGUgJiBJUkNPTU1fUlRTKQotICAgICAgICAgICAgICAgIHJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJSVFN8Iik7Ci0gICAgICAgIGlmIChzZWxmLT5zZXR0aW5ncy5kdGUgJiBJUkNPTU1fRFRSKQotICAgICAgICAgICAgICAgIHJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJEVFJ8Iik7CisJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkRURSBzdGF0dXM6ICIpOworCWlmIChzZWxmLT5zZXR0aW5ncy5kdGUgJiBJUkNPTU1fUlRTKQorCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiUlRTfCIpOworCWlmIChzZWxmLT5zZXR0aW5ncy5kdGUgJiBJUkNPTU1fRFRSKQorCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRFRSfCIpOwogCWlmIChzZWxmLT5zZXR0aW5ncy5kdGUpCiAJCXJldC0tOyAvKiByZW1vdmUgdGhlIGxhc3QgfCAqLwotICAgICAgICByZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXG4iKTsKKwlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXG4iKTsKIAogCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJEQ0Ugc3RhdHVzOiAiKTsKLSAgICAgICAgaWYgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9DVFMpCi0gICAgICAgICAgICAgICAgcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkNUU3wiKTsKLSAgICAgICAgaWYgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9EU1IpCi0gICAgICAgICAgICAgICAgcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkRTUnwiKTsKLSAgICAgICAgaWYgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9DRCkKLSAgICAgICAgICAgICAgICByZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiQ0R8Iik7Ci0gICAgICAgIGlmIChzZWxmLT5zZXR0aW5ncy5kY2UgJiBJUkNPTU1fUkkpIAotICAgICAgICAgICAgICAgIHJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJSSXwiKTsKKwlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0NUUykKKwkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkNUU3wiKTsKKwlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0RTUikKKwkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkRTUnwiKTsKKwlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0NEKQorCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiQ0R8Iik7CisJaWYgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9SSSkKKwkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlJJfCIpOwogCWlmIChzZWxmLT5zZXR0aW5ncy5kY2UpCiAJCXJldC0tOyAvKiByZW1vdmUgdGhlIGxhc3QgfCAqLwotICAgICAgICByZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXG4iKTsKKwlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXG4iKTsKIAogCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJDb25maWd1cmF0aW9uOiAiKTsKIAlpZiAoIXNlbGYtPnNldHRpbmdzLm51bGxfbW9kZW0pCiAJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJEVEUgPC0+IERDRVxuIik7CiAJZWxzZQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAKKwkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwKIAkJCSAgICAgICAiRFRFIDwtPiBEVEUgKG51bGwgbW9kZW0gZW11bGF0aW9uKVxuIik7CiAKIAlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRGF0YSByYXRlOiAlZFxuIiwgc2VsZi0+c2V0dGluZ3MuZGF0YV9yYXRlKTsKQEAgLTEzMTQsNyArMTMxNCw3IEBACiAJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJFTlFfQUNLX09VVHwiKTsKIAlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sKQogCQlyZXQtLTsgLyogcmVtb3ZlIHRoZSBsYXN0IHwgKi8KLSAgICAgICAgcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7CisJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7CiAKIAlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRmxhZ3M6ICIpOwogCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKQpAQCAtMTMzMywyNSArMTMzMywyNSBAQAogCQlyZXQtLTsgLyogcmVtb3ZlIHRoZSBsYXN0IHwgKi8KIAlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXG4iKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJSb2xlOiAlc1xuIiwgc2VsZi0+Y2xpZW50ID8gCisJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlJvbGU6ICVzXG4iLCBzZWxmLT5jbGllbnQgPwogCQkgICAgICAgImNsaWVudCIgOiAic2VydmVyIik7CiAJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIk9wZW4gY291bnQ6ICVkXG4iLCBzZWxmLT5vcGVuX2NvdW50KTsKIAlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiTWF4IGRhdGEgc2l6ZTogJWRcbiIsIHNlbGYtPm1heF9kYXRhX3NpemUpOwogCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJNYXggaGVhZGVyIHNpemU6ICVkXG4iLCBzZWxmLT5tYXhfaGVhZGVyX3NpemUpOwotCQkKKwogCWlmIChzZWxmLT50dHkpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJIYXJkd2FyZTogJXNcbiIsIAorCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiSGFyZHdhcmU6ICVzXG4iLAogCQkJICAgICAgIHNlbGYtPnR0eS0+aHdfc3RvcHBlZCA/ICJTdG9wcGVkIiA6ICJSdW5uaW5nIik7CiAKLSAgICAgICAgcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7Ci0gICAgICAgIHJldHVybiByZXQ7CisJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7CisJcmV0dXJuIHJldDsKIH0KIAogCiAvKgogICogRnVuY3Rpb24gaXJjb21tX3R0eV9yZWFkX3Byb2MgKGJ1Ziwgc3RhcnQsIG9mZnNldCwgbGVuLCBlb2YsIHVudXNlZCkKICAqCi0gKiAgICAKKyAqCiAgKgogICovCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTEzNTksOCArMTM1OSw4IEBACiAJCQkJaW50ICplb2YsIHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZjsKLSAgICAgICAgaW50IGNvdW50ID0gMCwgbDsKLSAgICAgICAgb2ZmX3QgYmVnaW4gPSAwOworCWludCBjb3VudCA9IDAsIGw7CisJb2ZmX3QgYmVnaW4gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaXJjb21tX3R0eS0+aGJfc3BpbmxvY2ssIGZsYWdzKTsKQEAgLTEzNzAsMjUgKzEzNzAsMjUgQEAKIAkJaWYgKHNlbGYtPm1hZ2ljICE9IElSQ09NTV9UVFlfTUFHSUMpCiAJCQlicmVhazsKIAotICAgICAgICAgICAgICAgIGwgPSBpcmNvbW1fdHR5X2xpbmVfaW5mbyhzZWxmLCBidWYgKyBjb3VudCk7Ci0gICAgICAgICAgICAgICAgY291bnQgKz0gbDsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQrYmVnaW4gPiBvZmZzZXQrbGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgICAgICAgIGlmIChjb3VudCtiZWdpbiA8IG9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gKz0gY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotCQkJCQorCQlsID0gaXJjb21tX3R0eV9saW5lX2luZm8oc2VsZiwgYnVmICsgY291bnQpOworCQljb3VudCArPSBsOworCQlpZiAoY291bnQrYmVnaW4gPiBvZmZzZXQrbGVuKQorCQkJZ290byBkb25lOworCQlpZiAoY291bnQrYmVnaW4gPCBvZmZzZXQpIHsKKwkJCWJlZ2luICs9IGNvdW50OworCQkJY291bnQgPSAwOworCQl9CisKIAkJc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSBoYXNoYmluX2dldF9uZXh0KGlyY29tbV90dHkpOwotICAgICAgICB9Ci0gICAgICAgICplb2YgPSAxOworCX0KKwkqZW9mID0gMTsKIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJjb21tX3R0eS0+aGJfc3BpbmxvY2ssIGZsYWdzKTsKIAotICAgICAgICBpZiAob2Zmc2V0ID49IGNvdW50K2JlZ2luKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAqc3RhcnQgPSBidWYgKyAob2Zmc2V0LWJlZ2luKTsKLSAgICAgICAgcmV0dXJuICgobGVuIDwgYmVnaW4rY291bnQtb2Zmc2V0KSA/IGxlbiA6IGJlZ2luK2NvdW50LW9mZnNldCk7CisJaWYgKG9mZnNldCA+PSBjb3VudCtiZWdpbikKKwkJcmV0dXJuIDA7CisJKnN0YXJ0ID0gYnVmICsgKG9mZnNldC1iZWdpbik7CisJcmV0dXJuICgobGVuIDwgYmVnaW4rY291bnQtb2Zmc2V0KSA/IGxlbiA6IGJlZ2luK2NvdW50LW9mZnNldCk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfYXR0YWNoLmMgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9hdHRhY2guYwppbmRleCA5OWY1ZWRkLi44ZDdiYTkzIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9hdHRhY2guYworKysgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9hdHRhY2guYwpAQCAtMSwzMiArMSwzMiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgCisgKgogICogRmlsZW5hbWU6ICAgICAgaXJjb21tX3R0eV9hdHRhY2guYwotICogVmVyc2lvbjogICAgICAgCisgKiBWZXJzaW9uOgogICogRGVzY3JpcHRpb246ICAgQ29kZSBmb3IgYXR0YWNoaW5nIHRoZSBzZXJpYWwgZHJpdmVyIHRvIElyQ09NTQogICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgogICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogICogQ3JlYXRlZCBhdDogICAgU2F0IEp1biAgNSAxNzo0MjowMCAxOTk5CiAgKiBNb2RpZmllZCBhdDogICBUdWUgSmFuICA0IDE0OjIwOjQ5IDIwMDAKICAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KLSAqIAorICoKICAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+Ci0gKiAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKLSAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKLSAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAqICAgICAKKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNTAsMzUgKzUwLDM1IEBACiBzdGF0aWMgdm9pZCBpcmNvbW1fdHR5X2Rpc2NvdmVyeV9pbmRpY2F0aW9uKGRpc2NpbmZvX3QgKmRpc2NvdmVyeSwKIAkJCQkJICAgIERJU0NPVkVSWV9NT0RFIG1vZGUsCiAJCQkJCSAgICB2b2lkICpwcml2KTsKLXN0YXRpYyB2b2lkIGlyY29tbV90dHlfZ2V0dmFsdWVfY29uZmlybShpbnQgcmVzdWx0LCBfX3UxNiBvYmpfaWQsIAorc3RhdGljIHZvaWQgaXJjb21tX3R0eV9nZXR2YWx1ZV9jb25maXJtKGludCByZXN1bHQsIF9fdTE2IG9ial9pZCwKIAkJCQkJc3RydWN0IGlhc192YWx1ZSAqdmFsdWUsIHZvaWQgKnByaXYpOwogc3RhdGljIHZvaWQgaXJjb21tX3R0eV9zdGFydF93YXRjaGRvZ190aW1lcihzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwKIAkJCQkJICAgIGludCB0aW1lb3V0KTsKIHN0YXRpYyB2b2lkIGlyY29tbV90dHlfd2F0Y2hkb2dfdGltZXJfZXhwaXJlZCh2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX2lkbGUoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsIAotCQkJCSBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LCAKLQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgCitzdGF0aWMgaW50IGlyY29tbV90dHlfc3RhdGVfaWRsZShzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwKKwkJCQkgSVJDT01NX1RUWV9FVkVOVCBldmVudCwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgc3RydWN0IGlyY29tbV90dHlfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGlyY29tbV90dHlfc3RhdGVfc2VhcmNoKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCAKLQkJCQkgICBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LCAKLQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKK3N0YXRpYyBpbnQgaXJjb21tX3R0eV9zdGF0ZV9zZWFyY2goc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsCisJCQkJICAgSVJDT01NX1RUWV9FVkVOVCBldmVudCwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBpcmNvbW1fdHR5X2luZm8gKmluZm8pOwotc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX3F1ZXJ5X3BhcmFtZXRlcnMoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsIAotCQkJCQkgICAgIElSQ09NTV9UVFlfRVZFTlQgZXZlbnQsIAotCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIAorc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX3F1ZXJ5X3BhcmFtZXRlcnMoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsCisJCQkJCSAgICAgSVJDT01NX1RUWV9FVkVOVCBldmVudCwKKwkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgIHN0cnVjdCBpcmNvbW1fdHR5X2luZm8gKmluZm8pOwotc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX3F1ZXJ5X2xzYXBfc2VsKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCAKLQkJCQkJICAgSVJDT01NX1RUWV9FVkVOVCBldmVudCwgCi0JCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsIAorc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX3F1ZXJ5X2xzYXBfc2VsKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLAorCQkJCQkgICBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgaXJjb21tX3R0eV9zdGF0ZV9zZXR1cChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwgCi0JCQkJICBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LCAKLQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIAorc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX3NldHVwKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLAorCQkJCSAgSVJDT01NX1RUWV9FVkVOVCBldmVudCwKKwkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgaXJjb21tX3R0eV9zdGF0ZV9yZWFkeShzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwgCi0JCQkJICBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LCAKLQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIAorc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX3JlYWR5KHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLAorCQkJCSAgSVJDT01NX1RUWV9FVkVOVCBldmVudCwKKwkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvICppbmZvKTsKIAogY2hhciAqaXJjb21tX3R0eV9zdGF0ZVtdID0gewpAQCAtMTExLDcgKzExMSw3IEBACiAjZW5kaWYgLyogQ09ORklHX0lSREFfREVCVUcgKi8KIAogc3RhdGljIGludCAoKnN0YXRlW10pKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LAotCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvICppbmZvKSA9IAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvICppbmZvKSA9CiB7CiAJaXJjb21tX3R0eV9zdGF0ZV9pZGxlLAogCWlyY29tbV90dHlfc3RhdGVfc2VhcmNoLApAQCAtMTI1LDcgKzEyNSw3IEBACiAgKiBGdW5jdGlvbiBpcmNvbW1fdHR5X2F0dGFjaF9jYWJsZSAoZHJpdmVyKQogICoKICAqICAgIFRyeSB0byBhdHRhY2ggY2FibGUgKElyQ09NTSBsaW5rKS4gVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuCi0gKiAgICB3aGVuIHRoZSBsaW5rIGhhcyBiZWVuIGNvbm5lY3RlZCwgb3IgaWYgYW4gZXJyb3IgY29uZGl0aW9uIG9jY3Vycy4gCisgKiAgICB3aGVuIHRoZSBsaW5rIGhhcyBiZWVuIGNvbm5lY3RlZCwgb3IgaWYgYW4gZXJyb3IgY29uZGl0aW9uIG9jY3Vycy4KICAqICAgIElmIHN1Y2Nlc3MsIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJlc3VsdGluZyBzZXJ2aWNlIHR5cGUuCiAgKi8KIGludCBpcmNvbW1fdHR5X2F0dGFjaF9jYWJsZShzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZikKQEAgLTEzNSw3ICsxMzUsNyBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuIC0xOyk7CiAKLSAgICAgICAJLyogQ2hlY2sgaWYgc29tZWJvZHkgaGFzIGFscmVhZHkgY29ubmVjdGVkIHRvIHVzICovCisJLyogQ2hlY2sgaWYgc29tZWJvZHkgaGFzIGFscmVhZHkgY29ubmVjdGVkIHRvIHVzICovCiAJaWYgKGlyY29tbV9pc19jb25uZWN0ZWQoc2VsZi0+aXJjb21tKSkgewogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBhbHJlYWR5IGNvbm5lY3RlZCFcbiIsIF9fRlVOQ1RJT05fXyApOwogCQlyZXR1cm4gMDsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQlzZWxmLT5za2V5ID0gTlVMTDsKIAl9CiAKLQlpZiAoc2VsZi0+aXJpYXApIHsgCisJaWYgKHNlbGYtPmlyaWFwKSB7CiAJCWlyaWFwX2Nsb3NlKHNlbGYtPmlyaWFwKTsKIAkJc2VsZi0+aXJpYXAgPSBOVUxMOwogCX0KQEAgLTIxMiw3ICsyMTIsNyBAQAogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm47KTsKLQkKKwogCS8qIENvbXB1dGUgaGludCBiaXRzIGJhc2VkIG9uIHNlcnZpY2UgKi8KIAloaW50cyA9IGlybG1wX3NlcnZpY2VfdG9faGludChTX0NPTU0pOwogCWlmIChzZWxmLT5zZXJ2aWNlX3R5cGUgJiBJUkNPTU1fM19XSVJFX1JBVykKQEAgLTIzNCwxOSArMjM0LDE5IEBACiAJaWYgKHNlbGYtPnNlcnZpY2VfdHlwZSAmIElSQ09NTV8zX1dJUkVfUkFXKSB7CiAJCS8qIFJlZ2lzdGVyIElyTFBUIHdpdGggTE0tSUFTICovCiAJCXNlbGYtPm9iaiA9IGlyaWFzX25ld19vYmplY3QoIklyTFBUIiwgSUFTX0lSTFBUX0lEKTsKLQkJaXJpYXNfYWRkX2ludGVnZXJfYXR0cmliKHNlbGYtPm9iaiwgIklyREE6SXJMTVA6THNhcFNlbCIsIAorCQlpcmlhc19hZGRfaW50ZWdlcl9hdHRyaWIoc2VsZi0+b2JqLCAiSXJEQTpJckxNUDpMc2FwU2VsIiwKIAkJCQkJIHNlbGYtPnNsc2FwX3NlbCwgSUFTX0tFUk5FTF9BVFRSKTsKIAl9IGVsc2UgewogCQkvKiBSZWdpc3RlciBJckNPTU0gd2l0aCBMTS1JQVMgKi8KIAkJc2VsZi0+b2JqID0gaXJpYXNfbmV3X29iamVjdCgiSXJEQTpJckNPTU0iLCBJQVNfSVJDT01NX0lEKTsKLQkJaXJpYXNfYWRkX2ludGVnZXJfYXR0cmliKHNlbGYtPm9iaiwgIklyREE6VGlueVRQOkxzYXBTZWwiLCAKKwkJaXJpYXNfYWRkX2ludGVnZXJfYXR0cmliKHNlbGYtPm9iaiwgIklyREE6VGlueVRQOkxzYXBTZWwiLAogCQkJCQkgc2VsZi0+c2xzYXBfc2VsLCBJQVNfS0VSTkVMX0FUVFIpOwotCQkKKwogCQkvKiBDb2RlIHRoZSBwYXJhbWV0ZXJzIGludG8gdGhlIGJ1ZmZlciAqLwotCQlpcmRhX3BhcmFtX3BhY2sob2N0X3NlcSwgImJiYmJiYiIsIAorCQlpcmRhX3BhcmFtX3BhY2sob2N0X3NlcSwgImJiYmJiYiIsCiAJCQkJSVJDT01NX1NFUlZJQ0VfVFlQRSwgMSwgc2VsZi0+c2VydmljZV90eXBlLAogCQkJCUlSQ09NTV9QT1JUX1RZUEUsICAgIDEsIElSQ09NTV9TRVJJQUwpOwotCQkKKwogCQkvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIHdpdGggTE0tSUFTICovCiAJCWlyaWFzX2FkZF9vY3RzZXFfYXR0cmliKHNlbGYtPm9iaiwgIlBhcmFtZXRlcnMiLCBvY3Rfc2VxLCA2LAogCQkJCQlJQVNfS0VSTkVMX0FUVFIpOwpAQCAtMzAyLDIzICszMDIsMjMgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybiAtMTspOwogCi0JaWYgKHNlbGYtPnNlcnZpY2VfdHlwZSAmIElSQ09NTV8zX1dJUkVfUkFXKSAKKwlpZiAoc2VsZi0+c2VydmljZV90eXBlICYgSVJDT01NXzNfV0lSRV9SQVcpCiAJCXJldHVybiAwOwogCi0JLyogCi0JICogU2V0IGRlZmF1bHQgdmFsdWVzLCBidXQgb25seSBpZiB0aGUgYXBwbGljYXRpb24gZm9yIHNvbWUgcmVhc29uIAorCS8qCisJICogU2V0IGRlZmF1bHQgdmFsdWVzLCBidXQgb25seSBpZiB0aGUgYXBwbGljYXRpb24gZm9yIHNvbWUgcmVhc29uCiAJICogaGF2ZW4ndCBzZXQgdGhlbSBhbHJlYWR5CiAJICovCi0JSVJEQV9ERUJVRygyLCAiJXMoKSwgZGF0YS1yYXRlID0gJWRcbiIsIF9fRlVOQ1RJT05fXyAsIAorCUlSREFfREVCVUcoMiwgIiVzKCksIGRhdGEtcmF0ZSA9ICVkXG4iLCBfX0ZVTkNUSU9OX18gLAogCQkgICBzZWxmLT5zZXR0aW5ncy5kYXRhX3JhdGUpOwogCWlmICghc2VsZi0+c2V0dGluZ3MuZGF0YV9yYXRlKQogCQlzZWxmLT5zZXR0aW5ncy5kYXRhX3JhdGUgPSA5NjAwOwotCUlSREFfREVCVUcoMiwgIiVzKCksIGRhdGEtZm9ybWF0ID0gJWRcbiIsIF9fRlVOQ1RJT05fXyAsIAorCUlSREFfREVCVUcoMiwgIiVzKCksIGRhdGEtZm9ybWF0ID0gJWRcbiIsIF9fRlVOQ1RJT05fXyAsCiAJCSAgIHNlbGYtPnNldHRpbmdzLmRhdGFfZm9ybWF0KTsKIAlpZiAoIXNlbGYtPnNldHRpbmdzLmRhdGFfZm9ybWF0KQogCQlzZWxmLT5zZXR0aW5ncy5kYXRhX2Zvcm1hdCA9IElSQ09NTV9XU0laRV84OyAgLyogOE4xICovCiAKLQlJUkRBX0RFQlVHKDIsICIlcygpLCBmbG93LWNvbnRyb2wgPSAlZFxuIiwgX19GVU5DVElPTl9fICwgCisJSVJEQV9ERUJVRygyLCAiJXMoKSwgZmxvdy1jb250cm9sID0gJWRcbiIsIF9fRlVOQ1RJT05fXyAsCiAJCSAgIHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCk7CiAJLypzZWxmLT5zZXR0aW5ncy5mbG93X2NvbnRyb2wgPSBJUkNPTU1fUlRTX0NUU19JTnxJUkNPTU1fUlRTX0NUU19PVVQ7Ki8KIApAQCAtMzMwLDcgKzMzMCw3IEBACiAJCWlyY29tbV9wYXJhbV9yZXF1ZXN0KHNlbGYsIElSQ09NTV9TRVJWSUNFX1RZUEUsIEZBTFNFKTsKIAlpcmNvbW1fcGFyYW1fcmVxdWVzdChzZWxmLCBJUkNPTU1fREFUQV9SQVRFLCBGQUxTRSk7CiAJaXJjb21tX3BhcmFtX3JlcXVlc3Qoc2VsZiwgSVJDT01NX0RBVEFfRk9STUFULCBGQUxTRSk7Ci0JCisKIAkvKiBGb3IgYSAzIHdpcmUgc2VydmljZSwgd2UganVzdCBmbHVzaCB0aGUgbGFzdCBwYXJhbWV0ZXIgYW5kIHJldHVybiAqLwogCWlmIChzZWxmLT5zZXR0aW5ncy5zZXJ2aWNlX3R5cGUgPT0gSVJDT01NXzNfV0lSRSkgewogCQlpcmNvbW1fcGFyYW1fcmVxdWVzdChzZWxmLCBJUkNPTU1fRkxPV19DT05UUk9MLCBUUlVFKTsKQEAgLTM0MiwxMCArMzQyLDEwIEBACiAjaWYgMAogCWlyY29tbV9wYXJhbV9yZXF1ZXN0KHNlbGYsIElSQ09NTV9YT05fWE9GRiwgRkFMU0UpOwogCWlyY29tbV9wYXJhbV9yZXF1ZXN0KHNlbGYsIElSQ09NTV9FTlFfQUNLLCBGQUxTRSk7Ci0jZW5kaWYJCisjZW5kaWYKIAkvKiBOb3RpZnkgcGVlciB0aGF0IHdlIGFyZSByZWFkeSB0byByZWNlaXZlIGRhdGEgKi8KIAlpcmNvbW1fcGFyYW1fcmVxdWVzdChzZWxmLCBJUkNPTU1fRFRFLCBUUlVFKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0zODgsOCArMzg4LDggQEAKIAlzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGhhc2hiaW5fZ2V0X2ZpcnN0KGlyY29tbV90dHkpOwogCXdoaWxlIChzZWxmICE9IE5VTEwpIHsKIAkJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7Ci0JCQotCQlpcmNvbW1fdHR5X2RvX2V2ZW50KHNlbGYsIElSQ09NTV9UVFlfRElTQ09WRVJZX0lORElDQVRJT04sIAorCisJCWlyY29tbV90dHlfZG9fZXZlbnQoc2VsZiwgSVJDT01NX1RUWV9ESVNDT1ZFUllfSU5ESUNBVElPTiwKIAkJCQkgICAgTlVMTCwgJmluZm8pOwogCiAJCXNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgaGFzaGJpbl9nZXRfbmV4dChpcmNvbW1fdHR5KTsKQEAgLTQwMiw3ICs0MDIsNyBAQAogICogICAgTGluayBkaXNjb25uZWN0ZWQKICAqCiAgKi8KLXZvaWQgaXJjb21tX3R0eV9kaXNjb25uZWN0X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCit2b2lkIGlyY29tbV90dHlfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCiAJCQkJICAgICAgTE1fUkVBU09OIHJlYXNvbiwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNDIyLDcgKzQyMiw3IEBACiAJLyogU3RvcCBkYXRhIHRyYW5zZmVycyAqLwogCXNlbGYtPnR0eS0+aHdfc3RvcHBlZCA9IDE7CiAKLQlpcmNvbW1fdHR5X2RvX2V2ZW50KHNlbGYsIElSQ09NTV9UVFlfRElTQ09OTkVDVF9JTkRJQ0FUSU9OLCBOVUxMLCAKKwlpcmNvbW1fdHR5X2RvX2V2ZW50KHNlbGYsIElSQ09NTV9UVFlfRElTQ09OTkVDVF9JTkRJQ0FUSU9OLCBOVUxMLAogCQkJICAgIE5VTEwpOwogfQogCkBAIC00MzIsOCArNDMyLDggQEAKICAqICAgIEdvdCByZXN1bHQgZnJvbSB0aGUgSUFTIHF1ZXJ5IHdlIG1ha2UKICAqCiAgKi8KLXN0YXRpYyB2b2lkIGlyY29tbV90dHlfZ2V0dmFsdWVfY29uZmlybShpbnQgcmVzdWx0LCBfX3UxNiBvYmpfaWQsIAotCQkJCQlzdHJ1Y3QgaWFzX3ZhbHVlICp2YWx1ZSwgCitzdGF0aWMgdm9pZCBpcmNvbW1fdHR5X2dldHZhbHVlX2NvbmZpcm0oaW50IHJlc3VsdCwgX191MTYgb2JqX2lkLAorCQkJCQlzdHJ1Y3QgaWFzX3ZhbHVlICp2YWx1ZSwKIAkJCQkJdm9pZCAqcHJpdikKIHsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSBwcml2OwpAQCAtNDU0LDE4ICs0NTQsMTggQEAKIAl9CiAKIAlzd2l0Y2ggKHZhbHVlLT50eXBlKSB7Ci0gCWNhc2UgSUFTX09DVF9TRVE6CisJY2FzZSBJQVNfT0NUX1NFUToKIAkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZ290IG9jdGV0IHNlcXVlbmNlXG4iLCBfX0ZVTkNUSU9OX18gKTsKIAogCQlpcmRhX3BhcmFtX2V4dHJhY3RfYWxsKHNlbGYsIHZhbHVlLT50Lm9jdF9zZXEsIHZhbHVlLT5sZW4sCiAJCQkJICAgICAgICZpcmNvbW1fcGFyYW1faW5mbyk7CiAKLQkJaXJjb21tX3R0eV9kb19ldmVudChzZWxmLCBJUkNPTU1fVFRZX0dPVF9QQVJBTUVURVJTLCBOVUxMLCAKKwkJaXJjb21tX3R0eV9kb19ldmVudChzZWxmLCBJUkNPTU1fVFRZX0dPVF9QQVJBTUVURVJTLCBOVUxMLAogCQkJCSAgICBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBJQVNfSU5URUdFUjoKLQkJLyogR290IExTQVAgc2VsZWN0b3IgKi8JCi0JCUlSREFfREVCVUcoMiwgIiVzKCksIGdvdCBsc2Fwc2VsID0gJWRcbiIsIF9fRlVOQ1RJT05fXyAsIAorCQkvKiBHb3QgTFNBUCBzZWxlY3RvciAqLworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBnb3QgbHNhcHNlbCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18gLAogCQkJICAgdmFsdWUtPnQuaW50ZWdlcik7CiAKIAkJaWYgKHZhbHVlLT50LmludGVnZXIgPT0gLTEpIHsKQEAgLTQ5MSwxMCArNDkxLDEwIEBACiAgKiAgICBDb25uZWN0aW9uIGNvbmZpcm1lZAogICoKICAqLwotdm9pZCBpcmNvbW1fdHR5X2Nvbm5lY3RfY29uZmlybSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKLQkJCQlzdHJ1Y3QgcW9zX2luZm8gKnFvcywgCi0JCQkJX191MzIgbWF4X2RhdGFfc2l6ZSwgCi0JCQkJX191OCBtYXhfaGVhZGVyX3NpemUsIAordm9pZCBpcmNvbW1fdHR5X2Nvbm5lY3RfY29uZmlybSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAorCQkJCXN0cnVjdCBxb3NfaW5mbyAqcW9zLAorCQkJCV9fdTMyIG1heF9kYXRhX3NpemUsCisJCQkJX191OCBtYXhfaGVhZGVyX3NpemUsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSBpbnN0YW5jZTsKQEAgLTUxNSwxNiArNTE1LDE2IEBACiB9CiAKIC8qCi0gKiBGdW5jdGlvbiBpcmNvbW1fdHR5X2Nvbm5lY3RfaW5kaWNhdGlvbiAoaW5zdGFuY2UsIHNhcCwgcW9zLCBtYXhfc2R1X3NpemUsIAorICogRnVuY3Rpb24gaXJjb21tX3R0eV9jb25uZWN0X2luZGljYXRpb24gKGluc3RhbmNlLCBzYXAsIHFvcywgbWF4X3NkdV9zaXplLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYikKICAqCiAgKiAgICB3ZSBhcmUgZGlzY292ZXJlZCBhbmQgYmVpbmcgcmVxdWVzdGVkIHRvIGNvbm5lY3QgYnkgcmVtb3RlIGRldmljZSAhCiAgKgogICovCi12b2lkIGlyY29tbV90dHlfY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAotCQkJCSAgIHN0cnVjdCBxb3NfaW5mbyAqcW9zLCAKK3ZvaWQgaXJjb21tX3R0eV9jb25uZWN0X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKKwkJCQkgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywKIAkJCQkgICBfX3UzMiBtYXhfZGF0YV9zaXplLAotCQkJCSAgIF9fdTggbWF4X2hlYWRlcl9zaXplLCAKKwkJCQkgICBfX3U4IG1heF9oZWFkZXJfc2l6ZSwKIAkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGluc3RhbmNlOwpAQCAtNTQyLDggKzU0Miw4IEBACiAKIAljbGVuID0gc2tiLT5kYXRhWzBdOwogCWlmIChjbGVuKQotCQlpcmRhX3BhcmFtX2V4dHJhY3RfYWxsKHNlbGYsIHNrYi0+ZGF0YSsxLCAKLQkJCQkgICAgICAgSVJEQV9NSU4oc2tiLT5sZW4sIGNsZW4pLCAKKwkJaXJkYV9wYXJhbV9leHRyYWN0X2FsbChzZWxmLCBza2ItPmRhdGErMSwKKwkJCQkgICAgICAgSVJEQV9NSU4oc2tiLT5sZW4sIGNsZW4pLAogCQkJCSAgICAgICAmaXJjb21tX3BhcmFtX2luZm8pOwogCiAJaXJjb21tX3R0eV9kb19ldmVudChzZWxmLCBJUkNPTU1fVFRZX0NPTk5FQ1RfSU5ESUNBVElPTiwgTlVMTCwgTlVMTCk7CkBAIC01NjYsMTQgKzU2NiwxNCBAQAogCiAJaWYgKCFzZWxmLT50dHkpCiAJCXJldHVybjsKLQkKKwogCWRlbF90aW1lcigmc2VsZi0+d2F0Y2hkb2dfdGltZXIpOwogCi0JLyogCisJLyoKIAkgKiBJckNPTU0gbGluayBpcyBub3cgdXAsIGFuZCBpZiB3ZSBhcmUgbm90IHVzaW5nIGhhcmR3YXJlCiAJICogZmxvdy1jb250cm9sLCB0aGVuIGRlY2xhcmUgdGhlIGhhcmR3YXJlIGFzIHJ1bm5pbmcuIE90aGVyd2lzZSB3ZQogCSAqIHdpbGwgaGF2ZSB0byB3YWl0IGZvciB0aGUgcGVlciBkZXZpY2UgKERDRSkgdG8gcmFpc2UgdGhlIENUUwotCSAqIGxpbmUuICAKKwkgKiBsaW5lLgogCSAqLwogCWlmICgoc2VsZi0+ZmxhZ3MgJiBBU1lOQ19DVFNfRkxPVykgJiYgKChzZWxmLT5zZXR0aW5ncy5kY2UgJiBJUkNPTU1fQ1RTKSA9PSAwKSkgewogCQlJUkRBX0RFQlVHKDAsICIlcygpLCB3YWl0aW5nIGZvciBDVFMgLi4uXG4iLCBfX0ZVTkNUSU9OX18gKTsKQEAgLTU4Miw3ICs1ODIsNyBAQAogCQlJUkRBX0RFQlVHKDEsICIlcygpLCBzdGFydGluZyBoYXJkd2FyZSFcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAJCXNlbGYtPnR0eS0+aHdfc3RvcHBlZCA9IDA7Ci0JCisKIAkJLyogV2FrZSB1cCBwcm9jZXNzZXMgYmxvY2tlZCBvbiBvcGVuICovCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2VsZi0+b3Blbl93YWl0KTsKIAl9CkBAIC01OTMsOCArNTkzLDggQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fdHR5X3N0YXJ0X3dhdGNoZG9nX3RpbWVyIChzZWxmLCB0aW1lb3V0KQogICoKLSAqICAgIFN0YXJ0IHRoZSB3YXRjaGRvZyB0aW1lci4gVGhpcyB0aW1lciBpcyB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSAKLSAqICAgIGNvbm5lY3Rpb24gYXR0ZW1wdCBpcyBzdWNjZXNzZnVsLCBhbmQgaWYgbm90LCB3ZSB3aWxsIHJldHJ5IGFmdGVyIAorICogICAgU3RhcnQgdGhlIHdhdGNoZG9nIHRpbWVyLiBUaGlzIHRpbWVyIGlzIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55CisgKiAgICBjb25uZWN0aW9uIGF0dGVtcHQgaXMgc3VjY2Vzc2Z1bCwgYW5kIGlmIG5vdCwgd2Ugd2lsbCByZXRyeSBhZnRlcgogICogICAgdGhlIHRpbWVvdXQKICAqLwogc3RhdGljIHZvaWQgaXJjb21tX3R0eV9zdGFydF93YXRjaGRvZ190aW1lcihzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwKQEAgLTYxNiw3ICs2MTYsNyBAQAogc3RhdGljIHZvaWQgaXJjb21tX3R0eV93YXRjaGRvZ190aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgZGF0YTsKLQkKKwogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKQEAgLTYzMywxNCArNjMzLDE0IEBACiAgKgogICovCiBpbnQgaXJjb21tX3R0eV9kb19ldmVudChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwgSVJDT01NX1RUWV9FVkVOVCBldmVudCwKLQkJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcmNvbW1fdHR5X2luZm8gKmluZm8pIAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlyY29tbV90dHlfaW5mbyAqaW5mbykKIHsKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybiAtMTspOwogCiAJSVJEQV9ERUJVRygyLCAiJXM6IHN0YXRlPSVzLCBldmVudD0lc1xuIiwgX19GVU5DVElPTl9fICwKIAkJICAgaXJjb21tX3R0eV9zdGF0ZVtzZWxmLT5zdGF0ZV0sIGlyY29tbV90dHlfZXZlbnRbZXZlbnRdKTsKLQkKKwogCXJldHVybiAoKnN0YXRlW3NlbGYtPnN0YXRlXSkoc2VsZiwgZXZlbnQsIHNrYiwgaW5mbyk7CiB9CiAKQEAgLTY1Niw3ICs2NTYsNyBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7CiAKLQlJUkRBX0RFQlVHKDIsICIlczogbmV4dCBzdGF0ZT0lcywgc2VydmljZSB0eXBlPSVkXG4iLCBfX0ZVTkNUSU9OX18gLCAKKwlJUkRBX0RFQlVHKDIsICIlczogbmV4dCBzdGF0ZT0lcywgc2VydmljZSB0eXBlPSVkXG4iLCBfX0ZVTkNUSU9OX18gLAogCQkgICBpcmNvbW1fdHR5X3N0YXRlW3NlbGYtPnN0YXRlXSwgc2VsZi0+c2VydmljZV90eXBlKTsKIAkqLwogCXNlbGYtPnN0YXRlID0gc3RhdGU7CkBAIC02NjgsOSArNjY4LDkgQEAKICAqICAgIEp1c3QgaGFuZ2luZyBhcm91bmQKICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJjb21tX3R0eV9zdGF0ZV9pZGxlKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCAKLQkJCQkgSVJDT01NX1RUWV9FVkVOVCBldmVudCwgCi0JCQkJIHN0cnVjdCBza19idWZmICpza2IsIAorc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX2lkbGUoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsCisJCQkJIElSQ09NTV9UVFlfRVZFTlQgZXZlbnQsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJIHN0cnVjdCBpcmNvbW1fdHR5X2luZm8gKmluZm8pCiB7CiAJaW50IHJldCA9IDA7CkBAIC02NzksMTAgKzY3OSwxMCBAQAogCQkgICBpcmNvbW1fdHR5X3N0YXRlW3NlbGYtPnN0YXRlXSwgaXJjb21tX3R0eV9ldmVudFtldmVudF0pOwogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIElSQ09NTV9UVFlfQVRUQUNIX0NBQkxFOgotCQkvKiBUcnkgdG8gZGlzY292ZXIgYW55IHJlbW90ZSBkZXZpY2VzICovCQkKKwkJLyogVHJ5IHRvIGRpc2NvdmVyIGFueSByZW1vdGUgZGV2aWNlcyAqLwogCQlpcmNvbW1fdHR5X3N0YXJ0X3dhdGNoZG9nX3RpbWVyKHNlbGYsIDMqSFopOwogCQlpcmNvbW1fdHR5X25leHRfc3RhdGUoc2VsZiwgSVJDT01NX1RUWV9TRUFSQ0gpOwotCQkKKwogCQlpcmxtcF9kaXNjb3ZlcnlfcmVxdWVzdChESVNDT1ZFUllfREVGQVVMVF9TTE9UUyk7CiAJCWJyZWFrOwogCWNhc2UgSVJDT01NX1RUWV9ESVNDT1ZFUllfSU5ESUNBVElPTjoKQEAgLTcwMSw3ICs3MDEsNyBAQAogCQlpcmlhcF9nZXR2YWx1ZWJ5Y2xhc3NfcmVxdWVzdChzZWxmLT5pcmlhcCwKIAkJCQkJICAgICAgc2VsZi0+c2FkZHIsIHNlbGYtPmRhZGRyLAogCQkJCQkgICAgICAiSXJEQTpJckNPTU0iLCAiUGFyYW1ldGVycyIpOwotCQkKKwogCQlpcmNvbW1fdHR5X3N0YXJ0X3dhdGNoZG9nX3RpbWVyKHNlbGYsIDMqSFopOwogCQlpcmNvbW1fdHR5X25leHRfc3RhdGUoc2VsZiwgSVJDT01NX1RUWV9RVUVSWV9QQVJBTUVURVJTKTsKIAkJYnJlYWs7CkBAIC03MzIsOSArNzMyLDkgQEAKICAqICAgIFRyeWluZyB0byBkaXNjb3ZlciBhbiBJckNPTU0gZGV2aWNlCiAgKgogICovCi1zdGF0aWMgaW50IGlyY29tbV90dHlfc3RhdGVfc2VhcmNoKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCAKLQkJCQkgICBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LCAKLQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKK3N0YXRpYyBpbnQgaXJjb21tX3R0eV9zdGF0ZV9zZWFyY2goc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsCisJCQkJICAgSVJDT01NX1RUWV9FVkVOVCBldmVudCwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBpcmNvbW1fdHR5X2luZm8gKmluZm8pCiB7CiAJaW50IHJldCA9IDA7CkBAIC03NTIsMTkgKzc1MiwxOSBAQAogCQkJCSAgICAgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KLQkJCisKIAkJc2VsZi0+aXJpYXAgPSBpcmlhcF9vcGVuKExTQVBfQU5ZLCBJQVNfQ0xJRU5ULCBzZWxmLAogCQkJCQkgaXJjb21tX3R0eV9nZXR2YWx1ZV9jb25maXJtKTsKLQkJCisKIAkJaWYgKHNlbGYtPnNlcnZpY2VfdHlwZSA9PSBJUkNPTU1fM19XSVJFX1JBVykgewogCQkJaXJpYXBfZ2V0dmFsdWVieWNsYXNzX3JlcXVlc3Qoc2VsZi0+aXJpYXAsIHNlbGYtPnNhZGRyLAotCQkJCQkJICAgICAgc2VsZi0+ZGFkZHIsICJJckxQVCIsIAorCQkJCQkJICAgICAgc2VsZi0+ZGFkZHIsICJJckxQVCIsCiAJCQkJCQkgICAgICAiSXJEQTpJckxNUDpMc2FwU2VsIik7CiAJCQlpcmNvbW1fdHR5X25leHRfc3RhdGUoc2VsZiwgSVJDT01NX1RUWV9RVUVSWV9MU0FQX1NFTCk7CiAJCX0gZWxzZSB7CiAJCQlpcmlhcF9nZXR2YWx1ZWJ5Y2xhc3NfcmVxdWVzdChzZWxmLT5pcmlhcCwgc2VsZi0+c2FkZHIsCi0JCQkJCQkgICAgICBzZWxmLT5kYWRkciwgCi0JCQkJCQkgICAgICAiSXJEQTpJckNPTU0iLCAKKwkJCQkJCSAgICAgIHNlbGYtPmRhZGRyLAorCQkJCQkJICAgICAgIklyREE6SXJDT01NIiwKIAkJCQkJCSAgICAgICJQYXJhbWV0ZXJzIik7CiAKIAkJCWlyY29tbV90dHlfbmV4dF9zdGF0ZShzZWxmLCBJUkNPTU1fVFRZX1FVRVJZX1BBUkFNRVRFUlMpOwpAQCAtNzgzLDcgKzc4Myw3IEBACiAjaWYgMQogCQkvKiBHaXZlIHVwICovCiAjZWxzZQotCQkvKiBUcnkgdG8gZGlzY292ZXIgYW55IHJlbW90ZSBkZXZpY2VzICovCQkKKwkJLyogVHJ5IHRvIGRpc2NvdmVyIGFueSByZW1vdGUgZGV2aWNlcyAqLwogCQlpcmNvbW1fdHR5X3N0YXJ0X3dhdGNoZG9nX3RpbWVyKHNlbGYsIDMqSFopOwogCQlpcmxtcF9kaXNjb3ZlcnlfcmVxdWVzdChESVNDT1ZFUllfREVGQVVMVF9TTE9UUyk7CiAjZW5kaWYKQEAgLTgwNSw5ICs4MDUsOSBAQAogICogICAgUXVlcnlpbmcgdGhlIHJlbW90ZSBMTS1JQVMgZm9yIElyQ09NTSBwYXJhbWV0ZXJzCiAgKgogICovCi1zdGF0aWMgaW50IGlyY29tbV90dHlfc3RhdGVfcXVlcnlfcGFyYW1ldGVycyhzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwgCi0JCQkJCSAgICAgSVJDT01NX1RUWV9FVkVOVCBldmVudCwgCi0JCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgCitzdGF0aWMgaW50IGlyY29tbV90dHlfc3RhdGVfcXVlcnlfcGFyYW1ldGVycyhzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwKKwkJCQkJICAgICBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgICAgc3RydWN0IGlyY29tbV90dHlfaW5mbyAqaW5mbykKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTgyMiwxMiArODIyLDEyIEBACiAJCQkJICAgICBfX0ZVTkNUSU9OX18pOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQotCQkKKwogCQlzZWxmLT5pcmlhcCA9IGlyaWFwX29wZW4oTFNBUF9BTlksIElBU19DTElFTlQsIHNlbGYsCiAJCQkJCSBpcmNvbW1fdHR5X2dldHZhbHVlX2NvbmZpcm0pOwogCi0JCWlyaWFwX2dldHZhbHVlYnljbGFzc19yZXF1ZXN0KHNlbGYtPmlyaWFwLCBzZWxmLT5zYWRkciwgCi0JCQkJCSAgICAgIHNlbGYtPmRhZGRyLCAiSXJEQTpJckNPTU0iLCAKKwkJaXJpYXBfZ2V0dmFsdWVieWNsYXNzX3JlcXVlc3Qoc2VsZi0+aXJpYXAsIHNlbGYtPnNhZGRyLAorCQkJCQkgICAgICBzZWxmLT5kYWRkciwgIklyREE6SXJDT01NIiwKIAkJCQkJICAgICAgIklyREE6VGlueVRQOkxzYXBTZWwiKTsKIAogCQlpcmNvbW1fdHR5X3N0YXJ0X3dhdGNoZG9nX3RpbWVyKHNlbGYsIDMqSFopOwpAQCAtODM2LDcgKzgzNiw3IEBACiAJY2FzZSBJUkNPTU1fVFRZX1dEX1RJTUVSX0VYUElSRUQ6CiAJCS8qIEdvIGJhY2sgdG8gc2VhcmNoIG1vZGUgKi8KIAkJaXJjb21tX3R0eV9uZXh0X3N0YXRlKHNlbGYsIElSQ09NTV9UVFlfU0VBUkNIKTsKLQkJaXJjb21tX3R0eV9zdGFydF93YXRjaGRvZ190aW1lcihzZWxmLCAzKkhaKTsgCisJCWlyY29tbV90dHlfc3RhcnRfd2F0Y2hkb2dfdGltZXIoc2VsZiwgMypIWik7CiAJCWJyZWFrOwogCWNhc2UgSVJDT01NX1RUWV9DT05ORUNUX0lORElDQVRJT046CiAJCWRlbF90aW1lcigmc2VsZi0+d2F0Y2hkb2dfdGltZXIpOwpAQCAtODYzLDkgKzg2Myw5IEBACiAgKiAgICBRdWVyeSByZW1vdGUgTE0tSUFTIGZvciB0aGUgTFNBUCBzZWxlY3RvciB3aGljaCB3ZSBjYW4gY29ubmVjdCB0bwogICoKICAqLwotc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX3F1ZXJ5X2xzYXBfc2VsKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCAKLQkJCQkJICAgSVJDT01NX1RUWV9FVkVOVCBldmVudCwgCi0JCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsIAorc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX3F1ZXJ5X2xzYXBfc2VsKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLAorCQkJCQkgICBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvICppbmZvKQogewogCWludCByZXQgPSAwOwpAQCAtODc3LDcgKzg3Nyw3IEBACiAJY2FzZSBJUkNPTU1fVFRZX0dPVF9MU0FQU0VMOgogCQkvKiBDb25uZWN0IHRvIHJlbW90ZSBkZXZpY2UgKi8KIAkJcmV0ID0gaXJjb21tX2Nvbm5lY3RfcmVxdWVzdChzZWxmLT5pcmNvbW0sIHNlbGYtPmRsc2FwX3NlbCwKLQkJCQkJICAgICBzZWxmLT5zYWRkciwgc2VsZi0+ZGFkZHIsIAorCQkJCQkgICAgIHNlbGYtPnNhZGRyLCBzZWxmLT5kYWRkciwKIAkJCQkJICAgICBOVUxMLCBzZWxmLT5zZXJ2aWNlX3R5cGUpOwogCQlpcmNvbW1fdHR5X3N0YXJ0X3dhdGNoZG9nX3RpbWVyKHNlbGYsIDMqSFopOwogCQlpcmNvbW1fdHR5X25leHRfc3RhdGUoc2VsZiwgSVJDT01NX1RUWV9TRVRVUCk7CkBAIC05MTIsOSArOTEyLDkgQEAKICAqICAgIFRyeWluZyB0byBjb25uZWN0CiAgKgogICovCi1zdGF0aWMgaW50IGlyY29tbV90dHlfc3RhdGVfc2V0dXAoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsIAotCQkJCSAgSVJDT01NX1RUWV9FVkVOVCBldmVudCwgCi0JCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKK3N0YXRpYyBpbnQgaXJjb21tX3R0eV9zdGF0ZV9zZXR1cChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwKKwkJCQkgIElSQ09NTV9UVFlfRVZFTlQgZXZlbnQsCisJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgc3RydWN0IGlyY29tbV90dHlfaW5mbyAqaW5mbykKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTkyNiwxMCArOTI2LDEwIEBACiAJY2FzZSBJUkNPTU1fVFRZX0NPTk5FQ1RfQ09ORklSTToKIAkJZGVsX3RpbWVyKCZzZWxmLT53YXRjaGRvZ190aW1lcik7CiAJCWlyY29tbV90dHlfaWFzX3VucmVnaXN0ZXIoc2VsZik7Ci0JCQotCQkvKiAKKworCQkvKgogCQkgKiBTZW5kIGluaXRpYWwgcGFyYW1ldGVycy4gVGhpcyB3aWxsIGFsc28gc2VuZCBvdXQgcXVldWVkCi0JCSAqIHBhcmFtZXRlcnMgd2FpdGluZyBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gY29tZSB1cCAKKwkJICogcGFyYW1ldGVycyB3YWl0aW5nIGZvciB0aGUgY29ubmVjdGlvbiB0byBjb21lIHVwCiAJCSAqLwogCQlpcmNvbW1fdHR5X3NlbmRfaW5pdGlhbF9wYXJhbWV0ZXJzKHNlbGYpOwogCQlpcmNvbW1fdHR5X2xpbmtfZXN0YWJsaXNoZWQoc2VsZik7CkBAIC05MzgsNyArOTM4LDcgQEAKIAljYXNlIElSQ09NTV9UVFlfQ09OTkVDVF9JTkRJQ0FUSU9OOgogCQlkZWxfdGltZXIoJnNlbGYtPndhdGNoZG9nX3RpbWVyKTsKIAkJaXJjb21tX3R0eV9pYXNfdW5yZWdpc3RlcihzZWxmKTsKLQkJCisKIAkJLyogQWNjZXB0IGNvbm5lY3Rpb24gKi8KIAkJaXJjb21tX2Nvbm5lY3RfcmVzcG9uc2Uoc2VsZi0+aXJjb21tLCBOVUxMKTsKIAkJaXJjb21tX3R0eV9uZXh0X3N0YXRlKHNlbGYsIElSQ09NTV9UVFlfUkVBRFkpOwpAQCAtOTY2LDkgKzk2Niw5IEBACiAgKiAgICBJckNPTU0gaXMgbm93IGNvbm5lY3RlZAogICoKICAqLwotc3RhdGljIGludCBpcmNvbW1fdHR5X3N0YXRlX3JlYWR5KHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCAKLQkJCQkgIElSQ09NTV9UVFlfRVZFTlQgZXZlbnQsIAotCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgCitzdGF0aWMgaW50IGlyY29tbV90dHlfc3RhdGVfcmVhZHkoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsCisJCQkJICBJUkNPTU1fVFRZX0VWRU5UIGV2ZW50LAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHN0cnVjdCBpcmNvbW1fdHR5X2luZm8gKmluZm8pCiB7CiAJaW50IHJldCA9IDA7CkBAIC05NzYsNyArOTc2LDcgQEAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBJUkNPTU1fVFRZX0RBVEFfUkVRVUVTVDoKIAkJcmV0ID0gaXJjb21tX2RhdGFfcmVxdWVzdChzZWxmLT5pcmNvbW0sIHNrYik7Ci0JCWJyZWFrOwkJCisJCWJyZWFrOwogCWNhc2UgSVJDT01NX1RUWV9ERVRBQ0hfQ0FCTEU6CiAJCWlyY29tbV9kaXNjb25uZWN0X3JlcXVlc3Qoc2VsZi0+aXJjb21tLCBOVUxMKTsKIAkJaXJjb21tX3R0eV9uZXh0X3N0YXRlKHNlbGYsIElSQ09NTV9UVFlfSURMRSk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9pb2N0bC5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfaW9jdGwuYwppbmRleCA3NWUzOWVhLi5hNTE3NGU2IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9pb2N0bC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2lvY3RsLmMKQEAgLTEsMzEgKzEsMzEgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgIAorICoKICAqIEZpbGVuYW1lOiAgICAgIGlyY29tbV90dHlfaW9jdGwuYwotICogVmVyc2lvbjogICAgICAgCi0gKiBEZXNjcmlwdGlvbjogICAKKyAqIFZlcnNpb246CisgKiBEZXNjcmlwdGlvbjoKICAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KICAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICAqIENyZWF0ZWQgYXQ6ICAgIFRodSBKdW4gMTAgMTQ6Mzk6MDkgMTk5OQogICogTW9kaWZpZWQgYXQ6ICAgV2VkIEphbiAgNSAxNDo0NTo0MyAyMDAwCiAgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+Ci0gKiAKKyAqCiAgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKLSAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKLSAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAqICAgICAKKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC03NSw3ICs3NSw3IEBACiAJfQogCWlmIChjZmxhZyAmIENTVE9QQikKIAkJY3ZhbCB8PSBJUkNPTU1fMl9TVE9QX0JJVDsKLQkKKwogCWlmIChjZmxhZyAmIFBBUkVOQikKIAkJY3ZhbCB8PSBJUkNPTU1fUEFSSVRZX0VOQUJMRTsKIAlpZiAoIShjZmxhZyAmIFBBUk9ERCkpCkBAIC04OCw3ICs4OCw3IEBACiAKIAlzZWxmLT5zZXR0aW5ncy5kYXRhX3JhdGUgPSBiYXVkOwogCWlyY29tbV9wYXJhbV9yZXF1ZXN0KHNlbGYsIElSQ09NTV9EQVRBX1JBVEUsIEZBTFNFKTsKLQkKKwogCS8qIENUUyBmbG93IGNvbnRyb2wgZmxhZyBhbmQgbW9kZW0gc3RhdHVzIGludGVycnVwdHMgKi8KIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CiAJCXNlbGYtPmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCXNlbGYtPmZsYWdzICY9IH5BU1lOQ19DSEVDS19DRDsKIAllbHNlCiAJCXNlbGYtPmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOwotI2lmIDAJCisjaWYgMAogCS8qCiAJICogU2V0IHVwIHBhcml0eSBjaGVjayBmbGFnCiAJICovCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkJZHJpdmVyLT5yZWFkX3N0YXR1c19tYXNrIHw9IExTUl9GRSB8IExTUl9QRTsKIAlpZiAoSV9CUktJTlQoZHJpdmVyLT50dHkpIHx8IElfUEFSTVJLKGRyaXZlci0+dHR5KSkKIAkJZHJpdmVyLT5yZWFkX3N0YXR1c19tYXNrIHw9IExTUl9CSTsKLQkKKwogCS8qCiAJICogQ2hhcmFjdGVycyB0byBpZ25vcmUKIAkgKi8KQEAgLTEyNCwxNyArMTI0LDE3IEBACiAJaWYgKElfSUdOQlJLKHNlbGYtPnR0eSkpIHsKIAkJc2VsZi0+aWdub3JlX3N0YXR1c19tYXNrIHw9IExTUl9CSTsKIAkJLyoKLQkJICogSWYgd2UncmUgaWdub3JlIHBhcml0eSBhbmQgYnJlYWsgaW5kaWNhdG9ycywgaWdub3JlIAorCQkgKiBJZiB3ZSdyZSBpZ25vcmUgcGFyaXR5IGFuZCBicmVhayBpbmRpY2F0b3JzLCBpZ25vcmUKIAkJICogb3ZlcnJ1bnMgdG9vLiAoRm9yIHJlYWwgcmF3IHN1cHBvcnQpLgogCQkgKi8KLQkJaWYgKElfSUdOUEFSKHNlbGYtPnR0eSkpIAorCQlpZiAoSV9JR05QQVIoc2VsZi0+dHR5KSkKIAkJCXNlbGYtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBMU1JfT0U7CiAJfQogI2VuZGlmCiAJc2VsZi0+c2V0dGluZ3MuZGF0YV9mb3JtYXQgPSBjdmFsOwogCiAJaXJjb21tX3BhcmFtX3JlcXVlc3Qoc2VsZiwgSVJDT01NX0RBVEFfRk9STUFULCBGQUxTRSk7Ci0gCWlyY29tbV9wYXJhbV9yZXF1ZXN0KHNlbGYsIElSQ09NTV9GTE9XX0NPTlRST0wsIFRSVUUpOworCWlyY29tbV9wYXJhbV9yZXF1ZXN0KHNlbGYsIElSQ09NTV9GTE9XX0NPTlRST0wsIFRSVUUpOwogfQogCiAvKgpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgKiAgICBzaG91bGQgYmUgcHJlcGFyZWQgdG8gYWNjZXB0IHRoZSBjYXNlIHdoZXJlIG9sZCA9PSBOVUxMLCBhbmQgdHJ5IHRvCiAgKiAgICBkbyBzb21ldGhpbmcgcmF0aW9uYWwuCiAgKi8KLXZvaWQgaXJjb21tX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCAKK3ZvaWQgaXJjb21tX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTE1Myw4ICsxNTMsOCBAQAogCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKLQlpZiAoKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSAmJiAKLQkgICAgKFJFTEVWQU5UX0lGTEFHKHR0eS0+dGVybWlvcy0+Y19pZmxhZykgPT0gCisJaWYgKChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykgJiYKKwkgICAgKFJFTEVWQU5UX0lGTEFHKHR0eS0+dGVybWlvcy0+Y19pZmxhZykgPT0KIAkgICAgIFJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpCiAJewogCQlyZXR1cm47CkBAIC0xNjgsMjEgKzE2OCwyMSBAQAogCQlzZWxmLT5zZXR0aW5ncy5kdGUgJj0gfihJUkNPTU1fRFRSfElSQ09NTV9SVFMpOwogCQlpcmNvbW1fcGFyYW1fcmVxdWVzdChzZWxmLCBJUkNPTU1fRFRFLCBUUlVFKTsKIAl9Ci0JCisKIAkvKiBIYW5kbGUgdHJhbnNpdGlvbiBhd2F5IGZyb20gQjAgc3RhdHVzICovCiAJaWYgKCEob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkgJiYKIAkgICAgKGNmbGFnICYgQ0JBVUQpKSB7CiAJCXNlbGYtPnNldHRpbmdzLmR0ZSB8PSBJUkNPTU1fRFRSOwotCQlpZiAoISh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB8fCAKKwkJaWYgKCEodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgfHwKIAkJICAgICF0ZXN0X2JpdChUVFlfVEhST1RUTEVELCAmdHR5LT5mbGFncykpIHsKIAkJCXNlbGYtPnNldHRpbmdzLmR0ZSB8PSBJUkNPTU1fUlRTOwogCQl9CiAJCWlyY29tbV9wYXJhbV9yZXF1ZXN0KHNlbGYsIElSQ09NTV9EVEUsIFRSVUUpOwogCX0KLQkKKwogCS8qIEhhbmRsZSB0dXJuaW5nIG9mZiBDUlRTQ1RTICovCiAJaWYgKChvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpICYmCi0JICAgICEodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykpIAorCSAgICAhKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpKQogCXsKIAkJdHR5LT5od19zdG9wcGVkID0gMDsKIAkJaXJjb21tX3R0eV9zdGFydCh0dHkpOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAvKgogICogRnVuY3Rpb24gaXJjb21tX3R0eV90aW9jbWdldCAodHR5LCBmaWxlKQogICoKLSAqICAgIAorICoKICAqCiAgKi8KIGludCBpcmNvbW1fdHR5X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMjE3LDEyICsyMTcsMTIgQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fdHR5X3Rpb2Ntc2V0ICh0dHksIGZpbGUsIHNldCwgY2xlYXIpCiAgKgotICogICAgCisgKgogICoKICAqLwogaW50IGlyY29tbV90dHlfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCi17IAorewogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKQEAgLTI0OSwyMSArMjQ5LDIxIEBACiAJCXNlbGYtPnNldHRpbmdzLmR0ZSB8PSBJUkNPTU1fREVMVEFfRFRSOwogCiAJaXJjb21tX3BhcmFtX3JlcXVlc3Qoc2VsZiwgSVJDT01NX0RURSwgVFJVRSk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEZ1bmN0aW9uIGdldF9zZXJpYWxfaW5mbyAoZHJpdmVyLCByZXRpbmZvKQogICoKLSAqICAgIAorICoKICAqCiAgKi8KIHN0YXRpYyBpbnQgaXJjb21tX3R0eV9nZXRfc2VyaWFsX2luZm8oc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsCiAJCQkJICAgICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQogewogCXN0cnVjdCBzZXJpYWxfc3RydWN0IGluZm87Ci0gICAKKwogCWlmICghcmV0aW5mbykKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTI3NywxMSArMjc3LDExIEBACiAJaW5mby5jbG9zaW5nX3dhaXQgPSBzZWxmLT5jbG9zaW5nX3dhaXQ7CiAKIAkvKiBGb3IgY29tcGF0aWJpbGl0eSAgKi8KLSAJaW5mby50eXBlID0gUE9SVF8xNjU1MEE7Ci0gCWluZm8ucG9ydCA9IDA7Ci0gCWluZm8uaXJxID0gMDsKKwlpbmZvLnR5cGUgPSBQT1JUXzE2NTUwQTsKKwlpbmZvLnBvcnQgPSAwOworCWluZm8uaXJxID0gMDsKIAlpbmZvLnhtaXRfZmlmb19zaXplID0gMDsKLQlpbmZvLmh1YjYgPSAwOyAgIAorCWluZm8uaHViNiA9IDA7CiAJaW5mby5jdXN0b21fZGl2aXNvciA9IDA7CiAKIAlpZiAoY29weV90b191c2VyKHJldGluZm8sICZpbmZvLCBzaXplb2YoKnJldGluZm8pKSkKQEAgLTI5Myw3ICsyOTMsNyBAQAogLyoKICAqIEZ1bmN0aW9uIHNldF9zZXJpYWxfaW5mbyAoZHJpdmVyLCBuZXdfaW5mbykKICAqCi0gKiAgICAKKyAqCiAgKgogICovCiBzdGF0aWMgaW50IGlyY29tbV90dHlfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLApAQCAtMzExLDcgKzMxMSw3IEBACiAKIAlzdGF0ZSA9IHNlbGYKIAlvbGRfc3RhdGUgPSAqc2VsZjsKLSAgCisKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkJaWYgKChuZXdfc2VyaWFsLmJhdWRfYmFzZSAhPSBzdGF0ZS0+c2V0dGluZ3MuZGF0YV9yYXRlKSB8fAogCQkgICAgKG5ld19zZXJpYWwuY2xvc2VfZGVsYXkgIT0gc3RhdGUtPmNsb3NlX2RlbGF5KSB8fApAQCAtMzY4LDEwICszNjgsMTAgQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmNvbW1fdHR5X2lvY3RsICh0dHksIGZpbGUsIGNtZCwgYXJnKQogICoKLSAqICAgIAorICoKICAqCiAgKi8KLWludCBpcmNvbW1fdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCAKK2ludCBpcmNvbW1fdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIHR0eS0+ZHJpdmVyX2RhdGE7CkBAIC00MTYsNyArNDE2LDcgQEAKIAkJICAgIHB1dF91c2VyKGNub3cuYnJrLCAmcF9jdXNlci0+YnJrKSB8fAogCQkgICAgcHV0X3VzZXIoY25vdy5idWZfb3ZlcnJ1biwgJnBfY3VzZXItPmJ1Zl9vdmVycnVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwotI2VuZGlmCQkKKyNlbmRpZgogCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PSU9DVExDTUQ7ICAvKiBpb2N0bHMgd2hpY2ggd2UgbXVzdCBpZ25vcmUgKi8KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMgYi9uZXQvaXJkYS9pcmRhX2RldmljZS5jCmluZGV4IDdlN2EzMTcuLmU3MTc4MDEgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKKysrIGIvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYwpAQCAtMzQxLDExICszNDEsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgaXJkYV9kZXZpY2Vfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICAgICAgZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAwOwotICAgICAgICBkZXYtPmFkZHJfbGVuICAgICAgICA9IExBUF9BTEVOOworCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gMDsKKwlkZXYtPmFkZHJfbGVuICAgICAgICA9IExBUF9BTEVOOwogCi0gICAgICAgIGRldi0+dHlwZSAgICAgICAgICAgID0gQVJQSFJEX0lSREE7Ci0gICAgICAgIGRldi0+dHhfcXVldWVfbGVuICAgID0gODsgLyogV2luZG93IHNpemUgKyAxIHMtZnJhbWUgKi8KKwlkZXYtPnR5cGUgICAgICAgICAgICA9IEFSUEhSRF9JUkRBOworCWRldi0+dHhfcXVldWVfbGVuICAgID0gODsgLyogV2luZG93IHNpemUgKyAxIHMtZnJhbWUgKi8KIAogCW1lbXNldChkZXYtPmJyb2FkY2FzdCwgMHhmZiwgTEFQX0FMRU4pOwogCkBAIC0zNTQsNyArMzU0LDcgQEAKIH0KIAogLyoKLSAqIEZ1bmNpdG9uICBhbGxvY19pcmRhZGV2IAorICogRnVuY2l0b24gIGFsbG9jX2lyZGFkZXYKICAqIAlBbGxvY2F0ZXMgYW5kIHNldHMgdXAgYW4gSVJEQSBkZXZpY2UgaW4gYSBtYW5uZXIgc2ltaWxhciB0bwogICogCWFsbG9jX2V0aGVyZGV2LgogICovCkBAIC0zODYsOSArMzg2LDkgQEAKIAkvKiBUcnkgdG8gbG9hZCB0aGUgbW9kdWxlIG5lZWRlZCAqLwogCWlmICghcmVnICYmIGNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7CiAJCXNwaW5fdW5sb2NrKCZkb25nbGVzLT5oYl9zcGlubG9jayk7Ci0JCisKIAkJcmVxdWVzdF9tb2R1bGUoImlyZGEtZG9uZ2xlLSVkIiwgdHlwZSk7Ci0JCQorCiAJCXNwaW5fbG9jaygmZG9uZ2xlcy0+aGJfc3BpbmxvY2spOwogCQlyZWcgPSBoYXNoYmluX2ZpbmQoZG9uZ2xlcywgdHlwZSwgTlVMTCk7CiAJfQpAQCAtNDM4LDE1ICs0MzgsMTUgQEAKIAlzcGluX2xvY2soJmRvbmdsZXMtPmhiX3NwaW5sb2NrKTsKIAkvKiBDaGVjayBpZiB0aGlzIGRvbmdsZSBoYXMgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSAqLwogCWlmIChoYXNoYmluX2ZpbmQoZG9uZ2xlcywgbmV3LT50eXBlLCBOVUxMKSkgewotCQlJUkRBX01FU1NBR0UoIiVzOiBEb25nbGUgdHlwZSAleCBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsIAorCQlJUkRBX01FU1NBR0UoIiVzOiBEb25nbGUgdHlwZSAleCBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsCiAJCQkgICAgIF9fRlVOQ1RJT05fXywgbmV3LT50eXBlKTsKLSAgICAgICAgfSBlbHNlIHsKKwl9IGVsc2UgewogCQkvKiBJbnNlcnQgSXJEQSBkb25nbGUgaW50byBoYXNoYmluICovCiAJCWhhc2hiaW5faW5zZXJ0KGRvbmdsZXMsIChpcmRhX3F1ZXVlX3QgKikgbmV3LCBuZXctPnR5cGUsIE5VTEwpOwogCX0KIAlzcGluX3VubG9jaygmZG9uZ2xlcy0+aGJfc3BpbmxvY2spOwogCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChpcmRhX2RldmljZV9yZWdpc3Rlcl9kb25nbGUpOwogCkBAIC00NjIsNyArNDYyLDcgQEAKIAogCXNwaW5fbG9jaygmZG9uZ2xlcy0+aGJfc3BpbmxvY2spOwogCW5vZGUgPSBoYXNoYmluX3JlbW92ZShkb25nbGVzLCBkb25nbGUtPnR5cGUsIE5VTEwpOwotCWlmICghbm9kZSkgCisJaWYgKCFub2RlKQogCQlJUkRBX0VSUk9SKCIlczogZG9uZ2xlIG5vdCBmb3VuZCFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJc3Bpbl91bmxvY2soJmRvbmdsZXMtPmhiX3NwaW5sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyaWFwLmMgYi9uZXQvaXJkYS9pcmlhcC5jCmluZGV4IDhmMWM2ZDYuLjk4YjBmYTkgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyaWFwLmMKKysrIGIvbmV0L2lyZGEvaXJpYXAuYwpAQCAtNzksMTAgKzc5LDEwIEBACiAKIHN0YXRpYyB2b2lkIGlyaWFwX3dhdGNoZG9nX3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcmlhcF9zdGFydF93YXRjaGRvZ190aW1lcihzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIAotCQkJCQkgICAgICBpbnQgdGltZW91dCkgCitzdGF0aWMgaW5saW5lIHZvaWQgaXJpYXBfc3RhcnRfd2F0Y2hkb2dfdGltZXIoc3RydWN0IGlyaWFwX2NiICpzZWxmLAorCQkJCQkgICAgICBpbnQgdGltZW91dCkKIHsKLQlpcmRhX3N0YXJ0X3RpbWVyKCZzZWxmLT53YXRjaGRvZ190aW1lciwgdGltZW91dCwgc2VsZiwgCisJaXJkYV9zdGFydF90aW1lcigmc2VsZi0+d2F0Y2hkb2dfdGltZXIsIHRpbWVvdXQsIHNlbGYsCiAJCQkgaXJpYXBfd2F0Y2hkb2dfdGltZXJfZXhwaXJlZCk7CiB9CiAKQEAgLTY3NCw3ICs2NzQsNyBAQAogCWlmIChhdHRyaWIgPT0gTlVMTCkgewogCQlJUkRBX0RFQlVHKDIsICJMTS1JQVM6IEF0dHJpYnV0ZSAlcyBub3QgZm91bmRcbiIsIGF0dHIpOwogCQlpcmlhcF9nZXR2YWx1ZWJ5Y2xhc3NfcmVzcG9uc2Uoc2VsZiwgb2JqLT5pZCwKLQkJCQkJICAgICAgIElBU19BVFRSSUJfVU5LTk9XTiwgCisJCQkJCSAgICAgICBJQVNfQVRUUklCX1VOS05PV04sCiAJCQkJCSAgICAgICAmaXJpYXNfbWlzc2luZyk7CiAJCXJldHVybjsKIAl9CkBAIC05NzEsNyArOTcxLDcgQEAKIAkiSUFTX1NUUklORyIKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlhc19vYmplY3QgKmlyaWFzX3NlcV9pZHgobG9mZl90IHBvcykgCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYXNfb2JqZWN0ICppcmlhc19zZXFfaWR4KGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGlhc19vYmplY3QgKm9iajsKIApAQCAtOTgwLDcgKzk4MCw3IEBACiAJCWlmIChwb3MtLSA9PSAwKQogCQkJYnJlYWs7CiAJfQotCQkKKwogCXJldHVybiBvYmo7CiB9CiAKQEAgLTk5NSw3ICs5OTUsNyBAQAogewogCSsrKnBvczsKIAotCXJldHVybiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIAorCXJldHVybiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCT8gKHZvaWQgKikgaGFzaGJpbl9nZXRfZmlyc3QoaXJpYXNfb2JqZWN0cykKIAkJOiAodm9pZCAqKSBoYXNoYmluX2dldF9uZXh0KGlyaWFzX29iamVjdHMpOwogfQpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKIAkJZm9yIChhdHRyaWIgPSAoc3RydWN0IGlhc19hdHRyaWIgKikgaGFzaGJpbl9nZXRfZmlyc3Qob2JqLT5hdHRyaWJzKTsKIAkJICAgICBhdHRyaWIgIT0gTlVMTDsKIAkJICAgICBhdHRyaWIgPSAoc3RydWN0IGlhc19hdHRyaWIgKikgaGFzaGJpbl9nZXRfbmV4dChvYmotPmF0dHJpYnMpKSB7Ci0JCSAgICAgCisKIAkJCUlSREFfQVNTRVJUKGF0dHJpYi0+bWFnaWMgPT0gSUFTX0FUVFJJQl9NQUdJQywKIAkJCQkgICAgZ290byBvdXRsb29wOyApOwogCkBAIC0xMDQ2LDE0ICsxMDQ2LDE0IEBACiAJCQkJCSAgIGF0dHJpYi0+dmFsdWUtPnQuc3RyaW5nKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgSUFTX09DVF9TRVE6Ci0JCQkJc2VxX3ByaW50ZihzZXEsICJvY3RldCBzZXF1ZW5jZSAoJWQgYnl0ZXMpXG4iLCAKKwkJCQlzZXFfcHJpbnRmKHNlcSwgIm9jdGV0IHNlcXVlbmNlICglZCBieXRlcylcbiIsCiAJCQkJCSAgIGF0dHJpYi0+dmFsdWUtPmxlbik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElBU19NSVNTSU5HOgogCQkJCXNlcV9wdXRzKHNlcSwgIm1pc3NpbmdcbiIpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlzZXFfcHJpbnRmKHNlcSwgInR5cGUgJWQ/XG4iLCAKKwkJCQlzZXFfcHJpbnRmKHNlcSwgInR5cGUgJWQ/XG4iLAogCQkJCQkgICBhdHRyaWItPnZhbHVlLT50eXBlKTsKIAkJCX0KIAkJCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmlhc19vYmplY3QuYyBiL25ldC9pcmRhL2lyaWFzX29iamVjdC5jCmluZGV4IDJhNTcxYjQuLjRhZGFhZTIgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyaWFzX29iamVjdC5jCisrKyBiL25ldC9pcmRhL2lyaWFzX29iamVjdC5jCkBAIC01Nyw4ICs1Nyw4IEBACiAJCWxlbiA9IG1heDsKIAogCS8qIEFsbG9jYXRlIG5ldyBzdHJpbmcgKi8KLSAgICAgICAgbmV3X3N0ciA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0FUT01JQyk7Ci0gICAgICAgIGlmIChuZXdfc3RyID09IE5VTEwpIHsKKwluZXdfc3RyID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfQVRPTUlDKTsKKwlpZiAobmV3X3N0ciA9PSBOVUxMKSB7CiAJCUlSREFfV0FSTklORygiJXM6IFVuYWJsZSB0byBrbWFsbG9jIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNzgsNyArNzgsNyBAQAogICovCiBzdHJ1Y3QgaWFzX29iamVjdCAqaXJpYXNfbmV3X29iamVjdCggY2hhciAqbmFtZSwgaW50IGlkKQogewotICAgICAgICBzdHJ1Y3QgaWFzX29iamVjdCAqb2JqOworCXN0cnVjdCBpYXNfb2JqZWN0ICpvYmo7CiAKIAlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50LmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnQuYwppbmRleCA5NWNmMTIzLi5hNGMxYzk1IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnQuYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgIAorICoKICAqIEZpbGVuYW1lOiAgICAgIGlybGFuX2NsaWVudC5jCiAgKiBWZXJzaW9uOiAgICAgICAwLjkKICAqIERlc2NyaXB0aW9uOiAgIElyREEgTEFOIEFjY2VzcyBQcm90b2NvbCAoSXJMQU4pIENsaWVudApAQCAtMTEsMTcgKzExLDE3IEBACiAgKiBTb3VyY2VzOiAgICAgICBza2VsZXRvbi5jIGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBDRVNESVMuZ3NmYy5uYXNhLmdvdj4KICAqICAgICAgICAgICAgICAgIHNsaXAuYyBieSBMYXVyZW5jZSBDdWxoYW5lLCA8bG96QGhvbG1lcy5kZW1vbi5jby51az4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdXdhbHQubmwubXVnbmV0Lm9yZz4KLSAqIAotICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICoKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LAogICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgotICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTU0LDM1ICs1NCwzNSBAQAogCiAjdW5kZWYgQ09ORklHX0lSTEFOX0dSQVRVSVRPVVNfQVJQCiAKLXN0YXRpYyB2b2lkIGlybGFuX2NsaWVudF9jdHJsX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKLQkJCQkJCSAgICBMTV9SRUFTT04gcmVhc29uLCAKK3N0YXRpYyB2b2lkIGlybGFuX2NsaWVudF9jdHJsX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAorCQkJCQkJICAgIExNX1JFQVNPTiByZWFzb24sCiAJCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKik7Ci1zdGF0aWMgaW50IGlybGFuX2NsaWVudF9jdHJsX2RhdGFfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKK3N0YXRpYyBpbnQgaXJsYW5fY2xpZW50X2N0cmxfZGF0YV9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCiAJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgdm9pZCBpcmxhbl9jbGllbnRfY3RybF9jb25uZWN0X2NvbmZpcm0odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCi0JCQkJCSAgICAgIHN0cnVjdCBxb3NfaW5mbyAqcW9zLCAKK3N0YXRpYyB2b2lkIGlybGFuX2NsaWVudF9jdHJsX2Nvbm5lY3RfY29uZmlybSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAorCQkJCQkgICAgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywKIAkJCQkJICAgICAgX191MzIgbWF4X3NkdV9zaXplLAogCQkJCQkgICAgICBfX3U4IG1heF9oZWFkZXJfc2l6ZSwKIAkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKik7Ci1zdGF0aWMgdm9pZCBpcmxhbl9jaGVja19yZXNwb25zZV9wYXJhbShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGNoYXIgKnBhcmFtLCAKK3N0YXRpYyB2b2lkIGlybGFuX2NoZWNrX3Jlc3BvbnNlX3BhcmFtKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgY2hhciAqcGFyYW0sCiAJCQkJICAgICAgIGNoYXIgKnZhbHVlLCBpbnQgdmFsX2xlbik7CiBzdGF0aWMgdm9pZCBpcmxhbl9jbGllbnRfb3Blbl9jdHJsX3RzYXAoc3RydWN0IGlybGFuX2NiICpzZWxmKTsKIAogc3RhdGljIHZvaWQgaXJsYW5fY2xpZW50X2tpY2tfdGltZXJfZXhwaXJlZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJsYW5fY2IgKikgZGF0YTsKLQkKKwogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7Ci0JCi0JLyogIAorCisJLyoKIAkgKiBJZiB3ZSBhcmUgaW4gcGVlciBtb2RlLCB0aGUgY2xpZW50IG1heSBub3QgaGF2ZSBnb3QgdGhlIGRpc2NvdmVyeQotCSAqIGluZGljYXRpb24gaXQgbmVlZHMgdG8gbWFrZSBwcm9ncmVzcy4gSWYgdGhlIGNsaWVudCBpcyBzdGlsbCBpbiAKKwkgKiBpbmRpY2F0aW9uIGl0IG5lZWRzIHRvIG1ha2UgcHJvZ3Jlc3MuIElmIHRoZSBjbGllbnQgaXMgc3RpbGwgaW4KIAkgKiBJRExFIHN0YXRlLCB3ZSBtdXN0IGtpY2sgaXQgdG8sIGJ1dCBvbmx5IGlmIHRoZSBwcm92aWRlciBpcyBub3QgSURMRQotIAkgKi8KLQlpZiAoKHNlbGYtPnByb3ZpZGVyLmFjY2Vzc190eXBlID09IEFDQ0VTU19QRUVSKSAmJiAKKwkgKi8KKwlpZiAoKHNlbGYtPnByb3ZpZGVyLmFjY2Vzc190eXBlID09IEFDQ0VTU19QRUVSKSAmJgogCSAgICAoc2VsZi0+Y2xpZW50LnN0YXRlID09IElSTEFOX0lETEUpICYmCiAJICAgIChzZWxmLT5wcm92aWRlci5zdGF0ZSAhPSBJUkxBTl9JRExFKSkgewogCQlpcmxhbl9jbGllbnRfd2FrZXVwKHNlbGYsIHNlbGYtPnNhZGRyLCBzZWxmLT5kYWRkcik7CkBAIC05Miw4ICs5Miw4IEBACiBzdGF0aWMgdm9pZCBpcmxhbl9jbGllbnRfc3RhcnRfa2lja190aW1lcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGludCB0aW1lb3V0KQogewogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQotCWlyZGFfc3RhcnRfdGltZXIoJnNlbGYtPmNsaWVudC5raWNrX3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLCAKKworCWlyZGFfc3RhcnRfdGltZXIoJnNlbGYtPmNsaWVudC5raWNrX3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLAogCQkJIGlybGFuX2NsaWVudF9raWNrX3RpbWVyX2V4cGlyZWQpOwogfQogCkBAIC0xMTAsMTEgKzExMCwxMSBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwogCi0JLyogCisJLyoKIAkgKiBDaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSBhd2FrZSwgb3IgaWYgd2UgYXJlIGEgcHJvdmlkZXIgaW4gZGlyZWN0CiAJICogbW9kZSAoaW4gdGhhdCBjYXNlIHdlIG11c3QgbGVhdmUgdGhlIGNsaWVudCBpZGxlCiAJICovCi0JaWYgKChzZWxmLT5jbGllbnQuc3RhdGUgIT0gSVJMQU5fSURMRSkgfHwgCisJaWYgKChzZWxmLT5jbGllbnQuc3RhdGUgIT0gSVJMQU5fSURMRSkgfHwKIAkgICAgKHNlbGYtPnByb3ZpZGVyLmFjY2Vzc190eXBlID09IEFDQ0VTU19ESVJFQ1QpKQogCXsKIAkJCUlSREFfREVCVUcoMCwgIiVzKCksIGFscmVhZHkgYXdha2UhXG4iLCBfX0ZVTkNUSU9OX18gKTsKQEAgLTEzNSw3ICsxMzUsNyBAQAogCWlybGFuX29wZW5fZGF0YV90c2FwKHNlbGYpOwogCiAJaXJsYW5fZG9fY2xpZW50X2V2ZW50KHNlbGYsIElSTEFOX0RJU0NPVkVSWV9JTkRJQ0FUSU9OLCBOVUxMKTsKLQkKKwogCS8qIFN0YXJ0IGtpY2sgdGltZXIgKi8KIAlpcmxhbl9jbGllbnRfc3RhcnRfa2lja190aW1lcihzZWxmLCAyKkhaKTsKIH0KQEAgLTE0OCwxMSArMTQ4LDExIEBACiAgKi8KIHZvaWQgaXJsYW5fY2xpZW50X2Rpc2NvdmVyeV9pbmRpY2F0aW9uKGRpc2NpbmZvX3QgKmRpc2NvdmVyeSwKIAkJCQkgICAgICAgRElTQ09WRVJZX01PREUgbW9kZSwKLQkJCQkgICAgICAgdm9pZCAqcHJpdikgCisJCQkJICAgICAgIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmOwogCV9fdTMyIHNhZGRyLCBkYWRkcjsKLQkKKwogCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAJSVJEQV9BU1NFUlQoZGlzY292ZXJ5ICE9IE5VTEwsIHJldHVybjspOwpAQCAtMTc3LDM1ICsxNzcsMzUgQEAKIAogCQlJUkRBX0RFQlVHKDEsICIlcygpLCBGb3VuZCBpbnN0YW5jZSAoJTA4eCkhXG4iLCBfX0ZVTkNUSU9OX18gLAogCQkgICAgICBkYWRkcik7Ci0JCQorCiAJCWlybGFuX2NsaWVudF93YWtldXAoc2VsZiwgc2FkZHIsIGRhZGRyKTsKIAl9CiBJUkRBX0FTU0VSVF9MQUJFTChvdXQ6KQogCXJjdV9yZWFkX3VubG9jaygpOwogfQotCQorCiAvKgogICogRnVuY3Rpb24gaXJsYW5fY2xpZW50X2RhdGFfaW5kaWNhdGlvbiAoaGFuZGxlLCBza2IpCiAgKgogICogICAgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBkYXRhIHRoYXQgaXMgcmVjZWl2ZWQgb24gdGhlIGNvbnRyb2wgY2hhbm5lbAogICoKICAqLwotc3RhdGljIGludCBpcmxhbl9jbGllbnRfY3RybF9kYXRhX2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCitzdGF0aWMgaW50IGlybGFuX2NsaWVudF9jdHJsX2RhdGFfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmOwotCQorCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7Ci0JCisKIAlzZWxmID0gKHN0cnVjdCBpcmxhbl9jYiAqKSBpbnN0YW5jZTsKLQkKKwogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKLQkKLQlpcmxhbl9kb19jbGllbnRfZXZlbnQoc2VsZiwgSVJMQU5fREFUQV9JTkRJQ0FUSU9OLCBza2IpOyAKIAotCS8qIFJlYWR5IGZvciBhIG5ldyBjb21tYW5kICovCQorCWlybGFuX2RvX2NsaWVudF9ldmVudChzZWxmLCBJUkxBTl9EQVRBX0lORElDQVRJT04sIHNrYik7CisKKwkvKiBSZWFkeSBmb3IgYSBuZXcgY29tbWFuZCAqLwogCUlSREFfREVCVUcoMiwgIiVzKCksIGNsZWFyaW5nIHR4X2J1c3lcbiIsIF9fRlVOQ1RJT05fXyApOwogCXNlbGYtPmNsaWVudC50eF9idXN5ID0gRkFMU0U7CiAKQEAgLTIxNSwyNyArMjE1LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlybGFuX2NsaWVudF9jdHJsX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKLQkJCQkJCSAgICBMTV9SRUFTT04gcmVhc29uLCAKLQkJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqdXNlcmRhdGEpIAorc3RhdGljIHZvaWQgaXJsYW5fY2xpZW50X2N0cmxfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCisJCQkJCQkgICAgTE1fUkVBU09OIHJlYXNvbiwKKwkJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqdXNlcmRhdGEpCiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmOwogCXN0cnVjdCB0c2FwX2NiICp0c2FwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlJUkRBX0RFQlVHKDQsICIlcygpLCByZWFzb249JWRcbiIsIF9fRlVOQ1RJT05fXyAsIHJlYXNvbik7Ci0JCisKIAlzZWxmID0gKHN0cnVjdCBpcmxhbl9jYiAqKSBpbnN0YW5jZTsKIAl0c2FwID0gKHN0cnVjdCB0c2FwX2NiICopIHNhcDsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7Ci0JSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwkKKwlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQodHNhcCAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVCh0c2FwLT5tYWdpYyA9PSBUVFBfVFNBUF9NQUdJQywgcmV0dXJuOyk7Ci0JCisKIAlJUkRBX0FTU0VSVCh0c2FwID09IHNlbGYtPmNsaWVudC50c2FwX2N0cmwsIHJldHVybjspOwogCi0gICAgICAgCS8qIFJlbW92ZSBmcmFtZXMgcXVldWVkIG9uIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KKwkvKiBSZW1vdmUgZnJhbWVzIHF1ZXVlZCBvbiB0aGUgY29udHJvbCBjaGFubmVsICovCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2VsZi0+Y2xpZW50LnR4cSkpICE9IE5VTEwpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KQEAgLTI3Miw3ICsyNzIsNyBAQAogCW5vdGlmeS5kaXNjb25uZWN0X2luZGljYXRpb24gPSBpcmxhbl9jbGllbnRfY3RybF9kaXNjb25uZWN0X2luZGljYXRpb247CiAJbm90aWZ5Lmluc3RhbmNlID0gc2VsZjsKIAlzdHJsY3B5KG5vdGlmeS5uYW1lLCAiSXJMQU4gY3RybCAoYykiLCBzaXplb2Yobm90aWZ5Lm5hbWUpKTsKLQkKKwogCXRzYXAgPSBpcnR0cF9vcGVuX3RzYXAoTFNBUF9BTlksIERFRkFVTFRfSU5JVElBTF9DUkVESVQsICZub3RpZnkpOwogCWlmICghdHNhcCkgewogCQlJUkRBX0RFQlVHKDIsICIlcygpLCBHb3Qgbm8gdHNhcCFcbiIsIF9fRlVOQ1RJT05fXyApOwpAQCAtMjg3LDExICsyODcsMTEgQEAKICAqICAgIENvbm5lY3Rpb24gdG8gcGVlciBJckxBTiBsYXllIGNvbmZpcm1lZAogICoKICAqLwotc3RhdGljIHZvaWQgaXJsYW5fY2xpZW50X2N0cmxfY29ubmVjdF9jb25maXJtKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAotCQkJCQkgICAgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywgCitzdGF0aWMgdm9pZCBpcmxhbl9jbGllbnRfY3RybF9jb25uZWN0X2NvbmZpcm0odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKKwkJCQkJICAgICAgc3RydWN0IHFvc19pbmZvICpxb3MsCiAJCQkJCSAgICAgIF9fdTMyIG1heF9zZHVfc2l6ZSwKIAkJCQkJICAgICAgX191OCBtYXhfaGVhZGVyX3NpemUsCi0JCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpIAorCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZjsKIApAQCAtMzE2LDcgKzMxNiw3IEBACiAgKiAgICBQcmludCByZXR1cm4gY29kZSBvZiByZXF1ZXN0IHRvIHBlZXIgSXJMQU4gbGF5ZXIuCiAgKgogICovCi1zdGF0aWMgdm9pZCBwcmludF9yZXRfY29kZShfX3U4IGNvZGUpIAorc3RhdGljIHZvaWQgcHJpbnRfcmV0X2NvZGUoX191OCBjb2RlKQogewogCXN3aXRjaChjb2RlKSB7CiAJY2FzZSAwOgpAQCAtMzU4LDcgKzM1OCw3IEBACiAvKgogICogRnVuY3Rpb24gaXJsYW5fY2xpZW50X3BhcnNlX3Jlc3BvbnNlIChzZWxmLCBza2IpCiAgKgotICogICAgRXh0cmFjdCBhbGwgcGFyYW1ldGVycyBmcm9tIHJlY2VpdmVkIGJ1ZmZlciwgdGhlbiBmZWVkIHRoZW0gdG8gCisgKiAgICBFeHRyYWN0IGFsbCBwYXJhbWV0ZXJzIGZyb20gcmVjZWl2ZWQgYnVmZmVyLCB0aGVuIGZlZWQgdGhlbSB0bwogICogICAgY2hlY2tfcGFyYW1zIGZvciBwYXJzaW5nCiAgKi8KIHZvaWQgaXJsYW5fY2xpZW50X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTM2OSwzMCArMzY5LDMwIEBACiAJaW50IHJldDsKIAlfX3UxNiB2YWxfbGVuOwogCWludCBpOwotICAgICAgICBjaGFyICpuYW1lOwotICAgICAgICBjaGFyICp2YWx1ZTsKKwljaGFyICpuYW1lOworCWNoYXIgKnZhbHVlOwogCi0JSVJEQV9BU1NFUlQoc2tiICE9IE5VTEwsIHJldHVybjspOwkKLQkKKwlJUkRBX0FTU0VSVChza2IgIT0gTlVMTCwgcmV0dXJuOyk7CisKIAlJUkRBX0RFQlVHKDQsICIlcygpIHNrYi0+bGVuPSVkXG4iLCBfX0ZVTkNUSU9OX18gLCAoaW50KSBza2ItPmxlbik7Ci0JCisKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKLQkKKwogCWlmICghc2tiKSB7CiAJCUlSREFfRVJST1IoIiVzKCksIEdvdCBOVUxMIHNrYiFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9CiAJZnJhbWUgPSBza2ItPmRhdGE7Ci0JCi0JLyogCi0JICogIENoZWNrIHJldHVybiBjb2RlIGFuZCBwcmludCBpdCBpZiBub3Qgc3VjY2VzcyAKKworCS8qCisJICogIENoZWNrIHJldHVybiBjb2RlIGFuZCBwcmludCBpdCBpZiBub3Qgc3VjY2VzcwogCSAqLwogCWlmIChmcmFtZVswXSkgewogCQlwcmludF9yZXRfY29kZShmcmFtZVswXSk7CiAJCXJldHVybjsKIAl9Ci0JCisKIAluYW1lID0ga21hbGxvYygyNTUsIEdGUF9BVE9NSUMpOwogCWlmICghbmFtZSkKIAkJcmV0dXJuOwpAQCAtNDA2LDExICs0MDYsMTEgQEAKIAljb3VudCA9IGZyYW1lWzFdOwogCiAJSVJEQV9ERUJVRyg0LCAiJXMoKSwgZ290ICVkIHBhcmFtZXRlcnNcbiIsIF9fRlVOQ1RJT05fXyAsIGNvdW50KTsKLQkKKwogCXB0ciA9IGZyYW1lKzI7CiAKIAkvKiBGb3IgYWxsIHBhcmFtZXRlcnMgKi8KLSAJZm9yIChpPTA7IGk8Y291bnQ7aSsrKSB7CisJZm9yIChpPTA7IGk8Y291bnQ7aSsrKSB7CiAJCXJldCA9IGlybGFuX2V4dHJhY3RfcGFyYW0ocHRyLCBuYW1lLCB2YWx1ZSwgJnZhbF9sZW4pOwogCQlpZiAocmV0IDwgMCkgewogCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSXJMQU4sIEVycm9yIVxuIiwgX19GVU5DVElPTl9fICk7CkBAIC00MTgsNyArNDE4LDcgQEAKIAkJfQogCQlwdHIgKz0gcmV0OwogCQlpcmxhbl9jaGVja19yZXNwb25zZV9wYXJhbShzZWxmLCBuYW1lLCB2YWx1ZSwgdmFsX2xlbik7Ci0gCX0KKwl9CiAJLyogQ2xlYW51cCAqLwogCWtmcmVlKG5hbWUpOwogCWtmcmVlKHZhbHVlKTsKQEAgLTQzMCw4ICs0MzAsOCBAQAogICogICAgIENoZWNrIHdoaWNoIHBhcmFtZXRlciBpcyByZWNlaXZlZCBhbmQgdXBkYXRlIGxvY2FsIHZhcmlhYmxlcwogICoKICAqLwotc3RhdGljIHZvaWQgaXJsYW5fY2hlY2tfcmVzcG9uc2VfcGFyYW0oc3RydWN0IGlybGFuX2NiICpzZWxmLCBjaGFyICpwYXJhbSwgCi0JCQkJICAgICAgIGNoYXIgKnZhbHVlLCBpbnQgdmFsX2xlbikgCitzdGF0aWMgdm9pZCBpcmxhbl9jaGVja19yZXNwb25zZV9wYXJhbShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGNoYXIgKnBhcmFtLAorCQkJCSAgICAgICBjaGFyICp2YWx1ZSwgaW50IHZhbF9sZW4pCiB7CiAJX191MTYgdG1wX2NwdTsgLyogVGVtcG9yYXJ5IHZhbHVlIGluIGhvc3Qgb3JkZXIgKi8KIAlfX3U4ICpieXRlczsKQEAgLTQ2NSw3ICs0NjUsNyBAQAogCQkJc2VsZi0+Y2xpZW50LmZpbHRlcl90eXBlIHw9IElSTEFOX0JST0FEQ0FTVDsKIAkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAiSVBYX1NPQ0tFVCIpID09IDApCiAJCQlzZWxmLT5jbGllbnQuZmlsdGVyX3R5cGUgfD0gSVJMQU5fSVBYX1NPQ0tFVDsKLQkJCisKIAl9CiAJaWYgKHN0cmNtcChwYXJhbSwgIkFDQ0VTU19UWVBFIikgPT0gMCkgewogCQlpZiAoc3RyY21wKHZhbHVlLCAiRElSRUNUIikgPT0gMCkKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCX0KIAkvKiBJUkxBTiB2ZXJzaW9uICovCiAJaWYgKHN0cmNtcChwYXJhbSwgIklSTEFOX1ZFUiIpID09IDApIHsKLQkJSVJEQV9ERUJVRyg0LCAiSXJMQU4gdmVyc2lvbiAlZC4lZFxuIiwgKF9fdTgpIHZhbHVlWzBdLCAKKwkJSVJEQV9ERUJVRyg0LCAiSXJMQU4gdmVyc2lvbiAlZC4lZFxuIiwgKF9fdTgpIHZhbHVlWzBdLAogCQkgICAgICAoX191OCkgdmFsdWVbMV0pOwogCiAJCXNlbGYtPnZlcnNpb25bMF0gPSB2YWx1ZVswXTsKQEAgLTQ5NywxNyArNDk3LDE3IEBACiAJCW1lbWNweSgmdG1wX2NwdSwgdmFsdWUsIDIpOyAvKiBBbGlnbiB2YWx1ZSAqLwogCQlsZTE2X3RvX2NwdXMoJnRtcF9jcHUpOyAgICAgLyogQ29udmVydCB0byBob3N0IG9yZGVyICovCiAJCXNlbGYtPmNsaWVudC5yZWN2X2FyYl92YWwgPSB0bXBfY3B1OwotCQlJUkRBX0RFQlVHKDIsICIlcygpLCByZWNlaXZlIGFyYiB2YWw9JWRcbiIsIF9fRlVOQ1RJT05fXyAsIAorCQlJUkRBX0RFQlVHKDIsICIlcygpLCByZWNlaXZlIGFyYiB2YWw9JWRcbiIsIF9fRlVOQ1RJT05fXyAsCiAJCQkgICBzZWxmLT5jbGllbnQucmVjdl9hcmJfdmFsKTsKIAl9CiAJaWYgKHN0cmNtcChwYXJhbSwgIk1BWF9GUkFNRSIpID09IDApIHsKIAkJbWVtY3B5KCZ0bXBfY3B1LCB2YWx1ZSwgMik7IC8qIEFsaWduIHZhbHVlICovCiAJCWxlMTZfdG9fY3B1cygmdG1wX2NwdSk7ICAgICAvKiBDb252ZXJ0IHRvIGhvc3Qgb3JkZXIgKi8KIAkJc2VsZi0+Y2xpZW50Lm1heF9mcmFtZSA9IHRtcF9jcHU7Ci0JCUlSREFfREVCVUcoNCwgIiVzKCksIG1heCBmcmFtZT0lZFxuIiwgX19GVU5DVElPTl9fICwgCisJCUlSREFfREVCVUcoNCwgIiVzKCksIG1heCBmcmFtZT0lZFxuIiwgX19GVU5DVElPTl9fICwKIAkJCSAgIHNlbGYtPmNsaWVudC5tYXhfZnJhbWUpOwogCX0KLQkgCisKIAkvKiBSRUNPTk5FQ1RfS0VZLCBpbiBjYXNlIHRoZSBsaW5rIGdvZXMgZG93biEgKi8KIAlpZiAoc3RyY21wKHBhcmFtLCAiUkVDT05ORUNUX0tFWSIpID09IDApIHsKIAkJSVJEQV9ERUJVRyg0LCAiR290IHJlY29ubmVjdCBrZXk6ICIpOwpAQCAtNTIxLDkgKzUyMSw5IEBACiAJaWYgKHN0cmNtcChwYXJhbSwgIkZJTFRFUl9FTlRSWSIpID09IDApIHsKIAkJYnl0ZXMgPSB2YWx1ZTsKIAkJSVJEQV9ERUJVRyg0LCAiRXRoZXJuZXQgYWRkcmVzcyA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkgICAgICBieXRlc1swXSwgYnl0ZXNbMV0sIGJ5dGVzWzJdLCBieXRlc1szXSwgYnl0ZXNbNF0sIAorCQkgICAgICBieXRlc1swXSwgYnl0ZXNbMV0sIGJ5dGVzWzJdLCBieXRlc1szXSwgYnl0ZXNbNF0sCiAJCSAgICAgIGJ5dGVzWzVdKTsKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgCisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCQlzZWxmLT5kZXYtPmRldl9hZGRyW2ldID0gYnl0ZXNbaV07CiAJfQogfQpAQCAtNTM0LDExICs1MzQsMTEgQEAKICAqICAgIEdvdCByZXN1bHRzIGZyb20gcmVtb3RlIExNLUlBUwogICoKICAqLwotdm9pZCBpcmxhbl9jbGllbnRfZ2V0X3ZhbHVlX2NvbmZpcm0oaW50IHJlc3VsdCwgX191MTYgb2JqX2lkLCAKLQkJCQkgICAgc3RydWN0IGlhc192YWx1ZSAqdmFsdWUsIHZvaWQgKnByaXYpIAordm9pZCBpcmxhbl9jbGllbnRfZ2V0X3ZhbHVlX2NvbmZpcm0oaW50IHJlc3VsdCwgX191MTYgb2JqX2lkLAorCQkJCSAgICBzdHJ1Y3QgaWFzX3ZhbHVlICp2YWx1ZSwgdm9pZCAqcHJpdikKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGY7Ci0JCisKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKIAogCUlSREFfQVNTRVJUKHByaXYgIT0gTlVMTCwgcmV0dXJuOyk7CkBAIC01NTMsNyArNTUzLDcgQEAKIAkvKiBDaGVjayBpZiByZXF1ZXN0IHN1Y2NlZWRlZCAqLwogCWlmIChyZXN1bHQgIT0gSUFTX1NVQ0NFU1MpIHsKIAkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZ290IE5VTEwgdmFsdWUhXG4iLCBfX0ZVTkNUSU9OX18gKTsKLQkJaXJsYW5fZG9fY2xpZW50X2V2ZW50KHNlbGYsIElSTEFOX0lBU19QUk9WSURFUl9OT1RfQVZBSUwsIAorCQlpcmxhbl9kb19jbGllbnRfZXZlbnQoc2VsZiwgSVJMQU5fSUFTX1BST1ZJREVSX05PVF9BVkFJTCwKIAkJCQkgICAgICBOVUxMKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NsaWVudF9ldmVudC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50X2V2ZW50LmMKaW5kZXggY2U5NDNiNi4uODQzYWI2ZiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50X2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50X2V2ZW50LmMKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAKKyAqCiAgKiBGaWxlbmFtZTogICAgICBpcmxhbl9jbGllbnRfZXZlbnQuYwogICogVmVyc2lvbjogICAgICAgMC45CiAgKiBEZXNjcmlwdGlvbjogICBJckxBTiBjbGllbnQgc3RhdGUgbWFjaGluZQpAQCAtOCwxNyArOCwxNyBAQAogICogQ3JlYXRlZCBhdDogICAgU3VuIEF1ZyAzMSAyMDoxNDozNyAxOTk3CiAgKiBNb2RpZmllZCBhdDogICBTdW4gRGVjIDI2IDIxOjUyOjI0IDE5OTkKICAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KLSAqIAotICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICoKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LAogICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgotICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM2LDMxICszNiwzMSBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lybGFuX2NsaWVudC5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lybGFuX2V2ZW50Lmg+CiAKLXN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2lkbGUgKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAorc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfaWRsZSAoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9xdWVyeShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LCAKK3N0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX3F1ZXJ5KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfY29ubiAoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwgCitzdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9jb25uIChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2luZm8gKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAorc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfaW5mbyAoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9tZWRpYShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LCAKK3N0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX21lZGlhKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfb3BlbiAoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwgCitzdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9vcGVuIChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX3dhaXQgKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAorc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfd2FpdCAoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9hcmIgIChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LCAKK3N0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2FyYiAgKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfZGF0YSAoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwgCitzdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9kYXRhIChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2Nsb3NlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAorc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfY2xvc2Uoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9zeW5jIChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LCAKK3N0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX3N5bmMgKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgaW50ICgqc3RhdGVbXSkoc3RydWN0IGlybGFuX2NiICosIElSTEFOX0VWRU5UIGV2ZW50LCBzdHJ1Y3Qgc2tfYnVmZiAqKSA9Ci17IAorewogCWlybGFuX2NsaWVudF9zdGF0ZV9pZGxlLAogCWlybGFuX2NsaWVudF9zdGF0ZV9xdWVyeSwKIAlpcmxhbl9jbGllbnRfc3RhdGVfY29ubiwKQEAgLTc0LDggKzc0LDggQEAKIAlpcmxhbl9jbGllbnRfc3RhdGVfc3luYwogfTsKIAotdm9pZCBpcmxhbl9kb19jbGllbnRfZXZlbnQoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwgCi0JCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAKK3ZvaWQgaXJsYW5fZG9fY2xpZW50X2V2ZW50KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwpAQCAtODksMTQgKzg5LDE0IEBACiAgKiAgICBJRExFLCBXZSBhcmUgd2FpdGluZyBmb3IgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZXJlIGlzIGEgcHJvdmlkZXIKICAqICAgIGF2YWlsYWJsZS4KICAqLwotc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfaWRsZShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LCAKLQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAKK3N0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2lkbGUoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuIC0xOyk7Ci0JCisKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBJUkxBTl9ESVNDT1ZFUllfSU5ESUNBVElPTjoKIAkJaWYgKHNlbGYtPmNsaWVudC5pcmlhcCkgewpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCQkJICAgICBfX0ZVTkNUSU9OX18pOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQotCQkKKwogCQlzZWxmLT5jbGllbnQuaXJpYXAgPSBpcmlhcF9vcGVuKExTQVBfQU5ZLCBJQVNfQ0xJRU5ULCBzZWxmLAogCQkJCQkJaXJsYW5fY2xpZW50X2dldF92YWx1ZV9jb25maXJtKTsKIAkJLyogR2V0IHNvbWUgdmFsdWVzIGZyb20gcGVlciBJQVMgKi8KQEAgLTEyMCw3ICsxMjAsNyBAQAogCQlJUkRBX0RFQlVHKDQsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18gLCBldmVudCk7CiAJCWJyZWFrOwogCX0KLQlpZiAoc2tiKSAKKwlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKIAlyZXR1cm4gMDsKQEAgLTEzMywyMyArMTMzLDIzIEBACiAgKiAgICB0byBwcm92aWRlciwganVzdCB3YWl0aW5nIGZvciB0aGUgY29uZmlybS4KICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX3F1ZXJ5KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAotCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAKK3N0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX3F1ZXJ5KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCisJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm4gLTE7KTsKLQkKKwogCXN3aXRjaChldmVudCkgewogCWNhc2UgSVJMQU5fSUFTX1BST1ZJREVSX0FWQUlMOgogCQlJUkRBX0FTU0VSVChzZWxmLT5kdHNhcF9zZWxfY3RybCAhPSAwLCByZXR1cm4gLTE7KTsKIAogCQlzZWxmLT5jbGllbnQub3Blbl9yZXRyaWVzID0gMDsKLQkJCi0JCWlydHRwX2Nvbm5lY3RfcmVxdWVzdChzZWxmLT5jbGllbnQudHNhcF9jdHJsLCAKLQkJCQkgICAgICBzZWxmLT5kdHNhcF9zZWxfY3RybCwgCi0JCQkJICAgICAgc2VsZi0+c2FkZHIsIHNlbGYtPmRhZGRyLCBOVUxMLCAKKworCQlpcnR0cF9jb25uZWN0X3JlcXVlc3Qoc2VsZi0+Y2xpZW50LnRzYXBfY3RybCwKKwkJCQkgICAgICBzZWxmLT5kdHNhcF9zZWxfY3RybCwKKwkJCQkgICAgICBzZWxmLT5zYWRkciwgc2VsZi0+ZGFkZHIsIE5VTEwsCiAJCQkJICAgICAgSVJMQU5fTVRVLCBOVUxMKTsKIAkJaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc2VsZiwgSVJMQU5fQ09OTik7CiAJCWJyZWFrOwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJCWlybGFuX25leHRfY2xpZW50X3N0YXRlKHNlbGYsIElSTEFOX0lETEUpOwogCiAJCS8qIEdpdmUgdGhlIGNsaWVudCBhIGtpY2shICovCi0JCWlmICgoc2VsZi0+cHJvdmlkZXIuYWNjZXNzX3R5cGUgPT0gQUNDRVNTX1BFRVIpICYmIAorCQlpZiAoKHNlbGYtPnByb3ZpZGVyLmFjY2Vzc190eXBlID09IEFDQ0VTU19QRUVSKSAmJgogCQkgICAgKHNlbGYtPnByb3ZpZGVyLnN0YXRlICE9IElSTEFOX0lETEUpKQogCQkJaXJsYW5fY2xpZW50X3dha2V1cChzZWxmLCBzZWxmLT5zYWRkciwgc2VsZi0+ZGFkZHIpOwogCQlicmVhazsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCX0KIAlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg2LDEzICsxODYsMTMgQEAKICAqICAgIGNvbW1hbmRzIHlldC4KICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2Nvbm4oc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwgCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikgCitzdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9jb25uKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCisJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKLQkKKwogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7Ci0JCisKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBJUkxBTl9DT05ORUNUX0NPTVBMRVRFOgogCQkvKiBTZW5kIGdldGluZm8gY21kICovCkBAIC0yMTIsNyArMjEyLDcgQEAKIAl9CiAJaWYgKHNrYikKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMSwyNCArMjIxLDI0IEBACiAgKgogICogICAgSU5GTywgV2UgaGF2ZSBpc3N1ZWQgYSBHZXRJbmZvIGNvbW1hbmQgYW5kIGlzIGF3YWl0aW5nIGEgcmVwbHkuCiAgKi8KLXN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2luZm8oc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwgCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikgCitzdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9pbmZvKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCisJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7Ci0JCisKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBJUkxBTl9EQVRBX0lORElDQVRJT046CiAJCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKLQkKKwogCQlpcmxhbl9jbGllbnRfcGFyc2VfcmVzcG9uc2Uoc2VsZiwgc2tiKTsKLQkJCisKIAkJaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc2VsZiwgSVJMQU5fTUVESUEpOwotCQkKKwogCQlpcmxhbl9nZXRfbWVkaWFfY2hhcihzZWxmKTsKIAkJYnJlYWs7Ci0JCQorCiAJY2FzZSBJUkxBTl9MTVBfRElTQ09OTkVDVDoKIAljYXNlIElSTEFOX0xBUF9ESVNDT05ORUNUOgogCQlpcmxhbl9uZXh0X2NsaWVudF9zdGF0ZShzZWxmLCBJUkxBTl9JRExFKTsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCX0KIAlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjYzLDExICsyNjMsMTEgQEAKICAqICAgIHJlcGx5LgogICoKICAqLwotc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfbWVkaWEoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwgCi0JCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpIAorc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfbWVkaWEoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKLQkKKwogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAKIAlzd2l0Y2goZXZlbnQpIHsKQEAgLTI4OSw3ICsyODksNyBAQAogCX0KIAlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzAwLDQ3ICszMDAsNDcgQEAKICAqICAgIHJlcGx5CiAgKgogICovCi1zdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9vcGVuKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAotCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpIAorc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfb3BlbihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAorCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHFvc19pbmZvIHFvczsKIAogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAogCXN3aXRjaChldmVudCkgewogCWNhc2UgSVJMQU5fREFUQV9JTkRJQ0FUSU9OOgogCQlpcmxhbl9jbGllbnRfcGFyc2VfcmVzcG9uc2Uoc2VsZiwgc2tiKTsKLQkJCisKIAkJLyoKLQkJICogIENoZWNrIGlmIHdlIGhhdmUgZ290IHRoZSByZW1vdGUgVFNBUCBmb3IgZGF0YSAKKwkJICogIENoZWNrIGlmIHdlIGhhdmUgZ290IHRoZSByZW1vdGUgVFNBUCBmb3IgZGF0YQogCQkgKiAgY29tbXVuaWNhdGlvbnMKIAkJICovCi0JICAJSVJEQV9BU1NFUlQoc2VsZi0+ZHRzYXBfc2VsX2RhdGEgIT0gMCwgcmV0dXJuIC0xOyk7CisJCUlSREFfQVNTRVJUKHNlbGYtPmR0c2FwX3NlbF9kYXRhICE9IDAsIHJldHVybiAtMTspOwogCiAJCS8qIENoZWNrIHdoaWNoIGFjY2VzcyB0eXBlIHdlIGFyZSBkZWFsaW5nIHdpdGggKi8KIAkJc3dpdGNoIChzZWxmLT5jbGllbnQuYWNjZXNzX3R5cGUpIHsKIAkJY2FzZSBBQ0NFU1NfUEVFUjoKIAkJICAgIGlmIChzZWxmLT5wcm92aWRlci5zdGF0ZSA9PSBJUkxBTl9PUEVOKSB7Ci0JCQkgICAgCisKIAkJCSAgICBpcmxhbl9uZXh0X2NsaWVudF9zdGF0ZShzZWxmLCBJUkxBTl9BUkIpOwotCQkJICAgIGlybGFuX2RvX2NsaWVudF9ldmVudChzZWxmLCBJUkxBTl9DSEVDS19DT05fQVJCLCAKKwkJCSAgICBpcmxhbl9kb19jbGllbnRfZXZlbnQoc2VsZiwgSVJMQU5fQ0hFQ0tfQ09OX0FSQiwKIAkJCQkJCSAgTlVMTCk7CiAJCSAgICB9IGVsc2UgewotCQkJCisKIAkJCSAgICBpcmxhbl9uZXh0X2NsaWVudF9zdGF0ZShzZWxmLCBJUkxBTl9XQUlUKTsKIAkJICAgIH0KIAkJICAgIGJyZWFrOwogCQljYXNlIEFDQ0VTU19ESVJFQ1Q6CiAJCWNhc2UgQUNDRVNTX0hPU1RFRDoKIAkJCXFvcy5saW5rX2Rpc2NfdGltZS5iaXRzID0gMHgwMTsgLyogMyBzZWNzICovCi0JCQkKLQkJCWlydHRwX2Nvbm5lY3RfcmVxdWVzdChzZWxmLT50c2FwX2RhdGEsIAotCQkJCQkgICAgICBzZWxmLT5kdHNhcF9zZWxfZGF0YSwgCi0JCQkJCSAgICAgIHNlbGYtPnNhZGRyLCBzZWxmLT5kYWRkciwgJnFvcywgCisKKwkJCWlydHRwX2Nvbm5lY3RfcmVxdWVzdChzZWxmLT50c2FwX2RhdGEsCisJCQkJCSAgICAgIHNlbGYtPmR0c2FwX3NlbF9kYXRhLAorCQkJCQkgICAgICBzZWxmLT5zYWRkciwgc2VsZi0+ZGFkZHIsICZxb3MsCiAJCQkJCSAgICAgIElSTEFOX01UVSwgTlVMTCk7Ci0JCQkKKwogCQkJaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc2VsZiwgSVJMQU5fREFUQSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTM1OSw3ICszNTksNyBAQAogCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18gLCBldmVudCk7CiAJCWJyZWFrOwogCX0KLQkKKwogCWlmIChza2IpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIApAQCAtMzczLDEzICszNzMsMTMgQEAKICAqICAgIHByb3ZpZGVyIE9QRU4gc3RhdGUuCiAgKgogICovCi1zdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV93YWl0KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAotCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpIAorc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfd2FpdChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAorCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7Ci0JCisKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwotCQorCiAJc3dpdGNoKGV2ZW50KSB7CiAJY2FzZSBJUkxBTl9QUk9WSURFUl9TSUdOQUw6CiAJCWlybGFuX25leHRfY2xpZW50X3N0YXRlKHNlbGYsIElSTEFOX0FSQik7CkBAIC0zOTgsMzYgKzM5OCwzNiBAQAogCX0KIAlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfYXJiKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAotCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikgCitzdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9hcmIoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKKwkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHFvc19pbmZvIHFvczsKIAogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKLQkKKwogCXN3aXRjaChldmVudCkgewogCWNhc2UgSVJMQU5fQ0hFQ0tfQ09OX0FSQjoKIAkJaWYgKHNlbGYtPmNsaWVudC5yZWN2X2FyYl92YWwgPT0gc2VsZi0+cHJvdmlkZXIuc2VuZF9hcmJfdmFsKSB7CiAJCQlpcmxhbl9uZXh0X2NsaWVudF9zdGF0ZShzZWxmLCBJUkxBTl9DTE9TRSk7CiAJCQlpcmxhbl9jbG9zZV9kYXRhX2NoYW5uZWwoc2VsZik7Ci0JCX0gZWxzZSBpZiAoc2VsZi0+Y2xpZW50LnJlY3ZfYXJiX3ZhbCA8IAotCQkJICAgc2VsZi0+cHJvdmlkZXIuc2VuZF9hcmJfdmFsKSAKKwkJfSBlbHNlIGlmIChzZWxmLT5jbGllbnQucmVjdl9hcmJfdmFsIDwKKwkJCSAgIHNlbGYtPnByb3ZpZGVyLnNlbmRfYXJiX3ZhbCkKIAkJewogCQkJcW9zLmxpbmtfZGlzY190aW1lLmJpdHMgPSAweDAxOyAvKiAzIHNlY3MgKi8KIAogCQkJaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc2VsZiwgSVJMQU5fREFUQSk7Ci0JCQlpcnR0cF9jb25uZWN0X3JlcXVlc3Qoc2VsZi0+dHNhcF9kYXRhLCAKLQkJCQkJICAgICAgc2VsZi0+ZHRzYXBfc2VsX2RhdGEsIAotCQkJCQkgICAgICBzZWxmLT5zYWRkciwgc2VsZi0+ZGFkZHIsICZxb3MsIAorCQkJaXJ0dHBfY29ubmVjdF9yZXF1ZXN0KHNlbGYtPnRzYXBfZGF0YSwKKwkJCQkJICAgICAgc2VsZi0+ZHRzYXBfc2VsX2RhdGEsCisJCQkJCSAgICAgIHNlbGYtPnNhZGRyLCBzZWxmLT5kYWRkciwgJnFvcywKIAkJCQkJICAgICAgSVJMQU5fTVRVLCBOVUxMKTsKIAkJfSBlbHNlIGlmIChzZWxmLT5jbGllbnQucmVjdl9hcmJfdmFsID4KLQkJCSAgIHNlbGYtPnByb3ZpZGVyLnNlbmRfYXJiX3ZhbCkgCisJCQkgICBzZWxmLT5wcm92aWRlci5zZW5kX2FyYl92YWwpCiAJCXsKIAkJCUlSREFfREVCVUcoMiwgIiVzKCksIGxvc3QgdGhlIGJhdHRsZSA6LShcbiIsIF9fRlVOQ1RJT05fXyApOwogCQl9CkBAIC00NDgsNyArNDQ4LDcgQEAKIAl9CiAJaWYgKHNrYikKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ1OSw4ICs0NTksOCBAQAogICogICAgdGhlIGxvY2FsIGFuZCByZW1vdGUgbWFjaGluZXMuCiAgKgogICovCi1zdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9kYXRhKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAotCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpIAorc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfZGF0YShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAorCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCXN3aXRjaChldmVudCkgewogCWNhc2UgSVJMQU5fREFUQV9JTkRJQ0FUSU9OOgogCQlpcmxhbl9jbGllbnRfcGFyc2VfcmVzcG9uc2Uoc2VsZiwgc2tiKTsKLQkJYnJlYWs7CQkKKwkJYnJlYWs7CiAJY2FzZSBJUkxBTl9MTVBfRElTQ09OTkVDVDogLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIElSTEFOX0xBUF9ESVNDT05ORUNUOgogCQlpcmxhbl9uZXh0X2NsaWVudF9zdGF0ZShzZWxmLCBJUkxBTl9JRExFKTsKQEAgLTQ4MSwxOCArNDgxLDE4IEBACiAJfQogCWlmIChza2IpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkKKwogCXJldHVybiAwOwogfQogCiAvKgogICogRnVuY3Rpb24gaXJsYW5fY2xpZW50X3N0YXRlX2Nsb3NlIChzZWxmLCBldmVudCwgc2tiLCBpbmZvKQogICoKLSAqICAgIAorICoKICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2Nsb3NlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAotCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAKK3N0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2Nsb3NlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCisJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKQEAgLTUwNSwxNyArNTA1LDE3IEBACiAvKgogICogRnVuY3Rpb24gaXJsYW5fY2xpZW50X3N0YXRlX3N5bmMgKHNlbGYsIGV2ZW50LCBza2IsIGluZm8pCiAgKgotICogICAgCisgKgogICoKICAqLwotc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfc3luYyhzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LCAKLQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAKK3N0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX3N5bmMoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJaWYgKHNrYikKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKaW5kZXggMzEwNzc2ZC4uOWMzZGM1NyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAKKyAqCiAgKiBGaWxlbmFtZTogICAgICBpcmxhbl9jb21tb24uYwogICogVmVyc2lvbjogICAgICAgMC45CiAgKiBEZXNjcmlwdGlvbjogICBJckRBIExBTiBBY2Nlc3MgUHJvdG9jb2wgSW1wbGVtZW50YXRpb24KQEAgLTgsMTcgKzgsMTcgQEAKICAqIENyZWF0ZWQgYXQ6ICAgIFN1biBBdWcgMzEgMjA6MTQ6MzcgMTk5NwogICogTW9kaWZpZWQgYXQ6ICAgU3VuIERlYyAyNiAyMTo1MzoxMCAxOTk5CiAgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+Ci0gKiAKLSAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCisgKgorICogICAgIENvcHlyaWdodCAoYykgMTk5NywgMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LAogICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgotICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ5LDEyICs0OSwxMiBAQAogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYW5fY29tbW9uLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYW5fY2xpZW50Lmg+Ci0jaW5jbHVkZSA8bmV0L2lyZGEvaXJsYW5fcHJvdmlkZXIuaD4gCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYW5fcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxhbl9ldGguaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxhbl9maWx0ZXIuaD4KIAogCi0vKiAKKy8qCiAgKiBTZW5kIGdyYXR1aXRvdXMgQVJQIHdoZW4gY29ubmVjdGVkIHRvIGEgbmV3IEFQIG9yIG5vdC4gTWF5IGJlIGEgY2xldmVyCiAgKiB0aGluZyB0byBkbywgYnV0IGZvciBzb21lIHJlYXNvbiB0aGUgbWFjaGluZSBjcmFzaGVzIGlmIHlvdSB1c2UgREhDUC4gU28KICAqIGxldHMgbm90IHVzZSBpdCBieSBkZWZhdWx0LgpAQCAtMTA2LDggKzEwNiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJsYW5fY2IgKmlybGFuX29wZW4oX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyKTsKIHN0YXRpYyB2b2lkIF9faXJsYW5fY2xvc2Uoc3RydWN0IGlybGFuX2NiICpzZWxmKTsKLXN0YXRpYyBpbnQgX19pcmxhbl9pbnNlcnRfcGFyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqcGFyYW0sIGludCB0eXBlLCAKLQkJCQlfX3U4IHZhbHVlX2J5dGUsIF9fdTE2IHZhbHVlX3Nob3J0LCAKK3N0YXRpYyBpbnQgX19pcmxhbl9pbnNlcnRfcGFyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqcGFyYW0sIGludCB0eXBlLAorCQkJCV9fdTggdmFsdWVfYnl0ZSwgX191MTYgdmFsdWVfc2hvcnQsCiAJCQkJX191OCAqdmFsdWVfYXJyYXksIF9fdTE2IHZhbHVlX2xlbik7CiBzdGF0aWMgdm9pZCBpcmxhbl9vcGVuX3VuaWNhc3RfYWRkcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOwogc3RhdGljIHZvaWQgaXJsYW5fZ2V0X3VuaWNhc3RfYWRkcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBpcmxhbl9jbGVhbnVwKHZvaWQpIAorc3RhdGljIHZvaWQgX19leGl0IGlybGFuX2NsZWFudXAodm9pZCkKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsICpuZXh0OwogCkBAIC0yMDEsNyArMjAxLDcgQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmxhbl9vcGVuICh2b2lkKQogICoKLSAqICAgIE9wZW4gbmV3IGluc3RhbmNlIG9mIGEgY2xpZW50L3Byb3ZpZGVyLCB3ZSBzaG91bGQgb25seSByZWdpc3RlciB0aGUgCisgKiAgICBPcGVuIG5ldyBpbnN0YW5jZSBvZiBhIGNsaWVudC9wcm92aWRlciwgd2Ugc2hvdWxkIG9ubHkgcmVnaXN0ZXIgdGhlCiAgKiAgICBuZXR3b3JrIGRldmljZSBpZiB0aGlzIGluc3RhbmNlIGlzIG1lbnQgZm9yIGEgcGFydGljdWxhciBjbGllbnQvcHJvdmlkZXIKICAqLwogc3RhdGljIHN0cnVjdCBpcmxhbl9jYiAqaXJsYW5fb3BlbihfX3UzMiBzYWRkciwgX191MzIgZGFkZHIpCkBAIC0yMjksOSArMjI5LDkgQEAKIAkvKiBQcm92aWRlciBhY2Nlc3MgY2FuIG9ubHkgYmUgUEVFUiwgRElSRUNULCBvciBIT1NURUQgKi8KIAlzZWxmLT5wcm92aWRlci5hY2Nlc3NfdHlwZSA9IGFjY2VzczsKIAlpZiAoYWNjZXNzID09IEFDQ0VTU19ESVJFQ1QpIHsKLQkJLyogIAorCQkvKgogCQkgKiBTaW5jZSB3ZSBhcmUgZW11bGF0aW5nIGFuIElyTEFOIHNldmVyIHdlIHdpbGwgaGF2ZSB0bwotCQkgKiBnaXZlIG91cnNlbGYgYW4gZXRoZXJuZXQgYWRkcmVzcyEgIAorCQkgKiBnaXZlIG91cnNlbGYgYW4gZXRoZXJuZXQgYWRkcmVzcyEKIAkJICovCiAJCWRldi0+ZGV2X2FkZHJbMF0gPSAweDQwOwogCQlkZXYtPmRldl9hZGRyWzFdID0gMHgwMDsKQEAgLTI0NSwxNSArMjQ1LDE1IEBACiAJc2VsZi0+ZGlzY29ubmVjdF9yZWFzb24gPSBMTV9VU0VSX1JFUVVFU1Q7CiAJaW5pdF90aW1lcigmc2VsZi0+d2F0Y2hkb2dfdGltZXIpOwogCWluaXRfdGltZXIoJnNlbGYtPmNsaWVudC5raWNrX3RpbWVyKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZWxmLT5vcGVuX3dhaXQpOwkKLQkKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZWxmLT5vcGVuX3dhaXQpOworCiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2VsZi0+Y2xpZW50LnR4cSk7Ci0JCisKIAlpcmxhbl9uZXh0X2NsaWVudF9zdGF0ZShzZWxmLCBJUkxBTl9JRExFKTsKIAlpcmxhbl9uZXh0X3Byb3ZpZGVyX3N0YXRlKHNlbGYsIElSTEFOX0lETEUpOwogCiAJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpKSB7Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZCFcbiIsIAorCQlJUkRBX0RFQlVHKDIsICIlcygpLCByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWQhXG4iLAogCQkJICAgX19GVU5DVElPTl9fICk7CiAJCXNlbGYgPSBOVUxMOwogCQlmcmVlX25ldGRldihkZXYpOwpAQCAtMjY4LDE0ICsyNjgsMTQgQEAKIC8qCiAgKiBGdW5jdGlvbiBfX2lybGFuX2Nsb3NlIChzZWxmKQogICoKLSAqICAgIFRoaXMgZnVuY3Rpb24gY2xvc2VzIGFuZCBkZWFsbG9jYXRlcyB0aGUgSXJMQU4gY2xpZW50IGluc3RhbmNlcy4gQmUgCisgKiAgICBUaGlzIGZ1bmN0aW9uIGNsb3NlcyBhbmQgZGVhbGxvY2F0ZXMgdGhlIElyTEFOIGNsaWVudCBpbnN0YW5jZXMuIEJlCiAgKiAgICBhd2FyZSB0aGF0IG90aGVyIGZ1bmN0aW9ucyB3aGljaCBjYWxscyBjbGllbnRfY2xvc2UoKSBtdXN0CiAgKiAgICByZW1vdmUgc2VsZiBmcm9tIGlybGFucyBsaXN0IGZpcnN0LgogICovCiBzdGF0aWMgdm9pZCBfX2lybGFuX2Nsb3NlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZikKIHsKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKLQkKKwogCUFTU0VSVF9SVE5MKCk7CiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CkBAIC0yODUsOCArMjg1LDggQEAKIAogCS8qIENsb3NlIGFsbCBvcGVuIGNvbm5lY3Rpb25zIGFuZCByZW1vdmUgVFNBUHMgKi8KIAlpcmxhbl9jbG9zZV90c2FwcyhzZWxmKTsKLQkKLQlpZiAoc2VsZi0+Y2xpZW50LmlyaWFwKSAKKworCWlmIChzZWxmLT5jbGllbnQuaXJpYXApCiAJCWlyaWFwX2Nsb3NlKHNlbGYtPmNsaWVudC5pcmlhcCk7CiAKIAkvKiBSZW1vdmUgZnJhbWVzIHF1ZXVlZCBvbiB0aGUgY29udHJvbCBjaGFubmVsICovCkBAIC0zMTYsMTcgKzMxNiwxNyBAQAogc3RhdGljIHZvaWQgaXJsYW5fY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCiAJCQkJICAgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywKIAkJCQkgICAgIF9fdTMyIG1heF9zZHVfc2l6ZSwKLQkJCQkgICAgIF9fdTggbWF4X2hlYWRlcl9zaXplLCAKKwkJCQkgICAgIF9fdTggbWF4X2hlYWRlcl9zaXplLAogCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGY7CiAJc3RydWN0IHRzYXBfY2IgKnRzYXA7CiAKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKLQkKKwogCXNlbGYgPSAoc3RydWN0IGlybGFuX2NiICopIGluc3RhbmNlOwogCXRzYXAgPSAoc3RydWN0IHRzYXBfY2IgKikgc2FwOwotCQorCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQodHNhcCA9PSBzZWxmLT50c2FwX2RhdGEscmV0dXJuOyk7CkBAIC0zNDksOSArMzQ5LDkgQEAKIAlpcmxhbl9kb19jbGllbnRfZXZlbnQoc2VsZiwgSVJMQU5fREFUQV9DT05ORUNUX0lORElDQVRJT04sIE5VTEwpOwogCiAJaWYgKHNlbGYtPnByb3ZpZGVyLmFjY2Vzc190eXBlID09IEFDQ0VTU19QRUVSKSB7Ci0JCS8qIAorCQkvKgogCQkgKiBEYXRhIGNoYW5uZWwgaXMgb3Blbiwgc28gd2UgYXJlIG5vdyBhbGxvd2VkIHRvCi0JCSAqIGNvbmZpZ3VyZSB0aGUgcmVtb3RlIGZpbHRlciAKKwkJICogY29uZmlndXJlIHRoZSByZW1vdGUgZmlsdGVyCiAJCSAqLwogCQlpcmxhbl9nZXRfdW5pY2FzdF9hZGRyKHNlbGYpOwogCQlpcmxhbl9vcGVuX3VuaWNhc3RfYWRkcihzZWxmKTsKQEAgLTM2MSwxMCArMzYxLDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIGlybGFuX2Nvbm5lY3RfY29uZmlybSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAotCQkJCSAgc3RydWN0IHFvc19pbmZvICpxb3MsIAorCQkJCSAgc3RydWN0IHFvc19pbmZvICpxb3MsCiAJCQkJICBfX3UzMiBtYXhfc2R1X3NpemUsCi0JCQkJICBfX3U4IG1heF9oZWFkZXJfc2l6ZSwgCi0JCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAKKwkJCQkgIF9fdTggbWF4X2hlYWRlcl9zaXplLAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGY7CiAKQEAgLTM4MSwxNiArMzgxLDE2IEBACiAJSVJEQV9ERUJVRygwLCAiJXM6IFdlIGFyZSBub3cgY29ubmVjdGVkIVxuIiwgX19GVU5DVElPTl9fKTsKIAlkZWxfdGltZXIoJnNlbGYtPndhdGNoZG9nX3RpbWVyKTsKIAotCS8qIAorCS8qCiAJICogRGF0YSBjaGFubmVsIGlzIG9wZW4sIHNvIHdlIGFyZSBub3cgYWxsb3dlZCB0byBjb25maWd1cmUgdGhlIHJlbW90ZQotCSAqIGZpbHRlciAKKwkgKiBmaWx0ZXIKIAkgKi8KIAlpcmxhbl9nZXRfdW5pY2FzdF9hZGRyKHNlbGYpOwogCWlybGFuX29wZW5fdW5pY2FzdF9hZGRyKHNlbGYpOwotCQorCiAJLyogT3BlbiBicm9hZGNhc3QgYW5kIG11bHRpY2FzdCBmaWx0ZXIgYnkgZGVmYXVsdCAqLwotIAlpcmxhbl9zZXRfYnJvYWRjYXN0X2ZpbHRlcihzZWxmLCBUUlVFKTsKLSAJaXJsYW5fc2V0X211bHRpY2FzdF9maWx0ZXIoc2VsZiwgVFJVRSk7CisJaXJsYW5fc2V0X2Jyb2FkY2FzdF9maWx0ZXIoc2VsZiwgVFJVRSk7CisJaXJsYW5fc2V0X211bHRpY2FzdF9maWx0ZXIoc2VsZiwgVFJVRSk7CiAKIAkvKiBSZWFkeSB0byB0cmFuc2ZlciBFdGhlcm5ldCBmcmFtZXMgKi8KIAluZXRpZl9zdGFydF9xdWV1ZShzZWxmLT5kZXYpOwpAQCAtNDA4LDI5ICs0MDgsMjkgQEAKICAqICAgIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiAoaGFuZGxlKQogICovCiBzdGF0aWMgdm9pZCBpcmxhbl9kaXNjb25uZWN0X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsCi0JCQkJCXZvaWQgKnNhcCwgTE1fUkVBU09OIHJlYXNvbiwgCi0JCQkJCXN0cnVjdCBza19idWZmICp1c2VyZGF0YSkgCisJCQkJCXZvaWQgKnNhcCwgTE1fUkVBU09OIHJlYXNvbiwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhKQogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZjsKIAlzdHJ1Y3QgdHNhcF9jYiAqdHNhcDsKIAogCUlSREFfREVCVUcoMCwgIiVzKCksIHJlYXNvbj0lZFxuIiwgX19GVU5DVElPTl9fICwgcmVhc29uKTsKLQkKKwogCXNlbGYgPSAoc3RydWN0IGlybGFuX2NiICopIGluc3RhbmNlOwogCXRzYXAgPSAoc3RydWN0IHRzYXBfY2IgKikgc2FwOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKLQlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CQorCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVCh0c2FwICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHRzYXAtPm1hZ2ljID09IFRUUF9UU0FQX01BR0lDLCByZXR1cm47KTsKLQkKKwogCUlSREFfQVNTRVJUKHRzYXAgPT0gc2VsZi0+dHNhcF9kYXRhLCByZXR1cm47KTsKIAogCUlSREFfREVCVUcoMiwgIklyTEFOLCBkYXRhIGNoYW5uZWwgZGlzY29ubmVjdGVkIGJ5IHBlZXIhXG4iKTsKIAogCS8qIFNhdmUgcmVhc29uIHNvIHdlIGtub3cgaWYgd2Ugc2hvdWxkIHRyeSB0byByZWNvbm5lY3Qgb3Igbm90ICovCiAJc2VsZi0+ZGlzY29ubmVjdF9yZWFzb24gPSByZWFzb247Ci0JCisKIAlzd2l0Y2ggKHJlYXNvbikgewogCWNhc2UgTE1fVVNFUl9SRVFVRVNUOiAvKiBVc2VyIHJlcXVlc3QgKi8KIAkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVXNlciByZXF1ZXN0ZWRcbiIsIF9fRlVOQ1RJT05fXyApOwpAQCAtNDUxLDcgKzQ1MSw3IEBACiAJCUlSREFfRVJST1IoIiVzKCksIFVua25vd24gZGlzY29ubmVjdCByZWFzb25cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWJyZWFrOwogCX0KLQkKKwogCS8qIElmIHlvdSB3YW50IHRvIHBhc3MgdGhlIHNrYiB0byAqYm90aCogc3RhdGUgbWFjaGluZXMsIHlvdSB3aWxsCiAJICogbmVlZCB0byBza2JfY2xvbmUoKSBpdCwgc28gdGhhdCB5b3UgZG9uJ3QgZnJlZSBpdCB0d2ljZS4KIAkgKiBBcyB0aGUgc3RhdGUgbWFjaGluZXMgZG9uJ3QgbmVlZCBpdCwgZ2l0IHJpZCBvZiBpdCBoZXJlLi4uCkBAIC00NjEsNyArNDYxLDcgQEAKIAogCWlybGFuX2RvX2NsaWVudF9ldmVudChzZWxmLCBJUkxBTl9MTVBfRElTQ09OTkVDVCwgTlVMTCk7CiAJaXJsYW5fZG9fcHJvdmlkZXJfZXZlbnQoc2VsZiwgSVJMQU5fTE1QX0RJU0NPTk5FQ1QsIE5VTEwpOwotCQorCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZWxmLT5vcGVuX3dhaXQpOwogfQogCkBAIC00ODAsMTIgKzQ4MCwxMiBAQAogCQlyZXR1cm47CiAKIAlpcmRhX25vdGlmeV9pbml0KCZub3RpZnkpOwotCQorCiAJbm90aWZ5LmRhdGFfaW5kaWNhdGlvbiAgICAgICA9IGlybGFuX2V0aF9yZWNlaXZlOwogCW5vdGlmeS51ZGF0YV9pbmRpY2F0aW9uICAgICAgPSBpcmxhbl9ldGhfcmVjZWl2ZTsKIAlub3RpZnkuY29ubmVjdF9pbmRpY2F0aW9uICAgID0gaXJsYW5fY29ubmVjdF9pbmRpY2F0aW9uOwogCW5vdGlmeS5jb25uZWN0X2NvbmZpcm0gICAgICAgPSBpcmxhbl9jb25uZWN0X2NvbmZpcm07Ci0gCW5vdGlmeS5mbG93X2luZGljYXRpb24gICAgICAgPSBpcmxhbl9ldGhfZmxvd19pbmRpY2F0aW9uOworCW5vdGlmeS5mbG93X2luZGljYXRpb24gICAgICAgPSBpcmxhbl9ldGhfZmxvd19pbmRpY2F0aW9uOwogCW5vdGlmeS5kaXNjb25uZWN0X2luZGljYXRpb24gPSBpcmxhbl9kaXNjb25uZWN0X2luZGljYXRpb247CiAJbm90aWZ5Lmluc3RhbmNlICAgICAgICAgICAgICA9IHNlbGY7CiAJc3RybGNweShub3RpZnkubmFtZSwgIklyTEFOIGRhdGEiLCBzaXplb2Yobm90aWZ5Lm5hbWUpKTsKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCX0KIAlzZWxmLT50c2FwX2RhdGEgPSB0c2FwOwogCi0JLyogCisJLyoKIAkgKiAgVGhpcyBpcyB0aGUgZGF0YSBUU0FQIHNlbGVjdG9yIHdoaWNoIHdlIHdpbGwgcGFzcyB0byB0aGUgY2xpZW50CiAJICogIHdoZW4gdGhlIGNsaWVudCBhc2sgZm9yIGl0LgogCSAqLwpAQCAtNTE4LDEzICs1MTgsMTMgQEAKIAkJc2VsZi0+dHNhcF9kYXRhID0gTlVMTDsKIAl9CiAJaWYgKHNlbGYtPmNsaWVudC50c2FwX2N0cmwpIHsKLQkJaXJ0dHBfZGlzY29ubmVjdF9yZXF1ZXN0KHNlbGYtPmNsaWVudC50c2FwX2N0cmwsIE5VTEwsIAorCQlpcnR0cF9kaXNjb25uZWN0X3JlcXVlc3Qoc2VsZi0+Y2xpZW50LnRzYXBfY3RybCwgTlVMTCwKIAkJCQkJIFBfTk9STUFMKTsKIAkJaXJ0dHBfY2xvc2VfdHNhcChzZWxmLT5jbGllbnQudHNhcF9jdHJsKTsKIAkJc2VsZi0+Y2xpZW50LnRzYXBfY3RybCA9IE5VTEw7CiAJfQogCWlmIChzZWxmLT5wcm92aWRlci50c2FwX2N0cmwpIHsKLQkJaXJ0dHBfZGlzY29ubmVjdF9yZXF1ZXN0KHNlbGYtPnByb3ZpZGVyLnRzYXBfY3RybCwgTlVMTCwgCisJCWlydHRwX2Rpc2Nvbm5lY3RfcmVxdWVzdChzZWxmLT5wcm92aWRlci50c2FwX2N0cmwsIE5VTEwsCiAJCQkJCSBQX05PUk1BTCk7CiAJCWlydHRwX2Nsb3NlX3RzYXAoc2VsZi0+cHJvdmlkZXIudHNhcF9jdHJsKTsKIAkJc2VsZi0+cHJvdmlkZXIudHNhcF9jdHJsID0gTlVMTDsKQEAgLTU0NSw4ICs1NDUsOCBAQAogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7Ci0JCi0JLyogCisKKwkvKgogCSAqIENoZWNrIGlmIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgYnkgYSBwcmV2aW91cyBwcm92aWRlci4KIAkgKiBJZiB0aGF0IGlzIHRoZSBjYXNlLCB3ZSBqdXN0IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZQogCSAqLwpAQCAtNTYwLDkgKzU2MCw5IEBACiAJCWlyaWFzX29iamVjdF9jaGFuZ2VfYXR0cmlidXRlKCJJckxBTiIsICJJckRBOlRpbnlUUDpMc2FwU2VsIiwKIAkJCQkJICAgICAgbmV3X3ZhbHVlKTsKIAl9Ci0JCi0gICAgICAgIC8qIFJlZ2lzdGVyIFBuUCBvYmplY3Qgb25seSBpZiBub3QgcmVnaXN0ZXJlZCBiZWZvcmUgKi8KLSAgICAgICAgaWYgKCFpcmlhc19maW5kX29iamVjdCgiUG5QIikpIHsKKworCS8qIFJlZ2lzdGVyIFBuUCBvYmplY3Qgb25seSBpZiBub3QgcmVnaXN0ZXJlZCBiZWZvcmUgKi8KKwlpZiAoIWlyaWFzX2ZpbmRfb2JqZWN0KCJQblAiKSkgewogCQlvYmogPSBpcmlhc19uZXdfb2JqZWN0KCJQblAiLCBJQVNfUE5QX0lEKTsKICNpZiAwCiAJCWlyaWFzX2FkZF9zdHJpbmdfYXR0cmliKG9iaiwgIk5hbWUiLCBzeXNjdGxfZGV2bmFtZSwKQEAgLTYwNiwxMCArNjA2LDEwIEBACiAJCXNlbGYtPmNsaWVudC50eF9idXN5ID0gRkFMU0U7CiAJCXJldHVybiAwOwogCX0KLQkKKwogCS8qIENoZWNrIHRoYXQgaXQncyByZWFsbHkgcG9zc2libGUgdG8gc2VuZCBjb21tYW5kcyAqLwotCWlmICgoc2VsZi0+Y2xpZW50LnRzYXBfY3RybCA9PSBOVUxMKSB8fCAKLQkgICAgKHNlbGYtPmNsaWVudC5zdGF0ZSA9PSBJUkxBTl9JRExFKSkgCisJaWYgKChzZWxmLT5jbGllbnQudHNhcF9jdHJsID09IE5VTEwpIHx8CisJICAgIChzZWxmLT5jbGllbnQuc3RhdGUgPT0gSVJMQU5fSURMRSkpCiAJewogCQlzZWxmLT5jbGllbnQudHhfYnVzeSA9IEZBTFNFOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC02NDksNyArNjQ5LDcgQEAKIAlfX3U4ICpmcmFtZTsKIAogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CiAKQEAgLTY2MSwxMiArNjYxLDEyIEBACiAJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgVFRQLCBMTVAsIGFuZCBMQVAgaGVhZGVyICovCiAJc2tiX3Jlc2VydmUoc2tiLCBzZWxmLT5jbGllbnQubWF4X2hlYWRlcl9zaXplKTsKIAlza2JfcHV0KHNrYiwgMik7Ci0JCisKIAlmcmFtZSA9IHNrYi0+ZGF0YTsKLQkKLSAJZnJhbWVbMF0gPSBDTURfR0VUX1BST1ZJREVSX0lORk87CisKKwlmcmFtZVswXSA9IENNRF9HRVRfUFJPVklERVJfSU5GTzsKIAlmcmFtZVsxXSA9IDB4MDA7ICAgICAgICAgICAgICAgICAvKiBaZXJvIHBhcmFtZXRlcnMgKi8KLQkKKwogCWlybGFuX2N0cmxfZGF0YV9yZXF1ZXN0KHNlbGYsIHNrYik7CiB9CiAKQEAgLTY3NiwxNiArNjc2LDE2IEBACiAgKiAgICBTZW5kIGFuIE9wZW4gRGF0YSBDb21tYW5kIHRvIHByb3ZpZGVyCiAgKgogICovCi12b2lkIGlybGFuX29wZW5fZGF0YV9jaGFubmVsKHN0cnVjdCBpcmxhbl9jYiAqc2VsZikgCit2b2lkIGlybGFuX29wZW5fZGF0YV9jaGFubmVsKHN0cnVjdCBpcmxhbl9jYiAqc2VsZikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fdTggKmZyYW1lOwotCQorCiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKLQkKKwogCXNrYiA9IGFsbG9jX3NrYihJUkxBTl9NQVhfSEVBREVSICsgSVJMQU5fQ01EX0hFQURFUiArCiAJCQlJUkxBTl9TVFJJTkdfUEFSQU1FVEVSX0xFTigiTUVESUEiLCAiODAyLjMiKSArCiAJCQlJUkxBTl9TVFJJTkdfUEFSQU1FVEVSX0xFTigiQUNDRVNTX1RZUEUiLCAiRElSRUNUIiksCkBAIC02OTUsMTEgKzY5NSwxMSBAQAogCiAJc2tiX3Jlc2VydmUoc2tiLCBzZWxmLT5jbGllbnQubWF4X2hlYWRlcl9zaXplKTsKIAlza2JfcHV0KHNrYiwgMik7Ci0JCisKIAlmcmFtZSA9IHNrYi0+ZGF0YTsKLQkKKwogCS8qIEJ1aWxkIGZyYW1lICovCi0gCWZyYW1lWzBdID0gQ01EX09QRU5fREFUQV9DSEFOTkVMOworCWZyYW1lWzBdID0gQ01EX09QRU5fREFUQV9DSEFOTkVMOwogCWZyYW1lWzFdID0gMHgwMjsgLyogVHdvIHBhcmFtZXRlcnMgKi8KIAogCWlybGFuX2luc2VydF9zdHJpbmdfcGFyYW0oc2tiLCAiTUVESUEiLCAiODAyLjMiKTsKQEAgLTcxMSwxMSArNzExLDExIEBACiAJaXJsYW5fY3RybF9kYXRhX3JlcXVlc3Qoc2VsZiwgc2tiKTsKIH0KIAotdm9pZCBpcmxhbl9jbG9zZV9kYXRhX2NoYW5uZWwoc3RydWN0IGlybGFuX2NiICpzZWxmKSAKK3ZvaWQgaXJsYW5fY2xvc2VfZGF0YV9jaGFubmVsKHN0cnVjdCBpcmxhbl9jYiAqc2VsZikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fdTggKmZyYW1lOwotCQorCiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwpAQCAtNzMzLDExICs3MzMsMTEgQEAKIAogCXNrYl9yZXNlcnZlKHNrYiwgc2VsZi0+Y2xpZW50Lm1heF9oZWFkZXJfc2l6ZSk7CiAJc2tiX3B1dChza2IsIDIpOwotCQorCiAJZnJhbWUgPSBza2ItPmRhdGE7Ci0JCisKIAkvKiBCdWlsZCBmcmFtZSAqLwotIAlmcmFtZVswXSA9IENNRF9DTE9TRV9EQVRBX0NIQU47CisJZnJhbWVbMF0gPSBDTURfQ0xPU0VfREFUQV9DSEFOOwogCWZyYW1lWzFdID0gMHgwMTsgLyogT25lIHBhcmFtZXRlciAqLwogCiAJaXJsYW5faW5zZXJ0X2J5dGVfcGFyYW0oc2tiLCAiREFUQV9DSEFOIiwgc2VsZi0+ZHRzYXBfc2VsX2RhdGEpOwpAQCAtNzQ4LDcgKzc0OCw3IEBACiAvKgogICogRnVuY3Rpb24gaXJsYW5fb3Blbl91bmljYXN0X2FkZHIgKHNlbGYpCiAgKgotICogICAgTWFrZSBJckxBTiBwcm92aWRlciBhY2NlcHQgZXRoZXJuZXQgZnJhbWVzIGFkZHJlc3NlZCB0byB0aGUgdW5pY2FzdCAKKyAqICAgIE1ha2UgSXJMQU4gcHJvdmlkZXIgYWNjZXB0IGV0aGVybmV0IGZyYW1lcyBhZGRyZXNzZWQgdG8gdGhlIHVuaWNhc3QKICAqICAgIGFkZHJlc3MuCiAgKgogICovCkBAIC03NTYsMTIgKzc1NiwxMiBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJX191OCAqZnJhbWU7Ci0JCisKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7Ci0JSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwkKLQkKKwlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CisKIAlza2IgPSBhbGxvY19za2IoSVJMQU5fTUFYX0hFQURFUiArIElSTEFOX0NNRF9IRUFERVIgKwogCQkJSVJMQU5fQllURV9QQVJBTUVURVJfTEVOKCJEQVRBX0NIQU4iKSArCiAJCQlJUkxBTl9TVFJJTkdfUEFSQU1FVEVSX0xFTigiRklMVEVSX1RZUEUiLCAiRElSRUNURUQiKSArCkBAIC03NzMsMTUgKzc3MywxNSBAQAogCS8qIFJlc2VydmUgc3BhY2UgZm9yIFRUUCwgTE1QLCBhbmQgTEFQIGhlYWRlciAqLwogCXNrYl9yZXNlcnZlKHNrYiwgc2VsZi0+bWF4X2hlYWRlcl9zaXplKTsKIAlza2JfcHV0KHNrYiwgMik7Ci0JCisKIAlmcmFtZSA9IHNrYi0+ZGF0YTsKLQkKLSAJZnJhbWVbMF0gPSBDTURfRklMVEVSX09QRVJBVElPTjsKKworCWZyYW1lWzBdID0gQ01EX0ZJTFRFUl9PUEVSQVRJT047CiAJZnJhbWVbMV0gPSAweDAzOyAgICAgICAgICAgICAgICAgLyogVGhyZWUgcGFyYW1ldGVycyAqLwotIAlpcmxhbl9pbnNlcnRfYnl0ZV9wYXJhbShza2IsICJEQVRBX0NIQU4iICwgc2VsZi0+ZHRzYXBfc2VsX2RhdGEpOwotIAlpcmxhbl9pbnNlcnRfc3RyaW5nX3BhcmFtKHNrYiwgIkZJTFRFUl9UWVBFIiwgIkRJUkVDVEVEIik7Ci0gCWlybGFuX2luc2VydF9zdHJpbmdfcGFyYW0oc2tiLCAiRklMVEVSX01PREUiLCAiRklMVEVSIik7IAotCQorCWlybGFuX2luc2VydF9ieXRlX3BhcmFtKHNrYiwgIkRBVEFfQ0hBTiIgLCBzZWxmLT5kdHNhcF9zZWxfZGF0YSk7CisJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJGSUxURVJfVFlQRSIsICJESVJFQ1RFRCIpOworCWlybGFuX2luc2VydF9zdHJpbmdfcGFyYW0oc2tiLCAiRklMVEVSX01PREUiLCAiRklMVEVSIik7CisKIAlpcmxhbl9jdHJsX2RhdGFfcmVxdWVzdChzZWxmLCBza2IpOwogfQogCkBAIC03OTQsMTcgKzc5NCwxNyBAQAogICogICAgb25lIGJ1dCB0aGVuIF93ZV8gaGF2ZSB0byBpbml0aWF0ZSBhbGwgY29tbXVuaWNhdGlvbiB3aXRoIG90aGVyCiAgKiAgICBob3N0cywgc2luY2UgQVJQIHJlcXVlc3QgZm9yIHRoaXMgaG9zdCB3aWxsIG5vdCBiZSBhbnN3ZXJlZC4KICAqLwotdm9pZCBpcmxhbl9zZXRfYnJvYWRjYXN0X2ZpbHRlcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGludCBzdGF0dXMpIAordm9pZCBpcmxhbl9zZXRfYnJvYWRjYXN0X2ZpbHRlcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGludCBzdGF0dXMpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlfX3U4ICpmcmFtZTsKLQkKKwogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7Ci0JCi0gCXNrYiA9IGFsbG9jX3NrYihJUkxBTl9NQVhfSEVBREVSICsgSVJMQU5fQ01EX0hFQURFUiArCisKKwlza2IgPSBhbGxvY19za2IoSVJMQU5fTUFYX0hFQURFUiArIElSTEFOX0NNRF9IRUFERVIgKwogCQkJSVJMQU5fQllURV9QQVJBTUVURVJfTEVOKCJEQVRBX0NIQU4iKSArCiAJCQlJUkxBTl9TVFJJTkdfUEFSQU1FVEVSX0xFTigiRklMVEVSX1RZUEUiLCAiQlJPQURDQVNUIikgKwogCQkJLyogV2UgbWF5IHdhc3RlIG9uZSBieXRlIGhlcmUuLi4qLwpAQCAtODE2LDE3ICs4MTYsMTcgQEAKIAkvKiBSZXNlcnZlIHNwYWNlIGZvciBUVFAsIExNUCwgYW5kIExBUCBoZWFkZXIgKi8KIAlza2JfcmVzZXJ2ZShza2IsIHNlbGYtPmNsaWVudC5tYXhfaGVhZGVyX3NpemUpOwogCXNrYl9wdXQoc2tiLCAyKTsKLQkKKwogCWZyYW1lID0gc2tiLT5kYXRhOwotCQotIAlmcmFtZVswXSA9IENNRF9GSUxURVJfT1BFUkFUSU9OOworCisJZnJhbWVbMF0gPSBDTURfRklMVEVSX09QRVJBVElPTjsKIAlmcmFtZVsxXSA9IDB4MDM7ICAgICAgICAgICAgICAgICAvKiBUaHJlZSBwYXJhbWV0ZXJzICovCi0gCWlybGFuX2luc2VydF9ieXRlX3BhcmFtKHNrYiwgIkRBVEFfQ0hBTiIsIHNlbGYtPmR0c2FwX3NlbF9kYXRhKTsKLSAJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJGSUxURVJfVFlQRSIsICJCUk9BRENBU1QiKTsKKwlpcmxhbl9pbnNlcnRfYnl0ZV9wYXJhbShza2IsICJEQVRBX0NIQU4iLCBzZWxmLT5kdHNhcF9zZWxfZGF0YSk7CisJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJGSUxURVJfVFlQRSIsICJCUk9BRENBU1QiKTsKIAlpZiAoc3RhdHVzKQotCQlpcmxhbl9pbnNlcnRfc3RyaW5nX3BhcmFtKHNrYiwgIkZJTFRFUl9NT0RFIiwgIkZJTFRFUiIpOyAKKwkJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJGSUxURVJfTU9ERSIsICJGSUxURVIiKTsKIAllbHNlCi0JCWlybGFuX2luc2VydF9zdHJpbmdfcGFyYW0oc2tiLCAiRklMVEVSX01PREUiLCAiTk9ORSIpOyAKKwkJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJGSUxURVJfTU9ERSIsICJOT05FIik7CiAKIAlpcmxhbl9jdHJsX2RhdGFfcmVxdWVzdChzZWxmLCBza2IpOwogfQpAQCAtODM1LDE0ICs4MzUsMTQgQEAKICAqIEZ1bmN0aW9uIGlybGFuX3NldF9tdWx0aWNhc3RfZmlsdGVyIChzZWxmLCBzdGF0dXMpCiAgKgogICogICAgTWFrZSBJckxBTiBwcm92aWRlciBhY2NlcHQgZXRoZXJuZXQgZnJhbWVzIGFkZHJlc3NlZCB0byB0aGUgbXVsdGljYXN0Ci0gKiAgICBhZGRyZXNzLiAKKyAqICAgIGFkZHJlc3MuCiAgKgogICovCi12b2lkIGlybGFuX3NldF9tdWx0aWNhc3RfZmlsdGVyKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgaW50IHN0YXR1cykgCit2b2lkIGlybGFuX3NldF9tdWx0aWNhc3RfZmlsdGVyKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgaW50IHN0YXR1cykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fdTggKmZyYW1lOwotCQorCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwpAQCAtODU2LDIxICs4NTYsMjEgQEAKIAkJCUdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm47Ci0JCisKIAkvKiBSZXNlcnZlIHNwYWNlIGZvciBUVFAsIExNUCwgYW5kIExBUCBoZWFkZXIgKi8KIAlza2JfcmVzZXJ2ZShza2IsIHNlbGYtPmNsaWVudC5tYXhfaGVhZGVyX3NpemUpOwogCXNrYl9wdXQoc2tiLCAyKTsKLQkKKwogCWZyYW1lID0gc2tiLT5kYXRhOwotCQotIAlmcmFtZVswXSA9IENNRF9GSUxURVJfT1BFUkFUSU9OOworCisJZnJhbWVbMF0gPSBDTURfRklMVEVSX09QRVJBVElPTjsKIAlmcmFtZVsxXSA9IDB4MDM7ICAgICAgICAgICAgICAgICAvKiBUaHJlZSBwYXJhbWV0ZXJzICovCi0gCWlybGFuX2luc2VydF9ieXRlX3BhcmFtKHNrYiwgIkRBVEFfQ0hBTiIsIHNlbGYtPmR0c2FwX3NlbF9kYXRhKTsKLSAJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJGSUxURVJfVFlQRSIsICJNVUxUSUNBU1QiKTsKKwlpcmxhbl9pbnNlcnRfYnl0ZV9wYXJhbShza2IsICJEQVRBX0NIQU4iLCBzZWxmLT5kdHNhcF9zZWxfZGF0YSk7CisJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJGSUxURVJfVFlQRSIsICJNVUxUSUNBU1QiKTsKIAlpZiAoc3RhdHVzKQotCQlpcmxhbl9pbnNlcnRfc3RyaW5nX3BhcmFtKHNrYiwgIkZJTFRFUl9NT0RFIiwgIkFMTCIpOyAKKwkJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJGSUxURVJfTU9ERSIsICJBTEwiKTsKIAllbHNlCi0JCWlybGFuX2luc2VydF9zdHJpbmdfcGFyYW0oc2tiLCAiRklMVEVSX01PREUiLCAiTk9ORSIpOyAKKwkJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJGSUxURVJfTU9ERSIsICJOT05FIik7CiAKIAlpcmxhbl9jdHJsX2RhdGFfcmVxdWVzdChzZWxmLCBza2IpOwogfQpAQCAtODg3LDEyICs4ODcsMTIgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fdTggKmZyYW1lOwotCQkKKwogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7Ci0JCisKIAlza2IgPSBhbGxvY19za2IoSVJMQU5fTUFYX0hFQURFUiArIElSTEFOX0NNRF9IRUFERVIgKwogCQkJSVJMQU5fQllURV9QQVJBTUVURVJfTEVOKCJEQVRBX0NIQU4iKSArCiAJCQlJUkxBTl9TVFJJTkdfUEFSQU1FVEVSX0xFTigiRklMVEVSX1RZUEUiLCAiRElSRUNURUQiKSArCkBAIC05MDUsMzQgKzkwNSwzNCBAQAogCS8qIFJlc2VydmUgc3BhY2UgZm9yIFRUUCwgTE1QLCBhbmQgTEFQIGhlYWRlciAqLwogCXNrYl9yZXNlcnZlKHNrYiwgc2VsZi0+Y2xpZW50Lm1heF9oZWFkZXJfc2l6ZSk7CiAJc2tiX3B1dChza2IsIDIpOwotCQorCiAJZnJhbWUgPSBza2ItPmRhdGE7Ci0JCi0gCWZyYW1lWzBdID0gQ01EX0ZJTFRFUl9PUEVSQVRJT047CisKKwlmcmFtZVswXSA9IENNRF9GSUxURVJfT1BFUkFUSU9OOwogCWZyYW1lWzFdID0gMHgwMzsgICAgICAgICAgICAgICAgIC8qIFRocmVlIHBhcmFtZXRlcnMgKi8KLSAJaXJsYW5faW5zZXJ0X2J5dGVfcGFyYW0oc2tiLCAiREFUQV9DSEFOIiwgc2VsZi0+ZHRzYXBfc2VsX2RhdGEpOwotIAlpcmxhbl9pbnNlcnRfc3RyaW5nX3BhcmFtKHNrYiwgIkZJTFRFUl9UWVBFIiwgIkRJUkVDVEVEIik7Ci0gCWlybGFuX2luc2VydF9zdHJpbmdfcGFyYW0oc2tiLCAiRklMVEVSX09QRVJBVElPTiIsICJEWU5BTUlDIik7IAotCQorCWlybGFuX2luc2VydF9ieXRlX3BhcmFtKHNrYiwgIkRBVEFfQ0hBTiIsIHNlbGYtPmR0c2FwX3NlbF9kYXRhKTsKKwlpcmxhbl9pbnNlcnRfc3RyaW5nX3BhcmFtKHNrYiwgIkZJTFRFUl9UWVBFIiwgIkRJUkVDVEVEIik7CisJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJGSUxURVJfT1BFUkFUSU9OIiwgIkRZTkFNSUMiKTsKKwogCWlybGFuX2N0cmxfZGF0YV9yZXF1ZXN0KHNlbGYsIHNrYik7CiB9CiAKIC8qCiAgKiBGdW5jdGlvbiBpcmxhbl9nZXRfbWVkaWFfY2hhciAoc2VsZikKICAqCi0gKiAgICAKKyAqCiAgKgogICovCi12b2lkIGlybGFuX2dldF9tZWRpYV9jaGFyKHN0cnVjdCBpcmxhbl9jYiAqc2VsZikgCit2b2lkIGlybGFuX2dldF9tZWRpYV9jaGFyKHN0cnVjdCBpcmxhbl9jYiAqc2VsZikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fdTggKmZyYW1lOwotCQorCiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKLQkKKwogCXNrYiA9IGFsbG9jX3NrYihJUkxBTl9NQVhfSEVBREVSICsgSVJMQU5fQ01EX0hFQURFUiArCiAJCQlJUkxBTl9TVFJJTkdfUEFSQU1FVEVSX0xFTigiTUVESUEiLCAiODAyLjMiKSwKIAkJCUdGUF9BVE9NSUMpOwpAQCAtOTQzLDEzICs5NDMsMTMgQEAKIAkvKiBSZXNlcnZlIHNwYWNlIGZvciBUVFAsIExNUCwgYW5kIExBUCBoZWFkZXIgKi8KIAlza2JfcmVzZXJ2ZShza2IsIHNlbGYtPmNsaWVudC5tYXhfaGVhZGVyX3NpemUpOwogCXNrYl9wdXQoc2tiLCAyKTsKLQkKKwogCWZyYW1lID0gc2tiLT5kYXRhOwotCQorCiAJLyogQnVpbGQgZnJhbWUgKi8KLSAJZnJhbWVbMF0gPSBDTURfR0VUX01FRElBX0NIQVI7CisJZnJhbWVbMF0gPSBDTURfR0VUX01FRElBX0NIQVI7CiAJZnJhbWVbMV0gPSAweDAxOyAvKiBPbmUgcGFyYW1ldGVyICovCi0JCisKIAlpcmxhbl9pbnNlcnRfc3RyaW5nX3BhcmFtKHNrYiwgIk1FRElBIiwgIjgwMi4zIik7CiAJaXJsYW5fY3RybF9kYXRhX3JlcXVlc3Qoc2VsZiwgc2tiKTsKIH0KQEAgLTk4MCw3ICs5ODAsNyBAQAogewogCWludCBzdHJpbmdfbGVuID0gc3RybGVuKHN0cmluZyk7CiAKLQlyZXR1cm4gX19pcmxhbl9pbnNlcnRfcGFyYW0oc2tiLCBwYXJhbSwgSVJMQU5fQVJSQVksIDAsIDAsIHN0cmluZywgCisJcmV0dXJuIF9faXJsYW5faW5zZXJ0X3BhcmFtKHNrYiwgcGFyYW0sIElSTEFOX0FSUkFZLCAwLCAwLCBzdHJpbmcsCiAJCQkJICAgIHN0cmluZ19sZW4pOwogfQogCkBAIC05OTMsNyArOTkzLDcgQEAKIGludCBpcmxhbl9pbnNlcnRfYXJyYXlfcGFyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqbmFtZSwgX191OCAqYXJyYXksCiAJCQkgICAgIF9fdTE2IGFycmF5X2xlbikKIHsKLQlyZXR1cm4gX19pcmxhbl9pbnNlcnRfcGFyYW0oc2tiLCBuYW1lLCBJUkxBTl9BUlJBWSwgMCwgMCwgYXJyYXksIAorCXJldHVybiBfX2lybGFuX2luc2VydF9wYXJhbShza2IsIG5hbWUsIElSTEFOX0FSUkFZLCAwLCAwLCBhcnJheSwKIAkJCQkgICAgYXJyYXlfbGVuKTsKIH0KIApAQCAtMTAwNiwxOSArMTAwNiwxOSBAQAogICogICAgfCBOYW1lIExlbmd0aFsxXSB8IFBhcmFtIE5hbWVbMS4uMjU1XSB8IFZhbCBMZW5ndGhbMl0gfCBWYWx1ZVswLi4xMDE2XXwKICAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KLXN0YXRpYyBpbnQgX19pcmxhbl9pbnNlcnRfcGFyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqcGFyYW0sIGludCB0eXBlLCAKLQkJCQlfX3U4IHZhbHVlX2J5dGUsIF9fdTE2IHZhbHVlX3Nob3J0LCAKK3N0YXRpYyBpbnQgX19pcmxhbl9pbnNlcnRfcGFyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqcGFyYW0sIGludCB0eXBlLAorCQkJCV9fdTggdmFsdWVfYnl0ZSwgX191MTYgdmFsdWVfc2hvcnQsCiAJCQkJX191OCAqdmFsdWVfYXJyYXksIF9fdTE2IHZhbHVlX2xlbikKIHsKIAlfX3U4ICpmcmFtZTsKIAlfX3U4IHBhcmFtX2xlbjsKIAlfX2xlMTYgdG1wX2xlOyAvKiBUZW1wb3JhcnkgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgKi8KIAlpbnQgbj0wOwotCQorCiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUlSREFfREVCVUcoMiwgIiVzKCksIEdvdCBOVUxMIHNrYlxuIiwgX19GVU5DVElPTl9fICk7CiAJCXJldHVybiAwOwotCX0JCisJfQogCiAJcGFyYW1fbGVuID0gc3RybGVuKHBhcmFtKTsKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTEwMzcsNyArMTAzNyw3IEBACiAJCXJldHVybiAwOwogCQlicmVhazsKIAl9Ci0JCisKIAkvKiBJbnNlcnQgYXQgZW5kIG9mIHNrLWJ1ZmZlciAqLwogCWZyYW1lID0gc2tiLT50YWlsOwogCkBAIC0xMDQ1LDE1ICsxMDQ1LDE1IEBACiAJaWYgKHNrYl90YWlscm9vbShza2IpIDwgKHBhcmFtX2xlbit2YWx1ZV9sZW4rMykpIHsKIAkJSVJEQV9ERUJVRygyLCAiJXMoKSwgTm8gbW9yZSBzcGFjZSBhdCBlbmQgb2Ygc2tiXG4iLCBfX0ZVTkNUSU9OX18gKTsKIAkJcmV0dXJuIDA7Ci0JfQkKKwl9CiAJc2tiX3B1dChza2IsIHBhcmFtX2xlbit2YWx1ZV9sZW4rMyk7Ci0JCisKIAkvKiBJbnNlcnQgcGFyYW1ldGVyIGxlbmd0aCAqLwogCWZyYW1lW24rK10gPSBwYXJhbV9sZW47Ci0JCisKIAkvKiBJbnNlcnQgcGFyYW1ldGVyICovCiAJbWVtY3B5KGZyYW1lK24sIHBhcmFtLCBwYXJhbV9sZW4pOyBuICs9IHBhcmFtX2xlbjsKLQkKKwogCS8qIEluc2VydCB2YWx1ZSBsZW5ndGggKDIgYnl0ZSBsaXR0bGUgZW5kaWFuIGZvcm1hdCwgTFNCIGZpcnN0KSAqLwogCXRtcF9sZSA9IGNwdV90b19sZTE2KHZhbHVlX2xlbik7CiAJbWVtY3B5KGZyYW1lK24sICZ0bXBfbGUsIDIpOyBuICs9IDI7IC8qIFRvIGF2b2lkIGFsaWdubWVudCBwcm9ibGVtcyAqLwpAQCAtMTA4MiwzNiArMTA4MiwzNiBAQAogICogRnVuY3Rpb24gaXJsYW5fZXh0cmFjdF9wYXJhbSAoYnVmLCBuYW1lLCB2YWx1ZSwgbGVuKQogICoKICAqICAgIEV4dHJhY3RzIGEgc2luZ2xlIHBhcmFtZXRlciBuYW1lL3ZhbHVlIHBhaXIgZnJvbSBidWZmZXIgYW5kIHVwZGF0ZXMKLSAqICAgIHRoZSBidWZmZXIgcG9pbnRlciB0byBwb2ludCB0byB0aGUgbmV4dCBuYW1lL3ZhbHVlIHBhaXIuIAorICogICAgdGhlIGJ1ZmZlciBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBuZXh0IG5hbWUvdmFsdWUgcGFpci4KICAqLwogaW50IGlybGFuX2V4dHJhY3RfcGFyYW0oX191OCAqYnVmLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSwgX191MTYgKmxlbikKIHsKIAlfX3U4IG5hbWVfbGVuOwogCV9fdTE2IHZhbF9sZW47CiAJaW50IG49MDsKLQkKKwogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJLyogZ2V0IGxlbmd0aCBvZiBwYXJhbWV0ZXIgbmFtZSAoMSBieXRlKSAqLwogCW5hbWVfbGVuID0gYnVmW24rK107Ci0JCisKIAlpZiAobmFtZV9sZW4gPiAyNTQpIHsKIAkJSVJEQV9ERUJVRygyLCAiJXMoKSwgbmFtZV9sZW4gPiAyNTRcbiIsIF9fRlVOQ1RJT05fXyApOwogCQlyZXR1cm4gLVJTUF9JTlZBTElEX0NPTU1BTkRfRk9STUFUOwogCX0KLQkKKwogCS8qIGdldCBwYXJhbWV0ZXIgbmFtZSAqLwogCW1lbWNweShuYW1lLCBidWYrbiwgbmFtZV9sZW4pOwogCW5hbWVbbmFtZV9sZW5dID0gJ1wwJzsKIAluKz1uYW1lX2xlbjsKLQkKLQkvKiAgCi0JICogIEdldCBsZW5ndGggb2YgcGFyYW1ldGVyIHZhbHVlICgyIGJ5dGVzIGluIGxpdHRsZSBlbmRpYW4gCi0JICogIGZvcm1hdCkgCisKKwkvKgorCSAqICBHZXQgbGVuZ3RoIG9mIHBhcmFtZXRlciB2YWx1ZSAoMiBieXRlcyBpbiBsaXR0bGUgZW5kaWFuCisJICogIGZvcm1hdCkKIAkgKi8KIAltZW1jcHkoJnZhbF9sZW4sIGJ1ZituLCAyKTsgLyogVG8gYXZvaWQgYWxpZ25tZW50IHByb2JsZW1zICovCiAJbGUxNl90b19jcHVzKCZ2YWxfbGVuKTsgbis9MjsKLQkKKwogCWlmICh2YWxfbGVuID4gMTAxNikgewogCQlJUkRBX0RFQlVHKDIsICIlcygpLCBwYXJhbWV0ZXIgbGVuZ3RoIHRvIGxvbmdcbiIsIF9fRlVOQ1RJT05fXyApOwogCQlyZXR1cm4gLVJTUF9JTlZBTElEX0NPTU1BTkRfRk9STUFUOwpAQCAtMTEyMiw5ICsxMTIyLDkgQEAKIAltZW1jcHkodmFsdWUsIGJ1ZituLCB2YWxfbGVuKTsKIAl2YWx1ZVt2YWxfbGVuXSA9ICdcMCc7CiAJbis9dmFsX2xlbjsKLQkKLQlJUkRBX0RFQlVHKDQsICJQYXJhbWV0ZXI6ICVzICIsIG5hbWUpOyAKLQlJUkRBX0RFQlVHKDQsICJWYWx1ZTogJXNcbiIsIHZhbHVlKTsgCisKKwlJUkRBX0RFQlVHKDQsICJQYXJhbWV0ZXI6ICVzICIsIG5hbWUpOworCUlSREFfREVCVUcoNCwgIlZhbHVlOiAlc1xuIiwgdmFsdWUpOwogCiAJcmV0dXJuIG47CiB9CkBAIC0xMTMzLDcgKzExMzMsNyBAQAogCiAvKgogICogU3RhcnQgb2YgcmVhZGluZyAvcHJvYyBlbnRyaWVzLgotICogUmV0dXJuIGVudHJ5IGF0IHBvcywgCisgKiBSZXR1cm4gZW50cnkgYXQgcG9zLAogICoJb3Igc3RhcnRfdG9rZW4gdG8gaW5kaWNhdGUgcHJpbnQgaGVhZGVyIGxpbmUKICAqCW9yIE5VTEwgaWYgZW5kIG9mIGZpbGUKICAqLwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAKIAkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VsZiwgJmlybGFucywgZGV2X2xpc3QpIHsKLQkJaWYgKCpwb3MgPT0gaSkgCisJCWlmICgqcG9zID09IGkpCiAJCQlyZXR1cm4gc2VsZjsKIAkJKytpOwogCX0KQEAgLTExNjAsMTIgKzExNjAsMTIgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpueHQ7CiAKIAkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSAKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCW54dCA9IGlybGFucy5uZXh0OwogCWVsc2UKIAkJbnh0ID0gKChzdHJ1Y3QgaXJsYW5fY2IgKil2KS0+ZGV2X2xpc3QubmV4dDsKIAotCXJldHVybiAobnh0ID09ICZpcmxhbnMpID8gTlVMTCAKKwlyZXR1cm4gKG54dCA9PSAmaXJsYW5zKSA/IE5VTEwKIAkJOiBsaXN0X2VudHJ5KG54dCwgc3RydWN0IGlybGFuX2NiLCBkZXZfbGlzdCk7CiB9CiAKQEAgLTExODUsNyArMTE4NSw3IEBACiAJCXNlcV9wdXRzKHNlcSwgIklyTEFOIGluc3RhbmNlczpcbiIpOwogCWVsc2UgewogCQlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYgPSB2OwotCQkKKwogCQlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCQlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuIC0xOyk7CiAKQEAgLTEyMDEsMTcgKzEyMDEsMTcgQEAKIAkJCSAgICAgICBzZWxmLT5kYWRkcik7CiAJCXNlcV9wcmludGYoc2VxLCJ2ZXJzaW9uOiAlZC4lZCxcbiIsCiAJCQkgICAgICAgc2VsZi0+dmVyc2lvblsxXSwgc2VsZi0+dmVyc2lvblswXSk7Ci0JCXNlcV9wcmludGYoc2VxLCJhY2Nlc3MgdHlwZTogJXNcbiIsIAorCQlzZXFfcHJpbnRmKHNlcSwiYWNjZXNzIHR5cGU6ICVzXG4iLAogCQkJICAgICAgIGlybGFuX2FjY2Vzc1tzZWxmLT5jbGllbnQuYWNjZXNzX3R5cGVdKTsKLQkJc2VxX3ByaW50ZihzZXEsIm1lZGlhOiAlc1xuIiwgCisJCXNlcV9wcmludGYoc2VxLCJtZWRpYTogJXNcbiIsCiAJCQkgICAgICAgaXJsYW5fbWVkaWFbc2VsZi0+bWVkaWFdKTsKLQkJCisKIAkJc2VxX3ByaW50ZihzZXEsImxvY2FsIGZpbHRlcjpcbiIpOwogCQlzZXFfcHJpbnRmKHNlcSwicmVtb3RlIGZpbHRlcjogIik7CiAJCWlybGFuX3ByaW50X2ZpbHRlcihzZXEsIHNlbGYtPmNsaWVudC5maWx0ZXJfdHlwZSk7Ci0JCXNlcV9wcmludGYoc2VxLCJ0eCBidXN5OiAlc1xuIiwgCisJCXNlcV9wcmludGYoc2VxLCJ0eCBidXN5OiAlc1xuIiwKIAkJCSAgICAgICBuZXRpZl9xdWV1ZV9zdG9wcGVkKHNlbGYtPmRldikgPyAiVFJVRSIgOiAiRkFMU0UiKTsKLQkJCQorCiAJCXNlcV9wdXRjKHNlcSwnXG4nKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMjMxLDcgKzEyMzEsNyBAQAogI2VuZGlmCiAKIE1PRFVMRV9BVVRIT1IoIkRhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiVGhlIExpbnV4IElyREEgTEFOIHByb3RvY29sIik7IAorTU9EVUxFX0RFU0NSSVBUSU9OKCJUaGUgTGludXggSXJEQSBMQU4gcHJvdG9jb2wiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX3BhcmFtKGV0aCwgYm9vbCwgMCk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCmluZGV4IGIwY2NjNDUuLjY3MmFiM2YgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCkBAIC0xLDggKzEsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgCisgKgogICogRmlsZW5hbWU6ICAgICAgaXJsYW5fZXRoLmMKLSAqIFZlcnNpb246ICAgICAgIAotICogRGVzY3JpcHRpb246ICAgCisgKiBWZXJzaW9uOgorICogRGVzY3JpcHRpb246CiAgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCiAgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAgKiBDcmVhdGVkIGF0OiAgICBUaHUgT2N0IDE1IDA4OjM3OjU4IDE5OTgKQEAgLTExLDE4ICsxMSwxOCBAQAogICogU291cmNlczogICAgICAgc2tlbGV0b24uYyBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAQ0VTRElTLmdzZmMubmFzYS5nb3Y+CiAgKiAgICAgICAgICAgICAgICBzbGlwLmMgYnkgTGF1cmVuY2UgQ3VsaGFuZSwgICA8bG96QGhvbG1lcy5kZW1vbi5jby51az4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdXdhbHQubmwubXVnbmV0Lm9yZz4KLSAqIAorICoKICAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqICAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqICAKKyAqCiAgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgotICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgotICogICAgIAorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpAQCAtNTUsNyArNTUsNyBAQAogewogCWRldi0+b3BlbiAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX29wZW47CiAJZGV2LT5zdG9wICAgICAgICAgICAgICAgPSBpcmxhbl9ldGhfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgICAgPSBpcmxhbl9ldGhfeG1pdDsgCisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgICAgPSBpcmxhbl9ldGhfeG1pdDsKIAlkZXYtPmdldF9zdGF0cwkgICAgICAgID0gaXJsYW5fZXRoX2dldF9zdGF0czsKIAlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGlybGFuX2V0aF9zZXRfbXVsdGljYXN0X2xpc3Q7CiAJZGV2LT5kZXN0cnVjdG9yCQk9IGZyZWVfbmV0ZGV2OwpAQCAtNjMsOCArNjMsOCBAQAogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAogCWV0aGVyX3NldHVwKGRldik7Ci0JCi0JLyogCisKKwkvKgogCSAqIExldHMgZG8gYWxsIHF1ZXVlaW5nIGluIElyVFRQIGluc3RlYWQgb2YgdGhpcyBkZXZpY2UgZHJpdmVyLgogCSAqIFF1ZXVlaW5nIGhlcmUgYXMgd2VsbCBjYW4gaW50cm9kdWNlIHNvbWUgc3RyYW5nZSBsYXRlbmN5CiAJICogcHJvYmxlbXMsIHdoaWNoIHdlIHdpbGwgYXZvaWQgYnkgc2V0dGluZyB0aGUgcXVldWUgc2l6ZSB0byAwLgpAQCAtMTA0LDE3ICsxMDQsMTcgQEAKIHN0YXRpYyBpbnQgaXJsYW5fZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQorCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAkvKiBSZWFkeSB0byBwbGF5ISAqLwotIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7IC8qIFdhaXQgdW50aWwgZGF0YSBsaW5rIGlzIHJlYWR5ICovCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAvKiBXYWl0IHVudGlsIGRhdGEgbGluayBpcyByZWFkeSAqLwogCiAJLyogV2UgYXJlIG5vdyBvcGVuLCBzbyB0aW1lIHRvIGRvIHNvbWUgd29yayAqLwogCXNlbGYtPmRpc2Nvbm5lY3RfcmVhc29uID0gMDsKIAlpcmxhbl9jbGllbnRfd2FrZXVwKHNlbGYsIHNlbGYtPnNhZGRyLCBzZWxmLT5kYWRkcik7CiAKLQkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIGhhcmR3YXJlIGFkZHJlc3MgYmVmb3JlIHdlIHJldHVybiwgCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgYSBoYXJkd2FyZSBhZGRyZXNzIGJlZm9yZSB3ZSByZXR1cm4sCiAJICAgc28gREhDUCBjbGllbnRzIGdldHMgaGFwcHkgKi8KIAlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNlbGYtPm9wZW5fd2FpdCwKIAkJCQkJIXNlbGYtPnRzYXBfZGF0YS0+Y29ubmVjdGVkKTsKQEAgLTEyNCwzMCArMTI0LDMwIEBACiAgKiBGdW5jdGlvbiBpcmxhbl9ldGhfY2xvc2UgKGRldikKICAqCiAgKiAgICBTdG9wIHRoZSBldGhlciBuZXR3b3JrIGRldmljZSwgaGlzIGZ1bmN0aW9uIHdpbGwgdXN1YWxseSBiZSBjYWxsZWQgYnkKLSAqICAgIGlmY29uZmlnIGRvd24uIFdlIHNob3VsZCBub3cgZGlzY29ubmVjdCB0aGUgbGluaywgV2Ugc3RhcnQgdGhlIAorICogICAgaWZjb25maWcgZG93bi4gV2Ugc2hvdWxkIG5vdyBkaXNjb25uZWN0IHRoZSBsaW5rLCBXZSBzdGFydCB0aGUKICAqICAgIGNsb3NlIHRpbWVyLCBzbyB0aGF0IHRoZSBpbnN0YW5jZSB3aWxsIGJlIHJlbW92ZWQgaWYgd2UgYXJlIHVuYWJsZQogICogICAgdG8gZGlzY292ZXIgdGhlIHJlbW90ZSBkZXZpY2UgYWZ0ZXIgdGhlIGRpc2Nvbm5lY3QuCiAgKi8KIHN0YXRpYyBpbnQgaXJsYW5fZXRoX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKKwogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJLyogU3RvcCBkZXZpY2UgKi8KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCisKIAlpcmxhbl9jbG9zZV9kYXRhX2NoYW5uZWwoc2VsZik7CiAJaXJsYW5fY2xvc2VfdHNhcHMoc2VsZik7CiAKIAlpcmxhbl9kb19jbGllbnRfZXZlbnQoc2VsZiwgSVJMQU5fTE1QX0RJU0NPTk5FQ1QsIE5VTEwpOwotCWlybGFuX2RvX3Byb3ZpZGVyX2V2ZW50KHNlbGYsIElSTEFOX0xNUF9ESVNDT05ORUNULCBOVUxMKTsJCi0JCisJaXJsYW5fZG9fcHJvdmlkZXJfZXZlbnQoc2VsZiwgSVJMQU5fTE1QX0RJU0NPTk5FQ1QsIE5VTEwpOworCiAJLyogUmVtb3ZlIGZyYW1lcyBxdWV1ZWQgb24gdGhlIGNvbnRyb2wgY2hhbm5lbCAqLwogCXNrYl9xdWV1ZV9wdXJnZSgmc2VsZi0+Y2xpZW50LnR4cSk7CiAKIAlzZWxmLT5jbGllbnQudHhfYnVzeSA9IDA7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY0LDcgKzE2NCw3IEBACiAKIAkvKiBza2IgaGVhZHJvb20gbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gYWxsIElyREEtaGVhZGVycz8gKi8KIAlpZiAoKHNrYl9oZWFkcm9vbShza2IpIDwgc2VsZi0+bWF4X2hlYWRlcl9zaXplKSB8fCAoc2tiX3NoYXJlZChza2IpKSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IAorCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9CiAJCQlza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIHNlbGYtPm1heF9oZWFkZXJfc2l6ZSk7CiAKIAkJLyogIFdlIGhhdmUgdG8gZnJlZSB0aGUgb3JpZ2luYWwgc2tiIGFueXdheSAqLwpAQCAtMTc2LDcgKzE3Niw3IEBACiAKIAkJLyogVXNlIHRoZSBuZXcgc2tiIGluc3RlYWQgKi8KIAkJc2tiID0gbmV3X3NrYjsKLQl9IAorCX0KIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJcmV0ID0gaXJ0dHBfZGF0YV9yZXF1ZXN0KHNlbGYtPnRzYXBfZGF0YSwgc2tiKTsKIAogCWlmIChyZXQgPCAwKSB7Ci0JCS8qICAgCisJCS8qCiAJCSAqIElyVFRQcyB0eCBxdWV1ZSBpcyBmdWxsLCBzbyB3ZSBqdXN0IGhhdmUgdG8KIAkJICogZHJvcCB0aGUgZnJhbWUhIFlvdSBtaWdodCB0aGluayB0aGF0IHdlIHNob3VsZAogCQkgKiBqdXN0IHJldHVybiAtMSBhbmQgZG9uJ3QgZGVhbGxvY2F0ZSB0aGUgZnJhbWUsCkBAIC0xOTUsMTUgKzE5NSwxNSBAQAogCQkgKiB3ZSBoYXZlIHJlcGxhY2VkIHRoZSBvcmlnaW5hbCBza2Igd2l0aCBhIG5ldwogCQkgKiBvbmUgd2l0aCBsYXJnZXIgaGVhZHJvb20sIGFuZCB0aGF0IHdvdWxkIHJlYWxseQogCQkgKiBjb25mdXNlIGRvX2Rldl9xdWV1ZV94bWl0KCkgaW4gZGV2LmMhIEkgaGF2ZQotCQkgKiB0cmllZCA6LSkgREIgCisJCSAqIHRyaWVkIDotKSBEQgogCQkgKi8KIAkJLyogaXJ0dHBfZGF0YV9yZXF1ZXN0IGFscmVhZHkgZnJlZSB0aGUgcGFja2V0ICovCiAJCXNlbGYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAl9IGVsc2UgewogCQlzZWxmLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCXNlbGYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOyAKKwkJc2VsZi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxOCwzNyArMjE4LDM3IEBACiAJc3RydWN0IGlybGFuX2NiICpzZWxmID0gaW5zdGFuY2U7CiAKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJKytzZWxmLT5zdGF0cy5yeF9kcm9wcGVkOyAKKwkJKytzZWxmLT5zdGF0cy5yeF9kcm9wcGVkOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pIHsKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSA6IElyTEFOIGZyYW1lIHRvbyBzaG9ydCAoJWQpXG4iLAogCQkJICAgX19GVU5DVElPTl9fLCBza2ItPmxlbik7Ci0JCSsrc2VsZi0+c3RhdHMucnhfZHJvcHBlZDsgCisJCSsrc2VsZi0+c3RhdHMucnhfZHJvcHBlZDsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gMDsKIAl9Ci0JCQotCS8qIAotCSAqIEFkb3B0IHRoaXMgZnJhbWUhIEltcG9ydGFudCB0byBzZXQgYWxsIHRoZXNlIGZpZWxkcyBzaW5jZSB0aGV5IAorCisJLyoKKwkgKiBBZG9wdCB0aGlzIGZyYW1lISBJbXBvcnRhbnQgdG8gc2V0IGFsbCB0aGVzZSBmaWVsZHMgc2luY2UgdGhleQogCSAqIG1pZ2h0IGhhdmUgYmVlbiBwcmV2aW91c2x5IHNldCBieSB0aGUgbG93IGxldmVsIElyREEgbmV0d29yawotCSAqIGRldmljZSBkcml2ZXIgCisJICogZGV2aWNlIGRyaXZlcgogCSAqLwogCXNrYi0+ZGV2ID0gc2VsZi0+ZGV2OwogCXNrYi0+cHJvdG9jb2w9ZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7IC8qIFJlbW92ZSBldGggaGVhZGVyICovCi0JCisKIAlzZWxmLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0Jc2VsZi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47IAorCXNlbGYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJbmV0aWZfcngoc2tiKTsgICAvKiBFYXQgaXQhICovCi0JCisKIAlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEZ1bmN0aW9uIGlybGFuX2V0aF9mbG93IChzdGF0dXMpCiAgKgotICogICAgRG8gZmxvdyBjb250cm9sIGJldHdlZW4gSVAvRXRoZXJuZXQgYW5kIElyTEFOL0lyVFRQLiBUaGlzIGlzIGRvbmUgYnkgCisgKiAgICBEbyBmbG93IGNvbnRyb2wgYmV0d2VlbiBJUC9FdGhlcm5ldCBhbmQgSXJMQU4vSXJUVFAuIFRoaXMgaXMgZG9uZSBieQogICogICAgY29udHJvbGxpbmcgdGhlIHF1ZXVlIHN0b3Avc3RhcnQuCiAgKgogICogVGhlIElyREEgbGluayBsYXllciBoYXMgdGhlIGFkdmFudGFnZSB0byBoYXZlIGZsb3cgY29udHJvbCwgYW5kCkBAIC0yNjgsMTEgKzI2OCwxMSBAQAogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7Ci0JCisKIAlkZXYgPSBzZWxmLT5kZXY7CiAKIAlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuOyk7Ci0JCisKIAlJUkRBX0RFQlVHKDAsICIlcygpIDogZmxvdyAlcyA7IHJ1bm5pbmcgJWRcbiIsIF9fRlVOQ1RJT05fXywKIAkJICAgZmxvdyA9PSBGTE9XX1NUT1AgPyAiRkxPV19TVE9QIiA6ICJGTE9XX1NUQVJUIiwKIAkJICAgbmV0aWZfcnVubmluZyhkZXYpKTsKQEAgLTMwMSwxMCArMzAxLDEwIEBACiB7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCi0JLyogCisJLyoKIAkgKiBXaGVuIHdlIGdldCBhIG5ldyBNQUMgYWRkcmVzcyBkbyBhIGdyYXR1aXRvdXMgQVJQLiBUaGlzCiAJICogaXMgdXNlZnVsIGlmIHdlIGhhdmUgY2hhbmdlZCBhY2Nlc3MgcG9pbnRzIG9uIHRoZSBzYW1lCi0JICogc3VibmV0LiAgCisJICogc3VibmV0LgogCSAqLwogI2lmZGVmIENPTkZJR19JTkVUCiAJSVJEQV9ERUJVRyg0LCAiSXJMQU46IFNlbmRpbmcgZ3JhdHVpdG91cyBBUlBcbiIpOwpAQCAtMzEzLDEwICszMTMsMTAgQEAKIAlpZiAoaW5fZGV2ID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCWlmIChpbl9kZXYtPmlmYV9saXN0KQotCQkKLQlhcnBfc2VuZChBUlBPUF9SRVFVRVNULCBFVEhfUF9BUlAsIAorCisJYXJwX3NlbmQoQVJQT1BfUkVRVUVTVCwgRVRIX1BfQVJQLAogCQkgaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2FkZHJlc3MsCi0JCSBkZXYsIAorCQkgZGV2LAogCQkgaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2FkZHJlc3MsCiAJCSBOVUxMLCBkZXYtPmRldl9hZGRyLCBOVUxMKTsKIG91dDoKQEAgLTMzMSw5ICszMzEsOSBAQAogICoKICAqLwogI2RlZmluZSBIV19NQVhfQUREUlMgNCAvKiBNdXN0IHF1ZXJ5IHRvIGdldCBpdCEgKi8KLXN0YXRpYyB2b2lkIGlybGFuX2V0aF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCitzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gCXN0cnVjdCBpcmxhbl9jYiAqc2VsZiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGlybGFuX2NiICpzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCiAJCUlSREFfV0FSTklORygiUHJvbWlzY291cyBtb2RlIG5vdCBpbXBsZW1lbnRlZCBieSBJckxBTiFcbiIpOwotCX0gCisJfQogCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCBkZXYtPm1jX2NvdW50ID4gSFdfTUFYX0FERFJTKSB7CiAJCS8qIERpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSwgdXNlIG5vcm1hbCBtb2RlLiAqLwogCQlJUkRBX0RFQlVHKDQsICIlcygpLCBTZXR0aW5nIG11bHRpY2FzdCBmaWx0ZXJcbiIsIF9fRlVOQ1RJT05fXyApOwpAQCAtMzc4LDcgKzM3OCw3IEBACiAgKiAgICBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcyBmb3IgdGhpcyBkZXZpY2UKICAqCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXJsYW5fZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSAKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXJsYW5fZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZiA9IG5ldGRldl9wcml2KGRldik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldmVudC5jCmluZGV4IDI3NzhkOGMuLjYyM2UwZmQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXZlbnQuYwpAQCAtMSwyNSArMSwyNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgCisgKgogICogRmlsZW5hbWU6ICAgICAgaXJsYW5fZXZlbnQuYwotICogVmVyc2lvbjogICAgICAgCi0gKiBEZXNjcmlwdGlvbjogICAKKyAqIFZlcnNpb246CisgKiBEZXNjcmlwdGlvbjoKICAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KICAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICAqIENyZWF0ZWQgYXQ6ICAgIFR1ZSBPY3QgMjAgMDk6MTA6MTYgMTk5OAogICogTW9kaWZpZWQgYXQ6ICAgU2F0IE9jdCAzMCAxMjo1OTowMSAxOTk5CiAgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+Ci0gKiAKKyAqCiAgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgICAgIAotICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCi0gKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCi0gKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAgCisgKgogICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKLSAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KLSAqICAgICAKKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxhbl9ldmVudC5oPgpAQCAtMzgsNyArMzgsNyBAQAogCSJJUkxBTl9TWU5DIiwKIH07CiAKLXZvaWQgaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9TVEFURSBzdGF0ZSkgCit2b2lkIGlybGFuX25leHRfY2xpZW50X3N0YXRlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fU1RBVEUgc3RhdGUpCiB7CiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgJXNcbiIsIF9fRlVOQ1RJT05fXyAsIGlybGFuX3N0YXRlW3N0YXRlXSk7CiAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlzZWxmLT5jbGllbnQuc3RhdGUgPSBzdGF0ZTsKIH0KIAotdm9pZCBpcmxhbl9uZXh0X3Byb3ZpZGVyX3N0YXRlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fU1RBVEUgc3RhdGUpIAordm9pZCBpcmxhbl9uZXh0X3Byb3ZpZGVyX3N0YXRlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fU1RBVEUgc3RhdGUpCiB7CiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgJXNcbiIsIF9fRlVOQ1RJT05fXyAsIGlybGFuX3N0YXRlW3N0YXRlXSk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2ZpbHRlci5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKaW5kZXggY2E3ZDM1OC4uZTYzNDZiOCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKQEAgLTEsMjUgKzEsMjUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgIAorICoKICAqIEZpbGVuYW1lOiAgICAgIGlybGFuX2ZpbHRlci5jCi0gKiBWZXJzaW9uOiAgICAgICAKLSAqIERlc2NyaXB0aW9uOiAgIAorICogVmVyc2lvbjoKKyAqIERlc2NyaXB0aW9uOgogICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgogICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogICogQ3JlYXRlZCBhdDogICAgRnJpIEphbiAyOSAxMToxNjozOCAxOTk5CiAgKiBNb2RpZmllZCBhdDogICBTYXQgT2N0IDMwIDEyOjU4OjQ1IDE5OTkKICAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KLSAqIAorICoKICAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqICAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqICAKKyAqCiAgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgotICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgotICogICAgIAorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpAQCAtNDAsNyArNDAsNyBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwogCi0JaWYgKChzZWxmLT5wcm92aWRlci5maWx0ZXJfdHlwZSA9PSBJUkxBTl9ESVJFQ1RFRCkgJiYgCisJaWYgKChzZWxmLT5wcm92aWRlci5maWx0ZXJfdHlwZSA9PSBJUkxBTl9ESVJFQ1RFRCkgJiYKIAkgICAgKHNlbGYtPnByb3ZpZGVyLmZpbHRlcl9vcGVyYXRpb24gPT0gRFlOQU1JQykpCiAJewogCQlJUkRBX0RFQlVHKDAsICJHaXZpbmcgcGVlciBhIGR5bmFtaWMgRXRoZXJuZXQgYWRkcmVzc1xuIik7CkBAIC00OCwxMiArNDgsMTIgQEAKIAkJc2VsZi0+cHJvdmlkZXIubWFjX2FkZHJlc3NbMV0gPSAweDAwOwogCQlzZWxmLT5wcm92aWRlci5tYWNfYWRkcmVzc1syXSA9IDB4MDA7CiAJCXNlbGYtPnByb3ZpZGVyLm1hY19hZGRyZXNzWzNdID0gMHgwMDsKLQkJCisKIAkJLyogVXNlIGFyYml0cmF0aW9uIHZhbHVlIHRvIGdlbmVyYXRlIE1BQyBhZGRyZXNzICovCiAJCWlmIChzZWxmLT5wcm92aWRlci5hY2Nlc3NfdHlwZSA9PSBBQ0NFU1NfUEVFUikgewotCQkJc2VsZi0+cHJvdmlkZXIubWFjX2FkZHJlc3NbNF0gPSAKKwkJCXNlbGYtPnByb3ZpZGVyLm1hY19hZGRyZXNzWzRdID0KIAkJCQlzZWxmLT5wcm92aWRlci5zZW5kX2FyYl92YWwgJiAweGZmOwotCQkJc2VsZi0+cHJvdmlkZXIubWFjX2FkZHJlc3NbNV0gPSAKKwkJCXNlbGYtPnByb3ZpZGVyLm1hY19hZGRyZXNzWzVdID0KIAkJCQkoc2VsZi0+cHJvdmlkZXIuc2VuZF9hcmJfdmFsID4+IDgpICYgMHhmZjsKIAkJfSBlbHNlIHsKIAkJCS8qIEp1c3QgZ2VuZXJhdGUgc29tZXRoaW5nIGZvciBub3cgKi8KQEAgLTY1LDEyICs2NSwxMiBAQAogCQlza2ItPmRhdGFbMV0gPSAweDAzOwogCQlpcmxhbl9pbnNlcnRfc3RyaW5nX3BhcmFtKHNrYiwgIkZJTFRFUl9NT0RFIiwgIk5PTkUiKTsKIAkJaXJsYW5faW5zZXJ0X3Nob3J0X3BhcmFtKHNrYiwgIk1BWF9FTlRSWSIsIDB4MDAwMSk7Ci0JCWlybGFuX2luc2VydF9hcnJheV9wYXJhbShza2IsICJGSUxURVJfRU5UUlkiLCAKKwkJaXJsYW5faW5zZXJ0X2FycmF5X3BhcmFtKHNrYiwgIkZJTFRFUl9FTlRSWSIsCiAJCQkJCSBzZWxmLT5wcm92aWRlci5tYWNfYWRkcmVzcywgNik7CiAJCXJldHVybjsKIAl9Ci0JCi0JaWYgKChzZWxmLT5wcm92aWRlci5maWx0ZXJfdHlwZSA9PSBJUkxBTl9ESVJFQ1RFRCkgJiYgCisKKwlpZiAoKHNlbGYtPnByb3ZpZGVyLmZpbHRlcl90eXBlID09IElSTEFOX0RJUkVDVEVEKSAmJgogCSAgICAoc2VsZi0+cHJvdmlkZXIuZmlsdGVyX21vZGUgPT0gRklMVEVSKSkKIAl7CiAJCUlSREFfREVCVUcoMCwgIkRpcmVjdGVkIGZpbHRlciBvblxuIik7CkBAIC03OCw3ICs3OCw3IEBACiAJCXNrYi0+ZGF0YVsxXSA9IDB4MDA7CiAJCXJldHVybjsKIAl9Ci0JaWYgKChzZWxmLT5wcm92aWRlci5maWx0ZXJfdHlwZSA9PSBJUkxBTl9ESVJFQ1RFRCkgJiYgCisJaWYgKChzZWxmLT5wcm92aWRlci5maWx0ZXJfdHlwZSA9PSBJUkxBTl9ESVJFQ1RFRCkgJiYKIAkgICAgKHNlbGYtPnByb3ZpZGVyLmZpbHRlcl9tb2RlID09IE5PTkUpKQogCXsKIAkJSVJEQV9ERUJVRygwLCAiRGlyZWN0ZWQgZmlsdGVyIG9mZlxuIik7CkBAIC04Nyw3ICs4Nyw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoKHNlbGYtPnByb3ZpZGVyLmZpbHRlcl90eXBlID09IElSTEFOX0JST0FEQ0FTVCkgJiYgCisJaWYgKChzZWxmLT5wcm92aWRlci5maWx0ZXJfdHlwZSA9PSBJUkxBTl9CUk9BRENBU1QpICYmCiAJICAgIChzZWxmLT5wcm92aWRlci5maWx0ZXJfbW9kZSA9PSBGSUxURVIpKQogCXsKIAkJSVJEQV9ERUJVRygwLCAiQnJvYWRjYXN0IGZpbHRlciBvblxuIik7CkBAIC05NSw3ICs5NSw3IEBACiAJCXNrYi0+ZGF0YVsxXSA9IDB4MDA7CiAJCXJldHVybjsKIAl9Ci0JaWYgKChzZWxmLT5wcm92aWRlci5maWx0ZXJfdHlwZSA9PSBJUkxBTl9CUk9BRENBU1QpICYmIAorCWlmICgoc2VsZi0+cHJvdmlkZXIuZmlsdGVyX3R5cGUgPT0gSVJMQU5fQlJPQURDQVNUKSAmJgogCSAgICAoc2VsZi0+cHJvdmlkZXIuZmlsdGVyX21vZGUgPT0gTk9ORSkpCiAJewogCQlJUkRBX0RFQlVHKDAsICJCcm9hZGNhc3QgZmlsdGVyIG9mZlxuIik7CkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJc2tiLT5kYXRhWzFdID0gMHgwMDsKIAkJcmV0dXJuOwogCX0KLQlpZiAoKHNlbGYtPnByb3ZpZGVyLmZpbHRlcl90eXBlID09IElSTEFOX01VTFRJQ0FTVCkgJiYgCisJaWYgKChzZWxmLT5wcm92aWRlci5maWx0ZXJfdHlwZSA9PSBJUkxBTl9NVUxUSUNBU1QpICYmCiAJICAgIChzZWxmLT5wcm92aWRlci5maWx0ZXJfbW9kZSA9PSBGSUxURVIpKQogCXsKIAkJSVJEQV9ERUJVRygwLCAiTXVsdGljYXN0IGZpbHRlciBvblxuIik7CkBAIC0xMTEsNyArMTExLDcgQEAKIAkJc2tiLT5kYXRhWzFdID0gMHgwMDsKIAkJcmV0dXJuOwogCX0KLQlpZiAoKHNlbGYtPnByb3ZpZGVyLmZpbHRlcl90eXBlID09IElSTEFOX01VTFRJQ0FTVCkgJiYgCisJaWYgKChzZWxmLT5wcm92aWRlci5maWx0ZXJfdHlwZSA9PSBJUkxBTl9NVUxUSUNBU1QpICYmCiAJICAgIChzZWxmLT5wcm92aWRlci5maWx0ZXJfbW9kZSA9PSBOT05FKSkKIAl7CiAJCUlSREFfREVCVUcoMCwgIk11bHRpY2FzdCBmaWx0ZXIgb2ZmXG4iKTsKQEAgLTExOSw3ICsxMTksNyBAQAogCQlza2ItPmRhdGFbMV0gPSAweDAwOwogCQlyZXR1cm47CiAJfQotCWlmICgoc2VsZi0+cHJvdmlkZXIuZmlsdGVyX3R5cGUgPT0gSVJMQU5fTVVMVElDQVNUKSAmJiAKKwlpZiAoKHNlbGYtPnByb3ZpZGVyLmZpbHRlcl90eXBlID09IElSTEFOX01VTFRJQ0FTVCkgJiYKIAkgICAgKHNlbGYtPnByb3ZpZGVyLmZpbHRlcl9vcGVyYXRpb24gPT0gR0VUKSkKIAl7CiAJCUlSREFfREVCVUcoMCwgIk11bHRpY2FzdCBmaWx0ZXIgZ2V0XG4iKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX3Byb3ZpZGVyLmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlci5jCmluZGV4IDU4ZWZkZTkuLmFhYzY2NDMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX3Byb3ZpZGVyLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgIAorICoKICAqIEZpbGVuYW1lOiAgICAgIGlybGFuX3Byb3ZpZGVyLmMKICAqIFZlcnNpb246ICAgICAgIDAuOQogICogRGVzY3JpcHRpb246ICAgSXJEQSBMQU4gQWNjZXNzIFByb3RvY29sIEltcGxlbWVudGF0aW9uCkBAIC0xMSwxNyArMTEsMTcgQEAKICAqIFNvdXJjZXM6ICAgICAgIHNrZWxldG9uLmMgYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQENFU0RJUy5nc2ZjLm5hc2EuZ292PgogICogICAgICAgICAgICAgICAgc2xpcC5jIGJ5IExhdXJlbmNlIEN1bGhhbmUsICAgPGxvekBob2xtZXMuZGVtb24uY28udWs+CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHV3YWx0Lm5sLm11Z25ldC5vcmc+Ci0gKiAKLSAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKKyAqCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwKICAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogICAgIAotICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCi0gKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCi0gKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKLSAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01Miw4ICs1Miw4IEBACiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYW5fZmlsdGVyLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYW5fY2xpZW50Lmg+CiAKLXN0YXRpYyB2b2lkIGlybGFuX3Byb3ZpZGVyX2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKLQkJCQkJICAgICAgc3RydWN0IHFvc19pbmZvICpxb3MsIAorc3RhdGljIHZvaWQgaXJsYW5fcHJvdmlkZXJfY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCisJCQkJCSAgICAgIHN0cnVjdCBxb3NfaW5mbyAqcW9zLAogCQkJCQkgICAgICBfX3UzMiBtYXhfc2R1X3NpemUsCiAJCQkJCSAgICAgIF9fdTggbWF4X2hlYWRlcl9zaXplLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTY0LDE0ICs2NCwxNCBAQAogICogICAgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBkYXRhIHRoYXQgaXMgcmVjZWl2ZWQgb24gdGhlIGNvbnRyb2wgY2hhbm5lbAogICoKICAqLwotc3RhdGljIGludCBpcmxhbl9wcm92aWRlcl9kYXRhX2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCi0JCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikgCitzdGF0aWMgaW50IGlybGFuX3Byb3ZpZGVyX2RhdGFfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmOwogCV9fdTggY29kZTsKLQkKKwogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJc2VsZiA9IChzdHJ1Y3QgaXJsYW5fY2IgKikgaW5zdGFuY2U7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwpAQCAtODMsMTYgKzgzLDE2IEBACiAJc3dpdGNoKGNvZGUpIHsKIAljYXNlIENNRF9HRVRfUFJPVklERVJfSU5GTzoKIAkJSVJEQV9ERUJVRyg0LCAiR290IEdFVF9QUk9WSURFUl9JTkZPIGNvbW1hbmQhXG4iKTsKLQkJaXJsYW5fZG9fcHJvdmlkZXJfZXZlbnQoc2VsZiwgSVJMQU5fR0VUX0lORk9fQ01ELCBza2IpOyAKKwkJaXJsYW5fZG9fcHJvdmlkZXJfZXZlbnQoc2VsZiwgSVJMQU5fR0VUX0lORk9fQ01ELCBza2IpOwogCQlicmVhazsKIAogCWNhc2UgQ01EX0dFVF9NRURJQV9DSEFSOgogCQlJUkRBX0RFQlVHKDQsICJHb3QgR0VUX01FRElBX0NIQVIgY29tbWFuZCFcbiIpOwotCQlpcmxhbl9kb19wcm92aWRlcl9ldmVudChzZWxmLCBJUkxBTl9HRVRfTUVESUFfQ01ELCBza2IpOyAKKwkJaXJsYW5fZG9fcHJvdmlkZXJfZXZlbnQoc2VsZiwgSVJMQU5fR0VUX01FRElBX0NNRCwgc2tiKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfT1BFTl9EQVRBX0NIQU5ORUw6CiAJCUlSREFfREVCVUcoNCwgIkdvdCBPUEVOX0RBVEFfQ0hBTk5FTCBjb21tYW5kIVxuIik7Ci0JCWlybGFuX2RvX3Byb3ZpZGVyX2V2ZW50KHNlbGYsIElSTEFOX09QRU5fREFUQV9DTUQsIHNrYik7IAorCQlpcmxhbl9kb19wcm92aWRlcl9ldmVudChzZWxmLCBJUkxBTl9PUEVOX0RBVEFfQ01ELCBza2IpOwogCQlicmVhazsKIAljYXNlIENNRF9GSUxURVJfT1BFUkFUSU9OOgogCQlJUkRBX0RFQlVHKDQsICJHb3QgRklMVEVSX09QRVJBVElPTiBjb21tYW5kIVxuIik7CkBAIC0xMTksOSArMTE5LDkgQEAKICAqICAgIEdvdCBjb25uZWN0aW9uIGZyb20gcGVlciBJckxBTiBjbGllbnQKICAqCiAgKi8KLXN0YXRpYyB2b2lkIGlybGFuX3Byb3ZpZGVyX2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKK3N0YXRpYyB2b2lkIGlybGFuX3Byb3ZpZGVyX2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCQkgICAgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywKLQkJCQkJICAgICAgX191MzIgbWF4X3NkdV9zaXplLCAKKwkJCQkJICAgICAgX191MzIgbWF4X3NkdV9zaXplLAogCQkJCQkgICAgICBfX3U4IG1heF9oZWFkZXJfc2l6ZSwKIAkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTEzMCwxMyArMTMwLDEzIEBACiAJX191MzIgc2FkZHIsIGRhZGRyOwogCiAJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7Ci0JCisKIAlzZWxmID0gKHN0cnVjdCBpcmxhbl9jYiAqKSBpbnN0YW5jZTsKIAl0c2FwID0gKHN0cnVjdCB0c2FwX2NiICopIHNhcDsKLQkKKwogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwotCQorCiAJSVJEQV9BU1NFUlQodHNhcCA9PSBzZWxmLT5wcm92aWRlci50c2FwX2N0cmwscmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+cHJvdmlkZXIuc3RhdGUgPT0gSVJMQU5fSURMRSwgcmV0dXJuOyk7CiAKQEAgLTE0NywxMyArMTQ3LDEzIEBACiAKIAlpcmxhbl9kb19wcm92aWRlcl9ldmVudChzZWxmLCBJUkxBTl9DT05ORUNUX0lORElDQVRJT04sIE5VTEwpOwogCi0JLyogIAorCS8qCiAJICogSWYgd2UgYXJlIGluIHBlZXIgbW9kZSwgdGhlIGNsaWVudCBtYXkgbm90IGhhdmUgZ290IHRoZSBkaXNjb3ZlcnkKLQkgKiBpbmRpY2F0aW9uIGl0IG5lZWRzIHRvIG1ha2UgcHJvZ3Jlc3MuIElmIHRoZSBjbGllbnQgaXMgc3RpbGwgaW4gCi0JICogSURMRSBzdGF0ZSwgd2UgbXVzdCBraWNrIGl0LiAKKwkgKiBpbmRpY2F0aW9uIGl0IG5lZWRzIHRvIG1ha2UgcHJvZ3Jlc3MuIElmIHRoZSBjbGllbnQgaXMgc3RpbGwgaW4KKwkgKiBJRExFIHN0YXRlLCB3ZSBtdXN0IGtpY2sgaXQuCiAJICovCi0JaWYgKChzZWxmLT5wcm92aWRlci5hY2Nlc3NfdHlwZSA9PSBBQ0NFU1NfUEVFUikgJiYgCi0JICAgIChzZWxmLT5jbGllbnQuc3RhdGUgPT0gSVJMQU5fSURMRSkpIAorCWlmICgoc2VsZi0+cHJvdmlkZXIuYWNjZXNzX3R5cGUgPT0gQUNDRVNTX1BFRVIpICYmCisJICAgIChzZWxmLT5jbGllbnQuc3RhdGUgPT0gSVJMQU5fSURMRSkpCiAJewogCQlpcmxhbl9jbGllbnRfd2FrZXVwKHNlbGYsIHNlbGYtPnNhZGRyLCBzZWxmLT5kYWRkcik7CiAJfQpAQCAtMTc1LDM4ICsxNzUsMzggQEAKIAlpcnR0cF9jb25uZWN0X3Jlc3BvbnNlKHRzYXAsIElSTEFOX01UVSwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlybGFuX3Byb3ZpZGVyX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKLQkJCQkJCSBMTV9SRUFTT04gcmVhc29uLCAKLQkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqdXNlcmRhdGEpIAorc3RhdGljIHZvaWQgaXJsYW5fcHJvdmlkZXJfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCisJCQkJCQkgTE1fUkVBU09OIHJlYXNvbiwKKwkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqdXNlcmRhdGEpCiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmOwogCXN0cnVjdCB0c2FwX2NiICp0c2FwOwogCiAJSVJEQV9ERUJVRyg0LCAiJXMoKSwgcmVhc29uPSVkXG4iLCBfX0ZVTkNUSU9OX18gLCByZWFzb24pOwotCQorCiAJc2VsZiA9IChzdHJ1Y3QgaXJsYW5fY2IgKikgaW5zdGFuY2U7CiAJdHNhcCA9IChzdHJ1Y3QgdHNhcF9jYiAqKSBzYXA7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwotCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsJCisJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHRzYXAgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQodHNhcC0+bWFnaWMgPT0gVFRQX1RTQVBfTUFHSUMsIHJldHVybjspOwotCQorCiAJSVJEQV9BU1NFUlQodHNhcCA9PSBzZWxmLT5wcm92aWRlci50c2FwX2N0cmwsIHJldHVybjspOwotCQorCiAJaXJsYW5fZG9fcHJvdmlkZXJfZXZlbnQoc2VsZiwgSVJMQU5fTE1QX0RJU0NPTk5FQ1QsIE5VTEwpOwogfQogCiAvKgogICogRnVuY3Rpb24gaXJsYW5fcGFyc2Vfb3Blbl9kYXRhX2NtZCAoc2VsZiwgc2tiKQogICoKLSAqICAgIAorICoKICAqCiAgKi8KIGludCBpcmxhbl9wYXJzZV9vcGVuX2RhdGFfY21kKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmV0OwotCQorCiAJcmV0ID0gaXJsYW5fcHJvdmlkZXJfcGFyc2VfY29tbWFuZChzZWxmLCBDTURfT1BFTl9EQVRBX0NIQU5ORUwsIHNrYik7CiAKIAkvKiBPcGVuIGRhdGEgY2hhbm5lbCAqLwpAQCAtMjE4LDEyICsyMTgsMTIgQEAKIC8qCiAgKiBGdW5jdGlvbiBwYXJzZV9jb21tYW5kIChza2IpCiAgKgotICogICAgRXh0cmFjdCBhbGwgcGFyYW1ldGVycyBmcm9tIHJlY2VpdmVkIGJ1ZmZlciwgdGhlbiBmZWVkIHRoZW0gdG8gCisgKiAgICBFeHRyYWN0IGFsbCBwYXJhbWV0ZXJzIGZyb20gcmVjZWl2ZWQgYnVmZmVyLCB0aGVuIGZlZWQgdGhlbSB0bwogICogICAgY2hlY2tfcGFyYW1zIGZvciBwYXJzaW5nCiAgKgogICovCiBpbnQgaXJsYW5fcHJvdmlkZXJfcGFyc2VfY29tbWFuZChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGludCBjbWQsCi0JCQkJIHN0cnVjdCBza19idWZmICpza2IpIAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCV9fdTggKmZyYW1lOwogCV9fdTggKnB0cjsKQEAgLTIzMSwxNiArMjMxLDE2IEBACiAJX191MTYgdmFsX2xlbjsKIAlpbnQgaTsKIAljaGFyICpuYW1lOwotICAgICAgICBjaGFyICp2YWx1ZTsKKwljaGFyICp2YWx1ZTsKIAlpbnQgcmV0ID0gUlNQX1NVQ0NFU1M7Ci0JCisKIAlJUkRBX0FTU0VSVChza2IgIT0gTlVMTCwgcmV0dXJuIC1SU1BfUFJPVE9DT0xfRVJST1I7KTsKLQkKKwogCUlSREFfREVCVUcoNCwgIiVzKCksIHNrYi0+bGVuPSVkXG4iLCBfX0ZVTkNUSU9OX18gLCAoaW50KXNrYi0+bGVuKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC1SU1BfUFJPVE9DT0xfRVJST1I7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuIC1SU1BfUFJPVE9DT0xfRVJST1I7KTsKLQkKKwogCWlmICghc2tiKQogCQlyZXR1cm4gLVJTUF9QUk9UT0NPTF9FUlJPUjsKIApAQCAtMjU5LDExICsyNTksMTEgQEAKIAljb3VudCA9IGZyYW1lWzFdOwogCiAJSVJEQV9ERUJVRyg0LCAiR290ICVkIHBhcmFtZXRlcnNcbiIsIGNvdW50KTsKLQkKKwogCXB0ciA9IGZyYW1lKzI7Ci0JCisKIAkvKiBGb3IgYWxsIHBhcmFtZXRlcnMgKi8KLSAJZm9yIChpPTA7IGk8Y291bnQ7aSsrKSB7CisJZm9yIChpPTA7IGk8Y291bnQ7aSsrKSB7CiAJCXJldCA9IGlybGFuX2V4dHJhY3RfcGFyYW0ocHRyLCBuYW1lLCB2YWx1ZSwgJnZhbF9sZW4pOwogCQlpZiAocmV0IDwgMCkgewogCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSXJMQU4sIEVycm9yIVxuIiwgX19GVU5DVElPTl9fICk7CkBAIC0yODYsNyArMjg2LDcgQEAKICAqICAgIFNlbmQgcmVwbHkgdG8gcXVlcnkgdG8gcGVlciBJckxBTiBsYXllcgogICoKICAqLwotdm9pZCBpcmxhbl9wcm92aWRlcl9zZW5kX3JlcGx5KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgaW50IGNvbW1hbmQsIAordm9pZCBpcmxhbl9wcm92aWRlcl9zZW5kX3JlcGx5KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgaW50IGNvbW1hbmQsCiAJCQkgICAgICAgaW50IHJldF9jb2RlKQogewogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0zMTAsNyArMzEwLDcgQEAKIAkvKiBSZXNlcnZlIHNwYWNlIGZvciBUVFAsIExNUCwgYW5kIExBUCBoZWFkZXIgKi8KIAlza2JfcmVzZXJ2ZShza2IsIHNlbGYtPnByb3ZpZGVyLm1heF9oZWFkZXJfc2l6ZSk7CiAJc2tiX3B1dChza2IsIDIpOwotICAgICAgIAorCiAJc3dpdGNoIChjb21tYW5kKSB7CiAJY2FzZSBDTURfR0VUX1BST1ZJREVSX0lORk86CiAJCXNrYi0+ZGF0YVswXSA9IDB4MDA7IC8qIFN1Y2Nlc3MgKi8KQEAgLTM1Niw3ICszNTYsNyBAQAogCQlza2ItPmRhdGFbMF0gPSAweDAwOyAvKiBTdWNjZXNzICovCiAJCWlmIChzZWxmLT5wcm92aWRlci5zZW5kX2FyYl92YWwpIHsKIAkJCXNrYi0+ZGF0YVsxXSA9IDB4MDM7IC8qIDMgcGFyYW1ldGVycyAqLwotCQkJaXJsYW5faW5zZXJ0X3Nob3J0X3BhcmFtKHNrYiwgIkNPTl9BUkIiLCAKKwkJCWlybGFuX2luc2VydF9zaG9ydF9wYXJhbShza2IsICJDT05fQVJCIiwKIAkJCQkJCSBzZWxmLT5wcm92aWRlci5zZW5kX2FyYl92YWwpOwogCQl9IGVsc2UKIAkJCXNrYi0+ZGF0YVsxXSA9IDB4MDI7IC8qIDIgcGFyYW1ldGVycyAqLwpAQCAtMzc4LDEzICszNzgsMTMgQEAKICAqIEZ1bmN0aW9uIGlybGFuX3Byb3ZpZGVyX3JlZ2lzdGVyKHZvaWQpCiAgKgogICogICAgUmVnaXN0ZXIgcHJvdmlkZXIgc3VwcG9ydCBzbyB3ZSBjYW4gYWNjZXB0IGluY29taW5nIGNvbm5lY3Rpb25zLgotICogCisgKgogICovCiBpbnQgaXJsYW5fcHJvdmlkZXJfb3Blbl9jdHJsX3RzYXAoc3RydWN0IGlybGFuX2NiICpzZWxmKQogewogCXN0cnVjdCB0c2FwX2NiICp0c2FwOwogCW5vdGlmeV90IG5vdGlmeTsKLQkKKwogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKQEAgLTM5Myw3ICszOTMsNyBAQAogCS8qIENoZWNrIGlmIGFscmVhZHkgb3BlbiAqLwogCWlmIChzZWxmLT5wcm92aWRlci50c2FwX2N0cmwpCiAJCXJldHVybiAtMTsKLQkKKwogCS8qCiAJICogIEZpcnN0IHJlZ2lzdGVyIHdlbGwga25vd24gY29udHJvbCBUU0FQCiAJICovCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlcl9ldmVudC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXJfZXZlbnQuYwppbmRleCA1YTA4NmY5Li5lZjQwMWJkIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlcl9ldmVudC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX3Byb3ZpZGVyX2V2ZW50LmMKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAKKyAqCiAgKiBGaWxlbmFtZTogICAgICBpcmxhbl9wcm92aWRlcl9ldmVudC5jCiAgKiBWZXJzaW9uOiAgICAgICAwLjkKICAqIERlc2NyaXB0aW9uOiAgIElyTEFOIHByb3ZpZGVyIHN0YXRlIG1hY2hpbmUpCkBAIC04LDE2ICs4LDE2IEBACiAgKiBDcmVhdGVkIGF0OiAgICBTdW4gQXVnIDMxIDIwOjE0OjM3IDE5OTcKICAqIE1vZGlmaWVkIGF0OiAgIFNhdCBPY3QgMzAgMTI6NTI6NDEgMTk5OQogICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgotICogCisgKgogICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgotICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMwLDE4ICszMCwxOCBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lybGFuX3Byb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYW5fZXZlbnQuaD4KIAotc3RhdGljIGludCBpcmxhbl9wcm92aWRlcl9zdGF0ZV9pZGxlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAorc3RhdGljIGludCBpcmxhbl9wcm92aWRlcl9zdGF0ZV9pZGxlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgaXJsYW5fcHJvdmlkZXJfc3RhdGVfaW5mbyhzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LCAKK3N0YXRpYyBpbnQgaXJsYW5fcHJvdmlkZXJfc3RhdGVfaW5mbyhzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgaW50IGlybGFuX3Byb3ZpZGVyX3N0YXRlX29wZW4oc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwgCitzdGF0aWMgaW50IGlybGFuX3Byb3ZpZGVyX3N0YXRlX29wZW4oc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludCBpcmxhbl9wcm92aWRlcl9zdGF0ZV9kYXRhKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAorc3RhdGljIGludCBpcmxhbl9wcm92aWRlcl9zdGF0ZV9kYXRhKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotc3RhdGljIGludCAoKnN0YXRlW10pKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAotCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSA9IAoteyAKK3N0YXRpYyBpbnQgKCpzdGF0ZVtdKShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSA9Cit7CiAJaXJsYW5fcHJvdmlkZXJfc3RhdGVfaWRsZSwKIAlOVUxMLCAvKiBRdWVyeSAqLwogCU5VTEwsIC8qIEluZm8gKi8KQEAgLTU1LDggKzU1LDggQEAKIAlOVUxMLCAvKiBTeW5jICovCiB9OwogCi12b2lkIGlybGFuX2RvX3Byb3ZpZGVyX2V2ZW50KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAotCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAKK3ZvaWQgaXJsYW5fZG9fcHJvdmlkZXJfZXZlbnQoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlJUkRBX0FTU0VSVCgqc3RhdGVbIHNlbGYtPnByb3ZpZGVyLnN0YXRlXSAhPSBOVUxMLCByZXR1cm47KTsKIApAQCAtNzMsOSArNzMsOSBAQAogCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKLQkKKwogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7Ci0JCisKIAlzd2l0Y2goZXZlbnQpIHsKIAljYXNlIElSTEFOX0NPTk5FQ1RfSU5ESUNBVElPTjoKIAkgICAgIGlybGFuX3Byb3ZpZGVyX2Nvbm5lY3RfcmVzcG9uc2UoIHNlbGYsIHNlbGYtPnByb3ZpZGVyLnRzYXBfY3RybCk7CkBAIC05NiwxMyArOTYsMTMgQEAKICAqCiAgKiAgICBJTkZPLCBXZSBoYXZlIGlzc3VlZCBhIEdldEluZm8gY29tbWFuZCBhbmQgaXMgYXdhaXRpbmcgYSByZXBseS4KICAqLwotc3RhdGljIGludCBpcmxhbl9wcm92aWRlcl9zdGF0ZV9pbmZvKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAotCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikgCitzdGF0aWMgaW50IGlybGFuX3Byb3ZpZGVyX3N0YXRlX2luZm8oc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJldDsKIAogCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAogCXN3aXRjaChldmVudCkgewpAQCAtMTEwLDcgKzExMCw3IEBACiAJCS8qIEJlIHN1cmUgdG8gdXNlIDgwMi4zIGluIGNhc2Ugb2YgcGVlciBtb2RlICovCiAJCWlmIChzZWxmLT5wcm92aWRlci5hY2Nlc3NfdHlwZSA9PSBBQ0NFU1NfUEVFUikgewogCQkJc2VsZi0+bWVkaWEgPSBNRURJQV84MDJfMzsKLQkJCQorCiAJCQkvKiBDaGVjayBpZiBjbGllbnQgaGFzIHN0YXJ0ZWQgeWV0ICovCiAJCQlpZiAoc2VsZi0+Y2xpZW50LnN0YXRlID09IElSTEFOX0lETEUpIHsKIAkJCQkvKiBUaGlzIHNob3VsZCBnZXQgdGhlIGNsaWVudCBnb2luZyAqLwpAQCAtMTE4LDE1ICsxMTgsMTUgQEAKIAkJCX0KIAkJfQogCi0JCWlybGFuX3Byb3ZpZGVyX3NlbmRfcmVwbHkoc2VsZiwgQ01EX0dFVF9QUk9WSURFUl9JTkZPLCAKKwkJaXJsYW5fcHJvdmlkZXJfc2VuZF9yZXBseShzZWxmLCBDTURfR0VUX1BST1ZJREVSX0lORk8sCiAJCQkJCSAgUlNQX1NVQ0NFU1MpOwogCQkvKiBLZWVwIHN0YXRlICovCiAJCWJyZWFrOwotCWNhc2UgSVJMQU5fR0VUX01FRElBX0NNRDogCi0JCWlybGFuX3Byb3ZpZGVyX3NlbmRfcmVwbHkoc2VsZiwgQ01EX0dFVF9NRURJQV9DSEFSLCAKKwljYXNlIElSTEFOX0dFVF9NRURJQV9DTUQ6CisJCWlybGFuX3Byb3ZpZGVyX3NlbmRfcmVwbHkoc2VsZiwgQ01EX0dFVF9NRURJQV9DSEFSLAogCQkJCQkgIFJTUF9TVUNDRVNTKTsKIAkJLyogS2VlcCBzdGF0ZSAqLwotCQlicmVhazsJCQorCQlicmVhazsKIAljYXNlIElSTEFOX09QRU5fREFUQV9DTUQ6CiAJCXJldCA9IGlybGFuX3BhcnNlX29wZW5fZGF0YV9jbWQoc2VsZiwgc2tiKTsKIAkJaWYgKHNlbGYtPnByb3ZpZGVyLmFjY2Vzc190eXBlID09IEFDQ0VTU19QRUVSKSB7CkBAIC0xNTIsNyArMTUyLDcgQEAKIAl9CiAJaWYgKHNrYikKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2Myw3ICsxNjMsNyBAQAogICogICAgcmVwbHkKICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJsYW5fcHJvdmlkZXJfc3RhdGVfb3BlbihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LCAKK3N0YXRpYyBpbnQgaXJsYW5fcHJvdmlkZXJfc3RhdGVfb3BlbihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKQEAgLTE3MywxMSArMTczLDExIEBACiAJc3dpdGNoKGV2ZW50KSB7CiAJY2FzZSBJUkxBTl9GSUxURVJfQ09ORklHX0NNRDoKIAkJaXJsYW5fcHJvdmlkZXJfcGFyc2VfY29tbWFuZChzZWxmLCBDTURfRklMVEVSX09QRVJBVElPTiwgc2tiKTsKLQkJaXJsYW5fcHJvdmlkZXJfc2VuZF9yZXBseShzZWxmLCBDTURfRklMVEVSX09QRVJBVElPTiwgCisJCWlybGFuX3Byb3ZpZGVyX3NlbmRfcmVwbHkoc2VsZiwgQ01EX0ZJTFRFUl9PUEVSQVRJT04sCiAJCQkJCSAgUlNQX1NVQ0NFU1MpOwogCQkvKiBLZWVwIHN0YXRlICovCiAJCWJyZWFrOwotCWNhc2UgSVJMQU5fREFUQV9DT05ORUNUX0lORElDQVRJT046IAorCWNhc2UgSVJMQU5fREFUQV9DT05ORUNUX0lORElDQVRJT046CiAJCWlybGFuX25leHRfcHJvdmlkZXJfc3RhdGUoc2VsZiwgSVJMQU5fREFUQSk7CiAJCWlybGFuX3Byb3ZpZGVyX2Nvbm5lY3RfcmVzcG9uc2Uoc2VsZiwgc2VsZi0+dHNhcF9kYXRhKTsKIAkJYnJlYWs7CkBAIC0yMDIsOCArMjAyLDggQEAKICAqICAgIHRoZSBsb2NhbCBhbmQgcmVtb3RlIG1hY2hpbmVzLgogICoKICAqLwotc3RhdGljIGludCBpcmxhbl9wcm92aWRlcl9zdGF0ZV9kYXRhKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsIAotCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikgCitzdGF0aWMgaW50IGlybGFuX3Byb3ZpZGVyX3N0YXRlX2RhdGEoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXN3aXRjaChldmVudCkgewogCWNhc2UgSVJMQU5fRklMVEVSX0NPTkZJR19DTUQ6CiAJCWlybGFuX3Byb3ZpZGVyX3BhcnNlX2NvbW1hbmQoc2VsZiwgQ01EX0ZJTFRFUl9PUEVSQVRJT04sIHNrYik7Ci0JCWlybGFuX3Byb3ZpZGVyX3NlbmRfcmVwbHkoc2VsZiwgQ01EX0ZJTFRFUl9PUEVSQVRJT04sIAorCQlpcmxhbl9wcm92aWRlcl9zZW5kX3JlcGx5KHNlbGYsIENNRF9GSUxURVJfT1BFUkFUSU9OLAogCQkJCQkgIFJTUF9TVUNDRVNTKTsKIAkJYnJlYWs7CiAJY2FzZSBJUkxBTl9MTVBfRElTQ09OTkVDVDogLyogRkFMTFRIUk9VR0ggKi8KQEAgLTIyNiw3ICsyMjYsNyBAQAogCX0KIAlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXAuYyBiL25ldC9pcmRhL2lybGFwLmMKaW5kZXggZTc4NTJhMC4uZmQ3M2U0YSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXAuYworKysgYi9uZXQvaXJkYS9pcmxhcC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJLyogQWxsb2NhdGUgbWFzdGVyIGFycmF5ICovCiAJaXJsYXAgPSBoYXNoYmluX25ldyhIQl9MT0NLKTsKIAlpZiAoaXJsYXAgPT0gTlVMTCkgewotCSAgICAgICAgSVJEQV9FUlJPUigiJXM6IGNhbid0IGFsbG9jYXRlIGlybGFwIGhhc2hiaW4hXG4iLAorCQlJUkRBX0VSUk9SKCIlczogY2FuJ3QgYWxsb2NhdGUgaXJsYXAgaGFzaGJpbiFcbiIsCiAJCQkgICBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC03MDEsOCArNzAxLDggQEAKIAlpbnQgY291bnQgPSAwOwogCiAJLyoKLSAgICAgICAgICogUmVtb3ZlIGFsbCB0aGUgYWNrLWVkIGZyYW1lcyBmcm9tIHRoZSB3aW5kb3cgcXVldWUuCi0gICAgICAgICAqLworCSAqIFJlbW92ZSBhbGwgdGhlIGFjay1lZCBmcmFtZXMgZnJvbSB0aGUgd2luZG93IHF1ZXVlLgorCSAqLwogCiAJLyoKIAkgKiAgT3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZS4gSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB0aGUgcmVjZWl2ZXIKQEAgLTExMDksMTMgKzExMDksMTMgQEAKIAlzcGluX2xvY2tfaXJxKCZpcmxhcC0+aGJfc3BpbmxvY2spOwogCWl0ZXItPmlkID0gMDsKIAotCWZvciAoc2VsZiA9IChzdHJ1Y3QgaXJsYXBfY2IgKikgaGFzaGJpbl9nZXRfZmlyc3QoaXJsYXApOyAKKwlmb3IgKHNlbGYgPSAoc3RydWN0IGlybGFwX2NiICopIGhhc2hiaW5fZ2V0X2ZpcnN0KGlybGFwKTsKIAkgICAgIHNlbGY7IHNlbGYgPSAoc3RydWN0IGlybGFwX2NiICopIGhhc2hiaW5fZ2V0X25leHQoaXJsYXApKSB7CiAJCWlmIChpdGVyLT5pZCA9PSAqcG9zKQogCQkJYnJlYWs7CiAJCSsraXRlci0+aWQ7CiAJfQotCQkKKwogCXJldHVybiBzZWxmOwogfQogCkBAIC0xMTM3LDcgKzExMzcsNyBAQAogewogCWNvbnN0IHN0cnVjdCBpcmxhcF9pdGVyX3N0YXRlICppdGVyID0gc2VxLT5wcml2YXRlOwogCWNvbnN0IHN0cnVjdCBpcmxhcF9jYiAqc2VsZiA9IHY7Ci0JCisKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybiAtRUlOVkFMOyk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgImlybGFwJWQgIiwgaXRlci0+aWQpOwpAQCAtMTIyMiw3ICsxMjIyLDcgQEAKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKIAlpbnQgcmMgPSAtRU5PTUVNOwogCXN0cnVjdCBpcmxhcF9pdGVyX3N0YXRlICpzID0ga3phbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKLSAgICAgICAKKwogCWlmICghcykKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCmluZGV4IDk5ZmFmZjYuLjdiNjQzM2YgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYwpAQCAtODI3LDcgKzgyNyw3IEBACiAJCWlybGFwX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbihzZWxmLCBMQVBfRElTQ19JTkRJQ0FUSU9OKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgVW5rbm93biBldmVudCAlZCwgJXNcbiIsIF9fRlVOQ1RJT05fXywgCisJCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vd24gZXZlbnQgJWQsICVzXG4iLCBfX0ZVTkNUSU9OX18sCiAJCQkgICBldmVudCwgaXJsYXBfZXZlbnRbZXZlbnRdKTsKIAogCQlyZXQgPSAtMTsKQEAgLTg2NCw3ICs4NjQsNyBAQAogICogIGJldHdlZW4gMTUgbXNlY3MgYW5kIDQ1IG1zZWNzLgogICovCiAJCQlpcmxhcF9zdGFydF9iYWNrb2ZmX3RpbWVyKHNlbGYsIG1zZWNzX3RvX2ppZmZpZXMoMjAgKwotCQkJCQkJICAgICAgICAoamlmZmllcyAlIDMwKSkpOworCQkJCQkJCShqaWZmaWVzICUgMzApKSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBBbHdheXMgc3dpdGNoIHN0YXRlIGJlZm9yZSBjYWxsaW5nIHVwcGVyIGxheWVycyAqLwogCQkJaXJsYXBfbmV4dF9zdGF0ZShzZWxmLCBMQVBfTkRNKTsKQEAgLTEzNzcsNyArMTM3Nyw3IEBACiAJCQkJLyogUmVzZW5kIHJlamVjdGVkIGZyYW1lcyAqLwogCQkJCWlybGFwX3Jlc2VuZF9yZWplY3RlZF9mcmFtZXMoc2VsZiwgQ01EX0ZSQU1FKTsKIAotCQkJCS8qIEdpdmUgcGVlciBzb21lIHRpbWUgdG8gcmV0cmFuc21pdCEgCisJCQkJLyogR2l2ZSBwZWVyIHNvbWUgdGltZSB0byByZXRyYW5zbWl0IQogCQkJCSAqIEJ1dCBhY2NvdW50IGZvciBvdXIgb3duIFR4LiAqLwogCQkJCWlybGFwX3N0YXJ0X2ZpbmFsX3RpbWVyKHNlbGYsIDIgKiBzZWxmLT5maW5hbF90aW1lb3V0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYyBiL25ldC9pcmRhL2lybGFwX2ZyYW1lLmMKaW5kZXggZGJhMzQ5Yy4uMGIwNDYwMyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYworKysgYi9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jCkBAIC00MTQsNyArNDE0LDcgQEAKIAkJSVJEQV9FUlJPUigiJXM6IGZyYW1lIHRvIHNob3J0IVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuOwogCX0KLQkJCisKIAl4aWQgPSAoc3RydWN0IHhpZF9mcmFtZSAqKSBza2ItPmRhdGE7CiAKIAlpbmZvLT5kYWRkciA9IGxlMzJfdG9fY3B1KHhpZC0+c2FkZHIpOwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCUlSREFfRVJST1IoIiVzOiBmcmFtZSB0byBzaG9ydCFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JCisKIAl4aWQgPSAoc3RydWN0IHhpZF9mcmFtZSAqKSBza2ItPmRhdGE7CiAKIAlpbmZvLT5kYWRkciA9IGxlMzJfdG9fY3B1KHhpZC0+c2FkZHIpOwpAQCAtNTI0LDcgKzUyNCw3IEBACiAJICovCiAJaWYgKGluZm8tPnMgPT0gMHhmZikgewogCQkvKiBDaGVjayBpZiB0aGluZ3MgYXJlIHNhbmUgYXQgdGhpcyBwb2ludC4uLiAqLwotCQlpZigoZGlzY292ZXJ5X2luZm8gPT0gTlVMTCkgfHwgCisJCWlmKChkaXNjb3ZlcnlfaW5mbyA9PSBOVUxMKSB8fAogCQkgICAhcHNrYl9tYXlfcHVsbChza2IsIDMpKSB7CiAJCQlJUkRBX0VSUk9SKCIlczogZGlzY292ZXJ5IGZyYW1lIHRvIHNob3J0IVxuIiwKIAkJCQkgICBfX0ZVTkNUSU9OX18pOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsbXAuYyBiL25ldC9pcmRhL2lybG1wLmMKaW5kZXggN2U1ZDEyYS4uYjEzNGMzYyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsbXAuYworKysgYi9uZXQvaXJkYS9pcmxtcC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKICAqICAgIFJlbW92ZSBJckxNUCBsYXllcgogICoKICAqLwotdm9pZCBfX2V4aXQgaXJsbXBfY2xlYW51cCh2b2lkKSAKK3ZvaWQgX19leGl0IGlybG1wX2NsZWFudXAodm9pZCkKIHsKIAkvKiBDaGVjayBmb3IgbWFpbiBzdHJ1Y3R1cmUgKi8KIAlJUkRBX0FTU0VSVChpcmxtcCAhPSBOVUxMLCByZXR1cm47KTsKQEAgLTg5Miw3ICs4OTIsNyBAQAogCiAJLyoKIAkgKiBTdGFydCBhIHNpbmdsZSBkaXNjb3Zlcnkgb3BlcmF0aW9uIGlmIGRpc2NvdmVyeSBpcyBub3QgYWxyZWFkeQotICAgICAgICAgKiBydW5uaW5nCisJICogcnVubmluZwogCSAqLwogCWlmICghc3lzY3RsX2Rpc2NvdmVyeSkgewogCQkvKiBDaGVjayBpZiB1c2VyIHdhbnRzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0ICovCkBAIC0xNTI4LDEyICsxNTI4LDEyIEBACiAKIAkvKiBSZWZyZXNoIGN1cnJlbnQgaGludCBiaXRzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlybG1wLT5zZXJ2aWNlcy0+aGJfc3BpbmxvY2ssIGZsYWdzKTsKLSAgICAgICAgc2VydmljZSA9IChpcmxtcF9zZXJ2aWNlX3QgKikgaGFzaGJpbl9nZXRfZmlyc3QoaXJsbXAtPnNlcnZpY2VzKTsKLSAgICAgICAgd2hpbGUgKHNlcnZpY2UpIHsKKwlzZXJ2aWNlID0gKGlybG1wX3NlcnZpY2VfdCAqKSBoYXNoYmluX2dldF9maXJzdChpcmxtcC0+c2VydmljZXMpOworCXdoaWxlIChzZXJ2aWNlKSB7CiAJCWlybG1wLT5oaW50cy53b3JkIHw9IHNlcnZpY2UtPmhpbnRzLndvcmQ7CiAKLSAgICAgICAgICAgICAgICBzZXJ2aWNlID0gKGlybG1wX3NlcnZpY2VfdCAqKWhhc2hiaW5fZ2V0X25leHQoaXJsbXAtPnNlcnZpY2VzKTsKLSAgICAgICAgfQorCQlzZXJ2aWNlID0gKGlybG1wX3NlcnZpY2VfdCAqKWhhc2hiaW5fZ2V0X25leHQoaXJsbXAtPnNlcnZpY2VzKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJsbXAtPnNlcnZpY2VzLT5oYl9zcGlubG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtMTg2MSw3ICsxODYxLDcgQEAKIAogCXNwaW5fbG9ja19pcnEoJml0ZXItPmhhc2hiaW4tPmhiX3NwaW5sb2NrKTsKIAlmb3IgKGVsZW1lbnQgPSBoYXNoYmluX2dldF9maXJzdChpdGVyLT5oYXNoYmluKTsKLQkgICAgIGVsZW1lbnQgIT0gTlVMTDsgCisJICAgICBlbGVtZW50ICE9IE5VTEw7CiAJICAgICBlbGVtZW50ID0gaGFzaGJpbl9nZXRfbmV4dChpdGVyLT5oYXNoYmluKSkgewogCQlpZiAoIW9mZiB8fCAqb2ZmLS0gPT0gMCkgewogCQkJLyogTkI6IGhhc2hiaW4gbGVmdCBsb2NrZWQgKi8KQEAgLTE5MTgsNyArMTkxOCw3IEBACiAJaWYgKHYgPT0gTlVMTCkgewkJCS8qIG5vIG1vcmUgaW4gdGhpcyBoYXNoIGJpbiAqLwogCQlzcGluX3VubG9ja19pcnEoJml0ZXItPmhhc2hiaW4tPmhiX3NwaW5sb2NrKTsKIAotCQlpZiAoaXRlci0+aGFzaGJpbiA9PSBpcmxtcC0+dW5jb25uZWN0ZWRfbHNhcHMpIAorCQlpZiAoaXRlci0+aGFzaGJpbiA9PSBpcmxtcC0+dW5jb25uZWN0ZWRfbHNhcHMpCiAJCQl2ID0gIExJTktfU1RBUlRfVE9LRU47CiAKIAkJaXRlci0+aGFzaGJpbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxtcF9ldmVudC5jIGIvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYwppbmRleCA0YzkwZGQxLi42NWZmYTk4IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxtcF9ldmVudC5jCisrKyBiL25ldC9pcmRhL2lybG1wX2V2ZW50LmMKQEAgLTYxNSw3ICs2MTUsNyBAQAogCWRlZmF1bHQ6CiAJCS8qIExNX0xBUF9ESVNDT05ORUNUX0lORElDQVRJT04gOiBTaG91bGQgbmV2ZXIgaGFwcGVuLCB3ZQogCQkgKiBhcmUgKm5vdCogeWV0IGJvdW5kIHRvIHRoZSBJckxBUCBsaW5rLiBKZWFuIElJICovCi0JCUlSREFfREVCVUcoMCwgIiVzKCksIFVua25vd24gZXZlbnQgJXMgb24gTFNBUCAlIzAyeFxuIiwgCisJCUlSREFfREVCVUcoMCwgIiVzKCksIFVua25vd24gZXZlbnQgJXMgb24gTFNBUCAlIzAyeFxuIiwKIAkJCSAgIF9fRlVOQ1RJT05fXywgaXJsbXBfZXZlbnRbZXZlbnRdLCBzZWxmLT5zbHNhcF9zZWwpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxtcF9mcmFtZS5jIGIvbmV0L2lyZGEvaXJsbXBfZnJhbWUuYwppbmRleCAzOTc2MWExLi41NTkzMDJkIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxtcF9mcmFtZS5jCisrKyBiL25ldC9pcmRhL2lybG1wX2ZyYW1lLmMKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAKKyAqCiAgKiBGaWxlbmFtZTogICAgICBpcmxtcF9mcmFtZS5jCiAgKiBWZXJzaW9uOiAgICAgICAwLjkKICAqIERlc2NyaXB0aW9uOiAgIElyTE1QIGZyYW1lIGltcGxlbWVudGF0aW9uCkBAIC04LDE4ICs4LDE4IEBACiAgKiBDcmVhdGVkIGF0OiAgICBUdWUgQXVnIDE5IDAyOjA5OjU5IDE5OTcKICAqIE1vZGlmaWVkIGF0OiAgIE1vbiBEZWMgMTMgMTM6NDE6MTIgMTk5OQogICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgotICogCisgKgogICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAzIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KLSAqICAgICAKLSAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAotICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAotICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCi0gKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lybG1wX2ZyYW1lLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvZGlzY292ZXJ5Lmg+CiAKLXN0YXRpYyBzdHJ1Y3QgbHNhcF9jYiAqaXJsbXBfZmluZF9sc2FwKHN0cnVjdCBsYXBfY2IgKnNlbGYsIF9fdTggZGxzYXAsIAorc3RhdGljIHN0cnVjdCBsc2FwX2NiICppcmxtcF9maW5kX2xzYXAoc3RydWN0IGxhcF9jYiAqc2VsZiwgX191OCBkbHNhcCwKIAkJCQkgICAgICAgX191OCBzbHNhcCwgaW50IHN0YXR1cywgaGFzaGJpbl90ICopOwogCiBpbmxpbmUgdm9pZCBpcmxtcF9zZW5kX2RhdGFfcGR1KHN0cnVjdCBsYXBfY2IgKnNlbGYsIF9fdTggZGxzYXAsIF9fdTggc2xzYXAsCkBAIC01NiwxOCArNTYsMTggQEAKICAqICAgIFNlbmQgTGluayBDb250cm9sIEZyYW1lIHRvIElyTEFQCiAgKi8KIHZvaWQgaXJsbXBfc2VuZF9sY2ZfcGR1KHN0cnVjdCBsYXBfY2IgKnNlbGYsIF9fdTggZGxzYXAsIF9fdTggc2xzYXAsCi0JCQlfX3U4IG9wY29kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikgCisJCQlfX3U4IG9wY29kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlfX3U4ICpmcmFtZTsKLQkKKwogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExNUF9MQVBfTUFHSUMsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm47KTsKLQkKKwogCWZyYW1lID0gc2tiLT5kYXRhOwotCQorCiAJZnJhbWVbMF0gPSBkbHNhcCB8IENPTlRST0xfQklUOwogCWZyYW1lWzFdID0gc2xzYXA7CiAKQEAgLTg3LDE0ICs4NywxNCBAQAogICogICAgVXNlZCBieSBJckxBUCB0byBwYXNzIHJlY2VpdmVkIGRhdGEgZnJhbWVzIHRvIElyTE1QIGxheWVyCiAgKgogICovCi12b2lkIGlybG1wX2xpbmtfZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBsYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IsIAordm9pZCBpcmxtcF9saW5rX2RhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgbGFwX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCWludCB1bnJlbGlhYmxlKQogewogCXN0cnVjdCBsc2FwX2NiICpsc2FwOwogCV9fdTggICBzbHNhcF9zZWw7ICAgLyogU291cmNlICh0aGlzKSBMU0FQIGFkZHJlc3MgKi8KIAlfX3U4ICAgZGxzYXBfc2VsOyAgIC8qIERlc3RpbmF0aW9uIExTQVAgYWRkcmVzcyAqLwogCV9fdTggICAqZnA7Ci0JCisKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKQEAgLTEwNCwxMSArMTA0LDExIEBACiAJZnAgPSBza2ItPmRhdGE7CiAKIAkvKgotCSAqICBUaGUgbmV4dCBzdGF0ZW1lbnRzIG1heSBiZSBjb25mdXNpbmcsIGJ1dCB3ZSBkbyB0aGlzIHNvIHRoYXQgCisJICogIFRoZSBuZXh0IHN0YXRlbWVudHMgbWF5IGJlIGNvbmZ1c2luZywgYnV0IHdlIGRvIHRoaXMgc28gdGhhdAogCSAqICBkZXN0aW5hdGlvbiBMU0FQIG9mIHJlY2VpdmVkIGZyYW1lIGlzIHNvdXJjZSBMU0FQIGluIG91ciB2aWV3CiAJICovCi0Jc2xzYXBfc2VsID0gZnBbMF0gJiBMU0FQX01BU0s7IAotCWRsc2FwX3NlbCA9IGZwWzFdOwkKKwlzbHNhcF9zZWwgPSBmcFswXSAmIExTQVBfTUFTSzsKKwlkbHNhcF9zZWwgPSBmcFsxXTsKIAogCS8qCiAJICogIENoZWNrIGlmIHRoaXMgaXMgYW4gaW5jb21pbmcgY29ubmVjdGlvbiwgc2luY2Ugd2UgbXVzdCBkZWFsIHdpdGgKQEAgLTExOCwxMSArMTE4LDExIEBACiAJCUlSREFfREVCVUcoMywgIiVzKCksIGluY29taW5nIGNvbm5lY3Rpb24sICIKIAkJCSAgICJzb3VyY2UgTFNBUD0lZCwgZGVzdCBMU0FQPSVkXG4iLAogCQkJICAgX19GVU5DVElPTl9fLCBzbHNhcF9zZWwsIGRsc2FwX3NlbCk7Ci0JCQorCiAJCS8qIFRyeSB0byBmaW5kIExTQVAgYW1vbmcgdGhlIHVuY29ubmVjdGVkIExTQVBzICovCiAJCWxzYXAgPSBpcmxtcF9maW5kX2xzYXAoc2VsZiwgZGxzYXBfc2VsLCBzbHNhcF9zZWwsIENPTk5FQ1RfQ01ELAogCQkJCSAgICAgICBpcmxtcC0+dW5jb25uZWN0ZWRfbHNhcHMpOwotCQkKKwogCQkvKiBNYXliZSBMU0FQIHdhcyBhbHJlYWR5IGNvbm5lY3RlZCwgc28gdHJ5IG9uZSBtb3JlIHRpbWUgKi8KIAkJaWYgKCFsc2FwKSB7CiAJCQlJUkRBX0RFQlVHKDEsICIlcygpLCBpbmNvbWluZyBjb25uZWN0aW9uIGZvciBMU0FQIGFscmVhZHkgY29ubmVjdGVkXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMTMwLDkgKzEzMCw5IEBACiAJCQkJCSAgICAgICBzZWxmLT5sc2Fwcyk7CiAJCX0KIAl9IGVsc2UKLQkJbHNhcCA9IGlybG1wX2ZpbmRfbHNhcChzZWxmLCBkbHNhcF9zZWwsIHNsc2FwX3NlbCwgMCwgCisJCWxzYXAgPSBpcmxtcF9maW5kX2xzYXAoc2VsZiwgZGxzYXBfc2VsLCBzbHNhcF9zZWwsIDAsCiAJCQkJICAgICAgIHNlbGYtPmxzYXBzKTsKLQkKKwogCWlmIChsc2FwID09IE5VTEwpIHsKIAkJSVJEQV9ERUJVRygyLCAiSXJMTVAsIFNvcnJ5LCBubyBMU0FQIGZvciByZWNlaXZlZCBmcmFtZSFcbiIpOwogCQlJUkRBX0RFQlVHKDIsICIlcygpLCBzbHNhcF9zZWwgPSAlMDJ4LCBkbHNhcF9zZWwgPSAlMDJ4XG4iLApAQCAtMTQ2LDggKzE0Niw4IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiAKLQkgKiAgQ2hlY2sgaWYgd2UgcmVjZWl2ZWQgYSBjb250cm9sIGZyYW1lPyAKKwkvKgorCSAqICBDaGVjayBpZiB3ZSByZWNlaXZlZCBhIGNvbnRyb2wgZnJhbWU/CiAJICovCiAJaWYgKGZwWzBdICYgQ09OVFJPTF9CSVQpIHsKIAkJc3dpdGNoIChmcFsyXSkgewpAQCAtMTYxLDcgKzE2MSw3IEBACiAJCWNhc2UgRElTQ09OTkVDVDoKIAkJCUlSREFfREVCVUcoNCwgIiVzKCksIERpc2Nvbm5lY3QgaW5kaWNhdGlvbiFcbiIsCiAJCQkJICAgX19GVU5DVElPTl9fKTsKLQkJCWlybG1wX2RvX2xzYXBfZXZlbnQobHNhcCwgTE1fRElTQ09OTkVDVF9JTkRJQ0FUSU9OLCAKKwkJCWlybG1wX2RvX2xzYXBfZXZlbnQobHNhcCwgTE1fRElTQ09OTkVDVF9JTkRJQ0FUSU9OLAogCQkJCQkgICAgc2tiKTsKIAkJCWJyZWFrOwogCQljYXNlIEFDQ0VTU01PREVfQ01EOgpAQCAtMTgxLDcgKzE4MSw3IEBACiAJCQlpcmxtcF91ZGF0YV9pbmRpY2F0aW9uKGxzYXAsIHNrYik7CiAJCWVsc2UKIAkJCWlybG1wX2RvX2xzYXBfZXZlbnQobHNhcCwgTE1fVURBVEFfSU5ESUNBVElPTiwgc2tiKTsKLQl9IGVsc2UgewkKKwl9IGVsc2UgewogCQkvKiBPcHRpbWl6ZSBhbmQgYnlwYXNzIHRoZSBzdGF0ZSBtYWNoaW5lIGlmIHBvc3NpYmxlICovCiAJCWlmIChsc2FwLT5sc2FwX3N0YXRlID09IExTQVBfREFUQV9UUkFOU0ZFUl9SRUFEWSkKIAkJCWlybG1wX2RhdGFfaW5kaWNhdGlvbihsc2FwLCBza2IpOwpAQCAtMTkzLDcgKzE5Myw3IEBACiAvKgogICogRnVuY3Rpb24gaXJsbXBfbGlua191bml0ZGF0YV9pbmRpY2F0aW9uIChzZWxmLCBza2IpCiAgKgotICogICAgCisgKgogICoKICAqLwogI2lmZGVmIENPTkZJR19JUkRBX1VMVFJBCkBAIC0yMDUsNyArMjA1LDcgQEAKIAlfX3U4ICAgcGlkOyAgICAgICAgIC8qIFByb3RvY29sIGlkZW50aWZpZXIgKi8KIAlfX3U4ICAgKmZwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKQEAgLTIxNSwxMyArMjE1LDEzIEBACiAJZnAgPSBza2ItPmRhdGE7CiAKIAkvKgotCSAqICBUaGUgbmV4dCBzdGF0ZW1lbnRzIG1heSBiZSBjb25mdXNpbmcsIGJ1dCB3ZSBkbyB0aGlzIHNvIHRoYXQgCisJICogIFRoZSBuZXh0IHN0YXRlbWVudHMgbWF5IGJlIGNvbmZ1c2luZywgYnV0IHdlIGRvIHRoaXMgc28gdGhhdAogCSAqICBkZXN0aW5hdGlvbiBMU0FQIG9mIHJlY2VpdmVkIGZyYW1lIGlzIHNvdXJjZSBMU0FQIGluIG91ciB2aWV3CiAJICovCi0Jc2xzYXBfc2VsID0gZnBbMF0gJiBMU0FQX01BU0s7IAorCXNsc2FwX3NlbCA9IGZwWzBdICYgTFNBUF9NQVNLOwogCWRsc2FwX3NlbCA9IGZwWzFdOwogCXBpZCAgICAgICA9IGZwWzJdOwotCQorCiAJaWYgKHBpZCAmIDB4ODApIHsKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgZXh0ZW5zaW9uIGluIFBJRCBub3Qgc3VwcCFcbiIsCiAJCQkgICBfX0ZVTkNUSU9OX18pOwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJCUlSREFfREVCVUcoMCwgIiVzKCksIGRyb3BwaW5nIGZyYW1lIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuOwogCX0KLQkKKwogCS8qIFNlYXJjaCB0aGUgY29ubmVjdGlvbmxlc3MgTFNBUCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZpcmxtcC0+dW5jb25uZWN0ZWRfbHNhcHMtPmhiX3NwaW5sb2NrLCBmbGFncyk7CiAJbHNhcCA9IChzdHJ1Y3QgbHNhcF9jYiAqKSBoYXNoYmluX2dldF9maXJzdChpcmxtcC0+dW5jb25uZWN0ZWRfbHNhcHMpOwpAQCAtMjQxLDEwICsyNDEsMTAgQEAKIAkJLyoKIAkJICogIENoZWNrIGlmIHNvdXJjZSBMU0FQIGFuZCBkZXN0IExTQVAgc2VsZWN0b3JzIGFuZCBQSUQgbWF0Y2guCiAJCSAqLwotCQlpZiAoKGxzYXAtPnNsc2FwX3NlbCA9PSBzbHNhcF9zZWwpICYmIAotCQkgICAgKGxzYXAtPmRsc2FwX3NlbCA9PSBkbHNhcF9zZWwpICYmIAotCQkgICAgKGxzYXAtPnBpZCA9PSBwaWQpKSAKLQkJewkJCQorCQlpZiAoKGxzYXAtPnNsc2FwX3NlbCA9PSBzbHNhcF9zZWwpICYmCisJCSAgICAobHNhcC0+ZGxzYXBfc2VsID09IGRsc2FwX3NlbCkgJiYKKwkJICAgIChsc2FwLT5waWQgPT0gcGlkKSkKKwkJewogCQkJYnJlYWs7CiAJCX0KIAkJbHNhcCA9IChzdHJ1Y3QgbHNhcF9jYiAqKSBoYXNoYmluX2dldF9uZXh0KGlybG1wLT51bmNvbm5lY3RlZF9sc2Fwcyk7CkBAIC0yNjIsMTIgKzI2MiwxMiBAQAogLyoKICAqIEZ1bmN0aW9uIGlybG1wX2xpbmtfZGlzY29ubmVjdF9pbmRpY2F0aW9uIChyZWFzb24sIHVzZXJkYXRhKQogICoKLSAqICAgIElyTEFQIGhhcyBkaXNjb25uZWN0ZWQgCisgKiAgICBJckxBUCBoYXMgZGlzY29ubmVjdGVkCiAgKgogICovCi12b2lkIGlybG1wX2xpbmtfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBsYXBfY2IgKmxhcCwgCi0JCQkJICAgICAgc3RydWN0IGlybGFwX2NiICppcmxhcCwgCi0JCQkJICAgICAgTEFQX1JFQVNPTiByZWFzb24sIAordm9pZCBpcmxtcF9saW5rX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbihzdHJ1Y3QgbGFwX2NiICpsYXAsCisJCQkJICAgICAgc3RydWN0IGlybGFwX2NiICppcmxhcCwKKwkJCQkgICAgICBMQVBfUkVBU09OIHJlYXNvbiwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0yNzgsOCArMjc4LDggQEAKIAlsYXAtPnJlYXNvbiA9IHJlYXNvbjsKIAlsYXAtPmRhZGRyID0gREVWX0FERFJfQU5ZOwogCi0gICAgICAgIC8qIEZJWE1FOiBtdXN0IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBza2IgaWYgYW55ICovCi0JCisJLyogRklYTUU6IG11c3QgZG8gc29tZXRoaW5nIHdpdGggdGhlIHNrYiBpZiBhbnkgKi8KKwogCS8qCiAJICogIEluZm9ybSBzdGF0aW9uIHN0YXRlIG1hY2hpbmUKIAkgKi8KQEAgLTI5Miw5ICsyOTIsOSBAQAogICogICAgSW5jb21pbmcgTEFQIGNvbm5lY3Rpb24hCiAgKgogICovCi12b2lkIGlybG1wX2xpbmtfY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBsYXBfY2IgKnNlbGYsIF9fdTMyIHNhZGRyLCAKK3ZvaWQgaXJsbXBfbGlua19jb25uZWN0X2luZGljYXRpb24oc3RydWN0IGxhcF9jYiAqc2VsZiwgX191MzIgc2FkZHIsCiAJCQkJICAgX191MzIgZGFkZHIsIHN0cnVjdCBxb3NfaW5mbyAqcW9zLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpIAorCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKIApAQCAtMzE0LDcgKzMxNCw3IEBACiAgKiAgICBMQVAgY29ubmVjdGlvbiBjb25maXJtZWQhCiAgKgogICovCi12b2lkIGlybG1wX2xpbmtfY29ubmVjdF9jb25maXJtKHN0cnVjdCBsYXBfY2IgKnNlbGYsIHN0cnVjdCBxb3NfaW5mbyAqcW9zLCAKK3ZvaWQgaXJsbXBfbGlua19jb25uZWN0X2NvbmZpcm0oc3RydWN0IGxhcF9jYiAqc2VsZiwgc3RydWN0IHFvc19pbmZvICpxb3MsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMzU5LDcgKzM1OSw3IEBACiAgKgogICogSmVhbiBJSQogICovCi12b2lkIGlybG1wX2xpbmtfZGlzY292ZXJ5X2luZGljYXRpb24oc3RydWN0IGxhcF9jYiAqc2VsZiwgCit2b2lkIGlybG1wX2xpbmtfZGlzY292ZXJ5X2luZGljYXRpb24oc3RydWN0IGxhcF9jYiAqc2VsZiwKIAkJCQkgICAgIGRpc2NvdmVyeV90ICpkaXNjb3ZlcnkpCiB7CiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKQEAgLTM2Nyw3ICszNjcsNyBAQAogCiAJLyogQWRkIHRvIG1haW4gbG9nLCBjbGVhbnVwICovCiAJaXJsbXBfYWRkX2Rpc2NvdmVyeShpcmxtcC0+Y2FjaGVsb2csIGRpc2NvdmVyeSk7Ci0JCisKIAkvKiBKdXN0IGhhbmRsZSBpdCB0aGUgc2FtZSB3YXkgYXMgYSBkaXNjb3ZlcnkgY29uZmlybSwKIAkgKiBieXBhc3MgdGhlIExNX0xBUCBzdGF0ZSBtYWNoaW5lIChzZWUgYmVsb3cpICovCiAJaXJsbXBfZGlzY292ZXJ5X2NvbmZpcm0oaXJsbXAtPmNhY2hlbG9nLCBESVNDT1ZFUllfUEFTU0lWRSk7CkBAIC0zODcsNyArMzg3LDcgQEAKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTE1QX0xBUF9NQUdJQywgcmV0dXJuOyk7Ci0JCisKIAkvKiBBZGQgdG8gbWFpbiBsb2csIGNsZWFudXAgKi8KIAlpcmxtcF9hZGRfZGlzY292ZXJ5X2xvZyhpcmxtcC0+Y2FjaGVsb2csIGxvZyk7CiAKQEAgLTQyMCw3ICs0MjAsNyBAQAogICogICAgRmluZCBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIGRlc3RpbmF0aW9uIGFuZCBzb3VyY2UgTFNBUAogICoKICAqIEFueSBJckRBIGNvbm5lY3Rpb24gKExTQVAvVFNBUCkgaXMgdW5pcXVlbHkgaWRlbnRpZmllZCBieQotICogMyBwYXJhbWV0ZXJzLCB0aGUgbG9jYWwgbHNhcCwgdGhlIHJlbW90ZSBsc2FwIGFuZCB0aGUgcmVtb3RlIGFkZHJlc3MuIAorICogMyBwYXJhbWV0ZXJzLCB0aGUgbG9jYWwgbHNhcCwgdGhlIHJlbW90ZSBsc2FwIGFuZCB0aGUgcmVtb3RlIGFkZHJlc3MuCiAgKiBXZSBtYXkgaW5pdGlhdGUgbXVsdGlwbGUgY29ubmVjdGlvbnMgdG8gdGhlIHNhbWUgcmVtb3RlIHNlcnZpY2UKICAqICh0aGV5IHdpbGwgaGF2ZSBkaWZmZXJlbnQgbG9jYWwgbHNhcCksIGEgcmVtb3RlIGRldmljZSBtYXkgaW5pdGlhdGUKICAqIG11bHRpcGxlIGNvbm5lY3Rpb25zIHRvIHRoZSBzYW1lIGxvY2FsIHNlcnZpY2UgKHRoZXkgd2lsbCBoYXZlCkBAIC00MzMsMjAgKzQzMywyMCBAQAogICovCiBzdGF0aWMgc3RydWN0IGxzYXBfY2IgKmlybG1wX2ZpbmRfbHNhcChzdHJ1Y3QgbGFwX2NiICpzZWxmLCBfX3U4IGRsc2FwX3NlbCwKIAkJCQkgICAgICAgX191OCBzbHNhcF9zZWwsIGludCBzdGF0dXMsCi0JCQkJICAgICAgIGhhc2hiaW5fdCAqcXVldWUpIAorCQkJCSAgICAgICBoYXNoYmluX3QgKnF1ZXVlKQogewogCXN0cnVjdCBsc2FwX2NiICpsc2FwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCi0JLyogCisKKwkvKgogCSAqICBPcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlLiBXZSBhc3N1bWUgdGhhdCB0aGUgbGFzdCBmcmFtZQogCSAqICByZWNlaXZlZCBpcyBpbiB0aGUgc2FtZSBjb25uZWN0aW9uIGFzIHRoZSBsYXN0IG9uZSwgc28gY2hlY2sgaW4KIAkgKiAgY2FjaGUgZmlyc3QgdG8gYXZvaWQgdGhlIGxpbmVhciBzZWFyY2gKIAkgKi8KICNpZmRlZiBDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVAKLQlpZiAoKHNlbGYtPmNhY2hlLnZhbGlkKSAmJiAKLQkgICAgKHNlbGYtPmNhY2hlLnNsc2FwX3NlbCA9PSBzbHNhcF9zZWwpICYmIAotCSAgICAoc2VsZi0+Y2FjaGUuZGxzYXBfc2VsID09IGRsc2FwX3NlbCkpIAorCWlmICgoc2VsZi0+Y2FjaGUudmFsaWQpICYmCisJICAgIChzZWxmLT5jYWNoZS5zbHNhcF9zZWwgPT0gc2xzYXBfc2VsKSAmJgorCSAgICAoc2VsZi0+Y2FjaGUuZGxzYXBfc2VsID09IGRsc2FwX3NlbCkpCiAJewogCQlyZXR1cm4gKHNlbGYtPmNhY2hlLmxzYXApOwogCX0KQEAgLTQ1NiwxNCArNDU2LDE0IEBACiAKIAlsc2FwID0gKHN0cnVjdCBsc2FwX2NiICopIGhhc2hiaW5fZ2V0X2ZpcnN0KHF1ZXVlKTsKIAl3aGlsZSAobHNhcCAhPSBOVUxMKSB7Ci0JCS8qIAotCQkgKiAgSWYgdGhpcyBpcyBhbiBpbmNvbWluZyBjb25uZWN0aW9uLCB0aGVuIHRoZSBkZXN0aW5hdGlvbiAKLQkJICogIExTQVAgc2VsZWN0b3IgbWF5IGhhdmUgYmVlbiBzcGVjaWZpZWQgYXMgTE1fQU5ZIHNvIHRoYXQgCisJCS8qCisJCSAqICBJZiB0aGlzIGlzIGFuIGluY29taW5nIGNvbm5lY3Rpb24sIHRoZW4gdGhlIGRlc3RpbmF0aW9uCisJCSAqICBMU0FQIHNlbGVjdG9yIG1heSBoYXZlIGJlZW4gc3BlY2lmaWVkIGFzIExNX0FOWSBzbyB0aGF0CiAJCSAqICBhbnkgY2xpZW50IGNhbiBjb25uZWN0LiBJbiB0aGF0IGNhc2Ugd2Ugb25seSBuZWVkIHRvIGNoZWNrCiAJCSAqICBpZiB0aGUgc291cmNlIExTQVAgKGluIG91ciB2aWV3ISkgbWF0Y2ghCiAJCSAqLwotCQlpZiAoKHN0YXR1cyA9PSBDT05ORUNUX0NNRCkgJiYgCi0JCSAgICAobHNhcC0+c2xzYXBfc2VsID09IHNsc2FwX3NlbCkgJiYgICAgICAKKwkJaWYgKChzdGF0dXMgPT0gQ09OTkVDVF9DTUQpICYmCisJCSAgICAobHNhcC0+c2xzYXBfc2VsID09IHNsc2FwX3NlbCkgJiYKIAkJICAgIChsc2FwLT5kbHNhcF9zZWwgPT0gTFNBUF9BTlkpKSB7CiAJCQkvKiBUaGlzIGlzIHdoZXJlIHRoZSBkZXN0IGxzYXAgc2VsIGlzIHNldCBvbiBpbmNvbWluZwogCQkJICogbHNhcHMgKi8KQEAgLTQ3Myw4ICs0NzMsOCBAQAogCQkvKgogCQkgKiAgQ2hlY2sgaWYgc291cmNlIExTQVAgYW5kIGRlc3QgTFNBUCBzZWxlY3RvcnMgbWF0Y2guCiAJCSAqLwotCQlpZiAoKGxzYXAtPnNsc2FwX3NlbCA9PSBzbHNhcF9zZWwpICYmIAotCQkgICAgKGxzYXAtPmRsc2FwX3NlbCA9PSBkbHNhcF9zZWwpKSAKKwkJaWYgKChsc2FwLT5zbHNhcF9zZWwgPT0gc2xzYXBfc2VsKSAmJgorCQkgICAgKGxzYXAtPmRsc2FwX3NlbCA9PSBkbHNhcF9zZWwpKQogCQkJYnJlYWs7CiAKIAkJbHNhcCA9IChzdHJ1Y3QgbHNhcF9jYiAqKSBoYXNoYmluX2dldF9uZXh0KHF1ZXVlKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybW9kLmMgYi9uZXQvaXJkYS9pcm1vZC5jCmluZGV4IDI4NjliMTYuLjgyNmU2YzRjIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm1vZC5jCisrKyBiL25ldC9pcmRhL2lybW9kLmMKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAKKyAqCiAgKiBGaWxlbmFtZTogICAgICBpcm1vZC5jCiAgKiBWZXJzaW9uOiAgICAgICAwLjkKICAqIERlc2NyaXB0aW9uOiAgIElyREEgc3RhY2sgbWFpbiBlbnRyeSBwb2ludHMKQEAgLTgsMTkgKzgsMTkgQEAKICAqIENyZWF0ZWQgYXQ6ICAgIE1vbiBEZWMgMTUgMTM6NTU6MzkgMTk5NwogICogTW9kaWZpZWQgYXQ6ICAgV2VkIEphbiAgNSAxNToxMjo0MSAyMDAwCiAgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+Ci0gKiAKKyAqCiAgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk5LTIwMDAgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgotICogICAgICAKLSAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAotICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAotICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogIAorICoKICAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCi0gKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCi0gKiAgICAgCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgpAQCAtNTIsNyArNTIsNyBAQAogZXh0ZXJuIGludCAgaXJzb2NrX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpcnNvY2tfY2xlYW51cCh2b2lkKTsKIC8qIGlybGFwX2ZyYW1lLmMgKi8KLWV4dGVybiBpbnQgIGlybGFwX2RyaXZlcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwgCitleHRlcm4gaW50ICBpcmxhcF9kcml2ZXJfcmN2KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosCiAJCQkgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAogLyoKQEAgLTEwNCwxNiArMTA0LDE2IEBACiAJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKIAogCS8qIExvd2VyIGxheWVyIG9mIHRoZSBzdGFjayAqLwotIAlpcmxtcF9pbml0KCk7CisJaXJsbXBfaW5pdCgpOwogCWlybGFwX2luaXQoKTsKLQkKKwogCS8qIEhpZ2hlciBsYXllcnMgb2YgdGhlIHN0YWNrICovCiAJaXJpYXBfaW5pdCgpOwotIAlpcnR0cF9pbml0KCk7CisJaXJ0dHBfaW5pdCgpOwogCWlyc29ja19pbml0KCk7Ci0JCisKIAkvKiBBZGQgSXJEQSBwYWNrZXQgdHlwZSAoU3RhcnQgcmVjZWl2aW5nIHBhY2tldHMpICovCi0gICAgICAgIGRldl9hZGRfcGFjaygmaXJkYV9wYWNrZXRfdHlwZSk7CisJZGV2X2FkZF9wYWNrKCZpcmRhX3BhY2tldF90eXBlKTsKIAogCS8qIEV4dGVybmFsIEFQSXMgKi8KICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtMTI0LDcgKzEyNCw3IEBACiAjZW5kaWYKIAogCS8qIERyaXZlci9kb25nbGUgc3VwcG9ydCAqLwotIAlpcmRhX2RldmljZV9pbml0KCk7CisJaXJkYV9kZXZpY2VfaW5pdCgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDAsMTQgKzE0MCwxNCBAQAogCS8qIFJlbW92ZSBFeHRlcm5hbCBBUElzICovCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCWlyZGFfc3lzY3RsX3VucmVnaXN0ZXIoKTsKLSNlbmRpZgkKKyNlbmRpZgogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJaXJkYV9wcm9jX3VucmVnaXN0ZXIoKTsKICNlbmRpZgogCiAJLyogUmVtb3ZlIElyREEgcGFja2V0IHR5cGUgKHN0b3AgcmVjZWl2aW5nIHBhY2tldHMpICovCi0gICAgICAgIGRldl9yZW1vdmVfcGFjaygmaXJkYV9wYWNrZXRfdHlwZSk7Ci0JCisJZGV2X3JlbW92ZV9wYWNrKCZpcmRhX3BhY2tldF90eXBlKTsKKwogCS8qIFJlbW92ZSBoaWdoZXIgbGF5ZXJzICovCiAJaXJzb2NrX2NsZWFudXAoKTsKIAlpcnR0cF9jbGVhbnVwKCk7CkBAIC0xNzcsOCArMTc3LDggQEAKICAqLwogc3Vic3lzX2luaXRjYWxsKGlyZGFfaW5pdCk7CiBtb2R1bGVfZXhpdChpcmRhX2NsZWFudXApOwotIAorCiBNT0RVTEVfQVVUSE9SKCJEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+ICYgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJUaGUgTGludXggSXJEQSBQcm90b2NvbCBTdGFjayIpOyAKK01PRFVMRV9ERVNDUklQVElPTigiVGhlIExpbnV4IElyREEgUHJvdG9jb2wgU3RhY2siKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19ORVRQUk9UTyhQRl9JUkRBKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybmV0L2lybmV0LmggYi9uZXQvaXJkYS9pcm5ldC9pcm5ldC5oCmluZGV4IDgwODg3NTIuLjg3M2FlMTggMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0LmgKKysrIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXQuaApAQCAtNDQsNyArNDQsNyBAQAogICogdGhlIGdlbmVyaWMgTGludXggUFBQIGRyaXZlci4gQmVjYXVzZSBJck5FVCBkZXBlbmQgb24gcmVjZW50CiAgKiBjaGFuZ2VzIG9mIHRoZSBQUFAgZHJpdmVyIGludGVyZmFjZSwgSXJORVQgd2lsbCB3b3JrIG9ubHkgd2l0aCB2ZXJ5CiAgKiByZWNlbnQga2VybmVsICgyLjMuOTktcHJlNiBhbmQgdXApLgotICogCisgKgogICogVGhlIHByZXNlbnQgaW1wbGVtZW50YXRpb24gb2ZmZXIgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyA6CiAgKglvIHNpbXBsZSB1c2VyIGludGVyZmFjZSB1c2luZyBwcHBkCiAgKglvIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiAoaW50ZXJmYWNlIGRpcmVjdGx5IHRvIFBQUCBhbmQgSXJUVFApCkBAIC0zMjcsNyArMzI3LDcgQEAKIAogI2RlZmluZSBERUJVR19BU1NFUlQJCTAJLyogVmVyaWZ5IGFsbCBhc3NlcnRpb25zICovCiAKLS8qIAorLyoKICAqIFRoZXNlIGFyZSB0aGUgbWFjcm9zIHdlIGFyZSB1c2luZyB0byBhY3R1YWxseSBwcmludCB0aGUgZGVidWcKICAqIHN0YXRlbWVudHMuIERvbid0IGxvb2sgYXQgaXQsIGl0J3MgdWdseS4uLgogICoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybmV0L2lybmV0X2lyZGEuYyBiL25ldC9pcmRhL2lybmV0L2lybmV0X2lyZGEuYwppbmRleCBmNjVjN2E4Li5jMzc4ZTY2IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9pcmRhLmMKKysrIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogICAvKiBPcGVuIGFuIElyVFRQIGluc3RhbmNlICovCiAgIHNlbGYtPnRzYXAgPSBpcnR0cF9vcGVuX3RzYXAoTFNBUF9BTlksIERFRkFVTFRfSU5JVElBTF9DUkVESVQsCi0JCQkgICAgICAgJm5vdGlmeSk7CQorCQkJICAgICAgICZub3RpZnkpOwogICBEQUJPUlQoc2VsZi0+dHNhcCA9PSBOVUxMLCAtRU5PTUVNLAogCSBJUkRBX1NSX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRlIFRTQVAgIVxuIik7CiAKQEAgLTE4OCw3ICsxODgsNyBAQAogCSAgaWYodmFsdWUtPnQuaW50ZWdlciAhPSAtMSkKIAkgICAgLyogR2V0IHRoZSByZW1vdGUgVFNBUCBzZWxlY3RvciAqLwogCSAgICBkdHNhcF9zZWwgPSB2YWx1ZS0+dC5pbnRlZ2VyOwotCSAgZWxzZSAKKwkgIGVsc2UKIAkgICAgc2VsZi0+ZXJybm8gPSAtRUFERFJOT1RBVkFJTDsKIAkgIGJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yODAsOCArMjgwLDggQEAKICAgICB9CiAKICAgLyogQ29ubmVjdCB0byByZW1vdGUgZGV2aWNlICovCi0gIGVyciA9IGlydHRwX2Nvbm5lY3RfcmVxdWVzdChzZWxmLT50c2FwLCBzZWxmLT5kdHNhcF9zZWwsIAotCQkJICAgICAgc2VsZi0+cnNhZGRyLCBzZWxmLT5kYWRkciwgTlVMTCwgCisgIGVyciA9IGlydHRwX2Nvbm5lY3RfcmVxdWVzdChzZWxmLT50c2FwLCBzZWxmLT5kdHNhcF9zZWwsCisJCQkgICAgICBzZWxmLT5yc2FkZHIsIHNlbGYtPmRhZGRyLCBOVUxMLAogCQkJICAgICAgc2VsZi0+bWF4X3NkdV9zaXplX3J4LCBOVUxMKTsKICAgaWYoZXJyICE9IDApCiAgICAgewpAQCAtNDM4LDcgKzQzOCw3IEBACiAgIGlmKGRpc2NvdmVyaWVzID09IE5VTEwpCiAgICAgRFJFVFVSTigtRU5FVFVOUkVBQ0gsIElSREFfU1JfSU5GTywgIkNhY2hlbG9nIGVtcHR5Li4uXG4iKTsKIAotICAvKiAKKyAgLyoKICAgICogTm93LCBjaGVjayBhbGwgZGlzY292ZXJlZCBkZXZpY2VzIChpZiBhbnkpLCBhbmQgY29ubmVjdAogICAgKiBjbGllbnQgb25seSBhYm91dCB0aGUgc2VydmljZXMgdGhhdCB0aGUgY2xpZW50IGlzCiAgICAqIGludGVyZXN0ZWQgaW4uLi4KQEAgLTYyNyw3ICs2MjcsNyBAQAogCiAgIC8qIFVucmVnaXN0ZXIgd2l0aCBMTS1JQVMgKi8KICAgaWYoc2VsZi0+aXJpYXApCi0gICAgeyAKKyAgICB7CiAgICAgICBpcmlhcF9jbG9zZShzZWxmLT5pcmlhcCk7CiAgICAgICBzZWxmLT5pcmlhcCA9IE5VTEw7CiAgICAgfQpAQCAtOTQ1LDcgKzk0NSw3IEBACiAKICAgLyogUmVnaXN0ZXIgd2l0aCBMTS1JQVMgKHNvIHRoYXQgcGVvcGxlIGNhbiBjb25uZWN0IHRvIHVzKSAqLwogICBpcm5ldF9zZXJ2ZXIuaWFzX29iaiA9IGlyaWFzX25ld19vYmplY3QoSVJORVRfU0VSVklDRV9OQU1FLCBqaWZmaWVzKTsKLSAgaXJpYXNfYWRkX2ludGVnZXJfYXR0cmliKGlybmV0X3NlcnZlci5pYXNfb2JqLCBJUk5FVF9JQVNfVkFMVUUsIAorICBpcmlhc19hZGRfaW50ZWdlcl9hdHRyaWIoaXJuZXRfc2VydmVyLmlhc19vYmosIElSTkVUX0lBU19WQUxVRSwKIAkJCSAgIGlybmV0X3NlcnZlci5zLnN0c2FwX3NlbCwgSUFTX0tFUk5FTF9BVFRSKTsKICAgaXJpYXNfaW5zZXJ0X29iamVjdChpcm5ldF9zZXJ2ZXIuaWFzX29iaik7CiAKQEAgLTEwNzYsNyArMTA3Niw3IEBACiAgKi8KIHN0YXRpYyB2b2lkCiBpcm5ldF9kaXNjb25uZWN0X2luZGljYXRpb24odm9pZCAqCWluc3RhbmNlLAotCQkJICAgIHZvaWQgKglzYXAsIAorCQkJICAgIHZvaWQgKglzYXAsCiAJCQkgICAgTE1fUkVBU09OCXJlYXNvbiwKIAkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTE2NiwxMCArMTE2NiwxMCBAQAogICovCiBzdGF0aWMgdm9pZAogaXJuZXRfY29ubmVjdF9jb25maXJtKHZvaWQgKglpbnN0YW5jZSwKLQkJICAgICAgdm9pZCAqCXNhcCwgCisJCSAgICAgIHZvaWQgKglzYXAsCiAJCSAgICAgIHN0cnVjdCBxb3NfaW5mbyAqcW9zLAogCQkgICAgICBfX3UzMgltYXhfc2R1X3NpemUsCi0JCSAgICAgIF9fdTgJbWF4X2hlYWRlcl9zaXplLCAKKwkJICAgICAgX191OAltYXhfaGVhZGVyX3NpemUsCiAJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAgIGlybmV0X3NvY2tldCAqCXNlbGYgPSAoaXJuZXRfc29ja2V0ICopIGluc3RhbmNlOwpAQCAtMTIzNSw3ICsxMjM1LDcgQEAKIHN0YXRpYyB2b2lkCiBpcm5ldF9mbG93X2luZGljYXRpb24odm9pZCAqCWluc3RhbmNlLAogCQkgICAgICB2b2lkICoJc2FwLAotCQkgICAgICBMT0NBTF9GTE9XIGZsb3cpIAorCQkgICAgICBMT0NBTF9GTE9XIGZsb3cpCiB7CiAgIGlybmV0X3NvY2tldCAqCXNlbGYgPSAoaXJuZXRfc29ja2V0ICopIGluc3RhbmNlOwogICBMT0NBTF9GTE9XCQlvbGRmbG93ID0gc2VsZi0+dHhfZmxvdzsKQEAgLTEzMDgsMTMgKzEzMDgsMTMgQEAKICAqIFNvbWUgb3RoZXIgbm9kZSBpcyBhdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gdGhlIElyTkVUIHNlcnZpY2UsIGFuZCBoYXMKICAqIHNlbnQgYSBjb25uZWN0aW9uIHJlcXVlc3Qgb24gb3VyIHNlcnZlciBzb2NrZXQuCiAgKiBXZSBqdXN0IHJlZGlyZWN0IHRoZSBjb25uZWN0aW9uIHRvIHRoZSByZWxldmFudCBJck5FVCBzb2NrZXQuCi0gKiAKKyAqCiAgKiBOb3RlIDogd2UgYWxzbyBtYWtlIHN1cmUgdGhhdCBiZXR3ZWVuIDIgaXJuZXQgbm9kZXMsIHRoZXJlIGNhbgogICogZXhpc3Qgb25seSBvbmUgaXJuZXQgY29ubmVjdGlvbi4KICAqLwogc3RhdGljIHZvaWQKIGlybmV0X2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICoJCWluc3RhbmNlLAotCQkJIHZvaWQgKgkJc2FwLCAKKwkJCSB2b2lkICoJCXNhcCwKIAkJCSBzdHJ1Y3QgcW9zX2luZm8gKnFvcywKIAkJCSBfX3UzMgkJbWF4X3NkdV9zaXplLAogCQkJIF9fdTgJCW1heF9oZWFkZXJfc2l6ZSwKQEAgLTE0NjMsNyArMTQ2Myw3IEBACiAgKi8KIHN0YXRpYyB2b2lkCiBpcm5ldF9nZXR2YWx1ZV9jb25maXJtKGludAlyZXN1bHQsCi0JCSAgICAgICBfX3UxNglvYmpfaWQsIAorCQkgICAgICAgX191MTYJb2JqX2lkLAogCQkgICAgICAgc3RydWN0IGlhc192YWx1ZSAqdmFsdWUsCiAJCSAgICAgICB2b2lkICoJcHJpdikKIHsKQEAgLTE1MjYsNyArMTUyNiw3IEBACiAgKi8KIHN0YXRpYyB2b2lkCiBpcm5ldF9kaXNjb3ZlcnZhbHVlX2NvbmZpcm0oaW50CQlyZXN1bHQsCi0JCQkgICAgX191MTYJb2JqX2lkLCAKKwkJCSAgICBfX3UxNglvYmpfaWQsCiAJCQkgICAgc3RydWN0IGlhc192YWx1ZSAqdmFsdWUsCiAJCQkgICAgdm9pZCAqCXByaXYpCiB7CkBAIC0xNjQ1LDcgKzE2NDUsNyBAQAogCQkJICAgdm9pZCAqCQlwcml2KQogewogICBpcm5ldF9zb2NrZXQgKglzZWxmID0gJmlybmV0X3NlcnZlci5zOwotCQorCiAgIERFTlRFUihJUkRBX09DQl9UUkFDRSwgIihzZWxmPTB4JXApXG4iLCBzZWxmKTsKICAgREFTU0VSVChwcml2ID09ICZpcm5ldF9zZXJ2ZXIsICwgSVJEQV9PQ0JfRVJST1IsCiAJICAiSW52YWxpZCBpbnN0YW5jZSAoMHglcCkgISEhXG4iLCBwcml2KTsKQEAgLTE2NzYsNyArMTY3Niw3IEBACiAJCQl2b2lkICoJCXByaXYpCiB7CiAgIGlybmV0X3NvY2tldCAqCXNlbGYgPSAmaXJuZXRfc2VydmVyLnM7Ci0JCisKICAgREVOVEVSKElSREFfT0NCX1RSQUNFLCAiKHNlbGY9MHglcClcbiIsIHNlbGYpOwogICBEQVNTRVJUKHByaXYgPT0gJmlybmV0X3NlcnZlciwgLCBJUkRBX09DQl9FUlJPUiwKIAkgICJJbnZhbGlkIGluc3RhbmNlICgweCVwKSAhISFcbiIsIHByaXYpOwpAQCAtMTcxOCw3ICsxNzE4LDcgQEAKICAgaW50CQkJaSA9IDA7CiAKICAgbGVuID0gMDsKLQkKKwogICAvKiBHZXQgdGhlIElyTkVUIHNlcnZlciBpbmZvcm1hdGlvbi4uLiAqLwogICBsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiSXJORVQgc2VydmVyIC0gIik7CiAgIGxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJJckRBIHN0YXRlOiAlcywgIiwKQEAgLTE4MTEsNyArMTgxMSw3IEBACiAgIG1lbXNldCgmaXJuZXRfc2VydmVyLCAwLCBzaXplb2Yoc3RydWN0IGlybmV0X3Jvb3QpKTsKIAogICAvKiBTZXR1cCBzdGFydCBvZiBpcm5ldCBpbnN0YW5jZSBsaXN0ICovCi0gIGlybmV0X3NlcnZlci5saXN0ID0gaGFzaGJpbl9uZXcoSEJfTk9MT0NLKTsgCisgIGlybmV0X3NlcnZlci5saXN0ID0gaGFzaGJpbl9uZXcoSEJfTk9MT0NLKTsKICAgREFCT1JUKGlybmV0X3NlcnZlci5saXN0ID09IE5VTEwsIC1FTk9NRU0sCiAJIE1PRFVMRV9FUlJPUiwgIkNhbid0IGFsbG9jYXRlIGhhc2hiaW4hXG4iKTsKICAgLyogSW5pdCBzcGlubG9jayBmb3IgaW5zdGFuY2UgbGlzdCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5oIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5oCmluZGV4IGYyZmVjZDMuLjBiYTkyZDAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0X2lyZGEuaAorKysgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9pcmRhLmgKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQkJICAgICAgIHZvaWQgKik7CiBzdGF0aWMgdm9pZAogCWlybmV0X2Rpc2NvdmVydmFsdWVfY29uZmlybShpbnQsCi0JCQkJICAgIF9fdTE2LCAKKwkJCQkgICAgX191MTYsCiAJCQkJICAgIHN0cnVjdCBpYXNfdmFsdWUgKiwKIAkJCQkgICAgdm9pZCAqKTsKICNpZmRlZiBESVNDT1ZFUllfRVZFTlRTCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYyBiL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCmluZGV4IGExZTUwMmYuLjJmOWY4ZGMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCisrKyBiL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCkBAIC05Myw3ICs5Myw3IEBACiAKICAgICAgIC8qIENoZWNrIGlmIHdlIHJlY29nbmlzZWQgb25lIG9mIHRoZSBrbm93biBjb21tYW5kCiAgICAgICAgKiBXZSBjYW4ndCB1c2UgInN3aXRjaCIgd2l0aCBzdHJpbmdzLCBzbyBoYWNrIHdpdGggImNvbnRpbnVlIiAqLwotICAgICAgCisKICAgICAgIC8qIEZpcnN0IGNvbW1hbmQgOiBuYW1lIC0+IFJlcXVlc3RlZCBJckRBIG5pY2tuYW1lICovCiAgICAgICBpZighc3RybmNtcChzdGFydCwgIm5hbWUiLCA0KSkKIAl7CkBAIC03NDQsNyArNzQ0LDcgQEAKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBTZXQgRFRSL1JUUyAqLwotICAgIGNhc2UgVElPQ01CSVM6IAorICAgIGNhc2UgVElPQ01CSVM6CiAgICAgY2FzZSBUSU9DTUJJQzoKICAgICAgIC8qIFNldCBleGNsdXNpdmUvbm9uLWV4Y2x1c2l2ZSBtb2RlICovCiAgICAgY2FzZSBUSU9DRVhDTDoKQEAgLTk0MSw3ICs5NDEsNyBAQAogICByZXQgPSBpcnR0cF9kYXRhX3JlcXVlc3Qoc2VsZi0+dHNhcCwgc2tiKTsKICAgaWYocmV0IDwgMCkKICAgICB7Ci0gICAgICAvKiAgIAorICAgICAgLyoKICAgICAgICAqID4gSXJUVFBzIHR4IHF1ZXVlIGlzIGZ1bGwsIHNvIHdlIGp1c3QgaGF2ZSB0bwogICAgICAgICogPiBkcm9wIHRoZSBmcmFtZSEgWW91IG1pZ2h0IHRoaW5rIHRoYXQgd2Ugc2hvdWxkCiAgICAgICAgKiA+IGp1c3QgcmV0dXJuIC0xIGFuZCBkb24ndCBkZWFsbG9jYXRlIHRoZSBmcmFtZSwKQEAgLTk0OSw3ICs5NDksNyBAQAogICAgICAgICogPiB3ZSBoYXZlIHJlcGxhY2VkIHRoZSBvcmlnaW5hbCBza2Igd2l0aCBhIG5ldwogICAgICAgICogPiBvbmUgd2l0aCBsYXJnZXIgaGVhZHJvb20sIGFuZCB0aGF0IHdvdWxkIHJlYWxseQogICAgICAgICogPiBjb25mdXNlIGRvX2Rldl9xdWV1ZV94bWl0KCkgaW4gZGV2LmMhIEkgaGF2ZQotICAgICAgICogPiB0cmllZCA6LSkgREIgCisgICAgICAgKiA+IHRyaWVkIDotKSBEQgogICAgICAgICogQ29ycmVjdGlvbiA6IHdlIHZlcmlmeSB0aGUgZmxvdyBjb250cm9sIGFib3ZlIChzZWxmLT50eF9mbG93KSwKICAgICAgICAqIHNvIHdlIGNvbWUgaGVyZSBvbmx5IGlmIElyVFRQIGRvZXNuJ3QgbGlrZSB0aGUgcGFja2V0IChlbXB0eSwKICAgICAgICAqIHRvbyBsYXJnZSwgSXJUVFAgbm90IGNvbm5lY3RlZCkuIEluIHRob3NlIHJhcmUgY2FzZXMsIGl0J3Mgb2sKQEAgLTExMzYsNiArMTEzNiw2IEBACiBtb2R1bGVfaW5pdChpcm5ldF9pbml0KTsKIG1vZHVsZV9leGl0KGlybmV0X2NsZWFudXApOwogTU9EVUxFX0FVVEhPUigiSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJck5FVCA6IFN5bmNocm9ub3VzIFBQUCBvdmVyIElyREEiKTsgCitNT0RVTEVfREVTQ1JJUFRJT04oIklyTkVUIDogU3luY2hyb25vdXMgUFBQIG92ZXIgSXJEQSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NIQVJERVYoMTAsIDE4Nyk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnByb2MuYyBiL25ldC9pcmRhL2lycHJvYy5jCmluZGV4IDg4YjljNDMuLmQ2ZjlhYmEgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lycHJvYy5jCisrKyBiL25ldC9pcmRhL2lycHJvYy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgCisgKgogICogRmlsZW5hbWU6ICAgICAgaXJwcm9jLmMKICAqIFZlcnNpb246ICAgICAgIDEuMAogICogRGVzY3JpcHRpb246ICAgVmFyaW91cyBlbnRyaWVzIGluIHRoZSAvcHJvYyBmaWxlIHN5c3RlbQpAQCAtMTAsMTcgKzEwLDE3IEBACiAgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAgKgogICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5LCBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+Ci0gKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LCBUaG9tYXMgRGF2aXMsIDxyYXRiZXJ0QHJhZGlrcy5uZXQ+LCAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgsIFRob21hcyBEYXZpcywgPHJhdGJlcnRAcmFkaWtzLm5ldD4sCiAgKiAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqICAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqICAKLSAqICAgICBJLCBUaG9tYXMgRGF2aXMsIHByb3ZpZGUgbm8gd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiAKLSAqICAgICBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4gCi0gKiAgICAgCisgKgorICogICAgIEksIFRob21hcyBEYXZpcywgcHJvdmlkZSBubyB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuCisgKiAgICAgVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgpAQCAtNDYsNyArNDYsNyBAQAogCiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfaXJkYTsKIEVYUE9SVF9TWU1CT0wocHJvY19pcmRhKTsKLSAKKwogc3RhdGljIHN0cnVjdCBpcmRhX2VudHJ5IGlyZGFfZGlyc1tdID0gewogCXsiZGlzY292ZXJ5IiwJJmRpc2NvdmVyeV9zZXFfZm9wc30sCiAJeyJpcnR0cCIsCSZpcnR0cF9zZXFfZm9wc30sCkBAIC02MSw3ICs2MSw3IEBACiAgKiAgICBSZWdpc3RlciBpcmRhIGVudHJ5IGluIC9wcm9jIGZpbGUgc3lzdGVtCiAgKgogICovCi12b2lkIF9faW5pdCBpcmRhX3Byb2NfcmVnaXN0ZXIodm9pZCkgCit2b2lkIF9faW5pdCBpcmRhX3Byb2NfcmVnaXN0ZXIodm9pZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmQ7CkBAIC03Myw3ICs3Myw3IEBACiAKIAlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGlyZGFfZGlycyk7IGkrKykgewogCQlkID0gY3JlYXRlX3Byb2NfZW50cnkoaXJkYV9kaXJzW2ldLm5hbWUsIDAsIHByb2NfaXJkYSk7Ci0JCWlmIChkKSAKKwkJaWYgKGQpCiAJCQlkLT5wcm9jX2ZvcHMgPSBpcmRhX2RpcnNbaV0uZm9wczsKIAl9CiB9CkBAIC04NCwxNyArODQsMTcgQEAKICAqICAgIFVucmVnaXN0ZXIgaXJkYSBlbnRyeSBpbiAvcHJvYyBmaWxlIHN5c3RlbQogICoKICAqLwotdm9pZCBfX2V4aXQgaXJkYV9wcm9jX3VucmVnaXN0ZXIodm9pZCkgCit2b2lkIF9fZXhpdCBpcmRhX3Byb2NfdW5yZWdpc3Rlcih2b2lkKQogewogCWludCBpOwogCi0gICAgICAgIGlmIChwcm9jX2lyZGEpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGlyZGFfZGlycyk7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9wcm9jX2VudHJ5KGlyZGFfZGlyc1tpXS5uYW1lLCBwcm9jX2lyZGEpOworCWlmIChwcm9jX2lyZGEpIHsKKwkJZm9yIChpPTA7IGk8QVJSQVlfU0laRShpcmRhX2RpcnMpOyBpKyspCisJCQlyZW1vdmVfcHJvY19lbnRyeShpcmRhX2RpcnNbaV0ubmFtZSwgcHJvY19pcmRhKTsKIAotICAgICAgICAgICAgICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJpcmRhIiwgcHJvY19uZXQpOwotICAgICAgICAgICAgICAgIHByb2NfaXJkYSA9IE5VTEw7Ci0gICAgICAgIH0KKwkJcmVtb3ZlX3Byb2NfZW50cnkoImlyZGEiLCBwcm9jX25ldCk7CisJCXByb2NfaXJkYSA9IE5VTEw7CisJfQogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lycXVldWUuYyBiL25ldC9pcmRhL2lycXVldWUuYwppbmRleCAxZDI2Y2QzLi45MjY2MjMzIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnF1ZXVlLmMKKysrIGIvbmV0L2lyZGEvaXJxdWV1ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgCisgKgogICogRmlsZW5hbWU6ICAgICAgaXJxdWV1ZS5jCiAgKiBWZXJzaW9uOiAgICAgICAwLjMKICAqIERlc2NyaXB0aW9uOiAgIEdlbmVyYWwgcXVldWUgaW1wbGVtZW50YXRpb24KQEAgLTEwLDI4ICsxMCwyOCBAQAogICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogICogTW9kaWZpZWQgYXQ6ICAgVGh1IEphbiAgNCAxNDoyOToxMCBDRVQgMjAwMQogICogTW9kaWZpZWQgYnk6ICAgTWFyYyBaeW5naWVyIDxtenluZ2llckBmcmVlc3VyZi5mcj4KLSAqIAorICoKICAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMTk5OSwgQWFnZSBLdmFsbmVzIDxhYWdlQGNzLnVpdC5ubz4KLSAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTgsIERhZyBCcmF0dGxpLCAKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTgsIERhZyBCcmF0dGxpLAogICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogICAgIFRoaXMgY29kZSBpcyB0YWtlbiBmcm9tIHRoZSBWb3J0ZXggT3BlcmF0aW5nIFN5c3RlbSB3cml0dGVuIGJ5IEFhZ2UKICAqICAgICBLdmFsbmVzLiBBYWdlIGhhcyBhZ3JlZWQgdGhhdCB0aGlzIGNvZGUgY2FuIHVzZSB0aGUgR1BMIGxpY2VuY2UsCiAgKiAgICAgYWx0aG91Z2ggaGUgZG9lcyBub3QgdXNlIHRoYXQgbGljZW5jZSBpbiBoaXMgb3duIGNvZGUuCi0gKiAgICAgCisgKgogICogICAgIFRoaXMgY29weXJpZ2h0IGRvZXMgaG93ZXZlciBfbm90XyBpbmNsdWRlIHRoZSBFTEYgaGFzaCgpIGZ1bmN0aW9uCiAgKiAgICAgd2hpY2ggSSBjdXJyZW50bHkgZG9uJ3Qga25vdyB3aGljaCBsaWNlbmNlIG9yIGNvcHlyaWdodCBpdAogICogICAgIGhhcy4gUGxlYXNlIGluZm9ybSBtZSBpZiB5b3Uga25vdy4KLSAqICAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqICAKKyAqCiAgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgotICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgotICogICAgIAorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTIxMyw3ICsyMTMsNyBAQAogewogCV9fdTMyIGggPSAwOwogCV9fdTMyIGc7Ci0JCisKIAl3aGlsZSgqbmFtZSkgewogCQloID0gKGg8PDQpICsgKm5hbWUrKzsKIAkJaWYgKChnID0gKGggJiAweGYwMDAwMDAwKSkpCkBAIC0yMzEsNyArMjMxLDcgQEAKICAqLwogc3RhdGljIHZvaWQgZW5xdWV1ZV9maXJzdChpcmRhX3F1ZXVlX3QgKipxdWV1ZSwgaXJkYV9xdWV1ZV90KiBlbGVtZW50KQogewotCQorCiAJSVJEQV9ERUJVRyggNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKgpAQCAtMjQyLDcgKzI0Miw3IEBACiAJCSAqIFF1ZXVlIGlzIGVtcHR5LiAgSW5zZXJ0IG9uZSBlbGVtZW50IGludG8gdGhlIHF1ZXVlLgogCQkgKi8KIAkJZWxlbWVudC0+cV9uZXh0ID0gZWxlbWVudC0+cV9wcmV2ID0gKnF1ZXVlID0gZWxlbWVudDsKLQkJCisKIAl9IGVsc2UgewogCQkvKgogCQkgKiBRdWV1ZSBpcyBub3QgZW1wdHkuICBJbnNlcnQgZWxlbWVudCBpbnRvIGZyb250IG9mIHF1ZXVlLgpAQCAtMjY3LDIwICsyNjcsMjAgQEAKIAlpcmRhX3F1ZXVlX3QgKnJldDsKIAogCUlSREFfREVCVUcoIDQsICJkZXF1ZXVlX2ZpcnN0KClcbiIpOwotCQorCiAJLyoKIAkgKiBTZXQgcmV0dXJuIHZhbHVlCiAJICovCiAJcmV0ID0gICpxdWV1ZTsKLQkKKwogCWlmICggKnF1ZXVlID09IE5VTEwgKSB7CiAJCS8qCiAJCSAqIFF1ZXVlIHdhcyBlbXB0eS4KIAkJICovCiAJfSBlbHNlIGlmICggKCpxdWV1ZSktPnFfbmV4dCA9PSAqcXVldWUgKSB7Ci0JCS8qIAorCQkvKgogCQkgKiAgUXVldWUgb25seSBjb250YWluZWQgYSBzaW5nbGUgZWxlbWVudC4gSXQgd2lsbCBub3cgYmUKLQkJICogIGVtcHR5LiAgCisJCSAqICBlbXB0eS4KIAkJICovCiAJCSpxdWV1ZSA9IE5VTEw7CiAJfSBlbHNlIHsKQEAgLTI5MSw3ICsyOTEsNyBAQAogCQkoKnF1ZXVlKS0+cV9uZXh0LT5xX3ByZXYgPSAoKnF1ZXVlKS0+cV9wcmV2OwogCQkqcXVldWUgPSAoKnF1ZXVlKS0+cV9uZXh0OwogCX0KLQkKKwogCS8qCiAJICogUmV0dXJuIHRoZSByZW1vdmVkIGVudHJ5IChvciBOVUxMIG9mIHF1ZXVlIHdhcyBlbXB0eSkuCiAJICovCkBAIC0zMDYsMjUgKzMwNiwyNSBAQAogc3RhdGljIGlyZGFfcXVldWVfdCAqZGVxdWV1ZV9nZW5lcmFsKGlyZGFfcXVldWVfdCAqKnF1ZXVlLCBpcmRhX3F1ZXVlX3QqIGVsZW1lbnQpCiB7CiAJaXJkYV9xdWV1ZV90ICpyZXQ7Ci0JCisKIAlJUkRBX0RFQlVHKCA0LCAiZGVxdWV1ZV9nZW5lcmFsKClcbiIpOwotCQorCiAJLyoKIAkgKiBTZXQgcmV0dXJuIHZhbHVlCiAJICovCiAJcmV0ID0gICpxdWV1ZTsKLQkJCisKIAlpZiAoICpxdWV1ZSA9PSBOVUxMICkgewogCQkvKgogCQkgKiBRdWV1ZSB3YXMgZW1wdHkuCiAJCSAqLwogCX0gZWxzZSBpZiAoICgqcXVldWUpLT5xX25leHQgPT0gKnF1ZXVlICkgewotCQkvKiAKKwkJLyoKIAkJICogIFF1ZXVlIG9ubHkgY29udGFpbmVkIGEgc2luZ2xlIGVsZW1lbnQuIEl0IHdpbGwgbm93IGJlCi0JCSAqICBlbXB0eS4gIAorCQkgKiAgZW1wdHkuCiAJCSAqLwogCQkqcXVldWUgPSBOVUxMOwotCQkKKwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqICBSZW1vdmUgc3BlY2lmaWMgZWxlbWVudC4KQEAgLTMzNCw3ICszMzQsNyBAQAogCQlpZiAoICgqcXVldWUpID09IGVsZW1lbnQpCiAJCQkoKnF1ZXVlKSA9IGVsZW1lbnQtPnFfbmV4dDsKIAl9Ci0JCisKIAkvKgogCSAqIFJldHVybiB0aGUgcmVtb3ZlZCBlbnRyeSAob3IgTlVMTCBvZiBxdWV1ZSB3YXMgZW1wdHkpLgogCSAqLwpAQCAtMzUyLDcgKzM1Miw3IEBACiBoYXNoYmluX3QgKmhhc2hiaW5fbmV3KGludCB0eXBlKQogewogCWhhc2hiaW5fdCogaGFzaGJpbjsKLQkKKwogCS8qCiAJICogQWxsb2NhdGUgbmV3IGhhc2hiaW4KIAkgKi8KQEAgLTM4MCw4ICszODAsOCBAQAogLyoKICAqIEZ1bmN0aW9uIGhhc2hiaW5fZGVsZXRlIChoYXNoYmluLCBmcmVlX2Z1bmMpCiAgKgotICogICAgRGVzdHJveSBoYXNoYmluLCB0aGUgZnJlZV9mdW5jIGNhbiBiZSBhIHVzZXIgc3VwcGxpZWQgc3BlY2lhbCByb3V0aW5lIAotICogICAgZm9yIGRlYWxsb2NhdGluZyB0aGlzIHN0cnVjdHVyZSBpZiBpdCdzIGNvbXBsZXguIElmIG5vdCB0aGUgdXNlciBjYW4gCisgKiAgICBEZXN0cm95IGhhc2hiaW4sIHRoZSBmcmVlX2Z1bmMgY2FuIGJlIGEgdXNlciBzdXBwbGllZCBzcGVjaWFsIHJvdXRpbmUKKyAqICAgIGZvciBkZWFsbG9jYXRpbmcgdGhpcyBzdHJ1Y3R1cmUgaWYgaXQncyBjb21wbGV4LiBJZiBub3QgdGhlIHVzZXIgY2FuCiAgKiAgICBqdXN0IHN1cHBseSBrZnJlZSwgd2hpY2ggc2hvdWxkIHRha2UgY2FyZSBvZiB0aGUgam9iLgogICovCiBpbnQgaGFzaGJpbl9kZWxldGUoIGhhc2hiaW5fdCogaGFzaGJpbiwgRlJFRV9GVU5DIGZyZWVfZnVuYykKQEAgLTM5Miw3ICszOTIsNyBAQAogCiAJSVJEQV9BU1NFUlQoaGFzaGJpbiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChoYXNoYmluLT5tYWdpYyA9PSBIQl9NQUdJQywgcmV0dXJuIC0xOyk7Ci0JCisKIAkvKiBTeW5jaHJvbml6ZSAqLwogCWlmICggaGFzaGJpbi0+aGJfdHlwZSAmIEhCX0xPQ0sgKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoYXNoYmluLT5oYl9zcGlubG9jaywgZmxhZ3MpOwpAQCAtNDA3LDExICs0MDcsMTEgQEAKIAkJd2hpbGUgKHF1ZXVlICkgewogCQkJaWYgKGZyZWVfZnVuYykKIAkJCQkoKmZyZWVfZnVuYykocXVldWUpOwotCQkJcXVldWUgPSBkZXF1ZXVlX2ZpcnN0KCAKKwkJCXF1ZXVlID0gZGVxdWV1ZV9maXJzdCgKIAkJCQkoaXJkYV9xdWV1ZV90KiopICZoYXNoYmluLT5oYl9xdWV1ZVtpXSk7CiAJCX0KIAl9Ci0JCisKIAkvKiBDbGVhbnVwIGxvY2FsIGRhdGEgKi8KIAloYXNoYmluLT5oYl9jdXJyZW50ID0gTlVMTDsKIAloYXNoYmluLT5tYWdpYyA9IH5IQl9NQUdJQzsKQEAgLTQzOCw3ICs0MzgsNyBAQAogICogICAgSW5zZXJ0IGFuIGVudHJ5IGludG8gdGhlIGhhc2hiaW4KICAqCiAgKi8KLXZvaWQgaGFzaGJpbl9pbnNlcnQoaGFzaGJpbl90KiBoYXNoYmluLCBpcmRhX3F1ZXVlX3QqIGVudHJ5LCBsb25nIGhhc2h2LCAKK3ZvaWQgaGFzaGJpbl9pbnNlcnQoaGFzaGJpbl90KiBoYXNoYmluLCBpcmRhX3F1ZXVlX3QqIGVudHJ5LCBsb25nIGhhc2h2LAogCQkgICAgY29uc3QgY2hhciogbmFtZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKQEAgLTQ2MCwxNCArNDYwLDE0IEBACiAJaWYgKCBoYXNoYmluLT5oYl90eXBlICYgSEJfTE9DSyApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmhhc2hiaW4tPmhiX3NwaW5sb2NrLCBmbGFncyk7CiAJfSAvKiBEZWZhdWx0IGlzIG5vLWxvY2sgICovCi0JCisKIAkvKgogCSAqIFN0b3JlIG5hbWUgYW5kIGtleQogCSAqLwogCWVudHJ5LT5xX2hhc2ggPSBoYXNodjsKIAlpZiAoIG5hbWUgKQogCQlzdHJsY3B5KCBlbnRyeS0+cV9uYW1lLCBuYW1lLCBzaXplb2YoZW50cnktPnFfbmFtZSkpOwotCQorCiAJLyoKIAkgKiBJbnNlcnQgbmV3IGVudHJ5IGZpcnN0CiAJICovCkBAIC00ODIsNyArNDgyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaGFzaGJpbl9pbnNlcnQpOwogCi0vKiAKKy8qCiAgKiAgRnVuY3Rpb24gaGFzaGJpbl9yZW1vdmVfZmlyc3QgKGhhc2hiaW4pCiAgKgogICogICAgUmVtb3ZlIGZpcnN0IGVudHJ5IG9mIHRoZSBoYXNoYmluCkBAIC01MzcsNyArNTM3LDcgQEAKIH0KIAogCi0vKiAKKy8qCiAgKiAgRnVuY3Rpb24gaGFzaGJpbl9yZW1vdmUgKGhhc2hiaW4sIGhhc2h2LCBuYW1lKQogICoKICAqICAgIFJlbW92ZSBlbnRyeSB3aXRoIHRoZSBnaXZlbiBuYW1lCkBAIC01NjEsNyArNTYxLDcgQEAKIAogCUlSREFfQVNTRVJUKCBoYXNoYmluICE9IE5VTEwsIHJldHVybiBOVUxMOyk7CiAJSVJEQV9BU1NFUlQoIGhhc2hiaW4tPm1hZ2ljID09IEhCX01BR0lDLCByZXR1cm4gTlVMTDspOwotCQorCiAJLyoKIAkgKiBMb2NhdGUgaGFzaGJpbgogCSAqLwpAQCAtNjAxLDcgKzYwMSw3IEBACiAJCQllbnRyeSA9IGVudHJ5LT5xX25leHQ7CiAJCX0gd2hpbGUgKCBlbnRyeSAhPSBoYXNoYmluLT5oYl9xdWV1ZVsgYmluIF0gKTsKIAl9Ci0JCisKIAkvKgogCSAqIElmIGVudHJ5IHdhcyBmb3VuZCwgZGVxdWV1ZSBpdAogCSAqLwpAQCAtNjIyLDE4ICs2MjIsMTggQEAKIAlpZiAoIGhhc2hiaW4tPmhiX3R5cGUgJiBIQl9MT0NLICkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYXNoYmluLT5oYl9zcGlubG9jaywgZmxhZ3MpOwogCX0gLyogRGVmYXVsdCBpcyBuby1sb2NrICAqLwotICAgICAgIAotCQorCisKIAkvKiBSZXR1cm4gKi8KLQlpZiAoIGZvdW5kICkgCisJaWYgKCBmb3VuZCApCiAJCXJldHVybiBlbnRyeTsKIAllbHNlCiAJCXJldHVybiBOVUxMOwotCQorCiB9CiBFWFBPUlRfU1lNQk9MKGhhc2hiaW5fcmVtb3ZlKTsKIAotLyogCisvKgogICogIEZ1bmN0aW9uIGhhc2hiaW5fcmVtb3ZlX3RoaXMgKGhhc2hiaW4sIGVudHJ5KQogICoKICAqICAgIFJlbW92ZSBlbnRyeSB3aXRoIHRoZSBnaXZlbiBuYW1lCkBAIC02NTUsNyArNjU1LDcgQEAKIAlJUkRBX0FTU0VSVCggaGFzaGJpbiAhPSBOVUxMLCByZXR1cm4gTlVMTDspOwogCUlSREFfQVNTRVJUKCBoYXNoYmluLT5tYWdpYyA9PSBIQl9NQUdJQywgcmV0dXJuIE5VTEw7KTsKIAlJUkRBX0FTU0VSVCggZW50cnkgIT0gTlVMTCwgcmV0dXJuIE5VTEw7KTsKLQkKKwogCS8qIFN5bmNocm9uaXplICovCiAJaWYgKCBoYXNoYmluLT5oYl90eXBlICYgSEJfTE9DSyApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmhhc2hiaW4tPmhiX3NwaW5sb2NrLCBmbGFncyk7CkBAIC03MjIsNyArNzIyLDcgQEAKIAlpZiAoIG5hbWUgKQogCQloYXNodiA9IGhhc2goIG5hbWUgKTsKIAliaW4gPSBHRVRfSEFTSEJJTiggaGFzaHYgKTsKLQkKKwogCS8qCiAJICogU2VhcmNoIGZvciBlbnRyeQogCSAqLwpAQCAtODI5LDcgKzgyOSw3IEBACiAgKiAgICBjYWxsZWQgYmVmb3JlIGFueSBjYWxscyB0byBoYXNoYmluX2dldF9uZXh0KCkhCiAgKgogICovCi1pcmRhX3F1ZXVlX3QgKmhhc2hiaW5fZ2V0X2ZpcnN0KCBoYXNoYmluX3QqIGhhc2hiaW4pIAoraXJkYV9xdWV1ZV90ICpoYXNoYmluX2dldF9maXJzdCggaGFzaGJpbl90KiBoYXNoYmluKQogewogCWlyZGFfcXVldWVfdCAqZW50cnk7CiAJaW50IGk7CkBAIC04NjAsNyArODYwLDcgQEAKICAqICAgIEdldCBuZXh0IGl0ZW0gaW4gaGFzaGJpbi4gQSBzZXJpZXMgb2YgaGFzaGJpbl9nZXRfbmV4dCgpIGNhbGxzIG11c3QKICAqICAgIGJlIHN0YXJ0ZWQgYnkgYSBjYWxsIHRvIGhhc2hiaW5fZ2V0X2ZpcnN0KCkuIFRoZSBmdW5jdGlvbiByZXR1cm5zCiAgKiAgICBOVUxMIHdoZW4gYWxsIGl0ZW1zIGhhdmUgYmVlbiB0cmF2ZXJzZWQKLSAqIAorICoKICAqIFRoZSBjb250ZXh0IG9mIHRoZSBzZWFyY2ggaXMgc3RvcmVkIHdpdGhpbiB0aGUgaGFzaGJpbiwgc28geW91IG11c3QKICAqIHByb3RlY3QgeW91cnNlbGYgZnJvbSBjb25jdXJyZW50IGVudW1lcmF0aW9ucy4gLSBKZWFuIElJCiAgKi8KQEAgLTg3NiwxMyArODc2LDEzIEBACiAJaWYgKCBoYXNoYmluLT5oYl9jdXJyZW50ID09IE5VTEwpIHsKIAkJSVJEQV9BU1NFUlQoIGhhc2hiaW4tPmhiX2N1cnJlbnQgIT0gTlVMTCwgcmV0dXJuIE5VTEw7KTsKIAkJcmV0dXJuIE5VTEw7Ci0JfQkKKwl9CiAJZW50cnkgPSBoYXNoYmluLT5oYl9jdXJyZW50LT5xX25leHQ7CiAJYmluID0gR0VUX0hBU0hCSU4oIGVudHJ5LT5xX2hhc2gpOwogCi0JLyogIAorCS8qCiAJICogIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBub3QgYmFjayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBxdWV1ZQotCSAqICBhZ2FpbiAKKwkgKiAgYWdhaW4KIAkgKi8KIAlpZiAoIGVudHJ5ICE9IGhhc2hiaW4tPmhiX3F1ZXVlWyBiaW4gXSkgewogCQloYXNoYmluLT5oYl9jdXJyZW50ID0gZW50cnk7CkBAIC04OTUsNyArODk1LDcgQEAKIAkgKi8KIAlpZiAoIGJpbiA+PSBIQVNIQklOX1NJWkUpCiAJCXJldHVybiBOVUxMOwotCQorCiAJLyoKIAkgKiAgTW92ZSB0byBuZXh0IHF1ZXVlIGluIGhhc2hiaW4KIAkgKi8KQEAgLTkwNCw3ICs5MDQsNyBAQAogCQllbnRyeSA9IGhhc2hiaW4tPmhiX3F1ZXVlWyBpXTsKIAkJaWYgKCBlbnRyeSkgewogCQkJaGFzaGJpbi0+aGJfY3VycmVudCA9IGVudHJ5OwotCQkJCisKIAkJCXJldHVybiBlbnRyeTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyc3lzY3RsLmMgYi9uZXQvaXJkYS9pcnN5c2N0bC5jCmluZGV4IDg2ODA1YzMuLmJiNTNiYTAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyc3lzY3RsLmMKKysrIGIvbmV0L2lyZGEvaXJzeXNjdGwuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgIAorICoKICAqIEZpbGVuYW1lOiAgICAgIGlyc3lzY3RsLmMKICAqIFZlcnNpb246ICAgICAgIDEuMAogICogRGVzY3JpcHRpb246ICAgU3lzY3RsIGludGVyZmFjZSBmb3IgSXJEQQpAQCAtOCwxOSArOCwxOSBAQAogICogQ3JlYXRlZCBhdDogICAgU3VuIE1heSAyNCAyMjoxMjowNiAxOTk4CiAgKiBNb2RpZmllZCBhdDogICBGcmkgSnVuICA0IDAyOjUwOjE1IDE5OTkKICAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KLSAqIAorICoKICAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgotICogICAgICAKLSAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAotICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAotICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogIAorICoKICAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCi0gKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCi0gKiAgICAgCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTExMSw3ICsxMTEsNyBAQAogCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX3N0cmluZwogCX0sCiAjaWZkZWYgQ09ORklHX0lSREFfREVCVUcKLSAgICAgICAgeworCXsKIAkJLmN0bF9uYW1lCT0gREVCVUcsCiAJCS5wcm9jbmFtZQk9ICJkZWJ1ZyIsCiAJCS5kYXRhCQk9ICZpcmRhX2RlYnVnLApAQCAtMTIxLDcgKzEyMSw3IEBACiAJfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19JUkRBX0ZBU1RfUlIKLSAgICAgICAgeworCXsKIAkJLmN0bF9uYW1lCT0gRkFTVF9QT0xMLAogCQkucHJvY25hbWUJPSAiZmFzdF9wb2xsX2luY3JlYXNlIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9mYXN0X3BvbGxfaW5jcmVhc2UsCkBAIC0yODcsNyArMjg3LDcgQEAKICAqICAgIFVucmVnaXN0ZXIgb3VyIHN5c2N0bCBpbnRlcmZhY2UKICAqCiAgKi8KLXZvaWQgX19leGl0IGlyZGFfc3lzY3RsX3VucmVnaXN0ZXIodm9pZCkgCit2b2lkIF9fZXhpdCBpcmRhX3N5c2N0bF91bnJlZ2lzdGVyKHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXJkYV90YWJsZV9oZWFkZXIpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJ0dHAuYyBiL25ldC9pcmRhL2lydHRwLmMKaW5kZXggMDM1MDRmMy4uNjg4MzYzNSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJ0dHAuYworKysgYi9uZXQvaXJkYS9pcnR0cC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgCisgKgogICogRmlsZW5hbWU6ICAgICAgaXJ0dHAuYwogICogVmVyc2lvbjogICAgICAgMS4yCiAgKiBEZXNjcmlwdGlvbjogICBUaW55IFRyYW5zcG9ydCBQcm90b2NvbCAoVFRQKSBpbXBsZW1lbnRhdGlvbgpAQCAtOCwxOCArOCwxOCBAQAogICogQ3JlYXRlZCBhdDogICAgU3VuIEF1ZyAzMSAyMDoxNDozMSAxOTk3CiAgKiBNb2RpZmllZCBhdDogICBXZWQgSmFuICA1IDExOjMxOjI3IDIwMDAKICAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KLSAqIAotICogICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICoKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LAogICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgotICogICAgIAotICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCi0gKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCi0gKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKLSAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MiwxNyArNDIsMTcgQEAKIAogc3RhdGljIHZvaWQgX19pcnR0cF9jbG9zZV90c2FwKHN0cnVjdCB0c2FwX2NiICpzZWxmKTsKIAotc3RhdGljIGludCBpcnR0cF9kYXRhX2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCitzdGF0aWMgaW50IGlydHRwX2RhdGFfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgaXJ0dHBfdWRhdGFfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKK3N0YXRpYyBpbnQgaXJ0dHBfdWRhdGFfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgdm9pZCBpcnR0cF9kaXNjb25uZWN0X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgIAorc3RhdGljIHZvaWQgaXJ0dHBfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCiAJCQkJCUxNX1JFQVNPTiByZWFzb24sIHN0cnVjdCBza19idWZmICopOwotc3RhdGljIHZvaWQgaXJ0dHBfY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAorc3RhdGljIHZvaWQgaXJ0dHBfY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCiAJCQkJICAgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywgX191MzIgbWF4X3NkdV9zaXplLAogCQkJCSAgICAgX191OCBoZWFkZXJfc2l6ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgdm9pZCBpcnR0cF9jb25uZWN0X2NvbmZpcm0odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCi0JCQkJICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywgX191MzIgbWF4X3NkdV9zaXplLCAKK3N0YXRpYyB2b2lkIGlydHRwX2Nvbm5lY3RfY29uZmlybSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAorCQkJCSAgc3RydWN0IHFvc19pbmZvICpxb3MsIF9fdTMyIG1heF9zZHVfc2l6ZSwKIAkJCQkgIF9fdTggaGVhZGVyX3NpemUsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIHZvaWQgaXJ0dHBfcnVuX3R4X3F1ZXVlKHN0cnVjdCB0c2FwX2NiICpzZWxmKTsKIHN0YXRpYyB2b2lkIGlydHRwX3J1bl9yeF9xdWV1ZShzdHJ1Y3QgdHNhcF9jYiAqc2VsZik7CkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgdm9pZCBpcnR0cF9mcmFnbWVudF9za2Ioc3RydWN0IHRzYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIHN0cnVjdCBza19idWZmICppcnR0cF9yZWFzc2VtYmxlX3NrYihzdHJ1Y3QgdHNhcF9jYiAqc2VsZik7CiBzdGF0aWMgdm9pZCBpcnR0cF90b2RvX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXN0YXRpYyBpbnQgaXJ0dHBfcGFyYW1fbWF4X3NkdV9zaXplKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLCAKK3N0YXRpYyBpbnQgaXJ0dHBfcGFyYW1fbWF4X3NkdV9zaXplKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgICBpbnQgZ2V0KTsKIAogc3RhdGljIHZvaWQgaXJ0dHBfZmxvd19pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIExPQ0FMX0ZMT1cgZmxvdyk7CkBAIC0xMDksNyArMTA5LDcgQEAKICAqICAgIENhbGxlZCBieSBtb2R1bGUgZGVzdHJ1Y3Rpb24vY2xlYW51cCBjb2RlCiAgKgogICovCi12b2lkIF9fZXhpdCBpcnR0cF9jbGVhbnVwKHZvaWQpIAordm9pZCBfX2V4aXQgaXJ0dHBfY2xlYW51cCh2b2lkKQogewogCS8qIENoZWNrIGZvciBtYWluIHN0cnVjdHVyZSAqLwogCUlSREFfQVNTRVJUKGlydHRwLT5tYWdpYyA9PSBUVFBfTUFHSUMsIHJldHVybjspOwpAQCAtODY1LDcgKzg2NSw3IEBACiAJCWVyciA9IHNlbGYtPm5vdGlmeS51ZGF0YV9pbmRpY2F0aW9uKHNlbGYtPm5vdGlmeS5pbnN0YW5jZSwKIAkJCQkJCSAgICBzZWxmLHNrYik7CiAJCS8qIFNhbWUgY29tbWVudCBhcyBpbiBpcnR0cF9kb19kYXRhX2luZGljYXRpb24oKSAqLwotCQlpZiAoIWVycikgCisJCWlmICghZXJyKQogCQkJcmV0dXJuIDA7CiAJfQogCS8qIEVpdGhlciBubyBoYW5kbGVyLCBvciBoYW5kbGVyIHJldHVybnMgYW4gZXJyb3IgKi8KQEAgLTk0MCw3ICs5NDAsNyBAQAogCiAJLyoKIAkgKiBJZiB0aGUgcGVlciBkZXZpY2UgaGFzIGdpdmVuIHVzIHNvbWUgY3JlZGl0cyBhbmQgd2UgZGlkbid0IGhhdmUKLSAgICAgICAgICogYW55b25lIGZyb20gYmVmb3JlLCB0aGVuIHdlIG5lZWQgdG8gc2hlZHVsZSB0aGUgdHggcXVldWUuCisJICogYW55b25lIGZyb20gYmVmb3JlLCB0aGVuIHdlIG5lZWQgdG8gc2hlZHVsZSB0aGUgdHggcXVldWUuCiAJICogV2UgbmVlZCB0byBkbyB0aGF0IGJlY2F1c2Ugb3VyIFR4IGhhdmUgc3RvcHBlZCAoc28gd2UgbWF5IG5vdAogCSAqIGdldCBhbnkgTEFQIGZsb3cgaW5kaWNhdGlvbikgYW5kIHRoZSB1c2VyIG1heSBiZSBzdG9wcGVkIGFzCiAJICogd2VsbC4gLSBKZWFuIElJCkBAIC0xNzk4LDE0ICsxNzk4LDE0IEBACiAJc3Bpbl9sb2NrX2lycSgmaXJ0dHAtPnRzYXBzLT5oYl9zcGlubG9jayk7CiAJaXRlci0+aWQgPSAwOwogCi0JZm9yIChzZWxmID0gKHN0cnVjdCB0c2FwX2NiICopIGhhc2hiaW5fZ2V0X2ZpcnN0KGlydHRwLT50c2Fwcyk7IAorCWZvciAoc2VsZiA9IChzdHJ1Y3QgdHNhcF9jYiAqKSBoYXNoYmluX2dldF9maXJzdChpcnR0cC0+dHNhcHMpOwogCSAgICAgc2VsZiAhPSBOVUxMOwogCSAgICAgc2VsZiA9IChzdHJ1Y3QgdHNhcF9jYiAqKSBoYXNoYmluX2dldF9uZXh0KGlydHRwLT50c2FwcykpIHsKIAkJaWYgKGl0ZXItPmlkID09ICpwb3MpCiAJCQlicmVhazsKIAkJKytpdGVyLT5pZDsKIAl9Ci0JCQorCiAJcmV0dXJuIHNlbGY7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL3BhcmFtZXRlcnMuYyBiL25ldC9pcmRhL3BhcmFtZXRlcnMuYwppbmRleCAxMzI0OTQyLi43NWE3MmQyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9wYXJhbWV0ZXJzLmMKKysrIGIvbmV0L2lyZGEvcGFyYW1ldGVycy5jCkBAIC01NjMsNyArNTYzLDcgQEAKICAqICAgIHNhZmUuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdhcyBwYXJzZWQKICAqCiAgKi8KLWludCBpcmRhX3BhcmFtX2V4dHJhY3RfYWxsKHZvaWQgKnNlbGYsIF9fdTggKmJ1ZiwgaW50IGxlbiwgCitpbnQgaXJkYV9wYXJhbV9leHRyYWN0X2FsbCh2b2lkICpzZWxmLCBfX3U4ICpidWYsIGludCBsZW4sCiAJCQkgICBwaV9wYXJhbV9pbmZvX3QgKmluZm8pCiB7CiAJaW50IHJldCA9IC0xOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvcW9zLmMgYi9uZXQvaXJkYS9xb3MuYwppbmRleCA5NWE2OWMwLi4zNDkwMTJjIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9xb3MuYworKysgYi9uZXQvaXJkYS9xb3MuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqCiAgKiBGaWxlbmFtZTogICAgICBxb3MuYwogICogVmVyc2lvbjogICAgICAgMS4wCiAgKiBEZXNjcmlwdGlvbjogICBJckxBUCBRb1MgcGFyYW1ldGVyIG5lZ290aWF0aW9uCkBAIC04LDI2ICs4LDI2IEBACiAgKiBDcmVhdGVkIGF0OiAgICBUdWUgU2VwICA5IDAwOjAwOjI2IDE5OTcKICAqIE1vZGlmaWVkIGF0OiAgIFN1biBKYW4gMzAgMTQ6Mjk6MTYgMjAwMAogICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgotICogCi0gKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCisgKgorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sCiAgKiAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+Ci0gKiAgICAgCi0gKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKLSAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKLSAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKLSAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKLSAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAqICAgICAKKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CkBAIC04NCwxNiArODQsMTYgQEAKIHVuc2lnbmVkIHN5c2N0bF9tYXhfdHhfd2luZG93ID0gNzsKIAogc3RhdGljIGludCBpcmxhcF9wYXJhbV9iYXVkX3JhdGUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIGludCBnZXQpOwotc3RhdGljIGludCBpcmxhcF9wYXJhbV9saW5rX2Rpc2Nvbm5lY3Qodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFybSwgCitzdGF0aWMgaW50IGlybGFwX3BhcmFtX2xpbmtfZGlzY29ubmVjdCh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJtLAogCQkJCSAgICAgICBpbnQgZ2V0KTsKLXN0YXRpYyBpbnQgaXJsYXBfcGFyYW1fbWF4X3R1cm5fdGltZSh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwgCitzdGF0aWMgaW50IGlybGFwX3BhcmFtX21heF90dXJuX3RpbWUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sCiAJCQkJICAgICBpbnQgZ2V0KTsKIHN0YXRpYyBpbnQgaXJsYXBfcGFyYW1fZGF0YV9zaXplKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLCBpbnQgZ2V0KTsKLXN0YXRpYyBpbnQgaXJsYXBfcGFyYW1fd2luZG93X3NpemUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIAorc3RhdGljIGludCBpcmxhcF9wYXJhbV93aW5kb3dfc2l6ZSh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwKIAkJCQkgICBpbnQgZ2V0KTsKLXN0YXRpYyBpbnQgaXJsYXBfcGFyYW1fYWRkaXRpb25hbF9ib2ZzKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcm0sIAorc3RhdGljIGludCBpcmxhcF9wYXJhbV9hZGRpdGlvbmFsX2JvZnModm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFybSwKIAkJCQkgICAgICAgaW50IGdldCk7Ci1zdGF0aWMgaW50IGlybGFwX3BhcmFtX21pbl90dXJuX3RpbWUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIAorc3RhdGljIGludCBpcmxhcF9wYXJhbV9taW5fdHVybl90aW1lKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgICAgaW50IGdldCk7CiAKICNpZm5kZWYgQ09ORklHX0lSREFfRFlOQU1JQ19XSU5ET1cKQEAgLTEwMSw3ICsxMDEsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBfX3UzMiBtaW5fdHVybl90aW1lc1tdICA9IHsgMTAwMDAsIDUwMDAsIDEwMDAsIDUwMCwgMTAwLCA1MCwgMTAsIDAgfTsgLyogdXMgKi8KLXN0YXRpYyBfX3UzMiBiYXVkX3JhdGVzW10gICAgICA9IHsgMjQwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwLCA1NzYwMDAsIAorc3RhdGljIF9fdTMyIGJhdWRfcmF0ZXNbXSAgICAgID0geyAyNDAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAsIDU3NjAwMCwKIAkJCQkgICAxMTUyMDAwLCA0MDAwMDAwLCAxNjAwMDAwMCB9OyAgICAgICAgICAgLyogYnBzICovCiBzdGF0aWMgX191MzIgZGF0YV9zaXplc1tdICAgICAgPSB7IDY0LCAxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4IH07ICAgICAgICAvKiBieXRlcyAqLwogc3RhdGljIF9fdTMyIGFkZF9ib2ZzW10gICAgICAgID0geyA0OCwgMjQsIDEyLCA1LCAzLCAyLCAxLCAwIH07ICAgICAgICAgICAgLyogYnl0ZXMgKi8KQEAgLTE2NSw3ICsxNjUsNyBAQAogc3RhdGljIGlubGluZSBpbnQgdmFsdWVfaW5kZXgoX191MzIgdmFsdWUsIF9fdTMyICphcnJheSwgaW50IHNpemUpCiB7CiAJaW50IGk7Ci0JCisKIAlmb3IgKGk9MDsgaSA8IHNpemU7IGkrKykKIAkJaWYgKGFycmF5W2ldID09IHZhbHVlKQogCQkJYnJlYWs7CkBAIC0xNzgsNyArMTc4LDcgQEAKICAqICAgIFJldHVybnMgdmFsdWUgdG8gaW5kZXggaW4gYXJyYXksIGVhc3khCiAgKgogICovCi1zdGF0aWMgaW5saW5lIF9fdTMyIGluZGV4X3ZhbHVlKGludCBpbmRleCwgX191MzIgKmFycmF5KSAKK3N0YXRpYyBpbmxpbmUgX191MzIgaW5kZXhfdmFsdWUoaW50IGluZGV4LCBfX3UzMiAqYXJyYXkpCiB7CiAJcmV0dXJuIGFycmF5W2luZGV4XTsKIH0KQEAgLTE4OSw3ICsxODksNyBAQAogICogICAgUmV0dXJucyBpbmRleCB0byBtb3N0IHNpZ25pZmljYW50IGJpdCAoTVNCKSBpbiB3b3JkCiAgKgogICovCi1zdGF0aWMgaW50IG1zYl9pbmRleCAoX191MTYgd29yZCkgCitzdGF0aWMgaW50IG1zYl9pbmRleCAoX191MTYgd29yZCkKIHsKIAlfX3UxNiBtc2IgPSAweDgwMDA7CiAJaW50IGluZGV4ID0gMTU7ICAgLyogQ3VycmVudCBNU0IgKi8KQEAgLTI5OCwxMiArMjk4LDEyIEBACiAgKgogICogICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBmb3IgbGF5ZXJzIGFuZCBkcml2ZXJzIHRvIGJlIGFibGUgdG8KICAqICAgIHNldCB0aGUgbWF4aW11bSBRb1MgcG9zc2libGUgYW5kIHRoZW4gImFuZCBpbiIgdGhlaXIgb3duIGxpbWl0YXRpb25zCi0gKiAKKyAqCiAgKi8KIHZvaWQgaXJkYV9pbml0X21heF9xb3NfY2FwYWJpbGllcyhzdHJ1Y3QgcW9zX2luZm8gKnFvcykKIHsKIAlpbnQgaTsKLQkvKiAKKwkvKgogCSAqICBUaGVzZSBhcmUgdGhlIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlcyBhcyBzcGVjaWZpZWQgb24gcGFnZXMKIAkgKiAgMzktNDMgaW4gSXJMQVAKIAkgKi8KQEAgLTM2MSwyNSArMzYxLDI1IEBACiAJCXFvcy0+bWluX3R1cm5fdGltZS52YWx1ZSA9IHN5c2N0bF9taW5fdHhfdHVybl90aW1lOwogCX0KIAotCS8qIAorCS8qCiAJICogTm90IGFsbG93ZWQgdG8gdXNlIGEgbWF4IHR1cm4gdGltZSBsZXNzIHRoYW4gNTAwIG1zIGlmIHRoZSBiYXVkcmF0ZQogCSAqIGlzIGxlc3MgdGhhbiAxMTUyMDAKIAkgKi8KLQlpZiAoKHFvcy0+YmF1ZF9yYXRlLnZhbHVlIDwgMTE1MjAwKSAmJiAKKwlpZiAoKHFvcy0+YmF1ZF9yYXRlLnZhbHVlIDwgMTE1MjAwKSAmJgogCSAgICAocW9zLT5tYXhfdHVybl90aW1lLnZhbHVlIDwgNTAwKSkKIAl7Ci0JCUlSREFfREVCVUcoMCwgCisJCUlSREFfREVCVUcoMCwKIAkJCSAgICIlcygpLCBhZGp1c3RpbmcgbWF4IHR1cm4gdGltZSBmcm9tICVkIHRvIDUwMCBtc1xuIiwKIAkJCSAgIF9fRlVOQ1RJT05fXywgcW9zLT5tYXhfdHVybl90aW1lLnZhbHVlKTsKIAkJcW9zLT5tYXhfdHVybl90aW1lLnZhbHVlID0gNTAwOwogCX0KLQkKKwogCS8qCi0JICogVGhlIGRhdGEgc2l6ZSBtdXN0IGJlIGFkanVzdGVkIGFjY29yZGluZyB0byB0aGUgYmF1ZCByYXRlIGFuZCBtYXggCisJICogVGhlIGRhdGEgc2l6ZSBtdXN0IGJlIGFkanVzdGVkIGFjY29yZGluZyB0byB0aGUgYmF1ZCByYXRlIGFuZCBtYXgKIAkgKiB0dXJuIHRpbWUKIAkgKi8KIAlpbmRleCA9IHZhbHVlX2luZGV4KHFvcy0+ZGF0YV9zaXplLnZhbHVlLCBkYXRhX3NpemVzLCA2KTsKLQlsaW5lX2NhcGFjaXR5ID0gaXJsYXBfbWF4X2xpbmVfY2FwYWNpdHkocW9zLT5iYXVkX3JhdGUudmFsdWUsIAorCWxpbmVfY2FwYWNpdHkgPSBpcmxhcF9tYXhfbGluZV9jYXBhY2l0eShxb3MtPmJhdWRfcmF0ZS52YWx1ZSwKIAkJCQkJCXFvcy0+bWF4X3R1cm5fdGltZS52YWx1ZSk7CiAKICNpZmRlZiBDT05GSUdfSVJEQV9EWU5BTUlDX1dJTkRPVwpAQCAtNDI3LDMyICs0MjcsMzIgQEAKICAqICAgIFdlIGp1c3Qgc2V0IHRoZSBRb1MgY2FwYWJpbGl0aWVzIGZvciB0aGUgcGVlciBzdGF0aW9uCiAgKgogICovCi1pbnQgaXJsYXBfcW9zX25lZ290aWF0ZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpIAoraW50IGlybGFwX3Fvc19uZWdvdGlhdGUoc3RydWN0IGlybGFwX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByZXQ7Ci0JCi0JcmV0ID0gaXJkYV9wYXJhbV9leHRyYWN0X2FsbChzZWxmLCBza2ItPmRhdGEsIHNrYi0+bGVuLCAKKworCXJldCA9IGlyZGFfcGFyYW1fZXh0cmFjdF9hbGwoc2VsZiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCQkgICAgICZpcmxhcF9wYXJhbV9pbmZvKTsKLQkKKwogCS8qIENvbnZlcnQgdGhlIG5lZ290aWF0ZWQgYml0cyB0byB2YWx1ZXMgKi8KIAlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKCZzZWxmLT5xb3NfdHgpOwogCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJnNlbGYtPnFvc19yeCk7CiAKIAlpcmxhcF9hZGp1c3RfcW9zX3NldHRpbmdzKCZzZWxmLT5xb3NfdHgpOwogCi0JSVJEQV9ERUJVRygyLCAiU2V0dGluZyBCQVVEX1JBVEUgdG8gJWQgYnBzLlxuIiwgCisJSVJEQV9ERUJVRygyLCAiU2V0dGluZyBCQVVEX1JBVEUgdG8gJWQgYnBzLlxuIiwKIAkJICAgc2VsZi0+cW9zX3R4LmJhdWRfcmF0ZS52YWx1ZSk7CiAJSVJEQV9ERUJVRygyLCAiU2V0dGluZyBEQVRBX1NJWkUgdG8gJWQgYnl0ZXNcbiIsCiAJCSAgIHNlbGYtPnFvc190eC5kYXRhX3NpemUudmFsdWUpOwotCUlSREFfREVCVUcoMiwgIlNldHRpbmcgV0lORE9XX1NJWkUgdG8gJWRcbiIsIAorCUlSREFfREVCVUcoMiwgIlNldHRpbmcgV0lORE9XX1NJWkUgdG8gJWRcbiIsCiAJCSAgIHNlbGYtPnFvc190eC53aW5kb3dfc2l6ZS52YWx1ZSk7Ci0JSVJEQV9ERUJVRygyLCAiU2V0dGluZyBYQk9GUyB0byAlZFxuIiwgCisJSVJEQV9ERUJVRygyLCAiU2V0dGluZyBYQk9GUyB0byAlZFxuIiwKIAkJICAgc2VsZi0+cW9zX3R4LmFkZGl0aW9uYWxfYm9mcy52YWx1ZSk7CiAJSVJEQV9ERUJVRygyLCAiU2V0dGluZyBNQVhfVFVSTl9USU1FIHRvICVkIG1zLlxuIiwKIAkJICAgc2VsZi0+cW9zX3R4Lm1heF90dXJuX3RpbWUudmFsdWUpOwogCUlSREFfREVCVUcoMiwgIlNldHRpbmcgTUlOX1RVUk5fVElNRSB0byAlZCB1c2Vjcy5cbiIsCiAJCSAgIHNlbGYtPnFvc190eC5taW5fdHVybl90aW1lLnZhbHVlKTsKLQlJUkRBX0RFQlVHKDIsICJTZXR0aW5nIExJTktfRElTQyB0byAlZCBzZWNzLlxuIiwgCisJSVJEQV9ERUJVRygyLCAiU2V0dGluZyBMSU5LX0RJU0MgdG8gJWQgc2Vjcy5cbiIsCiAJCSAgIHNlbGYtPnFvc190eC5saW5rX2Rpc2NfdGltZS52YWx1ZSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ2Myw1NSArNDYzLDU1IEBACiAgKiAgICBJbnNlcnQgUW9TIG5lZ290aWFpb24gcGFyYXJhbWV0ZXJzIGludG8gZnJhbWUKICAqCiAgKi8KLWludCBpcmxhcF9pbnNlcnRfcW9zX25lZ290aWF0aW9uX3BhcmFtcyhzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIAoraW50IGlybGFwX2luc2VydF9xb3NfbmVnb3RpYXRpb25fcGFyYW1zKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmV0OwogCiAJLyogSW5zZXJ0IGRhdGEgcmF0ZSAqLwotCXJldCA9IGlyZGFfcGFyYW1faW5zZXJ0KHNlbGYsIFBJX0JBVURfUkFURSwgc2tiLT50YWlsLCAKKwlyZXQgPSBpcmRhX3BhcmFtX2luc2VydChzZWxmLCBQSV9CQVVEX1JBVEUsIHNrYi0+dGFpbCwKIAkJCQlza2JfdGFpbHJvb20oc2tiKSwgJmlybGFwX3BhcmFtX2luZm8pOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCXNrYl9wdXQoc2tiLCByZXQpOwogCiAJLyogSW5zZXJ0IG1heCB0dXJuYXJvdW5kIHRpbWUgKi8KLQlyZXQgPSBpcmRhX3BhcmFtX2luc2VydChzZWxmLCBQSV9NQVhfVFVSTl9USU1FLCBza2ItPnRhaWwsIAorCXJldCA9IGlyZGFfcGFyYW1faW5zZXJ0KHNlbGYsIFBJX01BWF9UVVJOX1RJTUUsIHNrYi0+dGFpbCwKIAkJCQlza2JfdGFpbHJvb20oc2tiKSwgJmlybGFwX3BhcmFtX2luZm8pOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCXNrYl9wdXQoc2tiLCByZXQpOwogCiAJLyogSW5zZXJ0IGRhdGEgc2l6ZSAqLwotCXJldCA9IGlyZGFfcGFyYW1faW5zZXJ0KHNlbGYsIFBJX0RBVEFfU0laRSwgc2tiLT50YWlsLCAKKwlyZXQgPSBpcmRhX3BhcmFtX2luc2VydChzZWxmLCBQSV9EQVRBX1NJWkUsIHNrYi0+dGFpbCwKIAkJCQlza2JfdGFpbHJvb20oc2tiKSwgJmlybGFwX3BhcmFtX2luZm8pOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCXNrYl9wdXQoc2tiLCByZXQpOwogCiAJLyogSW5zZXJ0IHdpbmRvdyBzaXplICovCi0JcmV0ID0gaXJkYV9wYXJhbV9pbnNlcnQoc2VsZiwgUElfV0lORE9XX1NJWkUsIHNrYi0+dGFpbCwgCisJcmV0ID0gaXJkYV9wYXJhbV9pbnNlcnQoc2VsZiwgUElfV0lORE9XX1NJWkUsIHNrYi0+dGFpbCwKIAkJCQlza2JfdGFpbHJvb20oc2tiKSwgJmlybGFwX3BhcmFtX2luZm8pOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCXNrYl9wdXQoc2tiLCByZXQpOwogCiAJLyogSW5zZXJ0IGFkZGl0aW9uYWwgQk9GcyAqLwotCXJldCA9IGlyZGFfcGFyYW1faW5zZXJ0KHNlbGYsIFBJX0FERF9CT0ZTLCBza2ItPnRhaWwsIAorCXJldCA9IGlyZGFfcGFyYW1faW5zZXJ0KHNlbGYsIFBJX0FERF9CT0ZTLCBza2ItPnRhaWwsCiAJCQkJc2tiX3RhaWxyb29tKHNrYiksICZpcmxhcF9wYXJhbV9pbmZvKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlza2JfcHV0KHNrYiwgcmV0KTsKIAogCS8qIEluc2VydCBtaW5pbXVtIHR1cm5hcm91bmQgdGltZSAqLwotCXJldCA9IGlyZGFfcGFyYW1faW5zZXJ0KHNlbGYsIFBJX01JTl9UVVJOX1RJTUUsIHNrYi0+dGFpbCwgCisJcmV0ID0gaXJkYV9wYXJhbV9pbnNlcnQoc2VsZiwgUElfTUlOX1RVUk5fVElNRSwgc2tiLT50YWlsLAogCQkJCXNrYl90YWlscm9vbShza2IpLCAmaXJsYXBfcGFyYW1faW5mbyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJc2tiX3B1dChza2IsIHJldCk7CiAKIAkvKiBJbnNlcnQgbGluayBkaXNjb25uZWN0L3RocmVzaG9sZCB0aW1lICovCi0JcmV0ID0gaXJkYV9wYXJhbV9pbnNlcnQoc2VsZiwgUElfTElOS19ESVNDLCBza2ItPnRhaWwsIAorCXJldCA9IGlyZGFfcGFyYW1faW5zZXJ0KHNlbGYsIFBJX0xJTktfRElTQywgc2tiLT50YWlsLAogCQkJCXNrYl90YWlscm9vbShza2IpLCAmaXJsYXBfcGFyYW1faW5mbyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC01MzcsMTIgKzUzNywxMiBAQAogCiAJaWYgKGdldCkgewogCQlwYXJhbS0+cHYuaSA9IHNlbGYtPnFvc19yeC5iYXVkX3JhdGUuYml0czsKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgYmF1ZCByYXRlID0gMHglMDJ4XG4iLCAKLQkJCSAgIF9fRlVOQ1RJT05fXywgcGFyYW0tPnB2LmkpOwkJCisJCUlSREFfREVCVUcoMiwgIiVzKCksIGJhdWQgcmF0ZSA9IDB4JTAyeFxuIiwKKwkJCSAgIF9fRlVOQ1RJT05fXywgcGFyYW0tPnB2LmkpOwogCX0gZWxzZSB7Ci0JCS8qIAorCQkvKgogCQkgKiAgU3RhdGlvbnMgbXVzdCBhZ3JlZSBvbiBiYXVkIHJhdGUsIHNvIGNhbGN1bGF0ZQotCQkgKiAgaW50ZXJzZWN0aW9uIAorCQkgKiAgaW50ZXJzZWN0aW9uCiAJCSAqLwogCQlJUkRBX0RFQlVHKDIsICJSZXF1ZXN0ZWQgQkFVRF9SQVRFOiAweCUwNHhcbiIsIChfX3UxNikgcGFyYW0tPnB2LmkpOwogCQlmaW5hbCA9IChfX3UxNikgcGFyYW0tPnB2LmkgJiBzZWxmLT5xb3NfcnguYmF1ZF9yYXRlLmJpdHM7CkBAIC01NTgsMjQgKzU1OCwyNCBAQAogLyoKICAqIEZ1bmN0aW9uIGlybGFwX3BhcmFtX2xpbmtfZGlzY29ubmVjdCAoaW5zdGFuY2UsIHBhcmFtLCBnZXQpCiAgKgotICogICAgTmVnb3RpYXRlIGxpbmsgZGlzY29ubmVjdC90aHJlc2hvbGQgdGltZS4gCisgKiAgICBOZWdvdGlhdGUgbGluayBkaXNjb25uZWN0L3RocmVzaG9sZCB0aW1lLgogICoKICAqLwotc3RhdGljIGludCBpcmxhcF9wYXJhbV9saW5rX2Rpc2Nvbm5lY3Qodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIAorc3RhdGljIGludCBpcmxhcF9wYXJhbV9saW5rX2Rpc2Nvbm5lY3Qodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sCiAJCQkJICAgICAgIGludCBnZXQpCiB7CiAJX191MTYgZmluYWw7Ci0JCisKIAlzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYgPSAoc3RydWN0IGlybGFwX2NiICopIGluc3RhbmNlOwotCQorCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybiAtMTspOwotCQorCiAJaWYgKGdldCkKIAkJcGFyYW0tPnB2LmkgPSBzZWxmLT5xb3NfcngubGlua19kaXNjX3RpbWUuYml0czsKIAllbHNlIHsKLQkJLyogIAotCQkgKiAgU3RhdGlvbnMgbXVzdCBhZ3JlZSBvbiBsaW5rIGRpc2Nvbm5lY3QvdGhyZXNob2xkIAorCQkvKgorCQkgKiAgU3RhdGlvbnMgbXVzdCBhZ3JlZSBvbiBsaW5rIGRpc2Nvbm5lY3QvdGhyZXNob2xkCiAJCSAqICB0aW1lLgogCQkgKi8KIAkJSVJEQV9ERUJVRygyLCAiTElOS19ESVNDOiAlMDJ4XG4iLCAoX191OCkgcGFyYW0tPnB2LmkpOwpAQCAtNTk1LDE0ICs1OTUsMTQgQEAKICAqICAgIHdpbGwgYmUgbmVnb3RpYXRlZCBpbmRlcGVuZGVudGx5IGZvciBlYWNoIHN0YXRpb24KICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJsYXBfcGFyYW1fbWF4X3R1cm5fdGltZSh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwgCitzdGF0aWMgaW50IGlybGFwX3BhcmFtX21heF90dXJuX3RpbWUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sCiAJCQkJICAgICBpbnQgZ2V0KQogewogCXN0cnVjdCBpcmxhcF9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJsYXBfY2IgKikgaW5zdGFuY2U7Ci0JCisKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuIC0xOyk7Ci0JCisKIAlpZiAoZ2V0KQogCQlwYXJhbS0+cHYuaSA9IHNlbGYtPnFvc19yeC5tYXhfdHVybl90aW1lLmJpdHM7CiAJZWxzZQpAQCAtNjIxLDEwICs2MjEsMTAgQEAKIHN0YXRpYyBpbnQgaXJsYXBfcGFyYW1fZGF0YV9zaXplKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLCBpbnQgZ2V0KQogewogCXN0cnVjdCBpcmxhcF9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJsYXBfY2IgKikgaW5zdGFuY2U7Ci0JCisKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuIC0xOyk7Ci0JCisKIAlpZiAoZ2V0KQogCQlwYXJhbS0+cHYuaSA9IHNlbGYtPnFvc19yeC5kYXRhX3NpemUuYml0czsKIAllbHNlCkBAIC02NDAsMTQgKzY0MCwxNCBAQAogICogICAgd2lsbCBiZSBuZWdvdGlhdGVkIGluZGVwZW5kZW50bHkgZm9yIGVhY2ggc3RhdGlvbgogICoKICAqLwotc3RhdGljIGludCBpcmxhcF9wYXJhbV93aW5kb3dfc2l6ZSh2b2lkICppbnN0YW5jZSwgaXJkYV9wYXJhbV90ICpwYXJhbSwgCitzdGF0aWMgaW50IGlybGFwX3BhcmFtX3dpbmRvd19zaXplKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgIGludCBnZXQpCiB7CiAJc3RydWN0IGlybGFwX2NiICpzZWxmID0gKHN0cnVjdCBpcmxhcF9jYiAqKSBpbnN0YW5jZTsKLQkKKwogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm4gLTE7KTsKLQkKKwogCWlmIChnZXQpCiAJCXBhcmFtLT5wdi5pID0gc2VsZi0+cW9zX3J4LndpbmRvd19zaXplLmJpdHM7CiAJZWxzZQpAQCAtNjY1LDEwICs2NjUsMTAgQEAKIHN0YXRpYyBpbnQgaXJsYXBfcGFyYW1fYWRkaXRpb25hbF9ib2ZzKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLCBpbnQgZ2V0KQogewogCXN0cnVjdCBpcmxhcF9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJsYXBfY2IgKikgaW5zdGFuY2U7Ci0JCisKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuIC0xOyk7Ci0JCisKIAlpZiAoZ2V0KQogCQlwYXJhbS0+cHYuaSA9IHNlbGYtPnFvc19yeC5hZGRpdGlvbmFsX2JvZnMuYml0czsKIAllbHNlCkBAIC02ODMsMTQgKzY4MywxNCBAQAogICogICAgTmVnb3RpYXRlIHRoZSBtaW5pbXVtIHR1cm4gYXJvdW5kIHRpbWUuIFRoaXMgaXMgYSB0eXBlIDEgcGFyYW1ldGVyIGFuZAogICogICAgd2lsbCBiZSBuZWdvdGlhdGVkIGluZGVwZW5kZW50bHkgZm9yIGVhY2ggc3RhdGlvbgogICovCi1zdGF0aWMgaW50IGlybGFwX3BhcmFtX21pbl90dXJuX3RpbWUodm9pZCAqaW5zdGFuY2UsIGlyZGFfcGFyYW1fdCAqcGFyYW0sIAorc3RhdGljIGludCBpcmxhcF9wYXJhbV9taW5fdHVybl90aW1lKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgICAgaW50IGdldCkKIHsKIAlzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYgPSAoc3RydWN0IGlybGFwX2NiICopIGluc3RhbmNlOwotCQorCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybiAtMTspOwotCQorCiAJaWYgKGdldCkKIAkJcGFyYW0tPnB2LmkgPSBzZWxmLT5xb3NfcngubWluX3R1cm5fdGltZS5iaXRzOwogCWVsc2UKQEAgLTcyMSw5ICs3MjEsOSBAQAogCiAJbGluZV9jYXBhY2l0eSA9IG1heF9saW5lX2NhcGFjaXRpZXNbaV1bal07CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpLCBsaW5lIGNhcGFjaXR5PSVkIGJ5dGVzXG4iLCAKKwlJUkRBX0RFQlVHKDIsICIlcygpLCBsaW5lIGNhcGFjaXR5PSVkIGJ5dGVzXG4iLAogCQkgICBfX0ZVTkNUSU9OX18sIGxpbmVfY2FwYWNpdHkpOwotCQorCiAJcmV0dXJuIGxpbmVfY2FwYWNpdHk7CiB9CiAKQEAgLTc0OSw3ICs3NDksNyBAQAogCWludCBpbmRleDsKIAogCUlSREFfQVNTRVJUKHFvcyAhPSBOVUxMLCByZXR1cm47KTsKLQkKKwogCWluZGV4ID0gbXNiX2luZGV4KHFvcy0+YmF1ZF9yYXRlLmJpdHMpOwogCXFvcy0+YmF1ZF9yYXRlLnZhbHVlID0gYmF1ZF9yYXRlc1tpbmRleF07CiAKQEAgLTc2MSwxMyArNzYxLDEzIEBACiAKIAlpbmRleCA9IG1zYl9pbmRleChxb3MtPm1pbl90dXJuX3RpbWUuYml0cyk7CiAJcW9zLT5taW5fdHVybl90aW1lLnZhbHVlID0gbWluX3R1cm5fdGltZXNbaW5kZXhdOwotCQorCiAJaW5kZXggPSBtc2JfaW5kZXgocW9zLT5tYXhfdHVybl90aW1lLmJpdHMpOwogCXFvcy0+bWF4X3R1cm5fdGltZS52YWx1ZSA9IG1heF90dXJuX3RpbWVzW2luZGV4XTsKIAogCWluZGV4ID0gbXNiX2luZGV4KHFvcy0+bGlua19kaXNjX3RpbWUuYml0cyk7CiAJcW9zLT5saW5rX2Rpc2NfdGltZS52YWx1ZSA9IGxpbmtfZGlzY190aW1lc1tpbmRleF07Ci0JCisKIAlpbmRleCA9IG1zYl9pbmRleChxb3MtPmFkZGl0aW9uYWxfYm9mcy5iaXRzKTsKIAlxb3MtPmFkZGl0aW9uYWxfYm9mcy52YWx1ZSA9IGFkZF9ib2ZzW2luZGV4XTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcmRhL3RpbWVyLmMgYi9uZXQvaXJkYS90aW1lci5jCmluZGV4IDM4NzFhMmIuLmQzYTZlZTggMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL3RpbWVyLmMKKysrIGIvbmV0L2lyZGEvdGltZXIuYwpAQCAtMSwyNSArMSwyNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgCisgKgogICogRmlsZW5hbWU6ICAgICAgdGltZXIuYwotICogVmVyc2lvbjogICAgICAgCi0gKiBEZXNjcmlwdGlvbjogICAKKyAqIFZlcnNpb246CisgKiBEZXNjcmlwdGlvbjoKICAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KICAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICAqIENyZWF0ZWQgYXQ6ICAgIFNhdCBBdWcgMTYgMDA6NTk6MjkgMTk5NwogICogTW9kaWZpZWQgYXQ6ICAgV2VkIERlYyAgOCAxMjo1MDozNCAxOTk5CiAgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+Ci0gKiAKLSAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCisgKgorICogICAgIENvcHlyaWdodCAoYykgMTk5NywgMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LAogICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgotICogICAgIAotICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCi0gKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCi0gKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKLSAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MCwxMSArNDAsMTEgQEAKIHN0YXRpYyB2b2lkIGlybGFwX2ZpbmFsX3RpbWVyX2V4cGlyZWQodm9pZCogZGF0YSk7CiBzdGF0aWMgdm9pZCBpcmxhcF93ZF90aW1lcl9leHBpcmVkKHZvaWQqIGRhdGEpOwogc3RhdGljIHZvaWQgaXJsYXBfYmFja29mZl90aW1lcl9leHBpcmVkKHZvaWQqIGRhdGEpOwotc3RhdGljIHZvaWQgaXJsYXBfbWVkaWFfYnVzeV9leHBpcmVkKHZvaWQqIGRhdGEpOyAKK3N0YXRpYyB2b2lkIGlybGFwX21lZGlhX2J1c3lfZXhwaXJlZCh2b2lkKiBkYXRhKTsKIAogdm9pZCBpcmxhcF9zdGFydF9zbG90X3RpbWVyKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IHRpbWVvdXQpCiB7Ci0JaXJkYV9zdGFydF90aW1lcigmc2VsZi0+c2xvdF90aW1lciwgdGltZW91dCwgKHZvaWQgKikgc2VsZiwgCisJaXJkYV9zdGFydF90aW1lcigmc2VsZi0+c2xvdF90aW1lciwgdGltZW91dCwgKHZvaWQgKikgc2VsZiwKIAkJCSBpcmxhcF9zbG90X3RpbWVyX2V4cGlyZWQpOwogfQogCkBAIC02NywzMSArNjcsMzEgQEAKIAkvKiBTZXQgb3IgcmUtc2V0IHRoZSB0aW1lci4gV2UgcmVzZXQgdGhlIHRpbWVyIGZvciBlYWNoIHJlY2VpdmVkCiAJICogZGlzY292ZXJ5IHF1ZXJ5LCB3aGljaCBhbGxvdyB1cyB0byBhdXRvbWF0aWNhbGx5IGFkanVzdCB0bwogCSAqIHRoZSBzcGVlZCBvZiB0aGUgcGVlciBkaXNjb3ZlcnkgKGZhc3RlciBvciBzbG93ZXIpLiBKZWFuIElJICovCi0JaXJkYV9zdGFydF90aW1lciggJnNlbGYtPnF1ZXJ5X3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLCAKKwlpcmRhX3N0YXJ0X3RpbWVyKCAmc2VsZi0+cXVlcnlfdGltZXIsIHRpbWVvdXQsICh2b2lkICopIHNlbGYsCiAJCQkgIGlybGFwX3F1ZXJ5X3RpbWVyX2V4cGlyZWQpOwogfQogCiB2b2lkIGlybGFwX3N0YXJ0X2ZpbmFsX3RpbWVyKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IHRpbWVvdXQpCiB7Ci0JaXJkYV9zdGFydF90aW1lcigmc2VsZi0+ZmluYWxfdGltZXIsIHRpbWVvdXQsICh2b2lkICopIHNlbGYsIAorCWlyZGFfc3RhcnRfdGltZXIoJnNlbGYtPmZpbmFsX3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLAogCQkJIGlybGFwX2ZpbmFsX3RpbWVyX2V4cGlyZWQpOwogfQogCiB2b2lkIGlybGFwX3N0YXJ0X3dkX3RpbWVyKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IHRpbWVvdXQpCiB7Ci0JaXJkYV9zdGFydF90aW1lcigmc2VsZi0+d2RfdGltZXIsIHRpbWVvdXQsICh2b2lkICopIHNlbGYsIAorCWlyZGFfc3RhcnRfdGltZXIoJnNlbGYtPndkX3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLAogCQkJIGlybGFwX3dkX3RpbWVyX2V4cGlyZWQpOwogfQogCiB2b2lkIGlybGFwX3N0YXJ0X2JhY2tvZmZfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCkKIHsKLQlpcmRhX3N0YXJ0X3RpbWVyKCZzZWxmLT5iYWNrb2ZmX3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLCAKKwlpcmRhX3N0YXJ0X3RpbWVyKCZzZWxmLT5iYWNrb2ZmX3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLAogCQkJIGlybGFwX2JhY2tvZmZfdGltZXJfZXhwaXJlZCk7CiB9CiAKIHZvaWQgaXJsYXBfc3RhcnRfbWJ1c3lfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCkKIHsKLQlpcmRhX3N0YXJ0X3RpbWVyKCZzZWxmLT5tZWRpYV9idXN5X3RpbWVyLCB0aW1lb3V0LCAKKwlpcmRhX3N0YXJ0X3RpbWVyKCZzZWxmLT5tZWRpYV9idXN5X3RpbWVyLCB0aW1lb3V0LAogCQkJICh2b2lkICopIHNlbGYsIGlybGFwX21lZGlhX2J1c3lfZXhwaXJlZCk7CiB9CiAKQEAgLTEwOSwyNSArMTA5LDI1IEBACiAJCWlybGFwX2RvX2V2ZW50KHNlbGYsIE1FRElBX0JVU1lfVElNRVJfRVhQSVJFRCwgTlVMTCwgTlVMTCk7CiB9CiAKLXZvaWQgaXJsbXBfc3RhcnRfd2F0Y2hkb2dfdGltZXIoc3RydWN0IGxzYXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KSAKK3ZvaWQgaXJsbXBfc3RhcnRfd2F0Y2hkb2dfdGltZXIoc3RydWN0IGxzYXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KQogewogCWlyZGFfc3RhcnRfdGltZXIoJnNlbGYtPndhdGNoZG9nX3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLAogCQkJIGlybG1wX3dhdGNoZG9nX3RpbWVyX2V4cGlyZWQpOwogfQogCi12b2lkIGlybG1wX3N0YXJ0X2Rpc2NvdmVyeV90aW1lcihzdHJ1Y3QgaXJsbXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KSAKK3ZvaWQgaXJsbXBfc3RhcnRfZGlzY292ZXJ5X3RpbWVyKHN0cnVjdCBpcmxtcF9jYiAqc2VsZiwgaW50IHRpbWVvdXQpCiB7CiAJaXJkYV9zdGFydF90aW1lcigmc2VsZi0+ZGlzY292ZXJ5X3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLAogCQkJIGlybG1wX2Rpc2NvdmVyeV90aW1lcl9leHBpcmVkKTsKIH0KIAotdm9pZCBpcmxtcF9zdGFydF9pZGxlX3RpbWVyKHN0cnVjdCBsYXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KSAKK3ZvaWQgaXJsbXBfc3RhcnRfaWRsZV90aW1lcihzdHJ1Y3QgbGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCkKIHsKIAlpcmRhX3N0YXJ0X3RpbWVyKCZzZWxmLT5pZGxlX3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLAogCQkJIGlybG1wX2lkbGVfdGltZXJfZXhwaXJlZCk7CiB9CiAKLXZvaWQgaXJsbXBfc3RvcF9pZGxlX3RpbWVyKHN0cnVjdCBsYXBfY2IgKnNlbGYpIAordm9pZCBpcmxtcF9zdG9wX2lkbGVfdGltZXIoc3RydWN0IGxhcF9jYiAqc2VsZikKIHsKIAkvKiBJZiB0aW1lciBpcyBhY3RpdmF0ZWQsIGtpbGwgaXQhICovCiAJZGVsX3RpbWVyKCZzZWxmLT5pZGxlX3RpbWVyKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CiAKIAlpcmxhcF9kb19ldmVudChzZWxmLCBTTE9UX1RJTUVSX0VYUElSRUQsIE5VTEwsIE5VTEwpOwotfSAKK30KIAogLyoKICAqIEZ1bmN0aW9uIGlybGFwX3F1ZXJ5X3RpbWVyX2V4cGlyZWQgKGRhdGEpCkBAIC0xNjMsMTIgKzE2MywxMiBAQAogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CiAKIAlpcmxhcF9kb19ldmVudChzZWxmLCBRVUVSWV9USU1FUl9FWFBJUkVELCBOVUxMLCBOVUxMKTsKLX0gCit9CiAKIC8qCiAgKiBGdW5jdGlvbiBpcmRhX2ZpbmFsX3RpbWVyX2V4cGlyZWQgKGRhdGEpCiAgKgotICogICAgCisgKgogICoKICAqLwogc3RhdGljIHZvaWQgaXJsYXBfZmluYWxfdGltZXJfZXhwaXJlZCh2b2lkICpkYXRhKQpAQCAtMTg0LDMyICsxODQsMzIgQEAKIC8qCiAgKiBGdW5jdGlvbiBpcmRhX3dkX3RpbWVyX2V4cGlyZWQgKGRhdGEpCiAgKgotICogICAgCisgKgogICoKICAqLwogc3RhdGljIHZvaWQgaXJsYXBfd2RfdGltZXJfZXhwaXJlZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBpcmxhcF9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJsYXBfY2IgKikgZGF0YTsKLQkKKwogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKLQkKKwogCWlybGFwX2RvX2V2ZW50KHNlbGYsIFdEX1RJTUVSX0VYUElSRUQsIE5VTEwsIE5VTEwpOwogfQogCiAvKgogICogRnVuY3Rpb24gaXJkYV9iYWNrb2ZmX3RpbWVyX2V4cGlyZWQgKGRhdGEpCiAgKgotICogICAgCisgKgogICoKICAqLwogc3RhdGljIHZvaWQgaXJsYXBfYmFja29mZl90aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlybGFwX2NiICpzZWxmID0gKHN0cnVjdCBpcmxhcF9jYiAqKSBkYXRhOwotCQorCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybjspOwotCQorCiAJaXJsYXBfZG9fZXZlbnQoc2VsZiwgQkFDS09GRl9USU1FUl9FWFBJUkVELCBOVUxMLCBOVUxMKTsKIH0KIApAQCAtMjE3LDcgKzIxNyw3IEBACiAvKgogICogRnVuY3Rpb24gaXJ0dHlfbWVkaWFfYnVzeV9leHBpcmVkIChkYXRhKQogICoKLSAqICAgIAorICoKICAqLwogdm9pZCBpcmxhcF9tZWRpYV9idXN5X2V4cGlyZWQodm9pZCogZGF0YSkKIHsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL3dyYXBwZXIuYyBiL25ldC9pcmRhL3dyYXBwZXIuYwppbmRleCA4NzEzMGMxLi41YWJmYjcxIDEwMDY0NAotLS0gYS9uZXQvaXJkYS93cmFwcGVyLmMKKysrIGIvbmV0L2lyZGEvd3JhcHBlci5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAljYXNlIE9VVFNJREVfRlJBTUU6CiAJY2FzZSBCRUdJTl9GUkFNRToKIAlkZWZhdWx0OgotCQkvKiBXZSBtYXkgcmVjZWl2ZSBtdWx0aXBsZSBCT0YgYXQgdGhlIHN0YXJ0IG9mIGZyYW1lICovIAorCQkvKiBXZSBtYXkgcmVjZWl2ZSBtdWx0aXBsZSBCT0YgYXQgdGhlIHN0YXJ0IG9mIGZyYW1lICovCiAJCWJyZWFrOwogCX0KIAo=