ZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKaW5kZXggOWZhNzJhZC4uYjA4YTE0MSAxMDA2NDQKLS0tIGEvLmdpdGF0dHJpYnV0ZXMKKysrIGIvLmdpdGF0dHJpYnV0ZXMKQEAgLTUsNiArNSw3IEBACiAqLnBsIGVvZj1sZiBkaWZmPXBlcmwKICoucG0gZW9sPWxmIGRpZmY9cGVybAogKi5weSBlb2w9bGYgZGlmZj1weXRob24KKyouYmF0IGVvbD1jcmxmCiAvRG9jdW1lbnRhdGlvbi8qKi8qLnR4dCBlb2w9bGYKIC9jb21tYW5kLWxpc3QudHh0IGVvbD1sZgogL0dJVC1WRVJTSU9OLUdFTiBlb2w9bGYKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDIzNzRmNzcuLjUyMWQ4ZjQgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtNTgsNiArNTgsNyBAQAogL2dpdC1kaWZmdG9vbAogL2dpdC1kaWZmdG9vbC0taGVscGVyCiAvZ2l0LWRlc2NyaWJlCisvZ2l0LWVudi0taGVscGVyCiAvZ2l0LWZhc3QtZXhwb3J0CiAvZ2l0LWZhc3QtaW1wb3J0CiAvZ2l0LWZldGNoCkBAIC0xMjIsOSArMTIzLDYgQEAKIC9naXQtcmFuZ2UtZGlmZgogL2dpdC1yZWFkLXRyZWUKIC9naXQtcmViYXNlCi0vZ2l0LXJlYmFzZS0tYW0KLS9naXQtcmViYXNlLS1jb21tb24KLS9naXQtcmViYXNlLS1pbnRlcmFjdGl2ZQogL2dpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcwogL2dpdC1yZWNlaXZlLXBhY2sKIC9naXQtcmVmbG9nCkBAIC0xNDIsNiArMTQwLDcgQEAKIC9naXQtcmVxdWVzdC1wdWxsCiAvZ2l0LXJlcmVyZQogL2dpdC1yZXNldAorL2dpdC1yZXN0b3JlCiAvZ2l0LXJldi1saXN0CiAvZ2l0LXJldi1wYXJzZQogL2dpdC1yZXZlcnQKQEAgLTE2Niw2ICsxNjUsNyBAQAogL2dpdC1zdWJtb2R1bGUKIC9naXQtc3VibW9kdWxlLS1oZWxwZXIKIC9naXQtc3ZuCisvZ2l0LXN3aXRjaAogL2dpdC1zeW1ib2xpYy1yZWYKIC9naXQtdGFnCiAvZ2l0LXVucGFjay1maWxlCkBAIC0yMjYsNiArMjI2LDE1IEBACiAqLnVzZXIKICouaWRiCiAqLnBkYgotL0RlYnVnLwotL1JlbGVhc2UvCisqLmlsaworKi5pb2JqCisqLmlwZGIKKyouZGxsCisudnMvCisqLm1hbmlmZXN0CitEZWJ1Zy8KK1JlbGVhc2UvCisvVXBncmFkZUxvZyouaHRtCisvZ2l0LlZDLlZDLm9wZW5kYgorL2dpdC5WQy5kYgogKi5kU1lNCmRpZmYgLS1naXQgYS8udHJhdmlzLnltbCBiLy50cmF2aXMueW1sCmluZGV4IGZmYjFiYzQuLmZjNTczMGIgMTAwNjQ0Ci0tLSBhLy50cmF2aXMueW1sCisrKyBiLy50cmF2aXMueW1sCkBAIC0yMSw2ICsyMSwxMCBAQAogICAgICAgY29tcGlsZXI6CiAgICAgICBhZGRvbnM6CiAgICAgICBiZWZvcmVfaW5zdGFsbDoKKyAgICAtIGVudjogam9ibmFtZT1saW51eC1nY2MtNC44CisgICAgICBvczogbGludXgKKyAgICAgIGRpc3Q6IHRydXN0eQorICAgICAgY29tcGlsZXI6CiAgICAgLSBlbnY6IGpvYm5hbWU9TGludXgzMgogICAgICAgb3M6IGxpbnV4CiAgICAgICBjb21waWxlcjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcyBiL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcwppbmRleCAxMTY5ZmY2Li5mNDVkYjViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzCkBAIC0xOTUsMTAgKzE5NSwzMCBAQAogICAgYnkgZS5nLiAiZWNobyBERVZFTE9QRVI9MSA+PmNvbmZpZy5tYWsiLgogCiAgLSBXZSB0cnkgdG8gc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgQyBjb21waWxlcnMgdG8gY29tcGlsZSBHaXQgd2l0aCwKLSAgIGluY2x1ZGluZyBvbGQgb25lcy4gVGhhdCBtZWFucyB0aGF0IHlvdSBzaG91bGQgbm90IHVzZSBDOTkKLSAgIGluaXRpYWxpemVycywgZXZlbiBpZiBhIGxvdCBvZiBjb21waWxlcnMgZ3JvayBpdC4KKyAgIGluY2x1ZGluZyBvbGQgb25lcy4gIFlvdSBzaG91bGQgbm90IHVzZSBmZWF0dXJlcyBmcm9tIG5ld2VyIEMKKyAgIHN0YW5kYXJkLCBldmVuIGlmIHlvdXIgY29tcGlsZXIgZ3Jva3MgdGhlbS4KIAotIC0gVmFyaWFibGVzIGhhdmUgdG8gYmUgZGVjbGFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYmxvY2suCisgICBUaGVyZSBhcmUgYSBmZXcgZXhjZXB0aW9ucyB0byB0aGlzIGd1aWRlbGluZToKKworICAgLiBzaW5jZSBlYXJseSAyMDEyIHdpdGggZTEzMjcwMjNlYSwgd2UgaGF2ZSBiZWVuIHVzaW5nIGFuIGVudW0KKyAgICAgZGVmaW5pdGlvbiB3aG9zZSBsYXN0IGVsZW1lbnQgaXMgZm9sbG93ZWQgYnkgYSBjb21tYS4gIFRoaXMsIGxpa2UKKyAgICAgYW4gYXJyYXkgaW5pdGlhbGl6ZXIgdGhhdCBlbmRzIHdpdGggYSB0cmFpbGluZyBjb21tYSwgY2FuIGJlIHVzZWQKKyAgICAgdG8gcmVkdWNlIHRoZSBwYXRjaCBub2lzZSB3aGVuIGFkZGluZyBhIG5ldyBpZGVudGlmZXIgYXQgdGhlIGVuZC4KKworICAgLiBzaW5jZSBtaWQgMjAxNyB3aXRoIGNiYzBmODFkLCB3ZSBoYXZlIGJlZW4gdXNpbmcgZGVzaWduYXRlZAorICAgICBpbml0aWFsaXplcnMgZm9yIHN0cnVjdCAoZS5nLiAic3RydWN0IHQgdiA9IHsgLnZhbCA9ICdhJyB9OyIpLgorCisgICAuIHNpbmNlIG1pZCAyMDE3IHdpdGggNTEyZjQxY2YsIHdlIGhhdmUgYmVlbiB1c2luZyBkZXNpZ25hdGVkCisgICAgIGluaXRpYWxpemVycyBmb3IgYXJyYXkgKGUuZy4gImludCBhcnJheVsxMF0gPSB7IFs1XSA9IDIgfSIpLgorCisgICBUaGVzZSB1c2VkIHRvIGJlIGZvcmJpZGRlbiwgYnV0IHdlIGhhdmUgbm90IGhlYXJkIGFueSBicmVha2FnZQorICAgcmVwb3J0LCBhbmQgdGhleSBhcmUgYXNzdW1lZCB0byBiZSBzYWZlLgorCisgLSBWYXJpYWJsZXMgaGF2ZSB0byBiZSBkZWNsYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBibG9jaywgYmVmb3JlCisgICB0aGUgZmlyc3Qgc3RhdGVtZW50IChpLmUuIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50KS4KKworIC0gRGVjbGFyaW5nIGEgdmFyaWFibGUgaW4gdGhlIGZvciBsb29wICJmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIgorICAgaXMgc3RpbGwgbm90IGFsbG93ZWQgaW4gdGhpcyBjb2RlYmFzZS4KIAogIC0gTlVMTCBwb2ludGVycyBzaGFsbCBiZSB3cml0dGVuIGFzIE5VTEwsIG5vdCBhcyAwLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQppbmRleCBkYmY1YTBmLi43NmYyZWNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKQEAgLTc2LDYgKzc2LDcgQEAKIEFQSV9ET0NTID0gJChwYXRzdWJzdCAlLnR4dCwlLCQoZmlsdGVyLW91dCB0ZWNobmljYWwvYXBpLWluZGV4LXNrZWwudHh0IHRlY2huaWNhbC9hcGktaW5kZXgudHh0LCAkKHdpbGRjYXJkIHRlY2huaWNhbC9hcGktKi50eHQpKSkKIFNQX0FSVElDTEVTICs9ICQoQVBJX0RPQ1MpCiAKK1RFQ0hfRE9DUyArPSBNeUZpcnN0Q29udHJpYnV0aW9uCiBURUNIX0RPQ1MgKz0gU3VibWl0dGluZ1BhdGNoZXMKIFRFQ0hfRE9DUyArPSB0ZWNobmljYWwvaGFzaC1mdW5jdGlvbi10cmFuc2l0aW9uCiBURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL2h0dHAtcHJvdG9jb2wKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTXlGaXJzdENvbnRyaWJ1dGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL015Rmlyc3RDb250cmlidXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjcwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL015Rmlyc3RDb250cmlidXRpb24udHh0CkBAIC0wLDAgKzEsMTEzNCBAQAorTXkgRmlyc3QgQ29udHJpYnV0aW9uIHRvIHRoZSBHaXQgUHJvamVjdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOnNlY3RhbmNob3JzOgorCitbW3N1bW1hcnldXQorPT0gU3VtbWFyeQorCitUaGlzIGlzIGEgdHV0b3JpYWwgZGVtb25zdHJhdGluZyB0aGUgZW5kLXRvLWVuZCB3b3JrZmxvdyBvZiBjcmVhdGluZyBhIGNoYW5nZSB0bwordGhlIEdpdCB0cmVlLCBzZW5kaW5nIGl0IGZvciByZXZpZXcsIGFuZCBtYWtpbmcgY2hhbmdlcyBiYXNlZCBvbiBjb21tZW50cy4KKworW1twcmVyZXF1aXNpdGVzXV0KKz09PSBQcmVyZXF1aXNpdGVzCisKK1RoaXMgdHV0b3JpYWwgYXNzdW1lcyB5b3UncmUgYWxyZWFkeSBmYWlybHkgZmFtaWxpYXIgd2l0aCB1c2luZyBHaXQgdG8gbWFuYWdlCitzb3VyY2UgY29kZS4gIFRoZSBHaXQgd29ya2Zsb3cgc3RlcHMgd2lsbCBsYXJnZWx5IHJlbWFpbiB1bmV4cGxhaW5lZC4KKworW1tyZWxhdGVkLXJlYWRpbmddXQorPT09IFJlbGF0ZWQgUmVhZGluZworCitUaGlzIHR1dG9yaWFsIGFpbXMgdG8gc3VtbWFyaXplIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzLCBidXQgdGhlIHJlYWRlciBtYXkgZmluZAordXNlZnVsIGFkZGl0aW9uYWwgY29udGV4dDoKKworLSBgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlc2AKKy0gYERvY3VtZW50YXRpb24vaG93dG8vbmV3LWNvbW1hbmQudHh0YAorCitbW2dldHRpbmctc3RhcnRlZF1dCis9PSBHZXR0aW5nIFN0YXJ0ZWQKKworW1tjbG9uaW5nXV0KKz09PSBDbG9uZSB0aGUgR2l0IFJlcG9zaXRvcnkKKworR2l0IGlzIG1pcnJvcmVkIGluIGEgbnVtYmVyIG9mIGxvY2F0aW9ucy4gQ2xvbmUgdGhlIHJlcG9zaXRvcnkgZnJvbSBvbmUgb2YgdGhlbTsKK2h0dHBzOi8vZ2l0LXNjbS5jb20vZG93bmxvYWRzIHN1Z2dlc3RzIG9uZSBvZiB0aGUgYmVzdCBwbGFjZXMgdG8gY2xvbmUgZnJvbSBpcwordGhlIG1pcnJvciBvbiBHaXRIdWIuCisKKy0tLS0KKyQgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0IGdpdAorJCBjZCBnaXQKKy0tLS0KKworW1tpZGVudGlmeS1wcm9ibGVtXV0KKz09PSBJZGVudGlmeSBQcm9ibGVtIHRvIFNvbHZlCisKKy8vLy8KK1VzZSArIHRvIGluZGljYXRlIGZpeGVkLXdpZHRoIGhlcmU7IGNvdWxkbid0IGdldCBgIHRvIHdvcmsgbmljZWx5IHdpdGggdGhlCitxdW90ZXMgYXJvdW5kICJQb255IFNheWluZyAnVW0sIEhlbGxvJyIuCisvLy8vCitJbiB0aGlzIHR1dG9yaWFsLCB3ZSB3aWxsIGFkZCBhIG5ldyBjb21tYW5kLCArZ2l0IHBzdWgrLCBzaG9ydCBmb3IgYGBQb255IFNheWluZworYFVtLCBIZWxsbycnJyAtIGEgZmVhdHVyZSB3aGljaCBoYXMgZ29uZSB1bmltcGxlbWVudGVkIGRlc3BpdGUgYSBoaWdoIGZyZXF1ZW5jeQorb2YgaW52b2NhdGlvbiBkdXJpbmcgdXNlcnMnIHR5cGljYWwgZGFpbHkgd29ya2Zsb3cuCisKKyhXZSd2ZSBzZWVuIHNvbWUgb3RoZXIgZWZmb3J0IGluIHRoaXMgc3BhY2Ugd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gb2YgcG9wdWxhcgorY29tbWFuZHMgc3VjaCBhcyBgc2xgLikKKworW1tzZXR1cC13b3Jrc3BhY2VdXQorPT09IFNldCBVcCBZb3VyIFdvcmtzcGFjZQorCitMZXQncyBzdGFydCBieSBtYWtpbmcgYSBkZXZlbG9wbWVudCBicmFuY2ggdG8gd29yayBvbiBvdXIgY2hhbmdlcy4gUGVyCitgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlc2AsIHNpbmNlIGEgYnJhbmQgbmV3IGNvbW1hbmQgaXMgYSBuZXcgZmVhdHVyZSwKK2l0J3MgZmluZSB0byBiYXNlIHlvdXIgd29yayBvbiBgbWFzdGVyYC4gSG93ZXZlciwgaW4gdGhlIGZ1dHVyZSBmb3IgYnVnZml4ZXMsCitldGMuLCB5b3Ugc2hvdWxkIGNoZWNrIHRoYXQgZG9jdW1lbnQgYW5kIGJhc2UgaXQgb24gdGhlIGFwcHJvcHJpYXRlIGJyYW5jaC4KKworRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRvY3VtZW50LCB3ZSB3aWxsIGJhc2UgYWxsIG91ciB3b3JrIG9uIHRoZSBgbWFzdGVyYAorYnJhbmNoIG9mIHRoZSB1cHN0cmVhbSBwcm9qZWN0LiBDcmVhdGUgdGhlIGBwc3VoYCBicmFuY2ggeW91IHdpbGwgdXNlIGZvcgorZGV2ZWxvcG1lbnQgbGlrZSBzbzoKKworLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgcHN1aCBvcmlnaW4vbWFzdGVyCistLS0tCisKK1dlJ2xsIG1ha2UgYSBudW1iZXIgb2YgY29tbWl0cyBoZXJlIGluIG9yZGVyIHRvIGRlbW9uc3RyYXRlIGhvdyB0byBzZW5kIGEgdG9waWMKK3dpdGggbXVsdGlwbGUgcGF0Y2hlcyB1cCBmb3IgcmV2aWV3IHNpbXVsdGFuZW91c2x5LgorCitbW2NvZGUtaXQtdXBdXQorPT0gQ29kZSBJdCBVcCEKKworTk9URTogQSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gY2FuIGJlIGZvdW5kIGF0CitodHRwczovL2dpdGh1Yi5jb20vbmFzYW11ZmZpbi9naXQvdHJlZS9wc3VoLgorCitbW2FkZC1uZXctY29tbWFuZF1dCis9PT0gQWRkaW5nIGEgTmV3IENvbW1hbmQKKworTG90cyBvZiB0aGUgc3ViY29tbWFuZHMgYXJlIHdyaXR0ZW4gYXMgYnVpbHRpbnMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlCitpbXBsZW1lbnRlZCBpbiBDIGFuZCBjb21waWxlZCBpbnRvIHRoZSBtYWluIGBnaXRgIGV4ZWN1dGFibGUuIEltcGxlbWVudGluZyB0aGUKK3Zlcnkgc2ltcGxlIGBwc3VoYCBjb21tYW5kIGFzIGEgYnVpbHQtaW4gd2lsbCBkZW1vbnN0cmF0ZSB0aGUgc3RydWN0dXJlIG9mIHRoZQorY29kZWJhc2UsIHRoZSBpbnRlcm5hbCBBUEksIGFuZCB0aGUgcHJvY2VzcyBvZiB3b3JraW5nIHRvZ2V0aGVyIGFzIGEgY29udHJpYnV0b3IKK3dpdGggdGhlIHJldmlld2VycyBhbmQgbWFpbnRhaW5lciB0byBpbnRlZ3JhdGUgdGhpcyBjaGFuZ2UgaW50byB0aGUgc3lzdGVtLgorCitCdWlsdC1pbiBzdWJjb21tYW5kcyBhcmUgdHlwaWNhbGx5IGltcGxlbWVudGVkIGluIGEgZnVuY3Rpb24gbmFtZWQgImNtZF8iCitmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiB0aGUgc3ViY29tbWFuZCwgaW4gYSBzb3VyY2UgZmlsZSBuYW1lZCBhZnRlciB0aGUKK3N1YmNvbW1hbmQgYW5kIGNvbnRhaW5lZCB3aXRoaW4gYGJ1aWx0aW4vYC4gU28gaXQgbWFrZXMgc2Vuc2UgdG8gaW1wbGVtZW50IHlvdXIKK2NvbW1hbmQgaW4gYGJ1aWx0aW4vcHN1aC5jYC4gQ3JlYXRlIHRoYXQgZmlsZSwgYW5kIHdpdGhpbiBpdCwgd3JpdGUgdGhlIGVudHJ5Citwb2ludCBmb3IgeW91ciBjb21tYW5kIGluIGEgZnVuY3Rpb24gbWF0Y2hpbmcgdGhlIHN0eWxlIGFuZCBzaWduYXR1cmU6CisKKy0tLS0KK2ludCBjbWRfcHN1aChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKKy0tLS0KKworV2UnbGwgYWxzbyBuZWVkIHRvIGFkZCB0aGUgZGVjbGFyYXRpb24gb2YgcHN1aDsgb3BlbiB1cCBgYnVpbHRpbi5oYCwgZmluZCB0aGUKK2RlY2xhcmF0aW9uIGZvciBgY21kX3B1c2hgLCBhbmQgYWRkIGEgbmV3IGxpbmUgZm9yIGBwc3VoYCBpbW1lZGlhdGVseSBiZWZvcmUgaXQsCitpbiBvcmRlciB0byBrZWVwIHRoZSBkZWNsYXJhdGlvbnMgc29ydGVkOgorCistLS0tCitpbnQgY21kX3BzdWgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworLS0tLQorCitCZSBzdXJlIHRvIGAjaW5jbHVkZSAiYnVpbHRpbi5oImAgaW4geW91ciBgcHN1aC5jYC4KKworR28gYWhlYWQgYW5kIGFkZCBzb21lIHRocm93YXdheSBwcmludGYgdG8gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyBhIGRlY2VudAorc3RhcnRpbmcgcG9pbnQgYXMgd2UgY2FuIG5vdyBhZGQgYnVpbGQgcnVsZXMgYW5kIHJlZ2lzdGVyIHRoZSBjb21tYW5kLgorCitOT1RFOiBZb3VyIHRocm93YXdheSB0ZXh0LCBhcyB3ZWxsIGFzIG11Y2ggb2YgdGhlIHRleHQgeW91IHdpbGwgYmUgYWRkaW5nIG92ZXIKK3RoZSBjb3Vyc2Ugb2YgdGhpcyB0dXRvcmlhbCwgaXMgdXNlci1mYWNpbmcuIFRoYXQgbWVhbnMgaXQgbmVlZHMgdG8gYmUKK2xvY2FsaXphYmxlLiBUYWtlIGEgbG9vayBhdCBgcG8vUkVBRE1FYCB1bmRlciAiTWFya2luZyBzdHJpbmdzIGZvciB0cmFuc2xhdGlvbiIuCitUaHJvdWdob3V0IHRoZSB0dXRvcmlhbCwgd2Ugd2lsbCBtYXJrIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uIGFzIG5lY2Vzc2FyeTsgeW91CitzaG91bGQgYWxzbyBkbyBzbyB3aGVuIHdyaXRpbmcgeW91ciB1c2VyLWZhY2luZyBjb21tYW5kcyBpbiB0aGUgZnV0dXJlLgorCistLS0tCitpbnQgY21kX3BzdWgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJcHJpbnRmKF8oIlBvbnkgc2F5aW5nIGhlbGxvIGdvZXMgaGVyZS5cbiIpKTsKKwlyZXR1cm4gMDsKK30KKy0tLS0KKworTGV0J3MgdHJ5IHRvIGJ1aWxkIGl0LiAgT3BlbiBgTWFrZWZpbGVgLCBmaW5kIHdoZXJlIGBidWlsdGluL3B1c2gub2AgaXMgYWRkZWQKK3RvIGBCVUlMVElOX09CSlNgLCBhbmQgYWRkIGBidWlsdGluL3BzdWgub2AgaW4gdGhlIHNhbWUgd2F5IG5leHQgdG8gaXQgaW4KK2FscGhhYmV0aWNhbCBvcmRlci4gT25jZSB5b3UndmUgZG9uZSBzbywgbW92ZSB0byB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBhbmQKK2J1aWxkIHNpbXBseSB3aXRoIGBtYWtlYC4gQWxzbyBhZGQgdGhlIGBERVZFTE9QRVI9MWAgdmFyaWFibGUgdG8gdHVybiBvbgorc29tZSBhZGRpdGlvbmFsIHdhcm5pbmdzOgorCistLS0tCiskIGVjaG8gREVWRUxPUEVSPTEgPmNvbmZpZy5tYWsKKyQgbWFrZQorLS0tLQorCitOT1RFOiBXaGVuIHlvdSBhcmUgZGV2ZWxvcGluZyB0aGUgR2l0IHByb2plY3QsIGl0J3MgcHJlZmVycmVkIHRoYXQgeW91IHVzZSB0aGUKK2BERVZFTE9QRVJgIGZsYWc7IGlmIHRoZXJlJ3Mgc29tZSByZWFzb24gaXQgZG9lc24ndCB3b3JrIGZvciB5b3UsIHlvdSBjYW4gdHVybgoraXQgb2ZmLCBidXQgaXQncyBhIGdvb2QgaWRlYSB0byBtZW50aW9uIHRoZSBwcm9ibGVtIHRvIHRoZSBtYWlsaW5nIGxpc3QuCisKK05PVEU6IFRoZSBHaXQgYnVpbGQgaXMgcGFyYWxsZWxpemFibGUuIGAtaiNgIGlzIG5vdCBpbmNsdWRlZCBhYm92ZSBidXQgeW91IGNhbgordXNlIGl0IGFzIHlvdSBwcmVmZXIsIGhlcmUgYW5kIGVsc2V3aGVyZS4KKworR3JlYXQsIG5vdyB5b3VyIG5ldyBjb21tYW5kIGJ1aWxkcyBoYXBwaWx5IG9uIGl0cyBvd24uIEJ1dCBub2JvZHkgaW52b2tlcyBpdC4KK0xldCdzIGNoYW5nZSB0aGF0LgorCitUaGUgbGlzdCBvZiBjb21tYW5kcyBsaXZlcyBpbiBgZ2l0LmNgLiBXZSBjYW4gcmVnaXN0ZXIgYSBuZXcgY29tbWFuZCBieSBhZGRpbmcKK2EgYGNtZF9zdHJ1Y3RgIHRvIHRoZSBgY29tbWFuZHNbXWAgYXJyYXkuIGBzdHJ1Y3QgY21kX3N0cnVjdGAgdGFrZXMgYSBzdHJpbmcKK3dpdGggdGhlIGNvbW1hbmQgbmFtZSwgYSBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGltcGxlbWVudGF0aW9uLCBhbmQgYQorc2V0dXAgb3B0aW9uIGZsYWcuIEZvciBub3csIGxldCdzIGtlZXAgbWltaWNraW5nIGBwdXNoYC4gRmluZCB0aGUgbGluZSB3aGVyZQorYGNtZF9wdXNoYCBpcyByZWdpc3RlcmVkLCBjb3B5IGl0LCBhbmQgbW9kaWZ5IGl0IGZvciBgY21kX3BzdWhgLCBwbGFjaW5nIHRoZSBuZXcKK2xpbmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorCitUaGUgb3B0aW9ucyBhcmUgZG9jdW1lbnRlZCBpbiBgYnVpbHRpbi5oYCB1bmRlciAiQWRkaW5nIGEgbmV3IGJ1aWx0LWluLiIgU2luY2UKK3dlIGhvcGUgdG8gcHJpbnQgc29tZSBkYXRhIGFib3V0IHRoZSB1c2VyJ3MgY3VycmVudCB3b3Jrc3BhY2UgY29udGV4dCBsYXRlciwKK3dlIG5lZWQgYSBHaXQgZGlyZWN0b3J5LCBzbyBjaG9vc2UgYFJVTl9TRVRVUGAgYXMgeW91ciBvbmx5IG9wdGlvbi4KKworR28gYWhlYWQgYW5kIGJ1aWxkIGFnYWluLiBZb3Ugc2hvdWxkIHNlZSBhIGNsZWFuIGJ1aWxkLCBzbyBsZXQncyBraWNrIHRoZSB0aXJlcworYW5kIHNlZSBpZiBpdCB3b3Jrcy4gVGhlcmUncyBhIGJpbmFyeSB5b3UgY2FuIHVzZSB0byB0ZXN0IHdpdGggaW4gdGhlCitgYmluLXdyYXBwZXJzYCBkaXJlY3RvcnkuCisKKy0tLS0KKyQgLi9iaW4td3JhcHBlcnMvZ2l0IHBzdWgKKy0tLS0KKworQ2hlY2sgaXQgb3V0ISBZb3UndmUgZ290IGEgY29tbWFuZCEgTmljZSB3b3JrISBMZXQncyBjb21taXQgdGhpcy4KKworYGdpdCBzdGF0dXNgIHJldmVhbHMgbW9kaWZpZWQgYE1ha2VmaWxlYCwgYGJ1aWx0aW4uaGAsIGFuZCBgZ2l0LmNgIGFzIHdlbGwgYXMKK3VudHJhY2tlZCBgYnVpbHRpbi9wc3VoLmNgIGFuZCBgZ2l0LXBzdWhgLiBGaXJzdCwgbGV0J3MgdGFrZSBjYXJlIG9mIHRoZSBiaW5hcnksCit3aGljaCBzaG91bGQgYmUgaWdub3JlZC4gT3BlbiBgLmdpdGlnbm9yZWAgaW4geW91ciBlZGl0b3IsIGZpbmQgYC9naXQtcHVzaGAsIGFuZAorYWRkIGFuIGVudHJ5IGZvciB5b3VyIG5ldyBjb21tYW5kIGluIGFscGhhYmV0aWNhbCBvcmRlcjoKKworLS0tLQorLi4uCisvZ2l0LXBydW5lLXBhY2tlZAorL2dpdC1wc3VoCisvZ2l0LXB1bGwKKy9naXQtcHVzaAorL2dpdC1xdWlsdGltcG9ydAorL2dpdC1yYW5nZS1kaWZmCisuLi4KKy0tLS0KKworQ2hlY2tpbmcgYGdpdCBzdGF0dXNgIGFnYWluIHNob3VsZCBzaG93IHRoYXQgYGdpdC1wc3VoYCBoYXMgYmVlbiByZW1vdmVkIGZyb20KK3RoZSB1bnRyYWNrZWQgbGlzdCBhbmQgYC5naXRpZ25vcmVgIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBtb2RpZmllZCBsaXN0LiBOb3cgd2UKK2NhbiBzdGFnZSBhbmQgY29tbWl0OgorCistLS0tCiskIGdpdCBhZGQgTWFrZWZpbGUgYnVpbHRpbi5oIGJ1aWx0aW4vcHN1aC5jIGdpdC5jIC5naXRpZ25vcmUKKyQgZ2l0IGNvbW1pdCAtcworLS0tLQorCitZb3Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCB5b3VyIGVkaXRvciBpbiBvcmRlciB0byB3cml0ZSBhIGNvbW1pdCBtZXNzYWdlLiBTdGFydAordGhlIGNvbW1pdCB3aXRoIGEgNTAtY29sdW1uIG9yIGxlc3Mgc3ViamVjdCBsaW5lLCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCitjb21wb25lbnQgeW91J3JlIHdvcmtpbmcgb24sIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSAoYWx3YXlzIHJlcXVpcmVkKSBhbmQgdGhlbgordGhlIGJvZHkgb2YgeW91ciBjb21taXQgbWVzc2FnZSwgd2hpY2ggc2hvdWxkIHByb3ZpZGUgdGhlIGJ1bGsgb2YgdGhlIGNvbnRleHQuCitSZW1lbWJlciB0byBiZSBleHBsaWNpdCBhbmQgcHJvdmlkZSB0aGUgIldoeSIgb2YgeW91ciBjaGFuZ2UsIGVzcGVjaWFsbHkgaWYgaXQKK2NvdWxkbid0IGVhc2lseSBiZSB1bmRlcnN0b29kIGZyb20geW91ciBkaWZmLiBXaGVuIGVkaXRpbmcgeW91ciBjb21taXQgbWVzc2FnZSwKK2Rvbid0IHJlbW92ZSB0aGUgU2lnbmVkLW9mZi1ieSBsaW5lIHdoaWNoIHdhcyBhZGRlZCBieSBgLXNgIGFib3ZlLgorCistLS0tCitwc3VoOiBhZGQgYSBidWlsdC1pbiBieSBwb3B1bGFyIGRlbWFuZAorCitJbnRlcm5hbCBtZXRyaWNzIGluZGljYXRlIHRoaXMgaXMgYSBjb21tYW5kIG1hbnkgdXNlcnMgZXhwZWN0IHRvIGJlCitwcmVzZW50LiBTbyBoZXJlJ3MgYW4gaW1wbGVtZW50YXRpb24gdG8gaGVscCBkcml2ZSBjdXN0b21lcgorc2F0aXNmYWN0aW9uIGFuZCBlbmdhZ2VtZW50OiBhIHBvbnkgd2hpY2ggZG91YnRmdWxseSBncmVldHMgdGhlIHVzZXIsCitvciwgYSBQb255IFNheWluZyAiVW0sIEhlbGxvIiAoUFNVSCkuCisKK1RoaXMgY29tbWl0IG1lc3NhZ2UgaXMgaW50ZW50aW9uYWxseSBmb3JtYXR0ZWQgdG8gNzIgY29sdW1ucyBwZXIgbGluZSwKK3N0YXJ0cyB3aXRoIGEgc2luZ2xlIGxpbmUgYXMgImNvbW1pdCBtZXNzYWdlIHN1YmplY3QiIHRoYXQgaXMgd3JpdHRlbiBhcworaWYgdG8gY29tbWFuZCB0aGUgY29kZWJhc2UgdG8gZG8gc29tZXRoaW5nIChhZGQgdGhpcywgdGVhY2ggYSBjb21tYW5kCit0aGF0KS4gVGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UgaXMgZGVzaWduZWQgdG8gYWRkIGluZm9ybWF0aW9uIGFib3V0IHRoZQorY29tbWl0IHRoYXQgaXMgbm90IHJlYWRpbHkgZGVkdWNlZCBmcm9tIHJlYWRpbmcgdGhlIGFzc29jaWF0ZWQgZGlmZiwKK3N1Y2ggYXMgYW5zd2VyaW5nIHRoZSBxdWVzdGlvbiAid2h5PyIuCisKK1NpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CistLS0tCisKK0dvIGFoZWFkIGFuZCBpbnNwZWN0IHlvdXIgbmV3IGNvbW1pdCB3aXRoIGBnaXQgc2hvd2AuICJwc3VoOiIgaW5kaWNhdGVzIHlvdQoraGF2ZSBtb2RpZmllZCBtYWlubHkgdGhlIGBwc3VoYCBjb21tYW5kLiBUaGUgc3ViamVjdCBsaW5lIGdpdmVzIHJlYWRlcnMgYW4gaWRlYQorb2Ygd2hhdCB5b3UndmUgY2hhbmdlZC4gVGhlIHNpZ24tb2ZmIGxpbmUgKGAtc2ApIGluZGljYXRlcyB0aGF0IHlvdSBhZ3JlZSB0bwordGhlIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEgKHNlZSB0aGUKK2BEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzYCArKytbW2Rjb11dKysrIGhlYWRlcikuCisKK0ZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSB0dXRvcmlhbCwgdGhlIHN1YmplY3QgbGluZSBvbmx5IHdpbGwgYmUgbGlzdGVkIGZvciB0aGUKK3Nha2Ugb2YgYnJldml0eS4gSG93ZXZlciwgZnVsbHktZmxlc2hlZCBleGFtcGxlIGNvbW1pdCBtZXNzYWdlcyBhcmUgYXZhaWxhYmxlCitvbiB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGxpbmtlZCBhdCB0aGUgdG9wIG9mIHRoaXMgZG9jdW1lbnQuCisKK1tbaW1wbGVtZW50YXRpb25dXQorPT09IEltcGxlbWVudGF0aW9uCisKK0l0J3MgcHJvYmFibHkgdXNlZnVsIHRvIGRvIGF0IGxlYXN0IHNvbWV0aGluZyBiZXNpZGVzIHByaW50aW5nIG91dCBhIHN0cmluZy4KK0xldCdzIHN0YXJ0IGJ5IGhhdmluZyBhIGxvb2sgYXQgZXZlcnl0aGluZyB3ZSBnZXQuCisKK01vZGlmeSB5b3VyIGBjbWRfcHN1aGAgaW1wbGVtZW50YXRpb24gdG8gZHVtcCB0aGUgYXJncyB5b3UncmUgcGFzc2VkLCBrZWVwaW5nCitleGlzdGluZyBgcHJpbnRmKClgIGNhbGxzIGluIHBsYWNlOgorCistLS0tCisJaW50IGk7CisKKwkuLi4KKworCXByaW50ZihRXygiWW91ciBhcmdzICh0aGVyZSBpcyAlZCk6XG4iLAorCQkgICJZb3VyIGFyZ3MgKHRoZXJlIGFyZSAlZCk6XG4iLAorCQkgIGFyZ2MpLAorCSAgICAgICBhcmdjKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQlwcmludGYoIiVkOiAlc1xuIiwgaSwgYXJndltpXSk7CisKKwlwcmludGYoXygiWW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5OlxuPHRvcC1sZXZlbD4lcyVzXG4iKSwKKwkgICAgICAgcHJlZml4ID8gIi8iIDogIiIsIHByZWZpeCA/IHByZWZpeCA6ICIiKTsKKworLS0tLQorCitCdWlsZCBhbmQgdHJ5IGl0LiBBcyB5b3UgbWF5IGV4cGVjdCwgdGhlcmUncyBwcmV0dHkgbXVjaCBqdXN0IHdoYXRldmVyIHdlIGdpdmUKK29uIHRoZSBjb21tYW5kIGxpbmUsIGluY2x1ZGluZyB0aGUgbmFtZSBvZiBvdXIgY29tbWFuZC4gKElmIGBwcmVmaXhgIGlzIGVtcHR5Citmb3IgeW91LCB0cnkgYGNkIERvY3VtZW50YXRpb24vICYmIC4uL2Jpbi13cmFwcGVycy9naXQgcHN1aGApLiBUaGF0J3Mgbm90IHNvCitoZWxwZnVsLiBTbyB3aGF0IG90aGVyIGNvbnRleHQgY2FuIHdlIGdldD8KKworQWRkIGEgbGluZSB0byBgI2luY2x1ZGUgImNvbmZpZy5oImAuIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIGJpdHMgdG8gdGhlCitmdW5jdGlvbiBib2R5OgorCistLS0tCisJY29uc3QgY2hhciAqY2ZnX25hbWU7CisKKy4uLgorCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoInVzZXIubmFtZSIsICZjZmdfbmFtZSkgPiAwKQorCQlwcmludGYoXygiTm8gbmFtZSBpcyBmb3VuZCBpbiBjb25maWdcbiIpKTsKKwllbHNlCisJCXByaW50ZihfKCJZb3VyIG5hbWU6ICVzXG4iKSwgY2ZnX25hbWUpOworLS0tLQorCitgZ2l0X2NvbmZpZygpYCB3aWxsIGdyYWIgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBjb25maWcgZmlsZXMga25vd24gdG8gR2l0IGFuZAorYXBwbHkgc3RhbmRhcmQgcHJlY2VkZW5jZSBydWxlcy4gYGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgpYCB3aWxsIGxvb2sgdXAKK2Egc3BlY2lmaWMga2V5ICgidXNlci5uYW1lIikgYW5kIGdpdmUgeW91IHRoZSB2YWx1ZS4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mCitzaW5nbGUta2V5IGxvb2t1cCBmdW5jdGlvbnMgbGlrZSB0aGlzIG9uZTsgeW91IGNhbiBzZWUgdGhlbSBhbGwgKGFuZCBtb3JlIGluZm8KK2Fib3V0IGhvdyB0byB1c2UgYGdpdF9jb25maWcoKWApIGluIGBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY29uZmlnLnR4dGAuCisKK1lvdSBzaG91bGQgc2VlIHRoYXQgdGhlIG5hbWUgcHJpbnRlZCBtYXRjaGVzIHRoZSBvbmUgeW91IHNlZSB3aGVuIHlvdSBydW46CisKKy0tLS0KKyQgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWUKKy0tLS0KKworR3JlYXQhIE5vdyB3ZSBrbm93IGhvdyB0byBjaGVjayBmb3IgdmFsdWVzIGluIHRoZSBHaXQgY29uZmlnLiBMZXQncyBjb21taXQgdGhpcwordG9vLCBzbyB3ZSBkb24ndCBsb3NlIG91ciBwcm9ncmVzcy4KKworLS0tLQorJCBnaXQgYWRkIGJ1aWx0aW4vcHN1aC5jCiskIGdpdCBjb21taXQgLXNtICJwc3VoOiBzaG93IHBhcmFtZXRlcnMgJiBjb25maWcgb3B0cyIKKy0tLS0KKworTk9URTogQWdhaW4sIHRoZSBhYm92ZSBpcyBmb3Igc2FrZSBvZiBicmV2aXR5IGluIHRoaXMgdHV0b3JpYWwuIEluIGEgcmVhbCBjaGFuZ2UKK3lvdSBzaG91bGQgbm90IHVzZSBgLW1gIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgZWRpdG9yIHRvIHdyaXRlIGEgbWVhbmluZ2Z1bAorbWVzc2FnZS4KKworU3RpbGwsIGl0J2QgYmUgbmljZSB0byBrbm93IHdoYXQgdGhlIHVzZXIncyB3b3JraW5nIGNvbnRleHQgaXMgbGlrZS4gTGV0J3Mgc2VlCitpZiB3ZSBjYW4gcHJpbnQgdGhlIG5hbWUgb2YgdGhlIHVzZXIncyBjdXJyZW50IGJyYW5jaC4gV2UgY2FuIG1pbWljIHRoZQorYGdpdCBzdGF0dXNgIGltcGxlbWVudGF0aW9uOyB0aGUgcHJpbnRlciBpcyBsb2NhdGVkIGluIGB3dC1zdGF0dXMuY2AgYW5kIHdlIGNhbgorc2VlIHRoYXQgdGhlIGJyYW5jaCBpcyBoZWxkIGluIGEgYHN0cnVjdCB3dF9zdGF0dXNgLgorCitgd3Rfc3RhdHVzX3ByaW50KClgIGdldHMgaW52b2tlZCBieSBgY21kX3N0YXR1cygpYCBpbiBgYnVpbHRpbi9jb21taXQuY2AuCitMb29raW5nIGF0IHRoYXQgaW1wbGVtZW50YXRpb24gd2Ugc2VlIHRoZSBzdGF0dXMgY29uZmlnIGJlaW5nIHBvcHVsYXRlZCBsaWtlIHNvOgorCistLS0tCitzdGF0dXNfaW5pdF9jb25maWcoJnMsIGdpdF9zdGF0dXNfY29uZmlnKTsKKy0tLS0KKworQnV0IGFzIHdlIGRyaWxsIGRvd24sIHdlIGNhbiBmaW5kIHRoYXQgYHN0YXR1c19pbml0X2NvbmZpZygpYCB3cmFwcyBhIGNhbGwKK3RvIGBnaXRfY29uZmlnKClgLiBMZXQncyBtb2RpZnkgdGhlIGNvZGUgd2Ugd3JvdGUgaW4gdGhlIHByZXZpb3VzIGNvbW1pdC4KKworQmUgc3VyZSB0byBpbmNsdWRlIHRoZSBoZWFkZXIgdG8gYWxsb3cgeW91IHRvIHVzZSBgc3RydWN0IHd0X3N0YXR1c2A6CistLS0tCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCistLS0tCisKK1RoZW4gbW9kaWZ5IHlvdXIgYGNtZF9wc3VoYCBpbXBsZW1lbnRhdGlvbiB0byBkZWNsYXJlIHlvdXIgYHN0cnVjdCB3dF9zdGF0dXNgLAorcHJlcGFyZSBpdCwgYW5kIHByaW50IGl0cyBjb250ZW50czoKKworLS0tLQorCXN0cnVjdCB3dF9zdGF0dXMgc3RhdHVzOworCisuLi4KKworCXd0X3N0YXR1c19wcmVwYXJlKHRoZV9yZXBvc2l0b3J5LCAmc3RhdHVzKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgJnN0YXR1cyk7CisKKy4uLgorCisJcHJpbnRmKF8oIllvdXIgY3VycmVudCBicmFuY2g6ICVzXG4iKSwgc3RhdHVzLmJyYW5jaCk7CistLS0tCisKK1J1biBpdCBhZ2Fpbi4gQ2hlY2sgaXQgb3V0IC0gaGVyZSdzIHRoZSAodmVyYm9zZSkgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIQorCitMZXQncyBjb21taXQgdGhpcyBhcyB3ZWxsLgorCistLS0tCiskIGdpdCBhZGQgYnVpbHRpbi9wc3VoLmMKKyQgZ2l0IGNvbW1pdCAtc20gInBzdWg6IHByaW50IHRoZSBjdXJyZW50IGJyYW5jaCIKKy0tLS0KKworTm93IGxldCdzIHNlZSBpZiB3ZSBjYW4gZ2V0IHNvbWUgaW5mbyBhYm91dCBhIHNwZWNpZmljIGNvbW1pdC4KKworTHVja2lseSwgdGhlcmUgYXJlIHNvbWUgaGVscGVycyBmb3IgdXMgaGVyZS4gYGNvbW1pdC5oYCBoYXMgYSBmdW5jdGlvbiBjYWxsZWQKK2Bsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9ieV9uYW1lYCB0byB3aGljaCB3ZSBjYW4gc2ltcGx5IHByb3ZpZGUgYSBoYXJkY29kZWQKK3N0cmluZzsgYHByZXR0eS5oYCBoYXMgYW4gZXh0cmVtZWx5IGhhbmR5IGBwcF9jb21taXRfZWFzeSgpYCBjYWxsIHdoaWNoIGRvZXNuJ3QKK3JlcXVpcmUgYSBmdWxsIGZvcm1hdCBvYmplY3QgdG8gYmUgcGFzc2VkLgorCitBZGQgdGhlIGZvbGxvd2luZyBpbmNsdWRlczoKKworLS0tLQorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInByZXR0eS5oIgorLS0tLQorCitUaGVuLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB3aXRoaW4geW91ciBpbXBsZW1lbnRhdGlvbiBvZiBgY21kX3BzdWgoKWAgbmVhcgordGhlIGRlY2xhcmF0aW9ucyBhbmQgdGhlIGxvZ2ljLCByZXNwZWN0aXZlbHkuCisKKy0tLS0KKwlzdHJ1Y3QgY29tbWl0ICpjID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdGxpbmUgPSBTVFJCVUZfSU5JVDsKKworLi4uCisKKwljID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZSgib3JpZ2luL21hc3RlciIpOworCisJaWYgKGMgIT0gTlVMTCkgeworCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjLCAmY29tbWl0bGluZSk7CisJCXByaW50ZihfKCJDdXJyZW50IGNvbW1pdDogJXNcbiIpLCBjb21taXRsaW5lLmJ1Zik7CisJfQorLS0tLQorCitUaGUgYHN0cnVjdCBzdHJidWZgIHByb3ZpZGVzIHNvbWUgc2FmZXR5IGJlbHRzIHRvIHlvdXIgYmFzaWMgYGNoYXIqYCwgb25lIG9mCit3aGljaCBpcyBhIGxlbmd0aCBtZW1iZXIgdG8gcHJldmVudCBidWZmZXIgb3ZlcnJ1bnMuIEl0IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkCituaWNlbHkgd2l0aCBgU1RSQlVGX0lOSVRgLiBLZWVwIGl0IGluIG1pbmQgd2hlbiB5b3UgbmVlZCB0byBwYXNzIGFyb3VuZCBgY2hhcipgLgorCitgbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZWAgcmVzb2x2ZXMgdGhlIG5hbWUgeW91IHBhc3MgaXQsIHNvIHlvdSBjYW4gcGxheQord2l0aCB0aGUgdmFsdWUgdGhlcmUgYW5kIHNlZSB3aGF0IGtpbmQgb2YgdGhpbmdzIHlvdSBjYW4gY29tZSB1cCB3aXRoLgorCitgcHBfY29tbWl0X2Vhc3lgIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBpbiBgcHJldHR5LmhgIHRoYXQgdGFrZXMgYSBzaW5nbGUKK2Zvcm1hdCBlbnVtIHNob3J0aGFuZCwgcmF0aGVyIHRoYW4gYW4gZW50aXJlIGZvcm1hdCBzdHJ1Y3QuIEl0IHRoZW4KK3ByZXR0eS1wcmludHMgdGhlIGNvbW1pdCBhY2NvcmRpbmcgdG8gdGhhdCBzaG9ydGhhbmQuIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHRoZQorZm9ybWF0cyBhdmFpbGFibGUgd2l0aCBgLS1wcmV0dHk9Rk9PYCBpbiBtYW55IEdpdCBjb21tYW5kcy4KKworQnVpbGQgaXQgYW5kIHJ1biwgYW5kIGlmIHlvdSdyZSB1c2luZyB0aGUgc2FtZSBuYW1lIGluIHRoZSBleGFtcGxlLCB5b3Ugc2hvdWxkCitzZWUgdGhlIHN1YmplY3QgbGluZSBvZiB0aGUgbW9zdCByZWNlbnQgY29tbWl0IGluIGBvcmlnaW4vbWFzdGVyYCB0aGF0IHlvdSBrbm93CithYm91dC4gTmVhdCEgTGV0J3MgY29tbWl0IHRoYXQgYXMgd2VsbC4KKworLS0tLQorJCBnaXQgYWRkIGJ1aWx0aW4vcHN1aC5jCiskIGdpdCBjb21taXQgLXNtICJwc3VoOiBkaXNwbGF5IHRoZSB0b3Agb2Ygb3JpZ2luL21hc3RlciIKKy0tLS0KKworW1thZGQtZG9jdW1lbnRhdGlvbl1dCis9PT0gQWRkaW5nIERvY3VtZW50YXRpb24KKworQXdlc29tZSEgWW91J3ZlIGdvdCBhIGZhbnRhc3RpYyBuZXcgY29tbWFuZCB0aGF0IHlvdSdyZSByZWFkeSB0byBzaGFyZSB3aXRoIHRoZQorY29tbXVuaXR5LiBCdXQgaGFuZyBvbiBqdXN0IGEgbWludXRlIC0gdGhpcyBpc24ndCB2ZXJ5IHVzZXItZnJpZW5kbHkuIFJ1biB0aGUKK2ZvbGxvd2luZzoKKworLS0tLQorJCAuL2Jpbi13cmFwcGVycy9naXQgaGVscCBwc3VoCistLS0tCisKK1lvdXIgbmV3IGNvbW1hbmQgaXMgdW5kb2N1bWVudGVkISBMZXQncyBmaXggdGhhdC4KKworVGFrZSBhIGxvb2sgYXQgYERvY3VtZW50YXRpb24vZ2l0LSoudHh0YC4gVGhlc2UgYXJlIHRoZSBtYW5wYWdlcyBmb3IgdGhlCitzdWJjb21tYW5kcyB0aGF0IEdpdCBrbm93cyBhYm91dC4gWW91IGNhbiBvcGVuIHRoZXNlIHVwIGFuZCB0YWtlIGEgbG9vayB0byBnZXQKK2FjcXVhaW50ZWQgd2l0aCB0aGUgZm9ybWF0LCBidXQgdGhlbiBnbyBhaGVhZCBhbmQgbWFrZSBhIG5ldyBmaWxlCitgRG9jdW1lbnRhdGlvbi9naXQtcHN1aC50eHRgLiBMaWtlIHdpdGggbW9zdCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgR2l0Citwcm9qZWN0LCBoZWxwIHBhZ2VzIGFyZSB3cml0dGVuIHdpdGggQXNjaWlEb2MgKHNlZSBDb2RpbmdHdWlkZWxpbmVzLCAiV3JpdGluZworRG9jdW1lbnRhdGlvbiIgc2VjdGlvbikuIFVzZSB0aGUgZm9sbG93aW5nIHRlbXBsYXRlIHRvIGZpbGwgb3V0IHlvdXIgb3duCittYW5wYWdlOgorCisvLyBTdXJwcmlzaW5nbHkgZGlmZmljdWx0IHRvIGVtYmVkIEFzY2lpRG9jIHNvdXJjZSB3aXRoaW4gQXNjaWlEb2MuCitbbGlzdGluZ10KKy4uLi4KK2dpdC1wc3VoKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcHN1aCAtIERlbGlnaHQgdXNlcnMnIHR5cG8gd2l0aCBhIHNoeSBob3JzZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdC1wc3VoIFs8YXJnPi4uLl0nCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorLi4uCisKK09QVElPTlNbW09QVElPTlNdXQorLS0tLS0tLS0tLS0tLS0tLS0tCisuLi4KKworT1VUUFVUCistLS0tLS0KKy4uLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKKy4uLi4KKworVGhlIG1vc3QgaW1wb3J0YW50IHBpZWNlcyBvZiB0aGlzIHRvIG5vdGUgYXJlIHRoZSBmaWxlIGhlYWRlciwgdW5kZXJsaW5lZCBieSA9LAordGhlIE5BTUUgc2VjdGlvbiwgYW5kIHRoZSBTWU5PUFNJUywgd2hpY2ggd291bGQgbm9ybWFsbHkgY29udGFpbiB0aGUgZ3JhbW1hciBpZgoreW91ciBjb21tYW5kIHRvb2sgYXJndW1lbnRzLiBUcnkgdG8gdXNlIHdlbGwtZXN0YWJsaXNoZWQgbWFucGFnZSBoZWFkZXJzIHNvIHlvdXIKK2RvY3VtZW50YXRpb24gaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIEdpdCBhbmQgVU5JWCBtYW5wYWdlczsgdGhpcyBtYWtlcyBsaWZlCitlYXNpZXIgZm9yIHlvdXIgdXNlciwgd2hvIGNhbiBza2lwIHRvIHRoZSBzZWN0aW9uIHRoZXkga25vdyBjb250YWlucyB0aGUKK2luZm9ybWF0aW9uIHRoZXkgbmVlZC4KKworTm93IHRoYXQgeW91J3ZlIHdyaXR0ZW4geW91ciBtYW5wYWdlLCB5b3UnbGwgbmVlZCB0byBidWlsZCBpdCBleHBsaWNpdGx5LiBXZQorY29udmVydCB5b3VyIEFzY2lpRG9jIHRvIHRyb2ZmIHdoaWNoIGlzIG1hbi1yZWFkYWJsZSBsaWtlIHNvOgorCistLS0tCiskIG1ha2UgYWxsIGRvYworJCBtYW4gRG9jdW1lbnRhdGlvbi9naXQtcHN1aC4xCistLS0tCisKK29yCisKKy0tLS0KKyQgbWFrZSAtQyBEb2N1bWVudGF0aW9uLyBnaXQtcHN1aC4xCiskIG1hbiBEb2N1bWVudGF0aW9uL2dpdC1wc3VoLjEKKy0tLS0KKworTk9URTogWW91IG1heSBuZWVkIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgYGFzY2lpZG9jYCB0byBnZXQgdGhpcyB0byB3b3JrLgorCitXaGlsZSB0aGlzIGlzbid0IGFzIHNhdGlzZnlpbmcgYXMgcnVubmluZyB0aHJvdWdoIGBnaXQgaGVscGAsIHlvdSBjYW4gYXQgbGVhc3QKK2NoZWNrIHRoYXQgeW91ciBoZWxwIHBhZ2UgbG9va3MgcmlnaHQuCisKK1lvdSBjYW4gYWxzbyBjaGVjayB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIGNvdmVyYWdlIGlzIGdvb2QgKHRoYXQgaXMsIHRoZSBwcm9qZWN0CitzZWVzIHRoYXQgeW91ciBjb21tYW5kIGhhcyBiZWVuIGltcGxlbWVudGVkIGFzIHdlbGwgYXMgZG9jdW1lbnRlZCkgYnkgcnVubmluZworYG1ha2UgY2hlY2stZG9jc2AgZnJvbSB0aGUgdG9wLWxldmVsLgorCitHbyBhaGVhZCBhbmQgY29tbWl0IHlvdXIgbmV3IGRvY3VtZW50YXRpb24gY2hhbmdlLgorCitbW2FkZC11c2FnZV1dCis9PT0gQWRkaW5nIFVzYWdlIFRleHQKKworVHJ5IGFuZCBydW4gYC4vYmluLXdyYXBwZXJzL2dpdCBwc3VoIC1oYC4gWW91ciBjb21tYW5kIHNob3VsZCBjcmFzaCBhdCB0aGUgZW5kLgorVGhhdCdzIGJlY2F1c2UgYC1oYCBpcyBhIHNwZWNpYWwgY2FzZSB3aGljaCB5b3VyIGNvbW1hbmQgc2hvdWxkIGhhbmRsZSBieQorcHJpbnRpbmcgdXNhZ2UuCisKK1Rha2UgYSBsb29rIGF0IGBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHRgLiBUaGlzIGlzIGEgaGFuZHkKK3Rvb2wgZm9yIHB1bGxpbmcgb3V0IG9wdGlvbnMgeW91IG5lZWQgdG8gYmUgYWJsZSB0byBoYW5kbGUsIGFuZCBpdCB0YWtlcyBhCit1c2FnZSBzdHJpbmcuCisKK0luIG9yZGVyIHRvIHVzZSBpdCwgd2UnbGwgbmVlZCB0byBwcmVwYXJlIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHVzYWdlCitzdHJpbmdzIGFuZCBhIGBidWlsdGluX3BzdWhfb3B0aW9uc2AgYXJyYXkuCisKK0FkZCBhIGxpbmUgdG8gYCNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiYC4KKworQXQgZ2xvYmFsIHNjb3BlLCBhZGQgeW91ciBhcnJheSBvZiB1c2FnZSBzdHJpbmdzOgorCistLS0tCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBzdWhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBzdWggWzxhcmc+Li4uXSIpLAorCU5VTEwsCit9OworLS0tLQorCitUaGVuLCB3aXRoaW4geW91ciBgY21kX3BzdWgoKWAgaW1wbGVtZW50YXRpb24sIHdlIGNhbiBkZWNsYXJlIGFuZCBwb3B1bGF0ZSBvdXIKK2BvcHRpb25gIHN0cnVjdC4gT3VycyBpcyBwcmV0dHkgYm9yaW5nIGJ1dCB5b3UgY2FuIGFkZCBtb3JlIHRvIGl0IGlmIHlvdSB3YW50IHRvCitleHBsb3JlIGBwYXJzZV9vcHRpb25zKClgIGluIG1vcmUgZGV0YWlsOgorCistLS0tCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CistLS0tCisKK0ZpbmFsbHksIGJlZm9yZSB5b3UgcHJpbnQgeW91ciBhcmdzIGFuZCBwcmVmaXgsIGFkZCB0aGUgY2FsbCB0bworYHBhcnNlLW9wdGlvbnMoKWA6CisKKy0tLS0KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHBzdWhfdXNhZ2UsIDApOworLS0tLQorCitUaGlzIGNhbGwgd2lsbCBtb2RpZnkgeW91ciBgYXJndmAgcGFyYW1ldGVyLiBJdCB3aWxsIHN0cmlwIHRoZSBvcHRpb25zIHlvdQorc3BlY2lmaWVkIGluIGBvcHRpb25zYCBmcm9tIGBhcmd2YCBhbmQgdGhlIGxvY2F0aW9ucyBwb2ludGVkIHRvIGZyb20gYG9wdGlvbnNgCitlbnRyaWVzIHdpbGwgYmUgdXBkYXRlZC4gQmUgc3VyZSB0byByZXBsYWNlIHlvdXIgYGFyZ2NgIHdpdGggdGhlIHJlc3VsdCBmcm9tCitgcGFyc2Vfb3B0aW9ucygpYCwgb3IgeW91IHdpbGwgYmUgY29uZnVzZWQgaWYgeW91IHRyeSB0byBwYXJzZSBgYXJndmAgbGF0ZXIuCisKK0l0J3Mgd29ydGggbm90aW5nIHRoZSBzcGVjaWFsIGFyZ3VtZW50IGAtLWAuIEFzIHlvdSBtYXkgYmUgYXdhcmUsIG1hbnkgVW5peAorY29tbWFuZHMgdXNlIGAtLWAgdG8gaW5kaWNhdGUgImVuZCBvZiBuYW1lZCBwYXJhbWV0ZXJzIiAtIGFsbCBwYXJhbWV0ZXJzIGFmdGVyCit0aGUgYC0tYCBhcmUgaW50ZXJwcmV0ZWQgbWVyZWx5IGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLiAoVGhpcyBjYW4gYmUgaGFuZHkgaWYKK3lvdSB3YW50IHRvIHBhc3MgYXMgYSBwYXJhbWV0ZXIgc29tZXRoaW5nIHdoaWNoIHdvdWxkIHVzdWFsbHkgYmUgaW50ZXJwcmV0ZWQgYXMKK2EgZmxhZy4pIGBwYXJzZV9vcHRpb25zKClgIHdpbGwgdGVybWluYXRlIHBhcnNpbmcgd2hlbiBpdCByZWFjaGVzIGAtLWAgYW5kIGdpdmUKK3lvdSB0aGUgcmVzdCBvZiB0aGUgb3B0aW9ucyBhZnRlcndhcmRzLCB1bnRvdWNoZWQuCisKK0J1aWxkIGFnYWluLiBOb3csIHdoZW4geW91IHJ1biB3aXRoIGAtaGAsIHlvdSBzaG91bGQgc2VlIHlvdXIgdXNhZ2UgcHJpbnRlZCBhbmQKK3lvdXIgY29tbWFuZCB0ZXJtaW5hdGVkIGJlZm9yZSBhbnl0aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbnMuIEdyZWF0IQorCitHbyBhaGVhZCBhbmQgY29tbWl0IHRoaXMgb25lLCB0b28uCisKK1tbdGVzdGluZ11dCis9PSBUZXN0aW5nCisKK0l0J3MgaW1wb3J0YW50IHRvIHRlc3QgeW91ciBjb2RlIC0gZXZlbiBmb3IgYSBsaXR0bGUgdG95IGNvbW1hbmQgbGlrZSB0aGlzIG9uZS4KK01vcmVvdmVyLCB5b3VyIHBhdGNoIHdvbid0IGJlIGFjY2VwdGVkIGludG8gdGhlIEdpdCB0cmVlIHdpdGhvdXQgdGVzdHMuIFlvdXIKK3Rlc3RzIHNob3VsZDoKKworKiBJbGx1c3RyYXRlIHRoZSBjdXJyZW50IGJlaGF2aW9yIG9mIHRoZSBmZWF0dXJlCisqIFByb3ZlIHRoZSBjdXJyZW50IGJlaGF2aW9yIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yCisqIEVuc3VyZSB0aGUgZXh0ZXJuYWxseS12aXNpYmxlIGJlaGF2aW9yIGlzbid0IGJyb2tlbiBpbiBsYXRlciBjaGFuZ2VzCisKK1NvIGxldCdzIHdyaXRlIHNvbWUgdGVzdHMuCisKK1JlbGF0ZWQgcmVhZGluZzogYHQvUkVBRE1FYAorCitbW292ZXJ2aWV3LXRlc3Qtc3RydWN0dXJlXV0KKz09PSBPdmVydmlldyBvZiBUZXN0aW5nIFN0cnVjdHVyZQorCitUaGUgdGVzdHMgaW4gR2l0IGxpdmUgaW4gYHQvYCBhbmQgYXJlIG5hbWVkIHdpdGggYSA0LWRpZ2l0IGRlY2ltYWwgbnVtYmVyIHVzaW5nCit0aGUgc2NoZW1hIHNob3duIGluIHRoZSBOYW1pbmcgVGVzdHMgc2VjdGlvbiBvZiBgdC9SRUFETUVgLgorCitbW3dyaXRlLW5ldy10ZXN0XV0KKz09PSBXcml0aW5nIFlvdXIgVGVzdAorCitTaW5jZSB0aGlzIGEgdG95IGNvbW1hbmQsIGxldCdzIGdvIGFoZWFkIGFuZCBuYW1lIHRoZSB0ZXN0IHdpdGggdDk5OTkuIEhvd2V2ZXIsCithcyBtYW55IG9mIHRoZSBmYW1pbHkvc3ViY21kIGNvbWJpbmF0aW9ucyBhcmUgZnVsbCwgYmVzdCBwcmFjdGljZSBzZWVtcyB0byBiZQordG8gZmluZCBhIGNvbW1hbmQgY2xvc2UgZW5vdWdoIHRvIHRoZSBvbmUgeW91J3ZlIGFkZGVkIGFuZCBzaGFyZSBpdHMgbmFtaW5nCitzcGFjZS4KKworQ3JlYXRlIGEgbmV3IGZpbGUgYHQvdDk5OTktcHN1aC10dXRvcmlhbC5zaGAuIEJlZ2luIHdpdGggdGhlIGhlYWRlciBhcyBzbyAoc2VlCisiV3JpdGluZyBUZXN0cyIgYW5kICJTb3VyY2UgJ3Rlc3QtbGliLnNoJyIgaW4gYHQvUkVBRE1FYCk6CisKKy0tLS0KKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtcHN1aCB0ZXN0CisKK1RoaXMgdGVzdCBydW5zIGdpdC1wc3VoIGFuZCBtYWtlcyBzdXJlIGl0IGRvZXMgbm90IGNyYXNoLicKKworLiAuL3Rlc3QtbGliLnNoCistLS0tCisKK1Rlc3RzIGFyZSBmcmFtZWQgaW5zaWRlIG9mIGEgYHRlc3RfZXhwZWN0X3N1Y2Nlc3NgIGluIG9yZGVyIHRvIG91dHB1dCBUQVAKK2Zvcm1hdHRlZCByZXN1bHRzLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgZ2l0IHBzdWhgIGRvZXNuJ3QgZXhpdCBwb29ybHkgYW5kIGRvZXMKK21lbnRpb24gdGhlIHJpZ2h0IGFuaW1hbCBzb21ld2hlcmU6CisKKy0tLS0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bnMgY29ycmVjdGx5IHdpdGggbm8gYXJncyBhbmQgZ29vZCBvdXRwdXQnICcKKwlnaXQgcHN1aCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCBQb255IGFjdHVhbAorJworLS0tLQorCitJbmRpY2F0ZSB0aGF0IHlvdSd2ZSBydW4gZXZlcnl0aGluZyB5b3Ugd2FudGVkIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIGF0IHRoZQorYm90dG9tIG9mIHlvdXIgc2NyaXB0OgorCistLS0tCit0ZXN0X2RvbmUKKy0tLS0KKworTWFrZSBzdXJlIHlvdSBtYXJrIHlvdXIgdGVzdCBzY3JpcHQgZXhlY3V0YWJsZToKKworLS0tLQorJCBjaG1vZCAreCB0L3Q5OTk5LXBzdWgtdHV0b3JpYWwuc2gKKy0tLS0KKworWW91IGNhbiBnZXQgYW4gaWRlYSBvZiB3aGV0aGVyIHlvdSBjcmVhdGVkIHlvdXIgbmV3IHRlc3Qgc2NyaXB0IHN1Y2Nlc3NmdWxseQorYnkgcnVubmluZyBgbWFrZSAtQyB0IHRlc3QtbGludGAsIHdoaWNoIHdpbGwgY2hlY2sgZm9yIHRoaW5ncyBsaWtlIHRlc3QgbnVtYmVyCit1bmlxdWVuZXNzLCBleGVjdXRhYmxlIGJpdCwgYW5kIHNvIG9uLgorCitbW2xvY2FsLXRlc3RdXQorPT09IFJ1bm5pbmcgTG9jYWxseQorCitMZXQncyB0cnkgYW5kIHJ1biBsb2NhbGx5OgorCistLS0tCiskIG1ha2UKKyQgY2QgdC8gJiYgcHJvdmUgdDk5OTktcHN1aC10dXRvcmlhbC5zaAorLS0tLQorCitZb3UgY2FuIHJ1biB0aGUgZnVsbCB0ZXN0IHN1aXRlIGFuZCBlbnN1cmUgYGdpdC1wc3VoYCBkaWRuJ3QgYnJlYWsgYW55dGhpbmc6CisKKy0tLS0KKyQgY2QgdC8KKyQgcHJvdmUgLWokKG5wcm9jKSAtLXNodWZmbGUgdFswLTldKi5zaAorLS0tLQorCitOT1RFOiBZb3UgY2FuIGFsc28gZG8gdGhpcyB3aXRoIGBtYWtlIHRlc3RgIG9yIHVzZSBhbnkgdGVzdGluZyBoYXJuZXNzIHdoaWNoIGNhbgorc3BlYWsgVEFQLiBgcHJvdmVgIGNhbiBydW4gY29uY3VycmVudGx5LiBgc2h1ZmZsZWAgcmFuZG9taXplcyB0aGUgb3JkZXIgdGhlCit0ZXN0cyBhcmUgcnVuIGluLCB3aGljaCBtYWtlcyB0aGVtIHJlc2lsaWVudCBhZ2FpbnN0IHVud2FudGVkIGludGVyLXRlc3QKK2RlcGVuZGVuY2llcy4gYHByb3ZlYCBhbHNvIG1ha2VzIHRoZSBvdXRwdXQgbmljZXIuCisKK0dvIGFoZWFkIGFuZCBjb21taXQgdGhpcyBjaGFuZ2UsIGFzIHdlbGwuCisKK1tbcmVhZHktdG8tc2hhcmVdXQorPT0gR2V0dGluZyBSZWFkeSB0byBTaGFyZQorCitZb3UgbWF5IGhhdmUgbm90aWNlZCBhbHJlYWR5IHRoYXQgdGhlIEdpdCBwcm9qZWN0IHBlcmZvcm1zIGl0cyBjb2RlIHJldmlld3MgdmlhCitlbWFpbGVkIHBhdGNoZXMsIHdoaWNoIGFyZSB0aGVuIGFwcGxpZWQgYnkgdGhlIG1haW50YWluZXIgd2hlbiB0aGV5IGFyZSByZWFkeQorYW5kIGFwcHJvdmVkIGJ5IHRoZSBjb21tdW5pdHkuIFRoZSBHaXQgcHJvamVjdCBkb2VzIG5vdCBhY2NlcHQgcGF0Y2hlcyBmcm9tCitwdWxsIHJlcXVlc3RzLCBhbmQgdGhlIHBhdGNoZXMgZW1haWxlZCBmb3IgcmV2aWV3IG5lZWQgdG8gYmUgZm9ybWF0dGVkIGEKK3NwZWNpZmljIHdheS4gQXQgdGhpcyBwb2ludCB0aGUgdHV0b3JpYWwgZGl2ZXJnZXMsIGluIG9yZGVyIHRvIGRlbW9uc3RyYXRlIHR3bworZGlmZmVyZW50IG1ldGhvZHMgb2YgZm9ybWF0dGluZyB5b3VyIHBhdGNoc2V0IGFuZCBnZXR0aW5nIGl0IHJldmlld2VkLgorCitUaGUgZmlyc3QgbWV0aG9kIHRvIGJlIGNvdmVyZWQgaXMgR2l0R2l0R2FkZ2V0LCB3aGljaCBpcyB1c2VmdWwgZm9yIHRob3NlCithbHJlYWR5IGZhbWlsaWFyIHdpdGggR2l0SHViJ3MgY29tbW9uIHB1bGwgcmVxdWVzdCB3b3JrZmxvdy4gVGhpcyBtZXRob2QKK3JlcXVpcmVzIGEgR2l0SHViIGFjY291bnQuCisKK1RoZSBzZWNvbmQgbWV0aG9kIHRvIGJlIGNvdmVyZWQgaXMgYGdpdCBzZW5kLWVtYWlsYCwgd2hpY2ggY2FuIGdpdmUgc2xpZ2h0bHkKK21vcmUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgZW1haWxzIHRvIGJlIHNlbnQuIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHNvbWUKK3NldHVwIHdoaWNoIGNhbiBjaGFuZ2UgZGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtIGFuZCB3aWxsIG5vdCBiZSBjb3ZlcmVkIGluIHRoaXMKK3R1dG9yaWFsLgorCitSZWdhcmRsZXNzIG9mIHdoaWNoIG1ldGhvZCB5b3UgY2hvb3NlLCB5b3VyIGVuZ2FnZW1lbnQgd2l0aCByZXZpZXdlcnMgd2lsbCBiZQordGhlIHNhbWU7IHRoZSByZXZpZXcgcHJvY2VzcyB3aWxsIGJlIGNvdmVyZWQgYWZ0ZXIgdGhlIHNlY3Rpb25zIG9uIEdpdEdpdEdhZGdldAorYW5kIGBnaXQgc2VuZC1lbWFpbGAuCisKK1tbaG93dG8tZ2dnXV0KKz09IFNlbmRpbmcgUGF0Y2hlcyB2aWEgR2l0R2l0R2FkZ2V0CisKK09uZSBvcHRpb24gZm9yIHNlbmRpbmcgcGF0Y2hlcyBpcyB0byBmb2xsb3cgYSB0eXBpY2FsIHB1bGwgcmVxdWVzdCB3b3JrZmxvdyBhbmQKK3NlbmQgeW91ciBwYXRjaGVzIG91dCB2aWEgR2l0R2l0R2FkZ2V0LiBHaXRHaXRHYWRnZXQgaXMgYSB0b29sIGNyZWF0ZWQgYnkKK0pvaGFubmVzIFNjaGluZGVsaW4gdG8gbWFrZSBsaWZlIGFzIGEgR2l0IGNvbnRyaWJ1dG9yIGVhc2llciBmb3IgdGhvc2UgdXNlZCB0bwordGhlIEdpdEh1YiBQUiB3b3JrZmxvdy4gSXQgYWxsb3dzIGNvbnRyaWJ1dG9ycyB0byBvcGVuIHB1bGwgcmVxdWVzdHMgYWdhaW5zdCBpdHMKK21pcnJvciBvZiB0aGUgR2l0IHByb2plY3QsIGFuZCBkb2VzIHNvbWUgbWFnaWMgdG8gdHVybiB0aGUgUFIgaW50byBhIHNldCBvZgorZW1haWxzIGFuZCBzZW5kIHRoZW0gb3V0IGZvciB5b3UuIEl0IGFsc28gcnVucyB0aGUgR2l0IGNvbnRpbnVvdXMgaW50ZWdyYXRpb24KK3N1aXRlIGZvciB5b3UuIEl0J3MgZG9jdW1lbnRlZCBhdCBodHRwOi8vZ2l0Z2l0Z2FkZ2V0LmdpdGh1Yi5pby4KKworW1tjcmVhdGUtZm9ya11dCis9PT0gRm9ya2luZyBgZ2l0L2dpdGAgb24gR2l0SHViCisKK0JlZm9yZSB5b3UgY2FuIHNlbmQgeW91ciBwYXRjaCBvZmYgdG8gYmUgcmV2aWV3ZWQgdXNpbmcgR2l0R2l0R2FkZ2V0LCB5b3Ugd2lsbAorbmVlZCB0byBmb3JrIHRoZSBHaXQgcHJvamVjdCBhbmQgdXBsb2FkIHlvdXIgY2hhbmdlcy4gRmlyc3QgdGhpbmcgLSBtYWtlIHN1cmUKK3lvdSBoYXZlIGEgR2l0SHViIGFjY291bnQuCisKK0hlYWQgdG8gdGhlIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0W0dpdEh1YiBtaXJyb3JdIGFuZCBsb29rIGZvciB0aGUgRm9yaworYnV0dG9uLiBQbGFjZSB5b3VyIGZvcmsgd2hlcmV2ZXIgeW91IGRlZW0gYXBwcm9wcmlhdGUgYW5kIGNyZWF0ZSBpdC4KKworW1t1cGxvYWQtdG8tZm9ya11dCis9PT0gVXBsb2FkaW5nIHRvIFlvdXIgT3duIEZvcmsKKworVG8gdXBsb2FkIHlvdXIgYnJhbmNoIHRvIHlvdXIgb3duIGZvcmssIHlvdSdsbCBuZWVkIHRvIGFkZCB0aGUgbmV3IGZvcmsgYXMgYQorcmVtb3RlLiBZb3UgY2FuIHVzZSBgZ2l0IHJlbW90ZSAtdmAgdG8gc2hvdyB0aGUgcmVtb3RlcyB5b3UgaGF2ZSBhZGRlZCBhbHJlYWR5LgorRnJvbSB5b3VyIG5ldyBmb3JrJ3MgcGFnZSBvbiBHaXRIdWIsIHlvdSBjYW4gcHJlc3MgIkNsb25lIG9yIGRvd25sb2FkIiB0byBnZXQKK3RoZSBVUkw7IHRoZW4geW91IG5lZWQgdG8gcnVuIHRoZSBmb2xsb3dpbmcgdG8gYWRkLCByZXBsYWNpbmcgeW91ciBvd24gVVJMIGFuZAorcmVtb3RlIG5hbWUgZm9yIHRoZSBleGFtcGxlcyBwcm92aWRlZDoKKworLS0tLQorJCBnaXQgcmVtb3RlIGFkZCByZW1vdGVuYW1lIGdpdEBnaXRodWIuY29tOnJlbW90ZW5hbWUvZ2l0LmdpdAorLS0tLQorCitvciB0byB1c2UgdGhlIEhUVFBTIFVSTDoKKworLS0tLQorJCBnaXQgcmVtb3RlIGFkZCByZW1vdGVuYW1lIGh0dHBzOi8vZ2l0aHViLmNvbS9yZW1vdGVuYW1lL2dpdC8uZ2l0CistLS0tCisKK1J1biBgZ2l0IHJlbW90ZSAtdmAgYWdhaW4gYW5kIHlvdSBzaG91bGQgc2VlIHRoZSBuZXcgcmVtb3RlIHNob3dpbmcgdXAuCitgZ2l0IGZldGNoIHJlbW90ZW5hbWVgICh3aXRoIHRoZSByZWFsIG5hbWUgb2YgeW91ciByZW1vdGUgcmVwbGFjZWQpIGluIG9yZGVyIHRvCitnZXQgcmVhZHkgdG8gcHVzaC4KKworTmV4dCwgZG91YmxlLWNoZWNrIHRoYXQgeW91J3ZlIGJlZW4gZG9pbmcgYWxsIHlvdXIgZGV2ZWxvcG1lbnQgaW4gYSBuZXcgYnJhbmNoCitieSBydW5uaW5nIGBnaXQgYnJhbmNoYC4gSWYgeW91IGRpZG4ndCwgbm93IGlzIGEgZ29vZCB0aW1lIHRvIG1vdmUgeW91ciBuZXcKK2NvbW1pdHMgdG8gdGhlaXIgb3duIGJyYW5jaC4KKworQXMgbWVudGlvbmVkIGJyaWVmbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGRvY3VtZW50LCB3ZSBhcmUgYmFzaW5nIG91ciB3b3JrCitvbiBgbWFzdGVyYCwgc28gZ28gYWhlYWQgYW5kIHVwZGF0ZSBhcyBzaG93biBiZWxvdywgb3IgdXNpbmcgeW91ciBwcmVmZXJyZWQKK3dvcmtmbG93LgorCistLS0tCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZ2l0IHB1bGwgLXIKKyQgZ2l0IHJlYmFzZSBtYXN0ZXIgcHN1aAorLS0tLQorCitGaW5hbGx5LCB5b3UncmUgcmVhZHkgdG8gcHVzaCB5b3VyIG5ldyB0b3BpYyBicmFuY2ghIChEdWUgdG8gb3VyIGJyYW5jaCBhbmQKK2NvbW1hbmQgbmFtZSBjaG9pY2VzLCBiZSBjYXJlZnVsIHdoZW4geW91IHR5cGUgdGhlIGNvbW1hbmQgYmVsb3cuKQorCistLS0tCiskIGdpdCBwdXNoIHJlbW90ZW5hbWUgcHN1aAorLS0tLQorCitOb3cgeW91IHNob3VsZCBiZSBhYmxlIHRvIGdvIGFuZCBjaGVjayBvdXQgeW91ciBuZXdseSBjcmVhdGVkIGJyYW5jaCBvbiBHaXRIdWIuCisKK1tbc2VuZC1wci1nZ2ddXQorPT09IFNlbmRpbmcgYSBQUiB0byBHaXRHaXRHYWRnZXQKKworSW4gb3JkZXIgdG8gaGF2ZSB5b3VyIGNvZGUgdGVzdGVkIGFuZCBmb3JtYXR0ZWQgZm9yIHJldmlldywgeW91IG5lZWQgdG8gc3RhcnQgYnkKK29wZW5pbmcgYSBQdWxsIFJlcXVlc3QgYWdhaW5zdCBgZ2l0Z2l0Z2FkZ2V0L2dpdGAuIEhlYWQgdG8KK2h0dHBzOi8vZ2l0aHViLmNvbS9naXRnaXRnYWRnZXQvZ2l0IGFuZCBvcGVuIGEgUFIgZWl0aGVyIHdpdGggdGhlICJOZXcgcHVsbAorcmVxdWVzdCIgYnV0dG9uIG9yIHRoZSBjb252ZW5pZW50ICJDb21wYXJlICYgcHVsbCByZXF1ZXN0IiBidXR0b24gdGhhdCBtYXkKK2FwcGVhciB3aXRoIHRoZSBuYW1lIG9mIHlvdXIgbmV3bHkgcHVzaGVkIGJyYW5jaC4KKworUmV2aWV3IHRoZSBQUidzIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiwgYXMgaXQncyB1c2VkIGJ5IEdpdEdpdEdhZGdldCBhcyB0aGUgY292ZXIKK2xldHRlciBmb3IgeW91ciBjaGFuZ2UuIFdoZW4geW91J3JlIGhhcHB5LCBzdWJtaXQgeW91ciBwdWxsIHJlcXVlc3QuCisKK1tbcnVuLWNpLWdnZ11dCis9PT0gUnVubmluZyBDSSBhbmQgR2V0dGluZyBSZWFkeSB0byBTZW5kCisKK0lmIGl0J3MgeW91ciBmaXJzdCB0aW1lIHVzaW5nIEdpdEdpdEdhZGdldCAod2hpY2ggaXMgbGlrZWx5LCBhcyB5b3UncmUgdXNpbmcKK3RoaXMgdHV0b3JpYWwpIHRoZW4gc29tZW9uZSB3aWxsIG5lZWQgdG8gZ2l2ZSB5b3UgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRvb2wuCitBcyBtZW50aW9uZWQgaW4gdGhlIEdpdEdpdEdhZGdldCBkb2N1bWVudGF0aW9uLCB5b3UganVzdCBuZWVkIHNvbWVvbmUgd2hvCithbHJlYWR5IHVzZXMgaXQgdG8gY29tbWVudCBvbiB5b3VyIFBSIHdpdGggYC9hbGxvdyA8dXNlcm5hbWU+YC4gR2l0R2l0R2FkZ2V0Cit3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHlvdXIgUFJzIHRocm91Z2ggdGhlIENJIGV2ZW4gd2l0aG91dCB0aGUgcGVybWlzc2lvbiBnaXZlbgorYnV0IHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGAvc3VibWl0YCB5b3VyIGNoYW5nZXMgdW50aWwgc29tZW9uZSBhbGxvd3MgeW91IHRvCit1c2UgdGhlIHRvb2wuCisKK0lmIHRoZSBDSSBmYWlscywgeW91IGNhbiB1cGRhdGUgeW91ciBjaGFuZ2VzIHdpdGggYGdpdCByZWJhc2UgLWlgIGFuZCBwdXNoIHlvdXIKK2JyYW5jaCBhZ2FpbjoKKworLS0tLQorJCBnaXQgcHVzaCAtZiByZW1vdGVuYW1lIHBzdWgKKy0tLS0KKworSW4gZmFjdCwgeW91IHNob3VsZCBjb250aW51ZSB0byBtYWtlIGNoYW5nZXMgdGhpcyB3YXkgdXAgdW50aWwgdGhlIHBvaW50IHdoZW4KK3lvdXIgcGF0Y2ggaXMgYWNjZXB0ZWQgaW50byBgbmV4dGAuCisKKy8vLy8KK1RPRE8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGdpdGdhZGdldC9naXRnaXRnYWRnZXQvaXNzdWVzLzgzCitJdCdkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2ggbG9va3MgZ29vZCBiZWZvcmUgc2VuZGluZyBpdAordG8gZXZlcnlvbmUgb24gR2l0IG1haWxpbmcgbGlzdC4KK1tbY2hlY2std29yay1nZ2ddXQorPT09IENoZWNrIFlvdXIgV29yaworLy8vLworCitbW3NlbmQtbWFpbC1nZ2ddXQorPT09IFNlbmRpbmcgWW91ciBQYXRjaGVzCisKK05vdyB0aGF0IHlvdXIgQ0kgaXMgcGFzc2luZyBhbmQgc29tZW9uZSBoYXMgZ3JhbnRlZCB5b3UgcGVybWlzc2lvbiB0byB1c2UKK0dpdEdpdEdhZGdldCB3aXRoIHRoZSBgL2FsbG93YCBjb21tYW5kLCBzZW5kaW5nIG91dCBmb3IgcmV2aWV3IGlzIGFzIHNpbXBsZSBhcworY29tbWVudGluZyBvbiB5b3VyIFBSIHdpdGggYC9zdWJtaXRgLgorCitbW3Jlc3BvbmRpbmctZ2dnXV0KKz09PSBVcGRhdGluZyBXaXRoIENvbW1lbnRzCisKK1NraXAgYWhlYWQgdG8gPDxyZXZpZXdpbmcsUmVzcG9uZGluZyB0byBSZXZpZXdzPj4gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0bworcmVwbHkgdG8gcmV2aWV3IGNvbW1lbnRzIHlvdSB3aWxsIHJlY2VpdmUgb24gdGhlIG1haWxpbmcgbGlzdC4KKworT25jZSB5b3UgaGF2ZSB5b3VyIGJyYW5jaCBhZ2FpbiBpbiB0aGUgc2hhcGUgeW91IHdhbnQgZm9sbG93aW5nIGFsbCByZXZpZXcKK2NvbW1lbnRzLCB5b3UgY2FuIHN1Ym1pdCBhZ2FpbjoKKworLS0tLQorJCBnaXQgcHVzaCAtZiByZW1vdGVuYW1lIHBzdWgKKy0tLS0KKworTmV4dCwgZ28gbG9vayBhdCB5b3VyIHB1bGwgcmVxdWVzdCBhZ2FpbnN0IEdpdEdpdEdhZGdldDsgeW91IHNob3VsZCBzZWUgdGhlIENJCitoYXMgYmVlbiBraWNrZWQgb2ZmIGFnYWluLiBOb3cgd2hpbGUgdGhlIENJIGlzIHJ1bm5pbmcgaXMgYSBnb29kIHRpbWUgZm9yIHlvdQordG8gbW9kaWZ5IHlvdXIgZGVzY3JpcHRpb24gYXQgdGhlIHRvcCBvZiB0aGUgcHVsbCByZXF1ZXN0IHRocmVhZDsgaXQgd2lsbCBiZQordXNlZCBhZ2FpbiBhcyB0aGUgY292ZXIgbGV0dGVyLiBZb3Ugc2hvdWxkIHVzZSB0aGlzIHNwYWNlIHRvIGRlc2NyaWJlIHdoYXQKK2hhcyBjaGFuZ2VkIHNpbmNlIHlvdXIgcHJldmlvdXMgdmVyc2lvbiwgc28gdGhhdCB5b3VyIHJldmlld2VycyBoYXZlIHNvbWUgaWRlYQorb2Ygd2hhdCB0aGV5J3JlIGxvb2tpbmcgYXQuIFdoZW4gdGhlIENJIGlzIGRvbmUgcnVubmluZywgeW91IGNhbiBjb21tZW50IG9uY2UKK21vcmUgd2l0aCBgL3N1Ym1pdGAgLSBHaXRHaXRHYWRnZXQgd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBhIHYyIG1hcmsgdG8geW91cgorY2hhbmdlcy4KKworW1tob3d0by1naXQtc2VuZC1lbWFpbF1dCis9PSBTZW5kaW5nIFBhdGNoZXMgd2l0aCBgZ2l0IHNlbmQtZW1haWxgCisKK0lmIHlvdSBkb24ndCB3YW50IHRvIHVzZSBHaXRHaXRHYWRnZXQsIHlvdSBjYW4gYWxzbyB1c2UgR2l0IGl0c2VsZiB0byBtYWlsIHlvdXIKK3BhdGNoZXMuIFNvbWUgYmVuZWZpdHMgb2YgdXNpbmcgR2l0IHRoaXMgd2F5IGluY2x1ZGUgZmluZXIgZ3JhaW5lZCBjb250cm9sIG9mCitzdWJqZWN0IGxpbmUgKGZvciBleGFtcGxlLCBiZWluZyBhYmxlIHRvIHVzZSB0aGUgdGFnIFtSRkMgUEFUQ0hdIGluIHRoZSBzdWJqZWN0KQorYW5kIGJlaW5nIGFibGUgdG8gc2VuZCBhIGBgZHJ5IHJ1bicnIG1haWwgdG8geW91cnNlbGYgdG8gZW5zdXJlIGl0IGFsbCBsb29rcworZ29vZCBiZWZvcmUgZ29pbmcgb3V0IHRvIHRoZSBsaXN0LgorCitbW3NldHVwLWdpdC1zZW5kLWVtYWlsXV0KKz09PSBQcmVyZXF1aXNpdGU6IFNldHRpbmcgVXAgYGdpdCBzZW5kLWVtYWlsYAorCitDb25maWd1cmF0aW9uIGZvciBgc2VuZC1lbWFpbGAgY2FuIHZhcnkgYmFzZWQgb24geW91ciBvcGVyYXRpbmcgc3lzdGVtIGFuZCBlbWFpbAorcHJvdmlkZXIsIGFuZCBzbyB3aWxsIG5vdCBiZSBjb3ZlcmVkIGluIHRoaXMgdHV0b3JpYWwsIGJleW9uZCBzdGF0aW5nIHRoYXQgaW4KK21hbnkgZGlzdHJpYnV0aW9ucyBvZiBMaW51eCwgYGdpdC1zZW5kLWVtYWlsYCBpcyBub3QgcGFja2FnZWQgYWxvbmdzaWRlIHRoZQordHlwaWNhbCBgZ2l0YCBpbnN0YWxsLiBZb3UgbWF5IG5lZWQgdG8gaW5zdGFsbCB0aGlzIGFkZGl0aW9uYWwgcGFja2FnZTsgdGhlcmUKK2FyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgb25saW5lIHRvIGhlbHAgeW91IGRvIHNvLiBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8KK2RldGVybWluZSB0aGUgcmlnaHQgd2F5IHRvIGNvbmZpZ3VyZSBpdCB0byB1c2UgeW91ciBTTVRQIHNlcnZlcjsgYWdhaW4sIGFzIHRoaXMKK2NvbmZpZ3VyYXRpb24gY2FuIGNoYW5nZSBzaWduaWZpY2FudGx5IGJhc2VkIG9uIHlvdXIgc3lzdGVtIGFuZCBlbWFpbCBzZXR1cCwgaXQKK2lzIG91dCBvZiBzY29wZSBmb3IgdGhlIGNvbnRleHQgb2YgdGhpcyB0dXRvcmlhbC4KKworW1tmb3JtYXQtcGF0Y2hdXQorPT09IFByZXBhcmluZyBJbml0aWFsIFBhdGNoc2V0CisKK1NlbmRpbmcgZW1haWxzIHdpdGggR2l0IGlzIGEgdHdvLXBhcnQgcHJvY2VzczsgYmVmb3JlIHlvdSBjYW4gcHJlcGFyZSB0aGUgZW1haWxzCit0aGVtc2VsdmVzLCB5b3UnbGwgbmVlZCB0byBwcmVwYXJlIHRoZSBwYXRjaGVzLiBMdWNraWx5LCB0aGlzIGlzIHByZXR0eSBzaW1wbGU6CisKKy0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtbyBwc3VoLyBtYXN0ZXIuLnBzdWgKKy0tLS0KKworVGhlIGAtLWNvdmVyLWxldHRlcmAgcGFyYW1ldGVyIHRlbGxzIGBmb3JtYXQtcGF0Y2hgIHRvIGNyZWF0ZSBhIGNvdmVyIGxldHRlcgordGVtcGxhdGUgZm9yIHlvdS4gWW91IHdpbGwgbmVlZCB0byBmaWxsIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmUgeW91J3JlIHJlYWR5Cit0byBzZW5kIC0gYnV0IGZvciBub3csIHRoZSB0ZW1wbGF0ZSB3aWxsIGJlIG5leHQgdG8geW91ciBvdGhlciBwYXRjaGVzLgorCitUaGUgYC1vIHBzdWgvYCBwYXJhbWV0ZXIgdGVsbHMgYGZvcm1hdC1wYXRjaGAgdG8gcGxhY2UgdGhlIHBhdGNoIGZpbGVzIGludG8gYQorZGlyZWN0b3J5LiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGBnaXQgc2VuZC1lbWFpbGAgY2FuIHRha2UgYSBkaXJlY3RvcnkgYW5kCitzZW5kIG91dCBhbGwgdGhlIHBhdGNoZXMgZnJvbSB0aGVyZS4KKworYG1hc3Rlci4ucHN1aGAgdGVsbHMgYGZvcm1hdC1wYXRjaGAgdG8gZ2VuZXJhdGUgcGF0Y2hlcyBmb3IgdGhlIGRpZmZlcmVuY2UKK2JldHdlZW4gYG1hc3RlcmAgYW5kIGBwc3VoYC4gSXQgd2lsbCBtYWtlIG9uZSBwYXRjaCBmaWxlIHBlciBjb21taXQuIEFmdGVyIHlvdQorcnVuLCB5b3UgY2FuIGdvIGhhdmUgYSBsb29rIGF0IGVhY2ggb2YgdGhlIHBhdGNoZXMgd2l0aCB5b3VyIGZhdm9yaXRlIHRleHQKK2VkaXRvciBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbG9va3MgYWxyaWdodDsgaG93ZXZlciwgaXQncyBub3QgcmVjb21tZW5kZWQgdG8KK21ha2UgY29kZSBmaXh1cHMgdmlhIHRoZSBwYXRjaCBmaWxlLiBJdCdzIGEgYmV0dGVyIGlkZWEgdG8gbWFrZSB0aGUgY2hhbmdlIHRoZQorbm9ybWFsIHdheSB1c2luZyBgZ2l0IHJlYmFzZSAtaWAgb3IgYnkgYWRkaW5nIGEgbmV3IGNvbW1pdCB0aGFuIGJ5IG1vZGlmeWluZyBhCitwYXRjaC4KKworTk9URTogT3B0aW9uYWxseSwgeW91IGNhbiBhbHNvIHVzZSB0aGUgYC0tcmZjYCBmbGFnIHRvIHByZWZpeCB5b3VyIHBhdGNoIHN1YmplY3QKK3dpdGggYGBbUkZDIFBBVENIXScnIGluc3RlYWQgb2YgYGBbUEFUQ0hdJycuIFJGQyBzdGFuZHMgZm9yIGBgcmVxdWVzdCBmb3IKK2NvbW1lbnRzJycgYW5kIGluZGljYXRlcyB0aGF0IHdoaWxlIHlvdXIgY29kZSBpc24ndCBxdWl0ZSByZWFkeSBmb3Igc3VibWlzc2lvbiwKK3lvdSdkIGxpa2UgdG8gYmVnaW4gdGhlIGNvZGUgcmV2aWV3IHByb2Nlc3MuIFRoaXMgY2FuIGFsc28gYmUgdXNlZCB3aGVuIHlvdXIKK3BhdGNoIGlzIGEgcHJvcG9zYWwsIGJ1dCB5b3UgYXJlbid0IHN1cmUgd2hldGhlciB0aGUgY29tbXVuaXR5IHdhbnRzIHRvIHNvbHZlCit0aGUgcHJvYmxlbSB3aXRoIHRoYXQgYXBwcm9hY2ggb3Igbm90IC0gdG8gY29uZHVjdCBhIHNvcnQgb2YgZGVzaWduIHJldmlldy4gWW91CittYXkgYWxzbyBzZWUgb24gdGhlIGxpc3QgcGF0Y2hlcyBtYXJrZWQgYGBXSVAnJyAtIHRoaXMgbWVhbnMgdGhleSBhcmUgaW5jb21wbGV0ZQorYnV0IHdhbnQgcmV2aWV3ZXJzIHRvIGxvb2sgYXQgd2hhdCB0aGV5IGhhdmUgc28gZmFyLiBZb3UgY2FuIGFkZCB0aGlzIGZsYWcgd2l0aAorYC0tc3ViamVjdC1wcmVmaXg9V0lQYC4KKworQ2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IHlvdXIgcGF0Y2hlcyBhbmQgY292ZXIgbGV0dGVyIHRlbXBsYXRlIGV4aXN0IGluIHRoZQorZGlyZWN0b3J5IHlvdSBzcGVjaWZpZWQgLSB5b3UncmUgbmVhcmx5IHJlYWR5IHRvIHNlbmQgb3V0IHlvdXIgcmV2aWV3IQorCitbW2NvdmVyLWxldHRlcl1dCis9PT0gUHJlcGFyaW5nIEVtYWlsCisKK0luIGFkZGl0aW9uIHRvIGFuIGVtYWlsIHBlciBwYXRjaCwgdGhlIEdpdCBjb21tdW5pdHkgYWxzbyBleHBlY3RzIHlvdXIgcGF0Y2hlcwordG8gY29tZSB3aXRoIGEgY292ZXIgbGV0dGVyLCB0eXBpY2FsbHkgd2l0aCBhIHN1YmplY3QgbGluZSBbUEFUQ0ggMC94XSAod2hlcmUKK3ggaXMgdGhlIG51bWJlciBvZiBwYXRjaGVzIHlvdSdyZSBzZW5kaW5nKS4gU2luY2UgeW91IGludm9rZWQgYGZvcm1hdC1wYXRjaGAKK3dpdGggYC0tY292ZXItbGV0dGVyYCwgeW91J3ZlIGFscmVhZHkgZ290IGEgdGVtcGxhdGUgcmVhZHkuIE9wZW4gaXQgdXAgaW4geW91cgorZmF2b3JpdGUgZWRpdG9yLgorCitZb3Ugc2hvdWxkIHNlZSBhIG51bWJlciBvZiBoZWFkZXJzIHByZXNlbnQgYWxyZWFkeS4gQ2hlY2sgdGhhdCB5b3VyIGBGcm9tOmAKK2hlYWRlciBpcyBjb3JyZWN0LiBUaGVuIG1vZGlmeSB5b3VyIGBTdWJqZWN0OmAgdG8gc29tZXRoaW5nIHdoaWNoIHN1Y2NpbmN0bHkKK2NvdmVycyB0aGUgcHVycG9zZSBvZiB5b3VyIGVudGlyZSB0b3BpYyBicmFuY2gsIGZvciBleGFtcGxlOgorCistLS0tCitTdWJqZWN0OiBbUEFUQ0ggMC83XSBhZGRpbmcgdGhlICdwc3VoJyBjb21tYW5kCistLS0tCisKK01ha2Ugc3VyZSB5b3UgcmV0YWluIHRoZSBgYFtQQVRDSCAwL1hdJycgcGFydDsgdGhhdCdzIHdoYXQgaW5kaWNhdGVzIHRvIHRoZSBHaXQKK2NvbW11bml0eSB0aGF0IHRoaXMgZW1haWwgaXMgdGhlIGJlZ2lubmluZyBvZiBhIHJldmlldywgYW5kIG1hbnkgcmV2aWV3ZXJzCitmaWx0ZXIgdGhlaXIgZW1haWwgZm9yIHRoaXMgdHlwZSBvZiBmbGFnLgorCitZb3UnbGwgbmVlZCB0byBhZGQgc29tZSBleHRyYSBwYXJhbWV0ZXJzIHdoZW4geW91IGludm9rZSBgZ2l0IHNlbmQtZW1haWxgIHRvIGFkZAordGhlIGNvdmVyIGxldHRlci4KKworTmV4dCB5b3UnbGwgaGF2ZSB0byBmaWxsIG91dCB0aGUgYm9keSBvZiB5b3VyIGNvdmVyIGxldHRlci4gVGhpcyBpcyBhbiBpbXBvcnRhbnQKK2NvbXBvbmVudCBvZiBjaGFuZ2Ugc3VibWlzc2lvbiBhcyBpdCBleHBsYWlucyB0byB0aGUgY29tbXVuaXR5IGZyb20gYSBoaWdoIGxldmVsCit3aGF0IHlvdSdyZSB0cnlpbmcgdG8gZG8sIGFuZCB3aHksIGluIGEgd2F5IHRoYXQncyBtb3JlIGFwcGFyZW50IHRoYW4ganVzdAorbG9va2luZyBhdCB5b3VyIGRpZmYuIEJlIHN1cmUgdG8gZXhwbGFpbiBhbnl0aGluZyB5b3VyIGRpZmYgZG9lc24ndCBtYWtlIGNsZWFyCitvbiBpdHMgb3duLgorCitIZXJlJ3MgYW4gZXhhbXBsZSBib2R5IGZvciBgcHN1aGA6CisKKy0tLS0KK091ciBpbnRlcm5hbCBtZXRyaWNzIGluZGljYXRlIHdpZGVzcHJlYWQgaW50ZXJlc3QgaW4gdGhlIGNvbW1hbmQKK2dpdC1wc3VoIC0gdGhhdCBpcywgbWFueSB1c2VycyBhcmUgdHJ5aW5nIHRvIHVzZSBpdCwgYnV0IGZpbmRpbmcgaXQgaXMKK3VuYXZhaWxhYmxlLCB1c2luZyBzb21lIHVua25vd24gd29ya2Fyb3VuZCBpbnN0ZWFkLgorCitUaGUgZm9sbG93aW5nIGhhbmRmdWwgb2YgcGF0Y2hlcyBhZGQgdGhlIHBzdWggY29tbWFuZCBhbmQgaW1wbGVtZW50IHNvbWUKK2hhbmR5IGZlYXR1cmVzIG9uIHRvcCBvZiBpdC4KKworVGhpcyBwYXRjaHNldCBpcyBwYXJ0IG9mIHRoZSBNeUZpcnN0Q29udHJpYnV0aW9uIHR1dG9yaWFsIGFuZCBzaG91bGQgbm90CitiZSBtZXJnZWQuCistLS0tCisKK1RoZSB0ZW1wbGF0ZSBjcmVhdGVkIGJ5IGBnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyYCBpbmNsdWRlcyBhIGRpZmZzdGF0LgorVGhpcyBnaXZlcyByZXZpZXdlcnMgYSBzdW1tYXJ5IG9mIHdoYXQgdGhleSdyZSBpbiBmb3Igd2hlbiByZXZpZXdpbmcgeW91ciB0b3BpYy4KK1RoZSBvbmUgZ2VuZXJhdGVkIGZvciBgcHN1aGAgZnJvbSB0aGUgc2FtcGxlIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UgdGhpczoKKworLS0tLQorIERvY3VtZW50YXRpb24vZ2l0LXBzdWgudHh0IHwgNDAgKysrKysrKysrKysrKysrKysrKysrCisgTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgMSArCisgYnVpbHRpbi5oICAgICAgICAgICAgICAgICAgfCAgMSArCisgYnVpbHRpbi9wc3VoLmMgICAgICAgICAgICAgfCA3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGdpdC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKworIHQvdDk5OTktcHN1aC10dXRvcmlhbC5zaCAgIHwgMTIgKysrKysrKworIDYgZmlsZXMgY2hhbmdlZCwgMTI4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9naXQtcHN1aC50eHQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYnVpbHRpbi9wc3VoLmMKKyBjcmVhdGUgbW9kZSAxMDA3NTUgdC90OTk5OS1wc3VoLXR1dG9yaWFsLnNoCistLS0tCisKK0ZpbmFsbHksIHRoZSBsZXR0ZXIgd2lsbCBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mIEdpdCB1c2VkIHRvIGdlbmVyYXRlIHRoZQorcGF0Y2hlcy4gWW91IGNhbiBsZWF2ZSB0aGF0IHN0cmluZyBhbG9uZS4KKworW1tzZW5kaW5nLWdpdC1zZW5kLWVtYWlsXV0KKz09PSBTZW5kaW5nIEVtYWlsCisKK0F0IHRoaXMgcG9pbnQgeW91IHNob3VsZCBoYXZlIGEgZGlyZWN0b3J5IGBwc3VoL2Agd2hpY2ggaXMgZmlsbGVkIHdpdGggeW91cgorcGF0Y2hlcyBhbmQgYSBjb3ZlciBsZXR0ZXIuIFRpbWUgdG8gbWFpbCBpdCBvdXQhIFlvdSBjYW4gc2VuZCBpdCBsaWtlIHRoaXM6CisKKy0tLS0KKyQgZ2l0IHNlbmQtZW1haWwgLS10bz10YXJnZXRAZXhhbXBsZS5jb20gcHN1aC8qLnBhdGNoCistLS0tCisKK05PVEU6IENoZWNrIGBnaXQgaGVscCBzZW5kLWVtYWlsYCBmb3Igc29tZSBvdGhlciBvcHRpb25zIHdoaWNoIHlvdSBtYXkgZmluZAordmFsdWFibGUsIHN1Y2ggYXMgY2hhbmdpbmcgdGhlIFJlcGx5LXRvIGFkZHJlc3Mgb3IgYWRkaW5nIG1vcmUgQ0MgYW5kIEJDQyBsaW5lcy4KKworTk9URTogV2hlbiB5b3UgYXJlIHNlbmRpbmcgYSByZWFsIHBhdGNoLCBpdCB3aWxsIGdvIHRvIGdpdEB2Z2VyLmtlcm5lbC5vcmcgLSBidXQKK3BsZWFzZSBkb24ndCBzZW5kIHlvdXIgcGF0Y2hzZXQgZnJvbSB0aGUgdHV0b3JpYWwgdG8gdGhlIHJlYWwgbWFpbGluZyBsaXN0ISBGb3IKK25vdywgeW91IGNhbiBzZW5kIGl0IHRvIHlvdXJzZWxmLCB0byBtYWtlIHN1cmUgeW91IHVuZGVyc3RhbmQgaG93IGl0IHdpbGwgbG9vay4KKworQWZ0ZXIgeW91IHJ1biB0aGUgY29tbWFuZCBhYm92ZSwgeW91IHdpbGwgYmUgcHJlc2VudGVkIHdpdGggYW4gaW50ZXJhY3RpdmUKK3Byb21wdCBmb3IgZWFjaCBwYXRjaCB0aGF0J3MgYWJvdXQgdG8gZ28gb3V0LiBUaGlzIGdpdmVzIHlvdSBvbmUgbGFzdCBjaGFuY2UgdG8KK2VkaXQgb3IgcXVpdCBzZW5kaW5nIHNvbWV0aGluZyAoYnV0IGFnYWluLCBkb24ndCBlZGl0IGNvZGUgdGhpcyB3YXkpLiBPbmNlIHlvdQorcHJlc3MgYHlgIG9yIGBhYCBhdCB0aGVzZSBwcm9tcHRzIHlvdXIgZW1haWxzIHdpbGwgYmUgc2VudCEgQ29uZ3JhdHVsYXRpb25zIQorCitBd2Vzb21lLCBub3cgdGhlIGNvbW11bml0eSB3aWxsIGRyb3AgZXZlcnl0aGluZyBhbmQgcmV2aWV3IHlvdXIgY2hhbmdlcy4gKEp1c3QKK2tpZGRpbmcgLSBiZSBwYXRpZW50ISkKKworW1t2Mi1naXQtc2VuZC1lbWFpbF1dCis9PT0gU2VuZGluZyB2MgorCitTa2lwIGFoZWFkIHRvIDw8cmV2aWV3aW5nLFJlc3BvbmRpbmcgdG8gUmV2aWV3cz4+IGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8KK2hhbmRsZSBjb21tZW50cyBmcm9tIHJldmlld2Vycy4gQ29udGludWUgdGhpcyBzZWN0aW9uIHdoZW4geW91ciB0b3BpYyBicmFuY2ggaXMKK3NoYXBlZCB0aGUgd2F5IHlvdSB3YW50IGl0IHRvIGxvb2sgZm9yIHlvdXIgcGF0Y2hzZXQgdjIuCisKK1doZW4geW91J3JlIHJlYWR5IHdpdGggdGhlIG5leHQgaXRlcmF0aW9uIG9mIHlvdXIgcGF0Y2gsIHRoZSBwcm9jZXNzIGlzIGZhaXJseQorc2ltaWxhci4KKworRmlyc3QsIGdlbmVyYXRlIHlvdXIgdjIgcGF0Y2hlcyBhZ2FpbjoKKworLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC12MiAtLWNvdmVyLWxldHRlciAtbyBwc3VoLyBtYXN0ZXIuLnBzdWgKKy0tLS0KKworVGhpcyB3aWxsIGFkZCB5b3VyIHYyIHBhdGNoZXMsIGFsbCBuYW1lZCBsaWtlIGB2Mi0wMDBuLW15LWNvbW1pdC1zdWJqZWN0LnBhdGNoYCwKK3RvIHRoZSBgcHN1aC9gIGRpcmVjdG9yeS4gWW91IG1heSBub3RpY2UgdGhhdCB0aGV5IGFyZSBzaXR0aW5nIGFsb25nc2lkZSB0aGUgdjEKK3BhdGNoZXM7IHRoYXQncyBmaW5lLCBidXQgYmUgY2FyZWZ1bCB3aGVuIHlvdSBhcmUgcmVhZHkgdG8gc2VuZCB0aGVtLgorCitFZGl0IHlvdXIgY292ZXIgbGV0dGVyIGFnYWluLiBOb3cgaXMgYSBnb29kIHRpbWUgdG8gbWVudGlvbiB3aGF0J3MgZGlmZmVyZW50CitiZXR3ZWVuIHlvdXIgbGFzdCB2ZXJzaW9uIGFuZCBub3csIGlmIGl0J3Mgc29tZXRoaW5nIHNpZ25pZmljYW50LiBZb3UgZG8gbm90CituZWVkIHRoZSBleGFjdCBzYW1lIGJvZHkgaW4geW91ciBzZWNvbmQgY292ZXIgbGV0dGVyOyBmb2N1cyBvbiBleHBsYWluaW5nIHRvCityZXZpZXdlcnMgdGhlIGNoYW5nZXMgeW91J3ZlIG1hZGUgdGhhdCBtYXkgbm90IGJlIGFzIHZpc2libGUuCisKK1lvdSB3aWxsIGFsc28gbmVlZCB0byBnbyBhbmQgZmluZCB0aGUgTWVzc2FnZS1JZCBvZiB5b3VyIHByZXZpb3VzIGNvdmVyIGxldHRlci4KK1lvdSBjYW4gZWl0aGVyIG5vdGUgaXQgd2hlbiB5b3Ugc2VuZCB0aGUgZmlyc3Qgc2VyaWVzLCBmcm9tIHRoZSBvdXRwdXQgb2YgYGdpdAorc2VuZC1lbWFpbGAsIG9yIHlvdSBjYW4gbG9vayBpdCB1cCBvbiB0aGUKK2h0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXRbbWFpbGluZyBsaXN0XS4gRmluZCB5b3VyIGNvdmVyIGxldHRlciBpbiB0aGUKK2FyY2hpdmVzLCBjbGljayBvbiBpdCwgdGhlbiBjbGljayAicGVybWFsaW5rIiBvciAicmF3IiB0byByZXZlYWwgdGhlIE1lc3NhZ2UtSWQKK2hlYWRlci4gSXQgc2hvdWxkIG1hdGNoOgorCistLS0tCitNZXNzYWdlLUlkOiA8Zm9vLjEyMzQ1LmF1dGhvckBleGFtcGxlLmNvbT4KKy0tLS0KKworWW91ciBNZXNzYWdlLUlkIGlzIGA8Zm9vLjEyMzQ1LmF1dGhvckBleGFtcGxlLmNvbT5gLiBUaGlzIGV4YW1wbGUgd2lsbCBiZSB1c2VkCitiZWxvdyBhcyB3ZWxsOyBtYWtlIHN1cmUgdG8gcmVwbGFjZSBpdCB3aXRoIHRoZSBjb3JyZWN0IE1lc3NhZ2UtSWQgZm9yIHlvdXIKKyoqcHJldmlvdXMgY292ZXIgbGV0dGVyKiogLSB0aGF0IGlzLCBpZiB5b3UncmUgc2VuZGluZyB2MiwgdXNlIHRoZSBNZXNzYWdlLUlkCitmcm9tIHYxOyBpZiB5b3UncmUgc2VuZGluZyB2MywgdXNlIHRoZSBNZXNzYWdlLUlkIGZyb20gdjIuCisKK1doaWxlIHlvdSdyZSBsb29raW5nIGF0IHRoZSBlbWFpbCwgeW91IHNob3VsZCBhbHNvIG5vdGUgd2hvIGlzIENDJ2QsIGFzIGl0J3MKK2NvbW1vbiBwcmFjdGljZSBpbiB0aGUgbWFpbGluZyBsaXN0IHRvIGtlZXAgYWxsIENDcyBvbiBhIHRocmVhZC4gWW91IGNhbiBhZGQKK3RoZXNlIENDIGxpbmVzIGRpcmVjdGx5IHRvIHlvdXIgY292ZXIgbGV0dGVyIHdpdGggYSBsaW5lIGxpa2Ugc28gaW4gdGhlIGhlYWRlcgorKGJlZm9yZSB0aGUgU3ViamVjdCBsaW5lKToKKworLS0tLQorQ0M6IGF1dGhvckBleGFtcGxlLmNvbSwgT3RoZSBSIDxvdGhlckBleGFtcGxlLmNvbT4KKy0tLS0KKworTm93IHNlbmQgdGhlIGVtYWlscyBhZ2FpbiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB3aGljaCBtZXNzYWdlcyB5b3UgcGFzcyBpbgordG8gdGhlIGNvbW1hbmQ6CisKKy0tLS0KKyQgZ2l0IHNlbmQtZW1haWwgLS10bz10YXJnZXRAZXhhbXBsZS5jb20KKwkJIC0taW4tcmVwbHktdG89Ijxmb28uMTIzNDUuYXV0aG9yQGV4YW1wbGUuY29tPiIKKwkJIHBzdWgvdjIqCistLS0tCisKK1tbc2luZ2xlLXBhdGNoXV0KKz09PSBCb251cyBDaGFwdGVyOiBPbmUtUGF0Y2ggQ2hhbmdlcworCitJbiBzb21lIGNhc2VzLCB5b3VyIHZlcnkgc21hbGwgY2hhbmdlIG1heSBjb25zaXN0IG9mIG9ubHkgb25lIHBhdGNoLiBXaGVuIHRoYXQKK2hhcHBlbnMsIHlvdSBvbmx5IG5lZWQgdG8gc2VuZCBvbmUgZW1haWwuIFlvdXIgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGFscmVhZHkgYmUKK21lYW5pbmdmdWwgYW5kIGV4cGxhaW4gYXQgYSBoaWdoIGxldmVsIHRoZSBwdXJwb3NlICh3aGF0IGlzIGhhcHBlbmluZyBhbmQgd2h5KQorb2YgeW91ciBwYXRjaCwgYnV0IGlmIHlvdSBuZWVkIHRvIHN1cHBseSBldmVuIG1vcmUgY29udGV4dCwgeW91IGNhbiBkbyBzbyBiZWxvdwordGhlIGAtLS1gIGluIHlvdXIgcGF0Y2guIFRha2UgdGhlIGV4YW1wbGUgYmVsb3csIHdoaWNoIHdhcyBnZW5lcmF0ZWQgd2l0aCBgZ2l0Citmb3JtYXQtcGF0Y2hgIG9uIGEgc2luZ2xlIGNvbW1pdCwgYW5kIHRoZW4gZWRpdGVkIHRvIGFkZCB0aGUgY29udGVudCBiZXR3ZWVuCit0aGUgYC0tLWAgYW5kIHRoZSBkaWZmc3RhdC4KKworLS0tLQorRnJvbSAxMzQ1YmJiM2Y3YWM3NGFiZGUwNDBjMTJlNzM3MjA0Njg5YTcyNzIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSwgMTggQXByIDIwMTkgMTU6MTE6MDIgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gUkVBRE1FOiBjaGFuZ2UgdGhlIGdyYW1tYXIKKworSSB0aGluayBpdCBsb29rcyBiZXR0ZXIgdGhpcyB3YXkuIFRoaXMgcGFydCBvZiB0aGUgY29tbWl0IG1lc3NhZ2Ugd2lsbAorZW5kIHVwIGluIHRoZSBjb21taXQtbG9nLgorCitTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorLS0tCitMZXQncyBoYXZlIGEgd2lsZCBkaXNjdXNzaW9uIGFib3V0IGdyYW1tYXIgb24gdGhlIG1haWxpbmcgbGlzdC4gVGhpcworcGFydCBvZiBteSBlbWFpbCB3aWxsIG5ldmVyIGVuZCB1cCBpbiB0aGUgY29tbWl0IGxvZy4gSGVyZSBpcyB3aGVyZSBJCitjYW4gYWRkIGFkZGl0aW9uYWwgY29udGV4dCB0byB0aGUgbWFpbGluZyBsaXN0IGFib3V0IG15IGludGVudCwgb3V0c2lkZQorb2YgdGhlIGNvbnRleHQgb2YgdGhlIGNvbW1pdCBsb2cuIFRoaXMgc2VjdGlvbiB3YXMgYWRkZWQgYWZ0ZXIgYGdpdAorZm9ybWF0LXBhdGNoYCB3YXMgcnVuLCBieSBlZGl0aW5nIHRoZSBwYXRjaCBmaWxlIGluIGEgdGV4dCBlZGl0b3IuCisKKyBSRUFETUUubWQgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKK2luZGV4IDg4ZjEyNjE4NGMuLjM4ZGE1OTNhNjAgMTAwNjQ0CistLS0gYS9SRUFETUUubWQKKysrKyBiL1JFQURNRS5tZAorQEAgLTMsNyArMyw3IEBACisgR2l0IC0gZmFzdCwgc2NhbGFibGUsIGRpc3RyaWJ1dGVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy1HaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgorK0dpdCBpcyBhIGZhc3QsIHNjYWxhYmxlLCBhbmQgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgorIHVudXN1YWxseSByaWNoIGNvbW1hbmQgc2V0IHRoYXQgcHJvdmlkZXMgYm90aCBoaWdoLWxldmVsIG9wZXJhdGlvbnMKKyBhbmQgZnVsbCBhY2Nlc3MgdG8gaW50ZXJuYWxzLgorCistLQorMi4yMS4wLjM5Mi5nZjhmNjc4NzE1OWUtZ29vZworLS0tLQorCitbW25vdy13aGF0XV0KKz09IE15IFBhdGNoIEdvdCBFbWFpbGVkIC0gTm93IFdoYXQ/CisKK1tbcmV2aWV3aW5nXV0KKz09PSBSZXNwb25kaW5nIHRvIFJldmlld3MKKworQWZ0ZXIgYSBmZXcgZGF5cywgeW91IHdpbGwgaG9wZWZ1bGx5IHJlY2VpdmUgYSByZXBseSB0byB5b3VyIHBhdGNoc2V0IHdpdGggc29tZQorY29tbWVudHMuIFdvb2hvbyEgTm93IHlvdSBjYW4gZ2V0IGJhY2sgdG8gd29yay4KKworSXQncyBnb29kIG1hbm5lcnMgdG8gcmVwbHkgdG8gZWFjaCBjb21tZW50LCBub3RpZnlpbmcgdGhlIHJldmlld2VyIHRoYXQgeW91IGhhdmUKK21hZGUgdGhlIGNoYW5nZSByZXF1ZXN0ZWQsIGZlZWwgdGhlIG9yaWdpbmFsIGlzIGJldHRlciwgb3IgdGhhdCB0aGUgY29tbWVudAoraW5zcGlyZWQgeW91IHRvIGRvIHNvbWV0aGluZyBhIG5ldyB3YXkgd2hpY2ggaXMgc3VwZXJpb3IgdG8gYm90aCB0aGUgb3JpZ2luYWwKK2FuZCB0aGUgc3VnZ2VzdGVkIGNoYW5nZS4gVGhpcyB3YXkgcmV2aWV3ZXJzIGRvbid0IG5lZWQgdG8gaW5zcGVjdCB5b3VyIHYyIHRvCitmaWd1cmUgb3V0IHdoZXRoZXIgeW91IGltcGxlbWVudGVkIHRoZWlyIGNvbW1lbnQgb3Igbm90LgorCitJZiB5b3UgYXJlIGdvaW5nIHRvIHB1c2ggYmFjayBvbiBhIGNvbW1lbnQsIGJlIHBvbGl0ZSBhbmQgZXhwbGFpbiB3aHkgeW91IGZlZWwKK3lvdXIgb3JpZ2luYWwgaXMgYmV0dGVyOyBiZSBwcmVwYXJlZCB0aGF0IHRoZSByZXZpZXdlciBtYXkgc3RpbGwgZGlzYWdyZWUgd2l0aAoreW91LCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNvbW11bml0eSBtYXkgd2VpZ2ggaW4gb24gb25lIHNpZGUgb3IgdGhlIG90aGVyLiBBcword2l0aCBhbGwgY29kZSByZXZpZXdzLCBpdCdzIGltcG9ydGFudCB0byBrZWVwIGFuIG9wZW4gbWluZCB0byBkb2luZyBzb21ldGhpbmcgYQorZGlmZmVyZW50IHdheSB0aGFuIHlvdSBvcmlnaW5hbGx5IHBsYW5uZWQ7IG90aGVyIHJldmlld2VycyBoYXZlIGEgZGlmZmVyZW50CitwZXJzcGVjdGl2ZSBvbiB0aGUgcHJvamVjdCB0aGFuIHlvdSBkbywgYW5kIG1heSBiZSB0aGlua2luZyBvZiBhIHZhbGlkIHNpZGUKK2VmZmVjdCB3aGljaCBoYWQgbm90IG9jY3VycmVkIHRvIHlvdS4gSXQgaXMgYWx3YXlzIG9rYXkgdG8gYXNrIGZvciBjbGFyaWZpY2F0aW9uCitpZiB5b3UgYXJlbid0IHN1cmUgd2h5IGEgY2hhbmdlIHdhcyBzdWdnZXN0ZWQsIG9yIHdoYXQgdGhlIHJldmlld2VyIGlzIGFza2luZworeW91IHRvIGRvLgorCitNYWtlIHN1cmUgeW91ciBlbWFpbCBjbGllbnQgaGFzIGEgcGxhaW50ZXh0IGVtYWlsIG1vZGUgYW5kIGl0IGlzIHR1cm5lZCBvbjsgdGhlCitHaXQgbGlzdCByZWplY3RzIEhUTUwgZW1haWwuIFBsZWFzZSBhbHNvIGZvbGxvdyB0aGUgbWFpbGluZyBsaXN0IGV0aXF1ZXR0ZQorb3V0bGluZWQgaW4gdGhlCitodHRwczovL2tlcm5lbC5nb29nbGVzb3VyY2UuY29tL3B1Yi9zY20vZ2l0L2dpdC8rL3RvZG8vTWFpbnROb3Rlc1tNYWludGFpbmVyJ3MKK05vdGVdLCB3aGljaCBhcmUgc2ltaWxhciB0byBldGlxdWV0dGUgcnVsZXMgaW4gbW9zdCBvcGVuIHNvdXJjZSBjb21tdW5pdGllcworc3Vycm91bmRpbmcgYm90dG9tLXBvc3RpbmcgYW5kIGlubGluZSByZXBsaWVzLgorCitXaGVuIHlvdSdyZSBtYWtpbmcgY2hhbmdlcyB0byB5b3VyIGNvZGUsIGl0IGlzIGNsZWFuZXN0IC0gdGhhdCBpcywgdGhlIHJlc3VsdGluZworY29tbWl0cyBhcmUgZWFzaWVzdCB0byBsb29rIGF0IC0gaWYgeW91IHVzZSBgZ2l0IHJlYmFzZSAtaWAgKGludGVyYWN0aXZlCityZWJhc2UpLiBUYWtlIGEgbG9vayBhdCB0aGlzCitodHRwczovL3d3dy5vcmVpbGx5LmNvbS9saWJyYXJ5L3ZpZXcvZ2l0LXBvY2tldC1ndWlkZS85NzgxNDQ5MzI3NTA3L2NoMTAuaHRtbFtvdmVydmlld10KK2Zyb20gTydSZWlsbHkuIFRoZSBnZW5lcmFsIGlkZWEgaXMgdG8gbW9kaWZ5IGVhY2ggY29tbWl0IHdoaWNoIHJlcXVpcmVzIGNoYW5nZXM7Cit0aGlzIHdheSwgaW5zdGVhZCBvZiBoYXZpbmcgYSBwYXRjaCBBIHdpdGggYSBtaXN0YWtlLCBhIHBhdGNoIEIgd2hpY2ggd2FzIGZpbmUKK2FuZCByZXF1aXJlZCBubyB1cHN0cmVhbSByZXZpZXdzIGluIHYxLCBhbmQgYSBwYXRjaCBDIHdoaWNoIGZpeGVzIHBhdGNoIEEgZm9yCit2MiwgeW91IGNhbiBqdXN0IHNoaXAgYSB2MiB3aXRoIGEgY29ycmVjdCBwYXRjaCBBIGFuZCBjb3JyZWN0IHBhdGNoIEIuIFRoaXMgaXMKK2NoYW5naW5nIGhpc3RvcnksIGJ1dCBzaW5jZSBpdCdzIGxvY2FsIGhpc3Rvcnkgd2hpY2ggeW91IGhhdmVuJ3Qgc2hhcmVkIHdpdGgKK2FueW9uZSwgdGhhdCBpcyBva2F5IGZvciBub3chIChMYXRlciwgaXQgbWF5IG5vdCBtYWtlIHNlbnNlIHRvIGRvIHRoaXM7IHRha2UgYQorbG9vayBhdCB0aGUgc2VjdGlvbiBiZWxvdyB0aGlzIG9uZSBmb3Igc29tZSBjb250ZXh0LikKKworW1thZnRlci1hcHByb3ZhbF1dCis9PT0gQWZ0ZXIgUmV2aWV3IEFwcHJvdmFsCisKK1RoZSBHaXQgcHJvamVjdCBoYXMgZm91ciBpbnRlZ3JhdGlvbiBicmFuY2hlczogYHB1YCwgYG5leHRgLCBgbWFzdGVyYCwgYW5kCitgbWFpbnRgLiBZb3VyIGNoYW5nZSB3aWxsIGJlIHBsYWNlZCBpbnRvIGBwdWAgZmFpcmx5IGVhcmx5IG9uIGJ5IHRoZSBtYWludGFpbmVyCit3aGlsZSBpdCBpcyBzdGlsbCBpbiB0aGUgcmV2aWV3IHByb2Nlc3M7IGZyb20gdGhlcmUsIHdoZW4gaXQgaXMgcmVhZHkgZm9yIHdpZGVyCit0ZXN0aW5nLCBpdCB3aWxsIGJlIG1lcmdlZCBpbnRvIGBuZXh0YC4gUGxlbnR5IG9mIGVhcmx5IHRlc3RlcnMgdXNlIGBuZXh0YCBhbmQKK21heSByZXBvcnQgaXNzdWVzLiBFdmVudHVhbGx5LCBjaGFuZ2VzIGluIGBuZXh0YCB3aWxsIG1ha2UgaXQgdG8gYG1hc3RlcmAsCit3aGljaCBpcyB0eXBpY2FsbHkgY29uc2lkZXJlZCBzdGFibGUuIEZpbmFsbHksIHdoZW4gYSBuZXcgcmVsZWFzZSBpcyBjdXQsCitgbWFpbnRgIGlzIHVzZWQgdG8gYmFzZSBidWdmaXhlcyBvbnRvLiBBcyBtZW50aW9uZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzCitkb2N1bWVudCwgeW91IGNhbiByZWFkIGBEb2N1bWVudHMvU3VibWl0dGluZ1BhdGNoZXNgIGZvciBzb21lIG1vcmUgaW5mbyBhYm91dAordGhlIHVzZSBvZiB0aGUgdmFyaW91cyBpbnRlZ3JhdGlvbiBicmFuY2hlcy4KKworQmFjayB0byBub3c6IHlvdXIgY29kZSBoYXMgYmVlbiBsYXVkZWQgYnkgdGhlIHVwc3RyZWFtIHJldmlld2Vycy4gSXQgaXMgcGVyZmVjdC4KK0l0IGlzIHJlYWR5IHRvIGJlIGFjY2VwdGVkLiBZb3UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBlbHNlOyB0aGUgbWFpbnRhaW5lcgord2lsbCBtZXJnZSB5b3VyIHRvcGljIGJyYW5jaCB0byBgbmV4dGAgYW5kIGxpZmUgaXMgZ29vZC4KKworSG93ZXZlciwgaWYgeW91IGRpc2NvdmVyIGl0IGlzbid0IHNvIHBlcmZlY3QgYWZ0ZXIgdGhpcyBwb2ludCwgeW91IG1heSBuZWVkIHRvCit0YWtlIHNvbWUgc3BlY2lhbCBzdGVwcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IGFyZSBpbiB0aGUgcHJvY2Vzcy4KKworSWYgdGhlIG1haW50YWluZXIgaGFzIGFubm91bmNlZCBpbiB0aGUgIldoYXQncyBjb29raW5nIGluIGdpdC5naXQiIGVtYWlsIHRoYXQKK3lvdXIgdG9waWMgaXMgbWFya2VkIGZvciBgbmV4dGAgLSB0aGF0IGlzLCB0aGF0IHRoZXkgcGxhbiB0byBtZXJnZSBpdCB0byBgbmV4dGAKK2J1dCBoYXZlIG5vdCB5ZXQgZG9uZSBzbyAtIHlvdSBzaG91bGQgc2VuZCBhbiBlbWFpbCBhc2tpbmcgdGhlIG1haW50YWluZXIgdG8KK3dhaXQgYSBsaXR0bGUgbG9uZ2VyOiAiSSd2ZSBzZW50IHY0IG9mIG15IHNlcmllcyBhbmQgeW91IG1hcmtlZCBpdCBmb3IgYG5leHRgLAorYnV0IEkgbmVlZCB0byBjaGFuZ2UgdGhpcyBhbmQgdGhhdCAtIHBsZWFzZSB3YWl0IGZvciB2NSBiZWZvcmUgeW91IG1lcmdlIGl0LiIKKworSWYgdGhlIHRvcGljIGhhcyBhbHJlYWR5IGJlZW4gbWVyZ2VkIHRvIGBuZXh0YCwgcmF0aGVyIHRoYW4gbW9kaWZ5aW5nIHlvdXIKK3BhdGNoZXMgd2l0aCBgZ2l0IHJlYmFzZSAtaWAsIHlvdSBzaG91bGQgbWFrZSBmdXJ0aGVyIGNoYW5nZXMgaW5jcmVtZW50YWxseSAtCit0aGF0IGlzLCB3aXRoIGFub3RoZXIgY29tbWl0LCBiYXNlZCBvbiB0b3Agb2YgdGhlIG1haW50YWluZXIncyB0b3BpYyBicmFuY2ggYXMKK2RldGFpbGVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRzdGVyL2dpdC4gWW91ciB3b3JrIGlzIHN0aWxsIGluIHRoZSBzYW1lIHRvcGljCitidXQgaXMgbm93IGluY3JlbWVudGFsLCByYXRoZXIgdGhhbiBhIHdob2xlc2FsZSByZXdyaXRlIG9mIHRoZSB0b3BpYyBicmFuY2guCisKK1RoZSB0b3BpYyBicmFuY2hlcyBpbiB0aGUgbWFpbnRhaW5lcidzIEdpdEh1YiBhcmUgbWlycm9yZWQgaW4gR2l0R2l0R2FkZ2V0LCBzbworaWYgeW91J3JlIHNlbmRpbmcgeW91ciByZXZpZXdzIG91dCB0aGF0IHdheSwgeW91IHNob3VsZCBiZSBzdXJlIHRvIG9wZW4geW91ciBQUgorYWdhaW5zdCB0aGUgYXBwcm9wcmlhdGUgR2l0R2l0R2FkZ2V0L0dpdCBicmFuY2guCisKK0lmIHlvdSdyZSB1c2luZyBgZ2l0IHNlbmQtZW1haWxgLCB5b3UgY2FuIHVzZSBpdCB0aGUgc2FtZSB3YXkgYXMgYmVmb3JlLCBidXQgeW91CitzaG91bGQgZ2VuZXJhdGUgeW91ciBkaWZmcyBmcm9tIGA8dG9waWM+Li48bXlicmFuY2g+YCBhbmQgYmFzZSB5b3VyIHdvcmsgb24KK2A8dG9waWM+YCBpbnN0ZWFkIG9mIGBtYXN0ZXJgLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjEudHh0CmluZGV4IDgxOTg3OWQuLjc2ZGQ4ZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMi4xLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMS50eHQKQEAgLTczLDQgKzczLDc1IEBACiAgKiBUaGUgbGlzdCBvZiBmb3ItZWFjaCBsaWtlIG1hY3JvcyB1c2VkIGJ5IGNsYW5nLWZvcm1hdCBoYXMgYmVlbgogICAgdXBkYXRlZC4KIAotQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisgKiAiZ2l0IHB1c2ggLS1hdG9taWMiIHRoYXQgZ29lcyBvdmVyIHRoZSB0cmFuc3BvcnQtaGVscGVyIChuYW1lbHksCisgICB0aGUgc21hcnQgaHR0cCB0cmFuc3BvcnQpIGZhaWxlZCB0byBwcmV2ZW50IHJlZnMgdG8gYmUgcHVzaGVkIHdoZW4KKyAgIGl0IGNhbiBsb2NhbGx5IHRlbGwgdGhhdCBvbmUgb2YgdGhlIHJlZiB1cGRhdGUgd2lsbCBmYWlsIHdpdGhvdXQKKyAgIGhhdmluZyB0byBjb25zdWx0IHRoZSBvdGhlciBlbmQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBjbGVhbiIgc2lsZW50bHkgc2tpcHBlZCBhIHBhdGggd2hlbiBpdCBjYW5ub3QgbHN0YXQoKSBpdDsgbm93CisgICBpdCBnaXZlcyBhIHdhcm5pbmcuCisKKyAqIEEgY29kZXBhdGggdGhhdCByZWFkcyBmcm9tIEdQRyBmb3Igc2lnbmVkIG9iamVjdCB2ZXJpZmljYXRpb24gcmVhZAorICAgcGFzdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCBidWZmZXIsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IHJtIiB0byByZXNvbHZlIGEgY29uZmxpY3RlZCBwYXRoIGxlYWtlZCBhbiBpbnRlcm5hbCBtZXNzYWdlCisgICAibmVlZHMgbWVyZ2UiIGJlZm9yZSBhY3R1YWxseSByZW1vdmluZyB0aGUgcGF0aCwgd2hpY2ggd2FzCisgICBjb25mdXNpbmcuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlICJnaXQgY2xvbmUiIGRvY3VtZW50YXRpb24gcmVmZXJzIHRvIGNvbW1hbmQgbGluZSBvcHRpb25zIGluIGl0cworICAgZGVzY3JpcHRpb24gaW4gdGhlIHNob3J0IGZvcm07IHRoZXkgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggbG9uZworICAgZm9ybXMgdG8gbWFrZSB0aGVtIG1vcmUgcmVjb2duaXNhYmxlLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSByZWJhc2UucmVzY2hlZHVsZUZhaWxlZEV4ZWMgc2hvdWxkIGJlCisgICBlZmZlY3RpdmUgb25seSB3aGlsZSBydW5uaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSBhbmQgc2hvdWxkIG5vdAorICAgYWZmZWN0IGFueXRoaW5nIHdoZW4gcnVubmluZyBhIG5vbi1pbnRlcmFjdGl2ZSBvbmUsIHdoaWNoIHdhcyBub3QKKyAgIHRoZSBjYXNlLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgc3VibW9kdWxlIGZvcmVhY2giIGRpZCBub3QgcHJvdGVjdCBjb21tYW5kIGxpbmUgb3B0aW9ucyBwYXNzZWQKKyAgIHRvIHRoZSBjb21tYW5kIHRvIGJlIHJ1biBpbiBlYWNoIHN1Ym1vZHVsZSBjb3JyZWN0bHksIHdoZW4gdGhlCisgICAiLS1yZWN1cnNpdmUiIG9wdGlvbiB3YXMgaW4gdXNlLgorCisgKiBVc2UgIkVyYXNlIGluIExpbmUiIENTSSBzZXF1ZW5jZSB0aGF0IGlzIGFscmVhZHkgdXNlZCBpbiB0aGUgZWRpdG9yCisgICBzdXBwb3J0IHRvIGNsZWFyIGNydWZ0IGluIHRoZSBwcm9ncmVzcyBvdXRwdXQuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBjb21wdXRlIGRlbHRhIGlzbGFuZHMgdXNlZCB0byBzcGV3IHByb2dyZXNzIG91dHB1dAorICAgd2l0aG91dCBnaXZpbmcgdGhlIGNhbGxlcnMgYW55IHdheSB0byBzcXVlbGNoIGl0LCB3aGljaCBoYXMgYmVlbgorICAgZml4ZWQuCisKKyAqIFRoZSBjb2RlIHRvIHBhcnNlIHNjYWxlZCBudW1iZXJzIG91dCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGhhcworICAgYmVlbiBtYWRlIG1vcmUgcm9idXN0IGFuZCBhbHNvIGVhc2llciB0byBmb2xsb3cuCisKKyAqIEFuIGluY29ycmVjdCBsaXN0IG9mIG9wdGlvbnMgd2FzIGNhY2hlZCBhZnRlciBjb21tYW5kIGxpbmUKKyAgIGNvbXBsZXRpb24gZmFpbGVkIChlLmcuIHRyeWluZyB0byBjb21wbGV0ZSBhIGNvbW1hbmQgdGhhdCByZXF1aXJlcworICAgYSByZXBvc2l0b3J5IG91dHNpZGUgb25lKSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtLWFib3J0IiB1c2VkIHRvIGxlYXZlIHJlZnMvcmV3cml0dGVuLyB3aGVuIGNvbmNsdWRpbmcKKyAgICJnaXQgcmViYXNlIC1yIiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHN0YXNoIHNob3cgMjMiIHVzZWQgdG8gd29yaywgYnV0IG5vIG1vcmUgYWZ0ZXIgZ2V0dGluZworICAgcmV3cml0dGVuIGluIEM7IHRoaXMgcmVncmVzc2lvbiBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIiBhbHdheXMgdHJlYXRlZCAnIycgYXMgdGhlIGNvbW1lbnQKKyAgIGNoYXJhY3RlciwgcmVnYXJkbGVzcyBvZiBjb3JlLmNvbW1lbnRDaGFyIHNldHRpbmcsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIENvZGUgY2xlYW4tdXAgdG8gYXZvaWQgc2lnbmVkIGludGVnZXIgb3ZlcmxhcHMgZHVyaW5nIGJpbmFyeSBzZWFyY2guCisKKyAqICJnaXQgY2hlY2tvdXQgLXAiIG5lZWRzIHRvIHNlbGVjdGl2ZWx5IGFwcGx5IGEgcGF0Y2ggaW4gcmV2ZXJzZSwKKyAgIHdoaWNoIGRpZCBub3Qgd29yayB3ZWxsLgorCisgKiBUaGUgY29tbWl0LWdyYXBoIGZpbGUgaXMgbm93IHBhcnQgb2YgdGhlICJmaWxlcyB0aGF0IHRoZSBydW50aW1lCisgICBtYXkga2VlcCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgb24sIGFsbCBvZiB3aGljaCB3b3VsZCBuZWVkIHRvIGJlCisgICBjbG9zZWQgd2hlbiBkb25lIHdpdGggdGhlIG9iamVjdCBzdG9yZSIsIGFuZCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvCisgICBhbiBleGlzdGluZyBjb21taXQtZ3JhcGggZmlsZSBub3cgaXMgY2xvc2VkIGJlZm9yZSAiZ2MiIGZpbmFsaXplcyBhCisgICBuZXcgaW5zdGFuY2UgdG8gcmVwbGFjZSBpdC4KKworICogQ29kZSByZXN0cnVjdHVyaW5nIGR1cmluZyAyLjIwIHBlcmlvZCBicm9rZSBmZXRjaGluZyB0YWdzIHZpYQorICAgImltcG9ydCIgYmFzZWQgdHJhbnNwb3J0cy4KKworICogV2UgaGF2ZSBiZWVuIHRyeWluZyBvdXQgYSBmZXcgbGFuZ3VhZ2UgZmVhdHVyZXMgb3V0c2lkZSBjODk7IHRoZQorICAgY29kaW5nIGd1aWRlbGluZXMgZG9jdW1lbnQgZGlkIG5vdCB0YWxrIGFib3V0IHRoZW0gYW5kIGluc3RlYWQgaGFkCisgICBhIGJsYW5rZXQgYmFuIGFnYWluc3QgdGhlbS4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBjb2RlIGNsZWFuLXVwcyBhbmQgbWlub3IgZml4dXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzhjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMC50eHQKQEAgLTAsMCArMSwzNDcgQEAKK0dpdCAyLjIzIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi4yMgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGUKKworICogVGhlICItLWJhc2UiIG9wdGlvbiBvZiAiZm9ybWF0LXBhdGNoIiBjb21wdXRlZCB0aGUgcGF0Y2gtaWRzIGZvcgorICAgcHJlcmVxdWlzaXRlIHBhdGNoZXMgaW4gYW4gdW5zdGFibGUgd2F5LCB3aGljaCBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBjb21wdXRlIGluIGEgd2F5IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoICJnaXQgcGF0Y2gtaWQgLS1zdGFibGUiLgorCisgKiBUaGUgImdpdCBsb2ciIGNvbW1hbmQgYnkgZGVmYXVsdCBiZWhhdmVzIGFzIGlmIHRoZSAtLW1haWxtYXAgb3B0aW9uCisgICB3YXMgZ2l2ZW4uCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFRoZSAiZ2l0IGZhc3QtZXhwb3J0L2ltcG9ydCIgcGFpciBoYXMgYmVlbiB0YXVnaHQgdG8gaGFuZGxlIGNvbW1pdHMKKyAgIHdpdGggbG9nIG1lc3NhZ2VzIGluIGVuY29kaW5nIG90aGVyIHRoYW4gVVRGLTggYmV0dGVyLgorCisgKiBJbiByZWNlbnQgdmVyc2lvbnMgb2YgR2l0LCBwZXItd29ya3RyZWUgcmVmcyBhcmUgZXhwb3NlZCBpbgorICAgcmVmcy93b3JrdHJlZXMvPHd0bmFtZT4vIGhpZXJhcmNoeSwgd2hpY2ggbWVhbnMgdGhhdCB3b3JrdHJlZSBuYW1lcworICAgbXVzdCBiZSBhIHZhbGlkIHJlZm5hbWUgY29tcG9uZW50LiAgVGhlIGNvZGUgbm93IHNhbml0aXplcyB0aGUgbmFtZXMKKyAgIGdpdmVuIHRvIHdvcmt0cmVlcywgdG8gbWFrZSBzdXJlIHRoZXNlIHJlZnMgYXJlIHdlbGwtZm9ybWVkLgorCisgKiAiZ2l0IG1lcmdlIiBsZWFybmVkICItLXF1aXQiIG9wdGlvbiB0aGF0IGNsZWFucyB1cCB0aGUgaW4tcHJvZ3Jlc3MKKyAgIG1lcmdlIHdoaWxlIGxlYXZpbmcgdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IHN0aWxsIGluIGEgbWVzcy4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJucyBhIGNvbmZpZ3VyYXRpb24gdG8gc2V0IHRoZSBkZWZhdWx0IGZvcgorICAgaXRzIC0tbm90ZXM9PHJlZj4gb3B0aW9uLgorCisgKiBUaGUgY29kZSB0byBzaG93IGFyZ3Mgd2l0aCBwb3RlbnRpYWwgdHlwbyB0aGF0IGNhbm5vdCBiZQorICAgaW50ZXJwcmV0ZWQgYXMgYSBjb21taXQtaXNoIGhhcyBiZWVuIGltcHJvdmVkLgorCisgKiAiZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBsZWFybmVkIHRvIHNldCB1cCB0aGUgc3VibW9kdWxlcworICAgdG8gaWdub3JlIGNvbW1pdCBvYmplY3QgbmFtZXMgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCBnaXRsaW5rCisgICBhbmQgaW5zdGVhZCB1c2UgdGhlIGNvbW1pdHMgdGhhdCBoYXBwZW4gdG8gYmUgYXQgdGhlIHRpcCBvZiB0aGUKKyAgIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBmcm9tIHRoZSBnZXQtZ28sIGJ5IHBhc3NpbmcgdGhlIG5ldworICAgIi0tcmVtb3RlLXN1Ym1vZHVsZXMiIG9wdGlvbi4KKworICogVGhlIHBhdHRlcm4gImdpdCBkaWZmL2dyZXAiIHVzZSB0byBleHRyYWN0IGZ1bmNuYW1lIGFuZCB3b3JkcworICAgYm91bmRhcnkgZm9yIE1hdGxhYiBoYXMgYmVlbiBleHRlbmQgdG8gY292ZXIgT2N0YXZlLCB3aGljaCBpcyBtb3JlCisgICBvciBsZXNzIGVxdWl2YWxlbnQuCisKKyAqICJnaXQgaGVscCBnaXQiIHdhcyBoYXJkIHRvIGRpc2NvdmVyICh3ZWxsLCBhdCBsZWFzdCBmb3Igc29tZQorICAgcGVvcGxlKS4KKworICogVGhlIHBhdHRlcm4gImdpdCBkaWZmL2dyZXAiIHVzZSB0byBleHRyYWN0IGZ1bmNuYW1lIGFuZCB3b3JkcworICAgYm91bmRhcnkgZm9yIFJ1c3QgaGFzIGJlZW4gYWRkZWQuCisKKyAqICJnaXQgc3RhdHVzIiBjYW4gYmUgdG9sZCBhIG5vbi1zdGFuZGFyZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUKKyAgICItLVtuby1dYWhlYWQtYmVoaW5kIiBvcHRpb24gd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICBzdGF0dXMuYWhlYWRCZWhpbmQuCisKKyAqICJnaXQgZmV0Y2giIGFuZCAiZ2l0IHB1bGwiIHJlcG9ydHMgd2hlbiBhIGZldGNoIHJlc3VsdHMgaW4KKyAgIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcyB0byBsZXQgdGhlIHVzZXIgbm90aWNlIHVudXN1YWwgc2l0dWF0aW9uLgorICAgVGhlIGNvbW1hbmRzIGxlYXJuZWQgIi0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcyIgb3B0aW9uIHRvIGRpc2FibGUKKyAgIHRoaXMgc2FmZXR5IGZlYXR1cmUuCisKKyAqIFR3byBuZXcgY29tbWFuZHMgImdpdCBzd2l0Y2giIGFuZCAiZ2l0IHJlc3RvcmUiIGFyZSBpbnRyb2R1Y2VkIHRvCisgICBzcGxpdCAiY2hlY2tpbmcgb3V0IGEgYnJhbmNoIHRvIHdvcmsgb24gYWR2YW5jaW5nIGl0cyBoaXN0b3J5IiBhbmQKKyAgICJjaGVja2luZyBvdXQgcGF0aHMgb3V0IG9mIHRoZSBpbmRleCBhbmQvb3IgYSB0cmVlLWlzaCB0byB3b3JrIG9uCisgICBhZHZhbmNpbmcgdGhlIGN1cnJlbnQgaGlzdG9yeSIgb3V0IG9mIHRoZSBzaW5nbGUgImdpdCBjaGVja291dCIKKyAgIGNvbW1hbmQuCisKKyAqICJnaXQgYnJhbmNoIC0tbGlzdCIgbGVhcm5lZCB0byBhbHdheXMgb3V0cHV0IHRoZSBkZXRhY2hlZCBIRUFEIGFzCisgICB0aGUgZmlyc3QgaXRlbSAod2hlbiB0aGUgSEVBRCBpcyBkZXRhY2hlZCwgb2YgY291cnNlKSwgcmVnYXJkbGVzcworICAgb2YgdGhlIGxvY2FsZS4KKworICogVGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBtZWNoYW5pc20gbGVhcm5lZCB0byBiYXNlIHRoZSBjaG9pY2Ugb24KKyAgIHRoZSBicmFuY2ggdGhlIEhFQUQgY3VycmVudGx5IGlzIG9uLgorCisgKiAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyIgbGVhcm5lZCB0aGUgIi0tbm8tb2JqZWN0LW5hbWVzIiBvcHRpb24gdG8KKyAgIHNxdWVsY2ggdGhlIHBhdGggdG8gdGhlIG9iamVjdCB0aGF0IGlzIHVzZWQgYXMgYSBncm91cGluZyBoaW50IGZvcgorICAgcGFjay1vYmplY3RzLgorCisgKiBBIG5ldyB0YWcuZ3BnU2lnbiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHR1cm5zICJnaXQgdGFnIC1hIiBpbnRvCisgICAiZ2l0IHRhZyAtcyIuCisKKyAqICJnaXQgbXVsdGktcGFjay1pbmRleCIgbGVhcm5lZCBleHBpcmUgYW5kIHJlcGFjayBzdWJjb21tYW5kcy4KKworICogImdpdCBibGFtZSIgbGVhcm5lZCB0byAiaWdub3JlIiBjb21taXRzIGluIHRoZSBoaXN0b3J5LCB3aG9zZQorICAgZWZmZWN0cyAoYXMgd2VsbCBhcyB0aGVpciBwcmVzZW5jZSkgZ2V0IGlnbm9yZWQuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2svcmV2ZXJ0IiBsZWFybmVkIGEgbmV3ICItLXNraXAiIGFjdGlvbi4KKworICogVGhlIHRpcHMgb2YgcmVmcyBmcm9tIHRoZSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIGNhbiBiZSB1c2VkIGFzCisgICBzdGFydGluZyBwb2ludCBmb3IgcmVhY2hhYmlsaXR5IGNvbXB1dGF0aW9uIG5vdy4KKworICogRXh0cmEgYmxhbmsgbGluZXMgaW4gImdpdCBzdGF0dXMiIG91dHB1dCBoYXZlIGJlZW4gcmVkdWNlZC4KKworICogVGhlIGNvbW1pdHMgaW4gYSByZXBvc2l0b3J5IGNhbiBiZSBkZXNjcmliZWQgYnkgbXVsdGlwbGUKKyAgIGNvbW1pdC1ncmFwaCBmaWxlcyBub3csIHdoaWNoIGFsbG93cyB0aGUgY29tbWl0LWdyYXBoIGZpbGVzIHRvIGJlCisgICB1cGRhdGVkIGluY3JlbWVudGFsbHkuCisKKyAqICJnaXQgcmFuZ2UtZGlmZiIgb3V0cHV0IGhhcyBiZWVuIHR3ZWFrZWQgZm9yIGVhc2llciBpZGVudGlmaWNhdGlvbgorICAgb2Ygd2hpY2ggcGFydCBvZiB3aGF0IGZpbGUgdGhlIHBhdGNoIHNob3duIGlzIGFib3V0LgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFVwZGF0ZSBzdXBwb3J0aW5nIHBhcnRzIG9mICJnaXQgcmViYXNlIiB0byByZW1vdmUgY29kZSB0aGF0IHNob3VsZAorICAgbm8gbG9uZ2VyIGJlIHVzZWQuCisKKyAqIERldmVsb3BlciBzdXBwb3J0IHRvIGVtdWxhdGUgdW5zYXRpc2ZpZWQgcHJlcmVxdWlzaXRlcyBpbiB0ZXN0cyB0bworICAgZW5zdXJlIHRoYXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVzdHMgc3RpbGwgc3VjY2VlZHMgd2hlbiB0ZXN0cworICAgd2l0aCBwcmVyZXF1aXNpdGVzIGFyZSBza2lwcGVkLgorCisgKiAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyIgbGVhcm5lZCBub3QgdG8gcmV3cml0ZSB0aGUgZmlsZSB3aXRoIHRoZQorICAgc2FtZSBjb250ZW50cy4KKworICogVGhlIHdheSBvZiBzcGVjaWZ5aW5nIHRoZSBwYXRoIHRvIGZpbmQgZHluYW1pYyBsaWJyYXJpZXMgYXQgcnVudGltZQorICAgaGFzIGJlZW4gc2ltcGxpZmllZC4gIFRoZSBvbGQgZGVmYXVsdCB0byBwYXNzIC1SL3BhdGgvdG8vZGlyIGhhcyBiZWVuCisgICByZXBsYWNlZCB3aXRoIHRoZSBuZXcgZGVmYXVsdCB0byBwYXNzIC1XbCwtcnBhdGgsL3BhdGgvdG8vZGlyLAorICAgd2hpY2ggaXMgdGhlIG1vcmUgcmVjZW50IEdDQyB1c2VzLiAgVGhvc2Ugd2hvIG5lZWQgdG8gYnVpbGQgd2l0aCBhbgorICAgb2xkIEdDQyBjYW4gc3RpbGwgdXNlICJDQ19MRF9EWU5QQVRIPS1SIgorCisgKiBQcmVwYXJlIHVzZSBvZiByZWFjaGFiaWxpdHkgaW5kZXggaW4gdG9wb2xvZ2ljYWwgd2Fsa2VyIHRoYXQgd29ya3MKKyAgIG9uIGEgcmFuZ2UgKEEuLkIpLgorCisgKiBBIG5ldyB0dXRvcmlhbCB0YXJnZXRpbmcgc3BlY2lmaWNhbGx5IGFzcGlyaW5nIGdpdC1jb3JlCisgICBkZXZlbG9wZXJzIGhhcyBiZWVuIGFkZGVkLgorCisgKiBBdXRvLWRldGVjdCBob3cgdG8gdGVsbCBIUC1VWCBhQ0Mgd2hlcmUgdG8gdXNlIGR5bmFtaWNhbGx5IGxpbmtlZAorICAgbGlicmFyaWVzIGZyb20gYXQgcnVudGltZS4KKworICogImdpdCBtZXJnZXRvb2wiIGFuZCBpdHMgdGVzdHMgbm93IHNwYXduIGZld2VyIHN1YnByb2Nlc3Nlcy4KKworICogRGV2IHN1cHBvcnQgdXBkYXRlIHRvIGhlbHAgdHJhY2luZyBvdXQgdGVzdHMuCisKKyAqIFN1cHBvcnQgdG8gYnVpbGQgd2l0aCBNU1ZDIGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqICJnaXQgZmV0Y2giIHRoYXQgZ3JhYnMgZnJvbSBhIGdyb3VwIG9mIHJlbW90ZXMgbGVhcm5lZCB0byBydW4gdGhlCisgICBhdXRvLWdjIG9ubHkgb25jZSBhdCB0aGUgdmVyeSBlbmQuCisKKyAqIEEgaGFuZGZ1bCBvZiBXaW5kb3dzIGJ1aWxkIHBhdGNoZXMgaGF2ZSBiZWVuIHVwc3RyZWFtZWQuCisKKyAqIFRoZSBjb2RlIHRvIHJlYWQgc3RhdGUgZmlsZXMgdXNlZCBieSB0aGUgc2VxdWVuY2VyIG1hY2hpbmVyeSBmb3IKKyAgICJnaXQgc3RhdHVzIiBoYXMgYmVlbiBtYWRlIG1vcmUgcm9idXN0IGFnYWluc3QgYSBjb3JydXB0IG9yIHN0YWxlCisgICBzdGF0ZSBmaWxlcy4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIHdpdGggbXVsdGlwbGUgcGF0dGVybnMgaGF2ZSBiZWVuIG9wdGltaXplZC4KKworICogVGhlIHRyZWUtd2FsayBBUEkgbGVhcm5lZCB0byBwYXNzIGFuIGluLWNvcmUgcmVwb3NpdG9yeQorICAgaW5zdGFuY2UgdGhyb3VnaG91dCBtb3JlIGNvZGVwYXRocy4KKworICogV2hlbiBvbmUgc3RlcCBpbiBtdWx0aSBzdGVwIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyByZXNldCBvcgorICAgY29tbWl0dGVkLCB0aGUgY29tbWFuZCBsaW5lIHByb21wdCBzY3JpcHQgZmFpbGVkIHRvIG5vdGljZSB0aGUKKyAgIGN1cnJlbnQgc3RhdHVzLCB3aGljaCBoYXMgYmVlbiBpbXByb3ZlZC4KKworICogTWFueSBHSVRfVEVTVF8qIGVudmlyb25tZW50IHZhcmlhYmxlcyBjb250cm9sIHZhcmlvdXMgYXNwZWN0cyBvZgorICAgaG93IG91ciB0ZXN0cyBhcmUgcnVuLCBidXQgYSBmZXcgZm9sbG93ZWQgIm5vbi1lbXB0eSBpcyB0cnVlLCBlbXB0eQorICAgb3IgdW5zZXQgaXMgZmFsc2UiIHdoaWxlIG90aGVycyBmb2xsb3dlZCB0aGUgdXN1YWwgInRoZXJlIGFyZSBhIGZldworICAgd2F5cyB0byBzcGVsbCB0cnVlLCBsaWtlIHllcywgb24sIGV0Yy4sIGFuZCBhbHNvIHdheXMgdG8gc3BlbGwKKyAgIGZhbHNlLCBsaWtlIG5vLCBvZmYsIGV0Yy4iIGNvbnZlbnRpb24uCisKKyAqIEFkanVzdCB0aGUgZGlyLWl0ZXJhdG9yIEFQSSBhbmQgYXBwbHkgaXQgdG8gdGhlIGxvY2FsIGNsb25lCisgICBvcHRpbWl6YXRpb24gY29kZXBhdGguCisKKyAqIFdlIGhhdmUgYmVlbiB0cnlpbmcgb3V0IGEgZmV3IGxhbmd1YWdlIGZlYXR1cmVzIG91dHNpZGUgYzg5OyB0aGUKKyAgIGNvZGluZyBndWlkZWxpbmVzIGRvY3VtZW50IGRpZCBub3QgdGFsayBhYm91dCB0aGVtIGFuZCBpbnN0ZWFkIGhhZAorICAgYSBibGFua2V0IGJhbiBhZ2FpbnN0IHRoZW0uCisKKyAqIEEgdGVzdCBoZWxwZXIgaGFzIGJlZW4gaW50cm9kdWNlZCB0byBvcHRpbWl6ZSBwcmVwYXJhdGlvbiBvZiB0ZXN0CisgICByZXBvc2l0b3JpZXMgd2l0aCBtYW55IHNpbXBsZSBjb21taXRzLCBhbmQgYSBoYW5kZnVsIG9mIHRlc3QKKyAgIHNjcmlwdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIGl0LgorCisKK0ZpeGVzIHNpbmNlIHYyLjIyCistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIHJlbGF0aXZlIHBhdGhuYW1lIGdpdmVuIHRvICJnaXQgaW5pdCAtLXRlbXBsYXRlPTxwYXRoPiA8cmVwbz4iCisgICBvdWdodCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5ICJnaXQgaW5pdCIgZ2V0cyBpbnZva2VkIGluLAorICAgYnV0IGl0IGluc3RlYWQgd2FzIG1hZGUgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnksIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqICJnaXQgd29ya3RyZWUgYWRkIiB1c2VkIHRvIGZhaWwgd2hlbiBhbm90aGVyIHdvcmt0cmVlIGNvbm5lY3RlZCB0bworICAgdGhlIHNhbWUgcmVwb3NpdG9yeSB3YXMgY29ycnVwdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgb3duZXJzaGlwIHJ1bGUgZm9yIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gZmFzdC1pbXBvcnQgcmVtb3RlCisgICBiYWNrZW5kIHdhcyBtaXhlZCB1cCwgbGVhZGluZyB0byBhbiB1bnJlbGF0ZWQgZmlsZSBkZXNjcmlwdG9yIGdldHRpbmcKKyAgIGNsb3NlZCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIEEgIm1lcmdlIC1jIiBpbnN0cnVjdGlvbiBkdXJpbmcgImdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIiBzaG91bGQKKyAgIGdpdmUgdGhlIHVzZXIgYSBjaGFuY2UgdG8gZWRpdCB0aGUgbG9nIG1lc3NhZ2UsIGV2ZW4gd2hlbiB0aGVyZSBpcworICAgb3RoZXJ3aXNlIG5vIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG1lcmdlIGFuZCByZXBsYWNlIHRoZSBleGlzdGluZworICAgb25lIChpLmUuIGZhc3QtZm9yd2FyZCBpbnN0ZWFkKSwgYnV0IGRpZCBub3QuICBXaGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBDb2RlIGNsZWFudXAgYW5kIGZ1dHVyZXByb29mLgorCisgKiBNb3JlIHBhcmFtZXRlciB2YWxpZGF0aW9uLgorCisgKiAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyIgdXNlZCB0byBsZWF2ZSBzdGFsZSBwYWNrZmlsZXMgaW4gaXRzCisgICBvdXRwdXQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIHNlcnZlciBzaWRlIHN1cHBvcnQgZm9yICJnaXQgZmV0Y2giIHVzZWQgdG8gc2hvdyBpbmNvcnJlY3QKKyAgIHZhbHVlIGZvciB0aGUgSEVBRCBzeW1ib2xpYyByZWYgd2hlbiB0aGUgbmFtZXNwYWNlIGZlYXR1cmUgaXMgaW4KKyAgIHVzZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGFtIC1pIC0tcmVzb2x2ZWQiIHNlZ2ZhdWx0ZWQgYWZ0ZXIgdHJ5aW5nIHRvIHNlZSBhIGNvbW1pdCBhcworICAgaWYgaXQgd2VyZSBhIHRyZWUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBidW5kbGUgdmVyaWZ5IiBuZWVkcyB0byBzZWUgaWYgcHJlcmVxdWlzaXRlIG9iamVjdHMgZXhpc3QgaW4KKyAgIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSwgYnV0IHRoZSBjb21tYW5kIGRpZCBub3QgY2hlY2sgaWYgd2UgYXJlCisgICBpbiBhIHJlcG9zaXRvcnkgdXBmcm9udCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IG1lcmdlIC0tc3F1YXNoIiBpcyBkZXNpZ25lZCB0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlCisgICBpbmRleCB3aXRob3V0IGNyZWF0aW5nIHRoZSBjb21taXQsIGFuZCB0aGlzIGNhbm5vdCBiZSBjb3VudGVybWFuZGVkCisgICBieSBhZGRpbmcgdGhlICItLWNvbW1pdCIgb3B0aW9uOyB0aGUgY29tbWFuZCBub3cgcmVmdXNlcyB0byB3b3JrCisgICB3aGVuIGJvdGggb3B0aW9ucyBhcmUgZ2l2ZW4uCisKKyAqIFRoZSBkYXRhIGNvbGxlY3RlZCBieSBmc21vbml0b3Igd2FzIG5vdCBwcm9wZXJseSB3cml0dGVuIGJhY2sgdG8KKyAgIHRoZSBvbi1kaXNrIGluZGV4IGZpbGUsIGJyZWFraW5nIHQ3NTE5IHRlc3RzIG9jY2FzaW9uYWxseSwgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVXBkYXRlIHRvIFVuaWNvZGUgMTIuMSB3aWR0aCB0YWJsZS4KKworICogVGhlIGNvbW1hbmQgbGluZSB0byBpbnZva2UgYSAiZ2l0IGNhdC1maWxlIiBjb21tYW5kIGZyb20gaW5zaWRlCisgICAiZ2l0IHA0IiB3YXMgbm90IHByb3Blcmx5IHF1b3RlZCB0byBwcm90ZWN0IGEgY2FyZXQgYW5kIHJ1bm5pbmcgYQorICAgYnJva2VuIGNvbW1hbmQgb24gV2luZG93cywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHJlcXVlc3QtcHVsbCIgbGVhcm5lZCB0byB3YXJuIHdoZW4gdGhlIHJlZiB3ZSBhc2sgdGhlbSB0byBwdWxsCisgICBmcm9tIGluIHRoZSBsb2NhbCByZXBvc2l0b3J5IGFuZCBpbiB0aGUgcHVibGlzaGVkIHJlcG9zaXRvcnkgYXJlCisgICBkaWZmZXJlbnQuCisKKyAqIFdoZW4gY3JlYXRpbmcgYSBwYXJ0aWFsIGNsb25lLCB0aGUgb2JqZWN0IGZpbHRlcmluZyBjcml0ZXJpYSBpcworICAgcmVjb3JkZWQgZm9yIHRoZSBvcmlnaW4gb2YgdGhlIGNsb25lLCBidXQgdGhpcyBpbmNvcnJlY3RseSB1c2VkIGEKKyAgIGhhcmRjb2RlZCBuYW1lICJvcmlnaW4iIHRvIG5hbWUgdGhhdCByZW1vdGU7IGl0IGhhcyBiZWVuIGNvcnJlY3RlZAorICAgdG8gaG9ub3IgdGhlICItLW9yaWdpbiA8bmFtZT4iIG9wdGlvbi4KKworICogImdpdCBmZXRjaCIgaW50byBhIGxhenkgY2xvbmUgZm9yZ290IHRvIGZldGNoIGJhc2Ugb2JqZWN0cyB0aGF0IGFyZQorICAgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIGRlbHRhIGluIGEgdGhpbiBwYWNrZmlsZSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogVGhlIGZpbHRlcl9kYXRhIHVzZWQgaW4gdGhlIGxpc3Qtb2JqZWN0cy1maWx0ZXIgKHdoaWNoIG1hbmFnZXMgYQorICAgbGF6aWx5IHNwYXJzZSBjbG9uZSByZXBvc2l0b3J5KSBkaWQgbm90IHVzZSB0aGUgZHluYW1pYyBhcnJheSBBUEkKKyAgIGNvcnJlY3RseS0tLSducicgaXMgc3VwcG9zZWQgdG8gcG9pbnQgYXQgb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudAorICAgb2YgdGhlIGFycmF5IGluIHVzZS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgZGVzY3JpcHRpb24gYWJvdXQgc2xhc2hlcyBpbiBnaXRpZ25vcmUgcGF0dGVybnMgKHVzZWQgdG8KKyAgIGluZGljYXRlIHRoaW5ncyBsaWtlICJhbmNob3JlZCB0byB0aGlzIGxldmVsIG9ubHkiIGFuZCAib25seQorICAgbWF0Y2hlcyBkaXJlY3RvcmllcyIpIGhhcyBiZWVuIHJldmFtcGVkLgorCisgKiBUaGUgVVJMIGRlY29kaW5nIGNvZGUgaGFzIGJlZW4gdXBkYXRlZCB0byBhdm9pZCBnb2luZyBwYXN0IHRoZSBlbmQKKyAgIG9mIHRoZSBzdHJpbmcgd2hpbGUgcGFyc2luZyAlLTxoZXg+LTxoZXg+IHNlcXVlbmNlLgorCisgKiBUaGUgbGlzdCBvZiBmb3ItZWFjaCBsaWtlIG1hY3JvcyB1c2VkIGJ5IGNsYW5nLWZvcm1hdCBoYXMgYmVlbgorICAgdXBkYXRlZC4KKworICogImdpdCBicmFuY2ggLS1saXN0IiBsZWFybmVkIHRvIHNob3cgYnJhbmNoZXMgdGhhdCBhcmUgY2hlY2tlZCBvdXQKKyAgIGluIG90aGVyIHdvcmt0cmVlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgcmVwb3NpdG9yeSBwcmVmaXhlZCB3aXRoCisgICAnKycsIHNpbWlsYXIgdG8gdGhlIHdheSB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCBpcyBzaG93bgorICAgd2l0aCAnKicgaW4gZnJvbnQuCisgICAobWVyZ2UgNmU5MzgxNDY5ZSBuYi9icmFuY2gtc2hvdy1vdGhlci13b3JrdHJlZXMtaGVhZCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgcmVzdHJ1Y3R1cmluZyBkdXJpbmcgMi4yMCBwZXJpb2QgYnJva2UgZmV0Y2hpbmcgdGFncyB2aWEKKyAgICJpbXBvcnQiIGJhc2VkIHRyYW5zcG9ydHMuCisKKyAqIFRoZSBjb21taXQtZ3JhcGggZmlsZSBpcyBub3cgcGFydCBvZiB0aGUgImZpbGVzIHRoYXQgdGhlIHJ1bnRpbWUKKyAgIG1heSBrZWVwIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBvbiwgYWxsIG9mIHdoaWNoIHdvdWxkIG5lZWQgdG8gYmUKKyAgIGNsb3NlZCB3aGVuIGRvbmUgd2l0aCB0aGUgb2JqZWN0IHN0b3JlIiwgYW5kIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8KKyAgIGFuIGV4aXN0aW5nIGNvbW1pdC1ncmFwaCBmaWxlIG5vdyBpcyBjbG9zZWQgYmVmb3JlICJnYyIgZmluYWxpemVzIGEKKyAgIG5ldyBpbnN0YW5jZSB0byByZXBsYWNlIGl0LgorCisgKiAiZ2l0IGNoZWNrb3V0IC1wIiBuZWVkcyB0byBzZWxlY3RpdmVseSBhcHBseSBhIHBhdGNoIGluIHJldmVyc2UsCisgICB3aGljaCBkaWQgbm90IHdvcmsgd2VsbC4KKworICogQ29kZSBjbGVhbi11cCB0byBhdm9pZCBzaWduZWQgaW50ZWdlciB3cmFwYXJvdW5kcyBkdXJpbmcgYmluYXJ5IHNlYXJjaC4KKworICogImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiIGFsd2F5cyB0cmVhdGVkICcjJyBhcyB0aGUgY29tbWVudAorICAgY2hhcmFjdGVyLCByZWdhcmRsZXNzIG9mIGNvcmUuY29tbWVudENoYXIgc2V0dGluZywgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogImdpdCBzdGFzaCBzaG93IDIzIiB1c2VkIHRvIHdvcmssIGJ1dCBubyBtb3JlIGFmdGVyIGdldHRpbmcKKyAgIHJld3JpdHRlbiBpbiBDOyB0aGlzIHJlZ3Jlc3Npb24gaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtLWFib3J0IiB1c2VkIHRvIGxlYXZlIHJlZnMvcmV3cml0dGVuLyB3aGVuIGNvbmNsdWRpbmcKKyAgICJnaXQgcmViYXNlIC1yIiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBBbiBpbmNvcnJlY3QgbGlzdCBvZiBvcHRpb25zIHdhcyBjYWNoZWQgYWZ0ZXIgY29tbWFuZCBsaW5lCisgICBjb21wbGV0aW9uIGZhaWxlZCAoZS5nLiB0cnlpbmcgdG8gY29tcGxldGUgYSBjb21tYW5kIHRoYXQgcmVxdWlyZXMKKyAgIGEgcmVwb3NpdG9yeSBvdXRzaWRlIG9uZSksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGNvZGUgdG8gcGFyc2Ugc2NhbGVkIG51bWJlcnMgb3V0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgaGFzCisgICBiZWVuIG1hZGUgbW9yZSByb2J1c3QgYW5kIGFsc28gZWFzaWVyIHRvIGZvbGxvdy4KKworICogVGhlIGNvZGVwYXRoIHRvIGNvbXB1dGUgZGVsdGEgaXNsYW5kcyB1c2VkIHRvIHNwZXcgcHJvZ3Jlc3Mgb3V0cHV0CisgICB3aXRob3V0IGdpdmluZyB0aGUgY2FsbGVycyBhbnkgd2F5IHRvIHNxdWVsY2ggaXQsIHdoaWNoIGhhcyBiZWVuCisgICBmaXhlZC4KKworICogUHJvdG9jb2wgY2FwYWJpbGl0aWVzIHRoYXQgZ28gb3ZlciB3aXJlIHNob3VsZCBuZXZlciBiZSB0cmFuc2xhdGVkLAorICAgYnV0IGl0IHdhcyBpbmNvcnJlY3RseSBtYXJrZWQgZm9yIHRyYW5zbGF0aW9uLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLiAgVGhlIG91dHB1dCBvZiBwcm90b2NvbCBjYXBhYmlsaXRpZXMgZm9yIGRlYnVnZ2luZyBoYXMKKyAgIGJlZW4gdHdlYWtlZCBhIGJpdC4KKworICogVXNlICJFcmFzZSBpbiBMaW5lIiBDU0kgc2VxdWVuY2UgdGhhdCBpcyBhbHJlYWR5IHVzZWQgaW4gdGhlIGVkaXRvcgorICAgc3VwcG9ydCB0byBjbGVhciBjcnVmdCBpbiB0aGUgcHJvZ3Jlc3Mgb3V0cHV0LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIiBkaWQgbm90IHByb3RlY3QgY29tbWFuZCBsaW5lIG9wdGlvbnMgcGFzc2VkCisgICB0byB0aGUgY29tbWFuZCB0byBiZSBydW4gaW4gZWFjaCBzdWJtb2R1bGUgY29ycmVjdGx5LCB3aGVuIHRoZQorICAgIi0tcmVjdXJzaXZlIiBvcHRpb24gd2FzIGluIHVzZS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmViYXNlLnJlc2NoZWR1bGVGYWlsZWRFeGVjIHNob3VsZCBiZQorICAgZWZmZWN0aXZlIG9ubHkgd2hpbGUgcnVubmluZyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UgYW5kIHNob3VsZCBub3QKKyAgIGFmZmVjdCBhbnl0aGluZyB3aGVuIHJ1bm5pbmcgYSBub24taW50ZXJhY3RpdmUgb25lLCB3aGljaCB3YXMgbm90CisgICB0aGUgY2FzZS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgImdpdCBjbG9uZSIgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gY29tbWFuZCBsaW5lIG9wdGlvbnMgaW4gaXRzCisgICBkZXNjcmlwdGlvbiBpbiB0aGUgc2hvcnQgZm9ybTsgdGhleSBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBsb25nCisgICBmb3JtcyB0byBtYWtlIHRoZW0gbW9yZSByZWNvZ25pc2FibGUuCisKKyAqIEdlbmVyYXRpb24gb2YgcGFjayBiaXRtYXBzIGFyZSBub3cgZGlzYWJsZWQgd2hlbiAua2VlcCBmaWxlcyBleGlzdCwKKyAgIGFzIHRoZXNlIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgZmVhdHVyZXMuCisgICAobWVyZ2UgNzMyODQ4MjI1MyBldy9yZXBhY2std2l0aC1iaXRtYXBzLWJ5LWRlZmF1bHQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJtIiB0byByZXNvbHZlIGEgY29uZmxpY3RlZCBwYXRoIGxlYWtlZCBhbiBpbnRlcm5hbCBtZXNzYWdlCisgICAibmVlZHMgbWVyZ2UiIGJlZm9yZSBhY3R1YWxseSByZW1vdmluZyB0aGUgcGF0aCwgd2hpY2ggd2FzCisgICBjb25mdXNpbmcuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBzdGFzaCAtLWtlZXAtaW5kZXgiIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgb24gcGF0aHMgdGhhdCBoYXZlCisgICBiZWVuIHJlbW92ZWQsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGI5MzJmNmE1ZTggdGcvc3Rhc2gta2VlcC1pbmRleC13aXRoLXJlbW92ZWQtcGF0aHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaW5kb3cgNyB1cGRhdGUgOy0pCisKKyAqIEEgY29kZXBhdGggdGhhdCByZWFkcyBmcm9tIEdQRyBmb3Igc2lnbmVkIG9iamVjdCB2ZXJpZmljYXRpb24gcmVhZAorICAgcGFzdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCBidWZmZXIsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGNsZWFuIiBzaWxlbnRseSBza2lwcGVkIGEgcGF0aCB3aGVuIGl0IGNhbm5vdCBsc3RhdCgpIGl0OyBub3cKKyAgIGl0IGdpdmVzIGEgd2FybmluZy4KKworICogImdpdCBwdXNoIC0tYXRvbWljIiB0aGF0IGdvZXMgb3ZlciB0aGUgdHJhbnNwb3J0LWhlbHBlciAobmFtZWx5LAorICAgdGhlIHNtYXJ0IGh0dHAgdHJhbnNwb3J0KSBmYWlsZWQgdG8gcHJldmVudCByZWZzIHRvIGJlIHB1c2hlZCB3aGVuCisgICBpdCBjYW4gbG9jYWxseSB0ZWxsIHRoYXQgb25lIG9mIHRoZSByZWYgdXBkYXRlIHdpbGwgZmFpbCB3aXRob3V0CisgICBoYXZpbmcgdG8gY29uc3VsdCB0aGUgb3RoZXIgZW5kLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBpbnRlcm5hbCBkaWZmIG1hY2hpbmVyeSBjYW4gYmUgbWFkZSB0byByZWFkIG91dCBvZiBib3VuZHMgd2hpbGUKKyAgIGxvb2tpbmcgZm9yIC0tZnVuY3Rpb24tY29udGV4dCBsaW5lIGluIGEgY29ybmVyIGNhc2UsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYjc3N2YzZmQ2MSBqay94ZGlmZi1jbGFtcC1mdW5jbmFtZS1jb250ZXh0LWluZGV4IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgY29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIGZiZWMwNWMyMTAgY2MvdGVzdC1vaWRtYXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdhMDZmYjAzOGMgamsvbm8tc3lzdGVtLWluY2x1ZGVzLWluLWRvdC1jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4MWVkMmI0MDVjIGNiL3hkaWZmLW5vLXN5c3RlbS1pbmNsdWRlcy1pbi1kb3QtYyBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JsYW1lLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dAppbmRleCBkYzQxOTU3Li41ZDEyMmRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2JsYW1lLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQKQEAgLTExMCw1ICsxMTAsMjQgQEAKIGAtQ2Agb3B0aW9ucyBnaXZlbiwgdGhlIDxudW0+IGFyZ3VtZW50IG9mIHRoZSBsYXN0IGAtQ2Agd2lsbAogdGFrZSBlZmZlY3QuCiAKKy0taWdub3JlLXJldiA8cmV2Pjo6CisJSWdub3JlIGNoYW5nZXMgbWFkZSBieSB0aGUgcmV2aXNpb24gd2hlbiBhc3NpZ25pbmcgYmxhbWUsIGFzIGlmIHRoZQorCWNoYW5nZSBuZXZlciBoYXBwZW5lZC4gIExpbmVzIHRoYXQgd2VyZSBjaGFuZ2VkIG9yIGFkZGVkIGJ5IGFuIGlnbm9yZWQKKwljb21taXQgd2lsbCBiZSBibGFtZWQgb24gdGhlIHByZXZpb3VzIGNvbW1pdCB0aGF0IGNoYW5nZWQgdGhhdCBsaW5lIG9yCisJbmVhcmJ5IGxpbmVzLiAgVGhpcyBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBpZ25vcmUKKwltb3JlIHRoYW4gb25lIHJldmlzaW9uLiAgSWYgdGhlIGBibGFtZS5tYXJrSWdub3JlZExpbmVzYCBjb25maWcgb3B0aW9uCisJaXMgc2V0LCB0aGVuIGxpbmVzIHRoYXQgd2VyZSBjaGFuZ2VkIGJ5IGFuIGlnbm9yZWQgY29tbWl0IGFuZCBhdHRyaWJ1dGVkIHRvCisJYW5vdGhlciBjb21taXQgd2lsbCBiZSBtYXJrZWQgd2l0aCBhIGA/YCBpbiB0aGUgYmxhbWUgb3V0cHV0LiAgSWYgdGhlCisJYGJsYW1lLm1hcmtVbmJsYW1hYmxlTGluZXNgIGNvbmZpZyBvcHRpb24gaXMgc2V0LCB0aGVuIHRob3NlIGxpbmVzIHRvdWNoZWQKKwlieSBhbiBpZ25vcmVkIGNvbW1pdCB0aGF0IHdlIGNvdWxkIG5vdCBhdHRyaWJ1dGUgdG8gYW5vdGhlciByZXZpc2lvbiBhcmUKKwltYXJrZWQgd2l0aCBhICcqJy4KKworLS1pZ25vcmUtcmV2cy1maWxlIDxmaWxlPjo6CisJSWdub3JlIHJldmlzaW9ucyBsaXN0ZWQgaW4gYGZpbGVgLCB3aGljaCBtdXN0IGJlIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBhbgorCWBmc2NrLnNraXBMaXN0YC4gIFRoaXMgb3B0aW9uIG1heSBiZSByZXBlYXRlZCwgYW5kIHRoZXNlIGZpbGVzIHdpbGwgYmUKKwlwcm9jZXNzZWQgYWZ0ZXIgYW55IGZpbGVzIHNwZWNpZmllZCB3aXRoIHRoZSBgYmxhbWUuaWdub3JlUmV2c0ZpbGVgIGNvbmZpZworCW9wdGlvbi4gIEFuIGVtcHR5IGZpbGUgbmFtZSwgYCIiYCwgd2lsbCBjbGVhciB0aGUgbGlzdCBvZiByZXZzIGZyb20KKwlwcmV2aW91c2x5IHByb2Nlc3NlZCBmaWxlcy4KKwogLWg6OgogCVNob3cgaGVscCBtZXNzYWdlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CmluZGV4IDdlMmE2ZjYuLmUzZjViYzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKQEAgLTE0NCw2ICsxNDQsMjAgQEAKIAlUaGlzIGlzIHRoZSBzYW1lIGFzIGBnaXRkaXJgIGV4Y2VwdCB0aGF0IG1hdGNoaW5nIGlzIGRvbmUKIAljYXNlLWluc2Vuc2l0aXZlbHkgKGUuZy4gb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5dGVtcykKIAorYG9uYnJhbmNoYDo6CisJVGhlIGRhdGEgdGhhdCBmb2xsb3dzIHRoZSBrZXl3b3JkIGBvbmJyYW5jaDpgIGlzIHRha2VuIHRvIGJlIGEKKwlwYXR0ZXJuIHdpdGggc3RhbmRhcmQgZ2xvYmJpbmcgd2lsZGNhcmRzIGFuZCB0d28gYWRkaXRpb25hbAorCW9uZXMsIGAqKi9gIGFuZCBgLyoqYCwgdGhhdCBjYW4gbWF0Y2ggbXVsdGlwbGUgcGF0aCBjb21wb25lbnRzLgorCUlmIHdlIGFyZSBpbiBhIHdvcmt0cmVlIHdoZXJlIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggdGhhdCBpcworCWN1cnJlbnRseSBjaGVja2VkIG91dCBtYXRjaGVzIHRoZSBwYXR0ZXJuLCB0aGUgaW5jbHVkZSBjb25kaXRpb24KKwlpcyBtZXQuCisrCitJZiB0aGUgcGF0dGVybiBlbmRzIHdpdGggYC9gLCBgKipgIHdpbGwgYmUgYXV0b21hdGljYWxseSBhZGRlZC4gRm9yCitleGFtcGxlLCB0aGUgcGF0dGVybiBgZm9vL2AgYmVjb21lcyBgZm9vLyoqYC4gSW4gb3RoZXIgd29yZHMsIGl0IG1hdGNoZXMKK2FsbCBicmFuY2hlcyB0aGF0IGJlZ2luIHdpdGggYGZvby9gLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGJyYW5jaGVzIGFyZQorb3JnYW5pemVkIGhpZXJhcmNoaWNhbGx5IGFuZCB5b3Ugd291bGQgbGlrZSB0byBhcHBseSBhIGNvbmZpZ3VyYXRpb24gdG8KK2FsbCB0aGUgYnJhbmNoZXMgaW4gdGhhdCBoaWVyYXJjaHkuCisKIEEgZmV3IG1vcmUgbm90ZXMgb24gbWF0Y2hpbmcgdmlhIGBnaXRkaXJgIGFuZCBgZ2l0ZGlyL2lgOgogCiAgKiBTeW1saW5rcyBpbiBgJEdJVF9ESVJgIGFyZSBub3QgcmVzb2x2ZWQgYmVmb3JlIG1hdGNoaW5nLgpAQCAtMjA2LDYgKzIyMCwxMSBAQAogCVtpbmNsdWRlSWYgImdpdGRpcjovcGF0aC90by9ncm91cC8iXQogCQlwYXRoID0gZm9vLmluYwogCisJOyBpbmNsdWRlIG9ubHkgaWYgd2UgYXJlIGluIGEgd29ya3RyZWUgd2hlcmUgZm9vLWJyYW5jaCBpcworCTsgY3VycmVudGx5IGNoZWNrZWQgb3V0CisJW2luY2x1ZGVJZiAib25icmFuY2g6Zm9vLWJyYW5jaCJdCisJCXBhdGggPSBmb28uaW5jCisKIFZhbHVlcwogfn5+fn5+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2FkdmljZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZHZpY2UudHh0CmluZGV4IGVjNGY2YWUuLjZhYWEzNjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL2FkdmljZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYWR2aWNlLnR4dApAQCAtNCw2ICs0LDEwIEBACiAJY2FuIHRlbGwgR2l0IHRoYXQgeW91IGRvIG5vdCBuZWVkIGhlbHAgYnkgc2V0dGluZyB0aGVzZSB0byAnZmFsc2UnOgogKwogLS0KKwlmZXRjaFNob3dGb3JjZWRVcGRhdGVzOjoKKwkJQWR2aWNlIHNob3duIHdoZW4gbGlua2dpdDpnaXQtZmV0Y2hbMV0gdGFrZXMgYSBsb25nIHRpbWUKKwkJdG8gY2FsY3VsYXRlIGZvcmNlZCB1cGRhdGVzIGFmdGVyIHJlZiB1cGRhdGVzLCBvciB0byB3YXJuCisJCXRoYXQgdGhlIGNoZWNrIGlzIGRpc2FibGVkLgogCXB1c2hVcGRhdGVSZWplY3RlZDo6CiAJCVNldCB0aGlzIHZhcmlhYmxlIHRvICdmYWxzZScgaWYgeW91IHdhbnQgdG8gZGlzYWJsZQogCQkncHVzaE5vbkZGQ3VycmVudCcsCkBAIC0zNywxMiArNDEsMTkgQEAKIAkJd2UgY2FuIHN0aWxsIHN1Z2dlc3QgdGhhdCB0aGUgdXNlciBwdXNoIHRvIGVpdGhlcgogCQlyZWZzL2hlYWRzLyogb3IgcmVmcy90YWdzLyogYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlCiAJCXNvdXJjZSBvYmplY3QuCisJc3RhdHVzQWhlYWRCZWhpbmQ6OgorCQlTaG93biB3aGVuIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBjb21wdXRlcyB0aGUgYWhlYWQvYmVoaW5kCisJCWNvdW50cyBmb3IgYSBsb2NhbCByZWYgY29tcGFyZWQgdG8gaXRzIHJlbW90ZSB0cmFja2luZyByZWYsCisJCWFuZCB0aGF0IGNhbGN1bGF0aW9uIHRha2VzIGxvbmdlciB0aGFuIGV4cGVjdGVkLiBXaWxsIG5vdAorCQlhcHBlYXIgaWYgYHN0YXR1cy5haGVhZEJlaGluZGAgaXMgZmFsc2Ugb3IgdGhlIG9wdGlvbgorCQlgLS1uby1haGVhZC1iZWhpbmRgIGlzIGdpdmVuLgogCXN0YXR1c0hpbnRzOjoKIAkJU2hvdyBkaXJlY3Rpb25zIG9uIGhvdyB0byBwcm9jZWVkIGZyb20gdGhlIGN1cnJlbnQKIAkJc3RhdGUgaW4gdGhlIG91dHB1dCBvZiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0sIGluCiAJCXRoZSB0ZW1wbGF0ZSBzaG93biB3aGVuIHdyaXRpbmcgY29tbWl0IG1lc3NhZ2VzIGluCiAJCWxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwgYW5kIGluIHRoZSBoZWxwIG1lc3NhZ2Ugc2hvd24KLQkJYnkgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gd2hlbiBzd2l0Y2hpbmcgYnJhbmNoLgorCQlieSBsaW5rZ2l0OmdpdC1zd2l0Y2hbMV0gb3IKKwkJbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gd2hlbiBzd2l0Y2hpbmcgYnJhbmNoLgogCXN0YXR1c1VvcHRpb246OgogCQlBZHZpc2UgdG8gY29uc2lkZXIgdXNpbmcgdGhlIGAtdWAgb3B0aW9uIHRvIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXQogCQl3aGVuIHRoZSBjb21tYW5kIHRha2VzIG1vcmUgdGhhbiAyIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZApAQCAtNTcsMTcgKzY4LDIxIEBACiAJcmVzb2x2ZUNvbmZsaWN0OjoKIAkJQWR2aWNlIHNob3duIGJ5IHZhcmlvdXMgY29tbWFuZHMgd2hlbiBjb25mbGljdHMKIAkJcHJldmVudCB0aGUgb3BlcmF0aW9uIGZyb20gYmVpbmcgcGVyZm9ybWVkLgorCXNlcXVlbmNlckluVXNlOjoKKwkJQWR2aWNlIHNob3duIHdoZW4gYSBzZXF1ZW5jZXIgY29tbWFuZCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgogCWltcGxpY2l0SWRlbnRpdHk6OgogCQlBZHZpY2Ugb24gaG93IHRvIHNldCB5b3VyIGlkZW50aXR5IGNvbmZpZ3VyYXRpb24gd2hlbgogCQl5b3VyIGluZm9ybWF0aW9uIGlzIGd1ZXNzZWQgZnJvbSB0aGUgc3lzdGVtIHVzZXJuYW1lIGFuZAogCQlkb21haW4gbmFtZS4KIAlkZXRhY2hlZEhlYWQ6OgotCQlBZHZpY2Ugc2hvd24gd2hlbiB5b3UgdXNlZCBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSB0bwotCQltb3ZlIHRvIHRoZSBkZXRhY2ggSEVBRCBzdGF0ZSwgdG8gaW5zdHJ1Y3QgaG93IHRvIGNyZWF0ZQotCQlhIGxvY2FsIGJyYW5jaCBhZnRlciB0aGUgZmFjdC4KKwkJQWR2aWNlIHNob3duIHdoZW4geW91IHVzZWQKKwkJbGlua2dpdDpnaXQtc3dpdGNoWzFdIG9yIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdCisJCXRvIG1vdmUgdG8gdGhlIGRldGFjaCBIRUFEIHN0YXRlLCB0byBpbnN0cnVjdCBob3cgdG8KKwkJY3JlYXRlIGEgbG9jYWwgYnJhbmNoIGFmdGVyIHRoZSBmYWN0LgogCWNoZWNrb3V0QW1iaWd1b3VzUmVtb3RlQnJhbmNoTmFtZTo6CiAJCUFkdmljZSBzaG93biB3aGVuIHRoZSBhcmd1bWVudCB0bwotCQlsaW5rZ2l0OmdpdC1jaGVja291dFsxXSBhbWJpZ3VvdXNseSByZXNvbHZlcyB0byBhCisJCWxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIGFuZCBsaW5rZ2l0OmdpdC1zd2l0Y2hbMV0KKwkJYW1iaWd1b3VzbHkgcmVzb2x2ZXMgdG8gYQogCQlyZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uIG1vcmUgdGhhbiBvbmUgcmVtb3RlIGluCiAJCXNpdHVhdGlvbnMgd2hlcmUgYW4gdW5hbWJpZ3VvdXMgYXJndW1lbnQgd291bGQgaGF2ZQogCQlvdGhlcndpc2UgY2F1c2VkIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCB0byBiZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvYWxpYXMudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYWxpYXMudHh0CmluZGV4IDBiMTQxNzguLmYxY2E3MzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL2FsaWFzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hbGlhcy50eHQKQEAgLTEsMTggKzEsMjggQEAKIGFsaWFzLio6OgogCUNvbW1hbmQgYWxpYXNlcyBmb3IgdGhlIGxpbmtnaXQ6Z2l0WzFdIGNvbW1hbmQgd3JhcHBlciAtIGUuZy4KLQlhZnRlciBkZWZpbmluZyAiYWxpYXMubGFzdCA9IGNhdC1maWxlIGNvbW1pdCBIRUFEIiwgdGhlIGludm9jYXRpb24KLQkiZ2l0IGxhc3QiIGlzIGVxdWl2YWxlbnQgdG8gImdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCIuIFRvIGF2b2lkCisJYWZ0ZXIgZGVmaW5pbmcgYGFsaWFzLmxhc3QgPSBjYXQtZmlsZSBjb21taXQgSEVBRGAsIHRoZSBpbnZvY2F0aW9uCisJYGdpdCBsYXN0YCBpcyBlcXVpdmFsZW50IHRvIGBnaXQgY2F0LWZpbGUgY29tbWl0IEhFQURgLiBUbyBhdm9pZAogCWNvbmZ1c2lvbiBhbmQgdHJvdWJsZXMgd2l0aCBzY3JpcHQgdXNhZ2UsIGFsaWFzZXMgdGhhdAogCWhpZGUgZXhpc3RpbmcgR2l0IGNvbW1hbmRzIGFyZSBpZ25vcmVkLiBBcmd1bWVudHMgYXJlIHNwbGl0IGJ5CiAJc3BhY2VzLCB0aGUgdXN1YWwgc2hlbGwgcXVvdGluZyBhbmQgZXNjYXBpbmcgaXMgc3VwcG9ydGVkLgogCUEgcXVvdGUgcGFpciBvciBhIGJhY2tzbGFzaCBjYW4gYmUgdXNlZCB0byBxdW90ZSB0aGVtLgogKworTm90ZSB0aGF0IHRoZSBmaXJzdCB3b3JkIG9mIGFuIGFsaWFzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gYmUgYQorY29tbWFuZC4gSXQgY2FuIGJlIGEgY29tbWFuZC1saW5lIG9wdGlvbiB0aGF0IHdpbGwgYmUgcGFzc2VkIGludG8gdGhlCitpbnZvY2F0aW9uIG9mIGBnaXRgLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGlzIHVzZWZ1bCB3aGVuIHVzZWQgd2l0aCBgLWNgCit0byBwYXNzIGluIG9uZS10aW1lIGNvbmZpZ3VyYXRpb25zIG9yIGAtcGAgdG8gZm9yY2UgcGFnaW5hdGlvbi4gRm9yIGV4YW1wbGUsCitgbG91ZC1yZWJhc2UgPSAtYyBjb21taXQudmVyYm9zZT10cnVlIHJlYmFzZWAgY2FuIGJlIGRlZmluZWQgc3VjaCB0aGF0CitydW5uaW5nIGBnaXQgbG91ZC1yZWJhc2VgIHdvdWxkIGJlIGVxdWl2YWxlbnQgdG8KK2BnaXQgLWMgY29tbWl0LnZlcmJvc2U9dHJ1ZSByZWJhc2VgLiBBbHNvLCBgcHMgPSAtcCBzdGF0dXNgIHdvdWxkIGJlIGEKK2hlbHBmdWwgYWxpYXMgc2luY2UgYGdpdCBwc2Agd291bGQgcGFnaW5hdGUgdGhlIG91dHB1dCBvZiBgZ2l0IHN0YXR1c2AKK3doZXJlIHRoZSBvcmlnaW5hbCBjb21tYW5kIGRvZXMgbm90LgorKwogSWYgdGhlIGFsaWFzIGV4cGFuc2lvbiBpcyBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uIHBvaW50LAogaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2hlbGwgY29tbWFuZC4gIEZvciBleGFtcGxlLCBkZWZpbmluZwotImFsaWFzLm5ldyA9ICFnaXRrIC0tYWxsIC0tbm90IE9SSUdfSEVBRCIsIHRoZSBpbnZvY2F0aW9uCi0iZ2l0IG5ldyIgaXMgZXF1aXZhbGVudCB0byBydW5uaW5nIHRoZSBzaGVsbCBjb21tYW5kCi0iZ2l0ayAtLWFsbCAtLW5vdCBPUklHX0hFQUQiLiAgTm90ZSB0aGF0IHNoZWxsIGNvbW1hbmRzIHdpbGwgYmUKK2BhbGlhcy5uZXcgPSAhZ2l0ayAtLWFsbCAtLW5vdCBPUklHX0hFQURgLCB0aGUgaW52b2NhdGlvbgorYGdpdCBuZXdgIGlzIGVxdWl2YWxlbnQgdG8gcnVubmluZyB0aGUgc2hlbGwgY29tbWFuZAorYGdpdGsgLS1hbGwgLS1ub3QgT1JJR19IRUFEYC4gIE5vdGUgdGhhdCBzaGVsbCBjb21tYW5kcyB3aWxsIGJlCiBleGVjdXRlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIGEgcmVwb3NpdG9yeSwgd2hpY2ggbWF5CiBub3QgbmVjZXNzYXJpbHkgYmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotYEdJVF9QUkVGSVhgIGlzIHNldCBhcyByZXR1cm5lZCBieSBydW5uaW5nICdnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgnCitgR0lUX1BSRUZJWGAgaXMgc2V0IGFzIHJldHVybmVkIGJ5IHJ1bm5pbmcgYGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeGAKIGZyb20gdGhlIG9yaWdpbmFsIGN1cnJlbnQgZGlyZWN0b3J5LiBTZWUgbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvYmxhbWUudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYmxhbWUudHh0CmluZGV4IDY3YjVjMWQuLjk0NjhlODUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL2JsYW1lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ibGFtZS50eHQKQEAgLTE5LDMgKzE5LDE5IEBACiBibGFtZS5zaG93Um9vdDo6CiAJRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIGluIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdLgogCVRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIGZhbHNlLgorCitibGFtZS5pZ25vcmVSZXZzRmlsZTo6CisJSWdub3JlIHJldmlzaW9ucyBsaXN0ZWQgaW4gdGhlIGZpbGUsIG9uZSB1bmFiYnJldmlhdGVkIG9iamVjdCBuYW1lIHBlcgorCWxpbmUsIGluIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdLiAgV2hpdGVzcGFjZSBhbmQgY29tbWVudHMgYmVnaW5uaW5nIHdpdGgKKwlgI2AgYXJlIGlnbm9yZWQuICBUaGlzIG9wdGlvbiBtYXkgYmUgcmVwZWF0ZWQgbXVsdGlwbGUgdGltZXMuICBFbXB0eQorCWZpbGUgbmFtZXMgd2lsbCByZXNldCB0aGUgbGlzdCBvZiBpZ25vcmVkIHJldmlzaW9ucy4gIFRoaXMgb3B0aW9uIHdpbGwKKwliZSBoYW5kbGVkIGJlZm9yZSB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiBgLS1pZ25vcmUtcmV2cy1maWxlYC4KKworYmxhbWUubWFya1VuYmxhbWFibGVzOjoKKwlNYXJrIGxpbmVzIHRoYXQgd2VyZSBjaGFuZ2VkIGJ5IGFuIGlnbm9yZWQgcmV2aXNpb24gdGhhdCB3ZSBjb3VsZCBub3QKKwlhdHRyaWJ1dGUgdG8gYW5vdGhlciBjb21taXQgd2l0aCBhICcqJyBpbiB0aGUgb3V0cHV0IG9mCisJbGlua2dpdDpnaXQtYmxhbWVbMV0uCisKK2JsYW1lLm1hcmtJZ25vcmVkTGluZXM6OgorCU1hcmsgbGluZXMgdGhhdCB3ZXJlIGNoYW5nZWQgYnkgYW4gaWdub3JlZCByZXZpc2lvbiB0aGF0IHdlIGF0dHJpYnV0ZWQgdG8KKwlhbm90aGVyIGNvbW1pdCB3aXRoIGEgJz8nIGluIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtYmxhbWVbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYnJhbmNoLnR4dAppbmRleCA4ZjRiM2ZhLi5hNTkyZDUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2JyYW5jaC50eHQKQEAgLTEsNSArMSw1IEBACiBicmFuY2guYXV0b1NldHVwTWVyZ2U6OgotCVRlbGxzICdnaXQgYnJhbmNoJyBhbmQgJ2dpdCBjaGVja291dCcgdG8gc2V0IHVwIG5ldyBicmFuY2hlcworCVRlbGxzICdnaXQgYnJhbmNoJywgJ2dpdCBzd2l0Y2gnIGFuZCAnZ2l0IGNoZWNrb3V0JyB0byBzZXQgdXAgbmV3IGJyYW5jaGVzCiAJc28gdGhhdCBsaW5rZ2l0OmdpdC1wdWxsWzFdIHdpbGwgYXBwcm9wcmlhdGVseSBtZXJnZSBmcm9tIHRoZQogCXN0YXJ0aW5nIHBvaW50IGJyYW5jaC4gTm90ZSB0aGF0IGV2ZW4gaWYgdGhpcyBvcHRpb24gaXMgbm90IHNldCwKIAl0aGlzIGJlaGF2aW9yIGNhbiBiZSBjaG9zZW4gcGVyLWJyYW5jaCB1c2luZyB0aGUgYC0tdHJhY2tgCkBAIC0xMSw3ICsxMSw3IEBACiAJYnJhbmNoLiBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byB0cnVlLgogCiBicmFuY2guYXV0b1NldHVwUmViYXNlOjoKLQlXaGVuIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIHdpdGggJ2dpdCBicmFuY2gnIG9yICdnaXQgY2hlY2tvdXQnCisJV2hlbiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCB3aXRoICdnaXQgYnJhbmNoJywgJ2dpdCBzd2l0Y2gnIG9yICdnaXQgY2hlY2tvdXQnCiAJdGhhdCB0cmFja3MgYW5vdGhlciBicmFuY2gsIHRoaXMgdmFyaWFibGUgdGVsbHMgR2l0IHRvIHNldAogCXVwIHB1bGwgdG8gcmViYXNlIGluc3RlYWQgb2YgbWVyZ2UgKHNlZSAiYnJhbmNoLjxuYW1lPi5yZWJhc2UiKS4KIAlXaGVuIGBuZXZlcmAsIHJlYmFzZSBpcyBuZXZlciBhdXRvbWF0aWNhbGx5IHNldCB0byB0cnVlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvY2hlY2tvdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvY2hlY2tvdXQudHh0CmluZGV4IGM0MTE4ZmEuLjZiNjQ2ODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL2NoZWNrb3V0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jaGVja291dC50eHQKQEAgLTEsNSArMSw2IEBACiBjaGVja291dC5kZWZhdWx0UmVtb3RlOjoKLQlXaGVuIHlvdSBydW4gJ2dpdCBjaGVja291dCA8c29tZXRoaW5nPicgYW5kIG9ubHkgaGF2ZSBvbmUKKwlXaGVuIHlvdSBydW4gJ2dpdCBjaGVja291dCA8c29tZXRoaW5nPicKKwlvciAnZ2l0IHN3aXRjaCA8c29tZXRoaW5nPicgYW5kIG9ubHkgaGF2ZSBvbmUKIAlyZW1vdGUsIGl0IG1heSBpbXBsaWNpdGx5IGZhbGwgYmFjayBvbiBjaGVja2luZyBvdXQgYW5kCiAJdHJhY2tpbmcgZS5nLiAnb3JpZ2luLzxzb21ldGhpbmc+Jy4gVGhpcyBzdG9wcyB3b3JraW5nIGFzIHNvb24KIAlhcyB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIHJlbW90ZSB3aXRoIGEgJzxzb21ldGhpbmc+JwpAQCAtOCwxNiArOSwxMCBAQAogCWRpc2FtYmlndWF0aW9uLiBUaGUgdHlwaWNhbCB1c2UtY2FzZSBpcyB0byBzZXQgdGhpcyB0bwogCWBvcmlnaW5gLgogKwotQ3VycmVudGx5IHRoaXMgaXMgdXNlZCBieSBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSB3aGVuICdnaXQgY2hlY2tvdXQKLTxzb21ldGhpbmc+JyB3aWxsIGNoZWNrb3V0IHRoZSAnPHNvbWV0aGluZz4nIGJyYW5jaCBvbiBhbm90aGVyIHJlbW90ZSwKK0N1cnJlbnRseSB0aGlzIGlzIHVzZWQgYnkgbGlua2dpdDpnaXQtc3dpdGNoWzFdIGFuZAorbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gd2hlbiAnZ2l0IGNoZWNrb3V0IDxzb21ldGhpbmc+Jworb3IgJ2dpdCBzd2l0Y2ggPHNvbWV0aGluZz4nCit3aWxsIGNoZWNrb3V0IHRoZSAnPHNvbWV0aGluZz4nIGJyYW5jaCBvbiBhbm90aGVyIHJlbW90ZSwKIGFuZCBieSBsaW5rZ2l0OmdpdC13b3JrdHJlZVsxXSB3aGVuICdnaXQgd29ya3RyZWUgYWRkJyByZWZlcnMgdG8gYQogcmVtb3RlIGJyYW5jaC4gVGhpcyBzZXR0aW5nIG1pZ2h0IGJlIHVzZWQgZm9yIG90aGVyIGNoZWNrb3V0LWxpa2UKIGNvbW1hbmRzIG9yIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZ1dHVyZS4KLQotY2hlY2tvdXQub3B0aW1pemVOZXdCcmFuY2g6OgotCU9wdGltaXplcyB0aGUgcGVyZm9ybWFuY2Ugb2YgImdpdCBjaGVja291dCAtYiA8bmV3X2JyYW5jaD4iIHdoZW4KLQl1c2luZyBzcGFyc2UtY2hlY2tvdXQuICBXaGVuIHNldCB0byB0cnVlLCBnaXQgd2lsbCBub3QgdXBkYXRlIHRoZQotCXJlcG8gYmFzZWQgb24gdGhlIGN1cnJlbnQgc3BhcnNlLWNoZWNrb3V0IHNldHRpbmdzLiAgVGhpcyBtZWFucyBpdAotCXdpbGwgbm90IHVwZGF0ZSB0aGUgc2tpcC13b3JrdHJlZSBiaXQgaW4gdGhlIGluZGV4IG5vciBhZGQvcmVtb3ZlCi0JZmlsZXMgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3BhcnNlIGNoZWNrb3V0Ci0Jc2V0dGluZ3Mgbm9yIHdpbGwgaXQgc2hvdyB0aGUgbG9jYWwgY2hhbmdlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2RpZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZGlmZi50eHQKaW5kZXggMmM0YzliYS4uNWFmYjVhMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZGlmZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZGlmZi50eHQKQEAgLTc4LDcgKzc4LDggQEAKIGRpZmYuaWdub3JlU3VibW9kdWxlczo6CiAJU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAtLWlnbm9yZS1zdWJtb2R1bGVzLiBOb3RlIHRoYXQgdGhpcwogCWFmZmVjdHMgb25seSAnZ2l0IGRpZmYnIFBvcmNlbGFpbiwgYW5kIG5vdCBsb3dlciBsZXZlbCAnZGlmZicKLQljb21tYW5kcyBzdWNoIGFzICdnaXQgZGlmZi1maWxlcycuICdnaXQgY2hlY2tvdXQnIGFsc28gaG9ub3JzCisJY29tbWFuZHMgc3VjaCBhcyAnZ2l0IGRpZmYtZmlsZXMnLiAnZ2l0IGNoZWNrb3V0JworCWFuZCAnZ2l0IHN3aXRjaCcgYWxzbyBob25vcgogCXRoaXMgc2V0dGluZyB3aGVuIHJlcG9ydGluZyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiBTZXR0aW5nIGl0IHRvCiAJJ2FsbCcgZGlzYWJsZXMgdGhlIHN1Ym1vZHVsZSBzdW1tYXJ5IG5vcm1hbGx5IHNob3duIGJ5ICdnaXQgY29tbWl0JwogCWFuZCAnZ2l0IHN0YXR1cycgd2hlbiBgc3RhdHVzLnN1Ym1vZHVsZVN1bW1hcnlgIGlzIHNldCB1bmxlc3MgaXQgaXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2ZldGNoLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2ZldGNoLnR4dAppbmRleCBjYmZhZDZjLi5iYTg5MGI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mZXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZmV0Y2gudHh0CkBAIC02MywzICs2Myw4IEBACiAJVW5rbm93biB2YWx1ZXMgd2lsbCBjYXVzZSAnZ2l0IGZldGNoJyB0byBlcnJvciBvdXQuCiArCiBTZWUgYWxzbyB0aGUgYC0tbmVnb3RpYXRpb24tdGlwYCBvcHRpb24gZm9yIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorCitmZXRjaC5zaG93Rm9yY2VkVXBkYXRlczo6CisJU2V0IHRvIGZhbHNlIHRvIGVuYWJsZSBgLS1uby1zaG93LWZvcmNlZC11cGRhdGVzYCBpbgorCWxpbmtnaXQ6Z2l0LWZldGNoWzFdIGFuZCBsaW5rZ2l0OmdpdC1wdWxsWzFdIGNvbW1hbmRzLgorCURlZmF1bHRzIHRvIHRydWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZm9ybWF0LnR4dAppbmRleCBkYzc3OTQxLi40MTRhNWE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mb3JtYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2Zvcm1hdC50eHQKQEAgLTg1LDMgKzg1LDE4IEBACiBmb3JtYXQudXNlQXV0b0Jhc2U6OgogCUEgYm9vbGVhbiB2YWx1ZSB3aGljaCBsZXRzIHlvdSBlbmFibGUgdGhlIGAtLWJhc2U9YXV0b2Agb3B0aW9uIG9mCiAJZm9ybWF0LXBhdGNoIGJ5IGRlZmF1bHQuCisKK2Zvcm1hdC5ub3Rlczo6CisJUHJvdmlkZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBgLS1ub3Rlc2Agb3B0aW9uIHRvCisJZm9ybWF0LXBhdGNoLiBBY2NlcHRzIGEgYm9vbGVhbiB2YWx1ZSwgb3IgYSByZWYgd2hpY2ggc3BlY2lmaWVzCisJd2hlcmUgdG8gZ2V0IG5vdGVzLiBJZiBmYWxzZSwgZm9ybWF0LXBhdGNoIGRlZmF1bHRzIHRvCisJYC0tbm8tbm90ZXNgLiBJZiB0cnVlLCBmb3JtYXQtcGF0Y2ggZGVmYXVsdHMgdG8gYC0tbm90ZXNgLiBJZgorCXNldCB0byBhIG5vbi1ib29sZWFuIHZhbHVlLCBmb3JtYXQtcGF0Y2ggZGVmYXVsdHMgdG8KKwlgLS1ub3Rlcz08cmVmPmAsIHdoZXJlIGByZWZgIGlzIHRoZSBub24tYm9vbGVhbiB2YWx1ZS4gRGVmYXVsdHMKKwl0byBmYWxzZS4KKysKK0lmIG9uZSB3aXNoZXMgdG8gdXNlIHRoZSByZWYgYHJlZi9ub3Rlcy90cnVlYCwgcGxlYXNlIHVzZSB0aGF0IGxpdGVyYWwKK2luc3RlYWQuCisrCitUaGlzIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyBpbiBvcmRlciB0byBhbGxvdworbXVsdGlwbGUgbm90ZXMgcmVmcyB0byBiZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2dwZy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ncGcudHh0CmluZGV4IGY5OTlmOGUuLmNjZTJjODkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL2dwZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ3BnLnR4dApAQCAtMiw3ICsyLDcgQEAKIAlVc2UgdGhpcyBjdXN0b20gcHJvZ3JhbSBpbnN0ZWFkIG9mICJgZ3BnYCIgZm91bmQgb24gYCRQQVRIYCB3aGVuCiAJbWFraW5nIG9yIHZlcmlmeWluZyBhIFBHUCBzaWduYXR1cmUuIFRoZSBwcm9ncmFtIG11c3Qgc3VwcG9ydCB0aGUKIAlzYW1lIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYXMgR1BHLCBuYW1lbHksIHRvIHZlcmlmeSBhIGRldGFjaGVkCi0Jc2lnbmF0dXJlLCAiYGdwZyAtLXZlcmlmeSAkZmlsZSAtIDwkc2lnbmF0dXJlYCIgaXMgcnVuLCBhbmQgdGhlCisJc2lnbmF0dXJlLCAiYGdwZyAtLXZlcmlmeSAkc2lnbmF0dXJlIC0gPCRmaWxlYCIgaXMgcnVuLCBhbmQgdGhlCiAJcHJvZ3JhbSBpcyBleHBlY3RlZCB0byBzaWduYWwgYSBnb29kIHNpZ25hdHVyZSBieSBleGl0aW5nIHdpdGgKIAljb2RlIDAsIGFuZCB0byBnZW5lcmF0ZSBhbiBBU0NJSS1hcm1vcmVkIGRldGFjaGVkIHNpZ25hdHVyZSwgdGhlCiAJc3RhbmRhcmQgaW5wdXQgb2YgImBncGcgLWJzYXUgJGtleWAiIGlzIGZlZCB3aXRoIHRoZSBjb250ZW50cyB0byBiZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvaW50ZXJhY3RpdmUudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaW50ZXJhY3RpdmUudHh0CmluZGV4IGFkODQ2ZGQuLmEyZDNjN2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL2ludGVyYWN0aXZlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbnRlcmFjdGl2ZS50eHQKQEAgLTIsNyArMiw4IEBACiAJSW4gaW50ZXJhY3RpdmUgY29tbWFuZHMsIGFsbG93IHRoZSB1c2VyIHRvIHByb3ZpZGUgb25lLWxldHRlcgogCWlucHV0IHdpdGggYSBzaW5nbGUga2V5IChpLmUuLCB3aXRob3V0IGhpdHRpbmcgZW50ZXIpLgogCUN1cnJlbnRseSB0aGlzIGlzIHVzZWQgYnkgdGhlIGAtLXBhdGNoYCBtb2RlIG9mCi0JbGlua2dpdDpnaXQtYWRkWzFdLCBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwgbGlua2dpdDpnaXQtY29tbWl0WzFdLAorCWxpbmtnaXQ6Z2l0LWFkZFsxXSwgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0sCisJbGlua2dpdDpnaXQtcmVzdG9yZVsxXSwgbGlua2dpdDpnaXQtY29tbWl0WzFdLAogCWxpbmtnaXQ6Z2l0LXJlc2V0WzFdLCBhbmQgbGlua2dpdDpnaXQtc3Rhc2hbMV0uIE5vdGUgdGhhdCB0aGlzCiAJc2V0dGluZyBpcyBzaWxlbnRseSBpZ25vcmVkIGlmIHBvcnRhYmxlIGtleXN0cm9rZSBpbnB1dAogCWlzIG5vdCBhdmFpbGFibGU7IHJlcXVpcmVzIHRoZSBQZXJsIG1vZHVsZSBUZXJtOjpSZWFkS2V5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2xvZy50eHQKaW5kZXggNzhkOWU0NC4uZTllMWUzOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcvbG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9sb2cudHh0CkBAIC00MCw0ICs0MCw1IEBACiAKIGxvZy5tYWlsbWFwOjoKIAlJZiB0cnVlLCBtYWtlcyBsaW5rZ2l0OmdpdC1sb2dbMV0sIGxpbmtnaXQ6Z2l0LXNob3dbMV0sIGFuZAotCWxpbmtnaXQ6Z2l0LXdoYXRjaGFuZ2VkWzFdIGFzc3VtZSBgLS11c2UtbWFpbG1hcGAuCisJbGlua2dpdDpnaXQtd2hhdGNoYW5nZWRbMV0gYXNzdW1lIGAtLXVzZS1tYWlsbWFwYCwgb3RoZXJ3aXNlCisJYXNzdW1lIGAtLW5vLXVzZS1tYWlsbWFwYC4gVHJ1ZSBieSBkZWZhdWx0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvc3RhdHVzLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3N0YXR1cy50eHQKaW5kZXggZWQ3MmZhN2QuLjBmYzcwNGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL3N0YXR1cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc3RhdHVzLnR4dApAQCAtMTIsNiArMTIsMTEgQEAKIAlTZXQgdG8gdHJ1ZSB0byBlbmFibGUgLS1icmFuY2ggYnkgZGVmYXVsdCBpbiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0uCiAJVGhlIG9wdGlvbiAtLW5vLWJyYW5jaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhpcyB2YXJpYWJsZS4KIAorc3RhdHVzLmFoZWFkQmVoaW5kOjoKKwlTZXQgdG8gdHJ1ZSB0byBlbmFibGUgYC0tYWhlYWQtYmVoaW5kYCBhbmQgZmFsc2UgdG8gZW5hYmxlCisJYC0tbm8tYWhlYWQtYmVoaW5kYCBieSBkZWZhdWx0IGluIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBmb3IKKwlub24tcG9yY2VsYWluIHN0YXR1cyBmb3JtYXRzLiAgRGVmYXVsdHMgdG8gdHJ1ZS4KKwogc3RhdHVzLmRpc3BsYXlDb21tZW50UHJlZml4OjoKIAlJZiBzZXQgdG8gdHJ1ZSwgbGlua2dpdDpnaXQtc3RhdHVzWzFdIHdpbGwgaW5zZXJ0IGEgY29tbWVudAogCXByZWZpeCBiZWZvcmUgZWFjaCBvdXRwdXQgbGluZSAoc3RhcnRpbmcgd2l0aApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3RhZy50eHQKaW5kZXggNjYzNjYzYi4uZWY1YWRiMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcvdGFnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90YWcudHh0CkBAIC04LDYgKzgsMTQgQEAKIAlsaW5rZ2l0OmdpdC10YWdbMV0uIFdpdGhvdXQgdGhlICItLXNvcnQ9PHZhbHVlPiIgb3B0aW9uIHByb3ZpZGVkLCB0aGUKIAl2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdC4KIAordGFnLmdwZ1NpZ246OgorCUEgYm9vbGVhbiB0byBzcGVjaWZ5IHdoZXRoZXIgYWxsIHRhZ3Mgc2hvdWxkIGJlIEdQRyBzaWduZWQuCisJVXNlIG9mIHRoaXMgb3B0aW9uIHdoZW4gcnVubmluZyBpbiBhbiBhdXRvbWF0ZWQgc2NyaXB0IGNhbgorCXJlc3VsdCBpbiBhIGxhcmdlIG51bWJlciBvZiB0YWdzIGJlaW5nIHNpZ25lZC4gSXQgaXMgdGhlcmVmb3JlCisJY29udmVuaWVudCB0byB1c2UgYW4gYWdlbnQgdG8gYXZvaWQgdHlwaW5nIHlvdXIgZ3BnIHBhc3NwaHJhc2UKKwlzZXZlcmFsIHRpbWVzLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gZG9lc24ndCBhZmZlY3RzIHRhZyBzaWduaW5nCisJYmVoYXZpb3IgZW5hYmxlZCBieSAiLXUgPGtleWlkPiIgb3IgIi0tbG9jYWwtdXNlcj08a2V5aWQ+IiBvcHRpb25zLgorCiB0YXIudW1hc2s6OgogCVRoaXMgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHBlcm1pc3Npb24gYml0cyBvZgogCXRhciBhcmNoaXZlIGVudHJpZXMuICBUaGUgZGVmYXVsdCBpcyAwMDAyLCB3aGljaCB0dXJucyBvZmYgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dAppbmRleCA5MWM0Nzc1Li4zYzliNGY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKQEAgLTg4LDYgKzg4LDEwIEBACiAJQWxsb3cgc2V2ZXJhbCA8cmVwb3NpdG9yeT4gYW5kIDxncm91cD4gYXJndW1lbnRzIHRvIGJlCiAJc3BlY2lmaWVkLiBObyA8cmVmc3BlYz5zIG1heSBiZSBzcGVjaWZpZWQuCiAKKy0tW25vLV1hdXRvLWdjOjoKKwlSdW4gYGdpdCBnYyAtLWF1dG9gIGF0IHRoZSBlbmQgdG8gcGVyZm9ybSBnYXJiYWdlIGNvbGxlY3Rpb24KKwlpZiBuZWVkZWQuIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorCiAtcDo6CiAtLXBydW5lOjoKIAlCZWZvcmUgZmV0Y2hpbmcsIHJlbW92ZSBhbnkgcmVtb3RlLXRyYWNraW5nIHJlZmVyZW5jZXMgdGhhdCBubwpAQCAtMjIxLDYgKzIyNSwxOSBAQAogCVdoZW4gbXVsdGlwbGUgYC0tc2VydmVyLW9wdGlvbj08b3B0aW9uPmAgYXJlIGdpdmVuLCB0aGV5IGFyZSBhbGwKIAlzZW50IHRvIHRoZSBvdGhlciBzaWRlIGluIHRoZSBvcmRlciBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KIAorLS1zaG93LWZvcmNlZC11cGRhdGVzOjoKKwlCeSBkZWZhdWx0LCBnaXQgY2hlY2tzIGlmIGEgYnJhbmNoIGlzIGZvcmNlLXVwZGF0ZWQgZHVyaW5nCisJZmV0Y2guIFRoaXMgY2FuIGJlIGRpc2FibGVkIHRocm91Z2ggZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMsIGJ1dAorCXRoZSAtLXNob3ctZm9yY2VkLXVwZGF0ZXMgb3B0aW9uIGd1YXJhbnRlZXMgdGhpcyBjaGVjayBvY2N1cnMuCisJU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1uby1zaG93LWZvcmNlZC11cGRhdGVzOjoKKwlCeSBkZWZhdWx0LCBnaXQgY2hlY2tzIGlmIGEgYnJhbmNoIGlzIGZvcmNlLXVwZGF0ZWQgZHVyaW5nCisJZmV0Y2guIFBhc3MgLS1uby1zaG93LWZvcmNlZC11cGRhdGVzIG9yIHNldCBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcworCXRvIGZhbHNlIHRvIHNraXAgdGhpcyBjaGVjayBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSWYgdXNlZCBkdXJpbmcKKwknZ2l0LXB1bGwnIHRoZSAtLWZmLW9ubHkgb3B0aW9uIHdpbGwgc3RpbGwgY2hlY2sgZm9yIGZvcmNlZCB1cGRhdGVzCisJYmVmb3JlIGF0dGVtcHRpbmcgYSBmYXN0LWZvcndhcmQgdXBkYXRlLiBTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCiAtNDo6CiAtLWlwdjQ6OgogCVVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5LCBpZ25vcmluZyBJUHY2IGFkZHJlc3Nlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dAppbmRleCAxNjMyM2ViLi43ZTgxNTQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ibGFtZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0CkBAIC0xMCw2ICsxMCw3IEBACiBbdmVyc2VdCiAnZ2l0IGJsYW1lJyBbLWNdIFstYl0gWy1sXSBbLS1yb290XSBbLXRdIFstZl0gWy1uXSBbLXNdIFstZV0gWy1wXSBbLXddIFstLWluY3JlbWVudGFsXQogCSAgICBbLUwgPHJhbmdlPl0gWy1TIDxyZXZzLWZpbGU+XSBbLU1dIFstQ10gWy1DXSBbLUNdIFstLXNpbmNlPTxkYXRlPl0KKwkgICAgWy0taWdub3JlLXJldiA8cmV2Pl0gWy0taWdub3JlLXJldnMtZmlsZSA8ZmlsZT5dCiAJICAgIFstLXByb2dyZXNzXSBbLS1hYmJyZXY9PG4+XSBbPHJldj4gfCAtLWNvbnRlbnRzIDxmaWxlPiB8IC0tcmV2ZXJzZSA8cmV2Pi4uPHJldj5dCiAJICAgIFstLV0gPGZpbGU+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0CmluZGV4IDZlYmQ1MTIuLjEzNTIwNmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dApAQCAtOCwxMiArOCwxNCBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IGJyYW5jaCcgWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLXIgfCAtYV0KLQlbLS1saXN0XSBbLS1zaG93LWN1cnJlbnRdIFstdiBbLS1hYmJyZXY9PGxlbmd0aD4gfCAtLW5vLWFiYnJldl1dCisnZ2l0IGJyYW5jaCcgWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zaG93LWN1cnJlbnRdCisJWy12IFstLWFiYnJldj08bGVuZ3RoPiB8IC0tbm8tYWJicmV2XV0KIAlbLS1jb2x1bW5bPTxvcHRpb25zPl0gfCAtLW5vLWNvbHVtbl0gWy0tc29ydD08a2V5Pl0KIAlbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Y29tbWl0Pl1dCiAJWy0tY29udGFpbnMgWzxjb21taXRdXSBbLS1uby1jb250YWlucyBbPGNvbW1pdD5dXQotCVstLXBvaW50cy1hdCA8b2JqZWN0Pl0gWy0tZm9ybWF0PTxmb3JtYXQ+XSBbPHBhdHRlcm4+Li4uXQorCVstLXBvaW50cy1hdCA8b2JqZWN0Pl0gWy0tZm9ybWF0PTxmb3JtYXQ+XQorCVsoLXIgfCAtLXJlbW90ZXMpIHwgKC1hIHwgLS1hbGwpXQorCVstLWxpc3RdIFs8cGF0dGVybj4uLi5dCiAnZ2l0IGJyYW5jaCcgWy0tdHJhY2sgfCAtLW5vLXRyYWNrXSBbLWZdIDxicmFuY2huYW1lPiBbPHN0YXJ0LXBvaW50Pl0KICdnaXQgYnJhbmNoJyAoLS1zZXQtdXBzdHJlYW0tdG89PHVwc3RyZWFtPiB8IC11IDx1cHN0cmVhbT4pIFs8YnJhbmNobmFtZT5dCiAnZ2l0IGJyYW5jaCcgLS11bnNldC11cHN0cmVhbSBbPGJyYW5jaG5hbWU+XQpAQCAtMjYsMTMgKzI4LDE5IEBACiAtLS0tLS0tLS0tLQogCiBJZiBgLS1saXN0YCBpcyBnaXZlbiwgb3IgaWYgdGhlcmUgYXJlIG5vIG5vbi1vcHRpb24gYXJndW1lbnRzLCBleGlzdGluZwotYnJhbmNoZXMgYXJlIGxpc3RlZDsgdGhlIGN1cnJlbnQgYnJhbmNoIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgd2l0aCBhbgotYXN0ZXJpc2suICBPcHRpb24gYC1yYCBjYXVzZXMgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyB0byBiZSBsaXN0ZWQsCi1hbmQgb3B0aW9uIGAtYWAgc2hvd3MgYm90aCBsb2NhbCBhbmQgcmVtb3RlIGJyYW5jaGVzLiBJZiBhIGA8cGF0dGVybj5gCiticmFuY2hlcyBhcmUgbGlzdGVkOyB0aGUgY3VycmVudCBicmFuY2ggd2lsbCBiZSBoaWdobGlnaHRlZCBpbiBncmVlbiBhbmQKK21hcmtlZCB3aXRoIGFuIGFzdGVyaXNrLiAgQW55IGJyYW5jaGVzIGNoZWNrZWQgb3V0IGluIGxpbmtlZCB3b3JrdHJlZXMgd2lsbAorYmUgaGlnaGxpZ2h0ZWQgaW4gY3lhbiBhbmQgbWFya2VkIHdpdGggYSBwbHVzIHNpZ24uIE9wdGlvbiBgLXJgIGNhdXNlcyB0aGUKK3JlbW90ZS10cmFja2luZyBicmFuY2hlcyB0byBiZSBsaXN0ZWQsCithbmQgb3B0aW9uIGAtYWAgc2hvd3MgYm90aCBsb2NhbCBhbmQgcmVtb3RlIGJyYW5jaGVzLgorCitJZiBhIGA8cGF0dGVybj5gCiBpcyBnaXZlbiwgaXQgaXMgdXNlZCBhcyBhIHNoZWxsIHdpbGRjYXJkIHRvIHJlc3RyaWN0IHRoZSBvdXRwdXQgdG8KIG1hdGNoaW5nIGJyYW5jaGVzLiBJZiBtdWx0aXBsZSBwYXR0ZXJucyBhcmUgZ2l2ZW4sIGEgYnJhbmNoIGlzIHNob3duIGlmCi1pdCBtYXRjaGVzIGFueSBvZiB0aGUgcGF0dGVybnMuICBOb3RlIHRoYXQgd2hlbiBwcm92aWRpbmcgYQotYDxwYXR0ZXJuPmAsIHlvdSBtdXN0IHVzZSBgLS1saXN0YDsgb3RoZXJ3aXNlIHRoZSBjb21tYW5kIGlzIGludGVycHJldGVkCitpdCBtYXRjaGVzIGFueSBvZiB0aGUgcGF0dGVybnMuCisKK05vdGUgdGhhdCB3aGVuIHByb3ZpZGluZyBhCitgPHBhdHRlcm4+YCwgeW91IG11c3QgdXNlIGAtLWxpc3RgOyBvdGhlcndpc2UgdGhlIGNvbW1hbmQgbWF5IGJlIGludGVycHJldGVkCiBhcyBicmFuY2ggY3JlYXRpb24uCiAKIFdpdGggYC0tY29udGFpbnNgLCBzaG93cyBvbmx5IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIG5hbWVkIGNvbW1pdApAQCAtNTIsNyArNjAsNyBAQAogYEhFQURgLgogCiBOb3RlIHRoYXQgdGhpcyB3aWxsIGNyZWF0ZSB0aGUgbmV3IGJyYW5jaCwgYnV0IGl0IHdpbGwgbm90IHN3aXRjaCB0aGUKLXdvcmtpbmcgdHJlZSB0byBpdDsgdXNlICJnaXQgY2hlY2tvdXQgPG5ld2JyYW5jaD4iIHRvIHN3aXRjaCB0byB0aGUKK3dvcmtpbmcgdHJlZSB0byBpdDsgdXNlICJnaXQgc3dpdGNoIDxuZXdicmFuY2g+IiB0byBzd2l0Y2ggdG8gdGhlCiBuZXcgYnJhbmNoLgogCiBXaGVuIGEgbG9jYWwgYnJhbmNoIGlzIHN0YXJ0ZWQgb2ZmIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCwgR2l0IHNldHMgdXAgdGhlCkBAIC0xNTMsMTAgKzE2MSwxMiBAQAogLXI6OgogLS1yZW1vdGVzOjoKIAlMaXN0IG9yIGRlbGV0ZSAoaWYgdXNlZCB3aXRoIC1kKSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLgorCUNvbWJpbmUgd2l0aCBgLS1saXN0YCB0byBtYXRjaCB0aGUgb3B0aW9uYWwgcGF0dGVybihzKS4KIAogLWE6OgogLS1hbGw6OgogCUxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYW5kIGxvY2FsIGJyYW5jaGVzLgorCUNvbWJpbmUgd2l0aCBgLS1saXN0YCB0byBtYXRjaCBvcHRpb25hbCBwYXR0ZXJuKHMpLgogCiAtbDo6CiAtLWxpc3Q6OgpAQCAtMTc0LDggKzE4NCwxMCBAQAogCVdoZW4gaW4gbGlzdCBtb2RlLAogCXNob3cgc2hhMSBhbmQgY29tbWl0IHN1YmplY3QgbGluZSBmb3IgZWFjaCBoZWFkLCBhbG9uZyB3aXRoCiAJcmVsYXRpb25zaGlwIHRvIHVwc3RyZWFtIGJyYW5jaCAoaWYgYW55KS4gSWYgZ2l2ZW4gdHdpY2UsIHByaW50Ci0JdGhlIG5hbWUgb2YgdGhlIHVwc3RyZWFtIGJyYW5jaCwgYXMgd2VsbCAoc2VlIGFsc28gYGdpdCByZW1vdGUKLQlzaG93IDxyZW1vdGU+YCkuCisJdGhlIHBhdGggb2YgdGhlIGxpbmtlZCB3b3JrdHJlZSAoaWYgYW55KSBhbmQgdGhlIG5hbWUgb2YgdGhlIHVwc3RyZWFtCisJYnJhbmNoLCBhcyB3ZWxsIChzZWUgYWxzbyBgZ2l0IHJlbW90ZSBzaG93IDxyZW1vdGU+YCkuICBOb3RlIHRoYXQgdGhlCisJY3VycmVudCB3b3JrdHJlZSdzIEhFQUQgd2lsbCBub3QgaGF2ZSBpdHMgcGF0aCBwcmludGVkIChpdCB3aWxsIGFsd2F5cworCWJlIHlvdXIgY3VycmVudCBkaXJlY3RvcnkpLgogCiAtcTo6CiAtLXF1aWV0OjoKQEAgLTIwMiw3ICsyMTQsNyBAQAogKwogVGhpcyBiZWhhdmlvciBpcyB0aGUgZGVmYXVsdCB3aGVuIHRoZSBzdGFydCBwb2ludCBpcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2guCiBTZXQgdGhlIGJyYW5jaC5hdXRvU2V0dXBNZXJnZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGBmYWxzZWAgaWYgeW91Ci13YW50IGBnaXQgY2hlY2tvdXRgIGFuZCBgZ2l0IGJyYW5jaGAgdG8gYWx3YXlzIGJlaGF2ZSBhcyBpZiBgLS1uby10cmFja2AKK3dhbnQgYGdpdCBzd2l0Y2hgLCBgZ2l0IGNoZWNrb3V0YCBhbmQgYGdpdCBicmFuY2hgIHRvIGFsd2F5cyBiZWhhdmUgYXMgaWYgYC0tbm8tdHJhY2tgCiB3ZXJlIGdpdmVuLiBTZXQgaXQgdG8gYGFsd2F5c2AgaWYgeW91IHdhbnQgdGhpcyBiZWhhdmlvciB3aGVuIHRoZQogc3RhcnQtcG9pbnQgaXMgZWl0aGVyIGEgbG9jYWwgb3IgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4KIApAQCAtMzAxLDcgKzMxMyw3IEBACiAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtLy4uLi9saW51eC0yLjYgbXkyLjYKICQgY2QgbXkyLjYKICQgZ2l0IGJyYW5jaCBteTIuNi4xNCB2Mi42LjE0ICAgPDE+Ci0kIGdpdCBjaGVja291dCBteTIuNi4xNAorJCBnaXQgc3dpdGNoIG15Mi42LjE0CiAtLS0tLS0tLS0tLS0KICsKIDwxPiBUaGlzIHN0ZXAgYW5kIHRoZSBuZXh0IG9uZSBjb3VsZCBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIHN0ZXAgd2l0aApAQCAtMzIyLDEzICszMzQsMjUgQEAKIDwyPiBEZWxldGUgdGhlICJ0ZXN0IiBicmFuY2ggZXZlbiBpZiB0aGUgIm1hc3RlciIgYnJhbmNoIChvciB3aGljaGV2ZXIgYnJhbmNoCiAgICAgaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0KSBkb2VzIG5vdCBoYXZlIGFsbCBjb21taXRzIGZyb20gdGhlIHRlc3QgYnJhbmNoLgogCitMaXN0aW5nIGJyYW5jaGVzIGZyb20gYSBzcGVjaWZpYyByZW1vdGU6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLXIgLWwgJzxyZW1vdGU+LzxwYXR0ZXJuPicgICAgICAgICAgICAgICAgIDwxPgorJCBnaXQgZm9yLWVhY2gtcmVmICdyZWZzL3JlbW90ZXMvPHJlbW90ZT4vPHBhdHRlcm4+JyAgICA8Mj4KKy0tLS0tLS0tLS0tLQorKworPDE+IFVzaW5nIGAtYWAgd291bGQgY29uZmxhdGUgPHJlbW90ZT4gd2l0aCBhbnkgbG9jYWwgYnJhbmNoZXMgeW91IGhhcHBlbiB0bworICAgIGhhdmUgYmVlbiBwcmVmaXhlZCB3aXRoIHRoZSBzYW1lIDxyZW1vdGU+IHBhdHRlcm4uCis8Mj4gYGZvci1lYWNoLXJlZmAgY2FuIHRha2UgYSB3aWRlIHJhbmdlIG9mIG9wdGlvbnMuIFNlZSBsaW5rZ2l0OmdpdC1mb3ItZWFjaC1yZWZbMV0KKworUGF0dGVybnMgd2lsbCBub3JtYWxseSBuZWVkIHF1b3RpbmcuCiAKIE5PVEVTCiAtLS0tLQogCi1JZiB5b3UgYXJlIGNyZWF0aW5nIGEgYnJhbmNoIHRoYXQgeW91IHdhbnQgdG8gY2hlY2tvdXQgaW1tZWRpYXRlbHksIGl0IGlzCi1lYXNpZXIgdG8gdXNlIHRoZSBnaXQgY2hlY2tvdXQgY29tbWFuZCB3aXRoIGl0cyBgLWJgIG9wdGlvbiB0byBjcmVhdGUKLWEgYnJhbmNoIGFuZCBjaGVjayBpdCBvdXQgd2l0aCBhIHNpbmdsZSBjb21tYW5kLgorSWYgeW91IGFyZSBjcmVhdGluZyBhIGJyYW5jaCB0aGF0IHlvdSB3YW50IHRvIHN3aXRjaCB0byBpbW1lZGlhdGVseSwKK2l0IGlzIGVhc2llciB0byB1c2UgdGhlICJnaXQgc3dpdGNoIiBjb21tYW5kIHdpdGggaXRzIGAtY2Agb3B0aW9uIHRvCitkbyB0aGUgc2FtZSB0aGluZyB3aXRoIGEgc2luZ2xlIGNvbW1hbmQuCiAKIFRoZSBvcHRpb25zIGAtLWNvbnRhaW5zYCwgYC0tbm8tY29udGFpbnNgLCBgLS1tZXJnZWRgIGFuZCBgLS1uby1tZXJnZWRgCiBzZXJ2ZSBmb3VyIHJlbGF0ZWQgYnV0IGRpZmZlcmVudCBwdXJwb3NlczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stcmVmLWZvcm1hdC50eHQKaW5kZXggZDlkZTk5Mi4uZWU2YTQxNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stcmVmLWZvcm1hdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stcmVmLWZvcm1hdC50eHQKQEAgLTg4LDcgKzg4LDggQEAKIFdoZW4gcnVuIHdpdGggYC0tYnJhbmNoYCBvcHRpb24gaW4gYSByZXBvc2l0b3J5LCB0aGUgaW5wdXQgaXMgZmlyc3QKIGV4cGFuZGVkIGZvciB0aGUgYGBwcmV2aW91cyBjaGVja291dCBzeW50YXgnJwogYEB7LW59YC4gIEZvciBleGFtcGxlLCBgQHstMX1gIGlzIGEgd2F5IHRvIHJlZmVyIHRoZSBsYXN0IHRoaW5nIHRoYXQKLXdhcyBjaGVja2VkIG91dCB1c2luZyAiZ2l0IGNoZWNrb3V0IiBvcGVyYXRpb24uIFRoaXMgb3B0aW9uIHNob3VsZCBiZQord2FzIGNoZWNrZWQgb3V0IHVzaW5nICJnaXQgc3dpdGNoIiBvciAiZ2l0IGNoZWNrb3V0IiBvcGVyYXRpb24uCitUaGlzIG9wdGlvbiBzaG91bGQgYmUKIHVzZWQgYnkgcG9yY2VsYWlucyB0byBhY2NlcHQgdGhpcyBzeW50YXggYW55d2hlcmUgYSBicmFuY2ggbmFtZSBpcwogZXhwZWN0ZWQsIHNvIHRoZXkgY2FuIGFjdCBhcyBpZiB5b3UgdHlwZWQgdGhlIGJyYW5jaCBuYW1lLiBBcyBhbgogZXhjZXB0aW9uIG5vdGUgdGhhdCwgdGhlIGBgcHJldmlvdXMgY2hlY2tvdXQgb3BlcmF0aW9uJycgbWlnaHQgcmVzdWx0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKaW5kZXggOTY0ZjkxMi4uY2YzY2FjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dApAQCAtMjMsMzEgKzIzLDIyIEBACiBhbHNvIHVwZGF0ZSBgSEVBRGAgdG8gc2V0IHRoZSBzcGVjaWZpZWQgYnJhbmNoIGFzIHRoZSBjdXJyZW50CiBicmFuY2guCiAKLSdnaXQgY2hlY2tvdXQnIDxicmFuY2g+OjoKLQlUbyBwcmVwYXJlIGZvciB3b3JraW5nIG9uIDxicmFuY2g+LCBzd2l0Y2ggdG8gaXQgYnkgdXBkYXRpbmcKKydnaXQgY2hlY2tvdXQnIFs8YnJhbmNoPl06OgorCVRvIHByZXBhcmUgZm9yIHdvcmtpbmcgb24gYDxicmFuY2g+YCwgc3dpdGNoIHRvIGl0IGJ5IHVwZGF0aW5nCiAJdGhlIGluZGV4IGFuZCB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgYW5kIGJ5IHBvaW50aW5nCi0JSEVBRCBhdCB0aGUgYnJhbmNoLiBMb2NhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBmaWxlcyBpbiB0aGUKKwlgSEVBRGAgYXQgdGhlIGJyYW5jaC4gTG9jYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgZmlsZXMgaW4gdGhlCiAJd29ya2luZyB0cmVlIGFyZSBrZXB0LCBzbyB0aGF0IHRoZXkgY2FuIGJlIGNvbW1pdHRlZCB0byB0aGUKLQk8YnJhbmNoPi4KKwlgPGJyYW5jaD5gLgogKwotSWYgPGJyYW5jaD4gaXMgbm90IGZvdW5kIGJ1dCB0aGVyZSBkb2VzIGV4aXN0IGEgdHJhY2tpbmcgYnJhbmNoIGluCi1leGFjdGx5IG9uZSByZW1vdGUgKGNhbGwgaXQgPHJlbW90ZT4pIHdpdGggYSBtYXRjaGluZyBuYW1lLCB0cmVhdCBhcwotZXF1aXZhbGVudCB0bworSWYgYDxicmFuY2g+YCBpcyBub3QgZm91bmQgYnV0IHRoZXJlIGRvZXMgZXhpc3QgYSB0cmFja2luZyBicmFuY2ggaW4KK2V4YWN0bHkgb25lIHJlbW90ZSAoY2FsbCBpdCBgPHJlbW90ZT5gKSB3aXRoIGEgbWF0Y2hpbmcgbmFtZSBhbmQKK2AtLW5vLWd1ZXNzYCBpcyBub3Qgc3BlY2lmaWVkLCB0cmVhdCBhcyBlcXVpdmFsZW50IHRvCiArCiAtLS0tLS0tLS0tLS0KICQgZ2l0IGNoZWNrb3V0IC1iIDxicmFuY2g+IC0tdHJhY2sgPHJlbW90ZT4vPGJyYW5jaD4KIC0tLS0tLS0tLS0tLQogKwotSWYgdGhlIGJyYW5jaCBleGlzdHMgaW4gbXVsdGlwbGUgcmVtb3RlcyBhbmQgb25lIG9mIHRoZW0gaXMgbmFtZWQgYnkKLXRoZSBgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgd2UnbGwgdXNlIHRoYXQKLW9uZSBmb3IgdGhlIHB1cnBvc2VzIG9mIGRpc2FtYmlndWF0aW9uLCBldmVuIGlmIHRoZSBgPGJyYW5jaD5gIGlzbid0Ci11bmlxdWUgYWNyb3NzIGFsbCByZW1vdGVzLiBTZXQgaXQgdG8KLWUuZy4gYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luYCB0byBhbHdheXMgY2hlY2tvdXQgcmVtb3RlCi1icmFuY2hlcyBmcm9tIHRoZXJlIGlmIGA8YnJhbmNoPmAgaXMgYW1iaWd1b3VzIGJ1dCBleGlzdHMgb24gdGhlCi0nb3JpZ2luJyByZW1vdGUuIFNlZSBhbHNvIGBjaGVja291dC5kZWZhdWx0UmVtb3RlYCBpbgotbGlua2dpdDpnaXQtY29uZmlnWzFdLgotKwotWW91IGNvdWxkIG9taXQgPGJyYW5jaD4sIGluIHdoaWNoIGNhc2UgdGhlIGNvbW1hbmQgZGVnZW5lcmF0ZXMgdG8KK1lvdSBjb3VsZCBvbWl0IGA8YnJhbmNoPmAsIGluIHdoaWNoIGNhc2UgdGhlIGNvbW1hbmQgZGVnZW5lcmF0ZXMgdG8KICJjaGVjayBvdXQgdGhlIGN1cnJlbnQgYnJhbmNoIiwgd2hpY2ggaXMgYSBnbG9yaWZpZWQgbm8tb3Agd2l0aAogcmF0aGVyIGV4cGVuc2l2ZSBzaWRlLWVmZmVjdHMgdG8gc2hvdyBvbmx5IHRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiwKIGlmIGV4aXN0cywgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4KQEAgLTYxLDcgKzUyLDcgQEAKIAlgLS10cmFja2Agd2l0aG91dCBgLWJgIGltcGxpZXMgYnJhbmNoIGNyZWF0aW9uOyBzZWUgdGhlCiAJZGVzY3JpcHRpb24gb2YgYC0tdHJhY2tgIGJlbG93LgogKwotSWYgYC1CYCBpcyBnaXZlbiwgPG5ld19icmFuY2g+IGlzIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdDsgb3RoZXJ3aXNlLCBpdAorSWYgYC1CYCBpcyBnaXZlbiwgYDxuZXdfYnJhbmNoPmAgaXMgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGV4aXN0OyBvdGhlcndpc2UsIGl0CiBpcyByZXNldC4gVGhpcyBpcyB0aGUgdHJhbnNhY3Rpb25hbCBlcXVpdmFsZW50IG9mCiArCiAtLS0tLS0tLS0tLS0KQEAgLTc1LDI1ICs2NiwyNSBAQAogJ2dpdCBjaGVja291dCcgLS1kZXRhY2ggWzxicmFuY2g+XTo6CiAnZ2l0IGNoZWNrb3V0JyBbLS1kZXRhY2hdIDxjb21taXQ+OjoKIAotCVByZXBhcmUgdG8gd29yayBvbiB0b3Agb2YgPGNvbW1pdD4sIGJ5IGRldGFjaGluZyBIRUFEIGF0IGl0CisJUHJlcGFyZSB0byB3b3JrIG9uIHRvcCBvZiBgPGNvbW1pdD5gLCBieSBkZXRhY2hpbmcgYEhFQURgIGF0IGl0CiAJKHNlZSAiREVUQUNIRUQgSEVBRCIgc2VjdGlvbiksIGFuZCB1cGRhdGluZyB0aGUgaW5kZXggYW5kIHRoZQogCWZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUuICBMb2NhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBmaWxlcwogCWluIHRoZSB3b3JraW5nIHRyZWUgYXJlIGtlcHQsIHNvIHRoYXQgdGhlIHJlc3VsdGluZyB3b3JraW5nCiAJdHJlZSB3aWxsIGJlIHRoZSBzdGF0ZSByZWNvcmRlZCBpbiB0aGUgY29tbWl0IHBsdXMgdGhlIGxvY2FsCiAJbW9kaWZpY2F0aW9ucy4KICsKLVdoZW4gdGhlIDxjb21taXQ+IGFyZ3VtZW50IGlzIGEgYnJhbmNoIG5hbWUsIHRoZSBgLS1kZXRhY2hgIG9wdGlvbiBjYW4KLWJlIHVzZWQgdG8gZGV0YWNoIEhFQUQgYXQgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIChgZ2l0IGNoZWNrb3V0Ci08YnJhbmNoPmAgd291bGQgY2hlY2sgb3V0IHRoYXQgYnJhbmNoIHdpdGhvdXQgZGV0YWNoaW5nIEhFQUQpLgorV2hlbiB0aGUgYDxjb21taXQ+YCBhcmd1bWVudCBpcyBhIGJyYW5jaCBuYW1lLCB0aGUgYC0tZGV0YWNoYCBvcHRpb24gY2FuCitiZSB1c2VkIHRvIGRldGFjaCBgSEVBRGAgYXQgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIChgZ2l0IGNoZWNrb3V0Cis8YnJhbmNoPmAgd291bGQgY2hlY2sgb3V0IHRoYXQgYnJhbmNoIHdpdGhvdXQgZGV0YWNoaW5nIGBIRUFEYCkuCiArCi1PbWl0dGluZyA8YnJhbmNoPiBkZXRhY2hlcyBIRUFEIGF0IHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoLgorT21pdHRpbmcgYDxicmFuY2g+YCBkZXRhY2hlcyBgSEVBRGAgYXQgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2guCiAKICdnaXQgY2hlY2tvdXQnIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRoc3BlYz4uLi46OgogCiAJT3ZlcndyaXRlIHBhdGhzIGluIHRoZSB3b3JraW5nIHRyZWUgYnkgcmVwbGFjaW5nIHdpdGggdGhlCi0JY29udGVudHMgaW4gdGhlIGluZGV4IG9yIGluIHRoZSA8dHJlZS1pc2g+IChtb3N0IG9mdGVuIGEKLQljb21taXQpLiAgV2hlbiBhIDx0cmVlLWlzaD4gaXMgZ2l2ZW4sIHRoZSBwYXRocyB0aGF0Ci0JbWF0Y2ggdGhlIDxwYXRoc3BlYz4gYXJlIHVwZGF0ZWQgYm90aCBpbiB0aGUgaW5kZXggYW5kIGluCisJY29udGVudHMgaW4gdGhlIGluZGV4IG9yIGluIHRoZSBgPHRyZWUtaXNoPmAgKG1vc3Qgb2Z0ZW4gYQorCWNvbW1pdCkuICBXaGVuIGEgYDx0cmVlLWlzaD5gIGlzIGdpdmVuLCB0aGUgcGF0aHMgdGhhdAorCW1hdGNoIHRoZSBgPHBhdGhzcGVjPmAgYXJlIHVwZGF0ZWQgYm90aCBpbiB0aGUgaW5kZXggYW5kIGluCiAJdGhlIHdvcmtpbmcgdHJlZS4KICsKIFRoZSBpbmRleCBtYXkgY29udGFpbiB1bm1lcmdlZCBlbnRyaWVzIGJlY2F1c2Ugb2YgYSBwcmV2aW91cyBmYWlsZWQgbWVyZ2UuCkBAIC0xMTgsNyArMTA5LDggQEAKIC0tcXVpZXQ6OgogCVF1aWV0LCBzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcy4KIAotLS1bbm8tXXByb2dyZXNzOjoKKy0tcHJvZ3Jlc3M6OgorLS1uby1wcm9ncmVzczo6CiAJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KIAlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIGAtLXF1aWV0YAogCWlzIHNwZWNpZmllZC4gVGhpcyBmbGFnIGVuYWJsZXMgcHJvZ3Jlc3MgcmVwb3J0aW5nIGV2ZW4gaWYgbm90CkBAIC0xMjcsNyArMTE5LDcgQEAKIC1mOjoKIC0tZm9yY2U6OgogCVdoZW4gc3dpdGNoaW5nIGJyYW5jaGVzLCBwcm9jZWVkIGV2ZW4gaWYgdGhlIGluZGV4IG9yIHRoZQotCXdvcmtpbmcgdHJlZSBkaWZmZXJzIGZyb20gSEVBRC4gIFRoaXMgaXMgdXNlZCB0byB0aHJvdyBhd2F5CisJd29ya2luZyB0cmVlIGRpZmZlcnMgZnJvbSBgSEVBRGAuICBUaGlzIGlzIHVzZWQgdG8gdGhyb3cgYXdheQogCWxvY2FsIGNoYW5nZXMuCiArCiBXaGVuIGNoZWNraW5nIG91dCBwYXRocyBmcm9tIHRoZSBpbmRleCwgZG8gbm90IGZhaWwgdXBvbiB1bm1lcmdlZApAQCAtMTU0LDEyICsxNDYsMTIgQEAKIG9mIGl0IikuCiAKIC1iIDxuZXdfYnJhbmNoPjo6Ci0JQ3JlYXRlIGEgbmV3IGJyYW5jaCBuYW1lZCA8bmV3X2JyYW5jaD4gYW5kIHN0YXJ0IGl0IGF0Ci0JPHN0YXJ0X3BvaW50Pjsgc2VlIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IgZGV0YWlscy4KKwlDcmVhdGUgYSBuZXcgYnJhbmNoIG5hbWVkIGA8bmV3X2JyYW5jaD5gIGFuZCBzdGFydCBpdCBhdAorCWA8c3RhcnRfcG9pbnQ+YDsgc2VlIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IgZGV0YWlscy4KIAogLUIgPG5ld19icmFuY2g+OjoKLQlDcmVhdGVzIHRoZSBicmFuY2ggPG5ld19icmFuY2g+IGFuZCBzdGFydCBpdCBhdCA8c3RhcnRfcG9pbnQ+OwotCWlmIGl0IGFscmVhZHkgZXhpc3RzLCB0aGVuIHJlc2V0IGl0IHRvIDxzdGFydF9wb2ludD4uIFRoaXMgaXMKKwlDcmVhdGVzIHRoZSBicmFuY2ggYDxuZXdfYnJhbmNoPmAgYW5kIHN0YXJ0IGl0IGF0IGA8c3RhcnRfcG9pbnQ+YDsKKwlpZiBpdCBhbHJlYWR5IGV4aXN0cywgdGhlbiByZXNldCBpdCB0byBgPHN0YXJ0X3BvaW50PmAuIFRoaXMgaXMKIAllcXVpdmFsZW50IHRvIHJ1bm5pbmcgImdpdCBicmFuY2giIHdpdGggIi1mIjsgc2VlCiAJbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvciBkZXRhaWxzLgogCkBAIC0xNzIsMTUgKzE2NCwzNiBAQAogZGVyaXZlZCBmcm9tIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBieSBsb29raW5nIGF0IHRoZSBsb2NhbCBwYXJ0IG9mCiB0aGUgcmVmc3BlYyBjb25maWd1cmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUsIGFuZCB0aGVuIHN0cmlwcGluZwogdGhlIGluaXRpYWwgcGFydCB1cCB0byB0aGUgIioiLgotVGhpcyB3b3VsZCB0ZWxsIHVzIHRvIHVzZSAiaGFjayIgYXMgdGhlIGxvY2FsIGJyYW5jaCB3aGVuIGJyYW5jaGluZwotb2ZmIG9mICJvcmlnaW4vaGFjayIgKG9yICJyZW1vdGVzL29yaWdpbi9oYWNrIiwgb3IgZXZlbgotInJlZnMvcmVtb3Rlcy9vcmlnaW4vaGFjayIpLiAgSWYgdGhlIGdpdmVuIG5hbWUgaGFzIG5vIHNsYXNoLCBvciB0aGUgYWJvdmUKK1RoaXMgd291bGQgdGVsbCB1cyB0byB1c2UgYGhhY2tgIGFzIHRoZSBsb2NhbCBicmFuY2ggd2hlbiBicmFuY2hpbmcKK29mZiBvZiBgb3JpZ2luL2hhY2tgIChvciBgcmVtb3Rlcy9vcmlnaW4vaGFja2AsIG9yIGV2ZW4KK2ByZWZzL3JlbW90ZXMvb3JpZ2luL2hhY2tgKS4gIElmIHRoZSBnaXZlbiBuYW1lIGhhcyBubyBzbGFzaCwgb3IgdGhlIGFib3ZlCiBndWVzc2luZyByZXN1bHRzIGluIGFuIGVtcHR5IG5hbWUsIHRoZSBndWVzc2luZyBpcyBhYm9ydGVkLiAgWW91IGNhbgogZXhwbGljaXRseSBnaXZlIGEgbmFtZSB3aXRoIGAtYmAgaW4gc3VjaCBhIGNhc2UuCiAKIC0tbm8tdHJhY2s6OgogCURvIG5vdCBzZXQgdXAgInVwc3RyZWFtIiBjb25maWd1cmF0aW9uLCBldmVuIGlmIHRoZQotCWJyYW5jaC5hdXRvU2V0dXBNZXJnZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHRydWUuCisJYGJyYW5jaC5hdXRvU2V0dXBNZXJnZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyB0cnVlLgorCistLWd1ZXNzOjoKKy0tbm8tZ3Vlc3M6OgorCUlmIGA8YnJhbmNoPmAgaXMgbm90IGZvdW5kIGJ1dCB0aGVyZSBkb2VzIGV4aXN0IGEgdHJhY2tpbmcKKwlicmFuY2ggaW4gZXhhY3RseSBvbmUgcmVtb3RlIChjYWxsIGl0IGA8cmVtb3RlPmApIHdpdGggYQorCW1hdGNoaW5nIG5hbWUsIHRyZWF0IGFzIGVxdWl2YWxlbnQgdG8KKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgPGJyYW5jaD4gLS10cmFjayA8cmVtb3RlPi88YnJhbmNoPgorLS0tLS0tLS0tLS0tCisrCitJZiB0aGUgYnJhbmNoIGV4aXN0cyBpbiBtdWx0aXBsZSByZW1vdGVzIGFuZCBvbmUgb2YgdGhlbSBpcyBuYW1lZCBieQordGhlIGBjaGVja291dC5kZWZhdWx0UmVtb3RlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3ZSdsbCB1c2UgdGhhdAorb25lIGZvciB0aGUgcHVycG9zZXMgb2YgZGlzYW1iaWd1YXRpb24sIGV2ZW4gaWYgdGhlIGA8YnJhbmNoPmAgaXNuJ3QKK3VuaXF1ZSBhY3Jvc3MgYWxsIHJlbW90ZXMuIFNldCBpdCB0bworZS5nLiBgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW5gIHRvIGFsd2F5cyBjaGVja291dCByZW1vdGUKK2JyYW5jaGVzIGZyb20gdGhlcmUgaWYgYDxicmFuY2g+YCBpcyBhbWJpZ3VvdXMgYnV0IGV4aXN0cyBvbiB0aGUKKydvcmlnaW4nIHJlbW90ZS4gU2VlIGFsc28gYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGVgIGluCitsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisrCitVc2UgYC0tbm8tZ3Vlc3NgIHRvIGRpc2FibGUgdGhpcy4KIAogLWw6OgogCUNyZWF0ZSB0aGUgbmV3IGJyYW5jaCdzIHJlZmxvZzsgc2VlIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IKQEAgLTE4OSwyMSArMjAyLDIxIEBACiAtLWRldGFjaDo6CiAJUmF0aGVyIHRoYW4gY2hlY2tpbmcgb3V0IGEgYnJhbmNoIHRvIHdvcmsgb24gaXQsIGNoZWNrIG91dCBhCiAJY29tbWl0IGZvciBpbnNwZWN0aW9uIGFuZCBkaXNjYXJkYWJsZSBleHBlcmltZW50cy4KLQlUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mICJnaXQgY2hlY2tvdXQgPGNvbW1pdD4iIHdoZW4KLQk8Y29tbWl0PiBpcyBub3QgYSBicmFuY2ggbmFtZS4gIFNlZSB0aGUgIkRFVEFDSEVEIEhFQUQiIHNlY3Rpb24KKwlUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGBnaXQgY2hlY2tvdXQgPGNvbW1pdD5gIHdoZW4KKwlgPGNvbW1pdD5gIGlzIG5vdCBhIGJyYW5jaCBuYW1lLiAgU2VlIHRoZSAiREVUQUNIRUQgSEVBRCIgc2VjdGlvbgogCWJlbG93IGZvciBkZXRhaWxzLgogCiAtLW9ycGhhbiA8bmV3X2JyYW5jaD46OgotCUNyZWF0ZSBhIG5ldyAnb3JwaGFuJyBicmFuY2gsIG5hbWVkIDxuZXdfYnJhbmNoPiwgc3RhcnRlZCBmcm9tCi0JPHN0YXJ0X3BvaW50PiBhbmQgc3dpdGNoIHRvIGl0LiAgVGhlIGZpcnN0IGNvbW1pdCBtYWRlIG9uIHRoaXMKKwlDcmVhdGUgYSBuZXcgJ29ycGhhbicgYnJhbmNoLCBuYW1lZCBgPG5ld19icmFuY2g+YCwgc3RhcnRlZCBmcm9tCisJYDxzdGFydF9wb2ludD5gIGFuZCBzd2l0Y2ggdG8gaXQuICBUaGUgZmlyc3QgY29tbWl0IG1hZGUgb24gdGhpcwogCW5ldyBicmFuY2ggd2lsbCBoYXZlIG5vIHBhcmVudHMgYW5kIGl0IHdpbGwgYmUgdGhlIHJvb3Qgb2YgYSBuZXcKIAloaXN0b3J5IHRvdGFsbHkgZGlzY29ubmVjdGVkIGZyb20gYWxsIHRoZSBvdGhlciBicmFuY2hlcyBhbmQKIAljb21taXRzLgogKwogVGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIGFyZSBhZGp1c3RlZCBhcyBpZiB5b3UgaGFkIHByZXZpb3VzbHkgcnVuCi0iZ2l0IGNoZWNrb3V0IDxzdGFydF9wb2ludD4iLiAgVGhpcyBhbGxvd3MgeW91IHRvIHN0YXJ0IGEgbmV3IGhpc3RvcnkKLXRoYXQgcmVjb3JkcyBhIHNldCBvZiBwYXRocyBzaW1pbGFyIHRvIDxzdGFydF9wb2ludD4gYnkgZWFzaWx5IHJ1bm5pbmcKLSJnaXQgY29tbWl0IC1hIiB0byBtYWtlIHRoZSByb290IGNvbW1pdC4KK2BnaXQgY2hlY2tvdXQgPHN0YXJ0X3BvaW50PmAuICBUaGlzIGFsbG93cyB5b3UgdG8gc3RhcnQgYSBuZXcgaGlzdG9yeQordGhhdCByZWNvcmRzIGEgc2V0IG9mIHBhdGhzIHNpbWlsYXIgdG8gYDxzdGFydF9wb2ludD5gIGJ5IGVhc2lseSBydW5uaW5nCitgZ2l0IGNvbW1pdCAtYWAgdG8gbWFrZSB0aGUgcm9vdCBjb21taXQuCiArCiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSB0cmVlIGZyb20gYSBjb21taXQKIHdpdGhvdXQgZXhwb3NpbmcgaXRzIGZ1bGwgaGlzdG9yeS4gWW91IG1pZ2h0IHdhbnQgdG8gZG8gdGhpcyB0byBwdWJsaXNoCkBAIC0yMTIsMTcgKzIyNSwxNyBAQAogY29kZS4KICsKIElmIHlvdSB3YW50IHRvIHN0YXJ0IGEgZGlzY29ubmVjdGVkIGhpc3RvcnkgdGhhdCByZWNvcmRzIGEgc2V0IG9mIHBhdGhzCi10aGF0IGlzIHRvdGFsbHkgZGlmZmVyZW50IGZyb20gdGhlIG9uZSBvZiA8c3RhcnRfcG9pbnQ+LCB0aGVuIHlvdSBzaG91bGQKK3RoYXQgaXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIG9mIGA8c3RhcnRfcG9pbnQ+YCwgdGhlbiB5b3Ugc2hvdWxkCiBjbGVhciB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUgcmlnaHQgYWZ0ZXIgY3JlYXRpbmcgdGhlIG9ycGhhbgotYnJhbmNoIGJ5IHJ1bm5pbmcgImdpdCBybSAtcmYgLiIgZnJvbSB0aGUgdG9wIGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuCiticmFuY2ggYnkgcnVubmluZyBgZ2l0IHJtIC1yZiAuYCBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4KIEFmdGVyd2FyZHMgeW91IHdpbGwgYmUgcmVhZHkgdG8gcHJlcGFyZSB5b3VyIG5ldyBmaWxlcywgcmVwb3B1bGF0aW5nIHRoZQogd29ya2luZyB0cmVlLCBieSBjb3B5aW5nIHRoZW0gZnJvbSBlbHNld2hlcmUsIGV4dHJhY3RpbmcgYSB0YXJiYWxsLCBldGMuCiAKIC0taWdub3JlLXNraXAtd29ya3RyZWUtYml0czo6CiAJSW4gc3BhcnNlIGNoZWNrb3V0IG1vZGUsIGBnaXQgY2hlY2tvdXQgLS0gPHBhdGhzPmAgd291bGQKLQl1cGRhdGUgb25seSBlbnRyaWVzIG1hdGNoZWQgYnkgPHBhdGhzPiBhbmQgc3BhcnNlIHBhdHRlcm5zCi0JaW4gJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXQuIFRoaXMgb3B0aW9uIGlnbm9yZXMKLQl0aGUgc3BhcnNlIHBhdHRlcm5zIGFuZCBhZGRzIGJhY2sgYW55IGZpbGVzIGluIDxwYXRocz4uCisJdXBkYXRlIG9ubHkgZW50cmllcyBtYXRjaGVkIGJ5IGA8cGF0aHM+YCBhbmQgc3BhcnNlIHBhdHRlcm5zCisJaW4gYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YC4gVGhpcyBvcHRpb24gaWdub3JlcworCXRoZSBzcGFyc2UgcGF0dGVybnMgYW5kIGFkZHMgYmFjayBhbnkgZmlsZXMgaW4gYDxwYXRocz5gLgogCiAtbTo6CiAtLW1lcmdlOjoKQEAgLTI0NiwyNSArMjU5LDI1IEBACiBXaGVuIHN3aXRjaGluZyBicmFuY2hlcyB3aXRoIGAtLW1lcmdlYCwgc3RhZ2VkIGNoYW5nZXMgbWF5IGJlIGxvc3QuCiAKIC0tY29uZmxpY3Q9PHN0eWxlPjo6Ci0JVGhlIHNhbWUgYXMgLS1tZXJnZSBvcHRpb24gYWJvdmUsIGJ1dCBjaGFuZ2VzIHRoZSB3YXkgdGhlCisJVGhlIHNhbWUgYXMgYC0tbWVyZ2VgIG9wdGlvbiBhYm92ZSwgYnV0IGNoYW5nZXMgdGhlIHdheSB0aGUKIAljb25mbGljdGluZyBodW5rcyBhcmUgcHJlc2VudGVkLCBvdmVycmlkaW5nIHRoZQotCW1lcmdlLmNvbmZsaWN0U3R5bGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFBvc3NpYmxlIHZhbHVlcyBhcmUKKwlgbWVyZ2UuY29uZmxpY3RTdHlsZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFBvc3NpYmxlIHZhbHVlcyBhcmUKIAkibWVyZ2UiIChkZWZhdWx0KSBhbmQgImRpZmYzIiAoaW4gYWRkaXRpb24gdG8gd2hhdCBpcyBzaG93biBieQogCSJtZXJnZSIgc3R5bGUsIHNob3dzIHRoZSBvcmlnaW5hbCBjb250ZW50cykuCiAKIC1wOjoKIC0tcGF0Y2g6OgogCUludGVyYWN0aXZlbHkgc2VsZWN0IGh1bmtzIGluIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCi0JPHRyZWUtaXNoPiAob3IgdGhlIGluZGV4LCBpZiB1bnNwZWNpZmllZCkgYW5kIHRoZSB3b3JraW5nCisJYDx0cmVlLWlzaD5gIChvciB0aGUgaW5kZXgsIGlmIHVuc3BlY2lmaWVkKSBhbmQgdGhlIHdvcmtpbmcKIAl0cmVlLiAgVGhlIGNob3NlbiBodW5rcyBhcmUgdGhlbiBhcHBsaWVkIGluIHJldmVyc2UgdG8gdGhlCi0Jd29ya2luZyB0cmVlIChhbmQgaWYgYSA8dHJlZS1pc2g+IHdhcyBzcGVjaWZpZWQsIHRoZSBpbmRleCkuCisJd29ya2luZyB0cmVlIChhbmQgaWYgYSBgPHRyZWUtaXNoPmAgd2FzIHNwZWNpZmllZCwgdGhlIGluZGV4KS4KICsKIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHVzZSBgZ2l0IGNoZWNrb3V0IC1wYCB0byBzZWxlY3RpdmVseSBkaXNjYXJkCiBlZGl0cyBmcm9tIHlvdXIgY3VycmVudCB3b3JraW5nIHRyZWUuIFNlZSB0aGUgYGBJbnRlcmFjdGl2ZSBNb2RlJycKIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdIHRvIGxlYXJuIGhvdyB0byBvcGVyYXRlIHRoZSBgLS1wYXRjaGAgbW9kZS4KICsKIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiB1c2VzIHRoZSBubyBvdmVybGF5IG1vZGUgYnkgZGVmYXVsdCAoc2VlIGFsc28KLWAtLVtuby1db3ZlcmxheWApLCBhbmQgY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBvdmVybGF5IG1vZGUuCitgLS1vdmVybGF5YCksIGFuZCBjdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IG92ZXJsYXkgbW9kZS4KIAogLS1pZ25vcmUtb3RoZXItd29ya3RyZWVzOjoKIAlgZ2l0IGNoZWNrb3V0YCByZWZ1c2VzIHdoZW4gdGhlIHdhbnRlZCByZWYgaXMgYWxyZWFkeSBjaGVja2VkCkBAIC0yNzIsMzggKzI4NSw0MiBAQAogCW91dCBhbnl3YXkuIEluIG90aGVyIHdvcmRzLCB0aGUgcmVmIGNhbiBiZSBoZWxkIGJ5IG1vcmUgdGhhbiBvbmUKIAl3b3JrdHJlZS4KIAotLS1bbm8tXXJlY3Vyc2Utc3VibW9kdWxlczo6Ci0JVXNpbmcgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgd2lsbCB1cGRhdGUgdGhlIGNvbnRlbnQgb2YgYWxsIGluaXRpYWxpemVkCistLW92ZXJ3cml0ZS1pZ25vcmU6OgorLS1uby1vdmVyd3JpdGUtaWdub3JlOjoKKwlTaWxlbnRseSBvdmVyd3JpdGUgaWdub3JlZCBmaWxlcyB3aGVuIHN3aXRjaGluZyBicmFuY2hlcy4gVGhpcworCWlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBVc2UgYC0tbm8tb3ZlcndyaXRlLWlnbm9yZWAgdG8gYWJvcnQKKwl0aGUgb3BlcmF0aW9uIHdoZW4gdGhlIG5ldyBicmFuY2ggY29udGFpbnMgaWdub3JlZCBmaWxlcy4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCVVzaW5nIGAtLXJlY3Vyc2Utc3VibW9kdWxlc2Agd2lsbCB1cGRhdGUgdGhlIGNvbnRlbnQgb2YgYWxsIGluaXRpYWxpemVkCiAJc3VibW9kdWxlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0LiBJZgogCWxvY2FsIG1vZGlmaWNhdGlvbnMgaW4gYSBzdWJtb2R1bGUgd291bGQgYmUgb3ZlcndyaXR0ZW4gdGhlIGNoZWNrb3V0Ci0Jd2lsbCBmYWlsIHVubGVzcyBgLWZgIGlzIHVzZWQuIElmIG5vdGhpbmcgKG9yIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzKQorCXdpbGwgZmFpbCB1bmxlc3MgYC1mYCBpcyB1c2VkLiBJZiBub3RoaW5nIChvciBgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXNgKQogCWlzIHVzZWQsIHRoZSB3b3JrIHRyZWVzIG9mIHN1Ym1vZHVsZXMgd2lsbCBub3QgYmUgdXBkYXRlZC4KLQlKdXN0IGxpa2UgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdLCB0aGlzIHdpbGwgZGV0YWNoIHRoZQotCXN1Ym1vZHVsZXMgSEVBRC4KKwlKdXN0IGxpa2UgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdLCB0aGlzIHdpbGwgZGV0YWNoIGBIRUFEYCBvZiB0aGUKKwlzdWJtb2R1bGUuCiAKLS0tbm8tZ3Vlc3M6OgotCURvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBhIGJyYW5jaCBpZiBhIHJlbW90ZSB0cmFja2luZyBicmFuY2gKLQlvZiB0aGUgc2FtZSBuYW1lIGV4aXN0cy4KLQotLS1bbm8tXW92ZXJsYXk6OgorLS1vdmVybGF5OjoKKy0tbm8tb3ZlcmxheTo6CiAJSW4gdGhlIGRlZmF1bHQgb3ZlcmxheSBtb2RlLCBgZ2l0IGNoZWNrb3V0YCBuZXZlcgogCXJlbW92ZXMgZmlsZXMgZnJvbSB0aGUgaW5kZXggb3IgdGhlIHdvcmtpbmcgdHJlZS4gIFdoZW4KIAlzcGVjaWZ5aW5nIGAtLW5vLW92ZXJsYXlgLCBmaWxlcyB0aGF0IGFwcGVhciBpbiB0aGUgaW5kZXggYW5kCi0Jd29ya2luZyB0cmVlLCBidXQgbm90IGluIDx0cmVlLWlzaD4gYXJlIHJlbW92ZWQsIHRvIG1ha2UgdGhlbQotCW1hdGNoIDx0cmVlLWlzaD4gZXhhY3RseS4KKwl3b3JraW5nIHRyZWUsIGJ1dCBub3QgaW4gYDx0cmVlLWlzaD5gIGFyZSByZW1vdmVkLCB0byBtYWtlIHRoZW0KKwltYXRjaCBgPHRyZWUtaXNoPmAgZXhhY3RseS4KIAogPGJyYW5jaD46OgogCUJyYW5jaCB0byBjaGVja291dDsgaWYgaXQgcmVmZXJzIHRvIGEgYnJhbmNoIChpLmUuLCBhIG5hbWUgdGhhdCwKIAl3aGVuIHByZXBlbmRlZCB3aXRoICJyZWZzL2hlYWRzLyIsIGlzIGEgdmFsaWQgcmVmKSwgdGhlbiB0aGF0CiAJYnJhbmNoIGlzIGNoZWNrZWQgb3V0LiBPdGhlcndpc2UsIGlmIGl0IHJlZmVycyB0byBhIHZhbGlkCi0JY29tbWl0LCB5b3VyIEhFQUQgYmVjb21lcyAiZGV0YWNoZWQiIGFuZCB5b3UgYXJlIG5vIGxvbmdlciBvbgorCWNvbW1pdCwgeW91ciBgSEVBRGAgYmVjb21lcyAiZGV0YWNoZWQiIGFuZCB5b3UgYXJlIG5vIGxvbmdlciBvbgogCWFueSBicmFuY2ggKHNlZSBiZWxvdyBmb3IgZGV0YWlscykuCiArCi1Zb3UgY2FuIHVzZSB0aGUgYCJAey1OfSJgIHN5bnRheCB0byByZWZlciB0byB0aGUgTi10aCBsYXN0CitZb3UgY2FuIHVzZSB0aGUgYEB7LU59YCBzeW50YXggdG8gcmVmZXIgdG8gdGhlIE4tdGggbGFzdAogYnJhbmNoL2NvbW1pdCBjaGVja2VkIG91dCB1c2luZyAiZ2l0IGNoZWNrb3V0IiBvcGVyYXRpb24uIFlvdSBtYXkKLWFsc28gc3BlY2lmeSBgLWAgd2hpY2ggaXMgc3lub255bW91cyB0byBgIkB7LTF9ImAuCithbHNvIHNwZWNpZnkgYC1gIHdoaWNoIGlzIHN5bm9ueW1vdXMgdG8gYEB7LTF9YC4KICsKLUFzIGEgc3BlY2lhbCBjYXNlLCB5b3UgbWF5IHVzZSBgIkEuLi5CImAgYXMgYSBzaG9ydGN1dCBmb3IgdGhlCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IG1heSB1c2UgYEEuLi5CYCBhcyBhIHNob3J0Y3V0IGZvciB0aGUKIG1lcmdlIGJhc2Ugb2YgYEFgIGFuZCBgQmAgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZS4gWW91IGNhbgogbGVhdmUgb3V0IGF0IG1vc3Qgb25lIG9mIGBBYCBhbmQgYEJgLCBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvIGBIRUFEYC4KIApAQCAtMzEyLDcgKzMyOSw3IEBACiAKIDxzdGFydF9wb2ludD46OgogCVRoZSBuYW1lIG9mIGEgY29tbWl0IGF0IHdoaWNoIHRvIHN0YXJ0IHRoZSBuZXcgYnJhbmNoOyBzZWUKLQlsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yIGRldGFpbHMuIERlZmF1bHRzIHRvIEhFQUQuCisJbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvciBkZXRhaWxzLiBEZWZhdWx0cyB0byBgSEVBRGAuCiArCiBBcyBhIHNwZWNpYWwgY2FzZSwgeW91IG1heSB1c2UgYCJBLi4uQiJgIGFzIGEgc2hvcnRjdXQgZm9yIHRoZQogbWVyZ2UgYmFzZSBvZiBgQWAgYW5kIGBCYCBpZiB0aGVyZSBpcyBleGFjdGx5IG9uZSBtZXJnZSBiYXNlLiBZb3UgY2FuCkBAIC0zMjYsOSArMzQzLDkgQEAKIAogREVUQUNIRUQgSEVBRAogLS0tLS0tLS0tLS0tLQotSEVBRCBub3JtYWxseSByZWZlcnMgdG8gYSBuYW1lZCBicmFuY2ggKGUuZy4gJ21hc3RlcicpLiBNZWFud2hpbGUsIGVhY2gKK2BIRUFEYCBub3JtYWxseSByZWZlcnMgdG8gYSBuYW1lZCBicmFuY2ggKGUuZy4gYG1hc3RlcmApLiBNZWFud2hpbGUsIGVhY2gKIGJyYW5jaCByZWZlcnMgdG8gYSBzcGVjaWZpYyBjb21taXQuIExldCdzIGxvb2sgYXQgYSByZXBvIHdpdGggdGhyZWUKLWNvbW1pdHMsIG9uZSBvZiB0aGVtIHRhZ2dlZCwgYW5kIHdpdGggYnJhbmNoICdtYXN0ZXInIGNoZWNrZWQgb3V0OgorY29tbWl0cywgb25lIG9mIHRoZW0gdGFnZ2VkLCBhbmQgd2l0aCBicmFuY2ggYG1hc3RlcmAgY2hlY2tlZCBvdXQ6CiAKIC0tLS0tLS0tLS0tLQogICAgICAgICAgICBIRUFEIChyZWZlcnMgdG8gYnJhbmNoICdtYXN0ZXInKQpAQCAtMzQxLDEwICszNTgsMTAgQEAKIC0tLS0tLS0tLS0tLQogCiBXaGVuIGEgY29tbWl0IGlzIGNyZWF0ZWQgaW4gdGhpcyBzdGF0ZSwgdGhlIGJyYW5jaCBpcyB1cGRhdGVkIHRvIHJlZmVyIHRvCi10aGUgbmV3IGNvbW1pdC4gU3BlY2lmaWNhbGx5LCAnZ2l0IGNvbW1pdCcgY3JlYXRlcyBhIG5ldyBjb21taXQgJ2QnLCB3aG9zZQotcGFyZW50IGlzIGNvbW1pdCAnYycsIGFuZCB0aGVuIHVwZGF0ZXMgYnJhbmNoICdtYXN0ZXInIHRvIHJlZmVyIHRvIG5ldwotY29tbWl0ICdkJy4gSEVBRCBzdGlsbCByZWZlcnMgdG8gYnJhbmNoICdtYXN0ZXInIGFuZCBzbyBpbmRpcmVjdGx5IG5vdyByZWZlcnMKLXRvIGNvbW1pdCAnZCc6Cit0aGUgbmV3IGNvbW1pdC4gU3BlY2lmaWNhbGx5LCAnZ2l0IGNvbW1pdCcgY3JlYXRlcyBhIG5ldyBjb21taXQgYGRgLCB3aG9zZQorcGFyZW50IGlzIGNvbW1pdCBgY2AsIGFuZCB0aGVuIHVwZGF0ZXMgYnJhbmNoIGBtYXN0ZXJgIHRvIHJlZmVyIHRvIG5ldworY29tbWl0IGBkYC4gYEhFQURgIHN0aWxsIHJlZmVycyB0byBicmFuY2ggYG1hc3RlcmAgYW5kIHNvIGluZGlyZWN0bHkgbm93IHJlZmVycwordG8gY29tbWl0IGBkYDoKIAogLS0tLS0tLS0tLS0tCiAkIGVkaXQ7IGdpdCBhZGQ7IGdpdCBjb21taXQKQEAgLTM2MSw3ICszNzgsNyBAQAogSXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIGNoZWNrb3V0IGEgY29tbWl0IHRoYXQgaXMgbm90IGF0CiB0aGUgdGlwIG9mIGFueSBuYW1lZCBicmFuY2gsIG9yIGV2ZW4gdG8gY3JlYXRlIGEgbmV3IGNvbW1pdCB0aGF0IGlzIG5vdAogcmVmZXJlbmNlZCBieSBhIG5hbWVkIGJyYW5jaC4gTGV0J3MgbG9vayBhdCB3aGF0IGhhcHBlbnMgd2hlbiB3ZQotY2hlY2tvdXQgY29tbWl0ICdiJyAoaGVyZSB3ZSBzaG93IHR3byB3YXlzIHRoaXMgbWF5IGJlIGRvbmUpOgorY2hlY2tvdXQgY29tbWl0IGBiYCAoaGVyZSB3ZSBzaG93IHR3byB3YXlzIHRoaXMgbWF5IGJlIGRvbmUpOgogCiAtLS0tLS0tLS0tLS0KICQgZ2l0IGNoZWNrb3V0IHYyLjAgICMgb3IKQEAgLTM3Niw5ICszOTMsOSBAQAogICB0YWcgJ3YyLjAnIChyZWZlcnMgdG8gY29tbWl0ICdiJykKIC0tLS0tLS0tLS0tLQogCi1Ob3RpY2UgdGhhdCByZWdhcmRsZXNzIG9mIHdoaWNoIGNoZWNrb3V0IGNvbW1hbmQgd2UgdXNlLCBIRUFEIG5vdyByZWZlcnMKLWRpcmVjdGx5IHRvIGNvbW1pdCAnYicuIFRoaXMgaXMga25vd24gYXMgYmVpbmcgaW4gZGV0YWNoZWQgSEVBRCBzdGF0ZS4KLUl0IG1lYW5zIHNpbXBseSB0aGF0IEhFQUQgcmVmZXJzIHRvIGEgc3BlY2lmaWMgY29tbWl0LCBhcyBvcHBvc2VkIHRvCitOb3RpY2UgdGhhdCByZWdhcmRsZXNzIG9mIHdoaWNoIGNoZWNrb3V0IGNvbW1hbmQgd2UgdXNlLCBgSEVBRGAgbm93IHJlZmVycworZGlyZWN0bHkgdG8gY29tbWl0IGBiYC4gVGhpcyBpcyBrbm93biBhcyBiZWluZyBpbiBkZXRhY2hlZCBgSEVBRGAgc3RhdGUuCitJdCBtZWFucyBzaW1wbHkgdGhhdCBgSEVBRGAgcmVmZXJzIHRvIGEgc3BlY2lmaWMgY29tbWl0LCBhcyBvcHBvc2VkIHRvCiByZWZlcnJpbmcgdG8gYSBuYW1lZCBicmFuY2guIExldCdzIHNlZSB3aGF0IGhhcHBlbnMgd2hlbiB3ZSBjcmVhdGUgYSBjb21taXQ6CiAKIC0tLS0tLS0tLS0tLQpAQCAtMzk1LDcgKzQxMiw3IEBACiAgIHRhZyAndjIuMCcgKHJlZmVycyB0byBjb21taXQgJ2InKQogLS0tLS0tLS0tLS0tCiAKLVRoZXJlIGlzIG5vdyBhIG5ldyBjb21taXQgJ2UnLCBidXQgaXQgaXMgcmVmZXJlbmNlZCBvbmx5IGJ5IEhFQUQuIFdlIGNhbgorVGhlcmUgaXMgbm93IGEgbmV3IGNvbW1pdCBgZWAsIGJ1dCBpdCBpcyByZWZlcmVuY2VkIG9ubHkgYnkgYEhFQURgLiBXZSBjYW4KIG9mIGNvdXJzZSBhZGQgeWV0IGFub3RoZXIgY29tbWl0IGluIHRoaXMgc3RhdGU6CiAKIC0tLS0tLS0tLS0tLQpAQCAtNDEzLDcgKzQzMCw3IEBACiAtLS0tLS0tLS0tLS0KIAogSW4gZmFjdCwgd2UgY2FuIHBlcmZvcm0gYWxsIHRoZSBub3JtYWwgR2l0IG9wZXJhdGlvbnMuIEJ1dCwgbGV0J3MgbG9vawotYXQgd2hhdCBoYXBwZW5zIHdoZW4gd2UgdGhlbiBjaGVja291dCBtYXN0ZXI6CithdCB3aGF0IGhhcHBlbnMgd2hlbiB3ZSB0aGVuIGNoZWNrb3V0IGBtYXN0ZXJgOgogCiAtLS0tLS0tLS0tLS0KICQgZ2l0IGNoZWNrb3V0IG1hc3RlcgpAQCAtNDI4LDkgKzQ0NSw5IEBACiAtLS0tLS0tLS0tLS0KIAogSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBhdCB0aGlzIHBvaW50IG5vdGhpbmcgcmVmZXJzIHRvIGNvbW1pdAotJ2YnLiBFdmVudHVhbGx5IGNvbW1pdCAnZicgKGFuZCBieSBleHRlbnNpb24gY29tbWl0ICdlJykgd2lsbCBiZSBkZWxldGVkCitgZmAuIEV2ZW50dWFsbHkgY29tbWl0IGBmYCAoYW5kIGJ5IGV4dGVuc2lvbiBjb21taXQgYGVgKSB3aWxsIGJlIGRlbGV0ZWQKIGJ5IHRoZSByb3V0aW5lIEdpdCBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcywgdW5sZXNzIHdlIGNyZWF0ZSBhIHJlZmVyZW5jZQotYmVmb3JlIHRoYXQgaGFwcGVucy4gSWYgd2UgaGF2ZSBub3QgeWV0IG1vdmVkIGF3YXkgZnJvbSBjb21taXQgJ2YnLAorYmVmb3JlIHRoYXQgaGFwcGVucy4gSWYgd2UgaGF2ZSBub3QgeWV0IG1vdmVkIGF3YXkgZnJvbSBjb21taXQgYGZgLAogYW55IG9mIHRoZXNlIHdpbGwgY3JlYXRlIGEgcmVmZXJlbmNlIHRvIGl0OgogCiAtLS0tLS0tLS0tLS0KQEAgLTQzOSwxOSArNDU2LDE5IEBACiAkIGdpdCB0YWcgZm9vICAgICAgICAgICA8Mz4KIC0tLS0tLS0tLS0tLQogCi08MT4gY3JlYXRlcyBhIG5ldyBicmFuY2ggJ2ZvbycsIHdoaWNoIHJlZmVycyB0byBjb21taXQgJ2YnLCBhbmQgdGhlbgotICAgIHVwZGF0ZXMgSEVBRCB0byByZWZlciB0byBicmFuY2ggJ2ZvbycuIEluIG90aGVyIHdvcmRzLCB3ZSdsbCBubyBsb25nZXIKLSAgICBiZSBpbiBkZXRhY2hlZCBIRUFEIHN0YXRlIGFmdGVyIHRoaXMgY29tbWFuZC4KKzwxPiBjcmVhdGVzIGEgbmV3IGJyYW5jaCBgZm9vYCwgd2hpY2ggcmVmZXJzIHRvIGNvbW1pdCBgZmAsIGFuZCB0aGVuCisgICAgdXBkYXRlcyBgSEVBRGAgdG8gcmVmZXIgdG8gYnJhbmNoIGBmb29gLiBJbiBvdGhlciB3b3Jkcywgd2UnbGwgbm8gbG9uZ2VyCisgICAgYmUgaW4gZGV0YWNoZWQgYEhFQURgIHN0YXRlIGFmdGVyIHRoaXMgY29tbWFuZC4KIAotPDI+IHNpbWlsYXJseSBjcmVhdGVzIGEgbmV3IGJyYW5jaCAnZm9vJywgd2hpY2ggcmVmZXJzIHRvIGNvbW1pdCAnZicsCi0gICAgYnV0IGxlYXZlcyBIRUFEIGRldGFjaGVkLgorPDI+IHNpbWlsYXJseSBjcmVhdGVzIGEgbmV3IGJyYW5jaCBgZm9vYCwgd2hpY2ggcmVmZXJzIHRvIGNvbW1pdCBgZmAsCisgICAgYnV0IGxlYXZlcyBgSEVBRGAgZGV0YWNoZWQuCiAKLTwzPiBjcmVhdGVzIGEgbmV3IHRhZyAnZm9vJywgd2hpY2ggcmVmZXJzIHRvIGNvbW1pdCAnZicsCi0gICAgbGVhdmluZyBIRUFEIGRldGFjaGVkLgorPDM+IGNyZWF0ZXMgYSBuZXcgdGFnIGBmb29gLCB3aGljaCByZWZlcnMgdG8gY29tbWl0IGBmYCwKKyAgICBsZWF2aW5nIGBIRUFEYCBkZXRhY2hlZC4KIAotSWYgd2UgaGF2ZSBtb3ZlZCBhd2F5IGZyb20gY29tbWl0ICdmJywgdGhlbiB3ZSBtdXN0IGZpcnN0IHJlY292ZXIgaXRzIG9iamVjdAorSWYgd2UgaGF2ZSBtb3ZlZCBhd2F5IGZyb20gY29tbWl0IGBmYCwgdGhlbiB3ZSBtdXN0IGZpcnN0IHJlY292ZXIgaXRzIG9iamVjdAogbmFtZSAodHlwaWNhbGx5IGJ5IHVzaW5nIGdpdCByZWZsb2cpLCBhbmQgdGhlbiB3ZSBjYW4gY3JlYXRlIGEgcmVmZXJlbmNlIHRvCi1pdC4gRm9yIGV4YW1wbGUsIHRvIHNlZSB0aGUgbGFzdCB0d28gY29tbWl0cyB0byB3aGljaCBIRUFEIHJlZmVycmVkLCB3ZQoraXQuIEZvciBleGFtcGxlLCB0byBzZWUgdGhlIGxhc3QgdHdvIGNvbW1pdHMgdG8gd2hpY2ggYEhFQURgIHJlZmVycmVkLCB3ZQogY2FuIHVzZSBlaXRoZXIgb2YgdGhlc2UgY29tbWFuZHM6CiAKIC0tLS0tLS0tLS0tLQpAQCAtNDYyLDEyICs0NzksMTIgQEAKIEFSR1VNRU5UIERJU0FNQklHVUFUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGVuIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IGdpdmVuIGFuZCBpdCBpcyBub3QgYC0tYCAoZS5nLiAiZ2l0Ci1jaGVja291dCBhYmMiKSwgYW5kIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGJvdGggYSB2YWxpZCBgPHRyZWUtaXNoPmAKLShlLmcuIGEgYnJhbmNoICJhYmMiIGV4aXN0cykgYW5kIGEgdmFsaWQgYDxwYXRoc3BlYz5gIChlLmcuIGEgZmlsZQorV2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCBnaXZlbiBhbmQgaXQgaXMgbm90IGAtLWAgKGUuZy4gYGdpdAorY2hlY2tvdXQgYWJjYCksIGFuZCB3aGVuIHRoZSBhcmd1bWVudCBpcyBib3RoIGEgdmFsaWQgYDx0cmVlLWlzaD5gCisoZS5nLiBhIGJyYW5jaCBgYWJjYCBleGlzdHMpIGFuZCBhIHZhbGlkIGA8cGF0aHNwZWM+YCAoZS5nLiBhIGZpbGUKIG9yIGEgZGlyZWN0b3J5IHdob3NlIG5hbWUgaXMgImFiYyIgZXhpc3RzKSwgR2l0IHdvdWxkIHVzdWFsbHkgYXNrCiB5b3UgdG8gZGlzYW1iaWd1YXRlLiAgQmVjYXVzZSBjaGVja2luZyBvdXQgYSBicmFuY2ggaXMgc28gY29tbW9uIGFuCi1vcGVyYXRpb24sIGhvd2V2ZXIsICJnaXQgY2hlY2tvdXQgYWJjIiB0YWtlcyAiYWJjIiBhcyBhIGA8dHJlZS1pc2g+YAorb3BlcmF0aW9uLCBob3dldmVyLCBgZ2l0IGNoZWNrb3V0IGFiY2AgdGFrZXMgImFiYyIgYXMgYSBgPHRyZWUtaXNoPmAKIGluIHN1Y2ggYSBzaXR1YXRpb24uICBVc2UgYGdpdCBjaGVja291dCAtLSA8cGF0aHNwZWM+YCBpZiB5b3Ugd2FudAogdG8gY2hlY2tvdXQgdGhlc2UgcGF0aHMgb3V0IG9mIHRoZSBpbmRleC4KIApAQCAtNDc1LDcgKzQ5Miw3IEBACiAtLS0tLS0tLQogCiAuIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgY2hlY2tzIG91dCB0aGUgYG1hc3RlcmAgYnJhbmNoLCByZXZlcnRzCi0gIHRoZSBgTWFrZWZpbGVgIHRvIHR3byByZXZpc2lvbnMgYmFjaywgZGVsZXRlcyBoZWxsby5jIGJ5CisgIHRoZSBgTWFrZWZpbGVgIHRvIHR3byByZXZpc2lvbnMgYmFjaywgZGVsZXRlcyBgaGVsbG8uY2AgYnkKICAgbWlzdGFrZSwgYW5kIGdldHMgaXQgYmFjayBmcm9tIHRoZSBpbmRleC4KICsKIC0tLS0tLS0tLS0tLQpAQCAtNDg3LDcgKzUwNCw3IEBACiArCiA8MT4gc3dpdGNoIGJyYW5jaAogPDI+IHRha2UgYSBmaWxlIG91dCBvZiBhbm90aGVyIGNvbW1pdAotPDM+IHJlc3RvcmUgaGVsbG8uYyBmcm9tIHRoZSBpbmRleAorPDM+IHJlc3RvcmUgYGhlbGxvLmNgIGZyb20gdGhlIGluZGV4CiArCiBJZiB5b3Ugd2FudCB0byBjaGVjayBvdXQgX2FsbF8gQyBzb3VyY2UgZmlsZXMgb3V0IG9mIHRoZSBpbmRleCwKIHlvdSBjYW4gc2F5CkBAIC01MTYsNyArNTMzLDcgQEAKICQgZ2l0IGNoZWNrb3V0IG15dG9waWMKIC0tLS0tLS0tLS0tLQogKwotSG93ZXZlciwgeW91ciAid3JvbmciIGJyYW5jaCBhbmQgY29ycmVjdCAibXl0b3BpYyIgYnJhbmNoIG1heQorSG93ZXZlciwgeW91ciAid3JvbmciIGJyYW5jaCBhbmQgY29ycmVjdCBgbXl0b3BpY2AgYnJhbmNoIG1heQogZGlmZmVyIGluIGZpbGVzIHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgbG9jYWxseSwgaW4gd2hpY2ggY2FzZQogdGhlIGFib3ZlIGNoZWNrb3V0IHdvdWxkIGZhaWwgbGlrZSB0aGlzOgogKwpAQCAtNTU3LDYgKzU3NCwxMSBAQAogJCBnaXQgYWRkIGZyb3R6CiAtLS0tLS0tLS0tLS0KIAorU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1zd2l0Y2hbMV0sCitsaW5rZ2l0OmdpdC1yZXN0b3JlWzFdCisKIEdJVAogLS0tCiBQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0CmluZGV4IDc1NGIxNmMuLjgzY2U1MWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS1waWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKQEAgLTEwLDkgKzEwLDcgQEAKIFt2ZXJzZV0KICdnaXQgY2hlcnJ5LXBpY2snIFstLWVkaXRdIFstbl0gWy1tIHBhcmVudC1udW1iZXJdIFstc10gWy14XSBbLS1mZl0KIAkJICBbLVNbPGtleWlkPl1dIDxjb21taXQ+Li4uCi0nZ2l0IGNoZXJyeS1waWNrJyAtLWNvbnRpbnVlCi0nZ2l0IGNoZXJyeS1waWNrJyAtLXF1aXQKLSdnaXQgY2hlcnJ5LXBpY2snIC0tYWJvcnQKKydnaXQgY2hlcnJ5LXBpY2snICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCB8IC0tcXVpdCkKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKaW5kZXggZGI4NzZmNy4uMDAyOGZmMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dApAQCAtNjMsNyArNjMsNyBAQAogCXN0aWxsIHVzZSB0aGUgaWdub3JlIHJ1bGVzIGdpdmVuIHdpdGggYC1lYCBvcHRpb25zIGZyb20gdGhlIGNvbW1hbmQKIAlsaW5lLiAgVGhpcyBhbGxvd3MgcmVtb3ZpbmcgYWxsIHVudHJhY2tlZAogCWZpbGVzLCBpbmNsdWRpbmcgYnVpbGQgcHJvZHVjdHMuICBUaGlzIGNhbiBiZSB1c2VkIChwb3NzaWJseSBpbgotCWNvbmp1bmN0aW9uIHdpdGggJ2dpdCByZXNldCcpIHRvIGNyZWF0ZSBhIHByaXN0aW5lCisJY29uanVuY3Rpb24gd2l0aCAnZ2l0IHJlc3RvcmUnIG9yICdnaXQgcmVzZXQnKSB0byBjcmVhdGUgYSBwcmlzdGluZQogCXdvcmtpbmcgZGlyZWN0b3J5IHRvIHRlc3QgYSBjbGVhbiBidWlsZC4KIAogLVg6OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CmluZGV4IGEwZjE0YjUuLjM0MDExYzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKQEAgLTE1LDE0ICsxNSwxNSBAQAogCSAgWy0tZGlzc29jaWF0ZV0gWy0tc2VwYXJhdGUtZ2l0LWRpciA8Z2l0IGRpcj5dCiAJICBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1bbm8tXXNpbmdsZS1icmFuY2hdIFstLW5vLXRhZ3NdCiAJICBbLS1yZWN1cnNlLXN1Ym1vZHVsZXNbPTxwYXRoc3BlYz5dXSBbLS1bbm8tXXNoYWxsb3ctc3VibW9kdWxlc10KLQkgIFstLWpvYnMgPG4+XSBbLS1dIDxyZXBvc2l0b3J5PiBbPGRpcmVjdG9yeT5dCisJICBbLS1bbm8tXXJlbW90ZS1zdWJtb2R1bGVzXSBbLS1qb2JzIDxuPl0gWy0tXSA8cmVwb3NpdG9yeT4KKwkgIFs8ZGlyZWN0b3J5Pl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCiAKIENsb25lcyBhIHJlcG9zaXRvcnkgaW50byBhIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5LCBjcmVhdGVzCiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgZm9yIGVhY2ggYnJhbmNoIGluIHRoZSBjbG9uZWQgcmVwb3NpdG9yeQotKHZpc2libGUgdXNpbmcgYGdpdCBicmFuY2ggLXJgKSwgYW5kIGNyZWF0ZXMgYW5kIGNoZWNrcyBvdXQgYW4KKyh2aXNpYmxlIHVzaW5nIGBnaXQgYnJhbmNoIC0tcmVtb3Rlc2ApLCBhbmQgY3JlYXRlcyBhbmQgY2hlY2tzIG91dCBhbgogaW5pdGlhbCBicmFuY2ggdGhhdCBpcyBmb3JrZWQgZnJvbSB0aGUgY2xvbmVkIHJlcG9zaXRvcnkncwogY3VycmVudGx5IGFjdGl2ZSBicmFuY2guCiAKQEAgLTQwLDggKzQxLDggQEAKIAogT1BUSU9OUwogLS0tLS0tLQotLS1sb2NhbDo6CiAtbDo6CistLWxvY2FsOjoKIAlXaGVuIHRoZSByZXBvc2l0b3J5IHRvIGNsb25lIGZyb20gaXMgb24gYSBsb2NhbCBtYWNoaW5lLAogCXRoaXMgZmxhZyBieXBhc3NlcyB0aGUgbm9ybWFsICJHaXQgYXdhcmUiIHRyYW5zcG9ydAogCW1lY2hhbmlzbSBhbmQgY2xvbmVzIHRoZSByZXBvc2l0b3J5IGJ5IG1ha2luZyBhIGNvcHkgb2YKQEAgLTYyLDggKzYzLDggQEAKIAlkaXJlY3RvcnkgaW5zdGVhZCBvZiB1c2luZyBoYXJkbGlua3MuIFRoaXMgbWF5IGJlIGRlc2lyYWJsZQogCWlmIHlvdSBhcmUgdHJ5aW5nIHRvIG1ha2UgYSBiYWNrLXVwIG9mIHlvdXIgcmVwb3NpdG9yeS4KIAotLS1zaGFyZWQ6OgogLXM6OgorLS1zaGFyZWQ6OgogCVdoZW4gdGhlIHJlcG9zaXRvcnkgdG8gY2xvbmUgaXMgb24gdGhlIGxvY2FsIG1hY2hpbmUsCiAJaW5zdGVhZCBvZiB1c2luZyBoYXJkIGxpbmtzLCBhdXRvbWF0aWNhbGx5IHNldHVwCiAJYC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgIHRvIHNoYXJlIHRoZSBvYmplY3RzCkBAIC04MCwxMyArODEsMTMgQEAKIElmIHRoZXNlIG9iamVjdHMgYXJlIHJlbW92ZWQgYW5kIHdlcmUgcmVmZXJlbmNlZCBieSB0aGUgY2xvbmVkIHJlcG9zaXRvcnksCiB0aGVuIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSB3aWxsIGJlY29tZSBjb3JydXB0LgogKwotTm90ZSB0aGF0IHJ1bm5pbmcgYGdpdCByZXBhY2tgIHdpdGhvdXQgdGhlIGAtbGAgb3B0aW9uIGluIGEgcmVwb3NpdG9yeQotY2xvbmVkIHdpdGggYC1zYCB3aWxsIGNvcHkgb2JqZWN0cyBmcm9tIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpbnRvIGEgcGFjawotaW4gdGhlIGNsb25lZCByZXBvc2l0b3J5LCByZW1vdmluZyB0aGUgZGlzayBzcGFjZSBzYXZpbmdzIG9mIGBjbG9uZSAtc2AuCi1JdCBpcyBzYWZlLCBob3dldmVyLCB0byBydW4gYGdpdCBnY2AsIHdoaWNoIHVzZXMgdGhlIGAtbGAgb3B0aW9uIGJ5CitOb3RlIHRoYXQgcnVubmluZyBgZ2l0IHJlcGFja2Agd2l0aG91dCB0aGUgYC0tbG9jYWxgIG9wdGlvbiBpbiBhIHJlcG9zaXRvcnkKK2Nsb25lZCB3aXRoIGAtLXNoYXJlZGAgd2lsbCBjb3B5IG9iamVjdHMgZnJvbSB0aGUgc291cmNlIHJlcG9zaXRvcnkgaW50byBhIHBhY2sKK2luIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSwgcmVtb3ZpbmcgdGhlIGRpc2sgc3BhY2Ugc2F2aW5ncyBvZiBgY2xvbmUgLS1zaGFyZWRgLgorSXQgaXMgc2FmZSwgaG93ZXZlciwgdG8gcnVuIGBnaXQgZ2NgLCB3aGljaCB1c2VzIHRoZSBgLS1sb2NhbGAgb3B0aW9uIGJ5CiBkZWZhdWx0LgogKwotSWYgeW91IHdhbnQgdG8gYnJlYWsgdGhlIGRlcGVuZGVuY3kgb2YgYSByZXBvc2l0b3J5IGNsb25lZCB3aXRoIGAtc2Agb24KK0lmIHlvdSB3YW50IHRvIGJyZWFrIHRoZSBkZXBlbmRlbmN5IG9mIGEgcmVwb3NpdG9yeSBjbG9uZWQgd2l0aCBgLS1zaGFyZWRgIG9uCiBpdHMgc291cmNlIHJlcG9zaXRvcnksIHlvdSBjYW4gc2ltcGx5IHJ1biBgZ2l0IHJlcGFjayAtYWAgdG8gY29weSBhbGwKIG9iamVjdHMgZnJvbSB0aGUgc291cmNlIHJlcG9zaXRvcnkgaW50byBhIHBhY2sgaW4gdGhlIGNsb25lZCByZXBvc2l0b3J5LgogCkBAIC0xMTUsMTkgKzExNiwxOSBAQAogCXNhbWUgcmVwb3NpdG9yeSwgYW5kIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlCiAJYm9ycm93aW5nLgogCi0tLXF1aWV0OjoKIC1xOjoKKy0tcXVpZXQ6OgogCU9wZXJhdGUgcXVpZXRseS4gIFByb2dyZXNzIGlzIG5vdCByZXBvcnRlZCB0byB0aGUgc3RhbmRhcmQKIAllcnJvciBzdHJlYW0uCiAKLS0tdmVyYm9zZTo6CiAtdjo6CistLXZlcmJvc2U6OgogCVJ1biB2ZXJib3NlbHkuIERvZXMgbm90IGFmZmVjdCB0aGUgcmVwb3J0aW5nIG9mIHByb2dyZXNzIHN0YXR1cwogCXRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCiAKIC0tcHJvZ3Jlc3M6OgogCVByb2dyZXNzIHN0YXR1cyBpcyByZXBvcnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCi0JYnkgZGVmYXVsdCB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHVubGVzcyAtcQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgYC0tcXVpZXRgCiAJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmIHRoZQogCXN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KIApAQCAtMTM5LDE1ICsxNDAsMTUgQEAKIAlXaGVuIG11bHRpcGxlIGAtLXNlcnZlci1vcHRpb249PG9wdGlvbj5gIGFyZSBnaXZlbiwgdGhleSBhcmUgYWxsCiAJc2VudCB0byB0aGUgb3RoZXIgc2lkZSBpbiB0aGUgb3JkZXIgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAKLS0tbm8tY2hlY2tvdXQ6OgogLW46OgorLS1uby1jaGVja291dDo6CiAJTm8gY2hlY2tvdXQgb2YgSEVBRCBpcyBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGNsb25lIGlzIGNvbXBsZXRlLgogCiAtLWJhcmU6OgogCU1ha2UgYSAnYmFyZScgR2l0IHJlcG9zaXRvcnkuICBUaGF0IGlzLCBpbnN0ZWFkIG9mCiAJY3JlYXRpbmcgYDxkaXJlY3Rvcnk+YCBhbmQgcGxhY2luZyB0aGUgYWRtaW5pc3RyYXRpdmUKIAlmaWxlcyBpbiBgPGRpcmVjdG9yeT4vLmdpdGAsIG1ha2UgdGhlIGA8ZGlyZWN0b3J5PmAKLQlpdHNlbGYgdGhlIGAkR0lUX0RJUmAuIFRoaXMgb2J2aW91c2x5IGltcGxpZXMgdGhlIGAtbmAKKwlpdHNlbGYgdGhlIGAkR0lUX0RJUmAuIFRoaXMgb2J2aW91c2x5IGltcGxpZXMgdGhlIGAtLW5vLWNoZWNrb3V0YAogCWJlY2F1c2UgdGhlcmUgaXMgbm93aGVyZSB0byBjaGVjayBvdXQgdGhlIHdvcmtpbmcgdHJlZS4KIAlBbHNvIHRoZSBicmFuY2ggaGVhZHMgYXQgdGhlIHJlbW90ZSBhcmUgY29waWVkIGRpcmVjdGx5CiAJdG8gY29ycmVzcG9uZGluZyBsb2NhbCBicmFuY2ggaGVhZHMsIHdpdGhvdXQgbWFwcGluZwpAQCAtMTYzLDEzICsxNjQsMTMgQEAKIAl0aGF0IGFsbCB0aGVzZSByZWZzIGFyZSBvdmVyd3JpdHRlbiBieSBhIGBnaXQgcmVtb3RlIHVwZGF0ZWAgaW4gdGhlCiAJdGFyZ2V0IHJlcG9zaXRvcnkuCiAKLS0tb3JpZ2luIDxuYW1lPjo6CiAtbyA8bmFtZT46OgorLS1vcmlnaW4gPG5hbWU+OjoKIAlJbnN0ZWFkIG9mIHVzaW5nIHRoZSByZW1vdGUgbmFtZSBgb3JpZ2luYCB0byBrZWVwIHRyYWNrCiAJb2YgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnksIHVzZSBgPG5hbWU+YC4KIAotLS1icmFuY2ggPG5hbWU+OjoKIC1iIDxuYW1lPjo6CistLWJyYW5jaCA8bmFtZT46OgogCUluc3RlYWQgb2YgcG9pbnRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgSEVBRCB0byB0aGUgYnJhbmNoIHBvaW50ZWQKIAl0byBieSB0aGUgY2xvbmVkIHJlcG9zaXRvcnkncyBIRUFELCBwb2ludCB0byBgPG5hbWU+YCBicmFuY2gKIAlpbnN0ZWFkLiBJbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnksIHRoaXMgaXMgdGhlIGJyYW5jaCB0aGF0IHdpbGwKQEAgLTE3Nyw4ICsxNzgsOCBAQAogCWAtLWJyYW5jaGAgY2FuIGFsc28gdGFrZSB0YWdzIGFuZCBkZXRhY2hlcyB0aGUgSEVBRCBhdCB0aGF0IGNvbW1pdAogCWluIHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeS4KIAotLS11cGxvYWQtcGFjayA8dXBsb2FkLXBhY2s+OjoKIC11IDx1cGxvYWQtcGFjaz46OgorLS11cGxvYWQtcGFjayA8dXBsb2FkLXBhY2s+OjoKIAlXaGVuIGdpdmVuLCBhbmQgdGhlIHJlcG9zaXRvcnkgdG8gY2xvbmUgZnJvbSBpcyBhY2Nlc3NlZAogCXZpYSBzc2gsIHRoaXMgc3BlY2lmaWVzIGEgbm9uLWRlZmF1bHQgcGF0aCBmb3IgdGhlIGNvbW1hbmQKIAlydW4gb24gdGhlIG90aGVyIGVuZC4KQEAgLTE4Nyw4ICsxODgsOCBAQAogCVNwZWNpZnkgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQ7CiAJKFNlZSB0aGUgIlRFTVBMQVRFIERJUkVDVE9SWSIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1pbml0WzFdLikKIAotLS1jb25maWcgPGtleT49PHZhbHVlPjo6CiAtYyA8a2V5Pj08dmFsdWU+OjoKKy0tY29uZmlnIDxrZXk+PTx2YWx1ZT46OgogCVNldCBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW4gdGhlIG5ld2x5LWNyZWF0ZWQgcmVwb3NpdG9yeTsKIAl0aGlzIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSBhZnRlciB0aGUgcmVwb3NpdG9yeSBpcwogCWluaXRpYWxpemVkLCBidXQgYmVmb3JlIHRoZSByZW1vdGUgaGlzdG9yeSBpcyBmZXRjaGVkIG9yIGFueQpAQCAtMjYwLDYgKzI2MSwxMiBAQAogLS1bbm8tXXNoYWxsb3ctc3VibW9kdWxlczo6CiAJQWxsIHN1Ym1vZHVsZXMgd2hpY2ggYXJlIGNsb25lZCB3aWxsIGJlIHNoYWxsb3cgd2l0aCBhIGRlcHRoIG9mIDEuCiAKKy0tW25vLV1yZW1vdGUtc3VibW9kdWxlczo6CisJQWxsIHN1Ym1vZHVsZXMgd2hpY2ggYXJlIGNsb25lZCB3aWxsIHVzZSB0aGUgc3RhdHVzIG9mIHRoZSBzdWJtb2R1bGXigJlzCisJcmVtb3RlLXRyYWNraW5nIGJyYW5jaCB0byB1cGRhdGUgdGhlIHN1Ym1vZHVsZSwgcmF0aGVyIHRoYW4gdGhlCisJc3VwZXJwcm9qZWN04oCZcyByZWNvcmRlZCBTSEEtMS4gRXF1aXZhbGVudCB0byBwYXNzaW5nIGAtLXJlbW90ZWAgdG8KKwlgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgLgorCiAtLXNlcGFyYXRlLWdpdC1kaXI9PGdpdCBkaXI+OjoKIAlJbnN0ZWFkIG9mIHBsYWNpbmcgdGhlIGNsb25lZCByZXBvc2l0b3J5IHdoZXJlIGl0IGlzIHN1cHBvc2VkCiAJdG8gYmUsIHBsYWNlIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSBhdCB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC1ncmFwaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtZ3JhcGgudHh0CmluZGV4IDYyNDQ3MGUuLmViNWU3ODYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC1ncmFwaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LWdyYXBoLnR4dApAQCAtMTAsNyArMTAsNyBAQAogLS0tLS0tLS0KIFt2ZXJzZV0KICdnaXQgY29tbWl0LWdyYXBoIHJlYWQnIFstLW9iamVjdC1kaXIgPGRpcj5dCi0nZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnknIFstLW9iamVjdC1kaXIgPGRpcj5dCisnZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnknIFstLW9iamVjdC1kaXIgPGRpcj5dIFstLXNoYWxsb3ddCiAnZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZScgPG9wdGlvbnM+IFstLW9iamVjdC1kaXIgPGRpcj5dCiAKIApAQCAtMjYsNyArMjYsNyBAQAogCVVzZSBnaXZlbiBkaXJlY3RvcnkgZm9yIHRoZSBsb2NhdGlvbiBvZiBwYWNrZmlsZXMgYW5kIGNvbW1pdC1ncmFwaAogCWZpbGUuIFRoaXMgcGFyYW1ldGVyIGV4aXN0cyB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBhbiBhbHRlcm5hdGUKIAl0aGF0IG9ubHkgaGFzIHRoZSBvYmplY3RzIGRpcmVjdG9yeSwgbm90IGEgZnVsbCBgLmdpdGAgZGlyZWN0b3J5LiBUaGUKLQljb21taXQtZ3JhcGggZmlsZSBpcyBleHBlY3RlZCB0byBiZSBhdCBgPGRpcj4vaW5mby9jb21taXQtZ3JhcGhgIGFuZAorCWNvbW1pdC1ncmFwaCBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlIGluIHRoZSBgPGRpcj4vaW5mb2AgZGlyZWN0b3J5IGFuZAogCXRoZSBwYWNrZmlsZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGluIGA8ZGlyPi9wYWNrYC4KIAogCkBAIC01MSw2ICs1MSwyNSBAQAogKwogV2l0aCB0aGUgYC0tYXBwZW5kYCBvcHRpb24sIGluY2x1ZGUgYWxsIGNvbW1pdHMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUKIGV4aXN0aW5nIGNvbW1pdC1ncmFwaCBmaWxlLgorKworV2l0aCB0aGUgYC0tc3BsaXRgIG9wdGlvbiwgd3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhcyBhIGNoYWluIG9mIG11bHRpcGxlCitjb21taXQtZ3JhcGggZmlsZXMgc3RvcmVkIGluIGA8ZGlyPi9pbmZvL2NvbW1pdC1ncmFwaHNgLiBUaGUgbmV3IGNvbW1pdHMKK25vdCBhbHJlYWR5IGluIHRoZSBjb21taXQtZ3JhcGggYXJlIGFkZGVkIGluIGEgbmV3ICJ0aXAiIGZpbGUuIFRoaXMgZmlsZQoraXMgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIGZpbGUgaWYgdGhlIGZvbGxvd2luZyBtZXJnZSBjb25kaXRpb25zIGFyZQorbWV0OgorKworKiBJZiBgLS1zaXplLW11bHRpcGxlPTxYPmAgaXMgbm90IHNwZWNpZmllZCwgbGV0IGBYYCBlcXVhbCAyLiBJZiB0aGUgbmV3Cit0aXAgZmlsZSB3b3VsZCBoYXZlIGBOYCBjb21taXRzIGFuZCB0aGUgcHJldmlvdXMgdGlwIGhhcyBgTWAgY29tbWl0cyBhbmQKK2BYYCB0aW1lcyBgTmAgaXMgZ3JlYXRlciB0aGFuICBgTWAsIGluc3RlYWQgbWVyZ2UgdGhlIHR3byBmaWxlcyBpbnRvIGEKK3NpbmdsZSBmaWxlLgorKworKiBJZiBgLS1tYXgtY29tbWl0cz08TT5gIGlzIHNwZWNpZmllZCB3aXRoIGBNYCBhIHBvc2l0aXZlIGludGVnZXIsIGFuZCB0aGUKK25ldyB0aXAgZmlsZSB3b3VsZCBoYXZlIG1vcmUgdGhhbiBgTWAgY29tbWl0cywgdGhlbiBpbnN0ZWFkIG1lcmdlIHRoZSBuZXcKK3RpcCB3aXRoIHRoZSBwcmV2aW91cyB0aXAuCisrCitGaW5hbGx5LCBpZiBgLS1leHBpcmUtdGltZT08ZGF0ZXRpbWU+YCBpcyBub3Qgc3BlY2lmaWVkLCBsZXQgYGRhdGV0aW1lYAorYmUgdGhlIGN1cnJlbnQgdGltZS4gQWZ0ZXIgd3JpdGluZyB0aGUgc3BsaXQgY29tbWl0LWdyYXBoLCBkZWxldGUgYWxsCit1bnVzZWQgY29tbWl0LWdyYXBoIHdob3NlIG1vZGlmaWVkIHRpbWVzIGFyZSBvbGRlciB0aGFuIGBkYXRldGltZWAuCiAKICdyZWFkJzo6CiAKQEAgLTYxLDYgKzgwLDkgQEAKIAogUmVhZCB0aGUgY29tbWl0LWdyYXBoIGZpbGUgYW5kIHZlcmlmeSBpdHMgY29udGVudHMgYWdhaW5zdCB0aGUgb2JqZWN0CiBkYXRhYmFzZS4gVXNlZCB0byBjaGVjayBmb3IgY29ycnVwdGVkIGRhdGEuCisrCitXaXRoIHRoZSBgLS1zaGFsbG93YCBvcHRpb24sIG9ubHkgY2hlY2sgdGhlIHRpcCBjb21taXQtZ3JhcGggZmlsZSBpbgorYSBjaGFpbiBvZiBzcGxpdCBjb21taXQtZ3JhcGhzLgogCiAKIEVYQU1QTEVTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dAppbmRleCBhODVjMmMyLi43NjI4MTkzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKQEAgLTM1OSw3ICszNTksNyBAQAogeW91ciB3b3JraW5nIHRyZWUgYXJlIHRlbXBvcmFyaWx5IHN0b3JlZCB0byBhIHN0YWdpbmcgYXJlYQogY2FsbGVkIHRoZSAiaW5kZXgiIHdpdGggJ2dpdCBhZGQnLiAgQSBmaWxlIGNhbiBiZQogcmV2ZXJ0ZWQgYmFjaywgb25seSBpbiB0aGUgaW5kZXggYnV0IG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLAotdG8gdGhhdCBvZiB0aGUgbGFzdCBjb21taXQgd2l0aCBgZ2l0IHJlc2V0IEhFQUQgLS0gPGZpbGU+YCwKK3RvIHRoYXQgb2YgdGhlIGxhc3QgY29tbWl0IHdpdGggYGdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPmAsCiB3aGljaCBlZmZlY3RpdmVseSByZXZlcnRzICdnaXQgYWRkJyBhbmQgcHJldmVudHMgdGhlIGNoYW5nZXMgdG8KIHRoaXMgZmlsZSBmcm9tIHBhcnRpY2lwYXRpbmcgaW4gdGhlIG5leHQgY29tbWl0LiAgQWZ0ZXIgYnVpbGRpbmcKIHRoZSBzdGF0ZSB0byBiZSBjb21taXR0ZWQgaW5jcmVtZW50YWxseSB3aXRoIHRoZXNlIGNvbW1hbmRzLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CmluZGV4IDY0YzAxYmEuLjExNDI3YWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKQEAgLTEyOSw2ICsxMjksMTMgQEAKIAlmb3IgaW50ZXJtZWRpYXJ5IGZpbHRlcnMgKGUuZy4gZm9yIHJld3JpdGluZyBjb21taXQgbWVzc2FnZXMKIAl3aGljaCByZWZlciB0byBvbGRlciBjb21taXRzLCBvciBmb3Igc3RyaXBwaW5nIGJsb2JzIGJ5IGlkKS4KIAorLS1yZWVuY29kZT0oeWVzfG5vfGFib3J0KTo6CisJU3BlY2lmeSBob3cgdG8gaGFuZGxlIGBlbmNvZGluZ2AgaGVhZGVyIGluIGNvbW1pdCBvYmplY3RzLiAgV2hlbgorCWFza2luZyB0byAnYWJvcnQnICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIHRoaXMgcHJvZ3JhbSB3aWxsIGRpZQorCXdoZW4gZW5jb3VudGVyaW5nIHN1Y2ggYSBjb21taXQgb2JqZWN0LiAgV2l0aCAneWVzJywgdGhlIGNvbW1pdAorCW1lc3NhZ2Ugd2lsbCBiZSByZWVuY29kZWQgaW50byBVVEYtOC4gIFdpdGggJ25vJywgdGhlIG9yaWdpbmFsCisJZW5jb2Rpbmcgd2lsbCBiZSBwcmVzZXJ2ZWQuCisKIC0tcmVmc3BlYzo6CiAJQXBwbHkgdGhlIHNwZWNpZmllZCByZWZzcGVjIHRvIGVhY2ggcmVmIGV4cG9ydGVkLiBNdWx0aXBsZSBvZiB0aGVtIGNhbgogCWJlIHNwZWNpZmllZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dAppbmRleCBkNjVjZGIzLi43YmFmOWU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWltcG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0CkBAIC0zODgsNiArMzg4LDcgQEAKIAlvcmlnaW5hbC1vaWQ/CiAJKCdhdXRob3InIChTUCA8bmFtZT4pPyBTUCBMVCA8ZW1haWw+IEdUIFNQIDx3aGVuPiBMRik/CiAJJ2NvbW1pdHRlcicgKFNQIDxuYW1lPik/IFNQIExUIDxlbWFpbD4gR1QgU1AgPHdoZW4+IExGCisJKCdlbmNvZGluZycgU1AgPGVuY29kaW5nPik/CiAJZGF0YQogCSgnZnJvbScgU1AgPGNvbW1pdC1pc2g+IExGKT8KIAkoJ21lcmdlJyBTUCA8Y29tbWl0LWlzaD4gTEYpPwpAQCAtNDU1LDYgKzQ1NiwxMiBAQAogU2VlIGBgRGF0ZSBGb3JtYXRzJycgYWJvdmUgZm9yIHRoZSBzZXQgb2Ygc3VwcG9ydGVkIGZvcm1hdHMsIGFuZAogdGhlaXIgc3ludGF4LgogCitgZW5jb2RpbmdgCiteXl5eXl5eXl5eCitUaGUgb3B0aW9uYWwgYGVuY29kaW5nYCBjb21tYW5kIGluZGljYXRlcyB0aGUgZW5jb2Rpbmcgb2YgdGhlIGNvbW1pdAorbWVzc2FnZS4gIE1vc3QgY29tbWl0cyBhcmUgVVRGLTggYW5kIHRoZSBlbmNvZGluZyBpcyBvbWl0dGVkLCBidXQgdGhpcworYWxsb3dzIGltcG9ydGluZyBjb21taXQgbWVzc2FnZXMgaW50byBnaXQgd2l0aG91dCBmaXJzdCByZWVuY29kaW5nIHRoZW0uCisKIGBmcm9tYAogXl5eXl5eCiBUaGUgYGZyb21gIGNvbW1hbmQgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb21taXQgdG8gaW5pdGlhbGl6ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQKaW5kZXggNzc0Y2VjYy4uNmRjZDM5ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3ItZWFjaC1yZWYudHh0CkBAIC0yMTQsNiArMjE0LDExIEBACiAJYDpsc3RyaXBgIGFuZCBgOnJzdHJpcGAgb3B0aW9ucyBpbiB0aGUgc2FtZSB3YXkgYXMgYHJlZm5hbWVgCiAJYWJvdmUuCiAKK3dvcmt0cmVlcGF0aDo6CisJVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmt0cmVlIGluIHdoaWNoIHRoZSByZWYgaXMgY2hlY2tlZAorCW91dCwgaWYgaXQgaXMgY2hlY2tlZCBvdXQgaW4gYW55IGxpbmtlZCB3b3JrdHJlZS4gRW1wdHkgc3RyaW5nCisJb3RoZXJ3aXNlLgorCiBJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUsIGZvciBjb21taXQgYW5kIHRhZyBvYmplY3RzLCB0aGUgaGVhZGVyCiBmaWVsZCBuYW1lcyAoYHRyZWVgLCBgcGFyZW50YCwgYG9iamVjdGAsIGB0eXBlYCwgYW5kIGB0YWdgKSBjYW4KIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgdmFsdWUgaW4gdGhlIGhlYWRlciBmaWVsZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CmluZGV4IDFhZjg1ZDQuLmI5Yjk3ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApAQCAtMjIsNyArMjIsOCBAQAogCQkgICBbLS1yZmNdIFstLXN1YmplY3QtcHJlZml4PVN1YmplY3QtUHJlZml4XQogCQkgICBbKC0tcmVyb2xsLWNvdW50fC12KSA8bj5dCiAJCSAgIFstLXRvPTxlbWFpbD5dIFstLWNjPTxlbWFpbD5dCi0JCSAgIFstLVtuby1dY292ZXItbGV0dGVyXSBbLS1xdWlldF0gWy0tbm90ZXNbPTxyZWY+XV0KKwkJICAgWy0tW25vLV1jb3Zlci1sZXR0ZXJdIFstLXF1aWV0XQorCQkgICBbLS1uby1ub3RlcyB8IC0tbm90ZXNbPTxyZWY+XV0KIAkJICAgWy0taW50ZXJkaWZmPTxwcmV2aW91cz5dCiAJCSAgIFstLXJhbmdlLWRpZmY9PHByZXZpb3VzPiBbLS1jcmVhdGlvbi1mYWN0b3I9PHBlcmNlbnQ+XV0KIAkJICAgWy0tcHJvZ3Jlc3NdCkBAIC0yNjMsNiArMjY0LDcgQEAKIAlmb3IgZGV0YWlscy4KIAogLS1ub3Rlc1s9PHJlZj5dOjoKKy0tbm8tbm90ZXM6OgogCUFwcGVuZCB0aGUgbm90ZXMgKHNlZSBsaW5rZ2l0OmdpdC1ub3Rlc1sxXSkgZm9yIHRoZSBjb21taXQKIAlhZnRlciB0aGUgdGhyZWUtZGFzaCBsaW5lLgogKwpAQCAtMjczLDYgKzI3NSw5IEBACiBrZWVwaW5nIHRoZW0gYXMgR2l0IG5vdGVzIGFsbG93cyB0aGVtIHRvIGJlIG1haW50YWluZWQgYmV0d2VlbiB2ZXJzaW9ucwogb2YgdGhlIHBhdGNoIHNlcmllcyAoYnV0IHNlZSB0aGUgZGlzY3Vzc2lvbiBvZiB0aGUgYG5vdGVzLnJld3JpdGVgCiBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gbGlua2dpdDpnaXQtbm90ZXNbMV0gdG8gdXNlIHRoaXMgd29ya2Zsb3cpLgorKworVGhlIGRlZmF1bHQgaXMgYC0tbm8tbm90ZXNgLCB1bmxlc3MgdGhlIGBmb3JtYXQubm90ZXNgIGNvbmZpZ3VyYXRpb24gaXMKK3NldC4KIAogLS1bbm8tXXNpZ25hdHVyZT08c2lnbmF0dXJlPjo6CiAJQWRkIGEgc2lnbmF0dXJlIHRvIGVhY2ggbWVzc2FnZSBwcm9kdWNlZC4gUGVyIFJGQyAzNjc2IHRoZSBzaWduYXR1cmUKQEAgLTQyMSw4ICs0MjYsOCBAQAogKiBBcHBseSBpdDoKIAogICAgICQgZ2l0IGZldGNoIDxwcm9qZWN0PiBtYXN0ZXI6dGVzdC1hcHBseQotICAgICQgZ2l0IGNoZWNrb3V0IHRlc3QtYXBwbHkKLSAgICAkIGdpdCByZXNldCAtLWhhcmQKKyAgICAkIGdpdCBzd2l0Y2ggdGVzdC1hcHBseQorICAgICQgZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCAtLXN0YWdlZCAtLXdvcmt0cmVlIDovCiAgICAgJCBnaXQgYW0gYS5wYXRjaAogCiBJZiBpdCBkb2VzIG5vdCBhcHBseSBjb3JyZWN0bHksIHRoZXJlIGNhbiBiZSB2YXJpb3VzIHJlYXNvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dAppbmRleCBiMDJlOTIyLi5iNDA2YmM0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlQcmludCBvdXQgdGhlIHJlZiBuYW1lIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgYnkgd2hpY2ggZWFjaAogCWNvbW1pdCB3YXMgcmVhY2hlZC4KIAotLS11c2UtbWFpbG1hcDo6CistLVtuby1ddXNlLW1haWxtYXA6OgogCVVzZSBtYWlsbWFwIGZpbGUgdG8gbWFwIGF1dGhvciBhbmQgY29tbWl0dGVyIG5hbWVzIGFuZCBlbWFpbAogCWFkZHJlc3NlcyB0byBjYW5vbmljYWwgcmVhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzLiBTZWUKIAlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtYmFzZS50eHQKaW5kZXggOWYwN2Y0Zi4uMjYxZDVjMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtYmFzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtYmFzZS50eHQKQEAgLTE0OSw3ICsxNDksNyBAQAogRGlzY3Vzc2lvbiBvbiBmb3JrLXBvaW50IG1vZGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUFmdGVyIHdvcmtpbmcgb24gdGhlIGB0b3BpY2AgYnJhbmNoIGNyZWF0ZWQgd2l0aCBgZ2l0IGNoZWNrb3V0IC1iCitBZnRlciB3b3JraW5nIG9uIHRoZSBgdG9waWNgIGJyYW5jaCBjcmVhdGVkIHdpdGggYGdpdCBzd2l0Y2ggLWMKIHRvcGljIG9yaWdpbi9tYXN0ZXJgLCB0aGUgaGlzdG9yeSBvZiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCiBgb3JpZ2luL21hc3RlcmAgbWF5IGhhdmUgYmVlbiByZXdvdW5kIGFuZCByZWJ1aWx0LCBsZWFkaW5nIHRvIGEKIGhpc3Rvcnkgb2YgdGhpcyBzaGFwZToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dAppbmRleCA2Mjk0ZGJjLi4wMWZkNTJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0CkBAIC0xMyw4ICsxMyw3IEBACiAJWy1zIDxzdHJhdGVneT5dIFstWCA8c3RyYXRlZ3ktb3B0aW9uPl0gWy1TWzxrZXlpZD5dXQogCVstLVtuby1dYWxsb3ctdW5yZWxhdGVkLWhpc3Rvcmllc10KIAlbLS1bbm8tXXJlcmVyZS1hdXRvdXBkYXRlXSBbLW0gPG1zZz5dIFstRiA8ZmlsZT5dIFs8Y29tbWl0Pi4uLl0KLSdnaXQgbWVyZ2UnIC0tYWJvcnQKLSdnaXQgbWVyZ2UnIC0tY29udGludWUKKydnaXQgbWVyZ2UnICgtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tcXVpdCkKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC04OCw2ICs4NywxMSBAQAogCUFsbG93IHRoZSByZXJlcmUgbWVjaGFuaXNtIHRvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUKIAlyZXN1bHQgb2YgYXV0by1jb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlLgogCistLW92ZXJ3cml0ZS1pZ25vcmU6OgorLS1uby1vdmVyd3JpdGUtaWdub3JlOjoKKwlTaWxlbnRseSBvdmVyd3JpdGUgaWdub3JlZCBmaWxlcyBmcm9tIHRoZSBtZXJnZSByZXN1bHQuIFRoaXMKKwlpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVXNlIGAtLW5vLW92ZXJ3cml0ZS1pZ25vcmVgIHRvIGFib3J0LgorCiAtLWFib3J0OjoKIAlBYm9ydCB0aGUgY3VycmVudCBjb25mbGljdCByZXNvbHV0aW9uIHByb2Nlc3MsIGFuZAogCXRyeSB0byByZWNvbnN0cnVjdCB0aGUgcHJlLW1lcmdlIHN0YXRlLgpAQCAtMTAwLDYgKzEwNCwxMCBAQAogJ2dpdCBtZXJnZSAtLWFib3J0JyBpcyBlcXVpdmFsZW50IHRvICdnaXQgcmVzZXQgLS1tZXJnZScgd2hlbgogYE1FUkdFX0hFQURgIGlzIHByZXNlbnQuCiAKKy0tcXVpdDo6CisJRm9yZ2V0IGFib3V0IHRoZSBjdXJyZW50IG1lcmdlIGluIHByb2dyZXNzLiBMZWF2ZSB0aGUgaW5kZXgKKwlhbmQgdGhlIHdvcmtpbmcgdHJlZSBhcy1pcy4KKwogLS1jb250aW51ZTo6CiAJQWZ0ZXIgYSAnZ2l0IG1lcmdlJyBzdG9wcyBkdWUgdG8gY29uZmxpY3RzIHlvdSBjYW4gY29uY2x1ZGUgdGhlCiAJbWVyZ2UgYnkgcnVubmluZyAnZ2l0IG1lcmdlIC0tY29udGludWUnIChzZWUgIkhPVyBUTyBSRVNPTFZFCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tdWx0aS1wYWNrLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW11bHRpLXBhY2staW5kZXgudHh0CmluZGV4IGY3Nzc4YTIuLjIzM2IyYjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW11bHRpLXBhY2staW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW11bHRpLXBhY2staW5kZXgudHh0CkBAIC05LDcgKzksNyBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IG11bHRpLXBhY2staW5kZXgnIFstLW9iamVjdC1kaXI9PGRpcj5dIDx2ZXJiPgorJ2dpdCBtdWx0aS1wYWNrLWluZGV4JyBbLS1vYmplY3QtZGlyPTxkaXI+XSA8c3ViY29tbWFuZD4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0yMywxMyArMjMsMzUgQEAKIAlgPGRpcj4vcGFja3MvbXVsdGktcGFjay1pbmRleGAgZm9yIHRoZSBjdXJyZW50IE1JRFggZmlsZSwgYW5kCiAJYDxkaXI+L3BhY2tzYCBmb3IgdGhlIHBhY2stZmlsZXMgdG8gaW5kZXguCiAKK1RoZSBmb2xsb3dpbmcgc3ViY29tbWFuZHMgYXJlIGF2YWlsYWJsZToKKwogd3JpdGU6OgotCVdoZW4gZ2l2ZW4gYXMgdGhlIHZlcmIsIHdyaXRlIGEgbmV3IE1JRFggZmlsZSB0bwotCWA8ZGlyPi9wYWNrcy9tdWx0aS1wYWNrLWluZGV4YC4KKwlXcml0ZSBhIG5ldyBNSURYIGZpbGUuCiAKIHZlcmlmeTo6Ci0JV2hlbiBnaXZlbiBhcyB0aGUgdmVyYiwgdmVyaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUgTUlEWCBmaWxlCi0JYXQgYDxkaXI+L3BhY2tzL211bHRpLXBhY2staW5kZXhgLgorCVZlcmlmeSB0aGUgY29udGVudHMgb2YgdGhlIE1JRFggZmlsZS4KKworZXhwaXJlOjoKKwlEZWxldGUgdGhlIHBhY2stZmlsZXMgdGhhdCBhcmUgdHJhY2tlZCAJYnkgdGhlIE1JRFggZmlsZSwgYnV0CisJaGF2ZSBubyBvYmplY3RzIHJlZmVyZW5jZWQgYnkgdGhlIE1JRFguIFJld3JpdGUgdGhlIE1JRFggZmlsZQorCWFmdGVyd2FyZCB0byByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlc2UgcGFjay1maWxlcy4KKworcmVwYWNrOjoKKwlDcmVhdGUgYSBuZXcgcGFjay1maWxlIGNvbnRhaW5pbmcgb2JqZWN0cyBpbiBzbWFsbCBwYWNrLWZpbGVzCisJcmVmZXJlbmNlZCBieSB0aGUgbXVsdGktcGFjay1pbmRleC4gSWYgdGhlIHNpemUgZ2l2ZW4gYnkgdGhlCisJYC0tYmF0Y2gtc2l6ZT08c2l6ZT5gIGFyZ3VtZW50IGlzIHplcm8sIHRoZW4gY3JlYXRlIGEgcGFjaworCWNvbnRhaW5pbmcgYWxsIG9iamVjdHMgcmVmZXJlbmNlZCBieSB0aGUgbXVsdGktcGFjay1pbmRleC4gRm9yCisJYSBub24temVybyBiYXRjaCBzaXplLCBTZWxlY3QgdGhlIHBhY2stZmlsZXMgYnkgZXhhbWluaW5nIHBhY2tzCisJZnJvbSBvbGRlc3QtdG8tbmV3ZXN0LCBjb21wdXRpbmcgdGhlICJleHBlY3RlZCBzaXplIiBieSBjb3VudGluZworCXRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgcGFjayByZWZlcmVuY2VkIGJ5IHRoZQorCW11bHRpLXBhY2staW5kZXgsIHRoZW4gZGl2aWRlIGJ5IHRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbgorCXRoZSBwYWNrIGFuZCBtdWx0aXBseSBieSB0aGUgcGFjayBzaXplLiBXZSBzZWxlY3QgcGFja3Mgd2l0aAorCWV4cGVjdGVkIHNpemUgYmVsb3cgdGhlIGJhdGNoIHNpemUgdW50aWwgdGhlIHNldCBvZiBwYWNrcyBoYXZlCisJdG90YWwgZXhwZWN0ZWQgc2l6ZSBhdCBsZWFzdCB0aGUgYmF0Y2ggc2l6ZS4gSWYgdGhlIHRvdGFsIHNpemUKKwlkb2VzIG5vdCByZWFjaCB0aGUgYmF0Y2ggc2l6ZSwgdGhlbiBkbyBub3RoaW5nLiBJZiBhIG5ldyBwYWNrLQorCWZpbGUgaXMgY3JlYXRlZCwgcmV3cml0ZSB0aGUgbXVsdGktcGFjay1pbmRleCB0byByZWZlcmVuY2UgdGhlCisJbmV3IHBhY2stZmlsZS4gQSBsYXRlciBydW4gb2YgJ2dpdCBtdWx0aS1wYWNrLWluZGV4IGV4cGlyZScgd2lsbAorCWRlbGV0ZSB0aGUgcGFjay1maWxlcyB0aGF0IHdlcmUgcGFydCBvZiB0aGlzIGJhdGNoLgogCiAKIEVYQU1QTEVTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dAppbmRleCA1ZTRlOTI3Li42MTU2NjA5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKQEAgLTEyLDEyICsxMiwxMiBAQAogCVs8dXBzdHJlYW0+IFs8YnJhbmNoPl1dCiAnZ2l0IHJlYmFzZScgWy1pIHwgLS1pbnRlcmFjdGl2ZV0gWzxvcHRpb25zPl0gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dCiAJLS1yb290IFs8YnJhbmNoPl0KLSdnaXQgcmViYXNlJyAtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCB8IC0tcXVpdCB8IC0tZWRpdC10b2RvIHwgLS1zaG93LWN1cnJlbnQtcGF0Y2gKKydnaXQgcmViYXNlJyAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQgfCAtLXF1aXQgfCAtLWVkaXQtdG9kbyB8IC0tc2hvdy1jdXJyZW50LXBhdGNoKQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIElmIDxicmFuY2g+IGlzIHNwZWNpZmllZCwgJ2dpdCByZWJhc2UnIHdpbGwgcGVyZm9ybSBhbiBhdXRvbWF0aWMKLWBnaXQgY2hlY2tvdXQgPGJyYW5jaD5gIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgT3RoZXJ3aXNlCitgZ2l0IHN3aXRjaCA8YnJhbmNoPmAgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBPdGhlcndpc2UKIGl0IHJlbWFpbnMgb24gdGhlIGN1cnJlbnQgYnJhbmNoLgogCiBJZiA8dXBzdHJlYW0+IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSB1cHN0cmVhbSBjb25maWd1cmVkIGluCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dAppbmRleCAwY2FkMzdmLi45NjU5YWJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQKQEAgLTIzMCw3ICsyMzAsNyBAQAogICBzdGFnaW5nL21hc3RlcgogICBzdGFnaW5nL3N0YWdpbmctbGludXMKICAgc3RhZ2luZy9zdGFnaW5nLW5leHQKLSQgZ2l0IGNoZWNrb3V0IC1iIHN0YWdpbmcgc3RhZ2luZy9tYXN0ZXIKKyQgZ2l0IHN3aXRjaCAtYyBzdGFnaW5nIHN0YWdpbmcvbWFzdGVyCiAuLi4KIC0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dAppbmRleCA5NTc2M2Q3Li40Y2ZjODgzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcmVyZS50eHQKQEAgLTkxLDcgKzkxLDcgQEAKIE9uZSB3YXkgdG8gZG8gaXQgaXMgdG8gcHVsbCBtYXN0ZXIgaW50byB0aGUgdG9waWMgYnJhbmNoOgogCiAtLS0tLS0tLS0tLS0KLQkkIGdpdCBjaGVja291dCB0b3BpYworCSQgZ2l0IHN3aXRjaCB0b3BpYwogCSQgZ2l0IG1lcmdlIG1hc3RlcgogCiAgICAgICAgICAgICAgIG8tLS0qLS0tby0tLSsgdG9waWMKQEAgLTExMywxMCArMTEzLDEwIEBACiBpbiB3aGljaCBjYXNlIHRoZSBmaW5hbCBjb21taXQgZ3JhcGggd291bGQgbG9vayBsaWtlIHRoaXM6CiAKIC0tLS0tLS0tLS0tLQotCSQgZ2l0IGNoZWNrb3V0IHRvcGljCisJJCBnaXQgc3dpdGNoIHRvcGljCiAJJCBnaXQgbWVyZ2UgbWFzdGVyCiAJJCAuLi4gd29yayBvbiBib3RoIHRvcGljIGFuZCBtYXN0ZXIgYnJhbmNoZXMKLQkkIGdpdCBjaGVja291dCBtYXN0ZXIKKwkkIGdpdCBzd2l0Y2ggbWFzdGVyCiAJJCBnaXQgbWVyZ2UgdG9waWMKIAogICAgICAgICAgICAgICBvLS0tKi0tLW8tLS0rLS0tby0tLW8gdG9waWMKQEAgLTEzNiwxMSArMTM2LDExIEBACiB0b3Agb2YgdGhlIHRpcCBiZWZvcmUgdGhlIHRlc3QgbWVyZ2U6CiAKIC0tLS0tLS0tLS0tLQotCSQgZ2l0IGNoZWNrb3V0IHRvcGljCisJJCBnaXQgc3dpdGNoIHRvcGljCiAJJCBnaXQgbWVyZ2UgbWFzdGVyCiAJJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReIDsjIHJld2luZCB0aGUgdGVzdCBtZXJnZQogCSQgLi4uIHdvcmsgb24gYm90aCB0b3BpYyBhbmQgbWFzdGVyIGJyYW5jaGVzCi0JJCBnaXQgY2hlY2tvdXQgbWFzdGVyCisJJCBnaXQgc3dpdGNoIG1hc3RlcgogCSQgZ2l0IG1lcmdlIHRvcGljCiAKICAgICAgICAgICAgICAgby0tLSotLS1vLS0tLS0tLW8tLS1vIHRvcGljCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQKaW5kZXggMjZlNzQ2Yy4uOTdlMDU0NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dApAQCAtMjUsMTIgKzI1LDEzIEBACiAJdGhlIGN1cnJlbnQgYnJhbmNoLikKICsKIFRoaXMgbWVhbnMgdGhhdCBgZ2l0IHJlc2V0IDxwYXRocz5gIGlzIHRoZSBvcHBvc2l0ZSBvZiBgZ2l0IGFkZAotPHBhdGhzPmAuCis8cGF0aHM+YC4gVGhpcyBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8KK2BnaXQgcmVzdG9yZSBbLS1zb3VyY2U9PHRyZWUtaXNoPl0gLS1zdGFnZWQgPHBhdGhzPi4uLmAuCiArCiBBZnRlciBydW5uaW5nIGBnaXQgcmVzZXQgPHBhdGhzPmAgdG8gdXBkYXRlIHRoZSBpbmRleCBlbnRyeSwgeW91IGNhbgotdXNlIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvdXQgb2YgdGhlIGluZGV4IHRvCi10aGUgd29ya2luZyB0cmVlLgotQWx0ZXJuYXRpdmVseSwgdXNpbmcgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gYW5kIHNwZWNpZnlpbmcgYSBjb21taXQsIHlvdQordXNlIGxpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0gdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG91dCBvZiB0aGUgaW5kZXggdG8KK3RoZSB3b3JraW5nIHRyZWUuIEFsdGVybmF0aXZlbHksIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0KK2FuZCBzcGVjaWZ5aW5nIGEgY29tbWl0IHdpdGggYC0tc291cmNlYCwgeW91CiBjYW4gY29weSB0aGUgY29udGVudHMgb2YgYSBwYXRoIG91dCBvZiBhIGNvbW1pdCB0byB0aGUgaW5kZXggYW5kIHRvIHRoZQogd29ya2luZyB0cmVlIGluIG9uZSBnby4KIApAQCAtODYsOCArODcsOCBAQAogCWNoYW5nZXMsIHJlc2V0IGlzIGFib3J0ZWQuCiAtLQogCi1JZiB5b3Ugd2FudCB0byB1bmRvIGEgY29tbWl0IG90aGVyIHRoYW4gdGhlIGxhdGVzdCBvbiBhIGJyYW5jaCwKLWxpbmtnaXQ6Z2l0LXJldmVydFsxXSBpcyB5b3VyIGZyaWVuZC4KK1NlZSAiUmVzZXQsIHJlc3RvcmUgYW5kIHJldmVydCIgaW4gbGlua2dpdDpnaXRbMV0gZm9yIHRoZSBkaWZmZXJlbmNlcworYmV0d2VlbiB0aGUgdGhyZWUgY29tbWFuZHMuCiAKIAogT1BUSU9OUwpAQCAtMTQ5LDkgKzE1MCw5IEBACiBVbmRvIGEgY29tbWl0LCBtYWtpbmcgaXQgYSB0b3BpYyBicmFuY2g6OgogKwogLS0tLS0tLS0tLS0tCi0kIGdpdCBicmFuY2ggdG9waWMvd2lwICAgICA8MT4KLSQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjMgIDwyPgotJCBnaXQgY2hlY2tvdXQgdG9waWMvd2lwICAgPDM+CiskIGdpdCBicmFuY2ggdG9waWMvd2lwICAgICAgICAgIDwxPgorJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MyAgICAgICA8Mj4KKyQgZ2l0IHN3aXRjaCB0b3BpYy93aXAgICAgICAgICAgPDM+CiAtLS0tLS0tLS0tLS0KICsKIDwxPiBZb3UgaGF2ZSBtYWRlIHNvbWUgY29tbWl0cywgYnV0IHJlYWxpemUgdGhleSB3ZXJlIHByZW1hdHVyZQpAQCAtMjMyLDEzICsyMzMsMTMgQEAKIG5lZWQgdG8gZ2V0IHRvIHRoZSBvdGhlciBicmFuY2ggZm9yIGEgcXVpY2sgYnVnZml4LgogKwogLS0tLS0tLS0tLS0tCi0kIGdpdCBjaGVja291dCBmZWF0dXJlIDsjIHlvdSB3ZXJlIHdvcmtpbmcgaW4gImZlYXR1cmUiIGJyYW5jaCBhbmQKLSQgd29yayB3b3JrIHdvcmsgICAgICAgOyMgZ290IGludGVycnVwdGVkCiskIGdpdCBzd2l0Y2ggZmVhdHVyZSAgOyMgeW91IHdlcmUgd29ya2luZyBpbiAiZmVhdHVyZSIgYnJhbmNoIGFuZAorJCB3b3JrIHdvcmsgd29yayAgICAgIDsjIGdvdCBpbnRlcnJ1cHRlZAogJCBnaXQgY29tbWl0IC1hIC1tICJzbmFwc2hvdCBXSVAiICAgICAgICAgICAgICAgICA8MT4KLSQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorJCBnaXQgc3dpdGNoIG1hc3RlcgogJCBmaXggZml4IGZpeAogJCBnaXQgY29tbWl0IDsjIGNvbW1pdCB3aXRoIHJlYWwgbG9nCi0kIGdpdCBjaGVja291dCBmZWF0dXJlCiskIGdpdCBzd2l0Y2ggZmVhdHVyZQogJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReIDsjIGdvIGJhY2sgdG8gV0lQIHN0YXRlICA8Mj4KICQgZ2l0IHJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDM+CiAtLS0tLS0tLS0tLS0KQEAgLTI3OSwxOCArMjgwLDE4IEBACiArCiAtLS0tLS0tLS0tLS0KICQgZ2l0IHRhZyBzdGFydAotJCBnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMQorJCBnaXQgc3dpdGNoIC1jIGJyYW5jaDEKICQgZWRpdAogJCBnaXQgY29tbWl0IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MT4KICQgZWRpdAotJCBnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiAgICAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IHN3aXRjaCAtYyBicmFuY2gyICAgICAgICAgICAgICAgICAgICAgPDI+CiAkIGdpdCByZXNldCAtLWtlZXAgc3RhcnQgICAgICAgICAgICAgICAgICAgIDwzPgogLS0tLS0tLS0tLS0tCiArCiA8MT4gVGhpcyBjb21taXRzIHlvdXIgZmlyc3QgZWRpdHMgaW4gYGJyYW5jaDFgLgogPDI+IEluIHRoZSBpZGVhbCB3b3JsZCwgeW91IGNvdWxkIGhhdmUgcmVhbGl6ZWQgdGhhdCB0aGUgZWFybGllcgogICAgIGNvbW1pdCBkaWQgbm90IGJlbG9uZyB0byB0aGUgbmV3IHRvcGljIHdoZW4geW91IGNyZWF0ZWQgYW5kIHN3aXRjaGVkCi0gICAgdG8gYGJyYW5jaDJgIChpLmUuIGBnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBzdGFydGApLCBidXQgbm9ib2R5IGlzCisgICAgdG8gYGJyYW5jaDJgIChpLmUuIGBnaXQgc3dpdGNoIC1jIGJyYW5jaDIgc3RhcnRgKSwgYnV0IG5vYm9keSBpcwogICAgIHBlcmZlY3QuCiA8Mz4gQnV0IHlvdSBjYW4gdXNlIGByZXNldCAtLWtlZXBgIHRvIHJlbW92ZSB0aGUgdW53YW50ZWQgY29tbWl0IGFmdGVyCiAgICAgeW91IHN3aXRjaGVkIHRvIGBicmFuY2gyYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlc3RvcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVzdG9yZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwMDkzZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc3RvcmUudHh0CkBAIC0wLDAgKzEsMTg1IEBACitnaXQtcmVzdG9yZSgxKQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlc3RvcmUgLSBSZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVzdG9yZScgWzxvcHRpb25zPl0gWy0tc291cmNlPTx0cmVlPl0gWy0tc3RhZ2VkXSBbLS13b3JrdHJlZV0gPHBhdGhzcGVjPi4uLgorJ2dpdCByZXN0b3JlJyAoLXB8LS1wYXRjaCkgWzxvcHRpb25zPl0gWy0tc291cmNlPTx0cmVlPl0gWy0tc3RhZ2VkXSBbLS13b3JrdHJlZV0gWzxwYXRoc3BlYz4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVzdG9yZSBzcGVjaWZpZWQgcGF0aHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB3aXRoIHNvbWUgY29udGVudHMgZnJvbSBhCityZXN0b3JlIHNvdXJjZS4gSWYgYSBwYXRoIGlzIHRyYWNrZWQgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRoZSByZXN0b3JlCitzb3VyY2UsIGl0IHdpbGwgYmUgcmVtb3ZlZCB0byBtYXRjaCB0aGUgc291cmNlLgorCitUaGUgY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvIHJlc3RvcmUgdGhlIGNvbnRlbnQgaW4gdGhlIGluZGV4IHdpdGgKK2AtLXN0YWdlZGAsIG9yIHJlc3RvcmUgYm90aCB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggd2l0aAorYC0tc3RhZ2VkIC0td29ya3RyZWVgLgorCitCeSBkZWZhdWx0LCB0aGUgcmVzdG9yZSBzb3VyY2VzIGZvciB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBhcmUgdGhlCitpbmRleCBhbmQgYEhFQURgIHJlc3BlY3RpdmVseS4gYC0tc291cmNlYCBjb3VsZCBiZSB1c2VkIHRvIHNwZWNpZnkgYQorY29tbWl0IGFzIHRoZSByZXN0b3JlIHNvdXJjZS4KKworU2VlICJSZXNldCwgcmVzdG9yZSBhbmQgcmV2ZXJ0IiBpbiBsaW5rZ2l0OmdpdFsxXSBmb3IgdGhlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHRoZSB0aHJlZSBjb21tYW5kcy4KKworVEhJUyBDT01NQU5EIElTIEVYUEVSSU1FTlRBTC4gVEhFIEJFSEFWSU9SIE1BWSBDSEFOR0UuCisKK09QVElPTlMKKy0tLS0tLS0KKy1zIDx0cmVlPjo6CistLXNvdXJjZT08dHJlZT46OgorCVJlc3RvcmUgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyB3aXRoIHRoZSBjb250ZW50IGZyb20gdGhlIGdpdmVuCisJdHJlZS4gSXQgaXMgY29tbW9uIHRvIHNwZWNpZnkgdGhlIHNvdXJjZSB0cmVlIGJ5IG5hbWluZyBhCisJY29tbWl0LCBicmFuY2ggb3IgdGFnIGFzc29jaWF0ZWQgd2l0aCBpdC4KKysKK0lmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHJlc3RvcmUgc291cmNlIGZvciB0aGUgd29ya2luZyB0cmVlIGlzCit0aGUgaW5kZXgsIGFuZCB0aGUgZGVmYXVsdCByZXN0b3JlIHNvdXJjZSBmb3IgdGhlIGluZGV4IGluZGV4IGlzCitgSEVBRGAuIFdoZW4gYm90aCBgLS1zdGFnZWRgIGFuZCBgLS13b3JrdHJlZWAgYXJlIHNwZWNpZmllZCwKK2AtLXNvdXJjZWAgbXVzdCBhbHNvIGJlIHNwZWNpZmllZC4KKworLXA6OgorLS1wYXRjaDo6CisJSW50ZXJhY3RpdmVseSBzZWxlY3QgaHVua3MgaW4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUKKwlyZXN0b3JlIHNvdXJjZSBhbmQgdGhlIHJlc3RvcmUgbG9jYXRpb24uIFNlZSB0aGUgYGBJbnRlcmFjdGl2ZQorCU1vZGUnJyBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWFkZFsxXSB0byBsZWFybiBob3cgdG8gb3BlcmF0ZQorCXRoZSBgLS1wYXRjaGAgbW9kZS4KKysKK05vdGUgdGhhdCBgLS1wYXRjaGAgY2FuIGFjY2VwdCBubyBwYXRoc3BlYyBhbmQgd2lsbCBwcm9tcHQgdG8gcmVzdG9yZQorYWxsIG1vZGlmaWVkIHBhdGhzLgorCistVzo6CistLXdvcmt0cmVlOjoKKy1TOjoKKy0tc3RhZ2VkOjoKKwlTcGVjaWZ5IHRoZSByZXN0b3JlIGxvY2F0aW9uLiBJZiBuZWl0aGVyIG9wdGlvbiBpcyBzcGVjaWZpZWQsCisJYnkgZGVmYXVsdCB0aGUgd29ya2luZyB0cmVlIGlzIHJlc3RvcmVkLiBTcGVjaWZ5aW5nIGAtLXN0YWdlZGAKKwl3aWxsIG9ubHkgcmVzdG9yZSB0aGUgaW5kZXguIFNwZWNpZnlpbmcgYm90aCByZXN0b3JlcyBib3RoLgorCistcTo6CistLXF1aWV0OjoKKwlRdWlldCwgc3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMuIEltcGxpZXMgYC0tbm8tcHJvZ3Jlc3NgLgorCistLXByb2dyZXNzOjoKKy0tbm8tcHJvZ3Jlc3M6OgorCVByb2dyZXNzIHN0YXR1cyBpcyByZXBvcnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCisJYnkgZGVmYXVsdCB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHVubGVzcyBgLS1xdWlldGAKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBlbmFibGVzIHByb2dyZXNzIHJlcG9ydGluZyBldmVuIGlmIG5vdAorCWF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHJlZ2FyZGxlc3Mgb2YgYC0tcXVpZXRgLgorCistLW91cnM6OgorLS10aGVpcnM6OgorCVdoZW4gcmVzdG9yaW5nIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZnJvbSB0aGUgaW5kZXgsIHVzZQorCXN0YWdlICMyICgnb3VycycpIG9yICMzICgndGhlaXJzJykgZm9yIHVubWVyZ2VkIHBhdGhzLgorKworTm90ZSB0aGF0IGR1cmluZyBgZ2l0IHJlYmFzZWAgYW5kIGBnaXQgcHVsbCAtLXJlYmFzZWAsICdvdXJzJyBhbmQKKyd0aGVpcnMnIG1heSBhcHBlYXIgc3dhcHBlZC4gU2VlIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUgc2FtZSBvcHRpb25zCitpbiBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSBmb3IgZGV0YWlscy4KKworLW06OgorLS1tZXJnZTo6CisJV2hlbiByZXN0b3JpbmcgZmlsZXMgb24gdGhlIHdvcmtpbmcgdHJlZSBmcm9tIHRoZSBpbmRleCwKKwlyZWNyZWF0ZSB0aGUgY29uZmxpY3RlZCBtZXJnZSBpbiB0aGUgdW5tZXJnZWQgcGF0aHMuCisKKy0tY29uZmxpY3Q9PHN0eWxlPjo6CisJVGhlIHNhbWUgYXMgYC0tbWVyZ2VgIG9wdGlvbiBhYm92ZSwgYnV0IGNoYW5nZXMgdGhlIHdheSB0aGUKKwljb25mbGljdGluZyBodW5rcyBhcmUgcHJlc2VudGVkLCBvdmVycmlkaW5nIHRoZQorCWBtZXJnZS5jb25mbGljdFN0eWxlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgUG9zc2libGUgdmFsdWVzCisJYXJlICJtZXJnZSIgKGRlZmF1bHQpIGFuZCAiZGlmZjMiIChpbiBhZGRpdGlvbiB0byB3aGF0IGlzCisJc2hvd24gYnkgIm1lcmdlIiBzdHlsZSwgc2hvd3MgdGhlIG9yaWdpbmFsIGNvbnRlbnRzKS4KKworLS1pZ25vcmUtdW5tZXJnZWQ6OgorCVdoZW4gcmVzdG9yaW5nIGZpbGVzIG9uIHRoZSB3b3JraW5nIHRyZWUgZnJvbSB0aGUgaW5kZXgsIGRvCisJbm90IGFib3J0IHRoZSBvcGVyYXRpb24gaWYgdGhlcmUgYXJlIHVubWVyZ2VkIGVudHJpZXMgYW5kCisJbmVpdGhlciBgLS1vdXJzYCwgYC0tdGhlaXJzYCwgYC0tbWVyZ2VgIG9yIGAtLWNvbmZsaWN0YCBpcworCXNwZWNpZmllZC4gVW5tZXJnZWQgcGF0aHMgb24gdGhlIHdvcmtpbmcgdHJlZSBhcmUgbGVmdCBhbG9uZS4KKworLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzOjoKKwlJbiBzcGFyc2UgY2hlY2tvdXQgbW9kZSwgYnkgZGVmYXVsdCBpcyB0byBvbmx5IHVwZGF0ZSBlbnRyaWVzCisJbWF0Y2hlZCBieSBgPHBhdGhzcGVjPmAgYW5kIHNwYXJzZSBwYXR0ZXJucyBpbgorCSRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0LiBUaGlzIG9wdGlvbiBpZ25vcmVzIHRoZSBzcGFyc2UKKwlwYXR0ZXJucyBhbmQgdW5jb25kaXRpb25hbGx5IHJlc3RvcmVzIGFueSBmaWxlcyBpbgorCWA8cGF0aHNwZWM+YC4KKworLS1vdmVybGF5OjoKKy0tbm8tb3ZlcmxheTo6CisJSW4gb3ZlcmxheSBtb2RlLCB0aGUgY29tbWFuZCBuZXZlciByZW1vdmVzIGZpbGVzIHdoZW4KKwlyZXN0b3JpbmcuIEluIG5vLW92ZXJsYXkgbW9kZSwgdHJhY2tlZCBmaWxlcyB0aGF0IGRvIG5vdAorCWFwcGVhciBpbiB0aGUgYC0tc291cmNlYCB0cmVlIGFyZSByZW1vdmVkLCB0byBtYWtlIHRoZW0gbWF0Y2gKKwlgPHRyZWU+YCBleGFjdGx5LiBUaGUgZGVmYXVsdCBpcyBuby1vdmVybGF5IG1vZGUuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIHNlcXVlbmNlIHN3aXRjaGVzIHRvIHRoZSBgbWFzdGVyYCBicmFuY2gsIHJldmVydHMgdGhlCitgTWFrZWZpbGVgIHRvIHR3byByZXZpc2lvbnMgYmFjaywgZGVsZXRlcyBoZWxsby5jIGJ5IG1pc3Rha2UsIGFuZCBnZXRzCitpdCBiYWNrIGZyb20gdGhlIGluZGV4LgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCBtYXN0ZXIKKyQgZ2l0IHJlc3RvcmUgLS1zb3VyY2UgbWFzdGVyfjIgTWFrZWZpbGUgIDwxPgorJCBybSAtZiBoZWxsby5jCiskIGdpdCByZXN0b3JlIGhlbGxvLmMgICAgICAgICAgICAgICAgICAgICA8Mj4KKy0tLS0tLS0tLS0tLQorCis8MT4gdGFrZSBhIGZpbGUgb3V0IG9mIGFub3RoZXIgY29tbWl0Cis8Mj4gcmVzdG9yZSBoZWxsby5jIGZyb20gdGhlIGluZGV4CisKK0lmIHlvdSB3YW50IHRvIHJlc3RvcmUgX2FsbF8gQyBzb3VyY2UgZmlsZXMgdG8gbWF0Y2ggdGhlIHZlcnNpb24gaW4KK3RoZSBpbmRleCwgeW91IGNhbiBzYXkKKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXN0b3JlICcqLmMnCistLS0tLS0tLS0tLS0KKworTm90ZSB0aGUgcXVvdGVzIGFyb3VuZCBgKi5jYC4gIFRoZSBmaWxlIGBoZWxsby5jYCB3aWxsIGFsc28gYmUKK3Jlc3RvcmVkLCBldmVuIHRob3VnaCBpdCBpcyBubyBsb25nZXIgaW4gdGhlIHdvcmtpbmcgdHJlZSwgYmVjYXVzZSB0aGUKK2ZpbGUgZ2xvYmJpbmcgaXMgdXNlZCB0byBtYXRjaCBlbnRyaWVzIGluIHRoZSBpbmRleCAobm90IGluIHRoZQord29ya2luZyB0cmVlIGJ5IHRoZSBzaGVsbCkuCisKK1RvIHJlc3RvcmUgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc3RvcmUgLgorLS0tLS0tLS0tLS0tCisKK29yIHRvIHJlc3RvcmUgYWxsIHdvcmtpbmcgdHJlZSBmaWxlcyB3aXRoICd0b3AnIHBhdGhzcGVjIG1hZ2ljIChzZWUKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10pCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVzdG9yZSA6LworLS0tLS0tLS0tLS0tCisKK1RvIHJlc3RvcmUgYSBmaWxlIGluIHRoZSBpbmRleCB0byBtYXRjaCB0aGUgdmVyc2lvbiBpbiBgSEVBRGAgKHRoaXMgaXMKK3RoZSBzYW1lIGFzIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlc2V0WzFdKQorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc3RvcmUgLS1zdGFnZWQgaGVsbG8uYworLS0tLS0tLS0tLS0tCisKK29yIHlvdSBjYW4gcmVzdG9yZSBib3RoIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSAodGhpcyB0aGUgc2FtZQorYXMgdXNpbmcgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0pCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIC0tc3RhZ2VkIC0td29ya3RyZWUgaGVsbG8uYworLS0tLS0tLS0tLS0tCisKK29yIHRoZSBzaG9ydCBmb3JtIHdoaWNoIGlzIG1vcmUgcHJhY3RpY2FsIGJ1dCBsZXNzIHJlYWRhYmxlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc3RvcmUgLXNAIC1TVyBoZWxsby5jCistLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKK2xpbmtnaXQ6Z2l0LXJlc2V0WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CmluZGV4IDg4NjA5ZmYuLjkzOTI3NjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQKQEAgLTQ4LDYgKzQ4LDcgQEAKIAkgICAgIFsgLS1kYXRlPTxmb3JtYXQ+XQogCSAgICAgWyBbIC0tb2JqZWN0cyB8IC0tb2JqZWN0cy1lZGdlIHwgLS1vYmplY3RzLWVkZ2UtYWdncmVzc2l2ZSBdCiAJICAgICAgIFsgLS11bnBhY2tlZCBdCisJICAgICAgIFsgLS1vYmplY3QtbmFtZXMgfCAtLW5vLW9iamVjdC1uYW1lcyBdCiAJICAgICAgIFsgLS1maWx0ZXI9PGZpbHRlci1zcGVjPiBbIC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXSBdIF0KIAkgICAgIFsgLS1taXNzaW5nPTxtaXNzaW5nLWFjdGlvbj4gXQogCSAgICAgWyAtLXByZXR0eSB8IC0taGVhZGVyIF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXZlcnQudHh0CmluZGV4IDBjODJjYTUuLjlkMjIyNzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dApAQCAtOSw5ICs5LDcgQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IHJldmVydCcgWy0tW25vLV1lZGl0XSBbLW5dIFstbSBwYXJlbnQtbnVtYmVyXSBbLXNdIFstU1s8a2V5aWQ+XV0gPGNvbW1pdD4uLi4KLSdnaXQgcmV2ZXJ0JyAtLWNvbnRpbnVlCi0nZ2l0IHJldmVydCcgLS1xdWl0Ci0nZ2l0IHJldmVydCcgLS1hYm9ydAorJ2dpdCByZXZlcnQnICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCB8IC0tcXVpdCkKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0yNiwxMCArMjQsMTMgQEAKIHRocm93IGF3YXkgYWxsIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSwgeW91CiBzaG91bGQgc2VlIGxpbmtnaXQ6Z2l0LXJlc2V0WzFdLCBwYXJ0aWN1bGFybHkgdGhlIGAtLWhhcmRgIG9wdGlvbi4gIElmCiB5b3Ugd2FudCB0byBleHRyYWN0IHNwZWNpZmljIGZpbGVzIGFzIHRoZXkgd2VyZSBpbiBhbm90aGVyIGNvbW1pdCwgeW91Ci1zaG91bGQgc2VlIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdLCBzcGVjaWZpY2FsbHkgdGhlIGBnaXQgY2hlY2tvdXQKLTxjb21taXQ+IC0tIDxmaWxlbmFtZT5gIHN5bnRheC4gIFRha2UgY2FyZSB3aXRoIHRoZXNlIGFsdGVybmF0aXZlcyBhcworc2hvdWxkIHNlZSBsaW5rZ2l0OmdpdC1yZXN0b3JlWzFdLCBzcGVjaWZpY2FsbHkgdGhlIGAtLXNvdXJjZWAKK29wdGlvbi4gVGFrZSBjYXJlIHdpdGggdGhlc2UgYWx0ZXJuYXRpdmVzIGFzCiBib3RoIHdpbGwgZGlzY2FyZCB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkuCiAKK1NlZSAiUmVzZXQsIHJlc3RvcmUgYW5kIHJldmVydCIgaW4gbGlua2dpdDpnaXRbMV0gZm9yIHRoZSBkaWZmZXJlbmNlcworYmV0d2VlbiB0aGUgdGhyZWUgY29tbWFuZHMuCisKIE9QVElPTlMKIC0tLS0tLS0KIDxjb21taXQ+Li4uOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtZW1haWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKaW5kZXggNTA0YWU3Zi4uZDkzZTVkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKQEAgLTI3OCw2ICsyNzgsMTQgQEAKIEF1dG9tYXRpbmcKIH5+fn5+fn5+fn4KIAorLS1uby1bdG98Y2N8YmNjXTo6CisJQ2xlYXJzIGFueSBsaXN0IG9mICJUbzoiLCAiQ2M6IiwgIkJjYzoiIGFkZHJlc3NlcyBwcmV2aW91c2x5CisJc2V0IHZpYSBjb25maWcuCisKKy0tbm8taWRlbnRpdHk6OgorCUNsZWFycyB0aGUgcHJldmlvdXNseSByZWFkIHZhbHVlIG9mIGBzZW5kZW1haWwuaWRlbnRpdHlgIHNldAorCXZpYSBjb25maWcsIGlmIGFueS4KKwogLS10by1jbWQ9PGNvbW1hbmQ+OjoKIAlTcGVjaWZ5IGEgY29tbWFuZCB0byBleGVjdXRlIG9uY2UgcGVyIHBhdGNoIGZpbGUgd2hpY2gKIAlzaG91bGQgZ2VuZXJhdGUgcGF0Y2ggZmlsZSBzcGVjaWZpYyAiVG86IiBlbnRyaWVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0CmluZGV4IGUzMWVhN2QuLjhmYmUxMmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGFzaC50eHQKQEAgLTIzNSwxMiArMjM1LDEyIEBACiArCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIC4uLiBoYWNrIGhhY2sgaGFjayAuLi4KLSQgZ2l0IGNoZWNrb3V0IC1iIG15X3dpcAorJCBnaXQgc3dpdGNoIC1jIG15X3dpcAogJCBnaXQgY29tbWl0IC1hIC1tICJXSVAiCi0kIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZ2l0IHN3aXRjaCBtYXN0ZXIKICQgZWRpdCBlbWVyZ2VuY3kgZml4CiAkIGdpdCBjb21taXQgLWEgLW0gIkZpeCBpbiBhIGh1cnJ5IgotJCBnaXQgY2hlY2tvdXQgbXlfd2lwCiskIGdpdCBzd2l0Y2ggbXlfd2lwCiAkIGdpdCByZXNldCAtLXNvZnQgSEVBRF4KICMgLi4uIGNvbnRpbnVlIGhhY2tpbmcgLi4uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yOTMsNyArMjkzLDggQEAKIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdLAogbGlua2dpdDpnaXQtY29tbWl0WzFdLAogbGlua2dpdDpnaXQtcmVmbG9nWzFdLAotbGlua2dpdDpnaXQtcmVzZXRbMV0KK2xpbmtnaXQ6Z2l0LXJlc2V0WzFdLAorbGlua2dpdDpnaXQtc3dpdGNoWzFdCiAKIEdJVAogLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zd2l0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3dpdGNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc5MDAzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3dpdGNoLnR4dApAQCAtMCwwICsxLDI3MyBAQAorZ2l0LXN3aXRjaCgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3dpdGNoIC0gU3dpdGNoIGJyYW5jaGVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzd2l0Y2gnIFs8b3B0aW9ucz5dIFstLW5vLWd1ZXNzXSA8YnJhbmNoPgorJ2dpdCBzd2l0Y2gnIFs8b3B0aW9ucz5dIC0tZGV0YWNoIFs8c3RhcnQtcG9pbnQ+XQorJ2dpdCBzd2l0Y2gnIFs8b3B0aW9ucz5dICgtY3wtQykgPG5ldy1icmFuY2g+IFs8c3RhcnQtcG9pbnQ+XQorJ2dpdCBzd2l0Y2gnIFs8b3B0aW9ucz5dIC0tb3JwaGFuIDxuZXctYnJhbmNoPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1N3aXRjaCB0byBhIHNwZWNpZmllZCBicmFuY2guIFRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBhcmUKK3VwZGF0ZWQgdG8gbWF0Y2ggdGhlIGJyYW5jaC4gQWxsIG5ldyBjb21taXRzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHRpcAorb2YgdGhpcyBicmFuY2guCisKK09wdGlvbmFsbHkgYSBuZXcgYnJhbmNoIGNvdWxkIGJlIGNyZWF0ZWQgd2l0aCBlaXRoZXIgYC1jYCwgYC1DYCwKK2F1dG9tYXRpY2FsbHkgZnJvbSBhIHJlbW90ZSBicmFuY2ggb2Ygc2FtZSBuYW1lIChzZWUgYC0tZ3Vlc3NgKSwgb3IKK2RldGFjaCB0aGUgd29ya2luZyB0cmVlIGZyb20gYW55IGJyYW5jaCB3aXRoIGAtLWRldGFjaGAsIGFsb25nIHdpdGgKK3N3aXRjaGluZy4KKworU3dpdGNoaW5nIGJyYW5jaGVzIGRvZXMgbm90IHJlcXVpcmUgYSBjbGVhbiBpbmRleCBhbmQgd29ya2luZyB0cmVlCisoaS5lLiBubyBkaWZmZXJlbmNlcyBjb21wYXJlZCB0byBgSEVBRGApLiBUaGUgb3BlcmF0aW9uIGlzIGFib3J0ZWQKK2hvd2V2ZXIgaWYgdGhlIG9wZXJhdGlvbiBsZWFkcyB0byBsb3NzIG9mIGxvY2FsIGNoYW5nZXMsIHVubGVzcyB0b2xkCitvdGhlcndpc2Ugd2l0aCBgLS1kaXNjYXJkLWNoYW5nZXNgIG9yIGAtLW1lcmdlYC4KKworVEhJUyBDT01NQU5EIElTIEVYUEVSSU1FTlRBTC4gVEhFIEJFSEFWSU9SIE1BWSBDSEFOR0UuCisKK09QVElPTlMKKy0tLS0tLS0KKzxicmFuY2g+OjoKKwlCcmFuY2ggdG8gc3dpdGNoIHRvLgorCis8bmV3LWJyYW5jaD46OgorCU5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoLgorCis8c3RhcnQtcG9pbnQ+OjoKKwlUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBuZXcgYnJhbmNoLiBTcGVjaWZ5aW5nIGEKKwlgPHN0YXJ0LXBvaW50PmAgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBicmFuY2ggYmFzZWQgb24gc29tZQorCW90aGVyIHBvaW50IGluIGhpc3RvcnkgdGhhbiB3aGVyZSBIRUFEIGN1cnJlbnRseSBwb2ludHMuIChPciwKKwlpbiB0aGUgY2FzZSBvZiBgLS1kZXRhY2hgLCBhbGxvd3MgeW91IHRvIGluc3BlY3QgYW5kIGRldGFjaAorCWZyb20gc29tZSBvdGhlciBwb2ludC4pCisrCitZb3UgY2FuIHVzZSB0aGUgYEB7LU59YCBzeW50YXggdG8gcmVmZXIgdG8gdGhlIE4tdGggbGFzdAorYnJhbmNoL2NvbW1pdCBzd2l0Y2hlZCB0byB1c2luZyAiZ2l0IHN3aXRjaCIgb3IgImdpdCBjaGVja291dCIKK29wZXJhdGlvbi4gWW91IG1heSBhbHNvIHNwZWNpZnkgYC1gIHdoaWNoIGlzIHN5bm9ueW1vdXMgdG8gYEB7LTF9YC4KK1RoaXMgaXMgb2Z0ZW4gdXNlZCB0byBzd2l0Y2ggcXVpY2tseSBiZXR3ZWVuIHR3byBicmFuY2hlcywgb3IgdG8gdW5kbworYSBicmFuY2ggc3dpdGNoIGJ5IG1pc3Rha2UuCisrCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IG1heSB1c2UgYEEuLi5CYCBhcyBhIHNob3J0Y3V0IGZvciB0aGUgbWVyZ2UKK2Jhc2Ugb2YgYEFgIGFuZCBgQmAgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZS4gWW91IGNhbiBsZWF2ZQorb3V0IGF0IG1vc3Qgb25lIG9mIGBBYCBhbmQgYEJgLCBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvIGBIRUFEYC4KKworLWMgPG5ldy1icmFuY2g+OjoKKy0tY3JlYXRlIDxuZXctYnJhbmNoPjo6CisJQ3JlYXRlIGEgbmV3IGJyYW5jaCBuYW1lZCBgPG5ldy1icmFuY2g+YCBzdGFydGluZyBhdAorCWA8c3RhcnQtcG9pbnQ+YCBiZWZvcmUgc3dpdGNoaW5nIHRvIHRoZSBicmFuY2guIFRoaXMgaXMgYQorCWNvbnZlbmllbnQgc2hvcnRjdXQgZm9yOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggPG5ldy1icmFuY2g+CiskIGdpdCBzd2l0Y2ggPG5ldy1icmFuY2g+CistLS0tLS0tLS0tLS0KKworLUMgPG5ldy1icmFuY2g+OjoKKy0tZm9yY2UtY3JlYXRlIDxuZXctYnJhbmNoPjo6CisJU2ltaWxhciB0byBgLS1jcmVhdGVgIGV4Y2VwdCB0aGF0IGlmIGA8bmV3LWJyYW5jaD5gIGFscmVhZHkKKwlleGlzdHMsIGl0IHdpbGwgYmUgcmVzZXQgdG8gYDxzdGFydC1wb2ludD5gLiBUaGlzIGlzIGEKKwljb252ZW5pZW50IHNob3J0Y3V0IGZvcjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1mIDxuZXctYnJhbmNoPgorJCBnaXQgc3dpdGNoIDxuZXctYnJhbmNoPgorLS0tLS0tLS0tLS0tCisKKy1kOjoKKy0tZGV0YWNoOjoKKwlTd2l0Y2ggdG8gYSBjb21taXQgZm9yIGluc3BlY3Rpb24gYW5kIGRpc2NhcmRhYmxlCisJZXhwZXJpbWVudHMuIFNlZSB0aGUgIkRFVEFDSEVEIEhFQUQiIHNlY3Rpb24gaW4KKwlsaW5rZ2l0OmdpdC1jaGVja291dFsxXSBmb3IgZGV0YWlscy4KKworLS1ndWVzczo6CistLW5vLWd1ZXNzOjoKKwlJZiBgPGJyYW5jaD5gIGlzIG5vdCBmb3VuZCBidXQgdGhlcmUgZG9lcyBleGlzdCBhIHRyYWNraW5nCisJYnJhbmNoIGluIGV4YWN0bHkgb25lIHJlbW90ZSAoY2FsbCBpdCBgPHJlbW90ZT5gKSB3aXRoIGEKKwltYXRjaGluZyBuYW1lLCB0cmVhdCBhcyBlcXVpdmFsZW50IHRvCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtYyA8YnJhbmNoPiAtLXRyYWNrIDxyZW1vdGU+LzxicmFuY2g+CistLS0tLS0tLS0tLS0KKysKK0lmIHRoZSBicmFuY2ggZXhpc3RzIGluIG11bHRpcGxlIHJlbW90ZXMgYW5kIG9uZSBvZiB0aGVtIGlzIG5hbWVkIGJ5Cit0aGUgYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHdlJ2xsIHVzZSB0aGF0CitvbmUgZm9yIHRoZSBwdXJwb3NlcyBvZiBkaXNhbWJpZ3VhdGlvbiwgZXZlbiBpZiB0aGUgYDxicmFuY2g+YCBpc24ndAordW5pcXVlIGFjcm9zcyBhbGwgcmVtb3Rlcy4gU2V0IGl0IHRvIGUuZy4gYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luYAordG8gYWx3YXlzIGNoZWNrb3V0IHJlbW90ZSBicmFuY2hlcyBmcm9tIHRoZXJlIGlmIGA8YnJhbmNoPmAgaXMKK2FtYmlndW91cyBidXQgZXhpc3RzIG9uIHRoZSAnb3JpZ2luJyByZW1vdGUuIFNlZSBhbHNvCitgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZWAgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorKworYC0tZ3Vlc3NgIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBVc2UgYC0tbm8tZ3Vlc3NgIHRvIGRpc2FibGUgaXQuCisKKy1mOjoKKy0tZm9yY2U6OgorCUFuIGFsaWFzIGZvciBgLS1kaXNjYXJkLWNoYW5nZXNgLgorCistLWRpc2NhcmQtY2hhbmdlczo6CisJUHJvY2VlZCBldmVuIGlmIHRoZSBpbmRleCBvciB0aGUgd29ya2luZyB0cmVlIGRpZmZlcnMgZnJvbQorCWBIRUFEYC4gQm90aCB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBhcmUgcmVzdG9yZWQgdG8gbWF0Y2gKKwl0aGUgc3dpdGNoaW5nIHRhcmdldC4gSWYgYC0tcmVjdXJzZS1zdWJtb2R1bGVzYCBpcyBzcGVjaWZpZWQsCisJc3VibW9kdWxlIGNvbnRlbnQgaXMgYWxzbyByZXN0b3JlZCB0byBtYXRjaCB0aGUgc3dpdGNoaW5nCisJdGFyZ2V0LiBUaGlzIGlzIHVzZWQgdG8gdGhyb3cgYXdheSBsb2NhbCBjaGFuZ2VzLgorCistbTo6CistLW1lcmdlOjoKKwlJZiB5b3UgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zIHRvIG9uZSBvciBtb3JlIGZpbGVzIHRoYXQgYXJlCisJZGlmZmVyZW50IGJldHdlZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCB0aGUgYnJhbmNoIHRvIHdoaWNoCisJeW91IGFyZSBzd2l0Y2hpbmcsIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gc3dpdGNoIGJyYW5jaGVzIGluCisJb3JkZXIgdG8gcHJlc2VydmUgeW91ciBtb2RpZmljYXRpb25zIGluIGNvbnRleHQuICBIb3dldmVyLAorCXdpdGggdGhpcyBvcHRpb24sIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gdGhlIGN1cnJlbnQKKwlicmFuY2gsIHlvdXIgd29ya2luZyB0cmVlIGNvbnRlbnRzLCBhbmQgdGhlIG5ldyBicmFuY2ggaXMKKwlkb25lLCBhbmQgeW91IHdpbGwgYmUgb24gdGhlIG5ldyBicmFuY2guCisrCitXaGVuIGEgbWVyZ2UgY29uZmxpY3QgaGFwcGVucywgdGhlIGluZGV4IGVudHJpZXMgZm9yIGNvbmZsaWN0aW5nCitwYXRocyBhcmUgbGVmdCB1bm1lcmdlZCwgYW5kIHlvdSBuZWVkIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cworYW5kIG1hcmsgdGhlIHJlc29sdmVkIHBhdGhzIHdpdGggYGdpdCBhZGRgIChvciBgZ2l0IHJtYCBpZiB0aGUgbWVyZ2UKK3Nob3VsZCByZXN1bHQgaW4gZGVsZXRpb24gb2YgdGhlIHBhdGgpLgorCistLWNvbmZsaWN0PTxzdHlsZT46OgorCVRoZSBzYW1lIGFzIGAtLW1lcmdlYCBvcHRpb24gYWJvdmUsIGJ1dCBjaGFuZ2VzIHRoZSB3YXkgdGhlCisJY29uZmxpY3RpbmcgaHVua3MgYXJlIHByZXNlbnRlZCwgb3ZlcnJpZGluZyB0aGUKKwlgbWVyZ2UuY29uZmxpY3RTdHlsZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFBvc3NpYmxlIHZhbHVlcyBhcmUKKwkibWVyZ2UiIChkZWZhdWx0KSBhbmQgImRpZmYzIiAoaW4gYWRkaXRpb24gdG8gd2hhdCBpcyBzaG93biBieQorCSJtZXJnZSIgc3R5bGUsIHNob3dzIHRoZSBvcmlnaW5hbCBjb250ZW50cykuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVF1aWV0LCBzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcy4KKworLS1wcm9ncmVzczo6CistLW5vLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgYC0tcXVpZXRgCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZW5hYmxlcyBwcm9ncmVzcyByZXBvcnRpbmcgZXZlbiBpZiBub3QKKwlhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCByZWdhcmRsZXNzIG9mIGAtLXF1aWV0YC4KKworLXQ6OgorLS10cmFjazo6CisJV2hlbiBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHNldCB1cCAidXBzdHJlYW0iIGNvbmZpZ3VyYXRpb24uCisJYC1jYCBpcyBpbXBsaWVkLiBTZWUgYC0tdHJhY2tgIGluIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IKKwlkZXRhaWxzLgorKworSWYgbm8gYC1jYCBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBuYW1lIG9mIHRoZSBuZXcgYnJhbmNoIHdpbGwgYmUgZGVyaXZlZAorZnJvbSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCwgYnkgbG9va2luZyBhdCB0aGUgbG9jYWwgcGFydCBvZiB0aGUKK3JlZnNwZWMgY29uZmlndXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlLCBhbmQgdGhlbiBzdHJpcHBpbmcKK3RoZSBpbml0aWFsIHBhcnQgdXAgdG8gdGhlICIqIi4gIFRoaXMgd291bGQgdGVsbCB1cyB0byB1c2UgYGhhY2tgIGFzCit0aGUgbG9jYWwgYnJhbmNoIHdoZW4gYnJhbmNoaW5nIG9mZiBvZiBgb3JpZ2luL2hhY2tgIChvcgorYHJlbW90ZXMvb3JpZ2luL2hhY2tgLCBvciBldmVuIGByZWZzL3JlbW90ZXMvb3JpZ2luL2hhY2tgKS4gIElmIHRoZQorZ2l2ZW4gbmFtZSBoYXMgbm8gc2xhc2gsIG9yIHRoZSBhYm92ZSBndWVzc2luZyByZXN1bHRzIGluIGFuIGVtcHR5CituYW1lLCB0aGUgZ3Vlc3NpbmcgaXMgYWJvcnRlZC4gIFlvdSBjYW4gZXhwbGljaXRseSBnaXZlIGEgbmFtZSB3aXRoCitgLWNgIGluIHN1Y2ggYSBjYXNlLgorCistLW5vLXRyYWNrOjoKKwlEbyBub3Qgc2V0IHVwICJ1cHN0cmVhbSIgY29uZmlndXJhdGlvbiwgZXZlbiBpZiB0aGUKKwlgYnJhbmNoLmF1dG9TZXR1cE1lcmdlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHRydWUuCisKKy0tb3JwaGFuIDxuZXctYnJhbmNoPjo6CisJQ3JlYXRlIGEgbmV3ICdvcnBoYW4nIGJyYW5jaCwgbmFtZWQgYDxuZXctYnJhbmNoPmAuIEFsbAorCXRyYWNrZWQgZmlsZXMgYXJlIHJlbW92ZWQuCisKKy0taWdub3JlLW90aGVyLXdvcmt0cmVlczo6CisJYGdpdCBzd2l0Y2hgIHJlZnVzZXMgd2hlbiB0aGUgd2FudGVkIHJlZiBpcyBhbHJlYWR5CisJY2hlY2tlZCBvdXQgYnkgYW5vdGhlciB3b3JrdHJlZS4gVGhpcyBvcHRpb24gbWFrZXMgaXQgY2hlY2sKKwl0aGUgcmVmIG91dCBhbnl3YXkuIEluIG90aGVyIHdvcmRzLCB0aGUgcmVmIGNhbiBiZSBoZWxkIGJ5CisJbW9yZSB0aGFuIG9uZSB3b3JrdHJlZS4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCVVzaW5nIGAtLXJlY3Vyc2Utc3VibW9kdWxlc2Agd2lsbCB1cGRhdGUgdGhlIGNvbnRlbnQgb2YgYWxsCisJaW5pdGlhbGl6ZWQgc3VibW9kdWxlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUKKwlzdXBlcnByb2plY3QuIElmIG5vdGhpbmcgKG9yIGAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlc2ApIGlzCisJdXNlZCwgdGhlIHdvcmsgdHJlZXMgb2Ygc3VibW9kdWxlcyB3aWxsIG5vdCBiZSB1cGRhdGVkLiBKdXN0CisJbGlrZSBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0sIHRoaXMgd2lsbCBkZXRhY2ggYEhFQURgIG9mIHRoZQorCXN1Ym1vZHVsZXMuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgc3dpdGNoZXMgdG8gdGhlICJtYXN0ZXIiIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggbWFzdGVyCistLS0tLS0tLS0tLS0KKworQWZ0ZXIgd29ya2luZyBpbiB0aGUgd3JvbmcgYnJhbmNoLCBzd2l0Y2hpbmcgdG8gdGhlIGNvcnJlY3QgYnJhbmNoCit3b3VsZCBiZSBkb25lIHVzaW5nOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCBteXRvcGljCistLS0tLS0tLS0tLS0KKworSG93ZXZlciwgeW91ciAid3JvbmciIGJyYW5jaCBhbmQgY29ycmVjdCAibXl0b3BpYyIgYnJhbmNoIG1heSBkaWZmZXIKK2luIGZpbGVzIHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgbG9jYWxseSwgaW4gd2hpY2ggY2FzZSB0aGUgYWJvdmUKK3N3aXRjaCB3b3VsZCBmYWlsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggbXl0b3BpYworZXJyb3I6IFlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgdG8gJ2Zyb3R6Jzsgbm90IHN3aXRjaGluZyBicmFuY2hlcy4KKy0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGdpdmUgdGhlIGAtbWAgZmxhZyB0byB0aGUgY29tbWFuZCwgd2hpY2ggd291bGQgdHJ5IGEgdGhyZWUtd2F5CittZXJnZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLW0gbXl0b3BpYworQXV0by1tZXJnaW5nIGZyb3R6CistLS0tLS0tLS0tLS0KKworQWZ0ZXIgdGhpcyB0aHJlZS13YXkgbWVyZ2UsIHRoZSBsb2NhbCBtb2RpZmljYXRpb25zIGFyZSBfbm90XworcmVnaXN0ZXJlZCBpbiB5b3VyIGluZGV4IGZpbGUsIHNvIGBnaXQgZGlmZmAgd291bGQgc2hvdyB5b3Ugd2hhdAorY2hhbmdlcyB5b3UgbWFkZSBzaW5jZSB0aGUgdGlwIG9mIHRoZSBuZXcgYnJhbmNoLgorCitUbyBzd2l0Y2ggYmFjayB0byB0aGUgcHJldmlvdXMgYnJhbmNoIGJlZm9yZSB3ZSBzd2l0Y2hlZCB0byBteXRvcGljCisoaS5lLiAibWFzdGVyIiBicmFuY2gpOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtCistLS0tLS0tLS0tLS0KKworWW91IGNhbiBncm93IGEgbmV3IGJyYW5jaCBmcm9tIGFueSBjb21taXQuIEZvciBleGFtcGxlLCBzd2l0Y2ggdG8KKyJIRUFEfjMiIGFuZCBjcmVhdGUgYnJhbmNoICJmaXh1cCI6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1jIGZpeHVwIEhFQUR+MworU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICdmaXh1cCcKKy0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBzdGFydCBhIG5ldyBicmFuY2ggZnJvbSBhIHJlbW90ZSBicmFuY2ggb2YgdGhlIHNhbWUKK25hbWU6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIG5ldy10b3BpYworQnJhbmNoICduZXctdG9waWMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICduZXctdG9waWMnIGZyb20gJ29yaWdpbicKK1N3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnbmV3LXRvcGljJworLS0tLS0tLS0tLS0tCisKK1RvIGNoZWNrIG91dCBjb21taXQgYEhFQUR+M2AgZm9yIHRlbXBvcmFyeSBpbnNwZWN0aW9uIG9yIGV4cGVyaW1lbnQKK3dpdGhvdXQgY3JlYXRpbmcgYSBuZXcgYnJhbmNoOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtLWRldGFjaCBIRUFEfjMKK0hFQUQgaXMgbm93IGF0IDlmYzk1NTUzMTIgTWVyZ2UgYnJhbmNoICdjYy9zaGFyZWQtaW5kZXgtcGVybWJpdHMnCistLS0tLS0tLS0tLS0KKworSWYgaXQgdHVybnMgb3V0IHdoYXRldmVyIHlvdSBoYXZlIGRvbmUgaXMgd29ydGgga2VlcGluZywgeW91IGNhbgorYWx3YXlzIGNyZWF0ZSBhIG5ldyBuYW1lIGZvciBpdCAod2l0aG91dCBzd2l0Y2hpbmcgYXdheSk6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1jIGdvb2Qtc3VycHJpc2VzCistLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKK2xpbmtnaXQ6Z2l0LWJyYW5jaFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CmluZGV4IGE3NGU3YjkuLjJlNTU5OWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dApAQCAtNjQsNiArNjQsMTMgQEAKIC1zOjoKIC0tc2lnbjo6CiAJTWFrZSBhIEdQRy1zaWduZWQgdGFnLCB1c2luZyB0aGUgZGVmYXVsdCBlLW1haWwgYWRkcmVzcydzIGtleS4KKwlUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0YWcgR1BHLXNpZ25pbmcgaXMgY29udHJvbGxlZCBieSBgdGFnLmdwZ1NpZ25gCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpZiBpdCBleGlzdHMsIG9yIGRpc2FibGVkIG9kZXIgb3RoZXJ3aXNlLgorCVNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy0tbm8tc2lnbjo6CisJT3ZlcnJpZGUgYHRhZy5ncGdTaWduYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRoYXQgaXMKKwlzZXQgdG8gZm9yY2UgZWFjaCBhbmQgZXZlcnkgdGFnIHRvIGJlIHNpZ25lZC4KIAogLXUgPGtleWlkPjo6CiAtLWxvY2FsLXVzZXI9PGtleWlkPjo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXNlcnZlci1pbmZvLnR4dAppbmRleCBiZDBlMzY0Li45NjliYjJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQKQEAgLTksNyArOSw3IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgdXBkYXRlLXNlcnZlci1pbmZvJyBbLS1mb3JjZV0KKydnaXQgdXBkYXRlLXNlcnZlci1pbmZvJwogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTE5LDE1ICsxOSw2IEBACiB3aGF0IHJlZmVyZW5jZXMgYW5kIHBhY2tzIHRoZSBzZXJ2ZXIgaGFzLiAgVGhpcyBjb21tYW5kCiBnZW5lcmF0ZXMgc3VjaCBhdXhpbGlhcnkgZmlsZXMuCiAKLQotT1BUSU9OUwotLS0tLS0tLQotCi0tZjo6Ci0tLWZvcmNlOjoKLQlVcGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoLgotCi0KIE9VVFBVVAogLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAppbmRleCA2ZGRjMWUyLi45YjgyNTY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CkBAIC0zMyw3ICszMyw4IEBACiBtYW51YWwgcGFnZSBnaXZlcyB5b3UgYW4gb3ZlcnZpZXcgb2YgdGhlIGNvbW1hbmQtbGluZSBjb21tYW5kIHN5bnRheC4KIAogQSBmb3JtYXR0ZWQgYW5kIGh5cGVybGlua2VkIGNvcHkgb2YgdGhlIGxhdGVzdCBHaXQgZG9jdW1lbnRhdGlvbgotY2FuIGJlIHZpZXdlZCBhdCBgaHR0cHM6Ly9naXQuZ2l0aHViLmlvL2h0bWxkb2NzL2dpdC5odG1sYC4KK2NhbiBiZSB2aWV3ZWQgYXQgaHR0cHM6Ly9naXQuZ2l0aHViLmlvL2h0bWxkb2NzL2dpdC5odG1sCitvciBodHRwczovL2dpdC1zY20uY29tL2RvY3MuCiAKIAogT1BUSU9OUwpAQCAtNTYsNyArNTcsOCBAQAogCVJ1biBhcyBpZiBnaXQgd2FzIHN0YXJ0ZWQgaW4gJzxwYXRoPicgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB3b3JraW5nCiAJZGlyZWN0b3J5LiAgV2hlbiBtdWx0aXBsZSBgLUNgIG9wdGlvbnMgYXJlIGdpdmVuLCBlYWNoIHN1YnNlcXVlbnQKIAlub24tYWJzb2x1dGUgYC1DIDxwYXRoPmAgaXMgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHByZWNlZGluZyBgLUMKLQk8cGF0aD5gLgorCTxwYXRoPmAuICBJZiAnPHBhdGg+JyBpcyBwcmVzZW50IGJ1dCBlbXB0eSwgZS5nLiBgLUMgIiJgLCB0aGVuIHRoZQorCWN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgbGVmdCB1bmNoYW5nZWQuCiArCiBUaGlzIG9wdGlvbiBhZmZlY3RzIG9wdGlvbnMgdGhhdCBleHBlY3QgcGF0aCBuYW1lIGxpa2UgYC0tZ2l0LWRpcmAgYW5kCiBgLS13b3JrLXRyZWVgIGluIHRoYXQgdGhlaXIgaW50ZXJwcmV0YXRpb25zIG9mIHRoZSBwYXRoIG5hbWVzIHdvdWxkIGJlCkBAIC0yMTAsNiArMjEyLDI2IEBACiAKIGluY2x1ZGU6OmNtZHMtZm9yZWlnbnNjbWludGVyZmFjZS50eHRbXQogCitSZXNldCwgcmVzdG9yZSBhbmQgcmV2ZXJ0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGVyZSBhcmUgdGhyZWUgY29tbWFuZHMgd2l0aCBzaW1pbGFyIG5hbWVzOiBgZ2l0IHJlc2V0YCwKK2BnaXQgcmVzdG9yZWAgYW5kIGBnaXQgcmV2ZXJ0YC4KKworKiBsaW5rZ2l0OmdpdC1yZXZlcnRbMV0gaXMgYWJvdXQgbWFraW5nIGEgbmV3IGNvbW1pdCB0aGF0IHJldmVydHMgdGhlCisgIGNoYW5nZXMgbWFkZSBieSBvdGhlciBjb21taXRzLgorCisqIGxpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0gaXMgYWJvdXQgcmVzdG9yaW5nIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUKKyAgZnJvbSBlaXRoZXIgdGhlIGluZGV4IG9yIGFub3RoZXIgY29tbWl0LiBUaGlzIGNvbW1hbmQgZG9lcyBub3QKKyAgdXBkYXRlIHlvdXIgYnJhbmNoLiBUaGUgY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvIHJlc3RvcmUgZmlsZXMgaW4KKyAgdGhlIGluZGV4IGZyb20gYW5vdGhlciBjb21taXQuCisKKyogbGlua2dpdDpnaXQtcmVzZXRbMV0gaXMgYWJvdXQgdXBkYXRpbmcgeW91ciBicmFuY2gsIG1vdmluZyB0aGUgdGlwCisgIGluIG9yZGVyIHRvIGFkZCBvciByZW1vdmUgY29tbWl0cyBmcm9tIHRoZSBicmFuY2guIFRoaXMgb3BlcmF0aW9uCisgIGNoYW5nZXMgdGhlIGNvbW1pdCBoaXN0b3J5LgorKworYGdpdCByZXNldGAgY2FuIGFsc28gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBpbmRleCwgb3ZlcmxhcHBpbmcgd2l0aAorYGdpdCByZXN0b3JlYC4KKwogCiBMb3ctbGV2ZWwgY29tbWFuZHMgKHBsdW1iaW5nKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0CmluZGV4IDRmYjIwY2QuLmZiMWQxODggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dApAQCAtMTEyLDcgKzExMiw4IEBACiAKIFRoZXNlIGF0dHJpYnV0ZXMgYWZmZWN0IGhvdyB0aGUgY29udGVudHMgc3RvcmVkIGluIHRoZQogcmVwb3NpdG9yeSBhcmUgY29waWVkIHRvIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMgd2hlbiBjb21tYW5kcwotc3VjaCBhcyAnZ2l0IGNoZWNrb3V0JyBhbmQgJ2dpdCBtZXJnZScgcnVuLiAgVGhleSBhbHNvIGFmZmVjdCBob3cKK3N1Y2ggYXMgJ2dpdCBzd2l0Y2gnLCAnZ2l0IGNoZWNrb3V0JyAgYW5kICdnaXQgbWVyZ2UnIHJ1bi4KK1RoZXkgYWxzbyBhZmZlY3QgaG93CiBHaXQgc3RvcmVzIHRoZSBjb250ZW50cyB5b3UgcHJlcGFyZSBpbiB0aGUgd29ya2luZyB0cmVlIGluIHRoZQogcmVwb3NpdG9yeSB1cG9uICdnaXQgYWRkJyBhbmQgJ2dpdCBjb21taXQnLgogCkBAIC04MTksNyArODIwLDcgQEAKIAogLSBgamF2YWAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBKYXZhIGxhbmd1YWdlLgogCi0tIGBtYXRsYWJgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgTUFUTEFCIGxhbmd1YWdlLgorLSBgbWF0bGFiYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIE1BVExBQiBhbmQgT2N0YXZlIGxhbmd1YWdlcy4KIAogLSBgb2JqY2Agc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBPYmplY3RpdmUtQyBsYW5ndWFnZS4KIApAQCAtODMzLDYgKzgzNCw4IEBACiAKIC0gYHJ1YnlgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgUnVieSBsYW5ndWFnZS4KIAorLSBgcnVzdGAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBSdXN0IGxhbmd1YWdlLgorCiAtIGB0ZXhgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBmb3IgTGFUZVggZG9jdW1lbnRzLgogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dAppbmRleCA1OTJlMDZkLi4xZWQzY2EzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGNsaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjbGkudHh0CkBAIC00Nyw4ICs0Nyw4IEBACiAgICB0aGluZ3M6CiArCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgLS0gKi5jCi0kIGdpdCBjaGVja291dCAtLSBcKi5jCiskIGdpdCByZXN0b3JlICouYworJCBnaXQgcmVzdG9yZSBcKi5jCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKwogVGhlIGZvcm1lciBsZXRzIHlvdXIgc2hlbGwgZXhwYW5kIHRoZSBmaWxlZ2xvYiwgYW5kIHlvdSBhcmUgYXNraW5nCkBAIC0yMDksNiArMjA5LDE4IEBACiBodHRwOi8vbWFyYy5pbmZvLz9sPWdpdCZtPTExOTE1MDM5MzYyMDI3MyBmb3IgZnVydGhlcgogaW5mb3JtYXRpb24uCiAKK1NvbWUgb3RoZXIgY29tbWFuZHMgdGhhdCBhbHNvIHdvcmsgb24gZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQvb3IKK2luIHRoZSBpbmRleCBjYW4gdGFrZSBgLS1zdGFnZWRgIGFuZC9vciBgLS13b3JrdHJlZWAuCisKKyogYC0tc3RhZ2VkYCBpcyBleGFjdGx5IGxpa2UgYC0tY2FjaGVkYCwgd2hpY2ggaXMgdXNlZCB0byBhc2sgYQorICBjb21tYW5kIHRvIG9ubHkgd29yayBvbiB0aGUgaW5kZXgsIG5vdCB0aGUgd29ya2luZyB0cmVlLgorCisqIGAtLXdvcmt0cmVlYCBpcyB0aGUgb3Bwb3NpdGUsIHRvIGFzayBhIGNvbW1hbmQgdG8gd29yayBvbiB0aGUKKyAgd29ya2luZyB0cmVlIG9ubHksIG5vdCB0aGUgaW5kZXguCisKKyogVGhlIHR3byBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgdG8gYXNrIGEgY29tbWFuZCB0byB3b3JrCisgIG9uIGJvdGggdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlLgorCiBHSVQKIC0tLQogUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y29yZS10dXRvcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0CmluZGV4IGUyOWE5ZWYuLmY4ODBkMjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0Y29yZS10dXRvcmlhbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjb3JlLXR1dG9yaWFsLnR4dApAQCAtNzQxLDcgKzc0MSw3IEBACiBzYXlpbmcgdGhhdCB5b3Ugd2FudCB0byBjaGVjayBvdXQgYSBuZXcgYnJhbmNoOgogCiAtLS0tLS0tLS0tLS0KLSQgZ2l0IGNoZWNrb3V0IC1iIG15YnJhbmNoCiskIGdpdCBzd2l0Y2ggLWMgbXlicmFuY2gKIC0tLS0tLS0tLS0tLQogCiB3aWxsIGNyZWF0ZSBhIG5ldyBicmFuY2ggYmFzZWQgYXQgdGhlIGN1cnJlbnQgYEhFQURgIHBvc2l0aW9uLCBhbmQgc3dpdGNoCkBAIC03NTUsNyArNzU1LDcgQEAKIEluIG90aGVyIHdvcmRzLCBpZiB5b3UgaGF2ZSBhbiBlYXJsaWVyIHRhZyBvciBicmFuY2gsIHlvdSdkIGp1c3QgZG8KIAogLS0tLS0tLS0tLS0tCi0kIGdpdCBjaGVja291dCAtYiBteWJyYW5jaCBlYXJsaWVyLWNvbW1pdAorJCBnaXQgc3dpdGNoIC1jIG15YnJhbmNoIGVhcmxpZXItY29tbWl0CiAtLS0tLS0tLS0tLS0KIAogYW5kIGl0IHdvdWxkIGNyZWF0ZSB0aGUgbmV3IGJyYW5jaCBgbXlicmFuY2hgIGF0IHRoZSBlYXJsaWVyIGNvbW1pdCwKQEAgLTc2NSw3ICs3NjUsNyBAQAogWW91IGNhbiBhbHdheXMganVzdCBqdW1wIGJhY2sgdG8geW91ciBvcmlnaW5hbCBgbWFzdGVyYCBicmFuY2ggYnkgZG9pbmcKIAogLS0tLS0tLS0tLS0tCi0kIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZ2l0IHN3aXRjaCBtYXN0ZXIKIC0tLS0tLS0tLS0tLQogCiAob3IgYW55IG90aGVyIGJyYW5jaC1uYW1lLCBmb3IgdGhhdCBtYXR0ZXIpIGFuZCBpZiB5b3UgZm9yZ2V0IHdoaWNoCkBAIC03OTQsNyArNzk0LDcgQEAKIAogd2hpY2ggd2lsbCBzaW1wbHkgX2NyZWF0ZV8gdGhlIGJyYW5jaCwgYnV0IHdpbGwgbm90IGRvIGFueXRoaW5nIGZ1cnRoZXIuCiBZb3UgY2FuIHRoZW4gbGF0ZXIgLS0gb25jZSB5b3UgZGVjaWRlIHRoYXQgeW91IHdhbnQgdG8gYWN0dWFsbHkgZGV2ZWxvcAotb24gdGhhdCBicmFuY2ggLS0gc3dpdGNoIHRvIHRoYXQgYnJhbmNoIHdpdGggYSByZWd1bGFyICdnaXQgY2hlY2tvdXQnCitvbiB0aGF0IGJyYW5jaCAtLSBzd2l0Y2ggdG8gdGhhdCBicmFuY2ggd2l0aCBhIHJlZ3VsYXIgJ2dpdCBzd2l0Y2gnCiB3aXRoIHRoZSBicmFuY2huYW1lIGFzIHRoZSBhcmd1bWVudC4KIAogCkBAIC04MDgsNyArODA4LDcgQEAKIHRoYXQgYnJhbmNoLCBhbmQgZG8gc29tZSB3b3JrIHRoZXJlLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IGNoZWNrb3V0IG15YnJhbmNoCiskIGdpdCBzd2l0Y2ggbXlicmFuY2gKICQgZWNobyAiV29yaywgd29yaywgd29yayIgPj5oZWxsbwogJCBnaXQgY29tbWl0IC1tICJTb21lIHdvcmsuIiAtaSBoZWxsbwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04MjUsNyArODI1LDcgQEAKIHRvIHRoZSBtYXN0ZXIgYnJhbmNoLCBhbmQgZWRpdGluZyB0aGUgc2FtZSBmaWxlIGRpZmZlcmVudGx5IHRoZXJlOgogCiAtLS0tLS0tLS0tLS0KLSQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorJCBnaXQgc3dpdGNoIG1hc3RlcgogLS0tLS0tLS0tLS0tCiAKIEhlcmUsIHRha2UgYSBtb21lbnQgdG8gbG9vayBhdCB0aGUgY29udGVudHMgb2YgYGhlbGxvYCwgYW5kIG5vdGljZSBob3cgdGhleQpAQCAtOTU4LDcgKzk1OCw3IEBACiAnZ2l0IG1lcmdlJyB0byBnZXQgdGhlICJ1cHN0cmVhbSBjaGFuZ2VzIiBiYWNrIHRvIHlvdXIgYnJhbmNoLgogCiAtLS0tLS0tLS0tLS0KLSQgZ2l0IGNoZWNrb3V0IG15YnJhbmNoCiskIGdpdCBzd2l0Y2ggbXlicmFuY2gKICQgZ2l0IG1lcmdlIC1tICJNZXJnZSB1cHN0cmVhbSBjaGFuZ2VzLiIgbWFzdGVyCiAtLS0tLS0tLS0tLS0KIApAQCAtMTEzMyw5ICsxMTMzLDggQEAKIHdvcmsuIiBjb21taXQuCiAKIC0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgbXlicmFuY2gKLSQgZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJeMgotJCBnaXQgY2hlY2tvdXQgbWFzdGVyCiskIGdpdCBzd2l0Y2ggLUMgbXlicmFuY2ggbWFzdGVyXjIKKyQgZ2l0IHN3aXRjaCBtYXN0ZXIKICQgZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJeCiAtLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRldmVyeWRheS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGV2ZXJ5ZGF5LnR4dAppbmRleCA5ZjI1MjhmLi4xYmQ5MTlmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGV2ZXJ5ZGF5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGV2ZXJ5ZGF5LnR4dApAQCAtNDEsNyArNDEsNyBAQAogCiAgICogbGlua2dpdDpnaXQtbG9nWzFdIHRvIHNlZSB3aGF0IGhhcHBlbmVkLgogCi0gICogbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gYW5kIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSB0byBzd2l0Y2gKKyAgKiBsaW5rZ2l0OmdpdC1zd2l0Y2hbMV0gYW5kIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSB0byBzd2l0Y2gKICAgICBicmFuY2hlcy4KIAogICAqIGxpbmtnaXQ6Z2l0LWFkZFsxXSB0byBtYW5hZ2UgdGhlIGluZGV4IGZpbGUuCkBAIC01MSw4ICs1MSw3IEBACiAKICAgKiBsaW5rZ2l0OmdpdC1jb21taXRbMV0gdG8gYWR2YW5jZSB0aGUgY3VycmVudCBicmFuY2guCiAKLSAgKiBsaW5rZ2l0OmdpdC1yZXNldFsxXSBhbmQgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gKHdpdGgKLSAgICBwYXRobmFtZSBwYXJhbWV0ZXJzKSB0byB1bmRvIGNoYW5nZXMuCisgICogbGlua2dpdDpnaXQtcmVzdG9yZVsxXSB0byB1bmRvIGNoYW5nZXMuCiAKICAgKiBsaW5rZ2l0OmdpdC1tZXJnZVsxXSB0byBtZXJnZSBiZXR3ZWVuIGxvY2FsIGJyYW5jaGVzLgogCkBAIC04MCw5ICs3OSw5IEBACiBDcmVhdGUgYSB0b3BpYyBicmFuY2ggYW5kIGRldmVsb3AuOjoKICsKIC0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgLWIgYWxzYS1hdWRpbyA8MT4KKyQgZ2l0IHN3aXRjaCAtYyBhbHNhLWF1ZGlvIDwxPgogJCBlZGl0L2NvbXBpbGUvdGVzdAotJCBnaXQgY2hlY2tvdXQgLS0gY3Vyc2VzL3V4X2F1ZGlvX29zcy5jIDwyPgorJCBnaXQgcmVzdG9yZSBjdXJzZXMvdXhfYXVkaW9fb3NzLmMgPDI+CiAkIGdpdCBhZGQgY3Vyc2VzL3V4X2F1ZGlvX2Fsc2EuYyA8Mz4KICQgZWRpdC9jb21waWxlL3Rlc3QKICQgZ2l0IGRpZmYgSEVBRCA8ND4KQEAgLTkwLDcgKzg5LDcgQEAKICQgZWRpdC9jb21waWxlL3Rlc3QKICQgZ2l0IGRpZmYgSEVBRF4gPDY+CiAkIGdpdCBjb21taXQgLWEgLS1hbWVuZCA8Nz4KLSQgZ2l0IGNoZWNrb3V0IG1hc3RlciA8OD4KKyQgZ2l0IHN3aXRjaCBtYXN0ZXIgPDg+CiAkIGdpdCBtZXJnZSBhbHNhLWF1ZGlvIDw5PgogJCBnaXQgbG9nIC0tc2luY2U9JzMgZGF5cyBhZ28nIDwxMD4KICQgZ2l0IGxvZyB2Mi40My4uIGN1cnNlcy8gPDExPgpAQCAtMTQ4LDExICsxNDcsMTEgQEAKIC0tLS0tLS0tLS0tLQogJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS8uLi4vdG9ydmFsZHMvbGludXgtMi42IG15Mi42CiAkIGNkIG15Mi42Ci0kIGdpdCBjaGVja291dCAtYiBtaW5lIG1hc3RlciA8MT4KKyQgZ2l0IHN3aXRjaCAtYyBtaW5lIG1hc3RlciA8MT4KICQgZWRpdC9jb21waWxlL3Rlc3Q7IGdpdCBjb21taXQgLWEgLXMgPDI+CiAkIGdpdCBmb3JtYXQtcGF0Y2ggbWFzdGVyIDwzPgogJCBnaXQgc2VuZC1lbWFpbCAtLXRvPSJwZXJzb24gPGVtYWlsQGV4YW1wbGUuY29tPiIgMDAqLnBhdGNoIDw0PgotJCBnaXQgY2hlY2tvdXQgbWFzdGVyIDw1PgorJCBnaXQgc3dpdGNoIG1hc3RlciA8NT4KICQgZ2l0IHB1bGwgPDY+CiAkIGdpdCBsb2cgLXAgT1JJR19IRUFELi4gYXJjaC9pMzg2IGluY2x1ZGUvYXNtLWkzODYgPDc+CiAkIGdpdCBscy1yZW1vdGUgLS1oZWFkcyBodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvLi4uL2pnYXJ6aWsvbGliYXRhLWRldi5naXQgPDg+CkBAIC0xOTQsNyArMTkzLDcgQEAKIHNhdGVsbGl0ZSQgZ2l0IHB1c2ggb3JpZ2luIDw0PgogCiBtb3RoZXJzaGlwJCBjZCBmcm90egotbW90aGVyc2hpcCQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorbW90aGVyc2hpcCQgZ2l0IHN3aXRjaCBtYXN0ZXIKIG1vdGhlcnNoaXAkIGdpdCBtZXJnZSBzYXRlbGxpdGUvbWFzdGVyIDw1PgogLS0tLS0tLS0tLS0tCiArCkBAIC0yMTYsNyArMjE1LDcgQEAKIEJyYW5jaCBvZmYgb2YgYSBzcGVjaWZpYyB0YWcuOjoKICsKIC0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgLWIgcHJpdmF0ZTIuNi4xNCB2Mi42LjE0IDwxPgorJCBnaXQgc3dpdGNoIC1jIHByaXZhdGUyLjYuMTQgdjIuNi4xNCA8MT4KICQgZWRpdC9jb21waWxlL3Rlc3Q7IGdpdCBjb21taXQgLWEKICQgZ2l0IGNoZWNrb3V0IG1hc3RlcgogJCBnaXQgY2hlcnJ5LXBpY2sgdjIuNi4xNC4ucHJpdmF0ZTIuNi4xNCA8Mj4KQEAgLTI3NCwxNCArMjczLDE0IEBACiAmIHMgMiAzIDQgNSAuLyt0by1hcHBseQogJiBzIDcgOCAuLytob2xkLWxpbnVzCiAmIHEKLSQgZ2l0IGNoZWNrb3V0IC1iIHRvcGljL29uZSBtYXN0ZXIKKyQgZ2l0IHN3aXRjaCAtYyB0b3BpYy9vbmUgbWFzdGVyCiAkIGdpdCBhbSAtMyAtaSAtcyAuLyt0by1hcHBseSA8ND4KICQgY29tcGlsZS90ZXN0Ci0kIGdpdCBjaGVja291dCAtYiBob2xkL2xpbnVzICYmIGdpdCBhbSAtMyAtaSAtcyAuLytob2xkLWxpbnVzIDw1PgotJCBnaXQgY2hlY2tvdXQgdG9waWMvb25lICYmIGdpdCByZWJhc2UgbWFzdGVyIDw2PgotJCBnaXQgY2hlY2tvdXQgcHUgJiYgZ2l0IHJlc2V0IC0taGFyZCBuZXh0IDw3PgorJCBnaXQgc3dpdGNoIC1jIGhvbGQvbGludXMgJiYgZ2l0IGFtIC0zIC1pIC1zIC4vK2hvbGQtbGludXMgPDU+CiskIGdpdCBzd2l0Y2ggdG9waWMvb25lICYmIGdpdCByZWJhc2UgbWFzdGVyIDw2PgorJCBnaXQgc3dpdGNoIC1DIHB1IG5leHQgPDc+CiAkIGdpdCBtZXJnZSB0b3BpYy9vbmUgdG9waWMvdHdvICYmIGdpdCBtZXJnZSBob2xkL2xpbnVzIDw4PgotJCBnaXQgY2hlY2tvdXQgbWFpbnQKKyQgZ2l0IHN3aXRjaCBtYWludAogJCBnaXQgY2hlcnJ5LXBpY2sgbWFzdGVyfjQgPDk+CiAkIGNvbXBpbGUvdGVzdAogJCBnaXQgdGFnIC1zIC1tICJHSVQgMC45OS45eCIgdjAuOTkuOXggPDEwPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dAppbmRleCA3ODZlNzc4Li44MmNkNTczIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dApAQCAtMTY1LDEyICsxNjUsMTMgQEAKIHBvc3QtY2hlY2tvdXQKIH5+fn5+fn5+fn5+fn4KIAotVGhpcyBob29rIGlzIGludm9rZWQgd2hlbiBhIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIGlzIHJ1biBhZnRlciBoYXZpbmcgdXBkYXRlZCB0aGUKK1RoaXMgaG9vayBpcyBpbnZva2VkIHdoZW4gYSBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSBvcgorbGlua2dpdDpnaXQtc3dpdGNoWzFdIGlzIHJ1biBhZnRlciBoYXZpbmcgdXBkYXRlZCB0aGUKIHdvcmt0cmVlLiAgVGhlIGhvb2sgaXMgZ2l2ZW4gdGhyZWUgcGFyYW1ldGVyczogdGhlIHJlZiBvZiB0aGUgcHJldmlvdXMgSEVBRCwKIHRoZSByZWYgb2YgdGhlIG5ldyBIRUFEICh3aGljaCBtYXkgb3IgbWF5IG5vdCBoYXZlIGNoYW5nZWQpLCBhbmQgYSBmbGFnCiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNoZWNrb3V0IHdhcyBhIGJyYW5jaCBjaGVja291dCAoY2hhbmdpbmcgYnJhbmNoZXMsCiBmbGFnPTEpIG9yIGEgZmlsZSBjaGVja291dCAocmV0cmlldmluZyBhIGZpbGUgZnJvbSB0aGUgaW5kZXgsIGZsYWc9MCkuCi1UaGlzIGhvb2sgY2Fubm90IGFmZmVjdCB0aGUgb3V0Y29tZSBvZiBgZ2l0IGNoZWNrb3V0YC4KK1RoaXMgaG9vayBjYW5ub3QgYWZmZWN0IHRoZSBvdXRjb21lIG9mIGBnaXQgc3dpdGNoYCBvciBgZ2l0IGNoZWNrb3V0YC4KIAogSXQgaXMgYWxzbyBydW4gYWZ0ZXIgbGlua2dpdDpnaXQtY2xvbmVbMV0sIHVubGVzcyB0aGUgYC0tbm8tY2hlY2tvdXRgIChgLW5gKSBvcHRpb24gaXMKIHVzZWQuIFRoZSBmaXJzdCBwYXJhbWV0ZXIgZ2l2ZW4gdG8gdGhlIGhvb2sgaXMgdGhlIG51bGwtcmVmLCB0aGUgc2Vjb25kIHRoZQpAQCAtNDA2LDcgKzQwNyw4IEBACiBGb3IgZXhhbXBsZSwgdGhlIGhvb2sgY2FuIHNpbXBseSBydW4gYGdpdCByZWFkLXRyZWUgLXUgLW0gSEVBRCAiJDEiYAogaW4gb3JkZXIgdG8gZW11bGF0ZSBgZ2l0IGZldGNoYCB0aGF0IGlzIHJ1biBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24KIHdpdGggYGdpdCBwdXNoYCwgYXMgdGhlIHR3by10cmVlIGZvcm0gb2YgYGdpdCByZWFkLXRyZWUgLXUgLW1gIGlzCi1lc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBgZ2l0IGNoZWNrb3V0YCB0aGF0IHN3aXRjaGVzIGJyYW5jaGVzIHdoaWxlCitlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBgZ2l0IHN3aXRjaGAgb3IgYGdpdCBjaGVja291dGAKK3RoYXQgc3dpdGNoZXMgYnJhbmNoZXMgd2hpbGUKIGtlZXBpbmcgdGhlIGxvY2FsIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0IGRvIG5vdCBpbnRlcmZlcmUKIHdpdGggdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYnJhbmNoZXMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLTIudHh0CmluZGV4IGUwOTc2ZjYuLjhiZGI3ZDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC0yLnR4dApAQCAtMzcwLDEzICszNzAsMTMgQEAKICQgZ2l0IHN0YXR1cwogT24gYnJhbmNoIG1hc3RlcgogQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Ci0gICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogCiAJbmV3IGZpbGU6ICAgY2xvc2luZy50eHQKIAogQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLSAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKIAogCW1vZGlmaWVkOiAgIGZpbGUudHh0CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQKaW5kZXggMjQyZGUzMS4uNTllZjVjZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQKQEAgLTExMCw3ICsxMTAsNyBAQAogT24gYnJhbmNoIG1hc3RlcgogQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CiBZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggJ29yaWdpbi9tYXN0ZXInLgotICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKIAogCW1vZGlmaWVkOiAgIGZpbGUxCiAJbW9kaWZpZWQ6ICAgZmlsZTIKQEAgLTIwNyw3ICsyMDcsNyBAQAogdHlwZQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IGNoZWNrb3V0IGV4cGVyaW1lbnRhbAorJCBnaXQgc3dpdGNoIGV4cGVyaW1lbnRhbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHRvIHN3aXRjaCB0byB0aGUgZXhwZXJpbWVudGFsIGJyYW5jaC4gIE5vdyBlZGl0IGEgZmlsZSwgY29tbWl0IHRoZQpAQCAtMjE2LDcgKzIxNiw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIChlZGl0IGZpbGUpCiAkIGdpdCBjb21taXQgLWEKLSQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorJCBnaXQgc3dpdGNoIG1hc3RlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIENoZWNrIHRoYXQgdGhlIGNoYW5nZSB5b3UgbWFkZSBpcyBubyBsb25nZXIgdmlzaWJsZSwgc2luY2UgaXQgd2FzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHdlYi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHdlYi50eHQKaW5kZXggYzc0MzYwOS4uM2NjOWIwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXR3ZWIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0d2ViLnR4dApAQCAtMjgsOCArMjgsNyBAQAogICByZXZpc2lvbnMgb25lIGF0IGEgdGltZSwgdmlld2luZyB0aGUgaGlzdG9yeSBvZiB0aGUgcmVwb3NpdG9yeS4KICogRmluZGluZyBjb21taXRzIHdoaWNoIGNvbW1pdCBtZXNzYWdlcyBtYXRjaGVzIGdpdmVuIHNlYXJjaCB0ZXJtLgogCi1TZWUgaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWdpdC9naXQuZ2l0O2E9dHJlZTtmPWdpdHdlYltdIG9yCi1odHRwOi8vcmVwby5vci5jei93L2dpdC5naXQvdHJlZS9IRUFEOi9naXR3ZWIvW10gZm9yIGdpdHdlYiBzb3VyY2UgY29kZSwKK1NlZSBodHRwOi8vcmVwby5vci5jei93L2dpdC5naXQvdHJlZS9IRUFEOi9naXR3ZWIvW10gZm9yIGdpdHdlYiBzb3VyY2UgY29kZSwKIGJyb3dzZWQgdXNpbmcgZ2l0d2ViIGl0c2VsZi4KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHdvcmtmbG93cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHdvcmtmbG93cy50eHQKaW5kZXggY2ExMWM3Yi4uYWJjMGRjNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXR3b3JrZmxvd3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0d29ya2Zsb3dzLnR4dApAQCAtMzAxLDggKzMwMSw3IEBACiAuUmV3aW5kIGFuZCByZWJ1aWxkIG5leHQKIFtjYXB0aW9uPSJSZWNpcGU6ICJdCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIGBnaXQgY2hlY2tvdXQgbmV4dGAKLSogYGdpdCByZXNldCAtLWhhcmQgbWFzdGVyYAorKiBgZ2l0IHN3aXRjaCAtQyBuZXh0IG1hc3RlcmAKICogYGdpdCBtZXJnZSBhaS90b3BpY19pbl9uZXh0MWAKICogYGdpdCBtZXJnZSBhaS90b3BpY19pbl9uZXh0MmAKICogLi4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dAppbmRleCA3MWExZmNjLi5iYjEyNTFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQKQEAgLTE4Miw2ICsxODIsMTQgQEAKIAlQcmV0ZW5kIGFzIGlmIGFsbCBvYmplY3RzIG1lbnRpb25lZCBieSByZWZsb2dzIGFyZSBsaXN0ZWQgb24gdGhlCiAJY29tbWFuZCBsaW5lIGFzIGA8Y29tbWl0PmAuCiAKKy0tYWx0ZXJuYXRlLXJlZnM6OgorCVByZXRlbmQgYXMgaWYgYWxsIG9iamVjdHMgbWVudGlvbmVkIGFzIHJlZiB0aXBzIG9mIGFsdGVybmF0ZQorCXJlcG9zaXRvcmllcyB3ZXJlIGxpc3RlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiBBbiBhbHRlcm5hdGUKKwlyZXBvc2l0b3J5IGlzIGFueSByZXBvc2l0b3J5IHdob3NlIG9iamVjdCBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkCisJaW4gYG9iamVjdHMvaW5mby9hbHRlcm5hdGVzYC4gIFRoZSBzZXQgb2YgaW5jbHVkZWQgb2JqZWN0cyBtYXkKKwliZSBtb2RpZmllZCBieSBgY29yZS5hbHRlcm5hdGVSZWZzQ29tbWFuZGAsIGV0Yy4gU2VlCisJbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCiAtLXNpbmdsZS13b3JrdHJlZTo6CiAJQnkgZGVmYXVsdCwgYWxsIHdvcmtpbmcgdHJlZXMgd2lsbCBiZSBleGFtaW5lZCBieSB0aGUKIAlmb2xsb3dpbmcgb3B0aW9ucyB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIChzZWUKQEAgLTcwOCw2ICs3MTYsMTYgQEAKIAlPbmx5IHVzZWZ1bCB3aXRoIGAtLW9iamVjdHNgOyBwcmludCB0aGUgb2JqZWN0IElEcyB0aGF0IGFyZSBub3QKIAlpbiBwYWNrcy4KIAorLS1vYmplY3QtbmFtZXM6OgorCU9ubHkgdXNlZnVsIHdpdGggYC0tb2JqZWN0c2A7IHByaW50IHRoZSBuYW1lcyBvZiB0aGUgb2JqZWN0IElEcworCXRoYXQgYXJlIGZvdW5kLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorCistLW5vLW9iamVjdC1uYW1lczo6CisJT25seSB1c2VmdWwgd2l0aCBgLS1vYmplY3RzYDsgZG9lcyBub3QgcHJpbnQgdGhlIG5hbWVzIG9mIHRoZSBvYmplY3QKKwlJRHMgdGhhdCBhcmUgZm91bmQuIFRoaXMgaW52ZXJ0cyBgLS1vYmplY3QtbmFtZXNgLiBUaGlzIGZsYWcgYWxsb3dzCisJdGhlIG91dHB1dCB0byBiZSBtb3JlIGVhc2lseSBwYXJzZWQgYnkgY29tbWFuZHMgc3VjaCBhcworCWxpbmtnaXQ6Z2l0LWNhdC1maWxlWzFdLgorCiAtLWZpbHRlcj08ZmlsdGVyLXNwZWM+OjoKIAlPbmx5IHVzZWZ1bCB3aXRoIG9uZSBvZiB0aGUgYC0tb2JqZWN0cypgOyBvbWl0cyBvYmplY3RzICh1c3VhbGx5CiAJYmxvYnMpIGZyb20gdGhlIGxpc3Qgb2YgcHJpbnRlZCBvYmplY3RzLiAgVGhlICc8ZmlsdGVyLXNwZWM+JwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0CmluZGV4IDgyYzFlNTcuLjk3Zjk5NWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmV2aXNpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3JldmlzaW9ucy50eHQKQEAgLTExNSw3ICsxMTUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGdpdCBjb25maWcgcHVzaC5kZWZhdWx0IGN1cnJlbnQKICQgZ2l0IGNvbmZpZyByZW1vdGUucHVzaGRlZmF1bHQgbXlmb3JrCi0kIGdpdCBjaGVja291dCAtYiBteWJyYW5jaCBvcmlnaW4vbWFzdGVyCiskIGdpdCBzd2l0Y2ggLWMgbXlicmFuY2ggb3JpZ2luL21hc3RlcgogCiAkIGdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgQHt1cHN0cmVhbX0KIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlcXVlbmNlci50eHQgYi9Eb2N1bWVudGF0aW9uL3NlcXVlbmNlci50eHQKaW5kZXggNWE1N2M0YS4uM2JjZWI1NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zZXF1ZW5jZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2VxdWVuY2VyLnR4dApAQCAtMyw2ICszLDEwIEBACiAJYC5naXQvc2VxdWVuY2VyYC4gIENhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFmdGVyIHJlc29sdmluZwogCWNvbmZsaWN0cyBpbiBhIGZhaWxlZCBjaGVycnktcGljayBvciByZXZlcnQuCiAKKy0tc2tpcDo6CisJU2tpcCB0aGUgY3VycmVudCBjb21taXQgYW5kIGNvbnRpbnVlIHdpdGggdGhlIHJlc3Qgb2YgdGhlCisJc2VxdWVuY2UuCisKIC0tcXVpdDo6CiAJRm9yZ2V0IGFib3V0IHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBwcm9ncmVzcy4gIENhbiBiZSB1c2VkCiAJdG8gY2xlYXIgdGhlIHNlcXVlbmNlciBzdGF0ZSBhZnRlciBhIGZhaWxlZCBjaGVycnktcGljayBvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyYWNlMi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJhY2UyLnR4dAppbmRleCAyM2MzY2M3Li43MWViMDgxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJhY2UyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJhY2UyLnR4dApAQCAtMzUsNyArMzUsNyBAQAogPT09IFRoZSBOb3JtYWwgRm9ybWF0IFRhcmdldAogCiBUaGUgbm9ybWFsIGZvcm1hdCB0YXJnZXQgaXMgYSB0cmFkaXRpb24gcHJpbnRmIGZvcm1hdCBhbmQgc2ltaWxhcgotdG8gR0lUX1RSQUNFIGZvcm1hdC4gIFRoaXMgZm9ybWF0IGlzIGVuYWJsZWQgd2l0aCB0aGUgYEdJVF9UUmAKK3RvIEdJVF9UUkFDRSBmb3JtYXQuICBUaGlzIGZvcm1hdCBpcyBlbmFibGVkIHdpdGggdGhlIGBHSVRfVFJBQ0UyYAogZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgdGhlIGB0cmFjZTIubm9ybWFsVGFyZ2V0YCBzeXN0ZW0gb3IgZ2xvYmFsCiBjb25maWcgc2V0dGluZy4KIApAQCAtNjY4LDcgKzY2OCw3IEBACiAJImV2ZW50Ijoic2lnbmFsIiwKIAkuLi4KIAkidF9hYnMiOjAuMDAxMjI3LCAgIyBlbGFwc2VkIHRpbWUgaW4gc2Vjb25kcwotCSJzaWduYWwiOjEzICAgICAgICAjIFNJR1RFUk0sIFNJR0lOVCwgZXRjLgorCSJzaWdubyI6MTMgICAgICAgICAjIFNJR1RFUk0sIFNJR0lOVCwgZXRjLgogfQogLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2NvbW1pdC1ncmFwaC1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLWZvcm1hdC50eHQKaW5kZXggMTY0NTJhMC4uYTRmMTc0NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLWZvcm1hdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLWZvcm1hdC50eHQKQEAgLTQ0LDggKzQ0LDkgQEAKIAogICAxLWJ5dGUgbnVtYmVyIChDKSBvZiAiY2h1bmtzIgogCi0gIDEtYnl0ZSAocmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZSkKLSAgICAgQ3VycmVudCBjbGllbnRzIHNob3VsZCBpZ25vcmUgdGhpcyB2YWx1ZS4KKyAgMS1ieXRlIG51bWJlciAoQikgb2YgYmFzZSBjb21taXQtZ3JhcGhzCisgICAgICBXZSBpbmZlciB0aGUgbGVuZ3RoIChIKkIpIG9mIHRoZSBCYXNlIEdyYXBocyBjaHVuaworICAgICAgZnJvbSB0aGlzIHZhbHVlLgogCiBDSFVOSyBMT09LVVA6CiAKQEAgLTkyLDYgKzkzLDEyIEBACiAgICAgICBwb3NpdGlvbnMgZm9yIHRoZSBwYXJlbnRzIHVudGlsIHJlYWNoaW5nIGEgdmFsdWUgd2l0aCB0aGUgbW9zdC1zaWduaWZpY2FudAogICAgICAgYml0IG9uLiBUaGUgb3RoZXIgYml0cyBjb3JyZXNwb25kIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBwYXJlbnQuCiAKKyAgQmFzZSBHcmFwaHMgTGlzdCAoSUQ6IHsnQicsICdBJywgJ1MnLCAnRSd9KSBbT3B0aW9uYWxdCisgICAgICBUaGlzIGxpc3Qgb2YgSC1ieXRlIGhhc2hlcyBkZXNjcmliZSBhIHNldCBvZiBCIGNvbW1pdC1ncmFwaCBmaWxlcyB0aGF0CisgICAgICBmb3JtIGEgY29tbWl0LWdyYXBoIGNoYWluLiBUaGUgZ3JhcGggcG9zaXRpb24gZm9yIHRoZSBpdGggY29tbWl0IGluIHRoaXMKKyAgICAgIGZpbGUncyBPSUQgTG9va3VwIGNodW5rIGlzIGVxdWFsIHRvIGkgcGx1cyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaW4gYWxsCisgICAgICBiYXNlIGdyYXBocy4gIElmIEIgaXMgbm9uLXplcm8sIHRoaXMgY2h1bmsgbXVzdCBleGlzdC4KKwogVFJBSUxFUjoKIAogCUgtYnl0ZSBIQVNILWNoZWNrc3VtIG9mIGFsbCBvZiB0aGUgYWJvdmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9jb21taXQtZ3JhcGgudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLnR4dAppbmRleCA3ODA1YjA5Li43MjlmYmNiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9jb21taXQtZ3JhcGgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2NvbW1pdC1ncmFwaC50eHQKQEAgLTEyNywyMiArMTI3LDE5NiBAQAogICBoZWxwZnVsIGZvciB0aGVzZSBjbG9uZXMsIGFueXdheS4gVGhlIGNvbW1pdC1ncmFwaCB3aWxsIG5vdCBiZSByZWFkIG9yCiAgIHdyaXR0ZW4gd2hlbiBzaGFsbG93IGNvbW1pdHMgYXJlIHByZXNlbnQuCiAKLUZ1dHVyZSBXb3JrCi0tLS0tLS0tLS0tLQorQ29tbWl0IEdyYXBocyBDaGFpbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS0gQWZ0ZXIgY29tcHV0aW5nIGFuZCBzdG9yaW5nIGdlbmVyYXRpb24gbnVtYmVycywgd2UgbXVzdCBtYWtlIGdyYXBoCi0gIHdhbGtzIGF3YXJlIG9mIGdlbmVyYXRpb24gbnVtYmVycyB0byBnYWluIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0cyB0aGV5Ci0gIGVuYWJsZS4gVGhpcyB3aWxsIG1vc3RseSBiZSBhY2NvbXBsaXNoZWQgYnkgc3dhcHBpbmcgYSBjb21taXQtZGF0ZS1vcmRlcmVkCi0gIHByaW9yaXR5IHF1ZXVlIHdpdGggb25lIG9yZGVyZWQgYnkgZ2VuZXJhdGlvbiBudW1iZXIuIFRoZSBmb2xsb3dpbmcKLSAgb3BlcmF0aW9ucyBhcmUgaW1wb3J0YW50IGNhbmRpZGF0ZXM6CitUeXBpY2FsbHksIHJlcG9zIGdyb3cgd2l0aCBuZWFyLWNvbnN0YW50IHZlbG9jaXR5IChjb21taXRzIHBlciBkYXkpLiBPdmVyIHRpbWUsCit0aGUgbnVtYmVyIG9mIGNvbW1pdHMgYWRkZWQgYnkgYSBmZXRjaCBvcGVyYXRpb24gaXMgbXVjaCBzbWFsbGVyIHRoYW4gdGhlCitudW1iZXIgb2YgY29tbWl0cyBpbiB0aGUgZnVsbCBoaXN0b3J5LiBCeSBjcmVhdGluZyBhICJjaGFpbiIgb2YgY29tbWl0LWdyYXBocywKK3dlIGVuYWJsZSBmYXN0IHdyaXRlcyBvZiBuZXcgY29tbWl0IGRhdGEgd2l0aG91dCByZXdyaXRpbmcgdGhlIGVudGlyZSBjb21taXQKK2hpc3RvcnkgLS0gYXQgbGVhc3QsIG1vc3Qgb2YgdGhlIHRpbWUuCiAKLSAgICAtICdsb2cgLS10b3BvLW9yZGVyJwotICAgIC0gJ3RhZyAtLW1lcmdlZCcKKyMjIEZpbGUgTGF5b3V0CiAKLS0gQSBzZXJ2ZXIgY291bGQgcHJvdmlkZSBhIGNvbW1pdC1ncmFwaCBmaWxlIGFzIHBhcnQgb2YgdGhlIG5ldHdvcmsgcHJvdG9jb2wKLSAgdG8gYXZvaWQgZXh0cmEgY2FsY3VsYXRpb25zIGJ5IGNsaWVudHMuIFRoaXMgZmVhdHVyZSBpcyBvbmx5IG9mIGJlbmVmaXQgaWYKLSAgdGhlIHVzZXIgaXMgd2lsbGluZyB0byB0cnVzdCB0aGUgZmlsZSwgYmVjYXVzZSB2ZXJpZnlpbmcgdGhlIGZpbGUgaXMgY29ycmVjdAotICBpcyBhcyBoYXJkIGFzIGNvbXB1dGluZyBpdCBmcm9tIHNjcmF0Y2guCitBIGNvbW1pdC1ncmFwaCBjaGFpbiB1c2VzIG11bHRpcGxlIGZpbGVzLCBhbmQgd2UgdXNlIGEgZml4ZWQgbmFtaW5nIGNvbnZlbnRpb24KK3RvIG9yZ2FuaXplIHRoZXNlIGZpbGVzLiBFYWNoIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBhIG5hbWUKK2AkT0JKRElSL2luZm8vY29tbWl0LWdyYXBocy9ncmFwaC17aGFzaH0uZ3JhcGhgIHdoZXJlIGB7aGFzaH1gIGlzIHRoZSBoZXgtCit2YWx1ZWQgaGFzaCBzdG9yZWQgaW4gdGhlIGZvb3RlciBvZiB0aGF0IGZpbGUgKHdoaWNoIGlzIGEgaGFzaCBvZiB0aGUgZmlsZSdzCitjb250ZW50cyBiZWZvcmUgdGhhdCBoYXNoKS4gRm9yIGEgY2hhaW4gb2YgY29tbWl0LWdyYXBoIGZpbGVzLCBhIHBsYWluLXRleHQKK2ZpbGUgYXQgYCRPQkpESVIvaW5mby9jb21taXQtZ3JhcGhzL2NvbW1pdC1ncmFwaC1jaGFpbmAgY29udGFpbnMgdGhlCitoYXNoZXMgZm9yIHRoZSBmaWxlcyBpbiBvcmRlciBmcm9tICJsb3dlc3QiIHRvICJoaWdoZXN0Ii4KKworRm9yIGV4YW1wbGUsIGlmIHRoZSBgY29tbWl0LWdyYXBoLWNoYWluYCBmaWxlIGNvbnRhaW5zIHRoZSBsaW5lcworCitgYGAKKwl7aGFzaDB9CisJe2hhc2gxfQorCXtoYXNoMn0KK2BgYAorCit0aGVuIHRoZSBjb21taXQtZ3JhcGggY2hhaW4gbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGRpYWdyYW06CisKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgZ3JhcGgte2hhc2gyfS5ncmFwaCAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgIGdyYXBoLXtoYXNoMX0uZ3JhcGggIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICBncmFwaC17aGFzaDB9LmdyYXBoICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitMZXQgWDAgYmUgdGhlIG51bWJlciBvZiBjb21taXRzIGluIGBncmFwaC17aGFzaDB9LmdyYXBoYCwgWDEgYmUgdGhlIG51bWJlciBvZgorY29tbWl0cyBpbiBgZ3JhcGgte2hhc2gxfS5ncmFwaGAsIGFuZCBYMiBiZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaW4KK2BncmFwaC17aGFzaDJ9LmdyYXBoYC4gSWYgYSBjb21taXQgYXBwZWFycyBpbiBwb3NpdGlvbiBpIGluIGBncmFwaC17aGFzaDJ9LmdyYXBoYCwKK3RoZW4gd2UgaW50ZXJwcmV0IHRoaXMgYXMgYmVpbmcgdGhlIGNvbW1pdCBpbiBwb3NpdGlvbiAoWDAgKyBYMSArIGkpLCBhbmQgdGhhdAord2lsbCBiZSB1c2VkIGFzIGl0cyAiZ3JhcGggcG9zaXRpb24iLiBUaGUgY29tbWl0cyBpbiBgZ3JhcGgte2hhc2gyfS5ncmFwaGAgdXNlIHRoZXNlCitwb3NpdGlvbnMgdG8gcmVmZXIgdG8gdGhlaXIgcGFyZW50cywgd2hpY2ggbWF5IGJlIGluIGBncmFwaC17aGFzaDF9LmdyYXBoYCBvcgorYGdyYXBoLXtoYXNoMH0uZ3JhcGhgLiBXZSBjYW4gbmF2aWdhdGUgdG8gYW4gYXJiaXRyYXJ5IGNvbW1pdCBpbiBwb3NpdGlvbiBqIGJ5IGNoZWNraW5nCitpdHMgY29udGFpbm1lbnQgaW4gdGhlIGludGVydmFscyBbMCwgWDApLCBbWDAsIFgwICsgWDEpLCBbWDAgKyBYMSwgWDAgKyBYMSArCitYMikuCisKK0VhY2ggY29tbWl0LWdyYXBoIGZpbGUgKGV4Y2VwdCB0aGUgYmFzZSwgYGdyYXBoLXtoYXNoMH0uZ3JhcGhgKSBjb250YWlucyBkYXRhCitzcGVjaWZ5aW5nIHRoZSBoYXNoZXMgb2YgYWxsIGZpbGVzIGluIHRoZSBsb3dlciBsYXllcnMuIEluIHRoZSBhYm92ZSBleGFtcGxlLAorYGdyYXBoLXtoYXNoMX0uZ3JhcGhgIGNvbnRhaW5zIGB7aGFzaDB9YCB3aGlsZSBgZ3JhcGgte2hhc2gyfS5ncmFwaGAgY29udGFpbnMKK2B7aGFzaDB9YCBhbmQgYHtoYXNoMX1gLgorCisjIyBNZXJnaW5nIGNvbW1pdC1ncmFwaCBmaWxlcworCitJZiB3ZSBvbmx5IGFkZGVkIGEgbmV3IGNvbW1pdC1ncmFwaCBmaWxlIG9uIGV2ZXJ5IHdyaXRlLCB3ZSB3b3VsZCBydW4gaW50byBhCitsaW5lYXIgc2VhcmNoIHByb2JsZW0gdGhyb3VnaCBtYW55IGNvbW1pdC1ncmFwaCBmaWxlcy4gIEluc3RlYWQsIHdlIHVzZSBhIG1lcmdlCitzdHJhdGVneSB0byBkZWNpZGUgd2hlbiB0aGUgc3RhY2sgc2hvdWxkIGNvbGxhcHNlIHNvbWUgbnVtYmVyIG9mIGxldmVscy4KKworVGhlIGRpYWdyYW0gYmVsb3cgc2hvd3Mgc3VjaCBhIGNvbGxhcHNlLiBBcyBhIHNldCBvZiBuZXcgY29tbWl0cyBhcmUgYWRkZWQsIGl0CitpcyBkZXRlcm1pbmVkIGJ5IHRoZSBtZXJnZSBzdHJhdGVneSB0aGF0IHRoZSBmaWxlcyBzaG91bGQgY29sbGFwc2UgdG8KK2BncmFwaC17aGFzaDF9YC4gVGh1cywgdGhlIG5ldyBjb21taXRzLCB0aGUgY29tbWl0cyBpbiBgZ3JhcGgte2hhc2gyfWAgYW5kCit0aGUgY29tbWl0cyBpbiBgZ3JhcGgte2hhc2gxfWAgc2hvdWxkIGJlIGNvbWJpbmVkIGludG8gYSBuZXcgYGdyYXBoLXtoYXNoM31gCitmaWxlLgorCisJCQkgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJCSAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorCQkJICAgIHwgICAgKG5ldyBjb21taXRzKSAgICB8CisJCQkgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKwkJCSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQkJICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8ICBncmFwaC17aGFzaDJ9IHwtPnwgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgfAorIHwgIGdyYXBoLXtoYXNoMX0gfC0+fCAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICB8ICAgICAgICAgICAgICAgICAgdG1wX2dyYXBoWFhYCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgIGdyYXBoLXtoYXNoMH0gfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworRHVyaW5nIHRoaXMgcHJvY2VzcywgdGhlIGNvbW1pdHMgdG8gd3JpdGUgYXJlIGNvbWJpbmVkLCBzb3J0ZWQgYW5kIHdlIHdyaXRlIHRoZQorY29udGVudHMgdG8gYSB0ZW1wb3JhcnkgZmlsZSwgYWxsIHdoaWxlIGhvbGRpbmcgYSBgY29tbWl0LWdyYXBoLWNoYWluLmxvY2tgCitsb2NrLWZpbGUuICBXaGVuIHRoZSBmaWxlIGlzIGZsdXNoZWQsIHdlIHJlbmFtZSBpdCB0byBgZ3JhcGgte2hhc2gzfWAKK2FjY29yZGluZyB0byB0aGUgY29tcHV0ZWQgYHtoYXNoM31gLiBGaW5hbGx5LCB3ZSB3cml0ZSB0aGUgbmV3IGNoYWluIGRhdGEgdG8KK2Bjb21taXQtZ3JhcGgtY2hhaW4ubG9ja2A6CisKK2BgYAorCXtoYXNoM30KKwl7aGFzaDB9CitgYGAKKworV2UgdGhlbiBjbG9zZSB0aGUgbG9jay1maWxlLgorCisjIyBNZXJnZSBTdHJhdGVneQorCitXaGVuIHdyaXRpbmcgYSBzZXQgb2YgY29tbWl0cyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgY29tbWl0LWdyYXBoIHN0YWNrIG9mCitoZWlnaHQgTiwgd2UgZGVmYXVsdCB0byBjcmVhdGluZyBhIG5ldyBmaWxlIGF0IGxldmVsIE4gKyAxLiBXZSB0aGVuIGRlY2lkZSB0bworbWVyZ2Ugd2l0aCB0aGUgTnRoIGxldmVsIGlmIG9uZSBvZiB0d28gY29uZGl0aW9ucyBob2xkOgorCisgIDEuIGAtLXNpemUtbXVsdGlwbGU9PFg+YCBpcyBzcGVjaWZpZWQgb3IgWCA9IDIsIGFuZCB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaW4KKyAgICAgbGV2ZWwgTiBpcyBsZXNzIHRoYW4gWCB0aW1lcyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaW4gbGV2ZWwgTiArIDEuCisKKyAgMi4gYC0tbWF4LWNvbW1pdHM9PEM+YCBpcyBzcGVjaWZpZWQgd2l0aCBub24temVybyBDIGFuZCB0aGUgbnVtYmVyIG9mIGNvbW1pdHMKKyAgICAgaW4gbGV2ZWwgTiArIDEgaXMgbW9yZSB0aGFuIEMgY29tbWl0cy4KKworVGhpcyBkZWNpc2lvbiBjYXNjYWRlcyBkb3duIHRoZSBsZXZlbHM6IHdoZW4gd2UgbWVyZ2UgYSBsZXZlbCB3ZSBjcmVhdGUgYSBuZXcKK3NldCBvZiBjb21taXRzIHRoYXQgdGhlbiBjb21wYXJlcyB0byB0aGUgbmV4dCBsZXZlbC4KKworVGhlIGZpcnN0IGNvbmRpdGlvbiBib3VuZHMgdGhlIG51bWJlciBvZiBsZXZlbHMgdG8gYmUgbG9nYXJpdGhtaWMgaW4gdGhlIHRvdGFsCitudW1iZXIgb2YgY29tbWl0cy4gIFRoZSBzZWNvbmQgY29uZGl0aW9uIGJvdW5kcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbW1pdHMgaW4KK2EgYGdyYXBoLXtoYXNoTn1gIGZpbGUgYW5kIG5vdCBpbiB0aGUgYGNvbW1pdC1ncmFwaGAgZmlsZSwgcHJldmVudGluZworc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaXNzdWVzIHdoZW4gdGhlIHN0YWNrIG1lcmdlcyBhbmQgYW5vdGhlciBwcm9jZXNzIG9ubHkKK3BhcnRpYWxseSByZWFkcyB0aGUgcHJldmlvdXMgc3RhY2suCisKK1RoZSBtZXJnZSBzdHJhdGVneSB2YWx1ZXMgKDIgZm9yIHRoZSBzaXplIG11bHRpcGxlLCA2NCwwMDAgZm9yIHRoZSBtYXhpbXVtCitudW1iZXIgb2YgY29tbWl0cykgY291bGQgYmUgZXh0cmFjdGVkIGludG8gY29uZmlnIHNldHRpbmdzIGZvciBmdWxsCitmbGV4aWJpbGl0eS4KKworIyMgRGVsZXRpbmcgZ3JhcGgte2hhc2h9IGZpbGVzCisKK0FmdGVyIGEgbmV3IHRpcCBmaWxlIGlzIHdyaXR0ZW4sIHNvbWUgYGdyYXBoLXtoYXNofWAgZmlsZXMgbWF5IG5vIGxvbmdlcgorYmUgcGFydCBvZiBhIGNoYWluLiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtb3ZlIHRoZXNlIGZpbGVzIGZyb20gZGlzaywgZXZlbnR1YWxseS4KK1RoZSBtYWluIHJlYXNvbiB0byBkZWxheSByZW1vdmFsIGlzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGNvdWxkIHJlYWQgdGhlCitgY29tbWl0LWdyYXBoLWNoYWluYCBmaWxlIGJlZm9yZSBpdCBpcyByZXdyaXR0ZW4sIGJ1dCB0aGVuIGxvb2sgZm9yIHRoZQorYGdyYXBoLXtoYXNofWAgZmlsZXMgYWZ0ZXIgdGhleSBhcmUgZGVsZXRlZC4KKworVG8gYWxsb3cgaG9sZGluZyBvbGQgc3BsaXQgY29tbWl0LWdyYXBocyBmb3IgYSB3aGlsZSBhZnRlciB0aGV5IGFyZSB1bnJlZmVyZW5jZWQsCit3ZSB1cGRhdGUgdGhlIG1vZGlmaWVkIHRpbWVzIG9mIHRoZSBmaWxlcyB3aGVuIHRoZXkgYmVjb21lIHVucmVmZXJlbmNlZC4gVGhlbiwKK3dlIHNjYW4gdGhlIGAkT0JKRElSL2luZm8vY29tbWl0LWdyYXBocy9gIGRpcmVjdG9yeSBmb3IgYGdyYXBoLXtoYXNofWAKK2ZpbGVzIHdob3NlIG1vZGlmaWVkIHRpbWVzIGFyZSBvbGRlciB0aGFuIGEgZ2l2ZW4gZXhwaXJ5IHdpbmRvdy4gVGhpcyB3aW5kb3cKK2RlZmF1bHRzIHRvIHplcm8sIGJ1dCBjYW4gYmUgY2hhbmdlZCB1c2luZyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIG9yIGEgY29uZmlnCitzZXR0aW5nLgorCisjIyBDaGFpbnMgYWNyb3NzIG11bHRpcGxlIG9iamVjdCBkaXJlY3RvcmllcworCitJbiBhIHJlcG8gd2l0aCBhbHRlcm5hdGVzLCB3ZSBsb29rIGZvciB0aGUgYGNvbW1pdC1ncmFwaC1jaGFpbmAgZmlsZSBzdGFydGluZworaW4gdGhlIGxvY2FsIG9iamVjdCBkaXJlY3RvcnkgYW5kIHRoZW4gaW4gZWFjaCBhbHRlcm5hdGUuIFRoZSBmaXJzdCBmaWxlIHRoYXQKK2V4aXN0cyBkZWZpbmVzIG91ciBjaGFpbi4gQXMgd2UgbG9vayBmb3IgdGhlIGBncmFwaC17aGFzaH1gIGZpbGVzIGZvcgorZWFjaCBge2hhc2h9YCBpbiB0aGUgY2hhaW4gZmlsZSwgd2UgZm9sbG93IHRoZSBzYW1lIHBhdHRlcm4gZm9yIHRoZSBob3N0CitkaXJlY3Rvcmllcy4KKworVGhpcyBhbGxvd3MgY29tbWl0LWdyYXBocyB0byBiZSBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgZm9ya3MgaW4gYSBmb3JrIG5ldHdvcmsuCitUaGUgdHlwaWNhbCBjYXNlIGlzIGEgbGFyZ2UgImJhc2UiIHJlcG8gd2l0aCBtYW55IHNtYWxsZXIgZm9ya3MuCisKK0FzIHRoZSBiYXNlIHJlcG8gYWR2YW5jZXMsIGl0IHdpbGwgbGlrZWx5IHVwZGF0ZSBhbmQgbWVyZ2UgaXRzIGNvbW1pdC1ncmFwaAorY2hhaW4gbW9yZSBmcmVxdWVudGx5IHRoYW4gdGhlIGZvcmtzLiBJZiBhIGZvcmsgdXBkYXRlcyB0aGVpciBjb21taXQtZ3JhcGggYWZ0ZXIKK3RoZSBiYXNlIHJlcG8sIHRoZW4gaXQgc2hvdWxkICJyZXBhcmVudCIgdGhlIGNvbW1pdC1ncmFwaCBjaGFpbiBvbnRvIHRoZSBuZXcKK2NoYWluIGluIHRoZSBiYXNlIHJlcG8uIFdoZW4gcmVhZGluZyBlYWNoIGBncmFwaC17aGFzaH1gIGZpbGUsIHdlIHRyYWNrCit0aGUgb2JqZWN0IGRpcmVjdG9yeSBjb250YWluaW5nIGl0LiBEdXJpbmcgYSB3cml0ZSBvZiBhIG5ldyBjb21taXQtZ3JhcGggZmlsZSwKK3dlIGNoZWNrIGZvciBhbnkgY2hhbmdlcyBpbiB0aGUgc291cmNlIG9iamVjdCBkaXJlY3RvcnkgYW5kIHJlYWQgdGhlCitgY29tbWl0LWdyYXBoLWNoYWluYCBmaWxlIGZvciB0aGF0IHNvdXJjZSBhbmQgY3JlYXRlIGEgbmV3IGZpbGUgYmFzZWQgb24gdGhvc2UKK2ZpbGVzLiBEdXJpbmcgdGhpcyAicmVwYXJlbnQiIG9wZXJhdGlvbiwgd2UgbmVjZXNzYXJpbHkgbmVlZCB0byBjb2xsYXBzZSBhbGwKK2xldmVscyBpbiB0aGUgZm9yaywgYXMgYWxsIG9mIHRoZSBmaWxlcyBhcmUgaW52YWxpZCBhZ2FpbnN0IHRoZSBuZXcgYmFzZSBmaWxlLgorCitJdCBpcyBjcnVjaWFsIHRvIGJlIGNhcmVmdWwgd2hlbiBjbGVhbmluZyB1cCAidW5yZWZlcmVuY2VkIiBgZ3JhcGgte2hhc2h9LmdyYXBoYAorZmlsZXMgaW4gdGhpcyBzY2VuYXJpby4gSXQgZmFsbHMgdG8gdGhlIHVzZXIgdG8gZGVmaW5lIHRoZSBwcm9wZXIgc2V0dGluZ3MgZm9yCit0aGVpciBjdXN0b20gZW52aXJvbm1lbnQ6CisKKyAxLiBXaGVuIG1lcmdpbmcgbGV2ZWxzIGluIHRoZSBiYXNlIHJlcG8sIHRoZSB1bnJlZmVyZW5jZWQgZmlsZXMgbWF5IHN0aWxsIGJlCisgICAgcmVmZXJlbmNlZCBieSBjaGFpbnMgZnJvbSBmb3JrIHJlcG9zLgorCisgMi4gVGhlIGV4cGlyeSB0aW1lIHNob3VsZCBiZSBzZXQgdG8gYSBsZW5ndGggb2YgdGltZSBzdWNoIHRoYXQgZXZlcnkgZm9yayBoYXMKKyAgICB0aW1lIHRvIHJlY29tcHV0ZSB0aGVpciBjb21taXQtZ3JhcGggY2hhaW4gdG8gInJlcGFyZW50IiBvbnRvIHRoZSBuZXcgYmFzZQorICAgIGZpbGUocykuCisKKyAzLiBJZiB0aGUgY29tbWl0LWdyYXBoIGNoYWluIGlzIHVwZGF0ZWQgaW4gdGhlIGJhc2UsIHRoZSBmb3JrIHdpbGwgbm90IGhhdmUKKyAgICBhY2Nlc3MgdG8gdGhlIG5ldyBjaGFpbiB1bnRpbCBpdHMgY2hhaW4gaXMgdXBkYXRlZCB0byByZWZlcmVuY2UgdGhvc2UgZmlsZXMuCisgICAgKFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlIFs1XS4pCiAKIFJlbGF0ZWQgTGlua3MKIC0tLS0tLS0tLS0tLS0KQEAgLTE3MCwzICszNDQsNyBAQAogCiBbNF0gaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC8yMDE4MDEwODE1NDgyMi41NDgyOS0xLWdpdEBqZWZmaG9zdGV0bGVyLmNvbS9ULyN1CiAgICAgQSBwYXRjaCB0byByZW1vdmUgdGhlIGFoZWFkLWJlaGluZCBjYWxjdWxhdGlvbiBmcm9tICdzdGF0dXMnLgorCitbNV0gaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC9mMjdkYjI4MS1hYmFkLTUwNDMtNmQ3MS1jYmIwODNiMWM4NzdAZ21haWwuY29tLworICAgIEEgZGlzY3Vzc2lvbiBvZiBhICJ0d28tZGltZW5zaW9uYWwgZ3JhcGggcG9zaXRpb24iIHRoYXQgY2FuIGFsbG93IHJlYWRpbmcKKyAgICBtdWx0aXBsZSBjb21taXQtZ3JhcGggY2hhaW5zIGF0IHRoZSBzYW1lIHRpbWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CmluZGV4IGVmZjc4OTAuLjhiY2U3NWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CkBAIC0xMjIsMTAgKzEyMiwxMCBAQAogd2hpbGUgaGVhZHMgYXJlIGV4cGVjdGVkIHRvIGFkdmFuY2UgYXMgZGV2ZWxvcG1lbnQgcHJvZ3Jlc3Nlcy4KIAogQ3JlYXRlIGEgbmV3IGJyYW5jaCBoZWFkIHBvaW50aW5nIHRvIG9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhbmQgY2hlY2sgaXQKLW91dCB1c2luZyBsaW5rZ2l0OmdpdC1jaGVja291dFsxXToKK291dCB1c2luZyBsaW5rZ2l0OmdpdC1zd2l0Y2hbMV06CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgLWIgbmV3IHYyLjYuMTMKKyQgZ2l0IHN3aXRjaCAtYyBuZXcgdjIuNi4xMwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSB3b3JraW5nIGRpcmVjdG9yeSB0aGVuIHJlZmxlY3RzIHRoZSBjb250ZW50cyB0aGF0IHRoZSBwcm9qZWN0IGhhZApAQCAtMjgyLDEwICsyODIsMTAgQEAKIAl0aGlzIGNvbW1hbmQgd2lsbCBmYWlsIHdpdGggYSB3YXJuaW5nLgogYGdpdCBicmFuY2ggLUQgPGJyYW5jaD5gOjoKIAlkZWxldGUgdGhlIGJyYW5jaCBgPGJyYW5jaD5gIGlycmVzcGVjdGl2ZSBvZiBpdHMgbWVyZ2VkIHN0YXR1cy4KLWBnaXQgY2hlY2tvdXQgPGJyYW5jaD5gOjoKK2BnaXQgc3dpdGNoIDxicmFuY2g+YDo6CiAJbWFrZSB0aGUgY3VycmVudCBicmFuY2ggYDxicmFuY2g+YCwgdXBkYXRpbmcgdGhlIHdvcmtpbmcKIAlkaXJlY3RvcnkgdG8gcmVmbGVjdCB0aGUgdmVyc2lvbiByZWZlcmVuY2VkIGJ5IGA8YnJhbmNoPmAuCi1gZ2l0IGNoZWNrb3V0IC1iIDxuZXc+IDxzdGFydC1wb2ludD5gOjoKK2BnaXQgc3dpdGNoIC1jIDxuZXc+IDxzdGFydC1wb2ludD5gOjoKIAljcmVhdGUgYSBuZXcgYnJhbmNoIGA8bmV3PmAgcmVmZXJlbmNpbmcgYDxzdGFydC1wb2ludD5gLCBhbmQKIAljaGVjayBpdCBvdXQuCiAKQEAgLTMwMiwyMiArMzAyLDIyIEBACiBFeGFtaW5pbmcgYW4gb2xkIHZlcnNpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBicmFuY2gKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgYGdpdCBjaGVja291dGAgY29tbWFuZCBub3JtYWxseSBleHBlY3RzIGEgYnJhbmNoIGhlYWQsIGJ1dCB3aWxsIGFsc28KLWFjY2VwdCBhbiBhcmJpdHJhcnkgY29tbWl0OyBmb3IgZXhhbXBsZSwgeW91IGNhbiBjaGVjayBvdXQgdGhlIGNvbW1pdAotcmVmZXJlbmNlZCBieSBhIHRhZzoKK1RoZSBgZ2l0IHN3aXRjaGAgY29tbWFuZCBub3JtYWxseSBleHBlY3RzIGEgYnJhbmNoIGhlYWQsIGJ1dCB3aWxsIGFsc28KK2FjY2VwdCBhbiBhcmJpdHJhcnkgY29tbWl0IHdoZW4gaW52b2tlZCB3aXRoIC0tZGV0YWNoOyBmb3IgZXhhbXBsZSwKK3lvdSBjYW4gY2hlY2sgb3V0IHRoZSBjb21taXQgcmVmZXJlbmNlZCBieSBhIHRhZzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBjaGVja291dCB2Mi42LjE3CiskIGdpdCBzd2l0Y2ggLS1kZXRhY2ggdjIuNi4xNwogTm90ZTogY2hlY2tpbmcgb3V0ICd2Mi42LjE3Jy4KIAogWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsCiBjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzCi1zdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgcGVyZm9ybWluZyBhbm90aGVyIGNoZWNrb3V0Lgorc3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHBlcmZvcm1pbmcgYW5vdGhlciBzd2l0Y2guCiAKIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heQotZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZToKK2RvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kIGFnYWluLiBFeGFtcGxlOgogCi0gIGdpdCBjaGVja291dCAtYiBuZXdfYnJhbmNoX25hbWUKKyAgZ2l0IHN3aXRjaCAtYyBuZXdfYnJhbmNoX25hbWUKIAogSEVBRCBpcyBub3cgYXQgNDI3YWJmYSBMaW51eCB2Mi42LjE3CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM3Myw3ICszNzMsNyBAQAogb24gYSBicmFuY2ggb2YgeW91ciBvd24sIGp1c3QgYXMgeW91IHdvdWxkIGZvciBhIHRhZzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBjaGVja291dCAtYiBteS10b2RvLWNvcHkgb3JpZ2luL3RvZG8KKyQgZ2l0IHN3aXRjaCAtYyBteS10b2RvLWNvcHkgb3JpZ2luL3RvZG8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBZb3UgY2FuIGFsc28gY2hlY2sgb3V0IGBvcmlnaW4vdG9kb2AgZGlyZWN0bHkgdG8gZXhhbWluZSBpdCBvcgpAQCAtMTQwOCw3ICsxNDA4LDcgQEAKIGF3YXksIHlvdSBjYW4gYWx3YXlzIHJldHVybiB0byB0aGUgcHJlLW1lcmdlIHN0YXRlIHdpdGgKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUQKKyQgZ2l0IG1lcmdlIC0tYWJvcnQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogT3IsIGlmIHlvdSd2ZSBhbHJlYWR5IGNvbW1pdHRlZCB0aGUgbWVyZ2UgdGhhdCB5b3Ugd2FudCB0byB0aHJvdyBhd2F5LApAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAKIHN0YXRlIHdpdGgKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUQKKyQgZ2l0IHJlc3RvcmUgLS1zdGFnZWQgLS13b3JrdHJlZSA6LwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJZiB5b3UgbWFrZSBhIGNvbW1pdCB0aGF0IHlvdSBsYXRlciB3aXNoIHlvdSBoYWRuJ3QsIHRoZXJlIGFyZSB0d28KQEAgLTE1MjMsMTIgKzE1MjMsMTAgQEAKIAogSW4gdGhlIHByb2Nlc3Mgb2YgdW5kb2luZyBhIHByZXZpb3VzIGJhZCBjaGFuZ2UsIHlvdSBtYXkgZmluZCBpdAogdXNlZnVsIHRvIGNoZWNrIG91dCBhbiBvbGRlciB2ZXJzaW9uIG9mIGEgcGFydGljdWxhciBmaWxlIHVzaW5nCi1saW5rZ2l0OmdpdC1jaGVja291dFsxXS4gIFdlJ3ZlIHVzZWQgYGdpdCBjaGVja291dGAgYmVmb3JlIHRvIHN3aXRjaAotYnJhbmNoZXMsIGJ1dCBpdCBoYXMgcXVpdGUgZGlmZmVyZW50IGJlaGF2aW9yIGlmIGl0IGlzIGdpdmVuIGEgcGF0aAotbmFtZTogdGhlIGNvbW1hbmQKK2xpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0uIFRoZSBjb21tYW5kCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IGNoZWNrb3V0IEhFQUReIHBhdGgvdG8vZmlsZQorJCBnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEXiBwYXRoL3RvL2ZpbGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogcmVwbGFjZXMgcGF0aC90by9maWxlIGJ5IHRoZSBjb250ZW50cyBpdCBoYWQgaW4gdGhlIGNvbW1pdCBIRUFEXiwgYW5kCkBAIC0yMjExLDggKzIyMDksOCBAQAogVGhlc2UgY2FuIGJlIGVhc2lseSBrZXB0IHVwIHRvIGRhdGUgdXNpbmcgbGlua2dpdDpnaXQtcHVsbFsxXS4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgdGVzdCAmJiBnaXQgcHVsbAotJCBnaXQgY2hlY2tvdXQgcmVsZWFzZSAmJiBnaXQgcHVsbAorJCBnaXQgc3dpdGNoIHRlc3QgJiYgZ2l0IHB1bGwKKyQgZ2l0IHN3aXRjaCByZWxlYXNlICYmIGdpdCBwdWxsCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEltcG9ydGFudCBub3RlISAgSWYgeW91IGhhdmUgYW55IGxvY2FsIGNoYW5nZXMgaW4gdGhlc2UgYnJhbmNoZXMsIHRoZW4KQEAgLTIyNjQsNyArMjI2Miw3IEBACiAyKSBoZWxwIGZ1dHVyZSBidWcgaHVudGVycyB0aGF0IHVzZSBgZ2l0IGJpc2VjdGAgdG8gZmluZCBwcm9ibGVtcwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBjaGVja291dCAtYiBzcGVlZC11cC1zcGlubG9ja3MgdjIuNi4zNQorJCBnaXQgc3dpdGNoIC1jIHNwZWVkLXVwLXNwaW5sb2NrcyB2Mi42LjM1CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIE5vdyB5b3UgYXBwbHkgdGhlIHBhdGNoKGVzKSwgcnVuIHNvbWUgdGVzdHMsIGFuZCBjb21taXQgdGhlIGNoYW5nZShzKS4gIElmCkBAIC0yMjc5LDcgKzIyNzcsNyBAQAogInRlc3QiIGJyYW5jaCBpbiBwcmVwYXJhdGlvbiB0byBtYWtlIGl0IHB1YmxpYzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgdGVzdCAmJiBnaXQgbWVyZ2Ugc3BlZWQtdXAtc3BpbmxvY2tzCiskIGdpdCBzd2l0Y2ggdGVzdCAmJiBnaXQgbWVyZ2Ugc3BlZWQtdXAtc3BpbmxvY2tzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEl0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdvdWxkIGhhdmUgYW55IGNvbmZsaWN0cyBoZXJlIC4uLiBidXQgeW91IG1pZ2h0IGlmIHlvdQpAQCAtMjI5MSw3ICsyMjg5LDcgQEAKIG1lYW5zIHRoYXQgdGhlIHBhdGNoZXMgY2FuIGJlIG1vdmVkIGludG8gdGhlIGByZWxlYXNlYCB0cmVlIGluIGFueSBvcmRlci4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgcmVsZWFzZSAmJiBnaXQgbWVyZ2Ugc3BlZWQtdXAtc3BpbmxvY2tzCiskIGdpdCBzd2l0Y2ggcmVsZWFzZSAmJiBnaXQgbWVyZ2Ugc3BlZWQtdXAtc3BpbmxvY2tzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEFmdGVyIGEgd2hpbGUsIHlvdSB3aWxsIGhhdmUgYSBudW1iZXIgb2YgYnJhbmNoZXMsIGFuZCBkZXNwaXRlIHRoZQpAQCAtMjUxMiw3ICsyNTEwLDcgQEAKIGBvcmlnaW5gLCBhbmQgY3JlYXRlIHNvbWUgY29tbWl0cyBvbiB0b3Agb2YgaXQ6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IGNoZWNrb3V0IC1iIG15d29yayBvcmlnaW4KKyQgZ2l0IHN3aXRjaCAtYyBteXdvcmsgb3JpZ2luCiAkIHZpIGZpbGUudHh0CiAkIGdpdCBjb21taXQKICQgdmkgb3RoZXJmaWxlLnR4dApAQCAtMjU1Miw3ICsyNTUwLDcgQEAKIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXToKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgbXl3b3JrCiskIGdpdCBzd2l0Y2ggbXl3b3JrCiAkIGdpdCByZWJhc2Ugb3JpZ2luCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTM2NjgsMTMgKzM2NjYsMTMgQEAKIG5ldyBjb21taXQ6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorJCBnaXQgc3dpdGNoIG1hc3RlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBvcgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBjaGVja291dCAtYiBmaXgtdXAKKyQgZ2l0IHN3aXRjaCAtYyBmaXgtdXAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdGhlbgpAQCAtMzgwMCw4ICszNzk4LDggQEAKIFRoZSBXb3JrZmxvdwogLS0tLS0tLS0tLS0tCiAKLUhpZ2gtbGV2ZWwgb3BlcmF0aW9ucyBzdWNoIGFzIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwKLWxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIGFuZCBsaW5rZ2l0OmdpdC1yZXNldFsxXSB3b3JrIGJ5IG1vdmluZyBkYXRhCitIaWdoLWxldmVsIG9wZXJhdGlvbnMgc3VjaCBhcyBsaW5rZ2l0OmdpdC1jb21taXRbMV0gYW5kCitsaW5rZ2l0OmdpdC1yZXN0b3JlWzFdIHdvcmsgYnkgbW92aW5nIGRhdGEKIGJldHdlZW4gdGhlIHdvcmtpbmcgdHJlZSwgdGhlIGluZGV4LCBhbmQgdGhlIG9iamVjdCBkYXRhYmFzZS4gIEdpdAogcHJvdmlkZXMgbG93LWxldmVsIG9wZXJhdGlvbnMgd2hpY2ggcGVyZm9ybSBlYWNoIG9mIHRoZXNlIHN0ZXBzCiBpbmRpdmlkdWFsbHkuCkBAIC00MTk0LDcgKzQxOTIsNyBAQAogQSBnb29kIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBpbml0aWFsIGNvbW1pdCwgd2l0aDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgZTgzYzUxNjMKKyQgZ2l0IHN3aXRjaCAtLWRldGFjaCBlODNjNTE2MwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgaW5pdGlhbCByZXZpc2lvbiBsYXlzIHRoZSBmb3VuZGF0aW9uIGZvciBhbG1vc3QgZXZlcnl0aGluZyBHaXQgaGFzCkBAIC00NDM3LDEwICs0NDM1LDEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgYnJhbmNoCSAgICAgIyBsaXN0IGFsbCBsb2NhbCBicmFuY2hlcyBpbiB0aGlzIHJlcG8KLSQgZ2l0IGNoZWNrb3V0IHRlc3QgICMgc3dpdGNoIHdvcmtpbmcgZGlyZWN0b3J5IHRvIGJyYW5jaCAidGVzdCIKLSQgZ2l0IGJyYW5jaCBuZXcgICAgICMgY3JlYXRlIGJyYW5jaCAibmV3IiBzdGFydGluZyBhdCBjdXJyZW50IEhFQUQKLSQgZ2l0IGJyYW5jaCAtZCBuZXcgICMgZGVsZXRlIGJyYW5jaCAibmV3IgorJCBnaXQgYnJhbmNoCQkJIyBsaXN0IGFsbCBsb2NhbCBicmFuY2hlcyBpbiB0aGlzIHJlcG8KKyQgZ2l0IHN3aXRjaCB0ZXN0CSAgICAgICAgIyBzd2l0Y2ggd29ya2luZyBkaXJlY3RvcnkgdG8gYnJhbmNoICJ0ZXN0IgorJCBnaXQgYnJhbmNoIG5ldwkJIyBjcmVhdGUgYnJhbmNoICJuZXciIHN0YXJ0aW5nIGF0IGN1cnJlbnQgSEVBRAorJCBnaXQgYnJhbmNoIC1kIG5ldwkJIyBkZWxldGUgYnJhbmNoICJuZXciCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJbnN0ZWFkIG9mIGJhc2luZyBhIG5ldyBicmFuY2ggb24gY3VycmVudCBIRUFEICh0aGUgZGVmYXVsdCksIHVzZToKQEAgLTQ0NTYsNyArNDQ1NCw3IEBACiBDcmVhdGUgYW5kIHN3aXRjaCB0byBhIG5ldyBicmFuY2ggYXQgdGhlIHNhbWUgdGltZToKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IGNoZWNrb3V0IC1iIG5ldyB2Mi42LjE1CiskIGdpdCBzd2l0Y2ggLWMgbmV3IHYyLjYuMTUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFVwZGF0ZSBhbmQgZXhhbWluZSBicmFuY2hlcyBmcm9tIHRoZSByZXBvc2l0b3J5IHlvdSBjbG9uZWQgZnJvbToKQEAgLTQ0NjcsNyArNDQ2NSw3IEBACiAgIG9yaWdpbi9tYXN0ZXIKICAgb3JpZ2luL25leHQKICAgLi4uCi0kIGdpdCBjaGVja291dCAtYiBtYXN0ZXJ3b3JrIG9yaWdpbi9tYXN0ZXIKKyQgZ2l0IHN3aXRjaCAtYyBtYXN0ZXJ3b3JrIG9yaWdpbi9tYXN0ZXIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEZldGNoIGEgYnJhbmNoIGZyb20gYSBkaWZmZXJlbnQgcmVwb3NpdG9yeSwgYW5kIGdpdmUgaXQgYSBuZXcKZGlmZiAtLWdpdCBhL0dJVC1WRVJTSU9OLUdFTiBiL0dJVC1WRVJTSU9OLUdFTgppbmRleCA2N2Y4NmIzLi5hMDc2NmY2IDEwMDc1NQotLS0gYS9HSVQtVkVSU0lPTi1HRU4KKysrIGIvR0lULVZFUlNJT04tR0VOCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAKIEdWRj1HSVQtVkVSU0lPTi1GSUxFCi1ERUZfVkVSPXYyLjIyLjAKK0RFRl9WRVI9djIuMjMuMC1yYzAKIAogTEY9JwogJwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA4YTdlMjM1Li5mOTI1NTM0IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMjY1LDEwICsyNjUsNiBAQAogIwogIyBEZWZpbmUgTk9fREVGTEFURV9CT1VORCBpZiB5b3VyIHpsaWIgZG9lcyBub3QgaGF2ZSBkZWZsYXRlQm91bmQuCiAjCi0jIERlZmluZSBOT19SX1RPX0dDQ19MSU5LRVIgaWYgeW91ciBnY2MgZG9lcyBub3QgbGlrZSAiLVIvcGF0aC9saWIiCi0jIHRoYXQgdGVsbHMgcnVudGltZSBwYXRocyB0byBkeW5hbWljIGxpYnJhcmllczsKLSMgIi1XbCwtcnBhdGg9L3BhdGgvbGliIiBpcyB1c2VkIGluc3RlYWQuCi0jCiAjIERlZmluZSBOT19OT1JFVFVSTiBpZiB1c2luZyBidWdneSB2ZXJzaW9ucyBvZiBnY2MgNC42KyBhbmQgcHJvZmlsZSBmZWVkYmFjaywKICMgYXMgdGhlIGNvbXBpbGVyIGNhbiBjcmFzaCAoaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00OTI5OSkKICMKQEAgLTYyNCw4ICs2MjAsNiBAQAogCiBTQ1JJUFRfTElCICs9IGdpdC1tZXJnZXRvb2wtLWxpYgogU0NSSVBUX0xJQiArPSBnaXQtcGFyc2UtcmVtb3RlCi1TQ1JJUFRfTElCICs9IGdpdC1yZWJhc2UtLWFtCi1TQ1JJUFRfTElCICs9IGdpdC1yZWJhc2UtLWNvbW1vbgogU0NSSVBUX0xJQiArPSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMKIFNDUklQVF9MSUIgKz0gZ2l0LXNoLXNldHVwCiBTQ1JJUFRfTElCICs9IGdpdC1zaC1pMThuCkBAIC03MTAsNiArNzA0LDcgQEAKIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWN0eXBlLm8KIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWRhdGUubwogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZGVsdGEubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZGlyLWl0ZXJhdG9yLm8KIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWRyb3AtY2FjaGVzLm8KIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWR1bXAtY2FjaGUtdHJlZS5vCiBURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1kdW1wLWZzbW9uaXRvci5vCkBAIC03MjcsNiArNzIyLDcgQEAKIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LW1hdGNoLXRyZWVzLm8KIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LW1lcmdlc29ydC5vCiBURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1ta3RlbXAubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3Qtb2lkbWFwLm8KIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LW9ubGluZS1jcHVzLm8KIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXBhcnNlLW9wdGlvbnMubwogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcGF0aC11dGlscy5vCkBAIC03NzcsOSArNzczLDExIEBACiBCVUlMVF9JTlMgKz0gZ2l0LWZzY2stb2JqZWN0cyRYCiBCVUlMVF9JTlMgKz0gZ2l0LWluaXQkWAogQlVJTFRfSU5TICs9IGdpdC1tZXJnZS1zdWJ0cmVlJFgKK0JVSUxUX0lOUyArPSBnaXQtcmVzdG9yZSRYCiBCVUlMVF9JTlMgKz0gZ2l0LXNob3ckWAogQlVJTFRfSU5TICs9IGdpdC1zdGFnZSRYCiBCVUlMVF9JTlMgKz0gZ2l0LXN0YXR1cyRYCitCVUlMVF9JTlMgKz0gZ2l0LXN3aXRjaCRYCiBCVUlMVF9JTlMgKz0gZ2l0LXdoYXRjaGFuZ2VkJFgKIAogIyB3aGF0ICdhbGwnIHdpbGwgYnVpbGQgYW5kICdpbnN0YWxsJyB3aWxsIGluc3RhbGwgaW4gZ2l0ZXhlY2RpciwKQEAgLTEwNjUsNiArMTA2Myw3IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9kaWZmLXRyZWUubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZGlmZi5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9kaWZmdG9vbC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9lbnYtLWhlbHBlci5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9mYXN0LWV4cG9ydC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9mZXRjaC1wYWNrLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluL2ZldGNoLm8KQEAgLTExNjAsNiArMTE1OSw3IEBACiAjIHdoaWNoJ2xsIG92ZXJyaWRlIHRoZXNlIGRlZmF1bHRzLgogQ0ZMQUdTID0gLWcgLU8yIC1XYWxsCiBMREZMQUdTID0KK0NDX0xEX0RZTlBBVEggPSAtV2wsLXJwYXRoLAogQkFTSUNfQ0ZMQUdTID0gLUkuCiBCQVNJQ19MREZMQUdTID0KIApAQCAtMTI0MCw3ICsxMjQwLDcgQEAKIAogaWZkZWYgU0FORV9UT09MX1BBVEgKIFNBTkVfVE9PTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTQU5FX1RPT0xfUEFUSCkpCi1CUk9LRU5fUEFUSF9GSVggPSAnc3xeXCMgQEBCUk9LRU5fUEFUSF9GSVhAQCQkfGdpdF9icm9rZW5fcGF0aF9maXggJChTQU5FX1RPT0xfUEFUSF9TUSl8JworQlJPS0VOX1BBVEhfRklYID0gJ3N8XlwjIEBAQlJPS0VOX1BBVEhfRklYQEAkJHxnaXRfYnJva2VuX3BhdGhfZml4ICIkKFNBTkVfVE9PTF9QQVRIX1NRKSJ8JwogUEFUSCA6PSAkKFNBTkVfVE9PTF9QQVRIKToke1BBVEh9CiBlbHNlCiBCUk9LRU5fUEFUSF9GSVggPSAnL15cIyBAQEJST0tFTl9QQVRIX0ZJWEBAJCQvZCcKQEAgLTEyOTAsMTYgKzEyOTAsNiBAQAogCVBUSFJFQURfTElCUyA9CiBlbmRpZgogCi1pZm5kZWYgQ0NfTERfRFlOUEFUSAotCWlmZGVmIE5PX1JfVE9fR0NDX0xJTktFUgotCQkjIFNvbWUgZ2NjIGRvZXMgbm90IGFjY2VwdCBhbmQgcGFzcyAtUiB0byB0aGUgbGlua2VyIHRvIHNwZWNpZnkKLQkJIyB0aGUgcnVudGltZSBkeW5hbWljIGxpYnJhcnkgcGF0aC4KLQkJQ0NfTERfRFlOUEFUSCA9IC1XbCwtcnBhdGgsCi0JZWxzZQotCQlDQ19MRF9EWU5QQVRIID0gLVIKLQllbmRpZgotZW5kaWYKLQogaWZkZWYgTk9fTElCR0VOX0gKIAlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTElCR0VOX0gKIAlDT01QQVRfT0JKUyArPSBjb21wYXQvYmFzZW5hbWUubwpAQCAtMjczMCw3ICsyNzIwLDcgQEAKIAlAbWtkaXIgLXAgYmluLXdyYXBwZXJzCiAJJChRVUlFVF9HRU4pc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKIAkgICAgIC1lICdzfEBAQlVJTERfRElSQEB8JChzaGVsbCBwd2QpfCcgXAotCSAgICAgLWUgJ3N8QEBQUk9HQEB8JChwYXRzdWJzdCB0ZXN0LSUsdC9oZWxwZXIvdGVzdC0lLCQoQEYpKXwnIDwgJDwgPiAkQCAmJiBcCisJICAgICAtZSAnc3xAQFBST0dAQHwkKHBhdHN1YnN0IHRlc3QtJSx0L2hlbHBlci90ZXN0LSUkKFgpLCQoQEYpKSQocGF0c3Vic3QgZ2l0JSwkKFgpLCQoZmlsdGVyICQoQEYpLCQoQklORElSX1BST0dSQU1TX05FRURfWCkpKXwnIDwgJDwgPiAkQCAmJiBcCiAJY2htb2QgK3ggJEAKIAogIyBHTlUgbWFrZSBzdXBwb3J0cyBleHBvcnRpbmcgYWxsIHZhcmlhYmxlcyBieSAiZXhwb3J0IiB3aXRob3V0IHBhcmFtZXRlcnMuCkBAIC0yODczLDYgKzI4NjMsMzMgQEAKIAkkKElOU1RBTEwpICQoQUxMX1BST0dSQU1TKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKIAkkKElOU1RBTEwpIC1tIDY0NCAkKFNDUklQVF9MSUIpICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJwogCSQoSU5TVEFMTCkgJChpbnN0YWxsX2JpbmRpcl9wcm9ncmFtcykgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCitpZmRlZiBNU1ZDCisJIyBXZSBETyBOT1QgaW5zdGFsbCB0aGUgaW5kaXZpZHVhbCBmb28uby5wZGIgZmlsZXMgYmVjYXVzZSB0aGV5CisJIyBoYXZlIGFscmVhZHkgYmVlbiByb2xsZWQgdXAgaW50byB0aGUgZXhlJ3MgcGRiIGZpbGUuCisJIyBXZSBETyBOT1QgaGF2ZSBwZGIgZmlsZXMgZm9yIHRoZSBidWlsdGluIGNvbW1hbmRzIChsaWtlIGdpdC1zdGF0dXMuZXhlKQorCSMgYmVjYXVzZSBpdCBpcyBqdXN0IGEgY29weS9oYXJkbGluayBvZiBnaXQuZXhlLCByYXRoZXIgdGhhbiBhIHVuaXF1ZSBiaW5hcnkuCisJJChJTlNUQUxMKSBnaXQucGRiICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LXNoZWxsLnBkYiAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC11cGxvYWQtcGFjay5wZGIgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtY3JlZGVudGlhbC1zdG9yZS5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtZGFlbW9uLnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1mYXN0LWltcG9ydC5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtaHR0cC1iYWNrZW5kLnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1odHRwLWZldGNoLnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1odHRwLXB1c2gucGRiICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LWltYXAtc2VuZC5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtcmVtb3RlLWh0dHAucGRiICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LXJlbW90ZS10ZXN0c3ZuLnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1zaC1pMThuLS1lbnZzdWJzdC5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtc2hvdy1pbmRleC5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCitpZm5kZWYgREVCVUcKKwkkKElOU1RBTEwpICQodmNwa2dfcmVsX2JpbikvKi5kbGwgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCisJJChJTlNUQUxMKSAkKHZjcGtnX3JlbF9iaW4pLyoucGRiICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJworZWxzZQorCSQoSU5TVEFMTCkgJCh2Y3BrZ19kYmdfYmluKS8qLmRsbCAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKKwkkKElOU1RBTEwpICQodmNwa2dfZGJnX2JpbikvKi5wZGIgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCitlbmRpZgorZW5kaWYKIAkkKE1BS0UpIC1DIHRlbXBsYXRlcyBERVNURElSPSckKERFU1RESVJfU1EpJyBpbnN0YWxsCiAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKG1lcmdldG9vbHNfaW5zdGRpcl9TUSknCiAJJChJTlNUQUxMKSAtbSA2NDQgbWVyZ2V0b29scy8qICckKERFU1RESVJfU1EpJChtZXJnZXRvb2xzX2luc3RkaXJfU1EpJwpAQCAtMzA4NSw2ICszMTAyLDE5IEBACiAJJChSTSkgR0lULVZFUlNJT04tRklMRSBHSVQtQ0ZMQUdTIEdJVC1MREZMQUdTIEdJVC1CVUlMRC1PUFRJT05TCiAJJChSTSkgR0lULVVTRVItQUdFTlQgR0lULVBSRUZJWAogCSQoUk0pIEdJVC1TQ1JJUFQtREVGSU5FUyBHSVQtUEVSTC1ERUZJTkVTIEdJVC1QRVJMLUhFQURFUiBHSVQtUFlUSE9OLVZBUlMKK2lmZGVmIE1TVkMKKwkkKFJNKSAkKHBhdHN1YnN0ICUubywlLm8ucGRiLCQoT0JKRUNUUykpCisJJChSTSkgJChwYXRzdWJzdCAlLmV4ZSwlLnBkYiwkKE9USEVSX1BST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUuaW9iaiwkKE9USEVSX1BST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUuaXBkYiwkKE9USEVSX1BST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUucGRiLCQoUFJPR1JBTVMpKQorCSQoUk0pICQocGF0c3Vic3QgJS5leGUsJS5pb2JqLCQoUFJPR1JBTVMpKQorCSQoUk0pICQocGF0c3Vic3QgJS5leGUsJS5pcGRiLCQoUFJPR1JBTVMpKQorCSQoUk0pICQocGF0c3Vic3QgJS5leGUsJS5wZGIsJChURVNUX1BST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUuaW9iaiwkKFRFU1RfUFJPR1JBTVMpKQorCSQoUk0pICQocGF0c3Vic3QgJS5leGUsJS5pcGRiLCQoVEVTVF9QUk9HUkFNUykpCisJJChSTSkgY29tcGF0L3ZjYnVpbGQvTVNWQy1ERUZTLUdFTgorZW5kaWYKIAogLlBIT05ZOiBhbGwgaW5zdGFsbCBwcm9maWxlLWNsZWFuIGNvY2NpY2xlYW4gY2xlYW4gc3RyaXAKIC5QSE9OWTogc2hlbGxfY29tcGF0aWJpbGl0eV90ZXN0IHBsZWFzZV9zZXRfU0hFTExfUEFUSF90b19hX21vcmVfbW9kZXJuX3NoZWxsCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggODhmMTI2MS4uZTFkMmI4MiAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMTksNyArMTksNyBAQAogCiBTZWUgW0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0XVtdIHRvIGdldCBzdGFydGVkLCB0aGVuIHNlZQogW0RvY3VtZW50YXRpb24vZ2l0ZXZlcnlkYXkudHh0XVtdIGZvciBhIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcywgYW5kCi1Eb2N1bWVudGF0aW9uL2dpdC08Y29tbWFuZG5hbWU+LnR4dCBmb3IgZG9jdW1lbnRhdGlvbiBvZiBlYWNoIGNvbW1hbmQuCitgRG9jdW1lbnRhdGlvbi9naXQtPGNvbW1hbmRuYW1lPi50eHRgIGZvciBkb2N1bWVudGF0aW9uIG9mIGVhY2ggY29tbWFuZC4KIElmIGdpdCBoYXMgYmVlbiBjb3JyZWN0bHkgaW5zdGFsbGVkLCB0aGVuIHRoZSB0dXRvcmlhbCBjYW4gYWxzbyBiZQogcmVhZCB3aXRoIGBtYW4gZ2l0dHV0b3JpYWxgIG9yIGBnaXQgaGVscCB0dXRvcmlhbGAsIGFuZCB0aGUKIGRvY3VtZW50YXRpb24gb2YgZWFjaCBjb21tYW5kIHdpdGggYG1hbiBnaXQtPGNvbW1hbmRuYW1lPmAgb3IgYGdpdCBoZWxwCmRpZmYgLS1naXQgYS9SZWxOb3RlcyBiL1JlbE5vdGVzCmluZGV4IDMwY2JkZTcuLjI0OGQxMzcgMTIwMDAwCi0tLSBhL1JlbE5vdGVzCisrKyBiL1JlbE5vdGVzCkBAIC0xICsxIEBACi1Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMS50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitEb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMC50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hZHZpY2UuYyBiL2FkdmljZS5jCmluZGV4IGNlNWYzNzQuLjNlZTBlZTIgMTAwNjQ0Ci0tLSBhL2FkdmljZS5jCisrKyBiL2FkdmljZS5jCkBAIC0zLDYgKzMsNyBAQAogI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiaGVscC5oIgogCitpbnQgYWR2aWNlX2ZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMgPSAxOwogaW50IGFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCA9IDE7CiBpbnQgYWR2aWNlX3B1c2hfbm9uX2ZmX2N1cnJlbnQgPSAxOwogaW50IGFkdmljZV9wdXNoX25vbl9mZl9tYXRjaGluZyA9IDE7CkBAIC0xMiw5ICsxMywxMSBAQAogaW50IGFkdmljZV9wdXNoX3VucXVhbGlmaWVkX3JlZl9uYW1lID0gMTsKIGludCBhZHZpY2Vfc3RhdHVzX2hpbnRzID0gMTsKIGludCBhZHZpY2Vfc3RhdHVzX3Vfb3B0aW9uID0gMTsKK2ludCBhZHZpY2Vfc3RhdHVzX2FoZWFkX2JlaGluZF93YXJuaW5nID0gMTsKIGludCBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZSA9IDE7CiBpbnQgYWR2aWNlX3Jlc2V0X3F1aWV0X3dhcm5pbmcgPSAxOwogaW50IGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0ID0gMTsKK2ludCBhZHZpY2Vfc2VxdWVuY2VyX2luX3VzZSA9IDE7CiBpbnQgYWR2aWNlX2ltcGxpY2l0X2lkZW50aXR5ID0gMTsKIGludCBhZHZpY2VfZGV0YWNoZWRfaGVhZCA9IDE7CiBpbnQgYWR2aWNlX3NldF91cHN0cmVhbV9mYWlsdXJlID0gMTsKQEAgLTU5LDYgKzYyLDcgQEAKIAljb25zdCBjaGFyICpuYW1lOwogCWludCAqcHJlZmVyZW5jZTsKIH0gYWR2aWNlX2NvbmZpZ1tdID0geworCXsgImZldGNoU2hvd0ZvcmNlZFVwZGF0ZXMiLCAmYWR2aWNlX2ZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMgfSwKIAl7ICJwdXNoVXBkYXRlUmVqZWN0ZWQiLCAmYWR2aWNlX3B1c2hfdXBkYXRlX3JlamVjdGVkIH0sCiAJeyAicHVzaE5vbkZGQ3VycmVudCIsICZhZHZpY2VfcHVzaF9ub25fZmZfY3VycmVudCB9LAogCXsgInB1c2hOb25GRk1hdGNoaW5nIiwgJmFkdmljZV9wdXNoX25vbl9mZl9tYXRjaGluZyB9LApAQCAtNjgsOSArNzIsMTEgQEAKIAl7ICJwdXNoVW5xdWFsaWZpZWRSZWZOYW1lIiwgJmFkdmljZV9wdXNoX3VucXVhbGlmaWVkX3JlZl9uYW1lIH0sCiAJeyAic3RhdHVzSGludHMiLCAmYWR2aWNlX3N0YXR1c19oaW50cyB9LAogCXsgInN0YXR1c1VvcHRpb24iLCAmYWR2aWNlX3N0YXR1c191X29wdGlvbiB9LAorCXsgInN0YXR1c0FoZWFkQmVoaW5kV2FybmluZyIsICZhZHZpY2Vfc3RhdHVzX2FoZWFkX2JlaGluZF93YXJuaW5nIH0sCiAJeyAiY29tbWl0QmVmb3JlTWVyZ2UiLCAmYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UgfSwKIAl7ICJyZXNldFF1aWV0IiwgJmFkdmljZV9yZXNldF9xdWlldF93YXJuaW5nIH0sCiAJeyAicmVzb2x2ZUNvbmZsaWN0IiwgJmFkdmljZV9yZXNvbHZlX2NvbmZsaWN0IH0sCisJeyAic2VxdWVuY2VySW5Vc2UiLCAmYWR2aWNlX3NlcXVlbmNlcl9pbl91c2UgfSwKIAl7ICJpbXBsaWNpdElkZW50aXR5IiwgJmFkdmljZV9pbXBsaWNpdF9pZGVudGl0eSB9LAogCXsgImRldGFjaGVkSGVhZCIsICZhZHZpY2VfZGV0YWNoZWRfaGVhZCB9LAogCXsgInNldHVwU3RyZWFtRmFpbHVyZSIsICZhZHZpY2Vfc2V0X3Vwc3RyZWFtX2ZhaWx1cmUgfSwKQEAgLTE5MywxMyArMTk5LDIyIEBACiB2b2lkIGRldGFjaF9hZHZpY2UoY29uc3QgY2hhciAqbmV3X25hbWUpCiB7CiAJY29uc3QgY2hhciAqZm10ID0KLQlfKCJOb3RlOiBjaGVja2luZyBvdXQgJyVzJy5cblxuIgorCV8oIk5vdGU6IHN3aXRjaGluZyB0byAnJXMnLlxuIgorCSJcbiIKIAkiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCiAJImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKLQkic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHBlcmZvcm1pbmcgYW5vdGhlciBjaGVja291dC5cblxuIgorCSJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guXG4iCisJIlxuIgogCSJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKLQkiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZTpcblxuIgotCSIgIGdpdCBjaGVja291dCAtYiA8bmV3LWJyYW5jaC1uYW1lPlxuXG4iKTsKKwkiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6XG4iCisJIlxuIgorCSIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKwkiXG4iCisJIk9yIHVuZG8gdGhpcyBvcGVyYXRpb24gd2l0aDpcbiIKKwkiXG4iCisJIiAgZ2l0IHN3aXRjaCAtXG4iCisJIlxuIgorCSJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvIGZhbHNlXG5cbiIpOwogCiAJZnByaW50ZihzdGRlcnIsIGZtdCwgbmV3X25hbWUpOwogfQpkaWZmIC0tZ2l0IGEvYWR2aWNlLmggYi9hZHZpY2UuaAppbmRleCBlNTBmMDJjLi5kMDE1NDA0IDEwMDY0NAotLS0gYS9hZHZpY2UuaAorKysgYi9hZHZpY2UuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgogCitleHRlcm4gaW50IGFkdmljZV9mZXRjaF9zaG93X2ZvcmNlZF91cGRhdGVzOwogZXh0ZXJuIGludCBhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQ7CiBleHRlcm4gaW50IGFkdmljZV9wdXNoX25vbl9mZl9jdXJyZW50OwogZXh0ZXJuIGludCBhZHZpY2VfcHVzaF9ub25fZmZfbWF0Y2hpbmc7CkBAIC0xMiw5ICsxMywxMSBAQAogZXh0ZXJuIGludCBhZHZpY2VfcHVzaF91bnF1YWxpZmllZF9yZWZfbmFtZTsKIGV4dGVybiBpbnQgYWR2aWNlX3N0YXR1c19oaW50czsKIGV4dGVybiBpbnQgYWR2aWNlX3N0YXR1c191X29wdGlvbjsKK2V4dGVybiBpbnQgYWR2aWNlX3N0YXR1c19haGVhZF9iZWhpbmRfd2FybmluZzsKIGV4dGVybiBpbnQgYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2U7CiBleHRlcm4gaW50IGFkdmljZV9yZXNldF9xdWlldF93YXJuaW5nOwogZXh0ZXJuIGludCBhZHZpY2VfcmVzb2x2ZV9jb25mbGljdDsKK2V4dGVybiBpbnQgYWR2aWNlX3NlcXVlbmNlcl9pbl91c2U7CiBleHRlcm4gaW50IGFkdmljZV9pbXBsaWNpdF9pZGVudGl0eTsKIGV4dGVybiBpbnQgYWR2aWNlX2RldGFjaGVkX2hlYWQ7CiBleHRlcm4gaW50IGFkdmljZV9zZXRfdXBzdHJlYW1fZmFpbHVyZTsKZGlmZiAtLWdpdCBhL2FwcGx5LmMgYi9hcHBseS5jCmluZGV4IDQ5OTJlY2EuLmNkZTk1MzYgMTAwNjQ0Ci0tLSBhL2FwcGx5LmMKKysrIGIvYXBwbHkuYwpAQCAtMjIsNiArMjIsMTIgQEAKICNpbmNsdWRlICJyZXJlcmUuaCIKICNpbmNsdWRlICJhcHBseS5oIgogCitzdHJ1Y3QgZ2l0ZGlmZl9kYXRhIHsKKwlzdHJ1Y3Qgc3RyYnVmICpyb290OworCWludCBsaW5lbnI7CisJaW50IHBfdmFsdWU7Cit9OworCiBzdGF0aWMgdm9pZCBnaXRfYXBwbHlfY29uZmlnKHZvaWQpCiB7CiAJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJhcHBseS53aGl0ZXNwYWNlIiwgJmFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSk7CkBAIC0yMDEsNDAgKzIwNyw2IEBACiAjZGVmaW5lIEJJTkFSWV9ERUxUQV9ERUZMQVRFRAkxCiAjZGVmaW5lIEJJTkFSWV9MSVRFUkFMX0RFRkxBVEVEIDIKIAotLyoKLSAqIFRoaXMgcmVwcmVzZW50cyBhICJwYXRjaCIgdG8gYSBmaWxlLCBib3RoIG1ldGFpbmZvIGNoYW5nZXMKLSAqIHN1Y2ggYXMgY3JlYXRpb24vZGVsZXRpb24sIGZpbGVtb2RlIGFuZCBjb250ZW50IGNoYW5nZXMgcmVwcmVzZW50ZWQKLSAqIGFzIGEgc2VyaWVzIG9mIGZyYWdtZW50cy4KLSAqLwotc3RydWN0IHBhdGNoIHsKLQljaGFyICpuZXdfbmFtZSwgKm9sZF9uYW1lLCAqZGVmX25hbWU7Ci0JdW5zaWduZWQgaW50IG9sZF9tb2RlLCBuZXdfbW9kZTsKLQlpbnQgaXNfbmV3LCBpc19kZWxldGU7CS8qIC0xID0gdW5rbm93biwgMCA9IGZhbHNlLCAxID0gdHJ1ZSAqLwotCWludCByZWplY3RlZDsKLQl1bnNpZ25lZCB3c19ydWxlOwotCWludCBsaW5lc19hZGRlZCwgbGluZXNfZGVsZXRlZDsKLQlpbnQgc2NvcmU7Ci0JaW50IGV4dGVuc2lvbl9saW5lbnI7IC8qIGZpcnN0IGxpbmUgc3BlY2lmeWluZyBkZWxldGUvbmV3L3JlbmFtZS9jb3B5ICovCi0JdW5zaWduZWQgaW50IGlzX3RvcGxldmVsX3JlbGF0aXZlOjE7Ci0JdW5zaWduZWQgaW50IGluYWNjdXJhdGVfZW9mOjE7Ci0JdW5zaWduZWQgaW50IGlzX2JpbmFyeToxOwotCXVuc2lnbmVkIGludCBpc19jb3B5OjE7Ci0JdW5zaWduZWQgaW50IGlzX3JlbmFtZToxOwotCXVuc2lnbmVkIGludCByZWNvdW50OjE7Ci0JdW5zaWduZWQgaW50IGNvbmZsaWN0ZWRfdGhyZWV3YXk6MTsKLQl1bnNpZ25lZCBpbnQgZGlyZWN0X3RvX3RocmVld2F5OjE7Ci0JdW5zaWduZWQgaW50IGNybGZfaW5fb2xkOjE7Ci0Jc3RydWN0IGZyYWdtZW50ICpmcmFnbWVudHM7Ci0JY2hhciAqcmVzdWx0OwotCXNpemVfdCByZXN1bHRzaXplOwotCWNoYXIgb2xkX29pZF9wcmVmaXhbR0lUX01BWF9IRVhTWiArIDFdOwotCWNoYXIgbmV3X29pZF9wcmVmaXhbR0lUX01BWF9IRVhTWiArIDFdOwotCXN0cnVjdCBwYXRjaCAqbmV4dDsKLQotCS8qIHRocmVlLXdheSBmYWxsYmFjayByZXN1bHQgKi8KLQlzdHJ1Y3Qgb2JqZWN0X2lkIHRocmVld2F5X3N0YWdlWzNdOwotfTsKLQogc3RhdGljIHZvaWQgZnJlZV9mcmFnbWVudF9saXN0KHN0cnVjdCBmcmFnbWVudCAqbGlzdCkKIHsKIAl3aGlsZSAobGlzdCkgewpAQCAtNDY5LDcgKzQ0MSw3IEBACiAJcmV0dXJuIG5hbWU7CiB9CiAKLXN0YXRpYyBjaGFyICpmaW5kX25hbWVfZ251KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgY2hhciAqZmluZF9uYW1lX2dudShzdHJ1Y3Qgc3RyYnVmICpyb290LAogCQkJICAgY29uc3QgY2hhciAqbGluZSwKIAkJCSAgIGludCBwX3ZhbHVlKQogewpAQCAtNDc4LDcgKzQ1MCw3IEBACiAKIAkvKgogCSAqIFByb3Bvc2VkICJuZXctc3R5bGUiIEdOVSBwYXRjaC9kaWZmIGZvcm1hdDsgc2VlCi0JICogaHR0cDovL21hcmMuaW5mby8/bD1naXQmbT0xMTI5MjczMTY0MDg2OTAmdz0yCisJICogaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC83dmxsMHd2YjJhLmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQvCiAJICovCiAJaWYgKHVucXVvdGVfY19zdHlsZSgmbmFtZSwgbGluZSwgTlVMTCkpIHsKIAkJc3RyYnVmX3JlbGVhc2UoJm5hbWUpOwpAQCAtNDk1LDggKzQ2Nyw4IEBACiAJfQogCiAJc3RyYnVmX3JlbW92ZSgmbmFtZSwgMCwgY3AgLSBuYW1lLmJ1Zik7Ci0JaWYgKHN0YXRlLT5yb290LmxlbikKLQkJc3RyYnVmX2luc2VydCgmbmFtZSwgMCwgc3RhdGUtPnJvb3QuYnVmLCBzdGF0ZS0+cm9vdC5sZW4pOworCWlmIChyb290LT5sZW4pCisJCXN0cmJ1Zl9pbnNlcnQoJm5hbWUsIDAsIHJvb3QtPmJ1Ziwgcm9vdC0+bGVuKTsKIAlyZXR1cm4gc3F1YXNoX3NsYXNoKHN0cmJ1Zl9kZXRhY2goJm5hbWUsIE5VTEwpKTsKIH0KIApAQCAtNjU5LDcgKzYzMSw3IEBACiAJcmV0dXJuIGxpbmUgKyBsZW4gLSBlbmQ7CiB9CiAKLXN0YXRpYyBjaGFyICpmaW5kX25hbWVfY29tbW9uKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgY2hhciAqZmluZF9uYW1lX2NvbW1vbihzdHJ1Y3Qgc3RyYnVmICpyb290LAogCQkJICAgICAgY29uc3QgY2hhciAqbGluZSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmRlZiwKIAkJCSAgICAgIGludCBwX3ZhbHVlLApAQCAtNzAyLDMwICs2NzQsMzAgQEAKIAkJCXJldHVybiBzcXVhc2hfc2xhc2goeHN0cmR1cChkZWYpKTsKIAl9CiAKLQlpZiAoc3RhdGUtPnJvb3QubGVuKSB7Ci0JCWNoYXIgKnJldCA9IHhzdHJmbXQoIiVzJS4qcyIsIHN0YXRlLT5yb290LmJ1ZiwgbGVuLCBzdGFydCk7CisJaWYgKHJvb3QtPmxlbikgeworCQljaGFyICpyZXQgPSB4c3RyZm10KCIlcyUuKnMiLCByb290LT5idWYsIGxlbiwgc3RhcnQpOwogCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHJldCk7CiAJfQogCiAJcmV0dXJuIHNxdWFzaF9zbGFzaCh4bWVtZHVweihzdGFydCwgbGVuKSk7CiB9CiAKLXN0YXRpYyBjaGFyICpmaW5kX25hbWUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKK3N0YXRpYyBjaGFyICpmaW5kX25hbWUoc3RydWN0IHN0cmJ1ZiAqcm9vdCwKIAkJICAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCiAJCSAgICAgICBjaGFyICpkZWYsCiAJCSAgICAgICBpbnQgcF92YWx1ZSwKIAkJICAgICAgIGludCB0ZXJtaW5hdGUpCiB7CiAJaWYgKCpsaW5lID09ICciJykgewotCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShzdGF0ZSwgbGluZSwgcF92YWx1ZSk7CisJCWNoYXIgKm5hbWUgPSBmaW5kX25hbWVfZ251KHJvb3QsIGxpbmUsIHBfdmFsdWUpOwogCQlpZiAobmFtZSkKIAkJCXJldHVybiBuYW1lOwogCX0KIAotCXJldHVybiBmaW5kX25hbWVfY29tbW9uKHN0YXRlLCBsaW5lLCBkZWYsIHBfdmFsdWUsIE5VTEwsIHRlcm1pbmF0ZSk7CisJcmV0dXJuIGZpbmRfbmFtZV9jb21tb24ocm9vdCwgbGluZSwgZGVmLCBwX3ZhbHVlLCBOVUxMLCB0ZXJtaW5hdGUpOwogfQogCi1zdGF0aWMgY2hhciAqZmluZF9uYW1lX3RyYWRpdGlvbmFsKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgY2hhciAqZmluZF9uYW1lX3RyYWRpdGlvbmFsKHN0cnVjdCBzdHJidWYgKnJvb3QsCiAJCQkJICAgY29uc3QgY2hhciAqbGluZSwKIAkJCQkgICBjaGFyICpkZWYsCiAJCQkJICAgaW50IHBfdmFsdWUpCkBAIC03MzQsNyArNzA2LDcgQEAKIAlzaXplX3QgZGF0ZV9sZW47CiAKIAlpZiAoKmxpbmUgPT0gJyInKSB7Ci0JCWNoYXIgKm5hbWUgPSBmaW5kX25hbWVfZ251KHN0YXRlLCBsaW5lLCBwX3ZhbHVlKTsKKwkJY2hhciAqbmFtZSA9IGZpbmRfbmFtZV9nbnUocm9vdCwgbGluZSwgcF92YWx1ZSk7CiAJCWlmIChuYW1lKQogCQkJcmV0dXJuIG5hbWU7CiAJfQpAQCAtNzQyLDEwICs3MTQsMTAgQEAKIAlsZW4gPSBzdHJjaHJudWwobGluZSwgJ1xuJykgLSBsaW5lOwogCWRhdGVfbGVuID0gZGlmZl90aW1lc3RhbXBfbGVuKGxpbmUsIGxlbik7CiAJaWYgKCFkYXRlX2xlbikKLQkJcmV0dXJuIGZpbmRfbmFtZV9jb21tb24oc3RhdGUsIGxpbmUsIGRlZiwgcF92YWx1ZSwgTlVMTCwgVEVSTV9UQUIpOworCQlyZXR1cm4gZmluZF9uYW1lX2NvbW1vbihyb290LCBsaW5lLCBkZWYsIHBfdmFsdWUsIE5VTEwsIFRFUk1fVEFCKTsKIAlsZW4gLT0gZGF0ZV9sZW47CiAKLQlyZXR1cm4gZmluZF9uYW1lX2NvbW1vbihzdGF0ZSwgbGluZSwgZGVmLCBwX3ZhbHVlLCBsaW5lICsgbGVuLCAwKTsKKwlyZXR1cm4gZmluZF9uYW1lX2NvbW1vbihyb290LCBsaW5lLCBkZWYsIHBfdmFsdWUsIGxpbmUgKyBsZW4sIDApOwogfQogCiAvKgpAQCAtNzU5LDcgKzczMSw3IEBACiAKIAlpZiAoaXNfZGV2X251bGwobmFtZWxpbmUpKQogCQlyZXR1cm4gLTE7Ci0JbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbChzdGF0ZSwgbmFtZWxpbmUsIE5VTEwsIDApOworCW5hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoJnN0YXRlLT5yb290LCBuYW1lbGluZSwgTlVMTCwgMCk7CiAJaWYgKCFuYW1lKQogCQlyZXR1cm4gLTE7CiAJY3AgPSBzdHJjaHIobmFtZSwgJy8nKTsKQEAgLTg4MywxNyArODU1LDE3IEBACiAJaWYgKGlzX2Rldl9udWxsKGZpcnN0KSkgewogCQlwYXRjaC0+aXNfbmV3ID0gMTsKIAkJcGF0Y2gtPmlzX2RlbGV0ZSA9IDA7Ci0JCW5hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoc3RhdGUsIHNlY29uZCwgTlVMTCwgc3RhdGUtPnBfdmFsdWUpOworCQluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKCZzdGF0ZS0+cm9vdCwgc2Vjb25kLCBOVUxMLCBzdGF0ZS0+cF92YWx1ZSk7CiAJCXBhdGNoLT5uZXdfbmFtZSA9IG5hbWU7CiAJfSBlbHNlIGlmIChpc19kZXZfbnVsbChzZWNvbmQpKSB7CiAJCXBhdGNoLT5pc19uZXcgPSAwOwogCQlwYXRjaC0+aXNfZGVsZXRlID0gMTsKLQkJbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbChzdGF0ZSwgZmlyc3QsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlKTsKKwkJbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbCgmc3RhdGUtPnJvb3QsIGZpcnN0LCBOVUxMLCBzdGF0ZS0+cF92YWx1ZSk7CiAJCXBhdGNoLT5vbGRfbmFtZSA9IG5hbWU7CiAJfSBlbHNlIHsKIAkJY2hhciAqZmlyc3RfbmFtZTsKLQkJZmlyc3RfbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbChzdGF0ZSwgZmlyc3QsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlKTsKLQkJbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbChzdGF0ZSwgc2Vjb25kLCBmaXJzdF9uYW1lLCBzdGF0ZS0+cF92YWx1ZSk7CisJCWZpcnN0X25hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoJnN0YXRlLT5yb290LCBmaXJzdCwgTlVMTCwgc3RhdGUtPnBfdmFsdWUpOworCQluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKCZzdGF0ZS0+cm9vdCwgc2Vjb25kLCBmaXJzdF9uYW1lLCBzdGF0ZS0+cF92YWx1ZSk7CiAJCWZyZWUoZmlyc3RfbmFtZSk7CiAJCWlmIChoYXNfZXBvY2hfdGltZXN0YW1wKGZpcnN0KSkgewogCQkJcGF0Y2gtPmlzX25ldyA9IDE7CkBAIC05MTQsNyArODg2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaXRkaWZmX2hkcmVuZChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorc3RhdGljIGludCBnaXRkaWZmX2hkcmVuZChzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKIAkJCSAgY29uc3QgY2hhciAqbGluZSwKIAkJCSAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKQEAgLTkzMywxNCArOTA1LDE0IEBACiAjZGVmaW5lIERJRkZfT0xEX05BTUUgMAogI2RlZmluZSBESUZGX05FV19OQU1FIDEKIAotc3RhdGljIGludCBnaXRkaWZmX3ZlcmlmeV9uYW1lKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgaW50IGdpdGRpZmZfdmVyaWZ5X25hbWUoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCiAJCQkgICAgICAgY29uc3QgY2hhciAqbGluZSwKIAkJCSAgICAgICBpbnQgaXNudWxsLAogCQkJICAgICAgIGNoYXIgKipuYW1lLAogCQkJICAgICAgIGludCBzaWRlKQogewogCWlmICghKm5hbWUgJiYgIWlzbnVsbCkgewotCQkqbmFtZSA9IGZpbmRfbmFtZShzdGF0ZSwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUsIFRFUk1fVEFCKTsKKwkJKm5hbWUgPSBmaW5kX25hbWUoc3RhdGUtPnJvb3QsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlLCBURVJNX1RBQik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTQ5LDcgKzkyMSw3IEBACiAJCWlmIChpc251bGwpCiAJCQlyZXR1cm4gZXJyb3IoXygiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIiksCiAJCQkJICAgICAqbmFtZSwgc3RhdGUtPmxpbmVucik7Ci0JCWFub3RoZXIgPSBmaW5kX25hbWUoc3RhdGUsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlLCBURVJNX1RBQik7CisJCWFub3RoZXIgPSBmaW5kX25hbWUoc3RhdGUtPnJvb3QsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlLCBURVJNX1RBQik7CiAJCWlmICghYW5vdGhlciB8fCBzdHJjbXAoYW5vdGhlciwgKm5hbWUpKSB7CiAJCQlmcmVlKGFub3RoZXIpOwogCQkJcmV0dXJuIGVycm9yKChzaWRlID09IERJRkZfTkVXX05BTUUpID8KQEAgLTk2NSw3ICs5MzcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdpdGRpZmZfb2xkbmFtZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorc3RhdGljIGludCBnaXRkaWZmX29sZG5hbWUoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCiAJCQkgICBjb25zdCBjaGFyICpsaW5lLAogCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKQEAgLTk3NCw3ICs5NDYsNyBAQAogCQkJCSAgIERJRkZfT0xEX05BTUUpOwogfQogCi1zdGF0aWMgaW50IGdpdGRpZmZfbmV3bmFtZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorc3RhdGljIGludCBnaXRkaWZmX25ld25hbWUoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCiAJCQkgICBjb25zdCBjaGFyICpsaW5lLAogCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKQEAgLTk5MiwyMSArOTY0LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9vbGRtb2RlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgaW50IGdpdGRpZmZfb2xkbW9kZShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKIAkJCSAgIGNvbnN0IGNoYXIgKmxpbmUsCiAJCQkgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCXJldHVybiBwYXJzZV9tb2RlX2xpbmUobGluZSwgc3RhdGUtPmxpbmVuciwgJnBhdGNoLT5vbGRfbW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9uZXdtb2RlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgaW50IGdpdGRpZmZfbmV3bW9kZShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKIAkJCSAgIGNvbnN0IGNoYXIgKmxpbmUsCiAJCQkgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCXJldHVybiBwYXJzZV9tb2RlX2xpbmUobGluZSwgc3RhdGUtPmxpbmVuciwgJnBhdGNoLT5uZXdfbW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9kZWxldGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9kZWxldGUoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCiAJCQkgIGNvbnN0IGNoYXIgKmxpbmUsCiAJCQkgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CkBAIC0xMDE2LDcgKzk4OCw3IEBACiAJcmV0dXJuIGdpdGRpZmZfb2xkbW9kZShzdGF0ZSwgbGluZSwgcGF0Y2gpOwogfQogCi1zdGF0aWMgaW50IGdpdGRpZmZfbmV3ZmlsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorc3RhdGljIGludCBnaXRkaWZmX25ld2ZpbGUoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCiAJCQkgICBjb25zdCBjaGFyICpsaW5lLAogCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKQEAgLTEwMjYsNDcgKzk5OCw0NyBAQAogCXJldHVybiBnaXRkaWZmX25ld21vZGUoc3RhdGUsIGxpbmUsIHBhdGNoKTsKIH0KIAotc3RhdGljIGludCBnaXRkaWZmX2NvcHlzcmMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9jb3B5c3JjKHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAogCQkJICAgY29uc3QgY2hhciAqbGluZSwKIAkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJcGF0Y2gtPmlzX2NvcHkgPSAxOwogCWZyZWUocGF0Y2gtPm9sZF9uYW1lKTsKLQlwYXRjaC0+b2xkX25hbWUgPSBmaW5kX25hbWUoc3RhdGUsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlID8gc3RhdGUtPnBfdmFsdWUgLSAxIDogMCwgMCk7CisJcGF0Y2gtPm9sZF9uYW1lID0gZmluZF9uYW1lKHN0YXRlLT5yb290LCBsaW5lLCBOVUxMLCBzdGF0ZS0+cF92YWx1ZSA/IHN0YXRlLT5wX3ZhbHVlIC0gMSA6IDAsIDApOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdpdGRpZmZfY29weWRzdChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorc3RhdGljIGludCBnaXRkaWZmX2NvcHlkc3Qoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCiAJCQkgICBjb25zdCBjaGFyICpsaW5lLAogCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAlwYXRjaC0+aXNfY29weSA9IDE7CiAJZnJlZShwYXRjaC0+bmV3X25hbWUpOwotCXBhdGNoLT5uZXdfbmFtZSA9IGZpbmRfbmFtZShzdGF0ZSwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUgPyBzdGF0ZS0+cF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlwYXRjaC0+bmV3X25hbWUgPSBmaW5kX25hbWUoc3RhdGUtPnJvb3QsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlID8gc3RhdGUtPnBfdmFsdWUgLSAxIDogMCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9yZW5hbWVzcmMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9yZW5hbWVzcmMoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsCiAJCQkgICAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJcGF0Y2gtPmlzX3JlbmFtZSA9IDE7CiAJZnJlZShwYXRjaC0+b2xkX25hbWUpOwotCXBhdGNoLT5vbGRfbmFtZSA9IGZpbmRfbmFtZShzdGF0ZSwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUgPyBzdGF0ZS0+cF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlwYXRjaC0+b2xkX25hbWUgPSBmaW5kX25hbWUoc3RhdGUtPnJvb3QsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlID8gc3RhdGUtPnBfdmFsdWUgLSAxIDogMCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9yZW5hbWVkc3Qoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9yZW5hbWVkc3Qoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsCiAJCQkgICAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJcGF0Y2gtPmlzX3JlbmFtZSA9IDE7CiAJZnJlZShwYXRjaC0+bmV3X25hbWUpOwotCXBhdGNoLT5uZXdfbmFtZSA9IGZpbmRfbmFtZShzdGF0ZSwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUgPyBzdGF0ZS0+cF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlwYXRjaC0+bmV3X25hbWUgPSBmaW5kX25hbWUoc3RhdGUtPnJvb3QsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlID8gc3RhdGUtPnBfdmFsdWUgLSAxIDogMCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9zaW1pbGFyaXR5KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgaW50IGdpdGRpZmZfc2ltaWxhcml0eShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCiAJCQkgICAgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewpAQCAtMTA3Niw3ICsxMDQ4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaXRkaWZmX2Rpc3NpbWlsYXJpdHkoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9kaXNzaW1pbGFyaXR5KHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAogCQkJCSBjb25zdCBjaGFyICpsaW5lLAogCQkJCSBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewpAQCAtMTA4Niw3ICsxMDU4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaXRkaWZmX2luZGV4KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgaW50IGdpdGRpZmZfaW5kZXgoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCiAJCQkgY29uc3QgY2hhciAqbGluZSwKIAkJCSBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewpAQCAtMTEyNiw3ICsxMDk4LDcgQEAKICAqIFRoaXMgaXMgbm9ybWFsIGZvciBhIGRpZmYgdGhhdCBkb2Vzbid0IGNoYW5nZSBhbnl0aGluZzogd2UnbGwgZmFsbCB0aHJvdWdoCiAgKiBpbnRvIHRoZSBuZXh0IGRpZmYuIFRlbGwgdGhlIHBhcnNlciB0byBicmVhayBvdXQuCiAgKi8KLXN0YXRpYyBpbnQgZ2l0ZGlmZl91bnJlY29nbml6ZWQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKK3N0YXRpYyBpbnQgZ2l0ZGlmZl91bnJlY29nbml6ZWQoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCiAJCQkJY29uc3QgY2hhciAqbGluZSwKIAkJCQlzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewpAQCAtMTEzNywxNyArMTEwOSwxNyBAQAogICogU2tpcCBwX3ZhbHVlIGxlYWRpbmcgY29tcG9uZW50cyBmcm9tICJsaW5lIjsgYXMgd2UgZG8gbm90IGFjY2VwdAogICogYWJzb2x1dGUgcGF0aHMsIHJldHVybiBOVUxMIGluIHRoYXQgY2FzZS4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfdHJlZV9wcmVmaXgoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKK3N0YXRpYyBjb25zdCBjaGFyICpza2lwX3RyZWVfcHJlZml4KGludCBwX3ZhbHVlLAogCQkJCSAgICBjb25zdCBjaGFyICpsaW5lLAogCQkJCSAgICBpbnQgbGxlbikKIHsKIAlpbnQgbnNsYXNoOwogCWludCBpOwogCi0JaWYgKCFzdGF0ZS0+cF92YWx1ZSkKKwlpZiAoIXBfdmFsdWUpCiAJCXJldHVybiAobGxlbiAmJiBsaW5lWzBdID09ICcvJykgPyBOVUxMIDogbGluZTsKIAotCW5zbGFzaCA9IHN0YXRlLT5wX3ZhbHVlOworCW5zbGFzaCA9IHBfdmFsdWU7CiAJZm9yIChpID0gMDsgaSA8IGxsZW47IGkrKykgewogCQlpbnQgY2ggPSBsaW5lW2ldOwogCQlpZiAoY2ggPT0gJy8nICYmIC0tbnNsYXNoIDw9IDApCkBAIC0xMTY0LDcgKzExMzYsNyBAQAogICogY3JlYXRpb24gb3IgZGVsZXRpb24gb2YgYW4gZW1wdHkgZmlsZS4gIEluIGFueSBvZiB0aGVzZSBjYXNlcywKICAqIGJvdGggc2lkZXMgYXJlIHRoZSBzYW1lIG5hbWUgdW5kZXIgYS8gYW5kIGIvIHJlc3BlY3RpdmVseS4KICAqLwotc3RhdGljIGNoYXIgKmdpdF9oZWFkZXJfbmFtZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorc3RhdGljIGNoYXIgKmdpdF9oZWFkZXJfbmFtZShpbnQgcF92YWx1ZSwKIAkJCSAgICAgY29uc3QgY2hhciAqbGluZSwKIAkJCSAgICAgaW50IGxsZW4pCiB7CkBAIC0xMTg0LDcgKzExNTYsNyBAQAogCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKIAogCQkvKiBzdHJpcCB0aGUgYS9iIHByZWZpeCBpbmNsdWRpbmcgdHJhaWxpbmcgc2xhc2ggKi8KLQkJY3AgPSBza2lwX3RyZWVfcHJlZml4KHN0YXRlLCBmaXJzdC5idWYsIGZpcnN0Lmxlbik7CisJCWNwID0gc2tpcF90cmVlX3ByZWZpeChwX3ZhbHVlLCBmaXJzdC5idWYsIGZpcnN0Lmxlbik7CiAJCWlmICghY3ApCiAJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOwogCQlzdHJidWZfcmVtb3ZlKCZmaXJzdCwgMCwgY3AgLSBmaXJzdC5idWYpOwpAQCAtMTIwMSw3ICsxMTczLDcgQEAKIAkJaWYgKCpzZWNvbmQgPT0gJyInKSB7CiAJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZzcCwgc2Vjb25kLCBOVUxMKSkKIAkJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOwotCQkJY3AgPSBza2lwX3RyZWVfcHJlZml4KHN0YXRlLCBzcC5idWYsIHNwLmxlbik7CisJCQljcCA9IHNraXBfdHJlZV9wcmVmaXgocF92YWx1ZSwgc3AuYnVmLCBzcC5sZW4pOwogCQkJaWYgKCFjcCkKIAkJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOwogCQkJLyogVGhleSBtdXN0IG1hdGNoLCBvdGhlcndpc2UgaWdub3JlICovCkBAIC0xMjEyLDcgKzExODQsNyBAQAogCQl9CiAKIAkJLyogdW5xdW90ZWQgc2Vjb25kICovCi0JCWNwID0gc2tpcF90cmVlX3ByZWZpeChzdGF0ZSwgc2Vjb25kLCBsaW5lICsgbGxlbiAtIHNlY29uZCk7CisJCWNwID0gc2tpcF90cmVlX3ByZWZpeChwX3ZhbHVlLCBzZWNvbmQsIGxpbmUgKyBsbGVuIC0gc2Vjb25kKTsKIAkJaWYgKCFjcCkKIAkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CiAJCWlmIChsaW5lICsgbGxlbiAtIGNwICE9IGZpcnN0LmxlbiB8fApAQCAtMTIyNyw3ICsxMTk5LDcgQEAKIAl9CiAKIAkvKiB1bnF1b3RlZCBmaXJzdCBuYW1lICovCi0JbmFtZSA9IHNraXBfdHJlZV9wcmVmaXgoc3RhdGUsIGxpbmUsIGxsZW4pOworCW5hbWUgPSBza2lwX3RyZWVfcHJlZml4KHBfdmFsdWUsIGxpbmUsIGxsZW4pOwogCWlmICghbmFtZSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTEyNDMsNyArMTIxNSw3IEBACiAJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZzcCwgc2Vjb25kLCBOVUxMKSkKIAkJCQlnb3RvIGZyZWVfYW5kX2ZhaWwyOwogCi0JCQlucCA9IHNraXBfdHJlZV9wcmVmaXgoc3RhdGUsIHNwLmJ1Ziwgc3AubGVuKTsKKwkJCW5wID0gc2tpcF90cmVlX3ByZWZpeChwX3ZhbHVlLCBzcC5idWYsIHNwLmxlbik7CiAJCQlpZiAoIW5wKQogCQkJCWdvdG8gZnJlZV9hbmRfZmFpbDI7CiAKQEAgLTEyODcsNyArMTI1OSw3IEBACiAJCQkgKi8KIAkJCWlmICghbmFtZVtsZW4gKyAxXSkKIAkJCQlyZXR1cm4gTlVMTDsgLyogbm8gcG9zdGltYWdlIG5hbWUgKi8KLQkJCXNlY29uZCA9IHNraXBfdHJlZV9wcmVmaXgoc3RhdGUsIG5hbWUgKyBsZW4gKyAxLAorCQkJc2Vjb25kID0gc2tpcF90cmVlX3ByZWZpeChwX3ZhbHVlLCBuYW1lICsgbGVuICsgMSwKIAkJCQkJCSAgbGluZV9sZW4gLSAobGVuICsgMSkpOwogCQkJaWYgKCFzZWNvbmQpCiAJCQkJcmV0dXJuIE5VTEw7CkBAIC0xMzAyLDI2ICsxMjc0LDI4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGNoZWNrX2hlYWRlcl9saW5lKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGNoZWNrX2hlYWRlcl9saW5lKGludCBsaW5lbnIsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJaW50IGV4dGVuc2lvbnMgPSAocGF0Y2gtPmlzX2RlbGV0ZSA9PSAxKSArIChwYXRjaC0+aXNfbmV3ID09IDEpICsKIAkJCSAocGF0Y2gtPmlzX3JlbmFtZSA9PSAxKSArIChwYXRjaC0+aXNfY29weSA9PSAxKTsKIAlpZiAoZXh0ZW5zaW9ucyA+IDEpCiAJCXJldHVybiBlcnJvcihfKCJpbmNvbnNpc3RlbnQgaGVhZGVyIGxpbmVzICVkIGFuZCAlZCIpLAotCQkJICAgICBwYXRjaC0+ZXh0ZW5zaW9uX2xpbmVuciwgc3RhdGUtPmxpbmVucik7CisJCQkgICAgIHBhdGNoLT5leHRlbnNpb25fbGluZW5yLCBsaW5lbnIpOwogCWlmIChleHRlbnNpb25zICYmICFwYXRjaC0+ZXh0ZW5zaW9uX2xpbmVucikKLQkJcGF0Y2gtPmV4dGVuc2lvbl9saW5lbnIgPSBzdGF0ZS0+bGluZW5yOworCQlwYXRjaC0+ZXh0ZW5zaW9uX2xpbmVuciA9IGxpbmVucjsKIAlyZXR1cm4gMDsKIH0KIAotLyogVmVyaWZ5IHRoYXQgd2UgcmVjb2duaXplIHRoZSBsaW5lcyBmb2xsb3dpbmcgYSBnaXQgaGVhZGVyICovCi1zdGF0aWMgaW50IHBhcnNlX2dpdF9oZWFkZXIoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKLQkJCSAgICBjb25zdCBjaGFyICpsaW5lLAotCQkJICAgIGludCBsZW4sCi0JCQkgICAgdW5zaWduZWQgaW50IHNpemUsCi0JCQkgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK2ludCBwYXJzZV9naXRfZGlmZl9oZWFkZXIoc3RydWN0IHN0cmJ1ZiAqcm9vdCwKKwkJCSAgaW50ICpsaW5lbnIsCisJCQkgIGludCBwX3ZhbHVlLAorCQkJICBjb25zdCBjaGFyICpsaW5lLAorCQkJICBpbnQgbGVuLAorCQkJICB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCSAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwlzdHJ1Y3QgZ2l0ZGlmZl9kYXRhIHBhcnNlX2hkcl9zdGF0ZTsKIAogCS8qIEEgZ2l0IGRpZmYgaGFzIGV4cGxpY2l0IG5ldy9kZWxldGUgaW5mb3JtYXRpb24sIHNvIHdlIGRvbid0IGd1ZXNzICovCiAJcGF0Y2gtPmlzX25ldyA9IDA7CkBAIC0xMzMzLDIwICsxMzA3LDI0IEBACiAJICogb3IgcmVtb3Zpbmcgb3IgYWRkaW5nIGVtcHR5IGZpbGVzKSwgc28gd2UgZ2V0CiAJICogdGhlIGRlZmF1bHQgbmFtZSBmcm9tIHRoZSBoZWFkZXIuCiAJICovCi0JcGF0Y2gtPmRlZl9uYW1lID0gZ2l0X2hlYWRlcl9uYW1lKHN0YXRlLCBsaW5lLCBsZW4pOwotCWlmIChwYXRjaC0+ZGVmX25hbWUgJiYgc3RhdGUtPnJvb3QubGVuKSB7Ci0JCWNoYXIgKnMgPSB4c3RyZm10KCIlcyVzIiwgc3RhdGUtPnJvb3QuYnVmLCBwYXRjaC0+ZGVmX25hbWUpOworCXBhdGNoLT5kZWZfbmFtZSA9IGdpdF9oZWFkZXJfbmFtZShwX3ZhbHVlLCBsaW5lLCBsZW4pOworCWlmIChwYXRjaC0+ZGVmX25hbWUgJiYgcm9vdC0+bGVuKSB7CisJCWNoYXIgKnMgPSB4c3RyZm10KCIlcyVzIiwgcm9vdC0+YnVmLCBwYXRjaC0+ZGVmX25hbWUpOwogCQlmcmVlKHBhdGNoLT5kZWZfbmFtZSk7CiAJCXBhdGNoLT5kZWZfbmFtZSA9IHM7CiAJfQogCiAJbGluZSArPSBsZW47CiAJc2l6ZSAtPSBsZW47Ci0Jc3RhdGUtPmxpbmVucisrOwotCWZvciAob2Zmc2V0ID0gbGVuIDsgc2l6ZSA+IDAgOyBvZmZzZXQgKz0gbGVuLCBzaXplIC09IGxlbiwgbGluZSArPSBsZW4sIHN0YXRlLT5saW5lbnIrKykgeworCSgqbGluZW5yKSsrOworCXBhcnNlX2hkcl9zdGF0ZS5yb290ID0gcm9vdDsKKwlwYXJzZV9oZHJfc3RhdGUubGluZW5yID0gKmxpbmVucjsKKwlwYXJzZV9oZHJfc3RhdGUucF92YWx1ZSA9IHBfdmFsdWU7CisKKwlmb3IgKG9mZnNldCA9IGxlbiA7IHNpemUgPiAwIDsgb2Zmc2V0ICs9IGxlbiwgc2l6ZSAtPSBsZW4sIGxpbmUgKz0gbGVuLCAoKmxpbmVucikrKykgewogCQlzdGF0aWMgY29uc3Qgc3RydWN0IG9wZW50cnkgewogCQkJY29uc3QgY2hhciAqc3RyOwotCQkJaW50ICgqZm4pKHN0cnVjdCBhcHBseV9zdGF0ZSAqLCBjb25zdCBjaGFyICosIHN0cnVjdCBwYXRjaCAqKTsKKwkJCWludCAoKmZuKShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IHBhdGNoICopOwogCQl9IG9wdGFibGVbXSA9IHsKIAkJCXsgIkBAIC0iLCBnaXRkaWZmX2hkcmVuZCB9LAogCQkJeyAiLS0tICIsIGdpdGRpZmZfb2xkbmFtZSB9LApAQCAtMTM3NywxMCArMTM1NSwxMCBAQAogCQkJaW50IHJlczsKIAkJCWlmIChsZW4gPCBvcGxlbiB8fCBtZW1jbXAocC0+c3RyLCBsaW5lLCBvcGxlbikpCiAJCQkJY29udGludWU7Ci0JCQlyZXMgPSBwLT5mbihzdGF0ZSwgbGluZSArIG9wbGVuLCBwYXRjaCk7CisJCQlyZXMgPSBwLT5mbigmcGFyc2VfaGRyX3N0YXRlLCBsaW5lICsgb3BsZW4sIHBhdGNoKTsKIAkJCWlmIChyZXMgPCAwKQogCQkJCXJldHVybiAtMTsKLQkJCWlmIChjaGVja19oZWFkZXJfbGluZShzdGF0ZSwgcGF0Y2gpKQorCQkJaWYgKGNoZWNrX2hlYWRlcl9saW5lKCpsaW5lbnIsIHBhdGNoKSkKIAkJCQlyZXR1cm4gLTE7CiAJCQlpZiAocmVzID4gMCkKIAkJCQlyZXR1cm4gb2Zmc2V0OwpAQCAtMTU2MSw3ICsxNTM5LDkgQEAKIAkJICogb3IgbW9kZSBjaGFuZ2UsIHNvIHdlIGhhbmRsZSB0aGF0IHNwZWNpYWxseQogCQkgKi8KIAkJaWYgKCFtZW1jbXAoImRpZmYgLS1naXQgIiwgbGluZSwgMTEpKSB7Ci0JCQlpbnQgZ2l0X2hkcl9sZW4gPSBwYXJzZV9naXRfaGVhZGVyKHN0YXRlLCBsaW5lLCBsZW4sIHNpemUsIHBhdGNoKTsKKwkJCWludCBnaXRfaGRyX2xlbiA9IHBhcnNlX2dpdF9kaWZmX2hlYWRlcigmc3RhdGUtPnJvb3QsICZzdGF0ZS0+bGluZW5yLAorCQkJCQkJCQlzdGF0ZS0+cF92YWx1ZSwgbGluZSwgbGVuLAorCQkJCQkJCQlzaXplLCBwYXRjaCk7CiAJCQlpZiAoZ2l0X2hkcl9sZW4gPCAwKQogCQkJCXJldHVybiAtMTI4OwogCQkJaWYgKGdpdF9oZHJfbGVuIDw9IGxlbikKZGlmZiAtLWdpdCBhL2FwcGx5LmggYi9hcHBseS5oCmluZGV4IDU5NDgzNDguLmE3OTUxOTMgMTAwNjQ0Ci0tLSBhL2FwcGx5LmgKKysrIGIvYXBwbHkuaApAQCAtMTE3LDYgKzExNyw0MCBAQAogCWludCBhcHBsaWVkX2FmdGVyX2ZpeGluZ193czsKIH07CiAKKy8qCisgKiBUaGlzIHJlcHJlc2VudHMgYSAicGF0Y2giIHRvIGEgZmlsZSwgYm90aCBtZXRhaW5mbyBjaGFuZ2VzCisgKiBzdWNoIGFzIGNyZWF0aW9uL2RlbGV0aW9uLCBmaWxlbW9kZSBhbmQgY29udGVudCBjaGFuZ2VzIHJlcHJlc2VudGVkCisgKiBhcyBhIHNlcmllcyBvZiBmcmFnbWVudHMuCisgKi8KK3N0cnVjdCBwYXRjaCB7CisJY2hhciAqbmV3X25hbWUsICpvbGRfbmFtZSwgKmRlZl9uYW1lOworCXVuc2lnbmVkIGludCBvbGRfbW9kZSwgbmV3X21vZGU7CisJaW50IGlzX25ldywgaXNfZGVsZXRlOwkvKiAtMSA9IHVua25vd24sIDAgPSBmYWxzZSwgMSA9IHRydWUgKi8KKwlpbnQgcmVqZWN0ZWQ7CisJdW5zaWduZWQgd3NfcnVsZTsKKwlpbnQgbGluZXNfYWRkZWQsIGxpbmVzX2RlbGV0ZWQ7CisJaW50IHNjb3JlOworCWludCBleHRlbnNpb25fbGluZW5yOyAvKiBmaXJzdCBsaW5lIHNwZWNpZnlpbmcgZGVsZXRlL25ldy9yZW5hbWUvY29weSAqLworCXVuc2lnbmVkIGludCBpc190b3BsZXZlbF9yZWxhdGl2ZToxOworCXVuc2lnbmVkIGludCBpbmFjY3VyYXRlX2VvZjoxOworCXVuc2lnbmVkIGludCBpc19iaW5hcnk6MTsKKwl1bnNpZ25lZCBpbnQgaXNfY29weToxOworCXVuc2lnbmVkIGludCBpc19yZW5hbWU6MTsKKwl1bnNpZ25lZCBpbnQgcmVjb3VudDoxOworCXVuc2lnbmVkIGludCBjb25mbGljdGVkX3RocmVld2F5OjE7CisJdW5zaWduZWQgaW50IGRpcmVjdF90b190aHJlZXdheToxOworCXVuc2lnbmVkIGludCBjcmxmX2luX29sZDoxOworCXN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnRzOworCWNoYXIgKnJlc3VsdDsKKwlzaXplX3QgcmVzdWx0c2l6ZTsKKwljaGFyIG9sZF9vaWRfcHJlZml4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwljaGFyIG5ld19vaWRfcHJlZml4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwlzdHJ1Y3QgcGF0Y2ggKm5leHQ7CisKKwkvKiB0aHJlZS13YXkgZmFsbGJhY2sgcmVzdWx0ICovCisJc3RydWN0IG9iamVjdF9pZCB0aHJlZXdheV9zdGFnZVszXTsKK307CisKIGludCBhcHBseV9wYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKIAkJCXN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCiAJCQlpbnQgKmZvcmNlX2FwcGx5LCBpbnQgKm9wdGlvbnMsCkBAIC0xMjgsNiArMTYyLDIwIEBACiBpbnQgY2hlY2tfYXBwbHlfc3RhdGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgaW50IGZvcmNlX2FwcGx5KTsKIAogLyoKKyAqIFBhcnNlIGEgZ2l0IGRpZmYgaGVhZGVyLCBzdGFydGluZyBhdCBsaW5lLiAgRmlsbHMgdGhlIHJlbGV2YW50CisgKiBtZXRhZGF0YSBpbmZvcm1hdGlvbiBpbiAnc3RydWN0IHBhdGNoJy4KKyAqCisgKiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUsIHRoZSBsZW5ndGggb2YgdGhlIHBhcnNlZCBoZWFkZXIgb3RoZXJ3aXNlLgorICovCitpbnQgcGFyc2VfZ2l0X2RpZmZfaGVhZGVyKHN0cnVjdCBzdHJidWYgKnJvb3QsCisJCQkgIGludCAqbGluZW5yLAorCQkJICBpbnQgcF92YWx1ZSwKKwkJCSAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgaW50IGxlbiwKKwkJCSAgdW5zaWduZWQgaW50IHNpemUsCisJCQkgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpOworCisvKgogICogU29tZSBhc3BlY3RzIG9mIHRoZSBhcHBseSBiZWhhdmlvciBhcmUgY29udHJvbGxlZCBieSB0aGUgZm9sbG93aW5nCiAgKiBiaXRzIGluIHRoZSAib3B0aW9ucyIgcGFyYW1ldGVyIHBhc3NlZCB0byBhcHBseV9hbGxfcGF0Y2hlcygpLgogICovCmRpZmYgLS1naXQgYS9hcmNoaXZlLmMgYi9hcmNoaXZlLmMKaW5kZXggNTMxNDFjMS4uYThkYTBmYyAxMDA2NDQKLS0tIGEvYXJjaGl2ZS5jCisrKyBiL2FyY2hpdmUuYwpAQCAtNDE4LDcgKzQxOCw5IEBACiAJCXVuc2lnbmVkIHNob3J0IG1vZGU7CiAJCWludCBlcnI7CiAKLQkJZXJyID0gZ2V0X3RyZWVfZW50cnkoJnRyZWUtPm9iamVjdC5vaWQsIHByZWZpeCwgJnRyZWVfb2lkLAorCQllcnIgPSBnZXRfdHJlZV9lbnRyeShhcl9hcmdzLT5yZXBvLAorCQkJCSAgICAgJnRyZWUtPm9iamVjdC5vaWQsCisJCQkJICAgICBwcmVmaXgsICZ0cmVlX29pZCwKIAkJCQkgICAgICZtb2RlKTsKIAkJaWYgKGVyciB8fCAhU19JU0RJUihtb2RlKSkKIAkJCWRpZShfKCJjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVudHJhY2tlZCIpKTsKZGlmZiAtLWdpdCBhL2JsYW1lLmMgYi9ibGFtZS5jCmluZGV4IDE0NWVhZjIuLjM2YTJlN2UgMTAwNjQ0Ci0tLSBhL2JsYW1lLmMKKysrIGIvYmxhbWUuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCXN0cnVjdCBvYmplY3RfaWQgYmxvYl9vaWQ7CiAJCXVuc2lnbmVkIHNob3J0IG1vZGU7CiAKLQkJaWYgKCFnZXRfdHJlZV9lbnRyeShjb21taXRfb2lkLCBwYXRoLCAmYmxvYl9vaWQsICZtb2RlKSAmJgorCQlpZiAoIWdldF90cmVlX2VudHJ5KHIsIGNvbW1pdF9vaWQsIHBhdGgsICZibG9iX29pZCwgJm1vZGUpICYmCiAJCSAgICBvaWRfb2JqZWN0X2luZm8ociwgJmJsb2Jfb2lkLCBOVUxMKSA9PSBPQkpfQkxPQikKIAkJCXJldHVybjsKIAl9CkBAIC0zMTEsMTIgKzMxMSw3MDcgQEAKIAlyZXR1cm4geGRpX2RpZmYoZmlsZV9hLCBmaWxlX2IsICZ4cHAsICZ4ZWNmZywgJmVjYik7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfbmV4dF9saW5lKGNvbnN0IGNoYXIgKnN0YXJ0LCBjb25zdCBjaGFyICplbmQpCit7CisJY29uc3QgY2hhciAqbmwgPSBtZW1jaHIoc3RhcnQsICdcbicsIGVuZCAtIHN0YXJ0KTsKKworCXJldHVybiBubCA/IG5sICsgMSA6IGVuZDsKK30KKworc3RhdGljIGludCBmaW5kX2xpbmVfc3RhcnRzKGludCAqKmxpbmVfc3RhcnRzLCBjb25zdCBjaGFyICpidWYsCisJCQkgICAgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJY29uc3QgY2hhciAqZW5kID0gYnVmICsgbGVuOworCWNvbnN0IGNoYXIgKnA7CisJaW50ICpsaW5lbm87CisJaW50IG51bSA9IDA7CisKKwlmb3IgKHAgPSBidWY7IHAgPCBlbmQ7IHAgPSBnZXRfbmV4dF9saW5lKHAsIGVuZCkpCisJCW51bSsrOworCisJQUxMT0NfQVJSQVkoKmxpbmVfc3RhcnRzLCBudW0gKyAxKTsKKwlsaW5lbm8gPSAqbGluZV9zdGFydHM7CisKKwlmb3IgKHAgPSBidWY7IHAgPCBlbmQ7IHAgPSBnZXRfbmV4dF9saW5lKHAsIGVuZCkpCisJCSpsaW5lbm8rKyA9IHAgLSBidWY7CisKKwkqbGluZW5vID0gbGVuOworCisJcmV0dXJuIG51bTsKK30KKworc3RydWN0IGZpbmdlcnByaW50X2VudHJ5OworCisvKiBBIGZpbmdlcnByaW50IGlzIGludGVuZGVkIHRvIGxvb3NlbHkgcmVwcmVzZW50IGEgc3RyaW5nLCBzdWNoIHRoYXQgdHdvCisgKiBmaW5nZXJwcmludHMgY2FuIGJlIHF1aWNrbHkgY29tcGFyZWQgdG8gZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBzaW1pbGFyaXR5CisgKiBvZiB0aGUgc3RyaW5ncyB0aGF0IHRoZXkgcmVwcmVzZW50LgorICoKKyAqIEEgZmluZ2VycHJpbnQgaXMgcmVwcmVzZW50ZWQgYXMgYSBtdWx0aXNldCBvZiB0aGUgbG93ZXItY2FzZWQgYnl0ZSBwYWlycyBpbgorICogdGhlIHN0cmluZyB0aGF0IGl0IHJlcHJlc2VudHMuIFdoaXRlc3BhY2UgaXMgYWRkZWQgYXQgZWFjaCBlbmQgb2YgdGhlCisgKiBzdHJpbmcuIFdoaXRlc3BhY2UgcGFpcnMgYXJlIGlnbm9yZWQuIFdoaXRlc3BhY2UgaXMgY29udmVydGVkIHRvICdcMCcuCisgKiBGb3IgZXhhbXBsZSwgdGhlIHN0cmluZyAiRGFydGggICBSYWRhciIgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIGZvbGxvd2luZworICogZmluZ2VycHJpbnQ6CisgKiB7IlwwZCIsICJkYSIsICJkYSIsICJhciIsICJhciIsICJydCIsICJ0aCIsICJoXDAiLCAiXDByIiwgInJhIiwgImFkIiwgInJcMCJ9CisgKgorICogVGhlIHNpbWlsYXJpdHkgYmV0d2VlbiB0d28gZmluZ2VycHJpbnRzIGlzIHRoZSBzaXplIG9mIHRoZSBpbnRlcnNlY3Rpb24gb2YKKyAqIHRoZWlyIG11bHRpc2V0cywgaW5jbHVkaW5nIHJlcGVhdGVkIGVsZW1lbnRzLiBTZWUgZmluZ2VycHJpbnRfc2ltaWxhcml0eSBmb3IKKyAqIGV4YW1wbGVzLgorICoKKyAqIEZvciBlYXNlIG9mIGltcGxlbWVudGF0aW9uLCB0aGUgZmluZ2VycHJpbnQgaXMgaW1wbGVtZW50ZWQgYXMgYSBtYXAKKyAqIG9mIGJ5dGUgcGFpcnMgdG8gdGhlIGNvdW50IG9mIHRoYXQgYnl0ZSBwYWlyIGluIHRoZSBzdHJpbmcsIGluc3RlYWQgb2YKKyAqIGFsbG93aW5nIHJlcGVhdGVkIGVsZW1lbnRzIGluIGEgc2V0LgorICovCitzdHJ1Y3QgZmluZ2VycHJpbnQgeworCXN0cnVjdCBoYXNobWFwIG1hcDsKKwkvKiBBcyB3ZSBrbm93IHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIGFkdmFuY2UsIGl0J3MKKwkgKiBjb252ZW5pZW50IHRvIHN0b3JlIHRoZSBlbnRyaWVzIGluIGEgc2luZ2xlIGFycmF5IGluc3RlYWQgb2YgaGF2aW5nCisJICogdGhlIGhhc2htYXAgbWFuYWdlIHRoZSBtZW1vcnkuCisJICovCisJc3RydWN0IGZpbmdlcnByaW50X2VudHJ5ICplbnRyaWVzOworfTsKKworLyogQSBieXRlIHBhaXIgaW4gYSBmaW5nZXJwcmludC4gU3RvcmVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGJ5dGUgcGFpcgorICogb2NjdXJzIGluIHRoZSBzdHJpbmcgdGhhdCB0aGUgZmluZ2VycHJpbnQgcmVwcmVzZW50cy4KKyAqLworc3RydWN0IGZpbmdlcnByaW50X2VudHJ5IHsKKwkvKiBUaGUgaGFzaG1hcCBlbnRyeSAtIHRoZSBoYXNoIHJlcHJlc2VudHMgdGhlIGJ5dGUgcGFpciBpbiBpdHMKKwkgKiBlbnRpcmV0eSBzbyB3ZSBkb24ndCBuZWVkIHRvIHN0b3JlIHRoZSBieXRlIHBhaXIgc2VwYXJhdGVseS4KKwkgKi8KKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwkvKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBieXRlIHBhaXIgb2NjdXJzIGluIHRoZSBzdHJpbmcgdGhhdCB0aGUKKwkgKiBmaW5nZXJwcmludCByZXByZXNlbnRzLgorCSAqLworCWludCBjb3VudDsKK307CisKKy8qIFNlZSBgc3RydWN0IGZpbmdlcnByaW50YCBmb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2hhdCBhIGZpbmdlcnByaW50IGlzLgorICogXHBhcmFtIHJlc3VsdCB0aGUgZmluZ2VycHJpbnQgb2YgdGhlIHN0cmluZyBpcyBzdG9yZWQgaGVyZS4gVGhpcyBtdXN0IGJlCisgKiAJCSBmcmVlZCBsYXRlciB1c2luZyBmcmVlX2ZpbmdlcnByaW50LgorICogXHBhcmFtIGxpbmVfYmVnaW4gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcKKyAqIFxwYXJhbSBsaW5lX2VuZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKKyAqLworc3RhdGljIHZvaWQgZ2V0X2ZpbmdlcnByaW50KHN0cnVjdCBmaW5nZXJwcmludCAqcmVzdWx0LAorCQkJICAgIGNvbnN0IGNoYXIgKmxpbmVfYmVnaW4sCisJCQkgICAgY29uc3QgY2hhciAqbGluZV9lbmQpCit7CisJdW5zaWduZWQgaW50IGhhc2gsIGMwID0gMCwgYzE7CisJY29uc3QgY2hhciAqcDsKKwlpbnQgbWF4X21hcF9lbnRyeV9jb3VudCA9IDEgKyBsaW5lX2VuZCAtIGxpbmVfYmVnaW47CisJc3RydWN0IGZpbmdlcnByaW50X2VudHJ5ICplbnRyeSA9IHhjYWxsb2MobWF4X21hcF9lbnRyeV9jb3VudCwKKwkJc2l6ZW9mKHN0cnVjdCBmaW5nZXJwcmludF9lbnRyeSkpOworCXN0cnVjdCBmaW5nZXJwcmludF9lbnRyeSAqZm91bmRfZW50cnk7CisKKwloYXNobWFwX2luaXQoJnJlc3VsdC0+bWFwLCBOVUxMLCBOVUxMLCBtYXhfbWFwX2VudHJ5X2NvdW50KTsKKwlyZXN1bHQtPmVudHJpZXMgPSBlbnRyeTsKKwlmb3IgKHAgPSBsaW5lX2JlZ2luOyBwIDw9IGxpbmVfZW5kOyArK3AsIGMwID0gYzEpIHsKKwkJLyogQWx3YXlzIHRlcm1pbmF0ZSB0aGUgc3RyaW5nIHdpdGggd2hpdGVzcGFjZS4KKwkJICogTm9ybWFsaXNlIHdoaXRlc3BhY2UgdG8gMCwgYW5kIG5vcm1hbGlzZSBsZXR0ZXJzIHRvCisJCSAqIGxvd2VyIGNhc2UuIFRoaXMgd29uJ3Qgd29yayBmb3IgbXVsdGlieXRlIGNoYXJhY3RlcnMgYnV0IGF0CisJCSAqIHdvcnN0IHdpbGwgbWF0Y2ggc29tZSB1bnJlbGF0ZWQgY2hhcmFjdGVycy4KKwkJICovCisJCWlmICgocCA9PSBsaW5lX2VuZCkgfHwgaXNzcGFjZSgqcCkpCisJCQljMSA9IDA7CisJCWVsc2UKKwkJCWMxID0gdG9sb3dlcigqcCk7CisJCWhhc2ggPSBjMCB8IChjMSA8PCA4KTsKKwkJLyogSWdub3JlIHdoaXRlc3BhY2UgcGFpcnMgKi8KKwkJaWYgKGhhc2ggPT0gMCkKKwkJCWNvbnRpbnVlOworCQloYXNobWFwX2VudHJ5X2luaXQoZW50cnksIGhhc2gpOworCisJCWZvdW5kX2VudHJ5ID0gaGFzaG1hcF9nZXQoJnJlc3VsdC0+bWFwLCBlbnRyeSwgTlVMTCk7CisJCWlmIChmb3VuZF9lbnRyeSkgeworCQkJZm91bmRfZW50cnktPmNvdW50ICs9IDE7CisJCX0gZWxzZSB7CisJCQllbnRyeS0+Y291bnQgPSAxOworCQkJaGFzaG1hcF9hZGQoJnJlc3VsdC0+bWFwLCBlbnRyeSk7CisJCQkrK2VudHJ5OworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2ZpbmdlcnByaW50KHN0cnVjdCBmaW5nZXJwcmludCAqZikKK3sKKwloYXNobWFwX2ZyZWUoJmYtPm1hcCwgMCk7CisJZnJlZShmLT5lbnRyaWVzKTsKK30KKworLyogQ2FsY3VsYXRlcyB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIHR3byBmaW5nZXJwcmludHMgYXMgdGhlIHNpemUgb2YgdGhlCisgKiBpbnRlcnNlY3Rpb24gb2YgdGhlaXIgbXVsdGlzZXRzLCBpbmNsdWRpbmcgcmVwZWF0ZWQgZWxlbWVudHMuIFNlZQorICogYHN0cnVjdCBmaW5nZXJwcmludGAgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBmaW5nZXJwcmludCByZXByZXNlbnRhdGlvbi4KKyAqIFRoZSBzaW1pbGFyaXR5IGJldHdlZW4gImNhdCBtYXQiIGFuZCAiZmF0aGVyIHJhdGhlciIgaXMgMiBiZWNhdXNlICJhdCIgaXMKKyAqIHByZXNlbnQgdHdpY2UgaW4gYm90aCBzdHJpbmdzIHdoaWxlIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gInRpbSIgYW5kICJtaXQiCisgKiBpcyAwLgorICovCitzdGF0aWMgaW50IGZpbmdlcnByaW50X3NpbWlsYXJpdHkoc3RydWN0IGZpbmdlcnByaW50ICphLCBzdHJ1Y3QgZmluZ2VycHJpbnQgKmIpCit7CisJaW50IGludGVyc2VjdGlvbiA9IDA7CisJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCWNvbnN0IHN0cnVjdCBmaW5nZXJwcmludF9lbnRyeSAqZW50cnlfYSwgKmVudHJ5X2I7CisKKwloYXNobWFwX2l0ZXJfaW5pdCgmYi0+bWFwLCAmaXRlcik7CisKKwl3aGlsZSAoKGVudHJ5X2IgPSBoYXNobWFwX2l0ZXJfbmV4dCgmaXRlcikpKSB7CisJCWlmICgoZW50cnlfYSA9IGhhc2htYXBfZ2V0KCZhLT5tYXAsIGVudHJ5X2IsIE5VTEwpKSkgeworCQkJaW50ZXJzZWN0aW9uICs9IGVudHJ5X2EtPmNvdW50IDwgZW50cnlfYi0+Y291bnQgPworCQkJCQllbnRyeV9hLT5jb3VudCA6IGVudHJ5X2ItPmNvdW50OworCQl9CisJfQorCXJldHVybiBpbnRlcnNlY3Rpb247Cit9CisKKy8qIFN1YnRyYWN0cyBieXRlLXBhaXIgZWxlbWVudHMgaW4gQiBmcm9tIEEsIG1vZGlmeWluZyBBIGluIHBsYWNlLgorICovCitzdGF0aWMgdm9pZCBmaW5nZXJwcmludF9zdWJ0cmFjdChzdHJ1Y3QgZmluZ2VycHJpbnQgKmEsIHN0cnVjdCBmaW5nZXJwcmludCAqYikKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJc3RydWN0IGZpbmdlcnByaW50X2VudHJ5ICplbnRyeV9hOworCWNvbnN0IHN0cnVjdCBmaW5nZXJwcmludF9lbnRyeSAqZW50cnlfYjsKKworCWhhc2htYXBfaXRlcl9pbml0KCZiLT5tYXAsICZpdGVyKTsKKworCXdoaWxlICgoZW50cnlfYiA9IGhhc2htYXBfaXRlcl9uZXh0KCZpdGVyKSkpIHsKKwkJaWYgKChlbnRyeV9hID0gaGFzaG1hcF9nZXQoJmEtPm1hcCwgZW50cnlfYiwgTlVMTCkpKSB7CisJCQlpZiAoZW50cnlfYS0+Y291bnQgPD0gZW50cnlfYi0+Y291bnQpCisJCQkJaGFzaG1hcF9yZW1vdmUoJmEtPm1hcCwgZW50cnlfYiwgTlVMTCk7CisJCQllbHNlCisJCQkJZW50cnlfYS0+Y291bnQgLT0gZW50cnlfYi0+Y291bnQ7CisJCX0KKwl9Cit9CisKKy8qIENhbGN1bGF0ZSBmaW5nZXJwcmludHMgZm9yIGEgc2VyaWVzIG9mIGxpbmVzLgorICogUHV0cyB0aGUgZmluZ2VycHJpbnRzIGluIHRoZSBmaW5nZXJwcmludHMgYXJyYXksIHdoaWNoIG11c3QgaGF2ZSBiZWVuCisgKiBwcmVhbGxvY2F0ZWQgdG8gYWxsb3cgc3RvcmluZyBsaW5lX2NvdW50IGVsZW1lbnRzLgorICovCitzdGF0aWMgdm9pZCBnZXRfbGluZV9maW5nZXJwcmludHMoc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHMsCisJCQkJICBjb25zdCBjaGFyICpjb250ZW50LCBjb25zdCBpbnQgKmxpbmVfc3RhcnRzLAorCQkJCSAgbG9uZyBmaXJzdF9saW5lLCBsb25nIGxpbmVfY291bnQpCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqbGluZXN0YXJ0LCAqbGluZWVuZDsKKworCWxpbmVfc3RhcnRzICs9IGZpcnN0X2xpbmU7CisJZm9yIChpID0gMDsgaSA8IGxpbmVfY291bnQ7ICsraSkgeworCQlsaW5lc3RhcnQgPSBjb250ZW50ICsgbGluZV9zdGFydHNbaV07CisJCWxpbmVlbmQgPSBjb250ZW50ICsgbGluZV9zdGFydHNbaSArIDFdOworCQlnZXRfZmluZ2VycHJpbnQoZmluZ2VycHJpbnRzICsgaSwgbGluZXN0YXJ0LCBsaW5lZW5kKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbGluZV9maW5nZXJwcmludHMoc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHMsCisJCQkJICAgaW50IG5yX2ZpbmdlcnByaW50cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9maW5nZXJwcmludHM7IGkrKykKKwkJZnJlZV9maW5nZXJwcmludCgmZmluZ2VycHJpbnRzW2ldKTsKK30KKworLyogVGhpcyBjb250YWlucyB0aGUgZGF0YSBuZWNlc3NhcnkgdG8gbGluZWFybHkgbWFwIGEgbGluZSBudW1iZXIgaW4gb25lIGhhbGYKKyAqIG9mIGEgZGlmZiBjaHVuayB0byB0aGUgbGluZSBpbiB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgZGlmZiBjaHVuayB0aGF0IGlzCisgKiBjbG9zZXN0IGluIHRlcm1zIG9mIGl0cyBwb3NpdGlvbiBhcyBhIGZyYWN0aW9uIG9mIHRoZSBsZW5ndGggb2YgdGhlIGNodW5rLgorICovCitzdHJ1Y3QgbGluZV9udW1iZXJfbWFwcGluZyB7CisJaW50IGRlc3RpbmF0aW9uX3N0YXJ0LCBkZXN0aW5hdGlvbl9sZW5ndGgsCisJCXNvdXJjZV9zdGFydCwgc291cmNlX2xlbmd0aDsKK307CisKKy8qIEdpdmVuIGEgbGluZSBudW1iZXIgaW4gb25lIHJhbmdlLCBvZmZzZXQgYW5kIHNjYWxlIGl0IHRvIG1hcCBpdCBvbnRvIHRoZQorICogb3RoZXIgcmFuZ2UuCisgKiBFc3NlbnRpYWxseSB0aGlzIG1hcHBpbmcgaXMgYSBzaW1wbGUgbGluZWFyIGVxdWF0aW9uIGJ1dCB0aGUgY2FsY3VsYXRpb24gaXMKKyAqIG1vcmUgY29tcGxpY2F0ZWQgdG8gYWxsb3cgcGVyZm9ybWluZyBpdCB3aXRoIGludGVnZXIgb3BlcmF0aW9ucy4KKyAqIEFub3RoZXIgY29tcGxpY2F0aW9uIGlzIHRoYXQgaWYgYSBsaW5lIGNvdWxkIG1hcCBvbnRvIG1hbnkgbGluZXMgaW4gdGhlCisgKiBkZXN0aW5hdGlvbiByYW5nZSB0aGVuIHdlIHdhbnQgdG8gY2hvb3NlIHRoZSBsaW5lIGF0IHRoZSBjZW50ZXIgb2YgdGhvc2UKKyAqIHBvc3NpYmlsaXRpZXMuCisgKiBFeGFtcGxlOiBpZiB0aGUgY2h1bmsgaXMgMiBsaW5lcyBsb25nIGluIEEgYW5kIDEwIGxpbmVzIGxvbmcgaW4gQiB0aGVuIHRoZQorICogZmlyc3QgNSBsaW5lcyBpbiBCIHdpbGwgbWFwIG9udG8gdGhlIGZpcnN0IGxpbmUgaW4gdGhlIEEgY2h1bmssIHdoaWxlIHRoZQorICogbGFzdCA1IGxpbmVzIHdpbGwgYWxsIG1hcCBvbnRvIHRoZSBzZWNvbmQgbGluZSBpbiB0aGUgQSBjaHVuay4KKyAqIEV4YW1wbGU6IGlmIHRoZSBjaHVuayBpcyAxMCBsaW5lcyBsb25nIGluIEEgYW5kIDIgbGluZXMgbG9uZyBpbiBCIHRoZW4gbGluZQorICogMCBpbiBCIHdpbGwgbWFwIG9udG8gbGluZSAyIGluIEEsIGFuZCBsaW5lIDEgaW4gQiB3aWxsIG1hcCBvbnRvIGxpbmUgNyBpbiBBLgorICovCitzdGF0aWMgaW50IG1hcF9saW5lX251bWJlcihpbnQgbGluZV9udW1iZXIsCisJY29uc3Qgc3RydWN0IGxpbmVfbnVtYmVyX21hcHBpbmcgKm1hcHBpbmcpCit7CisJcmV0dXJuICgobGluZV9udW1iZXIgLSBtYXBwaW5nLT5zb3VyY2Vfc3RhcnQpICogMiArIDEpICoKKwkgICAgICAgbWFwcGluZy0+ZGVzdGluYXRpb25fbGVuZ3RoIC8KKwkgICAgICAgKG1hcHBpbmctPnNvdXJjZV9sZW5ndGggKiAyKSArCisJICAgICAgIG1hcHBpbmctPmRlc3RpbmF0aW9uX3N0YXJ0OworfQorCisvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50IHN0b3JpbmcgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBhIGxpbmUgaW4gQQorICogYW5kIGEgbGluZSBpbiBCLgorICoKKyAqIFRoZSBzaW1pbGFyaXRpZXMgYXJlIHN0b3JlZCBpbiBhIDItZGltZW5zaW9uYWwgYXJyYXkuIEVhY2ggInJvdyIgaW4gdGhlCisgKiBhcnJheSBjb250YWlucyB0aGUgc2ltaWxhcml0aWVzIGZvciBhIGxpbmUgaW4gQi4gVGhlIHNpbWlsYXJpdGllcyBzdG9yZWQgaW4KKyAqIGEgcm93IGFyZSB0aGUgc2ltaWxhcml0aWVzIGJldHdlZW4gdGhlIGxpbmUgaW4gQiBhbmQgdGhlIG5lYXJieSBsaW5lcyBpbiBBLgorICogVG8ga2VlcCB0aGUgbGVuZ3RoIG9mIGVhY2ggcm93IHRoZSBzYW1lLCBpdCBpcyBwYWRkZWQgb3V0IHdpdGggdmFsdWVzIG9mIC0xCisgKiB3aGVyZSB0aGUgc2VhcmNoIHJhbmdlIGV4dGVuZHMgYmV5b25kIHRoZSBsaW5lcyBpbiBBLgorICogRm9yIGV4YW1wbGUsIGlmIG1heF9zZWFyY2hfZGlzdGFuY2VfYSBpcyAyIGFuZCB0aGUgdHdvIHNpZGVzIG9mIGEgZGlmZiBjaHVuaworICogbG9vayBsaWtlIHRoaXM6CisgKiBhIHwgbQorICogYiB8IG4KKyAqIGMgfCBvCisgKiBkIHwgcAorICogZSB8IHEKKyAqIFRoZW4gdGhlIHNpbWlsYXJpdHkgYXJyYXkgd2lsbCBjb250YWluOgorICogWy0xLCAtMSwgYW0sIGJtLCBjbSwKKyAqICAtMSwgYW4sIGJuLCBjbiwgZG4sCisgKiAgYW8sIGJvLCBjbywgZG8sIGVvLAorICogIGJwLCBjcCwgZHAsIGVwLCAtMSwKKyAqICBjcSwgZHEsIGVxLCAtMSwgLTFdCisgKiBXaGVyZSBzaW1pbGFyaXRpZXMgYXJlIGRlbm90ZWQgZWl0aGVyIGJ5IC0xIGZvciBpbnZhbGlkLCBvciB0aGUKKyAqIGNvbmNhdGVuYXRpb24gb2YgdGhlIHR3byBsaW5lcyBpbiB0aGUgZGlmZiBiZWluZyBjb21wYXJlZC4KKyAqCisgKiBccGFyYW0gc2ltaWxhcml0aWVzIGFycmF5IG9mIHNpbWlsYXJpdGllcyBiZXR3ZWVuIGxpbmVzIGluIEEgYW5kIEIKKyAqIFxwYXJhbSBsaW5lX2EgdGhlIGluZGV4IG9mIHRoZSBsaW5lIGluIEEsIGluIHRoZSBzYW1lIGZyYW1lIG9mIHJlZmVyZW5jZSBhcworICoJY2xvc2VzdF9saW5lX2EuCisgKiBccGFyYW0gbG9jYWxfbGluZV9iIHRoZSBpbmRleCBvZiB0aGUgbGluZSBpbiBCLCByZWxhdGl2ZSB0byB0aGUgZmlyc3QgbGluZQorICoJCSAgICAgICBpbiBCIHRoYXQgc2ltaWxhcml0aWVzIHJlcHJlc2VudHMuCisgKiBccGFyYW0gY2xvc2VzdF9saW5lX2EgdGhlIGluZGV4IG9mIHRoZSBsaW5lIGluIEEgdGhhdCBpcyBkZWVtZWQgdG8gYmUKKyAqCQkJIGNsb3Nlc3QgdG8gbG9jYWxfbGluZV9iLiBUaGlzIG11c3QgYmUgaW4gdGhlIHNhbWUKKyAqCQkJIGZyYW1lIG9mIHJlZmVyZW5jZSBhcyBsaW5lX2EuIFRoaXMgdmFsdWUgZGVmaW5lcworICoJCQkgd2hlcmUgc2ltaWxhcml0aWVzIGlzIGNlbnRlcmVkIGZvciB0aGUgbGluZSBpbiBCLgorICogXHBhcmFtIG1heF9zZWFyY2hfZGlzdGFuY2VfYSBtYXhpbXVtIGRpc3RhbmNlIGluIGxpbmVzIGZyb20gdGhlIGNsb3Nlc3QgbGluZQorICogCQkJCWluIEEgZm9yIG90aGVyIGxpbmVzIGluIEEgZm9yIHdoaWNoCisgKiAJCQkJc2ltaWxhcml0aWVzIG1heSBiZSBjYWxjdWxhdGVkLgorICovCitzdGF0aWMgaW50ICpnZXRfc2ltaWxhcml0eShpbnQgKnNpbWlsYXJpdGllcywKKwkJCSAgIGludCBsaW5lX2EsIGludCBsb2NhbF9saW5lX2IsCisJCQkgICBpbnQgY2xvc2VzdF9saW5lX2EsIGludCBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EpCit7CisJYXNzZXJ0KGFicyhsaW5lX2EgLSBjbG9zZXN0X2xpbmVfYSkgPD0KKwkgICAgICAgbWF4X3NlYXJjaF9kaXN0YW5jZV9hKTsKKwlyZXR1cm4gc2ltaWxhcml0aWVzICsgbGluZV9hIC0gY2xvc2VzdF9saW5lX2EgKworCSAgICAgICBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgKworCSAgICAgICBsb2NhbF9saW5lX2IgKiAobWF4X3NlYXJjaF9kaXN0YW5jZV9hICogMiArIDEpOworfQorCisjZGVmaW5lIENFUlRBSU5fTk9USElOR19NQVRDSEVTIC0yCisjZGVmaW5lIENFUlRBSU5UWV9OT1RfQ0FMQ1VMQVRFRCAtMQorCisvKiBHaXZlbiBhIGxpbmUgaW4gQiwgZmlyc3QgY2FsY3VsYXRlIGl0cyBzaW1pbGFyaXRpZXMgd2l0aCBuZWFyYnkgbGluZXMgaW4gQQorICogaWYgbm90IGFscmVhZHkgY2FsY3VsYXRlZCwgdGhlbiBpZGVudGlmeSB0aGUgbW9zdCBzaW1pbGFyIGFuZCBzZWNvbmQgbW9zdAorICogc2ltaWxhciBsaW5lcy4gVGhlICJjZXJ0YWludHkiIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhvc2UgdHdvCisgKiBzaW1pbGFyaXRpZXMuCisgKgorICogXHBhcmFtIHN0YXJ0X2EgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjaHVuayBpbiBBCisgKiBccGFyYW0gbGVuZ3RoX2EgdGhlIGxlbmd0aCBpbiBsaW5lcyBvZiB0aGUgY2h1bmsgaW4gQQorICogXHBhcmFtIGxvY2FsX2xpbmVfYiB0aGUgaW5kZXggb2YgdGhlIGxpbmUgaW4gQiwgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IGxpbmUKKyAqIAkJICAgICAgIGluIHRoZSBjaHVuay4KKyAqIFxwYXJhbSBmaW5nZXJwcmludHNfYSBhcnJheSBvZiBmaW5nZXJwcmludHMgZm9yIHRoZSBjaHVuayBpbiBBCisgKiBccGFyYW0gZmluZ2VycHJpbnRzX2IgYXJyYXkgb2YgZmluZ2VycHJpbnRzIGZvciB0aGUgY2h1bmsgaW4gQgorICogXHBhcmFtIHNpbWlsYXJpdGllcyAyLWRpbWVuc2lvbmFsIGFycmF5IG9mIHNpbWlsYXJpdGllcyBiZXR3ZWVuIGxpbmVzIGluIEEKKyAqIAkJICAgICAgIGFuZCBCLiBTZWUgZ2V0X3NpbWlsYXJpdHkoKSBmb3IgbW9yZSBkZXRhaWxzLgorICogXHBhcmFtIGNlcnRhaW50aWVzIGFycmF5IG9mIHZhbHVlcyBpbmRpY2F0aW5nIGhvdyBzdHJvbmdseSBhIGxpbmUgaW4gQiBpcworICogCQkgICAgICBtYXRjaGVkIHdpdGggc29tZSBsaW5lIGluIEEuCisgKiBccGFyYW0gc2Vjb25kX2Jlc3RfcmVzdWx0IGFycmF5IG9mIGFic29sdXRlIGluZGljZXMgaW4gQSBmb3IgdGhlIHNlY29uZAorICogCQkJICAgICBjbG9zZXN0IG1hdGNoIG9mIGEgbGluZSBpbiBCLgorICogXHBhcmFtIHJlc3VsdCBhcnJheSBvZiBhYnNvbHV0ZSBpbmRpY2VzIGluIEEgZm9yIHRoZSBjbG9zZXN0IG1hdGNoIG9mIGEgbGluZQorICogCQkgaW4gQi4KKyAqIFxwYXJhbSBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgbWF4aW11bSBkaXN0YW5jZSBpbiBsaW5lcyBmcm9tIHRoZSBjbG9zZXN0IGxpbmUKKyAqIAkJCQlpbiBBIGZvciBvdGhlciBsaW5lcyBpbiBBIGZvciB3aGljaAorICogCQkJCXNpbWlsYXJpdGllcyBtYXkgYmUgY2FsY3VsYXRlZC4KKyAqIFxwYXJhbSBtYXBfbGluZV9udW1iZXJfaW5fYl90b19hIHBhcmFtZXRlciB0byBtYXBfbGluZV9udW1iZXIoKS4KKyAqLworc3RhdGljIHZvaWQgZmluZF9iZXN0X2xpbmVfbWF0Y2hlcygKKwlpbnQgc3RhcnRfYSwKKwlpbnQgbGVuZ3RoX2EsCisJaW50IHN0YXJ0X2IsCisJaW50IGxvY2FsX2xpbmVfYiwKKwlzdHJ1Y3QgZmluZ2VycHJpbnQgKmZpbmdlcnByaW50c19hLAorCXN0cnVjdCBmaW5nZXJwcmludCAqZmluZ2VycHJpbnRzX2IsCisJaW50ICpzaW1pbGFyaXRpZXMsCisJaW50ICpjZXJ0YWludGllcywKKwlpbnQgKnNlY29uZF9iZXN0X3Jlc3VsdCwKKwlpbnQgKnJlc3VsdCwKKwljb25zdCBpbnQgbWF4X3NlYXJjaF9kaXN0YW5jZV9hLAorCWNvbnN0IHN0cnVjdCBsaW5lX251bWJlcl9tYXBwaW5nICptYXBfbGluZV9udW1iZXJfaW5fYl90b19hKQoreworCisJaW50IGksIHNlYXJjaF9zdGFydCwgc2VhcmNoX2VuZCwgY2xvc2VzdF9sb2NhbF9saW5lX2EsICpzaW1pbGFyaXR5LAorCQliZXN0X3NpbWlsYXJpdHkgPSAwLCBzZWNvbmRfYmVzdF9zaW1pbGFyaXR5ID0gMCwKKwkJYmVzdF9zaW1pbGFyaXR5X2luZGV4ID0gMCwgc2Vjb25kX2Jlc3Rfc2ltaWxhcml0eV9pbmRleCA9IDA7CisKKwkvKiBjZXJ0YWludHkgaGFzIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIG5vIG5lZWQgdG8gcmVkbyB0aGUgd29yayAqLworCWlmIChjZXJ0YWludGllc1tsb2NhbF9saW5lX2JdICE9IENFUlRBSU5UWV9OT1RfQ0FMQ1VMQVRFRCkKKwkJcmV0dXJuOworCisJY2xvc2VzdF9sb2NhbF9saW5lX2EgPSBtYXBfbGluZV9udW1iZXIoCisJCWxvY2FsX2xpbmVfYiArIHN0YXJ0X2IsIG1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpIC0gc3RhcnRfYTsKKworCXNlYXJjaF9zdGFydCA9IGNsb3Nlc3RfbG9jYWxfbGluZV9hIC0gbWF4X3NlYXJjaF9kaXN0YW5jZV9hOworCWlmIChzZWFyY2hfc3RhcnQgPCAwKQorCQlzZWFyY2hfc3RhcnQgPSAwOworCisJc2VhcmNoX2VuZCA9IGNsb3Nlc3RfbG9jYWxfbGluZV9hICsgbWF4X3NlYXJjaF9kaXN0YW5jZV9hICsgMTsKKwlpZiAoc2VhcmNoX2VuZCA+IGxlbmd0aF9hKQorCQlzZWFyY2hfZW5kID0gbGVuZ3RoX2E7CisKKwlmb3IgKGkgPSBzZWFyY2hfc3RhcnQ7IGkgPCBzZWFyY2hfZW5kOyArK2kpIHsKKwkJc2ltaWxhcml0eSA9IGdldF9zaW1pbGFyaXR5KHNpbWlsYXJpdGllcywKKwkJCQkJICAgIGksIGxvY2FsX2xpbmVfYiwKKwkJCQkJICAgIGNsb3Nlc3RfbG9jYWxfbGluZV9hLAorCQkJCQkgICAgbWF4X3NlYXJjaF9kaXN0YW5jZV9hKTsKKwkJaWYgKCpzaW1pbGFyaXR5ID09IC0xKSB7CisJCQkvKiBUaGlzIHZhbHVlIHdpbGwgbmV2ZXIgZXhjZWVkIDEwIGJ1dCBhc3NlcnQganVzdCBpbgorCQkJICogY2FzZQorCQkJICovCisJCQlhc3NlcnQoYWJzKGkgLSBjbG9zZXN0X2xvY2FsX2xpbmVfYSkgPCAxMDAwKTsKKwkJCS8qIHNjYWxlIHRoZSBzaW1pbGFyaXR5IGJ5ICgxMDAwIC0gZGlzdGFuY2UgZnJvbQorCQkJICogY2xvc2VzdCBsaW5lKSB0byBhY3QgYXMgYSB0aWUgYnJlYWsgYmV0d2VlbiBsaW5lcworCQkJICogdGhhdCBvdGhlcndpc2UgYXJlIGVxdWFsbHkgc2ltaWxhci4KKwkJCSAqLworCQkJKnNpbWlsYXJpdHkgPSBmaW5nZXJwcmludF9zaW1pbGFyaXR5KAorCQkJCWZpbmdlcnByaW50c19iICsgbG9jYWxfbGluZV9iLAorCQkJCWZpbmdlcnByaW50c19hICsgaSkgKgorCQkJCSgxMDAwIC0gYWJzKGkgLSBjbG9zZXN0X2xvY2FsX2xpbmVfYSkpOworCQl9CisJCWlmICgqc2ltaWxhcml0eSA+IGJlc3Rfc2ltaWxhcml0eSkgeworCQkJc2Vjb25kX2Jlc3Rfc2ltaWxhcml0eSA9IGJlc3Rfc2ltaWxhcml0eTsKKwkJCXNlY29uZF9iZXN0X3NpbWlsYXJpdHlfaW5kZXggPSBiZXN0X3NpbWlsYXJpdHlfaW5kZXg7CisJCQliZXN0X3NpbWlsYXJpdHkgPSAqc2ltaWxhcml0eTsKKwkJCWJlc3Rfc2ltaWxhcml0eV9pbmRleCA9IGk7CisJCX0gZWxzZSBpZiAoKnNpbWlsYXJpdHkgPiBzZWNvbmRfYmVzdF9zaW1pbGFyaXR5KSB7CisJCQlzZWNvbmRfYmVzdF9zaW1pbGFyaXR5ID0gKnNpbWlsYXJpdHk7CisJCQlzZWNvbmRfYmVzdF9zaW1pbGFyaXR5X2luZGV4ID0gaTsKKwkJfQorCX0KKworCWlmIChiZXN0X3NpbWlsYXJpdHkgPT0gMCkgeworCQkvKiB0aGlzIGxpbmUgZGVmaW5pdGVseSBkb2Vzbid0IG1hdGNoIHdpdGggYW55dGhpbmcuIE1hcmsgaXQKKwkJICogd2l0aCB0aGlzIHNwZWNpYWwgdmFsdWUgc28gaXQgZG9lc24ndCBnZXQgaW52YWxpZGF0ZWQgYW5kCisJCSAqIHdvbid0IGJlIHJlY2FsY3VsYXRlZC4KKwkJICovCisJCWNlcnRhaW50aWVzW2xvY2FsX2xpbmVfYl0gPSBDRVJUQUlOX05PVEhJTkdfTUFUQ0hFUzsKKwkJcmVzdWx0W2xvY2FsX2xpbmVfYl0gPSAtMTsKKwl9IGVsc2UgeworCQkvKiBDYWxjdWxhdGUgdGhlIGNlcnRhaW50eSB3aXRoIHdoaWNoIHRoaXMgbGluZSBtYXRjaGVzLgorCQkgKiBJZiB0aGUgbGluZSBtYXRjaGVzIHdlbGwgd2l0aCB0d28gbGluZXMgdGhlbiB0aGF0IHJlZHVjZXMKKwkJICogdGhlIGNlcnRhaW50eS4gSG93ZXZlciB3ZSBzdGlsbCB3YW50IHRvIHByaW9yaXRpc2UgbWF0Y2hpbmcKKwkJICogYSBsaW5lIHRoYXQgbWF0Y2hlcyB2ZXJ5IHdlbGwgd2l0aCB0d28gbGluZXMgb3ZlciBtYXRjaGluZyBhCisJCSAqIGxpbmUgdGhhdCBtYXRjaGVzIHBvb3JseSB3aXRoIG9uZSBsaW5lLCBoZW5jZSBkb3VibGluZworCQkgKiBiZXN0X3NpbWlsYXJpdHkuCisJCSAqIFRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBoYXZlCisJCSAqIGxpbmUgWCB0aGF0IG1hdGNoZXMgb25seSBvbmUgbGluZSB3aXRoIGEgc2NvcmUgb2YgMywKKwkJICogbGluZSBZIHRoYXQgbWF0Y2hlcyB0d28gbGluZXMgZXF1YWxseSB3aXRoIGEgc2NvcmUgb2YgNSwKKwkJICogYW5kIGxpbmUgWiB0aGF0IG1hdGNoZXMgb25seSBvbmUgbGluZSB3aXRoIGEgc2NvcmUgb3IgMiwKKwkJICogdGhlbiB0aGUgbGluZXMgaW4gb3JkZXIgb2YgY2VydGFpbnR5IGFyZSBYLCBZLCBaLgorCQkgKi8KKwkJY2VydGFpbnRpZXNbbG9jYWxfbGluZV9iXSA9IGJlc3Rfc2ltaWxhcml0eSAqIDIgLQorCQkJc2Vjb25kX2Jlc3Rfc2ltaWxhcml0eTsKKworCQkvKiBXZSBrZWVwIGJvdGggdGhlIGJlc3QgYW5kIHNlY29uZCBiZXN0IHJlc3VsdHMgdG8gYWxsb3cgdXMgdG8KKwkJICogY2hlY2sgYXQgYSBsYXRlciBzdGFnZSBvZiB0aGUgbWF0Y2hpbmcgcHJvY2VzcyB3aGV0aGVyIHRoZQorCQkgKiByZXN1bHQgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQuCisJCSAqLworCQlyZXN1bHRbbG9jYWxfbGluZV9iXSA9IHN0YXJ0X2EgKyBiZXN0X3NpbWlsYXJpdHlfaW5kZXg7CisJCXNlY29uZF9iZXN0X3Jlc3VsdFtsb2NhbF9saW5lX2JdID0KKwkJCXN0YXJ0X2EgKyBzZWNvbmRfYmVzdF9zaW1pbGFyaXR5X2luZGV4OworCX0KK30KKworLyoKKyAqIFRoaXMgZmluZHMgdGhlIGxpbmUgdGhhdCB3ZSBjYW4gbWF0Y2ggd2l0aCB0aGUgbW9zdCBjb25maWRlbmNlLCBhbmQKKyAqIHVzZXMgaXQgYXMgYSBwYXJ0aXRpb24uIEl0IHRoZW4gY2FsbHMgaXRzZWxmIG9uIHRoZSBsaW5lcyBvbiBlaXRoZXIgc2lkZSBvZgorICogdGhhdCBwYXJ0aXRpb24uIEluIHRoaXMgd2F5IHdlIGF2b2lkIGxpbmVzIGFwcGVhcmluZyBvdXQgb2Ygb3JkZXIsIGFuZAorICogcmV0YWluIGEgc2Vuc2libGUgbGluZSBvcmRlcmluZy4KKyAqIFxwYXJhbSBzdGFydF9hIGluZGV4IG9mIHRoZSBmaXJzdCBsaW5lIGluIEEgd2l0aCB3aGljaCBsaW5lcyBpbiBCIG1heSBiZQorICogCQkgIGNvbXBhcmVkLgorICogXHBhcmFtIHN0YXJ0X2IgaW5kZXggb2YgdGhlIGZpcnN0IGxpbmUgaW4gQiBmb3Igd2hpY2ggbWF0Y2hpbmcgc2hvdWxkIGJlCisgKiAJCSAgZG9uZS4KKyAqIFxwYXJhbSBsZW5ndGhfYSBudW1iZXIgb2YgbGluZXMgaW4gQSB3aXRoIHdoaWNoIGxpbmVzIGluIEIgbWF5IGJlIGNvbXBhcmVkLgorICogXHBhcmFtIGxlbmd0aF9iIG51bWJlciBvZiBsaW5lcyBpbiBCIGZvciB3aGljaCBtYXRjaGluZyBzaG91bGQgYmUgZG9uZS4KKyAqIFxwYXJhbSBmaW5nZXJwcmludHNfYSBtdXRhYmxlIGFycmF5IG9mIGZpbmdlcnByaW50cyBpbiBBLiBUaGUgZmlyc3QgZWxlbWVudAorICogCQkJIGNvcnJlc3BvbmRzIHRvIHRoZSBsaW5lIGF0IHN0YXJ0X2EuCisgKiBccGFyYW0gZmluZ2VycHJpbnRzX2IgYXJyYXkgb2YgZmluZ2VycHJpbnRzIGluIEIuIFRoZSBmaXJzdCBlbGVtZW50CisgKiAJCQkgY29ycmVzcG9uZHMgdG8gdGhlIGxpbmUgYXQgc3RhcnRfYi4KKyAqIFxwYXJhbSBzaW1pbGFyaXRpZXMgMi1kaW1lbnNpb25hbCBhcnJheSBvZiBzaW1pbGFyaXRpZXMgYmV0d2VlbiBsaW5lcyBpbiBBCisgKiAJCSAgICAgICBhbmQgQi4gU2VlIGdldF9zaW1pbGFyaXR5KCkgZm9yIG1vcmUgZGV0YWlscy4KKyAqIFxwYXJhbSBjZXJ0YWludGllcyBhcnJheSBvZiB2YWx1ZXMgaW5kaWNhdGluZyBob3cgc3Ryb25nbHkgYSBsaW5lIGluIEIgaXMKKyAqIAkJICAgICAgbWF0Y2hlZCB3aXRoIHNvbWUgbGluZSBpbiBBLgorICogXHBhcmFtIHNlY29uZF9iZXN0X3Jlc3VsdCBhcnJheSBvZiBhYnNvbHV0ZSBpbmRpY2VzIGluIEEgZm9yIHRoZSBzZWNvbmQKKyAqIAkJCSAgICAgY2xvc2VzdCBtYXRjaCBvZiBhIGxpbmUgaW4gQi4KKyAqIFxwYXJhbSByZXN1bHQgYXJyYXkgb2YgYWJzb2x1dGUgaW5kaWNlcyBpbiBBIGZvciB0aGUgY2xvc2VzdCBtYXRjaCBvZiBhIGxpbmUKKyAqIAkJIGluIEIuCisgKiBccGFyYW0gbWF4X3NlYXJjaF9kaXN0YW5jZV9hIG1heGltdW0gZGlzdGFuY2UgaW4gbGluZXMgZnJvbSB0aGUgY2xvc2VzdCBsaW5lCisgKiAJCQkgICAgICBpbiBBIGZvciBvdGhlciBsaW5lcyBpbiBBIGZvciB3aGljaAorICogCQkJICAgICAgc2ltaWxhcml0aWVzIG1heSBiZSBjYWxjdWxhdGVkLgorICogXHBhcmFtIG1heF9zZWFyY2hfZGlzdGFuY2VfYiBhbiB1cHBlciBib3VuZCBvbiB0aGUgZ3JlYXRlc3QgcG9zc2libGUKKyAqIAkJCSAgICAgIGRpc3RhbmNlIGJldHdlZW4gbGluZXMgaW4gQiBzdWNoIHRoYXQgdGhleSB3aWxsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGggYmUgY29tcGFyZWQgd2l0aCB0aGUgc2FtZSBsaW5lIGluIEEKKyAqIAkJCSAgICAgIGFjY29yZGluZyB0byBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EuCisgKiBccGFyYW0gbWFwX2xpbmVfbnVtYmVyX2luX2JfdG9fYSBwYXJhbWV0ZXIgdG8gbWFwX2xpbmVfbnVtYmVyKCkuCisgKi8KK3N0YXRpYyB2b2lkIGZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXNfcmVjdXJzZSgKKwlpbnQgc3RhcnRfYSwgaW50IHN0YXJ0X2IsCisJaW50IGxlbmd0aF9hLCBpbnQgbGVuZ3RoX2IsCisJc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHNfYSwKKwlzdHJ1Y3QgZmluZ2VycHJpbnQgKmZpbmdlcnByaW50c19iLAorCWludCAqc2ltaWxhcml0aWVzLAorCWludCAqY2VydGFpbnRpZXMsCisJaW50ICpzZWNvbmRfYmVzdF9yZXN1bHQsCisJaW50ICpyZXN1bHQsCisJaW50IG1heF9zZWFyY2hfZGlzdGFuY2VfYSwKKwlpbnQgbWF4X3NlYXJjaF9kaXN0YW5jZV9iLAorCWNvbnN0IHN0cnVjdCBsaW5lX251bWJlcl9tYXBwaW5nICptYXBfbGluZV9udW1iZXJfaW5fYl90b19hKQoreworCWludCBpLCBpbnZhbGlkYXRlX21pbiwgaW52YWxpZGF0ZV9tYXgsIG9mZnNldF9iLAorCQlzZWNvbmRfaGFsZl9zdGFydF9hLCBzZWNvbmRfaGFsZl9zdGFydF9iLAorCQlzZWNvbmRfaGFsZl9sZW5ndGhfYSwgc2Vjb25kX2hhbGZfbGVuZ3RoX2IsCisJCW1vc3RfY2VydGFpbl9saW5lX2EsIG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgPSAtMSwKKwkJbW9zdF9jZXJ0YWluX2xpbmVfY2VydGFpbnR5ID0gLTEsCisJCWNsb3Nlc3RfbG9jYWxfbGluZV9hOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aF9iOyArK2kpIHsKKwkJZmluZF9iZXN0X2xpbmVfbWF0Y2hlcyhzdGFydF9hLAorCQkJCSAgICAgICBsZW5ndGhfYSwKKwkJCQkgICAgICAgc3RhcnRfYiwKKwkJCQkgICAgICAgaSwKKwkJCQkgICAgICAgZmluZ2VycHJpbnRzX2EsCisJCQkJICAgICAgIGZpbmdlcnByaW50c19iLAorCQkJCSAgICAgICBzaW1pbGFyaXRpZXMsCisJCQkJICAgICAgIGNlcnRhaW50aWVzLAorCQkJCSAgICAgICBzZWNvbmRfYmVzdF9yZXN1bHQsCisJCQkJICAgICAgIHJlc3VsdCwKKwkJCQkgICAgICAgbWF4X3NlYXJjaF9kaXN0YW5jZV9hLAorCQkJCSAgICAgICBtYXBfbGluZV9udW1iZXJfaW5fYl90b19hKTsKKworCQlpZiAoY2VydGFpbnRpZXNbaV0gPiBtb3N0X2NlcnRhaW5fbGluZV9jZXJ0YWludHkpIHsKKwkJCW1vc3RfY2VydGFpbl9saW5lX2NlcnRhaW50eSA9IGNlcnRhaW50aWVzW2ldOworCQkJbW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYiA9IGk7CisJCX0KKwl9CisKKwkvKiBObyBtYXRjaGVzLiAqLworCWlmIChtb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iID09IC0xKQorCQlyZXR1cm47CisKKwltb3N0X2NlcnRhaW5fbGluZV9hID0gcmVzdWx0W21vc3RfY2VydGFpbl9sb2NhbF9saW5lX2JdOworCisJLyoKKwkgKiBTdWJ0cmFjdCB0aGUgbW9zdCBjZXJ0YWluIGxpbmUncyBmaW5nZXJwcmludCBpbiBCIGZyb20gdGhlIG1hdGNoZWQKKwkgKiBmaW5nZXJwcmludCBpbiBBLiBUaGlzIG1lYW5zIHRoYXQgb3RoZXIgbGluZXMgaW4gQiBjYW4ndCBhbHNvIG1hdGNoCisJICogdGhlIHNhbWUgcGFydHMgb2YgdGhlIGxpbmUgaW4gQS4KKwkgKi8KKwlmaW5nZXJwcmludF9zdWJ0cmFjdChmaW5nZXJwcmludHNfYSArIG1vc3RfY2VydGFpbl9saW5lX2EgLSBzdGFydF9hLAorCQkJICAgICBmaW5nZXJwcmludHNfYiArIG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IpOworCisJLyogSW52YWxpZGF0ZSByZXN1bHRzIHRoYXQgbWF5IGJlIGFmZmVjdGVkIGJ5IHRoZSBjaG9pY2Ugb2YgbW9zdAorCSAqIGNlcnRhaW4gbGluZS4KKwkgKi8KKwlpbnZhbGlkYXRlX21pbiA9IG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgLSBtYXhfc2VhcmNoX2Rpc3RhbmNlX2I7CisJaW52YWxpZGF0ZV9tYXggPSBtb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iICsgbWF4X3NlYXJjaF9kaXN0YW5jZV9iICsgMTsKKwlpZiAoaW52YWxpZGF0ZV9taW4gPCAwKQorCQlpbnZhbGlkYXRlX21pbiA9IDA7CisJaWYgKGludmFsaWRhdGVfbWF4ID4gbGVuZ3RoX2IpCisJCWludmFsaWRhdGVfbWF4ID0gbGVuZ3RoX2I7CisKKwkvKiBBcyB0aGUgZmluZ2VycHJpbnQgaW4gQSBoYXMgY2hhbmdlZCwgZGlzY2FyZCBwcmV2aW91c2x5IGNhbGN1bGF0ZWQKKwkgKiBzaW1pbGFyaXR5IHZhbHVlcyB3aXRoIHRoYXQgZmluZ2VycHJpbnQuCisJICovCisJZm9yIChpID0gaW52YWxpZGF0ZV9taW47IGkgPCBpbnZhbGlkYXRlX21heDsgKytpKSB7CisJCWNsb3Nlc3RfbG9jYWxfbGluZV9hID0gbWFwX2xpbmVfbnVtYmVyKAorCQkJaSArIHN0YXJ0X2IsIG1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpIC0gc3RhcnRfYTsKKworCQkvKiBDaGVjayB0aGF0IHRoZSBsaW5lcyBpbiBBIGFuZCBCIGFyZSBjbG9zZSBlbm91Z2ggdGhhdCB0aGVyZQorCQkgKiBpcyBhIHNpbWlsYXJpdHkgdmFsdWUgZm9yIHRoZW0uCisJCSAqLworCQlpZiAoYWJzKG1vc3RfY2VydGFpbl9saW5lX2EgLSBzdGFydF9hIC0gY2xvc2VzdF9sb2NhbF9saW5lX2EpID4KKwkJCW1heF9zZWFyY2hfZGlzdGFuY2VfYSkgeworCQkJY29udGludWU7CisJCX0KKworCQkqZ2V0X3NpbWlsYXJpdHkoc2ltaWxhcml0aWVzLCBtb3N0X2NlcnRhaW5fbGluZV9hIC0gc3RhcnRfYSwKKwkJCQlpLCBjbG9zZXN0X2xvY2FsX2xpbmVfYSwKKwkJCQltYXhfc2VhcmNoX2Rpc3RhbmNlX2EpID0gLTE7CisJfQorCisJLyogTW9yZSBpbnZhbGlkYXRpbmcgb2YgcmVzdWx0cyB0aGF0IG1heSBiZSBhZmZlY3RlZCBieSB0aGUgY2hvaWNlIG9mCisJICogbW9zdCBjZXJ0YWluIGxpbmUuCisJICogRGlzY2FyZCB0aGUgbWF0Y2hlcyBmb3IgbGluZXMgaW4gQiB0aGF0IGFyZSBjdXJyZW50bHkgbWF0Y2hlZCB3aXRoIGEKKwkgKiBsaW5lIGluIEEgc3VjaCB0aGF0IHRoZWlyIG9yZGVyaW5nIGNvbnRyYWRpY3RzIHRoZSBvcmRlcmluZyBpbXBvc2VkCisJICogYnkgdGhlIGNob2ljZSBvZiBtb3N0IGNlcnRhaW4gbGluZS4KKwkgKi8KKwlmb3IgKGkgPSBtb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iIC0gMTsgaSA+PSBpbnZhbGlkYXRlX21pbjsgLS1pKSB7CisJCS8qIEluIHRoaXMgbG9vcCB3ZSBkaXNjYXJkIHJlc3VsdHMgZm9yIGxpbmVzIGluIEIgdGhhdCBhcmUKKwkJICogYmVmb3JlIG1vc3QtY2VydGFpbi1saW5lLUIgYnV0IGFyZSBtYXRjaGVkIHdpdGggYSBsaW5lIGluIEEKKwkJICogdGhhdCBpcyBhZnRlciBtb3N0LWNlcnRhaW4tbGluZS1BLgorCQkgKi8KKwkJaWYgKGNlcnRhaW50aWVzW2ldID49IDAgJiYKKwkJICAgIChyZXN1bHRbaV0gPj0gbW9zdF9jZXJ0YWluX2xpbmVfYSB8fAorCQkgICAgIHNlY29uZF9iZXN0X3Jlc3VsdFtpXSA+PSBtb3N0X2NlcnRhaW5fbGluZV9hKSkgeworCQkJY2VydGFpbnRpZXNbaV0gPSBDRVJUQUlOVFlfTk9UX0NBTENVTEFURUQ7CisJCX0KKwl9CisJZm9yIChpID0gbW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYiArIDE7IGkgPCBpbnZhbGlkYXRlX21heDsgKytpKSB7CisJCS8qIEluIHRoaXMgbG9vcCB3ZSBkaXNjYXJkIHJlc3VsdHMgZm9yIGxpbmVzIGluIEIgdGhhdCBhcmUKKwkJICogYWZ0ZXIgbW9zdC1jZXJ0YWluLWxpbmUtQiBidXQgYXJlIG1hdGNoZWQgd2l0aCBhIGxpbmUgaW4gQQorCQkgKiB0aGF0IGlzIGJlZm9yZSBtb3N0LWNlcnRhaW4tbGluZS1BLgorCQkgKi8KKwkJaWYgKGNlcnRhaW50aWVzW2ldID49IDAgJiYKKwkJICAgIChyZXN1bHRbaV0gPD0gbW9zdF9jZXJ0YWluX2xpbmVfYSB8fAorCQkgICAgIHNlY29uZF9iZXN0X3Jlc3VsdFtpXSA8PSBtb3N0X2NlcnRhaW5fbGluZV9hKSkgeworCQkJY2VydGFpbnRpZXNbaV0gPSBDRVJUQUlOVFlfTk9UX0NBTENVTEFURUQ7CisJCX0KKwl9CisKKwkvKiBSZXBlYXQgdGhlIG1hdGNoaW5nIHByb2Nlc3MgZm9yIGxpbmVzIGJlZm9yZSB0aGUgbW9zdCBjZXJ0YWluIGxpbmUuCisJICovCisJaWYgKG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgPiAwKSB7CisJCWZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXNfcmVjdXJzZSgKKwkJCXN0YXJ0X2EsIHN0YXJ0X2IsCisJCQltb3N0X2NlcnRhaW5fbGluZV9hICsgMSAtIHN0YXJ0X2EsCisJCQltb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iLAorCQkJZmluZ2VycHJpbnRzX2EsIGZpbmdlcnByaW50c19iLCBzaW1pbGFyaXRpZXMsCisJCQljZXJ0YWludGllcywgc2Vjb25kX2Jlc3RfcmVzdWx0LCByZXN1bHQsCisJCQltYXhfc2VhcmNoX2Rpc3RhbmNlX2EsCisJCQltYXhfc2VhcmNoX2Rpc3RhbmNlX2IsCisJCQltYXBfbGluZV9udW1iZXJfaW5fYl90b19hKTsKKwl9CisJLyogUmVwZWF0IHRoZSBtYXRjaGluZyBwcm9jZXNzIGZvciBsaW5lcyBhZnRlciB0aGUgbW9zdCBjZXJ0YWluIGxpbmUuCisJICovCisJaWYgKG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgKyAxIDwgbGVuZ3RoX2IpIHsKKwkJc2Vjb25kX2hhbGZfc3RhcnRfYSA9IG1vc3RfY2VydGFpbl9saW5lX2E7CisJCW9mZnNldF9iID0gbW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYiArIDE7CisJCXNlY29uZF9oYWxmX3N0YXJ0X2IgPSBzdGFydF9iICsgb2Zmc2V0X2I7CisJCXNlY29uZF9oYWxmX2xlbmd0aF9hID0KKwkJCWxlbmd0aF9hICsgc3RhcnRfYSAtIHNlY29uZF9oYWxmX3N0YXJ0X2E7CisJCXNlY29uZF9oYWxmX2xlbmd0aF9iID0KKwkJCWxlbmd0aF9iICsgc3RhcnRfYiAtIHNlY29uZF9oYWxmX3N0YXJ0X2I7CisJCWZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXNfcmVjdXJzZSgKKwkJCXNlY29uZF9oYWxmX3N0YXJ0X2EsIHNlY29uZF9oYWxmX3N0YXJ0X2IsCisJCQlzZWNvbmRfaGFsZl9sZW5ndGhfYSwgc2Vjb25kX2hhbGZfbGVuZ3RoX2IsCisJCQlmaW5nZXJwcmludHNfYSArIHNlY29uZF9oYWxmX3N0YXJ0X2EgLSBzdGFydF9hLAorCQkJZmluZ2VycHJpbnRzX2IgKyBvZmZzZXRfYiwKKwkJCXNpbWlsYXJpdGllcyArCisJCQkJb2Zmc2V0X2IgKiAobWF4X3NlYXJjaF9kaXN0YW5jZV9hICogMiArIDEpLAorCQkJY2VydGFpbnRpZXMgKyBvZmZzZXRfYiwKKwkJCXNlY29uZF9iZXN0X3Jlc3VsdCArIG9mZnNldF9iLCByZXN1bHQgKyBvZmZzZXRfYiwKKwkJCW1heF9zZWFyY2hfZGlzdGFuY2VfYSwKKwkJCW1heF9zZWFyY2hfZGlzdGFuY2VfYiwKKwkJCW1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpOworCX0KK30KKworLyogRmluZCB0aGUgbGluZXMgaW4gdGhlIHBhcmVudCBsaW5lIHJhbmdlIHRoYXQgbW9zdCBjbG9zZWx5IG1hdGNoIHRoZSBsaW5lcyBpbgorICogdGhlIHRhcmdldCBsaW5lIHJhbmdlLiBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSBtYXRjaGluZyBmaW5nZXJwcmludHMgaW4gZWFjaAorICogYmxhbWVfb3JpZ2luLCBhbmQgY2hvb3NpbmcgdGhlIGJlc3QgbWF0Y2hlcyB0aGF0IHByZXNlcnZlIHRoZSBsaW5lIG9yZGVyaW5nLgorICogU2VlIHN0cnVjdCBmaW5nZXJwcmludCBmb3IgZGV0YWlscyBvZiBmaW5nZXJwcmludCBtYXRjaGluZywgYW5kCisgKiBmdXp6eV9maW5kX21hdGNoaW5nX2xpbmVzX3JlY3Vyc2UgZm9yIGRldGFpbHMgb2YgcHJlc2VydmluZyBsaW5lIG9yZGVyaW5nLgorICoKKyAqIFRoZSBwZXJmb3JtYW5jZSBpcyBiZWxpZXZlZCB0byBiZSBPKG4gbG9nIG4pIGluIHRoZSB0eXBpY2FsIGNhc2UgYW5kIE8obl4yKQorICogaW4gYSBwYXRob2xvZ2ljYWwgY2FzZSwgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSB0YXJnZXQgcmFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgKmZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXMoc3RydWN0IGJsYW1lX29yaWdpbiAqcGFyZW50LAorCQkJCSAgICAgIHN0cnVjdCBibGFtZV9vcmlnaW4gKnRhcmdldCwKKwkJCQkgICAgICBpbnQgdGxubywgaW50IHBhcmVudF9zbG5vLCBpbnQgc2FtZSwKKwkJCQkgICAgICBpbnQgcGFyZW50X2xlbikKK3sKKwkvKiBXZSB1c2UgdGhlIHRlcm1pbm9sb2d5ICJBIiBmb3IgdGhlIGxlZnQgaGFuZCBzaWRlIG9mIHRoZSBkaWZmIEFLQQorCSAqIHBhcmVudCwgYW5kICJCIiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgZGlmZiBBS0EgdGFyZ2V0LiAqLworCWludCBzdGFydF9hID0gcGFyZW50X3Nsbm87CisJaW50IGxlbmd0aF9hID0gcGFyZW50X2xlbjsKKwlpbnQgc3RhcnRfYiA9IHRsbm87CisJaW50IGxlbmd0aF9iID0gc2FtZSAtIHRsbm87CisKKwlzdHJ1Y3QgbGluZV9udW1iZXJfbWFwcGluZyBtYXBfbGluZV9udW1iZXJfaW5fYl90b19hID0geworCQlzdGFydF9hLCBsZW5ndGhfYSwgc3RhcnRfYiwgbGVuZ3RoX2IKKwl9OworCisJc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHNfYSA9IHBhcmVudC0+ZmluZ2VycHJpbnRzOworCXN0cnVjdCBmaW5nZXJwcmludCAqZmluZ2VycHJpbnRzX2IgPSB0YXJnZXQtPmZpbmdlcnByaW50czsKKworCWludCBpLCAqcmVzdWx0LCAqc2Vjb25kX2Jlc3RfcmVzdWx0LAorCQkqY2VydGFpbnRpZXMsICpzaW1pbGFyaXRpZXMsIHNpbWlsYXJpdHlfY291bnQ7CisKKwkvKgorCSAqIG1heF9zZWFyY2hfZGlzdGFuY2VfYSBtZWFucyB0aGF0IGdpdmVuIGEgbGluZSBpbiBCLCBjb21wYXJlIGl0IHRvCisJICogdGhlIGxpbmUgaW4gQSB0aGF0IGlzIGNsb3Nlc3QgdG8gaXRzIHBvc2l0aW9uLCBhbmQgdGhlIGxpbmVzIGluIEEKKwkgKiB0aGF0IGFyZSBubyBncmVhdGVyIHRoYW4gbWF4X3NlYXJjaF9kaXN0YW5jZV9hIGxpbmVzIGF3YXkgZnJvbSB0aGUKKwkgKiBjbG9zZXN0IGxpbmUgaW4gQS4KKwkgKgorCSAqIG1heF9zZWFyY2hfZGlzdGFuY2VfYiBpcyBhbiB1cHBlciBib3VuZCBvbiB0aGUgZ3JlYXRlc3QgcG9zc2libGUKKwkgKiBkaXN0YW5jZSBiZXR3ZWVuIGxpbmVzIGluIEIgc3VjaCB0aGF0IHRoZXkgd2lsbCBib3RoIGJlIGNvbXBhcmVkCisJICogd2l0aCB0aGUgc2FtZSBsaW5lIGluIEEgYWNjb3JkaW5nIHRvIG1heF9zZWFyY2hfZGlzdGFuY2VfYS4KKwkgKi8KKwlpbnQgbWF4X3NlYXJjaF9kaXN0YW5jZV9hID0gMTAsIG1heF9zZWFyY2hfZGlzdGFuY2VfYjsKKworCWlmIChsZW5ndGhfYSA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgPj0gbGVuZ3RoX2EpCisJCW1heF9zZWFyY2hfZGlzdGFuY2VfYSA9IGxlbmd0aF9hID8gbGVuZ3RoX2EgLSAxIDogMDsKKworCW1heF9zZWFyY2hfZGlzdGFuY2VfYiA9ICgoMiAqIG1heF9zZWFyY2hfZGlzdGFuY2VfYSArIDEpICogbGVuZ3RoX2IKKwkJCQkgLSAxKSAvIGxlbmd0aF9hOworCisJcmVzdWx0ID0geGNhbGxvYyhzaXplb2YoaW50KSwgbGVuZ3RoX2IpOworCXNlY29uZF9iZXN0X3Jlc3VsdCA9IHhjYWxsb2Moc2l6ZW9mKGludCksIGxlbmd0aF9iKTsKKwljZXJ0YWludGllcyA9IHhjYWxsb2Moc2l6ZW9mKGludCksIGxlbmd0aF9iKTsKKworCS8qIFNlZSBnZXRfc2ltaWxhcml0eSgpIGZvciBkZXRhaWxzIG9mIHNpbWlsYXJpdGllcy4gKi8KKwlzaW1pbGFyaXR5X2NvdW50ID0gbGVuZ3RoX2IgKiAobWF4X3NlYXJjaF9kaXN0YW5jZV9hICogMiArIDEpOworCXNpbWlsYXJpdGllcyA9IHhjYWxsb2Moc2l6ZW9mKGludCksIHNpbWlsYXJpdHlfY291bnQpOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aF9iOyArK2kpIHsKKwkJcmVzdWx0W2ldID0gLTE7CisJCXNlY29uZF9iZXN0X3Jlc3VsdFtpXSA9IC0xOworCQljZXJ0YWludGllc1tpXSA9IENFUlRBSU5UWV9OT1RfQ0FMQ1VMQVRFRDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2ltaWxhcml0eV9jb3VudDsgKytpKQorCQlzaW1pbGFyaXRpZXNbaV0gPSAtMTsKKworCWZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXNfcmVjdXJzZShzdGFydF9hLCBzdGFydF9iLAorCQkJCQkgIGxlbmd0aF9hLCBsZW5ndGhfYiwKKwkJCQkJICBmaW5nZXJwcmludHNfYSArIHN0YXJ0X2EsCisJCQkJCSAgZmluZ2VycHJpbnRzX2IgKyBzdGFydF9iLAorCQkJCQkgIHNpbWlsYXJpdGllcywKKwkJCQkJICBjZXJ0YWludGllcywKKwkJCQkJICBzZWNvbmRfYmVzdF9yZXN1bHQsCisJCQkJCSAgcmVzdWx0LAorCQkJCQkgIG1heF9zZWFyY2hfZGlzdGFuY2VfYSwKKwkJCQkJICBtYXhfc2VhcmNoX2Rpc3RhbmNlX2IsCisJCQkJCSAgJm1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpOworCisJZnJlZShzaW1pbGFyaXRpZXMpOworCWZyZWUoY2VydGFpbnRpZXMpOworCWZyZWUoc2Vjb25kX2Jlc3RfcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfb3JpZ2luX2ZpbmdlcnByaW50cyhzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvKQoreworCWludCAqbGluZV9zdGFydHM7CisKKwlpZiAoby0+ZmluZ2VycHJpbnRzKQorCQlyZXR1cm47CisJby0+bnVtX2xpbmVzID0gZmluZF9saW5lX3N0YXJ0cygmbGluZV9zdGFydHMsIG8tPmZpbGUucHRyLAorCQkJCQlvLT5maWxlLnNpemUpOworCW8tPmZpbmdlcnByaW50cyA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBmaW5nZXJwcmludCksIG8tPm51bV9saW5lcyk7CisJZ2V0X2xpbmVfZmluZ2VycHJpbnRzKG8tPmZpbmdlcnByaW50cywgby0+ZmlsZS5wdHIsIGxpbmVfc3RhcnRzLAorCQkJICAgICAgMCwgby0+bnVtX2xpbmVzKTsKKwlmcmVlKGxpbmVfc3RhcnRzKTsKK30KKworc3RhdGljIHZvaWQgZHJvcF9vcmlnaW5fZmluZ2VycHJpbnRzKHN0cnVjdCBibGFtZV9vcmlnaW4gKm8pCit7CisJaWYgKG8tPmZpbmdlcnByaW50cykgeworCQlmcmVlX2xpbmVfZmluZ2VycHJpbnRzKG8tPmZpbmdlcnByaW50cywgby0+bnVtX2xpbmVzKTsKKwkJby0+bnVtX2xpbmVzID0gMDsKKwkJRlJFRV9BTkRfTlVMTChvLT5maW5nZXJwcmludHMpOworCX0KK30KKwogLyoKICAqIEdpdmVuIGFuIG9yaWdpbiwgcHJlcGFyZSBtbWZpbGVfdCBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCBieSB0aGUKICAqIGRpZmYgbWFjaGluZXJ5CiAgKi8KIHN0YXRpYyB2b2lkIGZpbGxfb3JpZ2luX2Jsb2Ioc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAotCQkJICAgICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvLCBtbWZpbGVfdCAqZmlsZSwgaW50ICpudW1fcmVhZF9ibG9iKQorCQkJICAgICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvLCBtbWZpbGVfdCAqZmlsZSwKKwkJCSAgICAgaW50ICpudW1fcmVhZF9ibG9iLCBpbnQgZmlsbF9maW5nZXJwcmludHMpCiB7CiAJaWYgKCFvLT5maWxlLnB0cikgewogCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CkBAIC0zNDAsMTEgKzEwMzUsMTQgQEAKIAl9CiAJZWxzZQogCQkqZmlsZSA9IG8tPmZpbGU7CisJaWYgKGZpbGxfZmluZ2VycHJpbnRzKQorCQlmaWxsX29yaWdpbl9maW5nZXJwcmludHMobyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRyb3Bfb3JpZ2luX2Jsb2Ioc3RydWN0IGJsYW1lX29yaWdpbiAqbykKIHsKIAlGUkVFX0FORF9OVUxMKG8tPmZpbGUucHRyKTsKKwlkcm9wX29yaWdpbl9maW5nZXJwcmludHMobyk7CiB9CiAKIC8qCkBAIC00ODAsNyArMTE3OCw5IEBACiAKIAlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudCAmJiAobmV4dCA9IGVudC0+bmV4dCk7IGVudCA9IG5leHQpIHsKIAkJaWYgKGVudC0+c3VzcGVjdCA9PSBuZXh0LT5zdXNwZWN0ICYmCi0JCSAgICBlbnQtPnNfbG5vICsgZW50LT5udW1fbGluZXMgPT0gbmV4dC0+c19sbm8pIHsKKwkJICAgIGVudC0+c19sbm8gKyBlbnQtPm51bV9saW5lcyA9PSBuZXh0LT5zX2xubyAmJgorCQkgICAgZW50LT5pZ25vcmVkID09IG5leHQtPmlnbm9yZWQgJiYKKwkJICAgIGVudC0+dW5ibGFtYWJsZSA9PSBuZXh0LT51bmJsYW1hYmxlKSB7CiAJCQllbnQtPm51bV9saW5lcyArPSBuZXh0LT5udW1fbGluZXM7CiAJCQllbnQtPm5leHQgPSBuZXh0LT5uZXh0OwogCQkJYmxhbWVfb3JpZ2luX2RlY3JlZihuZXh0LT5zdXNwZWN0KTsKQEAgLTUzMiw3ICsxMjMyLDcgQEAKIHsKIAlpZiAoIWlzX251bGxfb2lkKCZvcmlnaW4tPmJsb2Jfb2lkKSkKIAkJcmV0dXJuIDA7Ci0JaWYgKGdldF90cmVlX2VudHJ5KCZvcmlnaW4tPmNvbW1pdC0+b2JqZWN0Lm9pZCwgb3JpZ2luLT5wYXRoLCAmb3JpZ2luLT5ibG9iX29pZCwgJm9yaWdpbi0+bW9kZSkpCisJaWYgKGdldF90cmVlX2VudHJ5KHIsICZvcmlnaW4tPmNvbW1pdC0+b2JqZWN0Lm9pZCwgb3JpZ2luLT5wYXRoLCAmb3JpZ2luLT5ibG9iX29pZCwgJm9yaWdpbi0+bW9kZSkpCiAJCWdvdG8gZXJyb3Jfb3V0OwogCWlmIChvaWRfb2JqZWN0X2luZm8ociwgJm9yaWdpbi0+YmxvYl9vaWQsIE5VTEwpICE9IE9CSl9CTE9CKQogCQlnb3RvIGVycm9yX291dDsKQEAgLTczMCw4ICsxNDMwLDE0IEBACiAJCQkgIHN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudCkKIHsKIAlpbnQgY2h1bmtfZW5kX2xubzsKKwlpbnQgaTsKIAltZW1zZXQoc3BsaXQsIDAsIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkgWzNdKSk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXNwbGl0W2ldLmlnbm9yZWQgPSBlLT5pZ25vcmVkOworCQlzcGxpdFtpXS51bmJsYW1hYmxlID0gZS0+dW5ibGFtYWJsZTsKKwl9CisKIAlpZiAoZS0+c19sbm8gPCB0bG5vKSB7CiAJCS8qIHRoZXJlIGlzIGEgcHJlLWNodW5rIHBhcnQgbm90IGJsYW1lZCBvbiBwYXJlbnQgKi8KIAkJc3BsaXRbMF0uc3VzcGVjdCA9IGJsYW1lX29yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCk7CkBAIC04NDAsNiArMTU0NiwxNjQgQEAKIH0KIAogLyoKKyAqIFNwbGl0cyBhIGJsYW1lIGVudHJ5IGludG8gdHdvIGVudHJpZXMgYXQgJ2xlbicgbGluZXMuICBUaGUgb3JpZ2luYWwgJ2UnCisgKiBjb25zaXN0cyBvZiBsZW4gbGluZXMsIGkuZS4gW2UtPmxubywgZS0+bG5vICsgbGVuKSwgYW5kIHRoZSBzZWNvbmQgcGFydCwKKyAqIHdoaWNoIGlzIHJldHVybmVkLCBjb25zaXN0cyBvZiB0aGUgcmVtYWluZGVyOiBbZS0+bG5vICsgbGVuLCBlLT5sbm8gKworICogZS0+bnVtX2xpbmVzKS4gIFRoZSBjYWxsZXIgbmVlZHMgdG8gc29ydCBvdXQgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgdGhlCisgKiBuZXcgZW50cnkncyBzdXNwZWN0LgorICovCitzdGF0aWMgc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdF9ibGFtZV9hdChzdHJ1Y3QgYmxhbWVfZW50cnkgKmUsIGludCBsZW4sCisJCQkJCSAgc3RydWN0IGJsYW1lX29yaWdpbiAqbmV3X3N1c3BlY3QpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpuID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5KSk7CisKKwluLT5zdXNwZWN0ID0gbmV3X3N1c3BlY3Q7CisJbi0+aWdub3JlZCA9IGUtPmlnbm9yZWQ7CisJbi0+dW5ibGFtYWJsZSA9IGUtPnVuYmxhbWFibGU7CisJbi0+bG5vID0gZS0+bG5vICsgbGVuOworCW4tPnNfbG5vID0gZS0+c19sbm8gKyBsZW47CisJbi0+bnVtX2xpbmVzID0gZS0+bnVtX2xpbmVzIC0gbGVuOworCWUtPm51bV9saW5lcyA9IGxlbjsKKwllLT5zY29yZSA9IDA7CisJcmV0dXJuIG47Cit9CisKK3N0cnVjdCBibGFtZV9saW5lX3RyYWNrZXIgeworCWludCBpc19wYXJlbnQ7CisJaW50IHNfbG5vOworfTsKKworc3RhdGljIGludCBhcmVfbGluZXNfYWRqYWNlbnQoc3RydWN0IGJsYW1lX2xpbmVfdHJhY2tlciAqZmlyc3QsCisJCQkgICAgICBzdHJ1Y3QgYmxhbWVfbGluZV90cmFja2VyICpzZWNvbmQpCit7CisJcmV0dXJuIGZpcnN0LT5pc19wYXJlbnQgPT0gc2Vjb25kLT5pc19wYXJlbnQgJiYKKwkgICAgICAgZmlyc3QtPnNfbG5vICsgMSA9PSBzZWNvbmQtPnNfbG5vOworfQorCitzdGF0aWMgaW50IHNjYW5fcGFyZW50X3JhbmdlKHN0cnVjdCBmaW5nZXJwcmludCAqcF9mcHMsCisJCQkgICAgIHN0cnVjdCBmaW5nZXJwcmludCAqdF9mcHMsIGludCB0X2lkeCwKKwkJCSAgICAgaW50IGZyb20sIGludCBucl9saW5lcykKK3sKKwlpbnQgc2ltLCBwX2lkeDsKKwkjZGVmaW5lIEZJTkdFUlBSSU5UX0ZJTEVfVEhSRVNIT0xECTEwCisJaW50IGJlc3Rfc2ltX3ZhbCA9IEZJTkdFUlBSSU5UX0ZJTEVfVEhSRVNIT0xEOworCWludCBiZXN0X3NpbV9pZHggPSAtMTsKKworCWZvciAocF9pZHggPSBmcm9tOyBwX2lkeCA8IGZyb20gKyBucl9saW5lczsgcF9pZHgrKykgeworCQlzaW0gPSBmaW5nZXJwcmludF9zaW1pbGFyaXR5KCZ0X2Zwc1t0X2lkeF0sICZwX2Zwc1twX2lkeF0pOworCQlpZiAoc2ltIDwgYmVzdF9zaW1fdmFsKQorCQkJY29udGludWU7CisJCS8qIEJyZWFrIHRpZXMgd2l0aCB0aGUgY2xvc2VzdC10by10YXJnZXQgbGluZSBudW1iZXIgKi8KKwkJaWYgKHNpbSA9PSBiZXN0X3NpbV92YWwgJiYgYmVzdF9zaW1faWR4ICE9IC0xICYmCisJCSAgICBhYnMoYmVzdF9zaW1faWR4IC0gdF9pZHgpIDwgYWJzKHBfaWR4IC0gdF9pZHgpKQorCQkJY29udGludWU7CisJCWJlc3Rfc2ltX3ZhbCA9IHNpbTsKKwkJYmVzdF9zaW1faWR4ID0gcF9pZHg7CisJfQorCXJldHVybiBiZXN0X3NpbV9pZHg7Cit9CisKKy8qCisgKiBUaGUgZmlyc3QgcGFzcyBjaGVja3MgdGhlIGJsYW1lIGVudHJ5IChmcm9tIHRoZSB0YXJnZXQpIGFnYWluc3QgdGhlIHBhcmVudCdzCisgKiBkaWZmIGNodW5rLiAgSWYgdGhhdCBmYWlscyBmb3IgYSBsaW5lLCB0aGUgc2Vjb25kIHBhc3MgdHJpZXMgdG8gbWF0Y2ggdGhhdAorICogbGluZSB0byBhbnkgcGFydCBvZiBwYXJlbnQgZmlsZS4gIFRoYXQgY2F0Y2hlcyBjYXNlcyB3aGVyZSBhIGNoYW5nZSB3YXMKKyAqIGJyb2tlbiBpbnRvIHR3byBjaHVua3MgYnkgJ2NvbnRleHQuJworICovCitzdGF0aWMgdm9pZCBndWVzc19saW5lX2JsYW1lcyhzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICp0YXJnZXQsCisJCQkgICAgICBpbnQgdGxubywgaW50IG9mZnNldCwgaW50IHNhbWUsIGludCBwYXJlbnRfbGVuLAorCQkJICAgICAgc3RydWN0IGJsYW1lX2xpbmVfdHJhY2tlciAqbGluZV9ibGFtZXMpCit7CisJaW50IGksIGJlc3RfaWR4LCB0YXJnZXRfaWR4OworCWludCBwYXJlbnRfc2xubyA9IHRsbm8gKyBvZmZzZXQ7CisJaW50ICpmdXp6eV9tYXRjaGVzOworCisJZnV6enlfbWF0Y2hlcyA9IGZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXMocGFyZW50LCB0YXJnZXQsCisJCQkJCQkgIHRsbm8sIHBhcmVudF9zbG5vLCBzYW1lLAorCQkJCQkJICBwYXJlbnRfbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2FtZSAtIHRsbm87IGkrKykgeworCQl0YXJnZXRfaWR4ID0gdGxubyArIGk7CisJCWlmIChmdXp6eV9tYXRjaGVzICYmIGZ1enp5X21hdGNoZXNbaV0gPj0gMCkgeworCQkJYmVzdF9pZHggPSBmdXp6eV9tYXRjaGVzW2ldOworCQl9IGVsc2UgeworCQkJYmVzdF9pZHggPSBzY2FuX3BhcmVudF9yYW5nZShwYXJlbnQtPmZpbmdlcnByaW50cywKKwkJCQkJCSAgICAgdGFyZ2V0LT5maW5nZXJwcmludHMsCisJCQkJCQkgICAgIHRhcmdldF9pZHgsIDAsCisJCQkJCQkgICAgIHBhcmVudC0+bnVtX2xpbmVzKTsKKwkJfQorCQlpZiAoYmVzdF9pZHggPj0gMCkgeworCQkJbGluZV9ibGFtZXNbaV0uaXNfcGFyZW50ID0gMTsKKwkJCWxpbmVfYmxhbWVzW2ldLnNfbG5vID0gYmVzdF9pZHg7CisJCX0gZWxzZSB7CisJCQlsaW5lX2JsYW1lc1tpXS5pc19wYXJlbnQgPSAwOworCQkJbGluZV9ibGFtZXNbaV0uc19sbm8gPSB0YXJnZXRfaWR4OworCQl9CisJfQorCWZyZWUoZnV6enlfbWF0Y2hlcyk7Cit9CisKKy8qCisgKiBUaGlzIGRlY2lkZXMgd2hpY2ggcGFydHMgb2YgYSBibGFtZSBlbnRyeSBnbyB0byB0aGUgcGFyZW50IChhZGRlZCB0byB0aGUKKyAqIGlnbm9yZWRwIGxpc3QpIGFuZCB3aGljaCBzdGF5IHdpdGggdGhlIHRhcmdldCAoYWRkZWQgdG8gdGhlIGRpZmZwIGxpc3QpLiAgVGhlCisgKiBhY3R1YWwgZGVjaXNpb24gd2FzIG1hZGUgaW4gYSBzZXBhcmF0ZSBoZXVyaXN0aWMgZnVuY3Rpb24sIGFuZCB0aG9zZSBhbnN3ZXJzCisgKiBmb3IgdGhlIGxpbmVzIGluICdlJyBhcmUgaW4gbGluZV9ibGFtZXMuICBUaGlzIGNvbnN1bWVzIGUsIGVzc2VudGlhbGx5CisgKiBwdXR0aW5nIGl0IG9uIGEgbGlzdC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGJsYW1lIGVudHJpZXMgb24gdGhlIGlnbm9yZWRwIGxpc3QgYXJlIG5vdCBuZWNlc3NhcmlseSBzb3J0ZWQKKyAqIHdpdGggcmVzcGVjdCB0byB0aGUgcGFyZW50J3MgbGluZSBudW1iZXJzIHlldC4KKyAqLworc3RhdGljIHZvaWQgaWdub3JlX2JsYW1lX2VudHJ5KHN0cnVjdCBibGFtZV9lbnRyeSAqZSwKKwkJCSAgICAgICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwYXJlbnQsCisJCQkgICAgICAgc3RydWN0IGJsYW1lX2VudHJ5ICoqZGlmZnAsCisJCQkgICAgICAgc3RydWN0IGJsYW1lX2VudHJ5ICoqaWdub3JlZHAsCisJCQkgICAgICAgc3RydWN0IGJsYW1lX2xpbmVfdHJhY2tlciAqbGluZV9ibGFtZXMpCit7CisJaW50IGVudHJ5X2xlbiwgbnJfbGluZXMsIGk7CisKKwkvKgorCSAqIFdlIGNhcnZlIG5ldyBlbnRyaWVzIG9mZiB0aGUgZnJvbnQgb2YgZS4gIEVhY2ggZW50cnkgY29tZXMgZnJvbSBhCisJICogY29udGlndW91cyBjaHVuayBvZiBsaW5lczogYWRqYWNlbnQgbGluZXMgZnJvbSB0aGUgc2FtZSBvcmlnaW4KKwkgKiAoZWl0aGVyIHRoZSBwYXJlbnQgb3IgdGhlIHRhcmdldCkuCisJICovCisJZW50cnlfbGVuID0gMTsKKwlucl9saW5lcyA9IGUtPm51bV9saW5lczsJLyogZSBjaGFuZ2VzIGluIHRoZSBsb29wICovCisJZm9yIChpID0gMDsgaSA8IG5yX2xpbmVzOyBpKyspIHsKKwkJc3RydWN0IGJsYW1lX2VudHJ5ICpuZXh0ID0gTlVMTDsKKworCQkvKgorCQkgKiBXZSBhcmUgb2Z0ZW4gYWRqYWNlbnQgdG8gdGhlIG5leHQgbGluZSAtIG9ubHkgc3BsaXQgdGhlIGJsYW1lCisJCSAqIGVudHJ5IHdoZW4gd2UgaGF2ZSB0by4KKwkJICovCisJCWlmIChpICsgMSA8IG5yX2xpbmVzKSB7CisJCQlpZiAoYXJlX2xpbmVzX2FkamFjZW50KCZsaW5lX2JsYW1lc1tpXSwKKwkJCQkJICAgICAgICZsaW5lX2JsYW1lc1tpICsgMV0pKSB7CisJCQkJZW50cnlfbGVuKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQluZXh0ID0gc3BsaXRfYmxhbWVfYXQoZSwgZW50cnlfbGVuLAorCQkJCQkgICAgICBibGFtZV9vcmlnaW5faW5jcmVmKGUtPnN1c3BlY3QpKTsKKwkJfQorCQlpZiAobGluZV9ibGFtZXNbaV0uaXNfcGFyZW50KSB7CisJCQllLT5pZ25vcmVkID0gMTsKKwkJCWJsYW1lX29yaWdpbl9kZWNyZWYoZS0+c3VzcGVjdCk7CisJCQllLT5zdXNwZWN0ID0gYmxhbWVfb3JpZ2luX2luY3JlZihwYXJlbnQpOworCQkJZS0+c19sbm8gPSBsaW5lX2JsYW1lc1tpIC0gZW50cnlfbGVuICsgMV0uc19sbm87CisJCQllLT5uZXh0ID0gKmlnbm9yZWRwOworCQkJKmlnbm9yZWRwID0gZTsKKwkJfSBlbHNlIHsKKwkJCWUtPnVuYmxhbWFibGUgPSAxOworCQkJLyogZS0+c19sbm8gaXMgYWxyZWFkeSBpbiB0aGUgdGFyZ2V0J3MgYWRkcmVzcyBzcGFjZS4gKi8KKwkJCWUtPm5leHQgPSAqZGlmZnA7CisJCQkqZGlmZnAgPSBlOworCQl9CisJCWFzc2VydChlLT5udW1fbGluZXMgPT0gZW50cnlfbGVuKTsKKwkJZSA9IG5leHQ7CisJCWVudHJ5X2xlbiA9IDE7CisJfQorCWFzc2VydCghZSk7Cit9CisKKy8qCiAgKiBQcm9jZXNzIG9uZSBodW5rIGZyb20gdGhlIHBhdGNoIGJldHdlZW4gdGhlIGN1cnJlbnQgc3VzcGVjdCBmb3IKICAqIGJsYW1lX2VudHJ5IGUgYW5kIGl0cyBwYXJlbnQuICBUaGlzIGZpcnN0IGJsYW1lcyBhbnkgdW5maW5pc2hlZAogICogZW50cmllcyBiZWZvcmUgdGhlIGNodW5rICh3aGljaCBpcyB3aGVyZSB0YXJnZXQgYW5kIHBhcmVudCBzdGFydApAQCAtODQ4LDEzICsxNzEyLDIwIEBACiAgKiAtQyBvcHRpb25zIG1heSBsZWFkIHRvIG92ZXJsYXBwaW5nL2R1cGxpY2F0ZSBzb3VyY2UgbGluZSBudW1iZXIKICAqIHJhbmdlcywgYWxsIHdlIGNhbiByZWx5IG9uIGZyb20gc29ydGluZy9tZXJnaW5nIGlzIHRoZSBvcmRlciBvZiB0aGUKICAqIGZpcnN0IHN1c3BlY3QgbGluZSBudW1iZXIuCisgKgorICogdGxubzogbGluZSBudW1iZXIgaW4gdGhlIHRhcmdldCB3aGVyZSB0aGlzIGNodW5rIGJlZ2lucworICogc2FtZTogbGluZSBudW1iZXIgaW4gdGhlIHRhcmdldCB3aGVyZSB0aGlzIGNodW5rIGVuZHMKKyAqIG9mZnNldDogYWRkIHRvIHRsbm8gdG8gZ2V0IHRoZSBjaHVuayBzdGFydGluZyBwb2ludCBpbiB0aGUgcGFyZW50CisgKiBwYXJlbnRfbGVuOiBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHBhcmVudCBjaHVuawogICovCiBzdGF0aWMgdm9pZCBibGFtZV9jaHVuayhzdHJ1Y3QgYmxhbWVfZW50cnkgKioqZHN0cSwgc3RydWN0IGJsYW1lX2VudHJ5ICoqKnNyY3EsCi0JCQlpbnQgdGxubywgaW50IG9mZnNldCwgaW50IHNhbWUsCi0JCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwYXJlbnQpCisJCQlpbnQgdGxubywgaW50IG9mZnNldCwgaW50IHNhbWUsIGludCBwYXJlbnRfbGVuLAorCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqcGFyZW50LAorCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqdGFyZ2V0LCBpbnQgaWdub3JlX2RpZmZzKQogewogCXN0cnVjdCBibGFtZV9lbnRyeSAqZSA9ICoqc3JjcTsKLQlzdHJ1Y3QgYmxhbWVfZW50cnkgKnNhbWVwID0gTlVMTCwgKmRpZmZwID0gTlVMTDsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKnNhbWVwID0gTlVMTCwgKmRpZmZwID0gTlVMTCwgKmlnbm9yZWRwID0gTlVMTDsKKwlzdHJ1Y3QgYmxhbWVfbGluZV90cmFja2VyICpsaW5lX2JsYW1lcyA9IE5VTEw7CiAKIAl3aGlsZSAoZSAmJiBlLT5zX2xubyA8IHRsbm8pIHsKIAkJc3RydWN0IGJsYW1lX2VudHJ5ICpuZXh0ID0gZS0+bmV4dDsKQEAgLTg2NSwxNCArMTczNiw5IEBACiAJCSAqLwogCQlpZiAoZS0+c19sbm8gKyBlLT5udW1fbGluZXMgPiB0bG5vKSB7CiAJCQkvKiBNb3ZlIHNlY29uZCBoYWxmIHRvIGEgbmV3IHJlY29yZCAqLwotCQkJaW50IGxlbiA9IHRsbm8gLSBlLT5zX2xubzsKLQkJCXN0cnVjdCBibGFtZV9lbnRyeSAqbiA9IHhjYWxsb2MoMSwgc2l6ZW9mIChzdHJ1Y3QgYmxhbWVfZW50cnkpKTsKLQkJCW4tPnN1c3BlY3QgPSBlLT5zdXNwZWN0OwotCQkJbi0+bG5vID0gZS0+bG5vICsgbGVuOwotCQkJbi0+c19sbm8gPSBlLT5zX2xubyArIGxlbjsKLQkJCW4tPm51bV9saW5lcyA9IGUtPm51bV9saW5lcyAtIGxlbjsKLQkJCWUtPm51bV9saW5lcyA9IGxlbjsKLQkJCWUtPnNjb3JlID0gMDsKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqbjsKKworCQkJbiA9IHNwbGl0X2JsYW1lX2F0KGUsIHRsbm8gLSBlLT5zX2xubywgZS0+c3VzcGVjdCk7CiAJCQkvKiBQdXNoIG5ldyByZWNvcmQgdG8gZGlmZnAgKi8KIAkJCW4tPm5leHQgPSBkaWZmcDsKIAkJCWRpZmZwID0gbjsKQEAgLTkwOCw2ICsxNzc0LDE0IEBACiAJICovCiAJc2FtZXAgPSBOVUxMOwogCWRpZmZwID0gTlVMTDsKKworCWlmIChpZ25vcmVfZGlmZnMgJiYgc2FtZSAtIHRsbm8gPiAwKSB7CisJCWxpbmVfYmxhbWVzID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGJsYW1lX2xpbmVfdHJhY2tlciksCisJCQkJICAgICAgc2FtZSAtIHRsbm8pOworCQlndWVzc19saW5lX2JsYW1lcyhwYXJlbnQsIHRhcmdldCwgdGxubywgb2Zmc2V0LCBzYW1lLAorCQkJCSAgcGFyZW50X2xlbiwgbGluZV9ibGFtZXMpOworCX0KKwogCXdoaWxlIChlICYmIGUtPnNfbG5vIDwgc2FtZSkgewogCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBlLT5uZXh0OwogCkBAIC05MTksMjIgKzE3OTMsMzcgQEAKIAkJCSAqIE1vdmUgc2Vjb25kIGhhbGYgdG8gYSBuZXcgcmVjb3JkIHRvIGJlCiAJCQkgKiBwcm9jZXNzZWQgYnkgbGF0ZXIgY2h1bmtzCiAJCQkgKi8KLQkJCWludCBsZW4gPSBzYW1lIC0gZS0+c19sbm87Ci0JCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm4gPSB4Y2FsbG9jKDEsIHNpemVvZiAoc3RydWN0IGJsYW1lX2VudHJ5KSk7Ci0JCQluLT5zdXNwZWN0ID0gYmxhbWVfb3JpZ2luX2luY3JlZihlLT5zdXNwZWN0KTsKLQkJCW4tPmxubyA9IGUtPmxubyArIGxlbjsKLQkJCW4tPnNfbG5vID0gZS0+c19sbm8gKyBsZW47Ci0JCQluLT5udW1fbGluZXMgPSBlLT5udW1fbGluZXMgLSBsZW47Ci0JCQllLT5udW1fbGluZXMgPSBsZW47Ci0JCQllLT5zY29yZSA9IDA7CisJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm47CisKKwkJCW4gPSBzcGxpdF9ibGFtZV9hdChlLCBzYW1lIC0gZS0+c19sbm8sCisJCQkJCSAgIGJsYW1lX29yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCkpOwogCQkJLyogUHVzaCBuZXcgcmVjb3JkIHRvIHNhbWVwICovCiAJCQluLT5uZXh0ID0gc2FtZXA7CiAJCQlzYW1lcCA9IG47CiAJCX0KLQkJZS0+bmV4dCA9IGRpZmZwOwotCQlkaWZmcCA9IGU7CisJCWlmIChpZ25vcmVfZGlmZnMpIHsKKwkJCWlnbm9yZV9ibGFtZV9lbnRyeShlLCBwYXJlbnQsICZkaWZmcCwgJmlnbm9yZWRwLAorCQkJCQkgICBsaW5lX2JsYW1lcyArIGUtPnNfbG5vIC0gdGxubyk7CisJCX0gZWxzZSB7CisJCQllLT5uZXh0ID0gZGlmZnA7CisJCQlkaWZmcCA9IGU7CisJCX0KIAkJZSA9IG5leHQ7CiAJfQorCWZyZWUobGluZV9ibGFtZXMpOworCWlmIChpZ25vcmVkcCkgeworCQkvKgorCQkgKiBOb3RlIGlnbm9yZWRwIGlzIG5vdCBzb3J0ZWQgeWV0LCBhbmQgdGh1cyBuZWl0aGVyIGlzIGRzdHEuCisJCSAqIFRoYXQgbGlzdCBtdXN0IGJlIHNvcnRlZCBiZWZvcmUgd2UgcXVldWVfYmxhbWVzKCkuICBXZSBkZWZlcgorCQkgKiBzb3J0aW5nIHVudGlsIGFmdGVyIGFsbCBkaWZmIGh1bmtzIGFyZSBwcm9jZXNzZWQsIHNvIHRoYXQKKwkJICogZ3Vlc3NfbGluZV9ibGFtZXMoKSBjYW4gcGljayAqYW55KiBsaW5lIGluIHRoZSBwYXJlbnQuICBUaGUKKwkJICogc2xpZ2h0IGRyYXdiYWNrIGlzIHRoYXQgd2UgZW5kIHVwIHNvcnRpbmcgYWxsIGJsYW1lIGVudHJpZXMKKwkJICogcGFzc2VkIHRvIHRoZSBwYXJlbnQsIGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSB1bnJlbGF0ZWQgdG8KKwkJICogY2hhbmdlcyBtYWRlIGJ5IHRoZSBpZ25vcmVkIGNvbW1pdC4KKwkJICovCisJCSoqZHN0cSA9IHJldmVyc2VfYmxhbWUoaWdub3JlZHAsICoqZHN0cSk7CisJCSpkc3RxID0gJmlnbm9yZWRwLT5uZXh0OworCX0KIAkqKnNyY3EgPSByZXZlcnNlX2JsYW1lKGRpZmZwLCByZXZlcnNlX2JsYW1lKHNhbWVwLCBlKSk7CiAJLyogTW92ZSBhY3Jvc3MgZWxlbWVudHMgdGhhdCBhcmUgaW4gdGhlIHVuYmxhbWFibGUgcG9ydGlvbiAqLwogCWlmIChkaWZmcCkKQEAgLTk0Myw3ICsxODMyLDkgQEAKIAogc3RydWN0IGJsYW1lX2NodW5rX2NiX2RhdGEgewogCXN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudDsKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICp0YXJnZXQ7CiAJbG9uZyBvZmZzZXQ7CisJaW50IGlnbm9yZV9kaWZmczsKIAlzdHJ1Y3QgYmxhbWVfZW50cnkgKipkc3RxOwogCXN0cnVjdCBibGFtZV9lbnRyeSAqKnNyY3E7CiB9OwpAQCAtOTU2LDcgKzE4NDcsOCBAQAogCWlmIChzdGFydF9hIC0gc3RhcnRfYiAhPSBkLT5vZmZzZXQpCiAJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gYmxhbWU6OmJsYW1lX2NodW5rX2NiIik7CiAJYmxhbWVfY2h1bmsoJmQtPmRzdHEsICZkLT5zcmNxLCBzdGFydF9iLCBzdGFydF9hIC0gc3RhcnRfYiwKLQkJICAgIHN0YXJ0X2IgKyBjb3VudF9iLCBkLT5wYXJlbnQpOworCQkgICAgc3RhcnRfYiArIGNvdW50X2IsIGNvdW50X2EsIGQtPnBhcmVudCwgZC0+dGFyZ2V0LAorCQkgICAgZC0+aWdub3JlX2RpZmZzKTsKIAlkLT5vZmZzZXQgPSBzdGFydF9hICsgY291bnRfYSAtIChzdGFydF9iICsgY291bnRfYik7CiAJcmV0dXJuIDA7CiB9CkBAIC05NjgsNyArMTg2MCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBhc3NfYmxhbWVfdG9fcGFyZW50KHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKIAkJCQkgc3RydWN0IGJsYW1lX29yaWdpbiAqdGFyZ2V0LAotCQkJCSBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwYXJlbnQpCisJCQkJIHN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudCwgaW50IGlnbm9yZV9kaWZmcykKIHsKIAltbWZpbGVfdCBmaWxlX3AsIGZpbGVfbzsKIAlzdHJ1Y3QgYmxhbWVfY2h1bmtfY2JfZGF0YSBkOwpAQCAtOTc4LDExICsxODcwLDE1IEBACiAJCXJldHVybjsgLyogbm90aGluZyByZW1haW5zIGZvciB0aGlzIHRhcmdldCAqLwogCiAJZC5wYXJlbnQgPSBwYXJlbnQ7CisJZC50YXJnZXQgPSB0YXJnZXQ7CiAJZC5vZmZzZXQgPSAwOworCWQuaWdub3JlX2RpZmZzID0gaWdub3JlX2RpZmZzOwogCWQuZHN0cSA9ICZuZXdkZXN0OyBkLnNyY3EgPSAmdGFyZ2V0LT5zdXNwZWN0czsKIAotCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCBwYXJlbnQsICZmaWxlX3AsICZzYi0+bnVtX3JlYWRfYmxvYik7Ci0JZmlsbF9vcmlnaW5fYmxvYigmc2ItPnJldnMtPmRpZmZvcHQsIHRhcmdldCwgJmZpbGVfbywgJnNiLT5udW1fcmVhZF9ibG9iKTsKKwlmaWxsX29yaWdpbl9ibG9iKCZzYi0+cmV2cy0+ZGlmZm9wdCwgcGFyZW50LCAmZmlsZV9wLAorCQkJICZzYi0+bnVtX3JlYWRfYmxvYiwgaWdub3JlX2RpZmZzKTsKKwlmaWxsX29yaWdpbl9ibG9iKCZzYi0+cmV2cy0+ZGlmZm9wdCwgdGFyZ2V0LCAmZmlsZV9vLAorCQkJICZzYi0+bnVtX3JlYWRfYmxvYiwgaWdub3JlX2RpZmZzKTsKIAlzYi0+bnVtX2dldF9wYXRjaCsrOwogCiAJaWYgKGRpZmZfaHVua3MoJmZpbGVfcCwgJmZpbGVfbywgYmxhbWVfY2h1bmtfY2IsICZkLCBzYi0+eGRsX29wdHMpKQpAQCAtOTkwLDggKzE4ODYsMTMgQEAKIAkJICAgIG9pZF90b19oZXgoJnBhcmVudC0+Y29tbWl0LT5vYmplY3Qub2lkKSwKIAkJICAgIG9pZF90b19oZXgoJnRhcmdldC0+Y29tbWl0LT5vYmplY3Qub2lkKSk7CiAJLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBwYXJlbnQgKi8KLQlibGFtZV9jaHVuaygmZC5kc3RxLCAmZC5zcmNxLCBJTlRfTUFYLCBkLm9mZnNldCwgSU5UX01BWCwgcGFyZW50KTsKKwlibGFtZV9jaHVuaygmZC5kc3RxLCAmZC5zcmNxLCBJTlRfTUFYLCBkLm9mZnNldCwgSU5UX01BWCwgMCwKKwkJICAgIHBhcmVudCwgdGFyZ2V0LCAwKTsKIAkqZC5kc3RxID0gTlVMTDsKKwlpZiAoaWdub3JlX2RpZmZzKQorCQluZXdkZXN0ID0gbGxpc3RfbWVyZ2Vzb3J0KG5ld2Rlc3QsIGdldF9uZXh0X2JsYW1lLAorCQkJCQkgIHNldF9uZXh0X2JsYW1lLAorCQkJCQkgIGNvbXBhcmVfYmxhbWVfc3VzcGVjdCk7CiAJcXVldWVfYmxhbWVzKHNiLCBwYXJlbnQsIG5ld2Rlc3QpOwogCiAJcmV0dXJuOwpAQCAtMTE4OCw3ICsyMDg5LDggQEAKIAlpZiAoIXVuYmxhbWVkKQogCQlyZXR1cm47IC8qIG5vdGhpbmcgcmVtYWlucyBmb3IgdGhpcyB0YXJnZXQgKi8KIAotCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCBwYXJlbnQsICZmaWxlX3AsICZzYi0+bnVtX3JlYWRfYmxvYik7CisJZmlsbF9vcmlnaW5fYmxvYigmc2ItPnJldnMtPmRpZmZvcHQsIHBhcmVudCwgJmZpbGVfcCwKKwkJCSAmc2ItPm51bV9yZWFkX2Jsb2IsIDApOwogCWlmICghZmlsZV9wLnB0cikKIAkJcmV0dXJuOwogCkBAIC0xMzE3LDcgKzIyMTksOCBAQAogCQkJbm9yaWdpbiA9IGdldF9vcmlnaW4ocGFyZW50LCBwLT5vbmUtPnBhdGgpOwogCQkJb2lkY3B5KCZub3JpZ2luLT5ibG9iX29pZCwgJnAtPm9uZS0+b2lkKTsKIAkJCW5vcmlnaW4tPm1vZGUgPSBwLT5vbmUtPm1vZGU7Ci0JCQlmaWxsX29yaWdpbl9ibG9iKCZzYi0+cmV2cy0+ZGlmZm9wdCwgbm9yaWdpbiwgJmZpbGVfcCwgJnNiLT5udW1fcmVhZF9ibG9iKTsKKwkJCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCBub3JpZ2luLCAmZmlsZV9wLAorCQkJCQkgJnNiLT5udW1fcmVhZF9ibG9iLCAwKTsKIAkJCWlmICghZmlsZV9wLnB0cikKIAkJCQljb250aW51ZTsKIApAQCAtMTQ5NSwxMiArMjM5OCwzNSBAQAogCQkJYmxhbWVfb3JpZ2luX2luY3JlZihwb3JpZ2luKTsKIAkJCW9yaWdpbi0+cHJldmlvdXMgPSBwb3JpZ2luOwogCQl9Ci0JCXBhc3NfYmxhbWVfdG9fcGFyZW50KHNiLCBvcmlnaW4sIHBvcmlnaW4pOworCQlwYXNzX2JsYW1lX3RvX3BhcmVudChzYiwgb3JpZ2luLCBwb3JpZ2luLCAwKTsKIAkJaWYgKCFvcmlnaW4tPnN1c3BlY3RzKQogCQkJZ290byBmaW5pc2g7CiAJfQogCiAJLyoKKwkgKiBQYXNzIHJlbWFpbmluZyBzdXNwZWN0cyBmb3IgaWdub3JlZCBjb21taXRzIHRvIHRoZWlyIHBhcmVudHMuCisJICovCisJaWYgKG9pZHNldF9jb250YWlucygmc2ItPmlnbm9yZV9saXN0LCAmY29tbWl0LT5vYmplY3Qub2lkKSkgeworCQlmb3IgKGkgPSAwLCBzZyA9IGZpcnN0X3NjYXBlZ29hdChyZXZzLCBjb21taXQsIHNiLT5yZXZlcnNlKTsKKwkJICAgICBpIDwgbnVtX3NnICYmIHNnOworCQkgICAgIHNnID0gc2ctPm5leHQsIGkrKykgeworCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqcG9yaWdpbiA9IHNnX29yaWdpbltpXTsKKworCQkJaWYgKCFwb3JpZ2luKQorCQkJCWNvbnRpbnVlOworCQkJcGFzc19ibGFtZV90b19wYXJlbnQoc2IsIG9yaWdpbiwgcG9yaWdpbiwgMSk7CisJCQkvKgorCQkJICogUHJlZW1wdGl2ZWx5IGRyb3AgcG9yaWdpbiBzbyB3ZSBjYW4gcmVmcmVzaCB0aGUKKwkJCSAqIGZpbmdlcnByaW50cyBpZiB3ZSB1c2UgdGhlIHBhcmVudCBhZ2Fpbiwgd2hpY2ggY2FuCisJCQkgKiBvY2N1ciBpZiB5b3UgaWdub3JlIGJhY2stdG8tYmFjayBjb21taXRzLgorCQkJICovCisJCQlkcm9wX29yaWdpbl9ibG9iKHBvcmlnaW4pOworCQkJaWYgKCFvcmlnaW4tPnN1c3BlY3RzKQorCQkJCWdvdG8gZmluaXNoOworCQl9CisJfQorCisJLyoKIAkgKiBPcHRpb25hbGx5IGZpbmQgbW92ZXMgaW4gcGFyZW50cycgZmlsZXMuCiAJICovCiAJaWYgKG9wdCAmIFBJQ0tBWEVfQkxBTUVfTU9WRSkgewpAQCAtMTY0MCwzNyArMjU2NiwxNCBAQAogCX0KIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmdldF9uZXh0X2xpbmUoY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCkKLXsKLQljb25zdCBjaGFyICpubCA9IG1lbWNocihzdGFydCwgJ1xuJywgZW5kIC0gc3RhcnQpOwotCXJldHVybiBubCA/IG5sICsgMSA6IGVuZDsKLX0KLQogLyoKICAqIFRvIGFsbG93IHF1aWNrIGFjY2VzcyB0byB0aGUgY29udGVudHMgb2YgbnRoIGxpbmUgaW4gdGhlCiAgKiBmaW5hbCBpbWFnZSwgcHJlcGFyZSBhbiBpbmRleCBpbiB0aGUgc2NvcmVib2FyZC4KICAqLwogc3RhdGljIGludCBwcmVwYXJlX2xpbmVzKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYikKIHsKLQljb25zdCBjaGFyICpidWYgPSBzYi0+ZmluYWxfYnVmOwotCXVuc2lnbmVkIGxvbmcgbGVuID0gc2ItPmZpbmFsX2J1Zl9zaXplOwotCWNvbnN0IGNoYXIgKmVuZCA9IGJ1ZiArIGxlbjsKLQljb25zdCBjaGFyICpwOwotCWludCAqbGluZW5vOwotCWludCBudW0gPSAwOwotCi0JZm9yIChwID0gYnVmOyBwIDwgZW5kOyBwID0gZ2V0X25leHRfbGluZShwLCBlbmQpKQotCQludW0rKzsKLQotCUFMTE9DX0FSUkFZKHNiLT5saW5lbm8sIG51bSArIDEpOwotCWxpbmVubyA9IHNiLT5saW5lbm87Ci0KLQlmb3IgKHAgPSBidWY7IHAgPCBlbmQ7IHAgPSBnZXRfbmV4dF9saW5lKHAsIGVuZCkpCi0JCSpsaW5lbm8rKyA9IHAgLSBidWY7Ci0KLQkqbGluZW5vID0gbGVuOwotCi0Jc2ItPm51bV9saW5lcyA9IG51bTsKKwlzYi0+bnVtX2xpbmVzID0gZmluZF9saW5lX3N0YXJ0cygmc2ItPmxpbmVubywgc2ItPmZpbmFsX2J1ZiwKKwkJCQkJIHNiLT5maW5hbF9idWZfc2l6ZSk7CiAJcmV0dXJuIHNiLT5udW1fbGluZXM7CiB9CiAKZGlmZiAtLWdpdCBhL2JsYW1lLmggYi9ibGFtZS5oCmluZGV4IGQ2MmY4MGYuLjRhOWUxMjcgMTAwNjQ0Ci0tLSBhL2JsYW1lLmgKKysrIGIvYmxhbWUuaApAQCAtNTEsNiArNTEsOCBAQAogCSAqLwogCXN0cnVjdCBibGFtZV9lbnRyeSAqc3VzcGVjdHM7CiAJbW1maWxlX3QgZmlsZTsKKwlpbnQgbnVtX2xpbmVzOworCXZvaWQgKmZpbmdlcnByaW50czsKIAlzdHJ1Y3Qgb2JqZWN0X2lkIGJsb2Jfb2lkOwogCXVuc2lnbmVkIHNob3J0IG1vZGU7CiAJLyogZ3VpbHR5IGdldHMgc2V0IHdoZW4gc2hpcHBpbmcgYW55IHN1c3BlY3RzIHRvIHRoZSBmaW5hbApAQCAtOTIsNiArOTQsOCBAQAogCSAqIHNjYW5uaW5nIHRoZSBsaW5lcyBvdmVyIGFuZCBvdmVyLgogCSAqLwogCXVuc2lnbmVkIHNjb3JlOworCWludCBpZ25vcmVkOworCWludCB1bmJsYW1hYmxlOwogfTsKIAogLyoKQEAgLTExNyw2ICsxMjEsOCBAQAogCS8qIGxpbmtlZCBsaXN0IG9mIGJsYW1lcyAqLwogCXN0cnVjdCBibGFtZV9lbnRyeSAqZW50OwogCisJc3RydWN0IG9pZHNldCBpZ25vcmVfbGlzdDsKKwogCS8qIGxvb2stdXAgYSBsaW5lIGluIHRoZSBmaW5hbCBidWZmZXIgKi8KIAlpbnQgbnVtX2xpbmVzOwogCWludCAqbGluZW5vOwpkaWZmIC0tZ2l0IGEvYmxvYi5jIGIvYmxvYi5jCmluZGV4IDM0MmJkYmIuLjM2ZjlhYmQgMTAwNjQ0Ci0tLSBhL2Jsb2IuYworKysgYi9ibG9iLmMKQEAgLTcsMTAgKzcsOSBAQAogCiBzdHJ1Y3QgYmxvYiAqbG9va3VwX2Jsb2Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKIHsKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHIsIG9pZC0+aGFzaCk7CisJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChyLCBvaWQpOwogCWlmICghb2JqKQotCQlyZXR1cm4gY3JlYXRlX29iamVjdChyLCBvaWQtPmhhc2gsCi0JCQkJICAgICBhbGxvY19ibG9iX25vZGUocikpOworCQlyZXR1cm4gY3JlYXRlX29iamVjdChyLCBvaWQsIGFsbG9jX2Jsb2Jfbm9kZShyKSk7CiAJcmV0dXJuIG9iamVjdF9hc190eXBlKHIsIG9iaiwgT0JKX0JMT0IsIDApOwogfQogCmRpZmYgLS1naXQgYS9icmFuY2guYyBiL2JyYW5jaC5jCmluZGV4IGE1OTRjYzIuLjU3OTQ5NDcgMTAwNjQ0Ci0tLSBhL2JyYW5jaC5jCisrKyBiL2JyYW5jaC5jCkBAIC0zMzgsMTQgKzMzOCwxOSBAQAogCWZyZWUocmVhbF9yZWYpOwogfQogCi12b2lkIHJlbW92ZV9icmFuY2hfc3RhdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit2b2lkIHJlbW92ZV9tZXJnZV9icmFuY2hfc3RhdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCiB7Ci0Jc2VxdWVuY2VyX3Bvc3RfY29tbWl0X2NsZWFudXAocik7CiAJdW5saW5rKGdpdF9wYXRoX21lcmdlX2hlYWQocikpOwogCXVubGluayhnaXRfcGF0aF9tZXJnZV9ycihyKSk7CiAJdW5saW5rKGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CiAJdW5saW5rKGdpdF9wYXRoX21lcmdlX21vZGUocikpOworfQorCit2b2lkIHJlbW92ZV9icmFuY2hfc3RhdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCB2ZXJib3NlKQoreworCXNlcXVlbmNlcl9wb3N0X2NvbW1pdF9jbGVhbnVwKHIsIHZlcmJvc2UpOwogCXVubGluayhnaXRfcGF0aF9zcXVhc2hfbXNnKHIpKTsKKwlyZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHIpOwogfQogCiB2b2lkIGRpZV9pZl9jaGVja2VkX291dChjb25zdCBjaGFyICpicmFuY2gsIGludCBpZ25vcmVfY3VycmVudF93b3JrdHJlZSkKZGlmZiAtLWdpdCBhL2JyYW5jaC5oIGIvYnJhbmNoLmgKaW5kZXggNmYzOGRiMS4uZGYwYmU2MSAxMDA2NDQKLS0tIGEvYnJhbmNoLmgKKysrIGIvYnJhbmNoLmgKQEAgLTYxLDEwICs2MSwxNiBAQAogaW50IHZhbGlkYXRlX25ld19icmFuY2huYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnJlZiwgaW50IGZvcmNlKTsKIAogLyoKKyAqIFJlbW92ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVyZ2Ugc3RhdGUgb24gdGhlIGN1cnJlbnQKKyAqIGJyYW5jaC4gKEUuZy4sIE1FUkdFX0hFQUQpCisgKi8KK3ZvaWQgcmVtb3ZlX21lcmdlX2JyYW5jaF9zdGF0ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKy8qCiAgKiBSZW1vdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHdvcmtpbmcgb24gdGhlIGN1cnJlbnQKICAqIGJyYW5jaC4gKEUuZy4sIE1FUkdFX0hFQUQpCiAgKi8KLXZvaWQgcmVtb3ZlX2JyYW5jaF9zdGF0ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Cit2b2lkIHJlbW92ZV9icmFuY2hfc3RhdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCB2ZXJib3NlKTsKIAogLyoKICAqIENvbmZpZ3VyZSBsb2NhbCBicmFuY2ggImxvY2FsIiBhcyBkb3duc3RyZWFtIHRvIGJyYW5jaCAicmVtb3RlIgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi5oIGIvYnVpbHRpbi5oCmluZGV4IGVjN2UwOTUuLjVjZjVkZjYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4uaAorKysgYi9idWlsdGluLmgKQEAgLTE2MCw2ICsxNjAsNyBAQAogaW50IGNtZF9kaWZmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGludCBjbWRfZGlmZl90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGludCBjbWRfZGlmZnRvb2woaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9lbnZfX2hlbHBlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBpbnQgY21kX2Zhc3RfZXhwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGludCBjbWRfZmV0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogaW50IGNtZF9mZXRjaF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKQEAgLTIxNCw2ICsyMTUsNyBAQAogaW50IGNtZF9yZXBhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogaW50IGNtZF9yZXJlcmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogaW50IGNtZF9yZXNldChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3Jlc3RvcmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogaW50IGNtZF9yZXZfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBpbnQgY21kX3Jldl9wYXJzZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBpbnQgY21kX3JldmVydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CkBAIC0yMjcsNiArMjI5LDcgQEAKIGludCBjbWRfc3Rhc2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogaW50IGNtZF9zdHJpcHNwYWNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGludCBjbWRfc3VibW9kdWxlX19oZWxwZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9zd2l0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogaW50IGNtZF9zeW1ib2xpY19yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogaW50IGNtZF90YWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogaW50IGNtZF90YXJfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CmRpZmYgLS1naXQgYS9idWlsdGluL2FtLmMgYi9idWlsdGluL2FtLmMKaW5kZXggNzgzODlkMC4uMWFlYTY1NyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9hbS5jCisrKyBiL2J1aWx0aW4vYW0uYwpAQCAtMTgwMSw3ICsxODAxLDcgQEAKIAkgKi8KIAlpZiAoIXN0YXRlLT5yZWJhc2luZykgewogCQlhbV9kZXN0cm95KHN0YXRlKTsKLQkJY2xvc2VfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKKwkJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKIAkJcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9nY19hdXRvLCBSVU5fR0lUX0NNRCk7CiAJfQogfQpAQCAtMTk1Niw3ICsxOTU2LDcgQEAKIAlpZiAobWVyZ2VfdHJlZShyZW1vdGVfdHJlZSkpCiAJCXJldHVybiAtMTsKIAotCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnkpOworCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnksIDApOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluL2JsYW1lLmMgYi9idWlsdGluL2JsYW1lLmMKaW5kZXggMjFjZGU1Ny4uYjY1MzRkNCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9ibGFtZS5jCisrKyBiL2J1aWx0aW4vYmxhbWUuYwpAQCAtNTMsMTQgKzUzLDE3IEBACiBzdGF0aWMgaW50IHNob3dfcHJvZ3Jlc3M7CiBzdGF0aWMgY2hhciByZXBlYXRlZF9tZXRhX2NvbG9yW0NPTE9SX01BWExFTl07CiBzdGF0aWMgaW50IGNvbG9yaW5nX21vZGU7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGlnbm9yZV9yZXZzX2ZpbGVfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgaW50IG1hcmtfdW5ibGFtYWJsZV9saW5lczsKK3N0YXRpYyBpbnQgbWFya19pZ25vcmVkX2xpbmVzOwogCiBzdGF0aWMgc3RydWN0IGRhdGVfbW9kZSBibGFtZV9kYXRlX21vZGUgPSB7IERBVEVfSVNPODYwMSB9Owogc3RhdGljIHNpemVfdCBibGFtZV9kYXRlX3dpZHRoOwogCiBzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG1haWxtYXAgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwogCi0jaWZuZGVmIERFQlVHCi0jZGVmaW5lIERFQlVHIDAKKyNpZm5kZWYgREVCVUdfQkxBTUUKKyNkZWZpbmUgREVCVUdfQkxBTUUgMAogI2VuZGlmCiAKIHN0YXRpYyB1bnNpZ25lZCBibGFtZV9tb3ZlX3Njb3JlOwpAQCAtNDgwLDYgKzQ4MywxNCBAQAogCQkJfQogCQl9CiAKKwkJaWYgKG1hcmtfdW5ibGFtYWJsZV9saW5lcyAmJiBlbnQtPnVuYmxhbWFibGUpIHsKKwkJCWxlbmd0aC0tOworCQkJcHV0Y2hhcignKicpOworCQl9CisJCWlmIChtYXJrX2lnbm9yZWRfbGluZXMgJiYgZW50LT5pZ25vcmVkKSB7CisJCQlsZW5ndGgtLTsKKwkJCXB1dGNoYXIoJz8nKTsKKwkJfQogCQlwcmludGYoIiUuKnMiLCBsZW5ndGgsIGhleCk7CiAJCWlmIChvcHQgJiBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUKSB7CiAJCQljb25zdCBjaGFyICpuYW1lOwpAQCAtNjk2LDYgKzcwNywyNCBAQAogCQlwYXJzZV9kYXRlX2Zvcm1hdCh2YWx1ZSwgJmJsYW1lX2RhdGVfbW9kZSk7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJibGFtZS5pZ25vcmVyZXZzZmlsZSIpKSB7CisJCWNvbnN0IGNoYXIgKnN0cjsKKwkJaW50IHJldDsKKworCQlyZXQgPSBnaXRfY29uZmlnX3BhdGhuYW1lKCZzdHIsIHZhciwgdmFsdWUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZpZ25vcmVfcmV2c19maWxlX2xpc3QsIHN0cik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJibGFtZS5tYXJrdW5ibGFtYWJsZWxpbmVzIikpIHsKKwkJbWFya191bmJsYW1hYmxlX2xpbmVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUubWFya2lnbm9yZWRsaW5lcyIpKSB7CisJCW1hcmtfaWdub3JlZF9saW5lcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQogCWlmICghc3RyY21wKHZhciwgImNvbG9yLmJsYW1lLnJlcGVhdGVkbGluZXMiKSkgewogCQlpZiAoY29sb3JfcGFyc2VfbWVtKHZhbHVlLCBzdHJsZW4odmFsdWUpLCByZXBlYXRlZF9tZXRhX2NvbG9yKSkKIAkJCXdhcm5pbmcoXygiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiKSwKQEAgLTc3NSw2ICs4MDQsMjcgQEAKIAlyZXR1cm4gT0JKX05PTkUgPCBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZvaWQsIE5VTEwpOwogfQogCitzdGF0aWMgdm9pZCBidWlsZF9pZ25vcmVsaXN0KHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJCSAgICAgc3RydWN0IHN0cmluZ19saXN0ICppZ25vcmVfcmV2c19maWxlX2xpc3QsCisJCQkgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqaWdub3JlX3Jldl9saXN0KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJb2lkc2V0X2luaXQoJnNiLT5pZ25vcmVfbGlzdCwgMCk7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpLCBpZ25vcmVfcmV2c19maWxlX2xpc3QpIHsKKwkJaWYgKCFzdHJjbXAoaS0+c3RyaW5nLCAiIikpCisJCQlvaWRzZXRfY2xlYXIoJnNiLT5pZ25vcmVfbGlzdCk7CisJCWVsc2UKKwkJCW9pZHNldF9wYXJzZV9maWxlKCZzYi0+aWdub3JlX2xpc3QsIGktPnN0cmluZyk7CisJfQorCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaSwgaWdub3JlX3Jldl9saXN0KSB7CisJCWlmIChnZXRfb2lkX2NvbW1pdHRpc2goaS0+c3RyaW5nLCAmb2lkKSkKKwkJCWRpZShfKCJjYW5ub3QgZmluZCByZXZpc2lvbiAlcyB0byBpZ25vcmUiKSwgaS0+c3RyaW5nKTsKKwkJb2lkc2V0X2luc2VydCgmc2ItPmlnbm9yZV9saXN0LCAmb2lkKTsKKwl9Cit9CisKIGludCBjbWRfYmxhbWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJc3RydWN0IHJldl9pbmZvIHJldnM7CkBAIC03ODYsNiArODM2LDcgQEAKIAlzdHJ1Y3QgcHJvZ3Jlc3NfaW5mbyBwaSA9IHsgTlVMTCwgMCB9OwogCiAJc3RydWN0IHN0cmluZ19saXN0IHJhbmdlX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBpZ25vcmVfcmV2X2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwogCWludCBvdXRwdXRfb3B0aW9uID0gMCwgb3B0ID0gMDsKIAlpbnQgc2hvd19zdGF0cyA9IDA7CiAJY29uc3QgY2hhciAqcmV2c19maWxlID0gTlVMTDsKQEAgLTgwNyw2ICs4NTgsOCBAQAogCQlPUFRfQklUKCdzJywgTlVMTCwgJm91dHB1dF9vcHRpb24sIE5fKCJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9OT19BVVRIT1IpLAogCQlPUFRfQklUKCdlJywgInNob3ctZW1haWwiLCAmb3V0cHV0X29wdGlvbiwgTl8oIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIpLCBPVVRQVVRfU0hPV19FTUFJTCksCiAJCU9QVF9CSVQoJ3cnLCBOVUxMLCAmeGRsX29wdHMsIE5fKCJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIpLCBYREZfSUdOT1JFX1dISVRFU1BBQ0UpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImlnbm9yZS1yZXYiLCAmaWdub3JlX3Jldl9saXN0LCBOXygicmV2IiksIE5fKCJJZ25vcmUgPHJldj4gd2hlbiBibGFtaW5nIikpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImlnbm9yZS1yZXZzLWZpbGUiLCAmaWdub3JlX3JldnNfZmlsZV9saXN0LCBOXygiZmlsZSIpLCBOXygiSWdub3JlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiIpKSwKIAkJT1BUX0JJVCgwLCAiY29sb3ItbGluZXMiLCAmb3V0cHV0X29wdGlvbiwgTl8oImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiKSwgT1VUUFVUX0NPTE9SX0xJTkUpLAogCQlPUFRfQklUKDAsICJjb2xvci1ieS1hZ2UiLCAmb3V0cHV0X29wdGlvbiwgTl8oImNvbG9yIGxpbmVzIGJ5IGFnZSIpLCBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUiksCiAKQEAgLTEwMTIsNiArMTA2NSw5IEBACiAJc2IuY29udGVudHNfZnJvbSA9IGNvbnRlbnRzX2Zyb207CiAJc2IucmV2ZXJzZSA9IHJldmVyc2U7CiAJc2IucmVwbyA9IHRoZV9yZXBvc2l0b3J5OworCWJ1aWxkX2lnbm9yZWxpc3QoJnNiLCAmaWdub3JlX3JldnNfZmlsZV9saXN0LCAmaWdub3JlX3Jldl9saXN0KTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmaWdub3JlX3JldnNfZmlsZV9saXN0LCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmaWdub3JlX3Jldl9saXN0LCAwKTsKIAlzZXR1cF9zY29yZWJvYXJkKCZzYiwgcGF0aCwgJm8pOwogCWxubyA9IHNiLm51bV9saW5lczsKIApAQCAtMTA2Miw3ICsxMTE4LDcgQEAKIAlpZiAoYmxhbWVfY29weV9zY29yZSkKIAkJc2IuY29weV9zY29yZSA9IGJsYW1lX2NvcHlfc2NvcmU7CiAKLQlzYi5kZWJ1ZyA9IERFQlVHOworCXNiLmRlYnVnID0gREVCVUdfQkxBTUU7CiAJc2Iub25fc2FuaXR5X2ZhaWwgPSAmc2FuaXR5X2NoZWNrX29uX2ZhaWw7CiAKIAlzYi5zaG93X3Jvb3QgPSBzaG93X3Jvb3Q7CmRpZmYgLS1naXQgYS9idWlsdGluL2JyYW5jaC5jIGIvYnVpbHRpbi9icmFuY2guYwppbmRleCBkNDM1OWIzLi4yZWYyMTQ2IDEwMDY0NAotLS0gYS9idWlsdGluL2JyYW5jaC5jCisrKyBiL2J1aWx0aW4vYnJhbmNoLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlHSVRfQ09MT1JfTk9STUFMLCAgICAgICAvKiBMT0NBTCAqLwogCUdJVF9DT0xPUl9HUkVFTiwgICAgICAgIC8qIENVUlJFTlQgKi8KIAlHSVRfQ09MT1JfQkxVRSwgICAgICAgICAvKiBVUFNUUkVBTSAqLworCUdJVF9DT0xPUl9DWUFOLCAgICAgICAgIC8qIFdPUktUUkVFICovCiB9OwogZW51bSBjb2xvcl9icmFuY2ggewogCUJSQU5DSF9DT0xPUl9SRVNFVCA9IDAsCkBAIC01NCw3ICs1NSw4IEBACiAJQlJBTkNIX0NPTE9SX1JFTU9URSA9IDIsCiAJQlJBTkNIX0NPTE9SX0xPQ0FMID0gMywKIAlCUkFOQ0hfQ09MT1JfQ1VSUkVOVCA9IDQsCi0JQlJBTkNIX0NPTE9SX1VQU1RSRUFNID0gNQorCUJSQU5DSF9DT0xPUl9VUFNUUkVBTSA9IDUsCisJQlJBTkNIX0NPTE9SX1dPUktUUkVFID0gNgogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvbG9yX2JyYW5jaF9zbG90c1tdID0gewpAQCAtNjQsNiArNjYsNyBAQAogCVtCUkFOQ0hfQ09MT1JfTE9DQUxdCT0gImxvY2FsIiwKIAlbQlJBTkNIX0NPTE9SX0NVUlJFTlRdCT0gImN1cnJlbnQiLAogCVtCUkFOQ0hfQ09MT1JfVVBTVFJFQU1dID0gInVwc3RyZWFtIiwKKwlbQlJBTkNIX0NPTE9SX1dPUktUUkVFXSA9ICJ3b3JrdHJlZSIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG91dHB1dCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOwpAQCAtMzQyLDkgKzM0NSwxMCBAQAogCXN0cnVjdCBzdHJidWYgbG9jYWwgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3Qgc3RyYnVmIHJlbW90ZSA9IFNUUkJVRl9JTklUOwogCi0Jc3RyYnVmX2FkZGYoJmxvY2FsLCAiJSUoaWYpJSUoSEVBRCklJSh0aGVuKSogJXMlJShlbHNlKSAgJXMlJShlbmQpIiwKLQkJICAgIGJyYW5jaF9nZXRfY29sb3IoQlJBTkNIX0NPTE9SX0NVUlJFTlQpLAotCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfTE9DQUwpKTsKKwlzdHJidWZfYWRkZigmbG9jYWwsICIlJShpZiklJShIRUFEKSUlKHRoZW4pKiAlcyUlKGVsc2UpJSUoaWYpJSUod29ya3RyZWVwYXRoKSUlKHRoZW4pKyAlcyUlKGVsc2UpICAlcyUlKGVuZCklJShlbmQpIiwKKwkJCWJyYW5jaF9nZXRfY29sb3IoQlJBTkNIX0NPTE9SX0NVUlJFTlQpLAorCQkJYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfV09SS1RSRUUpLAorCQkJYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfTE9DQUwpKTsKIAlzdHJidWZfYWRkZigmcmVtb3RlLCAiICAlcyIsCiAJCSAgICBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRU1PVEUpKTsKIApAQCAtMzYzLDkgKzM2NywxMyBAQAogCQlzdHJidWZfYWRkZigmbG9jYWwsICIgJXMgIiwgb2JuYW1lLmJ1Zik7CiAKIAkJaWYgKGZpbHRlci0+dmVyYm9zZSA+IDEpCisJCXsKKwkJCXN0cmJ1Zl9hZGRmKCZsb2NhbCwgIiUlKGlmOm5vdGVxdWFscz0qKSUlKEhFQUQpJSUodGhlbiklJShpZiklJSh3b3JrdHJlZXBhdGgpJSUodGhlbikoJXMlJSh3b3JrdHJlZXBhdGgpJXMpICUlKGVuZCklJShlbmQpIiwKKwkJCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfV09SS1RSRUUpLCBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRVNFVCkpOwogCQkJc3RyYnVmX2FkZGYoJmxvY2FsLCAiJSUoaWYpJSUodXBzdHJlYW0pJSUodGhlbilbJXMlJSh1cHN0cmVhbTpzaG9ydCklcyUlKGlmKSUlKHVwc3RyZWFtOnRyYWNrKSIKIAkJCQkgICAgIiUlKHRoZW4pOiAlJSh1cHN0cmVhbTp0cmFjayxub2JyYWNrZXQpJSUoZW5kKV0gJSUoZW5kKSUlKGNvbnRlbnRzOnN1YmplY3QpIiwKIAkJCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfVVBTVFJFQU0pLCBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRVNFVCkpOworCQl9CiAJCWVsc2UKIAkJCXN0cmJ1Zl9hZGRmKCZsb2NhbCwgIiUlKGlmKSUlKHVwc3RyZWFtOnRyYWNrKSUlKHRoZW4pJSUodXBzdHJlYW06dHJhY2spICUlKGVuZCklJShjb250ZW50czpzdWJqZWN0KSIpOwogCkBAIC04MzAsNyArODM4LDggQEAKIAkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJfSBlbHNlIGlmIChhcmdjID4gMCAmJiBhcmdjIDw9IDIpIHsKIAkJaWYgKGZpbHRlci5raW5kICE9IEZJTFRFUl9SRUZTX0JSQU5DSEVTKQotCQkJZGllKF8oIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiKSk7CisJCQlkaWUoXygiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisJCQkJICAiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iKSk7CiAKIAkJaWYgKHRyYWNrID09IEJSQU5DSF9UUkFDS19PVkVSUklERSkKIAkJCWRpZShfKCJ0aGUgJy0tc2V0LXVwc3RyZWFtJyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSAnLS10cmFjaycgb3IgJy0tc2V0LXVwc3RyZWFtLXRvJyBpbnN0ZWFkLiIpKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2F0LWZpbGUuYyBiL2J1aWx0aW4vY2F0LWZpbGUuYwppbmRleCAwZjA5MjM4Li45OTVkNDdjIDEwMDY0NAotLS0gYS9idWlsdGluL2NhdC1maWxlLmMKKysrIGIvYnVpbHRpbi9jYXQtZmlsZS5jCkBAIC0xNzIsNyArMTcyLDggQEAKIAkJCSAqIGZhbGwtYmFjayB0byB0aGUgdXN1YWwgY2FzZS4KIAkJCSAqLwogCQl9Ci0JCWJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKCZvaWQsIGV4cF90eXBlLCAmc2l6ZSwgTlVMTCk7CisJCWJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICZvaWQsIGV4cF90eXBlLCAmc2l6ZSwgTlVMTCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2hlY2tvdXQuYyBiL2J1aWx0aW4vY2hlY2tvdXQuYwppbmRleCBmZmE3NzZjLi45MWY4NTA5IDEwMDY0NAotLS0gYS9idWlsdGluL2NoZWNrb3V0LmMKKysrIGIvYnVpbHRpbi9jaGVja291dC5jCkBAIC0xLDMyICsxLDMxIEBACiAjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKICNpbmNsdWRlICJidWlsdGluLmgiCi0jaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYWR2aWNlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKICNpbmNsdWRlICJjaGVja291dC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgogI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCiAjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInJlZnMuaCIKLSNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKLSNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgogI2luY2x1ZGUgInRyZWUuaCIKICNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKLSNpbmNsdWRlICJjYWNoZS10cmVlLmgiCiAjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCi0jaW5jbHVkZSAiZGlyLmgiCi0jaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKLSNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKLSNpbmNsdWRlICJicmFuY2guaCIKLSNpbmNsdWRlICJkaWZmLmgiCi0jaW5jbHVkZSAicmV2aXNpb24uaCIKLSNpbmNsdWRlICJyZW1vdGUuaCIKLSNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCiAjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAibGwtbWVyZ2UuaCIKLSNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKLSNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCi0jaW5jbHVkZSAic3VibW9kdWxlLmgiCi0jaW5jbHVkZSAiYWR2aWNlLmgiCi0KLXN0YXRpYyBpbnQgY2hlY2tvdXRfb3B0aW1pemVfbmV3X2JyYW5jaDsKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaGVja291dF91c2FnZVtdID0gewogCU5fKCJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iKSwKQEAgLTM0LDEyICszMywyMyBAQAogCU5VTEwsCiB9OwogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN3aXRjaF9icmFuY2hfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIiksCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVzdG9yZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIpLAorCU5VTEwsCit9OworCiBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyB7CiAJaW50IHBhdGNoX21vZGU7CiAJaW50IHF1aWV0OwogCWludCBtZXJnZTsKIAlpbnQgZm9yY2U7CiAJaW50IGZvcmNlX2RldGFjaDsKKwlpbnQgaW1wbGljaXRfZGV0YWNoOwogCWludCB3cml0ZW91dF9zdGFnZTsKIAlpbnQgb3ZlcndyaXRlX2lnbm9yZTsKIAlpbnQgaWdub3JlX3NraXB3b3JrdHJlZTsKQEAgLTQ3LDEwICs1NywxOSBAQAogCWludCBzaG93X3Byb2dyZXNzOwogCWludCBjb3VudF9jaGVja291dF9wYXRoczsKIAlpbnQgb3ZlcmxheV9tb2RlOwotCS8qCi0JICogSWYgbmV3IGNoZWNrb3V0IG9wdGlvbnMgYXJlIGFkZGVkLCBza2lwX21lcmdlX3dvcmtpbmdfdHJlZQotCSAqIHNob3VsZCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5LgotCSAqLworCWludCBkd2ltX25ld19sb2NhbF9icmFuY2g7CisJaW50IGRpc2NhcmRfY2hhbmdlczsKKwlpbnQgYWNjZXB0X3JlZjsKKwlpbnQgYWNjZXB0X3BhdGhzcGVjOworCWludCBzd2l0Y2hfYnJhbmNoX2RvaW5nX25vdGhpbmdfaXNfb2s7CisJaW50IG9ubHlfbWVyZ2Vfb25fc3dpdGNoaW5nX2JyYW5jaGVzOworCWludCBjYW5fc3dpdGNoX3doZW5faW5fcHJvZ3Jlc3M7CisJaW50IG9ycGhhbl9mcm9tX2VtcHR5X3RyZWU7CisJaW50IGVtcHR5X3BhdGhzcGVjX29rOworCWludCBjaGVja291dF9pbmRleDsKKwlpbnQgY2hlY2tvdXRfd29ya3RyZWU7CisJY29uc3QgY2hhciAqaWdub3JlX3VubWVyZ2VkX29wdDsKKwlpbnQgaWdub3JlX3VubWVyZ2VkOwogCiAJY29uc3QgY2hhciAqbmV3X2JyYW5jaDsKIAljb25zdCBjaGFyICpuZXdfYnJhbmNoX2ZvcmNlOwpAQCAtNTgsMTAgKzc3LDEyIEBACiAJaW50IG5ld19icmFuY2hfbG9nOwogCWVudW0gYnJhbmNoX3RyYWNrIHRyYWNrOwogCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRpb25zOworCWNoYXIgKmNvbmZsaWN0X3N0eWxlOwogCiAJaW50IGJyYW5jaF9leGlzdHM7CiAJY29uc3QgY2hhciAqcHJlZml4OwogCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwljb25zdCBjaGFyICpmcm9tX3RyZWVpc2g7CiAJc3RydWN0IHRyZWUgKnNvdXJjZV90cmVlOwogfTsKIApAQCAtMzEzLDEwMiArMzM0LDEzIEBACiAJfQogfQogCi1zdGF0aWMgaW50IGNoZWNrb3V0X3BhdGhzKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAotCQkJICBjb25zdCBjaGFyICpyZXZpc2lvbikKK3N0YXRpYyBpbnQgY2hlY2tvdXRfd29ya3RyZWUoY29uc3Qgc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMpCiB7Ci0JaW50IHBvczsKIAlzdHJ1Y3QgY2hlY2tvdXQgc3RhdGUgPSBDSEVDS09VVF9JTklUOwotCXN0YXRpYyBjaGFyICpwc19tYXRjaGVkOwotCXN0cnVjdCBvYmplY3RfaWQgcmV2OwotCXN0cnVjdCBjb21taXQgKmhlYWQ7Ci0JaW50IGVycnMgPSAwOwotCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOwogCWludCBucl9jaGVja291dHMgPSAwLCBucl91bm1lcmdlZCA9IDA7CisJaW50IGVycnMgPSAwOworCWludCBwb3M7CiAKLQl0cmFjZTJfY21kX21vZGUob3B0cy0+cGF0Y2hfbW9kZSA/ICJwYXRjaCIgOiAicGF0aCIpOwotCi0JaWYgKG9wdHMtPnRyYWNrICE9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCkKLQkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIpLCAiLS10cmFjayIpOwotCi0JaWYgKG9wdHMtPm5ld19icmFuY2hfbG9nKQotCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIiksICItbCIpOwotCi0JaWYgKG9wdHMtPmZvcmNlICYmIG9wdHMtPnBhdGNoX21vZGUpCi0JCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiKSwgIi1mIik7Ci0KLQlpZiAob3B0cy0+Zm9yY2VfZGV0YWNoKQotCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIiksICItLWRldGFjaCIpOwotCi0JaWYgKG9wdHMtPm1lcmdlICYmIG9wdHMtPnBhdGNoX21vZGUpCi0JCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiKSwgIi0tbWVyZ2UiLCAiLS1wYXRjaCIpOwotCi0JaWYgKG9wdHMtPmZvcmNlICYmIG9wdHMtPm1lcmdlKQotCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIiksICItZiIsICItbSIpOwotCi0JaWYgKG9wdHMtPm5ld19icmFuY2gpCi0JCWRpZShfKCJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iKSwKLQkJICAgIG9wdHMtPm5ld19icmFuY2gpOwotCi0JaWYgKG9wdHMtPnBhdGNoX21vZGUpCi0JCXJldHVybiBydW5fYWRkX2ludGVyYWN0aXZlKHJldmlzaW9uLCAiLS1wYXRjaD1jaGVja291dCIsCi0JCQkJCSAgICZvcHRzLT5wYXRoc3BlYyk7Ci0KLQlyZXBvX2hvbGRfbG9ja2VkX2luZGV4KHRoZV9yZXBvc2l0b3J5LCAmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7Ci0JaWYgKHJlYWRfY2FjaGVfcHJlbG9hZCgmb3B0cy0+cGF0aHNwZWMpIDwgMCkKLQkJcmV0dXJuIGVycm9yKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKLQotCWlmIChvcHRzLT5zb3VyY2VfdHJlZSkKLQkJcmVhZF90cmVlX3NvbWUob3B0cy0+c291cmNlX3RyZWUsICZvcHRzLT5wYXRoc3BlYyk7Ci0KLQlwc19tYXRjaGVkID0geGNhbGxvYyhvcHRzLT5wYXRoc3BlYy5uciwgMSk7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSBhbGwgcGF0aHNwZWNzIHBhcnRpY2lwYXRlZCBpbiBsb2NhdGluZyB0aGUgcGF0aHMKLQkgKiB0byBiZSBjaGVja2VkIG91dC4KLQkgKi8KLQlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspCi0JCWlmIChvcHRzLT5vdmVybGF5X21vZGUpCi0JCQltYXJrX2NlX2Zvcl9jaGVja291dF9vdmVybGF5KGFjdGl2ZV9jYWNoZVtwb3NdLAotCQkJCQkJICAgICBwc19tYXRjaGVkLAotCQkJCQkJICAgICBvcHRzKTsKLQkJZWxzZQotCQkJbWFya19jZV9mb3JfY2hlY2tvdXRfbm9fb3ZlcmxheShhY3RpdmVfY2FjaGVbcG9zXSwKLQkJCQkJCQlwc19tYXRjaGVkLAotCQkJCQkJCW9wdHMpOwotCi0JaWYgKHJlcG9ydF9wYXRoX2Vycm9yKHBzX21hdGNoZWQsICZvcHRzLT5wYXRoc3BlYykpIHsKLQkJZnJlZShwc19tYXRjaGVkKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWZyZWUocHNfbWF0Y2hlZCk7Ci0KLQkvKiAiY2hlY2tvdXQgLW0gcGF0aCIgdG8gcmVjcmVhdGUgY29uZmxpY3RlZCBzdGF0ZSAqLwotCWlmIChvcHRzLT5tZXJnZSkKLQkJdW5tZXJnZV9tYXJrZWRfaW5kZXgoJnRoZV9pbmRleCk7Ci0KLQkvKiBBbnkgdW5tZXJnZWQgcGF0aHM/ICovCi0JZm9yIChwb3MgPSAwOyBwb3MgPCBhY3RpdmVfbnI7IHBvcysrKSB7Ci0JCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKLQkJaWYgKGNlLT5jZV9mbGFncyAmIENFX01BVENIRUQpIHsKLQkJCWlmICghY2Vfc3RhZ2UoY2UpKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKG9wdHMtPmZvcmNlKSB7Ci0JCQkJd2FybmluZyhfKCJwYXRoICclcycgaXMgdW5tZXJnZWQiKSwgY2UtPm5hbWUpOwotCQkJfSBlbHNlIGlmIChvcHRzLT53cml0ZW91dF9zdGFnZSkgewotCQkJCWVycnMgfD0gY2hlY2tfc3RhZ2Uob3B0cy0+d3JpdGVvdXRfc3RhZ2UsIGNlLCBwb3MsIG9wdHMtPm92ZXJsYXlfbW9kZSk7Ci0JCQl9IGVsc2UgaWYgKG9wdHMtPm1lcmdlKSB7Ci0JCQkJZXJycyB8PSBjaGVja19zdGFnZXMoKDE8PDIpIHwgKDE8PDMpLCBjZSwgcG9zKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZXJycyA9IDE7Ci0JCQkJZXJyb3IoXygicGF0aCAnJXMnIGlzIHVubWVyZ2VkIiksIGNlLT5uYW1lKTsKLQkJCX0KLQkJCXBvcyA9IHNraXBfc2FtZV9uYW1lKGNlLCBwb3MpIC0gMTsKLQkJfQotCX0KLQlpZiAoZXJycykKLQkJcmV0dXJuIDE7Ci0KLQkvKiBOb3cgd2UgYXJlIGNvbW1pdHRlZCB0byBjaGVjayB0aGVtIG91dCAqLwogCXN0YXRlLmZvcmNlID0gMTsKIAlzdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKIAlzdGF0ZS5pc3RhdGUgPSAmdGhlX2luZGV4OwpAQCAtNDU3LDggKzM4OSwxNjAgQEAKIAkJCQkgICBucl9jaGVja291dHMpOwogCX0KIAotCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQotCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCXJldHVybiBlcnJzOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X3BhdGhzKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJICBjb25zdCBjaGFyICpyZXZpc2lvbikKK3sKKwlpbnQgcG9zOworCXN0YXRpYyBjaGFyICpwc19tYXRjaGVkOworCXN0cnVjdCBvYmplY3RfaWQgcmV2OworCXN0cnVjdCBjb21taXQgKmhlYWQ7CisJaW50IGVycnMgPSAwOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCWludCBjaGVja291dF9pbmRleDsKKworCXRyYWNlMl9jbWRfbW9kZShvcHRzLT5wYXRjaF9tb2RlID8gInBhdGNoIiA6ICJwYXRoIik7CisKKwlpZiAob3B0cy0+dHJhY2sgIT0gQlJBTkNIX1RSQUNLX1VOU1BFQ0lGSUVEKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIiksICItLXRyYWNrIik7CisKKwlpZiAob3B0cy0+bmV3X2JyYW5jaF9sb2cpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiKSwgIi1sIik7CisKKwlpZiAob3B0cy0+aWdub3JlX3VubWVyZ2VkICYmIG9wdHMtPnBhdGNoX21vZGUpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiKSwKKwkJICAgIG9wdHMtPmlnbm9yZV91bm1lcmdlZF9vcHQpOworCisJaWYgKG9wdHMtPmZvcmNlX2RldGFjaCkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIpLCAiLS1kZXRhY2giKTsKKworCWlmIChvcHRzLT5tZXJnZSAmJiBvcHRzLT5wYXRjaF9tb2RlKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIiksICItLW1lcmdlIiwgIi0tcGF0Y2giKTsKKworCWlmIChvcHRzLT5pZ25vcmVfdW5tZXJnZWQgJiYgb3B0cy0+bWVyZ2UpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiKSwKKwkJICAgIG9wdHMtPmlnbm9yZV91bm1lcmdlZF9vcHQsICItbSIpOworCisJaWYgKG9wdHMtPm5ld19icmFuY2gpCisJCWRpZShfKCJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iKSwKKwkJICAgIG9wdHMtPm5ld19icmFuY2gpOworCisJaWYgKCFvcHRzLT5jaGVja291dF93b3JrdHJlZSAmJiAhb3B0cy0+Y2hlY2tvdXRfaW5kZXgpCisJCWRpZShfKCJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiKSwKKwkJICAgICItLXN0YWdlZCIsICItLXdvcmt0cmVlIik7CisKKwlpZiAoIW9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlICYmICFvcHRzLT5mcm9tX3RyZWVpc2gpCisJCWRpZShfKCInJXMnIG11c3QgYmUgdXNlZCB3aGVuICclcycgaXMgbm90IHNwZWNpZmllZCIpLAorCQkgICAgIi0td29ya3RyZWUiLCAiLS1zb3VyY2UiKTsKKworCWlmIChvcHRzLT5jaGVja291dF9pbmRleCAmJiAhb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUgJiYKKwkgICAgb3B0cy0+d3JpdGVvdXRfc3RhZ2UpCisJCWRpZShfKCInJXMnIG9yICclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIpLAorCQkgICAgIi0tb3VycyIsICItLXRoZWlycyIsICItLXN0YWdlZCIpOworCisJaWYgKG9wdHMtPmNoZWNrb3V0X2luZGV4ICYmICFvcHRzLT5jaGVja291dF93b3JrdHJlZSAmJgorCSAgICBvcHRzLT5tZXJnZSkKKwkJZGllKF8oIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIiksCisJCSAgICAiLS1tZXJnZSIsICItLWNvbmZsaWN0IiwgIi0tc3RhZ2VkIik7CisKKwlpZiAob3B0cy0+cGF0Y2hfbW9kZSkgeworCQljb25zdCBjaGFyICpwYXRjaF9tb2RlOworCisJCWlmIChvcHRzLT5jaGVja291dF9pbmRleCAmJiBvcHRzLT5jaGVja291dF93b3JrdHJlZSkKKwkJCXBhdGNoX21vZGUgPSAiLS1wYXRjaD1jaGVja291dCI7CisJCWVsc2UgaWYgKG9wdHMtPmNoZWNrb3V0X2luZGV4ICYmICFvcHRzLT5jaGVja291dF93b3JrdHJlZSkKKwkJCXBhdGNoX21vZGUgPSAiLS1wYXRjaD1yZXNldCI7CisJCWVsc2UgaWYgKCFvcHRzLT5jaGVja291dF9pbmRleCAmJiBvcHRzLT5jaGVja291dF93b3JrdHJlZSkKKwkJCXBhdGNoX21vZGUgPSAiLS1wYXRjaD13b3JrdHJlZSI7CisJCWVsc2UKKwkJCUJVRygiZWl0aGVyIGZsYWcgbXVzdCBoYXZlIGJlZW4gc2V0LCB3b3JrdHJlZT0lZCwgaW5kZXg9JWQiLAorCQkJICAgIG9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlLCBvcHRzLT5jaGVja291dF9pbmRleCk7CisJCXJldHVybiBydW5fYWRkX2ludGVyYWN0aXZlKHJldmlzaW9uLCBwYXRjaF9tb2RlLCAmb3B0cy0+cGF0aHNwZWMpOworCX0KKworCXJlcG9faG9sZF9sb2NrZWRfaW5kZXgodGhlX3JlcG9zaXRvcnksICZsb2NrX2ZpbGUsIExPQ0tfRElFX09OX0VSUk9SKTsKKwlpZiAocmVhZF9jYWNoZV9wcmVsb2FkKCZvcHRzLT5wYXRoc3BlYykgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJaWYgKG9wdHMtPnNvdXJjZV90cmVlKQorCQlyZWFkX3RyZWVfc29tZShvcHRzLT5zb3VyY2VfdHJlZSwgJm9wdHMtPnBhdGhzcGVjKTsKKworCXBzX21hdGNoZWQgPSB4Y2FsbG9jKG9wdHMtPnBhdGhzcGVjLm5yLCAxKTsKKworCS8qCisJICogTWFrZSBzdXJlIGFsbCBwYXRoc3BlY3MgcGFydGljaXBhdGVkIGluIGxvY2F0aW5nIHRoZSBwYXRocworCSAqIHRvIGJlIGNoZWNrZWQgb3V0LgorCSAqLworCWZvciAocG9zID0gMDsgcG9zIDwgYWN0aXZlX25yOyBwb3MrKykKKwkJaWYgKG9wdHMtPm92ZXJsYXlfbW9kZSkKKwkJCW1hcmtfY2VfZm9yX2NoZWNrb3V0X292ZXJsYXkoYWN0aXZlX2NhY2hlW3Bvc10sCisJCQkJCQkgICAgIHBzX21hdGNoZWQsCisJCQkJCQkgICAgIG9wdHMpOworCQllbHNlCisJCQltYXJrX2NlX2Zvcl9jaGVja291dF9ub19vdmVybGF5KGFjdGl2ZV9jYWNoZVtwb3NdLAorCQkJCQkJCXBzX21hdGNoZWQsCisJCQkJCQkJb3B0cyk7CisKKwlpZiAocmVwb3J0X3BhdGhfZXJyb3IocHNfbWF0Y2hlZCwgJm9wdHMtPnBhdGhzcGVjKSkgeworCQlmcmVlKHBzX21hdGNoZWQpOworCQlyZXR1cm4gMTsKKwl9CisJZnJlZShwc19tYXRjaGVkKTsKKworCS8qICJjaGVja291dCAtbSBwYXRoIiB0byByZWNyZWF0ZSBjb25mbGljdGVkIHN0YXRlICovCisJaWYgKG9wdHMtPm1lcmdlKQorCQl1bm1lcmdlX21hcmtlZF9pbmRleCgmdGhlX2luZGV4KTsKKworCS8qIEFueSB1bm1lcmdlZCBwYXRocz8gKi8KKwlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfTUFUQ0hFRCkgeworCQkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQkJY29udGludWU7CisJCQlpZiAob3B0cy0+aWdub3JlX3VubWVyZ2VkKSB7CisJCQkJaWYgKCFvcHRzLT5xdWlldCkKKwkJCQkJd2FybmluZyhfKCJwYXRoICclcycgaXMgdW5tZXJnZWQiKSwgY2UtPm5hbWUpOworCQkJfSBlbHNlIGlmIChvcHRzLT53cml0ZW91dF9zdGFnZSkgeworCQkJCWVycnMgfD0gY2hlY2tfc3RhZ2Uob3B0cy0+d3JpdGVvdXRfc3RhZ2UsIGNlLCBwb3MsIG9wdHMtPm92ZXJsYXlfbW9kZSk7CisJCQl9IGVsc2UgaWYgKG9wdHMtPm1lcmdlKSB7CisJCQkJZXJycyB8PSBjaGVja19zdGFnZXMoKDE8PDIpIHwgKDE8PDMpLCBjZSwgcG9zKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJycyA9IDE7CisJCQkJZXJyb3IoXygicGF0aCAnJXMnIGlzIHVubWVyZ2VkIiksIGNlLT5uYW1lKTsKKwkJCX0KKwkJCXBvcyA9IHNraXBfc2FtZV9uYW1lKGNlLCBwb3MpIC0gMTsKKwkJfQorCX0KKwlpZiAoZXJycykKKwkJcmV0dXJuIDE7CisKKwkvKiBOb3cgd2UgYXJlIGNvbW1pdHRlZCB0byBjaGVjayB0aGVtIG91dCAqLworCWlmIChvcHRzLT5jaGVja291dF93b3JrdHJlZSkKKwkJZXJycyB8PSBjaGVja291dF93b3JrdHJlZShvcHRzKTsKKworCS8qCisJICogQWxsb3cgdXBkYXRpbmcgdGhlIGluZGV4IHdoZW4gY2hlY2tpbmcgb3V0IGZyb20gdGhlIGluZGV4LgorCSAqIFRoaXMgaXMgdG8gc2F2ZSBuZXcgc3RhdCBpbmZvLgorCSAqLworCWlmIChvcHRzLT5jaGVja291dF93b3JrdHJlZSAmJiAhb3B0cy0+Y2hlY2tvdXRfaW5kZXggJiYgIW9wdHMtPnNvdXJjZV90cmVlKQorCQljaGVja291dF9pbmRleCA9IDE7CisJZWxzZQorCQljaGVja291dF9pbmRleCA9IG9wdHMtPmNoZWNrb3V0X2luZGV4OworCisJaWYgKGNoZWNrb3V0X2luZGV4KSB7CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBORUVEU1dPUks6IGlmIC0td29ya3RyZWUgaXMgbm90IHNwZWNpZmllZCwgd2UKKwkJICogc2hvdWxkIHNhdmUgc3RhdCBpbmZvIG9mIGNoZWNrZWQgb3V0IGZpbGVzIGluIHRoZQorCQkgKiBpbmRleCB0byBhdm9pZCB0aGUgbmV4dCAocG90ZW50aWFsbHkgY29zdGx5KQorCQkgKiByZWZyZXNoLiBCdXQgaXQncyBhIGJpdCB0cmlja2VyIHRvIGRvLi4uCisJCSAqLworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisJfQogCiAJcmVhZF9yZWZfZnVsbCgiSEVBRCIsIDAsICZyZXYsIE5VTEwpOwogCWhlYWQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksICZyZXYsIDEpOwpAQCAtNTUzLDExMiArNjM3LDYgQEAKIAlicmFuY2gtPnBhdGggPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogfQogCi0vKgotICogU2tpcCBtZXJnaW5nIHRoZSB0cmVlcywgdXBkYXRpbmcgdGhlIGluZGV4IGFuZCB3b3JraW5nIGRpcmVjdG9yeSBpZiBhbmQKLSAqIG9ubHkgaWYgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IGJyYW5jaCB2aWEgImdpdCBjaGVja291dCAtYiA8bmV3X2JyYW5jaD4uIgotICovCi1zdGF0aWMgaW50IHNraXBfbWVyZ2Vfd29ya2luZ190cmVlKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAotCWNvbnN0IHN0cnVjdCBicmFuY2hfaW5mbyAqb2xkX2JyYW5jaF9pbmZvLAotCWNvbnN0IHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3X2JyYW5jaF9pbmZvKQotewotCS8qCi0JICogRG8gdGhlIG1lcmdlIGlmIHNwYXJzZSBjaGVja291dCBpcyBvbiBhbmQgdGhlIHVzZXIgaGFzIG5vdCBvcHRlZCBpbgotCSAqIHRvIHRoZSBvcHRpbWl6ZWQgYmVoYXZpb3IKLQkgKi8KLQlpZiAoY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgJiYgIWNoZWNrb3V0X29wdGltaXplX25ld19icmFuY2gpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBXZSBtdXN0IGRvIHRoZSBtZXJnZSBpZiB3ZSBhcmUgYWN0dWFsbHkgbW92aW5nIHRvIGEgbmV3IGNvbW1pdC4KLQkgKi8KLQlpZiAoIW9sZF9icmFuY2hfaW5mby0+Y29tbWl0IHx8ICFuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCB8fAotCQkhb2lkZXEoJm9sZF9icmFuY2hfaW5mby0+Y29tbWl0LT5vYmplY3Qub2lkLAotCQkgICAgICAgJm5ld19icmFuY2hfaW5mby0+Y29tbWl0LT5vYmplY3Qub2lkKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIG9wdHMtPnBhdGNoX21vZGUgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMgc28gaXMKLQkgKiBub3QgdGVzdGVkIGhlcmUKLQkgKi8KLQotCS8qCi0JICogb3B0cy0+cXVpZXQgb25seSBpbXBhY3RzIG91dHB1dCBzbyBkb2Vzbid0IHJlcXVpcmUgYSBtZXJnZQotCSAqLwotCi0JLyoKLQkgKiBIb25vciB0aGUgZXhwbGljaXQgcmVxdWVzdCBmb3IgYSB0aHJlZS13YXkgbWVyZ2Ugb3IgdG8gdGhyb3cgYXdheQotCSAqIGxvY2FsIGNoYW5nZXMKLQkgKi8KLQlpZiAob3B0cy0+bWVyZ2UgfHwgb3B0cy0+Zm9yY2UpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiAtLWRldGFjaCBpcyBkb2N1bWVudGVkIGFzICJ1cGRhdGluZyB0aGUgaW5kZXggYW5kIHRoZSBmaWxlcyBpbiB0aGUKLQkgKiB3b3JraW5nIHRyZWUiIGJ1dCB0aGlzIG9wdGltaXphdGlvbiBza2lwcyB0aG9zZSBzdGVwcyBzbyBmYWxsIHRocm91Z2gKLQkgKiB0byB0aGUgcmVndWxhciBjb2RlIHBhdGguCi0JICovCi0JaWYgKG9wdHMtPmZvcmNlX2RldGFjaCkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIG9wdHMtPndyaXRlb3V0X3N0YWdlIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIHNvIGlzCi0JICogbm90IHRlc3RlZCBoZXJlCi0JICovCi0KLQkvKgotCSAqIEhvbm9yIHRoZSBleHBsaWNpdCBpZ25vcmUgcmVxdWVzdHMKLQkgKi8KLQlpZiAoIW9wdHMtPm92ZXJ3cml0ZV9pZ25vcmUgfHwgb3B0cy0+aWdub3JlX3NraXB3b3JrdHJlZSB8fAotCQlvcHRzLT5pZ25vcmVfb3RoZXJfd29ya3RyZWVzKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogb3B0cy0+c2hvd19wcm9ncmVzcyBvbmx5IGltcGFjdHMgb3V0cHV0IHNvIGRvZXNuJ3QgcmVxdWlyZSBhIG1lcmdlCi0JICovCi0KLQkvKgotCSAqIG9wdHMtPm92ZXJsYXlfbW9kZSBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyBzbyBpcwotCSAqIG5vdCB0ZXN0ZWQgaGVyZQotCSAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmVuJ3QgY3JlYXRpbmcgYSBuZXcgYnJhbmNoIGFueSBjaGFuZ2VzIG9yIHVwZGF0ZXMgd2lsbAotCSAqIGhhcHBlbiBpbiB0aGUgZXhpc3RpbmcgYnJhbmNoLiAgU2luY2UgdGhhdCBjb3VsZCBvbmx5IGJlIHVwZGF0aW5nCi0JICogdGhlIGluZGV4IGFuZCB3b3JraW5nIGRpcmVjdG9yeSwgd2UgZG9uJ3Qgd2FudCB0byBza2lwIHRob3NlIHN0ZXBzCi0JICogb3Igd2UndmUgZGVmZWF0ZWQgYW55IHB1cnBvc2UgaW4gcnVubmluZyB0aGUgY29tbWFuZC4KLQkgKi8KLQlpZiAoIW9wdHMtPm5ld19icmFuY2gpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBuZXdfYnJhbmNoX2ZvcmNlIGlzIGRlZmluZWQgdG8gImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giCi0JICogc28gbmVlZHMgdG8gZ28gdGhyb3VnaCB0aGUgbWVyZ2UgdG8gZG8gdGhlIHJlc2V0Ci0JICovCi0JaWYgKG9wdHMtPm5ld19icmFuY2hfZm9yY2UpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBBIG5ldyBvcnBoYW5lZCBicmFuY2ggcmVxdXJpcmVzIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSB0byBiZQotCSAqIGFkanVzdGVkIHRvIDxzdGFydF9wb2ludD4KLQkgKi8KLQlpZiAob3B0cy0+bmV3X29ycGhhbl9icmFuY2gpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBSZW1haW5pbmcgdmFyaWFibGVzIGFyZSBub3QgY2hlY2tvdXQgb3B0aW9ucyBidXQgdXNlZCB0byB0cmFjayBzdGF0ZQotCSAqLwotCi0JIC8qCi0JICAqIERvIHRoZSBtZXJnZSBpZiB0aGlzIGlzIHRoZSBpbml0aWFsIGNoZWNrb3V0LiBXZSBjYW5ub3QgdXNlCi0JICAqIGlzX2NhY2hlX3VuYm9ybigpIGhlcmUgYmVjYXVzZSB0aGUgaW5kZXggaGFzbid0IGJlZW4gbG9hZGVkIHlldAotCSAgKiBzbyBjYWNoZV9uciBhbmQgdGltZXN0YW1wLnNlYyBhcmUgYWx3YXlzIHplcm8uCi0JICAqLwotCWlmICghZmlsZV9leGlzdHMoZ2V0X2luZGV4X2ZpbGUoKSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBpbnQgbWVyZ2Vfd29ya2luZ190cmVlKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAogCQkJICAgICAgc3RydWN0IGJyYW5jaF9pbmZvICpvbGRfYnJhbmNoX2luZm8sCiAJCQkgICAgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm5ld19icmFuY2hfaW5mbywKQEAgLTY2NiwxNSArNjQ0LDIxIEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlzdHJ1Y3QgdHJlZSAqbmV3X3RyZWU7CiAKIAlob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CiAJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZChOVUxMKSA8IDApCiAJCXJldHVybiBlcnJvcihfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CiAKIAlyZXNvbHZlX3VuZG9fY2xlYXIoKTsKLQlpZiAob3B0cy0+Zm9yY2UpIHsKLQkJcmV0ID0gcmVzZXRfdHJlZShnZXRfY29tbWl0X3RyZWUobmV3X2JyYW5jaF9pbmZvLT5jb21taXQpLAotCQkJCSBvcHRzLCAxLCB3cml0ZW91dF9lcnJvcik7CisJaWYgKG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoICYmIG9wdHMtPm9ycGhhbl9mcm9tX2VtcHR5X3RyZWUpIHsKKwkJaWYgKG5ld19icmFuY2hfaW5mby0+Y29tbWl0KQorCQkJQlVHKCInc3dpdGNoIC0tb3JwaGFuJyBzaG91bGQgbmV2ZXIgYWNjZXB0IGEgY29tbWl0IGFzIHN0YXJ0aW5nIHBvaW50Iik7CisJCW5ld190cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdCh0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKKwl9IGVsc2UKKwkJbmV3X3RyZWUgPSBnZXRfY29tbWl0X3RyZWUobmV3X2JyYW5jaF9pbmZvLT5jb21taXQpOworCWlmIChvcHRzLT5kaXNjYXJkX2NoYW5nZXMpIHsKKwkJcmV0ID0gcmVzZXRfdHJlZShuZXdfdHJlZSwgb3B0cywgMSwgd3JpdGVvdXRfZXJyb3IpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewpAQCAtNzEyLDcgKzY5Niw4IEBACiAJCQkJCSAgICZvbGRfYnJhbmNoX2luZm8tPmNvbW1pdC0+b2JqZWN0Lm9pZCA6CiAJCQkJCSAgIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOwogCQlpbml0X3RyZWVfZGVzYygmdHJlZXNbMF0sIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7Ci0JCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZuZXdfYnJhbmNoX2luZm8tPmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisJCXBhcnNlX3RyZWUobmV3X3RyZWUpOworCQl0cmVlID0gbmV3X3RyZWU7CiAJCWluaXRfdHJlZV9kZXNjKCZ0cmVlc1sxXSwgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKIAogCQlyZXQgPSB1bnBhY2tfdHJlZXMoMiwgdHJlZXMsICZ0b3B0cyk7CkBAIC03NzcsNyArNzYyLDcgQEAKIAkJCW8udmVyYm9zaXR5ID0gMDsKIAkJCXdvcmsgPSB3cml0ZV90cmVlX2Zyb21fbWVtb3J5KCZvKTsKIAotCQkJcmV0ID0gcmVzZXRfdHJlZShnZXRfY29tbWl0X3RyZWUobmV3X2JyYW5jaF9pbmZvLT5jb21taXQpLAorCQkJcmV0ID0gcmVzZXRfdHJlZShuZXdfdHJlZSwKIAkJCQkJIG9wdHMsIDEsCiAJCQkJCSB3cml0ZW91dF9lcnJvcik7CiAJCQlpZiAocmV0KQpAQCAtNzg2LDEzICs3NzEsMTMgQEAKIAkJCW8uYnJhbmNoMSA9IG5ld19icmFuY2hfaW5mby0+bmFtZTsKIAkJCW8uYnJhbmNoMiA9ICJsb2NhbCI7CiAJCQlyZXQgPSBtZXJnZV90cmVlcygmbywKLQkJCQkJICBnZXRfY29tbWl0X3RyZWUobmV3X2JyYW5jaF9pbmZvLT5jb21taXQpLAorCQkJCQkgIG5ld190cmVlLAogCQkJCQkgIHdvcmssCiAJCQkJCSAgb2xkX3RyZWUsCiAJCQkJCSAgJnJlc3VsdCk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlleGl0KDEyOCk7Ci0JCQlyZXQgPSByZXNldF90cmVlKGdldF9jb21taXRfdHJlZShuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCksCisJCQlyZXQgPSByZXNldF90cmVlKG5ld190cmVlLAogCQkJCQkgb3B0cywgMCwKIAkJCQkJIHdyaXRlb3V0X2Vycm9yKTsKIAkJCXN0cmJ1Zl9yZWxlYXNlKCZvLm9idWYpOwpAQCAtODEwLDcgKzc5NSw3IEBACiAJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCiAJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CiAKLQlpZiAoIW9wdHMtPmZvcmNlICYmICFvcHRzLT5xdWlldCkKKwlpZiAoIW9wdHMtPmRpc2NhcmRfY2hhbmdlcyAmJiAhb3B0cy0+cXVpZXQgJiYgbmV3X2JyYW5jaF9pbmZvLT5jb21taXQpCiAJCXNob3dfbG9jYWxfY2hhbmdlcygmbmV3X2JyYW5jaF9pbmZvLT5jb21taXQtPm9iamVjdCwgJm9wdHMtPmRpZmZfb3B0aW9ucyk7CiAKIAlyZXR1cm4gMDsKQEAgLTkxNSw3ICs5MDAsNyBAQAogCQkJCWRlbGV0ZV9yZWZsb2cob2xkX2JyYW5jaF9pbmZvLT5wYXRoKTsKIAkJfQogCX0KLQlyZW1vdmVfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKKwlyZW1vdmVfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5LCAhb3B0cy0+cXVpZXQpOwogCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOwogCWlmICghb3B0cy0+cXVpZXQgJiYKIAkgICAgKG5ld19icmFuY2hfaW5mby0+cGF0aCB8fCAoIW9wdHMtPmZvcmNlX2RldGFjaCAmJiAhc3RyY21wKG5ld19icmFuY2hfaW5mby0+bmFtZSwgIkhFQUQiKSkpKQpAQCAtMTAxMSw3ICs5OTYsMTAgQEAKIAlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsIG9iamVjdCwgb2lkX3RvX2hleCgmb2JqZWN0LT5vaWQpKTsKIAogCWZvcl9lYWNoX3JlZihhZGRfcGVuZGluZ191bmludGVyZXN0aW5nX3JlZiwgJnJldnMpOwotCWFkZF9wZW5kaW5nX29pZCgmcmV2cywgIkhFQUQiLCAmbmV3X2NvbW1pdC0+b2JqZWN0Lm9pZCwgVU5JTlRFUkVTVElORyk7CisJaWYgKG5ld19jb21taXQpCisJCWFkZF9wZW5kaW5nX29pZCgmcmV2cywgIkhFQUQiLAorCQkJCSZuZXdfY29tbWl0LT5vYmplY3Qub2lkLAorCQkJCVVOSU5URVJFU1RJTkcpOwogCiAJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCiAJCWRpZShfKCJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIikpOwpAQCAtMTAzMiw2ICsxMDIwLDcgQEAKIAl2b2lkICpwYXRoX3RvX2ZyZWU7CiAJc3RydWN0IG9iamVjdF9pZCByZXY7CiAJaW50IGZsYWcsIHdyaXRlb3V0X2Vycm9yID0gMDsKKwlpbnQgZG9fbWVyZ2UgPSAxOwogCiAJdHJhY2UyX2NtZF9tb2RlKCJicmFuY2giKTsKIApAQCAtMTA0NSwyMiArMTAzNCwyNiBAQAogCWlmIChvbGRfYnJhbmNoX2luZm8ucGF0aCkKIAkJc2tpcF9wcmVmaXgob2xkX2JyYW5jaF9pbmZvLnBhdGgsICJyZWZzL2hlYWRzLyIsICZvbGRfYnJhbmNoX2luZm8ubmFtZSk7CiAKKwlpZiAob3B0cy0+bmV3X29ycGhhbl9icmFuY2ggJiYgb3B0cy0+b3JwaGFuX2Zyb21fZW1wdHlfdHJlZSkgeworCQlpZiAobmV3X2JyYW5jaF9pbmZvLT5uYW1lKQorCQkJQlVHKCInc3dpdGNoIC0tb3JwaGFuJyBzaG91bGQgbmV2ZXIgYWNjZXB0IGEgY29tbWl0IGFzIHN0YXJ0aW5nIHBvaW50Iik7CisJCW5ld19icmFuY2hfaW5mby0+Y29tbWl0ID0gTlVMTDsKKwkJbmV3X2JyYW5jaF9pbmZvLT5uYW1lID0gIihlbXB0eSkiOworCQlkb19tZXJnZSA9IDE7CisJfQorCiAJaWYgKCFuZXdfYnJhbmNoX2luZm8tPm5hbWUpIHsKIAkJbmV3X2JyYW5jaF9pbmZvLT5uYW1lID0gIkhFQUQiOwogCQluZXdfYnJhbmNoX2luZm8tPmNvbW1pdCA9IG9sZF9icmFuY2hfaW5mby5jb21taXQ7CiAJCWlmICghbmV3X2JyYW5jaF9pbmZvLT5jb21taXQpCiAJCQlkaWUoXygiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIpKTsKIAkJcGFyc2VfY29tbWl0X29yX2RpZShuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCk7CisKKwkJaWYgKG9wdHMtPm9ubHlfbWVyZ2Vfb25fc3dpdGNoaW5nX2JyYW5jaGVzKQorCQkJZG9fbWVyZ2UgPSAwOwogCX0KIAotCS8qIG9wdGltaXplIHRoZSAiY2hlY2tvdXQgLWIgPG5ld19icmFuY2g+IHBhdGggKi8KLQlpZiAoc2tpcF9tZXJnZV93b3JraW5nX3RyZWUob3B0cywgJm9sZF9icmFuY2hfaW5mbywgbmV3X2JyYW5jaF9pbmZvKSkgewotCQlpZiAoIWNoZWNrb3V0X29wdGltaXplX25ld19icmFuY2ggJiYgIW9wdHMtPnF1aWV0KSB7Ci0JCQlpZiAocmVhZF9jYWNoZV9wcmVsb2FkKE5VTEwpIDwgMCkKLQkJCQlyZXR1cm4gZXJyb3IoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOwotCQkJc2hvd19sb2NhbF9jaGFuZ2VzKCZuZXdfYnJhbmNoX2luZm8tPmNvbW1pdC0+b2JqZWN0LCAmb3B0cy0+ZGlmZl9vcHRpb25zKTsKLQkJfQotCX0gZWxzZSB7CisJaWYgKGRvX21lcmdlKSB7CiAJCXJldCA9IG1lcmdlX3dvcmtpbmdfdHJlZShvcHRzLCAmb2xkX2JyYW5jaF9pbmZvLCBuZXdfYnJhbmNoX2luZm8sICZ3cml0ZW91dF9lcnJvcik7CiAJCWlmIChyZXQpIHsKIAkJCWZyZWUocGF0aF90b19mcmVlKTsKQEAgLTEwODAsMTEgKzEwNzMsNiBAQAogCiBzdGF0aWMgaW50IGdpdF9jaGVja291dF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7Ci0JaWYgKCFzdHJjbXAodmFyLCAiY2hlY2tvdXQub3B0aW1pemVuZXdicmFuY2giKSkgewotCQljaGVja291dF9vcHRpbWl6ZV9uZXdfYnJhbmNoID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmlnbm9yZXN1Ym1vZHVsZXMiKSkgewogCQlzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cyA9IGNiOwogCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKCZvcHRzLT5kaWZmX29wdGlvbnMsIHZhbHVlKTsKQEAgLTEwOTcsNiArMTA4NSwzNCBAQAogCXJldHVybiBnaXRfeG1lcmdlX2NvbmZpZyh2YXIsIHZhbHVlLCBOVUxMKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0dXBfbmV3X2JyYW5jaF9pbmZvX2FuZF9zb3VyY2VfdHJlZSgKKwlzdHJ1Y3QgYnJhbmNoX2luZm8gKm5ld19icmFuY2hfaW5mbywKKwlzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpyZXYsCisJY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCB0cmVlICoqc291cmNlX3RyZWUgPSAmb3B0cy0+c291cmNlX3RyZWU7CisJc3RydWN0IG9iamVjdF9pZCBicmFuY2hfcmV2OworCisJbmV3X2JyYW5jaF9pbmZvLT5uYW1lID0gYXJnOworCXNldHVwX2JyYW5jaF9wYXRoKG5ld19icmFuY2hfaW5mbyk7CisKKwlpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KG5ld19icmFuY2hfaW5mby0+cGF0aCwgMCkgJiYKKwkgICAgIXJlYWRfcmVmKG5ld19icmFuY2hfaW5mby0+cGF0aCwgJmJyYW5jaF9yZXYpKQorCQlvaWRjcHkocmV2LCAmYnJhbmNoX3Jldik7CisJZWxzZQorCQluZXdfYnJhbmNoX2luZm8tPnBhdGggPSBOVUxMOyAvKiBub3QgYW4gZXhpc3RpbmcgYnJhbmNoICovCisKKwluZXdfYnJhbmNoX2luZm8tPmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwgcmV2LCAxKTsKKwlpZiAoIW5ld19icmFuY2hfaW5mby0+Y29tbWl0KSB7CisJCS8qIG5vdCBhIGNvbW1pdCAqLworCQkqc291cmNlX3RyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHJldik7CisJfSBlbHNlIHsKKwkJcGFyc2VfY29tbWl0X29yX2RpZShuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCk7CisJCSpzb3VyY2VfdHJlZSA9IGdldF9jb21taXRfdHJlZShuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCk7CisJfQorfQorCiBzdGF0aWMgaW50IHBhcnNlX2JyYW5jaG5hbWVfYXJnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKIAkJCQlpbnQgZHdpbV9uZXdfbG9jYWxfYnJhbmNoX29rLAogCQkJCXN0cnVjdCBicmFuY2hfaW5mbyAqbmV3X2JyYW5jaF9pbmZvLApAQCAtMTEwNCwxMCArMTEyMCw4IEBACiAJCQkJc3RydWN0IG9iamVjdF9pZCAqcmV2LAogCQkJCWludCAqZHdpbV9yZW1vdGVzX21hdGNoZWQpCiB7Ci0Jc3RydWN0IHRyZWUgKipzb3VyY2VfdHJlZSA9ICZvcHRzLT5zb3VyY2VfdHJlZTsKIAljb25zdCBjaGFyICoqbmV3X2JyYW5jaCA9ICZvcHRzLT5uZXdfYnJhbmNoOwogCWludCBhcmdjb3VudCA9IDA7Ci0Jc3RydWN0IG9iamVjdF9pZCBicmFuY2hfcmV2OwogCWNvbnN0IGNoYXIgKmFyZzsKIAlpbnQgZGFzaF9kYXNoX3BvczsKIAlpbnQgaGFzX2Rhc2hfZGFzaCA9IDA7CkBAIC0xMTU3LDEwICsxMTcxLDE2IEBACiAJaWYgKCFhcmdjKQogCQlyZXR1cm4gMDsKIAorCWlmICghb3B0cy0+YWNjZXB0X3BhdGhzcGVjKSB7CisJCWlmIChhcmdjID4gMSkKKwkJCWRpZShfKCJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiKSk7CisJCWhhc19kYXNoX2Rhc2ggPSAxOyAvKiBoZWxwcyBkaXNhbWJpZ3VhdGUgKi8KKwl9CisKIAlhcmcgPSBhcmd2WzBdOwogCWRhc2hfZGFzaF9wb3MgPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLSIpKSB7CisJCWlmIChvcHRzLT5hY2NlcHRfcGF0aHNwZWMgJiYgIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkgewogCQkJZGFzaF9kYXNoX3BvcyA9IGk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTE5NCwxMSArMTIxNCwxMiBAQAogCQkJcmVjb3Zlcl93aXRoX2R3aW0gPSAwOwogCiAJCS8qCi0JCSAqIEFjY2VwdCAiZ2l0IGNoZWNrb3V0IGZvbyIgYW5kICJnaXQgY2hlY2tvdXQgZm9vIC0tIgotCQkgKiBhcyBjYW5kaWRhdGVzIGZvciBkd2ltLgorCQkgKiBBY2NlcHQgImdpdCBjaGVja291dCBmb28iLCAiZ2l0IGNoZWNrb3V0IGZvbyAtLSIKKwkJICogYW5kICJnaXQgc3dpdGNoIGZvbyIgYXMgY2FuZGlkYXRlcyBmb3IgZHdpbS4KIAkJICovCiAJCWlmICghKGFyZ2MgPT0gMSAmJiAhaGFzX2Rhc2hfZGFzaCkgJiYKLQkJICAgICEoYXJnYyA9PSAyICYmIGhhc19kYXNoX2Rhc2gpKQorCQkgICAgIShhcmdjID09IDIgJiYgaGFzX2Rhc2hfZGFzaCkgJiYKKwkJICAgIG9wdHMtPmFjY2VwdF9wYXRoc3BlYykKIAkJCXJlY292ZXJfd2l0aF9kd2ltID0gMDsKIAogCQlpZiAocmVjb3Zlcl93aXRoX2R3aW0pIHsKQEAgLTEyMjksMjYgKzEyNTAsMTEgQEAKIAlhcmd2Kys7CiAJYXJnYy0tOwogCi0JbmV3X2JyYW5jaF9pbmZvLT5uYW1lID0gYXJnOwotCXNldHVwX2JyYW5jaF9wYXRoKG5ld19icmFuY2hfaW5mbyk7CisJc2V0dXBfbmV3X2JyYW5jaF9pbmZvX2FuZF9zb3VyY2VfdHJlZShuZXdfYnJhbmNoX2luZm8sIG9wdHMsIHJldiwgYXJnKTsKIAotCWlmICghY2hlY2tfcmVmbmFtZV9mb3JtYXQobmV3X2JyYW5jaF9pbmZvLT5wYXRoLCAwKSAmJgotCSAgICAhcmVhZF9yZWYobmV3X2JyYW5jaF9pbmZvLT5wYXRoLCAmYnJhbmNoX3JldikpCi0JCW9pZGNweShyZXYsICZicmFuY2hfcmV2KTsKLQllbHNlCi0JCW5ld19icmFuY2hfaW5mby0+cGF0aCA9IE5VTEw7IC8qIG5vdCBhbiBleGlzdGluZyBicmFuY2ggKi8KLQotCW5ld19icmFuY2hfaW5mby0+Y29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCByZXYsIDEpOwotCWlmICghbmV3X2JyYW5jaF9pbmZvLT5jb21taXQpIHsKLQkJLyogbm90IGEgY29tbWl0ICovCi0JCSpzb3VyY2VfdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QocmV2KTsKLQl9IGVsc2UgewotCQlwYXJzZV9jb21taXRfb3JfZGllKG5ld19icmFuY2hfaW5mby0+Y29tbWl0KTsKLQkJKnNvdXJjZV90cmVlID0gZ2V0X2NvbW1pdF90cmVlKG5ld19icmFuY2hfaW5mby0+Y29tbWl0KTsKLQl9Ci0KLQlpZiAoISpzb3VyY2VfdHJlZSkgICAgICAgICAgICAgICAgICAgLyogY2FzZSAoMSk6IHdhbnQgYSB0cmVlICovCisJaWYgKCFvcHRzLT5zb3VyY2VfdHJlZSkgICAgICAgICAgICAgICAgICAgLyogY2FzZSAoMSk6IHdhbnQgYSB0cmVlICovCiAJCWRpZShfKCJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiKSwgYXJnKTsKKwogCWlmICghaGFzX2Rhc2hfZGFzaCkgewkvKiBjYXNlICgzKS4oZCkgLT4gKDEpICovCiAJCS8qCiAJCSAqIERvIG5vdCBjb21wbGFpbiB0aGUgbW9zdCBjb21tb24gY2FzZQpAQCAtMTI1OCw3ICsxMjY0LDcgQEAKIAkJICovCiAJCWlmIChhcmdjKQogCQkJdmVyaWZ5X25vbl9maWxlbmFtZShvcHRzLT5wcmVmaXgsIGFyZyk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKG9wdHMtPmFjY2VwdF9wYXRoc3BlYykgewogCQlhcmdjb3VudCsrOwogCQlhcmd2Kys7CiAJCWFyZ2MtLTsKQEAgLTEyODUsNiArMTI5MSw2MCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyB2b2lkIGRpZV9leHBlY3RpbmdfYV9icmFuY2goY29uc3Qgc3RydWN0IGJyYW5jaF9pbmZvICpicmFuY2hfaW5mbykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyICp0b19mcmVlOworCisJaWYgKGR3aW1fcmVmKGJyYW5jaF9pbmZvLT5uYW1lLCBzdHJsZW4oYnJhbmNoX2luZm8tPm5hbWUpLCAmb2lkLCAmdG9fZnJlZSkgPT0gMSkgeworCQljb25zdCBjaGFyICpyZWYgPSB0b19mcmVlOworCisJCWlmIChza2lwX3ByZWZpeChyZWYsICJyZWZzL3RhZ3MvIiwgJnJlZikpCisJCQlkaWUoXygiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIpLCByZWYpOworCQlpZiAoc2tpcF9wcmVmaXgocmVmLCAicmVmcy9yZW1vdGVzLyIsICZyZWYpKQorCQkJZGllKF8oImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgcmVtb3RlIGJyYW5jaCAnJXMnIiksIHJlZik7CisJCWRpZShfKCJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciKSwgcmVmKTsKKwl9CisJaWYgKGJyYW5jaF9pbmZvLT5jb21taXQpCisJCWRpZShfKCJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IGNvbW1pdCAnJXMnIiksIGJyYW5jaF9pbmZvLT5uYW1lKTsKKwkvKgorCSAqIFRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgaGFwcGVuIGJlY2F1c2Ugd2UgYWxyZWFkeSBkaWUoKSBvbgorCSAqIG5vbi1jb21taXQsIGJ1dCBqdXN0IGluIGNhc2UuCisJICovCisJZGllKF8oImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgJyVzJyIpLCBicmFuY2hfaW5mby0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZV9pZl9zb21lX29wZXJhdGlvbl9pbl9wcm9ncmVzcyh2b2lkKQoreworCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgc3RhdGU7CisKKwltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKKwl3dF9zdGF0dXNfZ2V0X3N0YXRlKHRoZV9yZXBvc2l0b3J5LCAmc3RhdGUsIDApOworCisJaWYgKHN0YXRlLm1lcmdlX2luX3Byb2dyZXNzKQorCQlkaWUoXygiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorCQkgICAgICAiQ29uc2lkZXIgXCJnaXQgbWVyZ2UgLS1xdWl0XCIgIgorCQkgICAgICAib3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIikpOworCWlmIChzdGF0ZS5hbV9pbl9wcm9ncmVzcykKKwkJZGllKF8oImNhbm5vdCBzd2l0Y2ggYnJhbmNoIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvblxuIgorCQkgICAgICAiQ29uc2lkZXIgXCJnaXQgYW0gLS1xdWl0XCIgIgorCQkgICAgICAib3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIikpOworCWlmIChzdGF0ZS5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MgfHwgc3RhdGUucmViYXNlX2luX3Byb2dyZXNzKQorCQlkaWUoXygiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKwkJICAgICAgIkNvbnNpZGVyIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiAiCisJCSAgICAgICJvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iKSk7CisJaWYgKHN0YXRlLmNoZXJyeV9waWNrX2luX3Byb2dyZXNzKQorCQlkaWUoXygiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgY2hlcnJ5LXBpY2tpbmdcbiIKKwkJICAgICAgIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiICIKKwkJICAgICAgIm9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIpKTsKKwlpZiAoc3RhdGUucmV2ZXJ0X2luX3Byb2dyZXNzKQorCQlkaWUoXygiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisJCSAgICAgICJDb25zaWRlciBcImdpdCByZXZlcnQgLS1xdWl0XCIgIgorCQkgICAgICAib3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIikpOworCWlmIChzdGF0ZS5iaXNlY3RfaW5fcHJvZ3Jlc3MpCisJCXdhcm5pbmcoXygieW91IGFyZSBzd2l0Y2hpbmcgYnJhbmNoIHdoaWxlIGJpc2VjdGluZyIpKTsKK30KKwogc3RhdGljIGludCBjaGVja291dF9icmFuY2goc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsCiAJCQkgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm5ld19icmFuY2hfaW5mbykKIHsKQEAgLTEyOTUsOSArMTM1NSw5IEBACiAJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIiksCiAJCSAgICAiLS1wYXRjaCIpOwogCi0JaWYgKCFvcHRzLT5vdmVybGF5X21vZGUpCisJaWYgKG9wdHMtPm92ZXJsYXlfbW9kZSAhPSAtMSkKIAkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiKSwKLQkJICAgICItLW5vLW92ZXJsYXkiKTsKKwkJICAgICItLVtub10tb3ZlcmxheSIpOwogCiAJaWYgKG9wdHMtPndyaXRlb3V0X3N0YWdlKQogCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIpLApAQCAtMTMwNiw2ICsxMzY2LDkgQEAKIAlpZiAob3B0cy0+Zm9yY2UgJiYgb3B0cy0+bWVyZ2UpCiAJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIpLCAiLWYiLCAiLW0iKTsKIAorCWlmIChvcHRzLT5kaXNjYXJkX2NoYW5nZXMgJiYgb3B0cy0+bWVyZ2UpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIpLCAiLS1kaXNjYXJkLWNoYW5nZXMiLCAiLS1tZXJnZSIpOworCiAJaWYgKG9wdHMtPmZvcmNlX2RldGFjaCAmJiBvcHRzLT5uZXdfYnJhbmNoKQogCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciKSwKIAkJICAgICItLWRldGFjaCIsICItYi8tQi8tLW9ycGhhbiIpOwpAQCAtMTMxMyw2ICsxMzc2LDggQEAKIAlpZiAob3B0cy0+bmV3X29ycGhhbl9icmFuY2gpIHsKIAkJaWYgKG9wdHMtPnRyYWNrICE9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCkKIAkJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIpLCAiLS1vcnBoYW4iLCAiLXQiKTsKKwkJaWYgKG9wdHMtPm9ycGhhbl9mcm9tX2VtcHR5X3RyZWUgJiYgbmV3X2JyYW5jaF9pbmZvLT5uYW1lKQorCQkJZGllKF8oIiclcycgY2Fubm90IHRha2UgPHN0YXJ0LXBvaW50PiIpLCAiLS1vcnBoYW4iKTsKIAl9IGVsc2UgaWYgKG9wdHMtPmZvcmNlX2RldGFjaCkgewogCQlpZiAob3B0cy0+dHJhY2sgIT0gQlJBTkNIX1RSQUNLX1VOU1BFQ0lGSUVEKQogCQkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIiksICItLWRldGFjaCIsICItdCIpOwpAQCAtMTMyMyw2ICsxMzg4LDIzIEBACiAJCWRpZShfKCJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIpLAogCQkgICAgbmV3X2JyYW5jaF9pbmZvLT5uYW1lKTsKIAorCWlmICghb3B0cy0+c3dpdGNoX2JyYW5jaF9kb2luZ19ub3RoaW5nX2lzX29rICYmCisJICAgICFuZXdfYnJhbmNoX2luZm8tPm5hbWUgJiYKKwkgICAgIW9wdHMtPm5ld19icmFuY2ggJiYKKwkgICAgIW9wdHMtPmZvcmNlX2RldGFjaCkKKwkJZGllKF8oIm1pc3NpbmcgYnJhbmNoIG9yIGNvbW1pdCBhcmd1bWVudCIpKTsKKworCWlmICghb3B0cy0+aW1wbGljaXRfZGV0YWNoICYmCisJICAgICFvcHRzLT5mb3JjZV9kZXRhY2ggJiYKKwkgICAgIW9wdHMtPm5ld19icmFuY2ggJiYKKwkgICAgIW9wdHMtPm5ld19icmFuY2hfZm9yY2UgJiYKKwkgICAgbmV3X2JyYW5jaF9pbmZvLT5uYW1lICYmCisJICAgICFuZXdfYnJhbmNoX2luZm8tPnBhdGgpCisJCWRpZV9leHBlY3RpbmdfYV9icmFuY2gobmV3X2JyYW5jaF9pbmZvKTsKKworCWlmICghb3B0cy0+Y2FuX3N3aXRjaF93aGVuX2luX3Byb2dyZXNzKQorCQlkaWVfaWZfc29tZV9vcGVyYXRpb25faW5fcHJvZ3Jlc3MoKTsKKwogCWlmIChuZXdfYnJhbmNoX2luZm8tPnBhdGggJiYgIW9wdHMtPmZvcmNlX2RldGFjaCAmJiAhb3B0cy0+bmV3X2JyYW5jaCAmJgogCSAgICAhb3B0cy0+aWdub3JlX290aGVyX3dvcmt0cmVlcykgewogCQlpbnQgZmxhZzsKQEAgLTEzNDQsOTkgKzE0MjYsMTQ4IEBACiAJcmV0dXJuIHN3aXRjaF9icmFuY2hlcyhvcHRzLCBuZXdfYnJhbmNoX2luZm8pOwogfQogCi1pbnQgY21kX2NoZWNrb3V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQorc3RhdGljIHN0cnVjdCBvcHRpb24gKmFkZF9jb21tb25fb3B0aW9ucyhzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwkJCQkJIHN0cnVjdCBvcHRpb24gKnByZXZvcHRzKQogewotCXN0cnVjdCBjaGVja291dF9vcHRzIG9wdHM7Ci0Jc3RydWN0IGJyYW5jaF9pbmZvIG5ld19icmFuY2hfaW5mbzsKLQljaGFyICpjb25mbGljdF9zdHlsZSA9IE5VTEw7Ci0JaW50IGR3aW1fbmV3X2xvY2FsX2JyYW5jaCwgbm9fZHdpbV9uZXdfbG9jYWxfYnJhbmNoID0gMDsKLQlpbnQgZHdpbV9yZW1vdGVzX21hdGNoZWQgPSAwOwogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewotCQlPUFRfX1FVSUVUKCZvcHRzLnF1aWV0LCBOXygic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAotCQlPUFRfU1RSSU5HKCdiJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaCwgTl8oImJyYW5jaCIpLAotCQkJICAgTl8oImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIikpLAotCQlPUFRfU1RSSU5HKCdCJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaF9mb3JjZSwgTl8oImJyYW5jaCIpLAotCQkJICAgTl8oImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giKSksCi0JCU9QVF9CT09MKCdsJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaF9sb2csIE5fKCJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIikpLAotCQlPUFRfQk9PTCgwLCAiZGV0YWNoIiwgJm9wdHMuZm9yY2VfZGV0YWNoLCBOXygiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IikpLAotCQlPUFRfU0VUX0lOVCgndCcsICJ0cmFjayIsICAmb3B0cy50cmFjaywgTl8oInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIiksCi0JCQlCUkFOQ0hfVFJBQ0tfRVhQTElDSVQpLAotCQlPUFRfU1RSSU5HKDAsICJvcnBoYW4iLCAmb3B0cy5uZXdfb3JwaGFuX2JyYW5jaCwgTl8oIm5ldy1icmFuY2giKSwgTl8oIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIpKSwKLQkJT1BUX1NFVF9JTlRfRignMicsICJvdXJzIiwgJm9wdHMud3JpdGVvdXRfc3RhZ2UsCi0JCQkgICAgICBOXygiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIiksCi0JCQkgICAgICAyLCBQQVJTRV9PUFRfTk9ORUcpLAotCQlPUFRfU0VUX0lOVF9GKCczJywgInRoZWlycyIsICZvcHRzLndyaXRlb3V0X3N0YWdlLAotCQkJICAgICAgTl8oImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIiksCi0JCQkgICAgICAzLCBQQVJTRV9PUFRfTk9ORUcpLAotCQlPUFRfX0ZPUkNFKCZvcHRzLmZvcmNlLCBOXygiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiKSwKLQkJCSAgIFBBUlNFX09QVF9OT0NPTVBMRVRFKSwKLQkJT1BUX0JPT0woJ20nLCAibWVyZ2UiLCAmb3B0cy5tZXJnZSwgTl8oInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIikpLAotCQlPUFRfQk9PTF9GKDAsICJvdmVyd3JpdGUtaWdub3JlIiwgJm9wdHMub3ZlcndyaXRlX2lnbm9yZSwKLQkJCSAgIE5fKCJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiKSwKLQkJCSAgIFBBUlNFX09QVF9OT0NPTVBMRVRFKSwKLQkJT1BUX1NUUklORygwLCAiY29uZmxpY3QiLCAmY29uZmxpY3Rfc3R5bGUsIE5fKCJzdHlsZSIpLAotCQkJICAgTl8oImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiKSksCi0JCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJm9wdHMucGF0Y2hfbW9kZSwgTl8oInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IikpLAotCQlPUFRfQk9PTCgwLCAiaWdub3JlLXNraXAtd29ya3RyZWUtYml0cyIsICZvcHRzLmlnbm9yZV9za2lwd29ya3RyZWUsCi0JCQkgTl8oImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIpKSwKLQkJT1BUX0JPT0woMCwgIm5vLWd1ZXNzIiwgJm5vX2R3aW1fbmV3X2xvY2FsX2JyYW5jaCwKLQkJCSBOXygiZG8gbm90IHNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIikpLAotCQlPUFRfQk9PTCgwLCAiaWdub3JlLW90aGVyLXdvcmt0cmVlcyIsICZvcHRzLmlnbm9yZV9vdGhlcl93b3JrdHJlZXMsCi0JCQkgTl8oImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIpKSwKKwkJT1BUX19RVUlFVCgmb3B0cy0+cXVpZXQsIE5fKCJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciKSksCiAJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgTlVMTCwKIAkJCSAgICAiY2hlY2tvdXQiLCAiY29udHJvbCByZWN1cnNpdmUgdXBkYXRpbmcgb2Ygc3VibW9kdWxlcyIsCiAJCQkgICAgUEFSU0VfT1BUX09QVEFSRywgb3B0aW9uX3BhcnNlX3JlY3Vyc2Vfc3VibW9kdWxlc193b3JrdHJlZV91cGRhdGVyIH0sCi0JCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZvcHRzLnNob3dfcHJvZ3Jlc3MsIE5fKCJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSksCi0JCU9QVF9CT09MKDAsICJvdmVybGF5IiwgJm9wdHMub3ZlcmxheV9tb2RlLCBOXygidXNlIG92ZXJsYXkgbW9kZSAoZGVmYXVsdCkiKSksCi0JCU9QVF9FTkQoKSwKKwkJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJm9wdHMtPnNob3dfcHJvZ3Jlc3MsIE5fKCJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJCU9QVF9CT09MKCdtJywgIm1lcmdlIiwgJm9wdHMtPm1lcmdlLCBOXygicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giKSksCisJCU9QVF9TVFJJTkcoMCwgImNvbmZsaWN0IiwgJm9wdHMtPmNvbmZsaWN0X3N0eWxlLCBOXygic3R5bGUiKSwKKwkJCSAgIE5fKCJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIikpLAorCQlPUFRfRU5EKCkKIAl9OworCXN0cnVjdCBvcHRpb24gKm5ld29wdHMgPSBwYXJzZV9vcHRpb25zX2NvbmNhdChwcmV2b3B0cywgb3B0aW9ucyk7CisJZnJlZShwcmV2b3B0cyk7CisJcmV0dXJuIG5ld29wdHM7Cit9CiAKLQltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CitzdGF0aWMgc3RydWN0IG9wdGlvbiAqYWRkX2NvbW1vbl9zd2l0Y2hfYnJhbmNoX29wdGlvbnMoCisJc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsIHN0cnVjdCBvcHRpb24gKnByZXZvcHRzKQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnZCcsICJkZXRhY2giLCAmb3B0cy0+Zm9yY2VfZGV0YWNoLCBOXygiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IikpLAorCQlPUFRfU0VUX0lOVCgndCcsICJ0cmFjayIsICAmb3B0cy0+dHJhY2ssIE5fKCJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIpLAorCQkJQlJBTkNIX1RSQUNLX0VYUExJQ0lUKSwKKwkJT1BUX19GT1JDRSgmb3B0cy0+Zm9yY2UsIE5fKCJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIpLAorCQkJICAgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCQlPUFRfU1RSSU5HKDAsICJvcnBoYW4iLCAmb3B0cy0+bmV3X29ycGhhbl9icmFuY2gsIE5fKCJuZXctYnJhbmNoIiksIE5fKCJuZXcgdW5wYXJlbnRlZCBicmFuY2giKSksCisJCU9QVF9CT09MX0YoMCwgIm92ZXJ3cml0ZS1pZ25vcmUiLCAmb3B0cy0+b3ZlcndyaXRlX2lnbm9yZSwKKwkJCSAgIE5fKCJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiKSwKKwkJCSAgIFBBUlNFX09QVF9OT0NPTVBMRVRFKSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZS1vdGhlci13b3JrdHJlZXMiLCAmb3B0cy0+aWdub3JlX290aGVyX3dvcmt0cmVlcywKKwkJCSBOXygiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIikpLAorCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCBvcHRpb24gKm5ld29wdHMgPSBwYXJzZV9vcHRpb25zX2NvbmNhdChwcmV2b3B0cywgb3B0aW9ucyk7CisJZnJlZShwcmV2b3B0cyk7CisJcmV0dXJuIG5ld29wdHM7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uICphZGRfY2hlY2tvdXRfcGF0aF9vcHRpb25zKHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJCQkJc3RydWN0IG9wdGlvbiAqcHJldm9wdHMpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TRVRfSU5UX0YoJzInLCAib3VycyIsICZvcHRzLT53cml0ZW91dF9zdGFnZSwKKwkJCSAgICAgIE5fKCJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiKSwKKwkJCSAgICAgIDIsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9TRVRfSU5UX0YoJzMnLCAidGhlaXJzIiwgJm9wdHMtPndyaXRlb3V0X3N0YWdlLAorCQkJICAgICAgTl8oImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIiksCisJCQkgICAgICAzLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfQk9PTCgncCcsICJwYXRjaCIsICZvcHRzLT5wYXRjaF9tb2RlLCBOXygic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiKSksCisJCU9QVF9CT09MKDAsICJpZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzIiwgJm9wdHMtPmlnbm9yZV9za2lwd29ya3RyZWUsCisJCQkgTl8oImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlzdHJ1Y3Qgb3B0aW9uICpuZXdvcHRzID0gcGFyc2Vfb3B0aW9uc19jb25jYXQocHJldm9wdHMsIG9wdGlvbnMpOworCWZyZWUocHJldm9wdHMpOworCXJldHVybiBuZXdvcHRzOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsIHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCisJCQkgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10pCit7CisJc3RydWN0IGJyYW5jaF9pbmZvIG5ld19icmFuY2hfaW5mbzsKKwlpbnQgZHdpbV9yZW1vdGVzX21hdGNoZWQgPSAwOworCWludCBwYXJzZW9wdF9mbGFncyA9IDA7CisKIAltZW1zZXQoJm5ld19icmFuY2hfaW5mbywgMCwgc2l6ZW9mKG5ld19icmFuY2hfaW5mbykpOwotCW9wdHMub3ZlcndyaXRlX2lnbm9yZSA9IDE7Ci0Jb3B0cy5wcmVmaXggPSBwcmVmaXg7Ci0Jb3B0cy5zaG93X3Byb2dyZXNzID0gLTE7Ci0Jb3B0cy5vdmVybGF5X21vZGUgPSAtMTsKKwlvcHRzLT5vdmVyd3JpdGVfaWdub3JlID0gMTsKKwlvcHRzLT5wcmVmaXggPSBwcmVmaXg7CisJb3B0cy0+c2hvd19wcm9ncmVzcyA9IC0xOwogCi0JZ2l0X2NvbmZpZyhnaXRfY2hlY2tvdXRfY29uZmlnLCAmb3B0cyk7CisJZ2l0X2NvbmZpZyhnaXRfY2hlY2tvdXRfY29uZmlnLCBvcHRzKTsKIAotCW9wdHMudHJhY2sgPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQ7CisJb3B0cy0+dHJhY2sgPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQ7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGNoZWNrb3V0X3VzYWdlLAotCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisJaWYgKCFvcHRzLT5hY2NlcHRfcGF0aHNwZWMgJiYgIW9wdHMtPmFjY2VwdF9yZWYpCisJCUJVRygibWFrZSB1cCB5b3VyIG1pbmQsIHlvdSBuZWVkIHRvIHRha2UgX3NvbWV0aGluZ18iKTsKKwlpZiAob3B0cy0+YWNjZXB0X3BhdGhzcGVjICYmIG9wdHMtPmFjY2VwdF9yZWYpCisJCXBhcnNlb3B0X2ZsYWdzID0gUEFSU0VfT1BUX0tFRVBfREFTSERBU0g7CiAKLQlkd2ltX25ld19sb2NhbF9icmFuY2ggPSAhbm9fZHdpbV9uZXdfbG9jYWxfYnJhbmNoOwotCWlmIChvcHRzLnNob3dfcHJvZ3Jlc3MgPCAwKSB7Ci0JCWlmIChvcHRzLnF1aWV0KQotCQkJb3B0cy5zaG93X3Byb2dyZXNzID0gMDsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIHVzYWdlc3RyLCBwYXJzZW9wdF9mbGFncyk7CisKKwlpZiAob3B0cy0+c2hvd19wcm9ncmVzcyA8IDApIHsKKwkJaWYgKG9wdHMtPnF1aWV0KQorCQkJb3B0cy0+c2hvd19wcm9ncmVzcyA9IDA7CiAJCWVsc2UKLQkJCW9wdHMuc2hvd19wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKwkJCW9wdHMtPnNob3dfcHJvZ3Jlc3MgPSBpc2F0dHkoMik7CiAJfQogCi0JaWYgKGNvbmZsaWN0X3N0eWxlKSB7Ci0JCW9wdHMubWVyZ2UgPSAxOyAvKiBpbXBsaWVkICovCi0JCWdpdF94bWVyZ2VfY29uZmlnKCJtZXJnZS5jb25mbGljdHN0eWxlIiwgY29uZmxpY3Rfc3R5bGUsIE5VTEwpOworCWlmIChvcHRzLT5jb25mbGljdF9zdHlsZSkgeworCQlvcHRzLT5tZXJnZSA9IDE7IC8qIGltcGxpZWQgKi8KKwkJZ2l0X3htZXJnZV9jb25maWcoIm1lcmdlLmNvbmZsaWN0c3R5bGUiLCBvcHRzLT5jb25mbGljdF9zdHlsZSwgTlVMTCk7CisJfQorCWlmIChvcHRzLT5mb3JjZSkgeworCQlvcHRzLT5kaXNjYXJkX2NoYW5nZXMgPSAxOworCQlvcHRzLT5pZ25vcmVfdW5tZXJnZWRfb3B0ID0gIi0tZm9yY2UiOworCQlvcHRzLT5pZ25vcmVfdW5tZXJnZWQgPSAxOwogCX0KIAotCWlmICgoISFvcHRzLm5ld19icmFuY2ggKyAhIW9wdHMubmV3X2JyYW5jaF9mb3JjZSArICEhb3B0cy5uZXdfb3JwaGFuX2JyYW5jaCkgPiAxKQorCWlmICgoISFvcHRzLT5uZXdfYnJhbmNoICsgISFvcHRzLT5uZXdfYnJhbmNoX2ZvcmNlICsgISFvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCkgPiAxKQogCQlkaWUoXygiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIikpOwogCi0JaWYgKG9wdHMub3ZlcmxheV9tb2RlID09IDEgJiYgb3B0cy5wYXRjaF9tb2RlKQorCWlmIChvcHRzLT5vdmVybGF5X21vZGUgPT0gMSAmJiBvcHRzLT5wYXRjaF9tb2RlKQogCQlkaWUoXygiLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIikpOwogCisJaWYgKG9wdHMtPmNoZWNrb3V0X2luZGV4ID49IDAgfHwgb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUgPj0gMCkgeworCQlpZiAob3B0cy0+Y2hlY2tvdXRfaW5kZXggPCAwKQorCQkJb3B0cy0+Y2hlY2tvdXRfaW5kZXggPSAwOworCQlpZiAob3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUgPCAwKQorCQkJb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUgPSAwOworCX0gZWxzZSB7CisJCWlmIChvcHRzLT5jaGVja291dF9pbmRleCA8IDApCisJCQlvcHRzLT5jaGVja291dF9pbmRleCA9IC1vcHRzLT5jaGVja291dF9pbmRleCAtIDE7CisJCWlmIChvcHRzLT5jaGVja291dF93b3JrdHJlZSA8IDApCisJCQlvcHRzLT5jaGVja291dF93b3JrdHJlZSA9IC1vcHRzLT5jaGVja291dF93b3JrdHJlZSAtIDE7CisJfQorCWlmIChvcHRzLT5jaGVja291dF9pbmRleCA8IDAgfHwgb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUgPCAwKQorCQlCVUcoInRoZXNlIGZsYWdzIHNob3VsZCBiZSBub24tbmVnYXRpdmUgYnkgbm93Iik7CisJLyoKKwkgKiBjb252ZW5pZW50IHNob3J0Y3V0OiAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQiIGVxdWFscworCSAqICJnaXQgcmVzdG9yZSAtLXN0YWdlZCAtLXNvdXJjZSBIRUFEIgorCSAqLworCWlmICghb3B0cy0+ZnJvbV90cmVlaXNoICYmIG9wdHMtPmNoZWNrb3V0X2luZGV4ICYmICFvcHRzLT5jaGVja291dF93b3JrdHJlZSkKKwkJb3B0cy0+ZnJvbV90cmVlaXNoID0gIkhFQUQiOworCiAJLyoKIAkgKiBGcm9tIGhlcmUgb24sIG5ld19icmFuY2ggd2lsbCBjb250YWluIHRoZSBicmFuY2ggdG8gYmUgY2hlY2tlZCBvdXQsCiAJICogYW5kIG5ld19icmFuY2hfZm9yY2UgYW5kIG5ld19vcnBoYW5fYnJhbmNoIHdpbGwgdGVsbCB1cyB3aGljaCBvbmUgb2YKIAkgKiAtYi8tQi8tLW9ycGhhbiBpcyBiZWluZyB1c2VkLgogCSAqLwotCWlmIChvcHRzLm5ld19icmFuY2hfZm9yY2UpCi0JCW9wdHMubmV3X2JyYW5jaCA9IG9wdHMubmV3X2JyYW5jaF9mb3JjZTsKKwlpZiAob3B0cy0+bmV3X2JyYW5jaF9mb3JjZSkKKwkJb3B0cy0+bmV3X2JyYW5jaCA9IG9wdHMtPm5ld19icmFuY2hfZm9yY2U7CiAKLQlpZiAob3B0cy5uZXdfb3JwaGFuX2JyYW5jaCkKLQkJb3B0cy5uZXdfYnJhbmNoID0gb3B0cy5uZXdfb3JwaGFuX2JyYW5jaDsKKwlpZiAob3B0cy0+bmV3X29ycGhhbl9icmFuY2gpCisJCW9wdHMtPm5ld19icmFuY2ggPSBvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaDsKIAogCS8qIC0tdHJhY2sgd2l0aG91dCAtYi8tQi8tLW9ycGhhbiBzaG91bGQgRFdJTSAqLwotCWlmIChvcHRzLnRyYWNrICE9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCAmJiAhb3B0cy5uZXdfYnJhbmNoKSB7CisJaWYgKG9wdHMtPnRyYWNrICE9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCAmJiAhb3B0cy0+bmV3X2JyYW5jaCkgewogCQljb25zdCBjaGFyICphcmd2MCA9IGFyZ3ZbMF07CiAJCWlmICghYXJnYyB8fCAhc3RyY21wKGFyZ3YwLCAiLS0iKSkKIAkJCWRpZShfKCItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiKSk7CkBAIC0xNDQ1LDcgKzE1NzYsNyBAQAogCQlhcmd2MCA9IHN0cmNocihhcmd2MCwgJy8nKTsKIAkJaWYgKCFhcmd2MCB8fCAhYXJndjBbMV0pCiAJCQlkaWUoXygibWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIikpOwotCQlvcHRzLm5ld19icmFuY2ggPSBhcmd2MCArIDE7CisJCW9wdHMtPm5ld19icmFuY2ggPSBhcmd2MCArIDE7CiAJfQogCiAJLyoKQEAgLTE0NjEsNTkgKzE1OTIsNzUgQEAKIAkgKiBpbmNsdWRpbmcgImxhc3QgYnJhbmNoIiBzeW50YXggYW5kIERXSU0tZXJ5IGZvciBuYW1lcyBvZgogCSAqIHJlbW90ZSBicmFuY2hlcywgZXJyb3Jpbmcgb3V0IGZvciBpbnZhbGlkIG9yIGFtYmlndW91cyBjYXNlcy4KIAkgKi8KLQlpZiAoYXJnYykgeworCWlmIChhcmdjICYmIG9wdHMtPmFjY2VwdF9yZWYpIHsKIAkJc3RydWN0IG9iamVjdF9pZCByZXY7CiAJCWludCBkd2ltX29rID0KLQkJCSFvcHRzLnBhdGNoX21vZGUgJiYKLQkJCWR3aW1fbmV3X2xvY2FsX2JyYW5jaCAmJgotCQkJb3B0cy50cmFjayA9PSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQgJiYKLQkJCSFvcHRzLm5ld19icmFuY2g7CisJCQkhb3B0cy0+cGF0Y2hfbW9kZSAmJgorCQkJb3B0cy0+ZHdpbV9uZXdfbG9jYWxfYnJhbmNoICYmCisJCQlvcHRzLT50cmFjayA9PSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQgJiYKKwkJCSFvcHRzLT5uZXdfYnJhbmNoOwogCQlpbnQgbiA9IHBhcnNlX2JyYW5jaG5hbWVfYXJnKGFyZ2MsIGFyZ3YsIGR3aW1fb2ssCi0JCQkJCSAgICAgJm5ld19icmFuY2hfaW5mbywgJm9wdHMsICZyZXYsCisJCQkJCSAgICAgJm5ld19icmFuY2hfaW5mbywgb3B0cywgJnJldiwKIAkJCQkJICAgICAmZHdpbV9yZW1vdGVzX21hdGNoZWQpOwogCQlhcmd2ICs9IG47CiAJCWFyZ2MgLT0gbjsKKwl9IGVsc2UgaWYgKCFvcHRzLT5hY2NlcHRfcmVmICYmIG9wdHMtPmZyb21fdHJlZWlzaCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHJldjsKKworCQlpZiAoZ2V0X29pZF9tYihvcHRzLT5mcm9tX3RyZWVpc2gsICZyZXYpKQorCQkJZGllKF8oImNvdWxkIG5vdCByZXNvbHZlICVzIiksIG9wdHMtPmZyb21fdHJlZWlzaCk7CisKKwkJc2V0dXBfbmV3X2JyYW5jaF9pbmZvX2FuZF9zb3VyY2VfdHJlZSgmbmV3X2JyYW5jaF9pbmZvLAorCQkJCQkJICAgICAgb3B0cywgJnJldiwKKwkJCQkJCSAgICAgIG9wdHMtPmZyb21fdHJlZWlzaCk7CisKKwkJaWYgKCFvcHRzLT5zb3VyY2VfdHJlZSkKKwkJCWRpZShfKCJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiKSwgb3B0cy0+ZnJvbV90cmVlaXNoKTsKIAl9CiAKKwlpZiAob3B0cy0+YWNjZXB0X3BhdGhzcGVjICYmICFvcHRzLT5lbXB0eV9wYXRoc3BlY19vayAmJiAhYXJnYyAmJgorCSAgICAhb3B0cy0+cGF0Y2hfbW9kZSkJLyogcGF0Y2ggbW9kZSBpcyBzcGVjaWFsICovCisJCWRpZShfKCJ5b3UgbXVzdCBzcGVjaWZ5IHBhdGgocykgdG8gcmVzdG9yZSIpKTsKKwogCWlmIChhcmdjKSB7Ci0JCXBhcnNlX3BhdGhzcGVjKCZvcHRzLnBhdGhzcGVjLCAwLAotCQkJICAgICAgIG9wdHMucGF0Y2hfbW9kZSA/IFBBVEhTUEVDX1BSRUZJWF9PUklHSU4gOiAwLAorCQlwYXJzZV9wYXRoc3BlYygmb3B0cy0+cGF0aHNwZWMsIDAsCisJCQkgICAgICAgb3B0cy0+cGF0Y2hfbW9kZSA/IFBBVEhTUEVDX1BSRUZJWF9PUklHSU4gOiAwLAogCQkJICAgICAgIHByZWZpeCwgYXJndik7CiAKLQkJaWYgKCFvcHRzLnBhdGhzcGVjLm5yKQorCQlpZiAoIW9wdHMtPnBhdGhzcGVjLm5yKQogCQkJZGllKF8oImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIikpOwogCiAJCS8qCiAJCSAqIFRyeSB0byBnaXZlIG1vcmUgaGVscGZ1bCBzdWdnZXN0aW9uLgogCQkgKiBuZXdfYnJhbmNoICYmIGFyZ2MgPiAxIHdpbGwgYmUgY2F1Z2h0IGxhdGVyLgogCQkgKi8KLQkJaWYgKG9wdHMubmV3X2JyYW5jaCAmJiBhcmdjID09IDEpCisJCWlmIChvcHRzLT5uZXdfYnJhbmNoICYmIGFyZ2MgPT0gMSkKIAkJCWRpZShfKCInJXMnIGlzIG5vdCBhIGNvbW1pdCBhbmQgYSBicmFuY2ggJyVzJyBjYW5ub3QgYmUgY3JlYXRlZCBmcm9tIGl0IiksCi0JCQkJYXJndlswXSwgb3B0cy5uZXdfYnJhbmNoKTsKKwkJCQlhcmd2WzBdLCBvcHRzLT5uZXdfYnJhbmNoKTsKIAotCQlpZiAob3B0cy5mb3JjZV9kZXRhY2gpCisJCWlmIChvcHRzLT5mb3JjZV9kZXRhY2gpCiAJCQlkaWUoXygiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIiksCiAJCQkgICAgYXJndlswXSk7CiAKLQkJaWYgKDEgPCAhIW9wdHMud3JpdGVvdXRfc3RhZ2UgKyAhIW9wdHMuZm9yY2UgKyAhIW9wdHMubWVyZ2UpCisJCWlmICgxIDwgISFvcHRzLT53cml0ZW91dF9zdGFnZSArICEhb3B0cy0+Zm9yY2UgKyAhIW9wdHMtPm1lcmdlKQogCQkJZGllKF8oImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgogCQkJICAgICAgImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIikpOwogCX0KIAotCWlmIChvcHRzLm5ld19icmFuY2gpIHsKKwlpZiAob3B0cy0+bmV3X2JyYW5jaCkgewogCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCi0JCWlmIChvcHRzLm5ld19icmFuY2hfZm9yY2UpCi0JCQlvcHRzLmJyYW5jaF9leGlzdHMgPSB2YWxpZGF0ZV9icmFuY2huYW1lKG9wdHMubmV3X2JyYW5jaCwgJmJ1Zik7CisJCWlmIChvcHRzLT5uZXdfYnJhbmNoX2ZvcmNlKQorCQkJb3B0cy0+YnJhbmNoX2V4aXN0cyA9IHZhbGlkYXRlX2JyYW5jaG5hbWUob3B0cy0+bmV3X2JyYW5jaCwgJmJ1Zik7CiAJCWVsc2UKLQkJCW9wdHMuYnJhbmNoX2V4aXN0cyA9Ci0JCQkJdmFsaWRhdGVfbmV3X2JyYW5jaG5hbWUob3B0cy5uZXdfYnJhbmNoLCAmYnVmLCAwKTsKKwkJCW9wdHMtPmJyYW5jaF9leGlzdHMgPQorCQkJCXZhbGlkYXRlX25ld19icmFuY2huYW1lKG9wdHMtPm5ld19icmFuY2gsICZidWYsIDApOwogCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKIAl9CiAKIAlVTkxFQUsob3B0cyk7Ci0JaWYgKG9wdHMucGF0Y2hfbW9kZSB8fCBvcHRzLnBhdGhzcGVjLm5yKSB7Ci0JCWludCByZXQgPSBjaGVja291dF9wYXRocygmb3B0cywgbmV3X2JyYW5jaF9pbmZvLm5hbWUpOworCWlmIChvcHRzLT5wYXRjaF9tb2RlIHx8IG9wdHMtPnBhdGhzcGVjLm5yKSB7CisJCWludCByZXQgPSBjaGVja291dF9wYXRocyhvcHRzLCBuZXdfYnJhbmNoX2luZm8ubmFtZSk7CiAJCWlmIChyZXQgJiYgZHdpbV9yZW1vdGVzX21hdGNoZWQgPiAxICYmCiAJCSAgICBhZHZpY2VfY2hlY2tvdXRfYW1iaWd1b3VzX3JlbW90ZV9icmFuY2hfbmFtZSkKIAkJCWFkdmlzZShfKCInJXMnIG1hdGNoZWQgbW9yZSB0aGFuIG9uZSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoLlxuIgpAQCAtMTUzMiw2ICsxNjc5LDEyMyBAQAogCQkJICAgICAgIGR3aW1fcmVtb3Rlc19tYXRjaGVkKTsKIAkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewotCQlyZXR1cm4gY2hlY2tvdXRfYnJhbmNoKCZvcHRzLCAmbmV3X2JyYW5jaF9pbmZvKTsKKwkJcmV0dXJuIGNoZWNrb3V0X2JyYW5jaChvcHRzLCAmbmV3X2JyYW5jaF9pbmZvKTsKIAl9CiB9CisKK2ludCBjbWRfY2hlY2tvdXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNoZWNrb3V0X29wdHMgb3B0czsKKwlzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zOworCXN0cnVjdCBvcHRpb24gY2hlY2tvdXRfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKCdiJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaCwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIikpLAorCQlPUFRfU1RSSU5HKCdCJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaF9mb3JjZSwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giKSksCisJCU9QVF9CT09MKCdsJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaF9sb2csIE5fKCJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIikpLAorCQlPUFRfQk9PTCgwLCAiZ3Vlc3MiLCAmb3B0cy5kd2ltX25ld19sb2NhbF9icmFuY2gsCisJCQkgTl8oInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIpKSwKKwkJT1BUX0JPT0woMCwgIm92ZXJsYXkiLCAmb3B0cy5vdmVybGF5X21vZGUsIE5fKCJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuZHdpbV9uZXdfbG9jYWxfYnJhbmNoID0gMTsKKwlvcHRzLnN3aXRjaF9icmFuY2hfZG9pbmdfbm90aGluZ19pc19vayA9IDE7CisJb3B0cy5vbmx5X21lcmdlX29uX3N3aXRjaGluZ19icmFuY2hlcyA9IDA7CisJb3B0cy5hY2NlcHRfcmVmID0gMTsKKwlvcHRzLmFjY2VwdF9wYXRoc3BlYyA9IDE7CisJb3B0cy5pbXBsaWNpdF9kZXRhY2ggPSAxOworCW9wdHMuY2FuX3N3aXRjaF93aGVuX2luX3Byb2dyZXNzID0gMTsKKwlvcHRzLm9ycGhhbl9mcm9tX2VtcHR5X3RyZWUgPSAwOworCW9wdHMuZW1wdHlfcGF0aHNwZWNfb2sgPSAxOworCW9wdHMub3ZlcmxheV9tb2RlID0gLTE7CisJb3B0cy5jaGVja291dF9pbmRleCA9IC0yOyAgICAvKiBkZWZhdWx0IG9uICovCisJb3B0cy5jaGVja291dF93b3JrdHJlZSA9IC0yOyAvKiBkZWZhdWx0IG9uICovCisKKwlvcHRpb25zID0gcGFyc2Vfb3B0aW9uc19kdXAoY2hlY2tvdXRfb3B0aW9ucyk7CisJb3B0aW9ucyA9IGFkZF9jb21tb25fb3B0aW9ucygmb3B0cywgb3B0aW9ucyk7CisJb3B0aW9ucyA9IGFkZF9jb21tb25fc3dpdGNoX2JyYW5jaF9vcHRpb25zKCZvcHRzLCBvcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NoZWNrb3V0X3BhdGhfb3B0aW9ucygmb3B0cywgb3B0aW9ucyk7CisKKwlyZXQgPSBjaGVja291dF9tYWluKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJm9wdHMsCisJCQkgICAgb3B0aW9ucywgY2hlY2tvdXRfdXNhZ2UpOworCUZSRUVfQU5EX05VTEwob3B0aW9ucyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9zd2l0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNoZWNrb3V0X29wdHMgb3B0czsKKwlzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIHN3aXRjaF9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoJ2MnLCAiY3JlYXRlIiwgJm9wdHMubmV3X2JyYW5jaCwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaCIpKSwKKwkJT1BUX1NUUklORygnQycsICJmb3JjZS1jcmVhdGUiLCAmb3B0cy5uZXdfYnJhbmNoX2ZvcmNlLCBOXygiYnJhbmNoIiksCisJCQkgICBOXygiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giKSksCisJCU9QVF9CT09MKDAsICJndWVzcyIsICZvcHRzLmR3aW1fbmV3X2xvY2FsX2JyYW5jaCwKKwkJCSBOXygic2Vjb25kIGd1ZXNzICdnaXQgc3dpdGNoIDxuby1zdWNoLWJyYW5jaD4nIikpLAorCQlPUFRfQk9PTCgwLCAiZGlzY2FyZC1jaGFuZ2VzIiwgJm9wdHMuZGlzY2FyZF9jaGFuZ2VzLAorCQkJIE5fKCJ0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMiKSksCisJCU9QVF9FTkQoKQorCX07CisJaW50IHJldDsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmR3aW1fbmV3X2xvY2FsX2JyYW5jaCA9IDE7CisJb3B0cy5hY2NlcHRfcmVmID0gMTsKKwlvcHRzLmFjY2VwdF9wYXRoc3BlYyA9IDA7CisJb3B0cy5zd2l0Y2hfYnJhbmNoX2RvaW5nX25vdGhpbmdfaXNfb2sgPSAwOworCW9wdHMub25seV9tZXJnZV9vbl9zd2l0Y2hpbmdfYnJhbmNoZXMgPSAxOworCW9wdHMuaW1wbGljaXRfZGV0YWNoID0gMDsKKwlvcHRzLmNhbl9zd2l0Y2hfd2hlbl9pbl9wcm9ncmVzcyA9IDA7CisJb3B0cy5vcnBoYW5fZnJvbV9lbXB0eV90cmVlID0gMTsKKwlvcHRzLm92ZXJsYXlfbW9kZSA9IC0xOworCisJb3B0aW9ucyA9IHBhcnNlX29wdGlvbnNfZHVwKHN3aXRjaF9vcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NvbW1vbl9vcHRpb25zKCZvcHRzLCBvcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NvbW1vbl9zd2l0Y2hfYnJhbmNoX29wdGlvbnMoJm9wdHMsIG9wdGlvbnMpOworCisJcmV0ID0gY2hlY2tvdXRfbWFpbihhcmdjLCBhcmd2LCBwcmVmaXgsICZvcHRzLAorCQkJICAgIG9wdGlvbnMsIHN3aXRjaF9icmFuY2hfdXNhZ2UpOworCUZSRUVfQU5EX05VTEwob3B0aW9ucyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9yZXN0b3JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjaGVja291dF9vcHRzIG9wdHM7CisJc3RydWN0IG9wdGlvbiAqb3B0aW9uczsKKwlzdHJ1Y3Qgb3B0aW9uIHJlc3RvcmVfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKCdzJywgInNvdXJjZSIsICZvcHRzLmZyb21fdHJlZWlzaCwgIjx0cmVlLWlzaD4iLAorCQkJICAgTl8oIndoZXJlIHRoZSBjaGVja291dCBmcm9tIikpLAorCQlPUFRfQk9PTCgnUycsICJzdGFnZWQiLCAmb3B0cy5jaGVja291dF9pbmRleCwKKwkJCSAgIE5fKCJyZXN0b3JlIHRoZSBpbmRleCIpKSwKKwkJT1BUX0JPT0woJ1cnLCAid29ya3RyZWUiLCAmb3B0cy5jaGVja291dF93b3JrdHJlZSwKKwkJCSAgIE5fKCJyZXN0b3JlIHRoZSB3b3JraW5nIHRyZWUgKGRlZmF1bHQpIikpLAorCQlPUFRfQk9PTCgwLCAiaWdub3JlLXVubWVyZ2VkIiwgJm9wdHMuaWdub3JlX3VubWVyZ2VkLAorCQkJIE5fKCJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIpKSwKKwkJT1BUX0JPT0woMCwgIm92ZXJsYXkiLCAmb3B0cy5vdmVybGF5X21vZGUsIE5fKCJ1c2Ugb3ZlcmxheSBtb2RlIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWludCByZXQ7CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5hY2NlcHRfcmVmID0gMDsKKwlvcHRzLmFjY2VwdF9wYXRoc3BlYyA9IDE7CisJb3B0cy5lbXB0eV9wYXRoc3BlY19vayA9IDA7CisJb3B0cy5vdmVybGF5X21vZGUgPSAwOworCW9wdHMuY2hlY2tvdXRfaW5kZXggPSAtMTsgICAgLyogZGVmYXVsdCBvZmYgKi8KKwlvcHRzLmNoZWNrb3V0X3dvcmt0cmVlID0gLTI7IC8qIGRlZmF1bHQgb24gKi8KKwlvcHRzLmlnbm9yZV91bm1lcmdlZF9vcHQgPSAiLS1pZ25vcmUtdW5tZXJnZWQiOworCisJb3B0aW9ucyA9IHBhcnNlX29wdGlvbnNfZHVwKHJlc3RvcmVfb3B0aW9ucyk7CisJb3B0aW9ucyA9IGFkZF9jb21tb25fb3B0aW9ucygmb3B0cywgb3B0aW9ucyk7CisJb3B0aW9ucyA9IGFkZF9jaGVja291dF9wYXRoX29wdGlvbnMoJm9wdHMsIG9wdGlvbnMpOworCisJcmV0ID0gY2hlY2tvdXRfbWFpbihhcmdjLCBhcmd2LCBwcmVmaXgsICZvcHRzLAorCQkJICAgIG9wdGlvbnMsIHJlc3RvcmVfdXNhZ2UpOworCUZSRUVfQU5EX05VTEwob3B0aW9ucyk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2xlYW4uYyBiL2J1aWx0aW4vY2xlYW4uYwppbmRleCBhYWJhNGFmLi5kNTU3OWRhIDEwMDY0NAotLS0gYS9idWlsdGluL2NsZWFuLmMKKysrIGIvYnVpbHRpbi9jbGVhbi5jCkBAIC0zNCw2ICszNCw3IEBACiBzdGF0aWMgY29uc3QgY2hhciAqbXNnX3NraXBfZ2l0X2RpciA9IE5fKCJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iKTsKIHN0YXRpYyBjb25zdCBjaGFyICptc2dfd291bGRfc2tpcF9naXRfZGlyID0gTl8oIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIik7CiBzdGF0aWMgY29uc3QgY2hhciAqbXNnX3dhcm5fcmVtb3ZlX2ZhaWxlZCA9IE5fKCJmYWlsZWQgdG8gcmVtb3ZlICVzIik7CitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3dhcm5fbHN0YXRfZmFpbGVkID0gTl8oImNvdWxkIG5vdCBsc3RhdCAlc1xuIik7CiAKIGVudW0gY29sb3JfY2xlYW4gewogCUNMRUFOX0NPTE9SX1JFU0VUID0gMCwKQEAgLTE5NCw3ICsxOTUsNyBAQAogCQlzdHJidWZfc2V0bGVuKHBhdGgsIGxlbik7CiAJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgZS0+ZF9uYW1lKTsKIAkJaWYgKGxzdGF0KHBhdGgtPmJ1ZiwgJnN0KSkKLQkJCTsgLyogZmFsbCB0aHJ1ICovCisJCQl3YXJuaW5nX2Vycm5vKF8obXNnX3dhcm5fbHN0YXRfZmFpbGVkKSwgcGF0aC0+YnVmKTsKIAkJZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewogCQkJaWYgKHJlbW92ZV9kaXJzKHBhdGgsIHByZWZpeCwgZm9yY2VfZmxhZywgZHJ5X3J1biwgcXVpZXQsICZnb25lKSkKIAkJCQlyZXQgPSAxOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbG9uZS5jIGIvYnVpbHRpbi9jbG9uZS5jCmluZGV4IDM1NmJhZTUuLmY2NjViMjggMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vY2xvbmUuYworKysgYi9idWlsdGluL2Nsb25lLmMKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJzdHJidWYuaCIKICNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJkaXItaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJpdGVyYXRvci5oIgogI2luY2x1ZGUgInNpZ2NoYWluLmgiCiAjaW5jbHVkZSAiYnJhbmNoLmgiCiAjaW5jbHVkZSAicmVtb3RlLmgiCkBAIC02Nyw2ICs2OSw3IEBACiBzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9wdGlvbl9yZWN1cnNlX3N1Ym1vZHVsZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwogc3RhdGljIHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgZmlsdGVyX29wdGlvbnM7CiBzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHNlcnZlcl9vcHRpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBpbnQgb3B0aW9uX3JlbW90ZV9zdWJtb2R1bGVzOwogCiBzdGF0aWMgaW50IHJlY3Vyc2Vfc3VibW9kdWxlc19jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCiAJCQkJIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQpAQCAtMTQyLDYgKzE0NSw4IEBACiAJT1BUX1NFVF9JTlQoJzYnLCAiaXB2NiIsICZmYW1pbHksIE5fKCJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIpLAogCQkJVFJBTlNQT1JUX0ZBTUlMWV9JUFY2KSwKIAlPUFRfUEFSU0VfTElTVF9PQkpFQ1RTX0ZJTFRFUigmZmlsdGVyX29wdGlvbnMpLAorCU9QVF9CT09MKDAsICJyZW1vdGUtc3VibW9kdWxlcyIsICZvcHRpb25fcmVtb3RlX3N1Ym1vZHVsZXMsCisJCSAgICBOXygiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgdXNlIHRoZWlyIHJlbW90ZS10cmFja2luZyBicmFuY2giKSksCiAJT1BUX0VORCgpCiB9OwogCkBAIC0zNTQsOCArMzU5LDcgQEAKIAkJCSAgICAgYWRkX29uZV9yZWZlcmVuY2UsICZyZXF1aXJlZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcHlfYWx0ZXJuYXRlcyhzdHJ1Y3Qgc3RyYnVmICpzcmMsIHN0cnVjdCBzdHJidWYgKmRzdCwKLQkJCSAgICBjb25zdCBjaGFyICpzcmNfcmVwbykKK3N0YXRpYyB2b2lkIGNvcHlfYWx0ZXJuYXRlcyhzdHJ1Y3Qgc3RyYnVmICpzcmMsIGNvbnN0IGNoYXIgKnNyY19yZXBvKQogewogCS8qCiAJICogUmVhZCBmcm9tIHRoZSBzb3VyY2Ugb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgZmlsZQpAQCAtMzkyLDU4ICszOTYsNjMgQEAKIAlmY2xvc2UoaW4pOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5X29yX2xpbmtfZGlyZWN0b3J5KHN0cnVjdCBzdHJidWYgKnNyYywgc3RydWN0IHN0cmJ1ZiAqZGVzdCwKLQkJCQkgICBjb25zdCBjaGFyICpzcmNfcmVwbywgaW50IHNyY19iYXNlbGVuKQorc3RhdGljIHZvaWQgbWtkaXJfaWZfbWlzc2luZyhjb25zdCBjaGFyICpwYXRobmFtZSwgbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGRpcmVudCAqZGU7Ci0Jc3RydWN0IHN0YXQgYnVmOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKCFta2RpcihwYXRobmFtZSwgbW9kZSkpCisJCXJldHVybjsKKworCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIiksIHBhdGhuYW1lKTsKKwllbHNlIGlmIChzdGF0KHBhdGhuYW1lLCAmc3QpKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHN0YXQgJyVzJyIpLCBwYXRobmFtZSk7CisJZWxzZSBpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCWRpZShfKCIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIpLCBwYXRobmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfb3JfbGlua19kaXJlY3Rvcnkoc3RydWN0IHN0cmJ1ZiAqc3JjLCBzdHJ1Y3Qgc3RyYnVmICpkZXN0LAorCQkJCSAgIGNvbnN0IGNoYXIgKnNyY19yZXBvKQorewogCWludCBzcmNfbGVuLCBkZXN0X2xlbjsKLQlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yICppdGVyOworCWludCBpdGVyX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKLQlkaXIgPSBvcGVuZGlyKHNyYy0+YnVmKTsKLQlpZiAoIWRpcikKLQkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBvcGVuICclcyciKSwgc3JjLT5idWYpOworCW1rZGlyX2lmX21pc3NpbmcoZGVzdC0+YnVmLCAwNzc3KTsKIAotCWlmIChta2RpcihkZXN0LT5idWYsIDA3NzcpKSB7Ci0JCWlmIChlcnJubyAhPSBFRVhJU1QpCi0JCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIpLCBkZXN0LT5idWYpOwotCQllbHNlIGlmIChzdGF0KGRlc3QtPmJ1ZiwgJmJ1ZikpCi0JCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHN0YXQgJyVzJyIpLCBkZXN0LT5idWYpOwotCQllbHNlIGlmICghU19JU0RJUihidWYuc3RfbW9kZSkpCi0JCQlkaWUoXygiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiKSwgZGVzdC0+YnVmKTsKLQl9CisJZmxhZ3MgPSBESVJfSVRFUkFUT1JfUEVEQU5USUMgfCBESVJfSVRFUkFUT1JfRk9MTE9XX1NZTUxJTktTOworCWl0ZXIgPSBkaXJfaXRlcmF0b3JfYmVnaW4oc3JjLT5idWYsIGZsYWdzKTsKKworCWlmICghaXRlcikKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBzdGFydCBpdGVyYXRvciBvdmVyICclcyciKSwgc3JjLT5idWYpOwogCiAJc3RyYnVmX2FkZGNoKHNyYywgJy8nKTsKIAlzcmNfbGVuID0gc3JjLT5sZW47CiAJc3RyYnVmX2FkZGNoKGRlc3QsICcvJyk7CiAJZGVzdF9sZW4gPSBkZXN0LT5sZW47CiAKLQl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJd2hpbGUgKChpdGVyX3N0YXR1cyA9IGRpcl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXIpKSA9PSBJVEVSX09LKSB7CiAJCXN0cmJ1Zl9zZXRsZW4oc3JjLCBzcmNfbGVuKTsKLQkJc3RyYnVmX2FkZHN0cihzcmMsIGRlLT5kX25hbWUpOworCQlzdHJidWZfYWRkc3RyKHNyYywgaXRlci0+cmVsYXRpdmVfcGF0aCk7CiAJCXN0cmJ1Zl9zZXRsZW4oZGVzdCwgZGVzdF9sZW4pOwotCQlzdHJidWZfYWRkc3RyKGRlc3QsIGRlLT5kX25hbWUpOwotCQlpZiAoc3RhdChzcmMtPmJ1ZiwgJmJ1ZikpIHsKLQkJCXdhcm5pbmcgKF8oImZhaWxlZCB0byBzdGF0ICVzXG4iKSwgc3JjLT5idWYpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKFNfSVNESVIoYnVmLnN0X21vZGUpKSB7Ci0JCQlpZiAoZGUtPmRfbmFtZVswXSAhPSAnLicpCi0JCQkJY29weV9vcl9saW5rX2RpcmVjdG9yeShzcmMsIGRlc3QsCi0JCQkJCQkgICAgICAgc3JjX3JlcG8sIHNyY19iYXNlbGVuKTsKKwkJc3RyYnVmX2FkZHN0cihkZXN0LCBpdGVyLT5yZWxhdGl2ZV9wYXRoKTsKKworCQlpZiAoU19JU0RJUihpdGVyLT5zdC5zdF9tb2RlKSkgeworCQkJbWtkaXJfaWZfbWlzc2luZyhkZXN0LT5idWYsIDA3NzcpOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBGaWxlcyB0aGF0IGNhbm5vdCBiZSBjb3BpZWQgYml0LWZvci1iaXQuLi4gKi8KLQkJaWYgKCFzdHJjbXAoc3JjLT5idWYgKyBzcmNfYmFzZWxlbiwgIi9pbmZvL2FsdGVybmF0ZXMiKSkgewotCQkJY29weV9hbHRlcm5hdGVzKHNyYywgZGVzdCwgc3JjX3JlcG8pOworCQlpZiAoIWZzcGF0aGNtcChpdGVyLT5yZWxhdGl2ZV9wYXRoLCAiaW5mby9hbHRlcm5hdGVzIikpIHsKKwkJCWNvcHlfYWx0ZXJuYXRlcyhzcmMsIHNyY19yZXBvKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKHVubGluayhkZXN0LT5idWYpICYmIGVycm5vICE9IEVOT0VOVCkKIAkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gdW5saW5rICclcyciKSwgZGVzdC0+YnVmKTsKIAkJaWYgKCFvcHRpb25fbm9faGFyZGxpbmtzKSB7Ci0JCQlpZiAoIWxpbmsoc3JjLT5idWYsIGRlc3QtPmJ1ZikpCisJCQlpZiAoIWxpbmsocmVhbF9wYXRoKHNyYy0+YnVmKSwgZGVzdC0+YnVmKSkKIAkJCQljb250aW51ZTsKIAkJCWlmIChvcHRpb25fbG9jYWwgPiAwKQogCQkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIpLCBkZXN0LT5idWYpOwpAQCAtNDUyLDcgKzQ2MSwxMSBAQAogCQlpZiAoY29weV9maWxlX3dpdGhfdGltZShkZXN0LT5idWYsIHNyYy0+YnVmLCAwNjY2KSkKIAkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciKSwgZGVzdC0+YnVmKTsKIAl9Ci0JY2xvc2VkaXIoZGlyKTsKKworCWlmIChpdGVyX3N0YXR1cyAhPSBJVEVSX0RPTkUpIHsKKwkJc3RyYnVmX3NldGxlbihzcmMsIHNyY19sZW4pOworCQlkaWUoXygiZmFpbGVkIHRvIGl0ZXJhdGUgb3ZlciAnJXMnIiksIHNyYy0+YnVmKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGNsb25lX2xvY2FsKGNvbnN0IGNoYXIgKnNyY19yZXBvLCBjb25zdCBjaGFyICpkZXN0X3JlcG8pCkBAIC00NzAsNyArNDgzLDcgQEAKIAkJZ2V0X2NvbW1vbl9kaXIoJmRlc3QsIGRlc3RfcmVwbyk7CiAJCXN0cmJ1Zl9hZGRzdHIoJnNyYywgIi9vYmplY3RzIik7CiAJCXN0cmJ1Zl9hZGRzdHIoJmRlc3QsICIvb2JqZWN0cyIpOwotCQljb3B5X29yX2xpbmtfZGlyZWN0b3J5KCZzcmMsICZkZXN0LCBzcmNfcmVwbywgc3JjLmxlbik7CisJCWNvcHlfb3JfbGlua19kaXJlY3RvcnkoJnNyYywgJmRlc3QsIHNyY19yZXBvKTsKIAkJc3RyYnVmX3JlbGVhc2UoJnNyYyk7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZkZXN0KTsKIAl9CkBAIC00OTIsNyArNTA1LDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGp1bmtfbGVhdmVfcmVwb19tc2dbXSA9CiBOXygiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgogICAgIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgotICAgImFuZCByZXRyeSB0aGUgY2hlY2tvdXQgd2l0aCAnZ2l0IGNoZWNrb3V0IC1mIEhFQUQnXG4iKTsKKyAgICJhbmQgcmV0cnkgd2l0aCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIpOwogCiBzdGF0aWMgdm9pZCByZW1vdmVfanVuayh2b2lkKQogewpAQCAtNzkxLDYgKzgwNCwxMSBAQAogCQlpZiAob3B0aW9uX3ZlcmJvc2l0eSA8IDApCiAJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXF1aWV0Iik7CiAKKwkJaWYgKG9wdGlvbl9yZW1vdGVfc3VibW9kdWxlcykgeworCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1yZW1vdGUiKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tbm8tZmV0Y2giKTsKKwkJfQorCiAJCWVyciA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQpOwogCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKIAl9CkBAIC0xMjQ1LDcgKzEyNjMsNyBAQAogCXRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CiAKIAlpZiAob3B0aW9uX2Rpc3NvY2lhdGUpIHsKLQkJY2xvc2VfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKKwkJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKIAkJZGlzc29jaWF0ZV9mcm9tX3JlZmVyZW5jZXMoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29sdW1uLmMgYi9idWlsdGluL2NvbHVtbi5jCmluZGV4IDUyMjhjY2YuLmU4MTVlMTQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vY29sdW1uLmMKKysrIGIvYnVpbHRpbi9jb2x1bW4uYwpAQCAtNDMsNyArNDMsNyBAQAogCiAJbWVtc2V0KCZjb3B0cywgMCwgc2l6ZW9mKGNvcHRzKSk7CiAJY29wdHMucGFkZGluZyA9IDE7Ci0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgIiIsIG9wdGlvbnMsIGJ1aWx0aW5fY29sdW1uX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fY29sdW1uX3VzYWdlLCAwKTsKIAlpZiAoYXJnYykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29sdW1uX3VzYWdlLCBvcHRpb25zKTsKIAlpZiAocmVhbF9jb21tYW5kIHx8IGNvbW1hbmQpIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29tbWl0LWdyYXBoLmMgYi9idWlsdGluL2NvbW1pdC1ncmFwaC5jCmluZGV4IDUzN2ZkZmQuLjM4MDI3YjggMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vY29tbWl0LWdyYXBoLmMKKysrIGIvYnVpbHRpbi9jb21taXQtZ3JhcGguYwpAQCAtNSwxNyArNSwxOCBAQAogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCiAKIHN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYnVpbHRpbl9jb21taXRfZ3JhcGhfdXNhZ2VbXSA9IHsKIAlOXygiZ2l0IGNvbW1pdC1ncmFwaCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIpLAogCU5fKCJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iKSwKLQlOXygiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iKSwKLQlOXygiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmRdIFstLXJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10iKSwKKwlOXygiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10iKSwKKwlOXygiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tcmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSA8c3BsaXQgb3B0aW9ucz4iKSwKIAlOVUxMCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY29tbWl0X2dyYXBoX3ZlcmlmeV91c2FnZVtdID0gewotCU5fKCJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIpLAorCU5fKCJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSIpLAogCU5VTEwKIH07CiAKQEAgLTI1LDcgKzI2LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jb21taXRfZ3JhcGhfd3JpdGVfdXNhZ2VbXSA9IHsKLQlOXygiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmRdIFstLXJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10iKSwKKwlOXygiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tcmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSA8c3BsaXQgb3B0aW9ucz4iKSwKIAlOVUxMCiB9OwogCkBAIC0zNSw5ICszNiwxMCBAQAogCWludCBzdGRpbl9wYWNrczsKIAlpbnQgc3RkaW5fY29tbWl0czsKIAlpbnQgYXBwZW5kOworCWludCBzcGxpdDsKKwlpbnQgc2hhbGxvdzsKIH0gb3B0czsKIAotCiBzdGF0aWMgaW50IGdyYXBoX3ZlcmlmeShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IGNvbW1pdF9ncmFwaCAqZ3JhcGggPSBOVUxMOwpAQCAtNDUsMTEgKzQ3LDE0IEBACiAJaW50IG9wZW5fb2s7CiAJaW50IGZkOwogCXN0cnVjdCBzdGF0IHN0OworCWludCBmbGFncyA9IDA7CiAKIAlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2NvbW1pdF9ncmFwaF92ZXJpZnlfb3B0aW9uc1tdID0gewogCQlPUFRfU1RSSU5HKDAsICJvYmplY3QtZGlyIiwgJm9wdHMub2JqX2RpciwKIAkJCSAgIE5fKCJkaXIiKSwKIAkJCSAgIE5fKCJUaGUgb2JqZWN0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZ3JhcGgiKSksCisJCU9QVF9CT09MKDAsICJzaGFsbG93IiwgJm9wdHMuc2hhbGxvdywKKwkJCSBOXygiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIikpLAogCQlPUFRfRU5EKCksCiAJfTsKIApAQCAtNTksMjEgKzY0LDI3IEBACiAKIAlpZiAoIW9wdHMub2JqX2RpcikKIAkJb3B0cy5vYmpfZGlyID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwlpZiAob3B0cy5zaGFsbG93KQorCQlmbGFncyB8PSBDT01NSVRfR1JBUEhfVkVSSUZZX1NIQUxMT1c7CiAKIAlncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShvcHRzLm9ial9kaXIpOwogCW9wZW5fb2sgPSBvcGVuX2NvbW1pdF9ncmFwaChncmFwaF9uYW1lLCAmZmQsICZzdCk7Ci0JaWYgKCFvcGVuX29rICYmIGVycm5vID09IEVOT0VOVCkKLQkJcmV0dXJuIDA7Ci0JaWYgKCFvcGVuX29rKQorCWlmICghb3Blbl9vayAmJiBlcnJubyAhPSBFTk9FTlQpCiAJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIpLCBncmFwaF9uYW1lKTsKLQlncmFwaCA9IGxvYWRfY29tbWl0X2dyYXBoX29uZV9mZF9zdChmZCwgJnN0KTsKKwogCUZSRUVfQU5EX05VTEwoZ3JhcGhfbmFtZSk7CiAKKwlpZiAob3Blbl9vaykKKwkJZ3JhcGggPSBsb2FkX2NvbW1pdF9ncmFwaF9vbmVfZmRfc3QoZmQsICZzdCk7CisJIGVsc2UKKwkJZ3JhcGggPSByZWFkX2NvbW1pdF9ncmFwaF9vbmUodGhlX3JlcG9zaXRvcnksIG9wdHMub2JqX2Rpcik7CisKKwkvKiBSZXR1cm4gZmFpbHVyZSBpZiBvcGVuX29rIHByZWRpY3RlZCBzdWNjZXNzICovCiAJaWYgKCFncmFwaCkKLQkJcmV0dXJuIDE7CisJCXJldHVybiAhIW9wZW5fb2s7CiAKIAlVTkxFQUsoZ3JhcGgpOwotCXJldHVybiB2ZXJpZnlfY29tbWl0X2dyYXBoKHRoZV9yZXBvc2l0b3J5LCBncmFwaCk7CisJcmV0dXJuIHZlcmlmeV9jb21taXRfZ3JhcGgodGhlX3JlcG9zaXRvcnksIGdyYXBoLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgZ3JhcGhfcmVhZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCkBAIC0xMzUsMTIgKzE0NiwxNSBAQAogfQogCiBleHRlcm4gaW50IHJlYWRfcmVwbGFjZV9yZWZzOworc3RhdGljIHN0cnVjdCBzcGxpdF9jb21taXRfZ3JhcGhfb3B0cyBzcGxpdF9vcHRzOwogCiBzdGF0aWMgaW50IGdyYXBoX3dyaXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhY2tfaW5kZXhlcyA9IE5VTEw7CiAJc3RydWN0IHN0cmluZ19saXN0ICpjb21taXRfaGV4ID0gTlVMTDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGluZXM7CisJaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgaW50IGZsYWdzID0gQ09NTUlUX0dSQVBIX1BST0dSRVNTOwogCiAJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9jb21taXRfZ3JhcGhfd3JpdGVfb3B0aW9uc1tdID0gewogCQlPUFRfU1RSSU5HKDAsICJvYmplY3QtZGlyIiwgJm9wdHMub2JqX2RpciwKQEAgLTE1NCw5ICsxNjgsMjEgQEAKIAkJCU5fKCJzdGFydCB3YWxrIGF0IGNvbW1pdHMgbGlzdGVkIGJ5IHN0ZGluIikpLAogCQlPUFRfQk9PTCgwLCAiYXBwZW5kIiwgJm9wdHMuYXBwZW5kLAogCQkJTl8oImluY2x1ZGUgYWxsIGNvbW1pdHMgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUiKSksCisJCU9QVF9CT09MKDAsICJzcGxpdCIsICZvcHRzLnNwbGl0LAorCQkJTl8oImFsbG93IHdyaXRpbmcgYW4gaW5jcmVtZW50YWwgY29tbWl0LWdyYXBoIGZpbGUiKSksCisJCU9QVF9JTlRFR0VSKDAsICJtYXgtY29tbWl0cyIsICZzcGxpdF9vcHRzLm1heF9jb21taXRzLAorCQkJTl8oIm1heGltdW0gbnVtYmVyIG9mIGNvbW1pdHMgaW4gYSBub24tYmFzZSBzcGxpdCBjb21taXQtZ3JhcGgiKSksCisJCU9QVF9JTlRFR0VSKDAsICJzaXplLW11bHRpcGxlIiwgJnNwbGl0X29wdHMuc2l6ZV9tdWx0aXBsZSwKKwkJCU5fKCJtYXhpbXVtIHJhdGlvIGJldHdlZW4gdHdvIGxldmVscyBvZiBhIHNwbGl0IGNvbW1pdC1ncmFwaCIpKSwKKwkJT1BUX0VYUElSWV9EQVRFKDAsICJleHBpcmUtdGltZSIsICZzcGxpdF9vcHRzLmV4cGlyZV90aW1lLAorCQkJTl8oIm1heGltdW0gbnVtYmVyIG9mIGNvbW1pdHMgaW4gYSBub24tYmFzZSBzcGxpdCBjb21taXQtZ3JhcGgiKSksCiAJCU9QVF9FTkQoKSwKIAl9OwogCisJc3BsaXRfb3B0cy5zaXplX211bHRpcGxlID0gMjsKKwlzcGxpdF9vcHRzLm1heF9jb21taXRzID0gMDsKKwlzcGxpdF9vcHRzLmV4cGlyZV90aW1lID0gMDsKKwogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsCiAJCQkgICAgIGJ1aWx0aW5fY29tbWl0X2dyYXBoX3dyaXRlX29wdGlvbnMsCiAJCQkgICAgIGJ1aWx0aW5fY29tbWl0X2dyYXBoX3dyaXRlX3VzYWdlLCAwKTsKQEAgLTE2NSwxMSArMTkxLDE2IEBACiAJCWRpZShfKCJ1c2UgYXQgbW9zdCBvbmUgb2YgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cywgb3IgLS1zdGRpbi1wYWNrcyIpKTsKIAlpZiAoIW9wdHMub2JqX2RpcikKIAkJb3B0cy5vYmpfZGlyID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwlpZiAob3B0cy5hcHBlbmQpCisJCWZsYWdzIHw9IENPTU1JVF9HUkFQSF9BUFBFTkQ7CisJaWYgKG9wdHMuc3BsaXQpCisJCWZsYWdzIHw9IENPTU1JVF9HUkFQSF9TUExJVDsKIAogCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKIAogCWlmIChvcHRzLnJlYWNoYWJsZSkgewotCQl3cml0ZV9jb21taXRfZ3JhcGhfcmVhY2hhYmxlKG9wdHMub2JqX2Rpciwgb3B0cy5hcHBlbmQsIDEpOworCQlpZiAod3JpdGVfY29tbWl0X2dyYXBoX3JlYWNoYWJsZShvcHRzLm9ial9kaXIsIGZsYWdzLCAmc3BsaXRfb3B0cykpCisJCQlyZXR1cm4gMTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xODgsMTQgKzIxOSwxNSBAQAogCQlVTkxFQUsoYnVmKTsKIAl9CiAKLQl3cml0ZV9jb21taXRfZ3JhcGgob3B0cy5vYmpfZGlyLAotCQkJICAgcGFja19pbmRleGVzLAotCQkJICAgY29tbWl0X2hleCwKLQkJCSAgIG9wdHMuYXBwZW5kLAotCQkJICAgMSk7CisJaWYgKHdyaXRlX2NvbW1pdF9ncmFwaChvcHRzLm9ial9kaXIsCisJCQkgICAgICAgcGFja19pbmRleGVzLAorCQkJICAgICAgIGNvbW1pdF9oZXgsCisJCQkgICAgICAgZmxhZ3MsCisJCQkgICAgICAgJnNwbGl0X29wdHMpKQorCQlyZXN1bHQgPSAxOwogCiAJVU5MRUFLKGxpbmVzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBpbnQgY21kX2NvbW1pdF9ncmFwaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29tbWl0LmMgYi9idWlsdGluL2NvbW1pdC5jCmluZGV4IDFjOWU4ZTIuLmFlN2FhZjYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vY29tbWl0LmMKKysrIGIvYnVpbHRpbi9jb21taXQuYwpAQCAtNjAsMTUgKzYwLDE4IEBACiAiXG4iKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgZW1wdHlfY2hlcnJ5X3BpY2tfYWR2aWNlX3NpbmdsZVtdID0KLU5fKCJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIpOworTl8oIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCdcbiIpOwogCiBzdGF0aWMgY29uc3QgY2hhciBlbXB0eV9jaGVycnlfcGlja19hZHZpY2VfbXVsdGlbXSA9Ci1OXygiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorTl8oImFuZCB0aGVuIHVzZTpcbiIKICJcbiIKLSIgICAgZ2l0IHJlc2V0XG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCiAiXG4iCi0iVGhlbiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgd2lsbCByZXN1bWUgY2hlcnJ5LXBpY2tpbmdcbiIKLSJ0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iKTsKKyJ0byByZXN1bWUgY2hlcnJ5LXBpY2tpbmcgdGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIik7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpjb2xvcl9zdGF0dXNfc2xvdHNbXSA9IHsKIAlbV1RfU1RBVFVTX0hFQURFUl0JICA9ICJoZWFkZXIiLApAQCAtMTA3OCw5ICsxMDgxLDExIEBACiBzdGF0aWMgc3RydWN0IHN0YXR1c19kZWZlcnJlZF9jb25maWcgewogCWVudW0gd3Rfc3RhdHVzX2Zvcm1hdCBzdGF0dXNfZm9ybWF0OwogCWludCBzaG93X2JyYW5jaDsKKwllbnVtIGFoZWFkX2JlaGluZF9mbGFncyBhaGVhZF9iZWhpbmQ7CiB9IHN0YXR1c19kZWZlcnJlZF9jb25maWcgPSB7CiAJU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRCwKLQktMSAvKiB1bnNwZWNpZmllZCAqLworCS0xLCAvKiB1bnNwZWNpZmllZCAqLworCUFIRUFEX0JFSElORF9VTlNQRUNJRklFRCwKIH07CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXplX2RlZmVycmVkX2NvbmZpZyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQpAQCAtMTEwNyw2ICsxMTEyLDE3IEBACiAJaWYgKHMtPnNob3dfYnJhbmNoIDwgMCkKIAkJcy0+c2hvd19icmFuY2ggPSAwOwogCisJLyoKKwkgKiBJZiB0aGUgdXNlciBkaWQgbm90IGdpdmUgYSAiLS1bbm9dLWFoZWFkLWJlaGluZCIgY29tbWFuZAorCSAqIGxpbmUgYXJndW1lbnQgKkFORCogd2Ugd2lsbCBwcmludCBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdAorCSAqIChzaG9ydCwgbG9uZyBldGMuKSB0aGVuIHdlIGluaGVyaXQgZnJvbSB0aGUgc3RhdHVzLmFoZWFkYmVoaW5kCisJICogY29uZmlnIHNldHRpbmcuICBJbiBhbGwgb3RoZXIgY2FzZXMgKGFuZCBwb3JjZWxhaW4gVlsxMl0gZm9ybWF0cworCSAqIGluIHBhcnRpY3VsYXIpLCB3ZSBpbmhlcml0IF9GVUxMIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwlpZiAodXNlX2RlZmVycmVkX2NvbmZpZyAmJgorCSAgICBzLT5haGVhZF9iZWhpbmRfZmxhZ3MgPT0gQUhFQURfQkVISU5EX1VOU1BFQ0lGSUVEKQorCQlzLT5haGVhZF9iZWhpbmRfZmxhZ3MgPSBzdGF0dXNfZGVmZXJyZWRfY29uZmlnLmFoZWFkX2JlaGluZDsKKwogCWlmIChzLT5haGVhZF9iZWhpbmRfZmxhZ3MgPT0gQUhFQURfQkVISU5EX1VOU1BFQ0lGSUVEKQogCQlzLT5haGVhZF9iZWhpbmRfZmxhZ3MgPSBBSEVBRF9CRUhJTkRfRlVMTDsKIH0KQEAgLTEyNDYsNiArMTI2MiwxMCBAQAogCQlzdGF0dXNfZGVmZXJyZWRfY29uZmlnLnNob3dfYnJhbmNoID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5haGVhZGJlaGluZCIpKSB7CisJCXN0YXR1c19kZWZlcnJlZF9jb25maWcuYWhlYWRfYmVoaW5kID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CiAJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5zaG93c3Rhc2giKSkgewogCQlzLT5zaG93X3N0YXNoID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOwogCQlyZXR1cm4gMDsKQEAgLTE2NTgsNyArMTY3OCw3IEBACiAJCWRpZSgiJXMiLCBlcnIuYnVmKTsKIAl9CiAKLQlzZXF1ZW5jZXJfcG9zdF9jb21taXRfY2xlYW51cCh0aGVfcmVwb3NpdG9yeSk7CisJc2VxdWVuY2VyX3Bvc3RfY29tbWl0X2NsZWFudXAodGhlX3JlcG9zaXRvcnksIDApOwogCXVubGluayhnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSk7CiAJdW5saW5rKGdpdF9wYXRoX21lcmdlX21zZyh0aGVfcmVwb3NpdG9yeSkpOwogCXVubGluayhnaXRfcGF0aF9tZXJnZV9tb2RlKHRoZV9yZXBvc2l0b3J5KSk7CkBAIC0xNjY3LDEwICsxNjg3LDExIEBACiAJaWYgKGNvbW1pdF9pbmRleF9maWxlcygpKQogCQlkaWUoXygicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCiAJCSAgICAgICJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgotCQkgICAgICAibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iKSk7CisJCSAgICAgICJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgOi9cIiB0byByZWNvdmVyLiIpKTsKIAotCWlmIChnaXRfZW52X2Jvb2woR0lUX1RFU1RfQ09NTUlUX0dSQVBILCAwKSkKLQkJd3JpdGVfY29tbWl0X2dyYXBoX3JlYWNoYWJsZShnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCAwLCAwKTsKKwlpZiAoZ2l0X2Vudl9ib29sKEdJVF9URVNUX0NPTU1JVF9HUkFQSCwgMCkgJiYKKwkgICAgd3JpdGVfY29tbWl0X2dyYXBoX3JlYWNoYWJsZShnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCAwLCBOVUxMKSkKKwkJcmV0dXJuIDE7CiAKIAlyZXBvX3JlcmVyZSh0aGVfcmVwb3NpdG9yeSwgMCk7CiAJcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9nY19hdXRvLCBSVU5fR0lUX0NNRCk7CmRpZmYgLS1naXQgYS9idWlsdGluL2Rlc2NyaWJlLmMgYi9idWlsdGluL2Rlc2NyaWJlLmMKaW5kZXggMTQwOWNlZC4uMjAwMTU0MiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9kZXNjcmliZS5jCisrKyBiL2J1aWx0aW4vZGVzY3JpYmUuYwpAQCAtNzYsNyArNzYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjb21taXRfbmFtZSAqZmluZF9jb21taXRfbmFtZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpCiB7Ci0JcmV0dXJuIGhhc2htYXBfZ2V0X2Zyb21faGFzaCgmbmFtZXMsIHNoYTFoYXNoKHBlZWxlZC0+aGFzaCksIHBlZWxlZC0+aGFzaCk7CisJcmV0dXJuIGhhc2htYXBfZ2V0X2Zyb21faGFzaCgmbmFtZXMsIG9pZGhhc2gocGVlbGVkKSwgcGVlbGVkKTsKIH0KIAogc3RhdGljIGludCByZXBsYWNlX25hbWUoc3RydWN0IGNvbW1pdF9uYW1lICplLApAQCAtMTIzLDcgKzEyMyw3IEBACiAJCWlmICghZSkgewogCQkJZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21taXRfbmFtZSkpOwogCQkJb2lkY3B5KCZlLT5wZWVsZWQsIHBlZWxlZCk7Ci0JCQloYXNobWFwX2VudHJ5X2luaXQoZSwgc2hhMWhhc2gocGVlbGVkLT5oYXNoKSk7CisJCQloYXNobWFwX2VudHJ5X2luaXQoZSwgb2lkaGFzaChwZWVsZWQpKTsKIAkJCWhhc2htYXBfYWRkKCZuYW1lcywgZSk7CiAJCQllLT5wYXRoID0gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9lbnYtLWhlbHBlci5jIGIvYnVpbHRpbi9lbnYtLWhlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzIxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Vudi0taGVscGVyLmMKQEAgLTAsMCArMSw5NSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZW52X19oZWxwZXJfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wdGlvbnM+IDxlbnYtdmFyPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBlbnVtIHsKKwlFTlZfSEVMUEVSX1RZUEVfQk9PTCA9IDEsCisJRU5WX0hFTFBFUl9UWVBFX1VMT05HCit9IGNtZG1vZGUgPSAwOworCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV90eXBlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgICBpbnQgdW5zZXQpCit7CisJaWYgKCFzdHJjbXAoYXJnLCAiYm9vbCIpKQorCQljbWRtb2RlID0gRU5WX0hFTFBFUl9UWVBFX0JPT0w7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ1bG9uZyIpKQorCQljbWRtb2RlID0gRU5WX0hFTFBFUl9UWVBFX1VMT05HOworCWVsc2UKKwkJZGllKF8oInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIiksIGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9lbnZfX2hlbHBlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZXhpdF9jb2RlID0gMDsKKwljb25zdCBjaGFyICplbnZfdmFyaWFibGUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmVudl9kZWZhdWx0ID0gTlVMTDsKKwlpbnQgcmV0OworCWludCByZXRfaW50LCBkZWZhdWx0X2ludDsKKwl1bnNpZ25lZCBsb25nIHJldF91bG9uZywgZGVmYXVsdF91bG9uZzsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX0NBTExCQUNLX0YoMCwgInR5cGUiLCAmY21kbW9kZSwgTl8oInR5cGUiKSwKKwkJCSAgICAgICBOXygidmFsdWUgaXMgZ2l2ZW4gdGhpcyB0eXBlIiksIFBBUlNFX09QVF9OT05FRywKKwkJCSAgICAgICBvcHRpb25fcGFyc2VfdHlwZSksCisJCU9QVF9TVFJJTkcoMCwgImRlZmF1bHQiLCAmZW52X2RlZmF1bHQsIE5fKCJ2YWx1ZSIpLAorCQkJICAgTl8oImRlZmF1bHQgZm9yIGdpdF9lbnZfKiguLi4pIHRvIGZhbGwgYmFjayBvbiIpKSwKKwkJT1BUX0JPT0woMCwgImV4aXQtY29kZSIsICZleGl0X2NvZGUsCisJCQkgTl8oImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdHMsIGVudl9faGVscGVyX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKTsKKwlpZiAoZW52X2RlZmF1bHQgJiYgISplbnZfZGVmYXVsdCkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGVudl9faGVscGVyX3VzYWdlLCBvcHRzKTsKKwlpZiAoIWNtZG1vZGUpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhlbnZfX2hlbHBlcl91c2FnZSwgb3B0cyk7CisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGVudl9faGVscGVyX3VzYWdlLCBvcHRzKTsKKwllbnZfdmFyaWFibGUgPSBhcmd2WzBdOworCisJc3dpdGNoIChjbWRtb2RlKSB7CisJY2FzZSBFTlZfSEVMUEVSX1RZUEVfQk9PTDoKKwkJaWYgKGVudl9kZWZhdWx0KSB7CisJCQlkZWZhdWx0X2ludCA9IGdpdF9wYXJzZV9tYXliZV9ib29sKGVudl9kZWZhdWx0KTsKKwkJCWlmIChkZWZhdWx0X2ludCA9PSAtMSkgeworCQkJCWVycm9yKF8oIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGEgYm9vbGVhbiB2YWx1ZSB3aXRoIGAtLXR5cGU9Ym9vbGAsIG5vdCBgJXNgIiksCisJCQkJICAgICAgZW52X2RlZmF1bHQpOworCQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhlbnZfX2hlbHBlcl91c2FnZSwgb3B0cyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZWZhdWx0X2ludCA9IDA7CisJCX0KKwkJcmV0X2ludCA9IGdpdF9lbnZfYm9vbChlbnZfdmFyaWFibGUsIGRlZmF1bHRfaW50KTsKKwkJaWYgKCFleGl0X2NvZGUpCisJCQlwdXRzKHJldF9pbnQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJcmV0ID0gcmV0X2ludDsKKwkJYnJlYWs7CisJY2FzZSBFTlZfSEVMUEVSX1RZUEVfVUxPTkc6CisJCWlmIChlbnZfZGVmYXVsdCkgeworCQkJaWYgKCFnaXRfcGFyc2VfdWxvbmcoZW52X2RlZmF1bHQsICZkZWZhdWx0X3Vsb25nKSkgeworCQkJCWVycm9yKF8oIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAlc2AiKSwKKwkJCQkgICAgICBlbnZfZGVmYXVsdCk7CisJCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGVudl9faGVscGVyX3VzYWdlLCBvcHRzKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRlZmF1bHRfdWxvbmcgPSAwOworCQl9CisJCXJldF91bG9uZyA9IGdpdF9lbnZfdWxvbmcoZW52X3ZhcmlhYmxlLCBkZWZhdWx0X3Vsb25nKTsKKwkJaWYgKCFleGl0X2NvZGUpCisJCQlwcmludGYoIiVsdVxuIiwgcmV0X3Vsb25nKTsKKwkJcmV0ID0gcmV0X3Vsb25nOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInVua25vd24gPHR5cGU+IHZhbHVlIik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAhcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mYXN0LWV4cG9ydC5jIGIvYnVpbHRpbi9mYXN0LWV4cG9ydC5jCmluZGV4IDllMjgzNDguLmY1NDFmNTUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vZmFzdC1leHBvcnQuYworKysgYi9idWlsdGluL2Zhc3QtZXhwb3J0LmMKQEAgLTMzLDYgKzMzLDcgQEAKIHN0YXRpYyBpbnQgcHJvZ3Jlc3M7CiBzdGF0aWMgZW51bSB7IFNJR05FRF9UQUdfQUJPUlQsIFZFUkJBVElNLCBXQVJOLCBXQVJOX1NUUklQLCBTVFJJUCB9IHNpZ25lZF90YWdfbW9kZSA9IFNJR05FRF9UQUdfQUJPUlQ7CiBzdGF0aWMgZW51bSB7IFRBR19GSUxURVJJTkdfQUJPUlQsIERST1AsIFJFV1JJVEUgfSB0YWdfb2ZfZmlsdGVyZWRfbW9kZSA9IFRBR19GSUxURVJJTkdfQUJPUlQ7CitzdGF0aWMgZW51bSB7IFJFRU5DT0RFX0FCT1JULCBSRUVOQ09ERV9ZRVMsIFJFRU5DT0RFX05PIH0gcmVlbmNvZGVfbW9kZSA9IFJFRU5DT0RFX0FCT1JUOwogc3RhdGljIGludCBmYWtlX21pc3NpbmdfdGFnZ2VyOwogc3RhdGljIGludCB1c2VfZG9uZV9mZWF0dXJlOwogc3RhdGljIGludCBub19kYXRhOwpAQCAtNzcsNiArNzgsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwYXJzZV9vcHRfcmVlbmNvZGVfbW9kZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KSB7CisJCXJlZW5jb2RlX21vZGUgPSBSRUVOQ09ERV9BQk9SVDsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChnaXRfcGFyc2VfbWF5YmVfYm9vbChhcmcpKSB7CisJY2FzZSAwOgorCQlyZWVuY29kZV9tb2RlID0gUkVFTkNPREVfTk87CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmVlbmNvZGVfbW9kZSA9IFJFRU5DT0RFX1lFUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKCFzdHJjYXNlY21wKGFyZywgImFib3J0IikpCisJCQlyZWVuY29kZV9tb2RlID0gUkVFTkNPREVfQUJPUlQ7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcigiVW5rbm93biByZWVuY29kaW5nIG1vZGU6ICVzIiwgYXJnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkZWNvcmF0aW9uIGlkbnVtczsKIHN0YXRpYyB1aW50MzJfdCBsYXN0X2lkbnVtOwogCkBAIC0yNDksNyArMjc1LDcgQEAKIAlpZiAoaXNfbnVsbF9vaWQob2lkKSkKIAkJcmV0dXJuOwogCi0Jb2JqZWN0ID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkLT5oYXNoKTsKKwlvYmplY3QgPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOwogCWlmIChvYmplY3QgJiYgb2JqZWN0LT5mbGFncyAmIFNIT1dOKQogCQlyZXR1cm47CiAKQEAgLTQyNyw3ICs0NTMsNyBAQAogCQkJCQkJICAmc3BlYy0+b2lkKSk7CiAJCQllbHNlIHsKIAkJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LAotCQkJCQkJCQkgICAgICBzcGVjLT5vaWQuaGFzaCk7CisJCQkJCQkJCSAgICAgICZzcGVjLT5vaWQpOwogCQkJCXByaW50ZigiTSAlMDZvIDolZCAiLCBzcGVjLT5tb2RlLAogCQkJCSAgICAgICBnZXRfb2JqZWN0X21hcmsob2JqZWN0KSk7CiAJCQl9CkBAIC00NTMsNyArNDc5LDcgQEAKIAlib2wgPSBtZW1tZW0oYmVnaW4sIGVuZCA/IGVuZCAtIGJlZ2luIDogc3RybGVuKGJlZ2luKSwKIAkJICAgICBuZWVkbGUsIHN0cmxlbihuZWVkbGUpKTsKIAlpZiAoIWJvbCkKLQkJcmV0dXJuIGdpdF9jb21taXRfZW5jb2Rpbmc7CisJCXJldHVybiBOVUxMOwogCWJvbCArPSBzdHJsZW4obmVlZGxlKTsKIAllb2wgPSBzdHJjaHJudWwoYm9sLCAnXG4nKTsKIAkqZW9sID0gJ1wwJzsKQEAgLTYzMywxOCArNjU5LDMyIEBACiAJfQogCiAJbWFya19uZXh0X29iamVjdCgmY29tbWl0LT5vYmplY3QpOwotCWlmIChhbm9ueW1pemUpCisJaWYgKGFub255bWl6ZSkgewogCQlyZWVuY29kZWQgPSBhbm9ueW1pemVfY29tbWl0X21lc3NhZ2UobWVzc2FnZSk7Ci0JZWxzZSBpZiAoIWlzX2VuY29kaW5nX3V0ZjgoZW5jb2RpbmcpKQotCQlyZWVuY29kZWQgPSByZWVuY29kZV9zdHJpbmcobWVzc2FnZSwgIlVURi04IiwgZW5jb2RpbmcpOworCX0gZWxzZSBpZiAoZW5jb2RpbmcpIHsKKwkJc3dpdGNoKHJlZW5jb2RlX21vZGUpIHsKKwkJY2FzZSBSRUVOQ09ERV9ZRVM6CisJCQlyZWVuY29kZWQgPSByZWVuY29kZV9zdHJpbmcobWVzc2FnZSwgIlVURi04IiwgZW5jb2RpbmcpOworCQkJYnJlYWs7CisJCWNhc2UgUkVFTkNPREVfTk86CisJCQlicmVhazsKKwkJY2FzZSBSRUVOQ09ERV9BQk9SVDoKKwkJCWRpZSgiRW5jb3VudGVyZWQgY29tbWl0LXNwZWNpZmljIGVuY29kaW5nICVzIGluIGNvbW1pdCAiCisJCQkgICAgIiVzOyB1c2UgLS1yZWVuY29kZT1beWVzfG5vXSB0byBoYW5kbGUgaXQiLAorCQkJICAgIGVuY29kaW5nLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJfQorCX0KIAlpZiAoIWNvbW1pdC0+cGFyZW50cykKIAkJcHJpbnRmKCJyZXNldCAlc1xuIiwgcmVmbmFtZSk7CiAJcHJpbnRmKCJjb21taXQgJXNcbm1hcmsgOiUiUFJJdTMyIlxuIiwgcmVmbmFtZSwgbGFzdF9pZG51bSk7CiAJaWYgKHNob3dfb3JpZ2luYWxfaWRzKQogCQlwcmludGYoIm9yaWdpbmFsLW9pZCAlc1xuIiwgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7Ci0JcHJpbnRmKCIlLipzXG4lLipzXG5kYXRhICV1XG4lcyIsCisJcHJpbnRmKCIlLipzXG4lLipzXG4iLAogCSAgICAgICAoaW50KShhdXRob3JfZW5kIC0gYXV0aG9yKSwgYXV0aG9yLAotCSAgICAgICAoaW50KShjb21taXR0ZXJfZW5kIC0gY29tbWl0dGVyKSwgY29tbWl0dGVyLAorCSAgICAgICAoaW50KShjb21taXR0ZXJfZW5kIC0gY29tbWl0dGVyKSwgY29tbWl0dGVyKTsKKwlpZiAoIXJlZW5jb2RlZCAmJiBlbmNvZGluZykKKwkJcHJpbnRmKCJlbmNvZGluZyAlc1xuIiwgZW5jb2RpbmcpOworCXByaW50ZigiZGF0YSAldVxuJXMiLAogCSAgICAgICAodW5zaWduZWQpKHJlZW5jb2RlZAogCQkJICA/IHN0cmxlbihyZWVuY29kZWQpIDogbWVzc2FnZQogCQkJICA/IHN0cmxlbihtZXNzYWdlKSA6IDApLApAQCAtMTA4OCw2ICsxMTI4LDkgQEAKIAkJT1BUX0NBTExCQUNLKDAsICJ0YWctb2YtZmlsdGVyZWQtb2JqZWN0IiwgJnRhZ19vZl9maWx0ZXJlZF9tb2RlLCBOXygibW9kZSIpLAogCQkJICAgICBOXygic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIpLAogCQkJICAgICBwYXJzZV9vcHRfdGFnX29mX2ZpbHRlcmVkX21vZGUpLAorCQlPUFRfQ0FMTEJBQ0soMCwgInJlZW5jb2RlIiwgJnJlZW5jb2RlX21vZGUsIE5fKCJtb2RlIiksCisJCQkgICAgIE5fKCJzZWxlY3QgaGFuZGxpbmcgb2YgY29tbWl0IG1lc3NhZ2VzIGluIGFuIGFsdGVybmF0ZSBlbmNvZGluZyIpLAorCQkJICAgICBwYXJzZV9vcHRfcmVlbmNvZGVfbW9kZSksCiAJCU9QVF9TVFJJTkcoMCwgImV4cG9ydC1tYXJrcyIsICZleHBvcnRfZmlsZW5hbWUsIE5fKCJmaWxlIiksCiAJCQkgICAgIE5fKCJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIpKSwKIAkJT1BUX1NUUklORygwLCAiaW1wb3J0LW1hcmtzIiwgJmltcG9ydF9maWxlbmFtZSwgTl8oImZpbGUiKSwKZGlmZiAtLWdpdCBhL2J1aWx0aW4vZmV0Y2guYyBiL2J1aWx0aW4vZmV0Y2guYwppbmRleCA0YmE2M2Q1Li41M2NlOTlkIDEwMDY0NAotLS0gYS9idWlsdGluL2ZldGNoLmMKKysrIGIvYnVpbHRpbi9mZXRjaC5jCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSAibGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmgiCiAjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCiAKKyNkZWZpbmUgRk9SQ0VEX1VQREFURVNfREVMQVlfV0FSTklOR19JTl9NUyAoMTAgKiAxMDAwKQorCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fZmV0Y2hfdXNhZ2VbXSA9IHsKIAlOXygiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIiksCiAJTl8oImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IiksCkBAIC0zOSw2ICs0MSw4IEBACiB9OwogCiBzdGF0aWMgaW50IGZldGNoX3BydW5lX2NvbmZpZyA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworc3RhdGljIGludCBmZXRjaF9zaG93X2ZvcmNlZF91cGRhdGVzID0gMTsKK3N0YXRpYyB1aW50NjRfdCBmb3JjZWRfdXBkYXRlc19tcyA9IDA7CiBzdGF0aWMgaW50IHBydW5lID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCiAjZGVmaW5lIFBSVU5FX0JZX0RFRkFVTFQgMCAvKiBkbyB3ZSBwcnVuZSBieSBkZWZhdWx0PyAqLwogCkBAIC00OCw2ICs1Miw3IEBACiAKIHN0YXRpYyBpbnQgYWxsLCBhcHBlbmQsIGRyeV9ydW4sIGZvcmNlLCBrZWVwLCBtdWx0aXBsZSwgdXBkYXRlX2hlYWRfb2ssIHZlcmJvc2l0eSwgZGVlcGVuX3JlbGF0aXZlOwogc3RhdGljIGludCBwcm9ncmVzcyA9IC0xOworc3RhdGljIGludCBlbmFibGVfYXV0b19nYyA9IDE7CiBzdGF0aWMgaW50IHRhZ3MgPSBUQUdTX0RFRkFVTFQsIHVuc2hhbGxvdywgdXBkYXRlX3NoYWxsb3csIGRlZXBlbjsKIHN0YXRpYyBpbnQgbWF4X2NoaWxkcmVuID0gMTsKIHN0YXRpYyBlbnVtIHRyYW5zcG9ydF9mYW1pbHkgZmFtaWx5OwpAQCAtNzksNiArODQsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKCFzdHJjbXAoaywgImZldGNoLnNob3dmb3JjZWR1cGRhdGVzIikpIHsKKwkJZmV0Y2hfc2hvd19mb3JjZWRfdXBkYXRlcyA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKCFzdHJjbXAoaywgInN1Ym1vZHVsZS5yZWN1cnNlIikpIHsKIAkJaW50IHIgPSBnaXRfY29uZmlnX2Jvb2woaywgdikgPwogCQkJUkVDVVJTRV9TVUJNT0RVTEVTX09OIDogUkVDVVJTRV9TVUJNT0RVTEVTX09GRjsKQEAgLTE2OSw2ICsxNzksMTAgQEAKIAlPUFRfU1RSSU5HX0xJU1QoMCwgIm5lZ290aWF0aW9uLXRpcCIsICZuZWdvdGlhdGlvbl90aXAsIE5fKCJyZXZpc2lvbiIpLAogCQkJTl8oInJlcG9ydCB0aGF0IHdlIGhhdmUgb25seSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoaXMgb2JqZWN0IikpLAogCU9QVF9QQVJTRV9MSVNUX09CSkVDVFNfRklMVEVSKCZmaWx0ZXJfb3B0aW9ucyksCisJT1BUX0JPT0woMCwgImF1dG8tZ2MiLCAmZW5hYmxlX2F1dG9fZ2MsCisJCSBOXygicnVuICdnYyAtLWF1dG8nIGFmdGVyIGZldGNoaW5nIikpLAorCU9QVF9CT09MKDAsICJzaG93LWZvcmNlZC11cGRhdGVzIiwgJmZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMsCisJCSBOXygiY2hlY2sgZm9yIGZvcmNlZC11cGRhdGVzIG9uIGFsbCB1cGRhdGVkIGJyYW5jaGVzIikpLAogCU9QVF9FTkQoKQogfTsKIApAQCAtMjM5LDYgKzI1Myw3IEBACiBzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5IHsKIAlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7IC8qIG11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciAqLwogCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBpZ25vcmU7CiAJY2hhciByZWZuYW1lW0ZMRVhfQVJSQVldOwogfTsKIApAQCAtMjg3LDYgKzMwMiwxMSBAQAogCXJldHVybiAhIWhhc2htYXBfZ2V0X2Zyb21faGFzaChtYXAsIHN0cmhhc2gocmVmbmFtZSksIHJlZm5hbWUpOwogfQogCitzdGF0aWMgdm9pZCBjbGVhcl9pdGVtKHN0cnVjdCByZWZuYW1lX2hhc2hfZW50cnkgKml0ZW0pCit7CisJaXRlbS0+aWdub3JlID0gMTsKK30KKwogc3RhdGljIHZvaWQgZmluZF9ub25fbG9jYWxfdGFncyhjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAogCQkJCXN0cnVjdCByZWYgKipoZWFkLAogCQkJCXN0cnVjdCByZWYgKioqdGFpbCkKQEAgLTMxOSw3ICszMzksNyBAQAogCQkJICAgICF3aWxsX2ZldGNoKGhlYWQsIHJlZi0+b2xkX29pZC5oYXNoKSAmJgogCQkJICAgICFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmaXRlbS0+b2lkLCBPQkpFQ1RfSU5GT19RVUlDSykgJiYKIAkJCSAgICAhd2lsbF9mZXRjaChoZWFkLCBpdGVtLT5vaWQuaGFzaCkpCi0JCQkJb2lkY2xyKCZpdGVtLT5vaWQpOworCQkJCWNsZWFyX2l0ZW0oaXRlbSk7CiAJCQlpdGVtID0gTlVMTDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0zMzMsNyArMzUzLDcgQEAKIAkJaWYgKGl0ZW0gJiYKIAkJICAgICFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmaXRlbS0+b2lkLCBPQkpFQ1RfSU5GT19RVUlDSykgJiYKIAkJICAgICF3aWxsX2ZldGNoKGhlYWQsIGl0ZW0tPm9pZC5oYXNoKSkKLQkJCW9pZGNscigmaXRlbS0+b2lkKTsKKwkJCWNsZWFyX2l0ZW0oaXRlbSk7CiAKIAkJaXRlbSA9IE5VTEw7CiAKQEAgLTM1NCw3ICszNzQsNyBAQAogCWlmIChpdGVtICYmCiAJICAgICFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmaXRlbS0+b2lkLCBPQkpFQ1RfSU5GT19RVUlDSykgJiYKIAkgICAgIXdpbGxfZmV0Y2goaGVhZCwgaXRlbS0+b2lkLmhhc2gpKQotCQlvaWRjbHIoJml0ZW0tPm9pZCk7CisJCWNsZWFyX2l0ZW0oaXRlbSk7CiAKIAkvKgogCSAqIEZvciBhbGwgdGhlIHRhZ3MgaW4gdGhlIHJlbW90ZV9yZWZzX2xpc3QsCkBAIC0zNjIsMTkgKzM4MiwyMSBAQAogCSAqLwogCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0ocmVtb3RlX3JlZl9pdGVtLCAmcmVtb3RlX3JlZnNfbGlzdCkgewogCQljb25zdCBjaGFyICpyZWZuYW1lID0gcmVtb3RlX3JlZl9pdGVtLT5zdHJpbmc7CisJCXN0cnVjdCByZWYgKnJtOwogCiAJCWl0ZW0gPSBoYXNobWFwX2dldF9mcm9tX2hhc2goJnJlbW90ZV9yZWZzLCBzdHJoYXNoKHJlZm5hbWUpLCByZWZuYW1lKTsKIAkJaWYgKCFpdGVtKQogCQkJQlVHKCJ1bnNlZW4gcmVtb3RlIHJlZj8iKTsKIAogCQkvKiBVbmxlc3Mgd2UgaGF2ZSBhbHJlYWR5IGRlY2lkZWQgdG8gaWdub3JlIHRoaXMgaXRlbS4uLiAqLwotCQlpZiAoIWlzX251bGxfb2lkKCZpdGVtLT5vaWQpKSB7Ci0JCQlzdHJ1Y3QgcmVmICpybSA9IGFsbG9jX3JlZihpdGVtLT5yZWZuYW1lKTsKLQkJCXJtLT5wZWVyX3JlZiA9IGFsbG9jX3JlZihpdGVtLT5yZWZuYW1lKTsKLQkJCW9pZGNweSgmcm0tPm9sZF9vaWQsICZpdGVtLT5vaWQpOwotCQkJKip0YWlsID0gcm07Ci0JCQkqdGFpbCA9ICZybS0+bmV4dDsKLQkJfQorCQlpZiAoaXRlbS0+aWdub3JlKQorCQkJY29udGludWU7CisKKwkJcm0gPSBhbGxvY19yZWYoaXRlbS0+cmVmbmFtZSk7CisJCXJtLT5wZWVyX3JlZiA9IGFsbG9jX3JlZihpdGVtLT5yZWZuYW1lKTsKKwkJb2lkY3B5KCZybS0+b2xkX29pZCwgJml0ZW0tPm9pZCk7CisJCSoqdGFpbCA9IHJtOworCQkqdGFpbCA9ICZybS0+bmV4dDsKIAl9CiAJaGFzaG1hcF9mcmVlKCZyZW1vdGVfcmVmcywgMSk7CiAJc3RyaW5nX2xpc3RfY2xlYXIoJnJlbW90ZV9yZWZzX2xpc3QsIDApOwpAQCAtNjk5LDYgKzcyMSw3IEBACiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCXN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKIAljb25zdCBjaGFyICpwcmV0dHlfcmVmID0gcHJldHRpZnlfcmVmbmFtZShyZWYtPm5hbWUpOworCWludCBmYXN0X2ZvcndhcmQgPSAwOwogCiAJdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJnJlZi0+bmV3X29pZCwgTlVMTCk7CiAJaWYgKHR5cGUgPCAwKQpAQCAtNzczLDkgKzc5NiwxOCBAQAogCQlyZXR1cm4gcjsKIAl9CiAKLQlpZiAoaW5fbWVyZ2VfYmFzZXMoY3VycmVudCwgdXBkYXRlZCkpIHsKKwlpZiAoZmV0Y2hfc2hvd19mb3JjZWRfdXBkYXRlcykgeworCQl1aW50NjRfdCB0X2JlZm9yZSA9IGdldG5hbm90aW1lKCk7CisJCWZhc3RfZm9yd2FyZCA9IGluX21lcmdlX2Jhc2VzKGN1cnJlbnQsIHVwZGF0ZWQpOworCQlmb3JjZWRfdXBkYXRlc19tcyArPSAoZ2V0bmFub3RpbWUoKSAtIHRfYmVmb3JlKSAvIDEwMDAwMDA7CisJfSBlbHNlIHsKKwkJZmFzdF9mb3J3YXJkID0gMTsKKwl9CisKKwlpZiAoZmFzdF9mb3J3YXJkKSB7CiAJCXN0cnVjdCBzdHJidWYgcXVpY2tyZWYgPSBTVFJCVUZfSU5JVDsKIAkJaW50IHI7CisKIAkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KCZxdWlja3JlZiwgJmN1cnJlbnQtPm9iamVjdC5vaWQsIERFRkFVTFRfQUJCUkVWKTsKIAkJc3RyYnVmX2FkZHN0cigmcXVpY2tyZWYsICIuLiIpOwogCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJnF1aWNrcmVmLCAmcmVmLT5uZXdfb2lkLCBERUZBVUxUX0FCQlJFVik7CkBAIC05NzEsNiArMTAwMywxNyBAQAogCQkgICAgICAiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgIgogCQkgICAgICAiYnJhbmNoZXMiKSwgcmVtb3RlX25hbWUpOwogCisJaWYgKGFkdmljZV9mZXRjaF9zaG93X2ZvcmNlZF91cGRhdGVzKSB7CisJCWlmICghZmV0Y2hfc2hvd19mb3JjZWRfdXBkYXRlcykgeworCQkJd2FybmluZyhfKCJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSwgYnV0IHRoYXQgY2hlY2sgaGFzIGJlZW4gZGlzYWJsZWQuIikpOworCQkJd2FybmluZyhfKCJUbyByZS1lbmFibGUsIHVzZSAnLS1zaG93LWZvcmNlZC11cGRhdGVzJyBmbGFnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iKSk7CisJCX0gZWxzZSBpZiAoZm9yY2VkX3VwZGF0ZXNfbXMgPiBGT1JDRURfVVBEQVRFU19ERUxBWV9XQVJOSU5HX0lOX01TKSB7CisJCQl3YXJuaW5nKF8oIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNoZWNrIGZvcmNlZCB1cGRhdGVzLiBZb3UgY2FuIHVzZSAnLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIiksCisJCQkJZm9yY2VkX3VwZGF0ZXNfbXMgLyAxMDAwLjApOworCQkJd2FybmluZyhfKCJvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgZmFsc2UnIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iKSk7CisJCX0KKwl9CisKICBhYm9ydDoKIAlzdHJidWZfcmVsZWFzZSgmbm90ZSk7CiAJZnJlZSh1cmwpOwpAQCAtMTQyNCw3ICsxNDY3LDcgQEAKIAkJCXJldHVybiBlcnJjb2RlOwogCX0KIAotCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICJmZXRjaCIsICItLWFwcGVuZCIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICJmZXRjaCIsICItLWFwcGVuZCIsICItLW5vLWF1dG8tZ2MiLCBOVUxMKTsKIAlhZGRfb3B0aW9uc190b19hcmd2KCZhcmd2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CkBAIC0xNjcyLDEzICsxNzE1LDE1IEBACiAKIAlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CiAKLQljbG9zZV9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnktPm9iamVjdHMpOworCWNsb3NlX29iamVjdF9zdG9yZSh0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cyk7CiAKLQlhcmd2X2FycmF5X3B1c2hsKCZhcmd2X2djX2F1dG8sICJnYyIsICItLWF1dG8iLCBOVUxMKTsKLQlpZiAodmVyYm9zaXR5IDwgMCkKLQkJYXJndl9hcnJheV9wdXNoKCZhcmd2X2djX2F1dG8sICItLXF1aWV0Iik7Ci0JcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9nY19hdXRvLmFyZ3YsIFJVTl9HSVRfQ01EKTsKLQlhcmd2X2FycmF5X2NsZWFyKCZhcmd2X2djX2F1dG8pOworCWlmIChlbmFibGVfYXV0b19nYykgeworCQlhcmd2X2FycmF5X3B1c2hsKCZhcmd2X2djX2F1dG8sICJnYyIsICItLWF1dG8iLCBOVUxMKTsKKwkJaWYgKHZlcmJvc2l0eSA8IDApCisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3ZfZ2NfYXV0bywgIi0tcXVpZXQiKTsKKwkJcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9nY19hdXRvLmFyZ3YsIFJVTl9HSVRfQ01EKTsKKwkJYXJndl9hcnJheV9jbGVhcigmYXJndl9nY19hdXRvKTsKKwl9CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mc2NrLmMgYi9idWlsdGluL2ZzY2suYwppbmRleCBkMjZmYjBhLi4xODQwM2E5IDEwMDY0NAotLS0gYS9idWlsdGluL2ZzY2suYworKysgYi9idWlsdGluL2ZzY2suYwpAQCAtMjM4LDcgKzIzOCw3IEBACiBzdGF0aWMgdm9pZCBtYXJrX3VucmVhY2hhYmxlX3JlZmVyZW50cyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCiB7CiAJc3RydWN0IGZzY2tfb3B0aW9ucyBvcHRpb25zID0gRlNDS19PUFRJT05TX0RFRkFVTFQ7Ci0Jc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkLT5oYXNoKTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOwogCiAJaWYgKCFvYmogfHwgIShvYmotPmZsYWdzICYgSEFTX09CSikpCiAJCXJldHVybjsgLyogbm90IHBhcnQgb2Ygb3VyIG9yaWdpbmFsIHNldCAqLwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJc3RydWN0IG9iamVjdCAqb2JqOwogCiAJaWYgKCFpc19udWxsX29pZChvaWQpKSB7Ci0JCW9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZC0+aGFzaCk7CisJCW9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CiAJCWlmIChvYmogJiYgKG9iai0+ZmxhZ3MgJiBIQVNfT0JKKSkgewogCQkJaWYgKHRpbWVzdGFtcCAmJiBuYW1lX29iamVjdHMpCiAJCQkJYWRkX2RlY29yYXRpb24oZnNja193YWxrX29wdGlvbnMub2JqZWN0X25hbWVzLApAQCAtNzU2LDcgKzc1Niw3IEBACiAKIHN0YXRpYyB2b2lkIG1hcmtfb2JqZWN0X2Zvcl9jb25uZWN0aXZpdHkoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewotCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF91bmtub3duX29iamVjdChvaWQtPmhhc2gpOworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF91bmtub3duX29iamVjdChvaWQpOwogCW9iai0+ZmxhZ3MgfD0gSEFTX09CSjsKIH0KIApAQCAtODc5LDcgKzg3OSw3IEBACiAJCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogCQlpZiAoIWdldF9vaWQoYXJnLCAmb2lkKSkgewogCQkJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwKLQkJCQkJCQkgICBvaWQuaGFzaCk7CisJCQkJCQkJICAgJm9pZCk7CiAKIAkJCWlmICghb2JqIHx8ICEob2JqLT5mbGFncyAmIEhBU19PQkopKSB7CiAJCQkJaWYgKGlzX3Byb21pc29yX29iamVjdCgmb2lkKSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4vZ2MuYyBiL2J1aWx0aW4vZ2MuYwppbmRleCA4OTQzYmNjLi5jMThlZmFkIDEwMDY0NAotLS0gYS9idWlsdGluL2djLmMKKysrIGIvYnVpbHRpbi9nYy5jCkBAIC02NTMsNyArNjUzLDcgQEAKIAlnY19iZWZvcmVfcmVwYWNrKCk7CiAKIAlpZiAoIXJlcG9zaXRvcnlfZm9ybWF0X3ByZWNpb3VzX29iamVjdHMpIHsKLQkJY2xvc2VfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKKwkJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKIAkJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KHJlcGFjay5hcmd2LCBSVU5fR0lUX0NNRCkpCiAJCQlkaWUoRkFJTEVEX1JVTiwgcmVwYWNrLmFyZ3ZbMF0pOwogCkBAIC02ODEsMTMgKzY4MSwxNSBAQAogCXJlcG9ydF9nYXJiYWdlID0gcmVwb3J0X3BhY2tfZ2FyYmFnZTsKIAlyZXByZXBhcmVfcGFja2VkX2dpdCh0aGVfcmVwb3NpdG9yeSk7CiAJaWYgKHBhY2tfZ2FyYmFnZS5uciA+IDApIHsKLQkJY2xvc2VfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKKwkJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKIAkJY2xlYW5fcGFja19nYXJiYWdlKCk7CiAJfQogCi0JaWYgKGdjX3dyaXRlX2NvbW1pdF9ncmFwaCkKLQkJd3JpdGVfY29tbWl0X2dyYXBoX3JlYWNoYWJsZShnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCAwLAotCQkJCQkgICAgICFxdWlldCAmJiAhZGFlbW9uaXplZCk7CisJaWYgKGdjX3dyaXRlX2NvbW1pdF9ncmFwaCAmJgorCSAgICB3cml0ZV9jb21taXRfZ3JhcGhfcmVhY2hhYmxlKGdldF9vYmplY3RfZGlyZWN0b3J5KCksCisJCQkJCSAhcXVpZXQgJiYgIWRhZW1vbml6ZWQgPyBDT01NSVRfR1JBUEhfUFJPR1JFU1MgOiAwLAorCQkJCQkgTlVMTCkpCisJCXJldHVybiAxOwogCiAJaWYgKGF1dG9fZ2MgJiYgdG9vX21hbnlfbG9vc2Vfb2JqZWN0cygpKQogCQl3YXJuaW5nKF8oIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyAiCmRpZmYgLS1naXQgYS9idWlsdGluL2dyZXAuYyBiL2J1aWx0aW4vZ3JlcC5jCmluZGV4IDU4MGZkMzguLjU2MDA1MTcgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vZ3JlcC5jCisrKyBiL2J1aWx0aW4vZ3JlcC5jCkBAIC00NTgsNyArNDU4LDggQEAKIAkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0X29yX2RpZShvaWQsIG9pZF90b19oZXgob2lkKSk7CiAKIAkJZ3JlcF9yZWFkX2xvY2soKTsKLQkJZGF0YSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKCZvYmplY3QtPm9pZCwgdHJlZV90eXBlLAorCQlkYXRhID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoJnN1YnJlcG8sCisJCQkJCQkgICZvYmplY3QtPm9pZCwgdHJlZV90eXBlLAogCQkJCQkJICAmc2l6ZSwgTlVMTCk7CiAJCWdyZXBfcmVhZF91bmxvY2soKTsKIApAQCAtNjIzLDcgKzYyNCw4IEBACiAJCWludCBoaXQsIGxlbjsKIAogCQlncmVwX3JlYWRfbG9jaygpOwotCQlkYXRhID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoJm9iai0+b2lkLCB0cmVlX3R5cGUsCisJCWRhdGEgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShvcHQtPnJlcG8sCisJCQkJCQkgICZvYmotPm9pZCwgdHJlZV90eXBlLAogCQkJCQkJICAmc2l6ZSwgTlVMTCk7CiAJCWdyZXBfcmVhZF91bmxvY2soKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9oYXNoLW9iamVjdC5jIGIvYnVpbHRpbi9oYXNoLW9iamVjdC5jCmluZGV4IGUwNTVjMTEuLjY0MGVmNGQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vaGFzaC1vYmplY3QuYworKysgYi9idWlsdGluL2hhc2gtb2JqZWN0LmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCWludCBpOwogCWNvbnN0IGNoYXIgKmVycnN0ciA9IE5VTEw7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBoYXNoX29iamVjdF9vcHRpb25zLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgaGFzaF9vYmplY3Rfb3B0aW9ucywKIAkJCSAgICAgaGFzaF9vYmplY3RfdXNhZ2UsIDApOwogCiAJaWYgKGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1QpCmRpZmYgLS1naXQgYS9idWlsdGluL2ludGVycHJldC10cmFpbGVycy5jIGIvYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYwppbmRleCA4YWU0MGRlLi5mMTAxZDA5IDEwMDY0NAotLS0gYS9idWlsdGluL2ludGVycHJldC10cmFpbGVycy5jCisrKyBiL2J1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKICNpbmNsdWRlICJ0cmFpbGVyLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X2ludGVycHJldF90cmFpbGVyc191c2FnZVtdID0gewogCU5fKCJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIpLApAQCAtMTEyLDYgKzExMyw4IEBACiAJCU9QVF9FTkQoKQogCX07CiAKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCiAJCQkgICAgIGdpdF9pbnRlcnByZXRfdHJhaWxlcnNfdXNhZ2UsIDApOwogCmRpZmYgLS1naXQgYS9idWlsdGluL2xvZy5jIGIvYnVpbHRpbi9sb2cuYwppbmRleCBlNDNlZTEyLi40NGIxMGIzIDEwMDY0NAotLS0gYS9idWlsdGluL2xvZy5jCisrKyBiL2J1aWx0aW4vbG9nLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIHN0YXRpYyBpbnQgZGVmYXVsdF9zaG93X3NpZ25hdHVyZTsKIHN0YXRpYyBpbnQgZGVjb3JhdGlvbl9zdHlsZTsKIHN0YXRpYyBpbnQgZGVjb3JhdGlvbl9naXZlbjsKLXN0YXRpYyBpbnQgdXNlX21haWxtYXBfY29uZmlnOworc3RhdGljIGludCB1c2VfbWFpbG1hcF9jb25maWcgPSAxOwogc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9wYXRjaF9zdWJqZWN0X3ByZWZpeCA9ICJQQVRDSCI7CiBzdGF0aWMgY29uc3QgY2hhciAqZm10X3ByZXR0eTsKIApAQCAtNjMsOSArNjMsMTQgQEAKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYXJnczsKIH07CiAKK3N0YXRpYyBpbnQgc2Vzc2lvbl9pc19pbnRlcmFjdGl2ZSh2b2lkKQoreworCXJldHVybiBpc2F0dHkoMSkgfHwgcGFnZXJfaW5fdXNlKCk7Cit9CisKIHN0YXRpYyBpbnQgYXV0b19kZWNvcmF0aW9uX3N0eWxlKHZvaWQpCiB7Ci0JcmV0dXJuIChpc2F0dHkoMSkgfHwgcGFnZXJfaW5fdXNlKCkpID8gREVDT1JBVEVfU0hPUlRfUkVGUyA6IDA7CisJcmV0dXJuIHNlc3Npb25faXNfaW50ZXJhY3RpdmUoKSA/IERFQ09SQVRFX1NIT1JUX1JFRlMgOiAwOwogfQogCiBzdGF0aWMgaW50IHBhcnNlX2RlY29yYXRpb25fc3R5bGUoY29uc3QgY2hhciAqdmFsdWUpCkBAIC0xNTUsNyArMTYwLDcgQEAKIAkJCSBzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqb3B0KQogewogCXN0cnVjdCB1c2VyZm9ybWF0X3dhbnQgdzsKLQlpbnQgcXVpZXQgPSAwLCBzb3VyY2UgPSAwLCBtYWlsbWFwID0gMDsKKwlpbnQgcXVpZXQgPSAwLCBzb3VyY2UgPSAwLCBtYWlsbWFwOwogCXN0YXRpYyBzdHJ1Y3QgbGluZV9vcHRfY2FsbGJhY2tfZGF0YSBsaW5lX2NiID0ge05VTEwsIE5VTEwsIFNUUklOR19MSVNUX0lOSVRfRFVQfTsKIAlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGRlY29yYXRlX3JlZnNfZXhjbHVkZSA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CiAJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBkZWNvcmF0ZV9yZWZzX2luY2x1ZGUgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwpAQCAtNzc5LDYgKzc4NCw4IEBACiAKIHN0YXRpYyBpbnQgZ2l0X2Zvcm1hdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CisJc3RydWN0IHJldl9pbmZvICpyZXYgPSBjYjsKKwogCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5oZWFkZXJzIikpIHsKIAkJaWYgKCF2YWx1ZSkKIAkJCWRpZShfKCJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIikpOwpAQCAtODY0LDYgKzg3MSwyMiBAQAogCQkJZnJvbSA9IE5VTEw7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQubm90ZXMiKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgYiA9IGdpdF9wYXJzZV9tYXliZV9ib29sKHZhbHVlKTsKKwkJaWYgKCFiKQorCQkJcmV0dXJuIDA7CisJCXJldi0+c2hvd19ub3RlcyA9IDE7CisJCWlmIChiIDwgMCkgeworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCB2YWx1ZSk7CisJCQlleHBhbmRfbm90ZXNfcmVmKCZidWYpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZXYtPm5vdGVzX29wdC5leHRyYV9ub3Rlc19yZWZzLAorCQkJCQlzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpKTsKKwkJfSBlbHNlIHsKKwkJCXJldi0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzID0gMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CiAKIAlyZXR1cm4gZ2l0X2xvZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQpAQCAtMTQzNSw3ICsxNDU4LDcgQEAKIAkJc3RydWN0IG9iamVjdF9pZCAqcGF0Y2hfaWQ7CiAJCWlmICgqY29tbWl0X2Jhc2VfYXQoJmNvbW1pdF9iYXNlLCBjb21taXQpKQogCQkJY29udGludWU7Ci0JCWlmIChjb21taXRfcGF0Y2hfaWQoY29tbWl0LCAmZGlmZm9wdCwgJm9pZCwgMCkpCisJCWlmIChjb21taXRfcGF0Y2hfaWQoY29tbWl0LCAmZGlmZm9wdCwgJm9pZCwgMCwgMSkpCiAJCQlkaWUoXygiY2Fubm90IGdldCBwYXRjaCBpZCIpKTsKIAkJQUxMT0NfR1JPVyhiYXNlcy0+cGF0Y2hfaWQsIGJhc2VzLT5ucl9wYXRjaF9pZCArIDEsIGJhc2VzLT5hbGxvY19wYXRjaF9pZCk7CiAJCXBhdGNoX2lkID0gYmFzZXMtPnBhdGNoX2lkICsgYmFzZXMtPm5yX3BhdGNoX2lkOwpAQCAtMTYxNyw4ICsxNjQwLDggQEAKIAlleHRyYV90by5zdHJkdXBfc3RyaW5ncyA9IDE7CiAJZXh0cmFfY2Muc3RyZHVwX3N0cmluZ3MgPSAxOwogCWluaXRfbG9nX2RlZmF1bHRzKCk7Ci0JZ2l0X2NvbmZpZyhnaXRfZm9ybWF0X2NvbmZpZywgTlVMTCk7CiAJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgcHJlZml4KTsKKwlnaXRfY29uZmlnKGdpdF9mb3JtYXRfY29uZmlnLCAmcmV2KTsKIAlyZXYuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX0VNQUlMOwogCXJldi5leHBhbmRfdGFic19pbl9sb2dfZGVmYXVsdCA9IDA7CiAJcmV2LnZlcmJvc2VfaGVhZGVyID0gMTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vbHMtZmlsZXMuYyBiL2J1aWx0aW4vbHMtZmlsZXMuYwppbmRleCA3ZjgzYzlhLi42NzBlOGZiIDEwMDY0NAotLS0gYS9idWlsdGluL2xzLWZpbGVzLmMKKysrIGIvYnVpbHRpbi9scy1maWxlcy5jCkBAIC0zNzMsNyArMzczLDcgQEAKIAlmaXJzdCA9IHBvczsKIAlsYXN0ID0gaXN0YXRlLT5jYWNoZV9ucjsKIAl3aGlsZSAobGFzdCA+IGZpcnN0KSB7Ci0JCWludCBuZXh0ID0gKGxhc3QgKyBmaXJzdCkgPj4gMTsKKwkJaW50IG5leHQgPSBmaXJzdCArICgobGFzdCAtIGZpcnN0KSA+PiAxKTsKIAkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbbmV4dF07CiAJCWlmICghc3RybmNtcChjZS0+bmFtZSwgcHJlZml4LCBwcmVmaXhsZW4pKSB7CiAJCQlmaXJzdCA9IG5leHQrMTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2UtdHJlZS5jIGIvYnVpbHRpbi9tZXJnZS10cmVlLmMKaW5kZXggMzRjYTAyNS4uOTdiNTRjYSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9tZXJnZS10cmVlLmMKKysrIGIvYnVpbHRpbi9tZXJnZS10cmVlLmMKQEAgLTIwNSw2ICsyMDUsNyBAQAogc3RhdGljIHZvaWQgdW5yZXNvbHZlZF9kaXJlY3RvcnkoY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCiAJCQkJIHN0cnVjdCBuYW1lX2VudHJ5IG5bM10pCiB7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKIAljaGFyICpuZXdiYXNlOwogCXN0cnVjdCBuYW1lX2VudHJ5ICpwOwogCXN0cnVjdCB0cmVlX2Rlc2MgdFszXTsKQEAgLTIyMCw5ICsyMjEsOSBAQAogCW5ld2Jhc2UgPSB0cmF2ZXJzZV9wYXRoKGluZm8sIHApOwogCiAjZGVmaW5lIEVOVFJZX09JRChlKSAoKChlKS0+bW9kZSAmJiBTX0lTRElSKChlKS0+bW9kZSkpID8gJihlKS0+b2lkIDogTlVMTCkKLQlidWYwID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IodCArIDAsIEVOVFJZX09JRChuICsgMCkpOwotCWJ1ZjEgPSBmaWxsX3RyZWVfZGVzY3JpcHRvcih0ICsgMSwgRU5UUllfT0lEKG4gKyAxKSk7Ci0JYnVmMiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHQgKyAyLCBFTlRSWV9PSUQobiArIDIpKTsKKwlidWYwID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IociwgdCArIDAsIEVOVFJZX09JRChuICsgMCkpOworCWJ1ZjEgPSBmaWxsX3RyZWVfZGVzY3JpcHRvcihyLCB0ICsgMSwgRU5UUllfT0lEKG4gKyAxKSk7CisJYnVmMiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHIsIHQgKyAyLCBFTlRSWV9PSUQobiArIDIpKTsKICN1bmRlZiBFTlRSWV9PSUQKIAogCW1lcmdlX3RyZWVzKHQsIG5ld2Jhc2UpOwpAQCAtMzUxLDE0ICszNTIsMTYgQEAKIAl0cmF2ZXJzZV90cmVlcygmdGhlX2luZGV4LCAzLCB0LCAmaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkICpnZXRfdHJlZV9kZXNjcmlwdG9yKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKnJldikKK3N0YXRpYyB2b2lkICpnZXRfdHJlZV9kZXNjcmlwdG9yKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLAorCQkJCSBjb25zdCBjaGFyICpyZXYpCiB7CiAJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJdm9pZCAqYnVmOwogCi0JaWYgKGdldF9vaWQocmV2LCAmb2lkKSkKKwlpZiAocmVwb19nZXRfb2lkKHIsIHJldiwgJm9pZCkpCiAJCWRpZSgidW5rbm93biByZXYgJXMiLCByZXYpOwotCWJ1ZiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKGRlc2MsICZvaWQpOworCWJ1ZiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHIsIGRlc2MsICZvaWQpOwogCWlmICghYnVmKQogCQlkaWUoIiVzIGlzIG5vdCBhIHRyZWUiLCByZXYpOwogCXJldHVybiBidWY7CkBAIC0zNjYsMTUgKzM2OSwxNiBAQAogCiBpbnQgY21kX21lcmdlX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKIAlzdHJ1Y3QgdHJlZV9kZXNjIHRbM107CiAJdm9pZCAqYnVmMSwgKmJ1ZjIsICpidWYzOwogCiAJaWYgKGFyZ2MgIT0gNCkKIAkJdXNhZ2UobWVyZ2VfdHJlZV91c2FnZSk7CiAKLQlidWYxID0gZ2V0X3RyZWVfZGVzY3JpcHRvcih0KzAsIGFyZ3ZbMV0pOwotCWJ1ZjIgPSBnZXRfdHJlZV9kZXNjcmlwdG9yKHQrMSwgYXJndlsyXSk7Ci0JYnVmMyA9IGdldF90cmVlX2Rlc2NyaXB0b3IodCsyLCBhcmd2WzNdKTsKKwlidWYxID0gZ2V0X3RyZWVfZGVzY3JpcHRvcihyLCB0KzAsIGFyZ3ZbMV0pOworCWJ1ZjIgPSBnZXRfdHJlZV9kZXNjcmlwdG9yKHIsIHQrMSwgYXJndlsyXSk7CisJYnVmMyA9IGdldF90cmVlX2Rlc2NyaXB0b3IociwgdCsyLCBhcmd2WzNdKTsKIAltZXJnZV90cmVlcyh0LCAiIik7CiAJZnJlZShidWYxKTsKIAlmcmVlKGJ1ZjIpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS5jIGIvYnVpbHRpbi9tZXJnZS5jCmluZGV4IDU3YzJhMjQuLmUyY2NiYzQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbWVyZ2UuYworKysgYi9idWlsdGluL21lcmdlLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJwYWNrZmlsZS5oIgogI2luY2x1ZGUgInRhZy5oIgogI2luY2x1ZGUgImFsaWFzLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCiAjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCiAjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCiAKQEAgLTczLDYgKzc0LDcgQEAKIHN0YXRpYyBpbnQgdmVyYm9zaXR5Owogc3RhdGljIGludCBhbGxvd19yZXJlcmVfYXV0bzsKIHN0YXRpYyBpbnQgYWJvcnRfY3VycmVudF9tZXJnZTsKK3N0YXRpYyBpbnQgcXVpdF9jdXJyZW50X21lcmdlOwogc3RhdGljIGludCBjb250aW51ZV9jdXJyZW50X21lcmdlOwogc3RhdGljIGludCBhbGxvd191bnJlbGF0ZWRfaGlzdG9yaWVzOwogc3RhdGljIGludCBzaG93X3Byb2dyZXNzID0gLTE7CkBAIC0yNzQsNiArMjc2LDggQEAKIAlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zaXR5KSwKIAlPUFRfQk9PTCgwLCAiYWJvcnQiLCAmYWJvcnRfY3VycmVudF9tZXJnZSwKIAkJTl8oImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIikpLAorCU9QVF9CT09MKDAsICJxdWl0IiwgJnF1aXRfY3VycmVudF9tZXJnZSwKKwkJTl8oIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiKSksCiAJT1BUX0JPT0woMCwgImNvbnRpbnVlIiwgJmNvbnRpbnVlX2N1cnJlbnRfbWVyZ2UsCiAJCU5fKCJjb250aW51ZSB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIpKSwKIAlPUFRfQk9PTCgwLCAiYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyIsICZhbGxvd191bnJlbGF0ZWRfaGlzdG9yaWVzLApAQCAtMjg3LDE0ICsyOTEsNiBAQAogCU9QVF9FTkQoKQogfTsKIAotLyogQ2xlYW5zIHVwIG1ldGFkYXRhIHRoYXQgaXMgdW5pbnRlcmVzdGluZyBhZnRlciBhIHN1Y2NlZWRlZCBtZXJnZS4gKi8KLXN0YXRpYyB2b2lkIGRyb3Bfc2F2ZSh2b2lkKQotewotCXVubGluayhnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSk7Ci0JdW5saW5rKGdpdF9wYXRoX21lcmdlX21zZyh0aGVfcmVwb3NpdG9yeSkpOwotCXVubGluayhnaXRfcGF0aF9tZXJnZV9tb2RlKHRoZV9yZXBvc2l0b3J5KSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2F2ZV9zdGF0ZShzdHJ1Y3Qgb2JqZWN0X2lkICpzdGFzaCkKIHsKIAlpbnQgbGVuOwpAQCAtMzg4LDcgKzM4NCw3IEBACiB7CiAJaWYgKHZlcmJvc2l0eSA+PSAwKQogCQlwcmludGYoIiVzJXNcbiIsIHNxdWFzaCA/IF8oIiAobm90aGluZyB0byBzcXVhc2gpIikgOiAiIiwgbXNnKTsKLQlkcm9wX3NhdmUoKTsKKwlyZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKIH0KIAogc3RhdGljIHZvaWQgc3F1YXNoX21lc3NhZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzKQpAQCAtNDU3LDcgKzQ1Myw3IEBACiAJCQkgKiBXZSBpZ25vcmUgZXJyb3JzIGluICdnYyAtLWF1dG8nLCBzaW5jZSB0aGUKIAkJCSAqIHVzZXIgc2hvdWxkIHNlZSB0aGVtLgogCQkJICovCi0JCQljbG9zZV9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnktPm9iamVjdHMpOworCQkJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKIAkJCXJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3ZfZ2NfYXV0bywgUlVOX0dJVF9DTUQpOwogCQl9CiAJfQpAQCAtODgxLDcgKzg3Nyw3IEBACiAJCQkmcmVzdWx0X2NvbW1pdCwgTlVMTCwgc2lnbl9jb21taXQpKQogCQlkaWUoXygiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiKSk7CiAJZmluaXNoKGhlYWQsIHJlbW90ZWhlYWRzLCAmcmVzdWx0X2NvbW1pdCwgIkluLWluZGV4IG1lcmdlIik7Ci0JZHJvcF9zYXZlKCk7CisJcmVtb3ZlX21lcmdlX2JyYW5jaF9zdGF0ZSh0aGVfcmVwb3NpdG9yeSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg5Niw2ICs4OTIsNyBAQAogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IG9iamVjdF9pZCByZXN1bHRfY29tbWl0OwogCisJd3JpdGVfdHJlZV90cml2aWFsKHJlc3VsdF90cmVlKTsKIAlmcmVlX2NvbW1pdF9saXN0KGNvbW1vbik7CiAJcGFyZW50cyA9IHJlbW90ZWhlYWRzOwogCWlmICghaGVhZF9zdWJzdW1lZCB8fCBmYXN0X2ZvcndhcmQgPT0gRkZfTk8pCkBAIC05MDcsNyArOTA0LDcgQEAKIAlzdHJidWZfYWRkZigmYnVmLCAiTWVyZ2UgbWFkZSBieSB0aGUgJyVzJyBzdHJhdGVneS4iLCB3dF9zdHJhdGVneSk7CiAJZmluaXNoKGhlYWQsIHJlbW90ZWhlYWRzLCAmcmVzdWx0X2NvbW1pdCwgYnVmLmJ1Zik7CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Ci0JZHJvcF9zYXZlKCk7CisJcmVtb3ZlX21lcmdlX2JyYW5jaF9zdGF0ZSh0aGVfcmVwb3NpdG9yeSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyODksNiArMTI4NiwxNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJaWYgKHF1aXRfY3VycmVudF9tZXJnZSkgeworCQlpZiAob3JpZ19hcmdjICE9IDIpCisJCQl1c2FnZV9tc2dfb3B0KF8oIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIpLAorCQkJCSAgICAgIGJ1aWx0aW5fbWVyZ2VfdXNhZ2UsCisJCQkJICAgICAgYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCQlyZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKKwkJZ290byBkb25lOworCX0KKwogCWlmIChjb250aW51ZV9jdXJyZW50X21lcmdlKSB7CiAJCWludCBuYXJnYyA9IDE7CiAJCWNvbnN0IGNoYXIgKm5hcmd2W10gPSB7ImNvbW1pdCIsIE5VTEx9OwpAQCAtMTUwNSw3ICsxNTEyLDcgQEAKIAkJfQogCiAJCWZpbmlzaChoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMsICZjb21taXQtPm9iamVjdC5vaWQsIG1zZy5idWYpOwotCQlkcm9wX3NhdmUoKTsKKwkJcmVtb3ZlX21lcmdlX2JyYW5jaF9zdGF0ZSh0aGVfcmVwb3NpdG9yeSk7CiAJCWdvdG8gZG9uZTsKIAl9IGVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCAmJiBjb21tb24tPm5leHQpCiAJCTsKQEAgLTE1ODAsOCArMTU4Nyw4IEBACiAJICAgIHNhdmVfc3RhdGUoJnN0YXNoKSkKIAkJb2lkY2xyKCZzdGFzaCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgdXNlX3N0cmF0ZWdpZXNfbnI7IGkrKykgewotCQlpbnQgcmV0OworCWZvciAoaSA9IDA7ICFtZXJnZV93YXNfb2sgJiYgaSA8IHVzZV9zdHJhdGVnaWVzX25yOyBpKyspIHsKKwkJaW50IHJldCwgY250OwogCQlpZiAoaSkgewogCQkJcHJpbnRmKF8oIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIikpOwogCQkJcmVzdG9yZV9zdGF0ZSgmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsICZzdGFzaCk7CkBAIC0xNTk4LDQwICsxNjA1LDI2IEBACiAJCXJldCA9IHRyeV9tZXJnZV9zdHJhdGVneSh1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZSwKIAkJCQkJIGNvbW1vbiwgcmVtb3RlaGVhZHMsCiAJCQkJCSBoZWFkX2NvbW1pdCk7Ci0JCWlmICghb3B0aW9uX2NvbW1pdCAmJiAhcmV0KSB7Ci0JCQltZXJnZV93YXNfb2sgPSAxOwotCQkJLyoKLQkJCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGhlcmUganVzdCB0byBhdm9pZCB3cml0aW5nCi0JCQkgKiB0aGUgdHJlZSwgYnV0IGxhdGVyIHdlIHdpbGwgKm5vdCogZXhpdCB3aXRoCi0JCQkgKiBzdGF0dXMgY29kZSAxIGJlY2F1c2UgbWVyZ2Vfd2FzX29rIGlzIHNldC4KLQkJCSAqLwotCQkJcmV0ID0gMTsKLQkJfQotCi0JCWlmIChyZXQpIHsKLQkJCS8qCi0JCQkgKiBUaGUgYmFja2VuZCBleGl0cyB3aXRoIDEgd2hlbiBjb25mbGljdHMgYXJlCi0JCQkgKiBsZWZ0IHRvIGJlIHJlc29sdmVkLCB3aXRoIDIgd2hlbiBpdCBkb2VzIG5vdAotCQkJICogaGFuZGxlIHRoZSBnaXZlbiBtZXJnZSBhdCBhbGwuCi0JCQkgKi8KLQkJCWlmIChyZXQgPT0gMSkgewotCQkJCWludCBjbnQgPSBldmFsdWF0ZV9yZXN1bHQoKTsKLQotCQkJCWlmIChiZXN0X2NudCA8PSAwIHx8IGNudCA8PSBiZXN0X2NudCkgewotCQkJCQliZXN0X3N0cmF0ZWd5ID0gdXNlX3N0cmF0ZWdpZXNbaV0tPm5hbWU7Ci0JCQkJCWJlc3RfY250ID0gY250OworCQkvKgorCQkgKiBUaGUgYmFja2VuZCBleGl0cyB3aXRoIDEgd2hlbiBjb25mbGljdHMgYXJlCisJCSAqIGxlZnQgdG8gYmUgcmVzb2x2ZWQsIHdpdGggMiB3aGVuIGl0IGRvZXMgbm90CisJCSAqIGhhbmRsZSB0aGUgZ2l2ZW4gbWVyZ2UgYXQgYWxsLgorCQkgKi8KKwkJaWYgKHJldCA8IDIpIHsKKwkJCWlmICghcmV0KSB7CisJCQkJaWYgKG9wdGlvbl9jb21taXQpIHsKKwkJCQkJLyogQXV0b21lcmdlIHN1Y2NlZWRlZC4gKi8KKwkJCQkJYXV0b21lcmdlX3dhc19vayA9IDE7CisJCQkJCWJyZWFrOwogCQkJCX0KKwkJCQltZXJnZV93YXNfb2sgPSAxOwogCQkJfQotCQkJaWYgKG1lcmdlX3dhc19vaykKLQkJCQlicmVhazsKLQkJCWVsc2UKLQkJCQljb250aW51ZTsKKwkJCWNudCA9IGV2YWx1YXRlX3Jlc3VsdCgpOworCQkJaWYgKGJlc3RfY250IDw9IDAgfHwgY250IDw9IGJlc3RfY250KSB7CisJCQkJYmVzdF9zdHJhdGVneSA9IHVzZV9zdHJhdGVnaWVzW2ldLT5uYW1lOworCQkJCWJlc3RfY250ID0gY250OworCQkJfQogCQl9Ci0KLQkJLyogQXV0b21lcmdlIHN1Y2NlZWRlZC4gKi8KLQkJd3JpdGVfdHJlZV90cml2aWFsKCZyZXN1bHRfdHJlZSk7Ci0JCWF1dG9tZXJnZV93YXNfb2sgPSAxOwotCQlicmVhazsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ta3RyZWUuYyBiL2J1aWx0aW4vbWt0cmVlLmMKaW5kZXggOTRlODJiOC4uODkxOTkxYiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9ta3RyZWUuYworKysgYi9idWlsdGluL21rdHJlZS5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJTlVMTAogfTsKIAotc3RhdGljIHZvaWQgbWt0cmVlX2xpbmUoY2hhciAqYnVmLCBzaXplX3QgbGVuLCBpbnQgbnVsX3Rlcm1fbGluZSwgaW50IGFsbG93X21pc3NpbmcpCitzdGF0aWMgdm9pZCBta3RyZWVfbGluZShjaGFyICpidWYsIGludCBudWxfdGVybV9saW5lLCBpbnQgYWxsb3dfbWlzc2luZykKIHsKIAljaGFyICpwdHIsICpudHI7CiAJY29uc3QgY2hhciAqcDsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQkJCQlicmVhazsKIAkJCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogKGJsYW5rIGxpbmUgb25seSB2YWxpZCBpbiBiYXRjaCBtb2RlKSIpOwogCQkJfQotCQkJbWt0cmVlX2xpbmUoc2IuYnVmLCBzYi5sZW4sIG51bF90ZXJtX2xpbmUsIGFsbG93X21pc3NpbmcpOworCQkJbWt0cmVlX2xpbmUoc2IuYnVmLCBudWxfdGVybV9saW5lLCBhbGxvd19taXNzaW5nKTsKIAkJfQogCQlpZiAoaXNfYmF0Y2hfbW9kZSAmJiBnb3RfZW9mICYmIHVzZWQgPCAxKSB7CiAJCQkvKgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmMgYi9idWlsdGluL211bHRpLXBhY2staW5kZXguYwppbmRleCA3MmRmZDNkLi5iMWVhMWE2IDEwMDY0NAotLS0gYS9idWlsdGluL211bHRpLXBhY2staW5kZXguYworKysgYi9idWlsdGluL211bHRpLXBhY2staW5kZXguYwpAQCAtNiwxMiArNiwxMyBAQAogI2luY2x1ZGUgInRyYWNlMi5oIgogCiBzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF91c2FnZVtdID0gewotCU5fKCJnaXQgbXVsdGktcGFjay1pbmRleCBbLS1vYmplY3QtZGlyPTxkaXI+XSAod3JpdGV8dmVyaWZ5KSIpLAorCU5fKCJnaXQgbXVsdGktcGFjay1pbmRleCBbLS1vYmplY3QtZGlyPTxkaXI+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC1zaXplPTxzaXplPikiKSwKIAlOVUxMCiB9OwogCiBzdGF0aWMgc3RydWN0IG9wdHNfbXVsdGlfcGFja19pbmRleCB7CiAJY29uc3QgY2hhciAqb2JqZWN0X2RpcjsKKwl1bnNpZ25lZCBsb25nIGJhdGNoX3NpemU7CiB9IG9wdHM7CiAKIGludCBjbWRfbXVsdGlfcGFja19pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCkBAIC0yMCw2ICsyMSw4IEBACiAJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X29wdGlvbnNbXSA9IHsKIAkJT1BUX0ZJTEVOQU1FKDAsICJvYmplY3QtZGlyIiwgJm9wdHMub2JqZWN0X2RpciwKIAkJICBOXygib2JqZWN0IGRpcmVjdG9yeSBjb250YWluaW5nIHNldCBvZiBwYWNrZmlsZSBhbmQgcGFjay1pbmRleCBwYWlycyIpKSwKKwkJT1BUX01BR05JVFVERSgwLCAiYmF0Y2gtc2l6ZSIsICZvcHRzLmJhdGNoX3NpemUsCisJCSAgTl8oImR1cmluZyByZXBhY2ssIGNvbGxlY3QgcGFjay1maWxlcyBvZiBzbWFsbGVyIHNpemUgaW50byBhIGJhdGNoIHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhpcyBzaXplIikpLAogCQlPUFRfRU5EKCksCiAJfTsKIApAQCAtNDMsMTAgKzQ2LDE3IEBACiAKIAl0cmFjZTJfY21kX21vZGUoYXJndlswXSk7CiAKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAicmVwYWNrIikpCisJCXJldHVybiBtaWR4X3JlcGFjayh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLCAoc2l6ZV90KW9wdHMuYmF0Y2hfc2l6ZSk7CisJaWYgKG9wdHMuYmF0Y2hfc2l6ZSkKKwkJZGllKF8oIi0tYmF0Y2gtc2l6ZSBvcHRpb24gaXMgb25seSBmb3IgJ3JlcGFjaycgc3ViY29tbWFuZCIpKTsKKwogCWlmICghc3RyY21wKGFyZ3ZbMF0sICJ3cml0ZSIpKQogCQlyZXR1cm4gd3JpdGVfbWlkeF9maWxlKG9wdHMub2JqZWN0X2Rpcik7CiAJaWYgKCFzdHJjbXAoYXJndlswXSwgInZlcmlmeSIpKQogCQlyZXR1cm4gdmVyaWZ5X21pZHhfZmlsZSh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyKTsKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAiZXhwaXJlIikpCisJCXJldHVybiBleHBpcmVfbWlkeF9wYWNrcyh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyKTsKIAotCWRpZShfKCJ1bnJlY29nbml6ZWQgdmVyYjogJXMiKSwgYXJndlswXSk7CisJZGllKF8oInVucmVjb2duaXplZCBzdWJjb21tYW5kOiAlcyIpLCBhcmd2WzBdKTsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbmFtZS1yZXYuYyBiL2J1aWx0aW4vbmFtZS1yZXYuYwppbmRleCAwNWNjZjUzLi5jNzg1ZmUxIDEwMDY0NAotLS0gYS9idWlsdGluL25hbWUtcmV2LmMKKysrIGIvYnVpbHRpbi9uYW1lLXJldi5jCkBAIC00MCw5ICs0MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaXNfYmV0dGVyX25hbWUoc3RydWN0IHJldl9uYW1lICpuYW1lLAotCQkJICBjb25zdCBjaGFyICp0aXBfbmFtZSwKIAkJCSAgdGltZXN0YW1wX3QgdGFnZ2VyZGF0ZSwKLQkJCSAgaW50IGdlbmVyYXRpb24sCiAJCQkgIGludCBkaXN0YW5jZSwKIAkJCSAgaW50IGZyb21fdGFnKQogewpAQCAtMTAzLDggKzEwMSw3IEBACiAJCW5hbWUgPSB4bWFsbG9jKHNpemVvZihyZXZfbmFtZSkpOwogCQlzZXRfY29tbWl0X3Jldl9uYW1lKGNvbW1pdCwgbmFtZSk7CiAJCWdvdG8gY29weV9kYXRhOwotCX0gZWxzZSBpZiAoaXNfYmV0dGVyX25hbWUobmFtZSwgdGlwX25hbWUsIHRhZ2dlcmRhdGUsCi0JCQkJICBnZW5lcmF0aW9uLCBkaXN0YW5jZSwgZnJvbV90YWcpKSB7CisJfSBlbHNlIGlmIChpc19iZXR0ZXJfbmFtZShuYW1lLCB0YWdnZXJkYXRlLCBkaXN0YW5jZSwgZnJvbV90YWcpKSB7CiBjb3B5X2RhdGE6CiAJCW5hbWUtPnRpcF9uYW1lID0gdGlwX25hbWU7CiAJCW5hbWUtPnRhZ2dlcmRhdGUgPSB0YWdnZXJkYXRlOwpAQCAtMzgxLDggKzM3OCw3IEBACiAJCQkqKHArMSkgPSAwOwogCQkJaWYgKCFnZXRfb2lkKHAgLSAoaGV4c3ogLSAxKSwgJm9pZCkpIHsKIAkJCQlzdHJ1Y3Qgb2JqZWN0ICpvID0KLQkJCQkJbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwKLQkJCQkJCSAgICAgIG9pZC5oYXNoKTsKKwkJCQkJbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CiAJCQkJaWYgKG8pCiAJCQkJCW5hbWUgPSBnZXRfcmV2X25hbWUobywgJmJ1Zik7CiAJCQl9CmRpZmYgLS1naXQgYS9idWlsdGluL3BhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi9wYWNrLW9iamVjdHMuYwppbmRleCA0MWQ3ZmM1Li43NmNlOTA2IDEwMDY0NAotLS0gYS9idWlsdGluL3BhY2stb2JqZWN0cy5jCisrKyBiL2J1aWx0aW4vcGFjay1vYmplY3RzLmMKQEAgLTk2LDcgKzk2LDExIEBACiAKIHN0YXRpYyBpbnQgdXNlX2JpdG1hcF9pbmRleF9kZWZhdWx0ID0gMTsKIHN0YXRpYyBpbnQgdXNlX2JpdG1hcF9pbmRleCA9IC0xOwotc3RhdGljIGludCB3cml0ZV9iaXRtYXBfaW5kZXg7CitzdGF0aWMgZW51bSB7CisJV1JJVEVfQklUTUFQX0ZBTFNFID0gMCwKKwlXUklURV9CSVRNQVBfUVVJRVQsCisJV1JJVEVfQklUTUFQX1RSVUUsCit9IHdyaXRlX2JpdG1hcF9pbmRleDsKIHN0YXRpYyB1aW50MTZfdCB3cml0ZV9iaXRtYXBfb3B0aW9ucyA9IEJJVE1BUF9PUFRfSEFTSF9DQUNIRTsKIAogc3RhdGljIGludCBleGNsdWRlX3Byb21pc29yX29iamVjdHM7CkBAIC02MDYsMTIgKzYxMCwxMiBAQAogCQkgICAgICAgdm9pZCAqY2JfZGF0YSkKIHsKIAlzdHJ1Y3Qgb2JqZWN0X2lkIHBlZWxlZDsKLQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9IHBhY2tsaXN0X2ZpbmQoJnRvX3BhY2ssIG9pZC0+aGFzaCwgTlVMTCk7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkgPSBwYWNrbGlzdF9maW5kKCZ0b19wYWNrLCBvaWQsIE5VTEwpOwogCiAJaWYgKGVudHJ5KQogCQllbnRyeS0+dGFnZ2VkID0gMTsKIAlpZiAoIXBlZWxfcmVmKHBhdGgsICZwZWVsZWQpKSB7Ci0JCWVudHJ5ID0gcGFja2xpc3RfZmluZCgmdG9fcGFjaywgcGVlbGVkLmhhc2gsIE5VTEwpOworCQllbnRyeSA9IHBhY2tsaXN0X2ZpbmQoJnRvX3BhY2ssICZwZWVsZWQsIE5VTEwpOwogCQlpZiAoZW50cnkpCiAJCQllbnRyeS0+dGFnZ2VkID0gMTsKIAl9CkBAIC04OTIsNyArODk2LDggQEAKIAkJCQkJCSBucl93cml0dGVuLCBvaWQuaGFzaCwgb2Zmc2V0KTsKIAkJCWNsb3NlKGZkKTsKIAkJCWlmICh3cml0ZV9iaXRtYXBfaW5kZXgpIHsKLQkJCQl3YXJuaW5nKF8obm9fc3BsaXRfd2FybmluZykpOworCQkJCWlmICh3cml0ZV9iaXRtYXBfaW5kZXggIT0gV1JJVEVfQklUTUFQX1FVSUVUKQorCQkJCQl3YXJuaW5nKF8obm9fc3BsaXRfd2FybmluZykpOwogCQkJCXdyaXRlX2JpdG1hcF9pbmRleCA9IDA7CiAJCQl9CiAJCX0KQEAgLTk5Niw3ICsxMDAxLDcgQEAKIHsKIAlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeTsKIAotCWVudHJ5ID0gcGFja2xpc3RfZmluZCgmdG9fcGFjaywgb2lkLT5oYXNoLCBpbmRleF9wb3MpOworCWVudHJ5ID0gcGFja2xpc3RfZmluZCgmdG9fcGFjaywgb2lkLCBpbmRleF9wb3MpOwogCWlmICghZW50cnkpCiAJCXJldHVybiAwOwogCkBAIC0xMTc2LDcgKzExODEsOCBAQAogCWlmICghd2FudF9vYmplY3RfaW5fcGFjayhvaWQsIGV4Y2x1ZGUsICZmb3VuZF9wYWNrLCAmZm91bmRfb2Zmc2V0KSkgewogCQkvKiBUaGUgcGFjayBpcyBtaXNzaW5nIGFuIG9iamVjdCwgc28gaXQgd2lsbCBub3QgaGF2ZSBjbG9zdXJlICovCiAJCWlmICh3cml0ZV9iaXRtYXBfaW5kZXgpIHsKLQkJCXdhcm5pbmcoXyhub19jbG9zdXJlX3dhcm5pbmcpKTsKKwkJCWlmICh3cml0ZV9iaXRtYXBfaW5kZXggIT0gV1JJVEVfQklUTUFQX1FVSUVUKQorCQkJCXdhcm5pbmcoXyhub19jbG9zdXJlX3dhcm5pbmcpKTsKIAkJCXdyaXRlX2JpdG1hcF9pbmRleCA9IDA7CiAJCX0KIAkJcmV0dXJuIDA7CkBAIC0xNDI4LDcgKzE0MzQsOCBAQAogCWlmICh3aW5kb3cgPD0gbnVtX3ByZWZlcnJlZF9iYXNlKyspCiAJCXJldHVybjsKIAotCWRhdGEgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShvaWQsIHRyZWVfdHlwZSwgJnNpemUsICZ0cmVlX29pZCk7CisJZGF0YSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBvaWQsCisJCQkJCSAgdHJlZV90eXBlLCAmc2l6ZSwgJnRyZWVfb2lkKTsKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKIApAQCAtMTQ5NCwxMSArMTUwMSwxMyBAQAogCWlmICghYmFzZV9zaGExKQogCQlyZXR1cm4gMDsKIAorCW9pZHJlYWQoJmJhc2Vfb2lkLCBiYXNlX3NoYTEpOworCiAJLyoKIAkgKiBGaXJzdCBzZWUgaWYgd2UncmUgYWxyZWFkeSBzZW5kaW5nIHRoZSBiYXNlIChvciBpdCdzIGV4cGxpY2l0bHkgaW4KIAkgKiBvdXIgImV4Y2x1ZGVkIiBsaXN0KS4KIAkgKi8KLQliYXNlID0gcGFja2xpc3RfZmluZCgmdG9fcGFjaywgYmFzZV9zaGExLCBOVUxMKTsKKwliYXNlID0gcGFja2xpc3RfZmluZCgmdG9fcGFjaywgJmJhc2Vfb2lkLCBOVUxMKTsKIAlpZiAoYmFzZSkgewogCQlpZiAoIWluX3NhbWVfaXNsYW5kKCZkZWx0YS0+aWR4Lm9pZCwgJmJhc2UtPmlkeC5vaWQpKQogCQkJcmV0dXJuIDA7CkBAIC0xNTExLDcgKzE1MjAsNiBAQAogCSAqIGV2ZW4gaWYgaXQgd2FzIGJ1cmllZCB0b28gZGVlcCBpbiBoaXN0b3J5IHRvIG1ha2UgaXQgaW50byB0aGUKIAkgKiBwYWNraW5nIGxpc3QuCiAJICovCi0Jb2lkcmVhZCgmYmFzZV9vaWQsIGJhc2Vfc2hhMSk7CiAJaWYgKHRoaW4gJiYgYml0bWFwX2hhc19vaWRfaW5fdW5pbnRlcmVzdGluZyhiaXRtYXBfZ2l0LCAmYmFzZV9vaWQpKSB7CiAJCWlmICh1c2VfZGVsdGFfaXNsYW5kcykgewogCQkJaWYgKCFpbl9zYW1lX2lzbGFuZCgmZGVsdGEtPmlkeC5vaWQsICZiYXNlX29pZCkpCkBAIC0yNTcxLDcgKzI1NzksNyBAQAogCSAqIGl0IHdhcyBpbmNsdWRlZCB2aWEgYml0bWFwcywgd2Ugd291bGQgbm90IGhhdmUgcGFyc2VkIGl0CiAJICogcHJldmlvdXNseSkuCiAJICovCi0JaWYgKHBhY2tsaXN0X2ZpbmQoJnRvX3BhY2ssIG9pZC0+aGFzaCwgTlVMTCkpCisJaWYgKHBhY2tsaXN0X2ZpbmQoJnRvX3BhY2ssIG9pZCwgTlVMTCkpCiAJCXJldHVybjsKIAogCXRhZyA9IGxvb2t1cF90YWcodGhlX3JlcG9zaXRvcnksIG9pZCk7CkBAIC0yNTk1LDcgKzI2MDMsNyBAQAogCiAJaWYgKHN0YXJ0c193aXRoKHBhdGgsICJyZWZzL3RhZ3MvIikgJiYgLyogaXMgYSB0YWc/ICovCiAJICAgICFwZWVsX3JlZihwYXRoLCAmcGVlbGVkKSAgICAmJiAvKiBwZWVsYWJsZT8gKi8KLQkgICAgcGFja2xpc3RfZmluZCgmdG9fcGFjaywgcGVlbGVkLmhhc2gsIE5VTEwpKSAgICAgIC8qIG9iamVjdCBwYWNrZWQ/ICovCisJICAgIHBhY2tsaXN0X2ZpbmQoJnRvX3BhY2ssICZwZWVsZWQsIE5VTEwpKSAgICAgIC8qIG9iamVjdCBwYWNrZWQ/ICovCiAJCWFkZF90YWdfY2hhaW4ob2lkKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI3OTUsNyArMjgwMyw3IEBACiAJCWZvciAocCA9IHN0cmNocihuYW1lLCAnLycpOyBwOyBwID0gc3RyY2hyKHAgKyAxLCAnLycpKQogCQkJZGVwdGgrKzsKIAotCQllbnQgPSBwYWNrbGlzdF9maW5kKCZ0b19wYWNrLCBvYmotPm9pZC5oYXNoLCBOVUxMKTsKKwkJZW50ID0gcGFja2xpc3RfZmluZCgmdG9fcGFjaywgJm9iai0+b2lkLCBOVUxMKTsKIAkJaWYgKGVudCAmJiBkZXB0aCA+IG9lX3RyZWVfZGVwdGgoJnRvX3BhY2ssIGVudCkpCiAJCQlvZV9zZXRfdHJlZV9kZXB0aCgmdG9fcGFjaywgZW50LCBkZXB0aCk7CiAJfQpAQCAtMjg5OSw3ICsyOTA3LDcgQEAKIAkJcmV0dXJuIG9pZGNtcCgmYS0+b2JqZWN0LT5vaWQsICZiLT5vYmplY3QtPm9pZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9vYmplY3RzX2luX3VucGFja2VkX3BhY2tzKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3N0YXRpYyB2b2lkIGFkZF9vYmplY3RzX2luX3VucGFja2VkX3BhY2tzKHZvaWQpCiB7CiAJc3RydWN0IHBhY2tlZF9naXQgKnA7CiAJc3RydWN0IGluX3BhY2sgaW5fcGFjazsKQEAgLTI5MjIsNyArMjkzMCw3IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IHAtPm51bV9vYmplY3RzOyBpKyspIHsKIAkJCW50aF9wYWNrZWRfb2JqZWN0X29pZCgmb2lkLCBwLCBpKTsKLQkJCW8gPSBsb29rdXBfdW5rbm93bl9vYmplY3Qob2lkLmhhc2gpOworCQkJbyA9IGxvb2t1cF91bmtub3duX29iamVjdCgmb2lkKTsKIAkJCWlmICghKG8tPmZsYWdzICYgT0JKRUNUX0FEREVEKSkKIAkJCQltYXJrX2luX3BhY2tfb2JqZWN0KG8sIHAsICZpbl9wYWNrKTsKIAkJCW8tPmZsYWdzIHw9IE9CSkVDVF9BRERFRDsKQEAgLTMwMTEsNyArMzAxOSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGxvb3Nlbl91bnVzZWRfcGFja2VkX29iamVjdHMoc3RydWN0IHJldl9pbmZvICpyZXZzKQorc3RhdGljIHZvaWQgbG9vc2VuX3VudXNlZF9wYWNrZWRfb2JqZWN0cyh2b2lkKQogewogCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOwogCXVpbnQzMl90IGk7CkBAIC0zMDI2LDcgKzMwMzQsNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fb2JqZWN0czsgaSsrKSB7CiAJCQludGhfcGFja2VkX29iamVjdF9vaWQoJm9pZCwgcCwgaSk7Ci0JCQlpZiAoIXBhY2tsaXN0X2ZpbmQoJnRvX3BhY2ssIG9pZC5oYXNoLCBOVUxMKSAmJgorCQkJaWYgKCFwYWNrbGlzdF9maW5kKCZ0b19wYWNrLCAmb2lkLCBOVUxMKSAmJgogCQkJICAgICFoYXNfc2hhMV9wYWNrX2tlcHRfb3Jfbm9ubG9jYWwoJm9pZCkgJiYKIAkJCSAgICAhbG9vc2VuZWRfb2JqZWN0X2Nhbl9iZV9kaXNjYXJkZWQoJm9pZCwgcC0+bXRpbWUpKQogCQkJCWlmIChmb3JjZV9vYmplY3RfbG9vc2UoJm9pZCwgcC0+bXRpbWUpKQpAQCAtMzEzNCw3ICszMTQyLDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHVzZV9kZWx0YV9pc2xhbmRzKQotCQlsb2FkX2RlbHRhX2lzbGFuZHModGhlX3JlcG9zaXRvcnkpOworCQlsb2FkX2RlbHRhX2lzbGFuZHModGhlX3JlcG9zaXRvcnksIHByb2dyZXNzKTsKIAogCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQogCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CkBAIC0zMTU4LDExICszMTY2LDExIEBACiAJfQogCiAJaWYgKGtlZXBfdW5yZWFjaGFibGUpCi0JCWFkZF9vYmplY3RzX2luX3VucGFja2VkX3BhY2tzKCZyZXZzKTsKKwkJYWRkX29iamVjdHNfaW5fdW5wYWNrZWRfcGFja3MoKTsKIAlpZiAocGFja19sb29zZV91bnJlYWNoYWJsZSkKIAkJYWRkX3VucmVhY2hhYmxlX2xvb3NlX29iamVjdHMoKTsKIAlpZiAodW5wYWNrX3VucmVhY2hhYmxlKQotCQlsb29zZW5fdW51c2VkX3BhY2tlZF9vYmplY3RzKCZyZXZzKTsKKwkJbG9vc2VuX3VudXNlZF9wYWNrZWRfb2JqZWN0cygpOwogCiAJb2lkX2FycmF5X2NsZWFyKCZyZWNlbnRfb2JqZWN0cyk7CiB9CkBAIC0zMzExLDggKzMzMTksMTMgQEAKIAkJCSAgICBOXygiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiKSwgMCksCiAJCU9QVF9CT09MKDAsICJ1c2UtYml0bWFwLWluZGV4IiwgJnVzZV9iaXRtYXBfaW5kZXgsCiAJCQkgTl8oInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIpKSwKLQkJT1BUX0JPT0woMCwgIndyaXRlLWJpdG1hcC1pbmRleCIsICZ3cml0ZV9iaXRtYXBfaW5kZXgsCi0JCQkgTl8oIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiKSksCisJCU9QVF9TRVRfSU5UKDAsICJ3cml0ZS1iaXRtYXAtaW5kZXgiLCAmd3JpdGVfYml0bWFwX2luZGV4LAorCQkJICAgIE5fKCJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IiksCisJCQkgICAgV1JJVEVfQklUTUFQX1RSVUUpLAorCQlPUFRfU0VUX0lOVF9GKDAsICJ3cml0ZS1iaXRtYXAtaW5kZXgtcXVpZXQiLAorCQkJICAgICAgJndyaXRlX2JpdG1hcF9pbmRleCwKKwkJCSAgICAgIE5fKCJ3cml0ZSBhIGJpdG1hcCBpbmRleCBpZiBwb3NzaWJsZSIpLAorCQkJICAgICAgV1JJVEVfQklUTUFQX1FVSUVULCBQQVJTRV9PUFRfSElEREVOKSwKIAkJT1BUX1BBUlNFX0xJU1RfT0JKRUNUU19GSUxURVIoJmZpbHRlcl9vcHRpb25zKSwKIAkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJtaXNzaW5nIiwgTlVMTCwgTl8oImFjdGlvbiIpLAogCQkgIE5fKCJoYW5kbGluZyBmb3IgbWlzc2luZyBvYmplY3RzIiksIFBBUlNFX09QVF9OT05FRywKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcGF0Y2gtaWQuYyBiL2J1aWx0aW4vcGF0Y2gtaWQuYwppbmRleCA5NzBkMGQzLi5iZDI4YjgwIDEwMDY0NAotLS0gYS9idWlsdGluL3BhdGNoLWlkLmMKKysrIGIvYnVpbHRpbi9wYXRjaC1pZC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgImJ1aWx0aW4uaCIKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCiAKIHN0YXRpYyB2b2lkIGZsdXNoX2N1cnJlbnRfaWQoaW50IHBhdGNobGVuLCBzdHJ1Y3Qgb2JqZWN0X2lkICppZCwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0KQogewpAQCAtNTQsMjIgKzU1LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgZmx1c2hfb25lX2h1bmsoc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LCBnaXRfU0hBX0NUWCAqY3R4KQotewotCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXTsKLQl1bnNpZ25lZCBzaG9ydCBjYXJyeSA9IDA7Ci0JaW50IGk7Ci0KLQlnaXRfU0hBMV9GaW5hbChoYXNoLCBjdHgpOwotCWdpdF9TSEExX0luaXQoY3R4KTsKLQkvKiAyMC1ieXRlIHN1bSwgd2l0aCBjYXJyeSAqLwotCWZvciAoaSA9IDA7IGkgPCBHSVRfU0hBMV9SQVdTWjsgKytpKSB7Ci0JCWNhcnJ5ICs9IHJlc3VsdC0+aGFzaFtpXSArIGhhc2hbaV07Ci0JCXJlc3VsdC0+aGFzaFtpXSA9IGNhcnJ5OwotCQljYXJyeSA+Pj0gODsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgZ2V0X29uZV9wYXRjaGlkKHN0cnVjdCBvYmplY3RfaWQgKm5leHRfb2lkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQsCiAJCQkgICBzdHJ1Y3Qgc3RyYnVmICpsaW5lX2J1ZiwgaW50IHN0YWJsZSkKIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcHJ1bmUuYyBiL2J1aWx0aW4vcHJ1bmUuYwppbmRleCA5NzYxM2VjLi4yYjc2ODcyIDEwMDY0NAotLS0gYS9idWlsdGluL3BydW5lLmMKKysrIGIvYnVpbHRpbi9wcnVuZS5jCkBAIC01Myw3ICs1Myw3IEBACiAKIAlwZXJmb3JtX3JlYWNoYWJpbGl0eV90cmF2ZXJzYWwocmV2cyk7CiAKLQlvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQtPmhhc2gpOworCW9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CiAJcmV0dXJuIG9iaiAmJiAob2JqLT5mbGFncyAmIFNFRU4pOwogfQogCmRpZmYgLS1naXQgYS9idWlsdGluL3B1bGwuYyBiL2J1aWx0aW4vcHVsbC5jCmluZGV4IDlkZDMyYTEuLmYxZWFmNmUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcHVsbC5jCisrKyBiL2J1aWx0aW4vcHVsbC5jCkBAIC0xMjgsNiArMTI4LDcgQEAKIHN0YXRpYyBjaGFyICpvcHRfcmVmbWFwOwogc3RhdGljIGNoYXIgKm9wdF9pcHY0Owogc3RhdGljIGNoYXIgKm9wdF9pcHY2Oworc3RhdGljIGludCBvcHRfc2hvd19mb3JjZWRfdXBkYXRlcyA9IC0xOwogCiBzdGF0aWMgc3RydWN0IG9wdGlvbiBwdWxsX29wdGlvbnNbXSA9IHsKIAkvKiBTaGFyZWQgb3B0aW9ucyAqLwpAQCAtMjQwLDYgKzI0MSw4IEBACiAJT1BUX1BBU1NUSFJVKCc2JywgICJpcHY2IiwgJm9wdF9pcHY2LCBOVUxMLAogCQlOXygidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiKSwKIAkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfQk9PTCgwLCAic2hvdy1mb3JjZWQtdXBkYXRlcyIsICZvcHRfc2hvd19mb3JjZWRfdXBkYXRlcywKKwkJIE5fKCJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiKSksCiAKIAlPUFRfRU5EKCkKIH07CkBAIC01NDksNiArNTUyLDEwIEBACiAJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2lwdjQpOwogCWlmIChvcHRfaXB2NikKIAkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfaXB2Nik7CisJaWYgKG9wdF9zaG93X2ZvcmNlZF91cGRhdGVzID4gMCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1zaG93LWZvcmNlZC11cGRhdGVzIik7CisJZWxzZSBpZiAob3B0X3Nob3dfZm9yY2VkX3VwZGF0ZXMgPT0gMCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1uby1zaG93LWZvcmNlZC11cGRhdGVzIik7CiAKIAlpZiAocmVwbykgewogCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIHJlcG8pOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yYW5nZS1kaWZmLmMgYi9idWlsdGluL3JhbmdlLWRpZmYuYwppbmRleCA3ODRiZDE5Li45MjAyZTc1IDEwMDY0NAotLS0gYS9idWlsdGluL3JhbmdlLWRpZmYuYworKysgYi9idWlsdGluL3JhbmdlLWRpZmYuYwpAQCAtMzIsNyArMzIsNyBAQAogCXJlcG9fZGlmZl9zZXR1cCh0aGVfcmVwb3NpdG9yeSwgJmRpZmZvcHQpOwogCiAJb3B0aW9ucyA9IHBhcnNlX29wdGlvbnNfY29uY2F0KHJhbmdlX2RpZmZfb3B0aW9ucywgZGlmZm9wdC5wYXJzZW9wdHMpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAogCQkJICAgICBidWlsdGluX3JhbmdlX2RpZmZfdXNhZ2UsIDApOwogCiAJZGlmZl9zZXR1cF9kb25lKCZkaWZmb3B0KTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVhZC10cmVlLmMgYi9idWlsdGluL3JlYWQtdHJlZS5jCmluZGV4IDVjOWMwODIuLmNhNWU2NTUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmVhZC10cmVlLmMKKysrIGIvYnVpbHRpbi9yZWFkLXRyZWUuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKLWludCBjbWRfcmVhZF90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqdW51c2VkX3ByZWZpeCkKK2ludCBjbWRfcmVhZF90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqY21kX3ByZWZpeCkKIHsKIAlpbnQgaSwgc3RhZ2UgPSAwOwogCXN0cnVjdCBvYmplY3RfaWQgb2lkOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAKIAlnaXRfY29uZmlnKGdpdF9yZWFkX3RyZWVfY29uZmlnLCBOVUxMKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHVudXNlZF9wcmVmaXgsIHJlYWRfdHJlZV9vcHRpb25zLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGNtZF9wcmVmaXgsIHJlYWRfdHJlZV9vcHRpb25zLAogCQkJICAgICByZWFkX3RyZWVfdXNhZ2UsIDApOwogCiAJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgTE9DS19ESUVfT05fRVJST1IpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZWJhc2UuYyBiL2J1aWx0aW4vcmViYXNlLmMKaW5kZXggZGI2Y2E5Yi4uNjcwMDk2YyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yZWJhc2UuYworKysgYi9idWlsdGluL3JlYmFzZS5jCkBAIC01MDgsNyArNTA4LDcgQEAKIAlpZiAoYXJnYyA9PSAxKQogCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZWJhc2VfaW50ZXJhY3RpdmVfdXNhZ2UsIG9wdGlvbnMpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCiAJCQlidWlsdGluX3JlYmFzZV9pbnRlcmFjdGl2ZV91c2FnZSwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOwogCiAJaWYgKCFpc19udWxsX29pZCgmc3F1YXNoX29udG8pKQpAQCAtNzM4LDIwICs3MzgsMzAgQEAKIHsKIAlzdHJ1Y3Qgc3RyYnVmIGRpciA9IFNUUkJVRl9JTklUOwogCWNvbnN0IGNoYXIgKmFyZ3ZfZ2NfYXV0b1tdID0geyAiZ2MiLCAiLS1hdXRvIiwgTlVMTCB9OworCWludCByZXQgPSAwOwogCiAJZGVsZXRlX3JlZihOVUxMLCAiUkVCQVNFX0hFQUQiLCBOVUxMLCBSRUZfTk9fREVSRUYpOwogCWFwcGx5X2F1dG9zdGFzaChvcHRzKTsKLQljbG9zZV9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnktPm9iamVjdHMpOworCWNsb3NlX29iamVjdF9zdG9yZSh0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cyk7CiAJLyoKIAkgKiBXZSBpZ25vcmUgZXJyb3JzIGluICdnYyAtLWF1dG8nLCBzaW5jZSB0aGUKIAkgKiB1c2VyIHNob3VsZCBzZWUgdGhlbS4KIAkgKi8KIAlydW5fY29tbWFuZF92X29wdChhcmd2X2djX2F1dG8sIFJVTl9HSVRfQ01EKTsKLQlzdHJidWZfYWRkc3RyKCZkaXIsIG9wdHMtPnN0YXRlX2Rpcik7Ci0JcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmZGlyLCAwKTsKLQlzdHJidWZfcmVsZWFzZSgmZGlyKTsKKwlpZiAob3B0cy0+dHlwZSA9PSBSRUJBU0VfSU5URVJBQ1RJVkUpIHsKKwkJc3RydWN0IHJlcGxheV9vcHRzIHJlcGxheSA9IFJFUExBWV9PUFRTX0lOSVQ7CiAKLQlyZXR1cm4gMDsKKwkJcmVwbGF5LmFjdGlvbiA9IFJFUExBWV9JTlRFUkFDVElWRV9SRUJBU0U7CisJCXJldCA9IHNlcXVlbmNlcl9yZW1vdmVfc3RhdGUoJnJlcGxheSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cigmZGlyLCBvcHRzLT5zdGF0ZV9kaXIpOworCQlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmZGlyLCAwKSkKKwkJCXJldCA9IGVycm9yKF8oImNvdWxkIG5vdCByZW1vdmUgJyVzJyIpLAorCQkJCSAgICBvcHRzLT5zdGF0ZV9kaXIpOworCQlzdHJidWZfcmVsZWFzZSgmZGlyKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IGNvbW1pdCAqcGVlbF9jb21taXR0aXNoKGNvbnN0IGNoYXIgKm5hbWUpCkBAIC04NDAsMTMgKzg1MCwxMyBAQAogCQlnb3RvIGxlYXZlX3Jlc2V0X2hlYWQ7CiAJfQogCi0JaWYgKCFyZXNldF9oYXJkICYmICFmaWxsX3RyZWVfZGVzY3JpcHRvcigmZGVzY1tucisrXSwgJmhlYWRfb2lkKSkgeworCWlmICghcmVzZXRfaGFyZCAmJiAhZmlsbF90cmVlX2Rlc2NyaXB0b3IodGhlX3JlcG9zaXRvcnksICZkZXNjW25yKytdLCAmaGVhZF9vaWQpKSB7CiAJCXJldCA9IGVycm9yKF8oImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiKSwKIAkJCSAgICBvaWRfdG9faGV4KCZoZWFkX29pZCkpOwogCQlnb3RvIGxlYXZlX3Jlc2V0X2hlYWQ7CiAJfQogCi0JaWYgKCFmaWxsX3RyZWVfZGVzY3JpcHRvcigmZGVzY1tucisrXSwgb2lkKSkgeworCWlmICghZmlsbF90cmVlX2Rlc2NyaXB0b3IodGhlX3JlcG9zaXRvcnksICZkZXNjW25yKytdLCBvaWQpKSB7CiAJCXJldCA9IGVycm9yKF8oImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiKSwgb2lkX3RvX2hleChvaWQpKTsKIAkJZ290byBsZWF2ZV9yZXNldF9oZWFkOwogCX0KQEAgLTExNTMsMTAgKzExNjMsNiBAQAogCX0KIAogCXN3aXRjaCAob3B0cy0+dHlwZSkgewotCWNhc2UgUkVCQVNFX0FNOgotCQliYWNrZW5kID0gImdpdC1yZWJhc2UtLWFtIjsKLQkJYmFja2VuZF9mdW5jID0gImdpdF9yZWJhc2VfX2FtIjsKLQkJYnJlYWs7CiAJY2FzZSBSRUJBU0VfUFJFU0VSVkVfTUVSR0VTOgogCQliYWNrZW5kID0gImdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcyI7CiAJCWJhY2tlbmRfZnVuYyA9ICJnaXRfcmViYXNlX19wcmVzZXJ2ZV9tZXJnZXMiOwpAQCAtMTE2Nyw4ICsxMTczLDcgQEAKIAl9CiAKIAlzdHJidWZfYWRkZigmc2NyaXB0X3NuaXBwZXQsCi0JCSAgICAiLiBnaXQtc2gtc2V0dXAgJiYgLiBnaXQtcmViYXNlLS1jb21tb24gJiYiCi0JCSAgICAiIC4gJXMgJiYgJXMiLCBiYWNrZW5kLCBiYWNrZW5kX2Z1bmMpOworCQkgICAgIi4gZ2l0LXNoLXNldHVwICYmIC4gJXMgJiYgJXMiLCBiYWNrZW5kLCBiYWNrZW5kX2Z1bmMpOwogCWFyZ3ZbMF0gPSBzY3JpcHRfc25pcHBldC5idWY7CiAKIAlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fVVNJTkdfU0hFTEwpOwpAQCAtMTM4NCw2ICsxMzg5LDcgQEAKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3RyYXRlZ3lfb3B0aW9ucyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CiAJc3RydWN0IG9iamVjdF9pZCBzcXVhc2hfb250bzsKIAljaGFyICpzcXVhc2hfb250b19uYW1lID0gTlVMTDsKKwlpbnQgcmVzY2hlZHVsZV9mYWlsZWRfZXhlYyA9IC0xOwogCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9yZWJhc2Vfb3B0aW9uc1tdID0gewogCQlPUFRfU1RSSU5HKDAsICJvbnRvIiwgJm9wdGlvbnMub250b19uYW1lLAogCQkJICAgTl8oInJldmlzaW9uIiksCkBAIC0xNDc2LDcgKzE0ODIsNyBAQAogCQlPUFRfQk9PTCgwLCAicm9vdCIsICZvcHRpb25zLnJvb3QsCiAJCQkgTl8oInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiKSksCiAJCU9QVF9CT09MKDAsICJyZXNjaGVkdWxlLWZhaWxlZC1leGVjIiwKLQkJCSAmb3B0aW9ucy5yZXNjaGVkdWxlX2ZhaWxlZF9leGVjLAorCQkJICZyZXNjaGVkdWxlX2ZhaWxlZF9leGVjLAogCQkJIE5fKCJhdXRvbWF0aWNhbGx5IHJlLXNjaGVkdWxlIGFueSBgZXhlY2AgdGhhdCBmYWlscyIpKSwKIAkJT1BUX0VORCgpLAogCX07CkBAIC0xNDg2LDEwICsxNDkyLDYgQEAKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmViYXNlX3VzYWdlLAogCQkJCSAgIGJ1aWx0aW5fcmViYXNlX29wdGlvbnMpOwogCi0JcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwotCXRyYWNlX3JlcG9fc2V0dXAocHJlZml4KTsKLQlzZXR1cF93b3JrX3RyZWUoKTsKLQogCW9wdGlvbnMuYWxsb3dfZW1wdHlfbWVzc2FnZSA9IDE7CiAJZ2l0X2NvbmZpZyhyZWJhc2VfY29uZmlnLCAmb3B0aW9ucyk7CiAKQEAgLTE2MDUsNyArMTYwNyw3IEBACiAJCWlmIChyZXNldF9oZWFkKE5VTEwsICJyZXNldCIsIE5VTEwsIFJFU0VUX0hFQURfSEFSRCwKIAkJCSAgICAgICBOVUxMLCBOVUxMKSA8IDApCiAJCQlkaWUoXygiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIpKTsKLQkJcmVtb3ZlX2JyYW5jaF9zdGF0ZSh0aGVfcmVwb3NpdG9yeSk7CisJCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnksIDApOwogCQlpZiAocmVhZF9iYXNpY19zdGF0ZSgmb3B0aW9ucykpCiAJCQlleGl0KDEpOwogCQlnb3RvIHJ1bl9yZWJhc2U7CkBAIC0xNjI1LDE2ICsxNjI3LDI0IEBACiAJCQkgICAgICAgTlVMTCwgTlVMTCkgPCAwKQogCQkJZGllKF8oImNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJXMiKSwKIAkJCSAgICBvaWRfdG9faGV4KCZvcHRpb25zLm9yaWdfaGVhZCkpOwotCQlyZW1vdmVfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKLQkJcmV0ID0gZmluaXNoX3JlYmFzZSgmb3B0aW9ucyk7CisJCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnksIDApOworCQlyZXQgPSAhIWZpbmlzaF9yZWJhc2UoJm9wdGlvbnMpOwogCQlnb3RvIGNsZWFudXA7CiAJfQogCWNhc2UgQUNUSU9OX1FVSVQ6IHsKLQkJc3RyYnVmX3Jlc2V0KCZidWYpOwotCQlzdHJidWZfYWRkc3RyKCZidWYsIG9wdGlvbnMuc3RhdGVfZGlyKTsKLQkJcmV0ID0gISFyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZidWYsIDApOwotCQlpZiAocmV0KQotCQkJZGllKF8oImNvdWxkIG5vdCByZW1vdmUgJyVzJyIpLCBvcHRpb25zLnN0YXRlX2Rpcik7CisJCWlmIChvcHRpb25zLnR5cGUgPT0gUkVCQVNFX0lOVEVSQUNUSVZFKSB7CisJCQlzdHJ1Y3QgcmVwbGF5X29wdHMgcmVwbGF5ID0gUkVQTEFZX09QVFNfSU5JVDsKKworCQkJcmVwbGF5LmFjdGlvbiA9IFJFUExBWV9JTlRFUkFDVElWRV9SRUJBU0U7CisJCQlyZXQgPSAhIXNlcXVlbmNlcl9yZW1vdmVfc3RhdGUoJnJlcGxheSk7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlzdHJidWZfYWRkc3RyKCZidWYsIG9wdGlvbnMuc3RhdGVfZGlyKTsKKwkJCXJldCA9ICEhcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmYnVmLCAwKTsKKwkJCWlmIChyZXQpCisJCQkJZXJyb3IoXygiY291bGQgbm90IHJlbW92ZSAnJXMnIiksCisJCQkJICAgICAgIG9wdGlvbnMuc3RhdGVfZGlyKTsKKwkJfQogCQlnb3RvIGNsZWFudXA7CiAJfQogCWNhc2UgQUNUSU9OX0VESVRfVE9ETzoKQEAgLTE3ODMsOCArMTc5MywxMSBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAob3B0aW9ucy5yZXNjaGVkdWxlX2ZhaWxlZF9leGVjICYmICFpc19pbnRlcmFjdGl2ZSgmb3B0aW9ucykpCi0JCWRpZShfKCIlcyByZXF1aXJlcyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiKSwgIi0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyIpOworCWlmIChyZXNjaGVkdWxlX2ZhaWxlZF9leGVjID4gMCAmJiAhaXNfaW50ZXJhY3RpdmUoJm9wdGlvbnMpKQorCQlkaWUoXygiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzICIKKwkJICAgICAgIi0tZXhlYyBvciAtLWludGVyYWN0aXZlIikpOworCWlmIChyZXNjaGVkdWxlX2ZhaWxlZF9leGVjID49IDApCisJCW9wdGlvbnMucmVzY2hlZHVsZV9mYWlsZWRfZXhlYyA9IHJlc2NoZWR1bGVfZmFpbGVkX2V4ZWM7CiAKIAlpZiAob3B0aW9ucy5naXRfYW1fb3B0cy5hcmdjKSB7CiAJCS8qIGFsbCBhbSBvcHRpb25zIGV4Y2VwdCAtcSBhcmUgY29tcGF0aWJsZSBvbmx5IHdpdGggLS1hbSAqLwpAQCAtMjEwOSw3ICsyMTIyLDcgQEAKIAlzdHJidWZfYWRkZigmbXNnLCAiJXM6IGNoZWNrb3V0ICVzIiwKIAkJICAgIGdldGVudihHSVRfUkVGTE9HX0FDVElPTl9FTlZJUk9OTUVOVCksIG9wdGlvbnMub250b19uYW1lKTsKIAlpZiAocmVzZXRfaGVhZCgmb3B0aW9ucy5vbnRvLT5vYmplY3Qub2lkLCAiY2hlY2tvdXQiLCBOVUxMLAotCQkgICAgICAgUkVTRVRfSEVBRF9ERVRBQ0ggfCBSRVNFVF9PUklHX0hFQUQgfCAKKwkJICAgICAgIFJFU0VUX0hFQURfREVUQUNIIHwgUkVTRVRfT1JJR19IRUFEIHwKIAkJICAgICAgIFJFU0VUX0hFQURfUlVOX1BPU1RfQ0hFQ0tPVVRfSE9PSywKIAkJICAgICAgIE5VTEwsIG1zZy5idWYpKQogCQlkaWUoXygiQ291bGQgbm90IGRldGFjaCBIRUFEIikpOwpAQCAtMjE0Niw2ICsyMTU5LDcgQEAKIAlyZXQgPSAhIXJ1bl9zcGVjaWZpY19yZWJhc2UoJm9wdGlvbnMsIGFjdGlvbik7CiAKIGNsZWFudXA6CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJc3RyYnVmX3JlbGVhc2UoJnJldmlzaW9ucyk7CiAJZnJlZShvcHRpb25zLmhlYWRfbmFtZSk7CiAJZnJlZShvcHRpb25zLmdwZ19zaWduX29wdCk7CmRpZmYgLS1naXQgYS9idWlsdGluL3JlY2VpdmUtcGFjay5jIGIvYnVpbHRpbi9yZWNlaXZlLXBhY2suYwppbmRleCAyOWYxNjVkLi5kY2YzODU1IDEwMDY0NAotLS0gYS9idWlsdGluL3JlY2VpdmUtcGFjay5jCisrKyBiL2J1aWx0aW4vcmVjZWl2ZS1wYWNrLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlICJyZW1vdGUuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCi0jaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKICNpbmNsdWRlICJzaGExLWFycmF5LmgiCiAjaW5jbHVkZSAiY29ubmVjdGVkLmgiCkBAIC0xODA5LDggKzE4MDgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHByZXBhcmVfc2hhbGxvd191cGRhdGUoc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzLAotCQkJCSAgIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQorc3RhdGljIHZvaWQgcHJlcGFyZV9zaGFsbG93X3VwZGF0ZShzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKIHsKIAlpbnQgaSwgaiwgaywgYml0bWFwX3NpemUgPSBESVZfUk9VTkRfVVAoc2ktPnJlZi0+bnIsIDMyKTsKIApAQCAtMTg3Niw3ICsxODc0LDcgQEAKIAlzaS0+cmVmID0gcmVmOwogCiAJaWYgKHNoYWxsb3dfdXBkYXRlKSB7Ci0JCXByZXBhcmVfc2hhbGxvd191cGRhdGUoY29tbWFuZHMsIHNpKTsKKwkJcHJlcGFyZV9zaGFsbG93X3VwZGF0ZShzaSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIwNDMsNyArMjA0MSw3IEBACiAJCQlwcm9jLmdpdF9jbWQgPSAxOwogCQkJcHJvYy5hcmd2ID0gYXJndl9nY19hdXRvOwogCi0JCQljbG9zZV9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnktPm9iamVjdHMpOworCQkJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKIAkJCWlmICghc3RhcnRfY29tbWFuZCgmcHJvYykpIHsKIAkJCQlpZiAodXNlX3NpZGViYW5kKQogCQkJCQljb3B5X3RvX3NpZGViYW5kKHByb2MuZXJyLCAtMSwgTlVMTCk7CmRpZmYgLS1naXQgYS9idWlsdGluL3JlbW90ZS5jIGIvYnVpbHRpbi9yZW1vdGUuYwppbmRleCBmN2VkZjdmLi41NTkxY2VmIDEwMDY0NAotLS0gYS9idWlsdGluL3JlbW90ZS5jCisrKyBiL2J1aWx0aW4vcmVtb3RlLmMKQEAgLTE0MDcsNyArMTQwNyw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCByZW1vdmVfYWxsX2ZldGNoX3JlZnNwZWNzKGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqa2V5KQorc3RhdGljIGludCByZW1vdmVfYWxsX2ZldGNoX3JlZnNwZWNzKGNvbnN0IGNoYXIgKmtleSkKIHsKIAlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfZ2VudGx5KGtleSwgTlVMTCwgTlVMTCwgMSk7CiB9CkBAIC0xNDM3LDcgKzE0MzcsNyBAQAogCWlmICghcmVtb3RlX2lzX2NvbmZpZ3VyZWQocmVtb3RlLCAxKSkKIAkJZGllKF8oIk5vIHN1Y2ggcmVtb3RlICclcyciKSwgcmVtb3RlbmFtZSk7CiAKLQlpZiAoIWFkZF9tb2RlICYmIHJlbW92ZV9hbGxfZmV0Y2hfcmVmc3BlY3MocmVtb3RlbmFtZSwga2V5LmJ1ZikpIHsKKwlpZiAoIWFkZF9tb2RlICYmIHJlbW92ZV9hbGxfZmV0Y2hfcmVmc3BlY3Moa2V5LmJ1ZikpIHsKIAkJc3RyYnVmX3JlbGVhc2UoJmtleSk7CiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVwYWNrLmMgYi9idWlsdGluL3JlcGFjay5jCmluZGV4IGNhY2ExMTMuLjYzMmMwYzAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmVwYWNrLmMKKysrIGIvYnVpbHRpbi9yZXBhY2suYwpAQCAtMTI5LDE5ICsxMjksOSBAQAogCiBzdGF0aWMgdm9pZCByZW1vdmVfcmVkdW5kYW50X3BhY2soY29uc3QgY2hhciAqZGlyX25hbWUsIGNvbnN0IGNoYXIgKmJhc2VfbmFtZSkKIHsKLQljb25zdCBjaGFyICpleHRzW10gPSB7Ii5wYWNrIiwgIi5pZHgiLCAiLmtlZXAiLCAiLmJpdG1hcCIsICIucHJvbWlzb3IifTsKLQlpbnQgaTsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwotCXNpemVfdCBwbGVuOwotCi0Jc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLyVzIiwgZGlyX25hbWUsIGJhc2VfbmFtZSk7Ci0JcGxlbiA9IGJ1Zi5sZW47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShleHRzKTsgaSsrKSB7Ci0JCXN0cmJ1Zl9zZXRsZW4oJmJ1ZiwgcGxlbik7Ci0JCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZXh0c1tpXSk7Ci0JCXVubGluayhidWYuYnVmKTsKLQl9CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLyVzLnBhY2siLCBkaXJfbmFtZSwgYmFzZV9uYW1lKTsKKwl1bmxpbmtfcGFja19wYXRoKGJ1Zi5idWYsIDEpOwogCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogfQogCkBAIC0zNDMsMTEgKzMzMywxMyBAQAogCSAgICAodW5wYWNrX3VucmVhY2hhYmxlIHx8IChwYWNrX2V2ZXJ5dGhpbmcgJiBMT09TRU5fVU5SRUFDSEFCTEUpKSkKIAkJZGllKF8oIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLUEgYXJlIGluY29tcGF0aWJsZSIpKTsKIAotCWlmICh3cml0ZV9iaXRtYXBzIDwgMCkKLQkJd3JpdGVfYml0bWFwcyA9IChwYWNrX2V2ZXJ5dGhpbmcgJiBBTExfSU5UT19PTkUpICYmCi0JCQkJIGlzX2JhcmVfcmVwb3NpdG9yeSgpOworCWlmICh3cml0ZV9iaXRtYXBzIDwgMCkgeworCQlpZiAoIShwYWNrX2V2ZXJ5dGhpbmcgJiBBTExfSU5UT19PTkUpIHx8CisJCSAgICAhaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCQl3cml0ZV9iaXRtYXBzID0gMDsKKwl9CiAJaWYgKHBhY2tfa2VwdF9vYmplY3RzIDwgMCkKLQkJcGFja19rZXB0X29iamVjdHMgPSB3cml0ZV9iaXRtYXBzOworCQlwYWNrX2tlcHRfb2JqZWN0cyA9IHdyaXRlX2JpdG1hcHMgPiAwOwogCiAJaWYgKHdyaXRlX2JpdG1hcHMgJiYgIShwYWNrX2V2ZXJ5dGhpbmcgJiBBTExfSU5UT19PTkUpKQogCQlkaWUoXyhpbmNyZW1lbnRhbF9iaXRtYXBfY29uZmxpY3RfZXJyb3IpKTsKQEAgLTM3MSw4ICszNjMsMTAgQEAKIAlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1pbmRleGVkLW9iamVjdHMiKTsKIAlpZiAocmVwb3NpdG9yeV9mb3JtYXRfcGFydGlhbF9jbG9uZSkKIAkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIik7Ci0JaWYgKHdyaXRlX2JpdG1hcHMpCisJaWYgKHdyaXRlX2JpdG1hcHMgPiAwKQogCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS13cml0ZS1iaXRtYXAtaW5kZXgiKTsKKwllbHNlIGlmICh3cml0ZV9iaXRtYXBzIDwgMCkKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0td3JpdGUtYml0bWFwLWluZGV4LXF1aWV0Iik7CiAJaWYgKHVzZV9kZWx0YV9pc2xhbmRzKQogCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1kZWx0YS1pc2xhbmRzIik7CiAKQEAgLTQyMiw3ICs0MTYsNyBAQAogCWlmICghbmFtZXMubnIgJiYgIXBvX2FyZ3MucXVpZXQpCiAJCXByaW50Zl9sbihfKCJOb3RoaW5nIG5ldyB0byBwYWNrLiIpKTsKIAotCWNsb3NlX2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cyk7CisJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKIAogCS8qCiAJICogT2sgd2UgaGF2ZSBwcmVwYXJlZCBhbGwgbmV3IHBhY2tmaWxlcy4KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVzZXQuYyBiL2J1aWx0aW4vcmVzZXQuYwppbmRleCAyNmVmOWE3Li5mZGQ1NzIxIDEwMDY0NAotLS0gYS9idWlsdGluL3Jlc2V0LmMKKysrIGIvYnVpbHRpbi9yZXNldC5jCkBAIC03OSwxMyArNzksMTMgQEAKIAkJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKIAkJaWYgKGdldF9vaWQoIkhFQUQiLCAmaGVhZF9vaWQpKQogCQkJcmV0dXJuIGVycm9yKF8oIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIikpOwotCQlpZiAoIWZpbGxfdHJlZV9kZXNjcmlwdG9yKGRlc2MgKyBuciwgJmhlYWRfb2lkKSkKKwkJaWYgKCFmaWxsX3RyZWVfZGVzY3JpcHRvcih0aGVfcmVwb3NpdG9yeSwgZGVzYyArIG5yLCAmaGVhZF9vaWQpKQogCQkJcmV0dXJuIGVycm9yKF8oIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iKSk7CiAJCW5yKys7CiAJCW9wdHMuZm4gPSB0d293YXlfbWVyZ2U7CiAJfQogCi0JaWYgKCFmaWxsX3RyZWVfZGVzY3JpcHRvcihkZXNjICsgbnIsIG9pZCkpIHsKKwlpZiAoIWZpbGxfdHJlZV9kZXNjcmlwdG9yKHRoZV9yZXBvc2l0b3J5LCBkZXNjICsgbnIsIG9pZCkpIHsKIAkJZXJyb3IoXygiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iKSwgb2lkX3RvX2hleChvaWQpKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCQlwcmludF9uZXdfaGVhZF9saW5lKGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCAmb2lkKSk7CiAJfQogCWlmICghcGF0aHNwZWMubnIpCi0JCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnkpOworCQlyZW1vdmVfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5LCAwKTsKIAogCXJldHVybiB1cGRhdGVfcmVmX3N0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmV2LWxpc3QuYyBiL2J1aWx0aW4vcmV2LWxpc3QuYwppbmRleCA5ZjMxODM3Li4zMDFjY2I5IDEwMDY0NAotLS0gYS9idWlsdGluL3Jldi1saXN0LmMKKysrIGIvYnVpbHRpbi9yZXYtbGlzdC5jCkBAIC00OSw2ICs0OSw3IEBACiAiICAgIC0tb2JqZWN0cyB8IC0tb2JqZWN0cy1lZGdlXG4iCiAiICAgIC0tdW5wYWNrZWRcbiIKICIgICAgLS1oZWFkZXIgfCAtLXByZXR0eVxuIgorIiAgICAtLVtuby1db2JqZWN0LW5hbWVzXG4iCiAiICAgIC0tYWJicmV2PTxuPiB8IC0tbm8tYWJicmV2XG4iCiAiICAgIC0tYWJicmV2LWNvbW1pdFxuIgogIiAgICAtLWxlZnQtcmlnaHRcbiIKQEAgLTc1LDkgKzc2LDEyIEBACiB9Owogc3RhdGljIGVudW0gbWlzc2luZ19hY3Rpb24gYXJnX21pc3NpbmdfYWN0aW9uOwogCisvKiBkaXNwbGF5IG9ubHkgdGhlIG9pZCBvZiBlYWNoIG9iamVjdCBlbmNvdW50ZXJlZCAqLworc3RhdGljIGludCBhcmdfc2hvd19vYmplY3RfbmFtZXMgPSAxOworCiAjZGVmaW5lIERFRkFVTFRfT0lEU0VUX1NJWkUgICAgICgxNioxMDI0KQogCi1zdGF0aWMgdm9pZCBmaW5pc2hfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSk7CitzdGF0aWMgdm9pZCBmaW5pc2hfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CiBzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHJldl9saXN0X2luZm8gKmluZm8gPSBkYXRhOwpAQCAtODYsNyArOTAsNyBAQAogCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrcHJvZ3Jlc3NfY291bnRlcik7CiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBSRVZfTElTVF9RVUlFVCkgewotCQlmaW5pc2hfY29tbWl0KGNvbW1pdCwgZGF0YSk7CisJCWZpbmlzaF9jb21taXQoY29tbWl0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTksNyArMTAzLDcgQEAKIAkJCXJldnMtPmNvdW50X2xlZnQrKzsKIAkJZWxzZQogCQkJcmV2cy0+Y291bnRfcmlnaHQrKzsKLQkJZmluaXNoX2NvbW1pdChjb21taXQsIGRhdGEpOworCQlmaW5pc2hfY29tbWl0KGNvbW1pdCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE4OCwxMCArMTkyLDEwIEBACiAJCQlwdXRjaGFyKCdcbicpOwogCX0KIAltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAic3Rkb3V0Iik7Ci0JZmluaXNoX2NvbW1pdChjb21taXQsIGRhdGEpOworCWZpbmlzaF9jb21taXQoY29tbWl0KTsKIH0KIAotc3RhdGljIHZvaWQgZmluaXNoX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBmaW5pc2hfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKIAlpZiAoY29tbWl0LT5wYXJlbnRzKSB7CiAJCWZyZWVfY29tbWl0X2xpc3QoY29tbWl0LT5wYXJlbnRzKTsKQEAgLTI1NSw3ICsyNTksMTAgQEAKIAlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK3Byb2dyZXNzX2NvdW50ZXIpOwogCWlmIChpbmZvLT5mbGFncyAmIFJFVl9MSVNUX1FVSUVUKQogCQlyZXR1cm47Ci0Jc2hvd19vYmplY3Rfd2l0aF9uYW1lKHN0ZG91dCwgb2JqLCBuYW1lKTsKKwlpZiAoYXJnX3Nob3dfb2JqZWN0X25hbWVzKQorCQlzaG93X29iamVjdF93aXRoX25hbWUoc3Rkb3V0LCBvYmosIG5hbWUpOworCWVsc2UKKwkJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKIH0KIAogc3RhdGljIHZvaWQgc2hvd19lZGdlKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKQEAgLTQ4NCw2ICs0OTEsMTYgQEAKIAkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tbWlzc2luZz0iLCAmYXJnKSkKIAkJCWNvbnRpbnVlOyAvKiBhbHJlYWR5IGhhbmRsZWQgYWJvdmUgKi8KIAorCQlpZiAoIXN0cmNtcChhcmcsICgiLS1uby1vYmplY3QtbmFtZXMiKSkpIHsKKwkJCWFyZ19zaG93X29iamVjdF9uYW1lcyA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghc3RyY21wKGFyZywgKCItLW9iamVjdC1uYW1lcyIpKSkgeworCQkJYXJnX3Nob3dfb2JqZWN0X25hbWVzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJdXNhZ2UocmV2X2xpc3RfdXNhZ2UpOwogCiAJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXZlcnQuYyBiL2J1aWx0aW4vcmV2ZXJ0LmMKaW5kZXggZDRkY2VkYi4uZjYxY2M1ZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yZXZlcnQuYworKysgYi9idWlsdGluL3JldmVydC5jCkBAIC0xMDIsNiArMTAyLDcgQEAKIAkJT1BUX0NNRE1PREUoMCwgInF1aXQiLCAmY21kLCBOXygiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpLCAncScpLAogCQlPUFRfQ01ETU9ERSgwLCAiY29udGludWUiLCAmY21kLCBOXygicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpLCAnYycpLAogCQlPUFRfQ01ETU9ERSgwLCAiYWJvcnQiLCAmY21kLCBOXygiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpLCAnYScpLAorCQlPUFRfQ01ETU9ERSgwLCAic2tpcCIsICZjbWQsIE5fKCJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIpLCAncycpLAogCQlPUFRfQ0xFQU5VUCgmY2xlYW51cF9hcmcpLAogCQlPUFRfQk9PTCgnbicsICJuby1jb21taXQiLCAmb3B0cy0+bm9fY29tbWl0LCBOXygiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiKSksCiAJCU9QVF9CT09MKCdlJywgImVkaXQiLCAmb3B0cy0+ZWRpdCwgTl8oImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIikpLApAQCAtMTUxLDYgKzE1Miw4IEBACiAJCQl0aGlzX29wZXJhdGlvbiA9ICItLXF1aXQiOwogCQllbHNlIGlmIChjbWQgPT0gJ2MnKQogCQkJdGhpc19vcGVyYXRpb24gPSAiLS1jb250aW51ZSI7CisJCWVsc2UgaWYgKGNtZCA9PSAncycpCisJCQl0aGlzX29wZXJhdGlvbiA9ICItLXNraXAiOwogCQllbHNlIHsKIAkJCWFzc2VydChjbWQgPT0gJ2EnKTsKIAkJCXRoaXNfb3BlcmF0aW9uID0gIi0tYWJvcnQiOwpAQCAtMjAzLDEzICsyMDYsMTUgQEAKIAlpZiAoY21kID09ICdxJykgewogCQlpbnQgcmV0ID0gc2VxdWVuY2VyX3JlbW92ZV9zdGF0ZShvcHRzKTsKIAkJaWYgKCFyZXQpCi0JCQlyZW1vdmVfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKKwkJCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnksIDApOwogCQlyZXR1cm4gcmV0OwogCX0KIAlpZiAoY21kID09ICdjJykKIAkJcmV0dXJuIHNlcXVlbmNlcl9jb250aW51ZSh0aGVfcmVwb3NpdG9yeSwgb3B0cyk7CiAJaWYgKGNtZCA9PSAnYScpCiAJCXJldHVybiBzZXF1ZW5jZXJfcm9sbGJhY2sodGhlX3JlcG9zaXRvcnksIG9wdHMpOworCWlmIChjbWQgPT0gJ3MnKQorCQlyZXR1cm4gc2VxdWVuY2VyX3NraXAodGhlX3JlcG9zaXRvcnksIG9wdHMpOwogCXJldHVybiBzZXF1ZW5jZXJfcGlja19yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksIG9wdHMpOwogfQogCmRpZmYgLS1naXQgYS9idWlsdGluL3JtLmMgYi9idWlsdGluL3JtLmMKaW5kZXggOTBjYmU4OS4uMTljZTk1YSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9ybS5jCisrKyBiL2J1aWx0aW4vcm0uYwpAQCAtNjEsNyArNjEsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc3VibW9kdWxlc19hYnNvcmJfZ2l0ZGlyX2lmX25lZWRlZChjb25zdCBjaGFyICpwcmVmaXgpCitzdGF0aWMgdm9pZCBzdWJtb2R1bGVzX2Fic29yYl9naXRkaXJfaWZfbmVlZGVkKHZvaWQpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykgewpAQCAtODMsNyArODMsNyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKCFzdWJtb2R1bGVfdXNlc19naXRmaWxlKG5hbWUpKQotCQkJYWJzb3JiX2dpdF9kaXJfaW50b19zdXBlcnByb2plY3QocHJlZml4LCBuYW1lLAorCQkJYWJzb3JiX2dpdF9kaXJfaW50b19zdXBlcnByb2plY3QobmFtZSwKIAkJCQlBQlNPUkJfR0lURElSX1JFQ1VSU0VfU1VCTU9EVUxFUyk7CiAJfQogfQpAQCAtMTc5LDcgKzE3OSw3IEBACiAJCSAqIHdheSBhcyBjaGFuZ2VkIGZyb20gdGhlIEhFQUQuCiAJCSAqLwogCQlpZiAobm9faGVhZAotCQkgICAgIHx8IGdldF90cmVlX2VudHJ5KGhlYWQsIG5hbWUsICZvaWQsICZtb2RlKQorCQkgICAgIHx8IGdldF90cmVlX2VudHJ5KHRoZV9yZXBvc2l0b3J5LCBoZWFkLCBuYW1lLCAmb2lkLCAmbW9kZSkKIAkJICAgICB8fCBjZS0+Y2VfbW9kZSAhPSBjcmVhdGVfY2VfbW9kZShtb2RlKQogCQkgICAgIHx8ICFvaWRlcSgmY2UtPm9pZCwgJm9pZCkpCiAJCQlzdGFnZWRfY2hhbmdlcyA9IDE7CkBAIC0yNzMsNyArMjczLDcgQEAKIAlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsCiAJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfQ1dELAogCQkgICAgICAgcHJlZml4LCBhcmd2KTsKLQlyZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsIFJFRlJFU0hfUVVJRVQsICZwYXRoc3BlYywgTlVMTCwgTlVMTCk7CisJcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCBSRUZSRVNIX1FVSUVUfFJFRlJFU0hfVU5NRVJHRUQsICZwYXRoc3BlYywgTlVMTCwgTlVMTCk7CiAKIAlzZWVuID0geGNhbGxvYyhwYXRoc3BlYy5uciwgMSk7CiAKQEAgLTMxMyw3ICszMTMsNyBAQAogCX0KIAogCWlmICghaW5kZXhfb25seSkKLQkJc3VibW9kdWxlc19hYnNvcmJfZ2l0ZGlyX2lmX25lZWRlZChwcmVmaXgpOworCQlzdWJtb2R1bGVzX2Fic29yYl9naXRkaXJfaWZfbmVlZGVkKCk7CiAKIAkvKgogCSAqIElmIG5vdCBmb3JjZWQsIHRoZSBmaWxlLCB0aGUgaW5kZXggYW5kIHRoZSBIRUFEIChpZiBleGlzdHMpCmRpZmYgLS1naXQgYS9idWlsdGluL3Nob3ctYnJhbmNoLmMgYi9idWlsdGluL3Nob3ctYnJhbmNoLmMKaW5kZXggMDgyZGFlYS4uMzVkN2Y1MSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9zaG93LWJyYW5jaC5jCisrKyBiL2J1aWx0aW4vc2hvdy1icmFuY2guYwpAQCAtNTE0LDcgKzUxNCw2IEBACiAKIHN0YXRpYyBpbnQgc2hvd19pbmRlcGVuZGVudChzdHJ1Y3QgY29tbWl0ICoqcmV2LAogCQkJICAgIGludCBudW1fcmV2LAotCQkJICAgIGNoYXIgKipyZWZfbmFtZSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgKnJldl9tYXNrKQogewogCWludCBpOwpAQCAtODYyLDcgKzg2MSw3IEBACiAJCXJldHVybiBzaG93X21lcmdlX2Jhc2Uoc2VlbiwgbnVtX3Jldik7CiAKIAlpZiAoaW5kZXBlbmRlbnQpCi0JCXJldHVybiBzaG93X2luZGVwZW5kZW50KHJldiwgbnVtX3JldiwgcmVmX25hbWUsIHJldl9tYXNrKTsKKwkJcmV0dXJuIHNob3dfaW5kZXBlbmRlbnQocmV2LCBudW1fcmV2LCByZXZfbWFzayk7CiAKIAkvKiBTaG93IGxpc3Q7IC0tbW9yZT0tMSBtZWFucyBsaXN0LW9ubHkgKi8KIAlpZiAoMSA8IG51bV9yZXYgfHwgZXh0cmEgPCAwKSB7CmRpZmYgLS1naXQgYS9idWlsdGluL3N0YXNoLmMgYi9idWlsdGluL3N0YXNoLmMKaW5kZXggMmE4ZTZkMC4uYjVhMzAxZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9zdGFzaC5jCisrKyBiL2J1aWx0aW4vc3Rhc2guYwpAQCAtNzEzLDExICs3MTMsMTEgQEAKIHN0YXRpYyBpbnQgc2hvd19zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlpbnQgaTsKLQlpbnQgb3B0cyA9IDA7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHN0YXNoX2luZm8gaW5mbzsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2OwogCXN0cnVjdCBhcmd2X2FycmF5IHN0YXNoX2FyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcmV2aXNpb25fYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAkJT1BUX0VORCgpCiAJfTsKQEAgLTcyNiwxMSArNzI2LDEyIEBACiAJZ2l0X2NvbmZpZyhnaXRfZGlmZl91aV9jb25maWcsIE5VTEwpOwogCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CiAKKwlhcmd2X2FycmF5X3B1c2goJnJldmlzaW9uX2FyZ3MsIGFyZ3ZbMF0pOwogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKIAkJaWYgKGFyZ3ZbaV1bMF0gIT0gJy0nKQogCQkJYXJndl9hcnJheV9wdXNoKCZzdGFzaF9hcmdzLCBhcmd2W2ldKTsKIAkJZWxzZQotCQkJb3B0cysrOworCQkJYXJndl9hcnJheV9wdXNoKCZyZXZpc2lvbl9hcmdzLCBhcmd2W2ldKTsKIAl9CiAKIAlyZXQgPSBnZXRfc3Rhc2hfaW5mbygmaW5mbywgc3Rhc2hfYXJncy5hcmdjLCBzdGFzaF9hcmdzLmFyZ3YpOwpAQCAtNzQyLDcgKzc0Myw3IEBACiAJICogVGhlIGNvbmZpZyBzZXR0aW5ncyBhcmUgYXBwbGllZCBvbmx5IGlmIHRoZXJlIGFyZSBub3QgcGFzc2VkCiAJICogYW55IG9wdGlvbnMuCiAJICovCi0JaWYgKCFvcHRzKSB7CisJaWYgKHJldmlzaW9uX2FyZ3MuYXJnYyA9PSAxKSB7CiAJCWdpdF9jb25maWcoZ2l0X3N0YXNoX2NvbmZpZywgTlVMTCk7CiAJCWlmIChzaG93X3N0YXQpCiAJCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfRElGRlNUQVQ7CkBAIC03NTYsNyArNzU3LDcgQEAKIAkJfQogCX0KIAotCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCk7CisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhyZXZpc2lvbl9hcmdzLmFyZ2MsIHJldmlzaW9uX2FyZ3MuYXJndiwgJnJldiwgTlVMTCk7CiAJaWYgKGFyZ2MgPiAxKSB7CiAJCWZyZWVfc3Rhc2hfaW5mbygmaW5mbyk7CiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfc3Rhc2hfc2hvd191c2FnZSwgb3B0aW9ucyk7CkBAIC0xMzkwLDMwICsxMzkxLDE2IEBACiAJCX0KIAogCQlpZiAoa2VlcF9pbmRleCA9PSAxICYmICFpc19udWxsX29pZCgmaW5mby5pX3RyZWUpKSB7Ci0JCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcF9scyA9IENISUxEX1BST0NFU1NfSU5JVDsKLQkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwX2NoZWNrb3V0ID0gQ0hJTERfUFJPQ0VTU19JTklUOwotCQkJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOwogCi0JCQlpZiAocmVzZXRfdHJlZSgmaW5mby5pX3RyZWUsIDAsIDEpKSB7Ci0JCQkJcmV0ID0gLTE7Ci0JCQkJZ290byBkb25lOwotCQkJfQotCi0JCQljcF9scy5naXRfY21kID0gMTsKLQkJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwX2xzLmFyZ3MsICJscy1maWxlcyIsICIteiIsCi0JCQkJCSAiLS1tb2RpZmllZCIsICItLSIsIE5VTEwpOwotCi0JCQlhZGRfcGF0aHNwZWNzKCZjcF9scy5hcmdzLCBwcyk7Ci0JCQlpZiAocGlwZV9jb21tYW5kKCZjcF9scywgTlVMTCwgMCwgJm91dCwgMCwgTlVMTCwgMCkpIHsKLQkJCQlyZXQgPSAtMTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0KLQkJCWNwX2NoZWNrb3V0LmdpdF9jbWQgPSAxOwotCQkJYXJndl9hcnJheV9wdXNobCgmY3BfY2hlY2tvdXQuYXJncywgImNoZWNrb3V0LWluZGV4IiwKLQkJCQkJICIteiIsICItLWZvcmNlIiwgIi0tc3RkaW4iLCBOVUxMKTsKLQkJCWlmIChwaXBlX2NvbW1hbmQoJmNwX2NoZWNrb3V0LCBvdXQuYnVmLCBvdXQubGVuLCBOVUxMLAotCQkJCQkgMCwgTlVMTCwgMCkpIHsKKwkJCWNwLmdpdF9jbWQgPSAxOworCQkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgImNoZWNrb3V0IiwgIi0tbm8tb3ZlcmxheSIsCisJCQkJCSBvaWRfdG9faGV4KCZpbmZvLmlfdHJlZSksICItLSIsIE5VTEwpOworCQkJaWYgKCFwcy0+bnIpCisJCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiOi8iKTsKKwkJCWVsc2UKKwkJCQlhZGRfcGF0aHNwZWNzKCZjcC5hcmdzLCBwcyk7CisJCQlpZiAocnVuX2NvbW1hbmQoJmNwKSkgewogCQkJCXJldCA9IC0xOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYyBiL2J1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYwppbmRleCAwYmY0YWEwLi45MDllNzdlIDEwMDY0NAotLS0gYS9idWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmMKKysrIGIvYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jCkBAIC01NDAsNiArNTQwLDcgQEAKIAkJaWYgKGluZm8tPnF1aWV0KQogCQkJYXJndl9hcnJheV9wdXNoKCZjcHIuYXJncywgIi0tcXVpZXQiKTsKIAorCQlhcmd2X2FycmF5X3B1c2goJmNwci5hcmdzLCAiLS0iKTsKIAkJYXJndl9hcnJheV9wdXNodigmY3ByLmFyZ3MsIGluZm8tPmFyZ3YpOwogCiAJCWlmIChydW5fY29tbWFuZCgmY3ByKSkKQEAgLTIxMDcsOCArMjEwOCw3IEBACiAJCXJldHVybiAxOwogCiAJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykKLQkJYWJzb3JiX2dpdF9kaXJfaW50b19zdXBlcnByb2plY3QocHJlZml4LAotCQkJCWxpc3QuZW50cmllc1tpXS0+bmFtZSwgZmxhZ3MpOworCQlhYnNvcmJfZ2l0X2Rpcl9pbnRvX3N1cGVycHJvamVjdChsaXN0LmVudHJpZXNbaV0tPm5hbWUsIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi90YWcuYyBiL2J1aWx0aW4vdGFnLmMKaW5kZXggZWYzN2RjYy4uZTBhNGMyNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi90YWcuYworKysgYi9idWlsdGluL3RhZy5jCkBAIC0zMyw2ICszMyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29sb3B0czsKIHN0YXRpYyBpbnQgZm9yY2Vfc2lnbl9hbm5vdGF0ZTsKK3N0YXRpYyBpbnQgY29uZmlnX3NpZ25fdGFnID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCiAKIHN0YXRpYyBpbnQgbGlzdF90YWdzKHN0cnVjdCByZWZfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZywKIAkJICAgICBzdHJ1Y3QgcmVmX2Zvcm1hdCAqZm9ybWF0KQpAQCAtMTQ0LDYgKzE0NSwxMSBAQAogCWludCBzdGF0dXM7CiAJc3RydWN0IHJlZl9zb3J0aW5nICoqc29ydGluZ190YWlsID0gKHN0cnVjdCByZWZfc29ydGluZyAqKiljYjsKIAorCWlmICghc3RyY21wKHZhciwgInRhZy5ncGdzaWduIikpIHsKKwkJY29uZmlnX3NpZ25fdGFnID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoIXN0cmNtcCh2YXIsICJ0YWcuc29ydCIpKSB7CiAJCWlmICghdmFsdWUpCiAJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKQEAgLTQ0MiwxNSArNDQ4LDEwIEBACiAJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKIAltZW1zZXQoJmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpOwogCWZpbHRlci5saW5lcyA9IC0xOworCW9wdC5zaWduID0gLTE7CiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF90YWdfdXNhZ2UsIDApOwogCi0JaWYgKGtleWlkKSB7Ci0JCW9wdC5zaWduID0gMTsKLQkJc2V0X3NpZ25pbmdfa2V5KGtleWlkKTsKLQl9Ci0JY3JlYXRlX3RhZ19vYmplY3QgPSAob3B0LnNpZ24gfHwgYW5ub3RhdGUgfHwgbXNnLmdpdmVuIHx8IG1zZ2ZpbGUpOwotCiAJaWYgKCFjbWRtb2RlKSB7CiAJCWlmIChhcmdjID09IDApCiAJCQljbWRtb2RlID0gJ2wnOwpAQCAtNDYzLDYgKzQ2NCwxNSBAQAogCWlmIChjbWRtb2RlID09ICdsJykKIAkJc2V0dXBfYXV0b19wYWdlcigidGFnIiwgMSk7CiAKKwlpZiAob3B0LnNpZ24gPT0gLTEpCisJCW9wdC5zaWduID0gY21kbW9kZSA/IDAgOiBjb25maWdfc2lnbl90YWcgPiAwOworCisJaWYgKGtleWlkKSB7CisJCW9wdC5zaWduID0gMTsKKwkJc2V0X3NpZ25pbmdfa2V5KGtleWlkKTsKKwl9CisJY3JlYXRlX3RhZ19vYmplY3QgPSAob3B0LnNpZ24gfHwgYW5ub3RhdGUgfHwgbXNnLmdpdmVuIHx8IG1zZ2ZpbGUpOworCiAJaWYgKChjcmVhdGVfdGFnX29iamVjdCB8fCBmb3JjZSkgJiYgKGNtZG1vZGUgIT0gMCkpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfdGFnX3VzYWdlLCBvcHRpb25zKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jCmluZGV4IDgwNDc4ODAuLmE4N2E0YmYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYworKysgYi9idWlsdGluL3VucGFjay1vYmplY3RzLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogewogCXN0cnVjdCBvYmplY3QgKm9iajsKIAlzdHJ1Y3Qgb2JqX2J1ZmZlciAqb2JqX2J1ZmZlcjsKLQlvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBiYXNlLT5oYXNoKTsKKwlvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBiYXNlKTsKIAlpZiAoIW9iaikKIAkJcmV0dXJuIDA7CiAJb2JqX2J1ZmZlciA9IGxvb2t1cF9vYmplY3RfYnVmZmVyKG9iaik7CmRpZmYgLS1naXQgYS9idWlsdGluL3VwZGF0ZS1pbmRleC5jIGIvYnVpbHRpbi91cGRhdGUtaW5kZXguYwppbmRleCAzZjhjYzZjLi5kZmYyZjRiIDEwMDY0NAotLS0gYS9idWlsdGluL3VwZGF0ZS1pbmRleC5jCisrKyBiL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMKQEAgLTYwMSw3ICs2MDEsNyBAQAogCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CiAKLQlpZiAoZ2V0X3RyZWVfZW50cnkoZW50LCBwYXRoLCAmb2lkLCAmbW9kZSkpIHsKKwlpZiAoZ2V0X3RyZWVfZW50cnkodGhlX3JlcG9zaXRvcnksIGVudCwgcGF0aCwgJm9pZCwgJm1vZGUpKSB7CiAJCWlmICh3aGljaCkKIAkJCWVycm9yKCIlczogbm90IGluICVzIGJyYW5jaC4iLCBwYXRoLCB3aGljaCk7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi91cGxvYWQtcGFjay5jIGIvYnVpbHRpbi91cGxvYWQtcGFjay5jCmluZGV4IDQyZGM0ZGEuLjZkYThmYTIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vdXBsb2FkLXBhY2suYworKysgYi9idWlsdGluL3VwbG9hZC1wYWNrLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoInVwbG9hZC1wYWNrIik7CiAJcmVhZF9yZXBsYWNlX3JlZnMgPSAwOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXBsb2FkX3BhY2tfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgdXBsb2FkX3BhY2tfdXNhZ2UsIDApOwogCiAJaWYgKGFyZ2MgIT0gMSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVwbG9hZF9wYWNrX3VzYWdlLCBvcHRpb25zKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jIGIvYnVpbHRpbi92ZXJpZnktY29tbWl0LmMKaW5kZXggNzc3MmMwNy4uNDBjNjlhMCAxMDA2NDQKLS0tIGEvYnVpbHRpbi92ZXJpZnktY29tbWl0LmMKKysrIGIvYnVpbHRpbi92ZXJpZnktY29tbWl0LmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKLSNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgogCkBAIC0yMSwxNSArMjAsMTQgQEAKIAkJTlVMTAogfTsKIAotc3RhdGljIGludCBydW5fZ3BnX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBmbGFncykKK3N0YXRpYyBpbnQgcnVuX2dwZ192ZXJpZnkoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBmbGFncykKIHsKIAlzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrIHNpZ25hdHVyZV9jaGVjazsKIAlpbnQgcmV0OwogCiAJbWVtc2V0KCZzaWduYXR1cmVfY2hlY2ssIDAsIHNpemVvZihzaWduYXR1cmVfY2hlY2spKTsKIAotCXJldCA9IGNoZWNrX2NvbW1pdF9zaWduYXR1cmUobG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgb2lkKSwKLQkJCQkgICAgICZzaWduYXR1cmVfY2hlY2spOworCXJldCA9IGNoZWNrX2NvbW1pdF9zaWduYXR1cmUoY29tbWl0LCAmc2lnbmF0dXJlX2NoZWNrKTsKIAlwcmludF9zaWduYXR1cmVfYnVmZmVyKCZzaWduYXR1cmVfY2hlY2ssIGZsYWdzKTsKIAogCXNpZ25hdHVyZV9jaGVja19jbGVhcigmc2lnbmF0dXJlX2NoZWNrKTsKQEAgLTM4LDI2ICszNiwyMCBAQAogCiBzdGF0aWMgaW50IHZlcmlmeV9jb21taXQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgZmxhZ3MpCiB7Ci0JZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCXN0cnVjdCBvYmplY3RfaWQgb2lkOwotCWNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JaW50IHJldDsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CiAKIAlpZiAoZ2V0X29pZChuYW1lLCAmb2lkKSkKIAkJcmV0dXJuIGVycm9yKCJjb21taXQgJyVzJyBub3QgZm91bmQuIiwgbmFtZSk7CiAKLQlidWYgPSByZWFkX29iamVjdF9maWxlKCZvaWQsICZ0eXBlLCAmc2l6ZSk7Ci0JaWYgKCFidWYpCisJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlpZiAoIW9iaikKIAkJcmV0dXJuIGVycm9yKCIlczogdW5hYmxlIHRvIHJlYWQgZmlsZS4iLCBuYW1lKTsKLQlpZiAodHlwZSAhPSBPQkpfQ09NTUlUKQorCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKIAkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IHZlcmlmeSBhIG5vbi1jb21taXQgb2JqZWN0IG9mIHR5cGUgJXMuIiwKLQkJCQluYW1lLCB0eXBlX25hbWUodHlwZSkpOworCQkJCW5hbWUsIHR5cGVfbmFtZShvYmotPnR5cGUpKTsKIAotCXJldCA9IHJ1bl9ncGdfdmVyaWZ5KCZvaWQsIGJ1Ziwgc2l6ZSwgZmxhZ3MpOwotCi0JZnJlZShidWYpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHJ1bl9ncGdfdmVyaWZ5KChzdHJ1Y3QgY29tbWl0ICopb2JqLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2l0X3ZlcmlmeV9jb21taXRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi92ZXJpZnktdGFnLmMgYi9idWlsdGluL3ZlcmlmeS10YWcuYwppbmRleCA2ZmEwNGI3Li5mNDUxMzZhIDEwMDY0NAotLS0gYS9idWlsdGluL3ZlcmlmeS10YWcuYworKysgYi9idWlsdGluL3ZlcmlmeS10YWcuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgImJ1aWx0aW4uaCIKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgotI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAicmVmLWZpbHRlci5oIgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi93b3JrdHJlZS5jIGIvYnVpbHRpbi93b3JrdHJlZS5jCmluZGV4IGQyYTdlMmYuLmE1YmIwMmIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vd29ya3RyZWUuYworKysgYi9idWlsdGluL3dvcmt0cmVlLmMKQEAgLTI3NSw2ICsyNzUsNyBAQAogCXN0cnVjdCBzdHJidWYgc3ltcmVmID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gTlVMTDsKIAlpbnQgaXNfYnJhbmNoID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiX25hbWUgPSBTVFJCVUZfSU5JVDsKIAogCXZhbGlkYXRlX3dvcmt0cmVlX2FkZChwYXRoLCBvcHRzKTsKIApAQCAtMjkwLDcgKzI5MSwxMyBAQAogCQlkaWUoXygiaW52YWxpZCByZWZlcmVuY2U6ICVzIiksIHJlZm5hbWUpOwogCiAJbmFtZSA9IHdvcmt0cmVlX2Jhc2VuYW1lKHBhdGgsICZsZW4pOwotCWdpdF9wYXRoX2J1Zigmc2JfcmVwbywgIndvcmt0cmVlcy8lLipzIiwgKGludCkocGF0aCArIGxlbiAtIG5hbWUpLCBuYW1lKTsKKwlzdHJidWZfYWRkKCZzYiwgbmFtZSwgcGF0aCArIGxlbiAtIG5hbWUpOworCXNhbml0aXplX3JlZm5hbWVfY29tcG9uZW50KHNiLmJ1ZiwgJnNiX25hbWUpOworCWlmICghc2JfbmFtZS5sZW4pCisJCUJVRygiSG93IGNvbWUgJyVzJyBiZWNvbWVzIGVtcHR5IGFmdGVyIHNhbml0aXphdGlvbj8iLCBzYi5idWYpOworCXN0cmJ1Zl9yZXNldCgmc2IpOworCW5hbWUgPSBzYl9uYW1lLmJ1ZjsKKwlnaXRfcGF0aF9idWYoJnNiX3JlcG8sICJ3b3JrdHJlZXMvJXMiLCBuYW1lKTsKIAlsZW4gPSBzYl9yZXBvLmxlbjsKIAlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChzYl9yZXBvLmJ1ZikpCiAJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIpLApAQCAtNDE4LDYgKzQyNSw3IEBACiAJc3RyYnVmX3JlbGVhc2UoJnN5bXJlZik7CiAJc3RyYnVmX3JlbGVhc2UoJnNiX3JlcG8pOwogCXN0cmJ1Zl9yZWxlYXNlKCZzYl9naXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYl9uYW1lKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9idWlsdGluL3dyaXRlLXRyZWUuYyBiL2J1aWx0aW4vd3JpdGUtdHJlZS5jCmluZGV4IDNkNDZkMjIuLjQ1ZDYxNzAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vd3JpdGUtdHJlZS5jCisrKyBiL2J1aWx0aW4vd3JpdGUtdHJlZS5jCkBAIC0xNiwxNiArMTYsMTYgQEAKIAlOVUxMCiB9OwogCi1pbnQgY21kX3dyaXRlX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICp1bnVzZWRfcHJlZml4KQoraW50IGNtZF93cml0ZV90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqY21kX3ByZWZpeCkKIHsKIAlpbnQgZmxhZ3MgPSAwLCByZXQ7Ci0JY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKwljb25zdCBjaGFyICp0cmVlX3ByZWZpeCA9IE5VTEw7CiAJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJY29uc3QgY2hhciAqbWUgPSAiZ2l0LXdyaXRlLXRyZWUiOwogCXN0cnVjdCBvcHRpb24gd3JpdGVfdHJlZV9vcHRpb25zW10gPSB7CiAJCU9QVF9CSVQoMCwgIm1pc3Npbmctb2siLCAmZmxhZ3MsIE5fKCJhbGxvdyBtaXNzaW5nIG9iamVjdHMiKSwKIAkJCVdSSVRFX1RSRUVfTUlTU0lOR19PSyksCi0JCU9QVF9TVFJJTkcoMCwgInByZWZpeCIsICZwcmVmaXgsIE5fKCI8cHJlZml4Pi8iKSwKKwkJT1BUX1NUUklORygwLCAicHJlZml4IiwgJnRyZWVfcHJlZml4LCBOXygiPHByZWZpeD4vIiksCiAJCQkgICBOXygid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IikpLAogCQl7IE9QVElPTl9CSVQsIDAsICJpZ25vcmUtY2FjaGUtdHJlZSIsICZmbGFncywgTlVMTCwKIAkJICBOXygib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIpLApAQCAtMzUsMTAgKzM1LDEwIEBACiAJfTsKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCB1bnVzZWRfcHJlZml4LCB3cml0ZV90cmVlX29wdGlvbnMsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgY21kX3ByZWZpeCwgd3JpdGVfdHJlZV9vcHRpb25zLAogCQkJICAgICB3cml0ZV90cmVlX3VzYWdlLCAwKTsKIAotCXJldCA9IHdyaXRlX2NhY2hlX2FzX3RyZWUoJm9pZCwgZmxhZ3MsIHByZWZpeCk7CisJcmV0ID0gd3JpdGVfY2FjaGVfYXNfdHJlZSgmb2lkLCBmbGFncywgdHJlZV9wcmVmaXgpOwogCXN3aXRjaCAocmV0KSB7CiAJY2FzZSAwOgogCQlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KCZvaWQpKTsKQEAgLTUwLDcgKzUwLDcgQEAKIAkJZGllKCIlczogZXJyb3IgYnVpbGRpbmcgdHJlZXMiLCBtZSk7CiAJCWJyZWFrOwogCWNhc2UgV1JJVEVfVFJFRV9QUkVGSVhfRVJST1I6Ci0JCWRpZSgiJXM6IHByZWZpeCAlcyBub3QgZm91bmQiLCBtZSwgcHJlZml4KTsKKwkJZGllKCIlczogcHJlZml4ICVzIG5vdCBmb3VuZCIsIG1lLCB0cmVlX3ByZWZpeCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvY2FjaGUtdHJlZS5jIGIvY2FjaGUtdHJlZS5jCmluZGV4IGIxM2JmYWYuLjcwNmZmY2YgMTAwNjQ0Ci0tLSBhL2NhY2hlLXRyZWUuYworKysgYi9jYWNoZS10cmVlLmMKQEAgLTYsOCArNiw4IEBACiAjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCiAjaW5jbHVkZSAicmVwbGFjZS1vYmplY3QuaCIKIAotI2lmbmRlZiBERUJVRwotI2RlZmluZSBERUJVRyAwCisjaWZuZGVmIERFQlVHX0NBQ0hFX1RSRUUKKyNkZWZpbmUgREVCVUdfQ0FDSEVfVFJFRSAwCiAjZW5kaWYKIAogc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWUodm9pZCkKQEAgLTExMSw3ICsxMTEsNyBAQAogCWludCBuYW1lbGVuOwogCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqZG93bjsKIAotI2lmIERFQlVHCisjaWYgREVCVUdfQ0FDSEVfVFJFRQogCWZwcmludGYoc3RkZXJyLCAiY2FjaGUtdHJlZSBpbnZhbGlkYXRlIDwlcz5cbiIsIHBhdGgpOwogI2VuZGlmCiAKQEAgLTM5OCw3ICszOTgsNyBAQAogCQlzdHJidWZfYWRkZigmYnVmZmVyLCAiJW8gJS4qcyVjIiwgbW9kZSwgZW50bGVuLCBwYXRoICsgYmFzZWxlbiwgJ1wwJyk7CiAJCXN0cmJ1Zl9hZGQoJmJ1ZmZlciwgb2lkLT5oYXNoLCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7CiAKLSNpZiBERUJVRworI2lmIERFQlVHX0NBQ0hFX1RSRUUKIAkJZnByaW50ZihzdGRlcnIsICJjYWNoZS10cmVlIHVwZGF0ZS1vbmUgJW8gJS4qc1xuIiwKIAkJCW1vZGUsIGVudGxlbiwgcGF0aCArIGJhc2VsZW4pOwogI2VuZGlmCkBAIC00MjEsNyArNDIxLDcgQEAKIAogCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwogCWl0LT5lbnRyeV9jb3VudCA9IHRvX2ludmFsaWRhdGUgPyAtMSA6IGkgLSAqc2tpcF9jb3VudDsKLSNpZiBERUJVRworI2lmIERFQlVHX0NBQ0hFX1RSRUUKIAlmcHJpbnRmKHN0ZGVyciwgImNhY2hlLXRyZWUgdXBkYXRlLW9uZSAoJWQgZW50LCAlZCBzdWJ0cmVlKSAlc1xuIiwKIAkJaXQtPmVudHJ5X2NvdW50LCBpdC0+c3VidHJlZV9uciwKIAkJb2lkX3RvX2hleCgmaXQtPm9pZCkpOwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJc3RyYnVmX2FkZChidWZmZXIsIHBhdGgsIHBhdGhsZW4pOwogCXN0cmJ1Zl9hZGRmKGJ1ZmZlciwgIiVjJWQgJWRcbiIsIDAsIGl0LT5lbnRyeV9jb3VudCwgaXQtPnN1YnRyZWVfbnIpOwogCi0jaWYgREVCVUcKKyNpZiBERUJVR19DQUNIRV9UUkVFCiAJaWYgKDAgPD0gaXQtPmVudHJ5X2NvdW50KQogCQlmcHJpbnRmKHN0ZGVyciwgImNhY2hlLXRyZWUgPCUuKnM+ICglZCBlbnQsICVkIHN1YnRyZWUpICVzXG4iLAogCQkJcGF0aGxlbiwgcGF0aCwgaXQtPmVudHJ5X2NvdW50LCBpdC0+c3VidHJlZV9uciwKQEAgLTUzNiw3ICs1MzYsNyBAQAogCQlzaXplIC09IHJhd3N6OwogCX0KIAotI2lmIERFQlVHCisjaWYgREVCVUdfQ0FDSEVfVFJFRQogCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCkKIAkJZnByaW50ZihzdGRlcnIsICJjYWNoZS10cmVlIDwlcz4gKCVkIGVudCwgJWQgc3VidHJlZSkgJXNcbiIsCiAJCQkqYnVmZmVyLCBpdC0+ZW50cnlfY291bnQsIHN1YnRyZWVfbnIsCmRpZmYgLS1naXQgYS9jYWNoZS5oIGIvY2FjaGUuaAppbmRleCBiZjIwMzM3Li5iMWRhMWFiIDEwMDY0NAotLS0gYS9jYWNoZS5oCisrKyBiL2NhY2hlLmgKQEAgLTQzLDMwICs0Myw2IEBACiBpbnQgZ2l0X2RlZmxhdGUoZ2l0X3pzdHJlYW0gKiwgaW50IGZsdXNoKTsKIHVuc2lnbmVkIGxvbmcgZ2l0X2RlZmxhdGVfYm91bmQoZ2l0X3pzdHJlYW0gKiwgdW5zaWduZWQgbG9uZyk7CiAKLS8qIFRoZSBsZW5ndGggaW4gYnl0ZXMgYW5kIGluIGhleCBkaWdpdHMgb2YgYW4gb2JqZWN0IG5hbWUgKFNIQS0xIHZhbHVlKS4gKi8KLSNkZWZpbmUgR0lUX1NIQTFfUkFXU1ogMjAKLSNkZWZpbmUgR0lUX1NIQTFfSEVYU1ogKDIgKiBHSVRfU0hBMV9SQVdTWikKLS8qIFRoZSBibG9jayBzaXplIG9mIFNIQS0xLiAqLwotI2RlZmluZSBHSVRfU0hBMV9CTEtTWiA2NAotCi0vKiBUaGUgbGVuZ3RoIGluIGJ5dGVzIGFuZCBpbiBoZXggZGlnaXRzIG9mIGFuIG9iamVjdCBuYW1lIChTSEEtMjU2IHZhbHVlKS4gKi8KLSNkZWZpbmUgR0lUX1NIQTI1Nl9SQVdTWiAzMgotI2RlZmluZSBHSVRfU0hBMjU2X0hFWFNaICgyICogR0lUX1NIQTI1Nl9SQVdTWikKLS8qIFRoZSBibG9jayBzaXplIG9mIFNIQS0yNTYuICovCi0jZGVmaW5lIEdJVF9TSEEyNTZfQkxLU1ogNjQKLQotLyogVGhlIGxlbmd0aCBpbiBieXRlIGFuZCBpbiBoZXggZGlnaXRzIG9mIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGhhc2ggdmFsdWUuICovCi0jZGVmaW5lIEdJVF9NQVhfUkFXU1ogR0lUX1NIQTI1Nl9SQVdTWgotI2RlZmluZSBHSVRfTUFYX0hFWFNaIEdJVF9TSEEyNTZfSEVYU1oKLS8qIFRoZSBsYXJnZXN0IHBvc3NpYmxlIGJsb2NrIHNpemUgZm9yIGFueSBzdXBwb3J0ZWQgaGFzaC4gKi8KLSNkZWZpbmUgR0lUX01BWF9CTEtTWiBHSVRfU0hBMjU2X0JMS1NaCi0KLXN0cnVjdCBvYmplY3RfaWQgewotCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXTsKLX07Ci0KLSNkZWZpbmUgdGhlX2hhc2hfYWxnbyB0aGVfcmVwb3NpdG9yeS0+aGFzaF9hbGdvCi0KICNpZiBkZWZpbmVkKERUX1VOS05PV04pICYmICFkZWZpbmVkKE5PX0RfVFlQRV9JTl9ESVJFTlQpCiAjZGVmaW5lIERUWVBFKGRlKQkoKGRlKS0+ZF90eXBlKQogI2Vsc2UKQEAgLTE1MDAsNyArMTQ3Niw4IEBACiBpbnQgbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqbmFtZTIsIHNpemVfdCBsZW4yKTsKIGludCBjYWNoZV9uYW1lX3N0YWdlX2NvbXBhcmUoY29uc3QgY2hhciAqbmFtZTEsIGludCBsZW4xLCBpbnQgc3RhZ2UxLCBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBzdGFnZTIpOwogCi12b2lkICpyZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCit2b2lkICpyZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAogCQkJCSBjb25zdCBjaGFyICpyZXF1aXJlZF90eXBlLAogCQkJCSB1bnNpZ25lZCBsb25nICpzaXplLAogCQkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRfcmV0KTsKQEAgLTE3NTksNiArMTczNiw3IEBACiBpbnQgcGFnZXJfaW5fdXNlKHZvaWQpOwogZXh0ZXJuIGludCBwYWdlcl91c2VfY29sb3I7CiBpbnQgdGVybV9jb2x1bW5zKHZvaWQpOwordm9pZCB0ZXJtX2NsZWFyX2xpbmUodm9pZCk7CiBpbnQgZGVjaW1hbF93aWR0aCh1aW50bWF4X3QpOwogaW50IGNoZWNrX3BhZ2VyX2NvbmZpZyhjb25zdCBjaGFyICpjbWQpOwogdm9pZCBwcmVwYXJlX3BhZ2VyX2FyZ3Moc3RydWN0IGNoaWxkX3Byb2Nlc3MgKiwgY29uc3QgY2hhciAqcGFnZXIpOwpAQCAtMTc4NSw4ICsxNzYzLDggQEAKIGV4dGVybiBpbnQgZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXg7CiAKIC8qIG1hdGNoLXRyZWVzLmMgKi8KLXZvaWQgc2hpZnRfdHJlZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgc3RydWN0IG9iamVjdF9pZCAqLCBpbnQpOwotdm9pZCBzaGlmdF90cmVlX2J5KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGNvbnN0IGNoYXIgKik7Cit2b2lkIHNoaWZ0X3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIHN0cnVjdCBvYmplY3RfaWQgKiwgaW50KTsKK3ZvaWQgc2hpZnRfdHJlZV9ieShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgc3RydWN0IG9iamVjdF9pZCAqLCBjb25zdCBjaGFyICopOwogCiAvKgogICogd2hpdGVzcGFjZSBydWxlcy4KZGlmZiAtLWdpdCBhL2NpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoIGIvY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2gKaW5kZXggN2Y2YWNkZC4uOGNjNzI1MCAxMDA3NTUKLS0tIGEvY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2gKKysrIGIvY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2gKQEAgLTM0LDcgKzM0LDcgQEAKIAlwb3BkCiAJOzsKIG9zeC1jbGFuZ3xvc3gtZ2NjKQotCWJyZXcgdXBkYXRlID4vZGV2L251bGwKKwlleHBvcnQgSE9NRUJSRVdfTk9fQVVUT19VUERBVEU9MSBIT01FQlJFV19OT19JTlNUQUxMX0NMRUFOVVA9MQogCSMgVW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gcnVuIHBlcmYgdGVzdHM6CiAJIyBicmV3IGluc3RhbGwgZ251LXRpbWUKIAl0ZXN0IC16ICIkQlJFV19JTlNUQUxMX1BBQ0tBR0VTIiB8fApkaWZmIC0tZ2l0IGEvY2kvbGliLnNoIGIvY2kvbGliLnNoCmluZGV4IDI4OGE1YjMuLjQ0ZGIyZDUgMTAwNzU1Ci0tLSBhL2NpL2xpYi5zaAorKysgYi9jaS9saWIuc2gKQEAgLTE2Myw4ICsxNjMsMTAgQEAKIAlleHBvcnQgR0lUX1RFU1RfSFRUUEQ9WWVzUGxlYXNlCiAKIAkjIFRoZSBMaW51eCBidWlsZCBpbnN0YWxscyB0aGUgZGVmaW5lZCBkZXBlbmRlbmN5IHZlcnNpb25zIGJlbG93LgotCSMgVGhlIE9TIFggYnVpbGQgaW5zdGFsbHMgdGhlIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbnMuIEtlZXAgdGhhdAotCSMgaW4gbWluZCB3aGVuIHlvdSBlbmNvdW50ZXIgYSBicm9rZW4gT1MgWCBidWlsZCEKKwkjIFRoZSBPUyBYIGJ1aWxkIGluc3RhbGxzIG11Y2ggbW9yZSByZWNlbnQgdmVyc2lvbnMsIHdoaWNoZXZlcgorCSMgd2VyZSByZWNvcmRlZCBpbiB0aGUgSG9tZWJyZXcgZGF0YWJhc2UgdXBvbiBjcmVhdGluZyB0aGUgT1MgWAorCSMgaW1hZ2UuCisJIyBLZWVwIHRoYXQgaW4gbWluZCB3aGVuIHlvdSBlbmNvdW50ZXIgYSBicm9rZW4gT1MgWCBidWlsZCEKIAlleHBvcnQgTElOVVhfUDRfVkVSU0lPTj0iMTYuMiIKIAlleHBvcnQgTElOVVhfR0lUX0xGU19WRVJTSU9OPSIxLjUuMiIKIApAQCAtMTg0LDcgKzE4Niw3IEBACiAJZXhwb3J0IEdJVF9TS0lQX1RFU1RTPSJ0OTgxMCB0OTgxNiIKIAk7OwogR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04pCi0JZXhwb3J0IEdJVF9URVNUX0dFVFRFWFRfUE9JU09OPVllc1BsZWFzZQorCWV4cG9ydCBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj10cnVlCiAJOzsKIGVzYWMKIApkaWZmIC0tZ2l0IGEvY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaCBiL2NpL3J1bi1idWlsZC1hbmQtdGVzdHMuc2gKaW5kZXggY2RkMjkxMy4uZmYwZWY3ZiAxMDA3NTUKLS0tIGEvY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaAorKysgYi9jaS9ydW4tYnVpbGQtYW5kLXRlc3RzLnNoCkBAIC0xMSw5ICsxMSw5IEBACiBlc2FjCiAKIG1ha2UKLW1ha2UgdGVzdAotaWYgdGVzdCAiJGpvYm5hbWUiID0gImxpbnV4LWdjYyIKLXRoZW4KK2Nhc2UgIiRqb2JuYW1lIiBpbgorbGludXgtZ2NjKQorCW1ha2UgdGVzdAogCWV4cG9ydCBHSVRfVEVTVF9TUExJVF9JTkRFWD15ZXMKIAlleHBvcnQgR0lUX1RFU1RfRlVMTF9JTl9QQUNLX0FSUkFZPXRydWUKIAlleHBvcnQgR0lUX1RFU1RfT0VfU0laRT0xMApAQCAtMjEsNyArMjEsMTYgQEAKIAlleHBvcnQgR0lUX1RFU1RfQ09NTUlUX0dSQVBIPTEKIAlleHBvcnQgR0lUX1RFU1RfTVVMVElfUEFDS19JTkRFWD0xCiAJbWFrZSB0ZXN0Ci1maQorCTs7CitsaW51eC1nY2MtNC44KQorCSMgRG9uJ3QgcnVuIHRoZSB0ZXN0czsgd2Ugb25seSBjYXJlIGFib3V0IHdoZXRoZXIgR2l0IGNhbiBiZQorCSMgYnVpbHQgd2l0aCBHQ0MgNC44LCBhcyBpdCBlcnJvcnMgb3V0IG9uIHNvbWUgdW5kZXNpcmVkIChDOTkpCisJIyBjb25zdHJ1Y3RzIHRoYXQgbmV3ZXIgY29tcGlsZXJzIHNlZW0gdG8gcXVpZXRseSBhY2NlcHQuCisJOzsKKyopCisJbWFrZSB0ZXN0CisJOzsKK2VzYWMKIAogY2hlY2tfdW5pZ25vcmVkX2J1aWxkX2FydGlmYWN0cwogCmRpZmYgLS1naXQgYS9jb21tYW5kLWxpc3QudHh0IGIvY29tbWFuZC1saXN0LnR4dAppbmRleCAzYTlhZjEwLi5hOWFjNzJiIDEwMDY0NAotLS0gYS9jb21tYW5kLWxpc3QudHh0CisrKyBiL2NvbW1hbmQtbGlzdC50eHQKQEAgLTU5LDcgKzU5LDcgQEAKIGdpdC1jaGVjay1hdHRyICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycwogZ2l0LWNoZWNrLWlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCiBnaXQtY2hlY2stbWFpbG1hcCAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKLWdpdC1jaGVja291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBoaXN0b3J5CitnaXQtY2hlY2tvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgogZ2l0LWNoZWNrb3V0LWluZGV4ICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCiBnaXQtY2hlY2stcmVmLWZvcm1hdCAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKIGdpdC1jaGVycnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMgICAgICAgICAgY29tcGxldGUKQEAgLTgxLDcgKzgxLDcgQEAKIGdpdC1jdnNzZXJ2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCiBnaXQtZGFlbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hpbmdyZXBvc2l0b3JpZXMKIGdpdC1kZXNjcmliZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCi1naXQtZGlmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LWRpZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGluZm8KIGdpdC1kaWZmLWZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKIGdpdC1kaWZmLWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKIGdpdC1kaWZmLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKQEAgLTE1MCw3ICsxNTAsOCBAQAogZ2l0LXJlcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycyAgICAgICAgICAgY29tcGxldGUKIGdpdC1yZXF1ZXN0LXB1bGwgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlICAgICAgICAgICAgIGNvbXBsZXRlCiBnaXQtcmVyZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycwotZ2l0LXJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHdvcmt0cmVlCitnaXQtcmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LXJlc3RvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHdvcmt0cmVlCiBnaXQtcmV2ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgogZ2l0LXJldi1saXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycwogZ2l0LXJldi1wYXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycwpAQCAtMTcxLDYgKzE3Miw3IEBACiBnaXQtc3RyaXBzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKIGdpdC1zdWJtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCiBnaXQtc3ZuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LXN3aXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGhpc3RvcnkKIGdpdC1zeW1ib2xpYy1yZWYgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycwogZ2l0LXRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGhpc3RvcnkKIGdpdC11bnBhY2stZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKZGlmZiAtLWdpdCBhL2NvbW1pdC1ncmFwaC5jIGIvY29tbWl0LWdyYXBoLmMKaW5kZXggN2M1ZTU0OC4uYjNjNGRlNyAxMDA2NDQKLS0tIGEvY29tbWl0LWdyYXBoLmMKKysrIGIvY29tbWl0LWdyYXBoLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgR1JBUEhfQ0hVTktJRF9PSURMT09LVVAgMHg0ZjQ5NDQ0YyAvKiAiT0lETCIgKi8KICNkZWZpbmUgR1JBUEhfQ0hVTktJRF9EQVRBIDB4NDM0NDQxNTQgLyogIkNEQVQiICovCiAjZGVmaW5lIEdSQVBIX0NIVU5LSURfRVhUUkFFREdFUyAweDQ1NDQ0NzQ1IC8qICJFREdFIiAqLworI2RlZmluZSBHUkFQSF9DSFVOS0lEX0JBU0UgMHg0MjQxNTM0NSAvKiAiQkFTRSIgKi8KIAogI2RlZmluZSBHUkFQSF9EQVRBX1dJRFRIICh0aGVfaGFzaF9hbGdvLT5yYXdzeiArIDE2KQogCkBAIC00Miw3ICs0MywyOCBAQAogCiBjaGFyICpnZXRfY29tbWl0X2dyYXBoX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKm9ial9kaXIpCiB7Ci0JcmV0dXJuIHhzdHJmbXQoIiVzL2luZm8vY29tbWl0LWdyYXBoIiwgb2JqX2Rpcik7CisJY2hhciAqZmlsZW5hbWUgPSB4c3RyZm10KCIlcy9pbmZvL2NvbW1pdC1ncmFwaCIsIG9ial9kaXIpOworCWNoYXIgKm5vcm1hbGl6ZWQgPSB4bWFsbG9jKHN0cmxlbihmaWxlbmFtZSkgKyAxKTsKKwlub3JtYWxpemVfcGF0aF9jb3B5KG5vcm1hbGl6ZWQsIGZpbGVuYW1lKTsKKwlmcmVlKGZpbGVuYW1lKTsKKwlyZXR1cm4gbm9ybWFsaXplZDsKK30KKworc3RhdGljIGNoYXIgKmdldF9zcGxpdF9ncmFwaF9maWxlbmFtZShjb25zdCBjaGFyICpvYmpfZGlyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm9pZF9oZXgpCit7CisJY2hhciAqZmlsZW5hbWUgPSB4c3RyZm10KCIlcy9pbmZvL2NvbW1pdC1ncmFwaHMvZ3JhcGgtJXMuZ3JhcGgiLAorCQkJCSBvYmpfZGlyLAorCQkJCSBvaWRfaGV4KTsKKwljaGFyICpub3JtYWxpemVkID0geG1hbGxvYyhzdHJsZW4oZmlsZW5hbWUpICsgMSk7CisJbm9ybWFsaXplX3BhdGhfY29weShub3JtYWxpemVkLCBmaWxlbmFtZSk7CisJZnJlZShmaWxlbmFtZSk7CisJcmV0dXJuIG5vcm1hbGl6ZWQ7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfY2hhaW5fZmlsZW5hbWUoY29uc3QgY2hhciAqb2JqX2RpcikKK3sKKwlyZXR1cm4geHN0cmZtdCgiJXMvaW5mby9jb21taXQtZ3JhcGhzL2NvbW1pdC1ncmFwaC1jaGFpbiIsIG9ial9kaXIpOwogfQogCiBzdGF0aWMgdWludDhfdCBvaWRfdmVyc2lvbih2b2lkKQpAQCAtMjQ5LDYgKzI3MSwxMiBAQAogCQkJZWxzZQogCQkJCWdyYXBoLT5jaHVua19leHRyYV9lZGdlcyA9IGRhdGEgKyBjaHVua19vZmZzZXQ7CiAJCQlicmVhazsKKworCQljYXNlIEdSQVBIX0NIVU5LSURfQkFTRToKKwkJCWlmIChncmFwaC0+Y2h1bmtfYmFzZV9ncmFwaHMpCisJCQkJY2h1bmtfcmVwZWF0ZWQgPSAxOworCQkJZWxzZQorCQkJCWdyYXBoLT5jaHVua19iYXNlX2dyYXBocyA9IGRhdGEgKyBjaHVua19vZmZzZXQ7CiAJCX0KIAogCQlpZiAoY2h1bmtfcmVwZWF0ZWQpIHsKQEAgLTI2Nyw2ICsyOTUsOCBAQAogCQlsYXN0X2NodW5rX29mZnNldCA9IGNodW5rX29mZnNldDsKIAl9CiAKKwloYXNoY3B5KGdyYXBoLT5vaWQuaGFzaCwgZ3JhcGgtPmRhdGEgKyBncmFwaC0+ZGF0YV9sZW4gLSBncmFwaC0+aGFzaF9sZW4pOworCiAJaWYgKHZlcmlmeV9jb21taXRfZ3JhcGhfbGl0ZShncmFwaCkpIHsKIAkJZnJlZShncmFwaCk7CiAJCXJldHVybiBOVUxMOwpAQCAtMjgwLDI2ICszMTAsMTUxIEBACiAKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlpbnQgZmQ7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqZzsKIAlpbnQgb3Blbl9vayA9IG9wZW5fY29tbWl0X2dyYXBoKGdyYXBoX2ZpbGUsICZmZCwgJnN0KTsKIAogCWlmICghb3Blbl9vaykKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gbG9hZF9jb21taXRfZ3JhcGhfb25lX2ZkX3N0KGZkLCAmc3QpOworCWcgPSBsb2FkX2NvbW1pdF9ncmFwaF9vbmVfZmRfc3QoZmQsICZzdCk7CisKKwlpZiAoZykKKwkJZy0+ZmlsZW5hbWUgPSB4c3RyZHVwKGdyYXBoX2ZpbGUpOworCisJcmV0dXJuIGc7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2dyYXBoICpsb2FkX2NvbW1pdF9ncmFwaF92MShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqX2RpcikKK3sKKwljaGFyICpncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShvYmpfZGlyKTsKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnID0gbG9hZF9jb21taXRfZ3JhcGhfb25lKGdyYXBoX25hbWUpOworCWZyZWUoZ3JhcGhfbmFtZSk7CisKKwlpZiAoZykKKwkJZy0+b2JqX2RpciA9IG9ial9kaXI7CisKKwlyZXR1cm4gZzsKK30KKworc3RhdGljIGludCBhZGRfZ3JhcGhfdG9fY2hhaW4oc3RydWN0IGNvbW1pdF9ncmFwaCAqZywKKwkJCSAgICAgIHN0cnVjdCBjb21taXRfZ3JhcGggKmNoYWluLAorCQkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkcywKKwkJCSAgICAgIGludCBuKQoreworCXN0cnVjdCBjb21taXRfZ3JhcGggKmN1cl9nID0gY2hhaW47CisKKwlpZiAobiAmJiAhZy0+Y2h1bmtfYmFzZV9ncmFwaHMpIHsKKwkJd2FybmluZyhfKCJjb21taXQtZ3JhcGggaGFzIG5vIGJhc2UgZ3JhcGhzIGNodW5rIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAobikgeworCQluLS07CisKKwkJaWYgKCFjdXJfZyB8fAorCQkgICAgIW9pZGVxKCZvaWRzW25dLCAmY3VyX2ctPm9pZCkgfHwKKwkJICAgICFoYXNoZXEob2lkc1tuXS5oYXNoLCBnLT5jaHVua19iYXNlX2dyYXBocyArIGctPmhhc2hfbGVuICogbikpIHsKKwkJCXdhcm5pbmcoXygiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIikpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQljdXJfZyA9IGN1cl9nLT5iYXNlX2dyYXBoOworCX0KKworCWctPmJhc2VfZ3JhcGggPSBjaGFpbjsKKworCWlmIChjaGFpbikKKwkJZy0+bnVtX2NvbW1pdHNfaW5fYmFzZSA9IGNoYWluLT5udW1fY29tbWl0cyArIGNoYWluLT5udW1fY29tbWl0c19pbl9iYXNlOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2dyYXBoICpsb2FkX2NvbW1pdF9ncmFwaF9jaGFpbihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqX2RpcikKK3sKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpncmFwaF9jaGFpbiA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkczsKKwlpbnQgaSA9IDAsIHZhbGlkID0gMSwgY291bnQ7CisJY2hhciAqY2hhaW5fbmFtZSA9IGdldF9jaGFpbl9maWxlbmFtZShvYmpfZGlyKTsKKwlGSUxFICpmcDsKKwlpbnQgc3RhdF9yZXM7CisKKwlmcCA9IGZvcGVuKGNoYWluX25hbWUsICJyIik7CisJc3RhdF9yZXMgPSBzdGF0KGNoYWluX25hbWUsICZzdCk7CisJZnJlZShjaGFpbl9uYW1lKTsKKworCWlmICghZnAgfHwKKwkgICAgc3RhdF9yZXMgfHwKKwkgICAgc3Quc3Rfc2l6ZSA8PSB0aGVfaGFzaF9hbGdvLT5oZXhzeikKKwkJcmV0dXJuIE5VTEw7CisKKwljb3VudCA9IHN0LnN0X3NpemUgLyAodGhlX2hhc2hfYWxnby0+aGV4c3ogKyAxKTsKKwlvaWRzID0geGNhbGxvYyhjb3VudCwgc2l6ZW9mKHN0cnVjdCBvYmplY3RfaWQpKTsKKworCXByZXBhcmVfYWx0X29kYihyKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGI7CisKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZsaW5lLCBmcCkgPT0gRU9GKQorCQkJYnJlYWs7CisKKwkJaWYgKGdldF9vaWRfaGV4KGxpbmUuYnVmLCAmb2lkc1tpXSkpIHsKKwkJCXdhcm5pbmcoXygiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIiksCisJCQkJbGluZS5idWYpOworCQkJdmFsaWQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQl2YWxpZCA9IDA7CisJCWZvciAob2RiID0gci0+b2JqZWN0cy0+b2RiOyBvZGI7IG9kYiA9IG9kYi0+bmV4dCkgeworCQkJY2hhciAqZ3JhcGhfbmFtZSA9IGdldF9zcGxpdF9ncmFwaF9maWxlbmFtZShvZGItPnBhdGgsIGxpbmUuYnVmKTsKKwkJCXN0cnVjdCBjb21taXRfZ3JhcGggKmcgPSBsb2FkX2NvbW1pdF9ncmFwaF9vbmUoZ3JhcGhfbmFtZSk7CisKKwkJCWZyZWUoZ3JhcGhfbmFtZSk7CisKKwkJCWlmIChnKSB7CisJCQkJZy0+b2JqX2RpciA9IG9kYi0+cGF0aDsKKworCQkJCWlmIChhZGRfZ3JhcGhfdG9fY2hhaW4oZywgZ3JhcGhfY2hhaW4sIG9pZHMsIGkpKSB7CisJCQkJCWdyYXBoX2NoYWluID0gZzsKKwkJCQkJdmFsaWQgPSAxOworCQkJCX0KKworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCF2YWxpZCkgeworCQkJd2FybmluZyhfKCJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIikpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlmcmVlKG9pZHMpOworCWZjbG9zZShmcCk7CisKKwlyZXR1cm4gZ3JhcGhfY2hhaW47Cit9CisKK3N0cnVjdCBjb21taXRfZ3JhcGggKnJlYWRfY29tbWl0X2dyYXBoX29uZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqX2RpcikKK3sKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnID0gbG9hZF9jb21taXRfZ3JhcGhfdjEociwgb2JqX2Rpcik7CisKKwlpZiAoIWcpCisJCWcgPSBsb2FkX2NvbW1pdF9ncmFwaF9jaGFpbihyLCBvYmpfZGlyKTsKKworCXJldHVybiBnOwogfQogCiBzdGF0aWMgdm9pZCBwcmVwYXJlX2NvbW1pdF9ncmFwaF9vbmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9ial9kaXIpCiB7Ci0JY2hhciAqZ3JhcGhfbmFtZTsKIAogCWlmIChyLT5vYmplY3RzLT5jb21taXRfZ3JhcGgpCiAJCXJldHVybjsKIAotCWdyYXBoX25hbWUgPSBnZXRfY29tbWl0X2dyYXBoX2ZpbGVuYW1lKG9ial9kaXIpOwotCXItPm9iamVjdHMtPmNvbW1pdF9ncmFwaCA9Ci0JCWxvYWRfY29tbWl0X2dyYXBoX29uZShncmFwaF9uYW1lKTsKLQotCUZSRUVfQU5EX05VTEwoZ3JhcGhfbmFtZSk7CisJci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoID0gcmVhZF9jb21taXRfZ3JhcGhfb25lKHIsIG9ial9kaXIpOwogfQogCiAvKgpAQCAtMzYxLDEwICs1MTYsMTkgQEAKIAlyZXR1cm4gISFmaXJzdF9nZW5lcmF0aW9uOwogfQogCi12b2lkIGNsb3NlX2NvbW1pdF9ncmFwaChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3N0YXRpYyB2b2lkIGNsb3NlX2NvbW1pdF9ncmFwaF9vbmUoc3RydWN0IGNvbW1pdF9ncmFwaCAqZykKIHsKLQlmcmVlX2NvbW1pdF9ncmFwaChyLT5vYmplY3RzLT5jb21taXRfZ3JhcGgpOwotCXItPm9iamVjdHMtPmNvbW1pdF9ncmFwaCA9IE5VTEw7CisJaWYgKCFnKQorCQlyZXR1cm47CisKKwljbG9zZV9jb21taXRfZ3JhcGhfb25lKGctPmJhc2VfZ3JhcGgpOworCWZyZWVfY29tbWl0X2dyYXBoKGcpOworfQorCit2b2lkIGNsb3NlX2NvbW1pdF9ncmFwaChzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSAqbykKK3sKKwljbG9zZV9jb21taXRfZ3JhcGhfb25lKG8tPmNvbW1pdF9ncmFwaCk7CisJby0+Y29tbWl0X2dyYXBoID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBic2VhcmNoX2dyYXBoKHN0cnVjdCBjb21taXRfZ3JhcGggKmcsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdWludDMyX3QgKnBvcykKQEAgLTM3MywxOCArNTM3LDM4IEBACiAJCQkgICAgZy0+Y2h1bmtfb2lkX2xvb2t1cCwgZy0+aGFzaF9sZW4sIHBvcyk7CiB9CiAKK3N0YXRpYyB2b2lkIGxvYWRfb2lkX2Zyb21fZ3JhcGgoc3RydWN0IGNvbW1pdF9ncmFwaCAqZywKKwkJCQl1aW50MzJfdCBwb3MsCisJCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXVpbnQzMl90IGxleF9pbmRleDsKKworCXdoaWxlIChnICYmIHBvcyA8IGctPm51bV9jb21taXRzX2luX2Jhc2UpCisJCWcgPSBnLT5iYXNlX2dyYXBoOworCisJaWYgKCFnKQorCQlCVUcoIk5VTEwgY29tbWl0LWdyYXBoIik7CisKKwlpZiAocG9zID49IGctPm51bV9jb21taXRzICsgZy0+bnVtX2NvbW1pdHNfaW5fYmFzZSkKKwkJZGllKF8oImludmFsaWQgY29tbWl0IHBvc2l0aW9uLiBjb21taXQtZ3JhcGggaXMgbGlrZWx5IGNvcnJ1cHQiKSk7CisKKwlsZXhfaW5kZXggPSBwb3MgLSBnLT5udW1fY29tbWl0c19pbl9iYXNlOworCisJaGFzaGNweShvaWQtPmhhc2gsIGctPmNodW5rX29pZF9sb29rdXAgKyBnLT5oYXNoX2xlbiAqIGxleF9pbmRleCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKippbnNlcnRfcGFyZW50X29yX2RpZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKIAkJCQkJCSBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLAotCQkJCQkJIHVpbnQ2NF90IHBvcywKKwkJCQkJCSB1aW50MzJfdCBwb3MsCiAJCQkJCQkgc3RydWN0IGNvbW1pdF9saXN0ICoqcHB0cikKIHsKIAlzdHJ1Y3QgY29tbWl0ICpjOwogCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogCi0JaWYgKHBvcyA+PSBnLT5udW1fY29tbWl0cykKLQkJZGllKCJpbnZhbGlkIHBhcmVudCBwb3NpdGlvbiAlIlBSSXU2NCwgcG9zKTsKKwlpZiAocG9zID49IGctPm51bV9jb21taXRzICsgZy0+bnVtX2NvbW1pdHNfaW5fYmFzZSkKKwkJZGllKCJpbnZhbGlkIHBhcmVudCBwb3NpdGlvbiAlIlBSSXUzMiwgcG9zKTsKIAotCWhhc2hjcHkob2lkLmhhc2gsIGctPmNodW5rX29pZF9sb29rdXAgKyBnLT5oYXNoX2xlbiAqIHBvcyk7CisJbG9hZF9vaWRfZnJvbV9ncmFwaChnLCBwb3MsICZvaWQpOwogCWMgPSBsb29rdXBfY29tbWl0KHIsICZvaWQpOwogCWlmICghYykKIAkJZGllKF8oImNvdWxkIG5vdCBmaW5kIGNvbW1pdCAlcyIpLCBvaWRfdG9faGV4KCZvaWQpKTsKQEAgLTM5NCw3ICs1NzgsMTQgQEAKIAogc3RhdGljIHZvaWQgZmlsbF9jb21taXRfZ3JhcGhfaW5mbyhzdHJ1Y3QgY29tbWl0ICppdGVtLCBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLCB1aW50MzJfdCBwb3MpCiB7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X2RhdGEgPSBnLT5jaHVua19jb21taXRfZGF0YSArIEdSQVBIX0RBVEFfV0lEVEggKiBwb3M7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X2RhdGE7CisJdWludDMyX3QgbGV4X2luZGV4OworCisJd2hpbGUgKHBvcyA8IGctPm51bV9jb21taXRzX2luX2Jhc2UpCisJCWcgPSBnLT5iYXNlX2dyYXBoOworCisJbGV4X2luZGV4ID0gcG9zIC0gZy0+bnVtX2NvbW1pdHNfaW5fYmFzZTsKKwljb21taXRfZGF0YSA9IGctPmNodW5rX2NvbW1pdF9kYXRhICsgR1JBUEhfREFUQV9XSURUSCAqIGxleF9pbmRleDsKIAlpdGVtLT5ncmFwaF9wb3MgPSBwb3M7CiAJaXRlbS0+Z2VuZXJhdGlvbiA9IGdldF9iZTMyKGNvbW1pdF9kYXRhICsgZy0+aGFzaF9sZW4gKyA4KSA+PiAyOwogfQpAQCAtNDEyLDEwICs2MDMsMjUgQEAKIAl1aW50MzJfdCAqcGFyZW50X2RhdGFfcHRyOwogCXVpbnQ2NF90IGRhdGVfbG93LCBkYXRlX2hpZ2g7CiAJc3RydWN0IGNvbW1pdF9saXN0ICoqcHB0cjsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpjb21taXRfZGF0YSA9IGctPmNodW5rX2NvbW1pdF9kYXRhICsgKGctPmhhc2hfbGVuICsgMTYpICogcG9zOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9kYXRhOworCXVpbnQzMl90IGxleF9pbmRleDsKKworCXdoaWxlIChwb3MgPCBnLT5udW1fY29tbWl0c19pbl9iYXNlKQorCQlnID0gZy0+YmFzZV9ncmFwaDsKKworCWlmIChwb3MgPj0gZy0+bnVtX2NvbW1pdHMgKyBnLT5udW1fY29tbWl0c19pbl9iYXNlKQorCQlkaWUoXygiaW52YWxpZCBjb21taXQgcG9zaXRpb24uIGNvbW1pdC1ncmFwaCBpcyBsaWtlbHkgY29ycnVwdCIpKTsKKworCS8qCisJICogU3RvcmUgdGhlICJmdWxsIiBwb3NpdGlvbiwgYnV0IHRoZW4gdXNlIHRoZQorCSAqICJsb2NhbCIgcG9zaXRpb24gZm9yIHRoZSByZXN0IG9mIHRoZSBjYWxjdWxhdGlvbi4KKwkgKi8KKwlpdGVtLT5ncmFwaF9wb3MgPSBwb3M7CisJbGV4X2luZGV4ID0gcG9zIC0gZy0+bnVtX2NvbW1pdHNfaW5fYmFzZTsKKworCWNvbW1pdF9kYXRhID0gZy0+Y2h1bmtfY29tbWl0X2RhdGEgKyAoZy0+aGFzaF9sZW4gKyAxNikgKiBsZXhfaW5kZXg7CiAKIAlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKLQlpdGVtLT5ncmFwaF9wb3MgPSBwb3M7CiAKIAlzZXRfY29tbWl0X3RyZWUoaXRlbSwgTlVMTCk7CiAKQEAgLTQ1OSw3ICs2NjUsMTggQEAKIAkJKnBvcyA9IGl0ZW0tPmdyYXBoX3BvczsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIGJzZWFyY2hfZ3JhcGgoZywgJihpdGVtLT5vYmplY3Qub2lkKSwgcG9zKTsKKwkJc3RydWN0IGNvbW1pdF9ncmFwaCAqY3VyX2cgPSBnOworCQl1aW50MzJfdCBsZXhfaW5kZXg7CisKKwkJd2hpbGUgKGN1cl9nICYmICFic2VhcmNoX2dyYXBoKGN1cl9nLCAmKGl0ZW0tPm9iamVjdC5vaWQpLCAmbGV4X2luZGV4KSkKKwkJCWN1cl9nID0gY3VyX2ctPmJhc2VfZ3JhcGg7CisKKwkJaWYgKGN1cl9nKSB7CisJCQkqcG9zID0gbGV4X2luZGV4ICsgY3VyX2ctPm51bV9jb21taXRzX2luX2Jhc2U7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCXJldHVybiAwOwogCX0KIH0KIApAQCAtNDk5LDggKzcxNiwxMyBAQAogCQkJCQkgc3RydWN0IGNvbW1pdCAqYykKIHsKIAlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpjb21taXRfZGF0YSA9IGctPmNodW5rX2NvbW1pdF9kYXRhICsKLQkJCQkJICAgR1JBUEhfREFUQV9XSURUSCAqIChjLT5ncmFwaF9wb3MpOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9kYXRhOworCisJd2hpbGUgKGMtPmdyYXBoX3BvcyA8IGctPm51bV9jb21taXRzX2luX2Jhc2UpCisJCWcgPSBnLT5iYXNlX2dyYXBoOworCisJY29tbWl0X2RhdGEgPSBnLT5jaHVua19jb21taXRfZGF0YSArCisJCQlHUkFQSF9EQVRBX1dJRFRIICogKGMtPmdyYXBoX3BvcyAtIGctPm51bV9jb21taXRzX2luX2Jhc2UpOwogCiAJaGFzaGNweShvaWQuaGFzaCwgY29tbWl0X2RhdGEpOwogCXNldF9jb21taXRfdHJlZShjLCBsb29rdXBfdHJlZShyLCAmb2lkKSk7CkBAIC01MjUsMTQgKzc0Nyw1MSBAQAogCXJldHVybiBnZXRfY29tbWl0X3RyZWVfaW5fZ3JhcGhfb25lKHIsIHItPm9iamVjdHMtPmNvbW1pdF9ncmFwaCwgYyk7CiB9CiAKK3N0cnVjdCBwYWNrZWRfY29tbWl0X2xpc3QgeworCXN0cnVjdCBjb21taXQgKipsaXN0OworCWludCBucjsKKwlpbnQgYWxsb2M7Cit9OworCitzdHJ1Y3QgcGFja2VkX29pZF9saXN0IHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpsaXN0OworCWludCBucjsKKwlpbnQgYWxsb2M7Cit9OworCitzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyOworCWNoYXIgKm9ial9kaXI7CisJY2hhciAqZ3JhcGhfbmFtZTsKKwlzdHJ1Y3QgcGFja2VkX29pZF9saXN0IG9pZHM7CisJc3RydWN0IHBhY2tlZF9jb21taXRfbGlzdCBjb21taXRzOworCWludCBudW1fZXh0cmFfZWRnZXM7CisJdW5zaWduZWQgbG9uZyBhcHByb3hfbnJfb2JqZWN0czsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCWludCBwcm9ncmVzc19kb25lOworCXVpbnQ2NF90IHByb2dyZXNzX2NudDsKKworCWNoYXIgKmJhc2VfZ3JhcGhfbmFtZTsKKwlpbnQgbnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlOworCWludCBudW1fY29tbWl0X2dyYXBoc19hZnRlcjsKKwljaGFyICoqY29tbWl0X2dyYXBoX2ZpbGVuYW1lc19iZWZvcmU7CisJY2hhciAqKmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXI7CisJY2hhciAqKmNvbW1pdF9ncmFwaF9oYXNoX2FmdGVyOworCXVpbnQzMl90IG5ld19udW1fY29tbWl0c19pbl9iYXNlOworCXN0cnVjdCBjb21taXRfZ3JhcGggKm5ld19iYXNlX2dyYXBoOworCisJdW5zaWduZWQgYXBwZW5kOjEsCisJCSByZXBvcnRfcHJvZ3Jlc3M6MSwKKwkJIHNwbGl0OjE7CisKKwljb25zdCBzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMgKnNwbGl0X29wdHM7Cit9OworCiBzdGF0aWMgdm9pZCB3cml0ZV9ncmFwaF9jaHVua19mYW5vdXQoc3RydWN0IGhhc2hmaWxlICpmLAotCQkJCSAgICAgc3RydWN0IGNvbW1pdCAqKmNvbW1pdHMsCi0JCQkJICAgICBpbnQgbnJfY29tbWl0cywKLQkJCQkgICAgIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsCi0JCQkJICAgICB1aW50NjRfdCAqcHJvZ3Jlc3NfY250KQorCQkJCSAgICAgc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCiB7CiAJaW50IGksIGNvdW50ID0gMDsKLQlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IGNvbW1pdHM7CisJc3RydWN0IGNvbW1pdCAqKmxpc3QgPSBjdHgtPmNvbW1pdHMubGlzdDsKIAogCS8qCiAJICogV3JpdGUgdGhlIGZpcnN0LWxldmVsIHRhYmxlICh0aGUgbGlzdCBpcyBzb3J0ZWQsCkBAIC01NDAsMTAgKzc5OSwxMCBAQAogCSAqIGhhdmluZyB0byBkbyBlaWdodCBleHRyYSBiaW5hcnkgc2VhcmNoIGl0ZXJhdGlvbnMpLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQl3aGlsZSAoY291bnQgPCBucl9jb21taXRzKSB7CisJCXdoaWxlIChjb3VudCA8IGN0eC0+Y29tbWl0cy5ucikgewogCQkJaWYgKCgqbGlzdCktPm9iamVjdC5vaWQuaGFzaFswXSAhPSBpKQogCQkJCWJyZWFrOwotCQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKysqcHJvZ3Jlc3NfY250KTsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2NudCk7CiAJCQljb3VudCsrOwogCQkJbGlzdCsrOwogCQl9CkBAIC01NTMsMTQgKzgxMiwxMiBAQAogfQogCiBzdGF0aWMgdm9pZCB3cml0ZV9ncmFwaF9jaHVua19vaWRzKHN0cnVjdCBoYXNoZmlsZSAqZiwgaW50IGhhc2hfbGVuLAotCQkJCSAgIHN0cnVjdCBjb21taXQgKipjb21taXRzLCBpbnQgbnJfY29tbWl0cywKLQkJCQkgICBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLAotCQkJCSAgIHVpbnQ2NF90ICpwcm9ncmVzc19jbnQpCisJCQkJICAgc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCiB7Ci0Jc3RydWN0IGNvbW1pdCAqKmxpc3QgPSBjb21taXRzOworCXN0cnVjdCBjb21taXQgKipsaXN0ID0gY3R4LT5jb21taXRzLmxpc3Q7CiAJaW50IGNvdW50OwotCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG5yX2NvbW1pdHM7IGNvdW50KyssIGxpc3QrKykgewotCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArKypwcm9ncmVzc19jbnQpOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IGN0eC0+Y29tbWl0cy5ucjsgY291bnQrKywgbGlzdCsrKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2NudCk7CiAJCWhhc2h3cml0ZShmLCAoKmxpc3QpLT5vYmplY3Qub2lkLmhhc2gsIChpbnQpaGFzaF9sZW4pOwogCX0KIH0KQEAgLTU3MiwxOSArODI5LDE3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlX2dyYXBoX2NodW5rX2RhdGEoc3RydWN0IGhhc2hmaWxlICpmLCBpbnQgaGFzaF9sZW4sCi0JCQkJICAgc3RydWN0IGNvbW1pdCAqKmNvbW1pdHMsIGludCBucl9jb21taXRzLAotCQkJCSAgIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsCi0JCQkJICAgdWludDY0X3QgKnByb2dyZXNzX2NudCkKKwkJCQkgICBzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKIHsKLQlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IGNvbW1pdHM7Ci0Jc3RydWN0IGNvbW1pdCAqKmxhc3QgPSBjb21taXRzICsgbnJfY29tbWl0czsKKwlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IGN0eC0+Y29tbWl0cy5saXN0OworCXN0cnVjdCBjb21taXQgKipsYXN0ID0gY3R4LT5jb21taXRzLmxpc3QgKyBjdHgtPmNvbW1pdHMubnI7CiAJdWludDMyX3QgbnVtX2V4dHJhX2VkZ2VzID0gMDsKIAogCXdoaWxlIChsaXN0IDwgbGFzdCkgewogCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKIAkJaW50IGVkZ2VfdmFsdWU7CiAJCXVpbnQzMl90IHBhY2tlZERhdGVbMl07Ci0JCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrKnByb2dyZXNzX2NudCk7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2NudCk7CiAKIAkJcGFyc2VfY29tbWl0X25vX2dyYXBoKCpsaXN0KTsKIAkJaGFzaHdyaXRlKGYsIGdldF9jb21taXRfdHJlZV9vaWQoKmxpc3QpLT5oYXNoLCBoYXNoX2xlbik7CkBAIC01OTUsMTAgKzg1MCwyMCBAQAogCQkJZWRnZV92YWx1ZSA9IEdSQVBIX1BBUkVOVF9OT05FOwogCQllbHNlIHsKIAkJCWVkZ2VfdmFsdWUgPSBzaGExX3BvcyhwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQuaGFzaCwKLQkJCQkJICAgICAgY29tbWl0cywKLQkJCQkJICAgICAgbnJfY29tbWl0cywKKwkJCQkJICAgICAgY3R4LT5jb21taXRzLmxpc3QsCisJCQkJCSAgICAgIGN0eC0+Y29tbWl0cy5uciwKIAkJCQkJICAgICAgY29tbWl0X3RvX3NoYTEpOwogCisJCQlpZiAoZWRnZV92YWx1ZSA+PSAwKQorCQkJCWVkZ2VfdmFsdWUgKz0gY3R4LT5uZXdfbnVtX2NvbW1pdHNfaW5fYmFzZTsKKwkJCWVsc2UgeworCQkJCXVpbnQzMl90IHBvczsKKwkJCQlpZiAoZmluZF9jb21taXRfaW5fZ3JhcGgocGFyZW50LT5pdGVtLAorCQkJCQkJCSBjdHgtPm5ld19iYXNlX2dyYXBoLAorCQkJCQkJCSAmcG9zKSkKKwkJCQkJZWRnZV92YWx1ZSA9IHBvczsKKwkJCX0KKwogCQkJaWYgKGVkZ2VfdmFsdWUgPCAwKQogCQkJCUJVRygibWlzc2luZyBwYXJlbnQgJXMgZm9yIGNvbW1pdCAlcyIsCiAJCQkJICAgIG9pZF90b19oZXgoJnBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZCksCkBAIC02MTYsOSArODgxLDIwIEBACiAJCQllZGdlX3ZhbHVlID0gR1JBUEhfRVhUUkFfRURHRVNfTkVFREVEIHwgbnVtX2V4dHJhX2VkZ2VzOwogCQllbHNlIHsKIAkJCWVkZ2VfdmFsdWUgPSBzaGExX3BvcyhwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQuaGFzaCwKLQkJCQkJICAgICAgY29tbWl0cywKLQkJCQkJICAgICAgbnJfY29tbWl0cywKKwkJCQkJICAgICAgY3R4LT5jb21taXRzLmxpc3QsCisJCQkJCSAgICAgIGN0eC0+Y29tbWl0cy5uciwKIAkJCQkJICAgICAgY29tbWl0X3RvX3NoYTEpOworCisJCQlpZiAoZWRnZV92YWx1ZSA+PSAwKQorCQkJCWVkZ2VfdmFsdWUgKz0gY3R4LT5uZXdfbnVtX2NvbW1pdHNfaW5fYmFzZTsKKwkJCWVsc2UgeworCQkJCXVpbnQzMl90IHBvczsKKwkJCQlpZiAoZmluZF9jb21taXRfaW5fZ3JhcGgocGFyZW50LT5pdGVtLAorCQkJCQkJCSBjdHgtPm5ld19iYXNlX2dyYXBoLAorCQkJCQkJCSAmcG9zKSkKKwkJCQkJZWRnZV92YWx1ZSA9IHBvczsKKwkJCX0KKwogCQkJaWYgKGVkZ2VfdmFsdWUgPCAwKQogCQkJCUJVRygibWlzc2luZyBwYXJlbnQgJXMgZm9yIGNvbW1pdCAlcyIsCiAJCQkJICAgIG9pZF90b19oZXgoJnBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZCksCkBAIC02NDksMTkgKzkyNSwxNiBAQAogfQogCiBzdGF0aWMgdm9pZCB3cml0ZV9ncmFwaF9jaHVua19leHRyYV9lZGdlcyhzdHJ1Y3QgaGFzaGZpbGUgKmYsCi0JCQkJCSAgc3RydWN0IGNvbW1pdCAqKmNvbW1pdHMsCi0JCQkJCSAgaW50IG5yX2NvbW1pdHMsCi0JCQkJCSAgc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywKLQkJCQkJICB1aW50NjRfdCAqcHJvZ3Jlc3NfY250KQorCQkJCQkgIHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQogewotCXN0cnVjdCBjb21taXQgKipsaXN0ID0gY29tbWl0czsKLQlzdHJ1Y3QgY29tbWl0ICoqbGFzdCA9IGNvbW1pdHMgKyBucl9jb21taXRzOworCXN0cnVjdCBjb21taXQgKipsaXN0ID0gY3R4LT5jb21taXRzLmxpc3Q7CisJc3RydWN0IGNvbW1pdCAqKmxhc3QgPSBjdHgtPmNvbW1pdHMubGlzdCArIGN0eC0+Y29tbWl0cy5ucjsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKIAogCXdoaWxlIChsaXN0IDwgbGFzdCkgewogCQlpbnQgbnVtX3BhcmVudHMgPSAwOwogCi0JCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrKnByb2dyZXNzX2NudCk7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2NudCk7CiAKIAkJZm9yIChwYXJlbnQgPSAoKmxpc3QpLT5wYXJlbnRzOyBudW1fcGFyZW50cyA8IDMgJiYgcGFyZW50OwogCQkgICAgIHBhcmVudCA9IHBhcmVudC0+bmV4dCkKQEAgLTY3NSwxMCArOTQ4LDIwIEBACiAJCS8qIFNpbmNlIG51bV9wYXJlbnRzID4gMiwgdGhpcyBpbml0aWFsaXplciBpcyBzYWZlLiAqLwogCQlmb3IgKHBhcmVudCA9ICgqbGlzdCktPnBhcmVudHMtPm5leHQ7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KSB7CiAJCQlpbnQgZWRnZV92YWx1ZSA9IHNoYTFfcG9zKHBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZC5oYXNoLAotCQkJCQkJICBjb21taXRzLAotCQkJCQkJICBucl9jb21taXRzLAorCQkJCQkJICBjdHgtPmNvbW1pdHMubGlzdCwKKwkJCQkJCSAgY3R4LT5jb21taXRzLm5yLAogCQkJCQkJICBjb21taXRfdG9fc2hhMSk7CiAKKwkJCWlmIChlZGdlX3ZhbHVlID49IDApCisJCQkJZWRnZV92YWx1ZSArPSBjdHgtPm5ld19udW1fY29tbWl0c19pbl9iYXNlOworCQkJZWxzZSB7CisJCQkJdWludDMyX3QgcG9zOworCQkJCWlmIChmaW5kX2NvbW1pdF9pbl9ncmFwaChwYXJlbnQtPml0ZW0sCisJCQkJCQkJIGN0eC0+bmV3X2Jhc2VfZ3JhcGgsCisJCQkJCQkJICZwb3MpKQorCQkJCQllZGdlX3ZhbHVlID0gcG9zOworCQkJfQorCiAJCQlpZiAoZWRnZV92YWx1ZSA8IDApCiAJCQkJQlVHKCJtaXNzaW5nIHBhcmVudCAlcyBmb3IgY29tbWl0ICVzIiwKIAkJCQkgICAgb2lkX3RvX2hleCgmcGFyZW50LT5pdGVtLT5vYmplY3Qub2lkKSwKQEAgLTY5MywxMzIgKzk3NiwxMjQgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY29tbWl0X2NvbXBhcmUoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQorc3RhdGljIGludCBvaWRfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCiB7CiAJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYSA9IChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICopX2E7CiAJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYiA9IChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICopX2I7CiAJcmV0dXJuIG9pZGNtcChhLCBiKTsKIH0KIAotc3RydWN0IHBhY2tlZF9jb21taXRfbGlzdCB7Ci0Jc3RydWN0IGNvbW1pdCAqKmxpc3Q7Ci0JaW50IG5yOwotCWludCBhbGxvYzsKLX07Ci0KLXN0cnVjdCBwYWNrZWRfb2lkX2xpc3QgewotCXN0cnVjdCBvYmplY3RfaWQgKmxpc3Q7Ci0JaW50IG5yOwotCWludCBhbGxvYzsKLQlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOwotCWludCBwcm9ncmVzc19kb25lOwotfTsKLQogc3RhdGljIGludCBhZGRfcGFja2VkX2NvbW1pdHMoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAogCQkJICAgICAgc3RydWN0IHBhY2tlZF9naXQgKnBhY2ssCiAJCQkgICAgICB1aW50MzJfdCBwb3MsCiAJCQkgICAgICB2b2lkICpkYXRhKQogewotCXN0cnVjdCBwYWNrZWRfb2lkX2xpc3QgKmxpc3QgPSAoc3RydWN0IHBhY2tlZF9vaWRfbGlzdCopZGF0YTsKKwlzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCA9IChzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQqKWRhdGE7CiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCW9mZl90IG9mZnNldCA9IG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChwYWNrLCBwb3MpOwogCXN0cnVjdCBvYmplY3RfaW5mbyBvaSA9IE9CSkVDVF9JTkZPX0lOSVQ7CiAKLQlpZiAobGlzdC0+cHJvZ3Jlc3MpCi0JCWRpc3BsYXlfcHJvZ3Jlc3MobGlzdC0+cHJvZ3Jlc3MsICsrbGlzdC0+cHJvZ3Jlc3NfZG9uZSk7CisJaWYgKGN0eC0+cHJvZ3Jlc3MpCisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2RvbmUpOwogCiAJb2kudHlwZXAgPSAmdHlwZTsKLQlpZiAocGFja2VkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBwYWNrLCBvZmZzZXQsICZvaSkgPCAwKQorCWlmIChwYWNrZWRfb2JqZWN0X2luZm8oY3R4LT5yLCBwYWNrLCBvZmZzZXQsICZvaSkgPCAwKQogCQlkaWUoXygidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOwogCiAJaWYgKHR5cGUgIT0gT0JKX0NPTU1JVCkKIAkJcmV0dXJuIDA7CiAKLQlBTExPQ19HUk9XKGxpc3QtPmxpc3QsIGxpc3QtPm5yICsgMSwgbGlzdC0+YWxsb2MpOwotCW9pZGNweSgmKGxpc3QtPmxpc3RbbGlzdC0+bnJdKSwgb2lkKTsKLQlsaXN0LT5ucisrOworCUFMTE9DX0dST1coY3R4LT5vaWRzLmxpc3QsIGN0eC0+b2lkcy5uciArIDEsIGN0eC0+b2lkcy5hbGxvYyk7CisJb2lkY3B5KCYoY3R4LT5vaWRzLmxpc3RbY3R4LT5vaWRzLm5yXSksIG9pZCk7CisJY3R4LT5vaWRzLm5yKys7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYWRkX21pc3NpbmdfcGFyZW50cyhzdHJ1Y3QgcGFja2VkX29pZF9saXN0ICpvaWRzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCitzdGF0aWMgdm9pZCBhZGRfbWlzc2luZ19wYXJlbnRzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCiB7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CiAJZm9yIChwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KSB7CiAJCWlmICghKHBhcmVudC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpIHsKLQkJCUFMTE9DX0dST1cob2lkcy0+bGlzdCwgb2lkcy0+bnIgKyAxLCBvaWRzLT5hbGxvYyk7Ci0JCQlvaWRjcHkoJm9pZHMtPmxpc3Rbb2lkcy0+bnJdLCAmKHBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZCkpOwotCQkJb2lkcy0+bnIrKzsKKwkJCUFMTE9DX0dST1coY3R4LT5vaWRzLmxpc3QsIGN0eC0+b2lkcy5uciArIDEsIGN0eC0+b2lkcy5hbGxvYyk7CisJCQlvaWRjcHkoJmN0eC0+b2lkcy5saXN0W2N0eC0+b2lkcy5ucl0sICYocGFyZW50LT5pdGVtLT5vYmplY3Qub2lkKSk7CisJCQljdHgtPm9pZHMubnIrKzsKIAkJCXBhcmVudC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGNsb3NlX3JlYWNoYWJsZShzdHJ1Y3QgcGFja2VkX29pZF9saXN0ICpvaWRzLCBpbnQgcmVwb3J0X3Byb2dyZXNzKQorc3RhdGljIHZvaWQgY2xvc2VfcmVhY2hhYmxlKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQogewogCWludCBpOwogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKLQlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKIAotCWlmIChyZXBvcnRfcHJvZ3Jlc3MpCi0JCXByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKLQkJCV8oIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiKSwgb2lkcy0+bnIpOwotCWZvciAoaSA9IDA7IGkgPCBvaWRzLT5ucjsgaSsrKSB7Ci0JCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKLQkJY29tbWl0ID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgJm9pZHMtPmxpc3RbaV0pOworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCQkJCV8oIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiKSwKKwkJCQkJY3R4LT5vaWRzLm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5vaWRzLm5yOyBpKyspIHsKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCBpICsgMSk7CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXQoY3R4LT5yLCAmY3R4LT5vaWRzLmxpc3RbaV0pOwogCQlpZiAoY29tbWl0KQogCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKIAl9Ci0Jc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOwogCiAJLyoKLQkgKiBBcyB0aGlzIGxvb3AgcnVucywgb2lkcy0+bnIgbWF5IGdyb3csIGJ1dCBub3QgbW9yZQorCSAqIEFzIHRoaXMgbG9vcCBydW5zLCBjdHgtPm9pZHMubnIgbWF5IGdyb3csIGJ1dCBub3QgbW9yZQogCSAqIHRoYW4gdGhlIG51bWJlciBvZiBtaXNzaW5nIGNvbW1pdHMgaW4gdGhlIHJlYWNoYWJsZQogCSAqIGNsb3N1cmUuCiAJICovCi0JaWYgKHJlcG9ydF9wcm9ncmVzcykKLQkJcHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAotCQkJXygiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIpLCBvaWRzLT5ucik7Ci0JZm9yIChpID0gMDsgaSA8IG9pZHMtPm5yOyBpKyspIHsKLQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSArIDEpOwotCQljb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmb2lkcy0+bGlzdFtpXSk7CisJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKQorCQljdHgtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKKwkJCQkJXygiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIpLAorCQkJCQljdHgtPm9pZHMubnIpOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPm9pZHMubnI7IGkrKykgeworCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGkgKyAxKTsKKwkJY29tbWl0ID0gbG9va3VwX2NvbW1pdChjdHgtPnIsICZjdHgtPm9pZHMubGlzdFtpXSk7CiAKLQkJaWYgKGNvbW1pdCAmJiAhcGFyc2VfY29tbWl0X25vX2dyYXBoKGNvbW1pdCkpCi0JCQlhZGRfbWlzc2luZ19wYXJlbnRzKG9pZHMsIGNvbW1pdCk7CisJCWlmICghY29tbWl0KQorCQkJY29udGludWU7CisJCWlmIChjdHgtPnNwbGl0KSB7CisJCQlpZiAoIXBhcnNlX2NvbW1pdChjb21taXQpICYmCisJCQkgICAgY29tbWl0LT5ncmFwaF9wb3MgPT0gQ09NTUlUX05PVF9GUk9NX0dSQVBIKQorCQkJCWFkZF9taXNzaW5nX3BhcmVudHMoY3R4LCBjb21taXQpOworCQl9IGVsc2UgaWYgKCFwYXJzZV9jb21taXRfbm9fZ3JhcGgoY29tbWl0KSkKKwkJCWFkZF9taXNzaW5nX3BhcmVudHMoY3R4LCBjb21taXQpOwogCX0KLQlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisJc3RvcF9wcm9ncmVzcygmY3R4LT5wcm9ncmVzcyk7CiAKLQlpZiAocmVwb3J0X3Byb2dyZXNzKQotCQlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCi0JCQlfKCJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIiksIG9pZHMtPm5yKTsKLQlmb3IgKGkgPSAwOyBpIDwgb2lkcy0+bnI7IGkrKykgewotCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7Ci0JCWNvbW1pdCA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksICZvaWRzLT5saXN0W2ldKTsKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJCQlfKCJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIiksCisJCQkJCWN0eC0+b2lkcy5ucik7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+b2lkcy5ucjsgaSsrKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgaSArIDEpOworCQljb21taXQgPSBsb29rdXBfY29tbWl0KGN0eC0+ciwgJmN0eC0+b2lkcy5saXN0W2ldKTsKIAogCQlpZiAoY29tbWl0KQogCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgJj0gflVOSU5URVJFU1RJTkc7CiAJfQotCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwlzdG9wX3Byb2dyZXNzKCZjdHgtPnByb2dyZXNzKTsKIH0KIAotc3RhdGljIHZvaWQgY29tcHV0ZV9nZW5lcmF0aW9uX251bWJlcnMoc3RydWN0IHBhY2tlZF9jb21taXRfbGlzdCogY29tbWl0cywKLQkJCQkgICAgICAgaW50IHJlcG9ydF9wcm9ncmVzcykKK3N0YXRpYyB2b2lkIGNvbXB1dGVfZ2VuZXJhdGlvbl9udW1iZXJzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQogewogCWludCBpOwogCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEw7Ci0Jc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CiAKLQlpZiAocmVwb3J0X3Byb2dyZXNzKQotCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKAotCQkJXygiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiKSwKLQkJCWNvbW1pdHMtPm5yKTsKLQlmb3IgKGkgPSAwOyBpIDwgY29tbWl0cy0+bnI7IGkrKykgewotCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7Ci0JCWlmIChjb21taXRzLT5saXN0W2ldLT5nZW5lcmF0aW9uICE9IEdFTkVSQVRJT05fTlVNQkVSX0lORklOSVRZICYmCi0JCSAgICBjb21taXRzLT5saXN0W2ldLT5nZW5lcmF0aW9uICE9IEdFTkVSQVRJT05fTlVNQkVSX1pFUk8pCisJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKQorCQljdHgtPnByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoCisJCQkJCV8oIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIiksCisJCQkJCWN0eC0+Y29tbWl0cy5ucik7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+Y29tbWl0cy5ucjsgaSsrKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgaSArIDEpOworCQlpZiAoY3R4LT5jb21taXRzLmxpc3RbaV0tPmdlbmVyYXRpb24gIT0gR0VORVJBVElPTl9OVU1CRVJfSU5GSU5JVFkgJiYKKwkJICAgIGN0eC0+Y29tbWl0cy5saXN0W2ldLT5nZW5lcmF0aW9uICE9IEdFTkVSQVRJT05fTlVNQkVSX1pFUk8pCiAJCQljb250aW51ZTsKIAotCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0cy0+bGlzdFtpXSwgJmxpc3QpOworCQljb21taXRfbGlzdF9pbnNlcnQoY3R4LT5jb21taXRzLmxpc3RbaV0sICZsaXN0KTsKIAkJd2hpbGUgKGxpc3QpIHsKIAkJCXN0cnVjdCBjb21taXQgKmN1cnJlbnQgPSBsaXN0LT5pdGVtOwogCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CkBAIC04NDUsNyArMTEyMCw3IEBACiAJCQl9CiAJCX0KIAl9Ci0Jc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOwogfQogCiBzdGF0aWMgaW50IGFkZF9yZWZfdG9fbGlzdChjb25zdCBjaGFyICpyZWZuYW1lLApAQCAtODU4LDIzMCArMTEzMywyOTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB3cml0ZV9jb21taXRfZ3JhcGhfcmVhY2hhYmxlKGNvbnN0IGNoYXIgKm9ial9kaXIsIGludCBhcHBlbmQsCi0JCQkJICBpbnQgcmVwb3J0X3Byb2dyZXNzKQoraW50IHdyaXRlX2NvbW1pdF9ncmFwaF9yZWFjaGFibGUoY29uc3QgY2hhciAqb2JqX2RpciwgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMgKnNwbGl0X29wdHMpCiB7CiAJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlpbnQgcmVzdWx0OwogCiAJZm9yX2VhY2hfcmVmKGFkZF9yZWZfdG9fbGlzdCwgJmxpc3QpOwotCXdyaXRlX2NvbW1pdF9ncmFwaChvYmpfZGlyLCBOVUxMLCAmbGlzdCwgYXBwZW5kLCByZXBvcnRfcHJvZ3Jlc3MpOworCXJlc3VsdCA9IHdyaXRlX2NvbW1pdF9ncmFwaChvYmpfZGlyLCBOVUxMLCAmbGlzdCwKKwkJCQkgICAgZmxhZ3MsIHNwbGl0X29wdHMpOwogCiAJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworCXJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgd3JpdGVfY29tbWl0X2dyYXBoKGNvbnN0IGNoYXIgKm9ial9kaXIsCi0JCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhY2tfaW5kZXhlcywKLQkJCXN0cnVjdCBzdHJpbmdfbGlzdCAqY29tbWl0X2hleCwKLQkJCWludCBhcHBlbmQsIGludCByZXBvcnRfcHJvZ3Jlc3MpCitzdGF0aWMgaW50IGZpbGxfb2lkc19mcm9tX3BhY2tzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4LAorCQkJCXN0cnVjdCBzdHJpbmdfbGlzdCAqcGFja19pbmRleGVzKQogewotCXN0cnVjdCBwYWNrZWRfb2lkX2xpc3Qgb2lkczsKLQlzdHJ1Y3QgcGFja2VkX2NvbW1pdF9saXN0IGNvbW1pdHM7Ci0Jc3RydWN0IGhhc2hmaWxlICpmOwotCXVpbnQzMl90IGksIGNvdW50X2Rpc3RpbmN0ID0gMDsKLQljaGFyICpncmFwaF9uYW1lOwotCXN0cnVjdCBsb2NrX2ZpbGUgbGsgPSBMT0NLX0lOSVQ7Ci0JdWludDMyX3QgY2h1bmtfaWRzWzVdOwotCXVpbnQ2NF90IGNodW5rX29mZnNldHNbNV07Ci0JaW50IG51bV9jaHVua3M7Ci0JaW50IG51bV9leHRyYV9lZGdlczsKLQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKLQlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKLQljb25zdCB1bnNpZ25lZCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKLQl1aW50NjRfdCBwcm9ncmVzc19jbnQgPSAwOworCXVpbnQzMl90IGk7CiAJc3RydWN0IHN0cmJ1ZiBwcm9ncmVzc190aXRsZSA9IFNUUkJVRl9JTklUOwotCXVuc2lnbmVkIGxvbmcgYXBwcm94X25yX29iamVjdHM7CisJc3RydWN0IHN0cmJ1ZiBwYWNrbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBkaXJsZW47CiAKLQlpZiAoIWNvbW1pdF9ncmFwaF9jb21wYXRpYmxlKHRoZV9yZXBvc2l0b3J5KSkKLQkJcmV0dXJuOwotCi0Jb2lkcy5uciA9IDA7Ci0JYXBwcm94X25yX29iamVjdHMgPSBhcHByb3hpbWF0ZV9vYmplY3RfY291bnQoKTsKLQlvaWRzLmFsbG9jID0gYXBwcm94X25yX29iamVjdHMgLyAzMjsKLQlvaWRzLnByb2dyZXNzID0gTlVMTDsKLQlvaWRzLnByb2dyZXNzX2RvbmUgPSAwOwotCi0JaWYgKGFwcGVuZCkgewotCQlwcmVwYXJlX2NvbW1pdF9ncmFwaF9vbmUodGhlX3JlcG9zaXRvcnksIG9ial9kaXIpOwotCQlpZiAodGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPmNvbW1pdF9ncmFwaCkKLQkJCW9pZHMuYWxsb2MgKz0gdGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPmNvbW1pdF9ncmFwaC0+bnVtX2NvbW1pdHM7CisJc3RyYnVmX2FkZGYoJnBhY2tuYW1lLCAiJXMvcGFjay8iLCBjdHgtPm9ial9kaXIpOworCWRpcmxlbiA9IHBhY2tuYW1lLmxlbjsKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpIHsKKwkJc3RyYnVmX2FkZGYoJnByb2dyZXNzX3RpdGxlLAorCQkJICAgIFFfKCJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrIiwKKwkJCSAgICAgICAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiLAorCQkJICAgICAgIHBhY2tfaW5kZXhlcy0+bnIpLAorCQkJICAgIHBhY2tfaW5kZXhlcy0+bnIpOworCQljdHgtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhwcm9ncmVzc190aXRsZS5idWYsIDApOworCQljdHgtPnByb2dyZXNzX2RvbmUgPSAwOwogCX0KLQotCWlmIChvaWRzLmFsbG9jIDwgMTAyNCkKLQkJb2lkcy5hbGxvYyA9IDEwMjQ7Ci0JQUxMT0NfQVJSQVkob2lkcy5saXN0LCBvaWRzLmFsbG9jKTsKLQotCWlmIChhcHBlbmQgJiYgdGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPmNvbW1pdF9ncmFwaCkgewotCQlzdHJ1Y3QgY29tbWl0X2dyYXBoICpjb21taXRfZ3JhcGggPQotCQkJdGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPmNvbW1pdF9ncmFwaDsKLQkJZm9yIChpID0gMDsgaSA8IGNvbW1pdF9ncmFwaC0+bnVtX2NvbW1pdHM7IGkrKykgewotCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCA9IGNvbW1pdF9ncmFwaC0+Y2h1bmtfb2lkX2xvb2t1cCArCi0JCQkJY29tbWl0X2dyYXBoLT5oYXNoX2xlbiAqIGk7Ci0JCQloYXNoY3B5KG9pZHMubGlzdFtvaWRzLm5yKytdLmhhc2gsIGhhc2gpOworCWZvciAoaSA9IDA7IGkgPCBwYWNrX2luZGV4ZXMtPm5yOyBpKyspIHsKKwkJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJCXN0cmJ1Zl9zZXRsZW4oJnBhY2tuYW1lLCBkaXJsZW4pOworCQlzdHJidWZfYWRkc3RyKCZwYWNrbmFtZSwgcGFja19pbmRleGVzLT5pdGVtc1tpXS5zdHJpbmcpOworCQlwID0gYWRkX3BhY2tlZF9naXQocGFja25hbWUuYnVmLCBwYWNrbmFtZS5sZW4sIDEpOworCQlpZiAoIXApIHsKKwkJCWVycm9yKF8oImVycm9yIGFkZGluZyBwYWNrICVzIiksIHBhY2tuYW1lLmJ1Zik7CisJCQlyZXR1cm4gLTE7CiAJCX0KLQl9Ci0KLQlpZiAocGFja19pbmRleGVzKSB7Ci0JCXN0cnVjdCBzdHJidWYgcGFja25hbWUgPSBTVFJCVUZfSU5JVDsKLQkJaW50IGRpcmxlbjsKLQkJc3RyYnVmX2FkZGYoJnBhY2tuYW1lLCAiJXMvcGFjay8iLCBvYmpfZGlyKTsKLQkJZGlybGVuID0gcGFja25hbWUubGVuOwotCQlpZiAocmVwb3J0X3Byb2dyZXNzKSB7Ci0JCQlzdHJidWZfYWRkZigmcHJvZ3Jlc3NfdGl0bGUsCi0JCQkJICAgIFFfKCJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrIiwKLQkJCQkgICAgICAgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIiwKLQkJCQkgICAgICAgcGFja19pbmRleGVzLT5uciksCi0JCQkJICAgIHBhY2tfaW5kZXhlcy0+bnIpOwotCQkJb2lkcy5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MocHJvZ3Jlc3NfdGl0bGUuYnVmLCAwKTsKLQkJCW9pZHMucHJvZ3Jlc3NfZG9uZSA9IDA7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpIHsKKwkJCWVycm9yKF8oImVycm9yIG9wZW5pbmcgaW5kZXggZm9yICVzIiksIHBhY2tuYW1lLmJ1Zik7CisJCQlyZXR1cm4gLTE7CiAJCX0KLQkJZm9yIChpID0gMDsgaSA8IHBhY2tfaW5kZXhlcy0+bnI7IGkrKykgewotCQkJc3RydWN0IHBhY2tlZF9naXQgKnA7Ci0JCQlzdHJidWZfc2V0bGVuKCZwYWNrbmFtZSwgZGlybGVuKTsKLQkJCXN0cmJ1Zl9hZGRzdHIoJnBhY2tuYW1lLCBwYWNrX2luZGV4ZXMtPml0ZW1zW2ldLnN0cmluZyk7Ci0JCQlwID0gYWRkX3BhY2tlZF9naXQocGFja25hbWUuYnVmLCBwYWNrbmFtZS5sZW4sIDEpOwotCQkJaWYgKCFwKQotCQkJCWRpZShfKCJlcnJvciBhZGRpbmcgcGFjayAlcyIpLCBwYWNrbmFtZS5idWYpOwotCQkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKLQkJCQlkaWUoXygiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiKSwgcGFja25hbWUuYnVmKTsKLQkJCWZvcl9lYWNoX29iamVjdF9pbl9wYWNrKHAsIGFkZF9wYWNrZWRfY29tbWl0cywgJm9pZHMsCi0JCQkJCQlGT1JfRUFDSF9PQkpFQ1RfUEFDS19PUkRFUik7Ci0JCQljbG9zZV9wYWNrKHApOwotCQkJZnJlZShwKTsKLQkJfQotCQlzdG9wX3Byb2dyZXNzKCZvaWRzLnByb2dyZXNzKTsKLQkJc3RyYnVmX3Jlc2V0KCZwcm9ncmVzc190aXRsZSk7Ci0JCXN0cmJ1Zl9yZWxlYXNlKCZwYWNrbmFtZSk7CisJCWZvcl9lYWNoX29iamVjdF9pbl9wYWNrKHAsIGFkZF9wYWNrZWRfY29tbWl0cywgY3R4LAorCQkJCQlGT1JfRUFDSF9PQkpFQ1RfUEFDS19PUkRFUik7CisJCWNsb3NlX3BhY2socCk7CisJCWZyZWUocCk7CiAJfQogCi0JaWYgKGNvbW1pdF9oZXgpIHsKLQkJaWYgKHJlcG9ydF9wcm9ncmVzcykgewotCQkJc3RyYnVmX2FkZGYoJnByb2dyZXNzX3RpdGxlLAotCQkJCSAgICBRXygiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiLAotCQkJCSAgICAgICAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWZzIiwKLQkJCQkgICAgICAgY29tbWl0X2hleC0+bnIpLAotCQkJCSAgICBjb21taXRfaGV4LT5ucik7Ci0JCQlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MocHJvZ3Jlc3NfdGl0bGUuYnVmLAotCQkJCQkJCSAgY29tbWl0X2hleC0+bnIpOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBjb21taXRfaGV4LT5ucjsgaSsrKSB7Ci0JCQljb25zdCBjaGFyICplbmQ7Ci0JCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKLQkJCXN0cnVjdCBjb21taXQgKnJlc3VsdDsKKwlzdG9wX3Byb2dyZXNzKCZjdHgtPnByb2dyZXNzKTsKKwlzdHJidWZfcmVzZXQoJnByb2dyZXNzX3RpdGxlKTsKKwlzdHJidWZfcmVsZWFzZSgmcGFja25hbWUpOwogCi0JCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7Ci0JCQlpZiAoY29tbWl0X2hleC0+aXRlbXNbaV0uc3RyaW5nICYmCi0JCQkgICAgcGFyc2Vfb2lkX2hleChjb21taXRfaGV4LT5pdGVtc1tpXS5zdHJpbmcsICZvaWQsICZlbmQpKQotCQkJCWNvbnRpbnVlOworCXJldHVybiAwOworfQogCi0JCQlyZXN1bHQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksICZvaWQsIDEpOworc3RhdGljIHZvaWQgZmlsbF9vaWRzX2Zyb21fY29tbWl0X2hleChzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvbW1pdF9oZXgpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgc3RyYnVmIHByb2dyZXNzX3RpdGxlID0gU1RSQlVGX0lOSVQ7CiAKLQkJCWlmIChyZXN1bHQpIHsKLQkJCQlBTExPQ19HUk9XKG9pZHMubGlzdCwgb2lkcy5uciArIDEsIG9pZHMuYWxsb2MpOwotCQkJCW9pZGNweSgmb2lkcy5saXN0W29pZHMubnJdLCAmKHJlc3VsdC0+b2JqZWN0Lm9pZCkpOwotCQkJCW9pZHMubnIrKzsKLQkJCX0KLQkJfQotCQlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7Ci0JCXN0cmJ1Zl9yZXNldCgmcHJvZ3Jlc3NfdGl0bGUpOworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykgeworCQlzdHJidWZfYWRkZigmcHJvZ3Jlc3NfdGl0bGUsCisJCQkgICAgUV8oIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIiwKKwkJCSAgICAgICAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWZzIiwKKwkJCSAgICAgICBjb21taXRfaGV4LT5uciksCisJCQkgICAgY29tbWl0X2hleC0+bnIpOworCQljdHgtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKKwkJCQkJcHJvZ3Jlc3NfdGl0bGUuYnVmLAorCQkJCQljb21taXRfaGV4LT5ucik7CiAJfQorCWZvciAoaSA9IDA7IGkgPCBjb21taXRfaGV4LT5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmVuZDsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBjb21taXQgKnJlc3VsdDsKIAotCWlmICghcGFja19pbmRleGVzICYmICFjb21taXRfaGV4KSB7Ci0JCWlmIChyZXBvcnRfcHJvZ3Jlc3MpCi0JCQlvaWRzLnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKLQkJCQlfKCJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIpLAotCQkJCWFwcHJveF9ucl9vYmplY3RzKTsKLQkJZm9yX2VhY2hfcGFja2VkX29iamVjdChhZGRfcGFja2VkX2NvbW1pdHMsICZvaWRzLAotCQkJCSAgICAgICBGT1JfRUFDSF9PQkpFQ1RfUEFDS19PUkRFUik7Ci0JCWlmIChvaWRzLnByb2dyZXNzX2RvbmUgPCBhcHByb3hfbnJfb2JqZWN0cykKLQkJCWRpc3BsYXlfcHJvZ3Jlc3Mob2lkcy5wcm9ncmVzcywgYXBwcm94X25yX29iamVjdHMpOwotCQlzdG9wX3Byb2dyZXNzKCZvaWRzLnByb2dyZXNzKTsKLQl9Ci0KLQljbG9zZV9yZWFjaGFibGUoJm9pZHMsIHJlcG9ydF9wcm9ncmVzcyk7Ci0KLQlpZiAocmVwb3J0X3Byb2dyZXNzKQotCQlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCi0JCQlfKCJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIpLAotCQkJb2lkcy5ucik7Ci0JZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgMCk7IC8qIFRPRE86IE1lYXN1cmUgUVNPUlQoKSBwcm9ncmVzcyAqLwotCVFTT1JUKG9pZHMubGlzdCwgb2lkcy5uciwgY29tbWl0X2NvbXBhcmUpOwotCWNvdW50X2Rpc3RpbmN0ID0gMTsKLQlmb3IgKGkgPSAxOyBpIDwgb2lkcy5ucjsgaSsrKSB7Ci0JCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKLQkJaWYgKCFvaWRlcSgmb2lkcy5saXN0W2kgLSAxXSwgJm9pZHMubGlzdFtpXSkpCi0JCQljb3VudF9kaXN0aW5jdCsrOwotCX0KLQlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7Ci0KLQlpZiAoY291bnRfZGlzdGluY3QgPj0gR1JBUEhfRURHRV9MQVNUX01BU0spCi0JCWRpZShfKCJ0aGUgY29tbWl0IGdyYXBoIGZvcm1hdCBjYW5ub3Qgd3JpdGUgJWQgY29tbWl0cyIpLCBjb3VudF9kaXN0aW5jdCk7Ci0KLQljb21taXRzLm5yID0gMDsKLQljb21taXRzLmFsbG9jID0gY291bnRfZGlzdGluY3Q7Ci0JQUxMT0NfQVJSQVkoY29tbWl0cy5saXN0LCBjb21taXRzLmFsbG9jKTsKLQotCW51bV9leHRyYV9lZGdlcyA9IDA7Ci0JaWYgKHJlcG9ydF9wcm9ncmVzcykKLQkJcHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAotCQkJXygiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiKSwKLQkJCW9pZHMubnIpOwotCWZvciAoaSA9IDA7IGkgPCBvaWRzLm5yOyBpKyspIHsKLQkJaW50IG51bV9wYXJlbnRzID0gMDsKLQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSArIDEpOwotCQlpZiAoaSA+IDAgJiYgb2lkZXEoJm9pZHMubGlzdFtpIC0gMV0sICZvaWRzLmxpc3RbaV0pKQorCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGkgKyAxKTsKKwkJaWYgKGNvbW1pdF9oZXgtPml0ZW1zW2ldLnN0cmluZyAmJgorCQkgICAgcGFyc2Vfb2lkX2hleChjb21taXRfaGV4LT5pdGVtc1tpXS5zdHJpbmcsICZvaWQsICZlbmQpKQogCQkJY29udGludWU7CiAKLQkJY29tbWl0cy5saXN0W2NvbW1pdHMubnJdID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgJm9pZHMubGlzdFtpXSk7Ci0JCXBhcnNlX2NvbW1pdF9ub19ncmFwaChjb21taXRzLmxpc3RbY29tbWl0cy5ucl0pOworCQlyZXN1bHQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoY3R4LT5yLCAmb2lkLCAxKTsKIAotCQlmb3IgKHBhcmVudCA9IGNvbW1pdHMubGlzdFtjb21taXRzLm5yXS0+cGFyZW50czsKKwkJaWYgKHJlc3VsdCkgeworCQkJQUxMT0NfR1JPVyhjdHgtPm9pZHMubGlzdCwgY3R4LT5vaWRzLm5yICsgMSwgY3R4LT5vaWRzLmFsbG9jKTsKKwkJCW9pZGNweSgmY3R4LT5vaWRzLmxpc3RbY3R4LT5vaWRzLm5yXSwgJihyZXN1bHQtPm9iamVjdC5vaWQpKTsKKwkJCWN0eC0+b2lkcy5ucisrOworCQl9CisJfQorCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcm9ncmVzc190aXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfb2lkc19mcm9tX2FsbF9wYWNrcyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJXygiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggYW1vbmcgcGFja2VkIG9iamVjdHMiKSwKKwkJCWN0eC0+YXBwcm94X25yX29iamVjdHMpOworCWZvcl9lYWNoX3BhY2tlZF9vYmplY3QoYWRkX3BhY2tlZF9jb21taXRzLCBjdHgsCisJCQkgICAgICAgRk9SX0VBQ0hfT0JKRUNUX1BBQ0tfT1JERVIpOworCWlmIChjdHgtPnByb2dyZXNzX2RvbmUgPCBjdHgtPmFwcHJveF9ucl9vYmplY3RzKQorCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGN0eC0+YXBwcm94X25yX29iamVjdHMpOworCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgdWludDMyX3QgY291bnRfZGlzdGluY3RfY29tbWl0cyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwl1aW50MzJfdCBpLCBjb3VudF9kaXN0aW5jdCA9IDE7CisKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJXygiQ291bnRpbmcgZGlzdGluY3QgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiKSwKKwkJCWN0eC0+b2lkcy5ucik7CisJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCAwKTsgLyogVE9ETzogTWVhc3VyZSBRU09SVCgpIHByb2dyZXNzICovCisJUVNPUlQoY3R4LT5vaWRzLmxpc3QsIGN0eC0+b2lkcy5uciwgb2lkX2NvbXBhcmUpOworCisJZm9yIChpID0gMTsgaSA8IGN0eC0+b2lkcy5ucjsgaSsrKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgaSArIDEpOworCQlpZiAoIW9pZGVxKCZjdHgtPm9pZHMubGlzdFtpIC0gMV0sICZjdHgtPm9pZHMubGlzdFtpXSkpIHsKKwkJCWlmIChjdHgtPnNwbGl0KSB7CisJCQkJc3RydWN0IGNvbW1pdCAqYyA9IGxvb2t1cF9jb21taXQoY3R4LT5yLCAmY3R4LT5vaWRzLmxpc3RbaV0pOworCisJCQkJaWYgKCFjIHx8IGMtPmdyYXBoX3BvcyAhPSBDT01NSVRfTk9UX0ZST01fR1JBUEgpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQljb3VudF9kaXN0aW5jdCsrOworCQl9CisJfQorCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworCisJcmV0dXJuIGNvdW50X2Rpc3RpbmN0OworfQorCitzdGF0aWMgdm9pZCBjb3B5X29pZHNfdG9fY29tbWl0cyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwl1aW50MzJfdCBpOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJY3R4LT5udW1fZXh0cmFfZWRnZXMgPSAwOworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCQlfKCJGaW5kaW5nIGV4dHJhIGVkZ2VzIGluIGNvbW1pdCBncmFwaCIpLAorCQkJY3R4LT5vaWRzLm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5vaWRzLm5yOyBpKyspIHsKKwkJaW50IG51bV9wYXJlbnRzID0gMDsKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCBpICsgMSk7CisJCWlmIChpID4gMCAmJiBvaWRlcSgmY3R4LT5vaWRzLmxpc3RbaSAtIDFdLCAmY3R4LT5vaWRzLmxpc3RbaV0pKQorCQkJY29udGludWU7CisKKwkJQUxMT0NfR1JPVyhjdHgtPmNvbW1pdHMubGlzdCwgY3R4LT5jb21taXRzLm5yICsgMSwgY3R4LT5jb21taXRzLmFsbG9jKTsKKwkJY3R4LT5jb21taXRzLmxpc3RbY3R4LT5jb21taXRzLm5yXSA9IGxvb2t1cF9jb21taXQoY3R4LT5yLCAmY3R4LT5vaWRzLmxpc3RbaV0pOworCisJCWlmIChjdHgtPnNwbGl0ICYmCisJCSAgICBjdHgtPmNvbW1pdHMubGlzdFtjdHgtPmNvbW1pdHMubnJdLT5ncmFwaF9wb3MgIT0gQ09NTUlUX05PVF9GUk9NX0dSQVBIKQorCQkJY29udGludWU7CisKKwkJcGFyc2VfY29tbWl0X25vX2dyYXBoKGN0eC0+Y29tbWl0cy5saXN0W2N0eC0+Y29tbWl0cy5ucl0pOworCisJCWZvciAocGFyZW50ID0gY3R4LT5jb21taXRzLmxpc3RbY3R4LT5jb21taXRzLm5yXS0+cGFyZW50czsKIAkJICAgICBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkKIAkJCW51bV9wYXJlbnRzKys7CiAKIAkJaWYgKG51bV9wYXJlbnRzID4gMikKLQkJCW51bV9leHRyYV9lZGdlcyArPSBudW1fcGFyZW50cyAtIDE7CisJCQljdHgtPm51bV9leHRyYV9lZGdlcyArPSBudW1fcGFyZW50cyAtIDE7CiAKLQkJY29tbWl0cy5ucisrOworCQljdHgtPmNvbW1pdHMubnIrKzsKIAl9Ci0JbnVtX2NodW5rcyA9IG51bV9leHRyYV9lZGdlcyA/IDQgOiAzOwotCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwlzdG9wX3Byb2dyZXNzKCZjdHgtPnByb2dyZXNzKTsKK30KIAotCWlmIChjb21taXRzLm5yID49IEdSQVBIX0VER0VfTEFTVF9NQVNLKQotCQlkaWUoXygidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIpKTsKK3N0YXRpYyBpbnQgd3JpdGVfZ3JhcGhfY2h1bmtfYmFzZV8xKHN0cnVjdCBoYXNoZmlsZSAqZiwKKwkJCQkgICAgc3RydWN0IGNvbW1pdF9ncmFwaCAqZykKK3sKKwlpbnQgbnVtID0gMDsKIAotCWNvbXB1dGVfZ2VuZXJhdGlvbl9udW1iZXJzKCZjb21taXRzLCByZXBvcnRfcHJvZ3Jlc3MpOworCWlmICghZykKKwkJcmV0dXJuIDA7CiAKLQlncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShvYmpfZGlyKTsKLQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhncmFwaF9uYW1lKSkgewotCQlVTkxFQUsoZ3JhcGhfbmFtZSk7Ci0JCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJXMiKSwKLQkJCSAgZ3JhcGhfbmFtZSk7CisJbnVtID0gd3JpdGVfZ3JhcGhfY2h1bmtfYmFzZV8xKGYsIGctPmJhc2VfZ3JhcGgpOworCWhhc2h3cml0ZShmLCBnLT5vaWQuaGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCXJldHVybiBudW0gKyAxOworfQorCitzdGF0aWMgaW50IHdyaXRlX2dyYXBoX2NodW5rX2Jhc2Uoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCSAgc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJaW50IG51bSA9IHdyaXRlX2dyYXBoX2NodW5rX2Jhc2VfMShmLCBjdHgtPm5ld19iYXNlX2dyYXBoKTsKKworCWlmIChudW0gIT0gY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDEpIHsKKwkJZXJyb3IoXygiZmFpbGVkIHRvIHdyaXRlIGNvcnJlY3QgbnVtYmVyIG9mIGJhc2UgZ3JhcGggaWRzIikpOworCQlyZXR1cm4gLTE7CiAJfQogCi0JaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbGssIGdyYXBoX25hbWUsIExPQ0tfRElFX09OX0VSUk9SKTsKLQlmID0gaGFzaGZkKGxrLnRlbXBmaWxlLT5mZCwgbGsudGVtcGZpbGUtPmZpbGVuYW1lLmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfY29tbWl0X2dyYXBoX2ZpbGUoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJdWludDMyX3QgaTsKKwlpbnQgZmQ7CisJc3RydWN0IGhhc2hmaWxlICpmOworCXN0cnVjdCBsb2NrX2ZpbGUgbGsgPSBMT0NLX0lOSVQ7CisJdWludDMyX3QgY2h1bmtfaWRzWzZdOworCXVpbnQ2NF90IGNodW5rX29mZnNldHNbNl07CisJY29uc3QgdW5zaWduZWQgaGFzaHN6ID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJc3RydWN0IHN0cmJ1ZiBwcm9ncmVzc190aXRsZSA9IFNUUkJVRl9JTklUOworCWludCBudW1fY2h1bmtzID0gMzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGZpbGVfaGFzaDsKKworCWlmIChjdHgtPnNwbGl0KSB7CisJCXN0cnVjdCBzdHJidWYgdG1wX2ZpbGUgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkZigmdG1wX2ZpbGUsCisJCQkgICAgIiVzL2luZm8vY29tbWl0LWdyYXBocy90bXBfZ3JhcGhfWFhYWFhYIiwKKwkJCSAgICBjdHgtPm9ial9kaXIpOworCQljdHgtPmdyYXBoX25hbWUgPSBzdHJidWZfZGV0YWNoKCZ0bXBfZmlsZSwgTlVMTCk7CisJfSBlbHNlIHsKKwkJY3R4LT5ncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShjdHgtPm9ial9kaXIpOworCX0KKworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGN0eC0+Z3JhcGhfbmFtZSkpIHsKKwkJVU5MRUFLKGN0eC0+Z3JhcGhfbmFtZSk7CisJCWVycm9yKF8oInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAlcyIpLAorCQkJY3R4LT5ncmFwaF9uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChjdHgtPnNwbGl0KSB7CisJCWNoYXIgKmxvY2tfbmFtZSA9IGdldF9jaGFpbl9maWxlbmFtZShjdHgtPm9ial9kaXIpOworCisJCWhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxrLCBsb2NrX25hbWUsIExPQ0tfRElFX09OX0VSUk9SKTsKKworCQlmZCA9IGdpdF9ta3N0ZW1wX21vZGUoY3R4LT5ncmFwaF9uYW1lLCAwNDQ0KTsKKwkJaWYgKGZkIDwgMCkgeworCQkJZXJyb3IoXygidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIiksIGN0eC0+Z3JhcGhfbmFtZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlmID0gaGFzaGZkKGZkLCBjdHgtPmdyYXBoX25hbWUpOworCX0gZWxzZSB7CisJCWhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxrLCBjdHgtPmdyYXBoX25hbWUsIExPQ0tfRElFX09OX0VSUk9SKTsKKwkJZmQgPSBsay50ZW1wZmlsZS0+ZmQ7CisJCWYgPSBoYXNoZmQobGsudGVtcGZpbGUtPmZkLCBsay50ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmKTsKKwl9CisKKwljaHVua19pZHNbMF0gPSBHUkFQSF9DSFVOS0lEX09JREZBTk9VVDsKKwljaHVua19pZHNbMV0gPSBHUkFQSF9DSFVOS0lEX09JRExPT0tVUDsKKwljaHVua19pZHNbMl0gPSBHUkFQSF9DSFVOS0lEX0RBVEE7CisJaWYgKGN0eC0+bnVtX2V4dHJhX2VkZ2VzKSB7CisJCWNodW5rX2lkc1tudW1fY2h1bmtzXSA9IEdSQVBIX0NIVU5LSURfRVhUUkFFREdFUzsKKwkJbnVtX2NodW5rcysrOworCX0KKwlpZiAoY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciA+IDEpIHsKKwkJY2h1bmtfaWRzW251bV9jaHVua3NdID0gR1JBUEhfQ0hVTktJRF9CQVNFOworCQludW1fY2h1bmtzKys7CisJfQorCisJY2h1bmtfaWRzW251bV9jaHVua3NdID0gMDsKKworCWNodW5rX29mZnNldHNbMF0gPSA4ICsgKG51bV9jaHVua3MgKyAxKSAqIEdSQVBIX0NIVU5LTE9PS1VQX1dJRFRIOworCWNodW5rX29mZnNldHNbMV0gPSBjaHVua19vZmZzZXRzWzBdICsgR1JBUEhfRkFOT1VUX1NJWkU7CisJY2h1bmtfb2Zmc2V0c1syXSA9IGNodW5rX29mZnNldHNbMV0gKyBoYXNoc3ogKiBjdHgtPmNvbW1pdHMubnI7CisJY2h1bmtfb2Zmc2V0c1szXSA9IGNodW5rX29mZnNldHNbMl0gKyAoaGFzaHN6ICsgMTYpICogY3R4LT5jb21taXRzLm5yOworCisJbnVtX2NodW5rcyA9IDM7CisJaWYgKGN0eC0+bnVtX2V4dHJhX2VkZ2VzKSB7CisJCWNodW5rX29mZnNldHNbbnVtX2NodW5rcyArIDFdID0gY2h1bmtfb2Zmc2V0c1tudW1fY2h1bmtzXSArCisJCQkJCQk0ICogY3R4LT5udW1fZXh0cmFfZWRnZXM7CisJCW51bV9jaHVua3MrKzsKKwl9CisJaWYgKGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgPiAxKSB7CisJCWNodW5rX29mZnNldHNbbnVtX2NodW5rcyArIDFdID0gY2h1bmtfb2Zmc2V0c1tudW1fY2h1bmtzXSArCisJCQkJCQloYXNoc3ogKiAoY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDEpOworCQludW1fY2h1bmtzKys7CisJfQogCiAJaGFzaHdyaXRlX2JlMzIoZiwgR1JBUEhfU0lHTkFUVVJFKTsKIAogCWhhc2h3cml0ZV91OChmLCBHUkFQSF9WRVJTSU9OKTsKIAloYXNod3JpdGVfdTgoZiwgb2lkX3ZlcnNpb24oKSk7CiAJaGFzaHdyaXRlX3U4KGYsIG51bV9jaHVua3MpOwotCWhhc2h3cml0ZV91OChmLCAwKTsgLyogdW51c2VkIHBhZGRpbmcgYnl0ZSAqLwotCi0JY2h1bmtfaWRzWzBdID0gR1JBUEhfQ0hVTktJRF9PSURGQU5PVVQ7Ci0JY2h1bmtfaWRzWzFdID0gR1JBUEhfQ0hVTktJRF9PSURMT09LVVA7Ci0JY2h1bmtfaWRzWzJdID0gR1JBUEhfQ0hVTktJRF9EQVRBOwotCWlmIChudW1fZXh0cmFfZWRnZXMpCi0JCWNodW5rX2lkc1szXSA9IEdSQVBIX0NIVU5LSURfRVhUUkFFREdFUzsKLQllbHNlCi0JCWNodW5rX2lkc1szXSA9IDA7Ci0JY2h1bmtfaWRzWzRdID0gMDsKLQotCWNodW5rX29mZnNldHNbMF0gPSA4ICsgKG51bV9jaHVua3MgKyAxKSAqIEdSQVBIX0NIVU5LTE9PS1VQX1dJRFRIOwotCWNodW5rX29mZnNldHNbMV0gPSBjaHVua19vZmZzZXRzWzBdICsgR1JBUEhfRkFOT1VUX1NJWkU7Ci0JY2h1bmtfb2Zmc2V0c1syXSA9IGNodW5rX29mZnNldHNbMV0gKyBoYXNoc3ogKiBjb21taXRzLm5yOwotCWNodW5rX29mZnNldHNbM10gPSBjaHVua19vZmZzZXRzWzJdICsgKGhhc2hzeiArIDE2KSAqIGNvbW1pdHMubnI7Ci0JY2h1bmtfb2Zmc2V0c1s0XSA9IGNodW5rX29mZnNldHNbM10gKyA0ICogbnVtX2V4dHJhX2VkZ2VzOworCWhhc2h3cml0ZV91OChmLCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMSk7CiAKIAlmb3IgKGkgPSAwOyBpIDw9IG51bV9jaHVua3M7IGkrKykgewogCQl1aW50MzJfdCBjaHVua193cml0ZVszXTsKQEAgLTEwOTIsMzEgKzE0MzEsNDcyIEBACiAJCWhhc2h3cml0ZShmLCBjaHVua193cml0ZSwgMTIpOwogCX0KIAotCWlmIChyZXBvcnRfcHJvZ3Jlc3MpIHsKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpIHsKIAkJc3RyYnVmX2FkZGYoJnByb2dyZXNzX3RpdGxlLAogCQkJICAgIFFfKCJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIsCiAJCQkgICAgICAgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiLAogCQkJICAgICAgIG51bV9jaHVua3MpLAogCQkJICAgIG51bV9jaHVua3MpOwotCQlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAogCQkJcHJvZ3Jlc3NfdGl0bGUuYnVmLAotCQkJbnVtX2NodW5rcyAqIGNvbW1pdHMubnIpOworCQkJbnVtX2NodW5rcyAqIGN0eC0+Y29tbWl0cy5ucik7CiAJfQotCXdyaXRlX2dyYXBoX2NodW5rX2Zhbm91dChmLCBjb21taXRzLmxpc3QsIGNvbW1pdHMubnIsIHByb2dyZXNzLCAmcHJvZ3Jlc3NfY250KTsKLQl3cml0ZV9ncmFwaF9jaHVua19vaWRzKGYsIGhhc2hzeiwgY29tbWl0cy5saXN0LCBjb21taXRzLm5yLCBwcm9ncmVzcywgJnByb2dyZXNzX2NudCk7Ci0Jd3JpdGVfZ3JhcGhfY2h1bmtfZGF0YShmLCBoYXNoc3osIGNvbW1pdHMubGlzdCwgY29tbWl0cy5uciwgcHJvZ3Jlc3MsICZwcm9ncmVzc19jbnQpOwotCWlmIChudW1fZXh0cmFfZWRnZXMpCi0JCXdyaXRlX2dyYXBoX2NodW5rX2V4dHJhX2VkZ2VzKGYsIGNvbW1pdHMubGlzdCwgY29tbWl0cy5uciwgcHJvZ3Jlc3MsICZwcm9ncmVzc19jbnQpOwotCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwl3cml0ZV9ncmFwaF9jaHVua19mYW5vdXQoZiwgY3R4KTsKKwl3cml0ZV9ncmFwaF9jaHVua19vaWRzKGYsIGhhc2hzeiwgY3R4KTsKKwl3cml0ZV9ncmFwaF9jaHVua19kYXRhKGYsIGhhc2hzeiwgY3R4KTsKKwlpZiAoY3R4LT5udW1fZXh0cmFfZWRnZXMpCisJCXdyaXRlX2dyYXBoX2NodW5rX2V4dHJhX2VkZ2VzKGYsIGN0eCk7CisJaWYgKGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgPiAxICYmCisJICAgIHdyaXRlX2dyYXBoX2NodW5rX2Jhc2UoZiwgY3R4KSkgeworCQlyZXR1cm4gLTE7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOwogCXN0cmJ1Zl9yZWxlYXNlKCZwcm9ncmVzc190aXRsZSk7CiAKLQljbG9zZV9jb21taXRfZ3JhcGgodGhlX3JlcG9zaXRvcnkpOwotCWZpbmFsaXplX2hhc2hmaWxlKGYsIE5VTEwsIENTVU1fSEFTSF9JTl9TVFJFQU0gfCBDU1VNX0ZTWU5DKTsKKwlpZiAoY3R4LT5zcGxpdCAmJiBjdHgtPmJhc2VfZ3JhcGhfbmFtZSAmJiBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID4gMSkgeworCQljaGFyICpuZXdfYmFzZV9oYXNoID0geHN0cmR1cChvaWRfdG9faGV4KCZjdHgtPm5ld19iYXNlX2dyYXBoLT5vaWQpKTsKKwkJY2hhciAqbmV3X2Jhc2VfbmFtZSA9IGdldF9zcGxpdF9ncmFwaF9maWxlbmFtZShjdHgtPm5ld19iYXNlX2dyYXBoLT5vYmpfZGlyLCBuZXdfYmFzZV9oYXNoKTsKKworCQlmcmVlKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19hZnRlcltjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMl0pOworCQlmcmVlKGN0eC0+Y29tbWl0X2dyYXBoX2hhc2hfYWZ0ZXJbY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDJdKTsKKwkJY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2FmdGVyW2N0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgLSAyXSA9IG5ld19iYXNlX25hbWU7CisJCWN0eC0+Y29tbWl0X2dyYXBoX2hhc2hfYWZ0ZXJbY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDJdID0gbmV3X2Jhc2VfaGFzaDsKKwl9CisKKwljbG9zZV9jb21taXRfZ3JhcGgoY3R4LT5yLT5vYmplY3RzKTsKKwlmaW5hbGl6ZV9oYXNoZmlsZShmLCBmaWxlX2hhc2guaGFzaCwgQ1NVTV9IQVNIX0lOX1NUUkVBTSB8IENTVU1fRlNZTkMpOworCisJaWYgKGN0eC0+c3BsaXQpIHsKKwkJRklMRSAqY2hhaW5mID0gZmRvcGVuX2xvY2tfZmlsZSgmbGssICJ3Iik7CisJCWNoYXIgKmZpbmFsX2dyYXBoX25hbWU7CisJCWludCByZXN1bHQ7CisKKwkJY2xvc2UoZmQpOworCisJCWlmICghY2hhaW5mKSB7CisJCQllcnJvcihfKCJ1bmFibGUgdG8gb3BlbiBjb21taXQtZ3JhcGggY2hhaW4gZmlsZSIpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChjdHgtPmJhc2VfZ3JhcGhfbmFtZSkgeworCQkJY29uc3QgY2hhciAqZGVzdCA9IGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19hZnRlclsKKwkJCQkJCWN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgLSAyXTsKKworCQkJaWYgKHN0cmNtcChjdHgtPmJhc2VfZ3JhcGhfbmFtZSwgZGVzdCkpIHsKKwkJCQlyZXN1bHQgPSByZW5hbWUoY3R4LT5iYXNlX2dyYXBoX25hbWUsIGRlc3QpOworCisJCQkJaWYgKHJlc3VsdCkgeworCQkJCQllcnJvcihfKCJmYWlsZWQgdG8gcmVuYW1lIGJhc2UgY29tbWl0LWdyYXBoIGZpbGUiKSk7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQljaGFyICpncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShjdHgtPm9ial9kaXIpOworCQkJdW5saW5rKGdyYXBoX25hbWUpOworCQl9CisKKwkJY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMV0gPSB4c3RyZHVwKG9pZF90b19oZXgoJmZpbGVfaGFzaCkpOworCQlmaW5hbF9ncmFwaF9uYW1lID0gZ2V0X3NwbGl0X2dyYXBoX2ZpbGVuYW1lKGN0eC0+b2JqX2RpciwKKwkJCQkJY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMV0pOworCQljdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXJbY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDFdID0gZmluYWxfZ3JhcGhfbmFtZTsKKworCQlyZXN1bHQgPSByZW5hbWUoY3R4LT5ncmFwaF9uYW1lLCBmaW5hbF9ncmFwaF9uYW1lKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlcjsgaSsrKQorCQkJZnByaW50Zihsay50ZW1wZmlsZS0+ZnAsICIlc1xuIiwgY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltpXSk7CisKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyb3IoXygiZmFpbGVkIHRvIHJlbmFtZSB0ZW1wb3JhcnkgY29tbWl0LWdyYXBoIGZpbGUiKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKIAljb21taXRfbG9ja19maWxlKCZsayk7CiAKLQlmcmVlKGdyYXBoX25hbWUpOwotCWZyZWUoY29tbWl0cy5saXN0KTsKLQlmcmVlKG9pZHMubGlzdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNwbGl0X2dyYXBoX21lcmdlX3N0cmF0ZWd5KHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBjb21taXRfZ3JhcGggKmcgPSBjdHgtPnItPm9iamVjdHMtPmNvbW1pdF9ncmFwaDsKKwl1aW50MzJfdCBudW1fY29tbWl0cyA9IGN0eC0+Y29tbWl0cy5ucjsKKwl1aW50MzJfdCBpOworCisJaW50IG1heF9jb21taXRzID0gMDsKKwlpbnQgc2l6ZV9tdWx0ID0gMjsKKworCWlmIChjdHgtPnNwbGl0X29wdHMpIHsKKwkJbWF4X2NvbW1pdHMgPSBjdHgtPnNwbGl0X29wdHMtPm1heF9jb21taXRzOworCQlzaXplX211bHQgPSBjdHgtPnNwbGl0X29wdHMtPnNpemVfbXVsdGlwbGU7CisJfQorCisJZyA9IGN0eC0+ci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoOworCWN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgPSBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZSArIDE7CisKKwl3aGlsZSAoZyAmJiAoZy0+bnVtX2NvbW1pdHMgPD0gc2l6ZV9tdWx0ICogbnVtX2NvbW1pdHMgfHwKKwkJICAgIChtYXhfY29tbWl0cyAmJiBudW1fY29tbWl0cyA+IG1heF9jb21taXRzKSkpIHsKKwkJaWYgKHN0cmNtcChnLT5vYmpfZGlyLCBjdHgtPm9ial9kaXIpKQorCQkJYnJlYWs7CisKKwkJbnVtX2NvbW1pdHMgKz0gZy0+bnVtX2NvbW1pdHM7CisJCWcgPSBnLT5iYXNlX2dyYXBoOworCisJCWN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXItLTsKKwl9CisKKwljdHgtPm5ld19iYXNlX2dyYXBoID0gZzsKKworCWlmIChjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID09IDIpIHsKKwkJY2hhciAqb2xkX2dyYXBoX25hbWUgPSBnZXRfY29tbWl0X2dyYXBoX2ZpbGVuYW1lKGctPm9ial9kaXIpOworCisJCWlmICghc3RyY21wKGctPmZpbGVuYW1lLCBvbGRfZ3JhcGhfbmFtZSkgJiYKKwkJICAgIHN0cmNtcChnLT5vYmpfZGlyLCBjdHgtPm9ial9kaXIpKSB7CisJCQljdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID0gMTsKKwkJCWN0eC0+bmV3X2Jhc2VfZ3JhcGggPSBOVUxMOworCQl9CisKKwkJZnJlZShvbGRfZ3JhcGhfbmFtZSk7CisJfQorCisJQUxMT0NfQVJSQVkoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2FmdGVyLCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyKTsKKwlBTExPQ19BUlJBWShjdHgtPmNvbW1pdF9ncmFwaF9oYXNoX2FmdGVyLCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyKTsKKworCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyICYmCisJCSAgICBpIDwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19iZWZvcmU7IGkrKykKKwkJY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2FmdGVyW2ldID0geHN0cmR1cChjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYmVmb3JlW2ldKTsKKworCWkgPSBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZSAtIDE7CisJZyA9IGN0eC0+ci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoOworCisJd2hpbGUgKGcpIHsKKwkJaWYgKGkgPCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyKQorCQkJY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltpXSA9IHhzdHJkdXAob2lkX3RvX2hleCgmZy0+b2lkKSk7CisKKwkJaS0tOworCQlnID0gZy0+YmFzZV9ncmFwaDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX2NvbW1pdF9ncmFwaChzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCwKKwkJCSAgICAgICBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnKQoreworCXVpbnQzMl90IGk7CisJdWludDMyX3Qgb2Zmc2V0ID0gZy0+bnVtX2NvbW1pdHNfaW5fYmFzZTsKKworCUFMTE9DX0dST1coY3R4LT5jb21taXRzLmxpc3QsIGN0eC0+Y29tbWl0cy5uciArIGctPm51bV9jb21taXRzLCBjdHgtPmNvbW1pdHMuYWxsb2MpOworCisJZm9yIChpID0gMDsgaSA8IGctPm51bV9jb21taXRzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBjb21taXQgKnJlc3VsdDsKKworCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGkgKyAxKTsKKworCQlsb2FkX29pZF9mcm9tX2dyYXBoKGcsIGkgKyBvZmZzZXQsICZvaWQpOworCisJCS8qIG9ubHkgYWRkIGNvbW1pdHMgaWYgdGhleSBzdGlsbCBleGlzdCBpbiB0aGUgcmVwbyAqLworCQlyZXN1bHQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoY3R4LT5yLCAmb2lkLCAxKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQljdHgtPmNvbW1pdHMubGlzdFtjdHgtPmNvbW1pdHMubnJdID0gcmVzdWx0OworCQkJY3R4LT5jb21taXRzLm5yKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY29tbWl0X2NvbXBhcmUoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBjb21taXQgKmEgPSAqKGNvbnN0IHN0cnVjdCBjb21taXQgKiopX2E7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYiA9ICooY29uc3Qgc3RydWN0IGNvbW1pdCAqKilfYjsKKwlyZXR1cm4gb2lkY21wKCZhLT5vYmplY3Qub2lkLCAmYi0+b2JqZWN0Lm9pZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNvcnRfYW5kX3NjYW5fbWVyZ2VkX2NvbW1pdHMoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJdWludDMyX3QgaSwgbnVtX3BhcmVudHM7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJCQlfKCJTY2FubmluZyBtZXJnZWQgY29tbWl0cyIpLAorCQkJCQljdHgtPmNvbW1pdHMubnIpOworCisJUVNPUlQoY3R4LT5jb21taXRzLmxpc3QsIGN0eC0+Y29tbWl0cy5uciwgY29tbWl0X2NvbXBhcmUpOworCisJY3R4LT5udW1fZXh0cmFfZWRnZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPmNvbW1pdHMubnI7IGkrKykgeworCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGkpOworCisJCWlmIChpICYmIG9pZGVxKCZjdHgtPmNvbW1pdHMubGlzdFtpIC0gMV0tPm9iamVjdC5vaWQsCisJCQkgICZjdHgtPmNvbW1pdHMubGlzdFtpXS0+b2JqZWN0Lm9pZCkpIHsKKwkJCWRpZShfKCJ1bmV4cGVjdGVkIGR1cGxpY2F0ZSBjb21taXQgaWQgJXMiKSwKKwkJCSAgICBvaWRfdG9faGV4KCZjdHgtPmNvbW1pdHMubGlzdFtpXS0+b2JqZWN0Lm9pZCkpOworCQl9IGVsc2UgeworCQkJbnVtX3BhcmVudHMgPSAwOworCQkJZm9yIChwYXJlbnQgPSBjdHgtPmNvbW1pdHMubGlzdFtpXS0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpCisJCQkJbnVtX3BhcmVudHMrKzsKKworCQkJaWYgKG51bV9wYXJlbnRzID4gMikKKwkJCQljdHgtPm51bV9leHRyYV9lZGdlcyArPSBudW1fcGFyZW50cyAtIDI7CisJCX0KKwl9CisKKwlzdG9wX3Byb2dyZXNzKCZjdHgtPnByb2dyZXNzKTsKK30KKworc3RhdGljIHZvaWQgbWVyZ2VfY29tbWl0X2dyYXBocyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnID0gY3R4LT5yLT5vYmplY3RzLT5jb21taXRfZ3JhcGg7CisJdWludDMyX3QgY3VycmVudF9ncmFwaF9udW1iZXIgPSBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZTsKKwlzdHJ1Y3Qgc3RyYnVmIHByb2dyZXNzX3RpdGxlID0gU1RSQlVGX0lOSVQ7CisKKwl3aGlsZSAoZyAmJiBjdXJyZW50X2dyYXBoX251bWJlciA+PSBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyKSB7CisJCWN1cnJlbnRfZ3JhcGhfbnVtYmVyLS07CisKKwkJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKSB7CisJCQlzdHJidWZfYWRkc3RyKCZwcm9ncmVzc190aXRsZSwgXygiTWVyZ2luZyBjb21taXQtZ3JhcGgiKSk7CisJCQljdHgtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhwcm9ncmVzc190aXRsZS5idWYsIDApOworCQl9CisKKwkJbWVyZ2VfY29tbWl0X2dyYXBoKGN0eCwgZyk7CisJCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworCQlzdHJidWZfcmVsZWFzZSgmcHJvZ3Jlc3NfdGl0bGUpOworCisJCWcgPSBnLT5iYXNlX2dyYXBoOworCX0KKworCWlmIChnKSB7CisJCWN0eC0+bmV3X2Jhc2VfZ3JhcGggPSBnOworCQljdHgtPm5ld19udW1fY29tbWl0c19pbl9iYXNlID0gZy0+bnVtX2NvbW1pdHMgKyBnLT5udW1fY29tbWl0c19pbl9iYXNlOworCX0KKworCWlmIChjdHgtPm5ld19iYXNlX2dyYXBoKQorCQljdHgtPmJhc2VfZ3JhcGhfbmFtZSA9IHhzdHJkdXAoY3R4LT5uZXdfYmFzZV9ncmFwaC0+ZmlsZW5hbWUpOworCisJc29ydF9hbmRfc2Nhbl9tZXJnZWRfY29tbWl0cyhjdHgpOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2NvbW1pdF9ncmFwaHMoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJdWludDMyX3QgaTsKKwl0aW1lX3Qgbm93ID0gdGltZShOVUxMKTsKKworCWZvciAoaSA9IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgLSAxOyBpIDwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19iZWZvcmU7IGkrKykgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJc3RydWN0IHV0aW1idWYgdXBkYXRlZF90aW1lOworCisJCXN0YXQoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2JlZm9yZVtpXSwgJnN0KTsKKworCQl1cGRhdGVkX3RpbWUuYWN0aW1lID0gc3Quc3RfYXRpbWU7CisJCXVwZGF0ZWRfdGltZS5tb2R0aW1lID0gbm93OworCQl1dGltZShjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYmVmb3JlW2ldLCAmdXBkYXRlZF90aW1lKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4cGlyZV9jb21taXRfZ3JhcGhzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmRlOworCXNpemVfdCBkaXJuYW1lbGVuOworCXRpbWVzdGFtcF90IGV4cGlyZV90aW1lID0gdGltZShOVUxMKTsKKworCWlmIChjdHgtPnNwbGl0X29wdHMgJiYgY3R4LT5zcGxpdF9vcHRzLT5leHBpcmVfdGltZSkKKwkJZXhwaXJlX3RpbWUgLT0gY3R4LT5zcGxpdF9vcHRzLT5leHBpcmVfdGltZTsKKwlpZiAoIWN0eC0+c3BsaXQpIHsKKwkJY2hhciAqY2hhaW5fZmlsZV9uYW1lID0gZ2V0X2NoYWluX2ZpbGVuYW1lKGN0eC0+b2JqX2Rpcik7CisJCXVubGluayhjaGFpbl9maWxlX25hbWUpOworCQlmcmVlKGNoYWluX2ZpbGVfbmFtZSk7CisJCWN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgPSAwOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGN0eC0+b2JqX2Rpcik7CisJc3RyYnVmX2FkZHN0cigmcGF0aCwgIi9pbmZvL2NvbW1pdC1ncmFwaHMiKTsKKwlkaXIgPSBvcGVuZGlyKHBhdGguYnVmKTsKKworCWlmICghZGlyKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9hZGRjaCgmcGF0aCwgJy8nKTsKKwlkaXJuYW1lbGVuID0gcGF0aC5sZW47CisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJdWludDMyX3QgaSwgZm91bmQgPSAwOworCisJCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGRpcm5hbWVsZW4pOworCQlzdHJidWZfYWRkc3RyKCZwYXRoLCBkZS0+ZF9uYW1lKTsKKworCQlzdGF0KHBhdGguYnVmLCAmc3QpOworCisJCWlmIChzdC5zdF9tdGltZSA+IGV4cGlyZV90aW1lKQorCQkJY29udGludWU7CisJCWlmIChwYXRoLmxlbiA8IDYgfHwgc3RyY21wKHBhdGguYnVmICsgcGF0aC5sZW4gLSA2LCAiLmdyYXBoIikpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlcjsgaSsrKSB7CisJCQlpZiAoIXN0cmNtcChjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXJbaV0sCisJCQkJICAgIHBhdGguYnVmKSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQpCisJCQl1bmxpbmsocGF0aC5idWYpOworCX0KK30KKworaW50IHdyaXRlX2NvbW1pdF9ncmFwaChjb25zdCBjaGFyICpvYmpfZGlyLAorCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICpwYWNrX2luZGV4ZXMsCisJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvbW1pdF9oZXgsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMgKnNwbGl0X29wdHMpCit7CisJc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHg7CisJdWludDMyX3QgaSwgY291bnRfZGlzdGluY3QgPSAwOworCXNpemVfdCBsZW47CisJaW50IHJlcyA9IDA7CisKKwlpZiAoIWNvbW1pdF9ncmFwaF9jb21wYXRpYmxlKHRoZV9yZXBvc2l0b3J5KSkKKwkJcmV0dXJuIDA7CisKKwljdHggPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQpKTsKKwljdHgtPnIgPSB0aGVfcmVwb3NpdG9yeTsKKworCS8qIG5vcm1hbGl6ZSBvYmplY3QgZGlyIHdpdGggbm8gdHJhaWxpbmcgc2xhc2ggKi8KKwljdHgtPm9ial9kaXIgPSB4bWFsbG9jeihzdHJsZW4ob2JqX2RpcikgKyAxKTsKKwlub3JtYWxpemVfcGF0aF9jb3B5KGN0eC0+b2JqX2Rpciwgb2JqX2Rpcik7CisJbGVuID0gc3RybGVuKGN0eC0+b2JqX2Rpcik7CisJaWYgKGxlbiAmJiBjdHgtPm9ial9kaXJbbGVuIC0gMV0gPT0gJy8nKQorCQljdHgtPm9ial9kaXJbbGVuIC0gMV0gPSAwOworCisJY3R4LT5hcHBlbmQgPSBmbGFncyAmIENPTU1JVF9HUkFQSF9BUFBFTkQgPyAxIDogMDsKKwljdHgtPnJlcG9ydF9wcm9ncmVzcyA9IGZsYWdzICYgQ09NTUlUX0dSQVBIX1BST0dSRVNTID8gMSA6IDA7CisJY3R4LT5zcGxpdCA9IGZsYWdzICYgQ09NTUlUX0dSQVBIX1NQTElUID8gMSA6IDA7CisJY3R4LT5zcGxpdF9vcHRzID0gc3BsaXRfb3B0czsKKworCWlmIChjdHgtPnNwbGl0KSB7CisJCXN0cnVjdCBjb21taXRfZ3JhcGggKmc7CisJCXByZXBhcmVfY29tbWl0X2dyYXBoKGN0eC0+cik7CisKKwkJZyA9IGN0eC0+ci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoOworCisJCXdoaWxlIChnKSB7CisJCQljdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZSsrOworCQkJZyA9IGctPmJhc2VfZ3JhcGg7CisJCX0KKworCQlpZiAoY3R4LT5udW1fY29tbWl0X2dyYXBoc19iZWZvcmUpIHsKKwkJCUFMTE9DX0FSUkFZKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19iZWZvcmUsIGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlKTsKKwkJCWkgPSBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZTsKKwkJCWcgPSBjdHgtPnItPm9iamVjdHMtPmNvbW1pdF9ncmFwaDsKKworCQkJd2hpbGUgKGcpIHsKKwkJCQljdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYmVmb3JlWy0taV0gPSB4c3RyZHVwKGctPmZpbGVuYW1lKTsKKwkJCQlnID0gZy0+YmFzZV9ncmFwaDsKKwkJCX0KKwkJfQorCX0KKworCWN0eC0+YXBwcm94X25yX29iamVjdHMgPSBhcHByb3hpbWF0ZV9vYmplY3RfY291bnQoKTsKKwljdHgtPm9pZHMuYWxsb2MgPSBjdHgtPmFwcHJveF9ucl9vYmplY3RzIC8gMzI7CisKKwlpZiAoY3R4LT5zcGxpdCAmJiBzcGxpdF9vcHRzICYmIGN0eC0+b2lkcy5hbGxvYyA+IHNwbGl0X29wdHMtPm1heF9jb21taXRzKQorCQljdHgtPm9pZHMuYWxsb2MgPSBzcGxpdF9vcHRzLT5tYXhfY29tbWl0czsKKworCWlmIChjdHgtPmFwcGVuZCkgeworCQlwcmVwYXJlX2NvbW1pdF9ncmFwaF9vbmUoY3R4LT5yLCBjdHgtPm9ial9kaXIpOworCQlpZiAoY3R4LT5yLT5vYmplY3RzLT5jb21taXRfZ3JhcGgpCisJCQljdHgtPm9pZHMuYWxsb2MgKz0gY3R4LT5yLT5vYmplY3RzLT5jb21taXRfZ3JhcGgtPm51bV9jb21taXRzOworCX0KKworCWlmIChjdHgtPm9pZHMuYWxsb2MgPCAxMDI0KQorCQljdHgtPm9pZHMuYWxsb2MgPSAxMDI0OworCUFMTE9DX0FSUkFZKGN0eC0+b2lkcy5saXN0LCBjdHgtPm9pZHMuYWxsb2MpOworCisJaWYgKGN0eC0+YXBwZW5kICYmIGN0eC0+ci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoKSB7CisJCXN0cnVjdCBjb21taXRfZ3JhcGggKmcgPSBjdHgtPnItPm9iamVjdHMtPmNvbW1pdF9ncmFwaDsKKwkJZm9yIChpID0gMDsgaSA8IGctPm51bV9jb21taXRzOyBpKyspIHsKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2ggPSBnLT5jaHVua19vaWRfbG9va3VwICsgZy0+aGFzaF9sZW4gKiBpOworCQkJaGFzaGNweShjdHgtPm9pZHMubGlzdFtjdHgtPm9pZHMubnIrK10uaGFzaCwgaGFzaCk7CisJCX0KKwl9CisKKwlpZiAocGFja19pbmRleGVzKSB7CisJCWlmICgocmVzID0gZmlsbF9vaWRzX2Zyb21fcGFja3MoY3R4LCBwYWNrX2luZGV4ZXMpKSkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoY29tbWl0X2hleCkKKwkJZmlsbF9vaWRzX2Zyb21fY29tbWl0X2hleChjdHgsIGNvbW1pdF9oZXgpOworCisJaWYgKCFwYWNrX2luZGV4ZXMgJiYgIWNvbW1pdF9oZXgpCisJCWZpbGxfb2lkc19mcm9tX2FsbF9wYWNrcyhjdHgpOworCisJY2xvc2VfcmVhY2hhYmxlKGN0eCk7CisKKwljb3VudF9kaXN0aW5jdCA9IGNvdW50X2Rpc3RpbmN0X2NvbW1pdHMoY3R4KTsKKworCWlmIChjb3VudF9kaXN0aW5jdCA+PSBHUkFQSF9FREdFX0xBU1RfTUFTSykgeworCQllcnJvcihfKCJ0aGUgY29tbWl0IGdyYXBoIGZvcm1hdCBjYW5ub3Qgd3JpdGUgJWQgY29tbWl0cyIpLCBjb3VudF9kaXN0aW5jdCk7CisJCXJlcyA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJY3R4LT5jb21taXRzLmFsbG9jID0gY291bnRfZGlzdGluY3Q7CisJQUxMT0NfQVJSQVkoY3R4LT5jb21taXRzLmxpc3QsIGN0eC0+Y29tbWl0cy5hbGxvYyk7CisKKwljb3B5X29pZHNfdG9fY29tbWl0cyhjdHgpOworCisJaWYgKGN0eC0+Y29tbWl0cy5uciA+PSBHUkFQSF9FREdFX0xBU1RfTUFTSykgeworCQllcnJvcihfKCJ0b28gbWFueSBjb21taXRzIHRvIHdyaXRlIGdyYXBoIikpOworCQlyZXMgPSAtMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWlmICghY3R4LT5jb21taXRzLm5yKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZiAoY3R4LT5zcGxpdCkgeworCQlzcGxpdF9ncmFwaF9tZXJnZV9zdHJhdGVneShjdHgpOworCisJCW1lcmdlX2NvbW1pdF9ncmFwaHMoY3R4KTsKKwl9IGVsc2UKKwkJY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciA9IDE7CisKKwljb21wdXRlX2dlbmVyYXRpb25fbnVtYmVycyhjdHgpOworCisJcmVzID0gd3JpdGVfY29tbWl0X2dyYXBoX2ZpbGUoY3R4KTsKKworCWlmIChjdHgtPnNwbGl0KQorCQltYXJrX2NvbW1pdF9ncmFwaHMoY3R4KTsKKworCWV4cGlyZV9jb21taXRfZ3JhcGhzKGN0eCk7CisKK2NsZWFudXA6CisJZnJlZShjdHgtPmdyYXBoX25hbWUpOworCWZyZWUoY3R4LT5jb21taXRzLmxpc3QpOworCWZyZWUoY3R4LT5vaWRzLmxpc3QpOworCWZyZWUoY3R4LT5vYmpfZGlyKTsKKworCWlmIChjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXIpIHsKKwkJZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXI7IGkrKykgeworCQkJZnJlZShjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXJbaV0pOworCQkJZnJlZShjdHgtPmNvbW1pdF9ncmFwaF9oYXNoX2FmdGVyW2ldKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZTsgaSsrKQorCQkJZnJlZShjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYmVmb3JlW2ldKTsKKworCQlmcmVlKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19hZnRlcik7CisJCWZyZWUoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2JlZm9yZSk7CisJCWZyZWUoY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcik7CisJfQorCisJZnJlZShjdHgpOworCisJcmV0dXJuIHJlczsKIH0KIAogI2RlZmluZSBWRVJJRllfQ09NTUlUX0dSQVBIX0VSUk9SX0hBU0ggMgpAQCAtMTEzNiw3ICsxOTE2LDcgQEAKICNkZWZpbmUgR0VORVJBVElPTl9aRVJPX0VYSVNUUyAxCiAjZGVmaW5lIEdFTkVSQVRJT05fTlVNQkVSX0VYSVNUUyAyCiAKLWludCB2ZXJpZnlfY29tbWl0X2dyYXBoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnKQoraW50IHZlcmlmeV9jb21taXRfZ3JhcGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXRfZ3JhcGggKmcsIGludCBmbGFncykKIHsKIAl1aW50MzJfdCBpLCBjdXJfZmFub3V0X3BvcyA9IDA7CiAJc3RydWN0IG9iamVjdF9pZCBwcmV2X29pZCwgY3VyX29pZCwgY2hlY2tzdW07CkBAIC0xMTQ0LDYgKzE5MjQsNyBAQAogCXN0cnVjdCBoYXNoZmlsZSAqZjsKIAlpbnQgZGV2bnVsbDsKIAlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKwlpbnQgbG9jYWxfZXJyb3IgPSAwOwogCiAJaWYgKCFnKSB7CiAJCWdyYXBoX3JlcG9ydCgibm8gY29tbWl0LWdyYXBoIGZpbGUgbG9hZGVkIik7CkBAIC0xMjE0LDcgKzE5OTUsNyBAQAogCQloYXNoY3B5KGN1cl9vaWQuaGFzaCwgZy0+Y2h1bmtfb2lkX2xvb2t1cCArIGctPmhhc2hfbGVuICogaSk7CiAKIAkJZ3JhcGhfY29tbWl0ID0gbG9va3VwX2NvbW1pdChyLCAmY3VyX29pZCk7Ci0JCW9kYl9jb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKWNyZWF0ZV9vYmplY3QociwgY3VyX29pZC5oYXNoLCBhbGxvY19jb21taXRfbm9kZShyKSk7CisJCW9kYl9jb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKWNyZWF0ZV9vYmplY3QociwgJmN1cl9vaWQsIGFsbG9jX2NvbW1pdF9ub2RlKHIpKTsKIAkJaWYgKHBhcnNlX2NvbW1pdF9pbnRlcm5hbChvZGJfY29tbWl0LCAwLCAwKSkgewogCQkJZ3JhcGhfcmVwb3J0KF8oImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBvYmplY3QgZGF0YWJhc2UgZm9yIGNvbW1pdC1ncmFwaCIpLAogCQkJCSAgICAgb2lkX3RvX2hleCgmY3VyX29pZCkpOwpAQCAtMTIzOCw2ICsyMDE5LDkgQEAKIAkJCQlicmVhazsKIAkJCX0KIAorCQkJLyogcGFyc2UgcGFyZW50IGluIGNhc2UgaXQgaXMgaW4gYSBiYXNlIGdyYXBoICovCisJCQlwYXJzZV9jb21taXRfaW5fZ3JhcGhfb25lKHIsIGcsIGdyYXBoX3BhcmVudHMtPml0ZW0pOworCiAJCQlpZiAoIW9pZGVxKCZncmFwaF9wYXJlbnRzLT5pdGVtLT5vYmplY3Qub2lkLCAmb2RiX3BhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQpKQogCQkJCWdyYXBoX3JlcG9ydChfKCJjb21taXQtZ3JhcGggcGFyZW50IGZvciAlcyBpcyAlcyAhPSAlcyIpLAogCQkJCQkgICAgIG9pZF90b19oZXgoJmN1cl9vaWQpLApAQCAtMTI4OSw3ICsyMDczLDEyIEBACiAJfQogCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKIAotCXJldHVybiB2ZXJpZnlfY29tbWl0X2dyYXBoX2Vycm9yOworCWxvY2FsX2Vycm9yID0gdmVyaWZ5X2NvbW1pdF9ncmFwaF9lcnJvcjsKKworCWlmICghKGZsYWdzICYgQ09NTUlUX0dSQVBIX1ZFUklGWV9TSEFMTE9XKSAmJiBnLT5iYXNlX2dyYXBoKQorCQlsb2NhbF9lcnJvciB8PSB2ZXJpZnlfY29tbWl0X2dyYXBoKHIsIGctPmJhc2VfZ3JhcGgsIGZsYWdzKTsKKworCXJldHVybiBsb2NhbF9lcnJvcjsKIH0KIAogdm9pZCBmcmVlX2NvbW1pdF9ncmFwaChzdHJ1Y3QgY29tbWl0X2dyYXBoICpnKQpAQCAtMTMwMSw1ICsyMDkwLDYgQEAKIAkJZy0+ZGF0YSA9IE5VTEw7CiAJCWNsb3NlKGctPmdyYXBoX2ZkKTsKIAl9CisJZnJlZShnLT5maWxlbmFtZSk7CiAJZnJlZShnKTsKIH0KZGlmZiAtLWdpdCBhL2NvbW1pdC1ncmFwaC5oIGIvY29tbWl0LWdyYXBoLmgKaW5kZXggN2RmYjhjOC4uZGY5YTNiMiAxMDA2NDQKLS0tIGEvY29tbWl0LWdyYXBoLmgKKysrIGIvY29tbWl0LWdyYXBoLmgKQEAgLTQ3LDE1ICs0NywyMSBAQAogCXVuc2lnbmVkIGNoYXIgbnVtX2NodW5rczsKIAl1aW50MzJfdCBudW1fY29tbWl0czsKIAlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyICpmaWxlbmFtZTsKKwljb25zdCBjaGFyICpvYmpfZGlyOworCisJdWludDMyX3QgbnVtX2NvbW1pdHNfaW5fYmFzZTsKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpiYXNlX2dyYXBoOwogCiAJY29uc3QgdWludDMyX3QgKmNodW5rX29pZF9mYW5vdXQ7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfb2lkX2xvb2t1cDsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpjaHVua19jb21taXRfZGF0YTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpjaHVua19leHRyYV9lZGdlczsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjaHVua19iYXNlX2dyYXBoczsKIH07CiAKIHN0cnVjdCBjb21taXRfZ3JhcGggKmxvYWRfY29tbWl0X2dyYXBoX29uZV9mZF9zdChpbnQgZmQsIHN0cnVjdCBzdGF0ICpzdCk7Ci0KK3N0cnVjdCBjb21taXRfZ3JhcGggKnJlYWRfY29tbWl0X2dyYXBoX29uZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqX2Rpcik7CiBzdHJ1Y3QgY29tbWl0X2dyYXBoICpwYXJzZV9jb21taXRfZ3JhcGgodm9pZCAqZ3JhcGhfbWFwLCBpbnQgZmQsCiAJCQkJCXNpemVfdCBncmFwaF9zaXplKTsKIApAQCAtNjUsMTYgKzcxLDM1IEBACiAgKi8KIGludCBnZW5lcmF0aW9uX251bWJlcnNfZW5hYmxlZChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CiAKLXZvaWQgd3JpdGVfY29tbWl0X2dyYXBoX3JlYWNoYWJsZShjb25zdCBjaGFyICpvYmpfZGlyLCBpbnQgYXBwZW5kLAotCQkJCSAgaW50IHJlcG9ydF9wcm9ncmVzcyk7Ci12b2lkIHdyaXRlX2NvbW1pdF9ncmFwaChjb25zdCBjaGFyICpvYmpfZGlyLAotCQkJc3RydWN0IHN0cmluZ19saXN0ICpwYWNrX2luZGV4ZXMsCi0JCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvbW1pdF9oZXgsCi0JCQlpbnQgYXBwZW5kLCBpbnQgcmVwb3J0X3Byb2dyZXNzKTsKKyNkZWZpbmUgQ09NTUlUX0dSQVBIX0FQUEVORCAgICAgKDEgPDwgMCkKKyNkZWZpbmUgQ09NTUlUX0dSQVBIX1BST0dSRVNTICAgKDEgPDwgMSkKKyNkZWZpbmUgQ09NTUlUX0dSQVBIX1NQTElUICAgICAgKDEgPDwgMikKIAotaW50IHZlcmlmeV9jb21taXRfZ3JhcGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXRfZ3JhcGggKmcpOworc3RydWN0IHNwbGl0X2NvbW1pdF9ncmFwaF9vcHRzIHsKKwlpbnQgc2l6ZV9tdWx0aXBsZTsKKwlpbnQgbWF4X2NvbW1pdHM7CisJdGltZXN0YW1wX3QgZXhwaXJlX3RpbWU7Cit9OwogCi12b2lkIGNsb3NlX2NvbW1pdF9ncmFwaChzdHJ1Y3QgcmVwb3NpdG9yeSAqKTsKKy8qCisgKiBUaGUgd3JpdGVfY29tbWl0X2dyYXBoKiBtZXRob2RzIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MKKyAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuIE5vdGUgdGhhdCBpZiB0aGUgcmVwb3NpdG9yeQorICogaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgY29tbWl0LWdyYXBoIGZlYXR1cmUsIHRoZW4gdGhlCisgKiBtZXRob2RzIHdpbGwgcmV0dXJuIDAgd2l0aG91dCB3cml0aW5nIGEgY29tbWl0LWdyYXBoLgorICovCitpbnQgd3JpdGVfY29tbWl0X2dyYXBoX3JlYWNoYWJsZShjb25zdCBjaGFyICpvYmpfZGlyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkJIGNvbnN0IHN0cnVjdCBzcGxpdF9jb21taXRfZ3JhcGhfb3B0cyAqc3BsaXRfb3B0cyk7CitpbnQgd3JpdGVfY29tbWl0X2dyYXBoKGNvbnN0IGNoYXIgKm9ial9kaXIsCisJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhY2tfaW5kZXhlcywKKwkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqY29tbWl0X2hleCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBzcGxpdF9jb21taXRfZ3JhcGhfb3B0cyAqc3BsaXRfb3B0cyk7CisKKyNkZWZpbmUgQ09NTUlUX0dSQVBIX1ZFUklGWV9TSEFMTE9XCSgxIDw8IDApCisKK2ludCB2ZXJpZnlfY29tbWl0X2dyYXBoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLCBpbnQgZmxhZ3MpOworCit2b2lkIGNsb3NlX2NvbW1pdF9ncmFwaChzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSAqKTsKIHZvaWQgZnJlZV9jb21taXRfZ3JhcGgoc3RydWN0IGNvbW1pdF9ncmFwaCAqKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9jb21taXQuYyBiL2NvbW1pdC5jCmluZGV4IDhmYTE4ODMuLmE5OGRlMTYgMTAwNjQ0Ci0tLSBhL2NvbW1pdC5jCisrKyBiL2NvbW1pdC5jCkBAIC01NywxMCArNTcsOSBAQAogCiBzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCiB7Ci0Jc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChyLCBvaWQtPmhhc2gpOworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3Qociwgb2lkKTsKIAlpZiAoIW9iaikKLQkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qociwgb2lkLT5oYXNoLAotCQkJCSAgICAgYWxsb2NfY29tbWl0X25vZGUocikpOworCQlyZXR1cm4gY3JlYXRlX29iamVjdChyLCBvaWQsIGFsbG9jX2NvbW1pdF9ub2RlKHIpKTsKIAlyZXR1cm4gb2JqZWN0X2FzX3R5cGUociwgb2JqLCBPQkpfQ09NTUlULCAwKTsKIH0KIApAQCAtNDQ5LDcgKzQ0OCw3IEBACiAJaXRlbS0+ZGF0ZSA9IHBhcnNlX2NvbW1pdF9kYXRlKGJ1ZnB0ciwgdGFpbCk7CiAKIAlpZiAoY2hlY2tfZ3JhcGgpCi0JCWxvYWRfY29tbWl0X2dyYXBoX2luZm8odGhlX3JlcG9zaXRvcnksIGl0ZW0pOworCQlsb2FkX2NvbW1pdF9ncmFwaF9pbmZvKHIsIGl0ZW0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9jb21wYXQvbWluZ3cuYyBiL2NvbXBhdC9taW5ndy5jCmluZGV4IDliNmQyNDAuLjczOGYwYTggMTAwNjQ0Ci0tLSBhL2NvbXBhdC9taW5ndy5jCisrKyBiL2NvbXBhdC9taW5ndy5jCkBAIC0xNDA3LDcgKzE0MDcsNyBAQAogCWRvX3Vuc2V0X2Vudmlyb25tZW50X3ZhcmlhYmxlcygpOwogCiAJLyogRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBhc3NvY2lhdGVkIHRvIGEgY29uc29sZSAqLwotCWNvbnMgPSBDcmVhdGVGaWxlKCJDT05PVVQkIiwgR0VORVJJQ19XUklURSwKKwljb25zID0gQ3JlYXRlRmlsZVcoTCJDT05PVVQkIiwgR0VORVJJQ19XUklURSwKIAkJCUZJTEVfU0hBUkVfV1JJVEUsIE5VTEwsIE9QRU5fRVhJU1RJTkcsCiAJCQlGSUxFX0FUVFJJQlVURV9OT1JNQUwsIE5VTEwpOwogCWlmIChjb25zID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CkBAIC0xNDM3LDcgKzE0MzcsOSBAQAogCXNpLmhTdGRPdXRwdXQgPSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoZmhvdXQpOwogCXNpLmhTdGRFcnJvciA9IHdpbmFuc2lfZ2V0X29zZmhhbmRsZShmaGVycik7CiAKLQlpZiAoeHV0ZnRvd2NzX3BhdGgod2NtZCwgY21kKSA8IDApCisJaWYgKCphcmd2ICYmICFzdHJjbXAoY21kLCAqYXJndikpCisJCXdjbWRbMF0gPSBMJ1wwJzsKKwllbHNlIGlmICh4dXRmdG93Y3NfcGF0aCh3Y21kLCBjbWQpIDwgMCkKIAkJcmV0dXJuIC0xOwogCWlmIChkaXIgJiYgeHV0ZnRvd2NzX3BhdGgod2RpciwgZGlyKSA8IDApCiAJCXJldHVybiAtMTsKQEAgLTE0NjYsOCArMTQ2OCw4IEBACiAJd2VudmJsayA9IG1ha2VfZW52aXJvbm1lbnRfYmxvY2soZGVsdGFlbnYpOwogCiAJbWVtc2V0KCZwaSwgMCwgc2l6ZW9mKHBpKSk7Ci0JcmV0ID0gQ3JlYXRlUHJvY2Vzc1cod2NtZCwgd2FyZ3MsIE5VTEwsIE5VTEwsIFRSVUUsIGZsYWdzLAotCQl3ZW52YmxrLCBkaXIgPyB3ZGlyIDogTlVMTCwgJnNpLCAmcGkpOworCXJldCA9IENyZWF0ZVByb2Nlc3NXKCp3Y21kID8gd2NtZCA6IE5VTEwsIHdhcmdzLCBOVUxMLCBOVUxMLCBUUlVFLAorCQlmbGFncywgd2VudmJsaywgZGlyID8gd2RpciA6IE5VTEwsICZzaSwgJnBpKTsKIAogCWZyZWUod2VudmJsayk7CiAJZnJlZSh3YXJncyk7CkBAIC0xNTUzLDcgKzE1NTUsMTAgQEAKIAlpZiAocHJvZykgewogCQlpbnQgZXhlY19pZDsKIAkJaW50IGFyZ2MgPSAwOwotCQljb25zdCBjaGFyICoqYXJndjI7CisjaWZuZGVmIF9NU0NfVkVSCisJCWNvbnN0CisjZW5kaWYKKwkJY2hhciAqKmFyZ3YyOwogCQl3aGlsZSAoYXJndlthcmdjXSkgYXJnYysrOwogCQlBTExPQ19BUlJBWShhcmd2MiwgYXJnYyArIDEpOwogCQlhcmd2MlswXSA9IChjaGFyICopY21kOwkvKiBmdWxsIHBhdGggdG8gdGhlIHNjcmlwdCBmaWxlICovCkBAIC0xOTQ2LDEzICsxOTUxLDE5IEBACiAJc3RhdGljIHVuc2lnbmVkIGluaXRpYWxpemVkOwogCXN0YXRpYyBjaGFyIHVzZXJfbmFtZVsxMDBdOwogCXN0YXRpYyBzdHJ1Y3QgcGFzc3dkICpwOworCXdjaGFyX3QgYnVmWzEwMF07CiAJRFdPUkQgbGVuOwogCiAJaWYgKGluaXRpYWxpemVkKQogCQlyZXR1cm4gcDsKIAotCWxlbiA9IHNpemVvZih1c2VyX25hbWUpOwotCWlmICghR2V0VXNlck5hbWUodXNlcl9uYW1lLCAmbGVuKSkgeworCWxlbiA9IEFSUkFZX1NJWkUoYnVmKTsKKwlpZiAoIUdldFVzZXJOYW1lVyhidWYsICZsZW4pKSB7CisJCWluaXRpYWxpemVkID0gMTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHh3Y3N0b3V0Zih1c2VyX25hbWUsIGJ1Ziwgc2l6ZW9mKHVzZXJfbmFtZSkpIDwgMCkgewogCQlpbml0aWFsaXplZCA9IDE7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTIxMTYsOCArMjEyNywzMyBAQAogCQkJc2lnaW50X2ZuKFNJR0lOVCk7CiAJCXJldHVybiAwOwogCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKwljYXNlIFNJR0lMTDoKKwljYXNlIFNJR0ZQRToKKwljYXNlIFNJR1NFR1Y6CisJY2FzZSBTSUdURVJNOgorCWNhc2UgU0lHQlJFQUs6CisJY2FzZSBTSUdBQlJUOgorCWNhc2UgU0lHQUJSVF9DT01QQVQ6CisJCS8qCisJCSAqIFRoZSA8c2lnbmFsLmg+IGhlYWRlciBpbiB0aGUgTVMgQyBSdW50aW1lIGRlZmluZXMgOCBzaWduYWxzCisJCSAqIGFzIGJlaW5nIHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0uIEFueXRoaW5nIGVsc2UgY2F1c2VzIGFuCisJCSAqICJJbnZhbGlkIHNpZ25hbCBvciBlcnJvciIgKHdoaWNoIGluIERFQlVHIGJ1aWxkcyBjYXVzZXMgdGhlCisJCSAqIEFib3J0L1JldHJ5L0lnbm9yZSBkaWFsb2cpLiBXZSBieS1wYXNzIHRoZSBDUlQgZm9yIHRoaW5ncyB3ZQorCQkgKiBhbHJlYWR5IGtub3cgd2lsbCBmYWlsLgorCQkgKi8KKwkJcmV0dXJuIHJhaXNlKHNpZyk7CisJZGVmYXVsdDoKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKworI2Vsc2UKKwogCWRlZmF1bHQ6CiAJCXJldHVybiByYWlzZShzaWcpOworCisjZW5kaWYKKwogCX0KIH0KIApAQCAtMjI5OSwyMCArMjMzNSwzOSBAQAogCS8qIHNpbXVsYXRlIFRFUk0gdG8gZW5hYmxlIGF1dG8tY29sb3IgKHNlZSBjb2xvci5jKSAqLwogCWlmICghZ2V0ZW52KCJURVJNIikpCiAJCXNldGVudigiVEVSTSIsICJjeWd3aW4iLCAxKTsKKworCS8qIGNhbGN1bGF0ZSBIT01FIGlmIG5vdCBzZXQgKi8KKwlpZiAoIWdldGVudigiSE9NRSIpKSB7CisJCS8qCisJCSAqIHRyeSAkSE9NRURSSVZFJEhPTUVQQVRIIC0gdGhlIGhvbWUgc2hhcmUgbWF5IGJlIGEgbmV0d29yaworCQkgKiBsb2NhdGlvbiwgdGh1cyBhbHNvIGNoZWNrIGlmIHRoZSBwYXRoIGV4aXN0cyAoaS5lLiBpcyBub3QKKwkJICogZGlzY29ubmVjdGVkKQorCQkgKi8KKwkJaWYgKCh0bXAgPSBnZXRlbnYoIkhPTUVEUklWRSIpKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgdG1wKTsKKwkJCWlmICgodG1wID0gZ2V0ZW52KCJIT01FUEFUSCIpKSkgeworCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgdG1wKTsKKwkJCQlpZiAoaXNfZGlyZWN0b3J5KGJ1Zi5idWYpKQorCQkJCQlzZXRlbnYoIkhPTUUiLCBidWYuYnVmLCAxKTsKKwkJCQllbHNlCisJCQkJCXRtcCA9IE5VTEw7IC8qIHVzZSAkVVNFUlBST0ZJTEUgKi8KKwkJCX0KKwkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQl9CisJCS8qIHVzZSAkVVNFUlBST0ZJTEUgaWYgdGhlIGhvbWUgc2hhcmUgaXMgbm90IGF2YWlsYWJsZSAqLworCQlpZiAoIXRtcCAmJiAodG1wID0gZ2V0ZW52KCJVU0VSUFJPRklMRSIpKSkKKwkJCXNldGVudigiSE9NRSIsIHRtcCwgMSk7CisJfQogfQogCisjaWYgIWRlZmluZWQoX01TQ19WRVIpCiAvKgogICogRGlzYWJsZSBNU1ZDUlQgY29tbWFuZCBsaW5lIHdpbGRjYXJkIGV4cGFuc2lvbiAoX19nZXRtYWluYXJncyBjYWxsZWQgZnJvbQogICogbWluZ3cgc3RhcnR1cCBjb2RlLCBzZWUgaW5pdC5jIGluIG1pbmd3IHJ1bnRpbWUpLgogICovCiBpbnQgX0NSVF9nbG9iID0gMDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCWludCBuZXdtb2RlOwotfSBfc3RhcnR1cGluZm87Ci0KLWV4dGVybiBpbnQgX193Z2V0bWFpbmFyZ3MoaW50ICphcmdjLCB3Y2hhcl90ICoqKmFyZ3YsIHdjaGFyX3QgKioqZW52LCBpbnQgZ2xvYiwKLQkJX3N0YXJ0dXBpbmZvICpzaSk7CisjZW5kaWYKIAogc3RhdGljIE5PUkVUVVJOIHZvaWQgZGllX3N0YXJ0dXAodm9pZCkKIHsKQEAgLTIzOTAsMjEgKzI0NDUsNDAgQEAKIAkJCQkgIEdFTkVSSUNfV1JJVEUsIEZJTEVfRkxBR19OT19CVUZGRVJJTkcpOwogfQogCi12b2lkIG1pbmd3X3N0YXJ0dXAodm9pZCkKKyNpZmRlZiBfTVNDX1ZFUgorI2lmZGVmIF9ERUJVRworI2luY2x1ZGUgPGNydGRiZy5oPgorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIFdlIGltcGxlbWVudCB3bWFpbigpIGFuZCBjb21waWxlIHdpdGggLW11bmljb2RlLCB3aGljaCB3b3VsZAorICogbm9ybWFsbHkgaWdub3JlIG1haW4oKSwgYnV0IHdlIGNhbGwgdGhlIGxhdHRlciBmcm9tIHRoZSBmb3JtZXIKKyAqIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBub24tQVNDSUkgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMKKyAqIGFwcHJvcHJpYXRlbHkuCisgKgorICogVG8gYmUgbW9yZSBjb21wYXRpYmxlIHdpdGggdGhlIGNvcmUgZ2l0IGNvZGUsIHdlIGNvbnZlcnQKKyAqIGFyZ3YgaW50byBVVEY4IGFuZCBwYXNzIHRoZW0gZGlyZWN0bHkgdG8gbWFpbigpLgorICovCitpbnQgd21haW4oaW50IGFyZ2MsIGNvbnN0IHdjaGFyX3QgKip3YXJndikKIHsKLQlpbnQgaSwgbWF4bGVuLCBhcmdjOwotCWNoYXIgKmJ1ZmZlcjsKLQl3Y2hhcl90ICoqd2VudiwgKip3YXJndjsKLQlfc3RhcnR1cGluZm8gc2k7CisJaW50IGksIG1heGxlbiwgZXhpdF9zdGF0dXM7CisJY2hhciAqYnVmZmVyLCAqKnNhdmU7CisJY29uc3QgY2hhciAqKmFyZ3Y7CiAKIAl0cmFjZTJfaW5pdGlhbGl6ZV9jbG9jaygpOwogCi0JbWF5YmVfcmVkaXJlY3Rfc3RkX2hhbmRsZXMoKTsKKyNpZmRlZiBfTVNDX1ZFUgorI2lmZGVmIF9ERUJVRworCV9DcnRTZXRSZXBvcnRNb2RlKF9DUlRfQVNTRVJULCBfQ1JUREJHX01PREVfREVCVUcpOworI2VuZGlmCiAKLQkvKiBnZXQgd2lkZSBjaGFyIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi8KLQlzaS5uZXdtb2RlID0gMDsKLQlpZiAoX193Z2V0bWFpbmFyZ3MoJmFyZ2MsICZ3YXJndiwgJndlbnYsIF9DUlRfZ2xvYiwgJnNpKSA8IDApCi0JCWRpZV9zdGFydHVwKCk7CisjaWZkZWYgVVNFX01TVkNfQ1JUREJHCisJX0NydFNldERiZ0ZsYWcoX0NSVERCR19BTExPQ19NRU1fREYgfCBfQ1JUREJHX0xFQUtfQ0hFQ0tfREYpOworI2VuZGlmCisjZW5kaWYKKworCW1heWJlX3JlZGlyZWN0X3N0ZF9oYW5kbGVzKCk7CiAKIAkvKiBkZXRlcm1pbmUgc2l6ZSBvZiBhcmd2IGFuZCBlbnZpcm9uIGNvbnZlcnNpb24gYnVmZmVyICovCiAJbWF4bGVuID0gd2NzbGVuKHdhcmd2WzBdKTsKQEAgLTI0MTUsOSArMjQ4OSwxNiBAQAogCW1heGxlbiA9IDMgKiBtYXhsZW4gKyAxOwogCWJ1ZmZlciA9IG1hbGxvY19zdGFydHVwKG1heGxlbik7CiAKLQkvKiBjb252ZXJ0IGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50IHRvIFVURi04ICovCisJLyoKKwkgKiBDcmVhdGUgYSBVVEYtOCB2ZXJzaW9uIG9mIHdfYXJndi4gQWxzbyBjcmVhdGUgYSAic2F2ZSIgY29weQorCSAqIHRvIHJlbWVtYmVyIGFsbCB0aGUgc3RyaW5nIHBvaW50ZXJzIGJlY2F1c2UgcGFyc2Vfb3B0aW9ucygpCisJICogd2lsbCByZW1vdmUgY2xhaW1lZCBpdGVtcyBmcm9tIHRoZSBhcmd2IHRoYXQgd2UgcGFzcyBkb3duLgorCSAqLworCUFMTE9DX0FSUkFZKGFyZ3YsIGFyZ2MgKyAxKTsKKwlBTExPQ19BUlJBWShzYXZlLCBhcmdjICsgMSk7CiAJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKLQkJX19hcmd2W2ldID0gd2NzdG91dGZkdXBfc3RhcnR1cChidWZmZXIsIHdhcmd2W2ldLCBtYXhsZW4pOworCQlhcmd2W2ldID0gc2F2ZVtpXSA9IHdjc3RvdXRmZHVwX3N0YXJ0dXAoYnVmZmVyLCB3YXJndltpXSwgbWF4bGVuKTsKKwlhcmd2W2ldID0gc2F2ZVtpXSA9IE5VTEw7CiAJZnJlZShidWZmZXIpOwogCiAJLyogZml4IFdpbmRvd3Mgc3BlY2lmaWMgZW52aXJvbm1lbnQgc2V0dGluZ3MgKi8KQEAgLTI0MzYsNiArMjUxNywxNiBAQAogCiAJLyogaW5pdGlhbGl6ZSBVbmljb2RlIGNvbnNvbGUgKi8KIAl3aW5hbnNpX2luaXQoKTsKKworCS8qIGludm9rZSB0aGUgcmVhbCBtYWluKCkgdXNpbmcgb3VyIHV0ZjggdmVyc2lvbiBvZiBhcmd2LiAqLworCWV4aXRfc3RhdHVzID0gbWFpbihhcmdjLCBhcmd2KTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCWZyZWUoc2F2ZVtpXSk7CisJZnJlZShzYXZlKTsKKwlmcmVlKGFyZ3YpOworCisJcmV0dXJuIGV4aXRfc3RhdHVzOwogfQogCiBpbnQgdW5hbWUoc3RydWN0IHV0c25hbWUgKmJ1ZikKZGlmZiAtLWdpdCBhL2NvbXBhdC9taW5ndy5oIGIvY29tcGF0L21pbmd3LmgKaW5kZXggNTkzYmRiZi4uYTAzZTQwZSAxMDA2NDQKLS0tIGEvY29tcGF0L21pbmd3LmgKKysrIGIvY29tcGF0L21pbmd3LmgKQEAgLTM1MiwxMSArMzUyLDEzIEBACiAjaWZuZGVmIF9fTUlOR1c2NF9WRVJTSU9OX01BSk9SCiAjZGVmaW5lIG9mZl90IG9mZjY0X3QKICNkZWZpbmUgbHNlZWsgX2xzZWVraTY0CisjaWZuZGVmIF9NU0NfVkVSCiBzdHJ1Y3QgdGltZXNwZWMgewogCXRpbWVfdCB0dl9zZWM7CiAJbG9uZyB0dl9uc2VjOwogfTsKICNlbmRpZgorI2VuZGlmCiAKIHN0cnVjdCBtaW5nd19zdGF0IHsKICAgICBfZGV2X3Qgc3RfZGV2OwpAQCAtNTYyLDE4ICs1NjQsMTggQEAKIGV4dGVybiBDUklUSUNBTF9TRUNUSU9OIHBpbmZvX2NzOwogCiAvKgotICogQSByZXBsYWNlbWVudCBvZiBtYWluKCkgdGhhdCBhZGRzIHdpbjMyIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgorICogR2l0LCBsaWtlIG1vc3QgcG9ydGFibGUgQyBhcHBsaWNhdGlvbnMsIGltcGxlbWVudHMgYSBtYWluKCkgZnVuY3Rpb24uIE9uCisgKiBXaW5kb3dzLCB0aGlzIG1haW4oKSBmdW5jdGlvbiB3b3VsZCByZWNlaXZlIHBhcmFtZXRlcnMgZW5jb2RlZCBpbiB0aGUKKyAqIGN1cnJlbnQgbG9jYWxlLCBidXQgR2l0IGZvciBXaW5kb3dzIHdvdWxkIHByZWZlciBVVEYtOCBlbmNvZGVkICBwYXJhbWV0ZXJzLgorICoKKyAqIFRvIG1ha2UgdGhhdCBoYXBwZW4sIHdlIHN0aWxsIGRlY2xhcmUgbWFpbigpIGhlcmUsIGFuZCB0aGVuIGRlY2xhcmUgYW5kCisgKiBpbXBsZW1lbnQgd21haW4oKSAod2hpY2ggaXMgdGhlIFVuaWNvZGUgdmFyaWFudCBvZiBtYWluKCkpIGFuZCBjb21waWxlIHdpdGgKKyAqIC1tdW5pY29kZS4gVGhpcyB3bWFpbigpIGZ1bmN0aW9uIHJlZW5jb2RlcyB0aGUgcGFyYW1ldGVycyBmcm9tIFVURi0xNiB0bworICogVVRGLTggZm9ybWF0LCBzZXRzIHVwIGEgY291cGxlIG9mIG90aGVyIHRoaW5ncyBhcyByZXF1aXJlZCBvbiBXaW5kb3dzLCBhbmQKKyAqIHRoZW4gaGFuZHMgb2ZmIHRvIHRoZSBtYWluKCkgZnVuY3Rpb24uCiAgKi8KLQotdm9pZCBtaW5nd19zdGFydHVwKHZvaWQpOwotI2RlZmluZSBtYWluKGMsdikgZHVtbXlfZGVjbF9taW5nd19tYWluKHZvaWQpOyBcCi1zdGF0aWMgaW50IG1pbmd3X21haW4oYyx2KTsgXAotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KSBcCi17IFwKLQltaW5nd19zdGFydHVwKCk7IFwKLQlyZXR1cm4gbWluZ3dfbWFpbihfX2FyZ2MsICh2b2lkICopX19hcmd2KTsgXAotfSBcCi1zdGF0aWMgaW50IG1pbmd3X21haW4oYyx2KQoraW50IHdtYWluKGludCBhcmdjLCBjb25zdCB3Y2hhcl90ICoqd19hcmd2KTsKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiAKIC8qCiAgKiBVc2VkIGJ5IFB0aHJlYWQgQVBJIGltcGxlbWVudGF0aW9uIGZvciBXaW5kb3dzCmRpZmYgLS1naXQgYS9jb21wYXQvbXN2Yy5oIGIvY29tcGF0L21zdmMuaAppbmRleCAyOWE4Y2U4Li4xZDdhOGM2IDEwMDY0NAotLS0gYS9jb21wYXQvbXN2Yy5oCisrKyBiL2NvbXBhdC9tc3ZjLmgKQEAgLTYsNiArNiwxMCBAQAogI2luY2x1ZGUgPG1hbGxvYy5oPgogI2luY2x1ZGUgPGlvLmg+CiAKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDE4KSAvKiBzaWduZWQvdW5zaWduZWQgY29tcGFyaXNvbiAqLworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyNDQpIC8qIHR5cGUgY29udmVyc2lvbiwgcG9zc2libGUgbG9zcyBvZiBkYXRhICovCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA5MCkgLyogJ2Z1bmN0aW9uJyA6IGRpZmZlcmVudCAnY29uc3QnIHF1YWxpZmllcnMgKEFMTE9DX0dST1cgZXRjLikqLworCiAvKiBwb3J0aW5nIGZ1bmN0aW9uICovCiAjZGVmaW5lIGlubGluZSBfX2lubGluZQogI2RlZmluZSBfX2lubGluZV9fIF9faW5saW5lCkBAIC0xOCw2ICsyMiwxMiBAQAogCiAjdW5kZWYgRVJST1IKIAorI2RlZmluZSBmdGVsbG8gX2Z0ZWxsaTY0CisKK3R5cGVkZWYgaW50IHNpZ3NldF90OworLyogb3BlbiBmb3IgcmVhZGluZywgd3JpdGluZywgb3IgYm90aCAobm90IGluIGZjbnRsLmgpICovCisjZGVmaW5lIE9fQUNDTU9ERSAgICAgKF9PX1JET05MWSB8IF9PX1dST05MWSB8IF9PX1JEV1IpCisKICNpbmNsdWRlICJjb21wYXQvbWluZ3cuaCIKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvb2JzdGFjay5oIGIvY29tcGF0L29ic3RhY2suaAppbmRleCBjZWQ5NGQwLi5hZTM2ZWQ2IDEwMDY0NAotLS0gYS9jb21wYXQvb2JzdGFjay5oCisrKyBiL2NvbXBhdC9vYnN0YWNrLmgKQEAgLTQ5Niw3ICs0OTYsNyBAQAogKCAoaCktPnRlbXAudGVtcGludCA9IChjaGFyICopIChvYmopIC0gKGNoYXIgKikgKGgpLT5jaHVuaywJCVwKICAgKCgoKGgpLT50ZW1wLnRlbXBpbnQgPiAwCQkJCQkJXAogICAgICYmIChoKS0+dGVtcC50ZW1waW50IDwgKGgpLT5jaHVua19saW1pdCAtIChjaGFyICopIChoKS0+Y2h1bmspKQlcCi0gICA/IChpbnQpICgoaCktPm5leHRfZnJlZSA9IChoKS0+b2JqZWN0X2Jhc2UJCQkJXAorICAgPyAocHRyZGlmZl90KSAoKGgpLT5uZXh0X2ZyZWUgPSAoaCktPm9iamVjdF9iYXNlCQkJCVwKIAkgICAgPSAoaCktPnRlbXAudGVtcGludCArIChjaGFyICopIChoKS0+Y2h1bmspCQkJXAogICAgOiAoKChvYnN0YWNrX2ZyZWUpICgoaCksIChoKS0+dGVtcC50ZW1waW50ICsgKGNoYXIgKikgKGgpLT5jaHVuayksIDApLCAwKSkpCiAKZGlmZiAtLWdpdCBhL2NvbXBhdC9wb2xsL3BvbGwuYyBiL2NvbXBhdC9wb2xsL3BvbGwuYwppbmRleCA0NDU5NDA4Li4wZTk1ZGQ0IDEwMDY0NAotLS0gYS9jb21wYXQvcG9sbC9wb2xsLmMKKysrIGIvY29tcGF0L3BvbGwvcG9sbC5jCkBAIC0xNDksOCArMTQ5LDggQEAKICAgICBjYXNlIEZJTEVfVFlQRV9QSVBFOgogICAgICAgaWYgKCFvbmNlX29ubHkpCiAJewotCSAgTnRRdWVyeUluZm9ybWF0aW9uRmlsZSA9IChQTnRRdWVyeUluZm9ybWF0aW9uRmlsZSkKLQkgICAgR2V0UHJvY0FkZHJlc3MgKEdldE1vZHVsZUhhbmRsZSAoIm50ZGxsLmRsbCIpLAorCSAgTnRRdWVyeUluZm9ybWF0aW9uRmlsZSA9IChQTnRRdWVyeUluZm9ybWF0aW9uRmlsZSkodm9pZCAoKikodm9pZCkpCisJICAgIEdldFByb2NBZGRyZXNzIChHZXRNb2R1bGVIYW5kbGVXIChMIm50ZGxsLmRsbCIpLAogCQkJICAgICJOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlIik7CiAJICBvbmNlX29ubHkgPSBUUlVFOwogCX0KZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkLy5naXRpZ25vcmUgYi9jb21wYXQvdmNidWlsZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOGI3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL3ZjcGtnLworL01TVkMtREVGUy1HRU4KKy9WQ1BLRy1ERUZTCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9SRUFETUUgYi9jb21wYXQvdmNidWlsZC9SRUFETUUKaW5kZXggNjBmZDg3My4uMWI2ZGFiZiAxMDA2NDQKLS0tIGEvY29tcGF0L3ZjYnVpbGQvUkVBRE1FCisrKyBiL2NvbXBhdC92Y2J1aWxkL1JFQURNRQpAQCAtMSwzICsxLDY1IEBACitUaGUgU3RlcHMgdG8gQnVpbGQgR2l0IHdpdGggVlMyMDE1IG9yIFZTMjAxNyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKzEuIEluc3RhbGwgdGhlICJ2Y3BrZyIgb3BlbiBzb3VyY2UgcGFja2FnZSBtYW5hZ2VyIGFuZCBidWlsZCBlc3NlbnRpYWwKKyAgIHRoaXJkLXBhcnR5IGxpYnJhcmllcy4gIFRoZSBzdGVwcyBmb3IgdGhpcyBoYXZlIGJlZW4gY2FwdHVyZWQgaW4gYQorICAgc2V0IG9mIGNvbnZlbmllbmNlIHNjcmlwdHMuICBUaGVzZSBjYW4gYmUgcnVuIGZyb20gYSBzdG9jayBDb21tYW5kCisgICBQcm9tcHQgb3IgZnJvbSBhbiBTREsgYmFzaCB3aW5kb3c6CisKKyAgICQgY2QgPHJlcG9fcm9vdD4KKyAgICQgLi9jb21wYXQvdmNidWlsZC92Y3BrZ19pbnN0YWxsLmJhdAorCisgICBUaGUgdmNwa2cgdG9vbHMgYW5kIGFsbCBvZiB0aGUgdGhpcmQtcGFydHkgc291cmNlcyB3aWxsIGJlIGluc3RhbGxlZAorICAgaW4gdGhpcyBmb2xkZXI6CisgICAgICA8cmVwb19yb290Pi9jb21wYXQvdmNidWlsZC92Y3BrZy8KKworICAgQSBmaWxlIHdpbGwgYmUgY3JlYXRlZCB3aXRoIGEgc2V0IG9mIE1ha2VmaWxlIG1hY3JvcyBwb2ludGluZyB0byBhCisgICB1bmlmaWVkICJpbmNsdWRlIiwgImxpYiIsIGFuZCAiYmluIiBkaXJlY3RvcnkgKHJlbGVhc2UgYW5kIGRlYnVnKSBmb3IKKyAgIGFsbCBvZiB0aGUgcmVxdWlyZWQgcGFja2FnZXMuICBUaGlzIGZpbGUgd2lsbCBiZSBpbmNsdWRlZCBieSB0aGUgbWFpbgorICAgTWFrZWZpbGU6CisgICAgICA8cmVwb19yb290Pi9jb21wYXQvdmNidWlsZC9NU1ZDLURFRlMtR0VOCisKKzIuIE9QVElPTkFMTFkgY29weSB0aGUgdGhpcmQtcGFydHkgKi5kbGwgYW5kICoucGRiIGZpbGVzIGludG8gdGhlIHJlcG8KKyAgIHJvb3QgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcnVuIGFuZCBkZWJ1ZyBnaXQuZXhlIHdpdGhvdXQgaGF2aW5nIHRvCisgICBtYW5pcHVsYXRlIHlvdXIgUEFUSC4gIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGZvciBkZWJ1ZyBzZXNzaW9ucyBpbgorICAgVmlzdWFsIFN0dWRpby4KKworICAgVXNlIE9ORSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zIHdoaWNoIHNob3VsZCBtYXRjaCBob3cgeW91IHdhbnQgdG8KKyAgIGNvbXBpbGUgZ2l0LmV4ZS4KKworICAgJCAuL2NvbXBhdC92Y2J1aWxkL3ZjcGtnX2NvcHlfcGFja2FnZXMuYmF0IGRlYnVnCisgICAkIC4vY29tcGF0L3ZjYnVpbGQvdmNwa2dfY29weV9wYWNrYWdlcy5iYXQgcmVsZWFzZQorCiszLiBCdWlsZCBnaXQgdXNpbmcgTVNWQyBmcm9tIGFuIFNESyBiYXNoIHdpbmRvdyB1c2luZyBvbmUgb2YgdGhlCisgICBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICQgbWFrZSBNU1ZDPTEKKyAgICQgbWFrZSBNU1ZDPTEgREVCVUc9MQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FsdGVybmF0aXZlbHksIHJ1biBgbWFrZSB2Y3hwcm9qYCBhbmQgdGhlbiBsb2FkIHRoZSBnZW5lcmF0ZWQgYGdpdC5zbG5gIGluCitWaXN1YWwgU3R1ZGlvLiBUaGUgaW5pdGlhbCBidWlsZCB3aWxsIGluc3RhbGwgdGhlIHZjcGtnIHN5c3RlbSBhbmQgYnVpbGQgdGhlCitkZXBlbmRlbmNpZXMgYXV0b21hdGljYWxseS4gVGhpcyB3aWxsIHRha2UgYSB3aGlsZS4KKworSW5zdGVhZCBvZiBnZW5lcmF0aW5nIHRoZSBgZ2l0LnNsbmAgZmlsZSB5b3Vyc2VsZiAod2hpY2ggcmVxdWlyZXMgYSBmdWxsIEdpdAorZm9yIFdpbmRvd3MgU0RLKSwgeW91IG1heSB3YW50IHRvIGNvbnNpZGVyIGZldGNoaW5nIHRoZSBgdnMvbWFzdGVyYCBicmFuY2ggb2YKK2h0dHBzOi8vZ2l0aHViLmNvbS9naXQtZm9yLXdpbmRvd3MvZ2l0IGluc3RlYWQgKHdoaWNoIGlzIHVwZGF0ZWQgYXV0b21hdGljYWxseQordmlhIENJIHJ1bm5pbmcgYG1ha2UgdmN4cHJvamApLiBUaGUgYHZzL21hc3RlcmAgYnJhbmNoIGRvZXMgbm90IHJlcXVpcmUgYSBHaXQKK2ZvciBXaW5kb3dzIHRvIGJ1aWxkLCBidXQgeW91IGNhbiBydW4gdGhlIHRlc3Qgc2NyaXB0cyBpbiBhIHJlZ3VsYXIgR2l0IEJhc2guCisKK05vdGUgdGhhdCBgbWFrZSB2Y3hwcm9qYCB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIGFuZCBjb21taXQgdGhlIGdlbmVyYXRlZCBgLnNsbmAKK2FuZCBgLnZjeHByb2pgIGZpbGVzIHRvIHRoZSByZXBvLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhbGxvdyBidWlsZGluZyBhCitmdWxseS10ZXN0YWJsZSBHaXQgaW4gVmlzdWFsIFN0dWRpbywgd2hlcmUgYSByZWd1bGFyIEdpdCBCYXNoIGNhbiBiZSB1c2VkIHRvCitydW4gdGhlIHRlc3Qgc2NyaXB0cyAoYXMgb3Bwb3NlZCB0byBhIGZ1bGwgR2l0IGZvciBXaW5kb3dzIFNESyk6IGEgbnVtYmVyIG9mCitidWlsZCB0YXJnZXRzLCBzdWNoIGFzIEdpdCBjb21tYW5kcyBpbXBsZW1lbnRlZCBhcyBVbml4IHNoZWxsIHNjcmlwdHMgKHdoZXJlCitgQEBTSEVMTF9QQVRIQEBgIGFuZCBvdGhlciBwbGFjZWhvbGRlcnMgYXJlIGludGVycG9sYXRlZCkgcmVxdWlyZSBhIGZ1bGwtYmxvd24KK0dpdCBmb3IgV2luZG93cyBTREsgKHdoaWNoIGlzIGFib3V0IDEweCB0aGUgc2l6ZSBvZiBhIHJlZ3VsYXIgR2l0IGZvciBXaW5kb3dzCitpbnN0YWxsYXRpb24pLgorCitJZiB5b3VyIHBsYW4gaXMgdG8gb3BlbiBhIFB1bGwgUmVxdWVzdCB3aXRoIEdpdCBmb3IgV2luZG93cywgaXQgaXMgYSBnb29kIGlkZWEKK3RvIGRyb3AgdGhpcyBjb21taXQgYmVmb3JlIHN1Ym1pdHRpbmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFRoZSBTdGVwcyBvZiBCdWlsZCBHaXQgd2l0aCBWUzIwMDgKIAogMS4gWW91IG5lZWQgdGhlIGJ1aWxkIGVudmlyb25tZW50LCB3aGljaCBjb250YWlucyB0aGUgR2l0IGRlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0IGIvY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMTk0ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9maW5kX3ZzX2Vudi5iYXQKQEAgLTAsMCArMSwxNjggQEAKK0BFQ0hPIE9GRgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JFTSBZb3UgY2FuIHVzZSBlaXRoZXIgR0NDICh0aGUgZGVmYXVsdCkgb3IgTVNWQyB0byBidWlsZCBnaXQKK1JFTSB1c2luZyB0aGUgR0lULVNESyBjb21tYW5kIGxpbmUgdG9vbHMuCitSRU0gICAgICAgICQgbWFrZQorUkVNICAgICAgICAkIG1ha2UgTVNWQz0xCitSRU0KK1JFTSBHSVQtU0RLIEJBU0ggd2luZG93cyBpbmhlcml0IGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIGFsbCBvZgorUkVNIHRoZSBiaW4vbGliL2luY2x1ZGUgcGF0aHMgZm9yIEdDQy4gIEl0IERPRVMgTk9UIGluaGVyaXQgdmFsdWVzCitSRU0gZm9yIHRoZSBjb3JyZXNwb25kaW5nIE1TVkMgdG9vbHMuCitSRU0KK1JFTSBEdXJpbmcgbm9ybWFsIChub24tZ2l0KSBXaW5kb3dzIGRldmVsb3BtZW50LCB5b3UgbGF1bmNoIG9uZQorUkVNIG9mIHRoZSBwcm92aWRlZCAiZGV2ZWxvcGVyIGNvbW1hbmQgcHJvbXB0cyIgdG8gc2V0IGVudmlyb25tZW50CitSRU0gdmFyaWFibGVzIGZvciB0aGUgTVNWQyB0b29scy4KK1JFTQorUkVNIFRoZXJlZm9yZSwgdG8gYWxsb3cgTVNWQyBjb21tYW5kIGxpbmUgYnVpbGRzIG9mIGdpdCBmcm9tIEJBU0gKK1JFTSBhbmQgTUFLRSwgd2UgbXVzdCBibGVuZCB0aGVzZSB0d28gZGlmZmVyZW50IHdvcmxkcy4gIFRoaXMgc2NyaXB0CitSRU0gYXR0ZW1wdHMgdG8gZG8gdGhhdC4KK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSRU0gVGhpcyBCQVQgZmlsZSBzdGFydHMgaW4gYSBwbGFpbiAobm9uLWRldmVsb3BlcikgY29tbWFuZCBwcm9tcHQsCitSRU0gc2VhcmNoZXMgZm9yIHRoZSAiYmVzdCIgY29tbW1hbmQgcHJvbXB0IHNldHVwIHNjcmlwdCwgaW5zdGFsbHMKK1JFTSBpdCBpbnRvIHRoZSBjdXJyZW50IENNRCBwcm9jZXNzLCBhbmQgZXhwb3J0cyB0aGUgdmFyaW91cyBNU1ZDCitSRU0gZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB1c2UgYnkgTUFLRS4KK1JFTQorUkVNIFRoZSBvdXRwdXQgb2YgdGhpcyBzY3JpcHQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gYSBtYWtlICJpbmNsdWRlCitSRU0gZmlsZSIgYW5kIHJlZmVyZW5jZWQgYnkgdGhlIHRvcC1sZXZlbCBNYWtlZmlsZS4KK1JFTQorUkVNIFNlZSAiY29uZmlnLm1hay51bmFtZSIgKGxvb2sgZm9yIGNvbXBhdC92Y2J1aWxkL01TVkMtREVGUy1HRU4pLgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JFTSBUaGUgcHJvdmlkZWQgY29tbWFuZCBwcm9tcHRzIGFyZSBjdXN0b20gdG8gZWFjaCBWUyByZWxlYXNlIGFuZAorUkVNIGZpbGxlZCB3aXRoIGxvdHMgb2YgaW50ZXJuYWwga25vd2xlZGdlIChzdWNoIGFzIFJlZ2lzdHJ5IHNldHRpbmdzKTsKK1JFTSBldmVuIHRoZWlyIG5hbWVzIHZhcnkgYnkgcmVsZWFzZSwgc28gaXQgaXMgbm90IGFwcHJvcHJpYXRlIGZvciB1cworUkVNIHRvIGxvb2sgaW5zaWRlIHRoZW0uICBSYXRoZXIsIGp1c3QgcnVuIHRoZW0gaW4gYSBzdWJvcmRpbmF0ZQorUkVNIHByb2Nlc3MgYW5kIGV4dHJhY3QgdGhlIHNldHRpbmdzIHdlIG5lZWQuCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUkVNCitSRU0gQ3VycmVudCAoVlMyMDE3IGFuZCBiZXlvbmQpCitSRU0gLS0tLS0tLS0tLS0tLS0tLS0tLQorUkVNIFZpc3VhbCBTdHVkaW8gMjAxNyBpbnRyb2R1Y2VkIGEgbmV3IGluc3RhbGxhdGlvbiBsYXlvdXQgYW5kCitSRU0gc3VwcG9ydCBmb3Igc2lkZS1ieS1zaWRlIGluc3RhbGxhdGlvbiBvZiBtdWx0aXBsZSB2ZXJzaW9ucyBvZgorUkVNIFZTMjAxNy4gIEZ1cnRoZXJtb3JlLCB0aGVzZSBjYW4gYWxsIGNvZXhpc3Qgd2l0aCBpbnN0YWxsYXRpb25zCitSRU0gb2YgcHJldmlvdXMgdmVyc2lvbnMgb2YgVlMgKHdoaWNoIGhhdmUgYSBjb21wbGV0ZWx5IGRpZmZlcmVudAorUkVNIGxheW91dCBvbiBkaXNrKS4KK1JFTQorUkVNIFZTMjAxNyBVcGRhdGUgMiBpbnRyb2R1Y2VkIGEgInZzd2hlcmUuZXhlIiBjb21tYW5kOgorUkVNIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvdnN3aGVyZQorUkVNIGh0dHBzOi8vYmxvZ3MubXNkbi5taWNyb3NvZnQuY29tL2hlYXRocy8yMDE3LzAyLzI1L3Zzd2hlcmUtYXZhaWxhYmxlLworUkVNIGh0dHBzOi8vYmxvZ3MubXNkbi5taWNyb3NvZnQuY29tL3ZjYmxvZy8yMDE3LzAzLzA2L2ZpbmRpbmctdGhlLXZpc3VhbC1jLWNvbXBpbGVyLXRvb2xzLWluLXZpc3VhbC1zdHVkaW8tMjAxNy8KK1JFTQorUkVNIFZTMjAxNQorUkVNIC0tLS0tLQorUkVNIFZpc3VhbCBTdHVkaW8gMjAxNSB1c2VzIHRoZSB0cmFkaXRpb25hbCBWY1ZhcnNBbGwuCitSRU0KK1JFTSBFYXJsaWVyIFZlcnNpb25zCitSRU0gLS0tLS0tLS0tLS0tLS0tLQorUkVNIEN1cnJlbnRseSB1bnN1cHBvcnRlZC4KK1JFTQorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JFTSBOb3RlOiBUaHJvdWdob3V0IHRoaXMgc2NyaXB0IHdlIHVzZSAiZGlyIDxwYXRoPiAmJiA8Y21kPiIgcmF0aGVyCitSRU0gdGhhbiAiaWYgZXhpc3QgPHBhdGg+IiBiZWNhdXNlIG9mIHNjcmlwdCBwcm9ibGVtcyB3aXRoIHBhdGhuYW1lcworUkVNIGNvbnRhaW5pbmcgc3BhY2VzLgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUkVNIFNhbml0aXplIFBBVEggdG8gcHJldmVudCBnaXQtc2RrIHBhdGhzIGZyb20gY29uZnVzaW5nICJ3bWljLmV4ZSIKK1JFTSAoY2FsbGVkIGludGVybmFsbHkgaW4gc29tZSBvZiB0aGUgc3lzdGVtIEJBVCBmaWxlcykuCitTRVQgUEFUSD0lU3lzdGVtUm9vdCVcc3lzdGVtMzI7JVN5c3RlbVJvb3QlOyVTeXN0ZW1Sb290JVxTeXN0ZW0zMlxXYmVtOworCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis6Y3VycmVudAorICAgU0VUIHZzX3doZXJlPUM6XFByb2dyYW0gRmlsZXMgKHg4NilcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW9cSW5zdGFsbGVyXHZzd2hlcmUuZXhlCisgICBkaXIgIiV2c193aGVyZSUiID5udWwgMj5udWwgJiYgR09UTyBoYXZlX3ZzX3doZXJlCisgICBHT1RPIG5vdF8yMDE3CisKKzpoYXZlX3ZzX3doZXJlCisgICBSRU0gVHJ5IHRvIHVzZSBWc1doZXJlIHRvIGdldCB0aGUgbG9jYXRpb24gb2YgVnNEZXZDbWQuCisKKyAgIFJFTSBLZWVwIFZzRGV2Q21kIGZyb20gY2QnaW5nIGF3YXkuCisgICBTRVQgVlNDTURfU1RBUlRfRElSPS4KKworICAgUkVNIEdldCB0aGUgcm9vdCBvZiB0aGUgVlMgcHJvZHVjdCBpbnN0YWxsYXRpb24uCisgICBGT1IgL0YgInVzZWJhY2txIHRva2Vucz0qIiAlJWkgSU4gKGAiJXZzX3doZXJlJSIgLWxhdGVzdCAtcmVxdWlyZXMgTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Xb3JrbG9hZC5OYXRpdmVEZXNrdG9wIC1wcm9wZXJ0eSBpbnN0YWxsYXRpb25QYXRoYCkgRE8gQFNFVCB2c19pcD0lJWkKKworICAgU0VUIHZzX2RldmNtZD0ldnNfaXAlXENvbW1vbjdcVG9vbHNcVnNEZXZDbWQuYmF0CisgICBkaXIgIiV2c19kZXZjbWQlIiA+bnVsIDI+bnVsICYmIEdPVE8gaGF2ZV92c19kZXZjbWQKKyAgIEdPVE8gbm90XzIwMTcKKworOmhhdmVfdnNfZGV2Y21kCisgICBSRU0gVXNlIFZzRGV2Q21kIHRvIHNldHVwIHRoZSBlbnZpcm9ubWVudCBvZiB0aGlzIHByb2Nlc3MuCisgICBSRU0gU2V0dXAgQ0wgZm9yIGJ1aWxkaW5nIDY0LWJpdCBhcHBzIHVzaW5nIDY0LWJpdCB0b29scy4KKyAgIEBjYWxsICIldnNfZGV2Y21kJSIgLW5vX2xvZ28gLWFyY2g9eDY0IC1ob3N0X2FyY2g9eDY0CisKKyAgIFNFVCB0Z3Q9JVZTQ01EX0FSR19UR1RfQVJDSCUKKworICAgU0VUIG1uPSVWQ1Rvb2xzSW5zdGFsbERpciUKKyAgIFNFVCBtc3ZjX2luY2x1ZGVzPS1JIiVtbiVJTkNMVURFIgorICAgU0VUIG1zdmNfbGlicz0tTCIlbW4lbGliXCV0Z3QlIgorICAgU0VUIG1zdmNfYmluX2Rpcj0lbW4lYmluXEhvc3QlVlNDTURfQVJHX0hPU1RfQVJDSCVcJXRndCUKKworICAgU0VUIHNka19kaXI9JVdpbmRvd3NTZGtEaXIlCisgICBTRVQgc2RrX3Zlcj0lV2luZG93c1NES1ZlcnNpb24lCisgICBTRVQgc2k9JXNka19kaXIlSW5jbHVkZVwlc2RrX3ZlciUKKyAgIFNFVCBzZGtfaW5jbHVkZXM9LUkiJXNpJXVjcnQiIC1JIiVzaSV1bSIgLUkiJXNpJXNoYXJlZCIKKyAgIFNFVCBzbD0lc2RrX2RpciVsaWJcJXNka192ZXIlCisgICBTRVQgc2RrX2xpYnM9LUwiJXNsJXVjcnRcJXRndCUiIC1MIiVzbCV1bVwldGd0JSIKKworICAgU0VUIHZzX3Zlcj0lVmlzdWFsU3R1ZGlvVmVyc2lvbiUKKworICAgR09UTyBwcmludF92YXJzCisKK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzpub3RfMjAxNworICAgUkVNIFNlZSBpZiBWUzIwMTUgaXMgaW5zdGFsbGVkLgorCisgICBTRVQgdnNfMjAxNV9iYXQ9QzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAxNC4wXFZDXHZjdmFyc2FsbC5iYXQKKyAgIGRpciAiJXZzXzIwMTVfYmF0JSIgPm51bCAyPm51bCAmJiBHT1RPIGhhdmVfdnNfMjAxNQorICAgR09UTyBub3RfMjAxNQorCis6aGF2ZV92c18yMDE1CisgICBSRU0gVXNlIFZjVmFyc0FsbCBsaWtlIHRoZSAieDY0IE5hdGl2ZSIgY29tbWFuZCBwcm9tcHQuCisgICBSRU0gU2V0dXAgQ0wgZm9yIGJ1aWxkaW5nIDY0LWJpdCBhcHBzIHVzaW5nIDY0LWJpdCB0b29scy4KKyAgIEBjYWxsICIldnNfMjAxNV9iYXQlIiBhbWQ2NAorCisgICBSRU0gTm90ZSB0aGF0IGluIFZTMjAxNSB0aGV5IHVzZSAieDY0IiBpbiBzb21lIGNvbnRleHRzIGFuZCAiYW1kNjQiIGluIG90aGVycy4KKyAgIFNFVCBtbj1DOlxQcm9ncmFtIEZpbGVzICh4ODYpXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDE0LjBcVkNcCisgICBTRVQgbXN2Y19pbmNsdWRlcz0tSSIlbW4lSU5DTFVERSIKKyAgIFNFVCBtc3ZjX2xpYnM9LUwiJW1uJWxpYlxhbWQ2NCIKKyAgIFNFVCBtc3ZjX2Jpbl9kaXI9JW1uJWJpblxhbWQ2NAorCisgICBTRVQgc2RrX2Rpcj0lV2luZG93c1Nka0RpciUKKyAgIFNFVCBzZGtfdmVyPSVXaW5kb3dzU0RLVmVyc2lvbiUKKyAgIFNFVCBzaT0lc2RrX2RpciVJbmNsdWRlXCVzZGtfdmVyJQorICAgU0VUIHNka19pbmNsdWRlcz0tSSIlc2kldWNydCIgLUkiJXNpJXVtIiAtSSIlc2klc2hhcmVkIiAtSSIlc2kld2lucnQiCisgICBTRVQgc2w9JXNka19kaXIlbGliXCVzZGtfdmVyJQorICAgU0VUIHNka19saWJzPS1MIiVzbCV1Y3J0XHg2NCIgLUwiJXNsJXVtXHg2NCIKKworICAgU0VUIHZzX3Zlcj0lVmlzdWFsU3R1ZGlvVmVyc2lvbiUKKworICAgR09UTyBwcmludF92YXJzCisKK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzpub3RfMjAxNQorICAgZWNobyAiRVJST1I6IHVuc3VwcG9ydGVkIFZTIHZlcnNpb24gKG9sZGVyIHRoYW4gVlMyMDE1KSIgPiYyCisgICBFWElUIC9CIDEKKworUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworOnByaW50X3ZhcnMKKyAgIFJFTSBEdW1wIHRoZSBlc3NlbnRpYWwgdmFycyB0byBzdGRvdXQgdG8gYWxsb3cgdGhlIG1haW4KKyAgIFJFTSBNYWtlZmlsZSB0byBpbmNsdWRlIGl0LiAgU2VlIGNvbmZpZy5tYWsudW5hbWUuCisgICBSRU0gSW5jbHVkZSBET1Mtc3R5bGUgYW5kIEJBU0gtc3R5bGUgcGF0aCBmb3IgYmluIGRpci4KKworICAgZWNobyBtc3ZjX2Jpbl9kaXI9JW1zdmNfYmluX2RpciUKKyAgIFNFVCBYMT0lbXN2Y19iaW5fZGlyOkM6PS9DJQorICAgU0VUIFgyPSVYMTpcPS8lCisgICBlY2hvIG1zdmNfYmluX2Rpcl9tc3lzPSVYMiUKKworICAgZWNobyBtc3ZjX2luY2x1ZGVzPSVtc3ZjX2luY2x1ZGVzJQorICAgZWNobyBtc3ZjX2xpYnM9JW1zdmNfbGlicyUKKworICAgZWNobyBzZGtfaW5jbHVkZXM9JXNka19pbmNsdWRlcyUKKyAgIGVjaG8gc2RrX2xpYnM9JXNka19saWJzJQorCisgICBlY2hvIHZzX3Zlcj0ldnNfdmVyJQorCisgICBFWElUIC9CIDAKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwgYi9jb21wYXQvdmNidWlsZC9zY3JpcHRzL2NsaW5rLnBsCmluZGV4IGE4N2QwZGEuLmM3YjAyMWIgMTAwNzU1Ci0tLSBhL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9jbGluay5wbApAQCAtMTIsMzIgKzEyLDYyIEBACiB1c2Ugc3RyaWN0OwogbXkgQGFyZ3MgPSAoKTsKIG15IEBjZmxhZ3MgPSAoKTsKK215IEBsZmxhZ3MgPSAoKTsKIG15ICRpc19saW5raW5nID0gMDsKK215ICRpc19kZWJ1ZyA9IDA7CiB3aGlsZSAoQEFSR1YpIHsKIAlteSAkYXJnID0gc2hpZnQgQEFSR1Y7Ci0JaWYgKCIkYXJnIiA9fiAvXi1bRElNR09dLykgeworCWlmICgiJGFyZyIgZXEgIi1EREVCVUciKSB7CisJICAgICMgU29tZSB2Y3BrZy1iYXNlZCBsaWJyYXJpZXMgaGF2ZSBkaWZmZXJlbnQgbmFtZXMgZm9yIHJlbGVhc2UKKwkgICAgIyBhbmQgZGVidWcgdmVyc2lvbnMuICBUaGlzIGhhY2sgYXNzdW1lcyB0aGF0IC1EREVCVUcgY29tZXMKKwkgICAgIyBiZWZvcmUgYW55ICItbCoiIGZsYWdzLgorCSAgICAkaXNfZGVidWcgPSAxOworCX0KKwlpZiAoIiRhcmciID1+IC9eLVtESU1HT1pdLykgewogCQlwdXNoKEBjZmxhZ3MsICRhcmcpOwogCX0gZWxzaWYgKCIkYXJnIiBlcSAiLW8iKSB7CiAJCW15ICRmaWxlX291dCA9IHNoaWZ0IEBBUkdWOwogCQlpZiAoIiRmaWxlX291dCIgPX4gL2V4ZSQvKSB7CiAJCQkkaXNfbGlua2luZyA9IDE7CisJCQkjIENyZWF0ZSBmb28uZXhlIGFuZCBmb28ucGRiCiAJCQlwdXNoKEBhcmdzLCAiLU9VVDokZmlsZV9vdXQiKTsKIAkJfSBlbHNlIHsKKwkJCSMgQ3JlYXRlIGZvby5vIGFuZCBmb28uby5wZGIKIAkJCXB1c2goQGFyZ3MsICItRm8kZmlsZV9vdXQiKTsKKwkJCXB1c2goQGFyZ3MsICItRmQkZmlsZV9vdXQucGRiIik7CiAJCX0KIAl9IGVsc2lmICgiJGFyZyIgZXEgIi1seiIpIHsKKwkgICAgaWYgKCRpc19kZWJ1ZykgeworCQlwdXNoKEBhcmdzLCAiemxpYmQubGliIik7CisJICAgIH0gZWxzZXsKIAkJcHVzaChAYXJncywgInpsaWIubGliIik7CisJICAgIH0KIAl9IGVsc2lmICgiJGFyZyIgZXEgIi1saWNvbnYiKSB7Ci0JCXB1c2goQGFyZ3MsICJpY29udi5saWIiKTsKKwkJcHVzaChAYXJncywgImxpYmljb252LmxpYiIpOwogCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWxjcnlwdG8iKSB7CiAJCXB1c2goQGFyZ3MsICJsaWJlYXkzMi5saWIiKTsKIAl9IGVsc2lmICgiJGFyZyIgZXEgIi1sc3NsIikgewogCQlwdXNoKEBhcmdzLCAic3NsZWF5MzIubGliIik7CiAJfSBlbHNpZiAoIiRhcmciIGVxICItbGN1cmwiKSB7Ci0JCXB1c2goQGFyZ3MsICJsaWJjdXJsLmxpYiIpOworCQlteSAkbGliID0gIiI7CisJCSMgTmV3ZXIgdmNwa2cgZGVmaW5pdGlvbnMgY2FsbCB0aGlzIGxpYmN1cmxfaW1wLmxpYjsgRG8gd2UKKwkJIyBuZWVkIHRvIHVzZSB0aGF0IGluc3RlYWQ/CisJCWZvcmVhY2ggbXkgJGZsYWcgKEBsZmxhZ3MpIHsKKwkJCWlmICgkZmxhZyA9fiAvXi1MSUJQQVRIOiguKikvKSB7CisJCQkJZm9yZWFjaCBteSAkbCAoImxpYmN1cmxfaW1wLmxpYiIsICJsaWJjdXJsLmxpYiIpIHsKKwkJCQkJaWYgKC1mICIkMS8kbCIpIHsKKwkJCQkJCSRsaWIgPSAkbDsKKwkJCQkJCWxhc3Q7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJcHVzaChAYXJncywgJGxpYik7CisJfSBlbHNpZiAoIiRhcmciIGVxICItbGV4cGF0IikgeworCQlwdXNoKEBhcmdzLCAiZXhwYXQubGliIik7CiAJfSBlbHNpZiAoIiRhcmciID1+IC9eLUwvICYmICIkYXJnIiBuZSAiLUxUQ0ciKSB7CiAJCSRhcmcgPX4gcy9eLUwvLUxJQlBBVEg6LzsKLQkJcHVzaChAYXJncywgJGFyZyk7CisJCXB1c2goQGxmbGFncywgJGFyZyk7CiAJfSBlbHNpZiAoIiRhcmciID1+IC9eLVIvKSB7CiAJCSMgZWF0CiAJfSBlbHNlIHsKQEAgLTQ1LDEwICs3NSwxMSBAQAogCX0KIH0KIGlmICgkaXNfbGlua2luZykgeworCXB1c2goQGFyZ3MsIEBsZmxhZ3MpOwogCXVuc2hpZnQoQGFyZ3MsICJsaW5rLmV4ZSIpOwogfSBlbHNlIHsKIAl1bnNoaWZ0KEBhcmdzLCAiY2wuZXhlIik7CiAJcHVzaChAYXJncywgQGNmbGFncyk7CiB9Ci0jcHJpbnRmKCIqKioqIEBhcmdzXG4iKTsKK3ByaW50ZihTVERFUlIgIioqKiogQGFyZ3NcblxuXG4iKSBpZiAoIWRlZmluZWQoJEVOVnsnUVVJRVRfR0VOJ30pKTsKIGV4aXQgKHN5c3RlbShAYXJncykgIT0gMCk7CmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC92Y3BrZ19jb3B5X2RsbHMuYmF0IGIvY29tcGF0L3ZjYnVpbGQvdmNwa2dfY29weV9kbGxzLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzY2MWMxCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvdmNwa2dfY29weV9kbGxzLmJhdApAQCAtMCwwICsxLDM5IEBACitARUNITyBPRkYKK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSRU0gVGhpcyBzY3JpcHQgaXMgYW4gb3B0aW9uYWwgc3RlcC4gSXQgY29waWVzIHRoZSAqLmRsbCBhbmQgKi5wZGIKK1JFTSBmaWxlcyAoY3JlYXRlZCBieSB2Y3BrZ19pbnN0YWxsLmJhdCkgaW50byB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeQorUkVNIG9mIHRoZSByZXBvIHNvIHRoYXQgeW91IGNhbiB0eXBlICIuL2dpdC5leGUiIGFuZCBmaW5kIHRoZW0gd2l0aG91dAorUkVNIGhhdmluZyB0byBmaXh1cCB5b3VyIFBBVEguCitSRU0KK1JFTSBOT1RFOiBCZWNhdXNlIHRoZSBuYW1lcyBvZiBzb21lIERMTCBmaWxlcyBjaGFuZ2UgYmV0d2VlbiBERUJVRyBhbmQKK1JFTSBOT1RFOiBSRUxFQVNFIGJ1aWxkcyB3aGVuIGJ1aWx0IHVzaW5nICJ2Y3BrZy5leGUiLCB5b3Ugd2lsbCBuZWVkCitSRU0gTk9URTogdG8gY29weSB1cCB0aGUgY29ycmVzcG9uZGluZyB2ZXJzaW9uLgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVNFVExPQ0FMIEVuYWJsZURlbGF5ZWRFeHBhbnNpb24KKworCUBGT1IgL0YgImRlbGltcz0iICUlRCBJTiAoIiV+ZHAwIikgRE8gQFNFVCBjd2Q9JSV+ZkQKKwljZCAlY3dkJQorCisJU0VUIGFyY2g9eDY0LXdpbmRvd3MKKwlTRVQgaW5zdD0lY3dkJXZjcGtnXGluc3RhbGxlZFwlYXJjaCUKKworCUlGIFslMV09PVtyZWxlYXNlXSAoCisJCWVjaG8gQ29weWluZyBSRUxFQVNFIG1vZGUgRExMcyB0byByZXBvIHJvb3QuLi4KKwkpIEVMU0UgSUYgWyUxXT09W2RlYnVnXSAoCisJCVNFVCBpbnN0PSVpbnN0JVxkZWJ1ZworCQllY2hvIENvcHlpbmcgREVCVUcgbW9kZSBETExzIHRvIHJlcG8gcm9vdC4uLgorCSkgRUxTRSAoCisJCWVjaG8gRVJST1I6IEludmFsaWQgYXJndW1lbnQuCisJCWVjaG8gVXNhZ2U6ICV+MCByZWxlYXNlCisJCWVjaG8gVXNhZ2U6ICV+MCBkZWJ1ZworCQlFWElUIC9CIDEKKwkpCisKKwl4Y29weSAvZS9zL3YveSAlaW5zdCVcYmluXCouZGxsIC4uXC4uXAorCXhjb3B5IC9lL3Mvdi95ICVpbnN0JVxiaW5cKi5wZGIgLi5cLi5cCisKKwl4Y29weSAvZS9zL3YveSAlaW5zdCVcYmluXCouZGxsIC4uXC4uXHRcaGVscGVyXAorCXhjb3B5IC9lL3Mvdi95ICVpbnN0JVxiaW5cKi5wZGIgLi5cLi5cdFxoZWxwZXJcCisKKwlFWElUIC9CIDAKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL3ZjcGtnX2luc3RhbGwuYmF0IGIvY29tcGF0L3ZjYnVpbGQvdmNwa2dfaW5zdGFsbC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkMGJhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL3ZjcGtnX2luc3RhbGwuYmF0CkBAIC0wLDAgKzEsODAgQEAKK0BFQ0hPIE9GRgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JFTSBUaGlzIHNjcmlwdCBpbnN0YWxscyB0aGUgInZjcGtnIiBzb3VyY2UgcGFja2FnZSBtYW5hZ2VyIGFuZCB1c2VzCitSRU0gaXQgdG8gYnVpbGQgdGhlIHRoaXJkLXBhcnR5IGxpYnJhcmllcyB0aGF0IGdpdCByZXF1aXJlcyB3aGVuIGl0CitSRU0gaXMgYnVpbHQgdXNpbmcgTVNWQy4KK1JFTQorUkVNIFsxXSBJbnN0YWxsIFZDUEtHLgorUkVNICAgICBbYV0gQ3JlYXRlIDxyb290Pi9jb21wYXQvdmNidWlsZC92Y3BrZy8KK1JFTSAgICAgW2JdIERvd25sb2FkICJ2Y3BrZyIuCitSRU0gICAgIFtjXSBDb21waWxlIHVzaW5nIHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIHZlcnNpb24gb2YgVlMuCitSRU0gICAgIFtkXSBDcmVhdGUgPHJvb3Q+L2NvbXBhdC92Y2J1aWxkL3ZjcGtnL3ZjcGtnLmV4ZQorUkVNCitSRU0gWzJdIEluc3RhbGwgdGhpcmQtcGFydHkgbGlicmFyaWVzLgorUkVNICAgICBbYV0gRG93bmxvYWQgZWFjaCAod2hpY2ggbWF5IGFsc28gaW5zdGFsbCBDTUFLRSkuCitSRU0gICAgIFtiXSBDb21waWxlIGluIFJFTEVBU0UgbW9kZSBhbmQgaW5zdGFsbCBpbjoKK1JFTSAgICAgICAgIHZjcGtnL2luc3RhbGxlZC88YXJjaD4ve2JpbixsaWJ9CitSRU0gICAgIFtjXSBDb21waWxlIGluIERFQlVHIG1vZGUgYW5kIGluc3RhbGwgaW46CitSRU0gICAgICAgICB2Y3BrZy9pbnN0YWxsZWQvPGFyY2g+L2RlYnVnL3tiaW4sbGlifQorUkVNICAgICBbZF0gSW5zdGFsbCBoZWFkZXJzIGluOgorUkVNICAgICAgICAgdmNwa2cvaW5zdGFsbGVkLzxhcmNoPi9pbmNsdWRlCitSRU0KK1JFTSBbM10gQ3JlYXRlIGEgc2V0IG9mIE1BS0UgZGVmaW5pdGlvbnMgZm9yIHRoZSB0b3AtbGV2ZWwKK1JFTSAgICAgTWFrZWZpbGUgdG8gYWxsb3cgIm1ha2UgTVNWQz0xIiB0byBmaW5kIHRoZSBhYm92ZQorUkVNICAgICB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMuCitSRU0gICAgIFthXSBXcml0ZSB2Y3BrZy9WQ1BHSy1ERUZTCitSRU0KK1JFTSBodHRwczovL2Jsb2dzLm1zZG4ubWljcm9zb2Z0LmNvbS92Y2Jsb2cvMjAxNi8wOS8xOS92Y3BrZy1hLXRvb2wtdG8tYWNxdWlyZS1hbmQtYnVpbGQtYy1vcGVuLXNvdXJjZS1saWJyYXJpZXMtb24td2luZG93cy8KK1JFTSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L3ZjcGtnCitSRU0gaHR0cHM6Ly92Y3BrZy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJU0VUTE9DQUwgRW5hYmxlRGVsYXllZEV4cGFuc2lvbgorCisJQEZPUiAvRiAiZGVsaW1zPSIgJSVEIElOICgiJX5kcDAiKSBETyBAU0VUIGN3ZD0lJX5mRAorCWNkICVjd2QlCisKKwlkaXIgdmNwa2dcdmNwa2cuZXhlID5udWwgMj5udWwgJiYgR09UTyA6aW5zdGFsbF9saWJyYXJpZXMKKworCWVjaG8gRmV0Y2hpbmcgdmNwa2cgaW4gJWN3ZCV2Y3BrZworCWdpdC5leGUgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC92Y3BrZyB2Y3BrZworCUlGIEVSUk9STEVWRUwgMSAoIEVYSVQgL0IgMSApCisKKwljZCB2Y3BrZworCWVjaG8gQnVpbGRpbmcgdmNwa2cKKwlwb3dlcnNoZWxsIC1leGVjIGJ5cGFzcyBzY3JpcHRzXGJvb3RzdHJhcC5wczEKKwlJRiBFUlJPUkxFVkVMIDEgKCBFWElUIC9CIDEgKQorCisJZWNobyBTdWNjZXNzZnVsbHkgaW5zdGFsbGVkICVjd2QldmNwa2dcdmNwa2cuZXhlCisKKzppbnN0YWxsX2xpYnJhcmllcworCVNFVCBhcmNoPXg2NC13aW5kb3dzCisKKwllY2hvIEluc3RhbGxpbmcgdGhpcmQtcGFydHkgbGlicmFyaWVzLi4uCisJRk9SICUlaSBJTiAoemxpYiBleHBhdCBsaWJpY29udiBvcGVuc3NsIGxpYnNzaDIgY3VybCkgRE8gKAorCSAgICBjZCAlY3dkJXZjcGtnCisJICAgIElGIE5PVCBFWElTVCAicGFja2FnZXNcJSVpXyVhcmNoJSIgQ0FMTCA6c3ViX19pbnN0YWxsX29uZSAlJWkKKwkgICAgSUYgRVJST1JMRVZFTCAxICggRVhJVCAvQiAxICkKKwkpCisKKzppbnN0YWxsX2RlZmluZXMKKwljZCAlY3dkJQorCVNFVCBpbnN0PSVjd2QldmNwa2dcaW5zdGFsbGVkXCVhcmNoJQorCisJZWNobyB2Y3BrZ19pbmM9LUkiJWluc3QlXGluY2x1ZGUiPlZDUEtHLURFRlMKKwllY2hvIHZjcGtnX3JlbF9saWI9LUwiJWluc3QlXGxpYiI+PlZDUEtHLURFRlMKKwllY2hvIHZjcGtnX3JlbF9iaW49IiVpbnN0JVxiaW4iPj5WQ1BLRy1ERUZTCisJZWNobyB2Y3BrZ19kYmdfbGliPS1MIiVpbnN0JVxkZWJ1Z1xsaWIiPj5WQ1BLRy1ERUZTCisJZWNobyB2Y3BrZ19kYmdfYmluPSIlaW5zdCVcZGVidWdcYmluIj4+VkNQS0ctREVGUworCisJRVhJVCAvQiAwCisKKworOnN1Yl9faW5zdGFsbF9vbmUKKwllY2hvICAgICBJbnN0YWxsaW5nIHBhY2thZ2UgJTEuLi4KKworCS5cdmNwa2cuZXhlIGluc3RhbGwgJTE6JWFyY2glCisJSUYgRVJST1JMRVZFTCAxICggRVhJVCAvQiAxICkKKworCWVjaG8gICAgIEZpbmlzaGVkICUxCisJZ290byA6RU9GCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvZ2l0Lm1hbmlmZXN0IGIvY29tcGF0L3dpbjMyL2dpdC5tYW5pZmVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFlM2NjCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL2dpdC5tYW5pZmVzdApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+Cis8YXNzZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIiBtYW5pZmVzdFZlcnNpb249IjEuMCI+CisJPGFzc2VtYmx5SWRlbnRpdHkgdHlwZT0id2luMzIiIG5hbWU9IkdpdCIgdmVyc2lvbj0iMC4wLjAuMSIgLz4KKwk8dHJ1c3RJbmZvIHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MiI+CisJCTxzZWN1cml0eT4KKwkJCTxyZXF1ZXN0ZWRQcml2aWxlZ2VzPgorCQkJCTxyZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbCBsZXZlbD0iYXNJbnZva2VyIiB1aUFjY2Vzcz0iZmFsc2UiIC8+CisJCQk8L3JlcXVlc3RlZFByaXZpbGVnZXM+CisJCTwvc2VjdXJpdHk+CisJPC90cnVzdEluZm8+CisJPGNvbXBhdGliaWxpdHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206Y29tcGF0aWJpbGl0eS52MSI+CisJCTxhcHBsaWNhdGlvbj4KKwkJCTwhLS0gV2luZG93cyBWaXN0YSAtLT4KKwkJCTxzdXBwb3J0ZWRPUyBJZD0ie2UyMDExNDU3LTE1NDYtNDNjNS1hNWZlLTAwOGRlZWUzZDNmMH0iLz4KKwkJCTwhLS0gV2luZG93cyA3IC0tPgorCQkJPHN1cHBvcnRlZE9TIElkPSJ7MzUxMzhiOWEtNWQ5Ni00ZmJkLThlMmQtYTI0NDAyMjVmOTNhfSIvPgorCQkJPCEtLSBXaW5kb3dzIDggLS0+CisJCQk8c3VwcG9ydGVkT1MgSWQ9Ins0YTJmMjhlMy01M2I5LTQ0NDEtYmE5Yy1kNjlkNGE0YTZlMzh9Ii8+CisJCQk8IS0tIFdpbmRvd3MgOC4xIC0tPgorCQkJPHN1cHBvcnRlZE9TIElkPSJ7MWY2NzZjNzYtODBlMS00MjM5LTk1YmItODNkMGY2ZDBkYTc4fSIvPgorCQkJPCEtLSBXaW5kb3dzIDEwIC0tPgorCQkJPHN1cHBvcnRlZE9TIElkPSJ7OGUwZjdhMTItYmZiMy00ZmU4LWI5YTUtNDhmZDUwYTE1YTlhfSIvPgorCQk8L2FwcGxpY2F0aW9uPgorCTwvY29tcGF0aWJpbGl0eT4KKzwvYXNzZW1ibHk+CmRpZmYgLS1naXQgYS9jb21wYXQvd2luYW5zaS5jIGIvY29tcGF0L3dpbmFuc2kuYwppbmRleCBmNGYwODIzLi5jYWNkODJjIDEwMDY0NAotLS0gYS9jb21wYXQvd2luYW5zaS5jCisrKyBiL2NvbXBhdC93aW5hbnNpLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8d2luZ2RpLmg+CiAjaW5jbHVkZSA8d2lucmVnLmg+CiAjaW5jbHVkZSAid2luMzIuaCIKKyNpbmNsdWRlICJ3aW4zMi9sYXp5bG9hZC5oIgogCiBzdGF0aWMgaW50IGZkX2lzX2ludGVyYWN0aXZlWzNdID0geyAwLCAwLCAwIH07CiAjZGVmaW5lIEZEX0NPTlNPTEUgMHgxCkBAIC00MSwyNiArNDIsMjEgQEAKICNlbmRpZgogI2VuZGlmCiAKLXR5cGVkZWYgQk9PTCAoV0lOQVBJICpQR0VUQ1VSUkVOVENPTlNPTEVGT05URVgpKEhBTkRMRSwgQk9PTCwKLQkJUENPTlNPTEVfRk9OVF9JTkZPRVgpOwotCiBzdGF0aWMgdm9pZCB3YXJuX2lmX3Jhc3Rlcl9mb250KHZvaWQpCiB7CiAJRFdPUkQgZm9udEZhbWlseSA9IDA7Ci0JUEdFVENVUlJFTlRDT05TT0xFRk9OVEVYIHBHZXRDdXJyZW50Q29uc29sZUZvbnRFeDsKKwlERUNMQVJFX1BST0NfQUREUihrZXJuZWwzMi5kbGwsIEJPT0wsIEdldEN1cnJlbnRDb25zb2xlRm9udEV4LAorCQkJSEFORExFLCBCT09MLCBQQ09OU09MRV9GT05UX0lORk9FWCk7CiAKIAkvKiBkb24ndCBib3RoZXIgaWYgb3V0cHV0IHdhcyBhc2NpaSBvbmx5ICovCiAJaWYgKCFub25fYXNjaWlfdXNlZCkKIAkJcmV0dXJuOwogCiAJLyogR2V0Q3VycmVudENvbnNvbGVGb250RXggaXMgYXZhaWxhYmxlIHNpbmNlIFZpc3RhICovCi0JcEdldEN1cnJlbnRDb25zb2xlRm9udEV4ID0gKFBHRVRDVVJSRU5UQ09OU09MRUZPTlRFWCkgR2V0UHJvY0FkZHJlc3MoCi0JCQlHZXRNb2R1bGVIYW5kbGUoImtlcm5lbDMyLmRsbCIpLAotCQkJIkdldEN1cnJlbnRDb25zb2xlRm9udEV4Iik7Ci0JaWYgKHBHZXRDdXJyZW50Q29uc29sZUZvbnRFeCkgeworCWlmIChJTklUX1BST0NfQUREUihHZXRDdXJyZW50Q29uc29sZUZvbnRFeCkpIHsKIAkJQ09OU09MRV9GT05UX0lORk9FWCBjZmk7CiAJCWNmaS5jYlNpemUgPSBzaXplb2YoY2ZpKTsKLQkJaWYgKHBHZXRDdXJyZW50Q29uc29sZUZvbnRFeChjb25zb2xlLCAwLCAmY2ZpKSkKKwkJaWYgKEdldEN1cnJlbnRDb25zb2xlRm9udEV4KGNvbnNvbGUsIDAsICZjZmkpKQogCQkJZm9udEZhbWlseSA9IGNmaS5Gb250RmFtaWx5OwogCX0gZWxzZSB7CiAJCS8qIHByZS1WaXN0YTogY2hlY2sgZGVmYXVsdCBjb25zb2xlIGZvbnQgaW4gcmVnaXN0cnkgKi8KQEAgLTU0NCw3ICs1NDAsMjAgQEAKICNpZmRlZiBERVRFQ1RfTVNZU19UVFkKIAogI2luY2x1ZGUgPHdpbnRlcm5sLmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorCit0eXBlZGVmIHN0cnVjdCBfT0JKRUNUX05BTUVfSU5GT1JNQVRJT04KK3sKKwlVTklDT0RFX1NUUklORyBOYW1lOworCVdDSEFSIE5hbWVCdWZmZXJbMF07Cit9IE9CSkVDVF9OQU1FX0lORk9STUFUSU9OLCAqUE9CSkVDVF9OQU1FX0lORk9STUFUSU9OOworCisjZGVmaW5lIE9iamVjdE5hbWVJbmZvcm1hdGlvbiAxCisKKyNlbHNlCiAjaW5jbHVkZSA8bnRzdGF0dXMuaD4KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBkZXRlY3RfbXN5c190dHkoaW50IGZkKQogewpAQCAtNTk5LDcgKzYwOCw3IEBACiB2b2lkIHdpbmFuc2lfaW5pdCh2b2lkKQogewogCWludCBjb24xLCBjb24yOwotCWNoYXIgbmFtZVszMl07CisJd2NoYXJfdCBuYW1lWzMyXTsKIAogCS8qIGNoZWNrIGlmIGVpdGhlciBzdGRvdXQgb3Igc3RkZXJyIGlzIGEgY29uc29sZSBvdXRwdXQgc2NyZWVuIGJ1ZmZlciAqLwogCWNvbjEgPSBpc19jb25zb2xlKDEpOwpAQCAtNjE5LDEzICs2MjgsMTUgQEAKIAl9CiAKIAkvKiBjcmVhdGUgYSBuYW1lZCBwaXBlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGNvbnNvbGUgdGhyZWFkICovCi0JeHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIlxcXFwuXFxwaXBlXFx3aW5hbnNpJWx1IiwgR2V0Q3VycmVudFByb2Nlc3NJZCgpKTsKLQlod3JpdGUgPSBDcmVhdGVOYW1lZFBpcGUobmFtZSwgUElQRV9BQ0NFU1NfT1VUQk9VTkQsCisJaWYgKHN3cHJpbnRmKG5hbWUsIEFSUkFZX1NJWkUobmFtZSkgLSAxLCBMIlxcXFwuXFxwaXBlXFx3aW5hbnNpJWx1IiwKKwkJICAgICBHZXRDdXJyZW50UHJvY2Vzc0lkKCkpIDwgMCkKKwkJZGllKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB3aW5hbnNpIHBpcGUgbmFtZSIpOworCWh3cml0ZSA9IENyZWF0ZU5hbWVkUGlwZVcobmFtZSwgUElQRV9BQ0NFU1NfT1VUQk9VTkQsCiAJCVBJUEVfVFlQRV9CWVRFIHwgUElQRV9XQUlULCAxLCBCVUZGRVJfU0laRSwgMCwgMCwgTlVMTCk7CiAJaWYgKGh3cml0ZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKIAkJZGllX2xhc3RlcnIoIkNyZWF0ZU5hbWVkUGlwZSBmYWlsZWQiKTsKIAotCWhyZWFkID0gQ3JlYXRlRmlsZShuYW1lLCBHRU5FUklDX1JFQUQsIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsIDAsIE5VTEwpOworCWhyZWFkID0gQ3JlYXRlRmlsZVcobmFtZSwgR0VORVJJQ19SRUFELCAwLCBOVUxMLCBPUEVOX0VYSVNUSU5HLCAwLCBOVUxMKTsKIAlpZiAoaHJlYWQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCiAJCWRpZV9sYXN0ZXJyKCJDcmVhdGVGaWxlIGZvciBuYW1lZCBwaXBlIGZhaWxlZCIpOwogCmRpZmYgLS1naXQgYS9jb25maWcuYyBiL2NvbmZpZy5jCmluZGV4IDI5NmE2ZDkuLjM5MDBlNDkgMTAwNjQ0Ci0tLSBhL2NvbmZpZy5jCisrKyBiL2NvbmZpZy5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAidXRmOC5oIgogI2luY2x1ZGUgImRpci5oIgogI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicmVmcy5oIgogCiBzdHJ1Y3QgY29uZmlnX3NvdXJjZSB7CiAJc3RydWN0IGNvbmZpZ19zb3VyY2UgKnByZXY7CkBAIC0xNzAsNiArMTcxLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgYWRkX3RyYWlsaW5nX3N0YXJzdGFyX2Zvcl9kaXIoc3RydWN0IHN0cmJ1ZiAqcGF0KQoreworCWlmIChwYXQtPmxlbiAmJiBpc19kaXJfc2VwKHBhdC0+YnVmW3BhdC0+bGVuIC0gMV0pKQorCQlzdHJidWZfYWRkc3RyKHBhdCwgIioqIik7Cit9CisKIHN0YXRpYyBpbnQgcHJlcGFyZV9pbmNsdWRlX2NvbmRpdGlvbl9wYXR0ZXJuKHN0cnVjdCBzdHJidWYgKnBhdCkKIHsKIAlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKQEAgLTE5OSw4ICsyMDYsNyBAQAogCX0gZWxzZSBpZiAoIWlzX2Fic29sdXRlX3BhdGgocGF0LT5idWYpKQogCQlzdHJidWZfaW5zZXJ0KHBhdCwgMCwgIioqLyIsIDMpOwogCi0JaWYgKHBhdC0+bGVuICYmIGlzX2Rpcl9zZXAocGF0LT5idWZbcGF0LT5sZW4gLSAxXSkpCi0JCXN0cmJ1Zl9hZGRzdHIocGF0LCAiKioiKTsKKwlhZGRfdHJhaWxpbmdfc3RhcnN0YXJfZm9yX2RpcihwYXQpOwogCiAJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOwogCXJldHVybiBwcmVmaXg7CkBAIC0yNjQsNiArMjcwLDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBpbmNsdWRlX2J5X2JyYW5jaChjb25zdCBjaGFyICpjb25kLCBzaXplX3QgY29uZF9sZW4pCit7CisJaW50IGZsYWdzOworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiBwYXR0ZXJuID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9ICF0aGVfcmVwb3NpdG9yeSB8fCAhdGhlX3JlcG9zaXRvcnktPmdpdGRpciA/CisJCU5VTEwgOiByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCAmZmxhZ3MpOworCWNvbnN0IGNoYXIgKnNob3J0bmFtZTsKKworCWlmICghcmVmbmFtZSB8fCAhKGZsYWdzICYgUkVGX0lTU1lNUkVGKQl8fAorCQkJIXNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzL2hlYWRzLyIsICZzaG9ydG5hbWUpKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9hZGQoJnBhdHRlcm4sIGNvbmQsIGNvbmRfbGVuKTsKKwlhZGRfdHJhaWxpbmdfc3RhcnN0YXJfZm9yX2RpcigmcGF0dGVybik7CisJcmV0ID0gIXdpbGRtYXRjaChwYXR0ZXJuLmJ1Ziwgc2hvcnRuYW1lLCBXTV9QQVRITkFNRSk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdHRlcm4pOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgaW5jbHVkZV9jb25kaXRpb25faXNfdHJ1ZShjb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKm9wdHMsCiAJCQkJICAgICBjb25zdCBjaGFyICpjb25kLCBzaXplX3QgY29uZF9sZW4pCiB7CkBAIC0yNzIsNiArMjk4LDggQEAKIAkJcmV0dXJuIGluY2x1ZGVfYnlfZ2l0ZGlyKG9wdHMsIGNvbmQsIGNvbmRfbGVuLCAwKTsKIAllbHNlIGlmIChza2lwX3ByZWZpeF9tZW0oY29uZCwgY29uZF9sZW4sICJnaXRkaXIvaToiLCAmY29uZCwgJmNvbmRfbGVuKSkKIAkJcmV0dXJuIGluY2x1ZGVfYnlfZ2l0ZGlyKG9wdHMsIGNvbmQsIGNvbmRfbGVuLCAxKTsKKwllbHNlIGlmIChza2lwX3ByZWZpeF9tZW0oY29uZCwgY29uZF9sZW4sICJvbmJyYW5jaDoiLCAmY29uZCwgJmNvbmRfbGVuKSkKKwkJcmV0dXJuIGluY2x1ZGVfYnlfYnJhbmNoKGNvbmQsIGNvbmRfbGVuKTsKIAogCS8qIHVua25vd24gY29uZGl0aW9uYWxzIGFyZSBhbHdheXMgZmFsc2UgKi8KIAlyZXR1cm4gMDsKQEAgLTgzNCwyMiArODYyLDE2IEBACiAJcmV0dXJuIGVycm9yX3JldHVybjsKIH0KIAotc3RhdGljIGludCBwYXJzZV91bml0X2ZhY3Rvcihjb25zdCBjaGFyICplbmQsIHVpbnRtYXhfdCAqdmFsKQorc3RhdGljIHVpbnRtYXhfdCBnZXRfdW5pdF9mYWN0b3IoY29uc3QgY2hhciAqZW5kKQogewogCWlmICghKmVuZCkKIAkJcmV0dXJuIDE7Ci0JZWxzZSBpZiAoIXN0cmNhc2VjbXAoZW5kLCAiayIpKSB7Ci0JCSp2YWwgKj0gMTAyNDsKLQkJcmV0dXJuIDE7Ci0JfQotCWVsc2UgaWYgKCFzdHJjYXNlY21wKGVuZCwgIm0iKSkgewotCQkqdmFsICo9IDEwMjQgKiAxMDI0OwotCQlyZXR1cm4gMTsKLQl9Ci0JZWxzZSBpZiAoIXN0cmNhc2VjbXAoZW5kLCAiZyIpKSB7Ci0JCSp2YWwgKj0gMTAyNCAqIDEwMjQgKiAxMDI0OwotCQlyZXR1cm4gMTsKLQl9CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoZW5kLCAiayIpKQorCQlyZXR1cm4gMTAyNDsKKwllbHNlIGlmICghc3RyY2FzZWNtcChlbmQsICJtIikpCisJCXJldHVybiAxMDI0ICogMTAyNDsKKwllbHNlIGlmICghc3RyY2FzZWNtcChlbmQsICJnIikpCisJCXJldHVybiAxMDI0ICogMTAyNCAqIDEwMjQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg1OSwxOSArODgxLDIwIEBACiAJCWNoYXIgKmVuZDsKIAkJaW50bWF4X3QgdmFsOwogCQl1aW50bWF4X3QgdXZhbDsKLQkJdWludG1heF90IGZhY3RvciA9IDE7CisJCXVpbnRtYXhfdCBmYWN0b3I7CiAKIAkJZXJybm8gPSAwOwogCQl2YWwgPSBzdHJ0b2ltYXgodmFsdWUsICZlbmQsIDApOwogCQlpZiAoZXJybm8gPT0gRVJBTkdFKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghcGFyc2VfdW5pdF9mYWN0b3IoZW5kLCAmZmFjdG9yKSkgeworCQlmYWN0b3IgPSBnZXRfdW5pdF9mYWN0b3IoZW5kKTsKKwkJaWYgKCFmYWN0b3IpIHsKIAkJCWVycm5vID0gRUlOVkFMOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJdXZhbCA9IGxhYnModmFsKTsKLQkJdXZhbCAqPSBmYWN0b3I7Ci0JCWlmICh1dmFsID4gbWF4IHx8IGxhYnModmFsKSA+IHV2YWwpIHsKKwkJdXZhbCA9IHZhbCA8IDAgPyAtdmFsIDogdmFsOworCQlpZiAodW5zaWduZWRfbXVsdF9vdmVyZmxvd3MoZmFjdG9yLCB1dmFsKSB8fAorCQkgICAgZmFjdG9yICogdXZhbCA+IG1heCkgewogCQkJZXJybm8gPSBFUkFOR0U7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtODg4LDIxICs5MTEsMjMgQEAKIAlpZiAodmFsdWUgJiYgKnZhbHVlKSB7CiAJCWNoYXIgKmVuZDsKIAkJdWludG1heF90IHZhbDsKLQkJdWludG1heF90IG9sZHZhbDsKKwkJdWludG1heF90IGZhY3RvcjsKIAogCQllcnJubyA9IDA7CiAJCXZhbCA9IHN0cnRvdW1heCh2YWx1ZSwgJmVuZCwgMCk7CiAJCWlmIChlcnJubyA9PSBFUkFOR0UpCiAJCQlyZXR1cm4gMDsKLQkJb2xkdmFsID0gdmFsOwotCQlpZiAoIXBhcnNlX3VuaXRfZmFjdG9yKGVuZCwgJnZhbCkpIHsKKwkJZmFjdG9yID0gZ2V0X3VuaXRfZmFjdG9yKGVuZCk7CisJCWlmICghZmFjdG9yKSB7CiAJCQllcnJubyA9IEVJTlZBTDsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWlmICh2YWwgPiBtYXggfHwgb2xkdmFsID4gdmFsKSB7CisJCWlmICh1bnNpZ25lZF9tdWx0X292ZXJmbG93cyhmYWN0b3IsIHZhbCkgfHwKKwkJICAgIGZhY3RvciAqIHZhbCA+IG1heCkgewogCQkJZXJybm8gPSBFUkFOR0U7CiAJCQlyZXR1cm4gMDsKIAkJfQorCQl2YWwgKj0gZmFjdG9yOwogCQkqcmV0ID0gdmFsOwogCQlyZXR1cm4gMTsKIAl9CkBAIC05NDksMzQgKzk3NCw0NCBAQAogTk9SRVRVUk4KIHN0YXRpYyB2b2lkIGRpZV9iYWRfbnVtYmVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQogewotCWNvbnN0IGNoYXIgKiBlcnJvcl90eXBlID0gKGVycm5vID09IEVSQU5HRSk/IF8oIm91dCBvZiByYW5nZSIpOl8oImludmFsaWQgdW5pdCIpOworCWNvbnN0IGNoYXIgKmVycm9yX3R5cGUgPSAoZXJybm8gPT0gRVJBTkdFKSA/CisJCU5fKCJvdXQgb2YgcmFuZ2UiKSA6IE5fKCJpbnZhbGlkIHVuaXQiKTsKKwljb25zdCBjaGFyICpiYWRfbnVtZXJpYyA9IE5fKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiKTsKIAogCWlmICghdmFsdWUpCiAJCXZhbHVlID0gIiI7CiAKKwlpZiAoIXN0cmNtcChuYW1lLCAiR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04iKSkKKwkJLyoKKwkJICogV2UgZXhwbGljaXRseSAqZG9uJ3QqIHVzZSBfKCkgaGVyZSBzaW5jZSBpdCB3b3VsZAorCQkgKiBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIHdpdGggXygpIG5lZWRpbmcgdG8gY2FsbAorCQkgKiB1c2VfZ2V0dGV4dF9wb2lzb24oKS4gVGhpcyBpcyB3aHkgbWFya2VkIHVwCisJCSAqIHRyYW5zbGF0aW9ucyB3aXRoIE5fKCkgYWJvdmUuCisJCSAqLworCQlkaWUoYmFkX251bWVyaWMsIHZhbHVlLCBuYW1lLCBlcnJvcl90eXBlKTsKKwogCWlmICghKGNmICYmIGNmLT5uYW1lKSkKLQkJZGllKF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIpLAotCQkgICAgdmFsdWUsIG5hbWUsIGVycm9yX3R5cGUpOworCQlkaWUoXyhiYWRfbnVtZXJpYyksIHZhbHVlLCBuYW1lLCBfKGVycm9yX3R5cGUpKTsKIAogCXN3aXRjaCAoY2YtPm9yaWdpbl90eXBlKSB7CiAJY2FzZSBDT05GSUdfT1JJR0lOX0JMT0I6CiAJCWRpZShfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIpLAotCQkgICAgdmFsdWUsIG5hbWUsIGNmLT5uYW1lLCBlcnJvcl90eXBlKTsKKwkJICAgIHZhbHVlLCBuYW1lLCBjZi0+bmFtZSwgXyhlcnJvcl90eXBlKSk7CiAJY2FzZSBDT05GSUdfT1JJR0lOX0ZJTEU6CiAJCWRpZShfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBmaWxlICVzOiAlcyIpLAotCQkgICAgdmFsdWUsIG5hbWUsIGNmLT5uYW1lLCBlcnJvcl90eXBlKTsKKwkJICAgIHZhbHVlLCBuYW1lLCBjZi0+bmFtZSwgXyhlcnJvcl90eXBlKSk7CiAJY2FzZSBDT05GSUdfT1JJR0lOX1NURElOOgogCQlkaWUoXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6ICVzIiksCi0JCSAgICB2YWx1ZSwgbmFtZSwgZXJyb3JfdHlwZSk7CisJCSAgICB2YWx1ZSwgbmFtZSwgXyhlcnJvcl90eXBlKSk7CiAJY2FzZSBDT05GSUdfT1JJR0lOX1NVQk1PRFVMRV9CTE9COgogCQlkaWUoXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIiksCi0JCSAgICB2YWx1ZSwgbmFtZSwgY2YtPm5hbWUsIGVycm9yX3R5cGUpOworCQkgICAgdmFsdWUsIG5hbWUsIGNmLT5uYW1lLCBfKGVycm9yX3R5cGUpKTsKIAljYXNlIENPTkZJR19PUklHSU5fQ01ETElORToKIAkJZGllKF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiKSwKLQkJICAgIHZhbHVlLCBuYW1lLCBjZi0+bmFtZSwgZXJyb3JfdHlwZSk7CisJCSAgICB2YWx1ZSwgbmFtZSwgY2YtPm5hbWUsIF8oZXJyb3JfdHlwZSkpOwogCWRlZmF1bHQ6CiAJCWRpZShfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiKSwKLQkJICAgIHZhbHVlLCBuYW1lLCBjZi0+bmFtZSwgZXJyb3JfdHlwZSk7CisJCSAgICB2YWx1ZSwgbmFtZSwgY2YtPm5hbWUsIF8oZXJyb3JfdHlwZSkpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvY29uZmlnLm1hay51bmFtZSBiL2NvbmZpZy5tYWsudW5hbWUKaW5kZXggYjcxNjg4ZS4uZGI3ZjA2YiAxMDA2NDQKLS0tIGEvY29uZmlnLm1hay51bmFtZQorKysgYi9jb25maWcubWFrLnVuYW1lCkBAIC0xLDUgKzEsOSBAQAogIyBQbGF0Zm9ybSBzcGVjaWZpYyBNYWtlZmlsZSB0d2Vha3MgYmFzZWQgb24gdW5hbWUgZGV0ZWN0aW9uCiAKKyMgRGVmaW5lIE5PX1NBRkVTRUggaWYgeW91IG5lZWQgTVNWQy9WaXN1YWwgU3R1ZGlvIHRvIGlnbm9yZSB0aGUgbGFjayBvZgorIyBNaWNyb3NvZnQncyBTYWZlIEV4Y2VwdGlvbiBIYW5kbGluZyBpbiBsaWJyYXJpZXMgKHN1Y2ggYXMgemxpYikuCisjIFR5cGljYWxseSByZXF1aXJlZCBmb3IgVlMyMDEzKy8zMi1iaXQgY29tcGlsYXRpb24gb24gVmlzdGErIHZlcnNpb25zLgorCiB1bmFtZV9TIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1zIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKIHVuYW1lX00gOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLW0gMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQogdW5hbWVfTyA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtbyAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCkBAIC0xMSw2ICsxNSwyMSBAQAogCSMgYXZvaWQgdGhlIE1pbmdXIGFuZCBDeWd3aW4gY29uZmlndXJhdGlvbiBzZWN0aW9ucwogCXVuYW1lX1MgOj0gV2luZG93cwogCXVuYW1lX08gOj0gV2luZG93cworCisJIyBHZW5lcmF0ZSBhbmQgaW5jbHVkZSBtYWtlZmlsZSB2YXJpYWJsZXMgdGhhdCBwb2ludCB0byB0aGUKKwkjIGN1cnJlbnRseSBpbnN0YWxsZWQgc2V0IG9mIE1TVkMgY29tbWFuZCBsaW5lIHRvb2xzLgorY29tcGF0L3ZjYnVpbGQvTVNWQy1ERUZTLUdFTjogY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0CisJQCIkPCIgfCB0ciAnXFwnIC8gPiIkQCIKK2luY2x1ZGUgY29tcGF0L3ZjYnVpbGQvTVNWQy1ERUZTLUdFTgorCisJIyBTZWUgaWYgdmNwa2cgYW5kIHRoZSB2Y3BrZy1idWlsZCB2ZXJzaW9ucyBvZiB0aGUgdGhpcmQtcGFydHkKKwkjIGxpYnJhcmllcyB0aGF0IHdlIHVzZSBhcmUgaW5zdGFsbGVkLiAgV2UgaW5jbHVkZSB0aGUgcmVzdWx0CisJIyB0byBnZXQgJCh2Y3BrZ18qKSB2YXJpYWJsZXMgZGVmaW5lZCBmb3IgdGhlIE1ha2VmaWxlLgoraWZlcSAoLCQoU0tJUF9WQ1BLRykpCitjb21wYXQvdmNidWlsZC9WQ1BLRy1ERUZTOiBjb21wYXQvdmNidWlsZC92Y3BrZ19pbnN0YWxsLmJhdAorCUAiJDwiCitpbmNsdWRlIGNvbXBhdC92Y2J1aWxkL1ZDUEtHLURFRlMKK2VuZGlmCiBlbmRpZgogCiAjIFdlIGNob29zZSB0byBhdm9pZCAiaWYgLi4gZWxzZSBpZiAuLiBlbHNlIC4uIGVuZGlmIGVuZGlmIgpAQCAtMzU2LDYgKzM3NSwxOSBAQAogaWZlcSAoJCh1bmFtZV9TKSxXaW5kb3dzKQogCUdJVF9WRVJTSU9OIDo9ICQoR0lUX1ZFUlNJT04pLk1TVkMKIAlwYXRoc2VwID0gOworCSMgQXNzdW1lIHRoYXQgdGhpcyBpcyBidWlsdCBpbiBHaXQgZm9yIFdpbmRvd3MnIFNESworCWlmZXEgKE1JTkdXMzIsJChNU1lTVEVNKSkKKwkJcHJlZml4ID0gL21pbmd3MzIKKwllbHNlCisJCXByZWZpeCA9IC9taW5ndzY0CisJZW5kaWYKKwkjIFByZXBlbmQgTVNWQyA2NC1iaXQgdG9vbC1jaGFpbiB0byBQQVRILgorCSMKKwkjIEEgcmVndWxhciBHaXQgQmFzaCAqZG9lcyBub3QqIGhhdmUgY2wuZXhlIGluIGl0cyAkUEFUSC4gQXMgdGhlcmUgaXMgYQorCSMgbGluay5leGUgbmV4dCB0bywgYW5kIHJlcXVpcmVkIGJ5LCBjbC5leGUsIHdlIGhhdmUgdG8gcHJlcGVuZCB0aGlzCisJIyBvbnRvIHRoZSBleGlzdGluZyAkUEFUSC4KKwkjCisJU0FORV9UT09MX1BBVEggPz0gJChtc3ZjX2Jpbl9kaXJfbXN5cykKIAlIQVZFX0FMTE9DQV9IID0gWWVzUGxlYXNlCiAJTk9fUFJFQUQgPSBZZXNQbGVhc2UKIAlORUVEU19DUllQVE9fV0lUSF9TU0wgPSBZZXNQbGVhc2UKQEAgLTM2OCwxMSArNDAwLDE0IEBACiAJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQogCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKIAlOT19NRU1NRU0gPSBZZXNQbGVhc2UKLQkjIE5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCi0JTk9fSUNPTlYgPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQogCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQogCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKLQlTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCisJTk9fSU5UVFlQRVNfSCA9IFllc1BsZWFzZQorCSMgVlMyMDE1IHdpdGggVUNSVCBjbGFpbXMgdGhhdCBzbnByaW50ZiBhbmQgZnJpZW5kcyBhcmUgQzk5IGNvbXBsaWFudCwKKwkjIHNvIHdlIGRvbid0IG5lZWQgdGhpczoKKwkjCisJIyAgIFNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgPSBZZXNQbGVhc2UKIAlOT19TVk5fVEVTVFMgPSBZZXNQbGVhc2UKIAlSVU5USU1FX1BSRUZJWCA9IFllc1BsZWFzZQogCUhBVkVfV1BHTVBUUiA9IFllc1dlRG8KQEAgLTM4NSw3ICs0MjAsNiBAQAogCU5PX1JFR0VYID0gWWVzUGxlYXNlCiAJTk9fR0VUVEVYVCA9IFllc1BsZWFzZQogCU5PX1BZVEhPTiA9IFllc1BsZWFzZQotCUJMS19TSEExID0gWWVzUGxlYXNlCiAJRVRBR1NfVEFSR0VUID0gRVRBR1MKIAlOT19QT1NJWF9HT09ESUVTID0gVW5mb3J0dW5hdGVseVllcwogCU5BVElWRV9DUkxGID0gWWVzUGxlYXNlCkBAIC0zOTQsMjYgKzQyOCw1MiBAQAogCUNDID0gY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9jbGluay5wbAogCUFSID0gY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9saWIucGwKIAlDRkxBR1MgPQotCUJBU0lDX0NGTEFHUyA9IC1ub2xvZ28gLUkuIC1JLi4vemxpYiAtSWNvbXBhdC92Y2J1aWxkIC1JY29tcGF0L3ZjYnVpbGQvaW5jbHVkZSAtRFdJTjMyIC1EX0NPTlNPTEUgLURIQVZFX1NUUklOR19IIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgLURfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFCisJQkFTSUNfQ0ZMQUdTID0gLW5vbG9nbyAtSS4gLUljb21wYXQvdmNidWlsZC9pbmNsdWRlIC1EV0lOMzIgLURfQ09OU09MRSAtREhBVkVfU1RSSU5HX0ggLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAtRF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUKIAlDT01QQVRfT0JKUyA9IGNvbXBhdC9tc3ZjLm8gY29tcGF0L3dpbmFuc2kubyBcCiAJCWNvbXBhdC93aW4zMi9wYXRoLXV0aWxzLm8gXAogCQljb21wYXQvd2luMzIvcHRocmVhZC5vIGNvbXBhdC93aW4zMi9zeXNsb2cubyBcCiAJCWNvbXBhdC93aW4zMi90cmFjZTJfd2luMzJfcHJvY2Vzc19pbmZvLm8gXAogCQljb21wYXQvd2luMzIvZGlyZW50Lm8KLQlDT01QQVRfQ0ZMQUdTID0gLURfX1VTRV9NSU5HV19BQ0NFU1MgLUROT0dESSAtREhBVkVfU1RSSU5HX0ggLUljb21wYXQgLUljb21wYXQvcmVnZXggLUljb21wYXQvd2luMzIgLURTVFJJUF9FWFRFTlNJT049XCIuZXhlXCIKLQlCQVNJQ19MREZMQUdTID0gLUlHTk9SRTo0MjE3IC1JR05PUkU6NDA0OSAtTk9MT0dPIC1TVUJTWVNURU06Q09OU09MRQotCUVYVExJQlMgPSB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiB3aW5pbmV0LmxpYiB3czJfMzIubGliIGludmFsaWRjb250aW51ZS5vYmoKKwlDT01QQVRfQ0ZMQUdTID0gLURfX1VTRV9NSU5HV19BQ0NFU1MgLURERVRFQ1RfTVNZU19UVFkgLUROT0dESSAtREhBVkVfU1RSSU5HX0ggLUljb21wYXQgLUljb21wYXQvcmVnZXggLUljb21wYXQvd2luMzIgLURTVFJJUF9FWFRFTlNJT049XCIuZXhlXCIKKwlCQVNJQ19MREZMQUdTID0gLUlHTk9SRTo0MjE3IC1JR05PUkU6NDA0OSAtTk9MT0dPIC1FTlRSWTp3bWFpbkNSVFN0YXJ0dXAgLVNVQlNZU1RFTTpDT05TT0xFCisJIyBpbnZhbGlkY29udGludWUub2JqIGFsbG93cyBHaXQncyBzb3VyY2UgY29kZSB0byBjbG9zZSB0aGUgc2FtZSBmaWxlCisJIyBoYW5kbGUgdHdpY2UsIG9yIHRvIGFjY2VzcyB0aGUgb3NmaGFuZGxlIG9mIGFuIGFscmVhZHktY2xvc2VkIHN0ZG91dAorCSMgU2VlIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMyMzUzMzAuYXNweAorCUVYVExJQlMgPSB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiB3aW5pbmV0LmxpYiB3czJfMzIubGliIGludmFsaWRjb250aW51ZS5vYmoga2VybmVsMzIubGliIG50ZGxsLmxpYgogCVBUSFJFQURfTElCUyA9CiAJbGliID0KLQlCQVNJQ19DRkxBR1MgKz0gLURQUk9URUNUX05URlNfREVGQVVMVD0xCisJQkFTSUNfQ0ZMQUdTICs9ICQodmNwa2dfaW5jKSAkKHNka19pbmNsdWRlcykgJChtc3ZjX2luY2x1ZGVzKQogaWZuZGVmIERFQlVHCi0JQkFTSUNfQ0ZMQUdTICs9IC1HTCAtT3MgLU1ECi0JQkFTSUNfTERGTEFHUyArPSAtTFRDRworCUJBU0lDX0NGTEFHUyArPSAkKHZjcGtnX3JlbF9saWIpCitlbHNlCisJQkFTSUNfQ0ZMQUdTICs9ICQodmNwa2dfZGJnX2xpYikKK2VuZGlmCisJQkFTSUNfQ0ZMQUdTICs9ICQoc2RrX2xpYnMpICQobXN2Y19saWJzKQorCitpZm5lcSAoJChVU0VfTVNWQ19DUlREQkcpLCkKKwkjIE9wdGlvbmFsbHkgZW5hYmxlIG1lbW9yeSBsZWFrIHJlcG9ydGluZy4KKwlCQVNJQ19DRkxBR1MgKz0gLURVU0VfTVNWQ19DUlREQkcKK2VuZGlmCisJQkFTSUNfQ0ZMQUdTICs9IC1EUFJPVEVDVF9OVEZTX0RFRkFVTFQ9MQorCSMgQWx3YXlzIGdpdmUgIi1aaSIgdG8gdGhlIGNvbXBpbGVyIGFuZCAiLWRlYnVnIiB0byBsaW5rZXIgKGV2ZW4gaW4KKwkjIHJlbGVhc2UgbW9kZSkgdG8gZm9yY2UgYSBQREIgdG8gYmUgZ2VuZXJhdGVkIChsaWtlIFJlbFdpdGhEZWJJbmZvKS4KKwlCQVNJQ19DRkxBR1MgKz0gLVppCisJQkFTSUNfTERGTEFHUyArPSAtZGVidWcgLVpmCisKK2lmZGVmIE5PX1NBRkVTRUgKKwlMREZMQUdTICs9IC1TQUZFU0VIOk5PCitlbmRpZgorCitpZm5kZWYgREVCVUcKKwlCQVNJQ19DRkxBR1MgKz0gLUdMIC1HeSAtTzIgLU95LSAtTUQgLUROREVCVUcKKwlCQVNJQ19MREZMQUdTICs9IC1yZWxlYXNlIC1MVENHIC9PUFQ6UkVGIC9PUFQ6SUNGIC9JTkNSRU1FTlRBTDpOTyAvREVCVUdUWVBFOkNWLEZJWFVQCiAJQVIgKz0gLUxUQ0cKIGVsc2UKLQlCQVNJQ19DRkxBR1MgKz0gLVppIC1NRGQKKwlCQVNJQ19DRkxBR1MgKz0gLU1EZCAtRERFQlVHIC1EX0RFQlVHCiBlbmRpZgogCVggPSAuZXhlCisKK2NvbXBhdC9tc3ZjLm86IGNvbXBhdC9tc3ZjLmMgY29tcGF0L21pbmd3LmMgR0lULUNGTEFHUwogZW5kaWYKIGlmZXEgKCQodW5hbWVfUyksSW50ZXJpeCkKIAlOT19JTklUR1JPVVBTID0gWWVzUGxlYXNlCkBAIC01NDgsNiArNjA4LDcgQEAKIAlFVEFHU19UQVJHRVQgPSBFVEFHUwogCU5PX1BPU0lYX0dPT0RJRVMgPSBVbmZvcnR1bmF0ZWx5WWVzCiAJREVGQVVMVF9IRUxQX0ZPUk1BVCA9IGh0bWwKKwlCQVNJQ19MREZMQUdTICs9IC1tdW5pY29kZQogCUNPTVBBVF9DRkxBR1MgKz0gLUROT0dESSAtSWNvbXBhdCAtSWNvbXBhdC93aW4zMgogCUNPTVBBVF9DRkxBR1MgKz0gLURTVFJJUF9FWFRFTlNJT049XCIuZXhlXCIKIAlDT01QQVRfT0JKUyArPSBjb21wYXQvbWluZ3cubyBjb21wYXQvd2luYW5zaS5vIFwKQEAgLTU3MSw3ICs2MzIsNyBAQAogCUlOVEVSTkFMX1FTT1JUID0gWWVzUGxlYXNlCiAJSEFWRV9MSUJDSEFSU0VUX0ggPSBZZXNQbGVhc2UKIAlOT19HRVRURVhUID0gWWVzUGxlYXNlCi0JQ09NUEFUX0NMRkFHUyArPSAtRF9fVVNFX01JTkdXX0FDQ0VTUworCUNPTVBBVF9DRkxBR1MgKz0gLURfX1VTRV9NSU5HV19BQ0NFU1MKIGVsc2UKIAlpZm5lcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICcxXC4nKSwyKQogCQkjIE1TeXMyCkBAIC01OTYsNyArNjU3LDggQEAKIAkJCUJBU0lDX0xERkxBR1MgKz0gLVdsLC0tbGFyZ2UtYWRkcmVzcy1hd2FyZQogCQllbmRpZgogCQlDQyA9IGdjYwotCQlDT01QQVRfQ0ZMQUdTICs9IC1EX19VU0VfTUlOR1dfQU5TSV9TVERJTz0wIC1EREVURUNUX01TWVNfVFRZCisJCUNPTVBBVF9DRkxBR1MgKz0gLURfX1VTRV9NSU5HV19BTlNJX1NURElPPTAgLURERVRFQ1RfTVNZU19UVFkgXAorCQkJLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nCiAJCUVYVExJQlMgKz0gLWxudGRsbAogCQlJTlNUQUxMID0gL2Jpbi9pbnN0YWxsCiAJCU5PX1JfVE9fR0NDX0xJTktFUiA9IFllc1BsZWFzZQpAQCAtNjI5LDMgKzY5MSw3NyBAQAogCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKIAlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCiBlbmRpZgorCit2Y3hwcm9qOgorCSMgUmVxdWlyZSBjbGVhbiB3b3JrIHRyZWUKKwlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaCAmJiBcCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJiBcCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEIC0tCisKKwkjIE1ha2UgLnZjeHByb2ogZmlsZXMgYW5kIGFkZCB0aGVtCisJdW5zZXQgUVVJRVRfR0VOIFFVSUVUX0JVSUxUX0lOOyBcCisJcGVybCBjb250cmliL2J1aWxkc3lzdGVtcy9nZW5lcmF0ZSAtZyBWY3hwcm9qCisJZ2l0IGFkZCAtZiBnaXQuc2xuIHsqLCovbGliLHQvaGVscGVyLyp9LyoudmN4cHJvagorCisJIyBHZW5lcmF0ZSB0aGUgTGlua09yQ29weUJ1aWx0aW5zLnRhcmdldHMgZmlsZQorCShlY2hvICc8UHJvamVjdCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4nICYmIFwKKwkgZWNobyAnICA8VGFyZ2V0IE5hbWU9IkNvcHlCdWlsdGluc19BZnRlckJ1aWxkIiBBZnRlclRhcmdldHM9IkFmdGVyQnVpbGQiPicgJiYgXAorCSBmb3IgbmFtZSBpbiAkKEJVSUxUX0lOUyk7XAorCSBkbyBcCisJICAgZWNobyAnICAgIDxDb3B5IFNvdXJjZUZpbGVzPSIkJChPdXREaXIpXGdpdC5leGUiIERlc3RpbmF0aW9uRmlsZXM9IiQkKE91dERpcilcJyIkJG5hbWUiJyIgU2tpcFVuY2hhbmdlZEZpbGVzPSJ0cnVlIiBVc2VIYXJkbGlua3NJZlBvc3NpYmxlPSJ0cnVlIiAvPic7IFwKKwkgZG9uZSAmJiBcCisJIGZvciBuYW1lIGluICQoUkVNT1RFX0NVUkxfQUxJQVNFUyk7IFwKKwkgZG8gXAorCSAgIGVjaG8gJyAgICA8Q29weSBTb3VyY2VGaWxlcz0iJCQoT3V0RGlyKVwnIiQoUkVNT1RFX0NVUkxfUFJJTUFSWSkiJyIgRGVzdGluYXRpb25GaWxlcz0iJCQoT3V0RGlyKVwnIiQkbmFtZSInIiBTa2lwVW5jaGFuZ2VkRmlsZXM9InRydWUiIFVzZUhhcmRsaW5rc0lmUG9zc2libGU9InRydWUiIC8+JzsgXAorCSBkb25lICYmIFwKKwkgZWNobyAnICA8L1RhcmdldD4nICYmIFwKKwkgZWNobyAnPC9Qcm9qZWN0PicpID5naXQvTGlua09yQ29weUJ1aWx0aW5zLnRhcmdldHMKKwlnaXQgYWRkIC1mIGdpdC9MaW5rT3JDb3B5QnVpbHRpbnMudGFyZ2V0cworCisJIyBBZGQgY29tbWFuZC1saXN0LmgKKwkkKE1BS0UpIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0IGNvbW1hbmQtbGlzdC5oCisJZ2l0IGFkZCAtZiBjb21tYW5kLWxpc3QuaAorCisJIyBBZGQgc2NyaXB0cworCXJtIC1mIHBlcmwvcGVybC5tYWsKKwkkKE1BS0UpIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0IFwKKwkJJChTQ1JJUFRfTElCKSAkKFNDUklQVF9TSF9HRU4pICQoU0NSSVBUX1BFUkxfR0VOKQorCSMgU3RyaXAgb3V0IHRoZSBzYW5lIHRvb2wgcGF0aCwgbmVlZGVkIG9ubHkgZm9yIGJ1aWxkaW5nCisJc2VkIC1pICcvXmdpdF9icm9rZW5fcGF0aF9maXggIi4qL2QnIGdpdC1zaC1zZXR1cAorCWdpdCBhZGQgLWYgJChTQ1JJUFRfTElCKSAkKFNDUklQVF9TSF9HRU4pICQoU0NSSVBUX1BFUkxfR0VOKQorCisJIyBBZGQgUGVybCBtb2R1bGUKKwkkKE1BS0UpICQoTElCX1BFUkxfR0VOKQorCWdpdCBhZGQgLWYgcGVybC9idWlsZAorCisJIyBBZGQgYmluLXdyYXBwZXJzLCBmb3IgdGVzdGluZworCXJtIC1yZiBiaW4td3JhcHBlcnMvCisJJChNQUtFKSBNU1ZDPTEgU0tJUF9WQ1BLRz0xIHByZWZpeD0vbWluZ3c2NCAkKHRlc3RfYmluZGlyX3Byb2dyYW1zKQorCSMgRW5zdXJlIHRoYXQgdGhlIEdJVF9FWEVDX1BBVEggaXMgYSBVbml4LXkgb25lLCBhbmQgdGhhdCB0aGUgYWJzb2x1dGUKKwkjIHBhdGggb2YgdGhlIHJlcG9zaXRvcnkgaXMgbm90IGhhcmQtY29kZWQgKEdJVF9FWEVDX1BBVEggd2lsbCBiZSBzZXQKKwkjIGJ5IHRlc3QtbGliLnNoIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzZXR1cCkKKwlzZWQgLWkgLWUgJ3MvXlwoR0lUX0VYRUNfUEFUSFwpPS4qL3Rlc3QgLW4gIiQke1wxIyMqOip9IiB8fFwKKwkJCVwxPSIkJChjeWdwYXRoIC11ICIkJFwxIikiLycgXAorCQktZSAic3wnJCQocHdkKXxcIlwkJEdJVF9FWEVDX1BBVEhcIid8ZyIgYmluLXdyYXBwZXJzLyoKKwkjIEVuc3VyZSB0aGF0IHRlc3QtKiBoZWxwZXJzIGZpbmQgdGhlIC5kbGwgZmlsZXMgY29waWVkIHRvIHRvcC1sZXZlbAorCXNlZCAtaSAnc3xeUEFUSD0uKnwmOiIkJEdJVF9FWEVDX1BBVEgifCcgYmluLXdyYXBwZXJzL3Rlc3QtKgorCSMgV2UgZG8gbm90IHdhbnQgdG8gZm9yY2UgaGFyZC1saW5raW5nIGJ1aWx0aW5zCisJc2VkIC1pICdzfFwoZ2l0XCktXChbLWEtel0qXClcLmV4ZSJ8XDEuZXhlIiBcMnxnJyBcCisJCWJpbi13cmFwcGVycy9naXQte3JlY2VpdmUtcGFjayx1cGxvYWQtYXJjaGl2ZX0KKwlnaXQgYWRkIC1mICQodGVzdF9iaW5kaXJfcHJvZ3JhbXMpCisJIyByZW1vdGUtZXh0IGlzIGEgYnVpbHRpbiwgYnV0IGludm9rZWQgYXMgaWYgaXQgd2VyZSBleHRlcm5hbAorCXNlZCAnc3xyZWNlaXZlLXBhY2t8cmVtb3RlLWV4dHxnJyBcCisJCTxiaW4td3JhcHBlcnMvZ2l0LXJlY2VpdmUtcGFjayA+YmluLXdyYXBwZXJzL2dpdC1yZW1vdGUtZXh0CisJZ2l0IGFkZCAtZiBiaW4td3JhcHBlcnMvZ2l0LXJlbW90ZS1leHQKKworCSMgQWRkIHRlbXBsYXRlcworCSQoTUFLRSkgLUMgdGVtcGxhdGVzCisJZ2l0IGFkZCAtZiB0ZW1wbGF0ZXMvYm9pbGVycGxhdGVzLm1hZGUgdGVtcGxhdGVzL2JsdC8KKworCSMgQWRkIGJ1aWxkIG9wdGlvbnMKKwkkKE1BS0UpIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0IEdJVC1CVUlMRC1PUFRJT05TCisJZ2l0IGFkZCAtZiBHSVQtQlVJTEQtT1BUSU9OUworCisJIyBDb21taXQgdGhlIHdob2xlIHNoZWJhbmcKKwlnaXQgY29tbWl0IC1tICJHZW5lcmF0ZSBWaXN1YWwgU3R1ZGlvIHNvbHV0aW9uIiBcCisJCS1tICJBdXRvLWdlbmVyYXRlZCBieSBcYCQoTUFLRSkkKE1BS0VGTEFHUykgJEBcYCIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBiZTNiNTVmLi5hNDNiNDc2IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC00NzUsOCArNDc1LDE4IEBACiAgICAgICBpZiB0ZXN0ICIkZ2l0X2N2X2xkX3JwYXRoIiA9ICJ5ZXMiOyB0aGVuCiAgICAgICAgICBDQ19MRF9EWU5QQVRIPS1ycGF0aAogICAgICAgZWxzZQotICAgICAgICAgQ0NfTERfRFlOUEFUSD0KLSAgICAgICAgIEFDX01TR19XQVJOKFtsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBydW50aW1lIHBhdGggdG8gZHluYW1pYyBsaWJyYXJpZXNdKQorICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2lmIGxpbmtlciBzdXBwb3J0cyAtV2wsK2IsXSwgZ2l0X2N2X2xkX3dsX2IsIFsKKyAgICAgICAgICAgIFNBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKyAgICAgICAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSAtV2wsK2IsLyIKKyAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtdKV0sIFtnaXRfY3ZfbGRfd2xfYj15ZXNdLCBbZ2l0X2N2X2xkX3dsX2I9bm9dKQorICAgICAgICAgICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IgorICAgICAgICAgXSkKKyAgICAgICAgIGlmIHRlc3QgIiRnaXRfY3ZfbGRfd2xfYiIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgQ0NfTERfRFlOUEFUSD0tV2wsK2IsCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIENDX0xEX0RZTlBBVEg9CisgICAgICAgICAgICAgQUNfTVNHX1dBUk4oW2xpbmtlciBkb2VzIG5vdCBzdXBwb3J0IHJ1bnRpbWUgcGF0aCB0byBkeW5hbWljIGxpYnJhcmllc10pCisgICAgICAgICAgZmkKICAgICAgIGZpCiAgICBmaQogZmkKZGlmZiAtLWdpdCBhL2Nvbm5lY3RlZC5jIGIvY29ubmVjdGVkLmMKaW5kZXggMWFiNDgxZi4uY2Q5YjMyNCAxMDA2NDQKLS0tIGEvY29ubmVjdGVkLmMKKysrIGIvY29ubmVjdGVkLmMKQEAgLTgwLDYgKzgwLDcgQEAKIAkJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1hbGwiKTsKIAl9CiAJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1xdWlldCIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2xpc3QuYXJncywgIi0tYWx0ZXJuYXRlLXJlZnMiKTsKIAlpZiAob3B0LT5wcm9ncmVzcykKIAkJYXJndl9hcnJheV9wdXNoZigmcmV2X2xpc3QuYXJncywgIi0tcHJvZ3Jlc3M9JXMiLAogCQkJCSBfKCJDaGVja2luZyBjb25uZWN0aXZpdHkiKSk7CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzLnBtIGIvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy5wbQppbmRleCA0MDhlZjcxLi5hYTRjYmFhIDEwMDY0NAotLS0gYS9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzLnBtCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMucG0KQEAgLTE3LDcgKzE3LDcgQEAKICAgICAkbWUgPSBkaXJuYW1lKCRtZSk7CiAgICAgaWYgKG9wZW5kaXIoRCwiJG1lL0dlbmVyYXRvcnMiKSkgewogICAgICAgICBmb3JlYWNoIG15ICRnZW4gKHJlYWRkaXIoRCkpIHsKLSAgICAgICAgICAgIG5leHQgaWYgKCRnZW4gID1+IC9eXC5cLj8kLyk7CisgICAgICAgICAgICBuZXh0IHVubGVzcyAoJGdlbiAgPX4gL1wucG0kLyk7CiAgICAgICAgICAgICByZXF1aXJlICIke21lfS9HZW5lcmF0b3JzLyRnZW4iOwogICAgICAgICAgICAgJGdlbiA9fiBzLFwucG0sLDsKICAgICAgICAgICAgIHB1c2goQEFWQUlMQUJMRSwgJGdlbik7CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1ZjcHJvai5wbSBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvVmNwcm9qLnBtCmluZGV4IGNmYTc0YWQuLjczNzY0N2UgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvVmNwcm9qLnBtCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvVmNwcm9qLnBtCkBAIC0zLDYgKzMsNyBAQAogCiB1c2Ugc3RyaWN0OwogdXNlIHZhcnMgcXcoJFZFUlNJT04pOwordXNlIERpZ2VzdDo6U0hBIHF3KHNoYTI1Nl9oZXgpOwogCiBvdXIgJFZFUlNJT04gPSAnMS4wMCc7CiBvdXIoQElTQSwgQEVYUE9SVCwgQEVYUE9SVF9PSywgQEFWQUlMQUJMRSk7CkBAIC0xMiw1OSArMTMsMTIgQEAKICAgICBwdXNoIEBFWFBPUlRfT0ssIHF3KGdlbmVyYXRlKTsKIH0KIAotbXkgJGd1aWRfaW5kZXggPSAwOwotbXkgQEdVSURTID0gKAotICAgICJ7RTA3Qjk5ODktMkJGNy00RjIxLTg5MTgtQkUyMkJBNDY3QUMzfSIsCi0gICAgInsyNzhGRkI1MS0wMjk2LTRBNDQtQTgxQS0yMkI4N0I3QzM1OTJ9IiwKLSAgICAiezczNDZBMkM0LUYwRkQtNDQ0Ri05RUJFLTFBRjIzQjJCNTY1MH0iLAotICAgICJ7NjdGNDIxQUMtRUIzNC00RDQ5LTgyMEItMzE5NjgwN0I0MjNGfSIsCi0gICAgInszODVEQ0ZFMS1DQzhDLTQyMTEtQTQ1MS04MEZDRkMzMUNBNTF9IiwKLSAgICAiezk3Q0M0NkM1LUQyQ0MtNEQyNi1CNjM0LUU3NTc5MkI3OTkxNn0iLAotICAgICJ7QzdDRTIxRkUtNkVGOC00MDEyLUE1QzctQTIyQkNFREZCQTExfSIsCi0gICAgIns1MTU3NTEzNC0zRkRGLTQyRDEtQkFCRC0zRkIxMjY2OUM2Qzl9IiwKLSAgICAiezBBRTE5NUU0LTk4MjMtNEI4Ny04RTZGLTIwQzU2MTRBRjJGRn0iLAotICAgICJ7NEI5MTgyNTUtNjdDQS00M0JCLUE0NkMtMjY3MDRCNjY2RTZCfSIsCi0gICAgInsxOENDRkVFRi1DOEVFLTRDQzEtQTI2NS0yNkY5NUM5RjQ2NDl9IiwKLSAgICAiezVENUQ5MEZBLTAxQjctNDk3My1BRkU1LUNBODhDNTNBQzE5N30iLAotICAgICJ7MUYwNTQzMjAtMDM2RC00OUUxLUIzODQtRkI1REYwQkM4QUMwfSIsCi0gICAgIns3Q0VENjVFRS1GMkQ5LTQxNzEtODI1Qi1DN0Q1NjFGRTU3ODZ9IiwKLSAgICAiezhEMzQxNjc5LTBGMDctNDY2NC05QTU2LTNCQTBERTg4QjlCQ30iLAotICAgICJ7QzE4OUZFREMtMjk1Ny00QkQ3LTlGQTQtNzYyMjI0MUVBMTQ1fSIsCi0gICAgIns2Njg0NDIwMy0xQjlGLTRDNTMtOTI3NC0xNjRGRkY5NUI4NDd9IiwKLSAgICAie0U0RkVBMTQ1LURFQ0MtNDQwRC1BRUVBLTU5OENGMzgxRkQ0M30iLAotICAgICJ7NzMzMDBBOEUtQzhBQy00MUIwLUI1NTUtNEY1OTZCNjgxQkE3fSIsCi0gICAgIns4NzNGREVCMS1EMDFELTQwQkYtQTFCRi04QkJDNThFQzBGNTF9IiwKLSAgICAiezc5MjJDOEJFLTc2QzUtNEFDNi04QkY3LTg4NUMwRjkzQjc4Mn0iLAotICAgICJ7RTI0NUQzNzAtMzA4Qi00QTQ5LUJGQzEtMUU1Mjc4Mjc5NzVGfSIsCi0gICAgIntGNkZBOTU3Qi02NkZDLTRFRDctQjI2MC1FNTlCQkU0RkU4MTN9IiwKLSAgICAie0U2MDU1MDcwLTAxOTgtNDMxQS1CQzQ5LThEQjZDRUU3NzBBRX0iLAotICAgICJ7NTQxNTkyMzQtQzNFQi00M0RBLTkwNkItQ0U1REE1Qzc0NjU0fSIsCi0gICAgIns1OTRDRkMzNS0wQjYwLTQ2RjYtQjhFRi05OTgzQUNDMTE4N0R9IiwKLSAgICAie0Q5M0ZDQUI3LTFGMDEtNDhEMi1CODMyLUY3NjFCODMyMzFBNX0iLAotICAgICJ7REJBNUU2QUMtRTdCRS00MkQzLTg3MDMtNEU3ODcxNDE1MjZFfSIsCi0gICAgIns2MTcxOTUzRi1ERDI2LTQ0QzctQTNCRS1DQzQ1Rjg2RkMxMUZ9IiwKLSAgICAiezlFMTlEREJFLUY1RTQtNEEyNi1BMkZFLTA2MTZFMDQ4NzlCOH0iLAotICAgICJ7QUU4MUE2MTUtOTlFMy00ODg1LTlDRTAtRDlDQUExOTNFODY3fSIsCi0gICAgIntGQkY0MDY3RS0xODU1LTRGNkMtOEJDRC00RDYyRTgwMUEwNER9IiwKLSAgICAiezE3MDA3OTQ4LTY1OTMtNEFFQi04MTA2LUY3ODg0QjRGMkMxOX0iLAotICAgICJ7MTk5RDRDOEQtODYzOS00REE2LTgyRUYtMDg2NjhDMzVERUUwfSIsCi0gICAgIntFMDg1RTUwRS1DMTQwLTRDRjMtQkU0Qi0wOTRCMTRGMERERDZ9IiwKLSAgICAiezAwNzg1MjY4LUE5Q0MtNEU0MC1BQzI5LUJBQzAwMTkxNTlDRX0iLAotICAgICJ7NEMwNkY1NkEtRENEQi00NkE2LUI2N0MtMDIzMzk5MzVDRjEyfSIsCi0gICAgInszQTYyRDNGRC01MTlFLTRFQzktODE3MS1EMkMxQkZFQTAyMkZ9IiwKLSAgICAiezNBNjJEM0ZELTUxOUUtNEVDOS04MTcxLUQyQzFCRkVBMDIyRn0iLAotICAgICJ7OTM5MkVCNTgtRDdCQS00MTBCLUIxRjAtQjJGQUE2QkM4OUE3fSIsCi0gICAgInsyQUNBQjJENS1FMENFLTQwMjctQkNBMC1ENzhCMkQ3QTZDNjZ9IiwKLSAgICAiezg2RTIxNkMzLTQzQ0UtNDgxQS1CQ0IyLUJFNUU2Mjg1MDYzNX0iLAotICAgICJ7RkI2MzEyOTEtNzkyMy00QjkxLTlBNTctN0IxOEZEQkI3QTQyfSIsCi0gICAgInswQTE3NkVDOS1FOTM0LTQ1QjgtQjg3Ri0xNkM3RjRDODAwMzl9IiwKLSAgICAie0RGNTVDQTgwLTQ2RTgtNEM1My1CNjVCLTQ5OTBBMjNERDQ0NH0iLAotICAgICJ7M0EwRjk4OTUtNTVEMi00NzEwLUJFNUUtQUQ3NDk4QjVCRjQ0fSIsCi0gICAgInsyOTRCREM1QS1GNDQ4LTQ4QjYtODExMC1ERDBBODE4MjBGOEN9IiwKLSAgICAiezRCOUY2NkU5LUZBQzktNDdBQi1CMUVGLUMxNjc1NkZCRkQwNn0iLAotICAgICJ7NzJFQTQ5QzYtMjgwNi00OEJELUI4MUItRDQ5MDUxMDJFMTlDfSIsCi0gICAgIns1NzI4RUI3RS04OTI5LTQ4NkMtOENENS0zMjM4RDA2MEU3Njh9IgotKTsKK3N1YiBnZW5lcmF0ZV9ndWlkICgkKSB7CisgICAgbXkgJGhleCA9IHNoYTI1Nl9oZXgoJF9bMF0pOworICAgICRoZXggPX4gcy9eKC57OH0pKC57NH0pKC57NH0pKC57NH0pKC57MTJ9KS4qL3skMS0kMi0kMy0kNC0kNX0vOworICAgICRoZXggPX4gdHIvYS16L0EtWi87CisgICAgcmV0dXJuICRoZXg7Cit9CiAKIHN1YiBnZW5lcmF0ZSB7CiAgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CkBAIC05Miw5ICs0Niw4IEBACiAgICAgJHRhcmdldCA9fiBzL1wvL18vZzsKICAgICAkdGFyZ2V0ID1+IHMvXC5hLy87CiAKLSAgICBteSAkdXVpZCA9ICRHVUlEU1skZ3VpZF9pbmRleF07CisgICAgbXkgJHV1aWQgPSBnZW5lcmF0ZV9ndWlkKCRsaWJuYW1lKTsKICAgICAkJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke3RhcmdldH1fR1VJRCJ9ID0gJHV1aWQ7Ci0gICAgJGd1aWRfaW5kZXggKz0gMTsKIAogICAgIG15IEBzcmNzID0gc29ydChtYXAoIiRyZWxfZGlyXFwkXyIsIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9TT1VSQ0VTIn19KSk7CiAgICAgbXkgQHNvdXJjZXM7CkBAIC0xMDYsNiArNTksOCBAQAogICAgIG15ICRpbmNsdWRlcz0gam9pbigiOyIsIHNvcnQobWFwKCImcXVvdDskcmVsX2RpclxcJF8mcXVvdDsiLCBAeyQkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fSU5DTFVERVMifX0pKSk7CiAgICAgbXkgJGNmbGFncyAgPSBqb2luKCIgIiwgc29ydChAeyQkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fQ0ZMQUdTIn19KSk7CiAgICAgJGNmbGFncyA9fiBzL1wiLyZxdW90Oy9nOworICAgICRjZmxhZ3MgPX4gcy88LyZsdDsvZzsKKyAgICAkY2ZsYWdzID1+IHMvPi8mZ3Q7L2c7CiAKICAgICBteSAkY2ZsYWdzX2RlYnVnID0gJGNmbGFnczsKICAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU1ULy1NVGQvOwpAQCAtMTI3LDYgKzgyLDggQEAKIAogICAgICRkZWZpbmVzID1+IHMvLUQvL2c7CiAgICAgJGRlZmluZXMgPX4gcy9cIi9cXCZxdW90Oy9nOworICAgICRkZWZpbmVzID1+IHMvPC8mbHQ7L2c7CisgICAgJGRlZmluZXMgPX4gcy8+LyZndDsvZzsKICAgICAkZGVmaW5lcyA9fiBzL1wnLy9nOwogICAgICRpbmNsdWRlcyA9fiBzLy1JLy9nOwogICAgIG1rZGlyICIkdGFyZ2V0IiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSAkdGFyZ2V0IGZvciBsaWIgcHJvamVjdCFcbiI7CkBAIC0xNjMsOSArMTIwLDYgQEAKIAkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgogCQkJLz4KIAkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCiAJCQkJTmFtZT0iVkNNSURMVG9vbCIKIAkJCS8+CiAJCQk8VG9vbApAQCAtMjI5LDkgKzE4Myw2IEBACiAJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKIAkJCS8+CiAJCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTMxMSw5ICsyNjIsOCBAQAogICAgICR0YXJnZXQgPX4gcy9cLy9fL2c7CiAgICAgJHRhcmdldCA9fiBzL1wuZXhlLy87CiAKLSAgICBteSAkdXVpZCA9ICRHVUlEU1skZ3VpZF9pbmRleF07CisgICAgbXkgJHV1aWQgPSBnZW5lcmF0ZV9ndWlkKCRhcHBuYW1lKTsKICAgICAkJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke3RhcmdldH1fR1VJRCJ9ID0gJHV1aWQ7Ci0gICAgJGd1aWRfaW5kZXggKz0gMTsKIAogICAgIG15IEBzcmNzID0gc29ydChtYXAoIiRyZWxfZGlyXFwkXyIsIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9TT1VSQ0VTIn19KSk7CiAgICAgbXkgQHNvdXJjZXM7CkBAIC0zMjUsNiArMjc1LDggQEAKICAgICBteSAkaW5jbHVkZXM9IGpvaW4oIjsiLCBzb3J0KG1hcCgiJnF1b3Q7JHJlbF9kaXJcXCRfJnF1b3Q7IiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0lOQ0xVREVTIn19KSkpOwogICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0NGTEFHUyJ9fSkpOwogICAgICRjZmxhZ3MgPX4gcy9cIi8mcXVvdDsvZzsKKyAgICAkY2ZsYWdzID1+IHMvPC8mbHQ7L2c7CisgICAgJGNmbGFncyA9fiBzLz4vJmd0Oy9nOwogCiAgICAgbXkgJGNmbGFnc19kZWJ1ZyA9ICRjZmxhZ3M7CiAgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1NVC8tTVRkLzsKQEAgLTM1MSw2ICszMDMsOCBAQAogCiAgICAgJGRlZmluZXMgPX4gcy8tRC8vZzsKICAgICAkZGVmaW5lcyA9fiBzL1wiL1xcJnF1b3Q7L2c7CisgICAgJGRlZmluZXMgPX4gcy88LyZsdDsvZzsKKyAgICAkZGVmaW5lcyA9fiBzLz4vJmd0Oy9nOwogICAgICRkZWZpbmVzID1+IHMvXCcvL2c7CiAgICAgJGRlZmluZXMgPX4gcy9cXFxcL1xcL2c7CiAgICAgJGluY2x1ZGVzID1+IHMvLUkvL2c7CkBAIC0zODgsOSArMzQyLDYgQEAKIAkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgogCQkJLz4KIAkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCiAJCQkJTmFtZT0iVkNNSURMVG9vbCIKIAkJCS8+CiAJCQk8VG9vbApAQCAtNDU5LDkgKzQxMCw2IEBACiAJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKIAkJCS8+CiAJCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTU2MSwyMCArNTA5LDE4IEBACiAgICAgZm9yZWFjaCAoQGFwcHMpIHsKICAgICAgICAgJF8gPX4gcy9cLy9fL2c7CiAgICAgICAgICRfID1+IHMvXC5leGUvLzsKLSAgICAgICAgcHVzaChAdG1wLCAkXyk7CisgICAgICAgIGlmICgkXyBlcSAiZ2l0IiApIHsKKyAgICAgICAgICAgIHVuc2hpZnQoQHRtcCwgJF8pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAdG1wLCAkXyk7CisgICAgICAgIH0KICAgICB9CiAgICAgQGFwcHMgPSBAdG1wOwogCiAgICAgb3BlbiBGLCAiPmdpdC5zbG4iIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gZ2l0LnNsbiBmb3Igd3JpdGluZyFcbiI7CiAgICAgYmlubW9kZSBGLCAiOmNybGYiOwogICAgIHByaW50IEYgIiRTTE5fSEVBRCI7Ci0gICAgZm9yZWFjaCAoQGxpYnMpIHsKLSAgICAgICAgbXkgJGxpYm5hbWUgPSAkXzsKLSAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fR1VJRCJ9OwotICAgICAgICBwcmludCBGICIkU0xOX1BSRSI7Ci0gICAgICAgIHByaW50IEYgIlwiJHtsaWJuYW1lfVwiLCBcIiR7bGlibmFtZX1cXCR7bGlibmFtZX0udmNwcm9qXCIsIFwiJHt1dWlkfVwiIjsKLSAgICAgICAgcHJpbnQgRiAiJFNMTl9QT1NUIjsKLSAgICB9CisKICAgICBteSAkdXVpZF9saWJnaXQgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTX2xpYmdpdF9HVUlEIn07CiAgICAgbXkgJHV1aWRfeGRpZmZfbGliID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU194ZGlmZl9saWJfR1VJRCJ9OwogICAgIGZvcmVhY2ggKEBhcHBzKSB7CkBAIC01ODgsNiArNTM0LDEzIEBACiAgICAgICAgIHByaW50IEYgIglFbmRQcm9qZWN0U2VjdGlvbiI7CiAgICAgICAgIHByaW50IEYgIiRTTE5fUE9TVCI7CiAgICAgfQorICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgIG15ICRsaWJuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QUkUiOworICAgICAgICBwcmludCBGICJcIiR7bGlibmFtZX1cIiwgXCIke2xpYm5hbWV9XFwke2xpYm5hbWV9LnZjcHJvalwiLCBcIiR7dXVpZH1cIiI7CisgICAgICAgIHByaW50IEYgIiRTTE5fUE9TVCI7CisgICAgfQogCiAgICAgcHJpbnQgRiA8PCAiRU9NIjsKIEdsb2JhbApAQCAtNTk5LDE3ICs1NTIsMTcgQEAKICAgICBwcmludCBGIDw8ICJFT00iOwogCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uCiBFT00KLSAgICBmb3JlYWNoIChAbGlicykgewotICAgICAgICBteSAkbGlibmFtZSA9ICRfOwotICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9HVUlEIn07CisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgbXkgJGFwcG5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fR1VJRCJ9OwogICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMlxuIjsKICAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyXG4iOwogICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzJcbiI7CiAgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzJcbiI7CiAgICAgfQotICAgIGZvcmVhY2ggKEBhcHBzKSB7Ci0gICAgICAgIG15ICRhcHBuYW1lID0gJF87Ci0gICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0dVSUQifTsKKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBteSAkbGlibmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9HVUlEIn07CiAgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyXG4iOwogICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzJcbiI7CiAgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMlxuIjsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvVmN4cHJvai5wbSBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvVmN4cHJvai5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzZjY2FiCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9WY3hwcm9qLnBtCkBAIC0wLDAgKzEsMzg4IEBACitwYWNrYWdlIEdlbmVyYXRvcnM6OlZjeHByb2o7CityZXF1aXJlIEV4cG9ydGVyOworCit1c2Ugc3RyaWN0OwordXNlIHZhcnMgcXcoJFZFUlNJT04pOwordXNlIERpZ2VzdDo6U0hBIHF3KHNoYTI1Nl9oZXgpOworCitvdXIgJFZFUlNJT04gPSAnMS4wMCc7CitvdXIoQElTQSwgQEVYUE9SVCwgQEVYUE9SVF9PSywgQEFWQUlMQUJMRSk7CitASVNBID0gcXcoRXhwb3J0ZXIpOworCitCRUdJTiB7CisgICAgcHVzaCBARVhQT1JUX09LLCBxdyhnZW5lcmF0ZSk7Cit9CisKK3N1YiBnZW5lcmF0ZV9ndWlkICgkKSB7CisJbXkgJGhleCA9IHNoYTI1Nl9oZXgoJF9bMF0pOworCSRoZXggPX4gcy9eKC57OH0pKC57NH0pKC57NH0pKC57NH0pKC57MTJ9KS4qL3skMS0kMi0kMy0kNC0kNX0vOworCSRoZXggPX4gdHIvYS16L0EtWi87CisJcmV0dXJuICRoZXg7Cit9CisKK3N1YiBnZW5lcmF0ZSB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgbXkgQGxpYnMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlMifX07CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgY3JlYXRlUHJvamVjdCgkXywgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgXCVidWlsZF9zdHJ1Y3R1cmUsIDEpOworICAgIH0KKworICAgIG15IEBhcHBzID0gQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19OworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIGNyZWF0ZVByb2plY3QoJF8sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsIFwlYnVpbGRfc3RydWN0dXJlLCAwKTsKKyAgICB9CisKKyAgICBjcmVhdGVHbHVlUHJvamVjdCgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKTsKKyAgICByZXR1cm4gMDsKK30KKworc3ViIGNyZWF0ZVByb2plY3QgeworICAgIG15ICgkbmFtZSwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJGJ1aWxkX3N0cnVjdHVyZSwgJHN0YXRpY19saWJyYXJ5KSA9IEBfOworICAgIG15ICRsYWJlbCA9ICRzdGF0aWNfbGlicmFyeSA/ICJsaWIiIDogImFwcCI7CisgICAgbXkgJHByZWZpeCA9ICRzdGF0aWNfbGlicmFyeSA/ICJMSUJTXyIgOiAiQVBQU18iOworICAgIG15ICRjb25maWdfdHlwZSA9ICRzdGF0aWNfbGlicmFyeSA/ICJTdGF0aWNMaWJyYXJ5IiA6ICJBcHBsaWNhdGlvbiI7CisgICAgcHJpbnQgIkdlbmVyYXRlICRuYW1lIHZjeHByb2ogJGxhYmVsIHByb2plY3RcbiI7CisgICAgbXkgJGNkdXAgPSAkbmFtZTsKKyAgICAkY2R1cCA9fiBzL1teXC9dKy8uLi9nOworICAgICRjZHVwID1+IHMvXC8vXFwvZzsKKyAgICAkcmVsX2RpciA9ICRyZWxfZGlyIGVxICIuIiA/ICRjZHVwIDogIiRjZHVwXFwkcmVsX2RpciI7CisgICAgJHJlbF9kaXIgPX4gcy9cLy9cXC9nOworCisgICAgbXkgJHRhcmdldCA9ICRuYW1lOworICAgIGlmICgkc3RhdGljX2xpYnJhcnkpIHsKKyAgICAgICR0YXJnZXQgPX4gcy9cLmEvLzsKKyAgICB9IGVsc2UgeworICAgICAgJHRhcmdldCA9fiBzL1wuZXhlLy87CisgICAgfQorCisgICAgbXkgJHV1aWQgPSBnZW5lcmF0ZV9ndWlkKCRuYW1lKTsKKyAgICAkJGJ1aWxkX3N0cnVjdHVyZXsiJHByZWZpeCR7dGFyZ2V0fV9HVUlEIn0gPSAkdXVpZDsKKyAgICBteSAkdmN4cHJvaiA9ICR0YXJnZXQ7CisgICAgJHZjeHByb2ogPX4gcy8oLipcLyk/KC4qKS8kJlwvJDIudmN4cHJvai87CisgICAgJHZjeHByb2ogPX4gcy8oW15cL10qKShcL2xpYilcLyhsaWIudmN4cHJvaikvJDEkMlwvJDFfJDMvOworICAgICQkYnVpbGRfc3RydWN0dXJleyIkcHJlZml4JHt0YXJnZXR9X1ZDWFBST0oifSA9ICR2Y3hwcm9qOworCisgICAgbXkgQHNyY3MgPSBzb3J0KG1hcCgiJHJlbF9kaXJcXCRfIiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiJHByZWZpeCR7bmFtZX1fU09VUkNFUyJ9fSkpOworICAgIG15IEBzb3VyY2VzOworICAgIGZvcmVhY2ggKEBzcmNzKSB7CisgICAgICAgICRfID1+IHMvXC8vXFwvZzsKKyAgICAgICAgcHVzaChAc291cmNlcywgJF8pOworICAgIH0KKyAgICBteSAkZGVmaW5lcyA9IGpvaW4oIjsiLCBzb3J0KEB7JCRidWlsZF9zdHJ1Y3R1cmV7IiRwcmVmaXgke25hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIjsiLCBzb3J0KG1hcCB7IHMvXi1JLy87IHMvXC8vXFwvZzsgRmlsZTo6U3BlYy0+ZmlsZV9uYW1lX2lzX2Fic29sdXRlKCRfKSA/ICRfIDogIiRyZWxfZGlyXFwkXyIgfSBAeyQkYnVpbGRfc3RydWN0dXJleyIkcHJlZml4JHtuYW1lfV9JTkNMVURFUyJ9fSkpOworICAgIG15ICRjZmxhZ3MgPSBqb2luKCIgIiwgc29ydChtYXAgeyBzL14tW0dMTU9XWl0uKi8vOyBzLy4qIC4qLyIkJiIvOyAkXzsgfSBAeyQkYnVpbGRfc3RydWN0dXJleyIkcHJlZml4JHtuYW1lfV9DRkxBR1MifX0pKTsKKyAgICAkY2ZsYWdzID1+IHMvPC8mbHQ7L2c7CisgICAgJGNmbGFncyA9fiBzLz4vJmd0Oy9nOworCisgICAgbXkgJGxpYnNfcmVsZWFzZSA9ICJcbiAgICAiOworICAgIG15ICRsaWJzX2RlYnVnID0gIlxuICAgICI7CisgICAgaWYgKCEkc3RhdGljX2xpYnJhcnkpIHsKKyAgICAgICRsaWJzX3JlbGVhc2UgPSBqb2luKCI7Iiwgc29ydChncmVwIC9eKD8hbGliZ2l0XC5saWJ8eGRpZmZcL2xpYlwubGlifHZjcy1zdm5cL2xpYlwubGliKS8sIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IiRwcmVmaXgke25hbWV9X0xJQlMifX0pKTsKKyAgICAgICRsaWJzX2RlYnVnID0gJGxpYnNfcmVsZWFzZTsKKyAgICAgICRsaWJzX2RlYnVnID1+IHMvemxpYlwubGliL3psaWJkXC5saWIvOworICAgIH0KKworICAgICRkZWZpbmVzID1+IHMvLUQvL2c7CisgICAgJGRlZmluZXMgPX4gcy88LyZsdDsvZzsKKyAgICAkZGVmaW5lcyA9fiBzLz4vJmd0Oy9nOworICAgICRkZWZpbmVzID1+IHMvXCcvL2c7CisKKyAgICBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSAkdGFyZ2V0IGZvciAkbGFiZWwgcHJvamVjdCFcbiIgdW5sZXNzICgtZCAiJHRhcmdldCIgfHwgbWtkaXIgIiR0YXJnZXQiKTsKKworICAgIG9wZW4gRiwgIj4kdmN4cHJvaiIgb3IgZGllICJDb3VsZCBub3Qgb3BlbiAkdmN4cHJvaiBmb3Igd3JpdGluZyFcbiI7CisgICAgYmlubW9kZSBGLCAiOmNybGYgOnV0ZjgiOworICAgIHByaW50IEYgY2hyKDB4RkVGRik7CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD4kdXVpZDwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxWQ1BLR0FyY2ggQ29uZGl0aW9uPSInXCQoUGxhdGZvcm0pJz09J1dpbjMyJyI+eDg2LXdpbmRvd3M8L1ZDUEtHQXJjaD4KKyAgICA8VkNQS0dBcmNoIENvbmRpdGlvbj0iJ1wkKFBsYXRmb3JtKSchPSdXaW4zMiciPng2NC13aW5kb3dzPC9WQ1BLR0FyY2g+CisgICAgPFZDUEtHQXJjaERpcmVjdG9yeT4kY2R1cFxcY29tcGF0XFx2Y2J1aWxkXFx2Y3BrZ1xcaW5zdGFsbGVkXFxcJChWQ1BLR0FyY2gpPC9WQ1BLR0FyY2hEaXJlY3Rvcnk+CisgICAgPFZDUEtHQmluRGlyZWN0b3J5IENvbmRpdGlvbj0iJ1woQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIj5cJChWQ1BLR0FyY2hEaXJlY3RvcnkpXFxkZWJ1Z1xcYmluPC9WQ1BLR0JpbkRpcmVjdG9yeT4KKyAgICA8VkNQS0dMaWJEaXJlY3RvcnkgQ29uZGl0aW9uPSInXChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciPlwkKFZDUEtHQXJjaERpcmVjdG9yeSlcXGRlYnVnXFxsaWI8L1ZDUEtHTGliRGlyZWN0b3J5PgorICAgIDxWQ1BLR0JpbkRpcmVjdG9yeSBDb25kaXRpb249IidcKENvbmZpZ3VyYXRpb24pJyE9J0RlYnVnJyI+XCQoVkNQS0dBcmNoRGlyZWN0b3J5KVxcYmluPC9WQ1BLR0JpbkRpcmVjdG9yeT4KKyAgICA8VkNQS0dMaWJEaXJlY3RvcnkgQ29uZGl0aW9uPSInXChDb25maWd1cmF0aW9uKSchPSdEZWJ1ZyciPlwkKFZDUEtHQXJjaERpcmVjdG9yeSlcXGxpYjwvVkNQS0dMaWJEaXJlY3Rvcnk+CisgICAgPFZDUEtHSW5jbHVkZURpcmVjdG9yeT5cJChWQ1BLR0FyY2hEaXJlY3RvcnkpXFxpbmNsdWRlPC9WQ1BLR0luY2x1ZGVEaXJlY3Rvcnk+CisgICAgPFZDUEtHTGlicyBDb25kaXRpb249IidcKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyI+JGxpYnNfZGVidWc8L1ZDUEtHTGlicz4KKyAgICA8VkNQS0dMaWJzIENvbmRpdGlvbj0iJ1woQ29uZmlndXJhdGlvbiknIT0nRGVidWcnIj4kbGlic19yZWxlYXNlPC9WQ1BLR0xpYnM+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJcJChWQ1RhcmdldHNQYXRoKVxcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IidcJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInXCQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT4kY29uZmlnX3R5cGU8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDwhLS0gPENoYXJhY3RlclNldD5VVEYtODwvQ2hhcmFjdGVyU2V0PiAtLT4KKyAgICA8T3V0RGlyPi4uXFw8L091dERpcj4KKyAgICA8IS0tIDxJbnREaXI+XCQoUHJvamVjdERpcilcJChDb25maWd1cmF0aW9uKVxcPC9JbnREaXI+IC0tPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iXCQoVkNUYXJnZXRzUGF0aClcXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iXCQoVXNlclJvb3REaXIpXFxNaWNyb3NvZnQuQ3BwLlwkKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnXCQoVXNlclJvb3REaXIpXFxNaWNyb3NvZnQuQ3BwLlwkKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0PmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxFbmFibGVNYW5hZ2VkSW5jcmVtZW50YWxCdWlsZD50cnVlPC9FbmFibGVNYW5hZ2VkSW5jcmVtZW50YWxCdWlsZD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPiRjZmxhZ3MgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JGNkdXA7JGNkdXBcXGNvbXBhdDskY2R1cFxcY29tcGF0XFxyZWdleDskY2R1cFxcY29tcGF0XFx3aW4zMjskY2R1cFxcY29tcGF0XFxwb2xsOyRjZHVwXFxjb21wYXRcXHZjYnVpbGRcXGluY2x1ZGU7XCQoVkNQS0dJbmNsdWRlRGlyZWN0b3J5KTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPEVuYWJsZVBhcmFsbGVsQ29kZUdlbmVyYXRpb24gLz4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIC8+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpYj4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvTGliPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+XCQoVkNQS0dMaWJEaXJlY3RvcnkpOyUoQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5cJChWQ1BLR0xpYnMpO1wkKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPmludmFsaWRjb250aW51ZS5vYmogJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgICAgPEVudHJ5UG9pbnRTeW1ib2w+d21haW5DUlRTdGFydHVwPC9FbnRyeVBvaW50U3ltYm9sPgorICAgICAgPE1hbmlmZXN0RmlsZT4kY2R1cFxcY29tcGF0XFx3aW4zMlxcZ2l0Lm1hbmlmZXN0PC9NYW5pZmVzdEZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICA8L0xpbms+CitFT00KKyAgICBpZiAoJHRhcmdldCBlcSAnbGliZ2l0JykgeworICAgICAgICBwcmludCBGIDw8ICJFT00iOworICAgIDxQcmVCdWlsZEV2ZW50IENvbmRpdGlvbj0iIUV4aXN0cygnJGNkdXBcXGNvbXBhdFxcdmNidWlsZFxcdmNwa2dcXGluc3RhbGxlZFxcXCQoVkNQS0dBcmNoKVxcaW5jbHVkZVxcb3BlbnNzbFxcc3NsLmgnKSI+CisgICAgICA8TWVzc2FnZT5Jbml0aWFsaXplIFZDUEtHPC9NZXNzYWdlPgorICAgICAgPENvbW1hbmQ+ZGVsICIkY2R1cFxcY29tcGF0XFx2Y2J1aWxkXFx2Y3BrZyI8L0NvbW1hbmQ+CisgICAgICA8Q29tbWFuZD5jYWxsICIkY2R1cFxcY29tcGF0XFx2Y2J1aWxkXFx2Y3BrZ19pbnN0YWxsLmJhdCI8L0NvbW1hbmQ+CisgICAgPC9QcmVCdWlsZEV2ZW50PgorRU9NCisgICAgfQorICAgIHByaW50IEYgPDwgIkVPTSI7CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInXCQoUGxhdGZvcm0pJz09J1dpbjMyJyI+CisgICAgPExpbms+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IidcJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHOyRkZWZpbmVzOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJ1wkKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHOyRkZWZpbmVzOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxGYXZvclNpemVPclNwZWVkPlNwZWVkPC9GYXZvclNpemVPclNwZWVkPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CitFT00KKyAgICBmb3JlYWNoKEBzb3VyY2VzKSB7CisgICAgICAgIHByaW50IEYgPDwgIkVPTSI7CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkXyIgLz4KK0VPTQorICAgIH0KKyAgICBwcmludCBGIDw8ICJFT00iOworICA8L0l0ZW1Hcm91cD4KK0VPTQorICAgIGlmICghJHN0YXRpY19saWJyYXJ5IHx8ICR0YXJnZXQgPX4gJ3Zjcy1zdm4nIHx8ICR0YXJnZXQgPX4gJ3hkaWZmJykgeworICAgICAgbXkgJHV1aWRfbGliZ2l0ID0gJCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfbGliZ2l0X0dVSUQifTsKKyAgICAgIG15ICR1dWlkX3hkaWZmX2xpYiA9ICQkYnVpbGRfc3RydWN0dXJleyJMSUJTX3hkaWZmL2xpYl9HVUlEIn07CisKKyAgICAgIHByaW50IEYgPDwgIkVPTSI7CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iJGNkdXBcXGxpYmdpdFxcbGliZ2l0LnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+JHV1aWRfbGliZ2l0PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CitFT00KKyAgICAgIGlmICghKCRuYW1lID1+ICd4ZGlmZicpKSB7CisgICAgICAgIHByaW50IEYgPDwgIkVPTSI7CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iJGNkdXBcXHhkaWZmXFxsaWJcXHhkaWZmX2xpYi52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PiR1dWlkX3hkaWZmX2xpYjwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorRU9NCisgICAgICB9CisgICAgICBpZiAoJG5hbWUgPX4gLyh0ZXN0LShsaW5lLWJ1ZmZlcnxzdm4tZmUpfF5naXQtcmVtb3RlLXRlc3Rzdm4pXC5leGUkLykgeworICAgICAgICBteSAkdXVpZF92Y3Nfc3ZuX2xpYiA9ICQkYnVpbGRfc3RydWN0dXJleyJMSUJTX3Zjcy1zdm4vbGliX0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiA8PCAiRU9NIjsKKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSIkY2R1cFxcdmNzLXN2blxcbGliXFx2Y3Mtc3ZuX2xpYi52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PiR1dWlkX3Zjc19zdm5fbGliPC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CitFT00KKyAgICAgIH0KKyAgICAgIHByaW50IEYgPDwgIkVPTSI7CisgIDwvSXRlbUdyb3VwPgorRU9NCisgICAgfQorICAgIHByaW50IEYgPDwgIkVPTSI7CisgIDxJbXBvcnQgUHJvamVjdD0iXCQoVkNUYXJnZXRzUGF0aClcXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KK0VPTQorICAgIGlmICghJHN0YXRpY19saWJyYXJ5KSB7CisgICAgICBwcmludCBGIDw8ICJFT00iOworICA8VGFyZ2V0IE5hbWU9IiR7dGFyZ2V0fV9BZnRlckJ1aWxkIiBBZnRlclRhcmdldHM9IkFmdGVyQnVpbGQiPgorICAgIDxJdGVtR3JvdXA+CisgICAgICA8RExMc0FuZFBEQnMgSW5jbHVkZT0iXCQoVkNQS0dCaW5EaXJlY3RvcnkpXFwqLmRsbDtcJChWQ1BLR0JpbkRpcmVjdG9yeSlcXCoucGRiIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxDb3B5IFNvdXJjZUZpbGVzPSJAKERMTHNBbmRQREJzKSIgRGVzdGluYXRpb25Gb2xkZXI9IlwkKE91dERpcikiIFNraXBVbmNoYW5nZWRGaWxlcz0idHJ1ZSIgVXNlSGFyZGxpbmtzSWZQb3NzaWJsZT0idHJ1ZSIgLz4KKyAgICA8TWFrZURpciBEaXJlY3Rvcmllcz0iLi5cXHRlbXBsYXRlc1xcYmx0XFxicmFuY2hlcyIgLz4KKyAgPC9UYXJnZXQ+CitFT00KKyAgICB9CisgICAgaWYgKCR0YXJnZXQgZXEgJ2dpdCcpIHsKKyAgICAgIHByaW50IEYgIiAgPEltcG9ydCBQcm9qZWN0PVwiTGlua09yQ29weUJ1aWx0aW5zLnRhcmdldHNcIiAvPlxuIjsKKyAgICB9CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKzwvUHJvamVjdD4KK0VPTQorICAgIGNsb3NlIEY7Cit9CisKK3N1YiBjcmVhdGVHbHVlUHJvamVjdCB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcHJpbnQgIkdlbmVyYXRlIHNvbHV0aW9ucyBmaWxlXG4iOworICAgICRyZWxfZGlyID0gIi4uXFwkcmVsX2RpciI7CisgICAgJHJlbF9kaXIgPX4gcy9cLy9cXC9nOworICAgIG15ICRTTE5fSEVBRCA9ICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMS4wMFxuIyBWaXN1YWwgU3R1ZGlvIDIwMTBcbiI7CisgICAgbXkgJFNMTl9QUkUgID0gIlByb2plY3QoXCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfVwiKSA9ICI7CisgICAgbXkgJFNMTl9QT1NUID0gIlxuRW5kUHJvamVjdFxuIjsKKworICAgIG15IEBsaWJzID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19OworICAgIG15IEB0bXA7CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgJF8gPX4gcy9cLmEvLzsKKyAgICAgICAgcHVzaChAdG1wLCAkXyk7CisgICAgfQorICAgIEBsaWJzID0gQHRtcDsKKworICAgIG15IEBhcHBzID0gQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19OworICAgIEB0bXAgPSAoKTsKKyAgICBmb3JlYWNoIChAYXBwcykgeworICAgICAgICAkXyA9fiBzL1wuZXhlLy87CisgICAgICAgIGlmICgkXyBlcSAiZ2l0IiApIHsKKyAgICAgICAgICAgIHVuc2hpZnQoQHRtcCwgJF8pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAdG1wLCAkXyk7CisgICAgICAgIH0KKyAgICB9CisgICAgQGFwcHMgPSBAdG1wOworCisgICAgb3BlbiBGLCAiPmdpdC5zbG4iIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gZ2l0LnNsbiBmb3Igd3JpdGluZyFcbiI7CisgICAgYmlubW9kZSBGLCAiOmNybGYgOnV0ZjgiOworICAgIHByaW50IEYgY2hyKDB4RkVGRik7CisgICAgcHJpbnQgRiAiJFNMTl9IRUFEIjsKKworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIG15ICRhcHBuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QUkUiOworCW15ICR2Y3hwcm9qID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X1ZDWFBST0oifTsKKwkkdmN4cHJvaiA9fiBzL1wvL1xcL2c7CisgICAgICAgICRhcHBuYW1lID1+IHMvLipcLy8vOworICAgICAgICBwcmludCBGICJcIiR7YXBwbmFtZX1cIiwgXCIke3ZjeHByb2p9XCIsIFwiJHt1dWlkfVwiIjsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QT1NUIjsKKyAgICB9CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgbXkgJGxpYm5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fR1VJRCJ9OworICAgICAgICBwcmludCBGICIkU0xOX1BSRSI7CisgICAgICAgIG15ICR2Y3hwcm9qID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X1ZDWFBST0oifTsKKwkkdmN4cHJvaiA9fiBzL1wvL1xcL2c7CisgICAgICAgICRsaWJuYW1lID1+IHMvXC8vXy9nOworICAgICAgICBwcmludCBGICJcIiR7bGlibmFtZX1cIiwgXCIke3ZjeHByb2p9XCIsIFwiJHt1dWlkfVwiIjsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QT1NUIjsKKyAgICB9CisKKyAgICBwcmludCBGIDw8ICJFT00iOworR2xvYmFsCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KKwkJRGVidWd8eDY0ID0gRGVidWd8eDY0CisJCURlYnVnfHg4NiA9IERlYnVnfHg4NgorCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0CisJCVJlbGVhc2V8eDg2ID0gUmVsZWFzZXx4ODYKKwlFbmRHbG9iYWxTZWN0aW9uCitFT00KKyAgICBwcmludCBGIDw8ICJFT00iOworCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uCitFT00KKyAgICBmb3JlYWNoIChAYXBwcykgeworICAgICAgICBteSAkYXBwbmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9HVUlEIn07CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0XG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0XG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyXG4iOworICAgIH0KKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBteSAkbGlibmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9HVUlEIn07CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0XG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0XG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyXG4iOworICAgIH0KKworICAgIHByaW50IEYgPDwgIkVPTSI7CisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQorCUVuZEdsb2JhbFNlY3Rpb24KK0VuZEdsb2JhbAorRU9NCisgICAgY2xvc2UgRjsKK30KKworMTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2VuZ2luZS5wbCBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2VuZ2luZS5wbAppbmRleCAyM2RhNzg3Li5mYmE4YTNmIDEwMDc1NQotLS0gYS9jb250cmliL2J1aWxkc3lzdGVtcy9lbmdpbmUucGwKKysrIGIvY29udHJpYi9idWlsZHN5c3RlbXMvZW5naW5lLnBsCkBAIC0xMiw2ICsxMiw3IEBACiB1c2UgRmlsZTo6U3BlYzsKIHVzZSBDd2Q7CiB1c2UgR2VuZXJhdG9yczsKK3VzZSBUZXh0OjpQYXJzZVdvcmRzOwogCiBteSAoJWJ1aWxkX3N0cnVjdHVyZSwgJWNvbXBpbGVfb3B0aW9ucywgQG1ha2VkcnkpOwogbXkgJG91dF9kaXIgPSBnZXRjd2QoKTsKQEAgLTMxLDYgKzMyLDcgQEAKICAgLWcgPEdFTkVSQVRPUj4gIC0tZ2VuIDxHRU5FUkFUT1I+IFNwZWNpZnkgdGhlIGJ1aWxkc3lzdGVtIGdlbmVyYXRvciAgICAoZGVmYXVsdDogJGdlbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJsZTogJGdlbmxpc3QKICAgLW8gPFBBVEg+ICAgICAgIC0tb3V0IDxQQVRIPiAgICAgIFNwZWNpZnkgb3V0cHV0IGRpcmVjdG9yeSBnZW5lcmF0aW9uICAoZGVmYXVsdDogLikKKyAgICAgICAgICAgICAgICAgIC0tbWFrZS1vdXQgPFBBVEg+IFdyaXRlIHRoZSBvdXRwdXQgb2YgR05VIE1ha2UgaW50byBhIGZpbGUKICAgLWkgPEZJTEU+ICAgICAgIC0taW4gPEZJTEU+ICAgICAgIFNwZWNpZnkgaW5wdXQgZmlsZSwgaW5zdGVhZCBvZiBydW5uaW5nIEdOVSBNYWtlCiAgIC1oLC0/ICAgICAgICAgICAtLWhlbHAgICAgICAgICAgICBUaGlzIGhlbHAKIEVPTQpAQCAtMzgsNiArNDAsNyBAQAogfQogCiAjIFBhcnNlIGNvbW1hbmQtbGluZSBvcHRpb25zCitteSAkbWFrZV9vdXQ7CiB3aGlsZSAoQEFSR1YpIHsKICAgICBteSAkYXJnID0gc2hpZnQgQEFSR1Y7CiAgICAgaWYgKCIkYXJnIiBlcSAiLWgiIHx8ICIkYXJnIiBlcSAiLS1oZWxwIiB8fCAiJGFyZyIgZXEgIi0/IikgewpAQCAtNDUsNiArNDgsOCBAQAogCWV4aXQoMCk7CiAgICAgfSBlbHNpZigiJGFyZyIgZXEgIi0tb3V0IiB8fCAiJGFyZyIgZXEgIi1vIikgewogCSRvdXRfZGlyID0gc2hpZnQgQEFSR1Y7CisgICAgfSBlbHNpZigiJGFyZyIgZXEgIi0tbWFrZS1vdXQiKSB7CisJJG1ha2Vfb3V0ID0gc2hpZnQgQEFSR1Y7CiAgICAgfSBlbHNpZigiJGFyZyIgZXEgIi0tZ2VuIiB8fCAiJGFyZyIgZXEgIi1nIikgewogCSRnZW4gPSBzaGlmdCBAQVJHVjsKICAgICB9IGVsc2lmKCIkYXJnIiBlcSAiLS1pbiIgfHwgIiRhcmciIGVxICItaSIpIHsKQEAgLTUyLDYgKzU3LDggQEAKICAgICAgICAgb3BlbihGLCAiPCRpbmZpbGUiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkaW5maWxlIjsKICAgICAgICAgQG1ha2VkcnkgPSA8Rj47CiAgICAgICAgIGNsb3NlKEYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRpZSAiVW5rbm93biBvcHRpb246ICIgLiAkYXJnOwogICAgIH0KIH0KIApAQCAtNzIsNyArNzksMTkgQEAKIEVPTQogCiAjIFBpcGUgYSBtYWtlIC0tZHJ5LXJ1biBpbnRvIGEgdmFyaWFibGUsIGlmIG5vdCBhbHJlYWR5IGxvYWRlZCBmcm9tIGZpbGUKLUBtYWtlZHJ5ID0gYGNkICRnaXRfZGlyICYmIG1ha2UgLW4gTVNWQz0xIFY9MSAyPi9kZXYvbnVsbGAgaWYgIUBtYWtlZHJ5OworIyBDYXB0dXJlIHRoZSBtYWtlIGRyeSBzdGRlcnIgdG8gZmlsZSBmb3IgcmV2aWV3ICh3aWxsIGJlIGVtcHR5IGZvciBhIHJlbGVhc2UgYnVpbGQpLgorCitteSAkRXJyc0ZpbGUgPSAibXN2Yy1idWlsZC1tYWtlZHJ5ZXJyb3JzLnR4dCI7CitAbWFrZWRyeSA9IGBtYWtlIC1DICRnaXRfZGlyIC1uIE1TVkM9MSBTS0lQX1ZDUEtHPTEgVj0xIDI+JEVycnNGaWxlYAoraWYgIUBtYWtlZHJ5OworIyB0ZXN0IGZvciBhbiBlbXB0eSBFcnJvcnMgZmlsZSBhbmQgcmVtb3ZlIGl0Cit1bmxpbmsgJEVycnNGaWxlIGlmIC1mIC16ICRFcnJzRmlsZTsKKworaWYgKGRlZmluZWQgJG1ha2Vfb3V0KSB7CisgICAgb3BlbiBPVVQsICI+IiAuICRtYWtlX291dDsKKyAgICBwcmludCBPVVQgQG1ha2Vkcnk7CisgICAgY2xvc2UgT1VUOworfQogCiAjIFBhcnNlIHRoZSBtYWtlIG91dHB1dCBpbnRvIHVzYWJsZSBpbmZvCiBwYXJzZU1ha2VPdXRwdXQoKTsKQEAgLTE0MCw2ICsxNTksMTIgQEAKICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoJHRleHQgPX4gL14obWtkaXJ8bXNnZm10KSAvKSB7CisgICAgICAgICAgICAjIG9wdGlvbnMgdG8gdGhlIFBvcnRhYmxlIE9iamVjdCB0cmFuc2xhdGlvbnMKKyAgICAgICAgICAgICMgdGhlIGxpbmUgIm1rZGlyIC4uLiAmJiBtc2dmbXQgLi4uIiBjb250YWlucyBubyBsaW5rZXIgb3B0aW9ucworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCiAgICAgICAgIGlmKCR0ZXh0ID1+IC8gLWMgLykgewogICAgICAgICAgICAgIyBjb21waWxhdGlvbgogICAgICAgICAgICAgaGFuZGxlQ29tcGlsZUxpbmUoJHRleHQsICRsaW5lKTsKQEAgLTIzMSw3ICsyNTYsNyBAQAogc3ViIGhhbmRsZUNvbXBpbGVMaW5lCiB7CiAgICAgbXkgKCRsaW5lLCAkbGluZW5vKSA9IEBfOwotICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIG15IEBwYXJ0cyA9IHNoZWxsd29yZHMoJGxpbmUpOwogICAgIG15ICRzb3VyY2VmaWxlOwogICAgIHNoaWZ0KEBwYXJ0cyk7ICMgaWdub3JlIGNtZAogICAgIHdoaWxlIChteSAkcGFydCA9IHNoaWZ0IEBwYXJ0cykgewpAQCAtMjY1LDcgKzI5MCw3IEBACiAgICAgbXkgKEBvYmpmaWxlcywgQGxmbGFncywgJGxpYm91dCwgJHBhcnQpOwogICAgICMga2lsbCBjbWQgYW5kIHJtICdwcmVmaXgnCiAgICAgJGxpbmUgPX4gcy9ecm0gLWYgLiogJiYgLiogcmNzIC8vOwotICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIG15IEBwYXJ0cyA9IHNoZWxsd29yZHMoJGxpbmUpOwogICAgIHdoaWxlICgkcGFydCA9IHNoaWZ0IEBwYXJ0cykgewogICAgICAgICBpZiAoJHBhcnQgPX4gL14tLykgewogICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CkBAIC0yODIsNyArMzA3LDcgQEAKICMgICAgZXhpdCgxKTsKICAgICBmb3JlYWNoIChAb2JqZmlsZXMpIHsKICAgICAgICAgbXkgJHNvdXJjZWZpbGUgPSAkXzsKLSAgICAgICAgJHNvdXJjZWZpbGUgPX4gcy9cLm8vLmMvOworICAgICAgICAkc291cmNlZmlsZSA9fiBzL1wubyQvLmMvOwogICAgICAgICBwdXNoKEBzb3VyY2VzLCAkc291cmNlZmlsZSk7CiAgICAgICAgIHB1c2goQGNmbGFncywgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0NGTEFHUyJ9fSk7CiAgICAgICAgIHB1c2goQGRlZmluZXMsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9ERUZJTkVTIn19KTsKQEAgLTMwNiw3ICszMzEsNyBAQAogewogICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKICAgICBteSAoQG9iamZpbGVzLCBAbGZsYWdzLCBAbGlicywgJGFwcG91dCwgJHBhcnQpOwotICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIG15IEBwYXJ0cyA9IHNoZWxsd29yZHMoJGxpbmUpOwogICAgIHNoaWZ0KEBwYXJ0cyk7ICMgaWdub3JlIGNtZAogICAgIHdoaWxlICgkcGFydCA9IHNoaWZ0IEBwYXJ0cykgewogICAgICAgICBpZiAoJHBhcnQgPX4gL14tSUdOT1JFLykgewpAQCAtMzE3LDI2ICszNDIsMzYgQEAKICAgICAgICAgICAgICRhcHBvdXQgPSBzaGlmdCBAcGFydHM7CiAgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1seiIpIHsKICAgICAgICAgICAgIHB1c2goQGxpYnMsICJ6bGliLmxpYiIpOwotCX0gZWxzaWYgKCIkcGFydCIgZXEgIi1sY3J5cHRvIikgeworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbGNyeXB0byIpIHsKICAgICAgICAgICAgIHB1c2goQGxpYnMsICJsaWJlYXkzMi5saWIiKTsKICAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWxzc2wiKSB7CiAgICAgICAgICAgICBwdXNoKEBsaWJzLCAic3NsZWF5MzIubGliIik7Ci0gICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLS8pIHsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWxjdXJsIikgeworICAgICAgICAgICAgcHVzaChAbGlicywgImxpYmN1cmwubGliIik7CisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1sZXhwYXQiKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAiZXhwYXQubGliIik7CisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1saWNvbnYiKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAibGliaWNvbnYubGliIik7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eWy1cL10vKSB7CiAgICAgICAgICAgICBwdXNoKEBsZmxhZ3MsICRwYXJ0KTsKICAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGF8bGliKSQvKSB7CiAgICAgICAgICAgICAkcGFydCA9fiBzL1wuYSQvLmxpYi87CiAgICAgICAgICAgICBwdXNoKEBsaWJzLCAkcGFydCk7Ci0gICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihvfG9iaikkLykgeworICAgICAgICB9IGVsc2lmICgkcGFydCBlcSAnaW52YWxpZGNvbnRpbnVlLm9iaicpIHsKKyAgICAgICAgICAgICMgaWdub3JlIC0ga25vd24gdG8gTVNWQworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC5vJC8pIHsKICAgICAgICAgICAgIHB1c2goQG9iamZpbGVzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLm9iaiQvKSB7CisgICAgICAgICAgICAjIGRvIG5vdGhpbmcsICdtYWtlJyBzaG91bGQgbm90IGJlIHByb2R1Y2luZyAub2JqLCBvbmx5IC5vIGZpbGVzCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkaWUgIlVuaGFuZGxlZCBsaWIgb3B0aW9uIEAgbGluZSAkbGluZW5vOiAkcGFydCI7CisgICAgICAgICAgICBkaWUgIlVuaGFuZGxlZCBsaW5rIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOwogICAgICAgICB9CiAgICAgfQogIyAgICBwcmludCAiQXBwT3V0OiAnJGFwcG91dCdcbkxGbGFnczogQGxmbGFnc1xuTGlicyAgOiBAbGlic1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CiAjICAgIGV4aXQoMSk7CiAgICAgZm9yZWFjaCAoQG9iamZpbGVzKSB7CiAgICAgICAgIG15ICRzb3VyY2VmaWxlID0gJF87Ci0gICAgICAgICRzb3VyY2VmaWxlID1+IHMvXC5vLy5jLzsKKyAgICAgICAgJHNvdXJjZWZpbGUgPX4gcy9cLm8kLy5jLzsKICAgICAgICAgcHVzaChAc291cmNlcywgJHNvdXJjZWZpbGUpOwogICAgICAgICBwdXNoKEBjZmxhZ3MsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9DRkxBR1MifX0pOwogICAgICAgICBwdXNoKEBkZWZpbmVzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fREVGSU5FUyJ9fSk7CmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvYXJyYXkuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUvYXJyYXkuY29jY2kKaW5kZXggMDE1ODY4Mi4uNDZiOGQyZSAxMDA2NDQKLS0tIGEvY29udHJpYi9jb2NjaW5lbGxlL2FycmF5LmNvY2NpCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9hcnJheS5jb2NjaQpAQCAtMSwyOSArMSw2MCBAQAogQEAKLXR5cGUgVDsKLVQgKmRzdDsKLVQgKnNyYzsKLWV4cHJlc3Npb24gbjsKK2V4cHJlc3Npb24gZHN0LCBzcmMsIG4sIEU7CiBAQAotLSBtZW1jcHkoZHN0LCBzcmMsIChuKSAqIHNpemVvZigqZHN0KSk7Ci0rIENPUFlfQVJSQVkoZHN0LCBzcmMsIG4pOworICBtZW1jcHkoZHN0LCBzcmMsIG4gKiBzaXplb2YoCistIEVbLi4uXQorKyAqKEUpCisgICkpCiAKIEBACiB0eXBlIFQ7Ci1UICpkc3Q7Ci1UICpzcmM7Ci1leHByZXNzaW9uIG47CitUICpwdHI7CitUW10gYXJyOworZXhwcmVzc2lvbiBFLCBuOwogQEAKLS0gbWVtY3B5KGRzdCwgc3JjLCAobikgKiBzaXplb2YoKnNyYykpOwotKyBDT1BZX0FSUkFZKGRzdCwgc3JjLCBuKTsKKygKKyAgbWVtY3B5KHB0ciwgRSwKKy0gbiAqIHNpemVvZigqKHB0cikpCisrIG4gKiBzaXplb2YoVCkKKyAgKQorfAorICBtZW1jcHkoYXJyLCBFLAorLSBuICogc2l6ZW9mKCooYXJyKSkKKysgbiAqIHNpemVvZihUKQorICApCit8CisgIG1lbWNweShFLCBwdHIsCistIG4gKiBzaXplb2YoKihwdHIpKQorKyBuICogc2l6ZW9mKFQpCisgICkKK3wKKyAgbWVtY3B5KEUsIGFyciwKKy0gbiAqIHNpemVvZigqKGFycikpCisrIG4gKiBzaXplb2YoVCkKKyAgKQorKQogCiBAQAogdHlwZSBUOwotVCAqZHN0OwotVCAqc3JjOworVCAqZHN0X3B0cjsKK1QgKnNyY19wdHI7CitUW10gZHN0X2FycjsKK1RbXSBzcmNfYXJyOwogZXhwcmVzc2lvbiBuOwogQEAKLS0gbWVtY3B5KGRzdCwgc3JjLCAobikgKiBzaXplb2YoVCkpOwotKyBDT1BZX0FSUkFZKGRzdCwgc3JjLCBuKTsKKygKKy0gbWVtY3B5KGRzdF9wdHIsIHNyY19wdHIsIChuKSAqIHNpemVvZihUKSkKKysgQ09QWV9BUlJBWShkc3RfcHRyLCBzcmNfcHRyLCBuKQorfAorLSBtZW1jcHkoZHN0X3B0ciwgc3JjX2FyciwgKG4pICogc2l6ZW9mKFQpKQorKyBDT1BZX0FSUkFZKGRzdF9wdHIsIHNyY19hcnIsIG4pCit8CistIG1lbWNweShkc3RfYXJyLCBzcmNfcHRyLCAobikgKiBzaXplb2YoVCkpCisrIENPUFlfQVJSQVkoZHN0X2Fyciwgc3JjX3B0ciwgbikKK3wKKy0gbWVtY3B5KGRzdF9hcnIsIHNyY19hcnIsIChuKSAqIHNpemVvZihUKSkKKysgQ09QWV9BUlJBWShkc3RfYXJyLCBzcmNfYXJyLCBuKQorKQogCiBAQAogdHlwZSBUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaAppbmRleCA5ZjcxYmNkLi5lMDg3YzRiIDEwMDY0NAotLS0gYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaAorKysgYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaApAQCAtMzcsNyArMzcsOCBAQAogIyAgIEdJVF9DT01QTEVUSU9OX0NIRUNLT1VUX05PX0dVRVNTCiAjCiAjICAgICBXaGVuIHNldCB0byAiMSIsIGRvIG5vdCBpbmNsdWRlICJEV0lNIiBzdWdnZXN0aW9ucyBpbiBnaXQtY2hlY2tvdXQKLSMgICAgIGNvbXBsZXRpb24gKGUuZy4sIGNvbXBsZXRpbmcgImZvbyIgd2hlbiAib3JpZ2luL2ZvbyIgZXhpc3RzKS4KKyMgICAgIGFuZCBnaXQtc3dpdGNoIGNvbXBsZXRpb24gKGUuZy4sIGNvbXBsZXRpbmcgImZvbyIgd2hlbiAib3JpZ2luL2ZvbyIKKyMgICAgIGV4aXN0cykuCiAKIGNhc2UgIiRDT01QX1dPUkRCUkVBS1MiIGluCiAqOiopIDogZ3JlYXQgOzsKQEAgLTQwMCw3ICs0MDEsOCBAQAogCWlmIFsgLXogIiRvcHRpb25zIiBdOyB0aGVuCiAJCSMgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGFyZSBzaWduaWZpY2FudCB0byBtYWtlCiAJCSMgb3B0aW9uIHJlbW92YWwgd29yayBjb3JyZWN0bHkuCi0JCW9wdGlvbnM9IiAkaW5jbCAkKF9fZ2l0ICR7Y21kL18vIH0gLS1naXQtY29tcGxldGlvbi1oZWxwZXIpICIKKwkJb3B0aW9ucz0iICRpbmNsICQoX19naXQgJHtjbWQvXy8gfSAtLWdpdC1jb21wbGV0aW9uLWhlbHBlcikgIiB8fCByZXR1cm4KKwogCQlmb3IgaSBpbiAkZXhjbDsgZG8KIAkJCW9wdGlvbnM9IiR7b3B0aW9ucy8gJGkgLyB9IgogCQlkb25lCkBAIC0yMTU5LDYgKzIxNjEsNDQgQEAKIAlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICIkY29tcGxldGVfb3B0IgogfQogCitfZ2l0X3N3aXRjaCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS1jb25mbGljdD0qKQorCQlfX2dpdGNvbXAgImRpZmYzIG1lcmdlIiAiIiAiJHtjdXIjIy0tY29uZmxpY3Q9fSIKKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHN3aXRjaAorCQk7OworCSopCisJCSMgY2hlY2sgaWYgLS10cmFjaywgLS1uby10cmFjaywgb3IgLS1uby1ndWVzcyB3YXMgc3BlY2lmaWVkCisJCSMgaWYgc28sIGRpc2FibGUgRFdJTSBtb2RlCisJCWxvY2FsIHRyYWNrX29wdD0iLS10cmFjayIgb25seV9sb2NhbF9yZWY9bgorCQlpZiBbICIkR0lUX0NPTVBMRVRJT05fQ0hFQ0tPVVRfTk9fR1VFU1MiID0gIjEiIF0gfHwKKwkJICAgWyAtbiAiJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIi0tdHJhY2sgLS1uby10cmFjayAtLW5vLWd1ZXNzIikiIF07IHRoZW4KKwkJCXRyYWNrX29wdD0nJworCQlmaQorCQkjIGV4cGxpY2l0IC0tZ3Vlc3MgZW5hYmxlcyBEV0lNIG1vZGUgcmVnYXJkbGVzcyBvZgorCQkjICRHSVRfQ09NUExFVElPTl9DSEVDS09VVF9OT19HVUVTUworCQlpZiBbIC1uICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiLS1ndWVzcyIpIiBdOyB0aGVuCisJCQl0cmFja19vcHQ9Jy0tdHJhY2snCisJCWZpCisJCWlmIFsgLXogIiQoX19naXRfZmluZF9vbl9jbWRsaW5lICItZCAtLWRldGFjaCIpIiBdOyB0aGVuCisJCQlvbmx5X2xvY2FsX3JlZj15CisJCWVsc2UKKwkJCSMgLS1ndWVzcyAtLWRldGFjaCBpcyBpbnZhbGlkIGNvbWJpbmF0aW9uLCBubworCQkJIyBkd2ltIHdpbGwgYmUgZG9uZSB3aGVuIC0tZGV0YWNoIGlzIHNwZWNpZmllZAorCQkJdHJhY2tfb3B0PQorCQlmaQorCQlpZiBbICRvbmx5X2xvY2FsX3JlZiA9IHkgLWEgLXogIiR0cmFja19vcHQiIF07IHRoZW4KKwkJCV9fZ2l0Y29tcF9kaXJlY3QgIiQoX19naXRfaGVhZHMgIiIgIiRjdXIiICIgIikiCisJCWVsc2UKKwkJCV9fZ2l0X2NvbXBsZXRlX3JlZnMgJHRyYWNrX29wdAorCQlmaQorCQk7OworCWVzYWMKK30KKwogX19naXRfY29uZmlnX2dldF9zZXRfdmFyaWFibGVzICgpCiB7CiAJbG9jYWwgcHJldndvcmQgd29yZCBjb25maWdfZmlsZT0gYz0kY3dvcmQKQEAgLTI0NTcsNiArMjQ5NywyMSBAQAogCV9fZ2l0X2NvbXBsZXRlX3JlZnMKIH0KIAorX2dpdF9yZXN0b3JlICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLWNvbmZsaWN0PSopCisJCV9fZ2l0Y29tcCAiZGlmZjMgbWVyZ2UiICIiICIke2N1ciMjLS1jb25mbGljdD19IgorCQk7OworCS0tc291cmNlPSopCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMgLS1jdXI9IiR7Y3VyIyMtLXNvdXJjZT19IgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gcmVzdG9yZQorCQk7OworCWVzYWMKK30KKwogX19naXRfcmV2ZXJ0X2lucHJvZ3Jlc3Nfb3B0aW9ucz0iLS1jb250aW51ZSAtLXF1aXQgLS1hYm9ydCIKIAogX2dpdF9yZXZlcnQgKCkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1wcm9tcHQuc2gKaW5kZXggOTgzZTQxOS4uMWQ1MTBjZCAxMDA2NDQKLS0tIGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1wcm9tcHQuc2gKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1wcm9tcHQuc2gKQEAgLTI4Niw2ICsyODYsMzcgQEAKIAl0ZXN0IC1yICIkMSIgJiYgSUZTPSQnXHJcbicgcmVhZCAiJDIiIDwiJDEiCiB9CiAKKyMgc2VlIGlmIGEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGluIHByb2dyZXNzLCBpZiB0aGUgdXNlciBoYXMgY29tbWl0dGVkIGEKKyMgY29uZmxpY3QgcmVzb2x1dGlvbiB3aXRoICdnaXQgY29tbWl0JyBpbiB0aGUgbWlkZGxlIG9mIGEgc2VxdWVuY2Ugb2YgcGlja3Mgb3IKKyMgcmV2ZXJ0cyB0aGVuIENIRVJSWV9QSUNLX0hFQUQvUkVWRVJUX0hFQUQgd2lsbCBub3QgZXhpc3Qgc28gd2UgaGF2ZSB0byByZWFkCisjIHRoZSB0b2RvIGZpbGUuCitfX2dpdF9zZXF1ZW5jZXJfc3RhdHVzICgpCit7CisJbG9jYWwgdG9kbworCWlmIHRlc3QgLWYgIiRnL0NIRVJSWV9QSUNLX0hFQUQiCisJdGhlbgorCQlyPSJ8Q0hFUlJZLVBJQ0tJTkciCisJCXJldHVybiAwOworCWVsaWYgdGVzdCAtZiAiJGcvUkVWRVJUX0hFQUQiCisJdGhlbgorCQlyPSJ8UkVWRVJUSU5HIgorCQlyZXR1cm4gMDsKKwllbGlmIF9fZ2l0X2VyZWFkICIkZy9zZXF1ZW5jZXIvdG9kbyIgdG9kbworCXRoZW4KKwkJY2FzZSAiJHRvZG8iIGluCisJCXBbXCBcCV18cGlja1tcIFwJXSopCisJCQlyPSJ8Q0hFUlJZLVBJQ0tJTkciCisJCQlyZXR1cm4gMAorCQk7OworCQlyZXZlcnRbXCBcCV0qKQorCQkJcj0ifFJFVkVSVElORyIKKwkJCXJldHVybiAwCisJCTs7CisJCWVzYWMKKwlmaQorCXJldHVybiAxCit9CisKICMgX19naXRfcHMxIGFjY2VwdHMgMCBvciAxIGFyZ3VtZW50cyAoaS5lLiwgZm9ybWF0IHN0cmluZykKICMgd2hlbiBjYWxsZWQgZnJvbSBQUzEgdXNpbmcgY29tbWFuZCBzdWJzdGl0dXRpb24KICMgaW4gdGhpcyBtb2RlIGl0IHByaW50cyB0ZXh0IHRvIGFkZCB0byBiYXNoIFBTMSBwcm9tcHQgKGluY2x1ZGVzIGJyYW5jaCBuYW1lKQpAQCAtNDE3LDEwICs0NDgsOCBAQAogCQkJZmkKIAkJZWxpZiBbIC1mICIkZy9NRVJHRV9IRUFEIiBdOyB0aGVuCiAJCQlyPSJ8TUVSR0lORyIKLQkJZWxpZiBbIC1mICIkZy9DSEVSUllfUElDS19IRUFEIiBdOyB0aGVuCi0JCQlyPSJ8Q0hFUlJZLVBJQ0tJTkciCi0JCWVsaWYgWyAtZiAiJGcvUkVWRVJUX0hFQUQiIF07IHRoZW4KLQkJCXI9InxSRVZFUlRJTkciCisJCWVsaWYgX19naXRfc2VxdWVuY2VyX3N0YXR1czsgdGhlbgorCQkJOgogCQllbGlmIFsgLWYgIiRnL0JJU0VDVF9MT0ciIF07IHRoZW4KIAkJCXI9InxCSVNFQ1RJTkciCiAJCWZpCmRpZmYgLS1naXQgYS9kZWNvcmF0ZS5jIGIvZGVjb3JhdGUuYwppbmRleCBkZTMxMzMxLi5hNjA1YjFiIDEwMDY0NAotLS0gYS9kZWNvcmF0ZS5jCisrKyBiL2RlY29yYXRlLmMKQEAgLTgsNyArOCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9vYmooY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqLCB1bnNpZ25lZCBpbnQgbikKIHsKLQlyZXR1cm4gc2hhMWhhc2gob2JqLT5vaWQuaGFzaCkgJSBuOworCXJldHVybiBvaWRoYXNoKCZvYmotPm9pZCkgJSBuOwogfQogCiBzdGF0aWMgdm9pZCAqaW5zZXJ0X2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIGNvbnN0IHN0cnVjdCBvYmplY3QgKmJhc2UsIHZvaWQgKmRlY29yYXRpb24pCmRpZmYgLS1naXQgYS9kZWx0YS1pc2xhbmRzLmMgYi9kZWx0YS1pc2xhbmRzLmMKaW5kZXggMjE4NmJkMC4uMDlkYmQzYyAxMDA2NDQKLS0tIGEvZGVsdGEtaXNsYW5kcy5jCisrKyBiL2RlbHRhLWlzbGFuZHMuYwpAQCAtMjIsNyArMjIsNyBAQAogCiBLSEFTSF9JTklUKHN0ciwgY29uc3QgY2hhciAqLCB2b2lkICosIDEsIGtoX3N0cl9oYXNoX2Z1bmMsIGtoX3N0cl9oYXNoX2VxdWFsKQogCi1zdGF0aWMga2hhc2hfc2hhMSAqaXNsYW5kX21hcmtzOworc3RhdGljIGtoX29pZF9tYXBfdCAqaXNsYW5kX21hcmtzOwogc3RhdGljIHVuc2lnbmVkIGlzbGFuZF9jb3VudGVyOwogc3RhdGljIHVuc2lnbmVkIGlzbGFuZF9jb3VudGVyX2NvcmU7CiAKQEAgLTEwNSw3ICsxMDUsNyBAQAogCSAqIElmIHdlIGRvbid0IGhhdmUgYSBiaXRtYXAgZm9yIHRoZSB0YXJnZXQsIHdlIGNhbiBkZWx0YSBpdAogCSAqIGFnYWluc3QgYW55dGhpbmcgLS0gaXQncyBub3QgYW4gaW1wb3J0YW50IG9iamVjdAogCSAqLwotCXRyZ19wb3MgPSBraF9nZXRfc2hhMShpc2xhbmRfbWFya3MsIHRyZ19vaWQtPmhhc2gpOworCXRyZ19wb3MgPSBraF9nZXRfb2lkX21hcChpc2xhbmRfbWFya3MsICp0cmdfb2lkKTsKIAlpZiAodHJnX3BvcyA+PSBraF9lbmQoaXNsYW5kX21hcmtzKSkKIAkJcmV0dXJuIDE7CiAKQEAgLTExMyw3ICsxMTMsNyBAQAogCSAqIGlmIHRoZSBzb3VyY2UgKG91ciBkZWx0YSBiYXNlKSBkb2Vzbid0IGhhdmUgYSBiaXRtYXAsCiAJICogd2UgZG9uJ3Qgd2FudCB0byBiYXNlIGFueSBkZWx0YXMgb24gaXQhCiAJICovCi0Jc3JjX3BvcyA9IGtoX2dldF9zaGExKGlzbGFuZF9tYXJrcywgc3JjX29pZC0+aGFzaCk7CisJc3JjX3BvcyA9IGtoX2dldF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgKnNyY19vaWQpOwogCWlmIChzcmNfcG9zID49IGtoX2VuZChpc2xhbmRfbWFya3MpKQogCQlyZXR1cm4gMDsKIApAQCAtMTI5LDExICsxMjksMTEgQEAKIAlpZiAoIWlzbGFuZF9tYXJrcykKIAkJcmV0dXJuIDA7CiAKLQlhX3BvcyA9IGtoX2dldF9zaGExKGlzbGFuZF9tYXJrcywgYS0+aGFzaCk7CisJYV9wb3MgPSBraF9nZXRfb2lkX21hcChpc2xhbmRfbWFya3MsICphKTsKIAlpZiAoYV9wb3MgPCBraF9lbmQoaXNsYW5kX21hcmtzKSkKIAkJYV9iaXRtYXAgPSBraF92YWx1ZShpc2xhbmRfbWFya3MsIGFfcG9zKTsKIAotCWJfcG9zID0ga2hfZ2V0X3NoYTEoaXNsYW5kX21hcmtzLCBiLT5oYXNoKTsKKwliX3BvcyA9IGtoX2dldF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgKmIpOwogCWlmIChiX3BvcyA8IGtoX2VuZChpc2xhbmRfbWFya3MpKQogCQliX2JpdG1hcCA9IGtoX3ZhbHVlKGlzbGFuZF9tYXJrcywgYl9wb3MpOwogCkBAIC0xNTQsNyArMTU0LDcgQEAKIAlraGl0ZXJfdCBwb3M7CiAJaW50IGhhc2hfcmV0OwogCi0JcG9zID0ga2hfcHV0X3NoYTEoaXNsYW5kX21hcmtzLCBvYmotPm9pZC5oYXNoLCAmaGFzaF9yZXQpOworCXBvcyA9IGtoX3B1dF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgb2JqLT5vaWQsICZoYXNoX3JldCk7CiAJaWYgKGhhc2hfcmV0KQogCQlraF92YWx1ZShpc2xhbmRfbWFya3MsIHBvcykgPSBpc2xhbmRfYml0bWFwX25ldyhOVUxMKTsKIApAQCAtMTY3LDcgKzE2Nyw3IEBACiAJa2hpdGVyX3QgcG9zOwogCWludCBoYXNoX3JldDsKIAotCXBvcyA9IGtoX3B1dF9zaGExKGlzbGFuZF9tYXJrcywgb2JqLT5vaWQuaGFzaCwgJmhhc2hfcmV0KTsKKwlwb3MgPSBraF9wdXRfb2lkX21hcChpc2xhbmRfbWFya3MsIG9iai0+b2lkLCAmaGFzaF9yZXQpOwogCWlmIChoYXNoX3JldCkgewogCQkvKgogCQkgKiBXZSBkb24ndCBoYXZlIG9uZSB5ZXQ7IG1ha2UgYSBjb3B5LW9uLXdyaXRlIG9mIHRoZQpAQCAtMjc5LDcgKzI3OSw3IEBACiAJCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OwogCQlraGl0ZXJfdCBwb3M7CiAKLQkJcG9zID0ga2hfZ2V0X3NoYTEoaXNsYW5kX21hcmtzLCBlbnQtPmlkeC5vaWQuaGFzaCk7CisJCXBvcyA9IGtoX2dldF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgZW50LT5pZHgub2lkKTsKIAkJaWYgKHBvcyA+PSBraF9lbmQoaXNsYW5kX21hcmtzKSkKIAkJCWNvbnRpbnVlOwogCkBAIC0yOTYsNyArMjk2LDcgQEAKIAkJCWlmIChTX0lTR0lUTElOSyhlbnRyeS5tb2RlKSkKIAkJCQljb250aW51ZTsKIAotCQkJb2JqID0gbG9va3VwX29iamVjdChyLCBlbnRyeS5vaWQuaGFzaCk7CisJCQlvYmogPSBsb29rdXBfb2JqZWN0KHIsICZlbnRyeS5vaWQpOwogCQkJaWYgKCFvYmopCiAJCQkJY29udGludWU7CiAKQEAgLTQ1NCwyMSArNDU0LDIyIEBACiAJZnJlZShsaXN0KTsKIH0KIAotdm9pZCBsb2FkX2RlbHRhX2lzbGFuZHMoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit2b2lkIGxvYWRfZGVsdGFfaXNsYW5kcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgaW50IHByb2dyZXNzKQogewotCWlzbGFuZF9tYXJrcyA9IGtoX2luaXRfc2hhMSgpOworCWlzbGFuZF9tYXJrcyA9IGtoX2luaXRfb2lkX21hcCgpOwogCXJlbW90ZV9pc2xhbmRzID0ga2hfaW5pdF9zdHIoKTsKIAogCWdpdF9jb25maWcoaXNsYW5kX2NvbmZpZ19jYWxsYmFjaywgTlVMTCk7CiAJZm9yX2VhY2hfcmVmKGZpbmRfaXNsYW5kX2Zvcl9yZWYsIE5VTEwpOwogCWRlZHVwbGljYXRlX2lzbGFuZHMocik7CiAKLQlmcHJpbnRmKHN0ZGVyciwgXygiTWFya2VkICVkIGlzbGFuZHMsIGRvbmUuXG4iKSwgaXNsYW5kX2NvdW50ZXIpOworCWlmIChwcm9ncmVzcykKKwkJZnByaW50ZihzdGRlcnIsIF8oIk1hcmtlZCAlZCBpc2xhbmRzLCBkb25lLlxuIiksIGlzbGFuZF9jb3VudGVyKTsKIH0KIAogdm9pZCBwcm9wYWdhdGVfaXNsYW5kX21hcmtzKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKLQlraGl0ZXJfdCBwb3MgPSBraF9nZXRfc2hhMShpc2xhbmRfbWFya3MsIGNvbW1pdC0+b2JqZWN0Lm9pZC5oYXNoKTsKKwlraGl0ZXJfdCBwb3MgPSBraF9nZXRfb2lkX21hcChpc2xhbmRfbWFya3MsIGNvbW1pdC0+b2JqZWN0Lm9pZCk7CiAKIAlpZiAocG9zIDwga2hfZW5kKGlzbGFuZF9tYXJrcykpIHsKIAkJc3RydWN0IGNvbW1pdF9saXN0ICpwOwpAQCAtNDkwLDcgKzQ5MSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgdG9fcGFjay0+bnJfb2JqZWN0czsgKytpKSB7CiAJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gJnRvX3BhY2stPm9iamVjdHNbaV07Ci0JCWtoaXRlcl90IHBvcyA9IGtoX2dldF9zaGExKGlzbGFuZF9tYXJrcywgZW50cnktPmlkeC5vaWQuaGFzaCk7CisJCWtoaXRlcl90IHBvcyA9IGtoX2dldF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgZW50cnktPmlkeC5vaWQpOwogCiAJCW9lX3NldF9sYXllcih0b19wYWNrLCBlbnRyeSwgMSk7CiAKZGlmZiAtLWdpdCBhL2RlbHRhLWlzbGFuZHMuaCBiL2RlbHRhLWlzbGFuZHMuaAppbmRleCAzYWM4MDQ1Li5lYjBmOTUyIDEwMDY0NAotLS0gYS9kZWx0YS1pc2xhbmRzLmgKKysrIGIvZGVsdGEtaXNsYW5kcy5oCkBAIC0xMSw3ICsxMSw3IEBACiB2b2lkIHJlc29sdmVfdHJlZV9pc2xhbmRzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAogCQkJICBpbnQgcHJvZ3Jlc3MsCiAJCQkgIHN0cnVjdCBwYWNraW5nX2RhdGEgKnRvX3BhY2spOwotdm9pZCBsb2FkX2RlbHRhX2lzbGFuZHMoc3RydWN0IHJlcG9zaXRvcnkgKnIpOwordm9pZCBsb2FkX2RlbHRhX2lzbGFuZHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCBwcm9ncmVzcyk7CiB2b2lkIHByb3BhZ2F0ZV9pc2xhbmRfbWFya3Moc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKIGludCBjb21wdXRlX3BhY2tfbGF5ZXJzKHN0cnVjdCBwYWNraW5nX2RhdGEgKnRvX3BhY2spOwogCmRpZmYgLS1naXQgYS9kaWZmLmMgYi9kaWZmLmMKaW5kZXggYTY1NGQ0Ni4uZWZlNDJiMyAxMDA2NDQKLS0tIGEvZGlmZi5jCisrKyBiL2RpZmYuYwpAQCAtMTY3Myw3ICsxNjczLDEwIEBACiAJaWYgKGVjYmRhdGEtPm9wdC0+ZmxhZ3MuZHVhbF9jb2xvcl9kaWZmZWRfZGlmZnMpCiAJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgcmV2ZXJzZSk7CiAJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCBmcmFnKTsKLQlzdHJidWZfYWRkKCZtc2didWYsIGxpbmUsIGVwIC0gbGluZSk7CisJaWYgKGVjYmRhdGEtPm9wdC0+ZmxhZ3Muc3VwcHJlc3NfaHVua19oZWFkZXJfbGluZV9jb3VudCkKKwkJc3RyYnVmX2FkZCgmbXNnYnVmLCBhdGF0LCBzaXplb2YoYXRhdCkpOworCWVsc2UKKwkJc3RyYnVmX2FkZCgmbXNnYnVmLCBsaW5lLCBlcCAtIGxpbmUpOwogCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgcmVzZXQpOwogCiAJLyoKQEAgLTQyMDYsNiArNDIwOSw4IEBACiAJYXJndl9hcnJheV9wdXNoZigmZW52LCAiR0lUX0RJRkZfUEFUSF9DT1VOVEVSPSVkIiwgKytvLT5kaWZmX3BhdGhfY291bnRlcik7CiAJYXJndl9hcnJheV9wdXNoZigmZW52LCAiR0lUX0RJRkZfUEFUSF9UT1RBTD0lZCIsIHEtPm5yKTsKIAorCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKG9uZSk7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEodHdvKTsKIAlpZiAocnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52KGFyZ3YuYXJndiwgUlVOX1VTSU5HX1NIRUxMLCBOVUxMLCBlbnYuYXJndikpCiAJCWRpZShfKCJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIiksIG5hbWUpOwogCkBAIC01OTkwLDYgKzU5OTUsMjIgQEAKIAlyZXR1cm4gZHN0IC0gbGluZTsKIH0KIAordm9pZCBmbHVzaF9vbmVfaHVuayhzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQsIGdpdF9TSEFfQ1RYICpjdHgpCit7CisJdW5zaWduZWQgY2hhciBoYXNoW0dJVF9NQVhfUkFXU1pdOworCXVuc2lnbmVkIHNob3J0IGNhcnJ5ID0gMDsKKwlpbnQgaTsKKworCWdpdF9TSEExX0ZpbmFsKGhhc2gsIGN0eCk7CisJZ2l0X1NIQTFfSW5pdChjdHgpOworCS8qIDIwLWJ5dGUgc3VtLCB3aXRoIGNhcnJ5ICovCisJZm9yIChpID0gMDsgaSA8IEdJVF9TSEExX1JBV1NaOyArK2kpIHsKKwkJY2FycnkgKz0gcmVzdWx0LT5oYXNoW2ldICsgaGFzaFtpXTsKKwkJcmVzdWx0LT5oYXNoW2ldID0gY2Fycnk7CisJCWNhcnJ5ID4+PSA4OworCX0KK30KKwogc3RhdGljIHZvaWQgcGF0Y2hfaWRfY29uc3VtZSh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAlzdHJ1Y3QgcGF0Y2hfaWRfdCAqZGF0YSA9IHByaXY7CkBAIC02MDE0LDggKzYwMzUsOCBAQAogCWdpdF9TSEExX1VwZGF0ZShjdHgsIGJ1ZiwgbGVuKTsKIH0KIAotLyogcmV0dXJucyAwIHVwb24gc3VjY2VzcywgYW5kIHdyaXRlcyByZXN1bHQgaW50byBzaGExICovCi1zdGF0aWMgaW50IGRpZmZfZ2V0X3BhdGNoX2lkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGRpZmZfaGVhZGVyX29ubHkpCisvKiByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLCBhbmQgd3JpdGVzIHJlc3VsdCBpbnRvIG9pZCAqLworc3RhdGljIGludCBkaWZmX2dldF9wYXRjaF9pZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBkaWZmX2hlYWRlcl9vbmx5LCBpbnQgc3RhYmxlKQogewogCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOwogCWludCBpOwpAQCAtNjAyNSw2ICs2MDQ2LDcgQEAKIAlnaXRfU0hBMV9Jbml0KCZjdHgpOwogCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYXRjaF9pZF90KSk7CiAJZGF0YS5jdHggPSAmY3R4OworCW9pZGNscihvaWQpOwogCiAJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKIAkJeHBwYXJhbV90IHhwcDsKQEAgLTYxMDAsMTcgKzYxMjIsMjIgQEAKIAkJCQkgIHBhdGNoX2lkX2NvbnN1bWUsICZkYXRhLCAmeHBwLCAmeGVjZmcpKQogCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gZ2VuZXJhdGUgcGF0Y2gtaWQgZGlmZiBmb3IgJXMiLAogCQkJCSAgICAgcC0+b25lLT5wYXRoKTsKKworCQlpZiAoc3RhYmxlKQorCQkJZmx1c2hfb25lX2h1bmsob2lkLCAmY3R4KTsKIAl9CiAKLQlnaXRfU0hBMV9GaW5hbChvaWQtPmhhc2gsICZjdHgpOworCWlmICghc3RhYmxlKQorCQlnaXRfU0hBMV9GaW5hbChvaWQtPmhhc2gsICZjdHgpOworCiAJcmV0dXJuIDA7CiB9CiAKLWludCBkaWZmX2ZsdXNoX3BhdGNoX2lkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGRpZmZfaGVhZGVyX29ubHkpCitpbnQgZGlmZl9mbHVzaF9wYXRjaF9pZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBkaWZmX2hlYWRlcl9vbmx5LCBpbnQgc3RhYmxlKQogewogCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOwogCWludCBpOwotCWludCByZXN1bHQgPSBkaWZmX2dldF9wYXRjaF9pZChvcHRpb25zLCBvaWQsIGRpZmZfaGVhZGVyX29ubHkpOworCWludCByZXN1bHQgPSBkaWZmX2dldF9wYXRjaF9pZChvcHRpb25zLCBvaWQsIGRpZmZfaGVhZGVyX29ubHksIHN0YWJsZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykKIAkJZGlmZl9mcmVlX2ZpbGVwYWlyKHEtPnF1ZXVlW2ldKTsKZGlmZiAtLWdpdCBhL2RpZmYuaCBiL2RpZmYuaAppbmRleCBkNWU0NGJhLi5jMmMzMDU2IDEwMDY0NAotLS0gYS9kaWZmLmgKKysrIGIvZGlmZi5oCkBAIC05OCw2ICs5OCw3IEBACiAJdW5zaWduZWQgc3RhdF93aXRoX3N1bW1hcnk7CiAJdW5zaWduZWQgc3VwcHJlc3NfZGlmZl9oZWFkZXJzOwogCXVuc2lnbmVkIGR1YWxfY29sb3JfZGlmZmVkX2RpZmZzOworCXVuc2lnbmVkIHN1cHByZXNzX2h1bmtfaGVhZGVyX2xpbmVfY291bnQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlmZl9mbGFnc19vcihzdHJ1Y3QgZGlmZl9mbGFncyAqYSwKQEAgLTQzNiw3ICs0MzcsOCBAQAogaW50IHJ1bl9kaWZmX2luZGV4KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGNhY2hlZCk7CiAKIGludCBkb19kaWZmX2NhY2hlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKLWludCBkaWZmX2ZsdXNoX3BhdGNoX2lkKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgc3RydWN0IG9iamVjdF9pZCAqLCBpbnQpOworaW50IGRpZmZfZmx1c2hfcGF0Y2hfaWQoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGludCwgaW50KTsKK3ZvaWQgZmx1c2hfb25lX2h1bmsoc3RydWN0IG9iamVjdF9pZCAqLCBnaXRfU0hBX0NUWCAqKTsKIAogaW50IGRpZmZfcmVzdWx0X2NvZGUoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBpbnQpOwogCmRpZmYgLS1naXQgYS9kaWZmY29yZS1yZW5hbWUuYyBiL2RpZmZjb3JlLXJlbmFtZS5jCmluZGV4IDA3YmQzNGIuLjk2MjQ4NjQgMTAwNjQ0Ci0tLSBhL2RpZmZjb3JlLXJlbmFtZS5jCisrKyBiL2RpZmZjb3JlLXJlbmFtZS5jCkBAIC0yMyw3ICsyMyw3IEBACiAJZmlyc3QgPSAwOwogCWxhc3QgPSByZW5hbWVfZHN0X25yOwogCXdoaWxlIChsYXN0ID4gZmlyc3QpIHsKLQkJaW50IG5leHQgPSAobGFzdCArIGZpcnN0KSA+PiAxOworCQlpbnQgbmV4dCA9IGZpcnN0ICsgKChsYXN0IC0gZmlyc3QpID4+IDEpOwogCQlzdHJ1Y3QgZGlmZl9yZW5hbWVfZHN0ICpkc3QgPSAmKHJlbmFtZV9kc3RbbmV4dF0pOwogCQlpbnQgY21wID0gc3RyY21wKHR3by0+cGF0aCwgZHN0LT50d28tPnBhdGgpOwogCQlpZiAoIWNtcCkKQEAgLTgzLDcgKzgzLDcgQEAKIAlmaXJzdCA9IDA7CiAJbGFzdCA9IHJlbmFtZV9zcmNfbnI7CiAJd2hpbGUgKGxhc3QgPiBmaXJzdCkgewotCQlpbnQgbmV4dCA9IChsYXN0ICsgZmlyc3QpID4+IDE7CisJCWludCBuZXh0ID0gZmlyc3QgKyAoKGxhc3QgLSBmaXJzdCkgPj4gMSk7CiAJCXN0cnVjdCBkaWZmX3JlbmFtZV9zcmMgKnNyYyA9ICYocmVuYW1lX3NyY1tuZXh0XSk7CiAJCWludCBjbXAgPSBzdHJjbXAob25lLT5wYXRoLCBzcmMtPnAtPm9uZS0+cGF0aCk7CiAJCWlmICghY21wKQpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCWhhc2hfb2JqZWN0X2ZpbGUoZmlsZXNwZWMtPmRhdGEsIGZpbGVzcGVjLT5zaXplLCAiYmxvYiIsCiAJCQkJICZmaWxlc3BlYy0+b2lkKTsKIAl9Ci0JcmV0dXJuIHNoYTFoYXNoKGZpbGVzcGVjLT5vaWQuaGFzaCk7CisJcmV0dXJuIG9pZGhhc2goJmZpbGVzcGVjLT5vaWQpOwogfQogCiBzdGF0aWMgaW50IGZpbmRfaWRlbnRpY2FsX2ZpbGVzKHN0cnVjdCBoYXNobWFwICpzcmNzLApkaWZmIC0tZ2l0IGEvZGlyLWl0ZXJhdG9yLmMgYi9kaXItaXRlcmF0b3IuYwppbmRleCBmMmRjZDgyLi5iMTdlOWY5IDEwMDY0NAotLS0gYS9kaXItaXRlcmF0b3IuYworKysgYi9kaXItaXRlcmF0b3IuYwpAQCAtNCw4ICs0LDYgQEAKICNpbmNsdWRlICJkaXItaXRlcmF0b3IuaCIKIAogc3RydWN0IGRpcl9pdGVyYXRvcl9sZXZlbCB7Ci0JaW50IGluaXRpYWxpemVkOwotCiAJRElSICpkaXI7CiAKIAkvKgpAQCAtMTMsMTYgKzExLDYgQEAKIAkgKiAoaW5jbHVkaW5nIGEgdHJhaWxpbmcgJy8nKToKIAkgKi8KIAlzaXplX3QgcHJlZml4X2xlbjsKLQotCS8qCi0JICogVGhlIGxhc3QgYWN0aW9uIHRoYXQgaGFzIGJlZW4gdGFrZW4gd2l0aCB0aGUgY3VycmVudCBlbnRyeQotCSAqIChuZWVkZWQgZm9yIGRpcmVjdG9yaWVzLCB3aGljaCBoYXZlIHRvIGJlIGluY2x1ZGVkIGluIHRoZQotCSAqIGl0ZXJhdGlvbiBhbmQgYWxzbyBpdGVyYXRlZCBpbnRvKToKLQkgKi8KLQllbnVtIHsKLQkJRElSX1NUQVRFX0lURVIsCi0JCURJUl9TVEFURV9SRUNVUlNFCi0JfSBkaXJfc3RhdGU7CiB9OwogCiAvKgpAQCAtMzQsOSArMjIsMTEgQEAKIAlzdHJ1Y3QgZGlyX2l0ZXJhdG9yIGJhc2U7CiAKIAkvKgotCSAqIFRoZSBudW1iZXIgb2YgbGV2ZWxzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2suIFRoaXMgaXMgYWx3YXlzCi0JICogYXQgbGVhc3QgMSwgYmVjYXVzZSB3aGVuIGl0IGJlY29tZXMgemVybyB0aGUgaXRlcmF0aW9uIGlzCi0JICogZW5kZWQgYW5kIHRoaXMgc3RydWN0IGlzIGZyZWVkLgorCSAqIFRoZSBudW1iZXIgb2YgbGV2ZWxzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2suIEFmdGVyIHRoZSBmaXJzdAorCSAqIGNhbGwgdG8gZGlyX2l0ZXJhdG9yX2JlZ2luKCksIGlmIGl0IHN1Y2NlZWRzIHRvIG9wZW4gdGhlCisJICogZmlyc3QgbGV2ZWwncyBkaXIsIHRoaXMgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3QgMS4gVGhlbiwKKwkgKiB3aGVuIGl0IGNvbWVzIHRvIHplcm8gdGhlIGl0ZXJhdGlvbiBpcyBlbmRlZCBhbmQgdGhpcworCSAqIHN0cnVjdCBpcyBmcmVlZC4KIAkgKi8KIAlzaXplX3QgbGV2ZWxzX25yOwogCkBAIC00OCwxMTcgKzM4LDE0MiBAQAogCSAqIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGlzIGl0ZXJhdGlvbi4KIAkgKi8KIAlzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2xldmVsICpsZXZlbHM7CisKKwkvKiBDb21iaW5hdGlvbiBvZiBmbGFncyBmb3IgdGhpcyBkaXItaXRlcmF0b3IgKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCisvKgorICogUHVzaCBhIGxldmVsIGluIHRoZSBpdGVyIHN0YWNrIGFuZCBpbml0aWFsaXplIGl0IHdpdGggaW5mb3JtYXRpb24gZnJvbQorICogdGhlIGRpcmVjdG9yeSBwb2ludGVkIGJ5IGl0ZXItPmJhc2UtPnBhdGguIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzCisgKiBzdHJidWYgcG9pbnRzIHRvIGEgdmFsaWQgZGlyZWN0b3J5IHBhdGguIFJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC0xCisgKiBvdGhlcndpc2UsIHNldHRpbmcgZXJybm8gYWNjb3JkaW5nbHkgYW5kIGxlYXZpbmcgdGhlIHN0YWNrIHVuY2hhbmdlZC4KKyAqLworc3RhdGljIGludCBwdXNoX2xldmVsKHN0cnVjdCBkaXJfaXRlcmF0b3JfaW50ICppdGVyKQoreworCXN0cnVjdCBkaXJfaXRlcmF0b3JfbGV2ZWwgKmxldmVsOworCisJQUxMT0NfR1JPVyhpdGVyLT5sZXZlbHMsIGl0ZXItPmxldmVsc19uciArIDEsIGl0ZXItPmxldmVsc19hbGxvYyk7CisJbGV2ZWwgPSAmaXRlci0+bGV2ZWxzW2l0ZXItPmxldmVsc19ucisrXTsKKworCWlmICghaXNfZGlyX3NlcChpdGVyLT5iYXNlLnBhdGguYnVmW2l0ZXItPmJhc2UucGF0aC5sZW4gLSAxXSkpCisJCXN0cmJ1Zl9hZGRjaCgmaXRlci0+YmFzZS5wYXRoLCAnLycpOworCWxldmVsLT5wcmVmaXhfbGVuID0gaXRlci0+YmFzZS5wYXRoLmxlbjsKKworCWxldmVsLT5kaXIgPSBvcGVuZGlyKGl0ZXItPmJhc2UucGF0aC5idWYpOworCWlmICghbGV2ZWwtPmRpcikgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkgeworCQkJd2FybmluZ19lcnJubygiZXJyb3Igb3BlbmluZyBkaXJlY3RvcnkgJyVzJyIsCisJCQkJICAgICAgaXRlci0+YmFzZS5wYXRoLmJ1Zik7CisJCX0KKwkJaXRlci0+bGV2ZWxzX25yLS07CisJCWVycm5vID0gc2F2ZWRfZXJybm87CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBvcCB0aGUgdG9wIGxldmVsIG9uIHRoZSBpdGVyIHN0YWNrLCByZWxlYXNpbmcgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkCisgKiB3aXRoIGl0LiBSZXR1cm4gdGhlIG5ldyB2YWx1ZSBvZiBpdGVyLT5sZXZlbHNfbnIuCisgKi8KK3N0YXRpYyBpbnQgcG9wX2xldmVsKHN0cnVjdCBkaXJfaXRlcmF0b3JfaW50ICppdGVyKQoreworCXN0cnVjdCBkaXJfaXRlcmF0b3JfbGV2ZWwgKmxldmVsID0KKwkJJml0ZXItPmxldmVsc1tpdGVyLT5sZXZlbHNfbnIgLSAxXTsKKworCWlmIChsZXZlbC0+ZGlyICYmIGNsb3NlZGlyKGxldmVsLT5kaXIpKQorCQl3YXJuaW5nX2Vycm5vKCJlcnJvciBjbG9zaW5nIGRpcmVjdG9yeSAnJXMnIiwKKwkJCSAgICAgIGl0ZXItPmJhc2UucGF0aC5idWYpOworCWxldmVsLT5kaXIgPSBOVUxMOworCisJcmV0dXJuIC0taXRlci0+bGV2ZWxzX25yOworfQorCisvKgorICogUG9wdWxhdGUgaXRlci0+YmFzZSB3aXRoIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gb24gdGhlIG5leHQgaXRlcmF0aW9uCisgKiBlbnRyeSwgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGRpcmVudCBkZS4gUmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEKKyAqIG90aGVyd2lzZSwgc2V0dGluZyBlcnJubyBhY2NvcmRpbmdseS4KKyAqLworc3RhdGljIGludCBwcmVwYXJlX25leHRfZW50cnlfZGF0YShzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCAqaXRlciwKKwkJCQkgICBzdHJ1Y3QgZGlyZW50ICpkZSkKK3sKKwlpbnQgZXJyLCBzYXZlZF9lcnJubzsKKworCXN0cmJ1Zl9hZGRzdHIoJml0ZXItPmJhc2UucGF0aCwgZGUtPmRfbmFtZSk7CisJLyoKKwkgKiBXZSBoYXZlIHRvIHJlc2V0IHRoZXNlIGJlY2F1c2UgdGhlIHBhdGggc3RyYnVmIG1pZ2h0IGhhdmUKKwkgKiBiZWVuIHJlYWxsb2MoKWVkIGF0IHRoZSBwcmV2aW91cyBzdHJidWZfYWRkc3RyKCkuCisJICovCisJaXRlci0+YmFzZS5yZWxhdGl2ZV9wYXRoID0gaXRlci0+YmFzZS5wYXRoLmJ1ZiArCisJCQkJICAgaXRlci0+bGV2ZWxzWzBdLnByZWZpeF9sZW47CisJaXRlci0+YmFzZS5iYXNlbmFtZSA9IGl0ZXItPmJhc2UucGF0aC5idWYgKworCQkJICAgICAgaXRlci0+bGV2ZWxzW2l0ZXItPmxldmVsc19uciAtIDFdLnByZWZpeF9sZW47CisKKwlpZiAoaXRlci0+ZmxhZ3MgJiBESVJfSVRFUkFUT1JfRk9MTE9XX1NZTUxJTktTKQorCQllcnIgPSBzdGF0KGl0ZXItPmJhc2UucGF0aC5idWYsICZpdGVyLT5iYXNlLnN0KTsKKwllbHNlCisJCWVyciA9IGxzdGF0KGl0ZXItPmJhc2UucGF0aC5idWYsICZpdGVyLT5iYXNlLnN0KTsKKworCXNhdmVkX2Vycm5vID0gZXJybm87CisJaWYgKGVyciAmJiBlcnJubyAhPSBFTk9FTlQpCisJCXdhcm5pbmdfZXJybm8oImZhaWxlZCB0byBzdGF0ICclcyciLCBpdGVyLT5iYXNlLnBhdGguYnVmKTsKKworCWVycm5vID0gc2F2ZWRfZXJybm87CisJcmV0dXJuIGVycjsKK30KKwogaW50IGRpcl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCBkaXJfaXRlcmF0b3IgKmRpcl9pdGVyYXRvcikKIHsKIAlzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCAqaXRlciA9CiAJCShzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCAqKWRpcl9pdGVyYXRvcjsKIAorCWlmIChTX0lTRElSKGl0ZXItPmJhc2Uuc3Quc3RfbW9kZSkgJiYgcHVzaF9sZXZlbChpdGVyKSkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UICYmIGl0ZXItPmZsYWdzICYgRElSX0lURVJBVE9SX1BFREFOVElDKQorCQkJZ290byBlcnJvcl9vdXQ7CisJCWlmIChpdGVyLT5sZXZlbHNfbnIgPT0gMCkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCS8qIExvb3AgdW50aWwgd2UgZmluZCBhbiBlbnRyeSB0aGF0IHdlIGNhbiBnaXZlIGJhY2sgdG8gdGhlIGNhbGxlci4gKi8KIAl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgZGlyZW50ICpkZTsKIAkJc3RydWN0IGRpcl9pdGVyYXRvcl9sZXZlbCAqbGV2ZWwgPQogCQkJJml0ZXItPmxldmVsc1tpdGVyLT5sZXZlbHNfbnIgLSAxXTsKLQkJc3RydWN0IGRpcmVudCAqZGU7CiAKLQkJaWYgKCFsZXZlbC0+aW5pdGlhbGl6ZWQpIHsKLQkJCS8qCi0JCQkgKiBOb3RlOiBkaXJfaXRlcmF0b3JfYmVnaW4oKSBlbnN1cmVzIHRoYXQKLQkJCSAqIHBhdGggaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcuCi0JCQkgKi8KLQkJCWlmICghaXNfZGlyX3NlcChpdGVyLT5iYXNlLnBhdGguYnVmW2l0ZXItPmJhc2UucGF0aC5sZW4gLSAxXSkpCi0JCQkJc3RyYnVmX2FkZGNoKCZpdGVyLT5iYXNlLnBhdGgsICcvJyk7Ci0JCQlsZXZlbC0+cHJlZml4X2xlbiA9IGl0ZXItPmJhc2UucGF0aC5sZW47CisJCXN0cmJ1Zl9zZXRsZW4oJml0ZXItPmJhc2UucGF0aCwgbGV2ZWwtPnByZWZpeF9sZW4pOworCQllcnJubyA9IDA7CisJCWRlID0gcmVhZGRpcihsZXZlbC0+ZGlyKTsKIAotCQkJbGV2ZWwtPmRpciA9IG9wZW5kaXIoaXRlci0+YmFzZS5wYXRoLmJ1Zik7Ci0JCQlpZiAoIWxldmVsLT5kaXIgJiYgZXJybm8gIT0gRU5PRU5UKSB7Ci0JCQkJd2FybmluZygiZXJyb3Igb3BlbmluZyBkaXJlY3RvcnkgJXM6ICVzIiwKLQkJCQkJaXRlci0+YmFzZS5wYXRoLmJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCQkvKiBQb3BwaW5nIHRoZSBsZXZlbCBpcyBoYW5kbGVkIGJlbG93ICovCi0JCQl9Ci0KLQkJCWxldmVsLT5pbml0aWFsaXplZCA9IDE7Ci0JCX0gZWxzZSBpZiAoU19JU0RJUihpdGVyLT5iYXNlLnN0LnN0X21vZGUpKSB7Ci0JCQlpZiAobGV2ZWwtPmRpcl9zdGF0ZSA9PSBESVJfU1RBVEVfSVRFUikgewotCQkJCS8qCi0JCQkJICogVGhlIGRpcmVjdG9yeSB3YXMganVzdCBpdGVyYXRlZAotCQkJCSAqIG92ZXI7IG5vdyBwcmVwYXJlIHRvIGl0ZXJhdGUgaW50bwotCQkJCSAqIGl0LgotCQkJCSAqLwotCQkJCWxldmVsLT5kaXJfc3RhdGUgPSBESVJfU1RBVEVfUkVDVVJTRTsKLQkJCQlBTExPQ19HUk9XKGl0ZXItPmxldmVscywgaXRlci0+bGV2ZWxzX25yICsgMSwKLQkJCQkJICAgaXRlci0+bGV2ZWxzX2FsbG9jKTsKLQkJCQlsZXZlbCA9ICZpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yKytdOwotCQkJCWxldmVsLT5pbml0aWFsaXplZCA9IDA7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogVGhlIGRpcmVjdG9yeSBoYXMgYWxyZWFkeSBiZWVuCi0JCQkJICogaXRlcmF0ZWQgb3ZlciBhbmQgaXRlcmF0ZWQgaW50bzsKLQkJCQkgKiB3ZSdyZSBkb25lIHdpdGggaXQuCi0JCQkJICovCi0JCQl9Ci0JCX0KLQotCQlpZiAoIWxldmVsLT5kaXIpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGxldmVsIGlzIGV4aGF1c3RlZCAob3Igd2Fzbid0IG9wZW5lZAotCQkJICogc3VjY2Vzc2Z1bGx5KTsgcG9wIHVwIGEgbGV2ZWwuCi0JCQkgKi8KLQkJCWlmICgtLWl0ZXItPmxldmVsc19uciA9PSAwKQorCQlpZiAoIWRlKSB7CisJCQlpZiAoZXJybm8pIHsKKwkJCQl3YXJuaW5nX2Vycm5vKCJlcnJvciByZWFkaW5nIGRpcmVjdG9yeSAnJXMnIiwKKwkJCQkJICAgICAgaXRlci0+YmFzZS5wYXRoLmJ1Zik7CisJCQkJaWYgKGl0ZXItPmZsYWdzICYgRElSX0lURVJBVE9SX1BFREFOVElDKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCX0gZWxzZSBpZiAocG9wX2xldmVsKGl0ZXIpID09IDApIHsKIAkJCQlyZXR1cm4gZGlyX2l0ZXJhdG9yX2Fib3J0KGRpcl9pdGVyYXRvcik7Ci0KKwkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyoKLQkJICogTG9vcCB1bnRpbCB3ZSBmaW5kIGFuIGVudHJ5IHRoYXQgd2UgY2FuIGdpdmUgYmFjawotCQkgKiB0byB0aGUgY2FsbGVyOgotCQkgKi8KLQkJd2hpbGUgKDEpIHsKLQkJCXN0cmJ1Zl9zZXRsZW4oJml0ZXItPmJhc2UucGF0aCwgbGV2ZWwtPnByZWZpeF9sZW4pOwotCQkJZXJybm8gPSAwOwotCQkJZGUgPSByZWFkZGlyKGxldmVsLT5kaXIpOworCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOwogCi0JCQlpZiAoIWRlKSB7Ci0JCQkJLyogVGhpcyBsZXZlbCBpcyBleGhhdXN0ZWQ7IHBvcCB1cCBhIGxldmVsLiAqLwotCQkJCWlmIChlcnJubykgewotCQkJCQl3YXJuaW5nKCJlcnJvciByZWFkaW5nIGRpcmVjdG9yeSAlczogJXMiLAotCQkJCQkJaXRlci0+YmFzZS5wYXRoLmJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCQl9IGVsc2UgaWYgKGNsb3NlZGlyKGxldmVsLT5kaXIpKQotCQkJCQl3YXJuaW5nKCJlcnJvciBjbG9zaW5nIGRpcmVjdG9yeSAlczogJXMiLAotCQkJCQkJaXRlci0+YmFzZS5wYXRoLmJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKLQotCQkJCWxldmVsLT5kaXIgPSBOVUxMOwotCQkJCWlmICgtLWl0ZXItPmxldmVsc19uciA9PSAwKQotCQkJCQlyZXR1cm4gZGlyX2l0ZXJhdG9yX2Fib3J0KGRpcl9pdGVyYXRvcik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWlmIChpc19kb3Rfb3JfZG90ZG90KGRlLT5kX25hbWUpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzdHJidWZfYWRkc3RyKCZpdGVyLT5iYXNlLnBhdGgsIGRlLT5kX25hbWUpOwotCQkJaWYgKGxzdGF0KGl0ZXItPmJhc2UucGF0aC5idWYsICZpdGVyLT5iYXNlLnN0KSA8IDApIHsKLQkJCQlpZiAoZXJybm8gIT0gRU5PRU5UKQotCQkJCQl3YXJuaW5nKCJlcnJvciByZWFkaW5nIHBhdGggJyVzJzogJXMiLAotCQkJCQkJaXRlci0+YmFzZS5wYXRoLmJ1ZiwKLQkJCQkJCXN0cmVycm9yKGVycm5vKSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBXZSBoYXZlIHRvIHNldCB0aGVzZSBlYWNoIHRpbWUgYmVjYXVzZQotCQkJICogdGhlIHBhdGggc3RyYnVmIG1pZ2h0IGhhdmUgYmVlbiByZWFsbG9jKCllZC4KLQkJCSAqLwotCQkJaXRlci0+YmFzZS5yZWxhdGl2ZV9wYXRoID0KLQkJCQlpdGVyLT5iYXNlLnBhdGguYnVmICsgaXRlci0+bGV2ZWxzWzBdLnByZWZpeF9sZW47Ci0JCQlpdGVyLT5iYXNlLmJhc2VuYW1lID0KLQkJCQlpdGVyLT5iYXNlLnBhdGguYnVmICsgbGV2ZWwtPnByZWZpeF9sZW47Ci0JCQlsZXZlbC0+ZGlyX3N0YXRlID0gRElSX1NUQVRFX0lURVI7Ci0KLQkJCXJldHVybiBJVEVSX09LOworCQlpZiAocHJlcGFyZV9uZXh0X2VudHJ5X2RhdGEoaXRlciwgZGUpKSB7CisJCQlpZiAoZXJybm8gIT0gRU5PRU5UICYmIGl0ZXItPmZsYWdzICYgRElSX0lURVJBVE9SX1BFREFOVElDKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJY29udGludWU7CiAJCX0KKworCQlyZXR1cm4gSVRFUl9PSzsKIAl9CisKK2Vycm9yX291dDoKKwlkaXJfaXRlcmF0b3JfYWJvcnQoZGlyX2l0ZXJhdG9yKTsKKwlyZXR1cm4gSVRFUl9FUlJPUjsKIH0KIAogaW50IGRpcl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXJfaXRlcmF0b3IpCkBAIC0xNzAsOSArMTg1LDExIEBACiAJCQkmaXRlci0+bGV2ZWxzW2l0ZXItPmxldmVsc19uciAtIDFdOwogCiAJCWlmIChsZXZlbC0+ZGlyICYmIGNsb3NlZGlyKGxldmVsLT5kaXIpKSB7CisJCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKIAkJCXN0cmJ1Zl9zZXRsZW4oJml0ZXItPmJhc2UucGF0aCwgbGV2ZWwtPnByZWZpeF9sZW4pOwotCQkJd2FybmluZygiZXJyb3IgY2xvc2luZyBkaXJlY3RvcnkgJXM6ICVzIiwKLQkJCQlpdGVyLT5iYXNlLnBhdGguYnVmLCBzdHJlcnJvcihlcnJubykpOworCQkJZXJybm8gPSBzYXZlZF9lcnJubzsKKwkJCXdhcm5pbmdfZXJybm8oImVycm9yIGNsb3NpbmcgZGlyZWN0b3J5ICclcyciLAorCQkJCSAgICAgIGl0ZXItPmJhc2UucGF0aC5idWYpOwogCQl9CiAJfQogCkBAIC0xODIsMjEgKzE5OSwzNyBAQAogCXJldHVybiBJVEVSX0RPTkU7CiB9CiAKLXN0cnVjdCBkaXJfaXRlcmF0b3IgKmRpcl9pdGVyYXRvcl9iZWdpbihjb25zdCBjaGFyICpwYXRoKQorc3RydWN0IGRpcl9pdGVyYXRvciAqZGlyX2l0ZXJhdG9yX2JlZ2luKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCAqaXRlciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppdGVyKSk7CiAJc3RydWN0IGRpcl9pdGVyYXRvciAqZGlyX2l0ZXJhdG9yID0gJml0ZXItPmJhc2U7Ci0KLQlpZiAoIXBhdGggfHwgISpwYXRoKQotCQlCVUcoImVtcHR5IHBhdGggcGFzc2VkIHRvIGRpcl9pdGVyYXRvcl9iZWdpbigpIik7CisJaW50IHNhdmVkX2Vycm5vOwogCiAJc3RyYnVmX2luaXQoJml0ZXItPmJhc2UucGF0aCwgUEFUSF9NQVgpOwogCXN0cmJ1Zl9hZGRzdHIoJml0ZXItPmJhc2UucGF0aCwgcGF0aCk7CiAKIAlBTExPQ19HUk9XKGl0ZXItPmxldmVscywgMTAsIGl0ZXItPmxldmVsc19hbGxvYyk7CisJaXRlci0+bGV2ZWxzX25yID0gMDsKKwlpdGVyLT5mbGFncyA9IGZsYWdzOwogCi0JaXRlci0+bGV2ZWxzX25yID0gMTsKLQlpdGVyLT5sZXZlbHNbMF0uaW5pdGlhbGl6ZWQgPSAwOworCS8qCisJICogTm90ZTogc3RhdCBhbHJlYWR5IGNoZWNrcyBmb3IgTlVMTCBvciBlbXB0eSBzdHJpbmdzIGFuZAorCSAqIGluZXhpc3RlbnQgcGF0aHMuCisJICovCisJaWYgKHN0YXQoaXRlci0+YmFzZS5wYXRoLmJ1ZiwgJml0ZXItPmJhc2Uuc3QpIDwgMCkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwlpZiAoIVNfSVNESVIoaXRlci0+YmFzZS5zdC5zdF9tb2RlKSkgeworCQlzYXZlZF9lcnJubyA9IEVOT1RESVI7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KIAogCXJldHVybiBkaXJfaXRlcmF0b3I7CisKK2Vycm9yX291dDoKKwlkaXJfaXRlcmF0b3JfYWJvcnQoZGlyX2l0ZXJhdG9yKTsKKwllcnJubyA9IHNhdmVkX2Vycm5vOworCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZGlyLWl0ZXJhdG9yLmggYi9kaXItaXRlcmF0b3IuaAppbmRleCA5NzA3OTNkLi4wODIyOTE1IDEwMDY0NAotLS0gYS9kaXItaXRlcmF0b3IuaAorKysgYi9kaXItaXRlcmF0b3IuaApAQCAtOCwxOCArOCwyMyBAQAogICoKICAqIEl0ZXJhdGUgb3ZlciBhIGRpcmVjdG9yeSB0cmVlLCByZWN1cnNpdmVseSwgaW5jbHVkaW5nIHBhdGhzIG9mIGFsbAogICogdHlwZXMgYW5kIGhpZGRlbiBwYXRocy4gU2tpcCAiLiIgYW5kICIuLiIgZW50cmllcyBhbmQgZG9uJ3QgZm9sbG93Ci0gKiBzeW1saW5rcyBleGNlcHQgZm9yIHRoZSBvcmlnaW5hbCBwYXRoLgorICogc3ltbGlua3MgZXhjZXB0IGZvciB0aGUgb3JpZ2luYWwgcGF0aC4gTm90ZSB0aGF0IHRoZSBvcmlnaW5hbCBwYXRoCisgKiBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGl0ZXJhdGlvbi4KICAqCiAgKiBFdmVyeSB0aW1lIGRpcl9pdGVyYXRvcl9hZHZhbmNlKCkgaXMgY2FsbGVkLCB1cGRhdGUgdGhlIG1lbWJlcnMgb2YKICAqIHRoZSBkaXJfaXRlcmF0b3Igc3RydWN0dXJlIHRvIHJlZmxlY3QgdGhlIG5leHQgcGF0aCBpbiB0aGUKICAqIGl0ZXJhdGlvbi4gVGhlIG9yZGVyIHRoYXQgcGF0aHMgYXJlIGl0ZXJhdGVkIG92ZXIgd2l0aGluIGEKLSAqIGRpcmVjdG9yeSBpcyB1bmRlZmluZWQsIGJ1dCBkaXJlY3RvcnkgcGF0aHMgYXJlIGFsd2F5cyBpdGVyYXRlZAotICogb3ZlciBiZWZvcmUgdGhlIHN1YmRpcmVjdG9yeSBjb250ZW50cy4KKyAqIGRpcmVjdG9yeSBpcyB1bmRlZmluZWQsIGRpcmVjdG9yeSBwYXRocyBhcmUgYWx3YXlzIGdpdmVuIGJlZm9yZQorICogdGhlaXIgY29udGVudHMuCiAgKgogICogQSB0eXBpY2FsIGl0ZXJhdGlvbiBsb29rcyBsaWtlIHRoaXM6CiAgKgogICogICAgIGludCBvazsKLSAqICAgICBzdHJ1Y3QgaXRlcmF0b3IgKml0ZXIgPSBkaXJfaXRlcmF0b3JfYmVnaW4ocGF0aCk7CisgKiAgICAgdW5zaWduZWQgaW50IGZsYWdzID0gRElSX0lURVJBVE9SX1BFREFOVElDOworICogICAgIHN0cnVjdCBkaXJfaXRlcmF0b3IgKml0ZXIgPSBkaXJfaXRlcmF0b3JfYmVnaW4ocGF0aCwgZmxhZ3MpOworICoKKyAqICAgICBpZiAoIWl0ZXIpCisgKiAgICAgICAgICAgICBnb3RvIGVycm9yX2hhbmRsZXI7CiAgKgogICogICAgIHdoaWxlICgob2sgPSBkaXJfaXRlcmF0b3JfYWR2YW5jZShpdGVyKSkgPT0gSVRFUl9PSykgewogICogICAgICAgICAgICAgaWYgKHdhbnRfdG9fc3RvcF9pdGVyYXRpb24oKSkgewpAQCAtNDAsNiArNDUsMjkgQEAKICAqIGRpcl9pdGVyYXRvcl9hZHZhbmNlKCkgYWdhaW4uCiAgKi8KIAorLyoKKyAqIEZsYWdzIGZvciBkaXJfaXRlcmF0b3JfYmVnaW46CisgKgorICogLSBESVJfSVRFUkFUT1JfUEVEQU5USUM6IG92ZXJyaWRlIGRpci1pdGVyYXRvcidzIGRlZmF1bHQgYmVoYXZpb3IKKyAqICAgaW4gY2FzZSBvZiBhbiBlcnJvciBhdCBkaXJfaXRlcmF0b3JfYWR2YW5jZSgpLCB3aGljaCBpcyB0byBrZWVwCisgKiAgIGxvb2tpbmcgZm9yIGEgbmV4dCB2YWxpZCBlbnRyeS4gV2l0aCB0aGlzIGZsYWcsIHJlc291cmNlcyBhcmUgZnJlZWQKKyAqICAgYW5kIElURVJfRVJST1IgaXMgcmV0dXJuZWQgaW1tZWRpYXRlbHkuIEluIGJvdGggY2FzZXMsIGEgbWVhbmluZ2Z1bAorICogICB3YXJuaW5nIGlzIGVtaXR0ZWQuIE5vdGU6IEVOT0VOVCBlcnJvcnMgYXJlIGFsd2F5cyBpZ25vcmVkIHNvIHRoYXQKKyAqICAgdGhlIEFQSSB1c2VycyBtYXkgcmVtb3ZlIGZpbGVzIGR1cmluZyBpdGVyYXRpb24uCisgKgorICogLSBESVJfSVRFUkFUT1JfRk9MTE9XX1NZTUxJTktTOiBtYWtlIGRpci1pdGVyYXRvciBmb2xsb3cgc3ltbGlua3MuCisgKiAgIGkuZS4sIGxpbmtlZCBkaXJlY3RvcmllcycgY29udGVudHMgd2lsbCBiZSBpdGVyYXRlZCBvdmVyIGFuZAorICogICBpdGVyLT5iYXNlLnN0IHdpbGwgY29udGFpbiBpbmZvcm1hdGlvbiBvbiB0aGUgcmVmZXJyZWQgZmlsZXMsCisgKiAgIG5vdCB0aGUgc3ltbGlua3MgdGhlbXNlbHZlcywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIEJyb2tlbgorICogICBzeW1saW5rcyBhcmUgaWdub3JlZC4KKyAqCisgKiBXYXJuaW5nOiBjaXJjdWxhciBzeW1saW5rcyBhcmUgYWxzbyBmb2xsb3dlZCB3aGVuCisgKiBESVJfSVRFUkFUT1JfRk9MTE9XX1NZTUxJTktTIGlzIHNldC4gVGhlIGl0ZXJhdGlvbiBtYXkgZW5kIHVwIHdpdGgKKyAqIGFuIEVMT09QIGlmIHRoZXkgaGFwcGVuIGFuZCBESVJfSVRFUkFUT1JfUEVEQU5USUMgaXMgc2V0LgorICovCisjZGVmaW5lIERJUl9JVEVSQVRPUl9QRURBTlRJQyAoMSA8PCAwKQorI2RlZmluZSBESVJfSVRFUkFUT1JfRk9MTE9XX1NZTUxJTktTICgxIDw8IDEpCisKIHN0cnVjdCBkaXJfaXRlcmF0b3IgewogCS8qIFRoZSBjdXJyZW50IHBhdGg6ICovCiAJc3RydWN0IHN0cmJ1ZiBwYXRoOwpAQCAtNTQsMjggKzgyLDM4IEBACiAJLyogVGhlIGN1cnJlbnQgYmFzZW5hbWU6ICovCiAJY29uc3QgY2hhciAqYmFzZW5hbWU7CiAKLQkvKiBUaGUgcmVzdWx0IG9mIGNhbGxpbmcgbHN0YXQoKSBvbiBwYXRoOiAqLworCS8qCisJICogVGhlIHJlc3VsdCBvZiBjYWxsaW5nIGxzdGF0KCkgb24gcGF0aDsgb3Igc3RhdCgpLCBpZiB0aGUKKwkgKiBESVJfSVRFUkFUT1JfRk9MTE9XX1NZTUxJTktTIGZsYWcgd2FzIHNldCBhdAorCSAqIGRpcl9pdGVyYXRvcidzIGluaXRpYWxpemF0aW9uLgorCSAqLwogCXN0cnVjdCBzdGF0IHN0OwogfTsKIAogLyoKLSAqIFN0YXJ0IGEgZGlyZWN0b3J5IGl0ZXJhdGlvbiBvdmVyIHBhdGguIFJldHVybiBhIGRpcl9pdGVyYXRvciB0aGF0Ci0gKiBob2xkcyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGl0ZXJhdGlvbi4KKyAqIFN0YXJ0IGEgZGlyZWN0b3J5IGl0ZXJhdGlvbiBvdmVyIHBhdGggd2l0aCB0aGUgY29tYmluYXRpb24gb2YKKyAqIG9wdGlvbnMgc3BlY2lmaWVkIGJ5IGZsYWdzLiBPbiBzdWNjZXNzLCByZXR1cm4gYSBkaXJfaXRlcmF0b3IKKyAqIHRoYXQgaG9sZHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBpdGVyYXRpb24uIEluIGNhc2Ugb2YKKyAqIGZhaWx1cmUsIHJldHVybiBOVUxMIGFuZCBzZXQgZXJybm8gYWNjb3JkaW5nbHkuCiAgKgogICogVGhlIGl0ZXJhdGlvbiBpbmNsdWRlcyBhbGwgcGF0aHMgdW5kZXIgcGF0aCwgbm90IGluY2x1ZGluZyBwYXRoCiAgKiBpdHNlbGYgYW5kIG5vdCBpbmNsdWRpbmcgIi4iIG9yICIuLiIgZW50cmllcy4KICAqCi0gKiBwYXRoIGlzIHRoZSBzdGFydGluZyBkaXJlY3RvcnkuIEFuIGludGVybmFsIGNvcHkgd2lsbCBiZSBtYWRlLgorICogUGFyYW1ldGVycyBhcmU6CisgKiAgLSBwYXRoIGlzIHRoZSBzdGFydGluZyBkaXJlY3RvcnkuIEFuIGludGVybmFsIGNvcHkgd2lsbCBiZSBtYWRlLgorICogIC0gZmxhZ3MgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgcG9zc2libGUgZmxhZ3MgdG8gaW5pdGlhbGl6ZSBhCisgKiAgICBkaXItaXRlcmF0b3Igb3IgMCBmb3IgZGVmYXVsdCBiZWhhdmlvci4KICAqLwotc3RydWN0IGRpcl9pdGVyYXRvciAqZGlyX2l0ZXJhdG9yX2JlZ2luKGNvbnN0IGNoYXIgKnBhdGgpOworc3RydWN0IGRpcl9pdGVyYXRvciAqZGlyX2l0ZXJhdG9yX2JlZ2luKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBmbGFncyk7CiAKIC8qCiAgKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgZmlyc3Qgb3IgbmV4dCBpdGVtIGFuZCByZXR1cm4gSVRFUl9PSy4KICAqIElmIHRoZSBpdGVyYXRpb24gaXMgZXhoYXVzdGVkLCBmcmVlIHRoZSBkaXJfaXRlcmF0b3IgYW5kIGFueQotICogcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgcmV0dXJuIElURVJfRE9ORS4gT24gZXJyb3IsIGZyZWUKLSAqIGRpcl9pdGVyYXRvciBhbmQgYXNzb2NpYXRlZCByZXNvdXJjZXMgYW5kIHJldHVybiBJVEVSX0VSUk9SLiBJdCBpcwotICogYSBidWcgdG8gdXNlIGl0ZXJhdG9yIG9yIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbiBhZnRlciBpdCBoYXMKLSAqIHJldHVybmVkIElURVJfRE9ORSBvciBJVEVSX0VSUk9SLgorICogcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgcmV0dXJuIElURVJfRE9ORS4KKyAqCisgKiBJdCBpcyBhIGJ1ZyB0byB1c2UgaXRlcmF0b3Igb3IgY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluIGFmdGVyIGl0CisgKiBoYXMgcmV0dXJuZWQgSVRFUl9ET05FIG9yIElURVJfRVJST1IgKHdoaWNoIG1heSBiZSByZXR1cm5lZCBpZmYKKyAqIHRoZSBESVJfSVRFUkFUT1JfUEVEQU5USUMgZmxhZyB3YXMgc2V0KS4KICAqLwogaW50IGRpcl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCBkaXJfaXRlcmF0b3IgKml0ZXJhdG9yKTsKIApkaWZmIC0tZ2l0IGEvZGlyLmMgYi9kaXIuYwppbmRleCBiYTRhNTFjLi5kMDIxYzkwIDEwMDY0NAotLS0gYS9kaXIuYworKysgYi9kaXIuYwpAQCAtNzAxLDcgKzcwMSw3IEBACiAJZmlyc3QgPSAwOwogCWxhc3QgPSBkaXItPmRpcnNfbnI7CiAJd2hpbGUgKGxhc3QgPiBmaXJzdCkgewotCQlpbnQgY21wLCBuZXh0ID0gKGxhc3QgKyBmaXJzdCkgPj4gMTsKKwkJaW50IGNtcCwgbmV4dCA9IGZpcnN0ICsgKChsYXN0IC0gZmlyc3QpID4+IDEpOwogCQlkID0gZGlyLT5kaXJzW25leHRdOwogCQljbXAgPSBzdHJuY21wKG5hbWUsIGQtPm5hbWUsIGxlbik7CiAJCWlmICghY21wICYmIHN0cmxlbihkLT5uYW1lKSA+IGxlbikKZGlmZiAtLWdpdCBhL2VkaXRvci5jIGIvZWRpdG9yLmMKaW5kZXggNzE1NDc2Ny4uZjA3OWFiYiAxMDA2NDQKLS0tIGEvZWRpdG9yLmMKKysrIGIvZWRpdG9yLmMKQEAgLTk2LDEwICs5NiwxMCBAQAogCiAJCWlmIChwcmludF93YWl0aW5nX2Zvcl9lZGl0b3IgJiYgIWlzX3Rlcm1pbmFsX2R1bWIoKSkKIAkJCS8qCi0JCQkgKiBHbyBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgYW5kIGVyYXNlIHRoZSBlbnRpcmUgbGluZSB0bwotCQkJICogYXZvaWQgd2FzdGluZyB0aGUgdmVydGljYWwgc3BhY2UuCisJCQkgKiBFcmFzZSB0aGUgZW50aXJlIGxpbmUgdG8gYXZvaWQgd2FzdGluZyB0aGUKKwkJCSAqIHZlcnRpY2FsIHNwYWNlLgogCQkJICovCi0JCQlmcHV0cygiXHJcMDMzW0siLCBzdGRlcnIpOworCQkJdGVybV9jbGVhcl9saW5lKCk7CiAJfQogCiAJaWYgKCFidWZmZXIpCmRpZmYgLS1naXQgYS9mYXN0LWltcG9ydC5jIGIvZmFzdC1pbXBvcnQuYwppbmRleCBmMzhkMDRmLi5iNDRkNmE0IDEwMDY0NAotLS0gYS9mYXN0LWltcG9ydC5jCisrKyBiL2Zhc3QtaW1wb3J0LmMKQEAgLTY0NCw3ICs2NDQsNyBAQAogCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnIgPSBuZXdfdHJlZV9jb250ZW50KHQtPmVudHJ5X2NvdW50ICsgYW10KTsKIAlyLT5lbnRyeV9jb3VudCA9IHQtPmVudHJ5X2NvdW50OwogCXItPmRlbHRhX2RlcHRoID0gdC0+ZGVsdGFfZGVwdGg7Ci0JbWVtY3B5KHItPmVudHJpZXMsdC0+ZW50cmllcyx0LT5lbnRyeV9jb3VudCpzaXplb2YodC0+ZW50cmllc1swXSkpOworCUNPUFlfQVJSQVkoci0+ZW50cmllcywgdC0+ZW50cmllcywgdC0+ZW50cnlfY291bnQpOwogCXJlbGVhc2VfdHJlZV9jb250ZW50KHQpOwogCXJldHVybiByOwogfQpAQCAtMjQxMCw3ICsyNDEwLDggQEAKIAkJb2lkY3B5KCZjb21taXRfb2lkLCAmY29tbWl0X29lLT5pZHgub2lkKTsKIAl9IGVsc2UgaWYgKCFnZXRfb2lkKHAsICZjb21taXRfb2lkKSkgewogCQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JCWNoYXIgKmJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKCZjb21taXRfb2lkLAorCQljaGFyICpidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAgICAgICAmY29tbWl0X29pZCwKIAkJCQkJCSAgICAgICBjb21taXRfdHlwZSwgJnNpemUsCiAJCQkJCQkgICAgICAgJmNvbW1pdF9vaWQpOwogCQlpZiAoIWJ1ZiB8fCBzaXplIDwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyA2KQpAQCAtMjQ4Miw3ICsyNDgzLDggQEAKIAkJdW5zaWduZWQgbG9uZyBzaXplOwogCQljaGFyICpidWY7CiAKLQkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoJmItPm9pZCwgY29tbWl0X3R5cGUsICZzaXplLAorCQlidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAmYi0+b2lkLCBjb21taXRfdHlwZSwgJnNpemUsCiAJCQkJCQkgJmItPm9pZCk7CiAJCXBhcnNlX2Zyb21fY29tbWl0KGIsIGJ1Ziwgc2l6ZSk7CiAJCWZyZWUoYnVmKTsKQEAgLTI1NjAsNyArMjU2Miw4IEBACiAJCQlvaWRjcHkoJm4tPm9pZCwgJm9lLT5pZHgub2lkKTsKIAkJfSBlbHNlIGlmICghZ2V0X29pZChmcm9tLCAmbi0+b2lkKSkgewogCQkJdW5zaWduZWQgbG9uZyBzaXplOwotCQkJY2hhciAqYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoJm4tPm9pZCwKKwkJCWNoYXIgKmJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgICAgICAmbi0+b2lkLAogCQkJCQkJCSAgICAgICBjb21taXRfdHlwZSwKIAkJCQkJCQkgICAgICAgJnNpemUsICZuLT5vaWQpOwogCQkJaWYgKCFidWYgfHwgc2l6ZSA8IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgNikKQEAgLTI1ODUsNiArMjU4OCw3IEBACiAJc3RydWN0IGJyYW5jaCAqYjsKIAljaGFyICphdXRob3IgPSBOVUxMOwogCWNoYXIgKmNvbW1pdHRlciA9IE5VTEw7CisJY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwogCXN0cnVjdCBoYXNoX2xpc3QgKm1lcmdlX2xpc3QgPSBOVUxMOwogCXVuc2lnbmVkIGludCBtZXJnZV9jb3VudDsKIAl1bnNpZ25lZCBjaGFyIHByZXZfZmFub3V0LCBuZXdfZmFub3V0OwpAQCAtMjYwNyw2ICsyNjExLDggQEAKIAl9CiAJaWYgKCFjb21taXR0ZXIpCiAJCWRpZSgiRXhwZWN0ZWQgY29tbWl0dGVyIGJ1dCBkaWRuJ3QgZ2V0IG9uZSIpOworCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJlbmNvZGluZyAiLCAmZW5jb2RpbmcpKQorCQlyZWFkX25leHRfY29tbWFuZCgpOwogCXBhcnNlX2RhdGEoJm1zZywgMCwgTlVMTCk7CiAJcmVhZF9uZXh0X2NvbW1hbmQoKTsKIAlwYXJzZV9mcm9tKGIpOwpAQCAtMjY3MCw5ICsyNjc2LDEzIEBACiAJfQogCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwKIAkJImF1dGhvciAlc1xuIgotCQkiY29tbWl0dGVyICVzXG4iCi0JCSJcbiIsCisJCSJjb21taXR0ZXIgJXNcbiIsCiAJCWF1dGhvciA/IGF1dGhvciA6IGNvbW1pdHRlciwgY29tbWl0dGVyKTsKKwlpZiAoZW5jb2RpbmcpCisJCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwKKwkJCSJlbmNvZGluZyAlc1xuIiwKKwkJCWVuY29kaW5nKTsKKwlzdHJidWZfYWRkY2goJm5ld19kYXRhLCAnXG4nKTsKIAlzdHJidWZfYWRkYnVmKCZuZXdfZGF0YSwgJm1zZyk7CiAJZnJlZShhdXRob3IpOwogCWZyZWUoY29tbWl0dGVyKTsKZGlmZiAtLWdpdCBhL2ZldGNoLXBhY2suYyBiL2ZldGNoLXBhY2suYwppbmRleCAxYzEwZjU0Li42NWJlMDQzIDEwMDY0NAotLS0gYS9mZXRjaC1wYWNrLmMKKysrIGIvZmV0Y2gtcGFjay5jCkBAIC0yODYsNyArMjg2LDcgQEAKIAkJICogd2UgY2Fubm90IHRydXN0IHRoZSBvYmplY3QgZmxhZ3MpLgogCQkgKi8KIAkJaWYgKCFhcmdzLT5ub19kZXBlbmRlbnRzICYmCi0JCSAgICAoKG8gPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCByZW1vdGUtPmhhc2gpKSAhPSBOVUxMKSAmJgorCQkgICAgKChvID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgcmVtb3RlKSkgIT0gTlVMTCkgJiYKIAkJCQkoby0+ZmxhZ3MgJiBDT01QTEVURSkpIHsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0zNjQsNyArMzY0LDcgQEAKIAkJCWlmIChza2lwX3ByZWZpeChyZWFkZXIubGluZSwgInVuc2hhbGxvdyAiLCAmYXJnKSkgewogCQkJCWlmIChnZXRfb2lkX2hleChhcmcsICZvaWQpKQogCQkJCQlkaWUoXygiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiKSwgcmVhZGVyLmxpbmUpOwotCQkJCWlmICghbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkLmhhc2gpKQorCQkJCWlmICghbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCkpCiAJCQkJCWRpZShfKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIpLCByZWFkZXIubGluZSk7CiAJCQkJLyogbWFrZSBzdXJlIHRoYXQgaXQgaXMgcGFyc2VkIGFzIHNoYWxsb3cgKi8KIAkJCQlpZiAoIXBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCkpCkBAIC03MDcsNyArNzA3LDcgQEAKIAlmb3IgKHJlZiA9ICpyZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgewogCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gZGVyZWZfdGFnKHRoZV9yZXBvc2l0b3J5LAogCQkJCQkgICAgIGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksCi0JCQkJCSAgICAgcmVmLT5vbGRfb2lkLmhhc2gpLAorCQkJCQkgICAgICZyZWYtPm9sZF9vaWQpLAogCQkJCQkgICAgIE5VTEwsIDApOwogCiAJCWlmICghbyB8fCBvLT50eXBlICE9IE9CSl9DT01NSVQgfHwgIShvLT5mbGFncyAmIENPTVBMRVRFKSkKQEAgLTczNCw3ICs3MzQsNyBAQAogCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZW1vdGUgPSAmcmVmLT5vbGRfb2lkOwogCQlzdHJ1Y3Qgb2JqZWN0ICpvOwogCi0JCW8gPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCByZW1vdGUtPmhhc2gpOworCQlvID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgcmVtb3RlKTsKIAkJaWYgKCFvIHx8ICEoby0+ZmxhZ3MgJiBDT01QTEVURSkpIHsKIAkJCXJldHZhbCA9IDA7CiAJCQlwcmludF92ZXJib3NlKGFyZ3MsICJ3YW50ICVzICglcykiLCBvaWRfdG9faGV4KHJlbW90ZSksCkBAIC05MDIsNzIgKzkwMiw4NSBAQAogCXNvcnRfcmVmX2xpc3QoJnJlZiwgcmVmX2NvbXBhcmVfbmFtZSk7CiAJUVNPUlQoc291Z2h0LCBucl9zb3VnaHQsIGNtcF9yZWZfYnlfbmFtZSk7CiAKLQlpZiAoKGFyZ3MtPmRlcHRoID4gMCB8fCBpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKSAmJiAhc2VydmVyX3N1cHBvcnRzKCJzaGFsbG93IikpCi0JCWRpZShfKCJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiKSk7Ci0JaWYgKGFyZ3MtPmRlcHRoID4gMCB8fCBhcmdzLT5kZWVwZW5fc2luY2UgfHwgYXJncy0+ZGVlcGVuX25vdCkKLQkJYXJncy0+ZGVlcGVuID0gMTsKLQlpZiAoc2VydmVyX3N1cHBvcnRzKCJtdWx0aV9hY2tfZGV0YWlsZWQiKSkgewotCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2tfZGV0YWlsZWQiKSk7Ci0JCW11bHRpX2FjayA9IDI7Ci0JCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm5vLWRvbmUiKSkgewotCQkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgbm8tZG9uZSIpKTsKLQkJCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjKQotCQkJCW5vX2RvbmUgPSAxOwotCQl9Ci0JfQotCWVsc2UgaWYgKHNlcnZlcl9zdXBwb3J0cygibXVsdGlfYWNrIikpIHsKLQkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrIikpOwotCQltdWx0aV9hY2sgPSAxOwotCX0KLQlpZiAoc2VydmVyX3N1cHBvcnRzKCJzaWRlLWJhbmQtNjRrIikpIHsKLQkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kLTY0ayIpKTsKLQkJdXNlX3NpZGViYW5kID0gMjsKLQl9Ci0JZWxzZSBpZiAoc2VydmVyX3N1cHBvcnRzKCJzaWRlLWJhbmQiKSkgewotCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyBzaWRlLWJhbmQiKSk7Ci0JCXVzZV9zaWRlYmFuZCA9IDE7Ci0JfQotCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImFsbG93LXRpcC1zaGExLWluLXdhbnQiKSkgewotCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyBhbGxvdy10aXAtc2hhMS1pbi13YW50IikpOwotCQlhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgfD0gQUxMT1dfVElQX1NIQTE7Ci0JfQotCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiKSkgewotCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IikpOwotCQlhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgfD0gQUxMT1dfUkVBQ0hBQkxFX1NIQTE7Ci0JfQotCWlmICghc2VydmVyX3N1cHBvcnRzKCJ0aGluLXBhY2siKSkKLQkJYXJncy0+dXNlX3RoaW5fcGFjayA9IDA7Ci0JaWYgKCFzZXJ2ZXJfc3VwcG9ydHMoIm5vLXByb2dyZXNzIikpCi0JCWFyZ3MtPm5vX3Byb2dyZXNzID0gMDsKLQlpZiAoIXNlcnZlcl9zdXBwb3J0cygiaW5jbHVkZS10YWciKSkKLQkJYXJncy0+aW5jbHVkZV90YWcgPSAwOwotCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm9mcy1kZWx0YSIpKQotCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyBvZnMtZGVsdGEiKSk7Ci0JZWxzZQotCQlwcmVmZXJfb2ZzX2RlbHRhID0gMDsKLQotCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImZpbHRlciIpKSB7Ci0JCXNlcnZlcl9zdXBwb3J0c19maWx0ZXJpbmcgPSAxOwotCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiKSk7Ci0JfSBlbHNlIGlmIChhcmdzLT5maWx0ZXJfb3B0aW9ucy5jaG9pY2UpIHsKLQkJd2FybmluZygiZmlsdGVyaW5nIG5vdCByZWNvZ25pemVkIGJ5IHNlcnZlciwgaWdub3JpbmciKTsKLQl9Ci0KIAlpZiAoKGFnZW50X2ZlYXR1cmUgPSBzZXJ2ZXJfZmVhdHVyZV92YWx1ZSgiYWdlbnQiLCAmYWdlbnRfbGVuKSkpIHsKIAkJYWdlbnRfc3VwcG9ydGVkID0gMTsKIAkJaWYgKGFnZW50X2xlbikKIAkJCXByaW50X3ZlcmJvc2UoYXJncywgXygiU2VydmVyIHZlcnNpb24gaXMgJS4qcyIpLAogCQkJCSAgICAgIGFnZW50X2xlbiwgYWdlbnRfZmVhdHVyZSk7CiAJfQotCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImRlZXBlbi1zaW5jZSIpKQorCisJaWYgKHNlcnZlcl9zdXBwb3J0cygic2hhbGxvdyIpKQorCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAic2hhbGxvdyIpOworCWVsc2UgaWYgKGFyZ3MtPmRlcHRoID4gMCB8fCBpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKQorCQlkaWUoXygiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIikpOworCWlmIChhcmdzLT5kZXB0aCA+IDAgfHwgYXJncy0+ZGVlcGVuX3NpbmNlIHx8IGFyZ3MtPmRlZXBlbl9ub3QpCisJCWFyZ3MtPmRlZXBlbiA9IDE7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygibXVsdGlfYWNrX2RldGFpbGVkIikpIHsKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgIm11bHRpX2Fja19kZXRhaWxlZCIpOworCQltdWx0aV9hY2sgPSAyOworCQlpZiAoc2VydmVyX3N1cHBvcnRzKCJuby1kb25lIikpIHsKKwkJCXByaW50X3ZlcmJvc2UoYXJncywgXygiU2VydmVyIHN1cHBvcnRzICVzIiksICJuby1kb25lIik7CisJCQlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYykKKwkJCQlub19kb25lID0gMTsKKwkJfQorCX0KKwllbHNlIGlmIChzZXJ2ZXJfc3VwcG9ydHMoIm11bHRpX2FjayIpKSB7CisJCXByaW50X3ZlcmJvc2UoYXJncywgXygiU2VydmVyIHN1cHBvcnRzICVzIiksICJtdWx0aV9hY2siKTsKKwkJbXVsdGlfYWNrID0gMTsKKwl9CisJaWYgKHNlcnZlcl9zdXBwb3J0cygic2lkZS1iYW5kLTY0ayIpKSB7CisJCXByaW50X3ZlcmJvc2UoYXJncywgXygiU2VydmVyIHN1cHBvcnRzICVzIiksICJzaWRlLWJhbmQtNjRrIik7CisJCXVzZV9zaWRlYmFuZCA9IDI7CisJfQorCWVsc2UgaWYgKHNlcnZlcl9zdXBwb3J0cygic2lkZS1iYW5kIikpIHsKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgInNpZGUtYmFuZCIpOworCQl1c2Vfc2lkZWJhbmQgPSAxOworCX0KKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJhbGxvdy10aXAtc2hhMS1pbi13YW50IikpIHsKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgImFsbG93LXRpcC1zaGExLWluLXdhbnQiKTsKKwkJYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0IHw9IEFMTE9XX1RJUF9TSEExOworCX0KKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IikpIHsKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgImFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiKTsKKwkJYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0IHw9IEFMTE9XX1JFQUNIQUJMRV9TSEExOworCX0KKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJ0aGluLXBhY2siKSkKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgInRoaW4tcGFjayIpOworCWVsc2UKKwkJYXJncy0+dXNlX3RoaW5fcGFjayA9IDA7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygibm8tcHJvZ3Jlc3MiKSkKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgIm5vLXByb2dyZXNzIik7CisJZWxzZQorCQlhcmdzLT5ub19wcm9ncmVzcyA9IDA7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygiaW5jbHVkZS10YWciKSkKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgImluY2x1ZGUtdGFnIik7CisJZWxzZQorCQlhcmdzLT5pbmNsdWRlX3RhZyA9IDA7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygib2ZzLWRlbHRhIikpCisJCXByaW50X3ZlcmJvc2UoYXJncywgXygiU2VydmVyIHN1cHBvcnRzICVzIiksICJvZnMtZGVsdGEiKTsKKwllbHNlCisJCXByZWZlcl9vZnNfZGVsdGEgPSAwOworCisJaWYgKHNlcnZlcl9zdXBwb3J0cygiZmlsdGVyIikpIHsKKwkJc2VydmVyX3N1cHBvcnRzX2ZpbHRlcmluZyA9IDE7CisJCXByaW50X3ZlcmJvc2UoYXJncywgXygiU2VydmVyIHN1cHBvcnRzICVzIiksICJmaWx0ZXIiKTsKKwl9IGVsc2UgaWYgKGFyZ3MtPmZpbHRlcl9vcHRpb25zLmNob2ljZSkgeworCQl3YXJuaW5nKCJmaWx0ZXJpbmcgbm90IHJlY29nbml6ZWQgYnkgc2VydmVyLCBpZ25vcmluZyIpOworCX0KKworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImRlZXBlbi1zaW5jZSIpKSB7CisJCXByaW50X3ZlcmJvc2UoYXJncywgXygiU2VydmVyIHN1cHBvcnRzICVzIiksICJkZWVwZW4tc2luY2UiKTsKIAkJZGVlcGVuX3NpbmNlX29rID0gMTsKLQllbHNlIGlmIChhcmdzLT5kZWVwZW5fc2luY2UpCisJfSBlbHNlIGlmIChhcmdzLT5kZWVwZW5fc2luY2UpCiAJCWRpZShfKCJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiKSk7Ci0JaWYgKHNlcnZlcl9zdXBwb3J0cygiZGVlcGVuLW5vdCIpKQorCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImRlZXBlbi1ub3QiKSkgeworCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAiZGVlcGVuLW5vdCIpOwogCQlkZWVwZW5fbm90X29rID0gMTsKLQllbHNlIGlmIChhcmdzLT5kZWVwZW5fbm90KQorCX0gZWxzZSBpZiAoYXJncy0+ZGVlcGVuX25vdCkKIAkJZGllKF8oIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1leGNsdWRlIikpOwotCWlmICghc2VydmVyX3N1cHBvcnRzKCJkZWVwZW4tcmVsYXRpdmUiKSAmJiBhcmdzLT5kZWVwZW5fcmVsYXRpdmUpCisJaWYgKHNlcnZlcl9zdXBwb3J0cygiZGVlcGVuLXJlbGF0aXZlIikpCisJCXByaW50X3ZlcmJvc2UoYXJncywgXygiU2VydmVyIHN1cHBvcnRzICVzIiksICJkZWVwZW4tcmVsYXRpdmUiKTsKKwllbHNlIGlmIChhcmdzLT5kZWVwZW5fcmVsYXRpdmUpCiAJCWRpZShfKCJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRlZXBlbiIpKTsKIAogCWlmICghYXJncy0+bm9fZGVwZW5kZW50cykgewpAQCAtMTA0OCw3ICsxMDYxLDcgQEAKIAkJICogd2UgY2Fubm90IHRydXN0IHRoZSBvYmplY3QgZmxhZ3MpLgogCQkgKi8KIAkJaWYgKCFub19kZXBlbmRlbnRzICYmCi0JCSAgICAoKG8gPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCByZW1vdGUtPmhhc2gpKSAhPSBOVUxMKSAmJgorCQkgICAgKChvID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgcmVtb3RlKSkgIT0gTlVMTCkgJiYKIAkJICAgIChvLT5mbGFncyAmIENPTVBMRVRFKSkgewogCQkJY29udGludWU7CiAJCX0KQEAgLTEyNzUsNyArMTI4OCw3IEBACiAJCWlmIChza2lwX3ByZWZpeChyZWFkZXItPmxpbmUsICJ1bnNoYWxsb3cgIiwgJmFyZykpIHsKIAkJCWlmIChnZXRfb2lkX2hleChhcmcsICZvaWQpKQogCQkJCWRpZShfKCJpbnZhbGlkIHVuc2hhbGxvdyBsaW5lOiAlcyIpLCByZWFkZXItPmxpbmUpOwotCQkJaWYgKCFsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQuaGFzaCkpCisJCQlpZiAoIWxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvaWQpKQogCQkJCWRpZShfKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIpLCByZWFkZXItPmxpbmUpOwogCQkJLyogbWFrZSBzdXJlIHRoYXQgaXQgaXMgcGFyc2VkIGFzIHNoYWxsb3cgKi8KIAkJCWlmICghcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKSkKZGlmZiAtLWdpdCBhL2ZzY2suYyBiL2ZzY2suYwppbmRleCA0NzAzZjU1Li5jZGI3ZDhkIDEwMDY0NAotLS0gYS9mc2NrLmMKKysrIGIvZnNjay5jCkBAIC0xODEsNDEgKzE4MSw2IEBACiAJcmV0dXJuIG1zZ190eXBlOwogfQogCi1zdGF0aWMgdm9pZCBpbml0X3NraXBsaXN0KHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnBhdGgpCi17Ci0JRklMRSAqZnA7Ci0Jc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOwotCXN0cnVjdCBvYmplY3RfaWQgb2lkOwotCi0JZnAgPSBmb3BlbihwYXRoLCAiciIpOwotCWlmICghZnApCi0JCWRpZSgiQ291bGQgbm90IG9wZW4gc2tpcCBsaXN0OiAlcyIsIHBhdGgpOwotCXdoaWxlICghc3RyYnVmX2dldGxpbmUoJnNiLCBmcCkpIHsKLQkJY29uc3QgY2hhciAqcDsKLQkJY29uc3QgY2hhciAqaGFzaDsKLQotCQkvKgotCQkgKiBBbGxvdyB0cmFpbGluZyBjb21tZW50cywgbGVhZGluZyB3aGl0ZXNwYWNlCi0JCSAqIChpbmNsdWRpbmcgYmVmb3JlIGNvbW1pdHMpLCBhbmQgZW1wdHkgb3Igd2hpdGVzcGFjZQotCQkgKiBvbmx5IGxpbmVzLgotCQkgKi8KLQkJaGFzaCA9IHN0cmNocihzYi5idWYsICcjJyk7Ci0JCWlmIChoYXNoKQotCQkJc3RyYnVmX3NldGxlbigmc2IsIGhhc2ggLSBzYi5idWYpOwotCQlzdHJidWZfdHJpbSgmc2IpOwotCQlpZiAoIXNiLmxlbikKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwYXJzZV9vaWRfaGV4KHNiLmJ1ZiwgJm9pZCwgJnApIHx8ICpwICE9ICdcMCcpCi0JCQlkaWUoIkludmFsaWQgU0hBLTE6ICVzIiwgc2IuYnVmKTsKLQkJb2lkc2V0X2luc2VydCgmb3B0aW9ucy0+c2tpcGxpc3QsICZvaWQpOwotCX0KLQlpZiAoZmVycm9yKGZwKSkKLQkJZGllX2Vycm5vKCJDb3VsZCBub3QgcmVhZCAnJXMnIiwgcGF0aCk7Ci0JZmNsb3NlKGZwKTsKLQlzdHJidWZfcmVsZWFzZSgmc2IpOwotfQotCiBzdGF0aWMgaW50IHBhcnNlX21zZ190eXBlKGNvbnN0IGNoYXIgKnN0cikKIHsKIAlpZiAoIXN0cmNtcChzdHIsICJlcnJvciIpKQpAQCAtMjg0LDcgKzI0OSw3IEBACiAJCWlmICghc3RyY21wKGJ1ZiwgInNraXBsaXN0IikpIHsKIAkJCWlmIChlcXVhbCA9PSBsZW4pCiAJCQkJZGllKCJza2lwbGlzdCByZXF1aXJlcyBhIHBhdGgiKTsKLQkJCWluaXRfc2tpcGxpc3Qob3B0aW9ucywgYnVmICsgZXF1YWwgKyAxKTsKKwkJCW9pZHNldF9wYXJzZV9maWxlKCZvcHRpb25zLT5za2lwbGlzdCwgYnVmICsgZXF1YWwgKyAxKTsKIAkJCWJ1ZiArPSBsZW4gKyAxOwogCQkJY29udGludWU7CiAJCX0KQEAgLTEwOTIsNyArMTA1Nyw3IEBACiAKIAkJYmxvYiA9IGxvb2t1cF9ibG9iKHRoZV9yZXBvc2l0b3J5LCBvaWQpOwogCQlpZiAoIWJsb2IpIHsKLQkJCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF91bmtub3duX29iamVjdChvaWQtPmhhc2gpOworCQkJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KG9pZCk7CiAJCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsIG9iaiwKIAkJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX0JMT0IsCiAJCQkJICAgICAgIm5vbi1ibG9iIGZvdW5kIGF0IC5naXRtb2R1bGVzIik7CmRpZmYgLS1naXQgYS9mc21vbml0b3IuYyBiL2ZzbW9uaXRvci5jCmluZGV4IDFkZWUwYWQuLjIzMWU4M2EgMTAwNjQ0Ci0tLSBhL2ZzbW9uaXRvci5jCisrKyBiL2ZzbW9uaXRvci5jCkBAIC01Niw3ICs1Niw3IEBACiAKIHZvaWQgZmlsbF9mc21vbml0b3JfYml0bWFwKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQogewotCWludCBpOworCXVuc2lnbmVkIGludCBpOwogCWlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5ID0gZXdhaF9uZXcoKTsKIAlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKQogCQlpZiAoIShpc3RhdGUtPmNhY2hlW2ldLT5jZV9mbGFncyAmIENFX0ZTTU9OSVRPUl9WQUxJRCkpCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlzaXplX3QgYm9sOyAvKiBiZWdpbm5pbmcgb2YgbGluZSAqLwogCXVpbnQ2NF90IGxhc3RfdXBkYXRlOwogCWNoYXIgKmJ1ZjsKLQlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCWlmICghY29yZV9mc21vbml0b3IgfHwgaXN0YXRlLT5mc21vbml0b3JfaGFzX3J1bl9vbmNlKQogCQlyZXR1cm47CkBAIC0xOTIsNyArMTkyLDcgQEAKIAogdm9pZCBhZGRfZnNtb25pdG9yKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQogewotCWludCBpOworCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKCFpc3RhdGUtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSkgewogCQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mc21vbml0b3IsICJhZGQgZnNtb25pdG9yIik7CkBAIC0yMjUsNyArMjI1LDcgQEAKIAogdm9pZCB0d2Vha19mc21vbml0b3Ioc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCiB7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGk7CiAJaW50IGZzbW9uaXRvcl9lbmFibGVkID0gZ2l0X2NvbmZpZ19nZXRfZnNtb25pdG9yKCk7CiAKIAlpZiAoaXN0YXRlLT5mc21vbml0b3JfZGlydHkpIHsKZGlmZiAtLWdpdCBhL2dldHRleHQuYyBiL2dldHRleHQuYwppbmRleCBkNDAyMWQ2Li4zNWQyYzEyIDEwMDY0NAotLS0gYS9nZXR0ZXh0LmMKKysrIGIvZ2V0dGV4dC5jCkBAIC0xMiw3ICsxMiwyNSBAQAogI2lmbmRlZiBOT19HRVRURVhUCiAjCWluY2x1ZGUgPGxvY2FsZS5oPgogIwlpbmNsdWRlIDxsaWJpbnRsLmg+Ci0jCWlmZGVmIEhBVkVfTElCQ0hBUlNFVF9ICisjCWlmZGVmIEdJVF9XSU5ET1dTX05BVElWRQorCitzdGF0aWMgY29uc3QgY2hhciAqbG9jYWxlX2NoYXJzZXQodm9pZCkKK3sKKwljb25zdCBjaGFyICplbnYgPSBnZXRlbnYoIkxDX0FMTCIpLCAqZG90OworCisJaWYgKCFlbnYgfHwgISplbnYpCisJCWVudiA9IGdldGVudigiTENfQ1RZUEUiKTsKKwlpZiAoIWVudiB8fCAhKmVudikKKwkJZW52ID0gZ2V0ZW52KCJMQU5HIik7CisKKwlpZiAoIWVudikKKwkJcmV0dXJuICJVVEYtOCI7CisKKwlkb3QgPSBzdHJjaHIoZW52LCAnLicpOworCXJldHVybiAhZG90ID8gZW52IDogZG90ICsgMTsKK30KKworIwllbGlmIGRlZmluZWQgSEFWRV9MSUJDSEFSU0VUX0gKICMJCWluY2x1ZGUgPGxpYmNoYXJzZXQuaD4KICMJZWxzZQogIwkJaW5jbHVkZSA8bGFuZ2luZm8uaD4KQEAgLTUwLDEwICs2OCw4IEBACiBpbnQgdXNlX2dldHRleHRfcG9pc29uKHZvaWQpCiB7CiAJc3RhdGljIGludCBwb2lzb25fcmVxdWVzdGVkID0gLTE7Ci0JaWYgKHBvaXNvbl9yZXF1ZXN0ZWQgPT0gLTEpIHsKLQkJY29uc3QgY2hhciAqdiA9IGdldGVudigiR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04iKTsKLQkJcG9pc29uX3JlcXVlc3RlZCA9IHYgJiYgc3RybGVuKHYpID8gMSA6IDA7Ci0JfQorCWlmIChwb2lzb25fcmVxdWVzdGVkID09IC0xKQorCQlwb2lzb25fcmVxdWVzdGVkID0gZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiIsIDApOwogCXJldHVybiBwb2lzb25fcmVxdWVzdGVkOwogfQogCmRpZmYgLS1naXQgYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAppbmRleCAyMGViODFjLi5jMjBhZTllIDEwMDc1NQotLS0gYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCisrKyBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKQEAgLTE0OSw2ICsxNDksMjAgQEAKIAkJRklMVEVSID0+IHVuZGVmLAogCQlJU19SRVZFUlNFID0+IDAsCiAJfSwKKwknd29ya3RyZWVfaGVhZCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC1SJywgQF8gfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC1SJywKKwkJRklMVEVSID0+IHVuZGVmLAorCQlJU19SRVZFUlNFID0+IDEsCisJfSwKKwknd29ya3RyZWVfbm90aGVhZCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1SIC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5JywgQF8gfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5JywKKwkJRklMVEVSID0+IHVuZGVmLAorCQlJU19SRVZFUlNFID0+IDAsCisJfSwKICk7CiAKICRwYXRjaF9tb2RlID0gJ3N0YWdlJzsKQEAgLTk3Miw3ICs5ODYsMTEgQEAKIAkJCW5leHQ7CiAJCX0KIAkJaWYgKCRvZnNfZGVsdGEpIHsKLQkJCSRuX29mcyArPSAkb2ZzX2RlbHRhOworCQkJaWYgKCRwYXRjaF9tb2RlX2ZsYXZvdXJ7SVNfUkVWRVJTRX0pIHsKKwkJCQkkb19vZnMgLT0gJG9mc19kZWx0YTsKKwkJCX0gZWxzZSB7CisJCQkJJG5fb2ZzICs9ICRvZnNfZGVsdGE7CisJCQl9CiAJCQkkXy0+e1RFWFR9LT5bMF0gPSBmb3JtYXRfaHVua19oZWFkZXIoJG9fb2ZzLCAkb19jbnQsCiAJCQkJCQkJICAgICAkbl9vZnMsICRuX2NudCk7CiAJCX0KQEAgLTEwNTAsNiArMTA2OCwxMiBAQAogCWNoZWNrb3V0X25vdGhlYWQgPT4gTl9fKAogIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCiBtYXJrZWQgZm9yIGFwcGx5aW5nLiIpLAorCXdvcmt0cmVlX2hlYWQgPT4gTl9fKAorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCittYXJrZWQgZm9yIGRpc2NhcmRpbmcuIiksCisJd29ya3RyZWVfbm90aGVhZCA9PiBOX18oCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUKK21hcmtlZCBmb3IgYXBwbHlpbmcuIiksCiApOwogCiBzdWIgcmVjb3VudF9lZGl0ZWRfaHVuayB7CkBAIC0xMjYwLDYgKzEyODQsMTggQEAKIHEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKIGEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQogZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIpLAorCXdvcmt0cmVlX2hlYWQgPT4gTl9fKAorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlCituIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUKK3EgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKK2QgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIpLAorCXdvcmt0cmVlX25vdGhlYWQgPT4gTl9fKAorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUKK24gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlCitxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzCithIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKK2QgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiKSwKICk7CiAKIHN1YiBoZWxwX3BhdGNoX2NtZCB7CkBAIC0xNDIxLDYgKzE0NTcsMTYgQEAKIAkJZGVsZXRpb24gPT4gTl9fKCJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKIAkJaHVuayA9PiBOX18oIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKIAl9LAorCXdvcmt0cmVlX2hlYWQgPT4geworCQltb2RlID0+IE5fXygiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWRlbGV0aW9uID0+IE5fXygiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWh1bmsgPT4gTl9fKCJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwl3b3JrdHJlZV9ub3RoZWFkID0+IHsKKwkJbW9kZSA9PiBOX18oIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWRlbGV0aW9uID0+IE5fXygiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJaHVuayA9PiBOX18oIkFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCiApOwogCiBzdWIgcGF0Y2hfdXBkYXRlX2ZpbGUgewpAQCAtMTc1Niw2ICsxODAyLDE2IEBACiAJCQkJCQkgICAgICAgJ2NoZWNrb3V0X2hlYWQnIDogJ2NoZWNrb3V0X25vdGhlYWQnKTsKIAkJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSBfXygibWlzc2luZyAtLSIpOwogCQkJCX0KKwkJCX0gZWxzaWYgKCQxIGVxICd3b3JrdHJlZScpIHsKKwkJCQkkYXJnID0gc2hpZnQgQEFSR1Ygb3IgZGllIF9fKCJtaXNzaW5nIC0tIik7CisJCQkJaWYgKCRhcmcgZXEgJy0tJykgeworCQkJCQkkcGF0Y2hfbW9kZSA9ICdjaGVja291dF9pbmRleCc7CisJCQkJfSBlbHNlIHsKKwkJCQkJJHBhdGNoX21vZGVfcmV2aXNpb24gPSAkYXJnOworCQkJCQkkcGF0Y2hfbW9kZSA9ICgkYXJnIGVxICdIRUFEJyA/CisJCQkJCQkgICAgICAgJ3dvcmt0cmVlX2hlYWQnIDogJ3dvcmt0cmVlX25vdGhlYWQnKTsKKwkJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSBfXygibWlzc2luZyAtLSIpOworCQkJCX0KIAkJCX0gZWxzaWYgKCQxIGVxICdzdGFnZScgb3IgJDEgZXEgJ3N0YXNoJykgewogCQkJCSRwYXRjaF9tb2RlID0gJDE7CiAJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSBfXygibWlzc2luZyAtLSIpOwpkaWZmIC0tZ2l0IGEvZ2l0LWNvbXBhdC11dGlsLmggYi9naXQtY29tcGF0LXV0aWwuaAppbmRleCBjYzBlN2U5Li44M2JlODlkIDEwMDY0NAotLS0gYS9naXQtY29tcGF0LXV0aWwuaAorKysgYi9naXQtY29tcGF0LXV0aWwuaApAQCAtMSw2ICsxLDE1IEBACiAjaWZuZGVmIEdJVF9DT01QQVRfVVRJTF9ICiAjZGVmaW5lIEdJVF9DT01QQVRfVVRJTF9ICiAKKyNpZmRlZiBVU0VfTVNWQ19DUlREQkcKKy8qCisgKiBGb3IgdGhlc2UgdG8gd29yayB0aGV5IG11c3QgYXBwZWFyIHZlcnkgZWFybHkgaW4gZWFjaAorICogZmlsZSAtLSBiZWZvcmUgbW9zdCBvZiB0aGUgc3RhbmRhcmQgaGVhZGVyIGZpbGVzLgorICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3J0ZGJnLmg+CisjZW5kaWYKKwogI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAogCiAKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZXRvb2wuc2ggYi9naXQtbWVyZ2V0b29sLnNoCmluZGV4IDg4ZmE2YTkuLmUzZjZkNTQgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZXRvb2wuc2gKKysrIGIvZ2l0LW1lcmdldG9vbC5zaApAQCAtMjI4LDkgKzIyOCw4IEBACiB9CiAKIGNoZWNrb3V0X3N0YWdlZF9maWxlICgpIHsKLQl0bXBmaWxlPSQoZXhwciBcCi0JCSIkKGdpdCBjaGVja291dC1pbmRleCAtLXRlbXAgLS1zdGFnZT0iJDEiICIkMiIgMj4vZGV2L251bGwpIiBcCi0JCTogJ1woW14JXSpcKQknKQorCXRtcGZpbGU9IiQoZ2l0IGNoZWNrb3V0LWluZGV4IC0tdGVtcCAtLXN0YWdlPSIkMSIgIiQyIiAyPi9kZXYvbnVsbCkiICYmCisJdG1wZmlsZT0ke3RtcGZpbGUlJScJJyp9CiAKIAlpZiB0ZXN0ICQ/IC1lcSAwICYmIHRlc3QgLW4gIiR0bXBmaWxlIgogCXRoZW4KQEAgLTI1NSwxMyArMjU0LDE2IEBACiAJCXJldHVybiAxCiAJZmkKIAotCWlmIEJBU0U9JChleHByICIkTUVSR0VEIiA6ICdcKC4qXClcLlteL10qJCcpCi0JdGhlbgotCQlleHQ9JChleHByICIkTUVSR0VEIiA6ICcuKlwoXC5bXi9dKlwpJCcpCi0JZWxzZQorCSMgZXh0cmFjdCBmaWxlIGV4dGVuc2lvbiBmcm9tIHRoZSBsYXN0IHBhdGggY29tcG9uZW50CisJY2FzZSAiJHtNRVJHRUQjIyovfSIgaW4KKwkqLiopCisJCWV4dD0uJHtNRVJHRUQjIyoufQorCQlCQVNFPSR7TUVSR0VEJSIkZXh0In0KKwkJOzsKKwkqKQogCQlCQVNFPSRNRVJHRUQKIAkJZXh0PQotCWZpCisJZXNhYwogCiAJbWVyZ2V0b29sX3RtcGRpcl9pbml0CiAKQEAgLTI3NywxNSArMjc5LDMwIEBACiAJUkVNT1RFPSIkTUVSR0VUT09MX1RNUERJUi8ke0JBU0V9X1JFTU9URV8kJCRleHQiCiAJQkFTRT0iJE1FUkdFVE9PTF9UTVBESVIvJHtCQVNFfV9CQVNFXyQkJGV4dCIKIAotCWJhc2VfbW9kZT0kKGdpdCBscy1maWxlcyAtdSAtLSAiJE1FUkdFRCIgfCBhd2sgJ3tpZiAoJDM9PTEpIHByaW50ICQxO30nKQotCWxvY2FsX21vZGU9JChnaXQgbHMtZmlsZXMgLXUgLS0gIiRNRVJHRUQiIHwgYXdrICd7aWYgKCQzPT0yKSBwcmludCAkMTt9JykKLQlyZW1vdGVfbW9kZT0kKGdpdCBscy1maWxlcyAtdSAtLSAiJE1FUkdFRCIgfCBhd2sgJ3tpZiAoJDM9PTMpIHByaW50ICQxO30nKQorCWJhc2VfbW9kZT0gbG9jYWxfbW9kZT0gcmVtb3RlX21vZGU9CisKKwkjIGhlcmUsICRJRlMgaXMganVzdCBhIExGCisJZm9yIGxpbmUgaW4gJGYKKwlkbworCQltb2RlPSR7bGluZSUlICp9CQkjIDFzdCB3b3JkCisJCXNoYTE9JHtsaW5lIyIkbW9kZSAifQorCQlzaGExPSR7c2hhMSUlICp9CQkjIDJuZCB3b3JkCisJCWNhc2UgIiR7bGluZSMkbW9kZSAkc2hhMSB9IiBpbgkjIHJlbWFpbmRlcgorCQknMQknKikKKwkJCWJhc2VfbW9kZT0kbW9kZQorCQkJOzsKKwkJJzIJJyopCisJCQlsb2NhbF9tb2RlPSRtb2RlIGxvY2FsX3NoYTE9JHNoYTEKKwkJCTs7CisJCSczCScqKQorCQkJcmVtb3RlX21vZGU9JG1vZGUgcmVtb3RlX3NoYTE9JHNoYTEKKwkJCTs7CisJCWVzYWMKKwlkb25lCiAKIAlpZiBpc19zdWJtb2R1bGUgIiRsb2NhbF9tb2RlIiB8fCBpc19zdWJtb2R1bGUgIiRyZW1vdGVfbW9kZSIKIAl0aGVuCiAJCWVjaG8gIlN1Ym1vZHVsZSBtZXJnZSBjb25mbGljdCBmb3IgJyRNRVJHRUQnOiIKLQkJbG9jYWxfc2hhMT0kKGdpdCBscy1maWxlcyAtdSAtLSAiJE1FUkdFRCIgfCBhd2sgJ3tpZiAoJDM9PTIpIHByaW50ICQyO30nKQotCQlyZW1vdGVfc2hhMT0kKGdpdCBscy1maWxlcyAtdSAtLSAiJE1FUkdFRCIgfCBhd2sgJ3tpZiAoJDM9PTMpIHByaW50ICQyO30nKQogCQlkZXNjcmliZV9maWxlICIkbG9jYWxfbW9kZSIgImxvY2FsIiAiJGxvY2FsX3NoYTEiCiAJCWRlc2NyaWJlX2ZpbGUgIiRyZW1vdGVfbW9kZSIgInJlbW90ZSIgIiRyZW1vdGVfc2hhMSIKIAkJcmVzb2x2ZV9zdWJtb2R1bGVfbWVyZ2UKQEAgLTQwNiw3ICs0MjMsNyBAQAogCQktdHwtLXRvb2wqKQogCQkJY2FzZSAiJCMsJDEiIGluCiAJCQkqLCo9KikKLQkJCQltZXJnZV90b29sPSQoZXhwciAieiQxIiA6ICd6LVtePV0qPVwoLipcKScpCisJCQkJbWVyZ2VfdG9vbD0kezEjKj19CiAJCQkJOzsKIAkJCTEsKikKIAkJCQl1c2FnZSA7OwpkaWZmIC0tZ2l0IGEvZ2l0LXA0LnB5IGIvZ2l0LXA0LnB5CmluZGV4IGM3MWE2ODMuLjM5OTFlN2QgMTAwNzU1Ci0tLSBhL2dpdC1wNC5weQorKysgYi9naXQtcDQucHkKQEAgLTEzMTYsNyArMTMxNiw3IEBACiAgICAgICAgIHNlbGYubmVlZHNHaXQgPSBUcnVlCiAgICAgICAgIHNlbGYudmVyYm9zZSA9IEZhbHNlCiAKLSAgICAjIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSAiYXBwZW5kIiBjbG9uZUV4Y2x1ZGUgYWN0aW9uCisgICAgIyBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgImFwcGVuZCIgdXBkYXRlX3NoZWx2ZSBhY3Rpb24KICAgICBkZWYgZW5zdXJlX3ZhbHVlKHNlbGYsIGF0dHIsIHZhbHVlKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgYXR0cikgb3IgZ2V0YXR0cihzZWxmLCBhdHRyKSBpcyBOb25lOgogICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRyLCB2YWx1ZSkKQEAgLTI1MzAsNiArMjUzMCwxMSBAQAogICAgICAgICBkaWUoICJFcnJvcjogJXMgaXMgbm90IGZvdW5kIGluIGNsaWVudCBzcGVjIHBhdGgiICUgZGVwb3RfcGF0aCApCiAgICAgICAgIHJldHVybiAiIgogCitkZWYgY2xvbmVFeGNsdWRlQ2FsbGJhY2sob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICAjIHByZXBlbmQgIi8iIGJlY2F1c2UgdGhlIGZpcnN0ICIvIiB3YXMgY29uc3VtZWQgYXMgcGFydCBvZiB0aGUgb3B0aW9uIGl0c2VsZi4KKyAgICAjICgiLS8vZGVwb3QvQS8uLi4iIGJlY29tZXMgIi9kZXBvdC9BLy4uLiIgYWZ0ZXIgb3B0aW9uIHBhcnNpbmcpCisgICAgcGFyc2VyLnZhbHVlcy5jbG9uZUV4Y2x1ZGUgKz0gWyIvIiArIHJlLnN1YihyIlwuXC5cLiQiLCAiIiwgdmFsdWUpXQorCiBjbGFzcyBQNFN5bmMoQ29tbWFuZCwgUDRVc2VyTWFwKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTI1NTMsNyArMjU1OCw3IEBACiAgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tdXNlLWNsaWVudC1zcGVjIiwgZGVzdD0idXNlQ2xpZW50U3BlYyIsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iT25seSBzeW5jIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBQZXJmb3JjZSBDbGllbnQgU3BlYyIpLAogICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLyIsIGRlc3Q9ImNsb25lRXhjbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJhcHBlbmQiLCB0eXBlPSJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iY2FsbGJhY2siLCBjYWxsYmFjaz1jbG9uZUV4Y2x1ZGVDYWxsYmFjaywgdHlwZT0ic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJleGNsdWRlIGRlcG90IHBhdGgiKSwKICAgICAgICAgXQogICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gIiIiSW1wb3J0cyBmcm9tIFBlcmZvcmNlIGludG8gYSBnaXQgcmVwb3NpdG9yeS5cbgpAQCAtMjYxOCwyMCArMjYyMywyNSBAQAogICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCgiY2hlY2twb2ludCBmaW5pc2hlZDogIiArIG91dCkKIAorICAgIGRlZiBpc1BhdGhXYW50ZWQoc2VsZiwgcGF0aCk6CisgICAgICAgIGZvciBwIGluIHNlbGYuY2xvbmVFeGNsdWRlOgorICAgICAgICAgICAgaWYgcC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgcCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgIyAiLS8vZGVwb3QvZmlsZTEiIHdpdGhvdXQgYSB0cmFpbGluZyAiLyIgc2hvdWxkIG9ubHkgZXhjbHVkZSAiZmlsZTEiLCBidXQgbm90ICJmaWxlMTExIiBvciAiZmlsZTFfZGlyL2ZpbGUyIgorICAgICAgICAgICAgZWxpZiBwYXRoLmxvd2VyKCkgPT0gcC5sb3dlcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHM6CisgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIHApOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCiAgICAgZGVmIGV4dHJhY3RGaWxlc0Zyb21Db21taXQoc2VsZiwgY29tbWl0LCBzaGVsdmVkPUZhbHNlLCBzaGVsdmVkX2NsID0gMCk6Ci0gICAgICAgIHNlbGYuY2xvbmVFeGNsdWRlID0gW3JlLnN1YihyIlwuXC5cLiQiLCAiIiwgcGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5jbG9uZUV4Y2x1ZGVdCiAgICAgICAgIGZpbGVzID0gW10KICAgICAgICAgZm51bSA9IDAKICAgICAgICAgd2hpbGUgImRlcG90RmlsZSVzIiAlIGZudW0gaW4gY29tbWl0OgogICAgICAgICAgICAgcGF0aCA9ICBjb21taXRbImRlcG90RmlsZSVzIiAlIGZudW1dCi0KLSAgICAgICAgICAgIGlmIFtwIGZvciBwIGluIHNlbGYuY2xvbmVFeGNsdWRlCi0gICAgICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChwYXRoLCBwKV06Ci0gICAgICAgICAgICAgICAgZm91bmQgPSBGYWxzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3VuZCA9IFtwIGZvciBwIGluIHNlbGYuZGVwb3RQYXRocwotICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgcCldCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYuaXNQYXRoV2FudGVkKHBhdGgpCiAgICAgICAgICAgICBpZiBub3QgZm91bmQ6CiAgICAgICAgICAgICAgICAgZm51bSA9IGZudW0gKyAxCiAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTI2NjgsNyArMjY3OCw3IEBACiAgICAgICAgICAgICBwYXRoID0gc2VsZi5jbGllbnRTcGVjRGlycy5tYXBfaW5fY2xpZW50KHBhdGgpCiAgICAgICAgICAgICBpZiBzZWxmLmRldGVjdEJyYW5jaGVzOgogICAgICAgICAgICAgICAgIGZvciBiIGluIHNlbGYua25vd25CcmFuY2hlczoKLSAgICAgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKGIgKyAiLyIpOgorICAgICAgICAgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIGIgKyAiLyIpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhbbGVuKGIpKzE6XQogCiAgICAgICAgIGVsaWYgc2VsZi5rZWVwUmVwb1BhdGg6CkBAIC0yNzAwLDggKzI3MTAsNyBAQAogICAgICAgICBmbnVtID0gMAogICAgICAgICB3aGlsZSAiZGVwb3RGaWxlJXMiICUgZm51bSBpbiBjb21taXQ6CiAgICAgICAgICAgICBwYXRoID0gIGNvbW1pdFsiZGVwb3RGaWxlJXMiICUgZm51bV0KLSAgICAgICAgICAgIGZvdW5kID0gW3AgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzCi0gICAgICAgICAgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIHApXQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmlzUGF0aFdhbnRlZChwYXRoKQogICAgICAgICAgICAgaWYgbm90IGZvdW5kOgogICAgICAgICAgICAgICAgIGZudW0gPSBmbnVtICsgMQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC0yNzIzLDcgKzI3MzIsNyBAQAogICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLmtub3duQnJhbmNoZXMua2V5cygpOgogICAgICAgICAgICAgICAgICMgYWRkIGEgdHJhaWxpbmcgc2xhc2ggc28gdGhhdCBhIGNvbW1pdCBpbnRvIHF0LzQuMmZvbwogICAgICAgICAgICAgICAgICMgZG9lc24ndCBlbmQgdXAgaW4gcXQvNC4yLCBlLmcuCi0gICAgICAgICAgICAgICAgaWYgcmVsUGF0aC5zdGFydHN3aXRoKGJyYW5jaCArICIvIik6CisgICAgICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChyZWxQYXRoLCBicmFuY2ggKyAiLyIpOgogICAgICAgICAgICAgICAgICAgICBpZiBicmFuY2ggbm90IGluIGJyYW5jaGVzOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXNbYnJhbmNoXSA9IFtdCiAgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzW2JyYW5jaF0uYXBwZW5kKGZpbGUpCkBAIC0zMzI1LDcgKzMzMzQsOSBAQAogICAgICAgICAgICAgaWYgY3VycmVudENoYW5nZSA8IGNoYW5nZToKICAgICAgICAgICAgICAgICBlYXJsaWVzdENvbW1pdCA9ICJeJXMiICUgbmV4dAogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsYXRlc3RDb21taXQgPSAiJXMiICUgbmV4dAorICAgICAgICAgICAgICAgIGlmIG5leHQgPT0gbGF0ZXN0Q29tbWl0OgorICAgICAgICAgICAgICAgICAgICBkaWUoIkluZmluaXRlIGxvb3Agd2hpbGUgbG9va2luZyBpbiByZWYgJXMgZm9yIGNoYW5nZSAlcy4gQ2hlY2sgeW91ciBicmFuY2ggbWFwcGluZ3MiICUgKHJlZiwgY2hhbmdlKSkKKyAgICAgICAgICAgICAgICBsYXRlc3RDb21taXQgPSAiJXNeQCIgJSBuZXh0CiAKICAgICAgICAgcmV0dXJuICIiCiAKQEAgLTM4ODgsNyArMzg5OSw2IEBACiAgICAgICAgICAgICBzZWxmLmNsb25lRGVzdGluYXRpb24gPSBkZXBvdFBhdGhzWy0xXQogICAgICAgICAgICAgZGVwb3RQYXRocyA9IGRlcG90UGF0aHNbOi0xXQogCi0gICAgICAgIHNlbGYuY2xvbmVFeGNsdWRlID0gWyIvIitwIGZvciBwIGluIHNlbGYuY2xvbmVFeGNsdWRlXQogICAgICAgICBmb3IgcCBpbiBkZXBvdFBhdGhzOgogICAgICAgICAgICAgaWYgbm90IHAuc3RhcnRzd2l0aCgiLy8iKToKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdEZXBvdCBwYXRocyBtdXN0IHN0YXJ0IHdpdGggIi8vIjogJXNcbicgJSBwKQpkaWZmIC0tZ2l0IGEvZ2l0LXJlYmFzZS0tYW0uc2ggYi9naXQtcmViYXNlLS1hbS5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQxNjcxNi4uMDAwMDAwMAotLS0gYS9naXQtcmViYXNlLS1hbS5zaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLSMgVGhpcyBzaGVsbCBzY3JpcHQgZnJhZ21lbnQgaXMgc291cmNlZCBieSBnaXQtcmViYXNlIHRvIGltcGxlbWVudAotIyBpdHMgZGVmYXVsdCwgZmFzdCwgcGF0Y2gtYmFzZWQsIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTAgSnVuaW8gQyBIYW1hbm8uCi0jCi0KLWdpdF9yZWJhc2VfX2FtICgpIHsKLQotY2FzZSAiJGFjdGlvbiIgaW4KLWNvbnRpbnVlKQotCWdpdCBhbSAtLXJlc29sdmVkIC0tcmVzb2x2ZW1zZz0iJHJlc29sdmVtc2ciIFwKLQkJJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gJiYKLQltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAotCXJldHVybgotCTs7Ci1za2lwKQotCWdpdCBhbSAtLXNraXAgLS1yZXNvbHZlbXNnPSIkcmVzb2x2ZW1zZyIgJiYKLQltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAotCXJldHVybgotCTs7Ci1zaG93LWN1cnJlbnQtcGF0Y2gpCi0JZXhlYyBnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2gKLQk7OwotZXNhYwotCi1pZiB0ZXN0IC16ICIkcmViYXNlX3Jvb3QiCi0JIyB0aGlzIGlzIG5vdyBlcXVpdmFsZW50IHRvICEgLXogIiR1cHN0cmVhbSIKLXRoZW4KLQlyZXZpc2lvbnM9JHVwc3RyZWFtLi4uJG9yaWdfaGVhZAotZWxzZQotCXJldmlzaW9ucz0kb250by4uLiRvcmlnX2hlYWQKLWZpCi0KLXJldD0wCi1ybSAtZiAiJEdJVF9ESVIvcmViYXNlZC1wYXRjaGVzIgotCi1naXQgZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IC0tZnVsbC1pbmRleCAtLWNoZXJyeS1waWNrIC0tcmlnaHQtb25seSBcCi0JLS1zcmMtcHJlZml4PWEvIC0tZHN0LXByZWZpeD1iLyAtLW5vLXJlbmFtZXMgLS1uby1jb3Zlci1sZXR0ZXIgXAotCS0tcHJldHR5PW1ib3hyZCAtLXRvcG8tb3JkZXIgXAotCSRnaXRfZm9ybWF0X3BhdGNoX29wdCBcCi0JIiRyZXZpc2lvbnMiICR7cmVzdHJpY3RfcmV2aXNpb24rXiRyZXN0cmljdF9yZXZpc2lvbn0gXAotCT4iJEdJVF9ESVIvcmViYXNlZC1wYXRjaGVzIgotcmV0PSQ/Ci0KLWlmIHRlc3QgMCAhPSAkcmV0Ci10aGVuCi0Jcm0gLWYgIiRHSVRfRElSL3JlYmFzZWQtcGF0Y2hlcyIKLQljYXNlICIkaGVhZF9uYW1lIiBpbgotCXJlZnMvaGVhZHMvKikKLQkJZ2l0IGNoZWNrb3V0IC1xICIkaGVhZF9uYW1lIgotCQk7OwotCSopCi0JCWdpdCBjaGVja291dCAtcSAiJG9yaWdfaGVhZCIKLQkJOzsKLQllc2FjCi0KLQljYXQgPiYyIDw8LUVPRgotCi0JZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXkKLQl0aGVzZSByZXZpc2lvbnM6Ci0KLQkgICAgJHJldmlzaW9ucwotCi0JQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uCi0JRU9GCi0JcmV0dXJuICRyZXQKLWZpCi0KLWdpdCBhbSAkZ2l0X2FtX29wdCAtLXJlYmFzaW5nIC0tcmVzb2x2ZW1zZz0iJHJlc29sdmVtc2ciIFwKLQktLXBhdGNoLWZvcm1hdD1tYm94cmQgXAotCSRhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSBcCi0JJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gPCIkR0lUX0RJUi9yZWJhc2VkLXBhdGNoZXMiCi1yZXQ9JD8KLQotcm0gLWYgIiRHSVRfRElSL3JlYmFzZWQtcGF0Y2hlcyIKLQotaWYgdGVzdCAwICE9ICRyZXQKLXRoZW4KLQl0ZXN0IC1kICIkc3RhdGVfZGlyIiAmJiB3cml0ZV9iYXNpY19zdGF0ZQotCXJldHVybiAkcmV0Ci1maQotCi1tb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAotCi19CmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1jb21tb24uc2ggYi9naXQtcmViYXNlLS1jb21tb24uc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMGUxM2UuLjAwMDAwMDAKLS0tIGEvZ2l0LXJlYmFzZS0tY29tbW9uLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotCi1yZXNvbHZlbXNnPSIKLSQoZ2V0dGV4dCAnUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aAotImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+IiwgdGhlbiBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIuCi1Zb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuICJnaXQgcmViYXNlIC0tc2tpcCIuCi1UbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSAiZ2l0IHJlYmFzZSIsIHJ1biAiZ2l0IHJlYmFzZSAtLWFib3J0Ii4nKQotIgotCi13cml0ZV9iYXNpY19zdGF0ZSAoKSB7Ci0JZWNobyAiJGhlYWRfbmFtZSIgPiAiJHN0YXRlX2RpciIvaGVhZC1uYW1lICYmCi0JZWNobyAiJG9udG8iID4gIiRzdGF0ZV9kaXIiL29udG8gJiYKLQllY2hvICIkb3JpZ19oZWFkIiA+ICIkc3RhdGVfZGlyIi9vcmlnLWhlYWQgJiYKLQl0ZXN0IHQgPSAiJEdJVF9RVUlFVCIgJiYgOiA+ICIkc3RhdGVfZGlyIi9xdWlldAotCXRlc3QgdCA9ICIkdmVyYm9zZSIgJiYgOiA+ICIkc3RhdGVfZGlyIi92ZXJib3NlCi0JdGVzdCAtbiAiJHN0cmF0ZWd5IiAmJiBlY2hvICIkc3RyYXRlZ3kiID4gIiRzdGF0ZV9kaXIiL3N0cmF0ZWd5Ci0JdGVzdCAtbiAiJHN0cmF0ZWd5X29wdHMiICYmIGVjaG8gIiRzdHJhdGVneV9vcHRzIiA+IFwKLQkJIiRzdGF0ZV9kaXIiL3N0cmF0ZWd5X29wdHMKLQl0ZXN0IC1uICIkYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUiICYmIGVjaG8gIiRhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSIgPiBcCi0JCSIkc3RhdGVfZGlyIi9hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZQotCXRlc3QgLW4gIiRncGdfc2lnbl9vcHQiICYmIGVjaG8gIiRncGdfc2lnbl9vcHQiID4gIiRzdGF0ZV9kaXIiL2dwZ19zaWduX29wdAotCXRlc3QgLW4gIiRzaWdub2ZmIiAmJiBlY2hvICIkc2lnbm9mZiIgPiIkc3RhdGVfZGlyIi9zaWdub2ZmCi0JdGVzdCAtbiAiJHJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMiICYmIDogPiAiJHN0YXRlX2RpciIvcmVzY2hlZHVsZS1mYWlsZWQtZXhlYwotfQotCi1hcHBseV9hdXRvc3Rhc2ggKCkgewotCWlmIHRlc3QgLWYgIiRzdGF0ZV9kaXIvYXV0b3N0YXNoIgotCXRoZW4KLQkJc3Rhc2hfc2hhMT0kKGNhdCAiJHN0YXRlX2Rpci9hdXRvc3Rhc2giKQotCQlpZiBnaXQgc3Rhc2ggYXBwbHkgJHN0YXNoX3NoYTEgPi9kZXYvbnVsbCAyPiYxCi0JCXRoZW4KLQkJCWVjaG8gIiQoZ2V0dGV4dCAnQXBwbGllZCBhdXRvc3Rhc2guJykiID4mMgotCQllbHNlCi0JCQlnaXQgc3Rhc2ggc3RvcmUgLW0gImF1dG9zdGFzaCIgLXEgJHN0YXNoX3NoYTEgfHwKLQkJCWRpZSAiJChldmFsX2dldHRleHQgIkNhbm5vdCBzdG9yZSBcJHN0YXNoX3NoYTEiKSIKLQkJCWdldHRleHQgJ0FwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuCi1Zb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLgotWW91IGNhbiBydW4gImdpdCBzdGFzaCBwb3AiIG9yICJnaXQgc3Rhc2ggZHJvcCIgYXQgYW55IHRpbWUuCi0nID4mMgotCQlmaQotCWZpCi19Ci0KLW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoICgpIHsKLQljYXNlICIkaGVhZF9uYW1lIiBpbgotCXJlZnMvKikKLQkJbWVzc2FnZT0icmViYXNlIGZpbmlzaGVkOiAkaGVhZF9uYW1lIG9udG8gJG9udG8iCi0JCWdpdCB1cGRhdGUtcmVmIC1tICIkbWVzc2FnZSIgXAotCQkJJGhlYWRfbmFtZSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJG9yaWdfaGVhZCAmJgotCQlnaXQgc3ltYm9saWMtcmVmIFwKLQkJCS1tICJyZWJhc2UgZmluaXNoZWQ6IHJldHVybmluZyB0byAkaGVhZF9uYW1lIiBcCi0JCQlIRUFEICRoZWFkX25hbWUgfHwKLQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ291bGQgbm90IG1vdmUgYmFjayB0byBcJGhlYWRfbmFtZSIpIgotCQk7OwotCWVzYWMKLX0KLQotb3V0cHV0ICgpIHsKLQljYXNlICIkdmVyYm9zZSIgaW4KLQknJykKLQkJb3V0cHV0PSQoIiRAIiAyPiYxICkKLQkJc3RhdHVzPSQ/Ci0JCXRlc3QgJHN0YXR1cyAhPSAwICYmIHByaW50ZiAiJXNcbiIgIiRvdXRwdXQiCi0JCXJldHVybiAkc3RhdHVzCi0JCTs7Ci0JKikKLQkJIiRAIgotCQk7OwotCWVzYWMKLX0KZGlmZiAtLWdpdCBhL2dpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaCBiL2dpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaAppbmRleCBhZmJiNjU3Li5kZWM5MGU5IDEwMDY0NAotLS0gYS9naXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2gKKysrIGIvZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoCkBAIC03Nyw2ICs3Nyw2MSBAQAogIyBhbmQgbGVhdmVzIENSIGF0IHRoZSBlbmQgaW5zdGVhZC4KIGNyPSQocHJpbnRmICJcMDE1IikKIAorcmVzb2x2ZW1zZz0iCiskKGdldHRleHQgJ1Jlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGgKKyJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPiIsIHRoZW4gcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiLgorWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biAiZ2l0IHJlYmFzZSAtLXNraXAiLgorVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgImdpdCByZWJhc2UiLCBydW4gImdpdCByZWJhc2UgLS1hYm9ydCIuJykKKyIKKword3JpdGVfYmFzaWNfc3RhdGUgKCkgeworCWVjaG8gIiRoZWFkX25hbWUiID4gIiRzdGF0ZV9kaXIiL2hlYWQtbmFtZSAmJgorCWVjaG8gIiRvbnRvIiA+ICIkc3RhdGVfZGlyIi9vbnRvICYmCisJZWNobyAiJG9yaWdfaGVhZCIgPiAiJHN0YXRlX2RpciIvb3JpZy1oZWFkICYmCisJdGVzdCB0ID0gIiRHSVRfUVVJRVQiICYmIDogPiAiJHN0YXRlX2RpciIvcXVpZXQKKwl0ZXN0IHQgPSAiJHZlcmJvc2UiICYmIDogPiAiJHN0YXRlX2RpciIvdmVyYm9zZQorCXRlc3QgLW4gIiRzdHJhdGVneSIgJiYgZWNobyAiJHN0cmF0ZWd5IiA+ICIkc3RhdGVfZGlyIi9zdHJhdGVneQorCXRlc3QgLW4gIiRzdHJhdGVneV9vcHRzIiAmJiBlY2hvICIkc3RyYXRlZ3lfb3B0cyIgPiBcCisJCSIkc3RhdGVfZGlyIi9zdHJhdGVneV9vcHRzCisJdGVzdCAtbiAiJGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlIiAmJiBlY2hvICIkYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUiID4gXAorCQkiJHN0YXRlX2RpciIvYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUKKwl0ZXN0IC1uICIkZ3BnX3NpZ25fb3B0IiAmJiBlY2hvICIkZ3BnX3NpZ25fb3B0IiA+ICIkc3RhdGVfZGlyIi9ncGdfc2lnbl9vcHQKKwl0ZXN0IC1uICIkc2lnbm9mZiIgJiYgZWNobyAiJHNpZ25vZmYiID4iJHN0YXRlX2RpciIvc2lnbm9mZgorCXRlc3QgLW4gIiRyZXNjaGVkdWxlX2ZhaWxlZF9leGVjIiAmJiA6ID4gIiRzdGF0ZV9kaXIiL3Jlc2NoZWR1bGUtZmFpbGVkLWV4ZWMKK30KKworYXBwbHlfYXV0b3N0YXNoICgpIHsKKwlpZiB0ZXN0IC1mICIkc3RhdGVfZGlyL2F1dG9zdGFzaCIKKwl0aGVuCisJCXN0YXNoX3NoYTE9JChjYXQgIiRzdGF0ZV9kaXIvYXV0b3N0YXNoIikKKwkJaWYgZ2l0IHN0YXNoIGFwcGx5ICRzdGFzaF9zaGExID4vZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQllY2hvICIkKGdldHRleHQgJ0FwcGxpZWQgYXV0b3N0YXNoLicpIiA+JjIKKwkJZWxzZQorCQkJZ2l0IHN0YXNoIHN0b3JlIC1tICJhdXRvc3Rhc2giIC1xICRzdGFzaF9zaGExIHx8CisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDYW5ub3Qgc3RvcmUgXCRzdGFzaF9zaGExIikiCisJCQlnZXR0ZXh0ICdBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLgorWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC4KK1lvdSBjYW4gcnVuICJnaXQgc3Rhc2ggcG9wIiBvciAiZ2l0IHN0YXNoIGRyb3AiIGF0IGFueSB0aW1lLgorJyA+JjIKKwkJZmkKKwlmaQorfQorCitvdXRwdXQgKCkgeworCWNhc2UgIiR2ZXJib3NlIiBpbgorCScnKQorCQlvdXRwdXQ9JCgiJEAiIDI+JjEgKQorCQlzdGF0dXM9JD8KKwkJdGVzdCAkc3RhdHVzICE9IDAgJiYgcHJpbnRmICIlc1xuIiAiJG91dHB1dCIKKwkJcmV0dXJuICRzdGF0dXMKKwkJOzsKKwkqKQorCQkiJEAiCisJCTs7CisJZXNhYworfQorCiBzdHJhdGVneV9hcmdzPSR7c3RyYXRlZ3k6Ky0tc3RyYXRlZ3k9JHN0cmF0ZWd5fQogdGVzdCAtbiAiJHN0cmF0ZWd5X29wdHMiICYmCiBldmFsICcKZGlmZiAtLWdpdCBhL2dpdC1zZW5kLWVtYWlsLnBlcmwgYi9naXQtc2VuZC1lbWFpbC5wZXJsCmluZGV4IDI0ODU5YTcuLjVmOTJjODkgMTAwNzU1Ci0tLSBhL2dpdC1zZW5kLWVtYWlsLnBlcmwKKysrIGIvZ2l0LXNlbmQtZW1haWwucGVybApAQCAtMTc3LDExICsxNzcsMTUgQEAKIG15ICRyZV9lbmNvZGVkX3dvcmQgPSBxci89XD8oJHJlX3Rva2VuKVw/KCRyZV90b2tlbilcPygkcmVfZW5jb2RlZF90ZXh0KVw/PS87CiAKICMgVmFyaWFibGVzIHdlIGZpbGwgaW4gYXV0b21hdGljYWxseSwgb3IgdmlhIHByb21wdGluZzoKLW15IChAdG8sJG5vX3RvLEBpbml0aWFsX3RvLEBjYywkbm9fY2MsQGluaXRpYWxfY2MsQGJjY2xpc3QsJG5vX2JjYyxAeGgsCitteSAoQHRvLEBjYyxAeGgsJGVudmVsb3BlX3NlbmRlciwKIAkkaW5pdGlhbF9pbl9yZXBseV90bywkcmVwbHlfdG8sJGluaXRpYWxfc3ViamVjdCxAZmlsZXMsCi0JJGF1dGhvciwkc2VuZGVyLCRzbXRwX2F1dGhwYXNzLCRhbm5vdGF0ZSwkdXNlX3htYWlsZXIsJGNvbXBvc2UsJHRpbWUpOwotCi1teSAkZW52ZWxvcGVfc2VuZGVyOworCSRhdXRob3IsJHNlbmRlciwkc210cF9hdXRocGFzcywkYW5ub3RhdGUsJGNvbXBvc2UsJHRpbWUpOworIyBUaGluZ3Mgd2UgZWl0aGVyIGdldCBmcm9tIGNvbmZpZywgKm9yKiBhcmUgb3ZlcnJpZGRlbiBvbiB0aGUKKyMgY29tbWFuZC1saW5lLgorbXkgKCRub19jYywgJG5vX3RvLCAkbm9fYmNjLCAkbm9faWRlbnRpdHkpOworbXkgKEBjb25maWdfdG8sIEBnZXRvcHRfdG8pOworbXkgKEBjb25maWdfY2MsIEBnZXRvcHRfY2MpOworbXkgKEBjb25maWdfYmNjLCBAZ2V0b3B0X2JjYyk7CiAKICMgRXhhbXBsZSByZXBseSB0bzoKICMkaW5pdGlhbF9pbl9yZXBseV90byA9ICcnOyAjPDIwMDUwMjAzMTczMjA4LkdBMjM5NjRAZm9vYmFyLmNvbT4nOwpAQCAtMjI4LDMzICsyMzIsMzcgQEAKIH0KIAogIyBWYXJpYWJsZXMgd2l0aCBjb3JyZXNwb25kaW5nIGNvbmZpZyBzZXR0aW5ncwotbXkgKCR0aHJlYWQsICRjaGFpbl9yZXBseV90bywgJHN1cHByZXNzX2Zyb20sICRzaWduZWRfb2ZmX2J5X2NjKTsKK215ICgkc3VwcHJlc3NfZnJvbSwgJHNpZ25lZF9vZmZfYnlfY2MpOwogbXkgKCRjb3Zlcl9jYywgJGNvdmVyX3RvKTsKIG15ICgkdG9fY21kLCAkY2NfY21kKTsKIG15ICgkc210cF9zZXJ2ZXIsICRzbXRwX3NlcnZlcl9wb3J0LCBAc210cF9zZXJ2ZXJfb3B0aW9ucyk7CiBteSAoJHNtdHBfYXV0aHVzZXIsICRzbXRwX2VuY3J5cHRpb24sICRzbXRwX3NzbF9jZXJ0X3BhdGgpOwogbXkgKCRiYXRjaF9zaXplLCAkcmVsb2dpbl9kZWxheSk7CiBteSAoJGlkZW50aXR5LCAkYWxpYXNmaWxldHlwZSwgQGFsaWFzX2ZpbGVzLCAkc210cF9kb21haW4sICRzbXRwX2F1dGgpOwotbXkgKCR2YWxpZGF0ZSwgJGNvbmZpcm0pOworbXkgKCRjb25maXJtKTsKIG15IChAc3VwcHJlc3NfY2MpOwogbXkgKCRhdXRvXzhiaXRfZW5jb2RpbmcpOwogbXkgKCRjb21wb3NlX2VuY29kaW5nKTsKKyMgVmFyaWFibGVzIHdpdGggY29ycmVzcG9uZGluZyBjb25maWcgc2V0dGluZ3MgJiBoYXJkY29kZWQgZGVmYXVsdHMKK215ICgkZGVidWdfbmV0X3NtdHApID0gMDsJCSMgTmV0OjpTTVRQLCBzZWUgc2VuZF9tZXNzYWdlKCkKK215ICR0aHJlYWQgPSAxOworbXkgJGNoYWluX3JlcGx5X3RvID0gMDsKK215ICR1c2VfeG1haWxlciA9IDE7CitteSAkdmFsaWRhdGUgPSAxOwogbXkgJHRhcmdldF94ZmVyX2VuY29kaW5nID0gJ2F1dG8nOwogCi1teSAoJGRlYnVnX25ldF9zbXRwKSA9IDA7CQkjIE5ldDo6U01UUCwgc2VlIHNlbmRfbWVzc2FnZSgpCi0KIG15ICVjb25maWdfYm9vbF9zZXR0aW5ncyA9ICgKLSAgICAidGhyZWFkIiA9PiBbXCR0aHJlYWQsIDFdLAotICAgICJjaGFpbnJlcGx5dG8iID0+IFtcJGNoYWluX3JlcGx5X3RvLCAwXSwKLSAgICAic3VwcHJlc3Nmcm9tIiA9PiBbXCRzdXBwcmVzc19mcm9tLCB1bmRlZl0sCi0gICAgInNpZ25lZG9mZmJ5Y2MiID0+IFtcJHNpZ25lZF9vZmZfYnlfY2MsIHVuZGVmXSwKLSAgICAiY2Njb3ZlciIgPT4gW1wkY292ZXJfY2MsIHVuZGVmXSwKLSAgICAidG9jb3ZlciIgPT4gW1wkY292ZXJfdG8sIHVuZGVmXSwKLSAgICAic2lnbmVkb2ZmY2MiID0+IFtcJHNpZ25lZF9vZmZfYnlfY2MsIHVuZGVmXSwgICAgICAjIERlcHJlY2F0ZWQKLSAgICAidmFsaWRhdGUiID0+IFtcJHZhbGlkYXRlLCAxXSwKLSAgICAibXVsdGllZGl0IiA9PiBbXCRtdWx0aWVkaXQsIHVuZGVmXSwKLSAgICAiYW5ub3RhdGUiID0+IFtcJGFubm90YXRlLCB1bmRlZl0sCi0gICAgInhtYWlsZXIiID0+IFtcJHVzZV94bWFpbGVyLCAxXQorICAgICJ0aHJlYWQiID0+IFwkdGhyZWFkLAorICAgICJjaGFpbnJlcGx5dG8iID0+IFwkY2hhaW5fcmVwbHlfdG8sCisgICAgInN1cHByZXNzZnJvbSIgPT4gXCRzdXBwcmVzc19mcm9tLAorICAgICJzaWduZWRvZmZieWNjIiA9PiBcJHNpZ25lZF9vZmZfYnlfY2MsCisgICAgImNjY292ZXIiID0+IFwkY292ZXJfY2MsCisgICAgInRvY292ZXIiID0+IFwkY292ZXJfdG8sCisgICAgInNpZ25lZG9mZmNjIiA9PiBcJHNpZ25lZF9vZmZfYnlfY2MsCisgICAgInZhbGlkYXRlIiA9PiBcJHZhbGlkYXRlLAorICAgICJtdWx0aWVkaXQiID0+IFwkbXVsdGllZGl0LAorICAgICJhbm5vdGF0ZSIgPT4gXCRhbm5vdGF0ZSwKKyAgICAieG1haWxlciIgPT4gXCR1c2VfeG1haWxlciwKICk7CiAKIG15ICVjb25maWdfc2V0dGluZ3MgPSAoCkBAIC0yNjcsMTIgKzI3NSwxMiBAQAogICAgICJzbXRwYXV0aCIgPT4gXCRzbXRwX2F1dGgsCiAgICAgInNtdHBiYXRjaHNpemUiID0+IFwkYmF0Y2hfc2l6ZSwKICAgICAic210cHJlbG9naW5kZWxheSIgPT4gXCRyZWxvZ2luX2RlbGF5LAotICAgICJ0byIgPT4gXEBpbml0aWFsX3RvLAorICAgICJ0byIgPT4gXEBjb25maWdfdG8sCiAgICAgInRvY21kIiA9PiBcJHRvX2NtZCwKLSAgICAiY2MiID0+IFxAaW5pdGlhbF9jYywKKyAgICAiY2MiID0+IFxAY29uZmlnX2NjLAogICAgICJjY2NtZCIgPT4gXCRjY19jbWQsCiAgICAgImFsaWFzZmlsZXR5cGUiID0+IFwkYWxpYXNmaWxldHlwZSwKLSAgICAiYmNjIiA9PiBcQGJjY2xpc3QsCisgICAgImJjYyIgPT4gXEBjb25maWdfYmNjLAogICAgICJzdXBwcmVzc2NjIiA9PiBcQHN1cHByZXNzX2NjLAogICAgICJlbnZlbG9wZXNlbmRlciIgPT4gXCRlbnZlbG9wZV9zZW5kZXIsCiAgICAgImNvbmZpcm0iICAgPT4gXCRjb25maXJtLApAQCAtMzE1LDEzICszMjMsODcgQEAKICRTSUd7VEVSTX0gPSBcJnNpZ25hbF9oYW5kbGVyOwogJFNJR3tJTlR9ICA9IFwmc2lnbmFsX2hhbmRsZXI7CiAKKyMgUmVhZCBvdXIgc2VuZGVtYWlsLiogY29uZmlnCitzdWIgcmVhZF9jb25maWcgeworCW15ICgkY29uZmlndXJlZCwgJHByZWZpeCkgPSBAXzsKKworCWZvcmVhY2ggbXkgJHNldHRpbmcgKGtleXMgJWNvbmZpZ19ib29sX3NldHRpbmdzKSB7CisJCW15ICR0YXJnZXQgPSAkY29uZmlnX2Jvb2xfc2V0dGluZ3N7JHNldHRpbmd9OworCQlteSAkdiA9IEdpdDo6Y29uZmlnX2Jvb2woQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIik7CisJCW5leHQgdW5sZXNzIGRlZmluZWQgJHY7CisJCW5leHQgaWYgJGNvbmZpZ3VyZWQtPnskc2V0dGluZ30rKzsKKwkJJCR0YXJnZXQgPSAkdjsKKwl9CisKKwlmb3JlYWNoIG15ICRzZXR0aW5nIChrZXlzICVjb25maWdfcGF0aF9zZXR0aW5ncykgeworCQlteSAkdGFyZ2V0ID0gJGNvbmZpZ19wYXRoX3NldHRpbmdzeyRzZXR0aW5nfTsKKwkJaWYgKHJlZigkdGFyZ2V0KSBlcSAiQVJSQVkiKSB7CisJCQlteSBAdmFsdWVzID0gR2l0Ojpjb25maWdfcGF0aChAcmVwbywgIiRwcmVmaXguJHNldHRpbmciKTsKKwkJCW5leHQgdW5sZXNzIEB2YWx1ZXM7CisJCQluZXh0IGlmICRjb25maWd1cmVkLT57JHNldHRpbmd9Kys7CisJCQlAJHRhcmdldCA9IEB2YWx1ZXM7CisJCX0KKwkJZWxzZSB7CisJCQlteSAkdiA9IEdpdDo6Y29uZmlnX3BhdGgoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIik7CisJCQluZXh0IHVubGVzcyBkZWZpbmVkICR2OworCQkJbmV4dCBpZiAkY29uZmlndXJlZC0+eyRzZXR0aW5nfSsrOworCQkJJCR0YXJnZXQgPSAkdjsKKwkJfQorCX0KKworCWZvcmVhY2ggbXkgJHNldHRpbmcgKGtleXMgJWNvbmZpZ19zZXR0aW5ncykgeworCQlteSAkdGFyZ2V0ID0gJGNvbmZpZ19zZXR0aW5nc3skc2V0dGluZ307CisJCWlmIChyZWYoJHRhcmdldCkgZXEgIkFSUkFZIikgeworCQkJbXkgQHZhbHVlcyA9IEdpdDo6Y29uZmlnKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpOworCQkJbmV4dCB1bmxlc3MgQHZhbHVlczsKKwkJCW5leHQgaWYgJGNvbmZpZ3VyZWQtPnskc2V0dGluZ30rKzsKKwkJCUAkdGFyZ2V0ID0gQHZhbHVlczsKKwkJfQorCQllbHNlIHsKKwkJCW15ICR2ID0gR2l0Ojpjb25maWcoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIik7CisJCQluZXh0IHVubGVzcyBkZWZpbmVkICR2OworCQkJbmV4dCBpZiAkY29uZmlndXJlZC0+eyRzZXR0aW5nfSsrOworCQkJJCR0YXJnZXQgPSAkdjsKKwkJfQorCX0KKworCWlmICghZGVmaW5lZCAkc210cF9lbmNyeXB0aW9uKSB7CisJCW15ICRzZXR0aW5nID0gIiRwcmVmaXguc210cGVuY3J5cHRpb24iOworCQlteSAkZW5jID0gR2l0Ojpjb25maWcoQHJlcG8sICRzZXR0aW5nKTsKKwkJcmV0dXJuIHVubGVzcyBkZWZpbmVkICRlbmM7CisJCXJldHVybiBpZiAkY29uZmlndXJlZC0+eyRzZXR0aW5nfSsrOworCQlpZiAoZGVmaW5lZCAkZW5jKSB7CisJCQkkc210cF9lbmNyeXB0aW9uID0gJGVuYzsKKwkJfSBlbHNpZiAoR2l0Ojpjb25maWdfYm9vbChAcmVwbywgIiRwcmVmaXguc210cHNzbCIpKSB7CisJCQkkc210cF9lbmNyeXB0aW9uID0gJ3NzbCc7CisJCX0KKwl9Cit9CisKKyMgc2VuZGVtYWlsLmlkZW50aXR5IHlpZWxkcyB0byAtLWlkZW50aXR5LiBXZSBtdXN0IHBhcnNlIHRoaXMKKyMgc3BlY2lhbC1jYXNlIGZpcnN0IGJlZm9yZSB0aGUgcmVzdCBvZiB0aGUgY29uZmlnIGlzIHJlYWQuCiskaWRlbnRpdHkgPSBHaXQ6OmNvbmZpZyhAcmVwbywgInNlbmRlbWFpbC5pZGVudGl0eSIpOworbXkgJHJjID0gR2V0T3B0aW9ucygKKwkiaWRlbnRpdHk9cyIgPT4gXCRpZGVudGl0eSwKKwkibm8taWRlbnRpdHkiID0+IFwkbm9faWRlbnRpdHksCispOwordXNhZ2UoKSB1bmxlc3MgJHJjOwordW5kZWYgJGlkZW50aXR5IGlmICRub19pZGVudGl0eTsKKworIyBOb3cgd2Uga25vdyBlbm91Z2ggdG8gcmVhZCB0aGUgY29uZmlnCit7CisgICAgbXkgJWNvbmZpZ3VyZWQ7CisgICAgcmVhZF9jb25maWcoXCVjb25maWd1cmVkLCAic2VuZGVtYWlsLiRpZGVudGl0eSIpIGlmIGRlZmluZWQgJGlkZW50aXR5OworICAgIHJlYWRfY29uZmlnKFwlY29uZmlndXJlZCwgInNlbmRlbWFpbCIpOworfQorCiAjIEJlZ2luIGJ5IGFjY3VtdWxhdGluZyBhbGwgdGhlIHZhcmlhYmxlcyAoZGVmaW5lZCBhYm92ZSksIHRoYXQgd2Ugd2lsbCBlbmQgdXAKICMgbmVlZGluZywgZmlyc3QsIGZyb20gdGhlIGNvbW1hbmQgbGluZToKIAogbXkgJGhlbHA7CiBteSAkZ2l0X2NvbXBsZXRpb25faGVscGVyOwotbXkgJHJjID0gR2V0T3B0aW9ucygiaCIgPT4gXCRoZWxwLAotICAgICAgICAgICAgICAgICAgICAiZHVtcC1hbGlhc2VzIiA9PiBcJGR1bXBfYWxpYXNlcyk7CiskcmMgPSBHZXRPcHRpb25zKCJoIiA9PiBcJGhlbHAsCisgICAgICAgICAgICAgICAgICJkdW1wLWFsaWFzZXMiID0+IFwkZHVtcF9hbGlhc2VzKTsKIHVzYWdlKCkgdW5sZXNzICRyYzsKIGRpZSBfXygiLS1kdW1wLWFsaWFzZXMgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgb3B0aW9uc1xuIikKICAgICBpZiAhJGhlbHAgYW5kICRkdW1wX2FsaWFzZXMgYW5kIEBBUkdWOwpAQCAtMzMwLDEyICs0MTIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgImluLXJlcGx5LXRvPXMiID0+IFwkaW5pdGlhbF9pbl9yZXBseV90bywKIAkJICAgICJyZXBseS10bz1zIiA9PiBcJHJlcGx5X3RvLAogCQkgICAgInN1YmplY3Q9cyIgPT4gXCRpbml0aWFsX3N1YmplY3QsCi0JCSAgICAidG89cyIgPT4gXEBpbml0aWFsX3RvLAorCQkgICAgInRvPXMiID0+IFxAZ2V0b3B0X3RvLAogCQkgICAgInRvLWNtZD1zIiA9PiBcJHRvX2NtZCwKIAkJICAgICJuby10byIgPT4gXCRub190bywKLQkJICAgICJjYz1zIiA9PiBcQGluaXRpYWxfY2MsCisJCSAgICAiY2M9cyIgPT4gXEBnZXRvcHRfY2MsCiAJCSAgICAibm8tY2MiID0+IFwkbm9fY2MsCi0JCSAgICAiYmNjPXMiID0+IFxAYmNjbGlzdCwKKwkJICAgICJiY2M9cyIgPT4gXEBnZXRvcHRfYmNjLAogCQkgICAgIm5vLWJjYyIgPT4gXCRub19iY2MsCiAJCSAgICAiY2hhaW4tcmVwbHktdG8hIiA9PiBcJGNoYWluX3JlcGx5X3RvLAogCQkgICAgIm5vLWNoYWluLXJlcGx5LXRvIiA9PiBzdWIgeyRjaGFpbl9yZXBseV90byA9IDB9LApAQCAtMzUxLDcgKzQzMyw2IEBACiAJCSAgICAic210cC1kb21haW46cyIgPT4gXCRzbXRwX2RvbWFpbiwKIAkJICAgICJzbXRwLWF1dGg9cyIgPT4gXCRzbXRwX2F1dGgsCiAJCSAgICAibm8tc210cC1hdXRoIiA9PiBzdWIgeyRzbXRwX2F1dGggPSAnbm9uZSd9LAotCQkgICAgImlkZW50aXR5PXMiID0+IFwkaWRlbnRpdHksCiAJCSAgICAiYW5ub3RhdGUhIiA9PiBcJGFubm90YXRlLAogCQkgICAgIm5vLWFubm90YXRlIiA9PiBzdWIgeyRhbm5vdGF0ZSA9IDB9LAogCQkgICAgImNvbXBvc2UiID0+IFwkY29tcG9zZSwKQEAgLTM4Niw2ICs0NjcsMTEgQEAKIAkJICAgICJnaXQtY29tcGxldGlvbi1oZWxwZXIiID0+IFwkZ2l0X2NvbXBsZXRpb25faGVscGVyLAogCSApOwogCisjIE11bmdlIGFueSAiZWl0aGVyIGNvbmZpZyBvciBnZXRvcHQsIG5vdCBib3RoIiB2YXJpYWJsZXMKK215IEBpbml0aWFsX3RvID0gQGdldG9wdF90byA/IEBnZXRvcHRfdG8gOiAoJG5vX3RvID8gKCkgOiBAY29uZmlnX3RvKTsKK215IEBpbml0aWFsX2NjID0gQGdldG9wdF9jYyA/IEBnZXRvcHRfY2MgOiAoJG5vX2NjID8gKCkgOiBAY29uZmlnX2NjKTsKK215IEBpbml0aWFsX2JjYyA9IEBnZXRvcHRfYmNjID8gQGdldG9wdF9iY2MgOiAoJG5vX2JjYyA/ICgpIDogQGNvbmZpZ19iY2MpOworCiB1c2FnZSgpIGlmICRoZWxwOwogY29tcGxldGlvbl9oZWxwZXIoKSBpZiAkZ2l0X2NvbXBsZXRpb25faGVscGVyOwogdW5sZXNzICgkcmMpIHsKQEAgLTM5OSw2NSArNDg1LDYgQEAKIAkiKHZpYSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJhdGlvbiBvcHRpb24pXG4iKQogCWlmIGRlZmluZWQgJHJlbG9naW5fZGVsYXkgYW5kIG5vdCBkZWZpbmVkICRiYXRjaF9zaXplOwogCi0jIE5vdywgbGV0J3MgZmlsbCBhbnkgdGhhdCBhcmVuJ3Qgc2V0IGluIHdpdGggZGVmYXVsdHM6Ci0KLXN1YiByZWFkX2NvbmZpZyB7Ci0JbXkgKCRwcmVmaXgpID0gQF87Ci0KLQlmb3JlYWNoIG15ICRzZXR0aW5nIChrZXlzICVjb25maWdfYm9vbF9zZXR0aW5ncykgewotCQlteSAkdGFyZ2V0ID0gJGNvbmZpZ19ib29sX3NldHRpbmdzeyRzZXR0aW5nfS0+WzBdOwotCQkkJHRhcmdldCA9IEdpdDo6Y29uZmlnX2Jvb2woQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIikgdW5sZXNzIChkZWZpbmVkICQkdGFyZ2V0KTsKLQl9Ci0KLQlmb3JlYWNoIG15ICRzZXR0aW5nIChrZXlzICVjb25maWdfcGF0aF9zZXR0aW5ncykgewotCQlteSAkdGFyZ2V0ID0gJGNvbmZpZ19wYXRoX3NldHRpbmdzeyRzZXR0aW5nfTsKLQkJaWYgKHJlZigkdGFyZ2V0KSBlcSAiQVJSQVkiKSB7Ci0JCQl1bmxlc3MgKEAkdGFyZ2V0KSB7Ci0JCQkJbXkgQHZhbHVlcyA9IEdpdDo6Y29uZmlnX3BhdGgoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIik7Ci0JCQkJQCR0YXJnZXQgPSBAdmFsdWVzIGlmIChAdmFsdWVzICYmIGRlZmluZWQgJHZhbHVlc1swXSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQkkJHRhcmdldCA9IEdpdDo6Y29uZmlnX3BhdGgoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIikgdW5sZXNzIChkZWZpbmVkICQkdGFyZ2V0KTsKLQkJfQotCX0KLQotCWZvcmVhY2ggbXkgJHNldHRpbmcgKGtleXMgJWNvbmZpZ19zZXR0aW5ncykgewotCQlteSAkdGFyZ2V0ID0gJGNvbmZpZ19zZXR0aW5nc3skc2V0dGluZ307Ci0JCW5leHQgaWYgJHNldHRpbmcgZXEgInRvIiBhbmQgZGVmaW5lZCAkbm9fdG87Ci0JCW5leHQgaWYgJHNldHRpbmcgZXEgImNjIiBhbmQgZGVmaW5lZCAkbm9fY2M7Ci0JCW5leHQgaWYgJHNldHRpbmcgZXEgImJjYyIgYW5kIGRlZmluZWQgJG5vX2JjYzsKLQkJaWYgKHJlZigkdGFyZ2V0KSBlcSAiQVJSQVkiKSB7Ci0JCQl1bmxlc3MgKEAkdGFyZ2V0KSB7Ci0JCQkJbXkgQHZhbHVlcyA9IEdpdDo6Y29uZmlnKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpOwotCQkJCUAkdGFyZ2V0ID0gQHZhbHVlcyBpZiAoQHZhbHVlcyAmJiBkZWZpbmVkICR2YWx1ZXNbMF0pOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJJCR0YXJnZXQgPSBHaXQ6OmNvbmZpZyhAcmVwbywgIiRwcmVmaXguJHNldHRpbmciKSB1bmxlc3MgKGRlZmluZWQgJCR0YXJnZXQpOwotCQl9Ci0JfQotCi0JaWYgKCFkZWZpbmVkICRzbXRwX2VuY3J5cHRpb24pIHsKLQkJbXkgJGVuYyA9IEdpdDo6Y29uZmlnKEByZXBvLCAiJHByZWZpeC5zbXRwZW5jcnlwdGlvbiIpOwotCQlpZiAoZGVmaW5lZCAkZW5jKSB7Ci0JCQkkc210cF9lbmNyeXB0aW9uID0gJGVuYzsKLQkJfSBlbHNpZiAoR2l0Ojpjb25maWdfYm9vbChAcmVwbywgIiRwcmVmaXguc210cHNzbCIpKSB7Ci0JCQkkc210cF9lbmNyeXB0aW9uID0gJ3NzbCc7Ci0JCX0KLQl9Ci19Ci0KLSMgcmVhZCBjb25maWd1cmF0aW9uIGZyb20gW3NlbmRlbWFpbCAiJGlkZW50aXR5Il0sIGZhbGwgYmFjayBvbiBbc2VuZGVtYWlsXQotJGlkZW50aXR5ID0gR2l0Ojpjb25maWcoQHJlcG8sICJzZW5kZW1haWwuaWRlbnRpdHkiKSB1bmxlc3MgKGRlZmluZWQgJGlkZW50aXR5KTsKLXJlYWRfY29uZmlnKCJzZW5kZW1haWwuJGlkZW50aXR5IikgaWYgKGRlZmluZWQgJGlkZW50aXR5KTsKLXJlYWRfY29uZmlnKCJzZW5kZW1haWwiKTsKLQotIyBmYWxsIGJhY2sgb24gYnVpbHRpbiBib29sIGRlZmF1bHRzCi1mb3JlYWNoIG15ICRzZXR0aW5nICh2YWx1ZXMgJWNvbmZpZ19ib29sX3NldHRpbmdzKSB7Ci0JJHskc2V0dGluZy0+WzBdfSA9ICRzZXR0aW5nLT5bMV0gdW5sZXNzIChkZWZpbmVkICgkeyRzZXR0aW5nLT5bMF19KSk7Ci19Ci0KICMgJ2RlZmF1bHQnIGVuY3J5cHRpb24gaXMgbm9uZSAtLSB0aGlzIG9ubHkgcHJldmVudHMgYSB3YXJuaW5nCiAkc210cF9lbmNyeXB0aW9uID0gJycgdW5sZXNzIChkZWZpbmVkICRzbXRwX2VuY3J5cHRpb24pOwogCkBAIC05NDEsNyArOTY4LDcgQEAKIAogQGluaXRpYWxfdG8gPSBwcm9jZXNzX2FkZHJlc3NfbGlzdChAaW5pdGlhbF90byk7CiBAaW5pdGlhbF9jYyA9IHByb2Nlc3NfYWRkcmVzc19saXN0KEBpbml0aWFsX2NjKTsKLUBiY2NsaXN0ID0gcHJvY2Vzc19hZGRyZXNzX2xpc3QoQGJjY2xpc3QpOworQGluaXRpYWxfYmNjID0gcHJvY2Vzc19hZGRyZXNzX2xpc3QoQGluaXRpYWxfYmNjKTsKIAogaWYgKCR0aHJlYWQgJiYgIWRlZmluZWQgJGluaXRpYWxfaW5fcmVwbHlfdG8gJiYgJHByb21wdGluZykgewogCSRpbml0aWFsX2luX3JlcGx5X3RvID0gYXNrKApAQCAtMTM2NCw3ICsxMzkxLDcgQEAKIAkJICAgIH0KIAkgICAgICAgQGNjKTsKIAlteSAkdG8gPSBqb2luICgiLFxuXHQiLCBAcmVjaXBpZW50cyk7Ci0JQHJlY2lwaWVudHMgPSB1bmlxdWVfZW1haWxfbGlzdChAcmVjaXBpZW50cyxAY2MsQGJjY2xpc3QpOworCUByZWNpcGllbnRzID0gdW5pcXVlX2VtYWlsX2xpc3QoQHJlY2lwaWVudHMsQGNjLEBpbml0aWFsX2JjYyk7CiAJQHJlY2lwaWVudHMgPSAobWFwIHsgZXh0cmFjdF92YWxpZF9hZGRyZXNzX29yX2RpZSgkXykgfSBAcmVjaXBpZW50cyk7CiAJbXkgJGRhdGUgPSBmb3JtYXRfMjgyMl90aW1lKCR0aW1lKyspOwogCW15ICRnaXR2ZXJzaW9uID0gJ0BAR0lUX1ZFUlNJT05AQCc7CmRpZmYgLS1naXQgYS9naXQtc2gtaTE4bi5zaCBiL2dpdC1zaC1pMThuLnNoCmluZGV4IGUxZDkxN2YuLjhlZWY2MGIgMTAwNjQ0Ci0tLSBhL2dpdC1zaC1pMThuLnNoCisrKyBiL2dpdC1zaC1pMThuLnNoCkBAIC0xNyw3ICsxNyw5IEBACiAKICMgRmlyc3QgZGVjaWRlIHdoYXQgc2NoZW1lIHRvIHVzZS4uLgogR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FPWZhbGx0aHJvdWdoCi1pZiB0ZXN0IC1uICIkR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04iCitpZiB0ZXN0IC1uICIkR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04iICYmCisJICAgIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9MCAtLWV4aXQtY29kZSBcCisJCUdJVF9URVNUX0dFVFRFWFRfUE9JU09OCiB0aGVuCiAJR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FPXBvaXNvbgogZWxpZiB0ZXN0IC1uICJAQFVTRV9HRVRURVhUX1NDSEVNRUBAIgpkaWZmIC0tZ2l0IGEvZ2l0LmMgYi9naXQuYwppbmRleCAxYmY5Yzk0Li5jMWVlNzEyIDEwMDY0NAotLS0gYS9naXQuYworKysgYi9naXQuYwpAQCAtMzMsNyArMzMsOCBAQAogY29uc3QgY2hhciBnaXRfbW9yZV9pbmZvX3N0cmluZ1tdID0KIAlOXygiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgogCSAgICJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCi0JICAgInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuIik7CisJICAgInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuXG4iCisJICAgIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iKTsKIAogc3RhdGljIGludCB1c2VfcGFnZXIgPSAtMTsKIApAQCAtNDk5LDYgKzUwMCw3IEBACiAJeyAiZGlmZi1pbmRleCIsIGNtZF9kaWZmX2luZGV4LCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAogCXsgImRpZmYtdHJlZSIsIGNtZF9kaWZmX3RyZWUsIFJVTl9TRVRVUCB8IE5PX1BBUlNFT1BUIH0sCiAJeyAiZGlmZnRvb2wiLCBjbWRfZGlmZnRvb2wsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJlbnYtLWhlbHBlciIsIGNtZF9lbnZfX2hlbHBlciB9LAogCXsgImZhc3QtZXhwb3J0IiwgY21kX2Zhc3RfZXhwb3J0LCBSVU5fU0VUVVAgfSwKIAl7ICJmZXRjaCIsIGNtZF9mZXRjaCwgUlVOX1NFVFVQIH0sCiAJeyAiZmV0Y2gtcGFjayIsIGNtZF9mZXRjaF9wYWNrLCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LApAQCAtNTQ5LDEyICs1NTEsNyBAQAogCXsgInB1c2giLCBjbWRfcHVzaCwgUlVOX1NFVFVQIH0sCiAJeyAicmFuZ2UtZGlmZiIsIGNtZF9yYW5nZV9kaWZmLCBSVU5fU0VUVVAgfCBVU0VfUEFHRVIgfSwKIAl7ICJyZWFkLXRyZWUiLCBjbWRfcmVhZF90cmVlLCBSVU5fU0VUVVAgfCBTVVBQT1JUX1NVUEVSX1BSRUZJWH0sCi0JLyoKLQkgKiBORUVEU1dPUks6IFVudGlsIHRoZSByZWJhc2UgaXMgaW5kZXBlbmRlbnQgYW5kIG5lZWRzIG5vIHJlZGlyZWN0aW9uCi0JICogdG8gcmViYXNlIHNoZWxsIHNjcmlwdCB0aGlzIGlzIGtlcHQgYXMgaXMsIHRoZW4gc2hvdWxkIGJlIGNoYW5nZWQgdG8KLQkgKiBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRQotCSAqLwotCXsgInJlYmFzZSIsIGNtZF9yZWJhc2UgfSwKKwl7ICJyZWJhc2UiLCBjbWRfcmViYXNlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAogCXsgInJlYmFzZS0taW50ZXJhY3RpdmUiLCBjbWRfcmViYXNlX19pbnRlcmFjdGl2ZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKIAl7ICJyZWNlaXZlLXBhY2siLCBjbWRfcmVjZWl2ZV9wYWNrIH0sCiAJeyAicmVmbG9nIiwgY21kX3JlZmxvZywgUlVOX1NFVFVQIH0sCkBAIC01NjUsNiArNTYyLDcgQEAKIAl7ICJyZXBsYWNlIiwgY21kX3JlcGxhY2UsIFJVTl9TRVRVUCB9LAogCXsgInJlcmVyZSIsIGNtZF9yZXJlcmUsIFJVTl9TRVRVUCB9LAogCXsgInJlc2V0IiwgY21kX3Jlc2V0LCBSVU5fU0VUVVAgfSwKKwl7ICJyZXN0b3JlIiwgY21kX3Jlc3RvcmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCiAJeyAicmV2LWxpc3QiLCBjbWRfcmV2X2xpc3QsIFJVTl9TRVRVUCB8IE5PX1BBUlNFT1BUIH0sCiAJeyAicmV2LXBhcnNlIiwgY21kX3Jldl9wYXJzZSwgTk9fUEFSU0VPUFQgfSwKIAl7ICJyZXZlcnQiLCBjbWRfcmV2ZXJ0LCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LApAQCAtNTg1LDYgKzU4Myw3IEBACiAJeyAic3RhdHVzIiwgY21kX3N0YXR1cywgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKIAl7ICJzdHJpcHNwYWNlIiwgY21kX3N0cmlwc3BhY2UgfSwKIAl7ICJzdWJtb2R1bGUtLWhlbHBlciIsIGNtZF9zdWJtb2R1bGVfX2hlbHBlciwgUlVOX1NFVFVQIHwgU1VQUE9SVF9TVVBFUl9QUkVGSVggfCBOT19QQVJTRU9QVCB9LAorCXsgInN3aXRjaCIsIGNtZF9zd2l0Y2gsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCiAJeyAic3ltYm9saWMtcmVmIiwgY21kX3N5bWJvbGljX3JlZiwgUlVOX1NFVFVQIH0sCiAJeyAidGFnIiwgY21kX3RhZywgUlVOX1NFVFVQIHwgREVMQVlfUEFHRVJfQ09ORklHIH0sCiAJeyAidW5wYWNrLWZpbGUiLCBjbWRfdW5wYWNrX2ZpbGUsIFJVTl9TRVRVUCB8IE5PX1BBUlNFT1BUIH0sCkBAIC03NDAsOCArNzM5LDYgQEAKIAkJICovCiAJCWlmICghZG9uZV9hbGlhcykKIAkJCWhhbmRsZV9idWlsdGluKCphcmdjcCwgKmFyZ3YpOwotCi0jaWYgMCAvLyBUT0RPIEluIEdGVywgbmVlZCB0byBhbWVuZCBhNzkyNGI2NTVlOTQwYjA2Y2I1NDdjMjM1ZDZiZWQ5NzY3OTI5NjczIHRvIGluY2x1ZGUgdHJhY2UyXyBhbmQgX3RyMiBsaW5lcy4KIAkJZWxzZSBpZiAoZ2V0X2J1aWx0aW4oKiphcmd2KSkgewogCQkJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKIAkJCWludCBpOwpAQCAtNzc2LDcgKzc3Myw2IEBACiAJCQkJZXhpdChpKTsKIAkJCWRpZSgiY291bGQgbm90IGV4ZWN1dGUgYnVpbHRpbiAlcyIsICoqYXJndik7CiAJCX0KLSNlbmRpZiAvLyBhNzkyNGI2NTVlOTQwYjA2Y2I1NDdjMjM1ZDZiZWQ5NzY3OTI5NjczCiAKIAkJLyogLi4gdGhlbiB0cnkgdGhlIGV4dGVybmFsIG9uZXMgKi8KIAkJZXhlY3ZfZGFzaGVkX2V4dGVybmFsKCphcmd2KTsKZGlmZiAtLWdpdCBhL2dpdC5yYyBiL2dpdC5yYwppbmRleCA0OTAwMmUwLi5jYzNmZGM2IDEwMDY0NAotLS0gYS9naXQucmMKKysrIGIvZ2l0LnJjCkBAIC0yMCwzICsyMCw1IEBACiAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDEyMDAKICAgRU5ECiBFTkQKKworMSBSVF9NQU5JRkVTVCAiY29tcGF0L3dpbjMyL2dpdC5tYW5pZmVzdCIKZGlmZiAtLWdpdCBhL2dwZy1pbnRlcmZhY2UuYyBiL2dwZy1pbnRlcmZhY2UuYwppbmRleCA4ZWQyNzQ1Li5kNjAxMTVjIDEwMDY0NAotLS0gYS9ncGctaW50ZXJmYWNlLmMKKysrIGIvZ3BnLWludGVyZmFjZS5jCkBAIC0xMTYsNiArMTE2LDkgQEAKIAlmb3IgKGxpbmUgPSBidWY7ICpsaW5lOyBsaW5lID0gc3RyY2hybnVsKGxpbmUrMSwgJ1xuJykpIHsKIAkJd2hpbGUgKCpsaW5lID09ICdcbicpCiAJCQlsaW5lKys7CisJCWlmICghKmxpbmUpCisJCQlicmVhazsKKwogCQkvKiBTa2lwIGxpbmVzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCBHTlVQRyBzdGF0dXMgKi8KIAkJaWYgKCFza2lwX3ByZWZpeChsaW5lLCAiW0dOVVBHOl0gIiwgJmxpbmUpKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9ncmVwLmMgYi9ncmVwLmMKaW5kZXggZjdjM2E1OC4uY2Q5NTJlZiAxMDA2NDQKLS0tIGEvZ3JlcC5jCisrKyBiL2dyZXAuYwpAQCAtNTU5LDcgKzU1OSw3IEBACiAJCXBjcmUyX2ppdF9zdGFja19hc3NpZ24ocC0+cGNyZTJfbWF0Y2hfY29udGV4dCwgTlVMTCwgcC0+cGNyZTJfaml0X3N0YWNrKTsKIAl9IGVsc2UgaWYgKHAtPnBjcmUyX2ppdF9vbiAhPSAwKSB7CiAJCUJVRygiVGhlIHBjcmUyX2ppdF9vbiB2YXJpYWJsZSBzaG91bGQgYmUgMCBvciAxLCBub3QgJWQiLAotCQkgICAgcC0+cGNyZTFfaml0X29uKTsKKwkJICAgIHAtPnBjcmUyX2ppdF9vbik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9oYXNoLmggYi9oYXNoLmgKaW5kZXggNjYxYzlmMi4uNTJhNGYxYSAxMDA2NDQKLS0tIGEvaGFzaC5oCisrKyBiL2hhc2guaApAQCAtMTM5LDQgKzEzOSwyOCBAQAogCXJldHVybiBwIC0gaGFzaF9hbGdvczsKIH0KIAorLyogVGhlIGxlbmd0aCBpbiBieXRlcyBhbmQgaW4gaGV4IGRpZ2l0cyBvZiBhbiBvYmplY3QgbmFtZSAoU0hBLTEgdmFsdWUpLiAqLworI2RlZmluZSBHSVRfU0hBMV9SQVdTWiAyMAorI2RlZmluZSBHSVRfU0hBMV9IRVhTWiAoMiAqIEdJVF9TSEExX1JBV1NaKQorLyogVGhlIGJsb2NrIHNpemUgb2YgU0hBLTEuICovCisjZGVmaW5lIEdJVF9TSEExX0JMS1NaIDY0CisKKy8qIFRoZSBsZW5ndGggaW4gYnl0ZXMgYW5kIGluIGhleCBkaWdpdHMgb2YgYW4gb2JqZWN0IG5hbWUgKFNIQS0yNTYgdmFsdWUpLiAqLworI2RlZmluZSBHSVRfU0hBMjU2X1JBV1NaIDMyCisjZGVmaW5lIEdJVF9TSEEyNTZfSEVYU1ogKDIgKiBHSVRfU0hBMjU2X1JBV1NaKQorLyogVGhlIGJsb2NrIHNpemUgb2YgU0hBLTI1Ni4gKi8KKyNkZWZpbmUgR0lUX1NIQTI1Nl9CTEtTWiA2NAorCisvKiBUaGUgbGVuZ3RoIGluIGJ5dGUgYW5kIGluIGhleCBkaWdpdHMgb2YgdGhlIGxhcmdlc3QgcG9zc2libGUgaGFzaCB2YWx1ZS4gKi8KKyNkZWZpbmUgR0lUX01BWF9SQVdTWiBHSVRfU0hBMjU2X1JBV1NaCisjZGVmaW5lIEdJVF9NQVhfSEVYU1ogR0lUX1NIQTI1Nl9IRVhTWgorLyogVGhlIGxhcmdlc3QgcG9zc2libGUgYmxvY2sgc2l6ZSBmb3IgYW55IHN1cHBvcnRlZCBoYXNoLiAqLworI2RlZmluZSBHSVRfTUFYX0JMS1NaIEdJVF9TSEEyNTZfQkxLU1oKKworc3RydWN0IG9iamVjdF9pZCB7CisJdW5zaWduZWQgY2hhciBoYXNoW0dJVF9NQVhfUkFXU1pdOworfTsKKworI2RlZmluZSB0aGVfaGFzaF9hbGdvIHRoZV9yZXBvc2l0b3J5LT5oYXNoX2FsZ28KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9oYXNobWFwLmggYi9oYXNobWFwLmgKaW5kZXggZjk1NTkzYi4uODQyNDkxMSAxMDA2NDQKLS0tIGEvaGFzaG1hcC5oCisrKyBiL2hhc2htYXAuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgSEFTSE1BUF9ICiAjZGVmaW5lIEhBU0hNQVBfSAogCisjaW5jbHVkZSAiaGFzaC5oIgorCiAvKgogICogR2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoLWJhc2VkIGtleS12YWx1ZSBtYXBwaW5ncy4KICAqCkBAIC0xMTgsMTQgKzEyMCwxNCBAQAogICogdGhlIHJlc3VsdHMgd2lsbCBiZSBkaWZmZXJlbnQgb24gYmlnLWVuZGlhbiBhbmQgbGl0dGxlLWVuZGlhbgogICogcGxhdGZvcm1zLCBzbyB0aGV5IHNob3VsZCBub3QgYmUgc3RvcmVkIG9yIHRyYW5zZmVycmVkIG92ZXIgdGhlIG5ldC4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2hhMWhhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9pZGhhc2goY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewogCS8qCi0JICogRXF1aXZhbGVudCB0byAncmV0dXJuICoodW5zaWduZWQgaW50ICopc2hhMTsnLCBidXQgc2FmZSBvbgorCSAqIEVxdWl2YWxlbnQgdG8gJ3JldHVybiAqKHVuc2lnbmVkIGludCAqKW9pZC0+aGFzaDsnLCBidXQgc2FmZSBvbgogCSAqIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHJlYWRzLgogCSAqLwogCXVuc2lnbmVkIGludCBoYXNoOwotCW1lbWNweSgmaGFzaCwgc2hhMSwgc2l6ZW9mKGhhc2gpKTsKKwltZW1jcHkoJmhhc2gsIG9pZC0+aGFzaCwgc2l6ZW9mKGhhc2gpKTsKIAlyZXR1cm4gaGFzaDsKIH0KIApkaWZmIC0tZ2l0IGEvaGVscC5jIGIvaGVscC5jCmluZGV4IGE5ZTQ1MWYuLjUyNjFkODMgMTAwNjQ0Ci0tLSBhL2hlbHAuYworKysgYi9oZWxwLmMKQEAgLTc1NCwxOSArNzU0LDE5IEBACiB7CiAJc3RydWN0IHNpbWlsYXJfcmVmX2NiICpjYiA9IChzdHJ1Y3Qgc2ltaWxhcl9yZWZfY2IgKikoY2JfZGF0YSk7CiAJY2hhciAqYnJhbmNoID0gc3RycmNocihyZWZuYW1lLCAnLycpICsgMTsKLQljb25zdCBjaGFyICpyZW1vdGU7CiAKIAkvKiBBIHJlbW90ZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBpcyBkZWVtZWQgc2ltaWxhciAqLwotCWlmIChza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIsICZyZW1vdGUpICYmCisJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikgJiYKIAkgICAgIXN0cmNtcChicmFuY2gsIGNiLT5iYXNlX3JlZikpCi0JCXN0cmluZ19saXN0X2FwcGVuZChjYi0+c2ltaWxhcl9yZWZzLCByZW1vdGUpOworCQlzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoY2ItPnNpbWlsYXJfcmVmcywKKwkJCQkJIHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKHJlZm5hbWUsIDEpKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBndWVzc19yZWZzKGNvbnN0IGNoYXIgKnJlZikKIHsKIAlzdHJ1Y3Qgc2ltaWxhcl9yZWZfY2IgcmVmX2NiOwotCXN0cnVjdCBzdHJpbmdfbGlzdCBzaW1pbGFyX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzaW1pbGFyX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKIAogCXJlZl9jYi5iYXNlX3JlZiA9IHJlZjsKIAlyZWZfY2Iuc2ltaWxhcl9yZWZzID0gJnNpbWlsYXJfcmVmczsKZGlmZiAtLWdpdCBhL2h0dHAtcHVzaC5jIGIvaHR0cC1wdXNoLmMKaW5kZXggZTM2NTYxYS4uMDM1M2Y5ZiAxMDA2NDQKLS0tIGEvaHR0cC1wdXNoLmMKKysrIGIvaHR0cC1wdXNoLmMKQEAgLTcyMyw3ICs3MjMsNyBAQAogewogCXN0cnVjdCBvYmplY3QgKm9iajsKIAotCW9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZC0+aGFzaCk7CisJb2JqID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKIAlpZiAoIW9iaikKIAkJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOwogCkBAIC0xNDMyLDcgKzE0MzIsNyBAQAogCSAqIG1heSBiZSByZXF1aXJlZCBmb3IgdXBkYXRpbmcgc2VydmVyIGluZm8gbGF0ZXIuCiAJICovCiAJaWYgKHJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzICYmICFoYXNfb2JqZWN0X2ZpbGUoJnJlZi0+b2xkX29pZCkpIHsKLQkJb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KHJlZi0+b2xkX29pZC5oYXNoKTsKKwkJb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KCZyZWYtPm9sZF9vaWQpOwogCQlmcHJpbnRmKHN0ZGVyciwJIiAgZmV0Y2ggJXMgZm9yICVzXG4iLAogCQkJb2lkX3RvX2hleCgmcmVmLT5vbGRfb2lkKSwgcmVmbmFtZSk7CiAJCWFkZF9mZXRjaF9yZXF1ZXN0KG9iaik7CmRpZmYgLS1naXQgYS9raGFzaC5oIGIva2hhc2guaAppbmRleCBhZjc0N2E2Li4yMWMyMDk1IDEwMDY0NAotLS0gYS9raGFzaC5oCisrKyBiL2toYXNoLmgKQEAgLTMyNCwzMCArMzI0LDIwIEBACiAJCWNvZGU7CQkJCQkJCQkJCQkJXAogCX0gfQogCi0jZGVmaW5lIF9fa2hfb2lkX2NtcChhLCBiKSAoaGFzaGNtcChhLCBiKSA9PSAwKQotCi1LSEFTSF9JTklUKHNoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdm9pZCAqLCAxLCBzaGExaGFzaCwgX19raF9vaWRfY21wKQotdHlwZWRlZiBraF9zaGExX3Qga2hhc2hfc2hhMTsKLQotS0hBU0hfSU5JVChzaGExX3BvcywgY29uc3QgdW5zaWduZWQgY2hhciAqLCBpbnQsIDEsIHNoYTFoYXNoLCBfX2toX29pZF9jbXApCi10eXBlZGVmIGtoX3NoYTFfcG9zX3Qga2hhc2hfc2hhMV9wb3M7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9pZF9oYXNoKHN0cnVjdCBvYmplY3RfaWQgb2lkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2lkaGFzaF9ieV92YWx1ZShzdHJ1Y3Qgb2JqZWN0X2lkIG9pZCkKIHsKLQlyZXR1cm4gc2hhMWhhc2gob2lkLmhhc2gpOworCXJldHVybiBvaWRoYXNoKCZvaWQpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBvaWRfZXF1YWwoc3RydWN0IG9iamVjdF9pZCBhLCBzdHJ1Y3Qgb2JqZWN0X2lkIGIpCitzdGF0aWMgaW5saW5lIGludCBvaWRlcV9ieV92YWx1ZShzdHJ1Y3Qgb2JqZWN0X2lkIGEsIHN0cnVjdCBvYmplY3RfaWQgYikKIHsKIAlyZXR1cm4gb2lkZXEoJmEsICZiKTsKIH0KIAotS0hBU0hfSU5JVChvaWQsIHN0cnVjdCBvYmplY3RfaWQsIGludCwgMCwgb2lkX2hhc2gsIG9pZF9lcXVhbCkKK0tIQVNIX0lOSVQob2lkX3NldCwgc3RydWN0IG9iamVjdF9pZCwgaW50LCAwLCBvaWRoYXNoX2J5X3ZhbHVlLCBvaWRlcV9ieV92YWx1ZSkKIAotS0hBU0hfSU5JVChvaWRfbWFwLCBzdHJ1Y3Qgb2JqZWN0X2lkLCB2b2lkICosIDEsIG9pZF9oYXNoLCBvaWRfZXF1YWwpCi10eXBlZGVmIGtoX29pZF90IGtoYXNoX29pZF9tYXA7CitLSEFTSF9JTklUKG9pZF9tYXAsIHN0cnVjdCBvYmplY3RfaWQsIHZvaWQgKiwgMSwgb2lkaGFzaF9ieV92YWx1ZSwgb2lkZXFfYnlfdmFsdWUpCiAKLUtIQVNIX0lOSVQob2lkX3Bvcywgc3RydWN0IG9iamVjdF9pZCwgaW50LCAxLCBvaWRfaGFzaCwgb2lkX2VxdWFsKQotdHlwZWRlZiBraF9vaWRfcG9zX3Qga2hhc2hfb2lkX3BvczsKK0tIQVNIX0lOSVQob2lkX3Bvcywgc3RydWN0IG9iamVjdF9pZCwgaW50LCAxLCBvaWRoYXNoX2J5X3ZhbHVlLCBvaWRlcV9ieV92YWx1ZSkKIAogI2VuZGlmIC8qIF9fQUNfS0hBU0hfSCAqLwpkaWZmIC0tZ2l0IGEva3dzZXQuYyBiL2t3c2V0LmMKaW5kZXggNGZiNjQ1NS4uZmM0MzllMCAxMDA2NDQKLS0tIGEva3dzZXQuYworKysgYi9rd3NldC5jCkBAIC0zOCw3ICszOCwxMyBAQAogI2luY2x1ZGUgImNvbXBhdC9vYnN0YWNrLmgiCiAKICNkZWZpbmUgTkNIQVIgKFVDSEFSX01BWCArIDEpCi0jZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MgeG1hbGxvYworLyogYWRhcHRlciBmb3IgYHhtYWxsb2MoKWAsIHdoaWNoIHRha2VzIGBzaXplX3RgLCBub3QgYGxvbmdgICovCitzdGF0aWMgdm9pZCAqb2JzdGFja19jaHVua19hbGxvYyhsb25nIHNpemUpCit7CisJaWYgKHNpemUgPCAwKQorCQlCVUcoIkNhbm5vdCBhbGxvY2F0ZSBhIG5lZ2F0aXZlIGFtb3VudDogJWxkIiwgc2l6ZSk7CisJcmV0dXJuIHhtYWxsb2Moc2l6ZSk7Cit9CiAjZGVmaW5lIG9ic3RhY2tfY2h1bmtfZnJlZSBmcmVlCiAKICNkZWZpbmUgVShjKSAoKHVuc2lnbmVkIGNoYXIpIChjKSkKQEAgLTQ3NSw3ICs0ODEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBOQ0hBUjsgKytpKQogCSAga3dzZXQtPm5leHRbaV0gPSBuZXh0W1UodHJhbnNbaV0pXTsKICAgICAgIGVsc2UKLQltZW1jcHkoa3dzZXQtPm5leHQsIG5leHQsIE5DSEFSICogc2l6ZW9mKHN0cnVjdCB0cmllICopKTsKKwlDT1BZX0FSUkFZKGt3c2V0LT5uZXh0LCBuZXh0LCBOQ0hBUik7CiAgICAgfQogCiAgIC8qIEZpeCB0aGluZ3MgdXAgZm9yIGFueSB0cmFuc2xhdGlvbiB0YWJsZS4gKi8KZGlmZiAtLWdpdCBhL2xpbmUtbG9nLmMgYi9saW5lLWxvZy5jCmluZGV4IDBhMTdiMjEuLjNhZmYxODQgMTAwNjQ0Ci0tLSBhL2xpbmUtbG9nLmMKKysrIGIvbGluZS1sb2cuYwpAQCAtNDk2LDEyICs0OTYsMTMgQEAKIAlyZXR1cm4gKHN0cnVjdCBjb21taXQgKikgY29tbWl0OwogfQogCi1zdGF0aWMgdm9pZCBmaWxsX2Jsb2Jfc2hhMShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjKQorc3RhdGljIHZvaWQgZmlsbF9ibG9iX3NoYTEoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjKQogewogCXVuc2lnbmVkIHNob3J0IG1vZGU7CiAJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAKLQlpZiAoZ2V0X3RyZWVfZW50cnkoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgc3BlYy0+cGF0aCwgJm9pZCwgJm1vZGUpKQorCWlmIChnZXRfdHJlZV9lbnRyeShyLCAmY29tbWl0LT5vYmplY3Qub2lkLCBzcGVjLT5wYXRoLCAmb2lkLCAmbW9kZSkpCiAJCWRpZSgiVGhlcmUgaXMgbm8gcGF0aCAlcyBpbiB0aGUgY29tbWl0Iiwgc3BlYy0+cGF0aCk7CiAJZmlsbF9maWxlc3BlYyhzcGVjLCAmb2lkLCAxLCBtb2RlKTsKIApAQCAtNTg1LDcgKzU4Niw3IEBACiAJCQkJCW5hbWVfcGFydCk7CiAKIAkJc3BlYyA9IGFsbG9jX2ZpbGVzcGVjKGZ1bGxfbmFtZSk7Ci0JCWZpbGxfYmxvYl9zaGExKGNvbW1pdCwgc3BlYyk7CisJCWZpbGxfYmxvYl9zaGExKHIsIGNvbW1pdCwgc3BlYyk7CiAJCWZpbGxfbGluZV9lbmRzKHIsIHNwZWMsICZsaW5lcywgJmVuZHMpOwogCQljYl9kYXRhLnNwZWMgPSBzcGVjOwogCQljYl9kYXRhLmxpbmVzID0gbGluZXM7CmRpZmYgLS1naXQgYS9saXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYyBiL2xpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jCmluZGV4IGExNWQwZjcuLjFjYjIwYzYgMTAwNjQ0Ci0tLSBhL2xpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jCisrKyBiL2xpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jCkBAIC05MSw3ICs5MSw3IEBACiAJICovCiAKIAlpZiAoZXJyYnVmKQotCQlzdHJidWZfYWRkZihlcnJidWYsICJpbnZhbGlkIGZpbHRlci1zcGVjICclcyciLCBhcmcpOworCQlzdHJidWZfYWRkZihlcnJidWYsIF8oImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIpLCBhcmcpOwogCiAJbWVtc2V0KGZpbHRlcl9vcHRpb25zLCAwLCBzaXplb2YoKmZpbHRlcl9vcHRpb25zKSk7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9tYXRjaC10cmVlcy5jIGIvbWF0Y2gtdHJlZXMuYwppbmRleCA5ZDFlYzhkLi5mNmMxOTRjIDEwMDY0NAotLS0gYS9tYXRjaC10cmVlcy5jCisrKyBiL21hdGNoLXRyZWVzLmMKQEAgLTI0OCw3ICsyNDgsOCBAQAogICogb3RoZXIgaGFuZCwgaXQgY291bGQgY292ZXIgdHJlZSBvbmUgYW5kIHdlIG1pZ2h0IG5lZWQgdG8gcGljayBhCiAgKiBzdWJ0cmVlIG9mIGl0LgogICovCi12b2lkIHNoaWZ0X3RyZWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaGFzaDEsCit2b2lkIHNoaWZ0X3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhhc2gxLAogCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpoYXNoMiwKIAkJc3RydWN0IG9iamVjdF9pZCAqc2hpZnRlZCwKIAkJaW50IGRlcHRoX2xpbWl0KQpAQCAtMjkwLDcgKzI5MSw3IEBACiAJCWlmICghKmRlbF9wcmVmaXgpCiAJCQlyZXR1cm47CiAKLQkJaWYgKGdldF90cmVlX2VudHJ5KGhhc2gyLCBkZWxfcHJlZml4LCBzaGlmdGVkLCAmbW9kZSkpCisJCWlmIChnZXRfdHJlZV9lbnRyeShyLCBoYXNoMiwgZGVsX3ByZWZpeCwgc2hpZnRlZCwgJm1vZGUpKQogCQkJZGllKCJjYW5ub3QgZmluZCBwYXRoICVzIGluIHRyZWUgJXMiLAogCQkJICAgIGRlbF9wcmVmaXgsIG9pZF90b19oZXgoaGFzaDIpKTsKIAkJcmV0dXJuOwpAQCAtMzA3LDcgKzMwOCw4IEBACiAgKiBVbmZvcnR1bmF0ZWx5IHdlIGNhbm5vdCBmdW5kYW1lbnRhbGx5IHRlbGwgd2hpY2ggb25lIHRvCiAgKiBiZSBwcmVmaXhlZCwgYXMgcmVjdXJzaXZlIG1lcmdlIGNhbiB3b3JrIGluIGVpdGhlciBkaXJlY3Rpb24uCiAgKi8KLXZvaWQgc2hpZnRfdHJlZV9ieShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpoYXNoMSwKK3ZvaWQgc2hpZnRfdHJlZV9ieShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaGFzaDEsCiAJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhhc2gyLAogCQkgICBzdHJ1Y3Qgb2JqZWN0X2lkICpzaGlmdGVkLAogCQkgICBjb25zdCBjaGFyICpzaGlmdF9wcmVmaXgpCkBAIC0zMTcsMTIgKzMxOSwxMiBAQAogCXVuc2lnbmVkIGNhbmRpZGF0ZSA9IDA7CiAKIAkvKiBDYW4gaGFzaDIgYmUgYSB0cmVlIGF0IHNoaWZ0X3ByZWZpeCBpbiB0cmVlIGhhc2gxPyAqLwotCWlmICghZ2V0X3RyZWVfZW50cnkoaGFzaDEsIHNoaWZ0X3ByZWZpeCwgJnN1YjEsICZtb2RlMSkgJiYKKwlpZiAoIWdldF90cmVlX2VudHJ5KHIsIGhhc2gxLCBzaGlmdF9wcmVmaXgsICZzdWIxLCAmbW9kZTEpICYmCiAJICAgIFNfSVNESVIobW9kZTEpKQogCQljYW5kaWRhdGUgfD0gMTsKIAogCS8qIENhbiBoYXNoMSBiZSBhIHRyZWUgYXQgc2hpZnRfcHJlZml4IGluIHRyZWUgaGFzaDI/ICovCi0JaWYgKCFnZXRfdHJlZV9lbnRyeShoYXNoMiwgc2hpZnRfcHJlZml4LCAmc3ViMiwgJm1vZGUyKSAmJgorCWlmICghZ2V0X3RyZWVfZW50cnkociwgaGFzaDIsIHNoaWZ0X3ByZWZpeCwgJnN1YjIsICZtb2RlMikgJiYKIAkgICAgU19JU0RJUihtb2RlMikpCiAJCWNhbmRpZGF0ZSB8PSAyOwogCmRpZmYgLS1naXQgYS9tZXJnZS1yZWN1cnNpdmUuYyBiL21lcmdlLXJlY3Vyc2l2ZS5jCmluZGV4IGQyZTM4MGIuLjEyMzAwMTMgMTAwNjQ0Ci0tLSBhL21lcmdlLXJlY3Vyc2l2ZS5jCisrKyBiL21lcmdlLXJlY3Vyc2l2ZS5jCkBAIC0xNTMsOSArMTUzLDkgQEAKIAlzdHJ1Y3Qgb2JqZWN0X2lkIHNoaWZ0ZWQ7CiAKIAlpZiAoISpzdWJ0cmVlX3NoaWZ0KSB7Ci0JCXNoaWZ0X3RyZWUoJm9uZS0+b2JqZWN0Lm9pZCwgJnR3by0+b2JqZWN0Lm9pZCwgJnNoaWZ0ZWQsIDApOworCQlzaGlmdF90cmVlKHJlcG8sICZvbmUtPm9iamVjdC5vaWQsICZ0d28tPm9iamVjdC5vaWQsICZzaGlmdGVkLCAwKTsKIAl9IGVsc2UgewotCQlzaGlmdF90cmVlX2J5KCZvbmUtPm9iamVjdC5vaWQsICZ0d28tPm9iamVjdC5vaWQsICZzaGlmdGVkLAorCQlzaGlmdF90cmVlX2J5KHJlcG8sICZvbmUtPm9iamVjdC5vaWQsICZ0d28tPm9iamVjdC5vaWQsICZzaGlmdGVkLAogCQkJICAgICAgc3VidHJlZV9zaGlmdCk7CiAJfQogCWlmIChvaWRlcSgmdHdvLT5vYmplY3Qub2lkLCAmc2hpZnRlZCkpCkBAIC00NjUsMTcgKzQ2NSwxOCBAQAogewogCXN0cnVjdCBwYXRoc3BlYyBtYXRjaF9hbGw7CiAJbWVtc2V0KCZtYXRjaF9hbGwsIDAsIHNpemVvZihtYXRjaF9hbGwpKTsKLQlyZWFkX3RyZWVfcmVjdXJzaXZlKHRoZV9yZXBvc2l0b3J5LCB0cmVlLCAiIiwgMCwgMCwKKwlyZWFkX3RyZWVfcmVjdXJzaXZlKG9wdC0+cmVwbywgdHJlZSwgIiIsIDAsIDAsCiAJCQkgICAgJm1hdGNoX2FsbCwgc2F2ZV9maWxlc19kaXJzLCBvcHQpOwogfQogCi1zdGF0aWMgaW50IGdldF90cmVlX2VudHJ5X2lmX2Jsb2IoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZSwKK3N0YXRpYyBpbnQgZ2V0X3RyZWVfZW50cnlfaWZfYmxvYihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRyZWUsCiAJCQkJICBjb25zdCBjaGFyICpwYXRoLAogCQkJCSAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmcykKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZ2V0X3RyZWVfZW50cnkodHJlZSwgcGF0aCwgJmRmcy0+b2lkLCAmZGZzLT5tb2RlKTsKKwlyZXQgPSBnZXRfdHJlZV9lbnRyeShyLCB0cmVlLCBwYXRoLCAmZGZzLT5vaWQsICZkZnMtPm1vZGUpOwogCWlmIChTX0lTRElSKGRmcy0+bW9kZSkpIHsKIAkJb2lkY3B5KCZkZnMtPm9pZCwgJm51bGxfb2lkKTsKIAkJZGZzLT5tb2RlID0gMDsKQEAgLTQ4NywxNSArNDg4LDE2IEBACiAgKiBSZXR1cm5zIGFuIGluZGV4X2VudHJ5IGluc3RhbmNlIHdoaWNoIGRvZXNuJ3QgaGF2ZSB0byBjb3JyZXNwb25kIHRvCiAgKiBhIHJlYWwgY2FjaGUgZW50cnkgaW4gR2l0J3MgaW5kZXguCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqaW5zZXJ0X3N0YWdlX2RhdGEoY29uc3QgY2hhciAqcGF0aCwKK3N0YXRpYyBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqaW5zZXJ0X3N0YWdlX2RhdGEoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCWNvbnN0IGNoYXIgKnBhdGgsCiAJCXN0cnVjdCB0cmVlICpvLCBzdHJ1Y3QgdHJlZSAqYSwgc3RydWN0IHRyZWUgKmIsCiAJCXN0cnVjdCBzdHJpbmdfbGlzdCAqZW50cmllcykKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKIAlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdGFnZV9kYXRhKSk7Ci0JZ2V0X3RyZWVfZW50cnlfaWZfYmxvYigmby0+b2JqZWN0Lm9pZCwgcGF0aCwgJmUtPnN0YWdlc1sxXSk7Ci0JZ2V0X3RyZWVfZW50cnlfaWZfYmxvYigmYS0+b2JqZWN0Lm9pZCwgcGF0aCwgJmUtPnN0YWdlc1syXSk7Ci0JZ2V0X3RyZWVfZW50cnlfaWZfYmxvYigmYi0+b2JqZWN0Lm9pZCwgcGF0aCwgJmUtPnN0YWdlc1szXSk7CisJZ2V0X3RyZWVfZW50cnlfaWZfYmxvYihyLCAmby0+b2JqZWN0Lm9pZCwgcGF0aCwgJmUtPnN0YWdlc1sxXSk7CisJZ2V0X3RyZWVfZW50cnlfaWZfYmxvYihyLCAmYS0+b2JqZWN0Lm9pZCwgcGF0aCwgJmUtPnN0YWdlc1syXSk7CisJZ2V0X3RyZWVfZW50cnlfaWZfYmxvYihyLCAmYi0+b2JqZWN0Lm9pZCwgcGF0aCwgJmUtPnN0YWdlc1szXSk7CiAJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChlbnRyaWVzLCBwYXRoKTsKIAlpdGVtLT51dGlsID0gZTsKIAlyZXR1cm4gZTsKQEAgLTE5MDAsMTIgKzE5MDIsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHRyZWVfaGFzX3BhdGgoc3RydWN0IHRyZWUgKnRyZWUsIGNvbnN0IGNoYXIgKnBhdGgpCitzdGF0aWMgaW50IHRyZWVfaGFzX3BhdGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB0cmVlICp0cmVlLAorCQkJIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJc3RydWN0IG9iamVjdF9pZCBoYXNoeTsKIAl1bnNpZ25lZCBzaG9ydCBtb2RlX287CiAKLQlyZXR1cm4gIWdldF90cmVlX2VudHJ5KCZ0cmVlLT5vYmplY3Qub2lkLCBwYXRoLAorCXJldHVybiAhZ2V0X3RyZWVfZW50cnkociwKKwkJCSAgICAgICAmdHJlZS0+b2JqZWN0Lm9pZCwgcGF0aCwKIAkJCSAgICAgICAmaGFzaHksICZtb2RlX28pOwogfQogCkBAIC0yMDU2LDcgKzIwNjAsNyBAQAogCSAqLwogCWlmIChjb2xsaXNpb25fZW50LT5yZXBvcnRlZF9hbHJlYWR5KSB7CiAJCWNsZWFuID0gMDsKLQl9IGVsc2UgaWYgKHRyZWVfaGFzX3BhdGgodHJlZSwgbmV3X3BhdGgpKSB7CisJfSBlbHNlIGlmICh0cmVlX2hhc19wYXRoKG9wdC0+cmVwbywgdHJlZSwgbmV3X3BhdGgpKSB7CiAJCWNvbGxpc2lvbl9lbnQtPnJlcG9ydGVkX2FscmVhZHkgPSAxOwogCQlzdHJidWZfYWRkX3NlcGFyYXRlZF9zdHJpbmdfbGlzdCgmY29sbGlzaW9uX3BhdGhzLCAiLCAiLAogCQkJCQkJICZjb2xsaXNpb25fZW50LT5zb3VyY2VfZmlsZXMpOwpAQCAtMjEzNCw3ICsyMTM4LDcgQEAKIAkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVtb3ZlX2Zyb21fbWVyZ2UsCiAJCQkJCSAgIG1lcmdlX2VudC0+ZGlyKS0+dXRpbCA9IG1lcmdlX2VudDsKIAkJCXN0cmJ1Zl9yZWxlYXNlKCZtZXJnZV9lbnQtPm5ld19kaXIpOwotCQl9IGVsc2UgaWYgKHRyZWVfaGFzX3BhdGgoaGVhZCwgaGVhZF9lbnQtPmRpcikpIHsKKwkJfSBlbHNlIGlmICh0cmVlX2hhc19wYXRoKG9wdC0+cmVwbywgaGVhZCwgaGVhZF9lbnQtPmRpcikpIHsKIAkJCS8qIDIuIFRoaXMgd2Fzbid0IGEgZGlyZWN0b3J5IHJlbmFtZSBhZnRlciBhbGwgKi8KIAkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVtb3ZlX2Zyb21faGVhZCwKIAkJCQkJICAgaGVhZF9lbnQtPmRpciktPnV0aWwgPSBoZWFkX2VudDsKQEAgLTIxNDgsNyArMjE1Miw3IEBACiAJaGFzaG1hcF9pdGVyX2luaXQoZGlyX3JlX21lcmdlLCAmaXRlcik7CiAJd2hpbGUgKChtZXJnZV9lbnQgPSBoYXNobWFwX2l0ZXJfbmV4dCgmaXRlcikpKSB7CiAJCWhlYWRfZW50ID0gZGlyX3JlbmFtZV9maW5kX2VudHJ5KGRpcl9yZV9oZWFkLCBtZXJnZV9lbnQtPmRpcik7Ci0JCWlmICh0cmVlX2hhc19wYXRoKG1lcmdlLCBtZXJnZV9lbnQtPmRpcikpIHsKKwkJaWYgKHRyZWVfaGFzX3BhdGgob3B0LT5yZXBvLCBtZXJnZSwgbWVyZ2VfZW50LT5kaXIpKSB7CiAJCQkvKiAyLiBUaGlzIHdhc24ndCBhIGRpcmVjdG9yeSByZW5hbWUgYWZ0ZXIgYWxsICovCiAJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlbW92ZV9mcm9tX21lcmdlLAogCQkJCQkgICBtZXJnZV9lbnQtPmRpciktPnV0aWwgPSBtZXJnZV9lbnQ7CkBAIC0yNDc3LDcgKzI0ODEsNyBAQAogCQlpZiAocGFpci0+c3RhdHVzID09ICdSJykKIAkJCXJlLT5kc3RfZW50cnktPnByb2Nlc3NlZCA9IDE7CiAKLQkJcmUtPmRzdF9lbnRyeSA9IGluc2VydF9zdGFnZV9kYXRhKG5ld19wYXRoLAorCQlyZS0+ZHN0X2VudHJ5ID0gaW5zZXJ0X3N0YWdlX2RhdGEob3B0LT5yZXBvLCBuZXdfcGF0aCwKIAkJCQkJCSAgb190cmVlLCBhX3RyZWUsIGJfdHJlZSwKIAkJCQkJCSAgZW50cmllcyk7CiAJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoZW50cmllcywgbmV3X3BhdGgpOwpAQCAtMjUwMCw3ICsyNTA0LDggQEAKIAkgKiB0aGUgdmFyaW91cyBoYW5kbGVfcmVuYW1lXyooKSBmdW5jdGlvbnMgdXBkYXRlIHRoZSBpbmRleAogCSAqIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB1bnBhY2tfdHJlZXMoKSB0byBoYXZlIGRvbmUgaXQuCiAJICovCi0JZ2V0X3RyZWVfZW50cnkoJnRyZWUtPm9iamVjdC5vaWQsCisJZ2V0X3RyZWVfZW50cnkob3B0LT5yZXBvLAorCQkgICAgICAgJnRyZWUtPm9iamVjdC5vaWQsCiAJCSAgICAgICBwYWlyLT50d28tPnBhdGgsCiAJCSAgICAgICAmcmUtPmRzdF9lbnRyeS0+c3RhZ2VzW3N0YWdlXS5vaWQsCiAJCSAgICAgICAmcmUtPmRzdF9lbnRyeS0+c3RhZ2VzW3N0YWdlXS5tb2RlKTsKQEAgLTI1ODUsMTQgKzI1OTAsMTYgQEAKIAkJcmUtPmRpcl9yZW5hbWVfb3JpZ2luYWxfZGVzdCA9IE5VTEw7CiAJCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoZW50cmllcywgcmUtPnBhaXItPm9uZS0+cGF0aCk7CiAJCWlmICghaXRlbSkKLQkJCXJlLT5zcmNfZW50cnkgPSBpbnNlcnRfc3RhZ2VfZGF0YShyZS0+cGFpci0+b25lLT5wYXRoLAorCQkJcmUtPnNyY19lbnRyeSA9IGluc2VydF9zdGFnZV9kYXRhKG9wdC0+cmVwbywKKwkJCQkJcmUtPnBhaXItPm9uZS0+cGF0aCwKIAkJCQkJb190cmVlLCBhX3RyZWUsIGJfdHJlZSwgZW50cmllcyk7CiAJCWVsc2UKIAkJCXJlLT5zcmNfZW50cnkgPSBpdGVtLT51dGlsOwogCiAJCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoZW50cmllcywgcmUtPnBhaXItPnR3by0+cGF0aCk7CiAJCWlmICghaXRlbSkKLQkJCXJlLT5kc3RfZW50cnkgPSBpbnNlcnRfc3RhZ2VfZGF0YShyZS0+cGFpci0+dHdvLT5wYXRoLAorCQkJcmUtPmRzdF9lbnRyeSA9IGluc2VydF9zdGFnZV9kYXRhKG9wdC0+cmVwbywKKwkJCQkJcmUtPnBhaXItPnR3by0+cGF0aCwKIAkJCQkJb190cmVlLCBhX3RyZWUsIGJfdHJlZSwgZW50cmllcyk7CiAJCWVsc2UKIAkJCXJlLT5kc3RfZW50cnkgPSBpdGVtLT51dGlsOwpkaWZmIC0tZ2l0IGEvbWlkeC5jIGIvbWlkeC5jCmluZGV4IGU3ZTFmZTQuLmQ2NDk2NDQgMTAwNjQ0Ci0tLSBhL21pZHguYworKysgYi9taWR4LmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAibWlkeC5oIgogI2luY2x1ZGUgInByb2dyZXNzLmgiCiAjaW5jbHVkZSAidHJhY2UyLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKIAogI2RlZmluZSBNSURYX1NJR05BVFVSRSAweDRkNDk0NDU4IC8qICJNSURYIiAqLwogI2RlZmluZSBNSURYX1ZFUlNJT04gMQpAQCAtMzQsNiArMzUsOCBAQAogI2RlZmluZSBNSURYX0NIVU5LX0xBUkdFX09GRlNFVF9XSURUSCAoc2l6ZW9mKHVpbnQ2NF90KSkKICNkZWZpbmUgTUlEWF9MQVJHRV9PRkZTRVRfTkVFREVEIDB4ODAwMDAwMDAKIAorI2RlZmluZSBQQUNLX0VYUElSRUQgVUlOVF9NQVgKKwogc3RhdGljIGNoYXIgKmdldF9taWR4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpCiB7CiAJcmV0dXJuIHhzdHJmbXQoIiVzL3BhY2svbXVsdGktcGFjay1pbmRleCIsIG9iamVjdF9kaXIpOwpAQCAtNDI3LDEzICs0MzAsMjQgQEAKIAlyZXR1cm4gTUlEWF9IRUFERVJfU0laRTsKIH0KIAorc3RydWN0IHBhY2tfaW5mbyB7CisJdWludDMyX3Qgb3JpZ19wYWNrX2ludF9pZDsKKwljaGFyICpwYWNrX25hbWU7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJdW5zaWduZWQgZXhwaXJlZCA6IDE7Cit9OworCitzdGF0aWMgaW50IHBhY2tfaW5mb19jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwlzdHJ1Y3QgcGFja19pbmZvICphID0gKHN0cnVjdCBwYWNrX2luZm8gKilfYTsKKwlzdHJ1Y3QgcGFja19pbmZvICpiID0gKHN0cnVjdCBwYWNrX2luZm8gKilfYjsKKwlyZXR1cm4gc3RyY21wKGEtPnBhY2tfbmFtZSwgYi0+cGFja19uYW1lKTsKK30KKwogc3RydWN0IHBhY2tfbGlzdCB7Ci0Jc3RydWN0IHBhY2tlZF9naXQgKipsaXN0OwotCWNoYXIgKipuYW1lczsKKwlzdHJ1Y3QgcGFja19pbmZvICppbmZvOwogCXVpbnQzMl90IG5yOwotCXVpbnQzMl90IGFsbG9jX2xpc3Q7Ci0JdWludDMyX3QgYWxsb2NfbmFtZXM7Ci0Jc2l6ZV90IHBhY2tfbmFtZV9jb25jYXRfbGVuOworCXVpbnQzMl90IGFsbG9jOwogCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptOwogfTsKIApAQCAtNDQ2LDY3ICs0NjAsMzMgQEAKIAkJaWYgKHBhY2tzLT5tICYmIG1pZHhfY29udGFpbnNfcGFjayhwYWNrcy0+bSwgZmlsZV9uYW1lKSkKIAkJCXJldHVybjsKIAotCQlBTExPQ19HUk9XKHBhY2tzLT5saXN0LCBwYWNrcy0+bnIgKyAxLCBwYWNrcy0+YWxsb2NfbGlzdCk7Ci0JCUFMTE9DX0dST1cocGFja3MtPm5hbWVzLCBwYWNrcy0+bnIgKyAxLCBwYWNrcy0+YWxsb2NfbmFtZXMpOworCQlBTExPQ19HUk9XKHBhY2tzLT5pbmZvLCBwYWNrcy0+bnIgKyAxLCBwYWNrcy0+YWxsb2MpOwogCi0JCXBhY2tzLT5saXN0W3BhY2tzLT5ucl0gPSBhZGRfcGFja2VkX2dpdChmdWxsX3BhdGgsCi0JCQkJCQkJZnVsbF9wYXRoX2xlbiwKLQkJCQkJCQkwKTsKKwkJcGFja3MtPmluZm9bcGFja3MtPm5yXS5wID0gYWRkX3BhY2tlZF9naXQoZnVsbF9wYXRoLAorCQkJCQkJCSAgZnVsbF9wYXRoX2xlbiwKKwkJCQkJCQkgIDApOwogCi0JCWlmICghcGFja3MtPmxpc3RbcGFja3MtPm5yXSkgeworCQlpZiAoIXBhY2tzLT5pbmZvW3BhY2tzLT5ucl0ucCkgewogCQkJd2FybmluZyhfKCJmYWlsZWQgdG8gYWRkIHBhY2tmaWxlICclcyciKSwKIAkJCQlmdWxsX3BhdGgpOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYgKG9wZW5fcGFja19pbmRleChwYWNrcy0+bGlzdFtwYWNrcy0+bnJdKSkgeworCQlpZiAob3Blbl9wYWNrX2luZGV4KHBhY2tzLT5pbmZvW3BhY2tzLT5ucl0ucCkpIHsKIAkJCXdhcm5pbmcoXygiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIiksCiAJCQkJZnVsbF9wYXRoKTsKLQkJCWNsb3NlX3BhY2socGFja3MtPmxpc3RbcGFja3MtPm5yXSk7Ci0JCQlGUkVFX0FORF9OVUxMKHBhY2tzLT5saXN0W3BhY2tzLT5ucl0pOworCQkJY2xvc2VfcGFjayhwYWNrcy0+aW5mb1twYWNrcy0+bnJdLnApOworCQkJRlJFRV9BTkRfTlVMTChwYWNrcy0+aW5mb1twYWNrcy0+bnJdLnApOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJcGFja3MtPm5hbWVzW3BhY2tzLT5ucl0gPSB4c3RyZHVwKGZpbGVfbmFtZSk7Ci0JCXBhY2tzLT5wYWNrX25hbWVfY29uY2F0X2xlbiArPSBzdHJsZW4oZmlsZV9uYW1lKSArIDE7CisJCXBhY2tzLT5pbmZvW3BhY2tzLT5ucl0ucGFja19uYW1lID0geHN0cmR1cChmaWxlX25hbWUpOworCQlwYWNrcy0+aW5mb1twYWNrcy0+bnJdLm9yaWdfcGFja19pbnRfaWQgPSBwYWNrcy0+bnI7CisJCXBhY2tzLT5pbmZvW3BhY2tzLT5ucl0uZXhwaXJlZCA9IDA7CiAJCXBhY2tzLT5ucisrOwogCX0KIH0KIAotc3RydWN0IHBhY2tfcGFpciB7Ci0JdWludDMyX3QgcGFja19pbnRfaWQ7Ci0JY2hhciAqcGFja19uYW1lOwotfTsKLQotc3RhdGljIGludCBwYWNrX3BhaXJfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCi17Ci0Jc3RydWN0IHBhY2tfcGFpciAqYSA9IChzdHJ1Y3QgcGFja19wYWlyICopX2E7Ci0Jc3RydWN0IHBhY2tfcGFpciAqYiA9IChzdHJ1Y3QgcGFja19wYWlyICopX2I7Ci0JcmV0dXJuIHN0cmNtcChhLT5wYWNrX25hbWUsIGItPnBhY2tfbmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNvcnRfcGFja3NfYnlfbmFtZShjaGFyICoqcGFja19uYW1lcywgdWludDMyX3QgbnJfcGFja3MsIHVpbnQzMl90ICpwZXJtKQotewotCXVpbnQzMl90IGk7Ci0Jc3RydWN0IHBhY2tfcGFpciAqcGFpcnM7Ci0KLQlBTExPQ19BUlJBWShwYWlycywgbnJfcGFja3MpOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX3BhY2tzOyBpKyspIHsKLQkJcGFpcnNbaV0ucGFja19pbnRfaWQgPSBpOwotCQlwYWlyc1tpXS5wYWNrX25hbWUgPSBwYWNrX25hbWVzW2ldOwotCX0KLQotCVFTT1JUKHBhaXJzLCBucl9wYWNrcywgcGFja19wYWlyX2NvbXBhcmUpOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX3BhY2tzOyBpKyspIHsKLQkJcGFja19uYW1lc1tpXSA9IHBhaXJzW2ldLnBhY2tfbmFtZTsKLQkJcGVybVtwYWlyc1tpXS5wYWNrX2ludF9pZF0gPSBpOwotCX0KLQotCWZyZWUocGFpcnMpOwotfQotCiBzdHJ1Y3QgcGFja19taWR4X2VudHJ5IHsKIAlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKIAl1aW50MzJfdCBwYWNrX2ludF9pZDsKQEAgLTUzMiw3ICs1MTIsNiBAQAogfQogCiBzdGF0aWMgaW50IG50aF9taWR4ZWRfcGFja19taWR4X2VudHJ5KHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLAotCQkJCSAgICAgIHVpbnQzMl90ICpwYWNrX3Blcm0sCiAJCQkJICAgICAgc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqZSwKIAkJCQkgICAgICB1aW50MzJfdCBwb3MpCiB7CkBAIC01NDAsNyArNTE5LDcgQEAKIAkJcmV0dXJuIDE7CiAKIAludGhfbWlkeGVkX29iamVjdF9vaWQoJmUtPm9pZCwgbSwgcG9zKTsKLQllLT5wYWNrX2ludF9pZCA9IHBhY2tfcGVybVtudGhfbWlkeGVkX3BhY2tfaW50X2lkKG0sIHBvcyldOworCWUtPnBhY2tfaW50X2lkID0gbnRoX21pZHhlZF9wYWNrX2ludF9pZChtLCBwb3MpOwogCWUtPm9mZnNldCA9IG50aF9taWR4ZWRfb2Zmc2V0KG0sIHBvcyk7CiAKIAkvKiBjb25zaWRlciBvYmplY3RzIGluIG1pZHggdG8gYmUgZnJvbSAib2xkIiBwYWNrcyAqLwpAQCAtNTc0LDggKzU1Myw3IEBACiAgKiBvZiBhIHBhY2tmaWxlIGNvbnRhaW5pbmcgdGhlIG9iamVjdCkuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpnZXRfc29ydGVkX2VudHJpZXMoc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sCi0JCQkJCQkgIHN0cnVjdCBwYWNrZWRfZ2l0ICoqcCwKLQkJCQkJCSAgdWludDMyX3QgKnBlcm0sCisJCQkJCQkgIHN0cnVjdCBwYWNrX2luZm8gKmluZm8sCiAJCQkJCQkgIHVpbnQzMl90IG5yX3BhY2tzLAogCQkJCQkJICB1aW50MzJfdCAqbnJfb2JqZWN0cykKIHsKQEAgLTU4Niw3ICs1NjQsNyBAQAogCXVpbnQzMl90IHN0YXJ0X3BhY2sgPSBtID8gbS0+bnVtX3BhY2tzIDogMDsKIAogCWZvciAoY3VyX3BhY2sgPSBzdGFydF9wYWNrOyBjdXJfcGFjayA8IG5yX3BhY2tzOyBjdXJfcGFjaysrKQotCQl0b3RhbF9vYmplY3RzICs9IHBbY3VyX3BhY2tdLT5udW1fb2JqZWN0czsKKwkJdG90YWxfb2JqZWN0cyArPSBpbmZvW2N1cl9wYWNrXS5wLT5udW1fb2JqZWN0czsKIAogCS8qCiAJICogQXMgd2UgZGUtZHVwbGljYXRlIGJ5IGZhbm91dCB2YWx1ZSwgd2UgZXhwZWN0IHRoZSBmYW5vdXQKQEAgLTYxMSw3ICs1ODksNyBAQAogCiAJCQlmb3IgKGN1cl9vYmplY3QgPSBzdGFydDsgY3VyX29iamVjdCA8IGVuZDsgY3VyX29iamVjdCsrKSB7CiAJCQkJQUxMT0NfR1JPVyhlbnRyaWVzX2J5X2Zhbm91dCwgbnJfZmFub3V0ICsgMSwgYWxsb2NfZmFub3V0KTsKLQkJCQludGhfbWlkeGVkX3BhY2tfbWlkeF9lbnRyeShtLCBwZXJtLAorCQkJCW50aF9taWR4ZWRfcGFja19taWR4X2VudHJ5KG0sCiAJCQkJCQkJICAgJmVudHJpZXNfYnlfZmFub3V0W25yX2Zhbm91dF0sCiAJCQkJCQkJICAgY3VyX29iamVjdCk7CiAJCQkJbnJfZmFub3V0Kys7CkBAIC02MjIsMTIgKzYwMCwxMiBAQAogCQkJdWludDMyX3Qgc3RhcnQgPSAwLCBlbmQ7CiAKIAkJCWlmIChjdXJfZmFub3V0KQotCQkJCXN0YXJ0ID0gZ2V0X3BhY2tfZmFub3V0KHBbY3VyX3BhY2tdLCBjdXJfZmFub3V0IC0gMSk7Ci0JCQllbmQgPSBnZXRfcGFja19mYW5vdXQocFtjdXJfcGFja10sIGN1cl9mYW5vdXQpOworCQkJCXN0YXJ0ID0gZ2V0X3BhY2tfZmFub3V0KGluZm9bY3VyX3BhY2tdLnAsIGN1cl9mYW5vdXQgLSAxKTsKKwkJCWVuZCA9IGdldF9wYWNrX2Zhbm91dChpbmZvW2N1cl9wYWNrXS5wLCBjdXJfZmFub3V0KTsKIAogCQkJZm9yIChjdXJfb2JqZWN0ID0gc3RhcnQ7IGN1cl9vYmplY3QgPCBlbmQ7IGN1cl9vYmplY3QrKykgewogCQkJCUFMTE9DX0dST1coZW50cmllc19ieV9mYW5vdXQsIG5yX2Zhbm91dCArIDEsIGFsbG9jX2Zhbm91dCk7Ci0JCQkJZmlsbF9wYWNrX2VudHJ5KHBlcm1bY3VyX3BhY2tdLCBwW2N1cl9wYWNrXSwgY3VyX29iamVjdCwgJmVudHJpZXNfYnlfZmFub3V0W25yX2Zhbm91dF0pOworCQkJCWZpbGxfcGFja19lbnRyeShjdXJfcGFjaywgaW5mb1tjdXJfcGFja10ucCwgY3VyX29iamVjdCwgJmVudHJpZXNfYnlfZmFub3V0W25yX2Zhbm91dF0pOwogCQkJCW5yX2Zhbm91dCsrOwogCQkJfQogCQl9CkBAIC02NTYsNyArNjM0LDcgQEAKIH0KIAogc3RhdGljIHNpemVfdCB3cml0ZV9taWR4X3BhY2tfbmFtZXMoc3RydWN0IGhhc2hmaWxlICpmLAotCQkJCSAgICBjaGFyICoqcGFja19uYW1lcywKKwkJCQkgICAgc3RydWN0IHBhY2tfaW5mbyAqaW5mbywKIAkJCQkgICAgdWludDMyX3QgbnVtX3BhY2tzKQogewogCXVpbnQzMl90IGk7CkBAIC02NjQsMTQgKzY0MiwxOCBAQAogCXNpemVfdCB3cml0dGVuID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFja3M7IGkrKykgewotCQlzaXplX3Qgd3JpdGVsZW4gPSBzdHJsZW4ocGFja19uYW1lc1tpXSkgKyAxOworCQlzaXplX3Qgd3JpdGVsZW47CiAKLQkJaWYgKGkgJiYgc3RyY21wKHBhY2tfbmFtZXNbaV0sIHBhY2tfbmFtZXNbaSAtIDFdKSA8PSAwKQorCQlpZiAoaW5mb1tpXS5leHBpcmVkKQorCQkJY29udGludWU7CisKKwkJaWYgKGkgJiYgc3RyY21wKGluZm9baV0ucGFja19uYW1lLCBpbmZvW2kgLSAxXS5wYWNrX25hbWUpIDw9IDApCiAJCQlCVUcoImluY29ycmVjdCBwYWNrLWZpbGUgb3JkZXI6ICVzIGJlZm9yZSAlcyIsCi0JCQkgICAgcGFja19uYW1lc1tpIC0gMV0sCi0JCQkgICAgcGFja19uYW1lc1tpXSk7CisJCQkgICAgaW5mb1tpIC0gMV0ucGFja19uYW1lLAorCQkJICAgIGluZm9baV0ucGFja19uYW1lKTsKIAotCQloYXNod3JpdGUoZiwgcGFja19uYW1lc1tpXSwgd3JpdGVsZW4pOworCQl3cml0ZWxlbiA9IHN0cmxlbihpbmZvW2ldLnBhY2tfbmFtZSkgKyAxOworCQloYXNod3JpdGUoZiwgaW5mb1tpXS5wYWNrX25hbWUsIHdyaXRlbGVuKTsKIAkJd3JpdHRlbiArPSB3cml0ZWxlbjsKIAl9CiAKQEAgLTc0Miw2ICs3MjQsNyBAQAogfQogCiBzdGF0aWMgc2l6ZV90IHdyaXRlX21pZHhfb2JqZWN0X29mZnNldHMoc3RydWN0IGhhc2hmaWxlICpmLCBpbnQgbGFyZ2Vfb2Zmc2V0X25lZWRlZCwKKwkJCQkJdWludDMyX3QgKnBlcm0sCiAJCQkJCXN0cnVjdCBwYWNrX21pZHhfZW50cnkgKm9iamVjdHMsIHVpbnQzMl90IG5yX29iamVjdHMpCiB7CiAJc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqbGlzdCA9IG9iamVjdHM7CkBAIC03NTEsNyArNzM0LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgewogCQlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpvYmogPSBsaXN0Kys7CiAKLQkJaGFzaHdyaXRlX2JlMzIoZiwgb2JqLT5wYWNrX2ludF9pZCk7CisJCWlmIChwZXJtW29iai0+cGFja19pbnRfaWRdID09IFBBQ0tfRVhQSVJFRCkKKwkJCUJVRygib2JqZWN0ICVzIGlzIGluIGFuIGV4cGlyZWQgcGFjayB3aXRoIGludC1pZCAlZCIsCisJCQkgICAgb2lkX3RvX2hleCgmb2JqLT5vaWQpLAorCQkJICAgIG9iai0+cGFja19pbnRfaWQpOworCisJCWhhc2h3cml0ZV9iZTMyKGYsIHBlcm1bb2JqLT5wYWNrX2ludF9pZF0pOwogCiAJCWlmIChsYXJnZV9vZmZzZXRfbmVlZGVkICYmIG9iai0+b2Zmc2V0ID4+IDMxKQogCQkJaGFzaHdyaXRlX2JlMzIoZiwgTUlEWF9MQVJHRV9PRkZTRVRfTkVFREVEIHwgbnJfbGFyZ2Vfb2Zmc2V0KyspOwpAQCAtNzk3LDcgKzc4NSw4IEBACiAJcmV0dXJuIHdyaXR0ZW47CiB9CiAKLWludCB3cml0ZV9taWR4X2ZpbGUoY29uc3QgY2hhciAqb2JqZWN0X2RpcikKK3N0YXRpYyBpbnQgd3JpdGVfbWlkeF9pbnRlcm5hbChjb25zdCBjaGFyICpvYmplY3RfZGlyLCBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhY2tzX3RvX2Ryb3ApCiB7CiAJdW5zaWduZWQgY2hhciBjdXJfY2h1bmssIG51bV9jaHVua3MgPSAwOwogCWNoYXIgKm1pZHhfbmFtZTsKQEAgLTgxMiw2ICs4MDEsOSBAQAogCXVpbnQzMl90IG5yX2VudHJpZXMsIG51bV9sYXJnZV9vZmZzZXRzID0gMDsKIAlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICplbnRyaWVzID0gTlVMTDsKIAlpbnQgbGFyZ2Vfb2Zmc2V0c19uZWVkZWQgPSAwOworCWludCBwYWNrX25hbWVfY29uY2F0X2xlbiA9IDA7CisJaW50IGRyb3BwZWRfcGFja3MgPSAwOworCWludCByZXN1bHQgPSAwOwogCiAJbWlkeF9uYW1lID0gZ2V0X21pZHhfZmlsZW5hbWUob2JqZWN0X2Rpcik7CiAJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMobWlkeF9uYW1lKSkgewpAQCAtODIwLDQyICs4MTIsMzQgQEAKIAkJCSAgbWlkeF9uYW1lKTsKIAl9CiAKLQlwYWNrcy5tID0gbG9hZF9tdWx0aV9wYWNrX2luZGV4KG9iamVjdF9kaXIsIDEpOworCWlmIChtKQorCQlwYWNrcy5tID0gbTsKKwllbHNlCisJCXBhY2tzLm0gPSBsb2FkX211bHRpX3BhY2tfaW5kZXgob2JqZWN0X2RpciwgMSk7CiAKIAlwYWNrcy5uciA9IDA7Ci0JcGFja3MuYWxsb2NfbGlzdCA9IHBhY2tzLm0gPyBwYWNrcy5tLT5udW1fcGFja3MgOiAxNjsKLQlwYWNrcy5hbGxvY19uYW1lcyA9IHBhY2tzLmFsbG9jX2xpc3Q7Ci0JcGFja3MubGlzdCA9IE5VTEw7Ci0JcGFja3MubmFtZXMgPSBOVUxMOwotCXBhY2tzLnBhY2tfbmFtZV9jb25jYXRfbGVuID0gMDsKLQlBTExPQ19BUlJBWShwYWNrcy5saXN0LCBwYWNrcy5hbGxvY19saXN0KTsKLQlBTExPQ19BUlJBWShwYWNrcy5uYW1lcywgcGFja3MuYWxsb2NfbmFtZXMpOworCXBhY2tzLmFsbG9jID0gcGFja3MubSA/IHBhY2tzLm0tPm51bV9wYWNrcyA6IDE2OworCXBhY2tzLmluZm8gPSBOVUxMOworCUFMTE9DX0FSUkFZKHBhY2tzLmluZm8sIHBhY2tzLmFsbG9jKTsKIAogCWlmIChwYWNrcy5tKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBwYWNrcy5tLT5udW1fcGFja3M7IGkrKykgewotCQkJQUxMT0NfR1JPVyhwYWNrcy5saXN0LCBwYWNrcy5uciArIDEsIHBhY2tzLmFsbG9jX2xpc3QpOwotCQkJQUxMT0NfR1JPVyhwYWNrcy5uYW1lcywgcGFja3MubnIgKyAxLCBwYWNrcy5hbGxvY19uYW1lcyk7CisJCQlBTExPQ19HUk9XKHBhY2tzLmluZm8sIHBhY2tzLm5yICsgMSwgcGFja3MuYWxsb2MpOwogCi0JCQlwYWNrcy5saXN0W3BhY2tzLm5yXSA9IE5VTEw7Ci0JCQlwYWNrcy5uYW1lc1twYWNrcy5ucl0gPSB4c3RyZHVwKHBhY2tzLm0tPnBhY2tfbmFtZXNbaV0pOwotCQkJcGFja3MucGFja19uYW1lX2NvbmNhdF9sZW4gKz0gc3RybGVuKHBhY2tzLm5hbWVzW3BhY2tzLm5yXSkgKyAxOworCQkJcGFja3MuaW5mb1twYWNrcy5ucl0ub3JpZ19wYWNrX2ludF9pZCA9IGk7CisJCQlwYWNrcy5pbmZvW3BhY2tzLm5yXS5wYWNrX25hbWUgPSB4c3RyZHVwKHBhY2tzLm0tPnBhY2tfbmFtZXNbaV0pOworCQkJcGFja3MuaW5mb1twYWNrcy5ucl0ucCA9IE5VTEw7CisJCQlwYWNrcy5pbmZvW3BhY2tzLm5yXS5leHBpcmVkID0gMDsKIAkJCXBhY2tzLm5yKys7CiAJCX0KIAl9CiAKIAlmb3JfZWFjaF9maWxlX2luX3BhY2tfZGlyKG9iamVjdF9kaXIsIGFkZF9wYWNrX3RvX21pZHgsICZwYWNrcyk7CiAKLQlpZiAocGFja3MubSAmJiBwYWNrcy5uciA9PSBwYWNrcy5tLT5udW1fcGFja3MpCisJaWYgKHBhY2tzLm0gJiYgcGFja3MubnIgPT0gcGFja3MubS0+bnVtX3BhY2tzICYmICFwYWNrc190b19kcm9wKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAocGFja3MucGFja19uYW1lX2NvbmNhdF9sZW4gJSBNSURYX0NIVU5LX0FMSUdOTUVOVCkKLQkJcGFja3MucGFja19uYW1lX2NvbmNhdF9sZW4gKz0gTUlEWF9DSFVOS19BTElHTk1FTlQgLQotCQkJCQkgICAgICAocGFja3MucGFja19uYW1lX2NvbmNhdF9sZW4gJSBNSURYX0NIVU5LX0FMSUdOTUVOVCk7Ci0KLQlBTExPQ19BUlJBWShwYWNrX3Blcm0sIHBhY2tzLm5yKTsKLQlzb3J0X3BhY2tzX2J5X25hbWUocGFja3MubmFtZXMsIHBhY2tzLm5yLCBwYWNrX3Blcm0pOwotCi0JZW50cmllcyA9IGdldF9zb3J0ZWRfZW50cmllcyhwYWNrcy5tLCBwYWNrcy5saXN0LCBwYWNrX3Blcm0sIHBhY2tzLm5yLCAmbnJfZW50cmllcyk7CisJZW50cmllcyA9IGdldF9zb3J0ZWRfZW50cmllcyhwYWNrcy5tLCBwYWNrcy5pbmZvLCBwYWNrcy5uciwgJm5yX2VudHJpZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX2VudHJpZXM7IGkrKykgewogCQlpZiAoZW50cmllc1tpXS5vZmZzZXQgPiAweDdmZmZmZmZmKQpAQCAtODY0LDYgKzg0OCw2MSBAQAogCQkJbGFyZ2Vfb2Zmc2V0c19uZWVkZWQgPSAxOwogCX0KIAorCVFTT1JUKHBhY2tzLmluZm8sIHBhY2tzLm5yLCBwYWNrX2luZm9fY29tcGFyZSk7CisKKwlpZiAocGFja3NfdG9fZHJvcCAmJiBwYWNrc190b19kcm9wLT5ucikgeworCQlpbnQgZHJvcF9pbmRleCA9IDA7CisJCWludCBtaXNzaW5nX2Ryb3BzID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgcGFja3MubnIgJiYgZHJvcF9pbmRleCA8IHBhY2tzX3RvX2Ryb3AtPm5yOyBpKyspIHsKKwkJCWludCBjbXAgPSBzdHJjbXAocGFja3MuaW5mb1tpXS5wYWNrX25hbWUsCisJCQkJCSBwYWNrc190b19kcm9wLT5pdGVtc1tkcm9wX2luZGV4XS5zdHJpbmcpOworCisJCQlpZiAoIWNtcCkgeworCQkJCWRyb3BfaW5kZXgrKzsKKwkJCQlwYWNrcy5pbmZvW2ldLmV4cGlyZWQgPSAxOworCQkJfSBlbHNlIGlmIChjbXAgPiAwKSB7CisJCQkJZXJyb3IoXygiZGlkIG5vdCBzZWUgcGFjay1maWxlICVzIHRvIGRyb3AiKSwKKwkJCQkgICAgICBwYWNrc190b19kcm9wLT5pdGVtc1tkcm9wX2luZGV4XS5zdHJpbmcpOworCQkJCWRyb3BfaW5kZXgrKzsKKwkJCQltaXNzaW5nX2Ryb3BzKys7CisJCQkJaS0tOworCQkJfSBlbHNlIHsKKwkJCQlwYWNrcy5pbmZvW2ldLmV4cGlyZWQgPSAwOworCQkJfQorCQl9CisKKwkJaWYgKG1pc3NpbmdfZHJvcHMpIHsKKwkJCXJlc3VsdCA9IDE7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKKwkvKgorCSAqIHBhY2tfcGVybSBzdG9yZXMgYSBwZXJtdXRhdGlvbiBiZXR3ZWVuIHBhY2staW50LWlkcyBmcm9tIHRoZQorCSAqIHByZXZpb3VzIG11bHRpLXBhY2staW5kZXggdG8gdGhlIG5ldyBvbmUgd2UgYXJlIHdyaXRpbmc6CisJICoKKwkgKiBwYWNrX3Blcm1bb2xkX2lkXSA9IG5ld19pZAorCSAqLworCUFMTE9DX0FSUkFZKHBhY2tfcGVybSwgcGFja3MubnIpOworCWZvciAoaSA9IDA7IGkgPCBwYWNrcy5ucjsgaSsrKSB7CisJCWlmIChwYWNrcy5pbmZvW2ldLmV4cGlyZWQpIHsKKwkJCWRyb3BwZWRfcGFja3MrKzsKKwkJCXBhY2tfcGVybVtwYWNrcy5pbmZvW2ldLm9yaWdfcGFja19pbnRfaWRdID0gUEFDS19FWFBJUkVEOworCQl9IGVsc2UgeworCQkJcGFja19wZXJtW3BhY2tzLmluZm9baV0ub3JpZ19wYWNrX2ludF9pZF0gPSBpIC0gZHJvcHBlZF9wYWNrczsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBwYWNrcy5ucjsgaSsrKSB7CisJCWlmICghcGFja3MuaW5mb1tpXS5leHBpcmVkKQorCQkJcGFja19uYW1lX2NvbmNhdF9sZW4gKz0gc3RybGVuKHBhY2tzLmluZm9baV0ucGFja19uYW1lKSArIDE7CisJfQorCisJaWYgKHBhY2tfbmFtZV9jb25jYXRfbGVuICUgTUlEWF9DSFVOS19BTElHTk1FTlQpCisJCXBhY2tfbmFtZV9jb25jYXRfbGVuICs9IE1JRFhfQ0hVTktfQUxJR05NRU5UIC0KKwkJCQkJKHBhY2tfbmFtZV9jb25jYXRfbGVuICUgTUlEWF9DSFVOS19BTElHTk1FTlQpOworCiAJaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbGssIG1pZHhfbmFtZSwgTE9DS19ESUVfT05fRVJST1IpOwogCWYgPSBoYXNoZmQobGsudGVtcGZpbGUtPmZkLCBsay50ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmKTsKIAlGUkVFX0FORF9OVUxMKG1pZHhfbmFtZSk7CkBAIC04NzQsMTQgKzkxMywxNCBAQAogCWN1cl9jaHVuayA9IDA7CiAJbnVtX2NodW5rcyA9IGxhcmdlX29mZnNldHNfbmVlZGVkID8gNSA6IDQ7CiAKLQl3cml0dGVuID0gd3JpdGVfbWlkeF9oZWFkZXIoZiwgbnVtX2NodW5rcywgcGFja3MubnIpOworCXdyaXR0ZW4gPSB3cml0ZV9taWR4X2hlYWRlcihmLCBudW1fY2h1bmtzLCBwYWNrcy5uciAtIGRyb3BwZWRfcGFja3MpOwogCiAJY2h1bmtfaWRzW2N1cl9jaHVua10gPSBNSURYX0NIVU5LSURfUEFDS05BTUVTOwogCWNodW5rX29mZnNldHNbY3VyX2NodW5rXSA9IHdyaXR0ZW4gKyAobnVtX2NodW5rcyArIDEpICogTUlEWF9DSFVOS0xPT0tVUF9XSURUSDsKIAogCWN1cl9jaHVuaysrOwogCWNodW5rX2lkc1tjdXJfY2h1bmtdID0gTUlEWF9DSFVOS0lEX09JREZBTk9VVDsKLQljaHVua19vZmZzZXRzW2N1cl9jaHVua10gPSBjaHVua19vZmZzZXRzW2N1cl9jaHVuayAtIDFdICsgcGFja3MucGFja19uYW1lX2NvbmNhdF9sZW47CisJY2h1bmtfb2Zmc2V0c1tjdXJfY2h1bmtdID0gY2h1bmtfb2Zmc2V0c1tjdXJfY2h1bmsgLSAxXSArIHBhY2tfbmFtZV9jb25jYXRfbGVuOwogCiAJY3VyX2NodW5rKys7CiAJY2h1bmtfaWRzW2N1cl9jaHVua10gPSBNSURYX0NIVU5LSURfT0lETE9PS1VQOwpAQCAtOTI5LDcgKzk2OCw3IEBACiAKIAkJc3dpdGNoIChjaHVua19pZHNbaV0pIHsKIAkJCWNhc2UgTUlEWF9DSFVOS0lEX1BBQ0tOQU1FUzoKLQkJCQl3cml0dGVuICs9IHdyaXRlX21pZHhfcGFja19uYW1lcyhmLCBwYWNrcy5uYW1lcywgcGFja3MubnIpOworCQkJCXdyaXR0ZW4gKz0gd3JpdGVfbWlkeF9wYWNrX25hbWVzKGYsIHBhY2tzLmluZm8sIHBhY2tzLm5yKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNSURYX0NIVU5LSURfT0lERkFOT1VUOgpAQCAtOTQxLDcgKzk4MCw3IEBACiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUlEWF9DSFVOS0lEX09CSkVDVE9GRlNFVFM6Ci0JCQkJd3JpdHRlbiArPSB3cml0ZV9taWR4X29iamVjdF9vZmZzZXRzKGYsIGxhcmdlX29mZnNldHNfbmVlZGVkLCBlbnRyaWVzLCBucl9lbnRyaWVzKTsKKwkJCQl3cml0dGVuICs9IHdyaXRlX21pZHhfb2JqZWN0X29mZnNldHMoZiwgbGFyZ2Vfb2Zmc2V0c19uZWVkZWQsIHBhY2tfcGVybSwgZW50cmllcywgbnJfZW50cmllcyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUlEWF9DSFVOS0lEX0xBUkdFT0ZGU0VUUzoKQEAgLTk2NCwxOSArMTAwMywyMyBAQAogCiBjbGVhbnVwOgogCWZvciAoaSA9IDA7IGkgPCBwYWNrcy5ucjsgaSsrKSB7Ci0JCWlmIChwYWNrcy5saXN0W2ldKSB7Ci0JCQljbG9zZV9wYWNrKHBhY2tzLmxpc3RbaV0pOwotCQkJZnJlZShwYWNrcy5saXN0W2ldKTsKKwkJaWYgKHBhY2tzLmluZm9baV0ucCkgeworCQkJY2xvc2VfcGFjayhwYWNrcy5pbmZvW2ldLnApOworCQkJZnJlZShwYWNrcy5pbmZvW2ldLnApOwogCQl9Ci0JCWZyZWUocGFja3MubmFtZXNbaV0pOworCQlmcmVlKHBhY2tzLmluZm9baV0ucGFja19uYW1lKTsKIAl9CiAKLQlmcmVlKHBhY2tzLmxpc3QpOwotCWZyZWUocGFja3MubmFtZXMpOworCWZyZWUocGFja3MuaW5mbyk7CiAJZnJlZShlbnRyaWVzKTsKIAlmcmVlKHBhY2tfcGVybSk7CiAJZnJlZShtaWR4X25hbWUpOwotCXJldHVybiAwOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCB3cml0ZV9taWR4X2ZpbGUoY29uc3QgY2hhciAqb2JqZWN0X2RpcikKK3sKKwlyZXR1cm4gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBOVUxMLCBOVUxMKTsKIH0KIAogdm9pZCBjbGVhcl9taWR4X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCkBAIC0xMTQwLDMgKzExODMsMjAwIEBACiAKIAlyZXR1cm4gdmVyaWZ5X21pZHhfZXJyb3I7CiB9CisKK2ludCBleHBpcmVfbWlkeF9wYWNrcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpcikKK3sKKwl1aW50MzJfdCBpLCAqY291bnQsIHJlc3VsdCA9IDA7CisJc3RydWN0IHN0cmluZ19saXN0IHBhY2tzX3RvX2Ryb3AgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSA9IGxvYWRfbXVsdGlfcGFja19pbmRleChvYmplY3RfZGlyLCAxKTsKKworCWlmICghbSkKKwkJcmV0dXJuIDA7CisKKwljb3VudCA9IHhjYWxsb2MobS0+bnVtX3BhY2tzLCBzaXplb2YodWludDMyX3QpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX29iamVjdHM7IGkrKykgeworCQlpbnQgcGFja19pbnRfaWQgPSBudGhfbWlkeGVkX3BhY2tfaW50X2lkKG0sIGkpOworCQljb3VudFtwYWNrX2ludF9pZF0rKzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKKwkJY2hhciAqcGFja19uYW1lOworCisJCWlmIChjb3VudFtpXSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwcmVwYXJlX21pZHhfcGFjayhyLCBtLCBpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChtLT5wYWNrc1tpXS0+cGFja19rZWVwKQorCQkJY29udGludWU7CisKKwkJcGFja19uYW1lID0geHN0cmR1cChtLT5wYWNrc1tpXS0+cGFja19uYW1lKTsKKwkJY2xvc2VfcGFjayhtLT5wYWNrc1tpXSk7CisKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZwYWNrc190b19kcm9wLCBtLT5wYWNrX25hbWVzW2ldKTsKKwkJdW5saW5rX3BhY2tfcGF0aChwYWNrX25hbWUsIDApOworCQlmcmVlKHBhY2tfbmFtZSk7CisJfQorCisJZnJlZShjb3VudCk7CisKKwlpZiAocGFja3NfdG9fZHJvcC5ucikKKwkJcmVzdWx0ID0gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBtLCAmcGFja3NfdG9fZHJvcCk7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmcGFja3NfdG9fZHJvcCwgMCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IHJlcGFja19pbmZvIHsKKwl0aW1lc3RhbXBfdCBtdGltZTsKKwl1aW50MzJfdCByZWZlcmVuY2VkX29iamVjdHM7CisJdWludDMyX3QgcGFja19pbnRfaWQ7Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfYnlfbXRpbWUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCByZXBhY2tfaW5mbyAqYSwgKmI7CisKKwlhID0gKGNvbnN0IHN0cnVjdCByZXBhY2tfaW5mbyAqKWFfOworCWIgPSAoY29uc3Qgc3RydWN0IHJlcGFja19pbmZvICopYl87CisKKwlpZiAoYS0+bXRpbWUgPCBiLT5tdGltZSkKKwkJcmV0dXJuIC0xOworCWlmIChhLT5tdGltZSA+IGItPm10aW1lKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxsX2luY2x1ZGVkX3BhY2tzX2FsbChzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKKwkJCQkgICB1bnNpZ25lZCBjaGFyICppbmNsdWRlX3BhY2spCit7CisJdWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fcGFja3M7IGkrKykKKwkJaW5jbHVkZV9wYWNrW2ldID0gMTsKKworCXJldHVybiBtLT5udW1fcGFja3MgPCAyOworfQorCitzdGF0aWMgaW50IGZpbGxfaW5jbHVkZWRfcGFja3NfYmF0Y2goc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmluY2x1ZGVfcGFjaywKKwkJCQkgICAgIHNpemVfdCBiYXRjaF9zaXplKQoreworCXVpbnQzMl90IGksIHBhY2tzX3RvX3JlcGFjazsKKwlzaXplX3QgdG90YWxfc2l6ZTsKKwlzdHJ1Y3QgcmVwYWNrX2luZm8gKnBhY2tfaW5mbyA9IHhjYWxsb2MobS0+bnVtX3BhY2tzLCBzaXplb2Yoc3RydWN0IHJlcGFja19pbmZvKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKKwkJcGFja19pbmZvW2ldLnBhY2tfaW50X2lkID0gaTsKKworCQlpZiAocHJlcGFyZV9taWR4X3BhY2sociwgbSwgaSkpCisJCQljb250aW51ZTsKKworCQlwYWNrX2luZm9baV0ubXRpbWUgPSBtLT5wYWNrc1tpXS0+bXRpbWU7CisJfQorCisJZm9yIChpID0gMDsgYmF0Y2hfc2l6ZSAmJiBpIDwgbS0+bnVtX29iamVjdHM7IGkrKykgeworCQl1aW50MzJfdCBwYWNrX2ludF9pZCA9IG50aF9taWR4ZWRfcGFja19pbnRfaWQobSwgaSk7CisJCXBhY2tfaW5mb1twYWNrX2ludF9pZF0ucmVmZXJlbmNlZF9vYmplY3RzKys7CisJfQorCisJUVNPUlQocGFja19pbmZvLCBtLT5udW1fcGFja3MsIGNvbXBhcmVfYnlfbXRpbWUpOworCisJdG90YWxfc2l6ZSA9IDA7CisJcGFja3NfdG9fcmVwYWNrID0gMDsKKwlmb3IgKGkgPSAwOyB0b3RhbF9zaXplIDwgYmF0Y2hfc2l6ZSAmJiBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKKwkJaW50IHBhY2tfaW50X2lkID0gcGFja19pbmZvW2ldLnBhY2tfaW50X2lkOworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IG0tPnBhY2tzW3BhY2tfaW50X2lkXTsKKwkJc2l6ZV90IGV4cGVjdGVkX3NpemU7CisKKwkJaWYgKCFwKQorCQkJY29udGludWU7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkgfHwgIXAtPm51bV9vYmplY3RzKQorCQkJY29udGludWU7CisKKwkJZXhwZWN0ZWRfc2l6ZSA9IChzaXplX3QpKHAtPnBhY2tfc2l6ZQorCQkJCQkgKiBwYWNrX2luZm9baV0ucmVmZXJlbmNlZF9vYmplY3RzKTsKKwkJZXhwZWN0ZWRfc2l6ZSAvPSBwLT5udW1fb2JqZWN0czsKKworCQlpZiAoZXhwZWN0ZWRfc2l6ZSA+PSBiYXRjaF9zaXplKQorCQkJY29udGludWU7CisKKwkJcGFja3NfdG9fcmVwYWNrKys7CisJCXRvdGFsX3NpemUgKz0gZXhwZWN0ZWRfc2l6ZTsKKwkJaW5jbHVkZV9wYWNrW3BhY2tfaW50X2lkXSA9IDE7CisJfQorCisJZnJlZShwYWNrX2luZm8pOworCisJaWYgKHRvdGFsX3NpemUgPCBiYXRjaF9zaXplIHx8IHBhY2tzX3RvX3JlcGFjayA8IDIpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaWR4X3JlcGFjayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2Rpciwgc2l6ZV90IGJhdGNoX3NpemUpCit7CisJaW50IHJlc3VsdCA9IDA7CisJdWludDMyX3QgaTsKKwl1bnNpZ25lZCBjaGFyICppbmNsdWRlX3BhY2s7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYmFzZV9uYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0gPSBsb2FkX211bHRpX3BhY2tfaW5kZXgob2JqZWN0X2RpciwgMSk7CisKKwlpZiAoIW0pCisJCXJldHVybiAwOworCisJaW5jbHVkZV9wYWNrID0geGNhbGxvYyhtLT5udW1fcGFja3MsIHNpemVvZih1bnNpZ25lZCBjaGFyKSk7CisKKwlpZiAoYmF0Y2hfc2l6ZSkgeworCQlpZiAoZmlsbF9pbmNsdWRlZF9wYWNrc19iYXRjaChyLCBtLCBpbmNsdWRlX3BhY2ssIGJhdGNoX3NpemUpKQorCQkJZ290byBjbGVhbnVwOworCX0gZWxzZSBpZiAoZmlsbF9pbmNsdWRlZF9wYWNrc19hbGwobSwgaW5jbHVkZV9wYWNrKSkKKwkJZ290byBjbGVhbnVwOworCisJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgInBhY2stb2JqZWN0cyIpOworCisJc3RyYnVmX2FkZHN0cigmYmFzZV9uYW1lLCBvYmplY3RfZGlyKTsKKwlzdHJidWZfYWRkc3RyKCZiYXNlX25hbWUsICIvcGFjay9wYWNrIik7CisJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgYmFzZV9uYW1lLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJhc2VfbmFtZSk7CisKKwljbWQuZ2l0X2NtZCA9IDE7CisJY21kLmluID0gY21kLm91dCA9IC0xOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNtZCkpIHsKKwkJZXJyb3IoXygiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyIpKTsKKwkJcmVzdWx0ID0gMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQl1aW50MzJfdCBwYWNrX2ludF9pZCA9IG50aF9taWR4ZWRfcGFja19pbnRfaWQobSwgaSk7CisKKwkJaWYgKCFpbmNsdWRlX3BhY2tbcGFja19pbnRfaWRdKQorCQkJY29udGludWU7CisKKwkJbnRoX21pZHhlZF9vYmplY3Rfb2lkKCZvaWQsIG0sIGkpOworCQl4d3JpdGUoY21kLmluLCBvaWRfdG9faGV4KCZvaWQpLCB0aGVfaGFzaF9hbGdvLT5oZXhzeik7CisJCXh3cml0ZShjbWQuaW4sICJcbiIsIDEpOworCX0KKwljbG9zZShjbWQuaW4pOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjbWQpKSB7CisJCWVycm9yKF8oImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIikpOworCQlyZXN1bHQgPSAxOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcmVzdWx0ID0gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBtLCBOVUxMKTsKKwltID0gTlVMTDsKKworY2xlYW51cDoKKwlpZiAobSkKKwkJY2xvc2VfbWlkeChtKTsKKwlmcmVlKGluY2x1ZGVfcGFjayk7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL21pZHguaCBiL21pZHguaAppbmRleCAzZWIyOTczLi5mMGFlNjU2IDEwMDY0NAotLS0gYS9taWR4LmgKKysrIGIvbWlkeC5oCkBAIC01MCw2ICs1MCw4IEBACiBpbnQgd3JpdGVfbWlkeF9maWxlKGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpOwogdm9pZCBjbGVhcl9taWR4X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOwogaW50IHZlcmlmeV9taWR4X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpOworaW50IGV4cGlyZV9taWR4X3BhY2tzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyKTsKK2ludCBtaWR4X3JlcGFjayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2Rpciwgc2l6ZV90IGJhdGNoX3NpemUpOwogCiB2b2lkIGNsb3NlX21pZHgoc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0pOwogCmRpZmYgLS1naXQgYS9uYW1lLWhhc2guYyBiL25hbWUtaGFzaC5jCmluZGV4IGI0ODYxYmMuLjY5NTkwODYgMTAwNjQ0Ci0tLSBhL25hbWUtaGFzaC5jCisrKyBiL25hbWUtaGFzaC5jCkBAIC0zNDUsOCArMzQ1LDkgQEAKIAllbHNlIHsKIAkJaW50IGJlZ2luID0ga19zdGFydDsKIAkJaW50IGVuZCA9IGtfZW5kOworCQlhc3NlcnQoYmVnaW4gPj0gMCk7CiAJCXdoaWxlIChiZWdpbiA8IGVuZCkgewotCQkJaW50IG1pZCA9IChiZWdpbiArIGVuZCkgPj4gMTsKKwkJCWludCBtaWQgPSBiZWdpbiArICgoZW5kIC0gYmVnaW4pID4+IDEpOwogCQkJaW50IGNtcCA9IHN0cm5jbXAoaXN0YXRlLT5jYWNoZVttaWRdLT5uYW1lLCBwcmVmaXgtPmJ1ZiwgcHJlZml4LT5sZW4pOwogCQkJaWYgKGNtcCA9PSAwKSAvKiBtaWQgaGFzIHNhbWUgcHJlZml4OyBsb29rIGluIHNlY29uZCBwYXJ0ICovCiAJCQkJYmVnaW4gPSBtaWQgKyAxOwpkaWZmIC0tZ2l0IGEvbm90ZXMuYyBiL25vdGVzLmMKaW5kZXggNTMyZWMzNy4uNzVjMDI4YiAxMDA2NDQKLS0tIGEvbm90ZXMuYworKysgYi9ub3Rlcy5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKIAljb25zdCB1bnNpZ25lZCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKIAotCWJ1ZiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKCZkZXNjLCAmc3VidHJlZS0+dmFsX29pZCk7CisJYnVmID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IodGhlX3JlcG9zaXRvcnksICZkZXNjLCAmc3VidHJlZS0+dmFsX29pZCk7CiAJaWYgKCFidWYpCiAJCWRpZSgiQ291bGQgbm90IHJlYWQgJXMgZm9yIG5vdGVzLWluZGV4IiwKIAkJICAgICBvaWRfdG9faGV4KCZzdWJ0cmVlLT52YWxfb2lkKSk7CkBAIC0xMDE1LDcgKzEwMTUsNyBAQAogCQlyZXR1cm47CiAJaWYgKGZsYWdzICYgTk9URVNfSU5JVF9XUklUQUJMRSAmJiByZWFkX3JlZihub3Rlc19yZWYsICZvYmplY3Rfb2lkKSkKIAkJZGllKCJDYW5ub3QgdXNlIG5vdGVzIHJlZiAlcyIsIG5vdGVzX3JlZik7Ci0JaWYgKGdldF90cmVlX2VudHJ5KCZvYmplY3Rfb2lkLCAiIiwgJm9pZCwgJm1vZGUpKQorCWlmIChnZXRfdHJlZV9lbnRyeSh0aGVfcmVwb3NpdG9yeSwgJm9iamVjdF9vaWQsICIiLCAmb2lkLCAmbW9kZSkpCiAJCWRpZSgiRmFpbGVkIHRvIHJlYWQgbm90ZXMgdHJlZSByZWZlcmVuY2VkIGJ5ICVzICglcykiLAogCQkgICAgbm90ZXNfcmVmLCBvaWRfdG9faGV4KCZvYmplY3Rfb2lkKSk7CiAKZGlmZiAtLWdpdCBhL29iamVjdC1zdG9yZS5oIGIvb2JqZWN0LXN0b3JlLmgKaW5kZXggNDlmNTZhYi4uN2Y3YjNjZCAxMDA2NDQKLS0tIGEvb2JqZWN0LXN0b3JlLmgKKysrIGIvb2JqZWN0LXN0b3JlLmgKQEAgLTMzLDYgKzMzLDggQEAKIGNoYXIgKmNvbXB1dGVfYWx0ZXJuYXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKIHR5cGVkZWYgaW50IGFsdF9vZGJfZm4oc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKiwgdm9pZCAqKTsKIGludCBmb3JlYWNoX2FsdF9vZGIoYWx0X29kYl9mbiwgdm9pZCopOwordHlwZWRlZiB2b2lkIGFsdGVybmF0ZV9yZWZfZm4oY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICopOwordm9pZCBmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKGFsdGVybmF0ZV9yZWZfZm4sIHZvaWQgKik7CiAKIC8qCiAgKiBBZGQgdGhlIGRpcmVjdG9yeSB0byB0aGUgb24tZGlzayBhbHRlcm5hdGVzIGZpbGU7IHRoZSBuZXcgZW50cnkgd2lsbCBhbHNvCmRpZmYgLS1naXQgYS9vYmplY3QuYyBiL29iamVjdC5jCmluZGV4IGU4MWQ0N2EuLjA3YmRkNWIgMTAwNjQ0Ci0tLSBhL29iamVjdC5jCisrKyBiL29iamVjdC5jCkBAIC01OSw5ICs1OSw5IEBACiAgKiB0aGUgc3BlY2lmaWVkIHNoYTEuICBuIG11c3QgYmUgYSBwb3dlciBvZiAyLiAgUGxlYXNlIG5vdGUgdGhhdCB0aGUKICAqIHJldHVybiB2YWx1ZSBpcyAqbm90KiBjb25zaXN0ZW50IGFjcm9zcyBjb21wdXRlciBhcmNoaXRlY3R1cmVzLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGhhc2hfb2JqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGludCBuKQorc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX29iaihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHVuc2lnbmVkIGludCBuKQogewotCXJldHVybiBzaGExaGFzaChzaGExKSAmIChuIC0gMSk7CisJcmV0dXJuIG9pZGhhc2gob2lkKSAmIChuIC0gMSk7CiB9CiAKIC8qCkBAIC03MSw3ICs3MSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGluc2VydF9vYmpfaGFzaChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBvYmplY3QgKipoYXNoLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQl1bnNpZ25lZCBpbnQgaiA9IGhhc2hfb2JqKG9iai0+b2lkLmhhc2gsIHNpemUpOworCXVuc2lnbmVkIGludCBqID0gaGFzaF9vYmooJm9iai0+b2lkLCBzaXplKTsKIAogCXdoaWxlIChoYXNoW2pdKSB7CiAJCWorKzsKQEAgLTg1LDcgKzg1LDcgQEAKICAqIExvb2sgdXAgdGhlIHJlY29yZCBmb3IgdGhlIGdpdmVuIHNoYTEgaW4gdGhlIGhhc2ggbWFwIHN0b3JlZCBpbgogICogb2JqX2hhc2guICBSZXR1cm4gTlVMTCBpZiBpdCB3YXMgbm90IGZvdW5kLgogICovCi1zdHJ1Y3Qgb2JqZWN0ICpsb29rdXBfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQorc3RydWN0IG9iamVjdCAqbG9va3VwX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewogCXVuc2lnbmVkIGludCBpLCBmaXJzdDsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CkBAIC05Myw5ICs5Myw5IEBACiAJaWYgKCFyLT5wYXJzZWRfb2JqZWN0cy0+b2JqX2hhc2gpCiAJCXJldHVybiBOVUxMOwogCi0JZmlyc3QgPSBpID0gaGFzaF9vYmooc2hhMSwgci0+cGFyc2VkX29iamVjdHMtPm9ial9oYXNoX3NpemUpOworCWZpcnN0ID0gaSA9IGhhc2hfb2JqKG9pZCwgci0+cGFyc2VkX29iamVjdHMtPm9ial9oYXNoX3NpemUpOwogCXdoaWxlICgob2JqID0gci0+cGFyc2VkX29iamVjdHMtPm9ial9oYXNoW2ldKSAhPSBOVUxMKSB7Ci0JCWlmIChoYXNoZXEoc2hhMSwgb2JqLT5vaWQuaGFzaCkpCisJCWlmIChvaWRlcShvaWQsICZvYmotPm9pZCkpCiAJCQlicmVhazsKIAkJaSsrOwogCQlpZiAoaSA9PSByLT5wYXJzZWRfb2JqZWN0cy0+b2JqX2hhc2hfc2l6ZSkKQEAgLTE0MSwxMyArMTQxLDEzIEBACiAJci0+cGFyc2VkX29iamVjdHMtPm9ial9oYXNoX3NpemUgPSBuZXdfaGFzaF9zaXplOwogfQogCi12b2lkICpjcmVhdGVfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpvKQordm9pZCAqY3JlYXRlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpvKQogewogCXN0cnVjdCBvYmplY3QgKm9iaiA9IG87CiAKIAlvYmotPnBhcnNlZCA9IDA7CiAJb2JqLT5mbGFncyA9IDA7Ci0JaGFzaGNweShvYmotPm9pZC5oYXNoLCBzaGExKTsKKwlvaWRjcHkoJm9iai0+b2lkLCBvaWQpOwogCiAJaWYgKHItPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaF9zaXplIC0gMSA8PSByLT5wYXJzZWRfb2JqZWN0cy0+bnJfb2JqcyAqIDIpCiAJCWdyb3dfb2JqZWN0X2hhc2gocik7CkBAIC0xNzgsMTEgKzE3OCwxMSBAQAogCX0KIH0KIAotc3RydWN0IG9iamVjdCAqbG9va3VwX3Vua25vd25fb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCitzdHJ1Y3Qgb2JqZWN0ICpsb29rdXBfdW5rbm93bl9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewotCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIHNoYTEpOworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CiAJaWYgKCFvYmopCi0JCW9iaiA9IGNyZWF0ZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIHNoYTEsCisJCW9iaiA9IGNyZWF0ZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCwKIAkJCQkgICAgYWxsb2Nfb2JqZWN0X25vZGUodGhlX3JlcG9zaXRvcnkpKTsKIAlyZXR1cm4gb2JqOwogfQpAQCAtMjU2LDcgKzI1Niw3IEBACiAJdm9pZCAqYnVmZmVyOwogCXN0cnVjdCBvYmplY3QgKm9iajsKIAotCW9iaiA9IGxvb2t1cF9vYmplY3Qociwgb2lkLT5oYXNoKTsKKwlvYmogPSBsb29rdXBfb2JqZWN0KHIsIG9pZCk7CiAJaWYgKG9iaiAmJiBvYmotPnBhcnNlZCkKIAkJcmV0dXJuIG9iajsKIApAQCAtMjY4LDcgKzI2OCw3IEBACiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlwYXJzZV9ibG9iX2J1ZmZlcihsb29rdXBfYmxvYihyLCBvaWQpLCBOVUxMLCAwKTsKLQkJcmV0dXJuIGxvb2t1cF9vYmplY3Qociwgb2lkLT5oYXNoKTsKKwkJcmV0dXJuIGxvb2t1cF9vYmplY3Qociwgb2lkKTsKIAl9CiAKIAlidWZmZXIgPSByZXBvX3JlYWRfb2JqZWN0X2ZpbGUociwgb2lkLCAmdHlwZSwgJnNpemUpOwpAQCAtNTE3LDcgKzUxNyw3IEBACiAJby0+bG9hZGVkX2FsdGVybmF0ZXMgPSAwOwogCiAJSU5JVF9MSVNUX0hFQUQoJm8tPnBhY2tlZF9naXRfbXJ1KTsKLQljbG9zZV9hbGxfcGFja3Mobyk7CisJY2xvc2Vfb2JqZWN0X3N0b3JlKG8pOwogCW8tPnBhY2tlZF9naXQgPSBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9vYmplY3QuaCBiL29iamVjdC5oCmluZGV4IDQ1MjY5NzkuLjAxMjA4OTIgMTAwNjQ0Ci0tLSBhL29iamVjdC5oCisrKyBiL29iamVjdC5oCkBAIC0xMTYsOSArMTE2LDkgQEAKICAqIGhhbGYtaW5pdGlhbGlzZWQgb2JqZWN0cywgdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBpbml0aWFsaXplIHRoZW0KICAqIGJ5IGNhbGxpbmcgcGFyc2Vfb2JqZWN0KCkgb24gdGhlbS4KICAqLwotc3RydWN0IG9iamVjdCAqbG9va3VwX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CitzdHJ1Y3Qgb2JqZWN0ICpsb29rdXBfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOwogCi12b2lkICpjcmVhdGVfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpvYmopOwordm9pZCAqY3JlYXRlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpvYmopOwogCiB2b2lkICpvYmplY3RfYXNfdHlwZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IG9iamVjdCAqb2JqLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGludCBxdWlldCk7CiAKQEAgLTE0Myw3ICsxNDMsNyBAQAogc3RydWN0IG9iamVjdCAqcGFyc2Vfb2JqZWN0X2J1ZmZlcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqYnVmZmVyLCBpbnQgKmVhdGVuX3ApOwogCiAvKiogUmV0dXJucyB0aGUgb2JqZWN0LCB3aXRoIHBvdGVudGlhbGx5IGV4Y2VzcyBtZW1vcnkgYWxsb2NhdGVkLiAqKi8KLXN0cnVjdCBvYmplY3QgKmxvb2t1cF91bmtub3duX29iamVjdChjb25zdCB1bnNpZ25lZCAgY2hhciAqc2hhMSk7CitzdHJ1Y3Qgb2JqZWN0ICpsb29rdXBfdW5rbm93bl9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKIAogc3RydWN0IG9iamVjdF9saXN0ICpvYmplY3RfbGlzdF9pbnNlcnQoc3RydWN0IG9iamVjdCAqaXRlbSwKIAkJCQkgICAgICAgc3RydWN0IG9iamVjdF9saXN0ICoqbGlzdF9wKTsKZGlmZiAtLWdpdCBhL29pZG1hcC5jIGIvb2lkbWFwLmMKaW5kZXggYjA4NDFhMC4uNmQ2ZTg0MCAxMDA2NDQKLS0tIGEvb2lkbWFwLmMKKysrIGIvb2lkbWFwLmMKQEAgLTEyLDEzICsxMiw2IEBACiAJCSAgICAgICYoKGNvbnN0IHN0cnVjdCBvaWRtYXBfZW50cnkgKikgZW50cnlfb3Jfa2V5KS0+b2lkKTsKIH0KIAotc3RhdGljIGludCBoYXNoKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKLXsKLQlpbnQgaGFzaDsKLQltZW1jcHkoJmhhc2gsIG9pZC0+aGFzaCwgc2l6ZW9mKGhhc2gpKTsKLQlyZXR1cm4gaGFzaDsKLX0KLQogdm9pZCBvaWRtYXBfaW5pdChzdHJ1Y3Qgb2lkbWFwICptYXAsIHNpemVfdCBpbml0aWFsX3NpemUpCiB7CiAJaGFzaG1hcF9pbml0KCZtYXAtPm1hcCwgb2lkbWFwX25lcSwgTlVMTCwgaW5pdGlhbF9zaXplKTsKQEAgLTM2LDcgKzI5LDcgQEAKIAlpZiAoIW1hcC0+bWFwLmNtcGZuKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBoYXNobWFwX2dldF9mcm9tX2hhc2goJm1hcC0+bWFwLCBoYXNoKGtleSksIGtleSk7CisJcmV0dXJuIGhhc2htYXBfZ2V0X2Zyb21faGFzaCgmbWFwLT5tYXAsIG9pZGhhc2goa2V5KSwga2V5KTsKIH0KIAogdm9pZCAqb2lkbWFwX3JlbW92ZShzdHJ1Y3Qgb2lkbWFwICptYXAsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmtleSkKQEAgLTQ2LDcgKzM5LDcgQEAKIAlpZiAoIW1hcC0+bWFwLmNtcGZuKQogCQlvaWRtYXBfaW5pdChtYXAsIDApOwogCi0JaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyeSwgaGFzaChrZXkpKTsKKwloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LCBvaWRoYXNoKGtleSkpOwogCXJldHVybiBoYXNobWFwX3JlbW92ZSgmbWFwLT5tYXAsICZlbnRyeSwga2V5KTsKIH0KIApAQCAtNTcsNiArNTAsNiBAQAogCWlmICghbWFwLT5tYXAuY21wZm4pCiAJCW9pZG1hcF9pbml0KG1hcCwgMCk7CiAKLQloYXNobWFwX2VudHJ5X2luaXQoJnRvX3B1dC0+aW50ZXJuYWxfZW50cnksIGhhc2goJnRvX3B1dC0+b2lkKSk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZ0b19wdXQtPmludGVybmFsX2VudHJ5LCBvaWRoYXNoKCZ0b19wdXQtPm9pZCkpOwogCXJldHVybiBoYXNobWFwX3B1dCgmbWFwLT5tYXAsIHRvX3B1dCk7CiB9CmRpZmYgLS1naXQgYS9vaWRzZXQuYyBiL29pZHNldC5jCmluZGV4IGZlNGViOTIuLmY2M2NlODEgMTAwNjQ0Ci0tLSBhL29pZHNldC5jCisrKyBiL29pZHNldC5jCkBAIC01LDMzICs1LDY4IEBACiB7CiAJbWVtc2V0KCZzZXQtPnNldCwgMCwgc2l6ZW9mKHNldC0+c2V0KSk7CiAJaWYgKGluaXRpYWxfc2l6ZSkKLQkJa2hfcmVzaXplX29pZCgmc2V0LT5zZXQsIGluaXRpYWxfc2l6ZSk7CisJCWtoX3Jlc2l6ZV9vaWRfc2V0KCZzZXQtPnNldCwgaW5pdGlhbF9zaXplKTsKIH0KIAogaW50IG9pZHNldF9jb250YWlucyhjb25zdCBzdHJ1Y3Qgb2lkc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKIHsKLQlraGl0ZXJfdCBwb3MgPSBraF9nZXRfb2lkKCZzZXQtPnNldCwgKm9pZCk7CisJa2hpdGVyX3QgcG9zID0ga2hfZ2V0X29pZF9zZXQoJnNldC0+c2V0LCAqb2lkKTsKIAlyZXR1cm4gcG9zICE9IGtoX2VuZCgmc2V0LT5zZXQpOwogfQogCiBpbnQgb2lkc2V0X2luc2VydChzdHJ1Y3Qgb2lkc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKIHsKIAlpbnQgYWRkZWQ7Ci0Ja2hfcHV0X29pZCgmc2V0LT5zZXQsICpvaWQsICZhZGRlZCk7CisJa2hfcHV0X29pZF9zZXQoJnNldC0+c2V0LCAqb2lkLCAmYWRkZWQpOwogCXJldHVybiAhYWRkZWQ7CiB9CiAKIGludCBvaWRzZXRfcmVtb3ZlKHN0cnVjdCBvaWRzZXQgKnNldCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewotCWtoaXRlcl90IHBvcyA9IGtoX2dldF9vaWQoJnNldC0+c2V0LCAqb2lkKTsKKwlraGl0ZXJfdCBwb3MgPSBraF9nZXRfb2lkX3NldCgmc2V0LT5zZXQsICpvaWQpOwogCWlmIChwb3MgPT0ga2hfZW5kKCZzZXQtPnNldCkpCiAJCXJldHVybiAwOwotCWtoX2RlbF9vaWQoJnNldC0+c2V0LCBwb3MpOworCWtoX2RlbF9vaWRfc2V0KCZzZXQtPnNldCwgcG9zKTsKIAlyZXR1cm4gMTsKIH0KIAogdm9pZCBvaWRzZXRfY2xlYXIoc3RydWN0IG9pZHNldCAqc2V0KQogewotCWtoX3JlbGVhc2Vfb2lkKCZzZXQtPnNldCk7CisJa2hfcmVsZWFzZV9vaWRfc2V0KCZzZXQtPnNldCk7CiAJb2lkc2V0X2luaXQoc2V0LCAwKTsKIH0KKwordm9pZCBvaWRzZXRfcGFyc2VfZmlsZShzdHJ1Y3Qgb2lkc2V0ICpzZXQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJRklMRSAqZnA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJZnAgPSBmb3BlbihwYXRoLCAiciIpOworCWlmICghZnApCisJCWRpZSgiY291bGQgbm90IG9wZW4gb2JqZWN0IG5hbWUgbGlzdDogJXMiLCBwYXRoKTsKKwl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lKCZzYiwgZnApKSB7CisJCWNvbnN0IGNoYXIgKnA7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJLyoKKwkJICogQWxsb3cgdHJhaWxpbmcgY29tbWVudHMsIGxlYWRpbmcgd2hpdGVzcGFjZQorCQkgKiAoaW5jbHVkaW5nIGJlZm9yZSBjb21taXRzKSwgYW5kIGVtcHR5IG9yIHdoaXRlc3BhY2UKKwkJICogb25seSBsaW5lcy4KKwkJICovCisJCW5hbWUgPSBzdHJjaHIoc2IuYnVmLCAnIycpOworCQlpZiAobmFtZSkKKwkJCXN0cmJ1Zl9zZXRsZW4oJnNiLCBuYW1lIC0gc2IuYnVmKTsKKwkJc3RyYnVmX3RyaW0oJnNiKTsKKwkJaWYgKCFzYi5sZW4pCisJCQljb250aW51ZTsKKworCQlpZiAocGFyc2Vfb2lkX2hleChzYi5idWYsICZvaWQsICZwKSB8fCAqcCAhPSAnXDAnKQorCQkJZGllKCJpbnZhbGlkIG9iamVjdCBuYW1lOiAlcyIsIHNiLmJ1Zik7CisJCW9pZHNldF9pbnNlcnQoc2V0LCAmb2lkKTsKKwl9CisJaWYgKGZlcnJvcihmcCkpCisJCWRpZV9lcnJubygiQ291bGQgbm90IHJlYWQgJyVzJyIsIHBhdGgpOworCWZjbG9zZShmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KZGlmZiAtLWdpdCBhL29pZHNldC5oIGIvb2lkc2V0LmgKaW5kZXggMTRmMThmNy4uNTM0NjU2MyAxMDA2NDQKLS0tIGEvb2lkc2V0LmgKKysrIGIvb2lkc2V0LmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIEEgc2luZ2xlIG9pZHNldDsgc2hvdWxkIGJlIHplcm8taW5pdGlhbGl6ZWQgKG9yIHVzZSBPSURTRVRfSU5JVCkuCiAgKi8KIHN0cnVjdCBvaWRzZXQgewotCWtoX29pZF90IHNldDsKKwlraF9vaWRfc2V0X3Qgc2V0OwogfTsKIAogI2RlZmluZSBPSURTRVRfSU5JVCB7IHsgMCB9IH0KQEAgLTYxLDggKzYxLDE2IEBACiAgKi8KIHZvaWQgb2lkc2V0X2NsZWFyKHN0cnVjdCBvaWRzZXQgKnNldCk7CiAKKy8qKgorICogQWRkIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSAncGF0aCcgdG8gYW4gaW5pdGlhbGl6ZWQgb2lkc2V0LiAgRWFjaCBsaW5lIGlzCisgKiBhbiB1bmFiYnJldmlhdGVkIG9iamVjdCBuYW1lLiAgQ29tbWVudHMgYmVnaW4gd2l0aCAnIycsIGFuZCB0cmFpbGluZyBjb21tZW50cworICogYXJlIGFsbG93ZWQuICBMZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGVtcHR5IG9yIHdoaXRlLXNwYWNlIG9ubHkgbGluZXMgYXJlCisgKiBpZ25vcmVkLgorICovCit2b2lkIG9pZHNldF9wYXJzZV9maWxlKHN0cnVjdCBvaWRzZXQgKnNldCwgY29uc3QgY2hhciAqcGF0aCk7CisKIHN0cnVjdCBvaWRzZXRfaXRlciB7Ci0Ja2hfb2lkX3QgKnNldDsKKwlraF9vaWRfc2V0X3QgKnNldDsKIAlraGl0ZXJfdCBpdGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvcGFjay1iaXRtYXAtd3JpdGUuYyBiL3BhY2stYml0bWFwLXdyaXRlLmMKaW5kZXggODAyZWQ2Mi4uZmE3OGE0NiAxMDA2NDQKLS0tIGEvcGFjay1iaXRtYXAtd3JpdGUuYworKysgYi9wYWNrLWJpdG1hcC13cml0ZS5jCkBAIC0yOCw4ICsyOCw4IEBACiAJc3RydWN0IGV3YWhfYml0bWFwICpibG9iczsKIAlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnRhZ3M7CiAKLQlraGFzaF9zaGExICpiaXRtYXBzOwotCWtoYXNoX3NoYTEgKnJldXNlZDsKKwlraF9vaWRfbWFwX3QgKmJpdG1hcHM7CisJa2hfb2lkX21hcF90ICpyZXVzZWQ7CiAJc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjazsKIAogCXN0cnVjdCBiaXRtYXBwZWRfY29tbWl0ICpzZWxlY3RlZDsKQEAgLTE0MiwxMyArMTQyLDEzIEBACiAJc2Vlbl9vYmplY3RzX25yID0gMDsKIH0KIAotc3RhdGljIHVpbnQzMl90IGZpbmRfb2JqZWN0X3Bvcyhjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoKQorc3RhdGljIHVpbnQzMl90IGZpbmRfb2JqZWN0X3Bvcyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCiB7Ci0Jc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkgPSBwYWNrbGlzdF9maW5kKHdyaXRlci50b19wYWNrLCBoYXNoLCBOVUxMKTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9IHBhY2tsaXN0X2ZpbmQod3JpdGVyLnRvX3BhY2ssIG9pZCwgTlVMTCk7CiAKIAlpZiAoIWVudHJ5KSB7CiAJCWRpZSgiRmFpbGVkIHRvIHdyaXRlIGJpdG1hcCBpbmRleC4gUGFja2ZpbGUgZG9lc24ndCBoYXZlIGZ1bGwgY2xvc3VyZSAiCi0JCQkiKG9iamVjdCAlcyBpcyBtaXNzaW5nKSIsIGhhc2hfdG9faGV4KGhhc2gpKTsKKwkJCSIob2JqZWN0ICVzIGlzIG1pc3NpbmcpIiwgb2lkX3RvX2hleChvaWQpKTsKIAl9CiAKIAlyZXR1cm4gb2VfaW5fcGFja19wb3Mod3JpdGVyLnRvX3BhY2ssIGVudHJ5KTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBiaXRtYXAgKmJhc2UgPSBkYXRhOwotCWJpdG1hcF9zZXQoYmFzZSwgZmluZF9vYmplY3RfcG9zKG9iamVjdC0+b2lkLmhhc2gpKTsKKwliaXRtYXBfc2V0KGJhc2UsIGZpbmRfb2JqZWN0X3Bvcygmb2JqZWN0LT5vaWQpKTsKIAltYXJrX2FzX3NlZW4ob2JqZWN0KTsKIH0KIApAQCAtMTcwLDEyICsxNzAsMTIgQEAKIGFkZF90b19pbmNsdWRlX3NldChzdHJ1Y3QgYml0bWFwICpiYXNlLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCiB7CiAJa2hpdGVyX3QgaGFzaF9wb3M7Ci0JdWludDMyX3QgYml0bWFwX3BvcyA9IGZpbmRfb2JqZWN0X3Bvcyhjb21taXQtPm9iamVjdC5vaWQuaGFzaCk7CisJdWludDMyX3QgYml0bWFwX3BvcyA9IGZpbmRfb2JqZWN0X3BvcygmY29tbWl0LT5vYmplY3Qub2lkKTsKIAogCWlmIChiaXRtYXBfZ2V0KGJhc2UsIGJpdG1hcF9wb3MpKQogCQlyZXR1cm4gMDsKIAotCWhhc2hfcG9zID0ga2hfZ2V0X3NoYTEod3JpdGVyLmJpdG1hcHMsIGNvbW1pdC0+b2JqZWN0Lm9pZC5oYXNoKTsKKwloYXNoX3BvcyA9IGtoX2dldF9vaWRfbWFwKHdyaXRlci5iaXRtYXBzLCBjb21taXQtPm9iamVjdC5vaWQpOwogCWlmIChoYXNoX3BvcyA8IGtoX2VuZCh3cml0ZXIuYml0bWFwcykpIHsKIAkJc3RydWN0IGJpdG1hcHBlZF9jb21taXQgKmJjID0ga2hfdmFsdWUod3JpdGVyLmJpdG1hcHMsIGhhc2hfcG9zKTsKIAkJYml0bWFwX29yX2V3YWgoYmFzZSwgYmMtPmJpdG1hcCk7CkBAIC0yNTYsNyArMjU2LDcgQEAKIAlzdHJ1Y3QgYml0bWFwICpiYXNlID0gYml0bWFwX25ldygpOwogCXN0cnVjdCByZXZfaW5mbyByZXZzOwogCi0Jd3JpdGVyLmJpdG1hcHMgPSBraF9pbml0X3NoYTEoKTsKKwl3cml0ZXIuYml0bWFwcyA9IGtoX2luaXRfb2lkX21hcCgpOwogCXdyaXRlci50b19wYWNrID0gdG9fcGFjazsKIAogCWlmICh3cml0ZXIuc2hvd19wcm9ncmVzcykKQEAgLTMxMSw3ICszMTEsNyBAQAogCQlpZiAoaSA+PSByZXVzZV9hZnRlcikKIAkJCXN0b3JlZC0+ZmxhZ3MgfD0gQklUTUFQX0ZMQUdfUkVVU0U7CiAKLQkJaGFzaF9wb3MgPSBraF9wdXRfc2hhMSh3cml0ZXIuYml0bWFwcywgb2JqZWN0LT5vaWQuaGFzaCwgJmhhc2hfcmV0KTsKKwkJaGFzaF9wb3MgPSBraF9wdXRfb2lkX21hcCh3cml0ZXIuYml0bWFwcywgb2JqZWN0LT5vaWQsICZoYXNoX3JldCk7CiAJCWlmIChoYXNoX3JldCA9PSAwKQogCQkJZGllKCJEdXBsaWNhdGUgZW50cnkgd2hlbiB3cml0aW5nIGluZGV4OiAlcyIsCiAJCQkgICAgb2lkX3RvX2hleCgmb2JqZWN0LT5vaWQpKTsKQEAgLTM2Niw3ICszNjYsNyBAQAogCWlmICghKGJpdG1hcF9naXQgPSBwcmVwYXJlX2JpdG1hcF9naXQodG9fcGFjay0+cmVwbykpKQogCQlyZXR1cm47CiAKLQl3cml0ZXIucmV1c2VkID0ga2hfaW5pdF9zaGExKCk7CisJd3JpdGVyLnJldXNlZCA9IGtoX2luaXRfb2lkX21hcCgpOwogCXJlYnVpbGRfZXhpc3RpbmdfYml0bWFwcyhiaXRtYXBfZ2l0LCB0b19wYWNrLCB3cml0ZXIucmV1c2VkLAogCQkJCSB3cml0ZXIuc2hvd19wcm9ncmVzcyk7CiAJLyoKQEAgLTM3NSwxNCArMzc1LDE0IEBACiAJICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXdhaF9iaXRtYXAgKmZpbmRfcmV1c2VkX2JpdG1hcChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQorc3RhdGljIHN0cnVjdCBld2FoX2JpdG1hcCAqZmluZF9yZXVzZWRfYml0bWFwKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKIHsKIAlraGl0ZXJfdCBoYXNoX3BvczsKIAogCWlmICghd3JpdGVyLnJldXNlZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQloYXNoX3BvcyA9IGtoX2dldF9zaGExKHdyaXRlci5yZXVzZWQsIHNoYTEpOworCWhhc2hfcG9zID0ga2hfZ2V0X29pZF9tYXAod3JpdGVyLnJldXNlZCwgKm9pZCk7CiAJaWYgKGhhc2hfcG9zID49IGtoX2VuZCh3cml0ZXIucmV1c2VkKSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTQyMiwxNCArNDIyLDE0IEBACiAKIAkJaWYgKG5leHQgPT0gMCkgewogCQkJY2hvc2VuID0gaW5kZXhlZF9jb21taXRzW2ldOwotCQkJcmV1c2VkX2JpdG1hcCA9IGZpbmRfcmV1c2VkX2JpdG1hcChjaG9zZW4tPm9iamVjdC5vaWQuaGFzaCk7CisJCQlyZXVzZWRfYml0bWFwID0gZmluZF9yZXVzZWRfYml0bWFwKCZjaG9zZW4tPm9iamVjdC5vaWQpOwogCQl9IGVsc2UgewogCQkJY2hvc2VuID0gaW5kZXhlZF9jb21taXRzW2kgKyBuZXh0XTsKIAogCQkJZm9yIChqID0gMDsgaiA8PSBuZXh0OyArK2opIHsKIAkJCQlzdHJ1Y3QgY29tbWl0ICpjbSA9IGluZGV4ZWRfY29tbWl0c1tpICsgal07CiAKLQkJCQlyZXVzZWRfYml0bWFwID0gZmluZF9yZXVzZWRfYml0bWFwKGNtLT5vYmplY3Qub2lkLmhhc2gpOworCQkJCXJldXNlZF9iaXRtYXAgPSBmaW5kX3JldXNlZF9iaXRtYXAoJmNtLT5vYmplY3Qub2lkKTsKIAkJCQlpZiAocmV1c2VkX2JpdG1hcCB8fCAoY20tPm9iamVjdC5mbGFncyAmIE5FRURTX0JJVE1BUCkgIT0gMCkgewogCQkJCQljaG9zZW4gPSBjbTsKIAkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9wYWNrLWJpdG1hcC5jIGIvcGFjay1iaXRtYXAuYwppbmRleCA2MDY5YjJmLi5lZDJiZWZhIDEwMDY0NAotLS0gYS9wYWNrLWJpdG1hcC5jCisrKyBiL3BhY2stYml0bWFwLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogc3RhdGljIGlubGluZSBpbnQgYml0bWFwX3Bvc2l0aW9uX2V4dGVuZGVkKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKIHsKLQlraGFzaF9vaWRfcG9zICpwb3NpdGlvbnMgPSBiaXRtYXBfZ2l0LT5leHRfaW5kZXgucG9zaXRpb25zOworCWtoX29pZF9wb3NfdCAqcG9zaXRpb25zID0gYml0bWFwX2dpdC0+ZXh0X2luZGV4LnBvc2l0aW9uczsKIAlraGl0ZXJfdCBwb3MgPSBraF9nZXRfb2lkX3Bvcyhwb3NpdGlvbnMsICpvaWQpOwogCiAJaWYgKHBvcyA8IGtoX2VuZChwb3NpdGlvbnMpKSB7CkBAIC0xMDQxLDcgKzEwNDEsNyBAQAogCiBpbnQgcmVidWlsZF9leGlzdGluZ19iaXRtYXBzKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCiAJCQkgICAgIHN0cnVjdCBwYWNraW5nX2RhdGEgKm1hcHBpbmcsCi0JCQkgICAgIGtoYXNoX3NoYTEgKnJldXNlZF9iaXRtYXBzLAorCQkJICAgICBraF9vaWRfbWFwX3QgKnJldXNlZF9iaXRtYXBzLAogCQkJICAgICBpbnQgc2hvd19wcm9ncmVzcykKIHsKIAl1aW50MzJfdCBpLCBudW1fb2JqZWN0czsKQEAgLTEwNTcsMTMgKzEwNTcsMTMgQEAKIAlyZXBvc2l0aW9uID0geGNhbGxvYyhudW1fb2JqZWN0cywgc2l6ZW9mKHVpbnQzMl90KSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX29iamVjdHM7ICsraSkgewotCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKIAkJc3RydWN0IHJldmluZGV4X2VudHJ5ICplbnRyeTsKIAkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2U7CiAKIAkJZW50cnkgPSAmYml0bWFwX2dpdC0+cGFjay0+cmV2aW5kZXhbaV07Ci0JCXNoYTEgPSBudGhfcGFja2VkX29iamVjdF9zaGExKGJpdG1hcF9naXQtPnBhY2ssIGVudHJ5LT5ucik7Ci0JCW9lID0gcGFja2xpc3RfZmluZChtYXBwaW5nLCBzaGExLCBOVUxMKTsKKwkJbnRoX3BhY2tlZF9vYmplY3Rfb2lkKCZvaWQsIGJpdG1hcF9naXQtPnBhY2ssIGVudHJ5LT5ucik7CisJCW9lID0gcGFja2xpc3RfZmluZChtYXBwaW5nLCAmb2lkLCBOVUxMKTsKIAogCQlpZiAob2UpCiAJCQlyZXBvc2l0aW9uW2ldID0gb2VfaW5fcGFja19wb3MobWFwcGluZywgb2UpICsgMTsKQEAgLTEwODAsOSArMTA4MCw5IEBACiAJCQlpZiAoIXJlYnVpbGRfYml0bWFwKHJlcG9zaXRpb24sCiAJCQkJCSAgICBsb29rdXBfc3RvcmVkX2JpdG1hcChzdG9yZWQpLAogCQkJCQkgICAgcmVidWlsZCkpIHsKLQkJCQloYXNoX3BvcyA9IGtoX3B1dF9zaGExKHJldXNlZF9iaXRtYXBzLAotCQkJCQkJICAgICAgIHN0b3JlZC0+b2lkLmhhc2gsCi0JCQkJCQkgICAgICAgJmhhc2hfcmV0KTsKKwkJCQloYXNoX3BvcyA9IGtoX3B1dF9vaWRfbWFwKHJldXNlZF9iaXRtYXBzLAorCQkJCQkJCSAgc3RvcmVkLT5vaWQsCisJCQkJCQkJICAmaGFzaF9yZXQpOwogCQkJCWtoX3ZhbHVlKHJldXNlZF9iaXRtYXBzLCBoYXNoX3BvcykgPQogCQkJCQliaXRtYXBfdG9fZXdhaChyZWJ1aWxkKTsKIAkJCX0KZGlmZiAtLWdpdCBhL3BhY2stYml0bWFwLmggYi9wYWNrLWJpdG1hcC5oCmluZGV4IGVlOTc5MjIuLjAwZGUzZWMgMTAwNjQ0Ci0tLSBhL3BhY2stYml0bWFwLmgKKysrIGIvcGFjay1iaXRtYXAuaApAQCAtNTEsNyArNTEsNyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgcGFja2VkX2dpdCAqKnBhY2tmaWxlLAogCQkJCSAgICAgICB1aW50MzJfdCAqZW50cmllcywgb2ZmX3QgKnVwX3RvKTsKIGludCByZWJ1aWxkX2V4aXN0aW5nX2JpdG1hcHMoc3RydWN0IGJpdG1hcF9pbmRleCAqLCBzdHJ1Y3QgcGFja2luZ19kYXRhICptYXBwaW5nLAotCQkJICAgICBraGFzaF9zaGExICpyZXVzZWRfYml0bWFwcywgaW50IHNob3dfcHJvZ3Jlc3MpOworCQkJICAgICBraF9vaWRfbWFwX3QgKnJldXNlZF9iaXRtYXBzLCBpbnQgc2hvd19wcm9ncmVzcyk7CiB2b2lkIGZyZWVfYml0bWFwX2luZGV4KHN0cnVjdCBiaXRtYXBfaW5kZXggKik7CiAKIC8qCmRpZmYgLS1naXQgYS9wYWNrLW9iamVjdHMuYyBiL3BhY2stb2JqZWN0cy5jCmluZGV4IGNlMzNiODkuLjUyNTYwMjkgMTAwNjQ0Ci0tLSBhL3BhY2stb2JqZWN0cy5jCisrKyBiL3BhY2stb2JqZWN0cy5jCkBAIC02LDE3ICs2LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKIHN0YXRpYyB1aW50MzJfdCBsb2NhdGVfb2JqZWN0X2VudHJ5X2hhc2goc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEsCi0JCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAogCQkJCQkgaW50ICpmb3VuZCkKIHsKIAl1aW50MzJfdCBpLCBtYXNrID0gKHBkYXRhLT5pbmRleF9zaXplIC0gMSk7CiAKLQlpID0gc2hhMWhhc2goc2hhMSkgJiBtYXNrOworCWkgPSBvaWRoYXNoKG9pZCkgJiBtYXNrOwogCiAJd2hpbGUgKHBkYXRhLT5pbmRleFtpXSA+IDApIHsKIAkJdWludDMyX3QgcG9zID0gcGRhdGEtPmluZGV4W2ldIC0gMTsKIAotCQlpZiAoaGFzaGVxKHNoYTEsIHBkYXRhLT5vYmplY3RzW3Bvc10uaWR4Lm9pZC5oYXNoKSkgeworCQlpZiAob2lkZXEob2lkLCAmcGRhdGEtPm9iamVjdHNbcG9zXS5pZHgub2lkKSkgewogCQkJKmZvdW5kID0gMTsKIAkJCXJldHVybiBpOwogCQl9CkBAIC01Niw3ICs1Niw3IEBACiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5ucl9vYmplY3RzOyBpKyspIHsKIAkJaW50IGZvdW5kOwogCQl1aW50MzJfdCBpeCA9IGxvY2F0ZV9vYmplY3RfZW50cnlfaGFzaChwZGF0YSwKLQkJCQkJCSAgICAgICBlbnRyeS0+aWR4Lm9pZC5oYXNoLAorCQkJCQkJICAgICAgICZlbnRyeS0+aWR4Lm9pZCwKIAkJCQkJCSAgICAgICAmZm91bmQpOwogCiAJCWlmIChmb3VuZCkKQEAgLTY4LDcgKzY4LDcgQEAKIH0KIAogc3RydWN0IG9iamVjdF9lbnRyeSAqcGFja2xpc3RfZmluZChzdHJ1Y3QgcGFja2luZ19kYXRhICpwZGF0YSwKLQkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKIAkJCQkgICB1aW50MzJfdCAqaW5kZXhfcG9zKQogewogCXVpbnQzMl90IGk7CkBAIC03Nyw3ICs3Nyw3IEBACiAJaWYgKCFwZGF0YS0+aW5kZXhfc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpID0gbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKHBkYXRhLCBzaGExLCAmZm91bmQpOworCWkgPSBsb2NhdGVfb2JqZWN0X2VudHJ5X2hhc2gocGRhdGEsIG9pZCwgJmZvdW5kKTsKIAogCWlmIChpbmRleF9wb3MpCiAJCSppbmRleF9wb3MgPSBpOwpkaWZmIC0tZ2l0IGEvcGFjay1vYmplY3RzLmggYi9wYWNrLW9iamVjdHMuaAppbmRleCA2ZmRlN2NlLi44NTdkNDM4IDEwMDY0NAotLS0gYS9wYWNrLW9iamVjdHMuaAorKysgYi9wYWNrLW9iamVjdHMuaApAQCAtMTg3LDcgKzE4Nyw3IEBACiAJCQkJICAgIHVpbnQzMl90IGluZGV4X3Bvcyk7CiAKIHN0cnVjdCBvYmplY3RfZW50cnkgKnBhY2tsaXN0X2ZpbmQoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEsCi0JCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCiAJCQkJICAgdWludDMyX3QgKmluZGV4X3Bvcyk7CiAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgcGFja19uYW1lX2hhc2goY29uc3QgY2hhciAqbmFtZSkKZGlmZiAtLWdpdCBhL3BhY2tmaWxlLmMgYi9wYWNrZmlsZS5jCmluZGV4IGQ3ODZlYzcuLmZjNDNhNmMgMTAwNjQ0Ci0tLSBhL3BhY2tmaWxlLmMKKysrIGIvcGFja2ZpbGUuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgInRyZWUuaCIKICNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKICNpbmNsdWRlICJtaWR4LmgiCisjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCiAKIGNoYXIgKm9kYl9wYWNrX25hbWUoc3RydWN0IHN0cmJ1ZiAqYnVmLAogCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKQEAgLTMzNiw3ICszMzcsNyBAQAogCWNsb3NlX3BhY2tfaW5kZXgocCk7CiB9CiAKLXZvaWQgY2xvc2VfYWxsX3BhY2tzKHN0cnVjdCByYXdfb2JqZWN0X3N0b3JlICpvKQordm9pZCBjbG9zZV9vYmplY3Rfc3RvcmUoc3RydWN0IHJhd19vYmplY3Rfc3RvcmUgKm8pCiB7CiAJc3RydWN0IHBhY2tlZF9naXQgKnA7CiAKQEAgLTM1MCw2ICszNTEsMzYgQEAKIAkJY2xvc2VfbWlkeChvLT5tdWx0aV9wYWNrX2luZGV4KTsKIAkJby0+bXVsdGlfcGFja19pbmRleCA9IE5VTEw7CiAJfQorCisJY2xvc2VfY29tbWl0X2dyYXBoKG8pOworfQorCit2b2lkIHVubGlua19wYWNrX3BhdGgoY29uc3QgY2hhciAqcGFja19uYW1lLCBpbnQgZm9yY2VfZGVsZXRlKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpleHRzW10gPSB7Ii5wYWNrIiwgIi5pZHgiLCAiLmtlZXAiLCAiLmJpdG1hcCIsICIucHJvbWlzb3IifTsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBwbGVuOworCisJc3RyYnVmX2FkZHN0cigmYnVmLCBwYWNrX25hbWUpOworCXN0cmlwX3N1ZmZpeF9tZW0oYnVmLmJ1ZiwgJmJ1Zi5sZW4sICIucGFjayIpOworCXBsZW4gPSBidWYubGVuOworCisJaWYgKCFmb3JjZV9kZWxldGUpIHsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAiLmtlZXAiKTsKKwkJaWYgKCFhY2Nlc3MoYnVmLmJ1ZiwgRl9PSykpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh0cyk7IGkrKykgeworCQlzdHJidWZfc2V0bGVuKCZidWYsIHBsZW4pOworCQlzdHJidWZfYWRkc3RyKCZidWYsIGV4dHNbaV0pOworCQl1bmxpbmsoYnVmLmJ1Zik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiB9CiAKIC8qCkBAIC0xMjY5LDcgKzEzMDAsNyBAQAogCQlpZiAocG9pX3N0YWNrX25yID49IHBvaV9zdGFja19hbGxvYyAmJiBwb2lfc3RhY2sgPT0gc21hbGxfcG9pX3N0YWNrKSB7CiAJCQlwb2lfc3RhY2tfYWxsb2MgPSBhbGxvY19ucihwb2lfc3RhY2tfbnIpOwogCQkJQUxMT0NfQVJSQVkocG9pX3N0YWNrLCBwb2lfc3RhY2tfYWxsb2MpOwotCQkJbWVtY3B5KHBvaV9zdGFjaywgc21hbGxfcG9pX3N0YWNrLCBzaXplb2Yob2ZmX3QpKnBvaV9zdGFja19ucik7CisJCQlDT1BZX0FSUkFZKHBvaV9zdGFjaywgc21hbGxfcG9pX3N0YWNrLCBwb2lfc3RhY2tfbnIpOwogCQl9IGVsc2UgewogCQkJQUxMT0NfR1JPVyhwb2lfc3RhY2ssIHBvaV9zdGFja19ucisxLCBwb2lfc3RhY2tfYWxsb2MpOwogCQl9CkBAIC0xNjc5LDggKzE3MTAsOCBAQAogCQkgICAgJiYgZGVsdGFfc3RhY2sgPT0gc21hbGxfZGVsdGFfc3RhY2spIHsKIAkJCWRlbHRhX3N0YWNrX2FsbG9jID0gYWxsb2NfbnIoZGVsdGFfc3RhY2tfbnIpOwogCQkJQUxMT0NfQVJSQVkoZGVsdGFfc3RhY2ssIGRlbHRhX3N0YWNrX2FsbG9jKTsKLQkJCW1lbWNweShkZWx0YV9zdGFjaywgc21hbGxfZGVsdGFfc3RhY2ssCi0JCQkgICAgICAgc2l6ZW9mKCpkZWx0YV9zdGFjaykqZGVsdGFfc3RhY2tfbnIpOworCQkJQ09QWV9BUlJBWShkZWx0YV9zdGFjaywgc21hbGxfZGVsdGFfc3RhY2ssCisJCQkJICAgZGVsdGFfc3RhY2tfbnIpOwogCQl9IGVsc2UgewogCQkJQUxMT0NfR1JPVyhkZWx0YV9zdGFjaywgZGVsdGFfc3RhY2tfbnIrMSwgZGVsdGFfc3RhY2tfYWxsb2MpOwogCQl9CmRpZmYgLS1naXQgYS9wYWNrZmlsZS5oIGIvcGFja2ZpbGUuaAppbmRleCBiNjc4ZDM1Li4zZTk4OTEwIDEwMDY0NAotLS0gYS9wYWNrZmlsZS5oCisrKyBiL3BhY2tmaWxlLmgKQEAgLTkwLDEyICs5MCwxOSBAQAogdW5zaWduZWQgY2hhciAqdXNlX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKiwgc3RydWN0IHBhY2tfd2luZG93ICoqLCBvZmZfdCwgdW5zaWduZWQgbG9uZyAqKTsKIHZvaWQgY2xvc2VfcGFja193aW5kb3dzKHN0cnVjdCBwYWNrZWRfZ2l0ICopOwogdm9pZCBjbG9zZV9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICopOwotdm9pZCBjbG9zZV9hbGxfcGFja3Moc3RydWN0IHJhd19vYmplY3Rfc3RvcmUgKm8pOwordm9pZCBjbG9zZV9vYmplY3Rfc3RvcmUoc3RydWN0IHJhd19vYmplY3Rfc3RvcmUgKm8pOwogdm9pZCB1bnVzZV9wYWNrKHN0cnVjdCBwYWNrX3dpbmRvdyAqKik7CiB2b2lkIGNsZWFyX2RlbHRhX2Jhc2VfY2FjaGUodm9pZCk7CiBzdHJ1Y3QgcGFja2VkX2dpdCAqYWRkX3BhY2tlZF9naXQoY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfbGVuLCBpbnQgbG9jYWwpOwogCiAvKgorICogVW5saW5rIHRoZSAucGFjayBhbmQgYXNzb2NpYXRlZCBleHRlbnNpb24gZmlsZXMuCisgKiBEb2VzIG5vdCB1bmxpbmsgaWYgJ2ZvcmNlX2RlbGV0ZScgaXMgZmFsc2UgYW5kIHRoZSBwYWNrLWZpbGUgaXMKKyAqIG1hcmtlZCBhcyAiLmtlZXAiLgorICovCitleHRlcm4gdm9pZCB1bmxpbmtfcGFja19wYXRoKGNvbnN0IGNoYXIgKnBhY2tfbmFtZSwgaW50IGZvcmNlX2RlbGV0ZSk7CisKKy8qCiAgKiBNYWtlIHN1cmUgdGhhdCBhIHBvaW50ZXIgYWNjZXNzIGludG8gYW4gbW1hcCdkIGluZGV4IGZpbGUgaXMgd2l0aGluIGJvdW5kcywKICAqIGFuZCBjYW4gcHJvdmlkZSBhdCBsZWFzdCA4IGJ5dGVzIG9mIGRhdGEuCiAgKgpkaWZmIC0tZ2l0IGEvcGFnZXIuYyBiL3BhZ2VyLmMKaW5kZXggNDE2ODQ2MC4uNDE0NDZkNCAxMDA2NDQKLS0tIGEvcGFnZXIuYworKysgYi9wYWdlci5jCkBAIC0xNzgsNiArMTc4LDI2IEBACiB9CiAKIC8qCisgKiBDbGVhciB0aGUgZW50aXJlIGxpbmUsIGxlYXZlIGN1cnNvciBpbiBmaXJzdCBjb2x1bW4uCisgKi8KK3ZvaWQgdGVybV9jbGVhcl9saW5lKHZvaWQpCit7CisJaWYgKGlzX3Rlcm1pbmFsX2R1bWIoKSkKKwkJLyoKKwkJICogRmFsbCBiYWNrIHRvIHByaW50IGEgdGVybWluYWwgd2lkdGggd29ydGggb2Ygc3BhY2UKKwkJICogY2hhcmFjdGVycyAoaG9waW5nIHRoYXQgdGhlIHRlcm1pbmFsIGlzIHN0aWxsIGFzIHdpZGUKKwkJICogYXMgaXQgd2FzIHVwb24gdGhlIGZpcnN0IGNhbGwgdG8gdGVybV9jb2x1bW5zKCkpLgorCQkgKi8KKwkJZnByaW50ZihzdGRlcnIsICJcciUqc1xyIiwgdGVybV9jb2x1bW5zKCksICIiKTsKKwllbHNlCisJCS8qCisJCSAqIE9uIG5vbi1kdW1iIHRlcm1pbmFscyB1c2UgYW4gZXNjYXBlIHNlcXVlbmNlIHRvIGNsZWFyCisJCSAqIHRoZSB3aG9sZSBsaW5lLCBubyBtYXR0ZXIgaG93IHdpZGUgdGhlIHRlcm1pbmFsLgorCQkgKi8KKwkJZnB1dHMoIlxyXDAzM1tLIiwgc3RkZXJyKTsKK30KKworLyoKICAqIEhvdyBtYW55IGNvbHVtbnMgZG8gd2UgbmVlZCB0byBzaG93IHRoaXMgbnVtYmVyIGluIGRlY2ltYWw/CiAgKi8KIGludCBkZWNpbWFsX3dpZHRoKHVpbnRtYXhfdCBudW1iZXIpCmRpZmYgLS1naXQgYS9wYXJzZS1vcHRpb25zLWNiLmMgYi9wYXJzZS1vcHRpb25zLWNiLmMKaW5kZXggYTNkZTc5NS4uMTI0MGE4NSAxMDA2NDQKLS0tIGEvcGFyc2Utb3B0aW9ucy1jYi5jCisrKyBiL3BhcnNlLW9wdGlvbnMtY2IuYwpAQCAtMTU5LDYgKzE1OSwyMyBAQAogCXJldHVybiAwOwogfQogCitzdHJ1Y3Qgb3B0aW9uICpwYXJzZV9vcHRpb25zX2R1cChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvKQoreworCXN0cnVjdCBvcHRpb24gKm9wdHM7CisJaW50IG5yID0gMDsKKworCXdoaWxlIChvICYmIG8tPnR5cGUgIT0gT1BUSU9OX0VORCkgeworCQlucisrOworCQlvKys7CisJfQorCisJQUxMT0NfQVJSQVkob3B0cywgbnIgKyAxKTsKKwltZW1jcHkob3B0cywgbyAtIG5yLCBzaXplb2YoKm8pICogbnIpOworCW1lbXNldChvcHRzICsgbnIsIDAsIHNpemVvZigqb3B0cykpOworCW9wdHNbbnJdLnR5cGUgPSBPUFRJT05fRU5EOworCXJldHVybiBvcHRzOworfQorCiBzdHJ1Y3Qgb3B0aW9uICpwYXJzZV9vcHRpb25zX2NvbmNhdChzdHJ1Y3Qgb3B0aW9uICphLCBzdHJ1Y3Qgb3B0aW9uICpiKQogewogCXN0cnVjdCBvcHRpb24gKnJldDsKZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMuaCBiL3BhcnNlLW9wdGlvbnMuaAppbmRleCBhYzZiYThhLi5hNGJkNDBiIDEwMDY0NAotLS0gYS9wYXJzZS1vcHRpb25zLmgKKysrIGIvcGFyc2Utb3B0aW9ucy5oCkBAIC0yNzYsNiArMjc2LDcgQEAKIAogaW50IHBhcnNlX29wdGlvbnNfZW5kKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCk7CiAKK3N0cnVjdCBvcHRpb24gKnBhcnNlX29wdGlvbnNfZHVwKGNvbnN0IHN0cnVjdCBvcHRpb24gKmEpOwogc3RydWN0IG9wdGlvbiAqcGFyc2Vfb3B0aW9uc19jb25jYXQoc3RydWN0IG9wdGlvbiAqYSwgc3RydWN0IG9wdGlvbiAqYik7CiAKIC8qLS0tLS0gc29tZSBvZnRlbiB1c2VkIG9wdGlvbnMgLS0tLS0qLwpkaWZmIC0tZ2l0IGEvcGF0Y2gtaWRzLmMgYi9wYXRjaC1pZHMuYwppbmRleCBjMjYyZTFiLi5lOGMxNTBkIDEwMDY0NAotLS0gYS9wYXRjaC1pZHMuYworKysgYi9wYXRjaC1pZHMuYwpAQCAtMTEsNyArMTEsNyBAQAogfQogCiBpbnQgY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKLQkJICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGRpZmZfaGVhZGVyX29ubHkpCisJCSAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBkaWZmX2hlYWRlcl9vbmx5LCBpbnQgc3RhYmxlKQogewogCWlmICghcGF0Y2hfaWRfZGVmaW5lZChjb21taXQpKQogCQlyZXR1cm4gLTE7CkBAIC0yMiw3ICsyMiw3IEBACiAJZWxzZQogCQlkaWZmX3Jvb3RfdHJlZV9vaWQoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgIiIsIG9wdGlvbnMpOwogCWRpZmZjb3JlX3N0ZChvcHRpb25zKTsKLQlyZXR1cm4gZGlmZl9mbHVzaF9wYXRjaF9pZChvcHRpb25zLCBvaWQsIGRpZmZfaGVhZGVyX29ubHkpOworCXJldHVybiBkaWZmX2ZsdXNoX3BhdGNoX2lkKG9wdGlvbnMsIG9pZCwgZGlmZl9oZWFkZXJfb25seSwgc3RhYmxlKTsKIH0KIAogLyoKQEAgLTQ2LDExICs0NiwxMSBAQAogCXN0cnVjdCBwYXRjaF9pZCAqYiA9ICh2b2lkICopZW50cnlfb3Jfa2V5OwogCiAJaWYgKGlzX251bGxfb2lkKCZhLT5wYXRjaF9pZCkgJiYKLQkgICAgY29tbWl0X3BhdGNoX2lkKGEtPmNvbW1pdCwgb3B0LCAmYS0+cGF0Y2hfaWQsIDApKQorCSAgICBjb21taXRfcGF0Y2hfaWQoYS0+Y29tbWl0LCBvcHQsICZhLT5wYXRjaF9pZCwgMCwgMCkpCiAJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGdldCBwYXRjaCBJRCBmb3IgJXMiLAogCQkJb2lkX3RvX2hleCgmYS0+Y29tbWl0LT5vYmplY3Qub2lkKSk7CiAJaWYgKGlzX251bGxfb2lkKCZiLT5wYXRjaF9pZCkgJiYKLQkgICAgY29tbWl0X3BhdGNoX2lkKGItPmNvbW1pdCwgb3B0LCAmYi0+cGF0Y2hfaWQsIDApKQorCSAgICBjb21taXRfcGF0Y2hfaWQoYi0+Y29tbWl0LCBvcHQsICZiLT5wYXRjaF9pZCwgMCwgMCkpCiAJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGdldCBwYXRjaCBJRCBmb3IgJXMiLAogCQkJb2lkX3RvX2hleCgmYi0+Y29tbWl0LT5vYmplY3Qub2lkKSk7CiAJcmV0dXJuICFvaWRlcSgmYS0+cGF0Y2hfaWQsICZiLT5wYXRjaF9pZCk7CkBAIC04MCwxMCArODAsMTAgQEAKIAlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRlcl9vbmx5X3BhdGNoX2lkOwogCiAJcGF0Y2gtPmNvbW1pdCA9IGNvbW1pdDsKLQlpZiAoY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgJmlkcy0+ZGlmZm9wdHMsICZoZWFkZXJfb25seV9wYXRjaF9pZCwgMSkpCisJaWYgKGNvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMtPmRpZmZvcHRzLCAmaGVhZGVyX29ubHlfcGF0Y2hfaWQsIDEsIDApKQogCQlyZXR1cm4gLTE7CiAKLQloYXNobWFwX2VudHJ5X2luaXQocGF0Y2gsIHNoYTFoYXNoKGhlYWRlcl9vbmx5X3BhdGNoX2lkLmhhc2gpKTsKKwloYXNobWFwX2VudHJ5X2luaXQocGF0Y2gsIG9pZGhhc2goJmhlYWRlcl9vbmx5X3BhdGNoX2lkKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3BhdGNoLWlkcy5oIGIvcGF0Y2gtaWRzLmgKaW5kZXggODJhMTJiNi4uMDNiYjA0ZSAxMDA2NDQKLS0tIGEvcGF0Y2gtaWRzLmgKKysrIGIvcGF0Y2gtaWRzLmgKQEAgLTIwLDcgKzIwLDcgQEAKIH07CiAKIGludCBjb21taXRfcGF0Y2hfaWQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAotCQkgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQpOworCQkgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQsIGludCk7CiBpbnQgaW5pdF9wYXRjaF9pZHMoc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IHBhdGNoX2lkcyAqKTsKIGludCBmcmVlX3BhdGNoX2lkcyhzdHJ1Y3QgcGF0Y2hfaWRzICopOwogc3RydWN0IHBhdGNoX2lkICphZGRfY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKiwgc3RydWN0IHBhdGNoX2lkcyAqKTsKZGlmZiAtLWdpdCBhL3BvL1JFQURNRSBiL3BvL1JFQURNRQppbmRleCBhYTcwNGZmLi4wNzU5NWQzIDEwMDY0NAotLS0gYS9wby9SRUFETUUKKysrIGIvcG8vUkVBRE1FCkBAIC0yOTMsNyArMjkzLDcgQEAKIGVtaXRzIGdpYmJlcmlzaCBvbiBldmVyeSBjYWxsIHRvIGdldHRleHQuIFRvIHVzZSBpdCBydW4gdGhlIHRlc3Qgc3VpdGUKIHdpdGggaXQsIGUuZy46CiAKLSAgICBjZCB0ICYmIEdJVF9URVNUX0dFVFRFWFRfUE9JU09OPVllc1BsZWFzZSBwcm92ZSAtaiA5IC4vdFswLTldKi5zaAorICAgIGNkIHQgJiYgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049dHJ1ZSBwcm92ZSAtaiA5IC4vdFswLTldKi5zaAogCiBJZiB0ZXN0cyBicmVhayB3aXRoIGl0IHlvdSBzaG91bGQgaW5zcGVjdCB0aGVtIG1hbnVhbGx5IGFuZCBzZWUgaWYKIHdoYXQgeW91J3JlIHRyYW5zbGF0aW5nIGlzIHNhbmUsIGkuZS4gdGhhdCB5b3UncmUgbm90IHRyYW5zbGF0aW5nCmRpZmYgLS1naXQgYS9wcmV0dHkuYyBiL3ByZXR0eS5jCmluZGV4IGNlZDA0ODUuLmU0ZWQxNGUgMTAwNjQ0Ci0tLSBhL3ByZXR0eS5jCisrKyBiL3ByZXR0eS5jCkBAIC0xMDYsOCArMTA2LDggQEAKIAljb21taXRfZm9ybWF0c19sZW4gPSBBUlJBWV9TSVpFKGJ1aWx0aW5fZm9ybWF0cyk7CiAJYnVpbHRpbl9mb3JtYXRzX2xlbiA9IGNvbW1pdF9mb3JtYXRzX2xlbjsKIAlBTExPQ19HUk9XKGNvbW1pdF9mb3JtYXRzLCBjb21taXRfZm9ybWF0c19sZW4sIGNvbW1pdF9mb3JtYXRzX2FsbG9jKTsKLQltZW1jcHkoY29tbWl0X2Zvcm1hdHMsIGJ1aWx0aW5fZm9ybWF0cywKLQkgICAgICAgc2l6ZW9mKCpidWlsdGluX2Zvcm1hdHMpKkFSUkFZX1NJWkUoYnVpbHRpbl9mb3JtYXRzKSk7CisJQ09QWV9BUlJBWShjb21taXRfZm9ybWF0cywgYnVpbHRpbl9mb3JtYXRzLAorCQkgICBBUlJBWV9TSVpFKGJ1aWx0aW5fZm9ybWF0cykpOwogCiAJZ2l0X2NvbmZpZyhnaXRfcHJldHR5X2Zvcm1hdHNfY29uZmlnLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL3Byb2dyZXNzLmMgYi9wcm9ncmVzcy5jCmluZGV4IGEyZThjZjYuLjI3N2RiOGEgMTAwNjQ0Ci0tLSBhL3Byb2dyZXNzLmMKKysrIGIvcHJvZ3Jlc3MuYwpAQCAtODgsNyArODgsNiBAQAogCWNvbnN0IGNoYXIgKnRwOwogCXN0cnVjdCBzdHJidWYgKmNvdW50ZXJzX3NiID0gJnByb2dyZXNzLT5jb3VudGVyc19zYjsKIAlpbnQgc2hvd191cGRhdGUgPSAwOwotCWludCBsYXN0X2NvdW50X2xlbiA9IGNvdW50ZXJzX3NiLT5sZW47CiAKIAlpZiAocHJvZ3Jlc3MtPmRlbGF5ICYmICghcHJvZ3Jlc3NfdXBkYXRlIHx8IC0tcHJvZ3Jlc3MtPmRlbGF5KSkKIAkJcmV0dXJuOwpAQCAtMTE2LDI2ICsxMTUsMjEgQEAKIAlpZiAoc2hvd191cGRhdGUpIHsKIAkJaWYgKGlzX2ZvcmVncm91bmRfZmQoZmlsZW5vKHN0ZGVycikpIHx8IGRvbmUpIHsKIAkJCWNvbnN0IGNoYXIgKmVvbCA9IGRvbmUgPyBkb25lIDogIlxyIjsKLQkJCXNpemVfdCBjbGVhcl9sZW4gPSBjb3VudGVyc19zYi0+bGVuIDwgbGFzdF9jb3VudF9sZW4gPwotCQkJCQlsYXN0X2NvdW50X2xlbiAtIGNvdW50ZXJzX3NiLT5sZW4gKyAxIDoKLQkJCQkJMDsKLQkJCXNpemVfdCBwcm9ncmVzc19saW5lX2xlbiA9IHByb2dyZXNzLT50aXRsZV9sZW4gKwotCQkJCQkJY291bnRlcnNfc2ItPmxlbiArIDI7Ci0JCQlpbnQgY29scyA9IHRlcm1fY29sdW1ucygpOwogCisJCQl0ZXJtX2NsZWFyX2xpbmUoKTsKIAkJCWlmIChwcm9ncmVzcy0+c3BsaXQpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgJXMlKnMiLCBjb3VudGVyc19zYi0+YnVmLAotCQkJCQkoaW50KSBjbGVhcl9sZW4sIGVvbCk7Ci0JCQl9IGVsc2UgaWYgKCFkb25lICYmIGNvbHMgPCBwcm9ncmVzc19saW5lX2xlbikgewotCQkJCWNsZWFyX2xlbiA9IHByb2dyZXNzLT50aXRsZV9sZW4gKyAxIDwgY29scyA/Ci0JCQkJCSAgICBjb2xzIC0gcHJvZ3Jlc3MtPnRpdGxlX2xlbiAtIDEgOiAwOwotCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6JSpzXG4gICVzJXMiLAotCQkJCQlwcm9ncmVzcy0+dGl0bGUsIChpbnQpIGNsZWFyX2xlbiwgIiIsCi0JCQkJCWNvdW50ZXJzX3NiLT5idWYsIGVvbCk7CisJCQkJZnByaW50ZihzdGRlcnIsICIgICVzJXMiLCBjb3VudGVyc19zYi0+YnVmLAorCQkJCQllb2wpOworCQkJfSBlbHNlIGlmICghZG9uZSAmJgorCQkJCSAgIC8qIFRoZSAiKyAyIiBhY2NvdW50cyBmb3IgdGhlICI6ICIuICovCisJCQkJICAgdGVybV9jb2x1bW5zKCkgPCBwcm9ncmVzcy0+dGl0bGVfbGVuICsKKwkJCQkJCSAgICBjb3VudGVyc19zYi0+bGVuICsgMikgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6XG4gICVzJXMiLAorCQkJCQlwcm9ncmVzcy0+dGl0bGUsIGNvdW50ZXJzX3NiLT5idWYsIGVvbCk7CiAJCQkJcHJvZ3Jlc3MtPnNwbGl0ID0gMTsKIAkJCX0gZWxzZSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICIlczogJXMlKnMiLCBwcm9ncmVzcy0+dGl0bGUsCi0JCQkJCWNvdW50ZXJzX3NiLT5idWYsIChpbnQpIGNsZWFyX2xlbiwgZW9sKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlcyVzIiwgcHJvZ3Jlc3MtPnRpdGxlLAorCQkJCQljb3VudGVyc19zYi0+YnVmLCBlb2wpOwogCQkJfQogCQkJZmZsdXNoKHN0ZGVycik7CiAJCX0KQEAgLTE1MCw4ICsxNDQsNyBAQAogCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiLCAiKTsKIAlzdHJidWZfaHVtYW5pc2VfYnl0ZXMoYnVmLCB0b3RhbCk7CiAJc3RyYnVmX2FkZHN0cihidWYsICIgfCAiKTsKLQlzdHJidWZfaHVtYW5pc2VfYnl0ZXMoYnVmLCByYXRlICogMTAyNCk7Ci0Jc3RyYnVmX2FkZHN0cihidWYsICIvcyIpOworCXN0cmJ1Zl9odW1hbmlzZV9yYXRlKGJ1ZiwgcmF0ZSAqIDEwMjQpOwogfQogCiB2b2lkIGRpc3BsYXlfdGhyb3VnaHB1dChzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLCB1aW50NjRfdCB0b3RhbCkKZGlmZiAtLWdpdCBhL3JhbmdlLWRpZmYuYyBiL3JhbmdlLWRpZmYuYwppbmRleCA0OGIwZTFiLi5iYTFlOWE0IDEwMDY0NAotLS0gYS9yYW5nZS1kaWZmLmMKKysrIGIvcmFuZ2UtZGlmZi5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAicHJldHR5LmgiCiAjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJhcHBseS5oIgogCiBzdHJ1Y3QgcGF0Y2hfdXRpbCB7CiAJLyogRm9yIHRoZSBzZWFyY2ggZm9yIGFuIGV4YWN0IG1hdGNoICovCkBAIC0yNCw2ICsyNSwxNyBAQAogCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogfTsKIAorc3RhdGljIHNpemVfdCBmaW5kX2VuZF9vZl9saW5lKGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWNoYXIgKmVvbCA9IG1lbWNocihidWZmZXIsICdcbicsIHNpemUpOworCisJaWYgKCFlb2wpCisJCXJldHVybiBzaXplOworCisJKmVvbCA9ICdcMCc7CisJcmV0dXJuIGVvbCArIDEgLSBidWZmZXI7Cit9CisKIC8qCiAgKiBSZWFkcyB0aGUgcGF0Y2hlcyBpbnRvIGEgc3RyaW5nIGxpc3QsIHdpdGggdGhlIGB1dGlsYCBmaWVsZCBiZWluZyBwb3B1bGF0ZWQKICAqIGFzIHN0cnVjdCBvYmplY3RfaWQgKHdpbGwgbmVlZCB0byBiZSBmcmVlKClkKS4KQEAgLTMxLDEwICs0MywxMiBAQAogc3RhdGljIGludCByZWFkX3BhdGNoZXMoY29uc3QgY2hhciAqcmFuZ2UsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKIHsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKLQlGSUxFICppbjsKLQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBsaW5lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgY29udGVudHMgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3QgcGF0Y2hfdXRpbCAqdXRpbCA9IE5VTEw7CiAJaW50IGluX2hlYWRlciA9IDE7CisJY2hhciAqbGluZSwgKmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOworCWludCBvZmZzZXQsIGxlbjsKKwlzaXplX3Qgc2l6ZTsKIAogCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJsb2ciLCAiLS1uby1jb2xvciIsICItcCIsICItLW5vLW1lcmdlcyIsCiAJCQkiLS1yZXZlcnNlIiwgIi0tZGF0ZS1vcmRlciIsICItLWRlY29yYXRlPW5vIiwKQEAgLTU0LDE3ICs2OCwyMCBAQAogCiAJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSkKIAkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBzdGFydCBgbG9nYCIpKTsKLQlpbiA9IGZkb3BlbihjcC5vdXQsICJyIik7Ci0JaWYgKCFpbikgeworCWlmIChzdHJidWZfcmVhZCgmY29udGVudHMsIGNwLm91dCwgMCkgPCAwKSB7CiAJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIGBsb2dgIG91dHB1dCIpKTsKIAkJZmluaXNoX2NvbW1hbmQoJmNwKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgaW4pICE9IEVPRikgeworCWxpbmUgPSBjb250ZW50cy5idWY7CisJc2l6ZSA9IGNvbnRlbnRzLmxlbjsKKwlmb3IgKG9mZnNldCA9IDA7IHNpemUgPiAwOyBvZmZzZXQgKz0gbGVuLCBzaXplIC09IGxlbiwgbGluZSArPSBsZW4pIHsKIAkJY29uc3QgY2hhciAqcDsKIAotCQlpZiAoc2tpcF9wcmVmaXgobGluZS5idWYsICJjb21taXQgIiwgJnApKSB7CisJCWxlbiA9IGZpbmRfZW5kX29mX2xpbmUobGluZSwgc2l6ZSk7CisJCWxpbmVbbGVuIC0gMV0gPSAnXDAnOworCQlpZiAoc2tpcF9wcmVmaXgobGluZSwgImNvbW1pdCAiLCAmcCkpIHsKIAkJCWlmICh1dGlsKSB7CiAJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIGJ1Zi5idWYpLT51dGlsID0gdXRpbDsKIAkJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CkBAIC03NSw4ICs5Miw3IEBACiAJCQkJZnJlZSh1dGlsKTsKIAkJCQlzdHJpbmdfbGlzdF9jbGVhcihsaXN0LCAxKTsKIAkJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKLQkJCQlzdHJidWZfcmVsZWFzZSgmbGluZSk7Ci0JCQkJZmNsb3NlKGluKTsKKwkJCQlzdHJidWZfcmVsZWFzZSgmY29udGVudHMpOwogCQkJCWZpbmlzaF9jb21tYW5kKCZjcCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQpAQCAtODUsNjEgKzEwMSw5NSBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoc3RhcnRzX3dpdGgobGluZS5idWYsICJkaWZmIC0tZ2l0IikpIHsKKwkJaWYgKHN0YXJ0c193aXRoKGxpbmUsICJkaWZmIC0tZ2l0IikpIHsKKwkJCXN0cnVjdCBwYXRjaCBwYXRjaCA9IHsgMCB9OworCQkJc3RydWN0IHN0cmJ1ZiByb290ID0gU1RSQlVGX0lOSVQ7CisJCQlpbnQgbGluZW5yID0gMDsKKwogCQkJaW5faGVhZGVyID0gMDsKIAkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKIAkJCWlmICghdXRpbC0+ZGlmZl9vZmZzZXQpCiAJCQkJdXRpbC0+ZGlmZl9vZmZzZXQgPSBidWYubGVuOwotCQkJc3RyYnVmX2FkZGNoKCZidWYsICcgJyk7Ci0JCQlzdHJidWZfYWRkYnVmKCZidWYsICZsaW5lKTsKKwkJCWxpbmVbbGVuIC0gMV0gPSAnXG4nOworCQkJbGVuID0gcGFyc2VfZ2l0X2RpZmZfaGVhZGVyKCZyb290LCAmbGluZW5yLCAxLCBsaW5lLAorCQkJCQkJICAgIGxlbiwgc2l6ZSwgJnBhdGNoKTsKKwkJCWlmIChsZW4gPCAwKQorCQkJCWRpZShfKCJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciKSwgKGludClsZW4sIGxpbmUpOworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiICMjICIpOworCQkJaWYgKHBhdGNoLmlzX25ldyA+IDApCisJCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzIChuZXcpIiwgcGF0Y2gubmV3X25hbWUpOworCQkJZWxzZSBpZiAocGF0Y2guaXNfZGVsZXRlID4gMCkKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiJXMgKGRlbGV0ZWQpIiwgcGF0Y2gub2xkX25hbWUpOworCQkJZWxzZSBpZiAocGF0Y2guaXNfcmVuYW1lKQorCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcyA9PiAlcyIsIHBhdGNoLm9sZF9uYW1lLCBwYXRjaC5uZXdfbmFtZSk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBwYXRjaC5uZXdfbmFtZSk7CisKKwkJCWZyZWUoY3VycmVudF9maWxlbmFtZSk7CisJCQlpZiAocGF0Y2guaXNfZGVsZXRlID4gMCkKKwkJCQljdXJyZW50X2ZpbGVuYW1lID0geHN0cmR1cChwYXRjaC5vbGRfbmFtZSk7CisJCQllbHNlCisJCQkJY3VycmVudF9maWxlbmFtZSA9IHhzdHJkdXAocGF0Y2gubmV3X25hbWUpOworCisJCQlpZiAocGF0Y2gubmV3X21vZGUgJiYgcGF0Y2gub2xkX21vZGUgJiYKKwkJCSAgICBwYXRjaC5vbGRfbW9kZSAhPSBwYXRjaC5uZXdfbW9kZSkKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiIChtb2RlIGNoYW5nZSAlMDZvID0+ICUwNm8pIiwKKwkJCQkJICAgIHBhdGNoLm9sZF9tb2RlLCBwYXRjaC5uZXdfbW9kZSk7CisKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiAjIyIpOwogCQl9IGVsc2UgaWYgKGluX2hlYWRlcikgewotCQkJaWYgKHN0YXJ0c193aXRoKGxpbmUuYnVmLCAiQXV0aG9yOiAiKSkgewotCQkJCXN0cmJ1Zl9hZGRidWYoJmJ1ZiwgJmxpbmUpOworCQkJaWYgKHN0YXJ0c193aXRoKGxpbmUsICJBdXRob3I6ICIpKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiICMjIE1ldGFkYXRhICMjXG4iKTsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWYsIGxpbmUpOwogCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIlxuXG4iKTsKLQkJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZS5idWYsICIgICAgIikpIHsKLQkJCQlzdHJidWZfcnRyaW0oJmxpbmUpOwotCQkJCXN0cmJ1Zl9hZGRidWYoJmJ1ZiwgJmxpbmUpOworCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiAjIyBDb21taXQgbWVzc2FnZSAjI1xuIik7CisJCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGxpbmUsICIgICAgIikpIHsKKwkJCQlwID0gbGluZSArIGxlbiAtIDI7CisJCQkJd2hpbGUgKGlzc3BhY2UoKnApICYmIHAgPj0gbGluZSkKKwkJCQkJcC0tOworCQkJCXN0cmJ1Zl9hZGQoJmJ1ZiwgbGluZSwgcCAtIGxpbmUgKyAxKTsKIAkJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CiAJCQl9CiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChsaW5lLmJ1ZiwgIkBAICIpKQorCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGxpbmUsICJAQCAiLCAmcCkpIHsKKwkJCXAgPSBzdHJzdHIocCwgIkBAIik7CiAJCQlzdHJidWZfYWRkc3RyKCZidWYsICJAQCIpOwotCQllbHNlIGlmICghbGluZS5idWZbMF0gfHwgc3RhcnRzX3dpdGgobGluZS5idWYsICJpbmRleCAiKSkKKwkJCWlmIChjdXJyZW50X2ZpbGVuYW1lICYmIHBbMl0pCisJCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiAlczoiLCBjdXJyZW50X2ZpbGVuYW1lKTsKKwkJCWlmIChwKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcCArIDIpOworCQl9IGVsc2UgaWYgKCFsaW5lWzBdKQogCQkJLyoKIAkJCSAqIEEgY29tcGxldGVseSBibGFuayAobm90ICcgXG4nLCB3aGljaCBpcyBjb250ZXh0KQogCQkJICogbGluZSBpcyBub3QgdmFsaWQgaW4gYSBkaWZmLiAgV2Ugc2tpcCBpdAogCQkJICogc2lsZW50bHksIGJlY2F1c2UgdGhpcyBuZWF0bHkgaGFuZGxlcyB0aGUgYmxhbmsKIAkJCSAqIHNlcGFyYXRvciBsaW5lIGJldHdlZW4gY29tbWl0cyBpbiBnaXQtbG9nCiAJCQkgKiBvdXRwdXQuCi0JCQkgKgotCQkJICogV2UgYWxzbyB3YW50IHRvIGlnbm9yZSB0aGUgZGlmZidzIGBpbmRleGAgbGluZXMKLQkJCSAqIGJlY2F1c2UgdGhleSBjb250YWluIGV4YWN0IGJsb2IgaGFzaGVzIGluIHdoaWNoCi0JCQkgKiB3ZSBhcmUgbm90IGludGVyZXN0ZWQuCiAJCQkgKi8KIAkJCWNvbnRpbnVlOwotCQllbHNlIGlmIChsaW5lLmJ1ZlswXSA9PSAnPicpIHsKKwkJZWxzZSBpZiAobGluZVswXSA9PSAnPicpIHsKIAkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnKycpOwotCQkJc3RyYnVmX2FkZCgmYnVmLCBsaW5lLmJ1ZiArIDEsIGxpbmUubGVuIC0gMSk7Ci0JCX0gZWxzZSBpZiAobGluZS5idWZbMF0gPT0gJzwnKSB7CisJCQlzdHJidWZfYWRkc3RyKCZidWYsIGxpbmUgKyAxKTsKKwkJfSBlbHNlIGlmIChsaW5lWzBdID09ICc8JykgewogCQkJc3RyYnVmX2FkZGNoKCZidWYsICctJyk7Ci0JCQlzdHJidWZfYWRkKCZidWYsIGxpbmUuYnVmICsgMSwgbGluZS5sZW4gLSAxKTsKLQkJfSBlbHNlIGlmIChsaW5lLmJ1ZlswXSA9PSAnIycpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbGluZSArIDEpOworCQl9IGVsc2UgaWYgKGxpbmVbMF0gPT0gJyMnKSB7CiAJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJyAnKTsKLQkJCXN0cmJ1Zl9hZGQoJmJ1ZiwgbGluZS5idWYgKyAxLCBsaW5lLmxlbiAtIDEpOworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBsaW5lICsgMSk7CiAJCX0gZWxzZSB7CiAJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJyAnKTsKLQkJCXN0cmJ1Zl9hZGRidWYoJmJ1ZiwgJmxpbmUpOworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBsaW5lKTsKIAkJfQogCiAJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKIAkJdXRpbC0+ZGlmZnNpemUrKzsKIAl9Ci0JZmNsb3NlKGluKTsKLQlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJc3RyYnVmX3JlbGVhc2UoJmNvbnRlbnRzKTsKIAogCWlmICh1dGlsKQogCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgYnVmLmJ1ZiktPnV0aWwgPSB1dGlsOwogCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWZyZWUoY3VycmVudF9maWxlbmFtZSk7CiAKIAlpZiAoZmluaXNoX2NvbW1hbmQoJmNwKSkKIAkJcmV0dXJuIC0xOwpAQCAtMTQ4LDcgKzE5OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcGF0Y2hfdXRpbF9jbXAoY29uc3Qgdm9pZCAqZHVtbXksIGNvbnN0IHN0cnVjdCBwYXRjaF91dGlsICphLAotCQkgICAgIGNvbnN0IHN0cnVjdCBwYXRjaF91dGlsICpiLCBjb25zdCBjaGFyICprZXlkYXRhKQorCQkJICBjb25zdCBzdHJ1Y3QgcGF0Y2hfdXRpbCAqYiwgY29uc3QgY2hhciAqa2V5ZGF0YSkKIHsKIAlyZXR1cm4gc3RyY21wKGEtPmRpZmYsIGtleWRhdGEgPyBrZXlkYXRhIDogYi0+ZGlmZik7CiB9CkBAIC0zNTQsOCArNDA0LDkgQEAKIAlmd3JpdGUoYnVmLT5idWYsIGJ1Zi0+bGVuLCAxLCBkaWZmb3B0LT5maWxlKTsKIH0KIAotc3RhdGljIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgbm9fZnVuY19uYW1lID0gewotCS5mdW5jbmFtZSA9IHsgIiReIiwgMCB9CitzdGF0aWMgc3RydWN0IHVzZXJkaWZmX2RyaXZlciBzZWN0aW9uX2hlYWRlcnMgPSB7CisJLmZ1bmNuYW1lID0geyAiXiAjIyAoLiopICMjJFxuIgorCQkgICAgICAiXi4/QEAgKC4qKSQiLCBSRUdfRVhURU5ERUQgfQogfTsKIAogc3RhdGljIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpnZXRfZmlsZXNwZWMoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcCkKQEAgLTM2NywxMyArNDE4LDEzIEBACiAJc3BlYy0+c2l6ZSA9IHN0cmxlbihwKTsKIAlzcGVjLT5zaG91bGRfbXVubWFwID0gMDsKIAlzcGVjLT5pc19zdGRpbiA9IDE7Ci0Jc3BlYy0+ZHJpdmVyID0gJm5vX2Z1bmNfbmFtZTsKKwlzcGVjLT5kcml2ZXIgPSAmc2VjdGlvbl9oZWFkZXJzOwogCiAJcmV0dXJuIHNwZWM7CiB9CiAKIHN0YXRpYyB2b2lkIHBhdGNoX2RpZmYoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwKLQkJCSAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQpCisJCSAgICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0KQogewogCWRpZmZfcXVldWUoJmRpZmZfcXVldWVkX2RpZmYsCiAJCSAgIGdldF9maWxlc3BlYygiYSIsIGEpLCBnZXRfZmlsZXNwZWMoImIiLCBiKSk7CkBAIC00NjksNiArNTIwLDcgQEAKIAkJCW9wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOwogCQlvcHRzLmZsYWdzLnN1cHByZXNzX2RpZmZfaGVhZGVycyA9IDE7CiAJCW9wdHMuZmxhZ3MuZHVhbF9jb2xvcl9kaWZmZWRfZGlmZnMgPSBkdWFsX2NvbG9yOworCQlvcHRzLmZsYWdzLnN1cHByZXNzX2h1bmtfaGVhZGVyX2xpbmVfY291bnQgPSAxOwogCQlvcHRzLm91dHB1dF9wcmVmaXggPSBvdXRwdXRfcHJlZml4X2NiOwogCQlzdHJidWZfYWRkc3RyKCZpbmRlbnQsICIgICAgIik7CiAJCW9wdHMub3V0cHV0X3ByZWZpeF9kYXRhID0gJmluZGVudDsKZGlmZiAtLWdpdCBhL3JlYWNoYWJsZS5jIGIvcmVhY2hhYmxlLmMKaW5kZXggMGQwMGE5MS4uOGY1MDIzNSAxMDA2NDQKLS0tIGEvcmVhY2hhYmxlLmMKKysrIGIvcmVhY2hhYmxlLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHN0YXQgc3Q7Ci0Jc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkLT5oYXNoKTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOwogCiAJaWYgKG9iaiAmJiBvYmotPmZsYWdzICYgU0VFTikKIAkJcmV0dXJuIDA7CkBAIC0xMzQsNyArMTM0LDcgQEAKIAkJCSAgICAgc3RydWN0IHBhY2tlZF9naXQgKnAsIHVpbnQzMl90IHBvcywKIAkJCSAgICAgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQtPmhhc2gpOworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CiAKIAlpZiAob2JqICYmIG9iai0+ZmxhZ3MgJiBTRUVOKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3JlYWQtY2FjaGUuYyBiL3JlYWQtY2FjaGUuYwppbmRleCAzMjgxNjc2Li41MmZmYThhIDEwMDY0NAotLS0gYS9yZWFkLWNhY2hlLmMKKysrIGIvcmVhZC1jYWNoZS5jCkBAIC01NDksNyArNTQ5LDcgQEAKIAlmaXJzdCA9IDA7CiAJbGFzdCA9IGlzdGF0ZS0+Y2FjaGVfbnI7CiAJd2hpbGUgKGxhc3QgPiBmaXJzdCkgewotCQlpbnQgbmV4dCA9IChsYXN0ICsgZmlyc3QpID4+IDE7CisJCWludCBuZXh0ID0gZmlyc3QgKyAoKGxhc3QgLSBmaXJzdCkgPj4gMSk7CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW25leHRdOwogCQlpbnQgY21wID0gY2FjaGVfbmFtZV9zdGFnZV9jb21wYXJlKG5hbWUsIG5hbWVsZW4sIHN0YWdlLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIGNlX3N0YWdlKGNlKSk7CiAJCWlmICghY21wKQpAQCAtMjAzNyw3ICsyMDM3LDcgQEAKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9hZF9jYWNoZV9lbnRyaWVzX3RocmVhZGVkKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICptbWFwLCBzaXplX3QgbW1hcF9zaXplLAotCQkJdW5zaWduZWQgbG9uZyBzcmNfb2Zmc2V0LCBpbnQgbnJfdGhyZWFkcywgc3RydWN0IGluZGV4X2VudHJ5X29mZnNldF90YWJsZSAqaWVvdCkKKwkJCQkJCSBpbnQgbnJfdGhyZWFkcywgc3RydWN0IGluZGV4X2VudHJ5X29mZnNldF90YWJsZSAqaWVvdCkKIHsKIAlpbnQgaSwgb2Zmc2V0LCBpZW90X2Jsb2NrcywgaWVvdF9zdGFydCwgZXJyOwogCXN0cnVjdCBsb2FkX2NhY2hlX2VudHJpZXNfdGhyZWFkX2RhdGEgKmRhdGE7CkBAIC0yMTQwLDcgKzIxNDAsNyBAQAogCWlmIChtbWFwX3NpemUgPCBzaXplb2Yoc3RydWN0IGNhY2hlX2hlYWRlcikgKyB0aGVfaGFzaF9hbGdvLT5yYXdzeikKIAkJZGllKF8oIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIpLCBwYXRoKTsKIAotCW1tYXAgPSB4bW1hcChOVUxMLCBtbWFwX3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwltbWFwID0geG1tYXBfZ2VudGx5KE5VTEwsIG1tYXBfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOwogCWlmIChtbWFwID09IE1BUF9GQUlMRUQpCiAJCWRpZV9lcnJubyhfKCIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIiksIHBhdGgpOwogCWNsb3NlKGZkKTsKQEAgLTIxOTgsNyArMjE5OCw3IEBACiAJCWllb3QgPSByZWFkX2llb3RfZXh0ZW5zaW9uKG1tYXAsIG1tYXBfc2l6ZSwgZXh0ZW5zaW9uX29mZnNldCk7CiAKIAlpZiAoaWVvdCkgewotCQlzcmNfb2Zmc2V0ICs9IGxvYWRfY2FjaGVfZW50cmllc190aHJlYWRlZChpc3RhdGUsIG1tYXAsIG1tYXBfc2l6ZSwgc3JjX29mZnNldCwgbnJfdGhyZWFkcywgaWVvdCk7CisJCXNyY19vZmZzZXQgKz0gbG9hZF9jYWNoZV9lbnRyaWVzX3RocmVhZGVkKGlzdGF0ZSwgbW1hcCwgbW1hcF9zaXplLCBucl90aHJlYWRzLCBpZW90KTsKIAkJZnJlZShpZW90KTsKIAl9IGVsc2UgewogCQlzcmNfb2Zmc2V0ICs9IGxvYWRfYWxsX2NhY2hlX2VudHJpZXMoaXN0YXRlLCBtbWFwLCBtbWFwX3NpemUsIHNyY19vZmZzZXQpOwpkaWZmIC0tZ2l0IGEvcmVmLWZpbHRlci5jIGIvcmVmLWZpbHRlci5jCmluZGV4IDg1MDA2NzEuLmYyN2NmYzggMTAwNjQ0Ci0tLSBhL3JlZi1maWx0ZXIuYworKysgYi9yZWYtZmlsdGVyLmMKQEAgLTIwLDYgKzIwLDkgQEAKICNpbmNsdWRlICJjb21taXQtc2xhYi5oIgogI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgogI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKIAogc3RhdGljIHN0cnVjdCByZWZfbXNnIHsKIAljb25zdCBjaGFyICpnb25lOwpAQCAtNzUsNiArNzgsMjcgQEAKIAlzdHJ1Y3Qgb2JqZWN0X2luZm8gaW5mbzsKIH0gb2ksIG9pX2RlcmVmOwogCitzdHJ1Y3QgcmVmX3RvX3dvcmt0cmVlX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7IC8qIG11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciEgKi8KKwlzdHJ1Y3Qgd29ya3RyZWUgKnd0OyAvKiBrZXkgaXMgd3QtPmhlYWRfcmVmICovCit9OworCitzdGF0aWMgaW50IHJlZl90b193b3JrdHJlZV9tYXBfY21wZm5jKGNvbnN0IHZvaWQgKnVudXNlZF9sb29rdXBkYXRhLAorCQkJCSAgICAgIGNvbnN0IHZvaWQgKmV4aXN0aW5nX2hhc2htYXBfZW50cnlfdG9fdGVzdCwKKwkJCQkgICAgICBjb25zdCB2b2lkICprZXksCisJCQkJICAgICAgY29uc3Qgdm9pZCAqa2V5ZGF0YV9ha2FfcmVmbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgcmVmX3RvX3dvcmt0cmVlX2VudHJ5ICplID0gZXhpc3RpbmdfaGFzaG1hcF9lbnRyeV90b190ZXN0OworCWNvbnN0IHN0cnVjdCByZWZfdG9fd29ya3RyZWVfZW50cnkgKmsgPSBrZXk7CisJcmV0dXJuIHN0cmNtcChlLT53dC0+aGVhZF9yZWYsCisJCWtleWRhdGFfYWthX3JlZm5hbWUgPyBrZXlkYXRhX2FrYV9yZWZuYW1lIDogay0+d3QtPmhlYWRfcmVmKTsKK30KKworc3RhdGljIHN0cnVjdCByZWZfdG9fd29ya3RyZWVfbWFwIHsKKwlzdHJ1Y3QgaGFzaG1hcCBtYXA7CisJc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzOworfSByZWZfdG9fd29ya3RyZWVfbWFwOworCiAvKgogICogQW4gYXRvbSBpcyBhIHZhbGlkIGZpZWxkIGF0b20gbGlzdGVkIGJlbG93LCBwb3NzaWJseSBwcmVmaXhlZCB3aXRoCiAgKiBhICIqIiB0byBkZW5vdGUgZGVyZWZfdGFnKCkuCkBAIC00ODAsNiArNTA0LDcgQEAKIAl7ICJmbGFnIiwgU09VUkNFX05PTkUgfSwKIAl7ICJIRUFEIiwgU09VUkNFX05PTkUsIEZJRUxEX1NUUiwgaGVhZF9hdG9tX3BhcnNlciB9LAogCXsgImNvbG9yIiwgU09VUkNFX05PTkUsIEZJRUxEX1NUUiwgY29sb3JfYXRvbV9wYXJzZXIgfSwKKwl7ICJ3b3JrdHJlZXBhdGgiLCBTT1VSQ0VfTk9ORSB9LAogCXsgImFsaWduIiwgU09VUkNFX05PTkUsIEZJRUxEX1NUUiwgYWxpZ25fYXRvbV9wYXJzZXIgfSwKIAl7ICJlbmQiLCBTT1VSQ0VfTk9ORSB9LAogCXsgImlmIiwgU09VUkNFX05PTkUsIEZJRUxEX1NUUiwgaWZfYXRvbV9wYXJzZXIgfSwKQEAgLTE0NDcsMzUgKzE0NzIsMzUgQEAKIAlzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlIHN0YXRlOwogCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOwogCXd0X3N0YXR1c19nZXRfc3RhdGUodGhlX3JlcG9zaXRvcnksICZzdGF0ZSwgMSk7CisKKwkvKgorCSAqIFRoZSAoIGNoYXJhY3RlciBtdXN0IGJlIGhhcmQtY29kZWQgYW5kIG5vdCBwYXJ0IG9mIGEgbG9jYWxpemFibGUKKwkgKiBzdHJpbmcsIHNpbmNlIHRoZSBkZXNjcmlwdGlvbiBpcyB1c2VkIGFzIGEgc29ydCBrZXkgYW5kIGNvbXBhcmVkCisJICogd2l0aCByZWYgbmFtZXMuCisJICovCisJc3RyYnVmX2FkZGNoKCZkZXNjLCAnKCcpOwogCWlmIChzdGF0ZS5yZWJhc2VfaW5fcHJvZ3Jlc3MgfHwKIAkgICAgc3RhdGUucmViYXNlX2ludGVyYWN0aXZlX2luX3Byb2dyZXNzKSB7CiAJCWlmIChzdGF0ZS5icmFuY2gpCi0JCQlzdHJidWZfYWRkZigmZGVzYywgXygiKG5vIGJyYW5jaCwgcmViYXNpbmcgJXMpIiksCisJCQlzdHJidWZfYWRkZigmZGVzYywgXygibm8gYnJhbmNoLCByZWJhc2luZyAlcyIpLAogCQkJCSAgICBzdGF0ZS5icmFuY2gpOwogCQllbHNlCi0JCQlzdHJidWZfYWRkZigmZGVzYywgXygiKG5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcykiKSwKKwkJCXN0cmJ1Zl9hZGRmKCZkZXNjLCBfKCJubyBicmFuY2gsIHJlYmFzaW5nIGRldGFjaGVkIEhFQUQgJXMiKSwKIAkJCQkgICAgc3RhdGUuZGV0YWNoZWRfZnJvbSk7CiAJfSBlbHNlIGlmIChzdGF0ZS5iaXNlY3RfaW5fcHJvZ3Jlc3MpCi0JCXN0cmJ1Zl9hZGRmKCZkZXNjLCBfKCIobm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcykiKSwKKwkJc3RyYnVmX2FkZGYoJmRlc2MsIF8oIm5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMiKSwKIAkJCSAgICBzdGF0ZS5icmFuY2gpOwogCWVsc2UgaWYgKHN0YXRlLmRldGFjaGVkX2Zyb20pIHsKIAkJaWYgKHN0YXRlLmRldGFjaGVkX2F0KQotCQkJLyoKLQkJCSAqIFRSQU5TTEFUT1JTOiBtYWtlIHN1cmUgdGhpcyBtYXRjaGVzICJIRUFECi0JCQkgKiBkZXRhY2hlZCBhdCAiIGluIHd0LXN0YXR1cy5jCi0JCQkgKi8KLQkJCXN0cmJ1Zl9hZGRmKCZkZXNjLCBfKCIoSEVBRCBkZXRhY2hlZCBhdCAlcykiKSwKLQkJCQlzdGF0ZS5kZXRhY2hlZF9mcm9tKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmRlc2MsIEhFQURfREVUQUNIRURfQVQpOwogCQllbHNlCi0JCQkvKgotCQkJICogVFJBTlNMQVRPUlM6IG1ha2Ugc3VyZSB0aGlzIG1hdGNoZXMgIkhFQUQKLQkJCSAqIGRldGFjaGVkIGZyb20gIiBpbiB3dC1zdGF0dXMuYwotCQkJICovCi0JCQlzdHJidWZfYWRkZigmZGVzYywgXygiKEhFQUQgZGV0YWNoZWQgZnJvbSAlcykiKSwKLQkJCQlzdGF0ZS5kZXRhY2hlZF9mcm9tKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmRlc2MsIEhFQURfREVUQUNIRURfRlJPTSk7CisJCXN0cmJ1Zl9hZGRzdHIoJmRlc2MsIHN0YXRlLmRldGFjaGVkX2Zyb20pOwogCX0KIAllbHNlCi0JCXN0cmJ1Zl9hZGRzdHIoJmRlc2MsIF8oIihubyBicmFuY2gpIikpOworCQlzdHJidWZfYWRkc3RyKCZkZXNjLCBfKCJubyBicmFuY2giKSk7CisJc3RyYnVmX2FkZGNoKCZkZXNjLCAnKScpOworCiAJZnJlZShzdGF0ZS5icmFuY2gpOwogCWZyZWUoc3RhdGUub250byk7CiAJZnJlZShzdGF0ZS5kZXRhY2hlZF9mcm9tKTsKQEAgLTE1MzEsNiArMTU1Niw0OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwb3B1bGF0ZV93b3JrdHJlZV9tYXAoc3RydWN0IGhhc2htYXAgKm1hcCwgc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgd29ya3RyZWVzW2ldOyBpKyspIHsKKwkJaWYgKHdvcmt0cmVlc1tpXS0+aGVhZF9yZWYpIHsKKwkJCXN0cnVjdCByZWZfdG9fd29ya3RyZWVfZW50cnkgKmVudHJ5OworCQkJZW50cnkgPSB4bWFsbG9jKHNpemVvZigqZW50cnkpKTsKKwkJCWVudHJ5LT53dCA9IHdvcmt0cmVlc1tpXTsKKwkJCWhhc2htYXBfZW50cnlfaW5pdChlbnRyeSwgc3RyaGFzaCh3b3JrdHJlZXNbaV0tPmhlYWRfcmVmKSk7CisKKwkJCWhhc2htYXBfYWRkKG1hcCwgZW50cnkpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBsYXp5X2luaXRfd29ya3RyZWVfbWFwKHZvaWQpCit7CisJaWYgKHJlZl90b193b3JrdHJlZV9tYXAud29ya3RyZWVzKQorCQlyZXR1cm47CisKKwlyZWZfdG9fd29ya3RyZWVfbWFwLndvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoMCk7CisJaGFzaG1hcF9pbml0KCYocmVmX3RvX3dvcmt0cmVlX21hcC5tYXApLCByZWZfdG9fd29ya3RyZWVfbWFwX2NtcGZuYywgTlVMTCwgMCk7CisJcG9wdWxhdGVfd29ya3RyZWVfbWFwKCYocmVmX3RvX3dvcmt0cmVlX21hcC5tYXApLCByZWZfdG9fd29ya3RyZWVfbWFwLndvcmt0cmVlcyk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfd29ya3RyZWVfcGF0aChjb25zdCBzdHJ1Y3QgdXNlZF9hdG9tICphdG9tLCBjb25zdCBzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZikKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwlzdHJ1Y3QgcmVmX3RvX3dvcmt0cmVlX2VudHJ5ICpsb29rdXBfcmVzdWx0OworCisJbGF6eV9pbml0X3dvcmt0cmVlX21hcCgpOworCisJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyeSwgc3RyaGFzaChyZWYtPnJlZm5hbWUpKTsKKwlsb29rdXBfcmVzdWx0ID0gaGFzaG1hcF9nZXQoJihyZWZfdG9fd29ya3RyZWVfbWFwLm1hcCksICZlbnRyeSwgcmVmLT5yZWZuYW1lKTsKKworCWlmIChsb29rdXBfcmVzdWx0KQorCQlyZXR1cm4geHN0cmR1cChsb29rdXBfcmVzdWx0LT53dC0+cGF0aCk7CisJZWxzZQorCQlyZXR1cm4geHN0cmR1cCgiIik7Cit9CisKIC8qCiAgKiBQYXJzZSB0aGUgb2JqZWN0IHJlZmVycmVkIGJ5IHJlZiwgYW5kIGdyYWIgbmVlZGVkIHZhbHVlLgogICovCkBAIC0xNTY4LDYgKzE2MzUsMTMgQEAKIAogCQlpZiAoc3RhcnRzX3dpdGgobmFtZSwgInJlZm5hbWUiKSkKIAkJCXJlZm5hbWUgPSBnZXRfcmVmbmFtZShhdG9tLCByZWYpOworCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJ3b3JrdHJlZXBhdGgiKSkgeworCQkJaWYgKHJlZi0+a2luZCA9PSBGSUxURVJfUkVGU19CUkFOQ0hFUykKKwkJCQl2LT5zID0gZ2V0X3dvcmt0cmVlX3BhdGgoYXRvbSwgcmVmKTsKKwkJCWVsc2UKKwkJCQl2LT5zID0geHN0cmR1cCgiIik7CisJCQljb250aW51ZTsKKwkJfQogCQllbHNlIGlmIChzdGFydHNfd2l0aChuYW1lLCAic3ltcmVmIikpCiAJCQlyZWZuYW1lID0gZ2V0X3N5bXJlZihhdG9tLCByZWYpOwogCQllbHNlIGlmIChzdGFydHNfd2l0aChuYW1lLCAidXBzdHJlYW0iKSkgewpAQCAtMTc5MCwyMSArMTg2NCw2MiBAQAogCXJldHVybiBtYXRjaF9wYXR0ZXJuKGZpbHRlciwgcmVmbmFtZSk7CiB9CiAKLS8qCi0gKiBGaW5kIHRoZSBsb25nZXN0IHByZWZpeCBvZiBwYXR0ZXJuIHdlIGNhbiBwYXNzIHRvCi0gKiBgZm9yX2VhY2hfZnVsbHJlZl9pbigpYCwgbmFtZWx5IHRoZSBwYXJ0IG9mIHBhdHRlcm4gcHJlY2VkaW5nIHRoZQotICogZmlyc3QgZ2xvYiBjaGFyYWN0ZXIuIChOb3RlIHRoYXQgYGZvcl9lYWNoX2Z1bGxyZWZfaW4oKWAgaXMKLSAqIHBlcmZlY3RseSBoYXBweSB3b3JraW5nIHdpdGggYSBwcmVmaXggdGhhdCBkb2Vzbid0IGVuZCBhdCBhCi0gKiBwYXRobmFtZSBjb21wb25lbnQgYm91bmRhcnkuKQotICovCi1zdGF0aWMgdm9pZCBmaW5kX2xvbmdlc3RfcHJlZml4KHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcGF0dGVybikKK3N0YXRpYyBpbnQgcXNvcnRfc3RyY21wKGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKIHsKLQljb25zdCBjaGFyICpwOworCWNvbnN0IGNoYXIgKmEgPSAqKGNvbnN0IGNoYXIgKiopdmE7CisJY29uc3QgY2hhciAqYiA9ICooY29uc3QgY2hhciAqKil2YjsKIAotCWZvciAocCA9IHBhdHRlcm47ICpwICYmICFpc19nbG9iX3NwZWNpYWwoKnApOyBwKyspCi0JCTsKKwlyZXR1cm4gc3RyY21wKGEsIGIpOworfQogCi0Jc3RyYnVmX2FkZChvdXQsIHBhdHRlcm4sIHAgLSBwYXR0ZXJuKTsKK3N0YXRpYyB2b2lkIGZpbmRfbG9uZ2VzdF9wcmVmaXhlc18xKHN0cnVjdCBzdHJpbmdfbGlzdCAqb3V0LAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqcHJlZml4LAorCQkJCSAgY29uc3QgY2hhciAqKnBhdHRlcm5zLCBzaXplX3QgbnIpCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQljaGFyIGMgPSBwYXR0ZXJuc1tpXVtwcmVmaXgtPmxlbl07CisJCWlmICghYyB8fCBpc19nbG9iX3NwZWNpYWwoYykpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZChvdXQsIHByZWZpeC0+YnVmKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWkgPSAwOworCXdoaWxlIChpIDwgbnIpIHsKKwkJc2l6ZV90IGVuZDsKKworCQkvKgorCQkqIFNldCAiZW5kIiB0byB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgX2FmdGVyXyB0aGUgbGFzdCBvbmUKKwkJKiBpbiBvdXIgZ3JvdXAuCisJCSovCisJCWZvciAoZW5kID0gaSArIDE7IGVuZCA8IG5yOyBlbmQrKykgeworCQkJaWYgKHBhdHRlcm5zW2ldW3ByZWZpeC0+bGVuXSAhPSBwYXR0ZXJuc1tlbmRdW3ByZWZpeC0+bGVuXSkKKwkJCQlicmVhazsKKwkJfQorCisJCXN0cmJ1Zl9hZGRjaChwcmVmaXgsIHBhdHRlcm5zW2ldW3ByZWZpeC0+bGVuXSk7CisJCWZpbmRfbG9uZ2VzdF9wcmVmaXhlc18xKG91dCwgcHJlZml4LCBwYXR0ZXJucyArIGksIGVuZCAtIGkpOworCQlzdHJidWZfc2V0bGVuKHByZWZpeCwgcHJlZml4LT5sZW4gLSAxKTsKKworCQlpID0gZW5kOworCX0KK30KKworc3RhdGljIHZvaWQgZmluZF9sb25nZXN0X3ByZWZpeGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqb3V0LAorCQkJCSAgY29uc3QgY2hhciAqKnBhdHRlcm5zKQoreworCXN0cnVjdCBhcmd2X2FycmF5IHNvcnRlZCA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHByZWZpeCA9IFNUUkJVRl9JTklUOworCisJYXJndl9hcnJheV9wdXNodigmc29ydGVkLCBwYXR0ZXJucyk7CisJUVNPUlQoc29ydGVkLmFyZ3YsIHNvcnRlZC5hcmdjLCBxc29ydF9zdHJjbXApOworCisJZmluZF9sb25nZXN0X3ByZWZpeGVzXzEob3V0LCAmcHJlZml4LCBzb3J0ZWQuYXJndiwgc29ydGVkLmFyZ2MpOworCisJYXJndl9hcnJheV9jbGVhcigmc29ydGVkKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJlZml4KTsKIH0KIAogLyoKQEAgLTE4MTcsNyArMTkzMiw4IEBACiAJCQkJICAgICAgIHZvaWQgKmNiX2RhdGEsCiAJCQkJICAgICAgIGludCBicm9rZW4pCiB7Ci0Jc3RydWN0IHN0cmJ1ZiBwcmVmaXggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcHJlZml4ZXMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcHJlZml4OwogCWludCByZXQ7CiAKIAlpZiAoIWZpbHRlci0+bWF0Y2hfYXNfcGF0aCkgewpAQCAtMTg0MywyMSArMTk1OSwxNSBAQAogCQlyZXR1cm4gZm9yX2VhY2hfZnVsbHJlZl9pbigiIiwgY2IsIGNiX2RhdGEsIGJyb2tlbik7CiAJfQogCi0JaWYgKGZpbHRlci0+bmFtZV9wYXR0ZXJuc1sxXSkgewotCQkvKgotCQkgKiBtdWx0aXBsZSBwYXR0ZXJuczsgaW4gdGhlb3J5IHRoaXMgY291bGQgc3RpbGwgd29yayBhcyBsb25nCi0JCSAqIGFzIHRoZSBwYXR0ZXJucyBhcmUgZGlzam9pbnQuIFdlJ2QganVzdCBtYWtlIG11bHRpcGxlIGNhbGxzCi0JCSAqIHRvIGZvcl9lYWNoX3JlZigpLiBCdXQgaWYgdGhleSdyZSBub3QgZGlzam9pbnQsIHdlJ2QgZW5kIHVwCi0JCSAqIHJlcG9ydGluZyB0aGUgc2FtZSByZWYgbXVsdGlwbGUgdGltZXMuIFNvIGxldCdzIHB1bnQgb24gdGhhdAotCQkgKiBmb3Igbm93LgotCQkgKi8KLQkJcmV0dXJuIGZvcl9lYWNoX2Z1bGxyZWZfaW4oIiIsIGNiLCBjYl9kYXRhLCBicm9rZW4pOworCWZpbmRfbG9uZ2VzdF9wcmVmaXhlcygmcHJlZml4ZXMsIGZpbHRlci0+bmFtZV9wYXR0ZXJucyk7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKHByZWZpeCwgJnByZWZpeGVzKSB7CisJCXJldCA9IGZvcl9lYWNoX2Z1bGxyZWZfaW4ocHJlZml4LT5zdHJpbmcsIGNiLCBjYl9kYXRhLCBicm9rZW4pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CiAJfQogCi0JZmluZF9sb25nZXN0X3ByZWZpeCgmcHJlZml4LCBmaWx0ZXItPm5hbWVfcGF0dGVybnNbMF0pOwotCi0JcmV0ID0gZm9yX2VhY2hfZnVsbHJlZl9pbihwcmVmaXguYnVmLCBjYiwgY2JfZGF0YSwgYnJva2VuKTsKLQlzdHJidWZfcmVsZWFzZSgmcHJlZml4KTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmcHJlZml4ZXMsIDApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIwMzIsNyArMjE0Miw5IEBACiB7CiAJZnJlZSgoY2hhciAqKWl0ZW0tPnN5bXJlZik7CiAJaWYgKGl0ZW0tPnZhbHVlKSB7Ci0JCWZyZWUoKGNoYXIgKilpdGVtLT52YWx1ZS0+cyk7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKQorCQkJZnJlZSgoY2hhciAqKWl0ZW0tPnZhbHVlW2ldLnMpOwogCQlmcmVlKGl0ZW0tPnZhbHVlKTsKIAl9CiAJZnJlZShpdGVtKTsKQEAgLTIwNDMsMTQgKzIxNTUsMjEgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspCi0JCWZyZWUoKGNoYXIgKil1c2VkX2F0b21baV0ubmFtZSk7Ci0JRlJFRV9BTkRfTlVMTCh1c2VkX2F0b20pOwotCXVzZWRfYXRvbV9jbnQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnI7IGkrKykKIAkJZnJlZV9hcnJheV9pdGVtKGFycmF5LT5pdGVtc1tpXSk7CiAJRlJFRV9BTkRfTlVMTChhcnJheS0+aXRlbXMpOwogCWFycmF5LT5uciA9IGFycmF5LT5hbGxvYyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKQorCQlmcmVlKChjaGFyICopdXNlZF9hdG9tW2ldLm5hbWUpOworCUZSRUVfQU5EX05VTEwodXNlZF9hdG9tKTsKKwl1c2VkX2F0b21fY250ID0gMDsKKworCWlmIChyZWZfdG9fd29ya3RyZWVfbWFwLndvcmt0cmVlcykgeworCQloYXNobWFwX2ZyZWUoJihyZWZfdG9fd29ya3RyZWVfbWFwLm1hcCksIDEpOworCQlmcmVlX3dvcmt0cmVlcyhyZWZfdG9fd29ya3RyZWVfbWFwLndvcmt0cmVlcyk7CisJCXJlZl90b193b3JrdHJlZV9tYXAud29ya3RyZWVzID0gTlVMTDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGRvX21lcmdlX2ZpbHRlcihzdHJ1Y3QgcmVmX2ZpbHRlcl9jYmRhdGEgKnJlZl9jYmRhdGEpCmRpZmYgLS1naXQgYS9yZWZzLmMgYi9yZWZzLmMKaW5kZXggOTJkMWY2ZC4uY2QyOTdlZSAxMDA2NDQKLS0tIGEvcmVmcy5jCisrKyBiL3JlZnMuYwpAQCAtNjMsNyArNjMsNyBAQAogICogbm90IGxlZ2FsLiAgSXQgaXMgbGVnYWwgaWYgaXQgaXMgc29tZXRoaW5nIHJlYXNvbmFibGUgdG8gaGF2ZSB1bmRlcgogICogIi5naXQvcmVmcy8iOyBXZSBkbyBub3QgbGlrZSBpdCBpZjoKICAqCi0gKiAtIGFueSBwYXRoIGNvbXBvbmVudCBvZiBpdCBiZWdpbnMgd2l0aCAiLiIsIG9yCisgKiAtIGl0IGJlZ2lucyB3aXRoICIuIiwgb3IKICAqIC0gaXQgaGFzIGRvdWJsZSBkb3RzICIuLiIsIG9yCiAgKiAtIGl0IGhhcyBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMsIG9yCiAgKiAtIGl0IGhhcyAiOiIsICI/IiwgIlsiLCAiXCIsICJeIiwgIn4iLCBTUCwgb3IgVEFCIGFueXdoZXJlLCBvcgpAQCAtNzEsMzEgKzcxLDYzIEBACiAgKiAtIGl0IGVuZHMgd2l0aCBhICIvIiwgb3IKICAqIC0gaXQgZW5kcyB3aXRoICIubG9jayIsIG9yCiAgKiAtIGl0IGNvbnRhaW5zIGEgIkB7IiBwb3J0aW9uCisgKgorICogV2hlbiBzYW5pdGl6ZWQgaXMgbm90IE5VTEwsIGluc3RlYWQgb2YgcmVqZWN0aW5nIHRoZSBpbnB1dCByZWZuYW1lCisgKiBhcyBhbiBlcnJvciwgdHJ5IHRvIGNvbWUgdXAgd2l0aCBhIHVzYWJsZSByZXBsYWNlbWVudCBmb3IgdGhlIGlucHV0CisgKiByZWZuYW1lIGluIGl0LgogICovCi1zdGF0aWMgaW50IGNoZWNrX3JlZm5hbWVfY29tcG9uZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCAqZmxhZ3MpCitzdGF0aWMgaW50IGNoZWNrX3JlZm5hbWVfY29tcG9uZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCAqZmxhZ3MsCisJCQkJICAgc3RydWN0IHN0cmJ1ZiAqc2FuaXRpemVkKQogewogCWNvbnN0IGNoYXIgKmNwOwogCWNoYXIgbGFzdCA9ICdcMCc7CisJc2l6ZV90IGNvbXBvbmVudF9zdGFydCA9IDA7IC8qIGdhcmJhZ2UgLSBub3QgYSByZWFzb25hYmxlIGluaXRpYWwgdmFsdWUgKi8KKworCWlmIChzYW5pdGl6ZWQpCisJCWNvbXBvbmVudF9zdGFydCA9IHNhbml0aXplZC0+bGVuOwogCiAJZm9yIChjcCA9IHJlZm5hbWU7IDsgY3ArKykgewogCQlpbnQgY2ggPSAqY3AgJiAyNTU7CiAJCXVuc2lnbmVkIGNoYXIgZGlzcCA9IHJlZm5hbWVfZGlzcG9zaXRpb25bY2hdOworCisJCWlmIChzYW5pdGl6ZWQgJiYgZGlzcCAhPSAxKQorCQkJc3RyYnVmX2FkZGNoKHNhbml0aXplZCwgY2gpOworCiAJCXN3aXRjaCAoZGlzcCkgewogCQljYXNlIDE6CiAJCQlnb3RvIG91dDsKIAkJY2FzZSAyOgotCQkJaWYgKGxhc3QgPT0gJy4nKQotCQkJCXJldHVybiAtMTsgLyogUmVmbmFtZSBjb250YWlucyAiLi4iLiAqLworCQkJaWYgKGxhc3QgPT0gJy4nKSB7IC8qIFJlZm5hbWUgY29udGFpbnMgIi4uIi4gKi8KKwkJCQlpZiAoc2FuaXRpemVkKQorCQkJCQkvKiBjb2xsYXBzZSAiLi4iIHRvIHNpbmdsZSAiLiIgKi8KKwkJCQkJc3RyYnVmX3NldGxlbihzYW5pdGl6ZWQsIHNhbml0aXplZC0+bGVuIC0gMSk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gLTE7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAzOgotCQkJaWYgKGxhc3QgPT0gJ0AnKQotCQkJCXJldHVybiAtMTsgLyogUmVmbmFtZSBjb250YWlucyAiQHsiLiAqLworCQkJaWYgKGxhc3QgPT0gJ0AnKSB7IC8qIFJlZm5hbWUgY29udGFpbnMgIkB7Ii4gKi8KKwkJCQlpZiAoc2FuaXRpemVkKQorCQkJCQlzYW5pdGl6ZWQtPmJ1ZltzYW5pdGl6ZWQtPmxlbi0xXSA9ICctJzsKKwkJCQllbHNlCisJCQkJCXJldHVybiAtMTsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDQ6Ci0JCQlyZXR1cm4gLTE7CisJCQkvKiBmb3JiaWRkZW4gY2hhciAqLworCQkJaWYgKHNhbml0aXplZCkKKwkJCQlzYW5pdGl6ZWQtPmJ1ZltzYW5pdGl6ZWQtPmxlbi0xXSA9ICctJzsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLTE7CisJCQlicmVhazsKIAkJY2FzZSA1OgotCQkJaWYgKCEoKmZsYWdzICYgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4pKQotCQkJCXJldHVybiAtMTsgLyogcmVmc3BlYyBjYW4ndCBiZSBhIHBhdHRlcm4gKi8KKwkJCWlmICghKCpmbGFncyAmIFJFRk5BTUVfUkVGU1BFQ19QQVRURVJOKSkgeworCQkJCS8qIHJlZnNwZWMgY2FuJ3QgYmUgYSBwYXR0ZXJuICovCisJCQkJaWYgKHNhbml0aXplZCkKKwkJCQkJc2FuaXRpemVkLT5idWZbc2FuaXRpemVkLT5sZW4tMV0gPSAnLSc7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gLTE7CisJCQl9CiAKIAkJCS8qCiAJCQkgKiBVbnNldCB0aGUgcGF0dGVybiBmbGFnIHNvIHRoYXQgd2Ugb25seSBhY2NlcHQKQEAgLTEwOSwyNiArMTQxLDQ4IEBACiBvdXQ6CiAJaWYgKGNwID09IHJlZm5hbWUpCiAJCXJldHVybiAwOyAvKiBDb21wb25lbnQgaGFzIHplcm8gbGVuZ3RoLiAqLwotCWlmIChyZWZuYW1lWzBdID09ICcuJykKLQkJcmV0dXJuIC0xOyAvKiBDb21wb25lbnQgc3RhcnRzIHdpdGggJy4nLiAqLworCisJaWYgKHJlZm5hbWVbMF0gPT0gJy4nKSB7IC8qIENvbXBvbmVudCBzdGFydHMgd2l0aCAnLicuICovCisJCWlmIChzYW5pdGl6ZWQpCisJCQlzYW5pdGl6ZWQtPmJ1Zltjb21wb25lbnRfc3RhcnRdID0gJy0nOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQogCWlmIChjcCAtIHJlZm5hbWUgPj0gTE9DS19TVUZGSVhfTEVOICYmCi0JICAgICFtZW1jbXAoY3AgLSBMT0NLX1NVRkZJWF9MRU4sIExPQ0tfU1VGRklYLCBMT0NLX1NVRkZJWF9MRU4pKQotCQlyZXR1cm4gLTE7IC8qIFJlZm5hbWUgZW5kcyB3aXRoICIubG9jayIuICovCisJICAgICFtZW1jbXAoY3AgLSBMT0NLX1NVRkZJWF9MRU4sIExPQ0tfU1VGRklYLCBMT0NLX1NVRkZJWF9MRU4pKSB7CisJCWlmICghc2FuaXRpemVkKQorCQkJcmV0dXJuIC0xOworCQkvKiBSZWZuYW1lIGVuZHMgd2l0aCAiLmxvY2siLiAqLworCQl3aGlsZSAoc3RyYnVmX3N0cmlwX3N1ZmZpeChzYW5pdGl6ZWQsIExPQ0tfU1VGRklYKSkgeworCQkJLyogdHJ5IGFnYWluIGluIGNhc2Ugd2UgaGF2ZSAubG9jay5sb2NrICovCisJCX0KKwl9CiAJcmV0dXJuIGNwIC0gcmVmbmFtZTsKIH0KIAotaW50IGNoZWNrX3JlZm5hbWVfZm9ybWF0KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmbGFncykKK3N0YXRpYyBpbnQgY2hlY2tfb3Jfc2FuaXRpemVfcmVmbmFtZShjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgZmxhZ3MsCisJCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICpzYW5pdGl6ZWQpCiB7CiAJaW50IGNvbXBvbmVudF9sZW4sIGNvbXBvbmVudF9jb3VudCA9IDA7CiAKLQlpZiAoIXN0cmNtcChyZWZuYW1lLCAiQCIpKQorCWlmICghc3RyY21wKHJlZm5hbWUsICJAIikpIHsKIAkJLyogUmVmbmFtZSBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgJ0AnLiAqLwotCQlyZXR1cm4gLTE7CisJCWlmIChzYW5pdGl6ZWQpCisJCQlzdHJidWZfYWRkY2goc2FuaXRpemVkLCAnLScpOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQogCiAJd2hpbGUgKDEpIHsKKwkJaWYgKHNhbml0aXplZCAmJiBzYW5pdGl6ZWQtPmxlbikKKwkJCXN0cmJ1Zl9jb21wbGV0ZShzYW5pdGl6ZWQsICcvJyk7CisKIAkJLyogV2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIHBhdGggY29tcG9uZW50LiAqLwotCQljb21wb25lbnRfbGVuID0gY2hlY2tfcmVmbmFtZV9jb21wb25lbnQocmVmbmFtZSwgJmZsYWdzKTsKLQkJaWYgKGNvbXBvbmVudF9sZW4gPD0gMCkKKwkJY29tcG9uZW50X2xlbiA9IGNoZWNrX3JlZm5hbWVfY29tcG9uZW50KHJlZm5hbWUsICZmbGFncywKKwkJCQkJCQlzYW5pdGl6ZWQpOworCQlpZiAoc2FuaXRpemVkICYmIGNvbXBvbmVudF9sZW4gPT0gMCkKKwkJCTsgLyogT0ssIG9taXQgZW1wdHkgY29tcG9uZW50ICovCisJCWVsc2UgaWYgKGNvbXBvbmVudF9sZW4gPD0gMCkKIAkJCXJldHVybiAtMTsKIAogCQljb21wb25lbnRfY291bnQrKzsKQEAgLTEzOCwxMyArMTkyLDI5IEBACiAJCXJlZm5hbWUgKz0gY29tcG9uZW50X2xlbiArIDE7CiAJfQogCi0JaWYgKHJlZm5hbWVbY29tcG9uZW50X2xlbiAtIDFdID09ICcuJykKLQkJcmV0dXJuIC0xOyAvKiBSZWZuYW1lIGVuZHMgd2l0aCAnLicuICovCisJaWYgKHJlZm5hbWVbY29tcG9uZW50X2xlbiAtIDFdID09ICcuJykgeworCQkvKiBSZWZuYW1lIGVuZHMgd2l0aCAnLicuICovCisJCWlmIChzYW5pdGl6ZWQpCisJCQk7IC8qIG9taXQgZW5kaW5nIGRvdCAqLworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQogCWlmICghKGZsYWdzICYgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkgJiYgY29tcG9uZW50X2NvdW50IDwgMikKIAkJcmV0dXJuIC0xOyAvKiBSZWZuYW1lIGhhcyBvbmx5IG9uZSBjb21wb25lbnQuICovCiAJcmV0dXJuIDA7CiB9CiAKK2ludCBjaGVja19yZWZuYW1lX2Zvcm1hdChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGNoZWNrX29yX3Nhbml0aXplX3JlZm5hbWUocmVmbmFtZSwgZmxhZ3MsIE5VTEwpOworfQorCit2b2lkIHNhbml0aXplX3JlZm5hbWVfY29tcG9uZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpZiAoY2hlY2tfb3Jfc2FuaXRpemVfcmVmbmFtZShyZWZuYW1lLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMLCBvdXQpKQorCQlCVUcoInNhbml0aXppbmcgcmVmbmFtZSAnJXMnIGNoZWNrIHJldHVybmVkIGVycm9yIiwgcmVmbmFtZSk7Cit9CisKIGludCByZWZuYW1lX2lzX3NhZmUoY29uc3QgY2hhciAqcmVmbmFtZSkKIHsKIAljb25zdCBjaGFyICpyZXN0OwpAQCAtMzA5LDcgKzM3OSw3IEBACiAKIGVudW0gcGVlbF9zdGF0dXMgcGVlbF9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewotCXN0cnVjdCBvYmplY3QgKm8gPSBsb29rdXBfdW5rbm93bl9vYmplY3QobmFtZS0+aGFzaCk7CisJc3RydWN0IG9iamVjdCAqbyA9IGxvb2t1cF91bmtub3duX29iamVjdChuYW1lKTsKIAogCWlmIChvLT50eXBlID09IE9CSl9OT05FKSB7CiAJCWludCB0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBuYW1lLCBOVUxMKTsKZGlmZiAtLWdpdCBhL3JlZnMuaCBiL3JlZnMuaAppbmRleCAyNzI3NDA1Li43MzBkMDVhIDEwMDY0NAotLS0gYS9yZWZzLmgKKysrIGIvcmVmcy5oCkBAIC00NjMsNiArNDYzLDEyIEBACiAgKi8KIGludCBjaGVja19yZWZuYW1lX2Zvcm1hdChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgZmxhZ3MpOwogCisvKgorICogQXBwbHkgdGhlIHJ1bGVzIGZyb20gY2hlY2tfcmVmbmFtZV9mb3JtYXQsIGJ1dCBtdXRhdGUgdGhlIHJlc3VsdCB1bnRpbCBpdAorICogaXMgYWNjZXB0YWJsZSwgYW5kIHBsYWNlIHRoZSByZXN1bHQgaW4gIm91dCIuCisgKi8KK3ZvaWQgc2FuaXRpemVfcmVmbmFtZV9jb21wb25lbnQoY29uc3QgY2hhciAqcmVmbmFtZSwgc3RydWN0IHN0cmJ1ZiAqb3V0KTsKKwogY29uc3QgY2hhciAqcHJldHRpZnlfcmVmbmFtZShjb25zdCBjaGFyICpyZWZuYW1lKTsKIAogY2hhciAqcmVmc19zaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLApkaWZmIC0tZ2l0IGEvcmVmcy9maWxlcy1iYWNrZW5kLmMgYi9yZWZzL2ZpbGVzLWJhY2tlbmQuYwppbmRleCA2M2U1NWU2Li5iMWY4ZjUzIDEwMDY0NAotLS0gYS9yZWZzL2ZpbGVzLWJhY2tlbmQuYworKysgYi9yZWZzL2ZpbGVzLWJhY2tlbmQuYwpAQCAtMjE0MywxMyArMjE0MywyMiBAQAogc3RhdGljIHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZmxvZ19pdGVyYXRvcl9iZWdpbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCiAJCQkJCQkgIGNvbnN0IGNoYXIgKmdpdGRpcikKIHsKLQlzdHJ1Y3QgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yICppdGVyID0geGNhbGxvYygxLCBzaXplb2YoKml0ZXIpKTsKLQlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IgPSAmaXRlci0+YmFzZTsKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXRlcjsKKwlzdHJ1Y3QgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yICppdGVyOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcjsKIAlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CiAKLQliYXNlX3JlZl9pdGVyYXRvcl9pbml0KHJlZl9pdGVyYXRvciwgJmZpbGVzX3JlZmxvZ19pdGVyYXRvcl92dGFibGUsIDApOwogCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL2xvZ3MiLCBnaXRkaXIpOwotCWl0ZXItPmRpcl9pdGVyYXRvciA9IGRpcl9pdGVyYXRvcl9iZWdpbihzYi5idWYpOworCisJZGl0ZXIgPSBkaXJfaXRlcmF0b3JfYmVnaW4oc2IuYnVmLCAwKTsKKwlpZighZGl0ZXIpCisJCXJldHVybiBlbXB0eV9yZWZfaXRlcmF0b3JfYmVnaW4oKTsKKworCWl0ZXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXRlcikpOworCXJlZl9pdGVyYXRvciA9ICZpdGVyLT5iYXNlOworCisJYmFzZV9yZWZfaXRlcmF0b3JfaW5pdChyZWZfaXRlcmF0b3IsICZmaWxlc19yZWZsb2dfaXRlcmF0b3JfdnRhYmxlLCAwKTsKKwlpdGVyLT5kaXJfaXRlcmF0b3IgPSBkaXRlcjsKIAlpdGVyLT5yZWZfc3RvcmUgPSByZWZfc3RvcmU7CiAJc3RyYnVmX3JlbGVhc2UoJnNiKTsKIApkaWZmIC0tZ2l0IGEvcmV2aXNpb24uYyBiL3JldmlzaW9uLmMKaW5kZXggZDRhYWYwZS4uMDc0MTIyOSAxMDA2NDQKLS0tIGEvcmV2aXNpb24uYworKysgYi9yZXZpc2lvbi5jCkBAIC00MzYsNyArNDM2LDkgQEAKIAkJCWRpZSgidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIsIG5hbWUpOwogCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CiAJCQltYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhjb21taXQpOwotCQkJcmV2cy0+bGltaXRlZCA9IDE7CisKKwkJCWlmICghcmV2cy0+dG9wb19vcmRlciB8fCAhZ2VuZXJhdGlvbl9udW1iZXJzX2VuYWJsZWQodGhlX3JlcG9zaXRvcnkpKQorCQkJCXJldnMtPmxpbWl0ZWQgPSAxOwogCQl9CiAJCWlmIChyZXZzLT5zb3VyY2VzKSB7CiAJCQljaGFyICoqc2xvdCA9IHJldmlzaW9uX3NvdXJjZXNfYXQocmV2cy0+c291cmNlcywgY29tbWl0KTsKQEAgLTE1NTIsNiArMTU1NCwzMiBAQAogCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CiB9CiAKK3N0cnVjdCBhZGRfYWx0ZXJuYXRlX3JlZnNfZGF0YSB7CisJc3RydWN0IHJldl9pbmZvICpyZXZzOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKK3N0YXRpYyB2b2lkIGFkZF9vbmVfYWx0ZXJuYXRlX3JlZihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICB2b2lkICp2ZGF0YSkKK3sKKwljb25zdCBjaGFyICpuYW1lID0gIi5hbHRlcm5hdGUiOworCXN0cnVjdCBhZGRfYWx0ZXJuYXRlX3JlZnNfZGF0YSAqZGF0YSA9IHZkYXRhOworCXN0cnVjdCBvYmplY3QgKm9iajsKKworCW9iaiA9IGdldF9yZWZlcmVuY2UoZGF0YS0+cmV2cywgbmFtZSwgb2lkLCBkYXRhLT5mbGFncyk7CisJYWRkX3Jldl9jbWRsaW5lKGRhdGEtPnJldnMsIG9iaiwgbmFtZSwgUkVWX0NNRF9SRVYsIGRhdGEtPmZsYWdzKTsKKwlhZGRfcGVuZGluZ19vYmplY3QoZGF0YS0+cmV2cywgb2JqLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2FsdGVybmF0ZV9yZWZzX3RvX3BlbmRpbmcoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgYWRkX2FsdGVybmF0ZV9yZWZzX2RhdGEgZGF0YTsKKwlkYXRhLnJldnMgPSByZXZzOworCWRhdGEuZmxhZ3MgPSBmbGFnczsKKwlmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKGFkZF9vbmVfYWx0ZXJuYXRlX3JlZiwgJmRhdGEpOworfQorCiBzdGF0aWMgaW50IGFkZF9wYXJlbnRzX29ubHkoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICphcmdfLCBpbnQgZmxhZ3MsCiAJCQkgICAgaW50IGV4Y2x1ZGVfcGFyZW50KQogewpAQCAtMTk1NCw2ICsxOTgyLDcgQEAKIAkgICAgIXN0cmNtcChhcmcsICItLW5vLXdhbGsiKSB8fCAhc3RyY21wKGFyZywgIi0tZG8td2FsayIpIHx8CiAJICAgICFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSB8fCBzdGFydHNfd2l0aChhcmcsICItLWdsb2I9IikgfHwKIAkgICAgIXN0cmNtcChhcmcsICItLWluZGV4ZWQtb2JqZWN0cyIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS1hbHRlcm5hdGUtcmVmcyIpIHx8CiAJICAgIHN0YXJ0c193aXRoKGFyZywgIi0tZXhjbHVkZT0iKSB8fAogCSAgICBzdGFydHNfd2l0aChhcmcsICItLWJyYW5jaGVzPSIpIHx8IHN0YXJ0c193aXRoKGFyZywgIi0tdGFncz0iKSB8fAogCSAgICBzdGFydHNfd2l0aChhcmcsICItLXJlbW90ZXM9IikgfHwgc3RhcnRzX3dpdGgoYXJnLCAiLS1uby13YWxrPSIpKQpAQCAtMjQ0MCw2ICsyNDY5LDggQEAKIAkJYWRkX3JlZmxvZ3NfdG9fcGVuZGluZyhyZXZzLCAqZmxhZ3MpOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWluZGV4ZWQtb2JqZWN0cyIpKSB7CiAJCWFkZF9pbmRleF9vYmplY3RzX3RvX3BlbmRpbmcocmV2cywgKmZsYWdzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hbHRlcm5hdGUtcmVmcyIpKSB7CisJCWFkZF9hbHRlcm5hdGVfcmVmc190b19wZW5kaW5nKHJldnMsICpmbGFncyk7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm90IikpIHsKIAkJKmZsYWdzIF49IFVOSU5URVJFU1RJTkcgfCBCT1RUT007CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8td2FsayIpKSB7CkBAIC0zMjYzLDYgKzMyOTQsOSBAQAogCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwLT5pdGVtOwogCQlpbnQgKnBpOwogCisJCWlmIChwYXJlbnQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQljb250aW51ZTsKKwogCQlpZiAocGFyc2VfY29tbWl0X2dlbnRseShwYXJlbnQsIDEpIDwgMCkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9zZXF1ZW5jZXIuYyBiL3NlcXVlbmNlci5jCmluZGV4IGY4OGE5N2YuLjM0ZWJmOGUgMTAwNjQ0Ci0tLSBhL3NlcXVlbmNlci5jCisrKyBiL3NlcXVlbmNlci5jCkBAIC0yNzksNyArMjc5LDcgQEAKIGludCBzZXF1ZW5jZXJfcmVtb3ZlX3N0YXRlKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKIHsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwotCWludCBpOworCWludCBpLCByZXQgPSAwOwogCiAJaWYgKGlzX3JlYmFzZV9pKG9wdHMpICYmCiAJICAgIHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgcmViYXNlX3BhdGhfcmVmc190b19kZWxldGUoKSwgMCkgPiAwKSB7CkBAIC0yODgsOCArMjg4LDEwIEBACiAJCQljaGFyICplb2wgPSBzdHJjaHIocCwgJ1xuJyk7CiAJCQlpZiAoZW9sKQogCQkJCSplb2wgPSAnXDAnOwotCQkJaWYgKGRlbGV0ZV9yZWYoIihyZWJhc2UgLWkpIGNsZWFudXAiLCBwLCBOVUxMLCAwKSA8IDApCisJCQlpZiAoZGVsZXRlX3JlZigiKHJlYmFzZSAtaSkgY2xlYW51cCIsIHAsIE5VTEwsIDApIDwgMCkgewogCQkJCXdhcm5pbmcoXygiY291bGQgbm90IGRlbGV0ZSAnJXMnIiksIHApOworCQkJCXJldCA9IC0xOworCQkJfQogCQkJaWYgKCFlb2wpCiAJCQkJYnJlYWs7CiAJCQlwID0gZW9sICsgMTsKQEAgLTMwNSwxMCArMzA3LDExIEBACiAKIAlzdHJidWZfcmVzZXQoJmJ1Zik7CiAJc3RyYnVmX2FkZHN0cigmYnVmLCBnZXRfZGlyKG9wdHMpKTsKLQlyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZidWYsIDApOworCWlmIChyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZidWYsIDApKQorCQlyZXQgPSBlcnJvcihfKCJjb3VsZCBub3QgcmVtb3ZlICclcyciKSwgYnVmLmJ1Zik7CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqYWN0aW9uX25hbWUoY29uc3Qgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQpAQCAtNzY3LDcgKzc3MCw3IEBACiAgKglHSVRfQVVUSE9SX0RBVEU9JyRhdXRob3JfZGF0ZScKICAqCiAgKiB3aGVyZSAkYXV0aG9yX25hbWUsICRhdXRob3JfZW1haWwgYW5kICRhdXRob3JfZGF0ZSBhcmUgcXVvdGVkLiBXZSBhcmUgc3RyaWN0Ci0gKiB3aXRoIG91ciBwYXJzaW5nLCBhcyB0aGUgZmlsZSB3YXMgbWVhbnQgdG8gYmUgZXZhbCdkIGluIHRoZSBvbGQKKyAqIHdpdGggb3VyIHBhcnNpbmcsIGFzIHRoZSBmaWxlIHdhcyBtZWFudCB0byBiZSBldmFsJ2QgaW4gdGhlIG5vdy1yZW1vdmVkCiAgKiBnaXQtYW0uc2gvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2ggc2NyaXB0cywgYW5kIHRodXMgaWYgdGhlIGZpbGUgZGlmZmVycwogICogZnJvbSB3aGF0IHRoaXMgZnVuY3Rpb24gZXhwZWN0cywgaXQgaXMgYmV0dGVyIHRvIGJhaWwgb3V0IHRoYW4gdG8gZG8KICAqIHNvbWV0aGluZyB0aGF0IHRoZSB1c2VyIGRvZXMgbm90IGV4cGVjdC4KQEAgLTIwNzYsNiArMjA3OSwxOCBAQAogCXJldHVybiB0b2RvX2xpc3QtPmJ1Zi5idWYgKyBpdGVtLT5hcmdfb2Zmc2V0OwogfQogCitzdGF0aWMgaW50IGlzX2NvbW1hbmQoZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCwgY29uc3QgY2hhciAqKmJvbCkKK3sKKwljb25zdCBjaGFyICpzdHIgPSB0b2RvX2NvbW1hbmRfaW5mb1tjb21tYW5kXS5zdHI7CisJY29uc3QgY2hhciBuaWNrID0gdG9kb19jb21tYW5kX2luZm9bY29tbWFuZF0uYzsKKwljb25zdCBjaGFyICpwID0gKmJvbCArIDE7CisKKwlyZXR1cm4gc2tpcF9wcmVmaXgoKmJvbCwgc3RyLCBib2wpIHx8CisJCSgobmljayAmJiAqKmJvbCA9PSBuaWNrKSAmJgorCQkgKCpwID09ICcgJyB8fCAqcCA9PSAnXHQnIHx8ICpwID09ICdcbicgfHwgKnAgPT0gJ1xyJyB8fCAhKnApICYmCisJCSAoKmJvbCA9IHApKTsKK30KKwogc3RhdGljIGludCBwYXJzZV9pbnNuX2xpbmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0sCiAJCQkgICBjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmJvbCwgY2hhciAqZW9sKQogewpAQCAtMjA5NywxMiArMjExMiw3IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IFRPRE9fQ09NTUVOVDsgaSsrKQotCQlpZiAoc2tpcF9wcmVmaXgoYm9sLCB0b2RvX2NvbW1hbmRfaW5mb1tpXS5zdHIsICZib2wpKSB7Ci0JCQlpdGVtLT5jb21tYW5kID0gaTsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKChib2wgKyAxID09IGVvbCB8fCBib2xbMV0gPT0gJyAnKSAmJgotCQkJICAgKmJvbCA9PSB0b2RvX2NvbW1hbmRfaW5mb1tpXS5jKSB7Ci0JCQlib2wrKzsKKwkJaWYgKGlzX2NvbW1hbmQoaSwgJmJvbCkpIHsKIAkJCWl0ZW0tPmNvbW1hbmQgPSBpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTIxNzAsMzQgKzIxODAsMjYgQEAKIAogaW50IHNlcXVlbmNlcl9nZXRfbGFzdF9jb21tYW5kKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBlbnVtIHJlcGxheV9hY3Rpb24gKmFjdGlvbikKIHsKLQlzdHJ1Y3QgdG9kb19pdGVtIGl0ZW07Ci0JY2hhciAqZW9sOwotCWNvbnN0IGNoYXIgKnRvZG9fZmlsZTsKKwljb25zdCBjaGFyICp0b2RvX2ZpbGUsICpib2w7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKLQlpbnQgcmV0ID0gLTE7CisJaW50IHJldCA9IDA7CiAKIAl0b2RvX2ZpbGUgPSBnaXRfcGF0aF90b2RvX2ZpbGUoKTsKIAlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCB0b2RvX2ZpbGUsIDApIDwgMCkgewotCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQlpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpCiAJCQlyZXR1cm4gLTE7CiAJCWVsc2UKIAkJCXJldHVybiBlcnJvcl9lcnJubygidW5hYmxlIHRvIG9wZW4gJyVzJyIsIHRvZG9fZmlsZSk7CiAJfQotCWVvbCA9IHN0cmNocm51bChidWYuYnVmLCAnXG4nKTsKLQlpZiAoYnVmLmJ1ZiAhPSBlb2wgJiYgZW9sWy0xXSA9PSAnXHInKQotCQllb2wtLTsgLyogc3RyaXAgQ2FycmlhZ2UgUmV0dXJuICovCi0JaWYgKHBhcnNlX2luc25fbGluZShyLCAmaXRlbSwgYnVmLmJ1ZiwgYnVmLmJ1ZiwgZW9sKSkKLQkJZ290byBmYWlsOwotCWlmIChpdGVtLmNvbW1hbmQgPT0gVE9ET19QSUNLKQorCWJvbCA9IGJ1Zi5idWYgKyBzdHJzcG4oYnVmLmJ1ZiwgIiBcdFxyXG4iKTsKKwlpZiAoaXNfY29tbWFuZChUT0RPX1BJQ0ssICZib2wpICYmICgqYm9sID09ICcgJyB8fCAqYm9sID09ICdcdCcpKQogCQkqYWN0aW9uID0gUkVQTEFZX1BJQ0s7Ci0JZWxzZSBpZiAoaXRlbS5jb21tYW5kID09IFRPRE9fUkVWRVJUKQorCWVsc2UgaWYgKGlzX2NvbW1hbmQoVE9ET19SRVZFUlQsICZib2wpICYmCisJCSAoKmJvbCA9PSAnICcgfHwgKmJvbCA9PSAnXHQnKSkKIAkJKmFjdGlvbiA9IFJFUExBWV9SRVZFUlQ7CiAJZWxzZQotCQlnb3RvIGZhaWw7CisJCXJldCA9IC0xOwogCi0JcmV0ID0gMDsKLQotIGZhaWw6CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjMxMSwxOSArMjMxMywyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgc2VxdWVuY2VyX3Bvc3RfY29tbWl0X2NsZWFudXAoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit2b2lkIHNlcXVlbmNlcl9wb3N0X2NvbW1pdF9jbGVhbnVwKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBpbnQgdmVyYm9zZSkKIHsKIAlzdHJ1Y3QgcmVwbGF5X29wdHMgb3B0cyA9IFJFUExBWV9PUFRTX0lOSVQ7CiAJaW50IG5lZWRfY2xlYW51cCA9IDA7CiAKIAlpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSkpIHsKLQkJdW5saW5rKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpOworCQlpZiAoIXVubGluayhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKHIpKSAmJiB2ZXJib3NlKQorCQkJd2FybmluZyhfKCJjYW5jZWxsaW5nIGEgY2hlcnJ5IHBpY2tpbmcgaW4gcHJvZ3Jlc3MiKSk7CiAJCW9wdHMuYWN0aW9uID0gUkVQTEFZX1BJQ0s7CiAJCW5lZWRfY2xlYW51cCA9IDE7CiAJfQogCiAJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX3JldmVydF9oZWFkKHIpKSkgewotCQl1bmxpbmsoZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQocikpOworCQlpZiAoIXVubGluayhnaXRfcGF0aF9yZXZlcnRfaGVhZChyKSkgJiYgdmVyYm9zZSkKKwkJCXdhcm5pbmcoXygiY2FuY2VsbGluZyBhIHJldmVydCBpbiBwcm9ncmVzcyIpKTsKIAkJb3B0cy5hY3Rpb24gPSBSRVBMQVlfUkVWRVJUOwogCQluZWVkX2NsZWFudXAgPSAxOwogCX0KQEAgLTI2NTAsMTUgKzI2NTQsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjcmVhdGVfc2VxX2Rpcih2b2lkKQorc3RhdGljIGludCBjcmVhdGVfc2VxX2RpcihzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKIHsKLQlpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGhfc2VxX2RpcigpKSkgewotCQllcnJvcihfKCJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIikpOwotCQlhZHZpc2UoXygidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIpKTsKKwllbnVtIHJlcGxheV9hY3Rpb24gYWN0aW9uOworCWNvbnN0IGNoYXIgKmluX3Byb2dyZXNzX2Vycm9yID0gTlVMTDsKKwljb25zdCBjaGFyICppbl9wcm9ncmVzc19hZHZpY2UgPSBOVUxMOworCXVuc2lnbmVkIGludCBhZHZpc2Vfc2tpcCA9IGZpbGVfZXhpc3RzKGdpdF9wYXRoX3JldmVydF9oZWFkKHIpKSB8fAorCQkJCWZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpOworCisJaWYgKCFzZXF1ZW5jZXJfZ2V0X2xhc3RfY29tbWFuZChyLCAmYWN0aW9uKSkgeworCQlzd2l0Y2ggKGFjdGlvbikgeworCQljYXNlIFJFUExBWV9SRVZFUlQ6CisJCQlpbl9wcm9ncmVzc19lcnJvciA9IF8oInJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIik7CisJCQlpbl9wcm9ncmVzc19hZHZpY2UgPQorCQkJXygidHJ5IFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIpOworCQkJYnJlYWs7CisJCWNhc2UgUkVQTEFZX1BJQ0s6CisJCQlpbl9wcm9ncmVzc19lcnJvciA9IF8oImNoZXJyeS1waWNrIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiKTsKKwkJCWluX3Byb2dyZXNzX2FkdmljZSA9CisJCQlfKCJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCJ1bmV4cGVjdGVkIGFjdGlvbiBpbiBjcmVhdGVfc2VxX2RpciIpOworCQl9CisJfQorCWlmIChpbl9wcm9ncmVzc19lcnJvcikgeworCQllcnJvcigiJXMiLCBpbl9wcm9ncmVzc19lcnJvcik7CisJCWlmIChhZHZpY2Vfc2VxdWVuY2VyX2luX3VzZSkKKwkJCWFkdmlzZShpbl9wcm9ncmVzc19hZHZpY2UsCisJCQkJYWR2aXNlX3NraXAgPyAiLS1za2lwIHwgIiA6ICIiKTsKIAkJcmV0dXJuIC0xOwotCX0gZWxzZSBpZiAobWtkaXIoZ2l0X3BhdGhfc2VxX2RpcigpLCAwNzc3KSA8IDApCisJfQorCWlmIChta2RpcihnaXRfcGF0aF9zZXFfZGlyKCksIDA3NzcpIDwgMCkKIAkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAnJXMnIiksCiAJCQkJICAgZ2l0X3BhdGhfc2VxX2RpcigpKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNzA5LDE1ICsyNzM5LDIwIEBACiAJcmV0dXJuIG9pZGVxKCZhY3R1YWxfaGVhZCwgJmV4cGVjdGVkX2hlYWQpOwogfQogCi1zdGF0aWMgaW50IHJlc2V0X2Zvcl9yb2xsYmFjayhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCitzdGF0aWMgaW50IHJlc2V0X21lcmdlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKIHsKLQljb25zdCBjaGFyICphcmd2WzRdOwkvKiByZXNldCAtLW1lcmdlIDxhcmc+ICsgTlVMTCAqLworCWludCByZXQ7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKIAotCWFyZ3ZbMF0gPSAicmVzZXQiOwotCWFyZ3ZbMV0gPSAiLS1tZXJnZSI7Ci0JYXJndlsyXSA9IG9pZF90b19oZXgob2lkKTsKLQlhcmd2WzNdID0gTlVMTDsKLQlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICJyZXNldCIsICItLW1lcmdlIiwgTlVMTCk7CisKKwlpZiAoIWlzX251bGxfb2lkKG9pZCkpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgb2lkX3RvX2hleChvaWQpKTsKKworCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCByb2xsYmFja19zaW5nbGVfcGljayhzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKQEAgLTI3MzEsNyArMjc2NiwxNiBAQAogCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJlc29sdmUgSEVBRCIpKTsKIAlpZiAoaXNfbnVsbF9vaWQoJmhlYWRfb2lkKSkKIAkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIikpOwotCXJldHVybiByZXNldF9mb3Jfcm9sbGJhY2soJmhlYWRfb2lkKTsKKwlyZXR1cm4gcmVzZXRfbWVyZ2UoJmhlYWRfb2lkKTsKK30KKworc3RhdGljIGludCBza2lwX3NpbmdsZV9waWNrKHZvaWQpCit7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkOworCisJaWYgKHJlYWRfcmVmX2Z1bGwoIkhFQUQiLCAwLCAmaGVhZCwgTlVMTCkpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVzb2x2ZSBIRUFEIikpOworCXJldHVybiByZXNldF9tZXJnZSgmaGVhZCk7CiB9CiAKIGludCBzZXF1ZW5jZXJfcm9sbGJhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKQEAgLTI3NzQsNyArMjgxOCw3IEBACiAJCXdhcm5pbmcoXygiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiAiCiAJCQkgICJOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIikpOwogCX0gZWxzZQotCWlmIChyZXNldF9mb3Jfcm9sbGJhY2soJm9pZCkpCisJaWYgKHJlc2V0X21lcmdlKCZvaWQpKQogCQlnb3RvIGZhaWw7CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJcmV0dXJuIHNlcXVlbmNlcl9yZW1vdmVfc3RhdGUob3B0cyk7CkBAIC0yNzgzLDYgKzI4MjcsNzAgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK2ludCBzZXF1ZW5jZXJfc2tpcChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWVudW0gcmVwbGF5X2FjdGlvbiBhY3Rpb24gPSAtMTsKKwlzZXF1ZW5jZXJfZ2V0X2xhc3RfY29tbWFuZChyLCAmYWN0aW9uKTsKKworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgc3ViY29tbWFuZCByZXF1ZXN0ZWQgdG8gc2tpcCB0aGUgY29tbWl0IGlzIGFjdHVhbGx5CisJICogaW4gcHJvZ3Jlc3MgYW5kIHRoYXQgaXQncyBzYWZlIHRvIHNraXAgdGhlIGNvbW1pdC4KKwkgKgorCSAqIG9wdHMtPmFjdGlvbiB0ZWxscyB1cyB3aGljaCBzdWJjb21tYW5kIHJlcXVlc3RlZCB0byBza2lwIHRoZSBjb21taXQuCisJICogSWYgdGhlIGNvcnJlc3BvbmRpbmcgLmdpdC88QUNUSU9OPl9IRUFEIGV4aXN0cywgd2Uga25vdyB0aGF0IHRoZQorCSAqIGFjdGlvbiBpcyBpbiBwcm9ncmVzcyBhbmQgd2UgY2FuIHNraXAgdGhlIGNvbW1pdC4KKwkgKgorCSAqIE90aGVyd2lzZSB3ZSBjaGVjayB0aGF0IHRoZSBsYXN0IGluc3RydWN0aW9uIHdhcyByZWxhdGVkIHRvIHRoZQorCSAqIHBhcnRpY3VsYXIgc3ViY29tbWFuZCB3ZSdyZSB0cnlpbmcgdG8gZXhlY3V0ZSBhbmQgYmFyZiBpZiB0aGF0J3Mgbm90CisJICogdGhlIGNhc2UuCisJICoKKwkgKiBGaW5hbGx5IHdlIGNoZWNrIHRoYXQgdGhlIHJvbGxiYWNrIGlzICJzYWZlIiwgaS5lLiwgaGFzIHRoZSBIRUFECisJICogbW92ZWQ/IEluIHRoaXMgY2FzZSwgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvICJyZXNldCB0aGUgbWVyZ2UiIGFuZAorCSAqICJza2lwIHRoZSBjb21taXQiIGFzIHRoZSB1c2VyIGFscmVhZHkgaGFuZGxlZCB0aGlzIGJ5IGNvbW1pdHRpbmcuIEJ1dAorCSAqIHdlJ2Qgbm90IHdhbnQgdG8gYmFyZiBoZXJlLCBpbnN0ZWFkIGdpdmUgYWR2aWNlIG9uIGhvdyB0byBwcm9jZWVkLiBXZQorCSAqIG9ubHkgbmVlZCB0byBjaGVjayB0aGF0IHdoZW4gLmdpdC88QUNUSU9OPl9IRUFEIGRvZXNuJ3QgZXhpc3QgYmVjYXVzZQorCSAqIGl0IGdldHMgcmVtb3ZlZCB3aGVuIHRoZSB1c2VyIGNvbW1pdHMsIHNvIGlmIGl0IHN0aWxsIGV4aXN0cyB3ZSdyZQorCSAqIHN1cmUgdGhlIHVzZXIgY2FuJ3QgaGF2ZSBjb21taXR0ZWQgYmVmb3JlLgorCSAqLworCXN3aXRjaCAob3B0cy0+YWN0aW9uKSB7CisJY2FzZSBSRVBMQVlfUkVWRVJUOgorCQlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoX3JldmVydF9oZWFkKHIpKSkgeworCQkJaWYgKGFjdGlvbiAhPSBSRVBMQVlfUkVWRVJUKQorCQkJCXJldHVybiBlcnJvcihfKCJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiKSk7CisJCQlpZiAoIXJvbGxiYWNrX2lzX3NhZmUoKSkKKwkJCQlnb3RvIGdpdmVfYWR2aWNlOworCQl9CisJCWJyZWFrOworCWNhc2UgUkVQTEFZX1BJQ0s6CisJCWlmICghZmlsZV9leGlzdHMoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSkpIHsKKwkJCWlmIChhY3Rpb24gIT0gUkVQTEFZX1BJQ0spCisJCQkJcmV0dXJuIGVycm9yKF8oIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIikpOworCQkJaWYgKCFyb2xsYmFja19pc19zYWZlKCkpCisJCQkJZ290byBnaXZlX2FkdmljZTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInVuZXhwZWN0ZWQgYWN0aW9uIGluIHNlcXVlbmNlcl9za2lwIik7CisJfQorCisJaWYgKHNraXBfc2luZ2xlX3BpY2soKSkKKwkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byBza2lwIHRoZSBjb21taXQiKSk7CisJaWYgKCFpc19kaXJlY3RvcnkoZ2l0X3BhdGhfc2VxX2RpcigpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2VxdWVuY2VyX2NvbnRpbnVlKHIsIG9wdHMpOworCitnaXZlX2FkdmljZToKKwllcnJvcihfKCJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiKSk7CisKKwlpZiAoYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QpIHsKKwkJYWR2aXNlKF8oImhhdmUgeW91IGNvbW1pdHRlZCBhbHJlYWR5P1xuIgorCQkJICJ0cnkgXCJnaXQgJXMgLS1jb250aW51ZVwiIiksCisJCQkgYWN0aW9uID09IFJFUExBWV9SRVZFUlQgPyAicmV2ZXJ0IiA6ICJjaGVycnktcGljayIpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKIHN0YXRpYyBpbnQgc2F2ZV90b2RvKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQogewogCXN0cnVjdCBsb2NrX2ZpbGUgdG9kb19sb2NrID0gTE9DS19JTklUOwpAQCAtMzE5NCw3ICszMzAyLDcgQEAKIAkJcmV0dXJuIGVycm9yX3Jlc29sdmVfY29uZmxpY3QoXyhhY3Rpb25fbmFtZShvcHRzKSkpOwogCX0KIAotCWlmICghZmlsbF90cmVlX2Rlc2NyaXB0b3IoJmRlc2MsICZvaWQpKSB7CisJaWYgKCFmaWxsX3RyZWVfZGVzY3JpcHRvcihyLCAmZGVzYywgJm9pZCkpIHsKIAkJZXJyb3IoXygiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIpLCBvaWRfdG9faGV4KCZvaWQpKTsKIAkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKIAkJZnJlZSgodm9pZCAqKWRlc2MuYnVmZmVyKTsKQEAgLTM0MDEsNiArMzUwOSwxMCBAQAogCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOwogCQlyZXQgPSBmYXN0X2ZvcndhcmRfdG8ociwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwKIAkJCQkgICAgICAmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsIDAsIG9wdHMpOworCQlpZiAoZmxhZ3MgJiBUT0RPX0VESVRfTUVSR0VfTVNHKSB7CisJCQlydW5fY29tbWl0X2ZsYWdzIHw9IEFNRU5EX01TRzsKKwkJCWdvdG8gZmFzdF9mb3J3YXJkX2VkaXQ7CisJCX0KIAkJZ290byBsZWF2ZV9tZXJnZTsKIAl9CiAKQEAgLTM1MDQsNiArMzYxNiw3IEBACiAJCSAqIHZhbHVlIChhIG5lZ2F0aXZlIG9uZSB3b3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBgbWVyZ2VgCiAJCSAqIGNvbW1hbmQgbmVlZHMgdG8gYmUgcmVzY2hlZHVsZWQpLgogCQkgKi8KKwlmYXN0X2ZvcndhcmRfZWRpdDoKIAkJcmV0ID0gISFydW5fZ2l0X2NvbW1pdChyLCBnaXRfcGF0aF9tZXJnZV9tc2cociksIG9wdHMsCiAJCQkJICAgICAgIHJ1bl9jb21taXRfZmxhZ3MpOwogCkBAIC0zNzI4LDExICszODQxLDE0IEBACiAJCQl1bmxpbmsocmViYXNlX3BhdGhfYXV0aG9yX3NjcmlwdCgpKTsKIAkJCXVubGluayhyZWJhc2VfcGF0aF9zdG9wcGVkX3NoYSgpKTsKIAkJCXVubGluayhyZWJhc2VfcGF0aF9hbWVuZCgpKTsKLQkJCXVubGluayhnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSk7CisJCQl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfaGVhZChyKSk7CiAJCQlkZWxldGVfcmVmKE5VTEwsICJSRUJBU0VfSEVBRCIsIE5VTEwsIFJFRl9OT19ERVJFRik7CiAKLQkJCWlmIChpdGVtLT5jb21tYW5kID09IFRPRE9fQlJFQUspCisJCQlpZiAoaXRlbS0+Y29tbWFuZCA9PSBUT0RPX0JSRUFLKSB7CisJCQkJaWYgKCFvcHRzLT52ZXJib3NlKQorCQkJCQl0ZXJtX2NsZWFyX2xpbmUoKTsKIAkJCQlyZXR1cm4gc3RvcHBlZF9hdF9oZWFkKHIpOworCQkJfQogCQl9CiAJCWlmIChpdGVtLT5jb21tYW5kIDw9IFRPRE9fU1FVQVNIKSB7CiAJCQlpZiAoaXNfcmViYXNlX2kob3B0cykpCkBAIC0zNzU0LDExICszODcwLDE0IEBACiAJCQl9CiAJCQlpZiAoaXRlbS0+Y29tbWFuZCA9PSBUT0RPX0VESVQpIHsKIAkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBpdGVtLT5jb21taXQ7Ci0JCQkJaWYgKCFyZXMpCisJCQkJaWYgKCFyZXMpIHsKKwkJCQkJaWYgKCFvcHRzLT52ZXJib3NlKQorCQkJCQkJdGVybV9jbGVhcl9saW5lKCk7CiAJCQkJCWZwcmludGYoc3RkZXJyLAogCQkJCQkJXygiU3RvcHBlZCBhdCAlcy4uLiAgJS4qc1xuIiksCiAJCQkJCQlzaG9ydF9jb21taXRfbmFtZShjb21taXQpLAogCQkJCQkJaXRlbS0+YXJnX2xlbiwgYXJnKTsKKwkJCQl9CiAJCQkJcmV0dXJuIGVycm9yX3dpdGhfcGF0Y2gociwgY29tbWl0LAogCQkJCQlhcmcsIGl0ZW0tPmFyZ19sZW4sIG9wdHMsIHJlcywgIXJlcyk7CiAJCQl9CkBAIC0zNzk2LDYgKzM5MTUsOCBAQAogCQkJaW50IHNhdmVkID0gKmVuZF9vZl9hcmc7CiAJCQlzdHJ1Y3Qgc3RhdCBzdDsKIAorCQkJaWYgKCFvcHRzLT52ZXJib3NlKQorCQkJCXRlcm1fY2xlYXJfbGluZSgpOwogCQkJKmVuZF9vZl9hcmcgPSAnXDAnOwogCQkJcmVzID0gZG9fZXhlYyhyLCBhcmcpOwogCQkJKmVuZF9vZl9hcmcgPSBzYXZlZDsKQEAgLTM5NTQsMTAgKzQwNzUsMTMgQEAKIAkJfQogCQlhcHBseV9hdXRvc3Rhc2gob3B0cyk7CiAKLQkJaWYgKCFvcHRzLT5xdWlldCkKKwkJaWYgKCFvcHRzLT5xdWlldCkgeworCQkJaWYgKCFvcHRzLT52ZXJib3NlKQorCQkJCXRlcm1fY2xlYXJfbGluZSgpOwogCQkJZnByaW50ZihzdGRlcnIsCiAJCQkJIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICVzLlxuIiwKIAkJCQloZWFkX3JlZi5idWYpOworCQl9CiAKIAkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX3JlZik7CkBAIC00MTAyLDcgKzQyMjYsNyBAQAogCQkJICAgb3B0cywgZmxhZ3MpKQogCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iKSk7CiAJdW5saW5rKHJlYmFzZV9wYXRoX2FtZW5kKCkpOwotCXVubGluayhnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSk7CisJdW5saW5rKGdpdF9wYXRoX21lcmdlX2hlYWQocikpOwogCWlmIChmaW5hbF9maXh1cCkgewogCQl1bmxpbmsocmViYXNlX3BhdGhfZml4dXBfbXNnKCkpOwogCQl1bmxpbmsocmViYXNlX3BhdGhfc3F1YXNoX21zZygpKTsKQEAgLTQyMzcsNyArNDM2MSw3IEBACiAJICovCiAKIAlpZiAod2Fsa19yZXZzX3BvcHVsYXRlX3RvZG8oJnRvZG9fbGlzdCwgb3B0cykgfHwKLQkJCWNyZWF0ZV9zZXFfZGlyKCkgPCAwKQorCQkJY3JlYXRlX3NlcV9kaXIocikgPCAwKQogCQlyZXR1cm4gLTE7CiAJaWYgKGdldF9vaWQoIkhFQUQiLCAmb2lkKSAmJiAob3B0cy0+YWN0aW9uID09IFJFUExBWV9SRVZFUlQpKQogCQlyZXR1cm4gZXJyb3IoXygiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IikpOwpkaWZmIC0tZ2l0IGEvc2VxdWVuY2VyLmggYi9zZXF1ZW5jZXIuaAppbmRleCAwYzQ5NGI4Li42NzA0YWNiIDEwMDY0NAotLS0gYS9zZXF1ZW5jZXIuaAorKysgYi9zZXF1ZW5jZXIuaApAQCAtMTI5LDYgKzEyOSw3IEBACiAJCQkgICAgIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cyk7CiBpbnQgc2VxdWVuY2VyX2NvbnRpbnVlKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpOwogaW50IHNlcXVlbmNlcl9yb2xsYmFjayhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKTsKK2ludCBzZXF1ZW5jZXJfc2tpcChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKTsKIGludCBzZXF1ZW5jZXJfcmVtb3ZlX3N0YXRlKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cyk7CiAKICNkZWZpbmUgVE9ET19MSVNUX0tFRVBfRU1QVFkgKDFVIDw8IDApCkBAIC0yMDAsNiArMjAxLDYgQEAKIHZvaWQgcGFyc2Vfc3RyYXRlZ3lfb3B0cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNoYXIgKnJhd19vcHRzKTsKIGludCB3cml0ZV9iYXNpY19zdGF0ZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNvbnN0IGNoYXIgKmhlYWRfbmFtZSwKIAkJICAgICAgc3RydWN0IGNvbW1pdCAqb250bywgY29uc3QgY2hhciAqb3JpZ19oZWFkKTsKLXZvaWQgc2VxdWVuY2VyX3Bvc3RfY29tbWl0X2NsZWFudXAoc3RydWN0IHJlcG9zaXRvcnkgKnIpOwordm9pZCBzZXF1ZW5jZXJfcG9zdF9jb21taXRfY2xlYW51cChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgaW50IHZlcmJvc2UpOwogaW50IHNlcXVlbmNlcl9nZXRfbGFzdF9jb21tYW5kKHN0cnVjdCByZXBvc2l0b3J5KiByLAogCQkJICAgICAgIGVudW0gcmVwbGF5X2FjdGlvbiAqYWN0aW9uKTsKZGlmZiAtLWdpdCBhL3NlcnZlci1pbmZvLmMgYi9zZXJ2ZXItaW5mby5jCmluZGV4IDkyMTg3YzcuLjRkODE5OWIgMTAwNjQ0Ci0tLSBhL3NlcnZlci1pbmZvLmMKKysrIGIvc2VydmVyLWluZm8uYwpAQCAtNyw4MiArNywxNzQgQEAKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJwYWNrZmlsZS5oIgogI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdHJ1Y3QgdXBkYXRlX2luZm9fY3R4IHsKKwlGSUxFICpjdXJfZnA7CisJRklMRSAqb2xkX2ZwOyAvKiBiZWNvbWVzIE5VTEwgaWYgaXQgZGlmZmVycyBmcm9tIGN1cl9mcCAqLworCXN0cnVjdCBzdHJidWYgY3VyX3NiOworCXN0cnVjdCBzdHJidWYgb2xkX3NiOworfTsKKworc3RhdGljIHZvaWQgdWljX21hcmtfc3RhbGUoc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCAqdWljKQoreworCWZjbG9zZSh1aWMtPm9sZF9mcCk7CisJdWljLT5vbGRfZnAgPSBOVUxMOworfQorCitzdGF0aWMgaW50IHVpY19pc19zdGFsZShjb25zdCBzdHJ1Y3QgdXBkYXRlX2luZm9fY3R4ICp1aWMpCit7CisJcmV0dXJuIHVpYy0+b2xkX2ZwID09IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdWljX3ByaW50ZihzdHJ1Y3QgdXBkYXRlX2luZm9fY3R4ICp1aWMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJaW50IHJldCA9IC0xOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisKKwlpZiAodWljX2lzX3N0YWxlKHVpYykpIHsKKwkJcmV0ID0gdmZwcmludGYodWljLT5jdXJfZnAsIGZtdCwgYXApOworCX0gZWxzZSB7CisJCXNzaXplX3QgcjsKKwkJc3RydWN0IHN0cmJ1ZiAqY3VyID0gJnVpYy0+Y3VyX3NiOworCQlzdHJ1Y3Qgc3RyYnVmICpvbGQgPSAmdWljLT5vbGRfc2I7CisKKwkJc3RyYnVmX3Jlc2V0KGN1cik7CisJCXN0cmJ1Zl92aW5zZXJ0ZihjdXIsIDAsIGZtdCwgYXApOworCisJCXN0cmJ1Zl9yZXNldChvbGQpOworCQlzdHJidWZfZ3JvdyhvbGQsIGN1ci0+bGVuKTsKKwkJciA9IGZyZWFkKG9sZC0+YnVmLCAxLCBjdXItPmxlbiwgdWljLT5vbGRfZnApOworCQlpZiAociAhPSBjdXItPmxlbiB8fCBtZW1jbXAob2xkLT5idWYsIGN1ci0+YnVmLCByKSkKKwkJCXVpY19tYXJrX3N0YWxlKHVpYyk7CisKKwkJaWYgKGZ3cml0ZShjdXItPmJ1ZiwgMSwgY3VyLT5sZW4sIHVpYy0+Y3VyX2ZwKSA9PSBjdXItPmxlbikKKwkJCXJldCA9IDA7CisJfQorCisJdmFfZW5kKGFwKTsKKworCXJldHVybiByZXQ7Cit9CiAKIC8qCiAgKiBDcmVhdGUgdGhlIGZpbGUgInBhdGgiIGJ5IHdyaXRpbmcgdG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgcmVuYW1pbmcKICAqIGl0IGludG8gcGxhY2UuIFRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBjb21lIGZyb20gImdlbmVyYXRlIiwgd2hpY2gKICAqIHNob3VsZCByZXR1cm4gbm9uLXplcm8gaWYgaXQgZW5jb3VudGVycyBhbiBlcnJvci4KICAqLwotc3RhdGljIGludCB1cGRhdGVfaW5mb19maWxlKGNoYXIgKnBhdGgsIGludCAoKmdlbmVyYXRlKShGSUxFICopKQorc3RhdGljIGludCB1cGRhdGVfaW5mb19maWxlKGNoYXIgKnBhdGgsCisJCQlpbnQgKCpnZW5lcmF0ZSkoc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCAqKSwKKwkJCWludCBmb3JjZSkKIHsKIAljaGFyICp0bXAgPSBta3BhdGhkdXAoIiVzX1hYWFhYWCIsIHBhdGgpOwogCWludCByZXQgPSAtMTsKIAlpbnQgZmQgPSAtMTsKLQlGSUxFICpmcCA9IE5VTEwsICp0b19jbG9zZTsKKwlGSUxFICp0b19jbG9zZTsKKwlzdHJ1Y3QgdXBkYXRlX2luZm9fY3R4IHVpYyA9IHsKKwkJLmN1cl9mcCA9IE5VTEwsCisJCS5vbGRfZnAgPSBOVUxMLAorCQkuY3VyX3NiID0gU1RSQlVGX0lOSVQsCisJCS5vbGRfc2IgPSBTVFJCVUZfSU5JVAorCX07CiAKIAlzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHBhdGgpOwogCWZkID0gZ2l0X21rc3RlbXBfbW9kZSh0bXAsIDA2NjYpOwogCWlmIChmZCA8IDApCiAJCWdvdG8gb3V0OwotCXRvX2Nsb3NlID0gZnAgPSBmZG9wZW4oZmQsICJ3Iik7Ci0JaWYgKCFmcCkKKwl0b19jbG9zZSA9IHVpYy5jdXJfZnAgPSBmZG9wZW4oZmQsICJ3Iik7CisJaWYgKCF1aWMuY3VyX2ZwKQogCQlnb3RvIG91dDsKIAlmZCA9IC0xOwotCXJldCA9IGdlbmVyYXRlKGZwKTsKKworCS8qIG5vIHByb2JsZW0gb24gRU5PRU5UIGFuZCBvbGRfZnAgPT0gTlVMTCwgaXQncyBzdGFsZSwgbm93ICovCisJaWYgKCFmb3JjZSkKKwkJdWljLm9sZF9mcCA9IGZvcGVuX29yX3dhcm4ocGF0aCwgInIiKTsKKworCS8qCisJICogdWljX3ByaW50ZiB3aWxsIGNvbXBhcmUgaW5jcmVtZW50YWwgY29tcGFyaXNvbiBhZ2luc3Qgb2xkX2ZwCisJICogYW5kIG1hcmsgdWljIGFzIHN0YWxlIGlmIG5lZWRlZAorCSAqLworCXJldCA9IGdlbmVyYXRlKCZ1aWMpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCWZwID0gTlVMTDsKKworCS8qIG5ldyBmaWxlIG1heSBiZSBzaG9ydGVyIHRoYW4gdGhlIG9sZCBvbmUsIGNoZWNrIGhlcmUgKi8KKwlpZiAoIXVpY19pc19zdGFsZSgmdWljKSkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJbG9uZyBuZXdfbGVuID0gZnRlbGwodWljLmN1cl9mcCk7CisJCWludCBvbGRfZmQgPSBmaWxlbm8odWljLm9sZF9mcCk7CisKKwkJaWYgKG5ld19sZW4gPCAwKSB7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChmc3RhdChvbGRfZmQsICZzdCkgfHwgKHN0LnN0X3NpemUgIT0gKHNpemVfdCluZXdfbGVuKSkKKwkJCXVpY19tYXJrX3N0YWxlKCZ1aWMpOworCX0KKworCXVpYy5jdXJfZnAgPSBOVUxMOwogCWlmIChmY2xvc2UodG9fY2xvc2UpKQogCQlnb3RvIG91dDsKLQlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKHRtcCkgPCAwKQotCQlnb3RvIG91dDsKLQlpZiAocmVuYW1lKHRtcCwgcGF0aCkgPCAwKQotCQlnb3RvIG91dDsKKworCWlmICh1aWNfaXNfc3RhbGUoJnVpYykpIHsKKwkJaWYgKGFkanVzdF9zaGFyZWRfcGVybSh0bXApIDwgMCkKKwkJCWdvdG8gb3V0OworCQlpZiAocmVuYW1lKHRtcCwgcGF0aCkgPCAwKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJdW5saW5rKHRtcCk7CisJfQogCXJldCA9IDA7CiAKIG91dDoKIAlpZiAocmV0KSB7CiAJCWVycm9yX2Vycm5vKCJ1bmFibGUgdG8gdXBkYXRlICVzIiwgcGF0aCk7Ci0JCWlmIChmcCkKLQkJCWZjbG9zZShmcCk7CisJCWlmICh1aWMuY3VyX2ZwKQorCQkJZmNsb3NlKHVpYy5jdXJfZnApOwogCQllbHNlIGlmIChmZCA+PSAwKQogCQkJY2xvc2UoZmQpOwogCQl1bmxpbmsodG1wKTsKIAl9CiAJZnJlZSh0bXApOworCWlmICh1aWMub2xkX2ZwKQorCQlmY2xvc2UodWljLm9sZF9mcCk7CisJc3RyYnVmX3JlbGVhc2UoJnVpYy5vbGRfc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZ1aWMuY3VyX3NiKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFkZF9pbmZvX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCiAJCQlpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKIHsKLQlGSUxFICpmcCA9IGNiX2RhdGE7CisJc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCAqdWljID0gY2JfZGF0YTsKIAlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOwogCWlmICghbykKIAkJcmV0dXJuIC0xOwogCi0JaWYgKGZwcmludGYoZnAsICIlcwklc1xuIiwgb2lkX3RvX2hleChvaWQpLCBwYXRoKSA8IDApCisJaWYgKHVpY19wcmludGYodWljLCAiJXMJJXNcbiIsIG9pZF90b19oZXgob2lkKSwgcGF0aCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7CiAJCW8gPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksIG8sIHBhdGgsIDApOwogCQlpZiAobykKLQkJCWlmIChmcHJpbnRmKGZwLCAiJXMJJXNee31cbiIsCisJCQlpZiAodWljX3ByaW50Zih1aWMsICIlcwklc157fVxuIiwKIAkJCQlvaWRfdG9faGV4KCZvLT5vaWQpLCBwYXRoKSA8IDApCiAJCQkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW5lcmF0ZV9pbmZvX3JlZnMoRklMRSAqZnApCitzdGF0aWMgaW50IGdlbmVyYXRlX2luZm9fcmVmcyhzdHJ1Y3QgdXBkYXRlX2luZm9fY3R4ICp1aWMpCiB7Ci0JcmV0dXJuIGZvcl9lYWNoX3JlZihhZGRfaW5mb19yZWYsIGZwKTsKKwlyZXR1cm4gZm9yX2VhY2hfcmVmKGFkZF9pbmZvX3JlZiwgdWljKTsKIH0KIAotc3RhdGljIGludCB1cGRhdGVfaW5mb19yZWZzKHZvaWQpCitzdGF0aWMgaW50IHVwZGF0ZV9pbmZvX3JlZnMoaW50IGZvcmNlKQogewogCWNoYXIgKnBhdGggPSBnaXRfcGF0aGR1cCgiaW5mby9yZWZzIik7Ci0JaW50IHJldCA9IHVwZGF0ZV9pbmZvX2ZpbGUocGF0aCwgZ2VuZXJhdGVfaW5mb19yZWZzKTsKKwlpbnQgcmV0ID0gdXBkYXRlX2luZm9fZmlsZShwYXRoLCBnZW5lcmF0ZV9pbmZvX3JlZnMsIGZvcmNlKTsKIAlmcmVlKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMzIsMTQgKzMyNCwxNCBAQAogCWZyZWUoaW5mbyk7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfcGFja19pbmZvX2ZpbGUoRklMRSAqZnApCitzdGF0aWMgaW50IHdyaXRlX3BhY2tfaW5mb19maWxlKHN0cnVjdCB1cGRhdGVfaW5mb19jdHggKnVpYykKIHsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhY2s7IGkrKykgewotCQlpZiAoZnByaW50ZihmcCwgIlAgJXNcbiIsIHBhY2tfYmFzZW5hbWUoaW5mb1tpXS0+cCkpIDwgMCkKKwkJaWYgKHVpY19wcmludGYodWljLCAiUCAlc1xuIiwgcGFja19iYXNlbmFtZShpbmZvW2ldLT5wKSkgPCAwKQogCQkJcmV0dXJuIC0xOwogCX0KLQlpZiAoZnB1dGMoJ1xuJywgZnApID09IEVPRikKKwlpZiAodWljX3ByaW50Zih1aWMsICJcbiIpIDwgMCkKIAkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogfQpAQCAtMjUwLDcgKzM0Miw3IEBACiAJaW50IHJldDsKIAogCWluaXRfcGFja19pbmZvKGluZm9maWxlLCBmb3JjZSk7Ci0JcmV0ID0gdXBkYXRlX2luZm9fZmlsZShpbmZvZmlsZSwgd3JpdGVfcGFja19pbmZvX2ZpbGUpOworCXJldCA9IHVwZGF0ZV9pbmZvX2ZpbGUoaW5mb2ZpbGUsIHdyaXRlX3BhY2tfaW5mb19maWxlLCBmb3JjZSk7CiAJZnJlZV9wYWNrX2luZm8oKTsKIAlmcmVlKGluZm9maWxlKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjY1LDcgKzM1Nyw3IEBACiAJICovCiAJaW50IGVycnMgPSAwOwogCi0JZXJycyA9IGVycnMgfCB1cGRhdGVfaW5mb19yZWZzKCk7CisJZXJycyA9IGVycnMgfCB1cGRhdGVfaW5mb19yZWZzKGZvcmNlKTsKIAllcnJzID0gZXJycyB8IHVwZGF0ZV9pbmZvX3BhY2tzKGZvcmNlKTsKIAogCS8qIHJlbW92ZSBsZWZ0b3ZlciByZXYtY2FjaGUgZmlsZSBpZiB0aGVyZSBpcyBhbnkgKi8KZGlmZiAtLWdpdCBhL3NoLWkxOG4tLWVudnN1YnN0LmMgYi9zaC1pMThuLS1lbnZzdWJzdC5jCmluZGV4IGNlY2ZkZDMuLmU3NDMwYjkgMTAwNjQ0Ci0tLSBhL3NoLWkxOG4tLWVudnN1YnN0LmMKKysrIGIvc2gtaTE4bi0tZW52c3Vic3QuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJewogCSAgLyogSGVyZSB3ZSBrbm93IHRoYXQgaWYgcyBpcyBpbiB0aGUgbGlzdCwgaXQgaXMgYXQgYW4gaW5kZXggagogCSAgICAgd2l0aCBqMSA8PSBqIDwgajIuICAqLwotCSAgc2l6ZV90IGogPSAoajEgKyBqMikgPj4gMTsKKwkgIHNpemVfdCBqID0gajEgKyAoKGoyIC0gajEpID4+IDEpOwogCSAgaW50IHJlc3VsdCA9IHN0cmNtcCAoc2xwLT5pdGVtW2pdLCBzKTsKIAogCSAgaWYgKHJlc3VsdCA+IDApCmRpZmYgLS1naXQgYS9zaGExLWZpbGUuYyBiL3NoYTEtZmlsZS5jCmluZGV4IDg4OGI2MDIuLjg0ZmQwMmYgMTAwNjQ0Ci0tLSBhL3NoYTEtZmlsZS5jCisrKyBiL3NoYTEtZmlsZS5jCkBAIC03NDMsNiArNzQzLDEwMyBAQAogCXJldHVybiByZWZfZ2l0OwogfQogCitzdGF0aWMgdm9pZCBmaWxsX2FsdGVybmF0ZV9yZWZzX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCwKKwkJCQkJY29uc3QgY2hhciAqcmVwb19wYXRoKQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgiY29yZS5hbHRlcm5hdGVSZWZzQ29tbWFuZCIsICZ2YWx1ZSkpIHsKKwkJY21kLT51c2Vfc2hlbGwgPSAxOworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCB2YWx1ZSk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCByZXBvX3BhdGgpOworCX0gZWxzZSB7CisJCWNtZC0+Z2l0X2NtZCA9IDE7CisKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLT5hcmdzLCAiLS1naXQtZGlyPSVzIiwgcmVwb19wYXRoKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQtPmFyZ3MsICJmb3ItZWFjaC1yZWYiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQtPmFyZ3MsICItLWZvcm1hdD0lKG9iamVjdG5hbWUpIik7CisKKwkJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgiY29yZS5hbHRlcm5hdGVSZWZzUHJlZml4ZXMiLCAmdmFsdWUpKSB7CisJCQlhcmd2X2FycmF5X3B1c2goJmNtZC0+YXJncywgIi0tIik7CisJCQlhcmd2X2FycmF5X3NwbGl0KCZjbWQtPmFyZ3MsIHZhbHVlKTsKKwkJfQorCX0KKworCWNtZC0+ZW52ID0gbG9jYWxfcmVwb19lbnY7CisJY21kLT5vdXQgPSAtMTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9hbHRlcm5hdGVfcmVmcyhjb25zdCBjaGFyICpwYXRoLAorCQkJCWFsdGVybmF0ZV9yZWZfZm4gKmNiLAorCQkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZoOworCisJZmlsbF9hbHRlcm5hdGVfcmVmc19jb21tYW5kKCZjbWQsIHBhdGgpOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNtZCkpCisJCXJldHVybjsKKworCWZoID0geGZkb3BlbihjbWQub3V0LCAiciIpOworCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgZmgpICE9IEVPRikgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJY29uc3QgY2hhciAqcDsKKworCQlpZiAocGFyc2Vfb2lkX2hleChsaW5lLmJ1ZiwgJm9pZCwgJnApIHx8ICpwKSB7CisJCQl3YXJuaW5nKF8oImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIpLAorCQkJCWxpbmUuYnVmKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2IoJm9pZCwgZGF0YSk7CisJfQorCisJZmNsb3NlKGZoKTsKKwlmaW5pc2hfY29tbWFuZCgmY21kKTsKK30KKworc3RydWN0IGFsdGVybmF0ZV9yZWZzX2RhdGEgeworCWFsdGVybmF0ZV9yZWZfZm4gKmZuOworCXZvaWQgKmRhdGE7Cit9OworCitzdGF0aWMgaW50IHJlZnNfZnJvbV9hbHRlcm5hdGVfY2Ioc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKmUsCisJCQkJICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXNpemVfdCBiYXNlX2xlbjsKKwlzdHJ1Y3QgYWx0ZXJuYXRlX3JlZnNfZGF0YSAqY2IgPSBkYXRhOworCisJaWYgKCFzdHJidWZfcmVhbHBhdGgoJnBhdGgsIGUtPnBhdGgsIDApKQorCQlnb3RvIG91dDsKKwlpZiAoIXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJnBhdGgsICIvb2JqZWN0cyIpKQorCQlnb3RvIG91dDsKKwliYXNlX2xlbiA9IHBhdGgubGVuOworCisJLyogSXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5IHdpdGggcmVmcz8gKi8KKwlzdHJidWZfYWRkc3RyKCZwYXRoLCAiL3JlZnMiKTsKKwlpZiAoIWlzX2RpcmVjdG9yeShwYXRoLmJ1ZikpCisJCWdvdG8gb3V0OworCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGJhc2VfbGVuKTsKKworCXJlYWRfYWx0ZXJuYXRlX3JlZnMocGF0aC5idWYsIGNiLT5mbiwgY2ItPmRhdGEpOworCitvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXJldHVybiAwOworfQorCit2b2lkIGZvcl9lYWNoX2FsdGVybmF0ZV9yZWYoYWx0ZXJuYXRlX3JlZl9mbiBmbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYWx0ZXJuYXRlX3JlZnNfZGF0YSBjYjsKKwljYi5mbiA9IGZuOworCWNiLmRhdGEgPSBkYXRhOworCWZvcmVhY2hfYWx0X29kYihyZWZzX2Zyb21fYWx0ZXJuYXRlX2NiLCAmY2IpOworfQorCiBpbnQgZm9yZWFjaF9hbHRfb2RiKGFsdF9vZGJfZm4gZm4sIHZvaWQgKmNiKQogewogCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICplbnQ7CkBAIC0xNTA1LDcgKzE2MDIsOCBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkICpyZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCit2b2lkICpyZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAogCQkJCSBjb25zdCBjaGFyICpyZXF1aXJlZF90eXBlX25hbWUsCiAJCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUsCiAJCQkJIHN0cnVjdCBvYmplY3RfaWQgKmFjdHVhbF9vaWRfcmV0dXJuKQpAQCAtMTUyMSw3ICsxNjE5LDcgQEAKIAkJaW50IHJlZl9sZW5ndGggPSAtMTsKIAkJY29uc3QgY2hhciAqcmVmX3R5cGUgPSBOVUxMOwogCi0JCWJ1ZmZlciA9IHJlYWRfb2JqZWN0X2ZpbGUoJmFjdHVhbF9vaWQsICZ0eXBlLCAmaXNpemUpOworCQlidWZmZXIgPSByZXBvX3JlYWRfb2JqZWN0X2ZpbGUociwgJmFjdHVhbF9vaWQsICZ0eXBlLCAmaXNpemUpOwogCQlpZiAoIWJ1ZmZlcikKIAkJCXJldHVybiBOVUxMOwogCQlpZiAodHlwZSA9PSByZXF1aXJlZF90eXBlKSB7CmRpZmYgLS1naXQgYS9zaGExLW5hbWUuYyBiL3NoYTEtbmFtZS5jCmluZGV4IDcyOGU2ZjEuLjI5ODllMjcgMTAwNjQ0Ci0tLSBhL3NoYTEtbmFtZS5jCisrKyBiL3NoYTEtbmFtZS5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAkgKiBvciBtaWdyYXRlZCBmcm9tIGxvb3NlIHRvIHBhY2tlZC4KIAkgKi8KIAlpZiAoc3RhdHVzID09IE1JU1NJTkdfT0JKRUNUKSB7Ci0JCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KHRoZV9yZXBvc2l0b3J5KTsKKwkJcmVwcmVwYXJlX3BhY2tlZF9naXQocik7CiAJCWZpbmRfc2hvcnRfb2JqZWN0X2ZpbGVuYW1lKCZkcyk7CiAJCWZpbmRfc2hvcnRfcGFja2VkX29iamVjdCgmZHMpOwogCQlzdGF0dXMgPSBmaW5pc2hfb2JqZWN0X2Rpc2FtYmlndWF0aW9uKCZkcywgb2lkKTsKQEAgLTgwMSw3ICs4MDEsNyBAQAogCSJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCiAJIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgogCSJcbiIKLQkiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisJIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKIAkiXG4iCiAJIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgogCSJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKQEAgLTEzODksOSArMTM4OSw3IEBACiAJdHdvID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHIsICZvaWRfdG1wLCAwKTsKIAlpZiAoIXR3bykKIAkJcmV0dXJuIC0xOwotCWlmIChyICE9IHRoZV9yZXBvc2l0b3J5KQotCQlCVUcoInNvcnJ5IGdldF9tZXJnZV9iYXNlcygpIGNhbid0IHRha2Ugc3RydWN0IHJlcG9zaXRvcnkgeWV0Iik7Ci0JbWJzID0gZ2V0X21lcmdlX2Jhc2VzKG9uZSwgdHdvKTsKKwltYnMgPSByZXBvX2dldF9tZXJnZV9iYXNlcyhyLCBvbmUsIHR3byk7CiAJaWYgKCFtYnMgfHwgbWJzLT5uZXh0KQogCQlzdCA9IC0xOwogCWVsc2UgewpAQCAtMTY3Nyw3ICsxNjc1LDggQEAKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIG9iamVjdF9uYW1lOmZpbGVuYW1lIGRvZXNuJ3QgZXhpc3QuICovCi1zdGF0aWMgdm9pZCBkaWFnbm9zZV9pbnZhbGlkX29pZF9wYXRoKGNvbnN0IGNoYXIgKnByZWZpeCwKK3N0YXRpYyB2b2lkIGRpYWdub3NlX2ludmFsaWRfb2lkX3BhdGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICAgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCSAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRyZWVfb2lkLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgKm9iamVjdF9uYW1lLApAQCAtMTY5NSw3ICsxNjk0LDcgQEAKIAlpZiAoaXNfbWlzc2luZ19maWxlX2Vycm9yKGVycm5vKSkgewogCQljaGFyICpmdWxsbmFtZSA9IHhzdHJmbXQoIiVzJXMiLCBwcmVmaXgsIGZpbGVuYW1lKTsKIAotCQlpZiAoIWdldF90cmVlX2VudHJ5KHRyZWVfb2lkLCBmdWxsbmFtZSwgJm9pZCwgJm1vZGUpKSB7CisJCWlmICghZ2V0X3RyZWVfZW50cnkociwgdHJlZV9vaWQsIGZ1bGxuYW1lLCAmb2lkLCAmbW9kZSkpIHsKIAkJCWRpZSgiUGF0aCAnJXMnIGV4aXN0cywgYnV0IG5vdCAnJXMnLlxuIgogCQkJICAgICJEaWQgeW91IG1lYW4gJyUuKnM6JXMnIGFrYSAnJS4qczouLyVzJz8iLAogCQkJICAgIGZ1bGxuYW1lLApAQCAtMTg4OSwyMyArMTg4OCwxNSBAQAogCQkJbmV3X2ZpbGVuYW1lID0gcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoKHJlcG8sIGZpbGVuYW1lKTsKIAkJCWlmIChuZXdfZmlsZW5hbWUpCiAJCQkJZmlsZW5hbWUgPSBuZXdfZmlsZW5hbWU7Ci0JCQkvKgotCQkJICogTkVFRFNXT1JLOiBFdmVudHVhbGx5IGdldF90cmVlX2VudHJ5KigpIHNob3VsZAotCQkJICogbGVhcm4gdG8gdGFrZSBzdHJ1Y3QgcmVwb3NpdG9yeSBkaXJlY3RseSBhbmQgd2UKLQkJCSAqIHdvdWxkIG5vdCBuZWVkIHRvIGluamVjdCBzdWJtb2R1bGUgb2RiIHRvIHRoZQotCQkJICogaW4tY29yZSBvZGIuCi0JCQkgKi8KLQkJCWlmIChyZXBvICE9IHRoZV9yZXBvc2l0b3J5KQotCQkJCWFkZF90b19hbHRlcm5hdGVzX21lbW9yeShyZXBvLT5vYmplY3RzLT5vZGItPnBhdGgpOwogCQkJaWYgKGZsYWdzICYgR0VUX09JRF9GT0xMT1dfU1lNTElOS1MpIHsKLQkJCQlyZXQgPSBnZXRfdHJlZV9lbnRyeV9mb2xsb3dfc3ltbGlua3MoJnRyZWVfb2lkLAorCQkJCXJldCA9IGdldF90cmVlX2VudHJ5X2ZvbGxvd19zeW1saW5rcyhyZXBvLCAmdHJlZV9vaWQsCiAJCQkJCWZpbGVuYW1lLCBvaWQsICZvYy0+c3ltbGlua19wYXRoLAogCQkJCQkmb2MtPm1vZGUpOwogCQkJfSBlbHNlIHsKLQkJCQlyZXQgPSBnZXRfdHJlZV9lbnRyeSgmdHJlZV9vaWQsIGZpbGVuYW1lLCBvaWQsCisJCQkJcmV0ID0gZ2V0X3RyZWVfZW50cnkocmVwbywgJnRyZWVfb2lkLCBmaWxlbmFtZSwgb2lkLAogCQkJCQkJICAgICAmb2MtPm1vZGUpOwogCQkJCWlmIChyZXQgJiYgb25seV90b19kaWUpIHsKLQkJCQkJZGlhZ25vc2VfaW52YWxpZF9vaWRfcGF0aChwcmVmaXgsCisJCQkJCWRpYWdub3NlX2ludmFsaWRfb2lkX3BhdGgocmVwbywgcHJlZml4LAogCQkJCQkJCQkgICBmaWxlbmFtZSwKIAkJCQkJCQkJICAgJnRyZWVfb2lkLAogCQkJCQkJCQkgICBuYW1lLCBsZW4pOwpkaWZmIC0tZ2l0IGEvc2hhbGxvdy5jIGIvc2hhbGxvdy5jCmluZGV4IGNlNDUyOTcuLjVmYTJiMTUgMTAwNjQ0Ci0tLSBhL3NoYWxsb3cuYworKysgYi9zaGFsbG93LmMKQEAgLTI0OCw3ICsyNDgsOCBAQAogCWlmIChyLT5wYXJzZWRfb2JqZWN0cy0+aXNfc2hhbGxvdyA9PSAtMSkKIAkJQlVHKCJzaGFsbG93IG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgbm93Iik7CiAKLQlpZiAoIXN0YXRfdmFsaWRpdHlfY2hlY2soci0+cGFyc2VkX29iamVjdHMtPnNoYWxsb3dfc3RhdCwgZ2l0X3BhdGhfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpKQorCWlmICghc3RhdF92YWxpZGl0eV9jaGVjayhyLT5wYXJzZWRfb2JqZWN0cy0+c2hhbGxvd19zdGF0LAorCQkJCSBnaXRfcGF0aF9zaGFsbG93KHIpKSkKIAkJZGllKCJzaGFsbG93IGZpbGUgaGFzIGNoYW5nZWQgc2luY2Ugd2UgcmVhZCBpdCIpOwogfQogCmRpZmYgLS1naXQgYS9zdHJidWYuYyBiL3N0cmJ1Zi5jCmluZGV4IDBlMThiMjUuLmQzMGY5MTYgMTAwNjQ0Ci0tLSBhL3N0cmJ1Zi5jCisrKyBiL3N0cmJ1Zi5jCkBAIC04MTEsMjUgKzgxMSw1NyBAQAogCXN0cmJ1Zl9hZGRfdXJsZW5jb2RlKHNiLCBzLCBzdHJsZW4ocyksIHJlc2VydmVkKTsKIH0KIAotdm9pZCBzdHJidWZfaHVtYW5pc2VfYnl0ZXMoc3RydWN0IHN0cmJ1ZiAqYnVmLCBvZmZfdCBieXRlcykKK3N0YXRpYyB2b2lkIHN0cmJ1Zl9odW1hbmlzZShzdHJ1Y3Qgc3RyYnVmICpidWYsIG9mZl90IGJ5dGVzLAorCQkJCSBpbnQgaHVtYW5pc2VfcmF0ZSkKIHsKIAlpZiAoYnl0ZXMgPiAxIDw8IDMwKSB7Ci0JCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiV1LiUyLjJ1IEdpQiIsCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwKKwkJCQlodW1hbmlzZV9yYXRlID09IDAgPworCQkJCQkvKiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUgKi8KKwkJCQkJXygiJXUuJTIuMnUgR2lCIikgOgorCQkJCQkvKiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUvc2Vjb25kICovCisJCQkJCV8oIiV1LiUyLjJ1IEdpQi9zIiksCiAJCQkgICAgKHVuc2lnbmVkKShieXRlcyA+PiAzMCksCiAJCQkgICAgKHVuc2lnbmVkKShieXRlcyAmICgoMSA8PCAzMCkgLSAxKSkgLyAxMDczNzQxOSk7CiAJfSBlbHNlIGlmIChieXRlcyA+IDEgPDwgMjApIHsKIAkJdW5zaWduZWQgeCA9IGJ5dGVzICsgNTI0MzsgIC8qIGZvciByb3VuZGluZyAqLwotCQlzdHJidWZfYWRkZihidWYsICIldS4lMi4ydSBNaUIiLAorCQlzdHJidWZfYWRkZihidWYsCisJCQkJaHVtYW5pc2VfcmF0ZSA9PSAwID8KKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlICovCisJCQkJCV8oIiV1LiUyLjJ1IE1pQiIpIDoKKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlL3NlY29uZCAqLworCQkJCQlfKCIldS4lMi4ydSBNaUIvcyIpLAogCQkJICAgIHggPj4gMjAsICgoeCAmICgoMSA8PCAyMCkgLSAxKSkgKiAxMDApID4+IDIwKTsKIAl9IGVsc2UgaWYgKGJ5dGVzID4gMSA8PCAxMCkgewogCQl1bnNpZ25lZCB4ID0gYnl0ZXMgKyA1OyAgLyogZm9yIHJvdW5kaW5nICovCi0JCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiV1LiUyLjJ1IEtpQiIsCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwKKwkJCQlodW1hbmlzZV9yYXRlID09IDAgPworCQkJCQkvKiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUgKi8KKwkJCQkJXygiJXUuJTIuMnUgS2lCIikgOgorCQkJCQkvKiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUvc2Vjb25kICovCisJCQkJCV8oIiV1LiUyLjJ1IEtpQi9zIiksCiAJCQkgICAgeCA+PiAxMCwgKCh4ICYgKCgxIDw8IDEwKSAtIDEpKSAqIDEwMCkgPj4gMTApOwogCX0gZWxzZSB7Ci0JCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiV1IGJ5dGVzIiwgKHVuc2lnbmVkKWJ5dGVzKTsKKwkJc3RyYnVmX2FkZGYoYnVmLAorCQkJCWh1bWFuaXNlX3JhdGUgPT0gMCA/CisJCQkJCS8qIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlICovCisJCQkJCVFfKCIldSBieXRlIiwgIiV1IGJ5dGVzIiwgKHVuc2lnbmVkKWJ5dGVzKSA6CisJCQkJCS8qIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlL3NlY29uZCAqLworCQkJCQlRXygiJXUgYnl0ZS9zIiwgIiV1IGJ5dGVzL3MiLCAodW5zaWduZWQpYnl0ZXMpLAorCQkJCSh1bnNpZ25lZClieXRlcyk7CiAJfQogfQogCit2b2lkIHN0cmJ1Zl9odW1hbmlzZV9ieXRlcyhzdHJ1Y3Qgc3RyYnVmICpidWYsIG9mZl90IGJ5dGVzKQoreworCXN0cmJ1Zl9odW1hbmlzZShidWYsIGJ5dGVzLCAwKTsKK30KKwordm9pZCBzdHJidWZfaHVtYW5pc2VfcmF0ZShzdHJ1Y3Qgc3RyYnVmICpidWYsIG9mZl90IGJ5dGVzKQoreworCXN0cmJ1Zl9odW1hbmlzZShidWYsIGJ5dGVzLCAxKTsKK30KKwogdm9pZCBzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJaWYgKCEqcGF0aCkKZGlmZiAtLWdpdCBhL3N0cmJ1Zi5oIGIvc3RyYnVmLmgKaW5kZXggYzhkOThkZi4uZjYyMjc4YSAxMDA2NDQKLS0tIGEvc3RyYnVmLmgKKysrIGIvc3RyYnVmLmgKQEAgLTM3Myw2ICszNzMsMTIgQEAKIHZvaWQgc3RyYnVmX2h1bWFuaXNlX2J5dGVzKHN0cnVjdCBzdHJidWYgKmJ1Ziwgb2ZmX3QgYnl0ZXMpOwogCiAvKioKKyAqIEFwcGVuZCB0aGUgZ2l2ZW4gYnl0ZSByYXRlIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIChpLmUuIDEyLjIzIEtpQi9zLAorICogMy41MCBNaUIvcykuCisgKi8KK3ZvaWQgc3RyYnVmX2h1bWFuaXNlX3JhdGUoc3RydWN0IHN0cmJ1ZiAqYnVmLCBvZmZfdCBieXRlcyk7CisKKy8qKgogICogQWRkIGEgZm9ybWF0dGVkIHN0cmluZyB0byB0aGUgYnVmZmVyLgogICovCiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwyLDMpKSkKZGlmZiAtLWdpdCBhL3N1Ym1vZHVsZS5jIGIvc3VibW9kdWxlLmMKaW5kZXggMmNmYWJhMC4uMGYxOTljNSAxMDA2NDQKLS0tIGEvc3VibW9kdWxlLmMKKysrIGIvc3VibW9kdWxlLmMKQEAgLTE5MTAsNyArMTkxMCw3IEBACiAJaWYgKCEoZmxhZ3MgJiBTVUJNT0RVTEVfTU9WRV9IRUFEX0RSWV9SVU4pKSB7CiAJCWlmIChvbGRfaGVhZCkgewogCQkJaWYgKCFzdWJtb2R1bGVfdXNlc19naXRmaWxlKHBhdGgpKQotCQkJCWFic29yYl9naXRfZGlyX2ludG9fc3VwZXJwcm9qZWN0KCIiLCBwYXRoLAorCQkJCWFic29yYl9naXRfZGlyX2ludG9fc3VwZXJwcm9qZWN0KHBhdGgsCiAJCQkJCUFCU09SQl9HSVRESVJfUkVDVVJTRV9TVUJNT0RVTEVTKTsKIAkJfSBlbHNlIHsKIAkJCWNoYXIgKmdpdGRpciA9IHhzdHJmbXQoIiVzL21vZHVsZXMvJXMiLApAQCAtMTk5Nyw4ICsxOTk3LDcgQEAKICAqIEVtYmVkcyBhIHNpbmdsZSBzdWJtb2R1bGVzIGdpdCBkaXJlY3RvcnkgaW50byB0aGUgc3VwZXJwcm9qZWN0cyBnaXQgZGlyLAogICogbm9uIHJlY3Vyc2l2ZWx5LgogICovCi1zdGF0aWMgdm9pZCByZWxvY2F0ZV9zaW5nbGVfZ2l0X2Rpcl9pbnRvX3N1cGVycHJvamVjdChjb25zdCBjaGFyICpwcmVmaXgsCi0JCQkJCQkgICAgICBjb25zdCBjaGFyICpwYXRoKQorc3RhdGljIHZvaWQgcmVsb2NhdGVfc2luZ2xlX2dpdF9kaXJfaW50b19zdXBlcnByb2plY3QoY29uc3QgY2hhciAqcGF0aCkKIHsKIAljaGFyICpvbGRfZ2l0X2RpciA9IE5VTEwsICpyZWFsX29sZF9naXRfZGlyID0gTlVMTCwgKnJlYWxfbmV3X2dpdF9kaXIgPSBOVUxMOwogCWNvbnN0IGNoYXIgKm5ld19naXRfZGlyOwpAQCAtMjA0MCw4ICsyMDM5LDcgQEAKICAqIGhhdmluZyBpdHMgZ2l0IGRpcmVjdG9yeSB3aXRoaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgZ2l0IGRpciBuZXN0ZWQKICAqIGluIGl0cyBzdXBlcnByb2plY3RzIGdpdCBkaXIgdW5kZXIgbW9kdWxlcy8uCiAgKi8KLXZvaWQgYWJzb3JiX2dpdF9kaXJfaW50b19zdXBlcnByb2plY3QoY29uc3QgY2hhciAqcHJlZml4LAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCit2b2lkIGFic29yYl9naXRfZGlyX2ludG9fc3VwZXJwcm9qZWN0KGNvbnN0IGNoYXIgKnBhdGgsCiAJCQkJICAgICAgdW5zaWduZWQgZmxhZ3MpCiB7CiAJaW50IGVycl9jb2RlOwpAQCAtMjA4Miw3ICsyMDgwLDcgQEAKIAkJY2hhciAqcmVhbF9jb21tb25fZ2l0X2RpciA9IHJlYWxfcGF0aGR1cChnZXRfZ2l0X2NvbW1vbl9kaXIoKSwgMSk7CiAKIAkJaWYgKCFzdGFydHNfd2l0aChyZWFsX3N1Yl9naXRfZGlyLCByZWFsX2NvbW1vbl9naXRfZGlyKSkKLQkJCXJlbG9jYXRlX3NpbmdsZV9naXRfZGlyX2ludG9fc3VwZXJwcm9qZWN0KHByZWZpeCwgcGF0aCk7CisJCQlyZWxvY2F0ZV9zaW5nbGVfZ2l0X2Rpcl9pbnRvX3N1cGVycHJvamVjdChwYXRoKTsKIAogCQlmcmVlKHJlYWxfc3ViX2dpdF9kaXIpOwogCQlmcmVlKHJlYWxfY29tbW9uX2dpdF9kaXIpOwpkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLmggYi9zdWJtb2R1bGUuaAppbmRleCA5ZTE4ZTliLi44MDcyZTZkIDEwMDY0NAotLS0gYS9zdWJtb2R1bGUuaAorKysgYi9zdWJtb2R1bGUuaApAQCAtMTQxLDggKzE0MSw3IEBACiB2b2lkIHByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KHN0cnVjdCBhcmd2X2FycmF5ICpvdXQpOwogCiAjZGVmaW5lIEFCU09SQl9HSVRESVJfUkVDVVJTRV9TVUJNT0RVTEVTICgxPDwwKQotdm9pZCBhYnNvcmJfZ2l0X2Rpcl9pbnRvX3N1cGVycHJvamVjdChjb25zdCBjaGFyICpwcmVmaXgsCi0JCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCwKK3ZvaWQgYWJzb3JiX2dpdF9kaXJfaW50b19zdXBlcnByb2plY3QoY29uc3QgY2hhciAqcGF0aCwKIAkJCQkgICAgICB1bnNpZ25lZCBmbGFncyk7CiAKIC8qCmRpZmYgLS1naXQgYS90L1JFQURNRSBiL3QvUkVBRE1FCmluZGV4IDY0MDRmMzMuLjYwZDViNzcgMTAwNjQ0Ci0tLSBhL3QvUkVBRE1FCisrKyBiL3QvUkVBRE1FCkBAIC0zMzQsMTEgKzMzNCwyMCBAQAogY291bGQgYmUgZW5hYmxlZCBieSBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlIHdpdGggY29ycmVjdCBHSVRfVEVTVF8KIGVudmlyb25tZW50IHNldC4KIAotR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049PG5vbi1lbXB0eT8+IHR1cm5zIGFsbCBzdHJpbmdzIG1hcmtlZCBmb3IKLXRyYW5zbGF0aW9uIGludG8gZ2liYmVyaXNoIGlmIG5vbi1lbXB0eSAodGhpbmsgInRlc3QgLW4iKS4gVXNlZCBmb3IKLXNwb3R0aW5nIHRob3NlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBtYXJrZWQgd2l0aCBhIENfTE9DQUxFX09VVFBVVAotcHJlcmVxdWlzaXRlIHdoZW4gYWRkaW5nIG1vcmUgc3RyaW5ncyBmb3IgdHJhbnNsYXRpb24uIFNlZSAiVGVzdGluZwotbWFya2VkIHN0cmluZ3MiIGluIHBvL1JFQURNRSBmb3IgZGV0YWlscy4KK0dJVF9URVNUX0ZBSUxfUFJFUkVRUz08Ym9vbGVhbj4gZmFpbHMgYWxsIHByZXJlcXVpc2l0ZXMuIFRoaXMgaXMKK3VzZWZ1bCBmb3IgZGlzY292ZXJpbmcgaXNzdWVzIHdpdGggdGhlIHRlc3RzIHdoZXJlIHNheSBhIGxhdGVyIHRlc3QKK2ltcGxpY2l0bHkgZGVwZW5kcyBvbiBhbiBvcHRpb25hbCBlYXJsaWVyIHRlc3QuCisKK1RoZXJlJ3MgYSAiRkFJTF9QUkVSRVFTIiBwcmVyZXF1aXNpdGUgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IGZvcgord2hldGhlciB0aGlzIG1vZGUgaXMgYWN0aXZlLCBhbmQgZS5nLiBza2lwIHNvbWUgdGVzdHMgdGhhdCBhcmUgaGFyZCB0bworcmVmYWN0b3IgdG8gZGVhbCB3aXRoIGl0LiBUaGUgIlNZTUxJTktTIiBwcmVyZXF1aXNpdGUgaXMgY3VycmVudGx5CitleGNsdWRlZCBhcyBzbyBtdWNoIHJlbGllcyBvbiBpdCwgYnV0IHRoaXMgbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUuCisKK0dJVF9URVNUX0dFVFRFWFRfUE9JU09OPTxib29sZWFuPiB0dXJucyBhbGwgc3RyaW5ncyBtYXJrZWQgZm9yCit0cmFuc2xhdGlvbiBpbnRvIGdpYmJlcmlzaCBpZiB0cnVlLiBVc2VkIGZvciBzcG90dGluZyB0aG9zZSB0ZXN0cyB0aGF0CituZWVkIHRvIGJlIG1hcmtlZCB3aXRoIGEgQ19MT0NBTEVfT1VUUFVUIHByZXJlcXVpc2l0ZSB3aGVuIGFkZGluZyBtb3JlCitzdHJpbmdzIGZvciB0cmFuc2xhdGlvbi4gU2VlICJUZXN0aW5nIG1hcmtlZCBzdHJpbmdzIiBpbiBwby9SRUFETUUgZm9yCitkZXRhaWxzLgogCiBHSVRfVEVTVF9TUExJVF9JTkRFWD08Ym9vbGVhbj4gZm9yY2VzIHNwbGl0LWluZGV4IG1vZGUgb24gdGhlIHdob2xlCiB0ZXN0IHN1aXRlLiBBY2NlcHQgYW55IGJvb2xlYW4gdmFsdWVzIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IGdpdC1jb25maWcuCmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWRpci1pdGVyYXRvci5jIGIvdC9oZWxwZXIvdGVzdC1kaXItaXRlcmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2MzMDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1kaXItaXRlcmF0b3IuYwpAQCAtMCwwICsxLDY3IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJkaXItaXRlcmF0b3IuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKmVycm9yX25hbWUoaW50IGVycm9yX251bWJlcikKK3sKKwlzd2l0Y2ggKGVycm9yX251bWJlcikgeworCWNhc2UgRU5PRU5UOiByZXR1cm4gIkVOT0VOVCI7CisJY2FzZSBFTk9URElSOiByZXR1cm4gIkVOT1RESVIiOworCWRlZmF1bHQ6IHJldHVybiAiRVNPTUVUSElOR0VMU0UiOworCX0KK30KKworLyoKKyAqIHVzYWdlOgorICogdG9vbC10ZXN0IGRpci1pdGVyYXRvciBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXBlZGFudGljXSBkaXJlY3RvcnlfcGF0aAorICovCitpbnQgY21kX19kaXJfaXRlcmF0b3IoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBkaXJfaXRlcmF0b3IgKmRpdGVyOworCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisJaW50IGl0ZXJfc3RhdHVzOworCisJZm9yICgrK2FyZ3YsIC0tYXJnYzsgKmFyZ3YgJiYgc3RhcnRzX3dpdGgoKmFyZ3YsICItLSIpOyArK2FyZ3YsIC0tYXJnYykgeworCQlpZiAoc3RyY21wKCphcmd2LCAiLS1mb2xsb3ctc3ltbGlua3MiKSA9PSAwKQorCQkJZmxhZ3MgfD0gRElSX0lURVJBVE9SX0ZPTExPV19TWU1MSU5LUzsKKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCAiLS1wZWRhbnRpYyIpID09IDApCisJCQlmbGFncyB8PSBESVJfSVRFUkFUT1JfUEVEQU5USUM7CisJCWVsc2UKKwkJCWRpZSgiaW52YWxpZCBvcHRpb24gJyVzJyIsICphcmd2KTsKKwl9CisKKwlpZiAoISphcmd2IHx8IGFyZ2MgIT0gMSkKKwkJZGllKCJkaXItaXRlcmF0b3IgbmVlZHMgZXhhY3RseSBvbmUgbm9uLW9wdGlvbiBhcmd1bWVudCIpOworCisJc3RyYnVmX2FkZCgmcGF0aCwgKmFyZ3YsIHN0cmxlbigqYXJndikpOworCWRpdGVyID0gZGlyX2l0ZXJhdG9yX2JlZ2luKHBhdGguYnVmLCBmbGFncyk7CisKKwlpZiAoIWRpdGVyKSB7CisJCXByaW50ZigiZGlyX2l0ZXJhdG9yX2JlZ2luIGZhaWx1cmU6ICVzXG4iLCBlcnJvcl9uYW1lKGVycm5vKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwl3aGlsZSAoKGl0ZXJfc3RhdHVzID0gZGlyX2l0ZXJhdG9yX2FkdmFuY2UoZGl0ZXIpKSA9PSBJVEVSX09LKSB7CisJCWlmIChTX0lTRElSKGRpdGVyLT5zdC5zdF9tb2RlKSkKKwkJCXByaW50ZigiW2RdICIpOworCQllbHNlIGlmIChTX0lTUkVHKGRpdGVyLT5zdC5zdF9tb2RlKSkKKwkJCXByaW50ZigiW2ZdICIpOworCQllbHNlIGlmIChTX0lTTE5LKGRpdGVyLT5zdC5zdF9tb2RlKSkKKwkJCXByaW50ZigiW3NdICIpOworCQllbHNlCisJCQlwcmludGYoIls/XSAiKTsKKworCQlwcmludGYoIiglcykgWyVzXSAlc1xuIiwgZGl0ZXItPnJlbGF0aXZlX3BhdGgsIGRpdGVyLT5iYXNlbmFtZSwKKwkJICAgICAgIGRpdGVyLT5wYXRoLmJ1Zik7CisJfQorCisJaWYgKGl0ZXJfc3RhdHVzICE9IElURVJfRE9ORSkgeworCQlwcmludGYoImRpcl9pdGVyYXRvcl9hZHZhbmNlIGZhaWx1cmVcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZXhhbXBsZS1kZWNvcmF0ZS5jIGIvdC9oZWxwZXIvdGVzdC1leGFtcGxlLWRlY29yYXRlLmMKaW5kZXggYTIwYTYxNi4uYzhhMWNkZSAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1leGFtcGxlLWRlY29yYXRlLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1leGFtcGxlLWRlY29yYXRlLmMKQEAgLTI2LDggKzI2LDggQEAKIAkgKiBBZGQgMiBvYmplY3RzLCBvbmUgd2l0aCBhIG5vbi1OVUxMIGRlY29yYXRpb24gYW5kIG9uZSB3aXRoIGEgTlVMTAogCSAqIGRlY29yYXRpb24uCiAJICovCi0Jb25lID0gbG9va3VwX3Vua25vd25fb2JqZWN0KG9uZV9vaWQuaGFzaCk7Ci0JdHdvID0gbG9va3VwX3Vua25vd25fb2JqZWN0KHR3b19vaWQuaGFzaCk7CisJb25lID0gbG9va3VwX3Vua25vd25fb2JqZWN0KCZvbmVfb2lkKTsKKwl0d28gPSBsb29rdXBfdW5rbm93bl9vYmplY3QoJnR3b19vaWQpOwogCXJldCA9IGFkZF9kZWNvcmF0aW9uKCZuLCBvbmUsICZkZWNvcmF0aW9uX2EpOwogCWlmIChyZXQpCiAJCUJVRygid2hlbiBhZGRpbmcgYSBicmFuZC1uZXcgb2JqZWN0LCBOVUxMIHNob3VsZCBiZSByZXR1cm5lZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogCXJldCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZuLCB0d28pOwogCWlmIChyZXQgIT0gJmRlY29yYXRpb25fYikKIAkJQlVHKCJsb29rdXAgc2hvdWxkIHJldHVybiBhZGRlZCBkZWNsYXJhdGlvbiIpOwotCXRocmVlID0gbG9va3VwX3Vua25vd25fb2JqZWN0KHRocmVlX29pZC5oYXNoKTsKKwl0aHJlZSA9IGxvb2t1cF91bmtub3duX29iamVjdCgmdGhyZWVfb2lkKTsKIAlyZXQgPSBsb29rdXBfZGVjb3JhdGlvbigmbiwgdGhyZWUpOwogCWlmIChyZXQpCiAJCUJVRygibG9va3VwIGZvciB1bmtub3duIG9iamVjdCBzaG91bGQgcmV0dXJuIE5VTEwiKTsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtaGFzaG1hcC5jIGIvdC9oZWxwZXIvdGVzdC1oYXNobWFwLmMKaW5kZXggMjNkMmIxNy4uYWFmMTdiMCAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1oYXNobWFwLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1oYXNobWFwLmMKQEAgLTE3MywxNCArMTczLDcgQEAKIAkJCXAyID0gc3RydG9rKE5VTEwsIERFTElNKTsKIAkJfQogCi0JCWlmICghc3RyY21wKCJoYXNoIiwgY21kKSAmJiBwMSkgewotCi0JCQkvKiBwcmludCByZXN1bHRzIG9mIGRpZmZlcmVudCBoYXNoIGZ1bmN0aW9ucyAqLwotCQkJcHJpbnRmKCIldSAldSAldSAldVxuIiwKLQkJCSAgICAgICBzdHJoYXNoKHAxKSwgbWVtaGFzaChwMSwgc3RybGVuKHAxKSksCi0JCQkgICAgICAgc3RyaWhhc2gocDEpLCBtZW1paGFzaChwMSwgc3RybGVuKHAxKSkpOwotCi0JCX0gZWxzZSBpZiAoIXN0cmNtcCgiYWRkIiwgY21kKSAmJiBwMSAmJiBwMikgeworCQlpZiAoIXN0cmNtcCgiYWRkIiwgY21kKSAmJiBwMSAmJiBwMikgewogCiAJCQkvKiBjcmVhdGUgZW50cnkgd2l0aCBrZXkgPSBwMSwgdmFsdWUgPSBwMiAqLwogCQkJZW50cnkgPSBhbGxvY190ZXN0X2VudHJ5KGhhc2gsIHAxLCBwMik7CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LW1hdGNoLXRyZWVzLmMgYi90L2hlbHBlci90ZXN0LW1hdGNoLXRyZWVzLmMKaW5kZXggOTY4NTdmMi4uYjlmZDQyNyAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1tYXRjaC10cmVlcy5jCisrKyBiL3QvaGVscGVyL3Rlc3QtbWF0Y2gtdHJlZXMuYwpAQCAtMjAsNyArMjAsNyBAQAogCWlmICghdHdvKQogCQlkaWUoIm5vdCBhIHRyZWUtaXNoICVzIiwgYXZbMl0pOwogCi0Jc2hpZnRfdHJlZSgmb25lLT5vYmplY3Qub2lkLCAmdHdvLT5vYmplY3Qub2lkLCAmc2hpZnRlZCwgLTEpOworCXNoaWZ0X3RyZWUodGhlX3JlcG9zaXRvcnksICZvbmUtPm9iamVjdC5vaWQsICZ0d28tPm9iamVjdC5vaWQsICZzaGlmdGVkLCAtMSk7CiAJcHJpbnRmKCJzaGlmdGVkOiAlc1xuIiwgb2lkX3RvX2hleCgmc2hpZnRlZCkpOwogCiAJZXhpdCgwKTsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtb2lkbWFwLmMgYi90L2hlbHBlci90ZXN0LW9pZG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhY2Y5OTkKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LW9pZG1hcC5jCkBAIC0wLDAgKzEsMTEyIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvaWRtYXAuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworLyoga2V5IGlzIGFuIG9pZCBhbmQgdmFsdWUgaXMgYSBuYW1lIChjb3VsZCBiZSBhIHJlZm5hbWUgZm9yIGV4YW1wbGUpICovCitzdHJ1Y3QgdGVzdF9lbnRyeSB7CisJc3RydWN0IG9pZG1hcF9lbnRyeSBlbnRyeTsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCisjZGVmaW5lIERFTElNICIgXHRcclxuIgorCisvKgorICogUmVhZCBzdGRpbiBsaW5lIGJ5IGxpbmUgYW5kIHByaW50IHJlc3VsdCBvZiBjb21tYW5kcyB0byBzdGRvdXQ6CisgKgorICogaGFzaCBvaWRrZXkgLT4gc2hhMWhhc2gob2lka2V5KQorICogcHV0IG9pZGtleSBuYW1ldmFsdWUgLT4gTlVMTCAvIG9sZCBuYW1ldmFsdWUKKyAqIGdldCBvaWRrZXkgLT4gTlVMTCAvIG5hbWV2YWx1ZQorICogcmVtb3ZlIG9pZGtleSAtPiBOVUxMIC8gb2xkIG5hbWV2YWx1ZQorICogaXRlcmF0ZSAtPiBvaWRrZXkxIG5hbWV2YWx1ZTFcbm9pZGtleTIgbmFtZXZhbHVlMlxuLi4uCisgKgorICovCitpbnQgY21kX19vaWRtYXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvaWRtYXAgbWFwID0gT0lETUFQX0lOSVQ7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwkvKiBpbml0IG9pZG1hcCAqLworCW9pZG1hcF9pbml0KCZtYXAsIDApOworCisJLyogcHJvY2VzcyBjb21tYW5kcyBmcm9tIHN0ZGluICovCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBzdGRpbikgIT0gRU9GKSB7CisJCWNoYXIgKmNtZCwgKnAxID0gTlVMTCwgKnAyID0gTlVMTDsKKwkJc3RydWN0IHRlc3RfZW50cnkgKmVudHJ5OworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCQkvKiBicmVhayBsaW5lIGludG8gY29tbWFuZCBhbmQgdXAgdG8gdHdvIHBhcmFtZXRlcnMgKi8KKwkJY21kID0gc3RydG9rKGxpbmUuYnVmLCBERUxJTSk7CisJCS8qIGlnbm9yZSBlbXB0eSBsaW5lcyAqLworCQlpZiAoIWNtZCB8fCAqY21kID09ICcjJykKKwkJCWNvbnRpbnVlOworCisJCXAxID0gc3RydG9rKE5VTEwsIERFTElNKTsKKwkJaWYgKHAxKQorCQkJcDIgPSBzdHJ0b2soTlVMTCwgREVMSU0pOworCisJCWlmICghc3RyY21wKCJwdXQiLCBjbWQpICYmIHAxICYmIHAyKSB7CisKKwkJCWlmIChnZXRfb2lkKHAxLCAmb2lkKSkgeworCQkJCXByaW50ZigiVW5rbm93biBvaWQ6ICVzXG4iLCBwMSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIGNyZWF0ZSBlbnRyeSB3aXRoIG9pZF9rZXkgPSBwMSwgbmFtZV92YWx1ZSA9IHAyICovCisJCQlGTEVYX0FMTE9DX1NUUihlbnRyeSwgbmFtZSwgcDIpOworCQkJb2lkY3B5KCZlbnRyeS0+ZW50cnkub2lkLCAmb2lkKTsKKworCQkJLyogYWRkIC8gcmVwbGFjZSBlbnRyeSAqLworCQkJZW50cnkgPSBvaWRtYXBfcHV0KCZtYXAsIGVudHJ5KTsKKworCQkJLyogcHJpbnQgYW5kIGZyZWUgcmVwbGFjZWQgZW50cnksIGlmIGFueSAqLworCQkJcHV0cyhlbnRyeSA/IGVudHJ5LT5uYW1lIDogIk5VTEwiKTsKKwkJCWZyZWUoZW50cnkpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcCgiZ2V0IiwgY21kKSAmJiBwMSkgeworCisJCQlpZiAoZ2V0X29pZChwMSwgJm9pZCkpIHsKKwkJCQlwcmludGYoIlVua25vd24gb2lkOiAlc1xuIiwgcDEpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBsb29rdXAgZW50cnkgaW4gb2lkbWFwICovCisJCQllbnRyeSA9IG9pZG1hcF9nZXQoJm1hcCwgJm9pZCk7CisKKwkJCS8qIHByaW50IHJlc3VsdCAqLworCQkJcHV0cyhlbnRyeSA/IGVudHJ5LT5uYW1lIDogIk5VTEwiKTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoInJlbW92ZSIsIGNtZCkgJiYgcDEpIHsKKworCQkJaWYgKGdldF9vaWQocDEsICZvaWQpKSB7CisJCQkJcHJpbnRmKCJVbmtub3duIG9pZDogJXNcbiIsIHAxKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogcmVtb3ZlIGVudHJ5IGZyb20gb2lkbWFwICovCisJCQllbnRyeSA9IG9pZG1hcF9yZW1vdmUoJm1hcCwgJm9pZCk7CisKKwkJCS8qIHByaW50IHJlc3VsdCBhbmQgZnJlZSBlbnRyeSovCisJCQlwdXRzKGVudHJ5ID8gZW50cnktPm5hbWUgOiAiTlVMTCIpOworCQkJZnJlZShlbnRyeSk7CisKKwkJfSBlbHNlIGlmICghc3RyY21wKCJpdGVyYXRlIiwgY21kKSkgeworCisJCQlzdHJ1Y3Qgb2lkbWFwX2l0ZXIgaXRlcjsKKwkJCW9pZG1hcF9pdGVyX2luaXQoJm1hcCwgJml0ZXIpOworCQkJd2hpbGUgKChlbnRyeSA9IG9pZG1hcF9pdGVyX25leHQoJml0ZXIpKSkKKwkJCQlwcmludGYoIiVzICVzXG4iLCBvaWRfdG9faGV4KCZlbnRyeS0+ZW50cnkub2lkKSwgZW50cnktPm5hbWUpOworCisJCX0gZWxzZSB7CisKKwkJCXByaW50ZigiVW5rbm93biBjb21tYW5kICVzXG4iLCBjbWQpOworCisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJb2lkbWFwX2ZyZWUoJm1hcCwgMSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXRvb2wuYyBiL3QvaGVscGVyL3Rlc3QtdG9vbC5jCmluZGV4IDA4N2E4YzAuLmNlN2U4OTAgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtdG9vbC5jCisrKyBiL3QvaGVscGVyL3Rlc3QtdG9vbC5jCkBAIC0xOSw2ICsxOSw3IEBACiAJeyAiY3R5cGUiLCBjbWRfX2N0eXBlIH0sCiAJeyAiZGF0ZSIsIGNtZF9fZGF0ZSB9LAogCXsgImRlbHRhIiwgY21kX19kZWx0YSB9LAorCXsgImRpci1pdGVyYXRvciIsIGNtZF9fZGlyX2l0ZXJhdG9yIH0sCiAJeyAiZHJvcC1jYWNoZXMiLCBjbWRfX2Ryb3BfY2FjaGVzIH0sCiAJeyAiZHVtcC1jYWNoZS10cmVlIiwgY21kX19kdW1wX2NhY2hlX3RyZWUgfSwKIAl7ICJkdW1wLWZzbW9uaXRvciIsIGNtZF9fZHVtcF9mc21vbml0b3IgfSwKQEAgLTM1LDYgKzM2LDcgQEAKIAl7ICJtYXRjaC10cmVlcyIsIGNtZF9fbWF0Y2hfdHJlZXMgfSwKIAl7ICJtZXJnZXNvcnQiLCBjbWRfX21lcmdlc29ydCB9LAogCXsgIm1rdGVtcCIsIGNtZF9fbWt0ZW1wIH0sCisJeyAib2lkbWFwIiwgY21kX19vaWRtYXAgfSwKIAl7ICJvbmxpbmUtY3B1cyIsIGNtZF9fb25saW5lX2NwdXMgfSwKIAl7ICJwYXJzZS1vcHRpb25zIiwgY21kX19wYXJzZV9vcHRpb25zIH0sCiAJeyAicGF0aC11dGlscyIsIGNtZF9fcGF0aF91dGlscyB9LApkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC10b29sLmggYi90L2hlbHBlci90ZXN0LXRvb2wuaAppbmRleCA3ZTcwM2YzLi5mODA1YmIzIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LXRvb2wuaAorKysgYi90L2hlbHBlci90ZXN0LXRvb2wuaApAQCAtOSw2ICs5LDcgQEAKIGludCBjbWRfX2N0eXBlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiBpbnQgY21kX19kYXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiBpbnQgY21kX19kZWx0YShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fZGlyX2l0ZXJhdG9yKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiBpbnQgY21kX19kcm9wX2NhY2hlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwogaW50IGNtZF9fZHVtcF9jYWNoZV90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiBpbnQgY21kX19kdW1wX2ZzbW9uaXRvcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwpAQCAtMjUsNiArMjYsNyBAQAogaW50IGNtZF9fbWF0Y2hfdHJlZXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKIGludCBjbWRfX21lcmdlc29ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwogaW50IGNtZF9fbWt0ZW1wKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19vaWRtYXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKIGludCBjbWRfX29ubGluZV9jcHVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiBpbnQgY21kX19wYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiBpbnQgY21kX19wYXRoX3V0aWxzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CmRpZmYgLS1naXQgYS90L2xpYi1naXQtZGFlbW9uLnNoIGIvdC9saWItZ2l0LWRhZW1vbi5zaAppbmRleCA3YjM0MDcxLi5mYjhmODg3IDEwMDY0NAotLS0gYS90L2xpYi1naXQtZGFlbW9uLnNoCisrKyBiL3QvbGliLWdpdC1kYWVtb24uc2gKQEAgLTE1LDggKzE1LDcgQEAKICMKICMJdGVzdF9kb25lCiAKLXRlc3RfdHJpc3RhdGUgR0lUX1RFU1RfR0lUX0RBRU1PTgotaWYgdGVzdCAiJEdJVF9URVNUX0dJVF9EQUVNT04iID0gZmFsc2UKK2lmICEgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD10cnVlIC0tZXhpdC1jb2RlIEdJVF9URVNUX0dJVF9EQUVNT04KIHRoZW4KIAlza2lwX2FsbD0iZ2l0LWRhZW1vbiB0ZXN0aW5nIGRpc2FibGVkICh1bnNldCBHSVRfVEVTVF9HSVRfREFFTU9OIHRvIGVuYWJsZSkiCiAJdGVzdF9kb25lCkBAIC0yNCw3ICsyMyw3IEBACiAKIGlmIHRlc3RfaGF2ZV9wcmVyZXEgIVBJUEUKIHRoZW4KLQl0ZXN0X3NraXBfb3JfZGllICRHSVRfVEVTVF9HSVRfREFFTU9OICJmaWxlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEZJRk9zIgorCXRlc3Rfc2tpcF9vcl9kaWUgR0lUX1RFU1RfR0lUX0RBRU1PTiAiZmlsZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBGSUZPcyIKIGZpCiAKIHRlc3Rfc2V0X3BvcnQgTElCX0dJVF9EQUVNT05fUE9SVApAQCAtNzMsNyArNzIsNyBAQAogCQlraWxsICIkR0lUX0RBRU1PTl9QSUQiCiAJCXdhaXQgIiRHSVRfREFFTU9OX1BJRCIKIAkJdW5zZXQgR0lUX0RBRU1PTl9QSUQKLQkJdGVzdF9za2lwX29yX2RpZSAkR0lUX1RFU1RfR0lUX0RBRU1PTiBcCisJCXRlc3Rfc2tpcF9vcl9kaWUgR0lUX1RFU1RfR0lUX0RBRU1PTiBcCiAJCQkiZ2l0IGRhZW1vbiBmYWlsZWQgdG8gc3RhcnQiCiAJZmkKIH0KZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1zdm4uc2ggYi90L2xpYi1naXQtc3ZuLnNoCmluZGV4IGMxMjcxZDYuLjVkNGFlNjIgMTAwNjQ0Ci0tLSBhL3QvbGliLWdpdC1zdm4uc2gKKysrIGIvdC9saWItZ2l0LXN2bi5zaApAQCAtNjksMTQgKzY5LDEyIEBACiBtYXliZV9zdGFydF9odHRwZCAoKSB7CiAJbG9jPSR7MS1zdm59CiAKLQl0ZXN0X3RyaXN0YXRlIEdJVF9TVk5fVEVTVF9IVFRQRAotCWNhc2UgJEdJVF9TVk5fVEVTVF9IVFRQRCBpbgotCXRydWUpCisJaWYgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD1mYWxzZSAtLWV4aXQtY29kZSBHSVRfVEVTVF9IVFRQRAorCXRoZW4KIAkJLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKIAkJTElCX0hUVFBEX1NWTj0iJGxvYyIKIAkJc3RhcnRfaHR0cGQKLQkJOzsKLQllc2FjCisJZmkKIH0KIAogY29udmVydF90b19yZXZfZGIgKCkgewpAQCAtMTA2LDggKzEwNCw3IEBACiB9CiAKIHJlcXVpcmVfc3Zuc2VydmUgKCkgewotCXRlc3RfdHJpc3RhdGUgR0lUX1RFU1RfU1ZOU0VSVkUKLQlpZiAhIHRlc3QgIiRHSVRfVEVTVF9TVk5TRVJWRSIgPSB0cnVlCisJaWYgISBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PWZhbHNlIC0tZXhpdC1jb2RlIEdJVF9URVNUX1NWTlNFUlZFCiAJdGhlbgogCQlza2lwX2FsbD0nc2tpcHBpbmcgc3Zuc2VydmUgdGVzdC4gKHNldCAkR0lUX1RFU1RfU1ZOU0VSVkUgdG8gZW5hYmxlKScKIAkJdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC5zaCBiL3QvbGliLWh0dHBkLnNoCmluZGV4IGIzY2M2MmIuLjBkOTg1NzUgMTAwNjQ0Ci0tLSBhL3QvbGliLWh0dHBkLnNoCisrKyBiL3QvbGliLWh0dHBkLnNoCkBAIC00MSwxNSArNDEsMTQgQEAKIAl0ZXN0X2RvbmUKIGZpCiAKLXRlc3RfdHJpc3RhdGUgR0lUX1RFU1RfSFRUUEQKLWlmIHRlc3QgIiRHSVRfVEVTVF9IVFRQRCIgPSBmYWxzZQoraWYgISBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PXRydWUgLS1leGl0LWNvZGUgR0lUX1RFU1RfSFRUUEQKIHRoZW4KIAlza2lwX2FsbD0iTmV0d29yayB0ZXN0aW5nIGRpc2FibGVkICh1bnNldCBHSVRfVEVTVF9IVFRQRCB0byBlbmFibGUpIgogCXRlc3RfZG9uZQogZmkKIAogaWYgISB0ZXN0X2hhdmVfcHJlcmVxIE5PVF9ST09UOyB0aGVuCi0JdGVzdF9za2lwX29yX2RpZSAkR0lUX1RFU1RfSFRUUEQgXAorCXRlc3Rfc2tpcF9vcl9kaWUgR0lUX1RFU1RfSFRUUEQgXAogCQkiQ2Fubm90IHJ1biBodHRwZCB0ZXN0cyBhcyByb290IgogZmkKIApAQCAtOTUsNyArOTQsNyBAQAogCiBpZiAhIHRlc3QgLXggIiRMSUJfSFRUUERfUEFUSCIKIHRoZW4KLQl0ZXN0X3NraXBfb3JfZGllICRHSVRfVEVTVF9IVFRQRCAibm8gd2ViIHNlcnZlciBmb3VuZCBhdCAnJExJQl9IVFRQRF9QQVRIJyIKKwl0ZXN0X3NraXBfb3JfZGllIEdJVF9URVNUX0hUVFBEICJubyB3ZWIgc2VydmVyIGZvdW5kIGF0ICckTElCX0hUVFBEX1BBVEgnIgogZmkKIAogSFRUUERfVkVSU0lPTj0kKCRMSUJfSFRUUERfUEFUSCAtdiB8IFwKQEAgLTEwNywxOSArMTA2LDE5IEBACiAJdGhlbgogCQlpZiAhIHRlc3QgJEhUVFBEX1ZFUlNJT04gLWdlIDIKIAkJdGhlbgotCQkJdGVzdF9za2lwX29yX2RpZSAkR0lUX1RFU1RfSFRUUEQgXAorCQkJdGVzdF9za2lwX29yX2RpZSBHSVRfVEVTVF9IVFRQRCBcCiAJCQkJImF0IGxlYXN0IEFwYWNoZSB2ZXJzaW9uIDIgaXMgcmVxdWlyZWQiCiAJCWZpCiAJCWlmICEgdGVzdCAtZCAiJERFRkFVTFRfSFRUUERfTU9EVUxFX1BBVEgiCiAJCXRoZW4KLQkJCXRlc3Rfc2tpcF9vcl9kaWUgJEdJVF9URVNUX0hUVFBEIFwKKwkJCXRlc3Rfc2tpcF9vcl9kaWUgR0lUX1RFU1RfSFRUUEQgXAogCQkJCSJBcGFjaGUgbW9kdWxlIGRpcmVjdG9yeSBub3QgZm91bmQiCiAJCWZpCiAKIAkJTElCX0hUVFBEX01PRFVMRV9QQVRIPSIkREVGQVVMVF9IVFRQRF9NT0RVTEVfUEFUSCIKIAlmaQogZWxzZQotCXRlc3Rfc2tpcF9vcl9kaWUgJEdJVF9URVNUX0hUVFBEIFwKKwl0ZXN0X3NraXBfb3JfZGllIEdJVF9URVNUX0hUVFBEIFwKIAkJIkNvdWxkIG5vdCBpZGVudGlmeSB3ZWIgc2VydmVyIGF0ICckTElCX0hUVFBEX1BBVEgnIgogZmkKIApAQCAtMTg0LDcgKzE4Myw3IEBACiAJaWYgdGVzdCAkPyAtbmUgMAogCXRoZW4KIAkJY2F0ICIkSFRUUERfUk9PVF9QQVRIIi9lcnJvci5sb2cgPiY0IDI+L2Rldi9udWxsCi0JCXRlc3Rfc2tpcF9vcl9kaWUgJEdJVF9URVNUX0hUVFBEICJ3ZWIgc2VydmVyIHNldHVwIGZhaWxlZCIKKwkJdGVzdF9za2lwX29yX2RpZSBHSVRfVEVTVF9IVFRQRCAid2ViIHNlcnZlciBzZXR1cCBmYWlsZWQiCiAJZmkKIH0KIApkaWZmIC0tZ2l0IGEvdC9saWItcGF0Y2gtbW9kZS5zaCBiL3QvbGliLXBhdGNoLW1vZGUuc2gKaW5kZXggMDZjM2M5MS4uY2ZkNzZiZiAxMDA2NDQKLS0tIGEvdC9saWItcGF0Y2gtbW9kZS5zaAorKysgYi90L2xpYi1wYXRjaC1tb2RlLnNoCkBAIC0yLDI4ICsyLDQwIEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCisjIHNldF9zdGF0ZSA8cGF0aD4gPHdvcmt0cmVlLWNvbnRlbnQ+IDxpbmRleC1jb250ZW50PgorIworIyBQcmVwYXJlIHRoZSBjb250ZW50IGZvciBwYXRoIGluIHdvcmt0cmVlIGFuZCB0aGUgaW5kZXggYXMgc3BlY2lmaWVkLgogc2V0X3N0YXRlICgpIHsKIAllY2hvICIkMyIgPiAiJDEiICYmCiAJZ2l0IGFkZCAiJDEiICYmCiAJZWNobyAiJDIiID4gIiQxIgogfQogCisjIHNhdmVfc3RhdGUgPHBhdGg+CisjCisjIFNhdmUgaW5kZXgvd29ya3RyZWUgY29udGVudCBvZiA8cGF0aD4gaW4gdGhlIGZpbGVzIF93b3JrdHJlZV88cGF0aD4KKyMgYW5kIF9pbmRleF88cGF0aD4KIHNhdmVfc3RhdGUgKCkgewogCW5vc2xhc2g9IiQoZWNobyAiJDEiIHwgdHIgLyBfKSIgJiYKIAljYXQgIiQxIiA+IF93b3JrdHJlZV8iJG5vc2xhc2giICYmCiAJZ2l0IHNob3cgOiIkMSIgPiBfaW5kZXhfIiRub3NsYXNoIgogfQogCisjIHNldF9hbmRfc2F2ZV9zdGF0ZSA8cGF0aD4gPHdvcmt0cmVlLWNvbnRlbnQ+IDxpbmRleC1jb250ZW50Pgogc2V0X2FuZF9zYXZlX3N0YXRlICgpIHsKIAlzZXRfc3RhdGUgIiRAIiAmJgogCXNhdmVfc3RhdGUgIiQxIgogfQogCisjIHZlcmlmeV9zdGF0ZSA8cGF0aD4gPGV4cGVjdGVkLXdvcmt0cmVlLWNvbnRlbnQ+IDxleHBlY3RlZC1pbmRleC1jb250ZW50PgogdmVyaWZ5X3N0YXRlICgpIHsKIAl0ZXN0ICIkKGNhdCAiJDEiKSIgPSAiJDIiICYmCiAJdGVzdCAiJChnaXQgc2hvdyA6IiQxIikiID0gIiQzIgogfQogCisjIHZlcmlmeV9zYXZlZF9zdGF0ZSA8cGF0aD4KKyMKKyMgQ2FsbCB2ZXJpZnlfc3RhdGUgd2l0aCBleHBlY3RlZCBjb250ZW50cyBmcm9tIHRoZSBsYXN0IHNhdmVfc3RhdGUKIHZlcmlmeV9zYXZlZF9zdGF0ZSAoKSB7CiAJbm9zbGFzaD0iJChlY2hvICIkMSIgfCB0ciAvIF8pIiAmJgogCXZlcmlmeV9zdGF0ZSAiJDEiICIkKGNhdCBfd29ya3RyZWVfIiRub3NsYXNoIikiICIkKGNhdCBfaW5kZXhfIiRub3NsYXNoIikiCmRpZmYgLS1naXQgYS90L3BlcmYvcDU2MDAtY2xvbmUtcmVmZXJlbmNlLnNoIGIvdC9wZXJmL3A1NjAwLWNsb25lLXJlZmVyZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OGZlZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A1NjAwLWNsb25lLXJlZmVyZW5jZS5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3BlZWQgb2YgY2xvbmUgLS1yZWZlcmVuY2UnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgc2hhcmVhYmxlIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgLS1iYXJlIC4gc2hhcmVkLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZHZhbmNlIGJhc2UgcmVwb3NpdG9yeScgJworCSMgRG8gbm90IHVzZSB0ZXN0X2NvbW1pdCBoZXJlOyBpdHMgdGVzdF90aWNrIHdpbGwKKwkjIHVzZSBzb21lIGFuY2llbnQgaGFyZC1jb2RlZCBkYXRlLiBUaGUgcmVzdWx0aW5nIGNsb2NrCisJIyBza2V3IHdpbGwgY2F1c2UgcGFjay1vYmplY3RzIHRvIHRyYXZlcnNlIGluIGEgdmVyeQorCSMgc3ViLW9wdGltYWwgb3JkZXIsIHNrZXdpbmcgdGhlIHJlc3VsdHMuCisJZWNobyBjb250ZW50ID5uZXctZmlsZS10aGF0LWRvZXMtbm90LWV4aXN0ICYmCisJZ2l0IGFkZCBuZXctZmlsZS10aGF0LWRvZXMtbm90LWV4aXN0ICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IGNvbW1pdCIKKycKKwordGVzdF9wZXJmICdjbG9uZSAtLXJlZmVyZW5jZScgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIC0tcmVmZXJlbmNlIHNoYXJlZC5naXQgLiBkc3QuZ2l0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwMC1iYXNpYy5zaCBiL3QvdDAwMDAtYmFzaWMuc2gKaW5kZXggYzAzMDU0Yy4uZTg5NDM4ZSAxMDA3NTUKLS0tIGEvdC90MDAwMC1iYXNpYy5zaAorKysgYi90L3QwMDAwLWJhc2ljLnNoCkBAIC03MjYsNyArNzI2LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgRE9OVEhBVkVJVCAndW5tZXQgcHJlcmVxdWlzaXRlIGNhdXNlcyB0ZXN0IHRvIGJlIHNraXBwZWQnICcKIAlkb250aGF2ZWl0PW5vCiAnCi1pZiB0ZXN0ICRoYXZlaXQkZG9udGhhdmVpdCAhPSB5ZXN5ZXMKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUwiIC1hICRoYXZlaXQkZG9udGhhdmVpdCAhPSB5ZXN5ZXMKIHRoZW4KIAlzYXkgImJ1ZyBpbiB0ZXN0IGZyYW1ld29yazogcHJlcmVxdWlzaXRlIHRhZ3MgZG8gbm90IHdvcmsgcmVsaWFibHkiCiAJZXhpdCAxCkBAIC03NDcsNyArNzQ3LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgRE9OVEhBVkVJVCxIQVZFSVQgJ3VubWV0IHByZXJlcXVpc2l0ZXMgY2F1c2VzIHRlc3QgdG8gYmUgc2tpcHBlZCcgJwogCWRvbnRoYXZlaXRlaXRoZXI9bm8KICcKLWlmIHRlc3QgJGhhdmVpdCRkb250aGF2ZWl0JGRvbnRoYXZlaXRlaXRoZXIgIT0geWVzeWVzeWVzCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfRkFJTF9QUkVSRVFTX0lOVEVSTkFMIiAtYSAkaGF2ZWl0JGRvbnRoYXZlaXQkZG9udGhhdmVpdGVpdGhlciAhPSB5ZXN5ZXN5ZXMKIHRoZW4KIAlzYXkgImJ1ZyBpbiB0ZXN0IGZyYW1ld29yazogbXVsdGlwbGUgcHJlcmVxdWlzaXRlIHRhZ3MgZG8gbm90IHdvcmsgcmVsaWFibHkiCiAJZXhpdCAxCkBAIC03NjMsNyArNzYzLDcgQEAKIAlkb250aGF2ZXRydWU9bm8KICcKIAotaWYgdGVzdCAiJGhhdmV0cnVlJGRvbnRoYXZldHJ1ZSIgIT0geWVzeWVzCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfRkFJTF9QUkVSRVFTX0lOVEVSTkFMIiAtYSAiJGhhdmV0cnVlJGRvbnRoYXZldHJ1ZSIgIT0geWVzeWVzCiB0aGVuCiAJc2F5ICdidWcgaW4gdGVzdCBmcmFtZXdvcms6IGxhenkgcHJlcmVxdWlzaXRlcyBkbyBub3Qgd29yaycKIAlleGl0IDEKQEAgLTc3OSw3ICs3NzksNyBAQAogCWhhdmVmYWxzZT1ubwogJwogCi1pZiB0ZXN0ICIkbm90aGF2ZWZhbHNlJGhhdmVmYWxzZSIgIT0geWVzeWVzCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfRkFJTF9QUkVSRVFTX0lOVEVSTkFMIiAtYSAiJG5vdGhhdmVmYWxzZSRoYXZlZmFsc2UiICE9IHllc3llcwogdGhlbgogCXNheSAnYnVnIGluIHRlc3QgZnJhbWV3b3JrOiBuZWdhdGl2ZSBsYXp5IHByZXJlcXVpc2l0ZXMgZG8gbm90IHdvcmsnCiAJZXhpdCAxCkBAIC03OTAsNyArNzkwLDcgQEAKIAl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW49eWVzCiAnCiAKLWlmIHRlc3QgJGNsZWFuICE9IHllcworaWYgdGVzdCAteiAiJEdJVF9URVNUX0ZBSUxfUFJFUkVRU19JTlRFUk5BTCIgLWEgJGNsZWFuICE9IHllcwogdGhlbgogCXNheSAiYnVnIGluIHRlc3QgZnJhbWV3b3JrOiBiYXNpYyBjbGVhbnVwIGNvbW1hbmQgZG9lcyBub3Qgd29yayByZWxpYWJseSIKIAlleGl0IDEKZGlmZiAtLWdpdCBhL3QvdDAwMDEtaW5pdC5zaCBiL3QvdDAwMDEtaW5pdC5zaAppbmRleCAwMjc2ZDE0Li4yNmY4MjA2IDEwMDc1NQotLS0gYS90L3QwMDAxLWluaXQuc2gKKysrIGIvdC90MDAwMS1pbml0LnNoCkBAIC0zMTEsOCArMzExLDggQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCBzZXBhcmF0ZSBnaXRkaXInICcKIAlybSAtcmYgbmV3ZGlyICYmCiAJZ2l0IGluaXQgLS1zZXBhcmF0ZS1naXQtZGlyIHJlYWxnaXRkaXIgbmV3ZGlyICYmCi0JZWNobyAiZ2l0ZGlyOiAkKHB3ZCkvcmVhbGdpdGRpciIgPmV4cGVjdGVkICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQgbmV3ZGlyLy5naXQgJiYKKwluZXdkaXJfZ2l0PSIkKGNhdCBuZXdkaXIvLmdpdCkiICYmCisJdGVzdF9jbXBfZnNwYXRoICIkKHB3ZCkvcmVhbGdpdGRpciIgIiR7bmV3ZGlyX2dpdCNnaXRkaXI6IH0iICYmCiAJdGVzdF9wYXRoX2lzX2RpciByZWFsZ2l0ZGlyL3JlZnMKICcKIApAQCAtMzYxLDEyICszNjEsOSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1pbml0IHRvIHVwZGF0ZSBnaXQgbGluaycgJwotCSgKLQljZCBuZXdkaXIgJiYKLQlnaXQgaW5pdCAtLXNlcGFyYXRlLWdpdC1kaXIgLi4vc3VycmVhbGdpdGRpcgotCSkgJiYKLQllY2hvICJnaXRkaXI6ICQocHdkKS9zdXJyZWFsZ2l0ZGlyIiA+ZXhwZWN0ZWQgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZCBuZXdkaXIvLmdpdCAmJgorCWdpdCAtQyBuZXdkaXIgaW5pdCAtLXNlcGFyYXRlLWdpdC1kaXIgLi4vc3VycmVhbGdpdGRpciAmJgorCW5ld2Rpcl9naXQ9IiQoY2F0IG5ld2Rpci8uZ2l0KSIgJiYKKwl0ZXN0X2NtcF9mc3BhdGggIiQocHdkKS9zdXJyZWFsZ2l0ZGlyIiAiJHtuZXdkaXJfZ2l0I2dpdGRpcjogfSIgJiYKIAl0ZXN0X3BhdGhfaXNfZGlyIHN1cnJlYWxnaXRkaXIvcmVmcyAmJgogCXRlc3RfcGF0aF9pc19taXNzaW5nIHJlYWxnaXRkaXIvcmVmcwogJwpAQCAtMzc0LDEyICszNzEsOSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtaW5pdCB0byBtb3ZlIGdpdGRpcicgJwogCXJtIC1yZiBuZXdkaXIgcmVhbGdpdGRpciBzdXJyZWFsZ2l0ZGlyICYmCiAJZ2l0IGluaXQgbmV3ZGlyICYmCi0JKAotCWNkIG5ld2RpciAmJgotCWdpdCBpbml0IC0tc2VwYXJhdGUtZ2l0LWRpciAuLi9yZWFsZ2l0ZGlyCi0JKSAmJgotCWVjaG8gImdpdGRpcjogJChwd2QpL3JlYWxnaXRkaXIiID5leHBlY3RlZCAmJgotCXRlc3RfY21wIGV4cGVjdGVkIG5ld2Rpci8uZ2l0ICYmCisJZ2l0IC1DIG5ld2RpciBpbml0IC0tc2VwYXJhdGUtZ2l0LWRpciAuLi9yZWFsZ2l0ZGlyICYmCisJbmV3ZGlyX2dpdD0iJChjYXQgbmV3ZGlyLy5naXQpIiAmJgorCXRlc3RfY21wX2ZzcGF0aCAiJChwd2QpL3JlYWxnaXRkaXIiICIke25ld2Rpcl9naXQjZ2l0ZGlyOiB9IiAmJgogCXRlc3RfcGF0aF9pc19kaXIgcmVhbGdpdGRpci9yZWZzCiAnCiAKQEAgLTQ3Myw4ICs0NjcsOCBAQAogCQlHSVRfUkVESVJFQ1RfU1RET1VUPW91dHB1dC50eHQgXAogCQlHSVRfUkVESVJFQ1RfU1RERVJSPSIyPiYxIiBcCiAJCWdpdCByZXYtcGFyc2UgLS1naXQtZGlyIC0tdmVyaWZ5IHJlZnMvaW52YWxpZCAmJgotCXByaW50ZiAiLmdpdFxuZmF0YWw6IE5lZWRlZCBhIHNpbmdsZSByZXZpc2lvblxuIiA+ZXhwZWN0ICYmCi0JdGVzdF9jbXAgZXhwZWN0IG91dHB1dC50eHQKKwlncmVwICJeXFwuZ2l0XCQiIG91dHB1dC50eHQgJiYKKwlncmVwICJOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24iIG91dHB1dC50eHQKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA3LWdpdC12YXIuc2ggYi90L3QwMDA3LWdpdC12YXIuc2gKaW5kZXggNTg2OGE4Ny4uMWY2MDBlMiAxMDA3NTUKLS0tIGEvdC90MDAwNy1naXQtdmFyLnNoCisrKyBiL3QvdDAwMDctZ2l0LXZhci5zaApAQCAtMTcsNyArMTcsNyBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAhQVVUT0lERU5UICdyZXF1ZXN0ZWQgaWRlbnRpdGVzIGFyZSBzdHJpY3QnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUZBSUxfUFJFUkVRUywhQVVUT0lERU5UICdyZXF1ZXN0ZWQgaWRlbnRpdGVzIGFyZSBzdHJpY3QnICcKIAkoCiAJCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FICYmCiAJCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgpkaWZmIC0tZ2l0IGEvdC90MDAxMS1oYXNobWFwLnNoIGIvdC90MDAxMS1oYXNobWFwLnNoCmluZGV4IDNmMWY1MDUuLjUzNDNmZmQgMTAwNzU1Ci0tLSBhL3QvdDAwMTEtaGFzaG1hcC5zaAorKysgYi90L3QwMDExLWhhc2htYXAuc2gKQEAgLTksMTUgKzksNiBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKIH0KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFzaCBmdW5jdGlvbnMnICcKLQotdGVzdF9oYXNobWFwICJoYXNoIGtleTEiICIyMjE1OTgyNzQzIDIyMTU5ODI3NDMgMTE2MzcyMTUxIDExNjM3MjE1MSIgJiYKLXRlc3RfaGFzaG1hcCAiaGFzaCBrZXkyIiAiMjIxNTk4Mjc0MCAyMjE1OTgyNzQwIDExNjM3MjE0OCAxMTYzNzIxNDgiICYmCi10ZXN0X2hhc2htYXAgImhhc2ggZm9vQmFyRnJvdHoiICIxMzgzOTEyODA3IDEzODM5MTI4MDcgMzE4OTc2NjcyNyAzMTg5NzY2NzI3IiAmJgotdGVzdF9oYXNobWFwICJoYXNoIGZvb2JhcmZyb3R6IiAiMjg2MjMwNTk1OSAyODYyMzA1OTU5IDMxODk3NjY3MjcgMzE4OTc2NjcyNyIKLQotJwotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXQnICcKIAogdGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKQEAgLTE3OSwzMSArMTcwLDQ1IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2l0ZXJhdGUnICcKKwl0ZXN0LXRvb2wgaGFzaG1hcCA+YWN0dWFsLnJhdyA8PC1cRU9GICYmCisJcHV0IGtleTEgdmFsdWUxCisJcHV0IGtleTIgdmFsdWUyCisJcHV0IGZvb0JhckZyb3R6IHZhbHVlMworCWl0ZXJhdGUKKwlFT0YKIAotdGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKLXB1dCBrZXkyIHZhbHVlMgotcHV0IGZvb0JhckZyb3R6IHZhbHVlMwotaXRlcmF0ZSIgIk5VTEwKLU5VTEwKLU5VTEwKLWtleTIgdmFsdWUyCi1rZXkxIHZhbHVlMQotZm9vQmFyRnJvdHogdmFsdWUzIgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlOVUxMCisJTlVMTAorCU5VTEwKKwlmb29CYXJGcm90eiB2YWx1ZTMKKwlrZXkxIHZhbHVlMQorCWtleTIgdmFsdWUyCisJRU9GCiAKKwlzb3J0IDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2l0ZXJhdGUgKGNhc2UgaW5zZW5zaXRpdmUpJyAnCisJdGVzdC10b29sIGhhc2htYXAgaWdub3JlY2FzZSA+YWN0dWFsLnJhdyA8PC1cRU9GICYmCisJcHV0IGtleTEgdmFsdWUxCisJcHV0IGtleTIgdmFsdWUyCisJcHV0IGZvb0JhckZyb3R6IHZhbHVlMworCWl0ZXJhdGUKKwlFT0YKIAotdGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKLXB1dCBrZXkyIHZhbHVlMgotcHV0IGZvb0JhckZyb3R6IHZhbHVlMwotaXRlcmF0ZSIgIk5VTEwKLU5VTEwKLU5VTEwKLWZvb0JhckZyb3R6IHZhbHVlMwota2V5MiB2YWx1ZTIKLWtleTEgdmFsdWUxIiBpZ25vcmVjYXNlCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU5VTEwKKwlOVUxMCisJTlVMTAorCWZvb0JhckZyb3R6IHZhbHVlMworCWtleTEgdmFsdWUxCisJa2V5MiB2YWx1ZTIKKwlFT0YKIAorCXNvcnQgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JvdyAvIHNocmluaycgJwpkaWZmIC0tZ2l0IGEvdC90MDAxNi1vaWRtYXAuc2ggYi90L3QwMDE2LW9pZG1hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWY4Mjc2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxNi1vaWRtYXAuc2gKQEAgLTAsMCArMSwxMTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IG9pZG1hcCcKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoaXMgcHVycG9zZWZ1bGx5IGlzIHZlcnkgc2ltaWxhciB0byB0MDAxMS1oYXNobWFwLnNoCisKK3Rlc3Rfb2lkbWFwICgpIHsKKwllY2hvICIkMSIgfCB0ZXN0LXRvb2wgb2lkbWFwICQzID5hY3R1YWwgJiYKKwllY2hvICIkMiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0JyAnCisKK3Rlc3Rfb2lkbWFwICJwdXQgb25lIDEKK3B1dCB0d28gMgorcHV0IGludmFsaWRPaWQgNAorcHV0IHRocmVlIDMiICJOVUxMCitOVUxMCitVbmtub3duIG9pZDogaW52YWxpZE9pZAorTlVMTCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlJyAnCisKK3Rlc3Rfb2lkbWFwICJwdXQgb25lIDEKK3B1dCB0d28gMgorcHV0IHRocmVlIDMKK3B1dCBpbnZhbGlkT2lkIDQKK3B1dCB0d28gZGV1eAorcHV0IG9uZSB1biIgIk5VTEwKK05VTEwKK05VTEwKK1Vua25vd24gb2lkOiBpbnZhbGlkT2lkCisyCisxIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCcgJworCit0ZXN0X29pZG1hcCAicHV0IG9uZSAxCitwdXQgdHdvIDIKK3B1dCB0aHJlZSAzCitnZXQgdHdvCitnZXQgZm91cgorZ2V0IGludmFsaWRPaWQKK2dldCBvbmUiICJOVUxMCitOVUxMCitOVUxMCisyCitOVUxMCitVbmtub3duIG9pZDogaW52YWxpZE9pZAorMSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUnICcKKwordGVzdF9vaWRtYXAgInB1dCBvbmUgMQorcHV0IHR3byAyCitwdXQgdGhyZWUgMworcmVtb3ZlIG9uZQorcmVtb3ZlIHR3bworcmVtb3ZlIGludmFsaWRPaWQKK3JlbW92ZSBmb3VyIiAiTlVMTAorTlVMTAorTlVMTAorMQorMgorVW5rbm93biBvaWQ6IGludmFsaWRPaWQKK05VTEwiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXRlcmF0ZScgJworCXRlc3QtdG9vbCBvaWRtYXAgPmFjdHVhbC5yYXcgPDwtXEVPRiAmJgorCXB1dCBvbmUgMQorCXB1dCB0d28gMgorCXB1dCB0aHJlZSAzCisJaXRlcmF0ZQorCUVPRgorCisJIyBzb3J0ICJleHBlY3QiIHRvbyBzbyB3ZSBkbyBub3QgcmVseSBvbiB0aGUgb3JkZXIgb2YgcGFydGljdWxhciBvaWRzCisJc29ydCA+ZXhwZWN0IDw8LUVPRiAmJgorCU5VTEwKKwlOVUxMCisJTlVMTAorCSQoZ2l0IHJldi1wYXJzZSBvbmUpIDEKKwkkKGdpdCByZXYtcGFyc2UgdHdvKSAyCisJJChnaXQgcmV2LXBhcnNlIHRocmVlKSAzCisJRU9GCisKKwlzb3J0IDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAxNy1lbnYtaGVscGVyLnNoIGIvdC90MDAxNy1lbnYtaGVscGVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxZWNmNmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDE3LWVudi1oZWxwZXIuc2gKQEAgLTAsMCArMSw5OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZW52LS1oZWxwZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vudi0taGVscGVyIHVzYWdlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyIC0tdHlwZT11bG9uZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLWRlZmF1bHR4eXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW52LS1oZWxwZXIgYmFkIGRlZmF1bHQgdmFsdWVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD0xeHl6IE1JU1NJTkcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPXVsb25nIC0tZGVmYXVsdD0xeHl6IE1JU1NJTkcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW52LS1oZWxwZXIgLS10eXBlPWJvb2wnICcKKwkjIFRlc3QgdmFyaW91cyAtLWRlZmF1bHQgYm9vbCB2YWx1ZXMKKwllY2hvIHRydWUgPmV4cGVjdGVkICYmCisJZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD0xIE1JU1NJTkcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9eWVzIE1JU1NJTkcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9dHJ1ZSBNSVNTSU5HID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwllY2hvIGZhbHNlID5leHBlY3RlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9MCBNSVNTSU5HID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PW5vIE1JU1NJTkcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9ZmFsc2UgTUlTU0lORyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwkjIE5vIG91dHB1dCB3aXRoIC0tZXhpdC1jb2RlCisJZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD10cnVlIC0tZXhpdC1jb2RlIE1JU1NJTkcgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9ZmFsc2UgLS1leGl0LWNvZGUgTUlTU0lORyA+YWN0dWFsLm91dCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyICYmCisKKwkjIEV4aXN0aW5nIHZhcmlhYmxlCisJRVhJU1RTPXRydWUgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD1mYWxzZSAtLWV4aXQtY29kZSBFWElTVFMgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZW52IEVYSVNUUz1mYWxzZSBcCisJCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9dHJ1ZSAtLWV4aXQtY29kZSBFWElTVFMgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbnYtLWhlbHBlciAtLXR5cGU9dWxvbmcnICcKKwllY2hvIDEyMzQ1Njc4OTAgPmV4cGVjdGVkICYmCisJZ2l0IGVudi0taGVscGVyIC0tdHlwZT11bG9uZyAtLWRlZmF1bHQ9MTIzNDU2Nzg5MCBNSVNTSU5HID5hY3R1YWwub3V0IDI+YWN0dWFsLmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCisJZWNobyAwID5leHBlY3RlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9dWxvbmcgLS1kZWZhdWx0PTAgTUlTU0lORyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgZW52LS1oZWxwZXIgLS10eXBlPXVsb25nIC0tZGVmYXVsdD0xMjM0NTY3ODkwIC0tZXhpdC1jb2RlIE1JU1NJTkcgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCisJRVhJU1RTPTEyMzQ1Njc4OTAgZ2l0IGVudi0taGVscGVyIC0tdHlwZT11bG9uZyAtLWRlZmF1bHQ9MCBFWElTVFMgLS1leGl0LWNvZGUgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCisJZWNobyAxMjM0NTY3ODkwID5leHBlY3RlZCAmJgorCUVYSVNUUz0xMjM0NTY3ODkwIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9dWxvbmcgLS1kZWZhdWx0PTAgRVhJU1RTID5hY3R1YWwub3V0IDI+YWN0dWFsLmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbnYtLWhlbHBlciByZWFkcyBjb25maWcgdGhhbmtzIHRvIHRyYWNlMicgJworCW1rZGlyIGhvbWUgJiYKKwlnaXQgY29uZmlnIC1mIGhvbWUvLmdpdGNvbmZpZyBpbmNsdWRlLnBhdGggY3ljbGUgJiYKKwlnaXQgY29uZmlnIC1mIGhvbWUvY3ljbGUgaW5jbHVkZS5wYXRoIC5naXRjb25maWcgJiYKKworCXRlc3RfbXVzdF9mYWlsIFwKKwkJZW52IEhPTUU9IiQocHdkKS9ob21lIiBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj1mYWxzZSBcCisJCWdpdCBjb25maWcgLWwgMj5lcnIgJiYKKwlncmVwICJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGgiIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgXAorCQllbnYgSE9NRT0iJChwd2QpL2hvbWUiIEdJVF9URVNUX0dFVFRFWFRfUE9JU09OPXRydWUgXAorCQlnaXQgLUMgY3ljbGUgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PTAgLS1leGl0LWNvZGUgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04gMj5lcnIgJiYKKwlncmVwICIjIEdFVFRFWFQgUE9JU09OICMiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjctYXV0by1jcmxmLnNoIGIvdC90MDAyNy1hdXRvLWNybGYuc2gKaW5kZXggMzU4N2U0NS4uOTU5YjZkYSAxMDA3NTUKLS0tIGEvdC90MDAyNy1hdXRvLWNybGYuc2gKKysrIGIvdC90MDAyNy1hdXRvLWNybGYuc2gKQEAgLTE1LDggKzE1LDEwIEBACiAJcGZ4PSQxCiAJZXhwPSQyLmV4cGVjdAogCWFjdD0kcGZ4LmFjdHVhbC4kMwotCXRyICdcMDE1XDAwMGFiY2RlZjAxMjM0NTY3ODknIFFOMDAwMDAwMDAwMDAwMDAwMDAgPCIkMiIgPiIkZXhwIiAmJgotCXRyICdcMDE1XDAwMGFiY2RlZjAxMjM0NTY3ODknIFFOMDAwMDAwMDAwMDAwMDAwMDAgPCIkMyIgPiIkYWN0IiAmJgorCXRyICdcMDE1XDAwMGFiY2RlZjAxMjM0NTY3ODknIFFOMDAwMDAwMDAwMDAwMDAwMDAgPCIkMiIgfAorCQlzZWQgLWUgInMvMDAwMCovJFpFUk9fT0lELyIgPiIkZXhwIiAmJgorCXRyICdcMDE1XDAwMGFiY2RlZjAxMjM0NTY3ODknIFFOMDAwMDAwMDAwMDAwMDAwMDAgPCIkMyIgfAorCQlzZWQgLWUgInMvMDAwMCovJFpFUk9fT0lELyIgPiIkYWN0IiAmJgogCXRlc3RfY21wICIkZXhwIiAiJGFjdCIgJiYKIAlybSAiJGV4cCIgIiRhY3QiCiB9CmRpZmYgLS1naXQgYS90L3QwMDYxLXJ1bi1jb21tYW5kLnNoIGIvdC90MDA2MS1ydW4tY29tbWFuZC5zaAppbmRleCBlYmM0OTU2Li4wMTVmYWM4IDEwMDc1NQotLS0gYS90L3QwMDYxLXJ1bi1jb21tYW5kLnNoCisrKyBiL3QvdDAwNjEtcnVuLWNvbW1hbmQuc2gKQEAgLTIxMCw0ICsyMTAsMTAgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2NhbiBzcGF3biB3aXRoIGFyZ3ZbMF0gY29udGFpbmluZyBzcGFjZXMnICcKKwljcCAiJEdJVF9CVUlMRF9ESVIvdC9oZWxwZXIvdGVzdC1mYWtlLXNzaCRYIiAuLyAmJgorCXRlc3RfbXVzdF9mYWlsICIkUFdEL3Rlc3QtZmFrZS1zc2gkWCIgMj5lcnIgJiYKKwlncmVwIFRSQVNIX0RJUkVDVE9SWSBlcnIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDY2LWRpci1pdGVyYXRvci5zaCBiL3QvdDAwNjYtZGlyLWl0ZXJhdG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkyOTEwZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDY2LWRpci1pdGVyYXRvci5zaApAQCAtMCwwICsxLDE0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIGRpci1pdGVyYXRvciBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciAtcCBkaXIgJiYKKwlta2RpciAtcCBkaXIvYS9iL2MvICYmCisJPmRpci9iICYmCisJPmRpci9jICYmCisJbWtkaXIgLXAgZGlyL2QvZS9kLyAmJgorCT5kaXIvYS9iL2MvZCAmJgorCT5kaXIvYS9lICYmCisJPmRpci9kL2UvZC9hICYmCisKKwlta2RpciAtcCBkaXIyL2EvYi9jLyAmJgorCT5kaXIyL2EvYi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyLWl0ZXJhdG9yIHNob3VsZCBpdGVyYXRlIHRocm91Z2ggYWxsIGZpbGVzJyAnCisJY2F0ID5leHBlY3RlZC1pdGVyYXRpb24tc29ydGVkLW91dHB1dCA8PC1FT0YgJiYKKwlbZF0gKGEpIFthXSAuL2Rpci9hCisJW2RdIChhL2IpIFtiXSAuL2Rpci9hL2IKKwlbZF0gKGEvYi9jKSBbY10gLi9kaXIvYS9iL2MKKwlbZF0gKGQpIFtkXSAuL2Rpci9kCisJW2RdIChkL2UpIFtlXSAuL2Rpci9kL2UKKwlbZF0gKGQvZS9kKSBbZF0gLi9kaXIvZC9lL2QKKwlbZl0gKGEvYi9jL2QpIFtkXSAuL2Rpci9hL2IvYy9kCisJW2ZdIChhL2UpIFtlXSAuL2Rpci9hL2UKKwlbZl0gKGIpIFtiXSAuL2Rpci9iCisJW2ZdIChjKSBbY10gLi9kaXIvYworCVtmXSAoZC9lL2QvYSkgW2FdIC4vZGlyL2QvZS9kL2EKKwlFT0YKKworCXRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLi9kaXIgPm91dCAmJgorCXNvcnQgb3V0ID4uL2FjdHVhbC1pdGVyYXRpb24tc29ydGVkLW91dHB1dCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQtaXRlcmF0aW9uLXNvcnRlZC1vdXRwdXQgYWN0dWFsLWl0ZXJhdGlvbi1zb3J0ZWQtb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpci1pdGVyYXRvciBzaG91bGQgbGlzdCBmaWxlcyBpbiB0aGUgY29ycmVjdCBvcmRlcicgJworCWNhdCA+ZXhwZWN0ZWQtcHJlLW9yZGVyLW91dHB1dCA8PC1FT0YgJiYKKwlbZF0gKGEpIFthXSAuL2RpcjIvYQorCVtkXSAoYS9iKSBbYl0gLi9kaXIyL2EvYgorCVtkXSAoYS9iL2MpIFtjXSAuL2RpcjIvYS9iL2MKKwlbZl0gKGEvYi9jL2QpIFtkXSAuL2RpcjIvYS9iL2MvZAorCUVPRgorCisJdGVzdC10b29sIGRpci1pdGVyYXRvciAuL2RpcjIgPmFjdHVhbC1wcmUtb3JkZXItb3V0cHV0ICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZC1wcmUtb3JkZXItb3V0cHV0IGFjdHVhbC1wcmUtb3JkZXItb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JlZ2luIHNob3VsZCBmYWlsIHVwb24gaW5leGlzdGVudCBwYXRocycgJworCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLi9pbmV4aXN0ZW50LXBhdGggXAorCQk+YWN0dWFsLWluZXhpc3RlbnQtcGF0aC1vdXRwdXQgJiYKKwllY2hvICJkaXJfaXRlcmF0b3JfYmVnaW4gZmFpbHVyZTogRU5PRU5UIiA+ZXhwZWN0ZWQtaW5leGlzdGVudC1wYXRoLW91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWluZXhpc3RlbnQtcGF0aC1vdXRwdXQgYWN0dWFsLWluZXhpc3RlbnQtcGF0aC1vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmVnaW4gc2hvdWxkIGZhaWwgdXBvbiBub24gZGlyZWN0b3J5IHBhdGhzJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIGRpci1pdGVyYXRvciAuL2Rpci9iID5hY3R1YWwtbm9uLWRpci1vdXRwdXQgJiYKKwllY2hvICJkaXJfaXRlcmF0b3JfYmVnaW4gZmFpbHVyZTogRU5PVERJUiIgPmV4cGVjdGVkLW5vbi1kaXItb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtbm9uLWRpci1vdXRwdXQgYWN0dWFsLW5vbi1kaXItb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnYWR2YW5jZSBzaG91bGQgbm90IGZhaWwgb24gZXJyb3JzIGJ5IGRlZmF1bHQnICcKKwljYXQgPmV4cGVjdGVkLW5vLXBlcm1pc3Npb25zLW91dHB1dCA8PC1FT0YgJiYKKwlbZF0gKGEpIFthXSAuL2RpcjMvYQorCUVPRgorCisJbWtkaXIgLXAgZGlyMy9hICYmCisJPmRpcjMvYS9iICYmCisJY2htb2QgMCBkaXIzL2EgJiYKKworCXRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLi9kaXIzID5hY3R1YWwtbm8tcGVybWlzc2lvbnMtb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtbm8tcGVybWlzc2lvbnMtb3V0cHV0IGFjdHVhbC1uby1wZXJtaXNzaW9ucy1vdXRwdXQgJiYKKwljaG1vZCA3NTUgZGlyMy9hICYmCisJcm0gLXJmIGRpcjMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdhZHZhbmNlIHNob3VsZCBmYWlsIG9uIGVycm9ycywgdy8gcGVkYW50aWMgZmxhZycgJworCWNhdCA+ZXhwZWN0ZWQtbm8tcGVybWlzc2lvbnMtcGVkYW50aWMtb3V0cHV0IDw8LUVPRiAmJgorCVtkXSAoYSkgW2FdIC4vZGlyMy9hCisJZGlyX2l0ZXJhdG9yX2FkdmFuY2UgZmFpbHVyZQorCUVPRgorCisJbWtkaXIgLXAgZGlyMy9hICYmCisJPmRpcjMvYS9iICYmCisJY2htb2QgMCBkaXIzL2EgJiYKKworCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLS1wZWRhbnRpYyAuL2RpcjMgXAorCQk+YWN0dWFsLW5vLXBlcm1pc3Npb25zLXBlZGFudGljLW91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLW5vLXBlcm1pc3Npb25zLXBlZGFudGljLW91dHB1dCBcCisJCWFjdHVhbC1uby1wZXJtaXNzaW9ucy1wZWRhbnRpYy1vdXRwdXQgJiYKKwljaG1vZCA3NTUgZGlyMy9hICYmCisJcm0gLXJmIGRpcjMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc2V0dXAgZGlycyB3aXRoIHN5bWxpbmtzJyAnCisJbWtkaXIgLXAgZGlyNC9hICYmCisJbWtkaXIgLXAgZGlyNC9iL2MgJiYKKwk+ZGlyNC9hL2QgJiYKKwlsbiAtcyBkIGRpcjQvYS9lICYmCisJbG4gLXMgLi4vYiBkaXI0L2EvZiAmJgorCisJbWtkaXIgLXAgZGlyNS9hL2IgJiYKKwlta2RpciAtcCBkaXI1L2EvYyAmJgorCWxuIC1zIC4uL2MgZGlyNS9hL2IvZCAmJgorCWxuIC1zIC4uLyBkaXI1L2EvYi9lICYmCisJbG4gLXMgLi4vLi4vIGRpcjUvYS9iL2YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGlyLWl0ZXJhdG9yIHNob3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGJ5IGRlZmF1bHQnICcKKwljYXQgPmV4cGVjdGVkLW5vLWZvbGxvdy1zb3J0ZWQtb3V0cHV0IDw8LUVPRiAmJgorCVtkXSAoYSkgW2FdIC4vZGlyNC9hCisJW2RdIChiKSBbYl0gLi9kaXI0L2IKKwlbZF0gKGIvYykgW2NdIC4vZGlyNC9iL2MKKwlbZl0gKGEvZCkgW2RdIC4vZGlyNC9hL2QKKwlbc10gKGEvZSkgW2VdIC4vZGlyNC9hL2UKKwlbc10gKGEvZikgW2ZdIC4vZGlyNC9hL2YKKwlFT0YKKworCXRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLi9kaXI0ID5vdXQgJiYKKwlzb3J0IG91dCA+YWN0dWFsLW5vLWZvbGxvdy1zb3J0ZWQtb3V0cHV0ICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZC1uby1mb2xsb3ctc29ydGVkLW91dHB1dCBhY3R1YWwtbm8tZm9sbG93LXNvcnRlZC1vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGlyLWl0ZXJhdG9yIHNob3VsZCBmb2xsb3cgc3ltbGlua3Mgdy8gZm9sbG93IGZsYWcnICcKKwljYXQgPmV4cGVjdGVkLWZvbGxvdy1zb3J0ZWQtb3V0cHV0IDw8LUVPRiAmJgorCVtkXSAoYSkgW2FdIC4vZGlyNC9hCisJW2RdIChhL2YpIFtmXSAuL2RpcjQvYS9mCisJW2RdIChhL2YvYykgW2NdIC4vZGlyNC9hL2YvYworCVtkXSAoYikgW2JdIC4vZGlyNC9iCisJW2RdIChiL2MpIFtjXSAuL2RpcjQvYi9jCisJW2ZdIChhL2QpIFtkXSAuL2RpcjQvYS9kCisJW2ZdIChhL2UpIFtlXSAuL2RpcjQvYS9lCisJRU9GCisKKwl0ZXN0LXRvb2wgZGlyLWl0ZXJhdG9yIC0tZm9sbG93LXN5bWxpbmtzIC4vZGlyNCA+b3V0ICYmCisJc29ydCBvdXQgPmFjdHVhbC1mb2xsb3ctc29ydGVkLW91dHB1dCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQtZm9sbG93LXNvcnRlZC1vdXRwdXQgYWN0dWFsLWZvbGxvdy1zb3J0ZWQtb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA5MC1jYWNoZS10cmVlLnNoIGIvdC90MDA5MC1jYWNoZS10cmVlLnNoCmluZGV4IDUwNDMzNGUuLmNlOWE0YTUgMTAwNzU1Ci0tLSBhL3QvdDAwOTAtY2FjaGUtdHJlZS5zaAorKysgYi90L3QwMDkwLWNhY2hlLXRyZWUuc2gKQEAgLTE2Miw4ICsxNjIsOCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NvbW1pdCAtcCB3aXRoIHNocmlua2luZyBjYWNoZS10cmVlJyAnCi0JbWtkaXIgLXAgZGVlcC9zdWJkaXIgJiYKLQllY2hvIGNvbnRlbnQgPmRlZXAvc3ViZGlyL2ZpbGUgJiYKKwlta2RpciAtcCBkZWVwL3ZlcnktbG9uZy1zdWJkaXIgJiYKKwllY2hvIGNvbnRlbnQgPmRlZXAvdmVyeS1sb25nLXN1YmRpci9maWxlICYmCiAJZ2l0IGFkZCBkZWVwICYmCiAJZ2l0IGNvbW1pdCAtbSBhZGQgJiYKIAlnaXQgcm0gLXIgZGVlcCAmJgpkaWZmIC0tZ2l0IGEvdC90MDIwNS1nZXR0ZXh0LXBvaXNvbi5zaCBiL3QvdDAyMDUtZ2V0dGV4dC1wb2lzb24uc2gKaW5kZXggYTA2MjY5Zi4uZjlmYTE2YSAxMDA3NTUKLS0tIGEvdC90MDIwNS1nZXR0ZXh0LXBvaXNvbi5zaAorKysgYi90L3QwMjA1LWdldHRleHQtcG9pc29uLnNoCkBAIC01LDcgKzUsNyBAQAogCiB0ZXN0X2Rlc2NyaXB0aW9uPSdHZXR0ZXh0IFNoZWxsIHBvaXNvbicKIAotR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049WWVzUGxlYXNlCitHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj10cnVlCiBleHBvcnQgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04KIC4gLi9saWItZ2V0dGV4dC5zaAogCkBAIC0zMSw0ICszMSw5IEBACiAgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnZXR0ZXh0OiBpbnZhbGlkIEdJVF9URVNUX0dFVFRFWFRfUE9JU09OIHZhbHVlIGRvZXNuJ3QgaW5maW5pdGVseSBsb29wIiAiCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX0dFVFRFWFRfUE9JU09OPXh5eiBnaXQgdmVyc2lvbiAyPmVycm9yICYmCisJZ3JlcCBcImZhdGFsOiBiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJ3h5eicgZm9yICdHSVRfVEVTVF9HRVRURVhUX1BPSVNPTic6IGludmFsaWQgdW5pdFwiIGVycm9yCisiCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAwNy1oYXNoLW9iamVjdC5zaCBiL3QvdDEwMDctaGFzaC1vYmplY3Quc2gKaW5kZXggNzA5OWQzMy4uNjRiMzQwZiAxMDA3NTUKLS0tIGEvdC90MTAwNy1oYXNoLW9iamVjdC5zaAorKysgYi90L3QxMDA3LWhhc2gtb2JqZWN0LnNoCkBAIC05LDIyICs5LDE5IEBACiB9CiAKIHRlc3RfYmxvYl9kb2VzX25vdF9leGlzdCgpIHsKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFNIQTEgJ2Jsb2IgZG9lcyBub3QgZXhpc3QgaW4gZGF0YWJhc2UnICIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iIGRvZXMgbm90IGV4aXN0IGluIGRhdGFiYXNlJyAiCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICQxCiAJIgogfQogCiB0ZXN0X2Jsb2JfZXhpc3RzKCkgewotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU0hBMSAnYmxvYiBleGlzdHMgaW4gZGF0YWJhc2UnICIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iIGV4aXN0cyBpbiBkYXRhYmFzZScgIgogCQlnaXQgY2F0LWZpbGUgYmxvYiAkMQogCSIKIH0KIAogaGVsbG9fY29udGVudD0iSGVsbG8gV29ybGQiCi1oZWxsb19zaGExPTVlMWMzMDlkYWU3ZjQ1ZTBmMzliMWJmM2FjM2NkOWRiMTJlN2Q2ODkKLQogZXhhbXBsZV9jb250ZW50PSJUaGlzIGlzIGFuIGV4YW1wbGUiCi1leGFtcGxlX3NoYTE9ZGRkM2Y4MzZkM2UzZmJiN2FlMjg5YWE5YWU4MzUzNmY3Njk1NjM5OQogCiBzZXR1cF9yZXBvKCkgewogCWVjaG9fd2l0aG91dF9uZXdsaW5lICIkaGVsbG9fY29udGVudCIgPiBoZWxsbwpAQCAtNDQsNyArNDEsMTYgQEAKIAlybSAtcmYgJHRlc3RfcmVwbwogfQogCi1zZXR1cF9yZXBvCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXNldHVwX3JlcG8gJiYKKwl0ZXN0X29pZF9jYWNoZSA8PC1FT0YKKwloZWxsbyBzaGExOjVlMWMzMDlkYWU3ZjQ1ZTBmMzliMWJmM2FjM2NkOWRiMTJlN2Q2ODkKKwloZWxsbyBzaGEyNTY6MWUzYjZjMDRkMmVlYjJiM2U0NWM4YTMzMDQ0NTQwNGMwYjdjYzdiMjU3ZTJiMDk3MTY3ZDI2ZjUyMzAwOTBjNAorCisJZXhhbXBsZSBzaGExOmRkZDNmODM2ZDNlM2ZiYjdhZTI4OWFhOWFlODM1MzZmNzY5NTYzOTkKKwlleGFtcGxlIHNoYTI1NjpiNDRmZTFmZTY1NTg5ODQ4MjUzNzM3ZGI4NTliZDQ5MDQ1MzUxMDcxOWQ3NDI0ZGFhYjAzZGFmMDc2N2I4NWFlCisJRU9GCisnCiAKICMgQXJndW1lbnQgY2hlY2tpbmcKIApAQCAtNzMsMjMgKzc5LDIzIEBACiAKIHB1c2hfcmVwbwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNIQTEgJ2hhc2ggYSBmaWxlJyAnCi0JdGVzdCAkaGVsbG9fc2hhMSA9ICQoZ2l0IGhhc2gtb2JqZWN0IGhlbGxvKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFzaCBhIGZpbGUnICcKKwl0ZXN0ICIkKHRlc3Rfb2lkIGhlbGxvKSIgPSAkKGdpdCBoYXNoLW9iamVjdCBoZWxsbykKICcKIAotdGVzdF9ibG9iX2RvZXNfbm90X2V4aXN0ICRoZWxsb19zaGExCit0ZXN0X2Jsb2JfZG9lc19ub3RfZXhpc3QgIiQodGVzdF9vaWQgaGVsbG8pIgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFNIQTEgJ2hhc2ggZnJvbSBzdGRpbicgJwotCXRlc3QgJGV4YW1wbGVfc2hhMSA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPCBleGFtcGxlKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFzaCBmcm9tIHN0ZGluJyAnCisJdGVzdCAiJCh0ZXN0X29pZCBleGFtcGxlKSIgPSAkKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDwgZXhhbXBsZSkKICcKIAotdGVzdF9ibG9iX2RvZXNfbm90X2V4aXN0ICRleGFtcGxlX3NoYTEKK3Rlc3RfYmxvYl9kb2VzX25vdF9leGlzdCAiJCh0ZXN0X29pZCBleGFtcGxlKSIKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTSEExICdoYXNoIGEgZmlsZSBhbmQgd3JpdGUgdG8gZGF0YWJhc2UnICcKLQl0ZXN0ICRoZWxsb19zaGExID0gJChnaXQgaGFzaC1vYmplY3QgLXcgaGVsbG8pCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoIGEgZmlsZSBhbmQgd3JpdGUgdG8gZGF0YWJhc2UnICcKKwl0ZXN0ICIkKHRlc3Rfb2lkIGhlbGxvKSIgPSAkKGdpdCBoYXNoLW9iamVjdCAtdyBoZWxsbykKICcKIAotdGVzdF9ibG9iX2V4aXN0cyAkaGVsbG9fc2hhMQordGVzdF9ibG9iX2V4aXN0cyAiJCh0ZXN0X29pZCBoZWxsbykiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBoYXNoLW9iamVjdCAtLXN0ZGluIGZpbGUxIDxmaWxlMCBmaXJzdCBvcGVyYXRlcyBvbiBmaWxlMCwgdGhlbiBmaWxlMScgJwogCWVjaG8gZm9vID4gZmlsZTEgJiYKQEAgLTE2MSwxMSArMTY3LDExIEBACiBmb3IgYXJncyBpbiAiLXcgLS1zdGRpbiIgIi0tc3RkaW4gLXciOyBkbwogCXB1c2hfcmVwbwogCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyBTSEExICJoYXNoIGZyb20gc3RkaW4gYW5kIHdyaXRlIHRvIGRhdGFiYXNlICgkYXJncykiICcKLQkJdGVzdCAkZXhhbXBsZV9zaGExID0gJChnaXQgaGFzaC1vYmplY3QgJGFyZ3MgPCBleGFtcGxlKQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhhc2ggZnJvbSBzdGRpbiBhbmQgd3JpdGUgdG8gZGF0YWJhc2UgKCRhcmdzKSIgJworCQl0ZXN0ICIkKHRlc3Rfb2lkIGV4YW1wbGUpIiA9ICQoZ2l0IGhhc2gtb2JqZWN0ICRhcmdzIDwgZXhhbXBsZSkKIAknCiAKLQl0ZXN0X2Jsb2JfZXhpc3RzICRleGFtcGxlX3NoYTEKKwl0ZXN0X2Jsb2JfZXhpc3RzICIkKHRlc3Rfb2lkIGV4YW1wbGUpIgogCiAJcG9wX3JlcG8KIGRvbmUKQEAgLTE3MywyMiArMTc5LDIyIEBACiBmaWxlbmFtZXM9ImhlbGxvCiBleGFtcGxlIgogCi1zaGExcz0iJGhlbGxvX3NoYTEKLSRleGFtcGxlX3NoYTEiCitvaWRzPSIkKHRlc3Rfb2lkIGhlbGxvKQorJCh0ZXN0X29pZCBleGFtcGxlKSIKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBTSEExICJoYXNoIHR3byBmaWxlcyB3aXRoIG5hbWVzIG9uIHN0ZGluIiAnCi0JdGVzdCAiJHNoYTFzIiA9ICIkKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkZmlsZW5hbWVzIiB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluLXBhdGhzKSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImhhc2ggdHdvIGZpbGVzIHdpdGggbmFtZXMgb24gc3RkaW4iICcKKwl0ZXN0ICIkb2lkcyIgPSAiJChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGZpbGVuYW1lcyIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocykiCiAnCiAKIGZvciBhcmdzIGluICItdyAtLXN0ZGluLXBhdGhzIiAiLS1zdGRpbi1wYXRocyAtdyI7IGRvCiAJcHVzaF9yZXBvCiAKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFNIQTEgImhhc2ggdHdvIGZpbGVzIHdpdGggbmFtZXMgb24gc3RkaW4gYW5kIHdyaXRlIHRvIGRhdGFiYXNlICgkYXJncykiICcKLQkJdGVzdCAiJHNoYTFzIiA9ICIkKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkZmlsZW5hbWVzIiB8IGdpdCBoYXNoLW9iamVjdCAkYXJncykiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGFzaCB0d28gZmlsZXMgd2l0aCBuYW1lcyBvbiBzdGRpbiBhbmQgd3JpdGUgdG8gZGF0YWJhc2UgKCRhcmdzKSIgJworCQl0ZXN0ICIkb2lkcyIgPSAiJChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGZpbGVuYW1lcyIgfCBnaXQgaGFzaC1vYmplY3QgJGFyZ3MpIgogCScKIAotCXRlc3RfYmxvYl9leGlzdHMgJGhlbGxvX3NoYTEKLQl0ZXN0X2Jsb2JfZXhpc3RzICRleGFtcGxlX3NoYTEKKwl0ZXN0X2Jsb2JfZXhpc3RzICIkKHRlc3Rfb2lkIGhlbGxvKSIKKwl0ZXN0X2Jsb2JfZXhpc3RzICIkKHRlc3Rfb2lkIGV4YW1wbGUpIgogCiAJcG9wX3JlcG8KIGRvbmUKZGlmZiAtLWdpdCBhL3QvdDEwOTAtc3BhcnNlLWNoZWNrb3V0LXNjb3BlLnNoIGIvdC90MTA5MC1zcGFyc2UtY2hlY2tvdXQtc2NvcGUuc2gKaW5kZXggMDkwYjdmYy4uNDBjYzAwNCAxMDA3NTUKLS0tIGEvdC90MTA5MC1zcGFyc2UtY2hlY2tvdXQtc2NvcGUuc2gKKysrIGIvdC90MTA5MC1zcGFyc2UtY2hlY2tvdXQtc2NvcGUuc2gKQEAgLTMxLDIwICszMSw2IEBACiAJdGVzdF9wYXRoX2lzX2ZpbGUgYwogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiBjaGVja291dC5vcHRpbWl6ZU5ld0JyYW5jaCBpbnRlcmFjdGlvbicgJwotCWNwIC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dC5iYWsgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgIgotCQltdiAtZiAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0LmJhayAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0Ci0JCWdpdCBjaGVja291dCBtYXN0ZXIKLQkiICYmCi0JZWNobyAiL2IiID4+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgotCXRlc3QgIiQoZ2l0IGxzLWZpbGVzIC10IGIpIiA9ICJTIGIiICYmCi0JZ2l0IC1jIGNoZWNrb3V0Lm9wdGltaXplTmV3QnJhbmNoPXRydWUgY2hlY2tvdXQgLWIgZmFzdCAmJgotCXRlc3QgIiQoZ2l0IGxzLWZpbGVzIC10IGIpIiA9ICJTIGIiICYmCi0JZ2l0IGNoZWNrb3V0IC1iIHNsb3cgJiYKLQl0ZXN0ICIkKGdpdCBscy1maWxlcyAtdCBiKSIgPSAiSCBiIgotJwotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBmZWF0dXJlIGJyYW5jaCBpbnRvIHNwYXJzZSBjaGVja291dCBvZiBtYXN0ZXInICcKIAlnaXQgbWVyZ2UgZmVhdHVyZSAmJgogCXRlc3RfcGF0aF9pc19maWxlIGEgJiYKZGlmZiAtLWdpdCBhL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2ggYi90L3QxMzA1LWNvbmZpZy1pbmNsdWRlLnNoCmluZGV4IDU3OWE4NmIuLmQyMGI0ZDEgMTAwNzU1Ci0tLSBhL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2gKKysrIGIvdC90MTMwNS1jb25maWctaW5jbHVkZS5zaApAQCAtMzA5LDIxICszMDksNTMgQEAKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmRpdGlvbmFsIGluY2x1ZGUsIG9uYnJhbmNoJyAnCisJZWNobyAiW2luY2x1ZGVJZiBcIm9uYnJhbmNoOmZvby1icmFuY2hcIl1wYXRoPWJhcjkiID4+LmdpdC9jb25maWcgJiYKKwllY2hvICJbdGVzdF1uaW5lPTkiID4uZ2l0L2JhcjkgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyB0ZXN0Lm5pbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZm9vLWJyYW5jaCAmJgorCWVjaG8gOSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyB0ZXN0Lm5pbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgb25icmFuY2gsIHdpbGRjYXJkJyAnCisJZWNobyAiW2luY2x1ZGVJZiBcIm9uYnJhbmNoOj9vby0qLyoqXCJdcGF0aD1iYXIxMCIgPj4uZ2l0L2NvbmZpZyAmJgorCWVjaG8gIlt0ZXN0XXRlbj0xMCIgPi5naXQvYmFyMTAgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbm90LWZvby1icmFuY2gvYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgdGVzdC50ZW4gJiYKKworCWVjaG8gMTAgPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCAtYiBmb28tYnJhbmNoL2EvYi9jICYmCisJZ2l0IGNvbmZpZyB0ZXN0LnRlbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIG1vby1iYXIvYSAmJgorCWdpdCBjb25maWcgdGVzdC50ZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgb25icmFuY2gsIGltcGxpY2l0IC8qKiBmb3IgLycgJworCWVjaG8gIltpbmNsdWRlSWYgXCJvbmJyYW5jaDpmb28tZGlyL1wiXXBhdGg9YmFyMTEiID4+LmdpdC9jb25maWcgJiYKKwllY2hvICJbdGVzdF1lbGV2ZW49MTEiID4uZ2l0L2JhcjExICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5vdC1mb28tZGlyL2EgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHRlc3QuZWxldmVuICYmCisKKwllY2hvIDExID5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZm9vLWRpci9hL2IvYyAmJgorCWdpdCBjb25maWcgdGVzdC5lbGV2ZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jbHVkZSBjeWNsZXMgYXJlIGRldGVjdGVkJyAnCi0JY2F0ID4uZ2l0Y29uZmlnIDw8LVxFT0YgJiYKLQlbdGVzdF12YWx1ZSA9IGdpdGNvbmZpZwotCVtpbmNsdWRlXXBhdGggPSBjeWNsZQotCUVPRgotCWNhdCA+Y3ljbGUgPDwtXEVPRiAmJgotCVt0ZXN0XXZhbHVlID0gY3ljbGUKLQlbaW5jbHVkZV1wYXRoID0gLmdpdGNvbmZpZwotCUVPRgotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKLQlnaXRjb25maWcKLQljeWNsZQotCUVPRgotCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHRlc3QudmFsdWUgMj5zdGRlcnIgJiYKLQl0ZXN0X2kxOG5ncmVwICJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGgiIHN0ZGVycgorCWdpdCBpbml0IC0tYmFyZSBjeWNsZSAmJgorCWdpdCAtQyBjeWNsZSBjb25maWcgaW5jbHVkZS5wYXRoIGN5Y2xlICYmCisJZ2l0IGNvbmZpZyAtZiBjeWNsZS9jeWNsZSBpbmNsdWRlLnBhdGggY29uZmlnICYmCisJdGVzdF9tdXN0X2ZhaWwgXAorCQllbnYgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049ZmFsc2UgXAorCQlnaXQgLUMgY3ljbGUgY29uZmlnIC0tZ2V0LWFsbCB0ZXN0LnZhbHVlIDI+c3RkZXJyICYmCisJZ3JlcCAiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoIiBzdGRlcnIKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzA5LWVhcmx5LWNvbmZpZy5zaCBiL3QvdDEzMDktZWFybHktY29uZmlnLnNoCmluZGV4IDQxMzY0MmEuLjBjMzdlNzEgMTAwNzU1Ci0tLSBhL3QvdDEzMDktZWFybHktY29uZmlnLnNoCisrKyBiL3QvdDEzMDktZWFybHktY29uZmlnLnNoCkBAIC04OSw0ICs4OSw5IEBACiAJdGVzdF93aXRoX2NvbmZpZyAiWyIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWFybHkgY29uZmlnIGFuZCBvbmJyYW5jaCcgJworCWVjaG8gIlticm9rZW4iID5icm9rZW4gJiYKKwl0ZXN0X3dpdGhfY29uZmlnICJbaW5jbHVkZWlmIFwib25icmFuY2g6cmVmcy9oZWFkcy9tYXN0ZXJcIl1wYXRoPS4uL2Jyb2tlbiIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDEwLXJlZmxvZy5zaCBiL3QvdDE0MTAtcmVmbG9nLnNoCmluZGV4IDc5ZjczMWQuLjgyOTUwYzAgMTAwNzU1Ci0tLSBhL3QvdDE0MTAtcmVmbG9nLnNoCisrKyBiL3QvdDE0MTAtcmVmbG9nLnNoCkBAIC0zMCwxNCArMzAsMTMgQEAKIH0KIAogY29ycnVwdCAoKSB7Ci0JYWE9JHsxJT8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/fSB6ej0kezEjPz99Ci0JbXYgLmdpdC9vYmplY3RzLyRhYS8kenogLmdpdC8kYWEkenoKKwltdiAuZ2l0L29iamVjdHMvJCh0ZXN0X29pZF90b19wYXRoICQxKSAuZ2l0LyQxCiB9CiAKIHJlY292ZXIgKCkgewotCWFhPSR7MSU/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P30geno9JHsxIz8/fQorCWFhPSQoZWNobyAkMSB8IGN1dCAtYyAxLTIpCiAJbWtkaXIgLXAgLmdpdC9vYmplY3RzLyRhYQotCW12IC5naXQvJGFhJHp6IC5naXQvb2JqZWN0cy8kYWEvJHp6CisJbXYgLmdpdC8kMSAuZ2l0L29iamVjdHMvJCh0ZXN0X29pZF90b19wYXRoICQxKQogfQogCiBjaGVja19kb250X2hhdmUgKCkgewpAQCAtNTUsNiArNTQsNyBAQAogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X29pZF9pbml0ICYmCiAJbWtkaXIgLXAgQS9CICYmCiAJZWNobyByYXQgPkMgJiYKIAllY2hvIG94ID5BL0QgJiYKQEAgLTMxMywxMiArMzEzLDEyIEBACiAjIEVhY2ggbGluZSBpcyAxMTQgY2hhcmFjdGVycywgc28gd2UgbmVlZCA3NSB0byBzdGlsbCBoYXZlIGEgZmV3IGJlZm9yZSB0aGUKICMgbGFzdCA4Sy4gVGhlIDg5LWNoYXJhY3RlciBwYWRkaW5nIG9uIHRoZSBmaW5hbCBlbnRyeSBsaW5lcyB1cCBvdXIKICMgbmV3bGluZSBleGFjdGx5LgotdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFyc2luZyByZXZlcnNlIHJlZmxvZ3MgYXQgQlVGU0laIGJvdW5kYXJpZXMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0hBMSAncGFyc2luZyByZXZlcnNlIHJlZmxvZ3MgYXQgQlVGU0laIGJvdW5kYXJpZXMnICcKIAlnaXQgY2hlY2tvdXQgLWIgcmVmbG9nc2tpcCAmJgotCXozOD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAmJgorCXpmPSQodGVzdF9vaWQgemVyb18yKSAmJgogCWlkZW50PSJhYmMgPHh5ej4gMDAwMDAwMDAwMSArMDAwMCIgJiYKIAlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgNzUpOyBkbwotCQlwcmludGYgIiR6MzglMDJkICR6MzglMDJkICVzXHQiICRpICQoKCRpKzEpKSAiJGlkZW50IiAmJgorCQlwcmludGYgIiR6ZiUwMmQgJHpmJTAyZCAlc1x0IiAkaSAkKCgkaSsxKSkgIiRpZGVudCIgJiYKIAkJaWYgdGVzdCAkaSA9IDc1OyB0aGVuCiAJCQlmb3IgaiBpbiAkKHRlc3Rfc2VxIDEgODkpOyBkbwogCQkJCXByaW50ZiBYCkBAIC0zMjksNyArMzI5LDcgQEAKIAkJcHJpbnRmICJcbiIKIAlkb25lID4uZ2l0L2xvZ3MvcmVmcy9oZWFkcy9yZWZsb2dza2lwICYmCiAJZ2l0IHJldi1wYXJzZSByZWZsb2dza2lwQHs3M30gPmFjdHVhbCAmJgotCWVjaG8gJHt6Mzh9MDMgPmV4cGVjdCAmJgorCWVjaG8gJHt6Zn0wMyA+ZXhwZWN0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCmRpZmYgLS1naXQgYS90L3QxNDUwLWZzY2suc2ggYi90L3QxNDUwLWZzY2suc2gKaW5kZXggMGYyNjhhMy4uYjM2ZTA1MiAxMDA3NTUKLS0tIGEvdC90MTQ1MC1mc2NrLnNoCisrKyBiL3QvdDE0NTAtZnNjay5zaApAQCAtOSw2ICs5LDcgQEAKIC4gLi90ZXN0LWxpYi5zaAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X29pZF9pbml0ICYmCiAJZ2l0IGNvbmZpZyBnYy5hdXRvIDAgJiYKIAlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgogCXRlc3RfY29tbWl0IEEgZmlsZUEgb25lICYmCkBAIC01NCw4ICs1NSw4IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29iamVjdCB3aXRoIGJhZCBzaGExJyAnCiAJc2hhPSQoZWNobyBibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCi0Jb2xkPSQoZWNobyAkc2hhIHwgc2VkICJzK14uLismLysiKSAmJgotCW5ldz0kKGRpcm5hbWUgJG9sZCkvZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgJiYKKwlvbGQ9JCh0ZXN0X29pZF90b19wYXRoICIkc2hhIikgJiYKKwluZXc9JChkaXJuYW1lICRvbGQpLyQodGVzdF9vaWQgZmZfMikgJiYKIAlzaGE9IiQoZGlybmFtZSAkbmV3KSQoYmFzZW5hbWUgJG5ldykiICYmCiAJbXYgLmdpdC9vYmplY3RzLyRvbGQgLmdpdC9vYmplY3RzLyRuZXcgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKQEAgLTg0LDcgKzg1LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hFQUQgbGluayBwb2ludGluZyBhdCBhIGZ1bm55IG9iamVjdCcgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9TQVZFRF9IRUFEIC5naXQvSEVBRCIgJiYKIAltdiAuZ2l0L0hFQUQgLmdpdC9TQVZFRF9IRUFEICYmCi0JZWNobyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwID4uZ2l0L0hFQUQgJiYKKwllY2hvICRaRVJPX09JRCA+LmdpdC9IRUFEICYmCiAJIyBhdm9pZCBjb3JydXB0L2Jyb2tlbiBIRUFEIGZyb20gaW50ZXJmZXJpbmcgd2l0aCByZXBvIGRpc2NvdmVyeQogCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRElSPS5naXQgZ2l0IGZzY2sgMj5vdXQgJiYKIAljYXQgb3V0ICYmCkBAIC0yNDQsMTAgKzI0NSwxNiBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhcnNlYWJsZSB0cmVlIG9iamVjdCcgJworCXRlc3Rfb2lkX2NhY2hlIDw8LVxFT0YgJiYKKwlqdW5rIHNoYTE6dHdlbnR5LWJ5dGVzLW9mLWp1bmsKKwlqdW5rIHNoYTI1Njp0d2VudHktYnl0ZXMtb2YtanVuay10d2VsdmUtbW9yZQorCUVPRgorCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL3dyb25nIiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCBcJHRyZWVfc2hhMSIgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgXCRjb21taXRfc2hhMSIgJiYKLQl0cmVlX3NoYTE9JChwcmludGYgIjEwMDY0NCBcMHR3ZW50eS1ieXRlcy1vZi1qdW5rIiB8IGdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIC0tc3RkaW4gLXcgLS1saXRlcmFsbHkpICYmCisJanVuaz0kKHRlc3Rfb2lkIGp1bmspICYmCisJdHJlZV9zaGExPSQocHJpbnRmICIxMDA2NDQgXDAkanVuayIgfCBnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAtLXN0ZGluIC13IC0tbGl0ZXJhbGx5KSAmJgogCWNvbW1pdF9zaGExPSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlX3NoYTEpICYmCiAJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy93cm9uZyAkY29tbWl0X3NoYTEgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgpAQCAtMjc1LDggKzI4Miw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyBwb2ludGluZyB0byBub25leGlzdGVudCcgJwotCWNhdCA+aW52YWxpZC10YWcgPDwtXEVPRiAmJgotCW9iamVjdCBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCisJYmFkb2lkPSQodGVzdF9vaWQgZGVhZGJlZWYpICYmCisJY2F0ID5pbnZhbGlkLXRhZyA8PC1FT0YgJiYKKwlvYmplY3QgJGJhZG9pZAogCXR5cGUgY29tbWl0CiAJdGFnIGludmFsaWQKIAl0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIzNDU2Nzg5MCAtMDAwMApAQCAtMzg2LDggKzM5NCw4IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tdmVyaWZ5LW9iamVjdHMgd2l0aCBiYWQgc2hhMScgJwogCXNoYT0kKGVjaG8gYmxvYiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgotCW9sZD0kKGVjaG8gJHNoYSB8IHNlZCAicyteLi4rJi8rIikgJiYKLQluZXc9JChkaXJuYW1lICRvbGQpL2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmICYmCisJb2xkPSQodGVzdF9vaWRfdG9fcGF0aCAkc2hhKSAmJgorCW5ldz0kKGRpcm5hbWUgJG9sZCkvJCh0ZXN0X29pZCBmZl8yKSAmJgogCXNoYT0iJChkaXJuYW1lICRuZXcpJChiYXNlbmFtZSAkbmV3KSIgJiYKIAltdiAuZ2l0L29iamVjdHMvJG9sZCAuZ2l0L29iamVjdHMvJG5ldyAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkc2hhIiAmJgpAQCAtNDAyLDcgKzQxMCw3IEBACiAKIAl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJldi1saXN0IC0tdmVyaWZ5LW9iamVjdHMgcmVmcy9oZWFkcy9ib2d1cyA+L2Rldi9udWxsIDI+b3V0ICYmCiAJY2F0IG91dCAmJgotCXRlc3RfaTE4bmdyZXAgLXEgImVycm9yOiBoYXNoIG1pc21hdGNoIDYzZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiIG91dAorCXRlc3RfaTE4bmdyZXAgLXEgImVycm9yOiBoYXNoIG1pc21hdGNoICQoZGlybmFtZSAkbmV3KSQodGVzdF9vaWQgZmZfMikiIG91dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZSBmc2NrIHRvIGlnbm9yZSBkb3VibGUgYXV0aG9yJyAnCkBAIC00MTcsMTMgKzQyNSwxMiBAQAogJwogCiBfYno9J1wwJwotX2J6NT0iJF9ieiRfYnokX2J6JF9ieiRfYnoiCi1fYnoyMD0iJF9iejUkX2J6NSRfYno1JF9iejUiCitfYnpvaWQ9JChwcmludGYgJFpFUk9fT0lEIHwgc2VkIC1lICdzLzAwL1xcMC9nJykKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIGJsb2IgZW50cnkgcG9pbnRpbmcgdG8gbnVsbCBzaGExJyAnCiAJKGdpdCBpbml0IG51bGwtYmxvYiAmJgogCSBjZCBudWxsLWJsb2IgJiYKLQkgc2hhPSQocHJpbnRmICIxMDA2NDQgZmlsZSRfYnokX2J6MjAiIHwKKwkgc2hhPSQocHJpbnRmICIxMDA2NDQgZmlsZSRfYnokX2J6b2lkIiB8CiAJICAgICAgIGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIC10IHRyZWUpICYmCiAJICBnaXQgZnNjayAyPm91dCAmJgogCSAgY2F0IG91dCAmJgpAQCAtNDM0LDcgKzQ0MSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgc3VibW9kdWxlIGVudHJ5IHBvaW50aW5nIHRvIG51bGwgc2hhMScgJwogCShnaXQgaW5pdCBudWxsLWNvbW1pdCAmJgogCSBjZCBudWxsLWNvbW1pdCAmJgotCSBzaGE9JChwcmludGYgIjE2MDAwMCBzdWJtb2R1bGUkX2J6JF9iejIwIiB8CisJIHNoYT0kKHByaW50ZiAiMTYwMDAwIHN1Ym1vZHVsZSRfYnokX2J6b2lkIiB8CiAJICAgICAgIGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIC10IHRyZWUpICYmCiAJICBnaXQgZnNjayAyPm91dCAmJgogCSAgY2F0IG91dCAmJgpAQCAtNTg2LDcgKzU5Myw3IEBACiAJCSMgaXRzIHR5cGUuIFRoYXQgbGV0cyB1cyBzZWUgdGhhdCAtLWNvbm5lY3Rpdml0eS1vbmx5IGlzCiAJCSMgbm90IGFjdHVhbGx5IGxvb2tpbmcgYXQgdGhlIGNvbnRlbnRzLCBidXQgbGVhdmVzIGl0CiAJCSMgZnJlZSB0byBleGFtaW5lIHRoZSB0eXBlIGlmIGl0IGNob29zZXMuCi0JCWVtcHR5PS5naXQvb2JqZWN0cy9lNi85ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAmJgorCQllbXB0eT0uZ2l0L29iamVjdHMvJCh0ZXN0X29pZF90b19wYXRoICRFTVBUWV9CTE9CKSAmJgogCQlibG9iPSQoZWNobyB1bnJlbGF0ZWQgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKIAkJbXYgLWYgJChzaGExX2ZpbGUgJGJsb2IpICRlbXB0eSAmJgogCkBAIC02MzEsMTAgKzYzOCwxMiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHRlcm5hdGUgb2JqZWN0cyBhcmUgY29ycmVjdGx5IGJsYW1lZCcgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGFsdC5naXQgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIgJiYKKwluYW1lPSQodGVzdF9vaWQgbnVtZXJpYykgJiYKKwlwYXRoPSQodGVzdF9vaWRfdG9fcGF0aCAiJG5hbWUiKSAmJgogCWdpdCBpbml0IC0tYmFyZSBhbHQuZ2l0ICYmCiAJZWNobyAiLi4vLi4vYWx0LmdpdC9vYmplY3RzIiA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgotCW1rZGlyIGFsdC5naXQvb2JqZWN0cy8xMiAmJgotCT5hbHQuZ2l0L29iamVjdHMvMTIvMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgJiYKKwlta2RpciBhbHQuZ2l0L29iamVjdHMvJChkaXJuYW1lICRwYXRoKSAmJgorCT5hbHQuZ2l0L29iamVjdHMvJChkaXJuYW1lICRwYXRoKS8kKGJhc2VuYW1lICRwYXRoKSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrID5vdXQgMj4mMSAmJgogCXRlc3RfaTE4bmdyZXAgYWx0LmdpdCBvdXQKICcKZGlmZiAtLWdpdCBhL3QvdDE3MDAtc3BsaXQtaW5kZXguc2ggYi90L3QxNzAwLXNwbGl0LWluZGV4LnNoCmluZGV4IDRmMmY4NGYuLjEyYTU1NjggMTAwNzU1Ci0tLSBhL3QvdDE3MDAtc3BsaXQtaW5kZXguc2gKKysrIGIvdC90MTcwMC1zcGxpdC1pbmRleC5zaApAQCAtMjAsNiArMjAsMjIgQEAKIAl0ZXN0LXRvb2wgY2htdGltZSA9LTUgIiQxIgogfQogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRgorCW93bl92MyBzaGExOjgyOTliMGJjZDFhYzM2NGU1ZjFkNzc2OGVmYjYyZmEyZGE3OWEzMzkKKwlvd25fdjMgc2hhMjU2OjM4YTZkMjkyNWUzZWNlZWMzM2FkN2IzNGNiZmY0ZTAwODZjYWEwZGFmMjhmMzFlNTFmNWJkOTRiNGE3YWY4NmIKKworCWJhc2VfdjMgc2hhMTozOWQ4OTAxMzllZTUzNTZjN2VmNTcyMjE2Y2ViY2QyN2FhNDFmOWRmCisJYmFzZV92MyBzaGEyNTY6YzliYWVhZGY5MDUxMTJiZjZjMTdhZWZiZDdkMDIyNjdhZmQ3MGRlZDYxM2MzMGNhZmVkMmQ0MGNiNTA2ZTFlZAorCisJb3duX3Y0IHNoYTE6NDMyZWY0YjYzZjMyMTkzOTg0ZjMzOTQzMWZkNTBjYTc5NjQ5MzU2OQorCW93bl92NCBzaGEyNTY6NjczOGFjNjMxOWMyNWI2OTRhZmE3YmNjMzEzZGViMTgyZDFhNTliNjhiZjdhNDdiNDI5NmRlODM0NzhjMDQyMAorCisJYmFzZV92NCBzaGExOjUwODg1MWE3ZjBkZmE4NjkxZTlmNjljN2YwNTU4NjUzODkwMTI0OTEKKwliYXNlX3Y0IHNoYTI1NjozMTc3ZDRhZGZkZDRiNjkwNGY3ZTkyMWQ5MWQ3MTVhNDcxYzBkZGU3Y2Y2YTRiYmE1NzQ5MjdmMDJiNjk5NTA4CisJRU9GCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuYWJsZSBzcGxpdCBpbmRleCcgJwogCWdpdCBjb25maWcgc3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIDEwMCAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1zcGxpdC1pbmRleCAmJgpAQCAtMjksMTEgKzQ1LDExIEBACiAJIyBORUVEU1dPUks6IFN0b3AgaGFyZC1jb2RpbmcgY2hlY2tzdW1zLgogCWlmIHRlc3QgIiRpbmRleHZlcnNpb24iID0gIjQiCiAJdGhlbgotCQlvd249NDMyZWY0YjYzZjMyMTkzOTg0ZjMzOTQzMWZkNTBjYTc5NjQ5MzU2OQotCQliYXNlPTUwODg1MWE3ZjBkZmE4NjkxZTlmNjljN2YwNTU4NjUzODkwMTI0OTEKKwkJb3duPSQodGVzdF9vaWQgb3duX3Y0KQorCQliYXNlPSQodGVzdF9vaWQgYmFzZV92NCkKIAllbHNlCi0JCW93bj04Mjk5YjBiY2QxYWMzNjRlNWYxZDc3NjhlZmI2MmZhMmRhNzlhMzM5Ci0JCWJhc2U9MzlkODkwMTM5ZWU1MzU2YzdlZjU3MjIxNmNlYmNkMjdhYTQxZjlkZgorCQlvd249JCh0ZXN0X29pZCBvd25fdjMpCisJCWJhc2U9JCh0ZXN0X29pZCBiYXNlX3YzKQogCWZpICYmCiAKIAljYXQgPmV4cGVjdCA8PC1FT0YgJiYKQEAgLTk5LDE3ICsxMTUsMTggQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZ5IG9yaWdpbmFsIGZpbGUsIGJhc2UgaW5kZXggdW50b3VjaGVkJyAnCiAJZWNobyBtb2RpZmllZCB8IGNyZWF0ZV9ub25fcmFjeV9maWxlIG9uZSAmJgorCWZpbGUxX2Jsb2I9JChnaXQgaGFzaC1vYmplY3Qgb25lKSAmJgogCWdpdCB1cGRhdGUtaW5kZXggb25lICYmCiAJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmxzLWZpbGVzLmFjdHVhbCAmJgogCWNhdCA+bHMtZmlsZXMuZXhwZWN0IDw8LUVPRiAmJgotCTEwMDY0NCAyZTA5OTYwMDBiN2U5MDE5ZWFiY2FkMjkzOTFiZjBmNWM3NzAyZjBiIDAJb25lCisJMTAwNjQ0ICRmaWxlMV9ibG9iIDAJb25lCiAJRU9GCiAJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgogCiAJdGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgogCXFfdG9fdGFiID5leHBlY3QgPDwtRU9GICYmCiAJJEJBU0UKLQkxMDA2NDQgMmUwOTk2MDAwYjdlOTAxOWVhYmNhZDI5MzkxYmYwZjVjNzcwMmYwYiAwUQorCTEwMDY0NCAkZmlsZTFfYmxvYiAwUQogCXJlcGxhY2VtZW50czogMAogCWRlbGV0aW9uczoKIAlFT0YKQEAgLTEyMSw3ICsxMzgsNyBAQAogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdHdvICYmCiAJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmxzLWZpbGVzLmFjdHVhbCAmJgogCWNhdCA+bHMtZmlsZXMuZXhwZWN0IDw8LUVPRiAmJgotCTEwMDY0NCAyZTA5OTYwMDBiN2U5MDE5ZWFiY2FkMjkzOTFiZjBmNWM3NzAyZjBiIDAJb25lCisJMTAwNjQ0ICRmaWxlMV9ibG9iIDAJb25lCiAJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJdHdvCiAJRU9GCiAJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgpAQCAtMTI5LDcgKzE0Niw3IEBACiAJdGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgogCXFfdG9fdGFiID5leHBlY3QgPDwtRU9GICYmCiAJJEJBU0UKLQkxMDA2NDQgMmUwOTk2MDAwYjdlOTAxOWVhYmNhZDI5MzkxYmYwZjVjNzcwMmYwYiAwUQorCTEwMDY0NCAkZmlsZTFfYmxvYiAwUQogCTEwMDY0NCAkRU1QVFlfQkxPQiAwCXR3bwogCXJlcGxhY2VtZW50czogMAogCWRlbGV0aW9uczoKQEAgLTE0MSwxNCArMTU4LDE0IEBACiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSB0d28gJiYKIAlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+bHMtZmlsZXMuYWN0dWFsICYmCiAJY2F0ID5scy1maWxlcy5leHBlY3QgPDwtRU9GICYmCi0JMTAwNjQ0IDJlMDk5NjAwMGI3ZTkwMTllYWJjYWQyOTM5MWJmMGY1Yzc3MDJmMGIgMAlvbmUKKwkxMDA2NDQgJGZpbGUxX2Jsb2IgMAlvbmUKIAlFT0YKIAl0ZXN0X2NtcCBscy1maWxlcy5leHBlY3QgbHMtZmlsZXMuYWN0dWFsICYmCiAKIAl0ZXN0LXRvb2wgZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgc2VkICIvXm93bi9kIiA+YWN0dWFsICYmCiAJcV90b190YWIgPmV4cGVjdCA8PC1FT0YgJiYKIAkkQkFTRQotCTEwMDY0NCAyZTA5OTYwMDBiN2U5MDE5ZWFiY2FkMjkzOTFiZjBmNWM3NzAyZjBiIDBRCisJMTAwNjQ0ICRmaWxlMV9ibG9iIDBRCiAJcmVwbGFjZW1lbnRzOiAwCiAJZGVsZXRpb25zOgogCUVPRgpAQCAtMjM3LDkgKzI1NCw5IEBACiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0aHJlZSAmJgogCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKIAljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PC1FT0YgJiYKLQkxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCW9uZQotCTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJdGhyZWUKLQkxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCXR3bworCTEwMDY0NCAkRU1QVFlfQkxPQiAwCW9uZQorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCXRocmVlCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJdHdvCiAJRU9GCiAJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgogCUJBU0U9JCh0ZXN0LXRvb2wgZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgZ3JlcCAiXmJhc2UiKSAmJgpAQCAtMjU3LDggKzI3NCw4IEBACiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSB0aHJlZSAmJgogCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKIAljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PC1FT0YgJiYKLQkxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCW9uZQotCTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJdHdvCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJb25lCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJdHdvCiAJRU9GCiAJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgogCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKQEAgLTI4NSw3ICszMDIsNyBAQAogCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkkQkFTRQotCTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJZm91cgorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCWZvdXIKIAlyZXBsYWNlbWVudHM6CiAJZGVsZXRpb25zOgogCUVPRgpAQCAtMzA5LDcgKzMyNiw3IEBACiAJdGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCSRCQVNFCi0JMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlzaXgKKwkxMDA2NDQgJEVNUFRZX0JMT0IgMAlzaXgKIAlyZXBsYWNlbWVudHM6CiAJZGVsZXRpb25zOgogCUVPRgpkaWZmIC0tZ2l0IGEvdC90MjAxNC1zd2l0Y2guc2ggYi90L3QyMDE0LWNoZWNrb3V0LXN3aXRjaC5zaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdC90MjAxNC1zd2l0Y2guc2gKcmVuYW1lIHRvIHQvdDIwMTQtY2hlY2tvdXQtc3dpdGNoLnNoCmRpZmYgLS1naXQgYS90L3QyMDIwLWNoZWNrb3V0LWRldGFjaC5zaCBiL3QvdDIwMjAtY2hlY2tvdXQtZGV0YWNoLnNoCmluZGV4IDFmYTY3MDYuLmI3NDhkYjkgMTAwNzU1Ci0tLSBhL3QvdDIwMjAtY2hlY2tvdXQtZGV0YWNoLnNoCisrKyBiL3QvdDIwMjAtY2hlY2tvdXQtZGV0YWNoLnNoCkBAIC0xOTUsMTYgKzE5NSwyMiBAQAogCiAJIyBUaGUgZmlyc3QgZGV0YWNoIG9wZXJhdGlvbiBpcyBtb3JlIGNoYXR0eSB0aGFuIHRoZSBmb2xsb3dpbmcgb25lcy4KIAljYXQgPjFzdF9kZXRhY2ggPDwtRU9GICYmCi0JTm90ZTogY2hlY2tpbmcgb3V0ICdIRUFEXicuCisJTm90ZTogc3dpdGNoaW5nIHRvICdIRUFEXicuCiAKIAlZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWwKIAljaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzCi0Jc3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHBlcmZvcm1pbmcgYW5vdGhlciBjaGVja291dC4KKwlzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guCiAKIAlJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXkKLQlkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYiB3aXRoIHRoZSBjaGVja291dCBjb21tYW5kIGFnYWluLiBFeGFtcGxlOgorCWRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kLiBFeGFtcGxlOgogCi0JICBnaXQgY2hlY2tvdXQgLWIgPG5ldy1icmFuY2gtbmFtZT4KKwkgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT4KKworCU9yIHVuZG8gdGhpcyBvcGVyYXRpb24gd2l0aDoKKworCSAgZ2l0IHN3aXRjaCAtCisKKwlUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvIGZhbHNlCiAKIAlIRUFEIGlzIG5vdyBhdCBcJGNvbW1pdCB0aHJlZQogCUVPRgpAQCAtMjcxLDE2ICsyNzcsMjIgQEAKIAogCSMgVGhlIGZpcnN0IGRldGFjaCBvcGVyYXRpb24gaXMgbW9yZSBjaGF0dHkgdGhhbiB0aGUgZm9sbG93aW5nIG9uZXMuCiAJY2F0ID4xc3RfZGV0YWNoIDw8LUVPRiAmJgotCU5vdGU6IGNoZWNraW5nIG91dCAnSEVBRF4nLgorCU5vdGU6IHN3aXRjaGluZyB0byAnSEVBRF4nLgogCiAJWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsCiAJY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpcwotCXN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBwZXJmb3JtaW5nIGFub3RoZXIgY2hlY2tvdXQuCisJc3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHN3aXRjaGluZyBiYWNrIHRvIGEgYnJhbmNoLgogCiAJSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5Ci0JZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZToKKwlkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZToKIAotCSAgZ2l0IGNoZWNrb3V0IC1iIDxuZXctYnJhbmNoLW5hbWU+CisJICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+CisKKwlPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6CisKKwkgIGdpdCBzd2l0Y2ggLQorCisJVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byBmYWxzZQogCiAJSEVBRCBpcyBub3cgYXQgXCRjb21taXQuLi4gdGhyZWUKIAlFT0YKZGlmZiAtLWdpdCBhL3QvdDIwNjAtc3dpdGNoLnNoIGIvdC90MjA2MC1zd2l0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjllZmEyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwNjAtc3dpdGNoLnNoCkBAIC0wLDAgKzEsOTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzd2l0Y2ggYmFzaWMgZnVuY3Rpb25hbGl0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgZmlyc3QgJiYKKwlnaXQgYnJhbmNoIGZpcnN0LWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IHNlY29uZCAmJgorCXRlc3RfY29tbWl0IHRoaXJkICYmCisJZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIG5vaG9zdDovbm9wYXRoICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9mb28gZmlyc3QtYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBicmFuY2ggbm8gYXJndW1lbnRzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN3aXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggYnJhbmNoJyAnCisJZ2l0IHN3aXRjaCBmaXJzdC1icmFuY2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzZWNvbmQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggYW5kIGRldGFjaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgc3dpdGNoIG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzd2l0Y2ggbWFzdGVyXntjb21taXR9ICYmCisJZ2l0IHN3aXRjaCAtLWRldGFjaCBtYXN0ZXJee2NvbW1pdH0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGFuZCBkZXRhY2ggY3VycmVudCBicmFuY2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHN3aXRjaCBtYXN0ZXIgJiYKKwlnaXQgc3dpdGNoIG1hc3RlciAmJgorCWdpdCBzd2l0Y2ggLS1kZXRhY2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGFuZCBjcmVhdGUgYnJhbmNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBzd2l0Y2ggbWFzdGVyICYmCisJZ2l0IHN3aXRjaCAtYyB0ZW1wIG1hc3Rlcl4gJiYKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyXiByZWZzL2hlYWRzL3RlbXAgJiYKKwllY2hvIHJlZnMvaGVhZHMvdGVtcCA+ZXhwZWN0ZWQtYnJhbmNoICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwtYnJhbmNoICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtYnJhbmNoIGFjdHVhbC1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2UgY3JlYXRlIGJyYW5jaCBmcm9tIEhFQUQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHN3aXRjaCBtYXN0ZXIgJiYKKwlnaXQgc3dpdGNoIC0tZGV0YWNoIG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzd2l0Y2ggLWMgdGVtcCAmJgorCWdpdCBzd2l0Y2ggLUMgdGVtcCAmJgorCXRlc3RfY21wX3JldiBtYXN0ZXIgcmVmcy9oZWFkcy90ZW1wICYmCisJZWNobyByZWZzL2hlYWRzL3RlbXAgPmV4cGVjdGVkLWJyYW5jaCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsLWJyYW5jaCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWJyYW5jaCBhY3R1YWwtYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBvcnBoYW4gYnJhbmNoIGZyb20gZW1wdHknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHN3aXRjaCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3dpdGNoIC0tb3JwaGFuIG5ldy1vcnBoYW4gSEVBRCAmJgorCWdpdCBzd2l0Y2ggLS1vcnBoYW4gbmV3LW9ycGhhbiAmJgorCXRlc3RfY29tbWl0IG9ycGhhbiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9oZWFkcy9uZXctb3JwaGFuID5jb21taXQgJiYKKwkhIGdyZXAgXnBhcmVudCBjb21taXQgJiYKKwlnaXQgbHMtZmlsZXMgPnRyYWNrZWQtZmlsZXMgJiYKKwllY2hvIG9ycGhhbi50ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHRyYWNrZWQtZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoaW5nIGlnbm9yZXMgZmlsZSBvZiBzYW1lIGJyYW5jaCBuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBzd2l0Y2ggbWFzdGVyICYmCisJOiA+Zmlyc3QtYnJhbmNoICYmCisJZ2l0IHN3aXRjaCBmaXJzdC1icmFuY2ggJiYKKwllY2hvIHJlZnMvaGVhZHMvZmlyc3QtYnJhbmNoID5leHBlY3RlZCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2d1ZXNzIGFuZCBjcmVhdGUgYnJhbmNoICcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgc3dpdGNoIG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzd2l0Y2ggLS1uby1ndWVzcyBmb28gJiYKKwlnaXQgc3dpdGNoIGZvbyAmJgorCWVjaG8gcmVmcy9oZWFkcy9mb28gPmV4cGVjdGVkICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IHN3aXRjaGluZyB3aGVuIHNvbWV0aGluZyBpcyBpbiBwcm9ncmVzcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIGZha2UgYSBtZXJnZS1pbi1wcm9ncmVzcworCWNwIC5naXQvSEVBRCAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3dpdGNoIC1kIEBeCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjA3MC1yZXN0b3JlLnNoIGIvdC90MjA3MC1yZXN0b3JlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2NTBkZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDcwLXJlc3RvcmUuc2gKQEAgLTAsMCArMSw5OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jlc3RvcmUgYmFzaWMgZnVuY3Rpb25hbGl0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgZmlyc3QgJiYKKwllY2hvIGZpcnN0LWFuZC1hLWhhbGYgPj5maXJzdC50ICYmCisJZ2l0IGFkZCBmaXJzdC50ICYmCisJdGVzdF9jb21taXQgc2Vjb25kICYmCisJZWNobyBvbmUgPm9uZSAmJgorCWVjaG8gdHdvID50d28gJiYKKwllY2hvIHVudHJhY2tlZCA+dW50cmFja2VkICYmCisJZWNobyBpZ25vcmVkID5pZ25vcmVkICYmCisJZWNobyAvaWdub3JlZCA+LmdpdGlnbm9yZSAmJgorCWdpdCBhZGQgb25lIHR3byAuZ2l0aWdub3JlICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9vbmUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgd2l0aG91dCBwYXRoc3BlYyBpcyBub3Qgb2snICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzdG9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXN0b3JlIC0tc291cmNlPWZpcnN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgYSBmaWxlLCBpZ25vcmluZyBicmFuY2ggb2Ygc2FtZSBuYW1lJyAnCisJY2F0IG9uZSA+ZXhwZWN0ZWQgJiYKKwllY2hvIGRpcnR5ID4+b25lICYmCisJZ2l0IHJlc3RvcmUgb25lICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgYSBmaWxlIG9uIHdvcmt0cmVlIGZyb20gYW5vdGhlciByZWYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIGZpcnN0Oi4vZmlyc3QudCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmVzdG9yZSAtLXNvdXJjZT1maXJzdCBmaXJzdC50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlyc3QudCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6Li9maXJzdC50ID5leHBlY3RlZCAmJgorCWdpdCBzaG93IDpmaXJzdC50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSBhIGZpbGUgaW4gdGhlIGluZGV4IGZyb20gYW5vdGhlciByZWYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIGZpcnN0Oi4vZmlyc3QudCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmVzdG9yZSAtLXNvdXJjZT1maXJzdCAtLXN0YWdlZCBmaXJzdC50ICYmCisJZ2l0IHNob3cgOmZpcnN0LnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6Li9maXJzdC50ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpcnN0LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSBhIGZpbGUgaW4gYm90aCB0aGUgaW5kZXggYW5kIHdvcmt0cmVlIGZyb20gYW5vdGhlciByZWYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIGZpcnN0Oi4vZmlyc3QudCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmVzdG9yZSAtLXNvdXJjZT1maXJzdCAtLXN0YWdlZCAtLXdvcmt0cmVlIGZpcnN0LnQgJiYKKwlnaXQgc2hvdyA6Zmlyc3QudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlyc3QudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0b3JlIC0tc3RhZ2VkIHVzZXMgSEVBRCBhcyBzb3VyY2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIDouL2ZpcnN0LnQgPmV4cGVjdGVkICYmCisJZWNobyBpbmRleC1kaXJ0eSA+PmZpcnN0LnQgJiYKKwlnaXQgYWRkIGZpcnN0LnQgJiYKKwlnaXQgcmVzdG9yZSAtLXN0YWdlZCBmaXJzdC50ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOi4vZmlyc3QudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgLS1pZ25vcmUtdW5tZXJnZWQgaWdub3JlcyB1bm1lcmdlZCBlbnRyaWVzJyAnCisJZ2l0IGluaXQgdW5tZXJnZWQgJiYKKwkoCisJCWNkIHVubWVyZ2VkICYmCisJCWVjaG8gb25lID51bm1lcmdlZCAmJgorCQllY2hvIG9uZSA+Y29tbW9uICYmCisJCWdpdCBhZGQgdW5tZXJnZWQgY29tbW9uICYmCisJCWdpdCBjb21taXQgLW0gY29tbW9uICYmCisJCWdpdCBzd2l0Y2ggLWMgZmlyc3QgJiYKKwkJZWNobyBmaXJzdCA+dW5tZXJnZWQgJiYKKwkJZ2l0IGNvbW1pdCAtYW0gZmlyc3QgJiYKKwkJZ2l0IHN3aXRjaCAtYyBzZWNvbmQgbWFzdGVyICYmCisJCWVjaG8gc2Vjb25kID51bm1lcmdlZCAmJgorCQlnaXQgY29tbWl0IC1hbSBzZWNvbmQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpcnN0ICYmCisKKwkJZWNobyBkaXJ0eSA+PmNvbW1vbiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmVzdG9yZSAuICYmCisKKwkJZ2l0IHJlc3RvcmUgLS1pZ25vcmUtdW5tZXJnZWQgLS1xdWlldCAuID5vdXRwdXQgMj4mMSAmJgorCQlnaXQgZGlmZiBjb21tb24gPmRpZmYtb3V0cHV0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGRpZmYtb3V0cHV0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwNzEtcmVzdG9yZS1wYXRjaC5zaCBiL3QvdDIwNzEtcmVzdG9yZS1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OGIyNDc2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjA3MS1yZXN0b3JlLXBhdGNoLnNoCkBAIC0wLDAgKzEsMTEwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc3RvcmUgLS1wYXRjaCcKKworLiAuL2xpYi1wYXRjaC1tb2RlLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAnICcKKwlta2RpciBkaXIgJiYKKwllY2hvIHBhcmVudCA+ZGlyL2ZvbyAmJgorCWVjaG8gZHVtbXkgPmJhciAmJgorCWdpdCBhZGQgYmFyIGRpci9mb28gJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmQgZGlyL2ZvbyBoZWFkICYmCisJc2V0X2FuZF9zYXZlX3N0YXRlIGJhciBiYXJfd29yayBiYXJfaW5kZXggJiYKKwlzYXZlX2hlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdyZXN0b3JlIC1wIHdpdGhvdXQgcGF0aHNwZWMgaXMgZmluZScgJworCWVjaG8gcSA+Y21kICYmCisJZ2l0IHJlc3RvcmUgLXAgPGNtZAorJworCisjIG5vdGU6IGJhciBzb3J0cyBiZWZvcmUgZGlyL2Zvbywgc28gdGhlIGZpcnN0ICduJyBpcyBhbHdheXMgdG8gc2tpcCAnYmFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NheWluZyAibiIgZG9lcyBub3RoaW5nJyAnCisJc2V0X2FuZF9zYXZlX3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJdGVzdF93cml0ZV9saW5lcyBuIG4gfCBnaXQgcmVzdG9yZSAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgZGlyL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXN0b3JlIC1wJyAnCisJc2V0X2FuZF9zYXZlX3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJdGVzdF93cml0ZV9saW5lcyBuIHkgfCBnaXQgcmVzdG9yZSAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzdG9yZSAtcCB3aXRoIHN0YWdlZCBjaGFuZ2VzJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiB5IHwgZ2l0IHJlc3RvcmUgLXAgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaW5kZXggaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzdG9yZSAtcCAtLXNvdXJjZT1IRUFEJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCSMgdGhlIHRoaXJkIG4gaXMgdG8gZ2V0IG91dCBpbiBjYXNlIGl0IG1pc3Rha2VubHkgZG9lcyBub3QgYXBwbHkKKwl0ZXN0X3dyaXRlX2xpbmVzIG4geSBuIHwgZ2l0IHJlc3RvcmUgLXAgLS1zb3VyY2U9SEVBRCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc3RvcmUgLXAgLS1zb3VyY2U9SEVBRF4nICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJIyB0aGUgdGhpcmQgbiBpcyB0byBnZXQgb3V0IGluIGNhc2UgaXQgbWlzdGFrZW5seSBkb2VzIG5vdCBhcHBseQorCXRlc3Rfd3JpdGVfbGluZXMgbiB5IG4gfCBnaXQgcmVzdG9yZSAtcCAtLXNvdXJjZT1IRUFEXiAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBwYXJlbnQgaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzdG9yZSAtcCBoYW5kbGVzIGRlbGV0aW9uJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCXJtIGRpci9mb28gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG4geSB8IGdpdCByZXN0b3JlIC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGluZGV4IGluZGV4CisnCisKKyMgVGhlIGlkZWEgaW4gdGhlIHJlc3QgaXMgdGhhdCBiYXIgc29ydHMgZmlyc3QsIHNvIHdlIGFsd2F5cyBzYXkgJ3knCisjIGZpcnN0IGFuZCBpZiB0aGUgcGF0aCBsaW1pdGVyIGZhaWxzIGl0J2xsIGFwcGx5IHRvIGJhciBpbnN0ZWFkIG9mCisjIGRpci9mb28uICBUaGVyZSdzIGFsd2F5cyBhbiBleHRyYSAnbicgdG8gcmVqZWN0IGVkaXRzIHRvIGRpci9mb28gaW4KKyMgdGhlIGZhaWx1cmUgY2FzZSAoYW5kIHRodXMgZ2V0IG91dCBvZiB0aGUgbG9vcCkuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncGF0aCBsaW1pdGluZyB3b3JrczogZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJdGVzdF93cml0ZV9saW5lcyB5IG4gfCBnaXQgcmVzdG9yZSAtcCBkaXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncGF0aCBsaW1pdGluZyB3b3JrczogLS0gZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJdGVzdF93cml0ZV9saW5lcyB5IG4gfCBnaXQgcmVzdG9yZSAtcCAtLSBkaXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncGF0aCBsaW1pdGluZyB3b3JrczogSEVBRF4gLS0gZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJIyB0aGUgdGhpcmQgbiBpcyB0byBnZXQgb3V0IGluIGNhc2UgaXQgbWlzdGFrZW5seSBkb2VzIG5vdCBhcHBseQorCXRlc3Rfd3JpdGVfbGluZXMgeSBuIG4gfCBnaXQgcmVzdG9yZSAtcCAtLXNvdXJjZT1IRUFEXiAtLSBkaXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gcGFyZW50IGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwYXRoIGxpbWl0aW5nIHdvcmtzOiBmb28gaW5zaWRlIGRpcicgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCSMgdGhlIHRoaXJkIG4gaXMgdG8gZ2V0IG91dCBpbiBjYXNlIGl0IG1pc3Rha2VubHkgZG9lcyBub3QgYXBwbHkKKwl0ZXN0X3dyaXRlX2xpbmVzIHkgbiBuIHwgKGNkIGRpciAmJiBnaXQgcmVzdG9yZSAtcCBmb28pICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ25vbmUgb2YgdGhpcyBtb3ZlZCBIRUFEJyAnCisJdmVyaWZ5X3NhdmVkX2hlYWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMjAzLWFkZC1pbnRlbnQuc2ggYi90L3QyMjAzLWFkZC1pbnRlbnQuc2gKaW5kZXggNjhlNTRkNS4uNWJiZThkYyAxMDA3NTUKLS0tIGEvdC90MjIwMy1hZGQtaW50ZW50LnNoCisrKyBiL3QvdDIyMDMtYWRkLWludGVudC5zaApAQCAtMjQ3LDEyICsyNDcsMTQgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJkaWZmIEhFQUQiIGluY2x1ZGVzIGl0YSBhcyBuZXcgZmlsZXMnICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZWNobyBuZXcgPm5ldy1pdGEgJiYKKwlvaWQ9JChnaXQgaGFzaC1vYmplY3QgbmV3LWl0YSkgJiYKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJG9pZCkgJiYKIAlnaXQgYWRkIC1OIG5ldy1pdGEgJiYKIAlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogCWRpZmYgLS1naXQgYS9uZXctaXRhIGIvbmV3LWl0YQogCW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0JaW5kZXggMDAwMDAwMC4uM2U3NTc2NQorCWluZGV4IDAwMDAwMDAuLiRvaWQKIAktLS0gL2Rldi9udWxsCiAJKysrIGIvbmV3LWl0YQogCUBAIC0wLDAgKzEgQEAKZGlmZiAtLWdpdCBhL3QvdDI0MDAtd29ya3RyZWUtYWRkLnNoIGIvdC90MjQwMC13b3JrdHJlZS1hZGQuc2gKaW5kZXggZDgzYTlmMC4uZTgxOWJhNyAxMDA3NTUKLS0tIGEvdC90MjQwMC13b3JrdHJlZS1hZGQuc2gKKysrIGIvdC90MjQwMC13b3JrdHJlZS1hZGQuc2gKQEAgLTU3MCw2ICs1NzAsMTEgQEAKIAlnaXQgd29ya3RyZWUgYWRkIC0tZm9yY2UgLS1mb3JjZSAtLWRldGFjaCBnbm9vCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyAnc2FuaXRpemUgZ2VuZXJhdGVkIHdvcmt0cmVlIG5hbWUnICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoICIuICB3ZWlyZCouLj8ubG9jay5sb2NrIiAmJgorCXRlc3QgLWQgLmdpdC93b3JrdHJlZXMvLS0td2VpcmQtLi0KKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgc2hvdWxkIG5vdCBmYWlsIGJlY2F1c2Ugb2YgYW5vdGhlciBiYWQgd29ya3RyZWUnICcKIAlnaXQgaW5pdCBhZGQtZmFpbCAmJgogCSgKZGlmZiAtLWdpdCBhL3QvdDMyMDAtYnJhbmNoLnNoIGIvdC90MzIwMC1icmFuY2guc2gKaW5kZXggZTlkNzA4NC4uNDExYTcwYiAxMDA3NTUKLS0tIGEvdC90MzIwMC1icmFuY2guc2gKKysrIGIvdC90MzIwMC1icmFuY2guc2gKQEAgLTIwNiwxOCArMjA2LDIyIEBACiAJZ2l0IHdvcmt0cmVlIGFkZCAtZiBiYXpkaXIyIGJheiAmJgogCWdpdCBicmFuY2ggLU0gYmF6IGJhbSAmJgogCXRlc3QgJChnaXQgLUMgYmF6ZGlyIHJldi1wYXJzZSAtLWFiYnJldi1yZWYgSEVBRCkgPSBiYW0gJiYKLQl0ZXN0ICQoZ2l0IC1DIGJhemRpcjIgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKSA9IGJhbQorCXRlc3QgJChnaXQgLUMgYmF6ZGlyMiByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQpID0gYmFtICYmCisJcm0gLXIgYmF6ZGlyIGJhemRpcjIgJiYKKwlnaXQgd29ya3RyZWUgcHJ1bmUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtTSBiYXogYmFtIHNob3VsZCBzdWNjZWVkIHdpdGhpbiBhIHdvcmt0cmVlIGluIHdoaWNoIGJheiBpcyBjaGVja2VkIG91dCcgJwogCWdpdCBjaGVja291dCAtYiBiYXogJiYKLQlnaXQgd29ya3RyZWUgYWRkIC1mIGJhemRpcjMgYmF6ICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtZiBiYXpkaXIgYmF6ICYmCiAJKAotCQljZCBiYXpkaXIzICYmCisJCWNkIGJhemRpciAmJgogCQlnaXQgYnJhbmNoIC1NIGJheiBiYW0gJiYKIAkJdGVzdCAkKGdpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQpID0gYmFtCiAJKSAmJgotCXRlc3QgJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKSA9IGJhbQorCXRlc3QgJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKSA9IGJhbSAmJgorCXJtIC1yIGJhemRpciAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIG1hc3RlciBzaG91bGQgd29yayB3aGVuIG1hc3RlciBpcyBjaGVja2VkIG91dCcgJwpAQCAtODA0LDcgKzgwOCw5IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBjdXJyZW50bHkgY2hlY2tlZCBvdXQgYnJhbmNoIGZhaWxzJyAnCiAJZ2l0IHdvcmt0cmVlIGFkZCAtYiBteTcgbXk3ICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG15NyBicmFuY2ggLWQgbXk3ICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtZCBteTcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1kIG15NyAmJgorCXJtIC1yIG15NyAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tdHJhY2sgd2l0aG91dCAuZmV0Y2ggZW50cmllcycgJwpkaWZmIC0tZ2l0IGEvdC90MzIwMy1icmFuY2gtb3V0cHV0LnNoIGIvdC90MzIwMy1icmFuY2gtb3V0cHV0LnNoCmluZGV4IGJlNTUxNDguLjcxODE4YjkgMTAwNzU1Ci0tLSBhL3QvdDMyMDMtYnJhbmNoLW91dHB1dC5zaAorKysgYi90L3QzMjAzLWJyYW5jaC1vdXRwdXQuc2gKQEAgLTEzNiwxMCArMTM2LDEzIEBACiAJYnJhbmNoLXR3bwogCUVPRgogCWdpdCBjaGVja291dCBicmFuY2gtb25lICYmCi0JZ2l0IHdvcmt0cmVlIGFkZCB3b3JrdHJlZSBicmFuY2gtdHdvICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IHdvcmt0cmVlIHJlbW92ZSB3b3JrdHJlZV9kaXIKKwkiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCB3b3JrdHJlZV9kaXIgYnJhbmNoLXR3byAmJgogCXsKIAkJZ2l0IGJyYW5jaCAtLXNob3ctY3VycmVudCAmJgotCQlnaXQgLUMgd29ya3RyZWUgYnJhbmNoIC0tc2hvdy1jdXJyZW50CisJCWdpdCAtQyB3b3JrdHJlZV9kaXIgYnJhbmNoIC0tc2hvdy1jdXJyZW50CiAJfSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtMjg0LDYgKzI4NywyNCBAQAogCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmt0cmVlIGNvbG9ycyBjb3JyZWN0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJKiA8R1JFRU4+KEhFQUQgZGV0YWNoZWQgZnJvbSBmcm9tdGFnKTxSRVNFVD4KKwkgIGFtYmlndW91czxSRVNFVD4KKwkgIGJyYW5jaC1vbmU8UkVTRVQ+CisJKyA8Q1lBTj5icmFuY2gtdHdvPFJFU0VUPgorCSAgbWFzdGVyPFJFU0VUPgorCSAgcmVmLXRvLWJyYW5jaDxSRVNFVD4gLT4gYnJhbmNoLW9uZQorCSAgcmVmLXRvLXJlbW90ZTxSRVNFVD4gLT4gb3JpZ2luL2JyYW5jaC1vbmUKKwlFT0YKKwlnaXQgd29ya3RyZWUgYWRkIHdvcmt0cmVlX2RpciBicmFuY2gtdHdvICYmCisJZ2l0IGJyYW5jaCAtLWNvbG9yID5hY3R1YWwucmF3ICYmCisJcm0gLXIgd29ya3RyZWVfZGlyICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldCB1cCBjb2xvciB0ZXN0cyIgJwogCWVjaG8gIjxSRUQ+bWFzdGVyPFJFU0VUPiIgPmV4cGVjdC5jb2xvciAmJgogCWVjaG8gIm1hc3RlciIgPmV4cGVjdC5iYXJlICYmCkBAIC0zMDgsNCArMzI5LDIzIEBACiAJdGVzdF9jbXAgZXhwZWN0LmNvbG9yIGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIG91dHB1dCBsaXN0cyB3b3JrdHJlZSBwYXRoJyAnCisJb25lPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJdHdvPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IG1hc3RlcikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkqIChIRUFEIGRldGFjaGVkIGZyb20gZnJvbXRhZykgJG9uZSBvbmUKKwkgIGFtYmlndW91cyAgICAgICAgICAgICAgICAgICAgJG9uZSBvbmUKKwkgIGJyYW5jaC1vbmUgICAgICAgICAgICAgICAgICAgJHR3byB0d28KKwkrIGJyYW5jaC10d28gICAgICAgICAgICAgICAgICAgJG9uZSAoJChwd2QpL3dvcmt0cmVlX2Rpcikgb25lCisJICBtYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICR0d28gdHdvCisJICByZWYtdG8tYnJhbmNoICAgICAgICAgICAgICAgICR0d28gdHdvCisJICByZWYtdG8tcmVtb3RlICAgICAgICAgICAgICAgICR0d28gdHdvCisJRU9GCisJZ2l0IHdvcmt0cmVlIGFkZCB3b3JrdHJlZV9kaXIgYnJhbmNoLXR3byAmJgorCWdpdCBicmFuY2ggLXZ2ID5hY3R1YWwgJiYKKwlybSAtciB3b3JrdHJlZV9kaXIgJiYKKwlnaXQgd29ya3RyZWUgcHJ1bmUgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDYtcmFuZ2UtZGlmZi5zaCBiL3QvdDMyMDYtcmFuZ2UtZGlmZi5zaAppbmRleCAwNDhmZWFmLi5lYzU0ODY1IDEwMDc1NQotLS0gYS90L3QzMjA2LXJhbmdlLWRpZmYuc2gKKysrIGIvdC90MzIwNi1yYW5nZS1kaWZmLnNoCkBAIC05OSw3ICs5OSw3IEBACiAJMTogIDRkZTQ1N2QgPSAxOiAgYTRiMzMzMyBzLzUvQS8KIAkyOiAgZmNjY2UyMiA9IDI6ICBmNTFkMzcwIHMvNC9BLwogCTM6ICAxNDdlNjRlICEgMzogIDA1NTk1NTYgcy8xMS9CLwotCSAgICBAQCAtMTAsNyArMTAsNyBAQAorCSAgICBAQCBmaWxlOiBBCiAJICAgICAgOQogCSAgICAgIDEwCiAJICAgICAtMTEKQEAgLTEwOSw4ICsxMDksOCBAQAogCSAgICAgIDEzCiAJICAgICAgMTQKIAk0OiAgYTYzZTk5MiAhIDQ6ICBkOTY2YzVjIHMvMTIvQi8KLQkgICAgQEAgLTgsNyArOCw3IEBACi0JICAgICBAQAorCSAgICBAQCBmaWxlCisJICAgICBAQCBmaWxlOiBBCiAJICAgICAgOQogCSAgICAgIDEwCiAJICAgIC0gQgpAQCAtMTU4LDcgKzE1OCw3IEBACiAJMTogIDRkZTQ1N2QgPSAxOiAgYTRiMzMzMyBzLzUvQS8KIAkyOiAgZmNjY2UyMiA9IDI6ICBmNTFkMzcwIHMvNC9BLwogCTM6ICAxNDdlNjRlICEgMzogIDA1NTk1NTYgcy8xMS9CLwotCSAgICBAQCAtMTAsNyArMTAsNyBAQAorCSAgICBAQCBmaWxlOiBBCiAJICAgICAgOQogCSAgICAgIDEwCiAJICAgICAtMTEKQEAgLTE2OCw4ICsxNjgsOCBAQAogCSAgICAgIDEzCiAJICAgICAgMTQKIAk0OiAgYTYzZTk5MiAhIDQ6ICBkOTY2YzVjIHMvMTIvQi8KLQkgICAgQEAgLTgsNyArOCw3IEBACi0JICAgICBAQAorCSAgICBAQCBmaWxlCisJICAgICBAQCBmaWxlOiBBCiAJICAgICAgOQogCSAgICAgIDEwCiAJICAgIC0gQgpAQCAtMTgxLDYgKzE4MSw5MiBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWVkIGZpbGUnICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tc3VibW9kdWxlPWxvZyB0b3BpYy4uLnJlbmFtZWQtZmlsZSA+YWN0dWFsICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3RlZCA8PC1FT0YgJiYKKwkxOiAgNGRlNDU3ZCA9IDE6ICBmMjU4ZDc1IHMvNS9BLworCTI6ICBmY2NjZTIyICEgMjogIDAxN2I2MmQgcy80L0EvCisJICAgIEBAIE1ldGFkYXRhCisJICAgIFpBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4KKwkgICAgWgorCSAgICBaICMjIENvbW1pdCBtZXNzYWdlICMjCisJICAgIC0gICAgcy80L0EvCisJICAgICsgICAgcy80L0EvICsgcmVuYW1lIGZpbGUKKwkgICAgWgorCSAgICAtICMjIGZpbGUgIyMKKwkgICAgKyAjIyBmaWxlID0+IHJlbmFtZWQtZmlsZSAjIworCSAgICBaQEAKKwkgICAgWiAxCisJICAgIFogMgorCTM6ICAxNDdlNjRlICEgMzogIDNjZTdhZjYgcy8xMS9CLworCSAgICBAQCBNZXRhZGF0YQorCSAgICBaICMjIENvbW1pdCBtZXNzYWdlICMjCisJICAgIFogICAgcy8xMS9CLworCSAgICBaCisJICAgIC0gIyMgZmlsZSAjIworCSAgICAtQEAgZmlsZTogQQorCSAgICArICMjIHJlbmFtZWQtZmlsZSAjIworCSAgICArQEAgcmVuYW1lZC1maWxlOiBBCisJICAgIFogOAorCSAgICBaIDkKKwkgICAgWiAxMAorCTQ6ICBhNjNlOTkyICEgNDogIDFlNjIyNmIgcy8xMi9CLworCSAgICBAQCBNZXRhZGF0YQorCSAgICBaICMjIENvbW1pdCBtZXNzYWdlICMjCisJICAgIFogICAgcy8xMi9CLworCSAgICBaCisJICAgIC0gIyMgZmlsZSAjIworCSAgICAtQEAgZmlsZTogQQorCSAgICArICMjIHJlbmFtZWQtZmlsZSAjIworCSAgICArQEAgcmVuYW1lZC1maWxlOiBBCisJICAgIFogOQorCSAgICBaIDEwCisJICAgIFogQgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGFkZGVkIGFuZCBsYXRlciByZW1vdmVkJyAnCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLXN1Ym1vZHVsZT1sb2cgdG9waWMuLi5hZGRlZC1yZW1vdmVkID5hY3R1YWwgJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTE6ICA0ZGU0NTdkID0gMTogIDA5NmIxYmEgcy81L0EvCisJMjogIGZjY2NlMjIgISAyOiAgZDkyZTY5OCBzLzQvQS8KKwkgICAgQEAgTWV0YWRhdGEKKwkgICAgWkF1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorCSAgICBaCisJICAgIFogIyMgQ29tbWl0IG1lc3NhZ2UgIyMKKwkgICAgLSAgICBzLzQvQS8KKwkgICAgKyAgICBzLzQvQS8gKyBuZXctZmlsZQorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAKKwkgICAgQEAgZmlsZQorCSAgICBaIEEKKwkgICAgWiA2CisJICAgIFogNworCSAgICArCisJICAgICsgIyMgbmV3LWZpbGUgKG5ldykgIyMKKwkzOiAgMTQ3ZTY0ZSAhIDM6ICA5YTFkYjRkIHMvMTEvQi8KKwkgICAgQEAgTWV0YWRhdGEKKwkgICAgWkF1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorCSAgICBaCisJICAgIFogIyMgQ29tbWl0IG1lc3NhZ2UgIyMKKwkgICAgLSAgICBzLzExL0IvCisJICAgICsgICAgcy8xMS9CLyArIHJlbW92ZSBmaWxlCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQCBmaWxlOiBBCisJICAgIEBAIGZpbGU6IEEKKwkgICAgWiAxMgorCSAgICBaIDEzCisJICAgIFogMTQKKwkgICAgKworCSAgICArICMjIG5ldy1maWxlIChkZWxldGVkKSAjIworCTQ6ICBhNjNlOTkyID0gNDogIGZlYTNiNWMgcy8xMi9CLworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb21taXRzIG9uIG9uZSBzaWRlJyAnCiAJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJuZXcgbWVzc2FnZSIgJiYKIAlnaXQgcmFuZ2UtZGlmZiBtYXN0ZXIgSEVBREB7MX0gSEVBRApAQCAtMTkxLDE1ICsyNzcsMTUgQEAKIAlzZWQgcy9aL1wgL2cgPmV4cGVjdGVkIDw8LUVPRiAmJgogCTE6ICA0ZGU0NTdkID0gMTogIGY2ODYwMjQgcy81L0EvCiAJMjogIGZjY2NlMjIgISAyOiAgNGFiMDY3ZCBzLzQvQS8KLQkgICAgQEAgLTIsNiArMiw4IEBACi0JICAgIFoKKwkgICAgQEAgTWV0YWRhdGEKKwkgICAgWiAjIyBDb21taXQgbWVzc2FnZSAjIwogCSAgICBaICAgIHMvNC9BLwogCSAgICBaCiAJICAgICsgICAgQWxzbyBhIHNpbGx5IGNvbW1lbnQgaGVyZSEKIAkgICAgKwotCSAgICBaIGRpZmYgLS1naXQgYS9maWxlIGIvZmlsZQotCSAgICBaIC0tLSBhL2ZpbGUKLQkgICAgWiArKysgYi9maWxlCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAKKwkgICAgWiAxCiAJMzogIDE0N2U2NGUgPSAzOiAgYjljYjk1NiBzLzExL0IvCiAJNDogIGE2M2U5OTIgPSA0OiAgOGFkZDVmMSBzLzEyL0IvCiAJRU9GCkBAIC0yMTAsMTcgKzI5NiwxNyBAQAogCXNlZCAtZSAic3xeOnx8IiA+ZXhwZWN0IDw8LVxFT0YgJiYKIAk6PFlFTExPVz4xOiAgYTRiMzMzMyA9IDE6ICBmNjg2MDI0IHMvNS9BLzxSRVNFVD4KIAk6PFJFRD4yOiAgZjUxZDM3MCA8UkVTRVQ+PFlFTExPVz4hPFJFU0VUPjxHUkVFTj4gMjogIDRhYjA2N2Q8UkVTRVQ+PFlFTExPVz4gcy80L0EvPFJFU0VUPgotCTogICAgPFJFVkVSU0U+PENZQU4+QEAgLTIsNiArMiw4IEBAPFJFU0VUPgotCTogICAgIDxSRVNFVD4KKwk6ICAgIDxSRVZFUlNFPjxDWUFOPkBAPFJFU0VUPiA8UkVTRVQ+TWV0YWRhdGE8UkVTRVQ+CisJOiAgICAgICMjIENvbW1pdCBtZXNzYWdlICMjPFJFU0VUPgogCTogICAgICAgICBzLzQvQS88UkVTRVQ+CiAJOiAgICAgPFJFU0VUPgogCTogICAgPFJFVkVSU0U+PEdSRUVOPis8UkVTRVQ+PEJPTEQ+ICAgIEFsc28gYSBzaWxseSBjb21tZW50IGhlcmUhPFJFU0VUPgogCTogICAgPFJFVkVSU0U+PEdSRUVOPis8UkVTRVQ+Ci0JOiAgICAgIGRpZmYgLS1naXQgYS9maWxlIGIvZmlsZTxSRVNFVD4KLQk6ICAgICAgLS0tIGEvZmlsZTxSRVNFVD4KLQk6ICAgICAgKysrIGIvZmlsZTxSRVNFVD4KKwk6ICAgICAgIyMgZmlsZSAjIzxSRVNFVD4KKwk6ICAgIDxDWUFOPiBAQDxSRVNFVD4KKwk6ICAgICAgMTxSRVNFVD4KIAk6PFJFRD4zOiAgMDU1OTU1NiA8UkVTRVQ+PFlFTExPVz4hPFJFU0VUPjxHUkVFTj4gMzogIGI5Y2I5NTY8UkVTRVQ+PFlFTExPVz4gcy8xMS9CLzxSRVNFVD4KLQk6ICAgIDxSRVZFUlNFPjxDWUFOPkBAIC0xMCw3ICsxMCw3IEBAPFJFU0VUPgorCTogICAgPFJFVkVSU0U+PENZQU4+QEA8UkVTRVQ+IDxSRVNFVD5maWxlOiBBPFJFU0VUPgogCTogICAgICA5PFJFU0VUPgogCTogICAgICAxMDxSRVNFVD4KIAk6ICAgIDxSRUQ+IC0xMTxSRVNFVD4KQEAgLTIzMCw4ICszMTYsOCBAQAogCTogICAgICAxMzxSRVNFVD4KIAk6ICAgICAgMTQ8UkVTRVQ+CiAJOjxSRUQ+NDogIGQ5NjZjNWMgPFJFU0VUPjxZRUxMT1c+ITxSRVNFVD48R1JFRU4+IDQ6ICA4YWRkNWYxPFJFU0VUPjxZRUxMT1c+IHMvMTIvQi88UkVTRVQ+Ci0JOiAgICA8UkVWRVJTRT48Q1lBTj5AQCAtOCw3ICs4LDcgQEA8UkVTRVQ+Ci0JOiAgICA8Q1lBTj4gQEA8UkVTRVQ+CisJOiAgICA8UkVWRVJTRT48Q1lBTj5AQDxSRVNFVD4gPFJFU0VUPmZpbGU8UkVTRVQ+CisJOiAgICA8Q1lBTj4gQEAgZmlsZTogQTxSRVNFVD4KIAk6ICAgICAgOTxSRVNFVD4KIAk6ICAgICAgMTA8UkVTRVQ+CiAJOiAgICA8UkVWRVJTRT48UkVEPi08UkVTRVQ+PEZBSU5UPiBCQjxSRVNFVD4KZGlmZiAtLWdpdCBhL3QvdDMyMDYvaGlzdG9yeS5leHBvcnQgYi90L3QzMjA2L2hpc3RvcnkuZXhwb3J0CmluZGV4IGI4ZmZmZjAuLjdiYjM4MTQgMTAwNjQ0Ci0tLSBhL3QvdDMyMDYvaGlzdG9yeS5leHBvcnQKKysrIGIvdC90MzIwNi9oaXN0b3J5LmV4cG9ydApAQCAtMjIsOCArMjIsOCBAQAogMTkKIDIwCiAKLXJlc2V0IHJlZnMvaGVhZHMvcmVtb3ZlZAotY29tbWl0IHJlZnMvaGVhZHMvcmVtb3ZlZAorcmVzZXQgcmVmcy9oZWFkcy9yZW5hbWVkLWZpbGUKK2NvbW1pdCByZWZzL2hlYWRzL3JlbmFtZWQtZmlsZQogbWFyayA6MgogYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQyNDkyMSArMDIwMAogY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NDcyNCArMDIwMApAQCAtNTk5LDYgKzU5OSw4MiBAQAogZnJvbSA6NDYKIE0gMTAwNjQ0IDoyOCBmaWxlCiAKLXJlc2V0IHJlZnMvaGVhZHMvcmVtb3ZlZAotZnJvbSA6NDcKK2NvbW1pdCByZWZzL2hlYWRzL2FkZGVkLXJlbW92ZWQKK21hcmsgOjQ4CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDE0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIEd1bW1lcmVyIDx0Lmd1bW1lcmVyQGdtYWlsLmNvbT4gMTU1NjU3NDE1MSArMDEwMAorZGF0YSA3CitzLzUvQS8KK2Zyb20gOjIKK00gMTAwNjQ0IDozIGZpbGUKKworYmxvYgorbWFyayA6NDkKK2RhdGEgMAorCitjb21taXQgcmVmcy9oZWFkcy9hZGRlZC1yZW1vdmVkCittYXJrIDo1MAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAyNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NTY1NzQxNzcgKzAxMDAKK2RhdGEgMTgKK3MvNC9BLyArIG5ldy1maWxlCitmcm9tIDo0OAorTSAxMDA2NDQgOjUgZmlsZQorTSAxMDA2NDQgOjQ5IG5ldy1maWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL2FkZGVkLXJlbW92ZWQKK21hcmsgOjUxCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDM2ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIEd1bW1lcmVyIDx0Lmd1bW1lcmVyQGdtYWlsLmNvbT4gMTU1NjU3NDE3NyArMDEwMAorZGF0YSAyMgorcy8xMS9CLyArIHJlbW92ZSBmaWxlCitmcm9tIDo1MAorTSAxMDA2NDQgOjcgZmlsZQorRCBuZXctZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9hZGRlZC1yZW1vdmVkCittYXJrIDo1MgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTA0NCArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NTY1NzQxNzcgKzAxMDAKK2RhdGEgOAorcy8xMi9CLworZnJvbSA6NTEKK00gMTAwNjQ0IDo5IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvcmVuYW1lZC1maWxlCittYXJrIDo1MworYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAxNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NTY1NzQzMDkgKzAxMDAKK2RhdGEgNworcy81L0EvCitmcm9tIDoyCitNIDEwMDY0NCA6MyBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3JlbmFtZWQtZmlsZQorbWFyayA6NTQKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTU2NTc0MzEyICswMTAwCitkYXRhIDIxCitzLzQvQS8gKyByZW5hbWUgZmlsZQorZnJvbSA6NTMKK0QgZmlsZQorTSAxMDA2NDQgOjUgcmVuYW1lZC1maWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3JlbmFtZWQtZmlsZQorbWFyayA6NTUKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMzYgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTU2NTc0MzE5ICswMTAwCitkYXRhIDgKK3MvMTEvQi8KK2Zyb20gOjU0CitNIDEwMDY0NCA6NyByZW5hbWVkLWZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvcmVuYW1lZC1maWxlCittYXJrIDo1NgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTA0NCArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NTY1NzQzMTkgKzAxMDAKK2RhdGEgOAorcy8xMi9CLworZnJvbSA6NTUKK00gMTAwNjQ0IDo5IHJlbmFtZWQtZmlsZQogCmRpZmYgLS1naXQgYS90L3QzMzExLW5vdGVzLW1lcmdlLWZhbm91dC5zaCBiL3QvdDMzMTEtbm90ZXMtbWVyZ2UtZmFub3V0LnNoCmluZGV4IDkzNTE2ZWYuLjM3MTUxYTMgMTAwNzU1Ci0tLSBhL3QvdDMzMTEtbm90ZXMtbWVyZ2UtZmFub3V0LnNoCisrKyBiL3QvdDMzMTEtbm90ZXMtbWVyZ2UtZmFub3V0LnNoCkBAIC0xMTQsMTIgKzExNCwxMiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnQWRkIGEgZmV3IGh1bmRyZWQgY29tbWl0cyB3L25vdGVzIHRvIHRyaWdnZXIgZmFub3V0ICh4IC0+IHkpJyAnCiAJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveCAmJgogCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKLQlpPTUgJiYKLQl3aGlsZSB0ZXN0ICRpIC1sdCAkbnVtCisJdGVzdF9jb21taXRfYnVsayAtLXN0YXJ0PTYgLS1pZD1jb21taXQgJCgobnVtIC0gNSkpICYmCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgJCgobnVtIC0gNSkpCiAJZG8KLQkJaT0kKCgkaSArIDEpKSAmJgotCQl0ZXN0X2NvbW1pdCAiY29tbWl0JGkiID4vZGV2L251bGwgJiYKLQkJZ2l0IG5vdGVzIGFkZCAtbSAibm90ZXMgZm9yIGNvbW1pdCRpIiB8fCByZXR1cm4gMQorCQlnaXQgbm90ZXMgYWRkIC1tICJub3RlcyBmb3IgY29tbWl0JGkiIEhFQUR+JGkgfHwgcmV0dXJuIDEKKwkJaT0kKChpICsgMSkpCiAJZG9uZSAmJgogCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIiAhPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveCkiICYmCiAJIyBFeHBlY3RlZCBudW1iZXIgb2YgY29tbWl0cyBhbmQgbm90ZXMKZGlmZiAtLWdpdCBhL3QvdDM0MDAtcmViYXNlLnNoIGIvdC90MzQwMC1yZWJhc2Uuc2gKaW5kZXggNDJmMTQ3OC4uODBiMjNmZCAxMDA3NTUKLS0tIGEvdC90MzQwMC1yZWJhc2Uuc2gKKysrIGIvdC90MzQwMC1yZWJhc2Uuc2gKQEAgLTI4NSw3ICsyODUsNyBAQAogCXRlc3RfY21wIEZyb21fLm1zZyBvdXQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlLS1hbS5zaCBhbmQgLS1zaG93LWN1cnJlbnQtcGF0Y2gnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWFtIGFuZCAtLXNob3ctY3VycmVudC1wYXRjaCcgJwogCXRlc3RfY3JlYXRlX3JlcG8gY29uZmxpY3QtYXBwbHkgJiYKIAkoCiAJCWNkIGNvbmZsaWN0LWFwcGx5ICYmCmRpZmYgLS1naXQgYS90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaCBiL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoCmluZGV4IDE3MjNlMWEuLjQ2MWRkNTMgMTAwNzU1Ci0tLSBhL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoCisrKyBiL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoCkBAIC03NSwxMSArNzUsMTAgQEAKIAl0ZXN0X2xpbmVfY291bnQgPSA2IGFjdHVhbAogJwogCi1jYXQgPiBleHBlY3QgPDxFT0YKLWVycm9yOiBub3RoaW5nIHRvIGRvCi1FT0YKLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggZW1wdHkgSEVBRCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogbm90aGluZyB0byBkbworCUVPRgogCXNldF9mYWtlX2VkaXRvciAmJgogCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGV4ZWNfdHJ1ZSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiA+YWN0dWFsIDI+JjEgJiYKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbApAQCAtMjM3LDI1ICsyMzYsMjMgQEAKIAl0ZXN0IEcgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQogJwogCi1jYXQgPiBleHBlY3QgPDwgRU9GCi1kaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQotaW5kZXggZjcwZjEwZS4uZmQ3OTIzNSAxMDA2NDQKLS0tLSBhL2ZpbGUxCi0rKysgYi9maWxlMQotQEAgLTEgKzEgQEAKLS1BCi0rRwotRU9GCi0KLWNhdCA+IGV4cGVjdDIgPDwgRU9GCi08PDw8PDw8IEhFQUQKLUQKLT09PT09PT0KLUcKLT4+Pj4+Pj4gNWQxOGU1NC4uLiBHCi1FT0YKLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcCBvbiBjb25mbGljdGluZyBwaWNrJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCisJaW5kZXggZjcwZjEwZS4uZmQ3OTIzNSAxMDA2NDQKKwktLS0gYS9maWxlMQorCSsrKyBiL2ZpbGUxCisJQEAgLTEgKzEgQEAKKwktQQorCStHCisJRU9GCisJY2F0ID5leHBlY3QyIDw8LVxFT0YgJiYKKwk8PDw8PDw8IEhFQUQKKwlECisJPT09PT09PQorCUcKKwk+Pj4+Pj4+IDVkMThlNTQuLi4gRworCUVPRgogCWdpdCB0YWcgbmV3LWJyYW5jaDEgJiYKIAlzZXRfZmFrZV9lZGl0b3IgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIG1hc3RlciAmJgpAQCAtNDk1LDE1ICs0OTIsMTQgQEAKIAlnaXQgYnJhbmNoIC1EIGNvbmZsaWN0LXNxdWFzaAogJwogCi1jYXQgPiBleHBlY3Qtc3F1YXNoLWZpeHVwIDw8IEVPRgotQgotCi1ECi0KLU9OQ0UKLUVPRgotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnc3F1YXNoIGFuZCBmaXh1cCBnZW5lcmF0ZSBjb3JyZWN0IGxvZyBtZXNzYWdlcycgJworCWNhdCA+ZXhwZWN0LXNxdWFzaC1maXh1cCA8PC1cRU9GICYmCisJQgorCisJRAorCisJT05DRQorCUVPRgogCWdpdCBjaGVja291dCAtYiBzcXVhc2gtZml4dXAgRSAmJgogCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKIAlzZXRfZmFrZV9lZGl0b3IgJiYKQEAgLTc5OSwxMyArNzk1LDEyIEBACiAJdGVzdCAiYSBub3RlIiA9ICIkKGdpdCBub3RlcyBzaG93IEhFQUQpIgogJwogCi1jYXQgPmV4cGVjdCA8PEVPRgotYW4gZWFybGllciBub3RlCi0KLWEgbm90ZQotRU9GCi0KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjYW4gY29weSBub3RlcyBvdmVyIGEgZml4dXAnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYW4gZWFybGllciBub3RlCisKKwlhIG5vdGUKKwlFT0YKIAlnaXQgcmVzZXQgLS1oYXJkIG4zICYmCiAJZ2l0IG5vdGVzIGFkZCAtbSJhbiBlYXJsaWVyIG5vdGUiIG4yICYmCiAJc2V0X2Zha2VfZWRpdG9yICYmCkBAIC0xMDMxLDcgKzEwMjYsNyBAQAogCXRlc3QgLXogIiQoZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXAgSEVBRF4pIgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHdoZW4gcm9vdCBoYXMgdW50cmFja2VkIGZpbGUgY29uZmlsY3QnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3Qgd2hlbiByb290IGhhcyB1bnRyYWNrZWQgZmlsZSBjb25mbGljdCcgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVzZXRfcmViYXNlIiAmJgogCWdpdCBjaGVja291dCAtYiBmYWlsaW5nLXJvb3QtcGljayBBICYmCiAJZWNobyB4ID5maWxlMiAmJgpAQCAtMTMwNCw1MiArMTI5OSwzNyBAQAogCQlhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDxFT0YKLVdhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LgotRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6Ci0gLSAkKGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtMSBtYXN0ZXIpCi1UbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSAiZHJvcCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuCi0KLVVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiB3YXJuaW5ncy4KLVRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci4KLQotUmViYXNpbmcgKDEvNCkKLVJlYmFzaW5nICgyLzQpCi1SZWJhc2luZyAoMy80KQotUmViYXNpbmcgKDQvNCkKLVN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIHJlZnMvaGVhZHMvbWlzc2luZy1jb21taXQuCi1FT0YKLQotY3JfdG9fbmwgKCkgewotCXRyICdcMDE1JyAnXDAxMicKLX0KLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHJlc3BlY3RzIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrID0gd2FybicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCVdhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LgorCURyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOgorCSAtICQoZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC0xIG1hc3RlcikKKwlUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSAiZHJvcCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuCisJRU9GCiAJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgd2FybiAmJgogCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gbWlzc2luZy1jb21taXQgJiYKIAlzZXRfZmFrZV9lZGl0b3IgJiYKIAlGQUtFX0xJTkVTPSIxIDIgMyA0IiBcCiAJCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsLjIgJiYKLQljcl90b19ubCA8YWN0dWFsLjIgPmFjdHVhbCAmJgorCWhlYWQgLW40IGFjdHVhbC4yID5hY3R1YWwgJiYKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgogCXRlc3QgRCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCiAnCiAKLWNhdCA+ZXhwZWN0IDw8RU9GCi1XYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS4KLURyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOgotIC0gJChnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQgLTEgbWFzdGVyKQotIC0gJChnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQgLTEgbWFzdGVyfjIpCi1UbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSAiZHJvcCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuCi0KLVVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiB3YXJuaW5ncy4KLVRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci4KLQotWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScuCi1PciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy4KLUVPRgotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgcmVzcGVjdHMgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSBlcnJvcicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCVdhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LgorCURyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOgorCSAtICQoZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC0xIG1hc3RlcikKKwkgLSAkKGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtMSBtYXN0ZXJ+MikKKwlUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSAiZHJvcCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuCisKKwlVc2UgJ1wnJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snXCcnIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2Ygd2FybmluZ3MuCisJVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLgorCisJWW91IGNhbiBmaXggdGhpcyB3aXRoICdcJydnaXQgcmViYXNlIC0tZWRpdC10b2RvJ1wnJyBhbmQgdGhlbiBydW4gJ1wnJ2dpdCByZWJhc2UgLS1jb250aW51ZSdcJycuCisJT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ1wnJ2dpdCByZWJhc2UgLS1hYm9ydCdcJycuCisJRU9GCiAJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgZXJyb3IgJiYKIAlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIG1pc3NpbmctY29tbWl0ICYmCiAJc2V0X2Zha2VfZWRpdG9yICYmCmRpZmYgLS1naXQgYS90L3QzNDE4LXJlYmFzZS1jb250aW51ZS5zaCBiL3QvdDM0MTgtcmViYXNlLWNvbnRpbnVlLnNoCmluZGV4IGJkYWE1MTEuLjRlZmYxNGQgMTAwNzU1Ci0tLSBhL3QvdDM0MTgtcmViYXNlLWNvbnRpbnVlLnNoCisrKyBiL3QvdDM0MTgtcmViYXNlLWNvbnRpbnVlLnNoCkBAIC0yNjUsNCArMjY1LDEyIEBACiAJdGVzdF9pMThuZ3JlcCAiaGFzIGJlZW4gcmVzY2hlZHVsZWQiIGVycgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UucmVzY2hlZHVsZWZhaWxlZGV4ZWMgb25seSBhZmZlY3RzIGByZWJhc2UgLWlgJyAnCisJdGVzdF9jb25maWcgcmViYXNlLnJlc2NoZWR1bGVmYWlsZWRleGVjIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC14IGZhbHNlIEhFQUReICYmCisJZ3JlcCAiXmV4ZWMgZmFsc2UiIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCWdpdCByZWJhc2UgSEVBRF4KKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDIwLXJlYmFzZS1hdXRvc3Rhc2guc2ggYi90L3QzNDIwLXJlYmFzZS1hdXRvc3Rhc2guc2gKaW5kZXggMmQxMDk0ZS4uYjhmNGQwMyAxMDA3NTUKLS0tIGEvdC90MzQyMC1yZWJhc2UtYXV0b3N0YXNoLnNoCisrKyBiL3QvdDM0MjAtcmViYXNlLWF1dG9zdGFzaC5zaApAQCAtMzAsNyArMzAsOCBAQAogCWVjaG8gY29uZmxpY3RpbmctY2hhbmdlID5maWxlMiAmJgogCWdpdCBhZGQgLiAmJgogCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gInJlbGF0ZWQgY29tbWl0IgorCWdpdCBjb21taXQgLW0gInJlbGF0ZWQgY29tbWl0IiAmJgorCXJlbW92ZV9wcm9ncmVzc19yZT0iJChwcmludGYgInMvLipcXHIvLyIpIgogJwogCiBjcmVhdGVfZXhwZWN0ZWRfc3VjY2Vzc19hbSAoKSB7CkBAIC00OCw3ICs0OSw3IEBACiAJcV90b19jciA+ZXhwZWN0ZWQgPDwtRU9GCiAJJChncmVwICJeQ3JlYXRlZCBhdXRvc3Rhc2g6IFswLTlhLWZdWzAtOWEtZl0qXCQiIGFjdHVhbCkKIAlIRUFEIGlzIG5vdyBhdCAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBmZWF0dXJlLWJyYW5jaCkgdGhpcmQgY29tbWl0Ci0JUmViYXNpbmcgKDEvMilRUmViYXNpbmcgKDIvMilRQXBwbGllZCBhdXRvc3Rhc2guCisJQXBwbGllZCBhdXRvc3Rhc2guCiAJU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgcmVmcy9oZWFkcy9yZWJhc2VkLWZlYXR1cmUtYnJhbmNoLgogCUVPRgogfQpAQCAtNjcsMTAgKzY4LDEwIEBACiB9CiAKIGNyZWF0ZV9leHBlY3RlZF9mYWlsdXJlX2ludGVyYWN0aXZlICgpIHsKLQlxX3RvX2NyID5leHBlY3RlZCA8PC1FT0YKKwljYXQgPmV4cGVjdGVkIDw8LUVPRgogCSQoZ3JlcCAiXkNyZWF0ZWQgYXV0b3N0YXNoOiBbMC05YS1mXVswLTlhLWZdKlwkIiBhY3R1YWwpCiAJSEVBRCBpcyBub3cgYXQgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgZmVhdHVyZS1icmFuY2gpIHRoaXJkIGNvbW1pdAotCVJlYmFzaW5nICgxLzIpUVJlYmFzaW5nICgyLzIpUUFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuCisJQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy4KIAlZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLgogCVlvdSBjYW4gcnVuICJnaXQgc3Rhc2ggcG9wIiBvciAiZ2l0IHN0YXNoIGRyb3AiIGF0IGFueSB0aW1lLgogCVN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIHJlZnMvaGVhZHMvcmViYXNlZC1mZWF0dXJlLWJyYW5jaC4KQEAgLTEwOSw3ICsxMTAsOCBAQAogCQkJc3VmZml4PWludGVyYWN0aXZlCiAJCWZpICYmCiAJCWNyZWF0ZV9leHBlY3RlZF9zdWNjZXNzXyRzdWZmaXggJiYKLQkJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorCQlzZWQgIiRyZW1vdmVfcHJvZ3Jlc3NfcmUiIDxhY3R1YWwgPmFjdHVhbDIgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbDIKIAknCiAKIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogZGlydHkgaW5kZXgsIG5vbi1jb25mbGljdGluZyByZWJhc2UiICcKQEAgLTIwOSw3ICsyMTEsOCBAQAogCQkJc3VmZml4PWludGVyYWN0aXZlCiAJCWZpICYmCiAJCWNyZWF0ZV9leHBlY3RlZF9mYWlsdXJlXyRzdWZmaXggJiYKLQkJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorCQlzZWQgIiRyZW1vdmVfcHJvZ3Jlc3NfcmUiIDxhY3R1YWwgPmFjdHVhbDIgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbDIKIAknCiB9CiAKZGlmZiAtLWdpdCBhL3QvdDM0MzAtcmViYXNlLW1lcmdlcy5zaCBiL3QvdDM0MzAtcmViYXNlLW1lcmdlcy5zaAppbmRleCA0MmJhNWI5Li43YjZjNDg0IDEwMDc1NQotLS0gYS90L3QzNDMwLXJlYmFzZS1tZXJnZXMuc2gKKysrIGIvdC90MzQzMC1yZWJhc2UtbWVyZ2VzLnNoCkBAIC0xNjQsNiArMTY0LDE5IEBACiAJZ3JlcCAiXk1lcmdlIGJyYW5jaCAke1NRfUcke1NRfSQiIC5naXQvcmViYXNlLW1lcmdlL21lc3NhZ2UKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1mb3J3YXJkIG1lcmdlIC1jIHN0aWxsIHJld29yZHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgZmFzdC1mb3J3YXJkLW1lcmdlLWMgSCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ZWRpdGVkIFwKKwkJCUdJVF9TRVFVRU5DRV9FRElUT1I9ImVjaG8gbWVyZ2UgLWMgSCBHID4iIFwKKwkJCWdpdCByZWJhc2UgLWlyIEBeCisJKSAmJgorCWVjaG8gZWRpdGVkID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVCIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBhIGJyYW5jaCB0aXAgdGhhdCB3YXMgY2hlcnJ5LXBpY2tlZCBhbHJlYWR5JyAnCiAJZ2l0IGNoZWNrb3V0IC1iIGFscmVhZHktdXBzdHJlYW0gbWFzdGVyICYmCiAJYmFzZT0iJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgpAQCAtMjI0LDggKzIzNywyNCBAQAogCXRlc3RfY21wX3JldiBIRUFEICIkKGNhdCB3dC9iKSIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCBjbGVhbnMgdXAgcmVmcy9yZXdyaXR0ZW4nICcKKwlnaXQgY2hlY2tvdXQgLWIgYWJvcnQtY2xlYW5zLXJlZnMtcmV3cml0dGVuIEggJiYKKwlHSVRfU0VRVUVOQ0VfRURJVE9SPSJlY2hvIGJyZWFrID4+IiBnaXQgcmViYXNlIC1pciBAXiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZXdyaXR0ZW4vb250byAmJgorCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZXdyaXR0ZW4vb250bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXF1aXQgY2xlYW5zIHVwIHJlZnMvcmV3cml0dGVuJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHF1aXQtY2xlYW5zLXJlZnMtcmV3cml0dGVuIEggJiYKKwlHSVRfU0VRVUVOQ0VfRURJVE9SPSJlY2hvIGJyZWFrID4+IiBnaXQgcmViYXNlIC1pciBAXiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZXdyaXR0ZW4vb250byAmJgorCWdpdCByZWJhc2UgLS1xdWl0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3Jld3JpdHRlbi9vbnRvCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtcmV3cml0ZSBob29rIGFuZCBmaXh1cHMgd29yayBmb3IgbWVyZ2VzJyAnCi0JZ2l0IGNoZWNrb3V0IC1iIHBvc3QtcmV3cml0ZSAmJgorCWdpdCBjaGVja291dCAtYiBwb3N0LXJld3JpdGUgSCAmJgogCXRlc3RfY29tbWl0IHNhbWUxICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgogCXRlc3RfY29tbWl0IHNhbWUyICYmCmRpZmYgLS1naXQgYS90L3QzNTEwLWNoZXJyeS1waWNrLXNlcXVlbmNlLnNoIGIvdC90MzUxMC1jaGVycnktcGljay1zZXF1ZW5jZS5zaAppbmRleCA5NDFkNTAyLi43OTNiY2M3IDEwMDc1NQotLS0gYS90L3QzNTEwLWNoZXJyeS1waWNrLXNlcXVlbmNlLnNoCisrKyBiL3QvdDM1MTAtY2hlcnJ5LXBpY2stc2VxdWVuY2Uuc2gKQEAgLTkzLDYgKzkzLDEyOCBAQAogCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tc2tpcCByZXF1aXJlcyBjaGVycnktcGljayBpbiBwcm9ncmVzcycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgLS1za2lwIHJlcXVpcmVzIHJldmVydCBpbiBwcm9ncmVzcycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCAtLXNraXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1za2lwIHRvIHNraXAgY29tbWl0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IC0tc2tpcCAmJgorCWdpdCBjaGVycnktcGljayAtLXNraXAgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9DSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCAtLXNraXAgdG8gc2tpcCBjb21taXQnICcKKwlwcmlzdGluZV9kZXRhY2ggYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IGFub3RoZXJwaWNrfjEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwICYmCisJZ2l0IHJldmVydCAtLXNraXAgJiYKKwl0ZXN0X2NtcF9yZXYgYW5vdGhlcnBpY2sgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwICJlbXB0eSIgY29tbWl0JyAnCisJcHJpc3RpbmVfZGV0YWNoIHBpY2tlZCAmJgorCXRlc3RfY29tbWl0IGR1bW15IGZvbyBkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGFub3RoZXJwaWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCAmJgorCXRlc3RfY21wX3JldiBkdW1teSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXAgYSBjb21taXQgYW5kIGNoZWNrIGlmIHJlc3Qgb2Ygc2VxdWVuY2UgaXMgY29ycmVjdCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZWNobyBlID5leHBlY3QgJiYKKwljYXQgPmV4cGVjdC5sb2cgPDwtRU9GICYmCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCWZvbworCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQlmb28KKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JdW5yZWxhdGVkCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWZvbworCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJdW5yZWxhdGVkCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLnlldGFub3RoZXJwaWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCAmJgorCWVjaG8gZCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRPSURfUkVHRVgvT0JKSUQvZyIKKwl9ID5hY3R1YWwubG9nICYmCisJdGVzdF9jbXAgZXhwZWN0IGZvbyAmJgorCXRlc3RfY21wIGV4cGVjdC5sb2cgYWN0dWFsLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBhZHZpY2Ugd2hlbiB3ZSBtb3ZlIEhFQUQgYnkgY29tbWl0dGluZycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZXJyb3I6IHRoZXJlIGlzIG5vdGhpbmcgdG8gc2tpcAorCWhpbnQ6IGhhdmUgeW91IGNvbW1pdHRlZCBhbHJlYWR5PworCWhpbnQ6IHRyeSAiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUiCisJZmF0YWw6IGNoZXJyeS1waWNrIGZhaWxlZAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiYXNlLi55ZXRhbm90aGVycGljayAmJgorCWVjaG8gYyA+Zm9vICYmCisJZ2l0IGNvbW1pdCAtYSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLXNraXAgMj5hZHZpY2UgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFkdmljZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWxlY3RpdmVseSBhZHZpc2UgLS1za2lwIHdoaWxlIGxhdW5jaGluZyBhbm90aGVyIHNlcXVlbmNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwllcnJvcjogY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcworCWhpbnQ6IHRyeSAiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCB8IC0tcXVpdCkiCisJZmF0YWw6IGNoZXJyeS1waWNrIGZhaWxlZAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQuLnlldGFub3RoZXJwaWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZC4ueWV0YW5vdGhlcnBpY2sgMj5hZHZpY2UgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFkdmljZSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWVycm9yOiBjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzCisJaGludDogdHJ5ICJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLWFib3J0IHwgLS1xdWl0KSIKKwlmYXRhbDogY2hlcnJ5LXBpY2sgZmFpbGVkCisJRU9GCisJZ2l0IHJlc2V0IC0tbWVyZ2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkLi55ZXRhbm90aGVycGljayAyPmFkdmljZSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWR2aWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IHNraXBwaW5nIGNvbW1pdCBidXQgbm90IGFib3J0IGZvciBhIG5ldyBoaXN0b3J5JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwllcnJvcjogY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4KKwlmYXRhbDogY2hlcnJ5LXBpY2sgZmFpbGVkCisJRU9GCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ld19kaXNjb25uZWN0ZWQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGFub3RoZXJwaWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgMj5hZHZpY2UgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1za2lwICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhZHZpY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgc2tpcHBpbmcgc3RvcHBlZCBjaGVycnktcGljayBiZWNhdXNlIG9mIHVudHJhY2tlZCBmaWxlIG1vZGlmaWNhdGlvbnMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBybSAtLWNhY2hlZCB1bnJlbGF0ZWQgJiYKKwlnaXQgY29tbWl0IC1tICJ1bnRyYWNrIHVucmVsYXRlZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgaW5pdGlhbCBiYXNlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9DSEVSUllfUElDS19IRUFEICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc2tpcAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXF1aXQgZG9lcyBub3QgY29tcGxhaW4gd2hlbiBubyBjaGVycnktcGljayBpcyBpbiBwcm9ncmVzcycgJwogCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCiAJZ2l0IGNoZXJyeS1waWNrIC0tcXVpdApkaWZmIC0tZ2l0IGEvdC90MzYwMC1ybS5zaCBiL3QvdDM2MDAtcm0uc2gKaW5kZXggODVhZTdkYy4uNjYyODJhNyAxMDA3NTUKLS0tIGEvdC90MzYwMC1ybS5zaAorKysgYi90L3QzNjAwLXJtLnNoCkBAIC0yNTIsNiArMjUyLDE5IEBACiAJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9pbmRleC5sb2NrCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Jlc29sdmluZyBieSByZW1vdmFsIGlzIG5vdCBhIHdhcm5pbmctd29ydGh5IGV2ZW50JyAnCisJZ2l0IHJlc2V0IC1xIC0taGFyZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9pbmRleC5sb2NrIG1zZyAmJiBnaXQgcmVzZXQgLXEgLS1oYXJkIiAmJgorCWJsb2I9JChlY2hvIGJsb2IgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlmb3Igc3RhZ2UgaW4gMSAyIDMKKwlkbworCQllY2hvICIxMDA2NDQgJGJsb2IgJHN0YWdlCWJsb2IiCisJZG9uZSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJZ2l0IHJtIGJsb2IgPm1zZyAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAhICJuZWVkcyBtZXJnZSIgbXNnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC1zIC0tZXJyb3ItdW5tYXRjaCBibG9iCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlbW92ZXMgc3ViZGlyZWN0b3JpZXMgcmVjdXJzaXZlbHknICcKIAlta2RpciAtcCBkaXIvc3ViZGlyL3N1YnN1YmRpciAmJgogCWVjaG8gY29udGVudCA+ZGlyL3N1YmRpci9zdWJzdWJkaXIvZmlsZSAmJgpkaWZmIC0tZ2l0IGEvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2ggYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAppbmRleCA2NWRmYmMwLi42OTk5MWEzIDEwMDc1NQotLS0gYS90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaApAQCAtNjM5LDQgKzYzOSwxMiBAQAogCXRlc3RfY21wIGV4cGVjdGVkLTIgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1wIHdvcmtzIHdpdGggcGF0aG9sb2dpY2FsIGNvbnRleHQgbGluZXMnICcKKwl0ZXN0X3dyaXRlX2xpbmVzIGEgYSBhIGEgYSBhID5hICYmCisJZ2l0IGFkZCBhICYmCisJdGVzdF93cml0ZV9saW5lcyBhIGIgYSBiIGEgYiBhIGIgYSBiIGEgPiBhJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgbiBuIHkgcSB8IGdpdCBjaGVja291dCAtcCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYSBiIGEgYiBhIGEgYiBhIGIgYSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGEKKycKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwMy1zdGFzaC5zaCBiL3QvdDM5MDMtc3Rhc2guc2gKaW5kZXggZWEzMGQ1Zi4uYjhlMzM3OCAxMDA3NTUKLS0tIGEvdC90MzkwMy1zdGFzaC5zaAorKysgYi90L3QzOTAzLXN0YXNoLnNoCkBAIC03MDgsNiArNzA4LDI0IEBACiAJZ2l0IHN0YXNoIGRyb3AKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWQgcmVmIG9mIHRoZSBmb3JtICJuIiwgbiA8IE4nICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwllY2hvIGJhcjUgPmZpbGUgJiYKKwllY2hvIGJhcjYgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBzaG93IDAgJiYKKwlnaXQgc3Rhc2ggYnJhbmNoIHRtcCAwICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBhcHBseSAwICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBwb3AgMCAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBkcm9wIDAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2g6IGRvIG5vdCBkcm9wIHRoZSBzdGFzaCBpZiB0aGUgYnJhbmNoIGV4aXN0cycgJwogCWdpdCBzdGFzaCBjbGVhciAmJgogCWVjaG8gZm9vID5maWxlICYmCkBAIC0xMjE2LDQgKzEyMzQsMTEgQEAKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC0ta2VlcC1pbmRleCB3aXRoIGZpbGUgZGVsZXRlZCBpbiBpbmRleCBkb2VzIG5vdCByZXN1cnJlY3QgaXQgb24gZGlzaycgJworCXRlc3RfY29tbWl0IHRvLXJlbW92ZSB0by1yZW1vdmUgJiYKKwlnaXQgcm0gdG8tcmVtb3ZlICYmCisJZ2l0IHN0YXNoIC0ta2VlcC1pbmRleCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRvLXJlbW92ZQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKaW5kZXggYjZlMmZkYi4uY2E3ZGViZiAxMDA3NTUKLS0tIGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKKysrIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKQEAgLTM2LDggKzM2LDI3IEBACiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgogCWdpdCBkaWZmLXRyZWUgLXAgQzIgfCBnaXQgYXBwbHkgLS1pbmRleCAmJgogCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gIk1hc3RlciBhY2NlcHRzIG1vcmFsIGVxdWl2YWxlbnQgb2YgIzIiCisJZ2l0IGNvbW1pdCAtbSAiTWFzdGVyIGFjY2VwdHMgbW9yYWwgZXF1aXZhbGVudCBvZiAjMiIgJiYKIAorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHBhdGNoaWQgJiYKKwlmb3IgaSBpbiA1IDYgMSAyIDMgQSA0IEIgQyA3IDggOSAxMCBEIEUgRjsgZG8gZWNobyAiJGkiOyBkb25lID5maWxlMiAmJgorCWZvciBpIGluIDEgMiAzIEEgNCBCIEMgNyA4IDkgMTAgRCBFIEYgNSA2OyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUzICYmCisJZm9yIGkgaW4gOCA5IDEwOyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgZmlsZTIgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJwYXRjaGlkIDEiICYmCisJZm9yIGkgaW4gNCBBIEIgNyA4IDkgMTA7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZTIgJiYKKwlmb3IgaSBpbiA4IDkgMTAgNSA2OyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMiBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhdGNoaWQgMiIgJiYKKwlmb3IgaSBpbiAxMCA1IDY7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhdGNoaWQgMyIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIiAnCkBAIC03MzgsNiArNzU3LDc2IEBACiAJc2VkICIxLC9eLS0tJC9kIiBvdXQgfCBncmVwICJ0ZXN0IG1lc3NhZ2UiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBub3RlcyBvdXRwdXQgY29udHJvbCcgJworCWdpdCBub3RlcyBhZGQgLW0gIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBIRUFEICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgSEVBRCAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJISBncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vdGVzID5vdXQgJiYKKwlncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vLW5vdGVzID5vdXQgJiYKKwkhIGdyZXAgIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBvdXQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tbm90ZXMgLS1uby1ub3RlcyA+b3V0ICYmCisJISBncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vLW5vdGVzIC0tbm90ZXMgPm91dCAmJgorCWdyZXAgIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBvdXQgJiYKKworCXRlc3RfY29uZmlnIGZvcm1hdC5ub3RlcyB0cnVlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJZ3JlcCAibm90ZXMgY29uZmlnIG1lc3NhZ2UiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1ub3RlcyA+b3V0ICYmCisJZ3JlcCAibm90ZXMgY29uZmlnIG1lc3NhZ2UiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1uby1ub3RlcyA+b3V0ICYmCisJISBncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vdGVzIC0tbm8tbm90ZXMgPm91dCAmJgorCSEgZ3JlcCAibm90ZXMgY29uZmlnIG1lc3NhZ2UiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1uby1ub3RlcyAtLW5vdGVzID5vdXQgJiYKKwlncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB3aXRoIG11bHRpcGxlIG5vdGVzIHJlZnMnICcKKwlnaXQgbm90ZXMgLS1yZWYgbm90ZTEgYWRkIC1tICJ0aGlzIGlzIG5vdGUgMSIgSEVBRCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWYgbm90ZTEgcmVtb3ZlIEhFQUQgJiYKKwlnaXQgbm90ZXMgLS1yZWYgbm90ZTIgYWRkIC1tICJ0aGlzIGlzIG5vdGUgMiIgSEVBRCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWYgbm90ZTIgcmVtb3ZlIEhFQUQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPm91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1ub3Rlcz1ub3RlMSA+b3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1ub3Rlcz1ub3RlMiA+b3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1ub3Rlcz1ub3RlMSAtLW5vdGVzPW5vdGUyID5vdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCisJdGVzdF9jb25maWcgZm9ybWF0Lm5vdGVzIG5vdGUxICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1uby1ub3RlcyA+b3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vdGVzPW5vdGUyID5vdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1uby1ub3RlcyAtLW5vdGVzPW5vdGUyID5vdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisKKwlnaXQgY29uZmlnIC0tYWRkIGZvcm1hdC5ub3RlcyBub3RlMiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPm91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vLW5vdGVzID5vdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAyIiBvdXQKKycKKwogZWNobyAiZmF0YWw6IC0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiID4gZXhwZWN0Lm5hbWUtb25seQogZWNobyAiZmF0YWw6IC0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIgPiBleHBlY3QubmFtZS1zdGF0dXMKIGVjaG8gImZhdGFsOiAtLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiID4gZXhwZWN0LmNoZWNrCkBAIC0xNTU5LDcgKzE2NDgsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1iYXNlJyAnCi0JZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgY2hlY2tvdXQgcGF0Y2hpZCAmJgogCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1iYXNlPUhFQUR+MyAtMSB8IHRhaWwgLW4gNyA+YWN0dWFsMSAmJgogCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1iYXNlPUhFQUR+MyBIRUFEfi4uIHwgdGFpbCAtbiA3ID5hY3R1YWwyICYmCiAJZWNobyA+ZXhwZWN0ZWQgJiYKQEAgLTE1NjgsNyArMTY1NywxNCBAQAogCWVjaG8gInByZXJlcXVpc2l0ZS1wYXRjaC1pZDogJChnaXQgc2hvdyAtLXBhdGNoIEhFQUR+MSB8IGdpdCBwYXRjaC1pZCAtLXN0YWJsZSB8IGF3ayAie3ByaW50IFwkMX0iKSIgPj5leHBlY3RlZCAmJgogCXNpZ25hdHVyZSA+PiBleHBlY3RlZCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDEgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwyCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsMiAmJgorCWVjaG8gPmZhaWwgJiYKKwllY2hvICJiYXNlLWNvbW1pdDogJChnaXQgcmV2LXBhcnNlIEhFQUR+MykiID4+ZmFpbCAmJgorCWVjaG8gInByZXJlcXVpc2l0ZS1wYXRjaC1pZDogJChnaXQgc2hvdyAtLXBhdGNoIEhFQUR+MiB8IGdpdCBwYXRjaC1pZCAtLXVuc3RhYmxlIHwgYXdrICJ7cHJpbnQgXCQxfSIpIiA+PmZhaWwgJiYKKwllY2hvICJwcmVyZXF1aXNpdGUtcGF0Y2gtaWQ6ICQoZ2l0IHNob3cgLS1wYXRjaCBIRUFEfjEgfCBnaXQgcGF0Y2gtaWQgLS11bnN0YWJsZSB8IGF3ayAie3ByaW50IFwkMX0iKSIgPj5mYWlsICYmCisJc2lnbmF0dXJlID4+IGZhaWwgJiYKKwkhIHRlc3RfY21wIGZhaWwgYWN0dWFsMSAmJgorCSEgdGVzdF9jbXAgZmFpbCBhY3R1YWwyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLWJhc2UgZXJyb3JzIG91dCB3aGVuIGJhc2UgY29tbWl0IGlzIGluIHJldmlzaW9uIGxpc3QnICcKZGlmZiAtLWdpdCBhL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKaW5kZXggYWI0NjcwZC4uNmIwODdkZiAxMDA3NTUKLS0tIGEvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKKysrIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKQEAgLTIwMDgsNCArMjAwOCwyNiBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCisjIE5vdGUgdGhhdCB0aGUgIjYiIGluIHRoZSBleHBlY3RlZCBodW5rIGhlYWRlciBiZWxvdyBpcyBmdW5ueSwgc2luY2Ugd2Ugb25seQorIyBzaG93IDUgbGluZXMgKHRoZSBtaXNzaW5nIG9uZSB3YXMgYmxhbmsgYW5kIHRodXMgaWdub3JlZCkuIFRoaXMgaXMgaG93CisjIC0taWdub3JlLWJsYW5rLWxpbmVzIGJlaGF2ZXMgZXZlbiB3aXRob3V0IC0tZnVuY3Rpb24tY29udGV4dCwgYW5kIHRoaXMgdGVzdAorIyBpcyBqdXN0IGNoZWNraW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGUgdHdvIGZlYXR1cmVzLiBEb24ndCB0YWtlIGl0IGFzIGFuCisjIGVuZG9yc2VtZW50IG9mIHRoYXQgb3V0cHV0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZSAtLWlnbm9yZS1ibGFuay1saW5lcyB3aXRoIC0tZnVuY3Rpb24tY29udGV4dCcgJworCXRlc3Rfd3JpdGVfbGluZXMgMSAiIiAyIDMgNCA1ID5hICYmCisJdGVzdF93cml0ZV9saW5lcyAxICAgIDIgMyA0ICAgPmIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IFwKKwkJLS1pZ25vcmUtYmxhbmstbGluZXMgLS1mdW5jdGlvbi1jb250ZXh0IGEgYiA+YWN0dWFsLnJhdyAmJgorCXNlZCAtbiAiL0BALyxcJHAiIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJQEAgLTEsNiArMSw0IEBACisJIDEKKwkgMgorCSAzCisJIDQKKwktNQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2ggYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKaW5kZXggMjJmOWY4OC4uOTI2MWQ2ZCAxMDA3NTUKLS0tIGEvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCisrKyBiL3QvdDQwMTgtZGlmZi1mdW5jbmFtZS5zaApAQCAtNDMsNiArNDMsNyBAQAogCXBocAogCXB5dGhvbgogCXJ1YnkKKwlydXN0CiAJdGV4CiAJY3VzdG9tMQogCWN1c3RvbTIKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLWNsYXNzLWRlZmluaXRpb24gYi90L3Q0MDE4L21hdGxhYi1jbGFzcy1kZWZpbml0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZGFlZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L21hdGxhYi1jbGFzcy1kZWZpbml0aW9uCkBAIC0wLDAgKzEsNSBAQAorY2xhc3NkZWYgUklHSFQKKyAgICBwcm9wZXJ0aWVzCisgICAgICAgIENoYW5nZU1lCisgICAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLWZ1bmN0aW9uIGIvdC90NDAxOC9tYXRsYWItZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3YTliMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvbWF0bGFiLWZ1bmN0aW9uCkBAIC0wLDAgKzEsNCBAQAorZnVuY3Rpb24geSA9IFJJR0hUKCkKK3ggPSA1OworeSA9IENoYW5nZU1lICsgeDsKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9tYXRsYWItb2N0YXZlLXNlY3Rpb24tMSBiL3QvdDQwMTgvbWF0bGFiLW9jdGF2ZS1zZWN0aW9uLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiNmM0NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvbWF0bGFiLW9jdGF2ZS1zZWN0aW9uLTEKQEAgLTAsMCArMSwzIEBACislJSUgUklHSFQgc2VjdGlvbgorIyB0aGlzIGlzIG9jdGF2ZSBzY3JpcHQKK0NoYW5nZU1lID0gMTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLW9jdGF2ZS1zZWN0aW9uLTIgYi90L3Q0MDE4L21hdGxhYi1vY3RhdmUtc2VjdGlvbi0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMjk4MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L21hdGxhYi1vY3RhdmUtc2VjdGlvbi0yCkBAIC0wLDAgKzEsMyBAQAorIyMgUklHSFQgc2VjdGlvbgorIyB0aGlzIGlzIG9jdGF2ZSBzY3JpcHQKK0NoYW5nZU1lID0gMTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLXNlY3Rpb24gYi90L3Q0MDE4L21hdGxhYi1zZWN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYTU5YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L21hdGxhYi1zZWN0aW9uCkBAIC0wLDAgKzEsMyBAQAorJSUgUklHSFQgc2VjdGlvbgorJSB0aGlzIGlzIHVuZGVyc3Rvb2QgYnkgYm90aCBtYXRsYWIgYW5kIG9jdGF2ZQorQ2hhbmdlTWUgPSAxOwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9ydXN0LWZuIGIvdC90NDAxOC9ydXN0LWZuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZTAyMTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3J1c3QtZm4KQEAgLTAsMCArMSw1IEBACitwdWIoc2VsZikgZm4gUklHSFQ8VD4oeDogJltUXSkgd2hlcmUgVDogRGVidWcgeworICAgIGxldCBfID0geDsKKyAgICAvLyBhIGNvbW1lbnQKKyAgICBsZXQgYSA9IENoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9ydXN0LWltcGwgYi90L3Q0MDE4L3J1c3QtaW1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWRmM2NkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9ydXN0LWltcGwKQEAgLTAsMCArMSw1IEBACitpbXBsPCdhLCBUOiBBc1JlZjxbdThdPj4gIHN0ZDo6UklHSFQgZm9yIEdpdDwnYT4geworCisgICAgcHViIGZuIENoYW5nZU1lKCZzZWxmKSAtPiAoKSB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9ydXN0LXN0cnVjdCBiL3QvdDQwMTgvcnVzdC1zdHJ1Y3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhZmYxYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcnVzdC1zdHJ1Y3QKQEAgLTAsMCArMSw1IEBACisjW2Rlcml2ZShEZWJ1ZyldCitwdWIoc3VwZXIpIHN0cnVjdCBSSUdIVDwnYT4geworICAgIG5hbWU6ICYnYSBzdHIsCisgICAgYWdlOiBDaGFuZ2VNZSwKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvcnVzdC10cmFpdCBiL3QvdDQwMTgvcnVzdC10cmFpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTM5N2YwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9ydXN0LXRyYWl0CkBAIC0wLDAgKzEsNSBAQAordW5zYWZlIHRyYWl0IFJJR0hUPFQ+IHsKKyAgICBmbiBsZW4oJnNlbGYpIC0+IHUzMjsKKyAgICBmbiBDaGFuZ2VNZSgmc2VsZiwgbjogdTMyKSAtPiBUOworICAgIGZuIGl0ZXI8Rj4oJnNlbGYsIGY6IEYpIHdoZXJlIEY6IEZuKFQpOworfQpkaWZmIC0tZ2l0IGEvdC90NDIwMi1sb2cuc2ggYi90L3Q0MjAyLWxvZy5zaAppbmRleCA4MTljMjRkLi5jMjAyMDkzIDEwMDc1NQotLS0gYS90L3Q0MjAyLWxvZy5zaAorKysgYi90L3Q0MjAyLWxvZy5zaApAQCAtMzUyLDcgKzM1Miw3IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgd2l0aCB2YXJpb3VzIGdyZXAucGF0dGVyblR5cGUgY29uZmlndXJhdGlvbnMgJiBjb21tYW5kLWxpbmVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFGQUlMX1BSRVJFUVMgJ2xvZyB3aXRoIHZhcmlvdXMgZ3JlcC5wYXR0ZXJuVHlwZSBjb25maWd1cmF0aW9ucyAmIGNvbW1hbmQtbGluZXMnICcKIAlnaXQgaW5pdCBwYXR0ZXJuLXR5cGUgJiYKIAkoCiAJCWNkIHBhdHRlcm4tdHlwZSAmJgpkaWZmIC0tZ2l0IGEvdC90NDIwMy1tYWlsbWFwLnNoIGIvdC90NDIwMy1tYWlsbWFwLnNoCmluZGV4IDQzYjE1MjIuLjkxOGFkYTYgMTAwNzU1Ci0tLSBhL3QvdDQyMDMtbWFpbG1hcC5zaAorKysgYi90L3Q0MjAzLW1haWxtYXAuc2gKQEAgLTQ0Miw2ICs0NDIsMzQgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5tYWlsbWFwPWZhbHNlIGRpc2FibGVzIG1haWxtYXAnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQXV0aG9yOiBDVE8gPGN0b0Bjb29tcGFueS54eD4KKwlBdXRob3I6IGNsYXVzIDxtZUBjb21wYW55Lnh4PgorCUF1dGhvcjogc2FudGEgPG1lQGNvbXBhbnkueHg+CisJQXV0aG9yOiBuaWNrMiA8bmljazJAY29tcGFueS54eD4KKwlBdXRob3I6IG5pY2syIDxidWdzQGNvbXBhbnkueHg+CisJQXV0aG9yOiBuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgorCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwlFT0YKKwlnaXQgLWMgbG9nLm1haWxtYXA9RmFsc2UgbG9nIHwgZ3JlcCBBdXRob3IgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdXNlLW1haWxtYXAgZGlzYWJsZXMgbWFpbG1hcCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBdXRob3I6IENUTyA8Y3RvQGNvb21wYW55Lnh4PgorCUF1dGhvcjogY2xhdXMgPG1lQGNvbXBhbnkueHg+CisJQXV0aG9yOiBzYW50YSA8bWVAY29tcGFueS54eD4KKwlBdXRob3I6IG5pY2syIDxuaWNrMkBjb21wYW55Lnh4PgorCUF1dGhvcjogbmljazIgPGJ1Z3NAY29tcGFueS54eD4KKwlBdXRob3I6IG5pY2sxIDxidWdzQGNvbXBhbnkueHg+CisJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBsb2cgLS1uby11c2UtbWFpbG1hcCB8IGdyZXAgQXV0aG9yID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiBjYXQgPmV4cGVjdCA8PFxFT0YKIEF1dGhvcjogU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KIEF1dGhvcjogU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KQEAgLTQ2MSw2ICs0ODksMTEgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5tYWlsbWFwIGlzIHRydWUgYnkgZGVmYXVsdCB0aGVzZSBkYXlzJyAnCisJZ2l0IGxvZyAtLWF1dGhvciBTYW50YSB8IGdyZXAgQXV0aG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09ubHkgZ3JlcCByZXBsYWNlZCBhdXRob3Igd2l0aCAtLXVzZS1tYWlsbWFwJyAnCiAJZ2l0IGxvZyAtLXVzZS1tYWlsbWFwIC0tYXV0aG9yICI8Y3RvQGNvb21wYW55Lnh4PiIgPmFjdHVhbCAmJgogCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKZGlmZiAtLWdpdCBhL3QvdDUwMDAtdGFyLXRyZWUuc2ggYi90L3Q1MDAwLXRhci10cmVlLnNoCmluZGV4IDYwMmJmZDkuLjM3NjU1YTIgMTAwNzU1Ci0tLSBhL3QvdDUwMDAtdGFyLXRyZWUuc2gKKysrIGIvdC90NTAwMC10YXItdHJlZS5zaApAQCAtOTQsNiArOTQsMTMgQEAKIAknCiB9CiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GCisJb2JqIHNoYTE6MTlmOWM4MjczZWM0NWE4OTM4ZTY5OTljYjU5YjNmZjY2NzM5OTAyYQorCW9iaiBzaGEyNTY6M2M2NjZmNzk4Nzk4NjAxNTcxZjVjZWMwYWRiNTdjZTRhYmE4NTQ2ODc1ZTc2OTMxNzdlMDUzNWYzNGQyYzQ5YgorCUVPRgorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAncG9wdWxhdGUgd29ya2RpcicgXAogICAgICdta2RpciBhICYmCkBAIC0zNjksMTEgKzM3NiwxMCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIExPTkdfSVNfNjRCSVQgJ3NldCB1cCByZXBvc2l0b3J5IHdpdGggaHVnZSBibG9iJyAnCi0Jb2JqX2Q9MTkgJiYKLQlvYmpfZj1mOWM4MjczZWM0NWE4OTM4ZTY5OTljYjU5YjNmZjY2NzM5OTAyYSAmJgotCW9iaj0ke29ial9kfSR7b2JqX2Z9ICYmCi0JbWtkaXIgLXAgLmdpdC9vYmplY3RzLyRvYmpfZCAmJgotCWNwICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDAwLyRvYmogLmdpdC9vYmplY3RzLyRvYmpfZC8kb2JqX2YgJiYKKwlvYmo9JCh0ZXN0X29pZCBvYmopICYmCisJcGF0aD0kKHRlc3Rfb2lkX3RvX3BhdGggJG9iaikgJiYKKwlta2RpciAtcCAuZ2l0L29iamVjdHMvJChkaXJuYW1lICRwYXRoKSAmJgorCWNwICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDAwL2h1Z2Utb2JqZWN0IC5naXQvb2JqZWN0cy8kcGF0aCAmJgogCXJtIC1mIC5naXQvaW5kZXggJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCwkb2JqLGh1Z2UgJiYKIAlnaXQgY29tbWl0IC1tIGh1Z2UKZGlmZiAtLWdpdCBhL3QvdDUwMDAvMTlmOWM4MjczZWM0NWE4OTM4ZTY5OTljYjU5YjNmZjY2NzM5OTAyYSBiL3QvdDUwMDAvaHVnZS1vYmplY3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHQvdDUwMDAvMTlmOWM4MjczZWM0NWE4OTM4ZTY5OTljYjU5YjNmZjY2NzM5OTAyYQpyZW5hbWUgdG8gdC90NTAwMC9odWdlLW9iamVjdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MjAwLXVwZGF0ZS1zZXJ2ZXItaW5mby5zaCBiL3QvdDUyMDAtdXBkYXRlLXNlcnZlci1pbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIxYTU4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MjAwLXVwZGF0ZS1zZXJ2ZXItaW5mby5zaApAQCAtMCwwICsxLDQxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgdXBkYXRlLXNlcnZlci1pbmZvJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICd0ZXN0X2NvbW1pdCBmaWxlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgaW5mby9yZWZzJyAnCisJZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvaW5mby9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmeSBhbmQgc3RvcmUgbXRpbWUnICcKKwl0ZXN0LXRvb2wgY2htdGltZSA9MCAuZ2l0L2luZm8vcmVmcyAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC5naXQvaW5mby9yZWZzID5hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8vcmVmcyBpcyBub3QgbmVlZGxlc3NseSBvdmVyd3JpdHRlbicgJworCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAuZ2l0L2luZm8vcmVmcyA+YiAmJgorCXRlc3RfY21wIGEgYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvL3JlZnMgY2FuIGJlIGZvcmNlZCB0byB1cGRhdGUnICcKKwlnaXQgdXBkYXRlLXNlcnZlci1pbmZvIC1mICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLmdpdC9pbmZvL3JlZnMgPmIgJiYKKwkhIHRlc3RfY21wIGEgYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvL3JlZnMgdXBkYXRlcyB3aGVuIGNoYW5nZXMgYXJlIG1hZGUnICcKKwl0ZXN0LXRvb2wgY2htdGltZSA9MCAuZ2l0L2luZm8vcmVmcyAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC5naXQvaW5mby9yZWZzID5iICYmCisJdGVzdF9jbXAgYSBiICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9mb28gSEVBRCAmJgorCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAuZ2l0L2luZm8vcmVmcyA+YiAmJgorCSEgdGVzdF9jbXAgYSBiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMxMC1wYWNrLWJpdG1hcHMuc2ggYi90L3Q1MzEwLXBhY2stYml0bWFwcy5zaAppbmRleCBhMjZjOGJhLi42NjQwMzI5IDEwMDc1NQotLS0gYS90L3Q1MzEwLXBhY2stYml0bWFwcy5zaAorKysgYi90L3Q1MzEwLXBhY2stYml0bWFwcy5zaApAQCAtMjEsMTUgKzIxLDkgQEAKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbyB3aXRoIG1vZGVyYXRlLXNpemVkIGhpc3RvcnknICcKLQlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMTApCi0JZG8KLQkJdGVzdF9jb21taXQgJGkKLQlkb25lICYmCisJdGVzdF9jb21taXRfYnVsayAtLWlkPWZpbGUgMTAwICYmCiAJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIEhFQUR+NSAmJgotCWZvciBpIGluICQodGVzdF9zZXEgMSAxMCkKLQlkbwotCQl0ZXN0X2NvbW1pdCBzaWRlLSRpCi0JZG9uZSAmJgorCXRlc3RfY29tbWl0X2J1bGsgLS1pZD1zaWRlIDEwICYmCiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgogCWJpdG1hcHRpcD0kKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgogCWJsb2I9JChlY2hvIHRhZ2dlZC1ibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCkBAIC0xMDYsMTAgKzEwMCw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZ1cnRoZXIgbm9uLWJpdG1hcHBlZCBjb21taXRzJyAnCi0JZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDEwKQotCWRvCi0JCXRlc3RfY29tbWl0IGZ1cnRoZXItJGkKLQlkb25lCisJdGVzdF9jb21taXRfYnVsayAtLWlkPWZ1cnRoZXIgMTAKICcKIAogcmV2X2xpc3RfdGVzdHMgJ3BhcnRpYWwgYml0bWFwJwpkaWZmIC0tZ2l0IGEvdC90NTMxOC1jb21taXQtZ3JhcGguc2ggYi90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaAppbmRleCA4NDBhZDRkLi4yMmNiOWQ2IDEwMDc1NQotLS0gYS90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaAorKysgYi90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaApAQCAtMjAsNyArMjAsMTUgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIGdyYXBoIHdpdGggbm8gcGFja3MnICcKIAljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgogCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1vYmplY3QtZGlyIC4gJiYKLQl0ZXN0X3BhdGhfaXNfZmlsZSBpbmZvL2NvbW1pdC1ncmFwaAorCXRlc3RfcGF0aF9pc19taXNzaW5nIGluZm8vY29tbWl0LWdyYXBoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb3NlIHdpdGggY29ycmVjdCBlcnJvciBvbiBiYWQgaW5wdXQnICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWVjaG8gZG9lc25vdGV4aXN0ID5pbiAmJgorCXsgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLXBhY2tzIDxpbiAyPnN0ZGVycjsgcmV0PSQ/OyB9ICYmCisJdGVzdCAiJHJldCIgPSAxICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3IgYWRkaW5nIHBhY2siIHN0ZGVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY29tbWl0cyBhbmQgcmVwYWNrJyAnCmRpZmYgLS1naXQgYS90L3Q1MzE5LW11bHRpLXBhY2staW5kZXguc2ggYi90L3Q1MzE5LW11bHRpLXBhY2staW5kZXguc2gKaW5kZXggMWViZjE5ZS4uYzcyY2EwNCAxMDA3NTUKLS0tIGEvdC90NTMxOS1tdWx0aS1wYWNrLWluZGV4LnNoCisrKyBiL3QvdDUzMTktbXVsdGktcGFjay1pbmRleC5zaApAQCAtMzYzLDQgKzM2MywxODggQEAKIAkJImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBpcmUgdGVzdHMnICcKKwlta2RpciBkdXAgJiYKKwkoCisJCWNkIGR1cCAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0LXRvb2wgZ2VucmFuZG9tICJkYXRhIiA0MDk2ID5sYXJnZV9maWxlLnR4dCAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGxhcmdlX2ZpbGUudHh0ICYmCisJCWZvciBpIGluICQodGVzdF9zZXEgMSAyMCkKKwkJZG8KKwkJCXRlc3RfY29tbWl0ICRpCisJCWRvbmUgJiYKKwkJZ2l0IGJyYW5jaCBBIEhFQUQgJiYKKwkJZ2l0IGJyYW5jaCBCIEhFQUR+OCAmJgorCQlnaXQgYnJhbmNoIEMgSEVBRH4xMyAmJgorCQlnaXQgYnJhbmNoIEQgSEVBRH4xNiAmJgorCQlnaXQgYnJhbmNoIEUgSEVBRH4xOCAmJgorCQlnaXQgcGFjay1vYmplY3RzIC0tcmV2cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUEgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvQQorCQlecmVmcy9oZWFkcy9CCisJCUVPRgorCQlnaXQgcGFjay1vYmplY3RzIC0tcmV2cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUIgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvQgorCQlecmVmcy9oZWFkcy9DCisJCUVPRgorCQlnaXQgcGFjay1vYmplY3RzIC0tcmV2cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUMgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvQworCQlecmVmcy9oZWFkcy9ECisJCUVPRgorCQlnaXQgcGFjay1vYmplY3RzIC0tcmV2cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUQgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvRAorCQlecmVmcy9oZWFkcy9FCisJCUVPRgorCQlnaXQgcGFjay1vYmplY3RzIC0tcmV2cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUUgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvRQorCQlFT0YKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggd3JpdGUgJiYKKwkJY3AgLXIgLmdpdC9vYmplY3RzL3BhY2sgLmdpdC9vYmplY3RzL3BhY2stYmFja3VwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgZG9lcyBub3QgcmVtb3ZlIGFueSBwYWNrcycgJworCSgKKwkJY2QgZHVwICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrID5leHBlY3QgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggZXhwaXJlICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHJlbW92ZXMgdW5yZWZlcmVuY2VkIHBhY2tzJyAnCisJKAorCQljZCBkdXAgJiYKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1jb21iaW5lZCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9BCisJCV5yZWZzL2hlYWRzL0MKKwkJRU9GCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrIHwgZ3JlcCAtdiAtZSBwYWNrLVtBQl0gPmV4cGVjdCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCBleHBpcmUgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2sgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrLyB8IGdyZXAgaWR4ID5leHBlY3QtaWR4ICYmCisJCXRlc3QtdG9vbCByZWFkLW1pZHggLmdpdC9vYmplY3RzIHwgZ3JlcCBpZHggPmFjdHVhbC1taWR4ICYmCisJCXRlc3RfY21wIGV4cGVjdC1pZHggYWN0dWFsLW1pZHggJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5ICYmCisJCWdpdCBmc2NrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgd2l0aCBtaW5pbXVtIHNpemUgZG9lcyBub3QgYWx0ZXIgZXhpc3RpbmcgcGFja3MnICcKKwkoCisJCWNkIGR1cCAmJgorCQlybSAtcmYgLmdpdC9vYmplY3RzL3BhY2sgJiYKKwkJbXYgLmdpdC9vYmplY3RzL3BhY2stYmFja3VwIC5naXQvb2JqZWN0cy9wYWNrICYmCisJCXRvdWNoIC1tIC10IDIwMTkwMTAxMDAwMCAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUQqICYmCisJCXRvdWNoIC1tIC10IDIwMTkwMTAxMDAwMSAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUMqICYmCisJCXRvdWNoIC1tIC10IDIwMTkwMTAxMDAwMiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUIqICYmCisJCXRvdWNoIC1tIC10IDIwMTkwMTAxMDAwMyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUEqICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrID5leHBlY3QgJiYKKwkJTUlOU0laRT0kKHRlc3QtdG9vbCBwYXRoLXV0aWxzIGZpbGUtc2l6ZSAuZ2l0L29iamVjdHMvcGFjay8qcGFjayB8IHNvcnQgLW4gfCBoZWFkIC1uIDEpICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHJlcGFjayAtLWJhdGNoLXNpemU9JE1JTlNJWkUgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2sgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgY3JlYXRlcyBhIG5ldyBwYWNrJyAnCisJKAorCQljZCBkdXAgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2svKmlkeCA+aWR4LWxpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBpZHgtbGlzdCAmJgorCQlUSElSRF9TTUFMTEVTVF9TSVpFPSQodGVzdC10b29sIHBhdGgtdXRpbHMgZmlsZS1zaXplIC5naXQvb2JqZWN0cy9wYWNrLypwYWNrIHwgc29ydCAtbiB8IGhlYWQgLW4gMyB8IHRhaWwgLW4gMSkgJiYKKwkJQkFUQ0hfU0laRT0kKCgkVEhJUkRfU01BTExFU1RfU0laRSArIDEpKSAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCByZXBhY2sgLS1iYXRjaC1zaXplPSRCQVRDSF9TSVpFICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrLyppZHggPmlkeC1saXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgaWR4LWxpc3QgJiYKKwkJdGVzdC10b29sIHJlYWQtbWlkeCAuZ2l0L29iamVjdHMgfCBncmVwIGlkeCA+bWlkeC1saXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgbWlkeC1saXN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgcmVtb3ZlcyByZXBhY2tlZCBwYWNrcycgJworCSgKKwkJY2QgZHVwICYmCisJCWxzIC1hbCAuZ2l0L29iamVjdHMvcGFjay8qcGFjayAmJgorCQlscyAtUyAuZ2l0L29iamVjdHMvcGFjay8qcGFjayB8IGhlYWQgLW4gNCA+ZXhwZWN0ICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IGV4cGlyZSAmJgorCQlscyAtUyAuZ2l0L29iamVjdHMvcGFjay8qcGFjayA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdC10b29sIHJlYWQtbWlkeCAuZ2l0L29iamVjdHMgfCBncmVwIGlkeCA+bWlkeC1saXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgbWlkeC1saXN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgd29ya3Mgd2hlbiBhZGRpbmcgbmV3IHBhY2tzJyAnCisJKAorCQljZCBkdXAgJiYKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1jb21iaW5lZCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9BCisJCV5yZWZzL2hlYWRzL0IKKwkJRU9GCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stY29tYmluZWQgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvQgorCQlecmVmcy9oZWFkcy9DCisJCUVPRgorCQlnaXQgcGFjay1vYmplY3RzIC0tcmV2cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLWNvbWJpbmVkIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0MKKwkJXnJlZnMvaGVhZHMvRAorCQlFT0YKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggd3JpdGUgJiYKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svYS1wYWNrIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0QKKwkJXnJlZnMvaGVhZHMvRQorCQlFT0YKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggd3JpdGUgJiYKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svei1wYWNrIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0UKKwkJRU9GCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IGV4cGlyZSAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjay8gfCBncmVwIGlkeCA+ZXhwZWN0ICYmCisJCXRlc3QtdG9vbCByZWFkLW1pZHggLmdpdC9vYmplY3RzIHwgZ3JlcCBpZHggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHJlc3BlY3RzIC5rZWVwIGZpbGVzJyAnCisJKAorCQljZCBkdXAgJiYKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1hbGwgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvQQorCQlFT0YKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggd3JpdGUgJiYKKwkJUEFDS0E9JChscyAuZ2l0L29iamVjdHMvcGFjay9hLXBhY2sqXC5wYWNrIHwgc2VkIHMvXC5wYWNrXCQvLykgJiYKKwkJdG91Y2ggJFBBQ0tBLmtlZXAgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggZXhwaXJlICYmCisJCWxzIC1TIC5naXQvb2JqZWN0cy9wYWNrL2EtcGFjayogfCBncmVwICRQQUNLQSA+YS1wYWNrLWZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgYS1wYWNrLWZpbGVzICYmCisJCXRlc3QtdG9vbCByZWFkLW1pZHggLmdpdC9vYmplY3RzIHwgZ3JlcCBpZHggPm1pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG1pZHgtbGlzdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIC0tYmF0Y2gtc2l6ZT0wIHJlcGFja3MgZXZlcnl0aGluZycgJworCSgKKwkJY2QgZHVwICYmCisJCXJtIC5naXQvb2JqZWN0cy9wYWNrLyoua2VlcCAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjay8qaWR4ID5pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGlkeC1saXN0ICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHJlcGFjayAtLWJhdGNoLXNpemU9MCAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjay8qaWR4ID5pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGlkeC1saXN0ICYmCisJCXRlc3QtdG9vbCByZWFkLW1pZHggLmdpdC9vYmplY3RzIHwgZ3JlcCBpZHggPm1pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG1pZHgtbGlzdCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCBleHBpcmUgJiYKKwkJbHMgLWFsIC5naXQvb2JqZWN0cy9wYWNrLyppZHggPmlkeC1saXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgaWR4LWxpc3QgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggcmVwYWNrIC0tYmF0Y2gtc2l6ZT0wICYmCisJCWxzIC1hbCAuZ2l0L29iamVjdHMvcGFjay8qaWR4ID5uZXctaWR4LWxpc3QgJiYKKwkJdGVzdF9jbXAgaWR4LWxpc3QgbmV3LWlkeC1saXN0CisJKQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMjQtc3BsaXQtY29tbWl0LWdyYXBoLnNoIGIvdC90NTMyNC1zcGxpdC1jb21taXQtZ3JhcGguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDNmNDVhMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMjQtc3BsaXQtY29tbWl0LWdyYXBoLnNoCkBAIC0wLDAgKzEsMzQzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3BsaXQgY29tbWl0IGdyYXBoJworLiAuL3Rlc3QtbGliLnNoCisKK0dJVF9URVNUX0NPTU1JVF9HUkFQSD0wCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8nICcKKwlnaXQgaW5pdCAmJgorCWdpdCBjb25maWcgY29yZS5jb21taXRHcmFwaCB0cnVlICYmCisJaW5mb2Rpcj0iLmdpdC9vYmplY3RzL2luZm8iICYmCisJZ3JhcGhkaXI9IiRpbmZvZGlyL2NvbW1pdC1ncmFwaHMiICYmCisJdGVzdF9vaWRfaW5pdAorJworCitncmFwaF9yZWFkX2V4cGVjdCgpIHsKKwlOVU1fQkFTRT0wCisJaWYgdGVzdCAhIC16ICQyCisJdGhlbgorCQlOVU1fQkFTRT0kMgorCWZpCisJY2F0ID5leHBlY3QgPDwtIEVPRgorCWhlYWRlcjogNDM0NzUwNDggMSAxIDMgJE5VTV9CQVNFCisJbnVtX2NvbW1pdHM6ICQxCisJY2h1bmtzOiBvaWRfZmFub3V0IG9pZF9sb29rdXAgY29tbWl0X21ldGFkYXRhCisJRU9GCisJZ2l0IGNvbW1pdC1ncmFwaCByZWFkID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBjb21taXRzIGFuZCB3cml0ZSBjb21taXQtZ3JhcGgnICcKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDMpCisJZG8KKwkJdGVzdF9jb21taXQgJGkgJiYKKwkJZ2l0IGJyYW5jaCBjb21taXRzLyRpIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkaW5mb2Rpci9jb21taXQtZ3JhcGggJiYKKwlncmFwaF9yZWFkX2V4cGVjdCAzCisnCisKK2dyYXBoX2dpdF90d29fbW9kZXMoKSB7CisJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9dHJ1ZSAkMSA+b3V0cHV0CisJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgJDEgPmV4cGVjdAorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKK30KKworZ3JhcGhfZ2l0X2JlaGF2aW9yKCkgeworCU1TRz0kMQorCUJSQU5DSD0kMgorCUNPTVBBUkU9JDMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayBub3JtYWwgZ2l0IG9wZXJhdGlvbnM6ICRNU0ciICcKKwkJZ3JhcGhfZ2l0X3R3b19tb2RlcyAibG9nIC0tb25lbGluZSAkQlJBTkNIIiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJsb2cgLS10b3BvLW9yZGVyICRCUkFOQ0giICYmCisJCWdyYXBoX2dpdF90d29fbW9kZXMgImxvZyAtLWdyYXBoICRDT01QQVJFLi4kQlJBTkNIIiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJicmFuY2ggLXZ2IiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJtZXJnZS1iYXNlIC1hICRCUkFOQ0ggJENPTVBBUkUiCisJJworfQorCitncmFwaF9naXRfYmVoYXZpb3IgJ2dyYXBoIGV4aXN0cycgY29tbWl0cy8zIGNvbW1pdHMvMQorCit2ZXJpZnlfY2hhaW5fZmlsZXNfZXhpc3QoKSB7CisJZm9yIGhhc2ggaW4gJChjYXQgJDEvY29tbWl0LWdyYXBoLWNoYWluKQorCWRvCisJCXRlc3RfcGF0aF9pc19maWxlICQxL2dyYXBoLSRoYXNoLmdyYXBoIHx8IHJldHVybiAxCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbW9yZSBjb21taXRzLCBhbmQgd3JpdGUgYSBuZXcgYmFzZSBncmFwaCcgJworCWdpdCByZXNldCAtLWhhcmQgY29tbWl0cy8xICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSA0IDUpCisJZG8KKwkJdGVzdF9jb21taXQgJGkgJiYKKwkJZ2l0IGJyYW5jaCBjb21taXRzLyRpIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0cy8yICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSA2IDEwKQorCWRvCisJCXRlc3RfY29tbWl0ICRpICYmCisJCWdpdCBicmFuY2ggY29tbWl0cy8kaSB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvMiAmJgorCWdpdCBtZXJnZSBjb21taXRzLzQgJiYKKwlnaXQgYnJhbmNoIG1lcmdlLzEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvNCAmJgorCWdpdCBtZXJnZSBjb21taXRzLzYgJiYKKwlnaXQgYnJhbmNoIG1lcmdlLzIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJZ3JhcGhfcmVhZF9leHBlY3QgMTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yayBhbmQgZmFpbCB0byBiYXNlIGEgY2hhaW4gb24gYSBjb21taXQtZ3JhcGggZmlsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgZm9yayAmJgorCWdpdCBjbG9uZSAuIGZvcmsgJiYKKwkoCisJCWNkIGZvcmsgJiYKKwkJcm0gLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoICYmCisJCWVjaG8gIiQocHdkKS8uLi8uZ2l0L29iamVjdHMiID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCXRlc3RfY29tbWl0IG5ldy1jb21taXQgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXZlcmlmeV9jaGFpbl9maWxlc19leGlzdCAkZ3JhcGhkaXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB0aHJlZSBtb3JlIGNvbW1pdHMsIHdyaXRlIGEgdGlwIGdyYXBoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXRzLzMgJiYKKwlnaXQgbWVyZ2UgbWVyZ2UvMSAmJgorCWdpdCBtZXJnZSBjb21taXRzLzUgJiYKKwlnaXQgbWVyZ2UgbWVyZ2UvMiAmJgorCWdpdCBicmFuY2ggbWVyZ2UvMyAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICRpbmZvZGlyL2NvbW1pdC1ncmFwaCAmJgorCXRlc3RfcGF0aF9pc19maWxlICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwlscyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+Z3JhcGgtZmlsZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGdyYXBoLWZpbGVzICYmCisJdmVyaWZ5X2NoYWluX2ZpbGVzX2V4aXN0ICRncmFwaGRpcgorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ3NwbGl0IGNvbW1pdC1ncmFwaDogbWVyZ2UgMyB2cyAyJyBtZXJnZS8zIG1lcmdlLzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG9uZSBjb21taXQsIHdyaXRlIGEgdGlwIGdyYXBoJyAnCisJdGVzdF9jb21taXQgMTEgJiYKKwlnaXQgYnJhbmNoIGNvbW1pdHMvMTEgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlIC0tc3BsaXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkaW5mb2Rpci9jb21taXQtZ3JhcGggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJbHMgJGdyYXBoZGlyL2dyYXBoLSouZ3JhcGggPmdyYXBoLWZpbGVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBncmFwaC1maWxlcyAmJgorCXZlcmlmeV9jaGFpbl9maWxlc19leGlzdCAkZ3JhcGhkaXIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICd0aHJlZS1sYXllciBjb21taXQtZ3JhcGg6IGNvbW1pdCAxMSB2cyA2JyBjb21taXRzLzExIGNvbW1pdHMvNgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgb25lIGNvbW1pdCwgd3JpdGUgYSBtZXJnZWQgZ3JhcGgnICcKKwl0ZXN0X2NvbW1pdCAxMiAmJgorCWdpdCBicmFuY2ggY29tbWl0cy8xMiAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAmJgorCXRlc3RfcGF0aF9pc19maWxlICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwlscyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+Z3JhcGgtZmlsZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGdyYXBoLWZpbGVzICYmCisJdmVyaWZ5X2NoYWluX2ZpbGVzX2V4aXN0ICRncmFwaGRpcgorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ21lcmdlZCBjb21taXQtZ3JhcGg6IGNvbW1pdCAxMiB2cyA2JyBjb21taXRzLzEyIGNvbW1pdHMvNgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZm9yayBhbmQgY2hhaW4gYWNyb3NzIGFsdGVybmF0ZScgJworCWdpdCBjbG9uZSAuIGZvcmsgJiYKKwkoCisJCWNkIGZvcmsgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwkJcm0gLXJmICRncmFwaGRpciAmJgorCQllY2hvICIkKHB3ZCkvLi4vLmdpdC9vYmplY3RzIiA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0X2NvbW1pdCAxMyAmJgorCQlnaXQgYnJhbmNoIGNvbW1pdHMvMTMgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCWxzICRncmFwaGRpci9ncmFwaC0qLmdyYXBoID5ncmFwaC1maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGdyYXBoLWZpbGVzICYmCisJCWdpdCAtYyBjb3JlLmNvbW1pdEdyYXBoPXRydWUgIHJldi1saXN0IEhFQUQgPmV4cGVjdCAmJgorCQlnaXQgLWMgY29yZS5jb21taXRHcmFwaD1mYWxzZSByZXYtbGlzdCBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQl0ZXN0X2NvbW1pdCAxNCAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlIC0tc3BsaXQgLS1vYmplY3QtZGlyPS5naXQvb2JqZWN0cy8gJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCWxzICRncmFwaGRpci9ncmFwaC0qLmdyYXBoID5ncmFwaC1maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGdyYXBoLWZpbGVzCisJKQorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ2FsdGVybmF0ZTogY29tbWl0IDEzIHZzIDYnIGNvbW1pdHMvMTMgY29tbWl0cy82CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgbWVyZ2Ugc3RyYWdldHkgY29uc3RhbnRzJyAnCisJZ2l0IGNsb25lIC4gbWVyZ2UtMiAmJgorCSgKKwkJY2QgbWVyZ2UtMiAmJgorCQlnaXQgY29uZmlnIGNvcmUuY29tbWl0R3JhcGggdHJ1ZSAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJdGVzdF9jb21taXQgMTQgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0IC0tc2l6ZS1tdWx0aXBsZT0yICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbgorCisJKSAmJgorCWdpdCBjbG9uZSAuIG1lcmdlLTEwICYmCisJKAorCQljZCBtZXJnZS0xMCAmJgorCQlnaXQgY29uZmlnIGNvcmUuY29tbWl0R3JhcGggdHJ1ZSAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJdGVzdF9jb21taXQgMTQgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0IC0tc2l6ZS1tdWx0aXBsZT0xMCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJbHMgJGdyYXBoZGlyL2dyYXBoLSouZ3JhcGggPmdyYXBoLWZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgZ3JhcGgtZmlsZXMKKwkpICYmCisJZ2l0IGNsb25lIC4gbWVyZ2UtMTAtZXhwaXJlICYmCisJKAorCQljZCBtZXJnZS0xMC1leHBpcmUgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXRlc3RfY29tbWl0IDE1ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAtLXNpemUtbXVsdGlwbGU9MTAgLS1leHBpcmUtdGltZT0xOTgwLTAxLTAxICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQlscyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+Z3JhcGgtZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBncmFwaC1maWxlcworCSkgJiYKKwlnaXQgY2xvbmUgLS1uby1oYXJkbGlua3MgLiBtYXgtY29tbWl0cyAmJgorCSgKKwkJY2QgbWF4LWNvbW1pdHMgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXRlc3RfY29tbWl0IDE2ICYmCisJCXRlc3RfY29tbWl0IDE3ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAtLW1heC1jb21taXRzPTEgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCWxzICRncmFwaGRpci9ncmFwaC0qLmdyYXBoID5ncmFwaC1maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGdyYXBoLWZpbGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgY29tbWl0LWdyYXBoLWNoYWluIGZpbGUgYWZ0ZXIgZmxhdHRlbmluZycgJworCWdpdCBjbG9uZSAuIGZsYXR0ZW4gJiYKKwkoCisJCWNkIGZsYXR0ZW4gJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQlscyAkZ3JhcGhkaXIgPmdyYXBoLWZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgZ3JhcGgtZmlsZXMKKwkpCisnCisKK2NvcnJ1cHRfZmlsZSgpIHsKKwlmaWxlPSQxCisJcG9zPSQyCisJZGF0YT0iJHszOi1cMH0iCisJY2htb2QgYSt3ICIkZmlsZSIgJiYKKwlwcmludGYgIiRkYXRhIiB8IGRkIG9mPSIkZmlsZSIgYnM9MSBzZWVrPSIkcG9zIiBjb252PW5vdHJ1bmMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGhhc2hlcyBhbG9uZyBjaGFpbiwgZXZlbiBpbiBzaGFsbG93JyAnCisJZ2l0IGNsb25lIC0tbm8taGFyZGxpbmtzIC4gdmVyaWZ5ICYmCisJKAorCQljZCB2ZXJpZnkgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgJiYKKwkJYmFzZV9maWxlPSRncmFwaGRpci9ncmFwaC0kKGhlYWQgLW4gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluKS5ncmFwaCAmJgorCQljb3JydXB0X2ZpbGUgIiRiYXNlX2ZpbGUiIDE3NjAgIlwwMSIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgLS1zaGFsbG93IDI+dGVzdF9lcnIgJiYKKwkJZ3JlcCAtdiAiXisiIHRlc3RfZXJyID5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiaW5jb3JyZWN0IGNoZWNrc3VtIiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSAtLXNoYWxsb3cgZG9lcyBub3QgY2hlY2sgYmFzZSBjb250ZW50cycgJworCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIHZlcmlmeS1zaGFsbG93ICYmCisJKAorCQljZCB2ZXJpZnktc2hhbGxvdyAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAmJgorCQliYXNlX2ZpbGU9JGdyYXBoZGlyL2dyYXBoLSQoaGVhZCAtbiAxICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4pLmdyYXBoICYmCisJCWNvcnJ1cHRfZmlsZSAiJGJhc2VfZmlsZSIgMTAwMCAiXDAxIiAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAtLXNoYWxsb3cgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgMj50ZXN0X2VyciAmJgorCQlncmVwIC12ICJeKyIgdGVzdF9lcnIgPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJpbmNvcnJlY3QgY2hlY2tzdW0iIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybiBvbiBiYXNlIGdyYXBoIGNodW5rIGluY29ycmVjdCcgJworCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIGJhc2UtY2h1bmsgJiYKKwkoCisJCWNkIGJhc2UtY2h1bmsgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgJiYKKwkJYmFzZV9maWxlPSRncmFwaGRpci9ncmFwaC0kKHRhaWwgLW4gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluKS5ncmFwaCAmJgorCQljb3JydXB0X2ZpbGUgIiRiYXNlX2ZpbGUiIDEzNzYgIlwwMSIgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgLS1zaGFsbG93IDI+dGVzdF9lcnIgJiYKKwkJZ3JlcCAtdiAiXisiIHRlc3RfZXJyID5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBhZnRlciBjb21taXQtZ3JhcGgtY2hhaW4gY29ycnVwdGlvbicgJworCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIHZlcmlmeS1jaGFpbiAmJgorCSgKKwkJY2QgdmVyaWZ5LWNoYWluICYmCisJCWNvcnJ1cHRfZmlsZSAiJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiIgNjAgIkciICYmCisJCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IDI+dGVzdF9lcnIgJiYKKwkJZ3JlcCAtdiAiXisiIHRlc3RfZXJyID5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW4iIGVyciAmJgorCQljb3JydXB0X2ZpbGUgIiRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4iIDYwICJBIiAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAyPnRlc3RfZXJyICYmCisJCWdyZXAgLXYgIl4rIiB0ZXN0X2VyciA+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGFjcm9zcyBhbHRlcm5hdGVzJyAnCisJZ2l0IGNsb25lIC0tbm8taGFyZGxpbmtzIC4gdmVyaWZ5LWFsdCAmJgorCSgKKwkJY2QgdmVyaWZ5LWFsdCAmJgorCQlybSAtcmYgJGdyYXBoZGlyICYmCisJCWFsdGRpcj0iJChwd2QpLy4uLy5naXQvb2JqZWN0cyIgJiYKKwkJZWNobyAiJGFsdGRpciIgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgLS1vYmplY3QtZGlyPSIkYWx0ZGlyLyIgJiYKKwkJdGVzdF9jb21taXQgZXh0cmEgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0ICYmCisJCXRpcF9maWxlPSRncmFwaGRpci9ncmFwaC0kKHRhaWwgLW4gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluKS5ncmFwaCAmJgorCQljb3JydXB0X2ZpbGUgIiR0aXBfZmlsZSIgMTAwICJcMDEiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IC0tc2hhbGxvdyAyPnRlc3RfZXJyICYmCisJCWdyZXAgLXYgIl4rIiB0ZXN0X2VyciA+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZSIgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgb2N0b3B1cyBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgY29tbWl0cy8xMCAmJgorCWdpdCBtZXJnZSBjb21taXRzLzMgY29tbWl0cy80ICYmCisJZ2l0IGJyYW5jaCBtZXJnZS9vY3RvcHVzICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0ICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4KKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdncmFwaCBleGlzdHMnIG1lcmdlL29jdG9wdXMgY29tbWl0cy8xMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCBhY3Jvc3MgYWx0ZXJuYXRlIHdoZXJlIGFsdGVybmF0ZSBpcyBub3Qgc3BsaXQnICcKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoICYmCisJY3AgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoIC4gJiYKKwlnaXQgY2xvbmUgLS1uby1oYXJkbGlua3MgLiBhbHQtc3BsaXQgJiYKKwkoCisJCWNkIGFsdC1zcGxpdCAmJgorCQllY2hvICIkKHB3ZCkiLy4uLy5naXQvb2JqZWN0cyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0X2NvbW1pdCAxOCAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlIC0tc3BsaXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluCisJKSAmJgorCXRlc3RfY21wIGNvbW1pdC1ncmFwaCAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGgKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTA0LWZldGNoLXJlY2VpdmUtc3RyaWN0LnNoIGIvdC90NTUwNC1mZXRjaC1yZWNlaXZlLXN0cmljdC5zaAppbmRleCA3YmM3MDY4Li5mZGZlMTc5IDEwMDc1NQotLS0gYS90L3Q1NTA0LWZldGNoLXJlY2VpdmUtc3RyaWN0LnNoCisrKyBiL3QvdDU1MDQtZmV0Y2gtcmVjZWl2ZS1zdHJpY3Quc2gKQEAgLTE2NCw5ICsxNjQsOSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayB3aXRoIGludmFsaWQgb3IgYm9ndXMgc2tpcExpc3QgaW5wdXQnICcKIAlnaXQgLWMgZnNjay5za2lwTGlzdD0vZGV2L251bGwgLWMgZnNjay5taXNzaW5nRW1haWw9aWdub3JlIGZzY2sgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZnNjay5za2lwTGlzdD1kb2VzLW5vdC1leGlzdCAtYyBmc2NrLm1pc3NpbmdFbWFpbD1pZ25vcmUgZnNjayAyPmVyciAmJgotCXRlc3RfaTE4bmdyZXAgIkNvdWxkIG5vdCBvcGVuIHNraXAgbGlzdDogZG9lcy1ub3QtZXhpc3QiIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNvdWxkIG5vdCBvcGVuLio6IGRvZXMtbm90LWV4aXN0IiBlcnIgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZnNjay5za2lwTGlzdD0uZ2l0L2NvbmZpZyAtYyBmc2NrLm1pc3NpbmdFbWFpbD1pZ25vcmUgZnNjayAyPmVyciAmJgotCXRlc3RfaTE4bmdyZXAgIkludmFsaWQgU0hBLTE6IFxbY29yZVxdIiBlcnIKKwl0ZXN0X2kxOG5ncmVwICJpbnZhbGlkIG9iamVjdCBuYW1lOiBcW2NvcmVcXSIgZXJyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgd2l0aCBvdGhlciBhY2NlcHRlZCBza2lwTGlzdCBpbnB1dCAoY29tbWVudHMgJiBlbXB0eSBsaW5lcyknICcKQEAgLTE5Myw3ICsxOTMsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayB3aXRoIGludmFsaWQgYWJicmV2aWF0ZWQgc2tpcExpc3QgaW5wdXQnICcKIAllY2hvICRjb21taXQgfCB0ZXN0X2NvcHlfYnl0ZXMgMjAgPlNLSVAuYWJicmV2aWF0ZWQgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZnNjay5za2lwTGlzdD1TS0lQLmFiYnJldmlhdGVkIGZzY2sgMj5lcnItYWJicmV2aWF0ZWQgJiYKLQl0ZXN0X2kxOG5ncmVwICJeZmF0YWw6IEludmFsaWQgU0hBLTE6ICIgZXJyLWFiYnJldmlhdGVkCisJdGVzdF9pMThuZ3JlcCAiXmZhdGFsOiBpbnZhbGlkIG9iamVjdCBuYW1lOiAiIGVyci1hYmJyZXZpYXRlZAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIHdpdGggZXhoYXVzdGl2ZSBhY2NlcHRlZCBza2lwTGlzdCBpbnB1dCAodmFyaW91cyB0eXBlcyBvZiBjb21tZW50cyBldGMuKScgJwpAQCAtMjI2LDEwICsyMjYsMTAgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgYm9ndXMgJiYKIAlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyByZWNlaXZlLmZzY2suc2tpcExpc3QgZG9lcy1ub3QtZXhpc3QgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgYm9ndXMgMj5lcnIgJiYKLQl0ZXN0X2kxOG5ncmVwICJDb3VsZCBub3Qgb3BlbiBza2lwIGxpc3Q6IGRvZXMtbm90LWV4aXN0IiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJjb3VsZCBub3Qgb3Blbi4qOiBkb2VzLW5vdC1leGlzdCIgZXJyICYmCiAJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgcmVjZWl2ZS5mc2NrLnNraXBMaXN0IGNvbmZpZyAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBib2d1cyAyPmVyciAmJgotCXRlc3RfaTE4bmdyZXAgIkludmFsaWQgU0hBLTE6IFxbY29yZVxdIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJpbnZhbGlkIG9iamVjdCBuYW1lOiBcW2NvcmVcXSIgZXJyICYmCiAKIAlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyByZWNlaXZlLmZzY2suc2tpcExpc3QgU0tJUCAmJgogCWdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBib2d1cwpAQCAtMjU1LDEwICsyNTUsMTAgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGZldGNoICJmaWxlOi8vJChwd2QpIiAkcmVmc3BlYyAmJgogCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIGZldGNoLmZzY2suc2tpcExpc3QgZG9lcy1ub3QtZXhpc3QgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGZldGNoICJmaWxlOi8vJChwd2QpIiAkcmVmc3BlYyAyPmVyciAmJgotCXRlc3RfaTE4bmdyZXAgIkNvdWxkIG5vdCBvcGVuIHNraXAgbGlzdDogZG9lcy1ub3QtZXhpc3QiIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNvdWxkIG5vdCBvcGVuLio6IGRvZXMtbm90LWV4aXN0IiBlcnIgJiYKIAlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyBmZXRjaC5mc2NrLnNraXBMaXN0IGRzdC8uZ2l0L2NvbmZpZyAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgZmV0Y2ggImZpbGU6Ly8kKHB3ZCkiICRyZWZzcGVjIDI+ZXJyICYmCi0JdGVzdF9pMThuZ3JlcCAiSW52YWxpZCBTSEEtMTogXFtjb3JlXF0iIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQgb2JqZWN0IG5hbWU6IFxbY29yZVxdIiBlcnIgJiYKIAogCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIGZldGNoLmZzY2suc2tpcExpc3QgZHN0Ly5naXQvU0tJUCAmJgogCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgZmV0Y2ggImZpbGU6Ly8kKHB3ZCkiICRyZWZzcGVjCmRpZmYgLS1naXQgYS90L3Q1NTEwLWZldGNoLnNoIGIvdC90NTUxMC1mZXRjaC5zaAppbmRleCBlOThkOTBkLi4xMzlmNzEwIDEwMDc1NQotLS0gYS90L3Q1NTEwLWZldGNoLnNoCisrKyBiL3QvdDU1MTAtZmV0Y2guc2gKQEAgLTk3OCw0ICs5NzgsMjcgQEAKIAljaGVja19uZWdvdGlhdGlvbl90aXAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyAnCisJbWtkaXIgZm9yY2VkLXVwZGF0ZXMgJiYKKwkoCisJCWNkIGZvcmNlZC11cGRhdGVzICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IDEgJiYKKwkJdGVzdF9jb21taXQgMgorCSkgJiYKKwlnaXQgY2xvbmUgZm9yY2VkLXVwZGF0ZXMgZm9yY2VkLXVwZGF0ZS1jbG9uZSAmJgorCWdpdCBjbG9uZSBmb3JjZWQtdXBkYXRlcyBuby1mb3JjZWQtdXBkYXRlLWNsb25lICYmCisJZ2l0IC1DIGZvcmNlZC11cGRhdGVzIHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKKwkoCisJCWNkIGZvcmNlZC11cGRhdGUtY2xvbmUgJiYKKwkJZ2l0IGZldGNoIC0tc2hvdy1mb3JjZWQtdXBkYXRlcyBvcmlnaW4gMj5vdXRwdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiKGZvcmNlZCB1cGRhdGUpIiBvdXRwdXQKKwkpICYmCisJKAorCQljZCBuby1mb3JjZWQtdXBkYXRlLWNsb25lICYmCisJCWdpdCBmZXRjaCAtLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXMgb3JpZ2luIDI+b3V0cHV0ICYmCisJCSEgdGVzdF9pMThuZ3JlcCAiKGZvcmNlZCB1cGRhdGUpIiBvdXRwdXQKKwkpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxMi1scy1yZW1vdGUuc2ggYi90L3Q1NTEyLWxzLXJlbW90ZS5zaAppbmRleCBlM2M0YTQ4Li40M2UxZDhkIDEwMDc1NQotLS0gYS90L3Q1NTEyLWxzLXJlbW90ZS5zaAorKysgYi90L3Q1NTEyLWxzLXJlbW90ZS5zaApAQCAtMjY3LDggKzI2Nyw3IEBACiAnCiAKIHRlc3RfbGF6eV9wcmVyZXEgR0lUX0RBRU1PTiAnCi0JdGVzdF90cmlzdGF0ZSBHSVRfVEVTVF9HSVRfREFFTU9OICYmCi0JdGVzdCAiJEdJVF9URVNUX0dJVF9EQUVNT04iICE9IGZhbHNlCisJZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD10cnVlIC0tZXhpdC1jb2RlIEdJVF9URVNUX0dJVF9EQUVNT04KICcKIAogIyBUaGlzIHRlc3Qgc3Bhd25zIGEgZGFlbW9uLCBzbyBydW4gaXQgb25seSBpZiB0aGUgdXNlciB3b3VsZCBiZSBPSyB3aXRoCmRpZmYgLS1naXQgYS90L3Q1NTE0LWZldGNoLW11bHRpcGxlLnNoIGIvdC90NTUxNC1mZXRjaC1tdWx0aXBsZS5zaAppbmRleCAwMDMwYzkyLi41NDI2ZDRiIDEwMDc1NQotLS0gYS90L3Q1NTE0LWZldGNoLW11bHRpcGxlLnNoCisrKyBiL3QvdDU1MTQtZmV0Y2gtbXVsdGlwbGUuc2gKQEAgLTEwNSw5ICsxMDUsMTIgQEAKIAkgZ2l0IHJlbW90ZSBybSBvcmlnaW4gJiYKIAkgZ2l0IHJlbW90ZSBhZGQgb25lIC4uL29uZSAmJgogCSBnaXQgcmVtb3RlIGFkZCB0d28gLi4vdHdvICYmCi0JIGdpdCBmZXRjaCAtLW11bHRpcGxlIG9uZSB0d28gJiYKKwkgR0lUX1RSQUNFPTEgZ2l0IGZldGNoIC0tbXVsdGlwbGUgb25lIHR3byAyPnRyYWNlICYmCiAJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKLQkgdGVzdF9jbXAgLi4vZXhwZWN0IG91dHB1dCkKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IG91dHB1dCAmJgorCSBncmVwICJidWlsdC1pbjogZ2l0IGdjIiB0cmFjZSA+Z2MgJiYKKwkgdGVzdF9saW5lX2NvdW50ID0gMSBnYworCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tbXVsdGlwbGUgKGJhZCByZW1vdGUgbmFtZXMpJyAnCmRpZmYgLS1naXQgYS90L3Q1NTQxLWh0dHAtcHVzaC1zbWFydC5zaCBiL3QvdDU1NDEtaHR0cC1wdXNoLXNtYXJ0LnNoCmluZGV4IDhlZjg3NjMuLmI4NmRkYjYgMTAwNzU1Ci0tLSBhL3QvdDU1NDEtaHR0cC1wdXNoLXNtYXJ0LnNoCisrKyBiL3QvdDU1NDEtaHR0cC1wdXNoLXNtYXJ0LnNoCkBAIC0xNzcsNiArMTc3LDU1IEBACiAJIHRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1hdG9taWMgYWxzbyBwcmV2ZW50cyBicmFuY2ggY3JlYXRpb24sIHJlcG9ydHMgY29sbGF0ZXJhbCcgJworCSMgU2V0dXAgdXBzdHJlYW0gcmVwbyAtIGVtcHR5IGZvciBub3cKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXRvbWljLWJyYW5jaGVzLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJGQiICYmCisJdGVzdF9jb25maWcgLUMgIiRkIiBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwl1cD0iJEhUVFBEX1VSTCIvc21hcnQvYXRvbWljLWJyYW5jaGVzLmdpdCAmJgorCisJIyBUZWxsICIkdXAiIGFib3V0IHR3byBicmFuY2hlcyBmb3Igbm93CisJdGVzdF9jb21taXQgYXRvbWljMSAmJgorCXRlc3RfY29tbWl0IGF0b21pYzIgJiYKKwlnaXQgYnJhbmNoIGNvbGxhdGVyYWwgJiYKKwlnaXQgcHVzaCAiJHVwIiBtYXN0ZXIgY29sbGF0ZXJhbCAmJgorCisJIyBjb2xsYXRlcmFsIGlzIGEgdmFsaWQgcHVzaCwgYnV0IHNob3VsZCBiZSBmYWlsZWQgYnkgYXRvbWljIHB1c2gKKwlnaXQgY2hlY2tvdXQgY29sbGF0ZXJhbCAmJgorCXRlc3RfY29tbWl0IGNvbGxhdGVyYWwxICYmCisKKwkjIE1ha2UgbWFzdGVyIGluY29tcGF0aWJsZSB3aXRoIHVwc3RyZWFtIHRvIHByb3Zva2UgYXRvbWljCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKworCSMgQWRkIGEgbmV3IGJyYW5jaCB3aGljaCBzaG91bGQgYmUgZmFpbGVkIGJ5IGF0b21pYyBwdXNoLiBUaGlzIGlzIGEKKwkjIHJlZ3Jlc3Npb24gY2FzZS4KKwlnaXQgYnJhbmNoIGF0b21pYyAmJgorCisJIyAtLWF0b21pYyBzaG91bGQgY2F1c2UgZW50aXJlIHB1c2ggdG8gYmUgcmVqZWN0ZWQKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWF0b21pYyAiJHVwIiBtYXN0ZXIgYXRvbWljIGNvbGxhdGVyYWwgMj5vdXRwdXQgJiYKKworCSMgdGhlIG5ldyBicmFuY2ggc2hvdWxkIG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB1cHN0cmVhbQorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyAiJGQiIHNob3ctcmVmIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYXRvbWljICYmCisKKwkjIHVwc3RyZWFtIHNob3VsZCBzdGlsbCByZWZsZWN0IGF0b21pYzIsIHRoZSBsYXN0IHRoaW5nIHdlIHB1c2hlZAorCSMgc3VjY2Vzc2Z1bGx5CisJZ2l0IHJldi1wYXJzZSBhdG9taWMyID5leHBlY3RlZCAmJgorCSMgb24gbWFzdGVyLi4uCisJZ2l0IC1DICIkZCIgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkjIC4uLmFuZCBjb2xsYXRlcmFsLgorCWdpdCAtQyAiJGQiIHJldi1wYXJzZSByZWZzL2hlYWRzL2NvbGxhdGVyYWwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJIyB0aGUgZmFpbGVkIHJlZnMgc2hvdWxkIGJlIGluZGljYXRlZCB0byB0aGUgdXNlcgorCWdyZXAgIl4gISAuKnJlamVjdGVkLiogbWFzdGVyIC0+IG1hc3RlciIgb3V0cHV0ICYmCisKKwkjIHRoZSBjb2xsYXRlcmFsIGZhaWx1cmUgcmVmcyBzaG91bGQgYmUgaW5kaWNhdGVkIHRvIHRoZSB1c2VyCisJZ3JlcCAiXiAhIC4qcmVqZWN0ZWQuKiBhdG9taWMgLT4gYXRvbWljIC4qYXRvbWljIHB1c2ggZmFpbGVkIiBvdXRwdXQgJiYKKwlncmVwICJeICEgLipyZWplY3RlZC4qIGNvbGxhdGVyYWwgLT4gY29sbGF0ZXJhbCAuKmF0b21pYyBwdXNoIGZhaWxlZCIgb3V0cHV0CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1hbGwgY2FuIHB1c2ggdG8gZW1wdHkgcmVwbycgJwogCWQ9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9lbXB0eS1hbGwuZ2l0ICYmCiAJZ2l0IGluaXQgLS1iYXJlICIkZCIgJiYKQEAgLTIxMyw3ICsyNjIsNyBAQAogCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKIAl0ZXN0X2NvbW1pdCBub2lzeSAmJgogCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggPm91dHB1dCAyPiYxICYmCi0JdGVzdF9pMThuZ3JlcCAiXldyaXRpbmcgb2JqZWN0cyIgb3V0cHV0CisJdGVzdF9pMThuZ3JlcCAiV3JpdGluZyBvYmplY3RzIiBvdXRwdXQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3B1c2ggLS1xdWlldCBzaWxlbmNlcyBzdGF0dXMgYW5kIHByb2dyZXNzJyAnCkBAIC0yMjgsNyArMjc3LDcgQEAKIAl0ZXN0X2NvbW1pdCBuby1wcm9ncmVzcyAmJgogCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLS1uby1wcm9ncmVzcyA+b3V0cHV0IDI+JjEgJiYKIAl0ZXN0X2kxOG5ncmVwICJeVG8gaHR0cCIgb3V0cHV0ICYmCi0JdGVzdF9pMThuZ3JlcCAhICJeV3JpdGluZyBvYmplY3RzIiBvdXRwdXQKKwl0ZXN0X2kxOG5ncmVwICEgIldyaXRpbmcgb2JqZWN0cyIgb3V0cHV0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wcm9ncmVzcyBzaG93cyBwcm9ncmVzcyB0byBub24tdHR5JyAnCkBAIC0yMzYsNyArMjg1LDcgQEAKIAl0ZXN0X2NvbW1pdCBwcm9ncmVzcyAmJgogCWdpdCBwdXNoIC0tcHJvZ3Jlc3MgPm91dHB1dCAyPiYxICYmCiAJdGVzdF9pMThuZ3JlcCAiXlRvIGh0dHAiIG91dHB1dCAmJgotCXRlc3RfaTE4bmdyZXAgIl5Xcml0aW5nIG9iamVjdHMiIG91dHB1dAorCXRlc3RfaTE4bmdyZXAgIldyaXRpbmcgb2JqZWN0cyIgb3V0cHV0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgcHVzaCBnaXZlcyBzYW5lIGRlZmF1bHRzIHRvIHJlZmxvZycgJwpkaWZmIC0tZ2l0IGEvdC90NTU1MS1odHRwLWZldGNoLXNtYXJ0LnNoIGIvdC90NTU1MS1odHRwLWZldGNoLXNtYXJ0LnNoCmluZGV4IGFjNzQ2MjYuLmUzOGU1NDMgMTAwNzU1Ci0tLSBhL3QvdDU1NTEtaHR0cC1mZXRjaC1zbWFydC5zaAorKysgYi90L3Q1NTUxLWh0dHAtZmV0Y2gtc21hcnQuc2gKQEAgLTE5OSw3ICsxOTksNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIENvbnRlbnQtVHlwZSByZWplY3RlZCcgJwogCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAkSFRUUERfVVJML2Jyb2tlbl9zbWFydC9yZXBvLmdpdCAyPmFjdHVhbCAmJgotCWdyZXAgIm5vdCB2YWxpZDoiIGFjdHVhbAorCXRlc3RfaTE4bmdyZXAgIm5vdCB2YWxpZDoiIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbmFtZXNwYWNlZCByZWZzJyAnCkBAIC0zMDEsMTEgKzMwMSwxMCBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFyZ2UgZmV0Y2gtcGFjayByZXF1ZXN0cyBjYW4gYmUgc3BsaXQgYWNyb3NzIFBPU1RzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXJnZSBmZXRjaC1wYWNrIHJlcXVlc3RzIGNhbiBiZSBzZW50IHVzaW5nIGNodW5rZWQgZW5jb2RpbmcnICcKIAlHSVRfVFJBQ0VfQ1VSTD10cnVlIGdpdCAtYyBodHRwLnBvc3RidWZmZXI9NjU1MzYgXAogCQljbG9uZSAtLWJhcmUgIiRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQiIHNwbGl0LmdpdCAyPmVyciAmJgotCWdyZXAgIl49PiBTZW5kIGhlYWRlcjogUE9TVCIgZXJyID5wb3N0cyAmJgotCXRlc3RfbGluZV9jb3VudCA9IDIgcG9zdHMKKwlncmVwICJePT4gU2VuZCBoZWFkZXI6IFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIiBlcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhbGxvd3JlYWNoYWJsZXNoYTFpbndhbnQnICcKQEAgLTQ2Niw3ICs0NjUsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXJ2ZXItc2lkZSBlcnJvciBkZXRlY3RlZCcgJwogCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAkSFRUUERfVVJML2Vycm9yX3NtYXJ0L3JlcG8uZ2l0IDI+YWN0dWFsICYmCi0JZ3JlcCAic2VydmVyLXNpZGUgZXJyb3IiIGFjdHVhbAorCXRlc3RfaTE4bmdyZXAgInNlcnZlci1zaWRlIGVycm9yIiBhY3R1YWwKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjA0LWNsb25lLXJlZmVyZW5jZS5zaCBiL3QvdDU2MDQtY2xvbmUtcmVmZXJlbmNlLnNoCmluZGV4IDQzMjAwODIuLjQ4OTQyMzcgMTAwNzU1Ci0tLSBhL3QvdDU2MDQtY2xvbmUtcmVmZXJlbmNlLnNoCisrKyBiL3QvdDU2MDQtY2xvbmUtcmVmZXJlbmNlLnNoCkBAIC0yMjEsNCArMjIxLDEzNyBAQAogCSggY2QgQyAmJiBnaXQgZnNjayApCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBnYXJiYWdlIGluIG9iamVjdHMvKicgJworCWdpdCBpbml0IFMgJiYKKwkoCisJCWNkIFMgJiYKKwkJdGVzdF9jb21taXQgQSAmJgorCisJCWNkIC5naXQvb2JqZWN0cyAmJgorCQk+LnNvbWUtaGlkZGVuLWZpbGUgJiYKKwkJPnNvbWUtZmlsZSAmJgorCQlta2RpciAuc29tZS1oaWRkZW4tZGlyICYmCisJCT4uc29tZS1oaWRkZW4tZGlyL3NvbWUtZmlsZSAmJgorCQk+LnNvbWUtaGlkZGVuLWRpci8uc29tZS1kb3QtZmlsZSAmJgorCQlta2RpciBzb21lLWRpciAmJgorCQk+c29tZS1kaXIvc29tZS1maWxlICYmCisJCT5zb21lLWRpci8uc29tZS1kb3QtZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYSByZXBvIHdpdGggZ2FyYmFnZSBpbiBvYmplY3RzLyonICcKKwlmb3Igb3B0aW9uIGluIC0tbG9jYWwgLS1uby1oYXJkbGlua3MgLS1zaGFyZWQgLS1kaXNzb2NpYXRlCisJZG8KKwkJZ2l0IGNsb25lICRvcHRpb24gUyBTJG9wdGlvbiB8fCByZXR1cm4gMSAmJgorCQlnaXQgLUMgUyRvcHRpb24gZnNjayB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlmaW5kIFMtKiAtbmFtZSAiKnNvbWUqIiB8IHNvcnQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJUy0tZGlzc29jaWF0ZS8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpcgorCVMtLWRpc3NvY2lhdGUvLmdpdC9vYmplY3RzLy5zb21lLWhpZGRlbi1kaXIvLnNvbWUtZG90LWZpbGUKKwlTLS1kaXNzb2NpYXRlLy5naXQvb2JqZWN0cy8uc29tZS1oaWRkZW4tZGlyL3NvbWUtZmlsZQorCVMtLWRpc3NvY2lhdGUvLmdpdC9vYmplY3RzLy5zb21lLWhpZGRlbi1maWxlCisJUy0tZGlzc29jaWF0ZS8uZ2l0L29iamVjdHMvc29tZS1kaXIKKwlTLS1kaXNzb2NpYXRlLy5naXQvb2JqZWN0cy9zb21lLWRpci8uc29tZS1kb3QtZmlsZQorCVMtLWRpc3NvY2lhdGUvLmdpdC9vYmplY3RzL3NvbWUtZGlyL3NvbWUtZmlsZQorCVMtLWRpc3NvY2lhdGUvLmdpdC9vYmplY3RzL3NvbWUtZmlsZQorCVMtLWxvY2FsLy5naXQvb2JqZWN0cy8uc29tZS1oaWRkZW4tZGlyCisJUy0tbG9jYWwvLmdpdC9vYmplY3RzLy5zb21lLWhpZGRlbi1kaXIvLnNvbWUtZG90LWZpbGUKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpci9zb21lLWZpbGUKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWZpbGUKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvc29tZS1kaXIKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvc29tZS1kaXIvLnNvbWUtZG90LWZpbGUKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvc29tZS1kaXIvc29tZS1maWxlCisJUy0tbG9jYWwvLmdpdC9vYmplY3RzL3NvbWUtZmlsZQorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpcgorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpci8uc29tZS1kb3QtZmlsZQorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpci9zb21lLWZpbGUKKwlTLS1uby1oYXJkbGlua3MvLmdpdC9vYmplY3RzLy5zb21lLWhpZGRlbi1maWxlCisJUy0tbm8taGFyZGxpbmtzLy5naXQvb2JqZWN0cy9zb21lLWRpcgorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvc29tZS1kaXIvLnNvbWUtZG90LWZpbGUKKwlTLS1uby1oYXJkbGlua3MvLmdpdC9vYmplY3RzL3NvbWUtZGlyL3NvbWUtZmlsZQorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvc29tZS1maWxlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3NldHVwIHJlcG8gd2l0aCBtYW51YWxseSBzeW1saW5rZWQgb3IgdW5rbm93biBmaWxlcyBhdCBvYmplY3RzLycgJworCWdpdCBpbml0IFQgJiYKKwkoCisJCWNkIFQgJiYKKwkJZ2l0IGNvbmZpZyBnYy5hdXRvIDAgJiYKKwkJdGVzdF9jb21taXQgQSAmJgorCQlnaXQgZ2MgJiYKKwkJdGVzdF9jb21taXQgQiAmJgorCisJCWNkIC5naXQvb2JqZWN0cyAmJgorCQltdiBwYWNrIHBhY2tzICYmCisJCWxuIC1zIHBhY2tzIHBhY2sgJiYKKwkJZmluZCA/PyAtdHlwZSBkID5sb29zZS1kaXJzICYmCisJCWxhc3RfbG9vc2U9JCh0YWlsIC1uIDEgbG9vc2UtZGlycykgJiYKKwkJbXYgJGxhc3RfbG9vc2UgYS1sb29zZS1kaXIgJiYKKwkJbG4gLXMgYS1sb29zZS1kaXIgJGxhc3RfbG9vc2UgJiYKKwkJZmlyc3RfbG9vc2U9JChoZWFkIC1uIDEgbG9vc2UtZGlycykgJiYKKwkJcm0gLWYgbG9vc2UtZGlycyAmJgorCisJCWNkICRmaXJzdF9sb29zZSAmJgorCQlvYmo9JChscyAqKSAmJgorCQltdiAkb2JqIC4uL2FuLW9iamVjdCAmJgorCQlsbiAtcyAuLi9hbi1vYmplY3QgJG9iaiAmJgorCisJCWNkIC4uLyAmJgorCQlmaW5kIC4gLXR5cGUgZiB8IHNvcnQgPi4uLy4uLy4uL1Qub2JqZWN0cy1maWxlcy5yYXcgJiYKKwkJZmluZCAuIC10eXBlIGwgfCBzb3J0ID4uLi8uLi8uLi9ULm9iamVjdHMtc3ltbGlua3MucmF3ICYmCisJCWVjaG8gdW5rbm93bl9jb250ZW50ID51bmtub3duX2ZpbGUKKwkpICYmCisJZ2l0IC1DIFQgZnNjayAmJgorCWdpdCAtQyBUIHJldi1saXN0IC0tYWxsIC0tb2JqZWN0cyA+VC5vYmplY3RzCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY2xvbmUgcmVwbyB3aXRoIHN5bWxpbmtlZCBvciB1bmtub3duIGZpbGVzIGF0IG9iamVjdHMvJyAnCisJZm9yIG9wdGlvbiBpbiAtLWxvY2FsIC0tbm8taGFyZGxpbmtzIC0tc2hhcmVkIC0tZGlzc29jaWF0ZQorCWRvCisJCWdpdCBjbG9uZSAkb3B0aW9uIFQgVCRvcHRpb24gfHwgcmV0dXJuIDEgJiYKKwkJZ2l0IC1DIFQkb3B0aW9uIGZzY2sgfHwgcmV0dXJuIDEgJiYKKwkJZ2l0IC1DIFQkb3B0aW9uIHJldi1saXN0IC0tYWxsIC0tb2JqZWN0cyA+VCRvcHRpb24ub2JqZWN0cyAmJgorCQl0ZXN0X2NtcCBULm9iamVjdHMgVCRvcHRpb24ub2JqZWN0cyAmJgorCQkoCisJCQljZCBUJG9wdGlvbi8uZ2l0L29iamVjdHMgJiYKKwkJCWZpbmQgLiAtdHlwZSBmIHwgc29ydCA+Li4vLi4vLi4vVCRvcHRpb24ub2JqZWN0cy1maWxlcy5yYXcgJiYKKwkJCWZpbmQgLiAtdHlwZSBsIHwgc29ydCA+Li4vLi4vLi4vVCRvcHRpb24ub2JqZWN0cy1zeW1saW5rcy5yYXcKKwkJKQorCWRvbmUgJiYKKworCWZvciByYXcgaW4gJChscyBUKi5yYXcpCisJZG8KKwkJc2VkIC1lICJzIS8uLi8hL1kvITsgcyFbMC05YS1mXVx7MzgsXH0hWiEiIC1lICIvY29tbWl0LWdyYXBoL2QiIFwKKwkJICAgIC1lICIvbXVsdGktcGFjay1pbmRleC9kIiA8JHJhdyA+JHJhdy5kZS1zaGEgfHwgcmV0dXJuIDEKKwlkb25lICYmCisKKwljYXQgPmV4cGVjdGVkLWZpbGVzIDw8LUVPRiAmJgorCS4vWS9aCisJLi9ZL1oKKwkuL2EtbG9vc2UtZGlyL1oKKwkuL2FuLW9iamVjdAorCS4vWS9aCisJLi9pbmZvL3BhY2tzCisJLi9wYWNrL3BhY2stWi5pZHgKKwkuL3BhY2svcGFjay1aLnBhY2sKKwkuL3BhY2tzL3BhY2stWi5pZHgKKwkuL3BhY2tzL3BhY2stWi5wYWNrCisJLi91bmtub3duX2ZpbGUKKwlFT0YKKworCWZvciBvcHRpb24gaW4gLS1sb2NhbCAtLW5vLWhhcmRsaW5rcyAtLWRpc3NvY2lhdGUKKwlkbworCQl0ZXN0X2NtcCBleHBlY3RlZC1maWxlcyBUJG9wdGlvbi5vYmplY3RzLWZpbGVzLnJhdy5kZS1zaGEgfHwgcmV0dXJuIDEgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IFQkb3B0aW9uLm9iamVjdHMtc3ltbGlua3MucmF3LmRlLXNoYSB8fCByZXR1cm4gMQorCWRvbmUgJiYKKworCWVjaG8gLi9pbmZvL2FsdGVybmF0ZXMgPmV4cGVjdGVkLWZpbGVzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtZmlsZXMgVC0tc2hhcmVkLm9iamVjdHMtZmlsZXMucmF3ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IFQtLXNoYXJlZC5vYmplY3RzLXN5bWxpbmtzLnJhdworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MTctY2xvbmUtc3VibW9kdWxlcy1yZW1vdGUuc2ggYi90L3Q1NjE3LWNsb25lLXN1Ym1vZHVsZXMtcmVtb3RlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3ZmNjZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjE3LWNsb25lLXN1Ym1vZHVsZXMtcmVtb3RlLnNoCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNsb25pbmcgcmVwb3Mgd2l0aCBzdWJtb2R1bGVzIHVzaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3B3ZD0kKHB3ZCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyICYmCisJdGVzdF9jb21taXQgY29tbWl0MSAmJgorCW1rZGlyIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IHN1YmNvbW1pdDEgJiYKKwkJZ2l0IHRhZyBzdWJfd2hlbl9hZGRlZF90b19zdXBlcgorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAiZmlsZTovLyRwd2Qvc3ViIiBzdWIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCXRlc3RfY29tbWl0IHN1YmNvbW1pdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggLS1uby1yZW1vdGUtc3VibW9kdWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLW5vLXJlbW90ZS1zdWJtb2R1bGVzICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXJfY2xvbmUvc3ViICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHN1Yl93aGVuX2FkZGVkX3RvX3N1cGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIC0tcmVtb3RlLXN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1yZW1vdGUtc3VibW9kdWxlcyAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKKwkoCisJCWNkIHN1cGVyX2Nsb25lL3N1YiAmJgorCQlnaXQgZGlmZiAtLWV4aXQtY29kZSByZW1vdGVzL29yaWdpbi9tYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoZSBkZWZhdWx0IGlzIC0tbm8tcmVtb3RlLXN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJKAorCQljZCBzdXBlcl9jbG9uZS9zdWIgJiYKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc3ViX3doZW5fYWRkZWRfdG9fc3VwZXIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYxOC1hbHRlcm5hdGUtcmVmcy5zaCBiL3QvdDU2MTgtYWx0ZXJuYXRlLXJlZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzM1MzIxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MTgtYWx0ZXJuYXRlLXJlZnMuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgaGFuZGxpbmcgb2YgLS1hbHRlcm5hdGUtcmVmcyB0cmF2ZXJzYWwnCisuIC4vdGVzdC1saWIuc2gKKworIyBBdm9pZCB0ZXN0X2NvbW1pdCBiZWNhdXNlIHdlIHdhbnQgYSBzcGVjaWZpYyBhbmQga25vd24gc2V0IG9mIHJlZnM6CisjCisjICBiYXNlIC0tIG9uZQorIyAgICAgIFwgICAgICBcCisjICAgICAgIHR3byAtLSBtZXJnZWQKKyMKKyMgd2hlcmUgIm9uZSIgYW5kICJ0d28iIGFyZSBvbiBzZXBhcmF0ZSByZWZzLCBhbmQgIm1lcmdlZCIgaXMgYXZhaWxhYmxlIG9ubHkgaW4KKyMgdGhlIGRlcGVuZGVudCBjaGlsZCByZXBvc2l0b3J5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGxvY2FsIHJlZnMnICcKKwlnaXQgY2hlY2tvdXQgLWIgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGJhc2UgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb25lICYmCisJZ2l0IGNoZWNrb3V0IC1iIHR3byBIRUFEXiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0d28KKycKKworIyBXZSdsbCBlbnRlciB0aGUgY2hpbGQgcmVwb3NpdG9yeSBhZnRlciBpdCdzIHNldCB1cCBzaW5jZSB0aGF0J3Mgd2hlcmUKKyMgYWxsIG9mIHRoZSBzdWJzZXF1ZW50IHRlc3RzIHdpbGwgd2FudCB0byBydW4gKGFuZCBpdCdzIGVhc3kgdG8gZm9yZ2V0IGEKKyMgIi1DIGNoaWxkIiBhbmQgZ2V0IG5vbnNlbnNlIHJlc3VsdHMpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHNoYXJlZCBjbG9uZScgJworCWdpdCBjbG9uZSAtcyAuIGNoaWxkICYmCisJY2QgY2hpbGQgJiYKKwlnaXQgbWVyZ2Ugb3JpZ2luL29uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWFsdGVybmF0ZS1yZWZzJyAnCisJZ2l0IHJldi1saXN0IC0tcmVtb3Rlcz1vcmlnaW4gPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWFsdGVybmF0ZS1yZWZzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tbm90IC0tYWx0ZXJuYXRlLXJlZnMnICcKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIC0tbm90IC0tYWx0ZXJuYXRlLXJlZnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGltaXRpbmcgd2l0aCBhbHRlcm5hdGVSZWZzUHJlZml4ZXMnICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmFsdGVybmF0ZVJlZnNQcmVmaXhlcyByZWZzL2hlYWRzL29uZSAmJgorCWdpdCByZXYtbGlzdCBvcmlnaW4vb25lID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1hbHRlcm5hdGUtcmVmcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1zb3VyY2Ugc2hvd3MgLmFsdGVybmF0ZSBtYXJrZXInICcKKwlnaXQgbG9nIC0tb25lbGluZSAtLXNvdXJjZSAtLXJlbW90ZXM9b3JpZ2luID5leHBlY3Qub3JpZyAmJgorCXNlZCAicy9vcmlnaW4uKiAvLmFsdGVybmF0ZSAvIiA8ZXhwZWN0Lm9yaWcgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tc291cmNlIC0tYWx0ZXJuYXRlLXJlZnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzAyLXByb3RvY29sLXYyLnNoIGIvdC90NTcwMi1wcm90b2NvbC12Mi5zaAppbmRleCA1YjMzZjYyLi4wMTFiODFkIDEwMDc1NQotLS0gYS90L3Q1NzAyLXByb3RvY29sLXYyLnNoCisrKyBiL3QvdDU3MDItcHJvdG9jb2wtdjIuc2gKQEAgLTQ5OSwxMCArNDk5LDcgQEAKIAogCSMgQWRkIGV4dHJhIGNvbW1pdHMgdG8gdGhlIGNsaWVudCBzbyB0aGF0IHRoZSB3aG9sZSBmZXRjaCB0YWtlcyBtb3JlCiAJIyB0aGFuIDEgcmVxdWVzdCAoZHVlIHRvIG5lZ290aWF0aW9uKQotCWZvciBpIGluICQodGVzdF9zZXEgMSAzMikKLQlkbwotCQl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYyRpCi0JZG9uZSAmJgorCXRlc3RfY29tbWl0X2J1bGsgLUMgY2xpZW50IC0taWQ9YyAzMiAmJgogCiAJZ2l0IC1DIHNlcnZlciBjaGVja291dCAtYiBuZXdicmFuY2ggYmFzZSAmJgogCXRlc3RfY29tbWl0IC1DIHNlcnZlciBjbGllbnRfd2FudHMgJiYKQEAgLTcxMSwxMCArNzA4LDcgQEAKIAkjIENyZWF0ZSBtYW55IGNvbW1pdHMgdG8gZXh0ZW5kIHRoZSBuZWdvdGlhdGlvbiBwaGFzZSBhY3Jvc3MgbXVsdGlwbGUKIAkjIHJlcXVlc3RzLCBzbyB0aGF0IHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc2VuZCAicmVhZHkiIGluIHRoZSBmaXJzdAogCSMgcmVxdWVzdC4KLQlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMzIpCi0JZG8KLQkJdGVzdF9jb21taXQgLUMgaHR0cF9jaGlsZCBjJGkKLQlkb25lICYmCisJdGVzdF9jb21taXRfYnVsayAtQyBodHRwX2NoaWxkIC0taWQ9YyAzMiAmJgogCiAJIyBBZnRlciB0aGUgYWNrbm93bGVkZ21lbnRzIHNlY3Rpb24sIHByZXRlbmQgdGhhdCBhIERFTElNCiAJIyAoMDAwMSkgd2FzIHNlbnQgaW5zdGVhZCBvZiBhIEZMVVNIICgwMDAwKS4KZGlmZiAtLWdpdCBhL3QvdDU3MDMtdXBsb2FkLXBhY2stcmVmLWluLXdhbnQuc2ggYi90L3Q1NzAzLXVwbG9hZC1wYWNrLXJlZi1pbi13YW50LnNoCmluZGV4IDA5NTFkMWIuLmRlNGI2MTAgMTAwNzU1Ci0tLSBhL3QvdDU3MDMtdXBsb2FkLXBhY2stcmVmLWluLXdhbnQuc2gKKysrIGIvdC90NTcwMy11cGxvYWQtcGFjay1yZWYtaW4td2FudC5zaApAQCAtMTc2LDcgKzE3Niw3IEBACiAJCWdpdCBjbG9uZSAiaHR0cDovLzEyNy4wLjAuMTokTElCX0hUVFBEX1BPUlQvc21hcnQvcmVwbyIgIiRMT0NBTF9QUklTVElORSIgJiYKIAkJY2QgIiRMT0NBTF9QUklTVElORSIgJiYKIAkJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKLQkJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDMzKTsgZG8gdGVzdF9jb21taXQgcyRpOyBkb25lICYmCisJCXRlc3RfY29tbWl0X2J1bGsgLS1pZD1zIDMzICYmCiAKIAkJIyBBZGQgbm92ZWwgY29tbWl0cyB0byB1cHN0cmVhbQogCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCkBAIC0yODcsNyArMjg3LDcgQEAKIAkJZ2l0IGNsb25lICJmaWxlOi8vJFJFUE8iICIkTE9DQUxfUFJJU1RJTkUiICYmCiAJCWNkICIkTE9DQUxfUFJJU1RJTkUiICYmCiAJCWdpdCBjaGVja291dCAtYiBzaWRlICYmCi0JCWZvciBpIGluICQodGVzdF9zZXEgMSAzMyk7IGRvIHRlc3RfY29tbWl0IHMkaTsgZG9uZSAmJgorCQl0ZXN0X2NvbW1pdF9idWxrIC0taWQ9cyAzMyAmJgogCiAJCSMgQWRkIG5vdmVsIGNvbW1pdHMgdG8gdXBzdHJlYW0KIAkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgpkaWZmIC0tZ2l0IGEvdC90NTgwMS1yZW1vdGUtaGVscGVycy5zaCBiL3QvdDU4MDEtcmVtb3RlLWhlbHBlcnMuc2gKaW5kZXggZDA0ZjgwMC4uMmQ2YzRhMiAxMDA3NTUKLS0tIGEvdC90NTgwMS1yZW1vdGUtaGVscGVycy5zaAorKysgYi90L3Q1ODAxLXJlbW90ZS1oZWxwZXJzLnNoCkBAIC0xMjYsNyArMTI2LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyB3aXRob3V0IHJlZnNwZWMnICcKLQlHSVRfUkVNT1RFX1RFU1RHSVRfUkVGU1BFQz0iIiBcCisJR0lUX1JFTU9URV9URVNUR0lUX05PUkVGU1BFQz0xIFwKIAlnaXQgY2xvbmUgInRlc3RnaXQ6OiR7UFdEfS9zZXJ2ZXIiIGxvY2FsMiAyPmVycm9yICYmCiAJdGVzdF9pMThuZ3JlcCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IiBlcnJvciAmJgogCWNvbXBhcmVfcmVmcyBsb2NhbDIgSEVBRCBzZXJ2ZXIgSEVBRApAQCAtMTM1LDcgKzEzNSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIHdpdGhvdXQgcmVmc3BlY3MnICcKIAkoY2QgbG9jYWwyICYmCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgotCUdJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDPSIiIGdpdCBwdWxsIDI+Li4vZXJyb3IpICYmCisJR0lUX1JFTU9URV9URVNUR0lUX05PUkVGU1BFQz0xIGdpdCBwdWxsIDI+Li4vZXJyb3IpICYmCiAJdGVzdF9pMThuZ3JlcCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IiBlcnJvciAmJgogCWNvbXBhcmVfcmVmcyBsb2NhbDIgSEVBRCBzZXJ2ZXIgSEVBRAogJwpAQCAtMTQ1LDggKzE0NSw4IEBACiAJKGNkIGxvY2FsMiAmJgogCWVjaG8gY29udGVudCA+PmZpbGUgJiYKIAlnaXQgY29tbWl0IC1hIC1tIHRlbiAmJgotCUdJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDPSIiICYmCi0JZXhwb3J0IEdJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDICYmCisJR0lUX1JFTU9URV9URVNUR0lUX05PUkVGU1BFQz0xICYmCisJZXhwb3J0IEdJVF9SRU1PVEVfVEVTVEdJVF9OT1JFRlNQRUMgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAyPi4uL2Vycm9yKSAmJgogCXRlc3RfaTE4bmdyZXAgInJlbW90ZS1oZWxwZXIgZG9lc24udCBzdXBwb3J0IHB1c2g7IHJlZnNwZWMgbmVlZGVkIiBlcnJvcgogJwpAQCAtMzAzLDQgKzMwMywxNCBAQAogCWNvbXBhcmVfcmVmcyBzZXJ2ZXIgSEVBRCBsb2NhbCBGRVRDSF9IRUFECiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHRhZycgJworCShjZCBzZXJ2ZXIgJiYKKwkgZ2l0IHRhZyB2MS4wCisJKSAmJgorCShjZCBsb2NhbCAmJgorCSBnaXQgZmV0Y2gKKwkpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsIHYxLjAgc2VydmVyIHYxLjAKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1ODAxL2dpdC1yZW1vdGUtdGVzdGdpdCBiL3QvdDU4MDEvZ2l0LXJlbW90ZS10ZXN0Z2l0CmluZGV4IDc1MmM3NjMuLjZiOWYwYjUgMTAwNzU1Ci0tLSBhL3QvdDU4MDEvZ2l0LXJlbW90ZS10ZXN0Z2l0CisrKyBiL3QvdDU4MDEvZ2l0LXJlbW90ZS10ZXN0Z2l0CkBAIC0xMSwxMyArMTEsMTUgQEAKIHVybD0kMgogCiBkaXI9IiRHSVRfRElSL3Rlc3RnaXQvJGFsaWFzIgotcHJlZml4PSJyZWZzL3Rlc3RnaXQvJGFsaWFzIgogCi1kZWZhdWx0X3JlZnNwZWM9InJlZnMvaGVhZHMvKjoke3ByZWZpeH0vaGVhZHMvKiIKK2hfcmVmc3BlYz0icmVmcy9oZWFkcy8qOnJlZnMvdGVzdGdpdC8kYWxpYXMvaGVhZHMvKiIKK3RfcmVmc3BlYz0icmVmcy90YWdzLyo6cmVmcy90ZXN0Z2l0LyRhbGlhcy90YWdzLyoiCiAKLXJlZnNwZWM9IiR7R0lUX1JFTU9URV9URVNUR0lUX1JFRlNQRUMtJGRlZmF1bHRfcmVmc3BlY30iCi0KLXRlc3QgLXogIiRyZWZzcGVjIiAmJiBwcmVmaXg9InJlZnMiCitpZiB0ZXN0IC1uICIkR0lUX1JFTU9URV9URVNUR0lUX05PUkVGU1BFQyIKK3RoZW4KKwloX3JlZnNwZWM9IiIKKwl0X3JlZnNwZWM9IiIKK2ZpCiAKIEdJVF9ESVI9IiR1cmwvLmdpdCIKIGV4cG9ydCBHSVRfRElSCkBAIC00MCw3ICs0Miw4IEBACiAJY2FwYWJpbGl0aWVzKQogCQllY2hvICdpbXBvcnQnCiAJCWVjaG8gJ2V4cG9ydCcKLQkJdGVzdCAtbiAiJHJlZnNwZWMiICYmIGVjaG8gInJlZnNwZWMgJHJlZnNwZWMiCisJCXRlc3QgLW4gIiRoX3JlZnNwZWMiICYmIGVjaG8gInJlZnNwZWMgJGhfcmVmc3BlYyIKKwkJdGVzdCAtbiAiJHRfcmVmc3BlYyIgJiYgZWNobyAicmVmc3BlYyAkdF9yZWZzcGVjIgogCQlpZiB0ZXN0IC1uICIkZ2l0bWFya3MiCiAJCXRoZW4KIAkJCWVjaG8gIippbXBvcnQtbWFya3MgJGdpdG1hcmtzIgpAQCAtNTIsNyArNTUsNyBAQAogCQllY2hvCiAJCTs7CiAJbGlzdCkKLQkJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nPyAlKHJlZm5hbWUpJyAncmVmcy9oZWFkcy8nCisJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9Jz8gJShyZWZuYW1lKScgJ3JlZnMvaGVhZHMvJyAncmVmcy90YWdzLycKIAkJaGVhZD0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkKIAkJZWNobyAiQCRoZWFkIEhFQUQiCiAJCWVjaG8KQEAgLTgxLDEwICs4NCwxMSBAQAogCiAJCWVjaG8gImZlYXR1cmUgZG9uZSIKIAkJZ2l0IGZhc3QtZXhwb3J0IFwKKwkJCSR7aF9yZWZzcGVjOisiLS1yZWZzcGVjPSRoX3JlZnNwZWMifSBcCisJCQkke3RfcmVmc3BlYzorIi0tcmVmc3BlYz0kdF9yZWZzcGVjIn0gXAogCQkJJHt0ZXN0Z2l0bWFya3M6KyItLWltcG9ydC1tYXJrcz0kdGVzdGdpdG1hcmtzIn0gXAogCQkJJHt0ZXN0Z2l0bWFya3M6KyItLWV4cG9ydC1tYXJrcz0kdGVzdGdpdG1hcmtzIn0gXAotCQkJJHJlZnMgfAotCQlzZWQgLWUgInMjcmVmcy9oZWFkcy8jJHtwcmVmaXh9L2hlYWRzLyNnIgorCQkJJHJlZnMKIAkJZWNobyAiZG9uZSIKIAkJOzsKIAlleHBvcnQpCmRpZmYgLS1naXQgYS90L3Q2MDAwLXJldi1saXN0LW1pc2Muc2ggYi90L3Q2MDAwLXJldi1saXN0LW1pc2Muc2gKaW5kZXggMDUwNzk5OS4uNTJhOWUzOCAxMDA3NTUKLS0tIGEvdC90NjAwMC1yZXYtbGlzdC1taXNjLnNoCisrKyBiL3QvdDYwMDAtcmV2LWxpc3QtbWlzYy5zaApAQCAtNDgsNiArNDgsMjYgQEAKIAkhIGdyZXAgb25lIG91dHB1dAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLW9iamVjdHMgLS1uby1vYmplY3QtbmFtZXMgaGFzIG5vIHNwYWNlL25hbWVzJyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLW5vLW9iamVjdC1uYW1lcyBIRUFEID5vdXRwdXQgJiYKKwkhIGdyZXAgd2FudGVkX2ZpbGUgb3V0cHV0ICYmCisJISBncmVwIHVud2FudGVkX2ZpbGUgb3V0cHV0ICYmCisJISBncmVwICIgIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1vYmplY3RzIC0tbm8tb2JqZWN0LW5hbWVzIHdvcmtzIHdpdGggY2F0LWZpbGUnICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tbm8tb2JqZWN0LW5hbWVzIC0tYWxsID5saXN0LW91dHB1dCAmJgorCWdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIDxsaXN0LW91dHB1dCA+Y2F0LW91dHB1dCAmJgorCSEgZ3JlcCBtaXNzaW5nIGNhdC1vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1vYmplY3QtbmFtZXMgYW5kIC0tb2JqZWN0LW5hbWVzIGFyZSBsYXN0LW9uZS13aW5zJyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLW5vLW9iamVjdC1uYW1lcyAtLW9iamVjdC1uYW1lcyAtLWFsbCA+b3V0cHV0ICYmCisJZ3JlcCB3YW50ZWRfZmlsZSBvdXRwdXQgJiYKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tb2JqZWN0LW5hbWVzIC0tbm8tb2JqZWN0LW5hbWVzIC0tYWxsID5vdXRwdXQgJiYKKwkhIGdyZXAgd2FudGVkX2ZpbGUgb3V0cHV0CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IEEuLkIgYW5kIHJldi1saXN0IF5BIEIgYXJlIHRoZSBzYW1lJyAnCiAJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGFub3RoZXIgJiYKIAlnaXQgdGFnIC1hIC1tICJhbm5vdGF0ZWQiIHYxLjAgJiYKZGlmZiAtLWdpdCBhL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaCBiL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaAppbmRleCA0OWEzOTRiLi5iZGM0MmU5IDEwMDc1NQotLS0gYS90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKKysrIGIvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoCkBAIC02MTUsNiArNjE1LDcgQEAKIAlnaXQgYWRkIG1pc3NpbmcvTUlTU0lORyAmJgogCWdpdCBjb21taXQgLW0gIjYoYnJva2VuKTogQWRkZWQgZmlsZSB0aGF0IHdpbGwgYmUgZGVsZXRlZCIgJiYKIAlnaXQgdGFnIEJST0tFTl9IQVNINiAmJgorCWRlbGV0ZWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6bWlzc2luZykgJiYKIAlhZGRfbGluZV9pbnRvX2ZpbGUgIjcoYnJva2VuKTogc2Vjb25kIGxpbmUgb24gYSBicm9rZW4gYnJhbmNoIiBoZWxsbzIgJiYKIAlnaXQgdGFnIEJST0tFTl9IQVNINyAmJgogCWFkZF9saW5lX2ludG9fZmlsZSAiOChicm9rZW4pOiB0aGlyZCBsaW5lIG9uIGEgYnJva2VuIGJyYW5jaCIgaGVsbG8yICYmCkBAIC02MjIsMTIgKzYyMywxMiBAQAogCWdpdCBybSBtaXNzaW5nL01JU1NJTkcgJiYKIAlnaXQgY29tbWl0IC1tICI5KGJyb2tlbik6IFJlbW92ZSBtaXNzaW5nIGZpbGUiICYmCiAJZ2l0IHRhZyBCUk9LRU5fSEFTSDkgJiYKLQlybSAuZ2l0L29iamVjdHMvMzkvZjdlNjFhNzI0MTg3YWI3NjdkMmUwODQ0MmQ5YjZiOWRhYjU4N2QKKwlybSAuZ2l0L29iamVjdHMvJCh0ZXN0X29pZF90b19wYXRoICRkZWxldGVkKQogJwogCiBlY2hvICIiID4gZXhwZWN0ZWQub2sKIGNhdCA+IGV4cGVjdGVkLm1pc3NpbmctdHJlZS5kZWZhdWx0IDw8RU9GCi1mYXRhbDogdW5hYmxlIHRvIHJlYWQgdHJlZSAzOWY3ZTYxYTcyNDE4N2FiNzY3ZDJlMDg0NDJkOWI2YjlkYWI1ODdkCitmYXRhbDogdW5hYmxlIHRvIHJlYWQgdHJlZSAkZGVsZXRlZAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBmYWlscyBpZiB0cmVlIGlzIGJyb2tlbiBvbiBzdGFydCBjb21taXQnICcKQEAgLTcxMywxMiArNzE0LDEyIEBACiAiCiAKIGNhdCA+IGV4cGVjdGVkLmJpc2VjdC1sb2cgPDxFT0YKLSMgYmFkOiBbMzJhNTk0YTNmZGFjMmQ1N2NmNmQwMjk4N2UzMGVlYzY4NTExNDk4Y10gQWRkIDw0OiBDaWFvIGZvciBub3c+IGludG8gPGhlbGxvPi4KLSMgZ29vZDogWzdiN2YyMDRhNzQ5YzMxMjVkNTIyNGVkNjFlYTJhZTExODdhZDA0NmZdIEFkZCA8MjogQSBuZXcgZGF5IGZvciBnaXQ+IGludG8gPGhlbGxvPi4KLWdpdCBiaXNlY3Qgc3RhcnQgJzMyYTU5NGEzZmRhYzJkNTdjZjZkMDI5ODdlMzBlZWM2ODUxMTQ5OGMnICc3YjdmMjA0YTc0OWMzMTI1ZDUyMjRlZDYxZWEyYWUxMTg3YWQwNDZmJwotIyBnb29kOiBbM2RlOTUyZjI0MTZiNjA4NGY1NTdlYzQxNzcwOWVhYzc0MGM2ODE4Y10gQWRkIDwzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdD4gaW50byA8aGVsbG8+LgotZ2l0IGJpc2VjdCBnb29kIDNkZTk1MmYyNDE2YjYwODRmNTU3ZWM0MTc3MDllYWM3NDBjNjgxOGMKLSMgZmlyc3QgYmFkIGNvbW1pdDogWzMyYTU5NGEzZmRhYzJkNTdjZjZkMDI5ODdlMzBlZWM2ODUxMTQ5OGNdIEFkZCA8NDogQ2lhbyBmb3Igbm93PiBpbnRvIDxoZWxsbz4uCisjIGJhZDogWyRIQVNINF0gQWRkIDw0OiBDaWFvIGZvciBub3c+IGludG8gPGhlbGxvPi4KKyMgZ29vZDogWyRIQVNIMl0gQWRkIDwyOiBBIG5ldyBkYXkgZm9yIGdpdD4gaW50byA8aGVsbG8+LgorZ2l0IGJpc2VjdCBzdGFydCAnJEhBU0g0JyAnJEhBU0gyJworIyBnb29kOiBbJEhBU0gzXSBBZGQgPDM6IEFub3RoZXIgbmV3IGRheSBmb3IgZ2l0PiBpbnRvIDxoZWxsbz4uCitnaXQgYmlzZWN0IGdvb2QgJEhBU0gzCisjIGZpcnN0IGJhZCBjb21taXQ6IFskSEFTSDRdIEFkZCA8NDogQ2lhbyBmb3Igbm93PiBpbnRvIDxoZWxsbz4uCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGxvZzogc3VjY2Vzc2Z1bCByZXN1bHQnICcKQEAgLTczMSwxNCArNzMyLDE0IEBACiAnCiAKIGNhdCA+IGV4cGVjdGVkLmJpc2VjdC1za2lwLWxvZyA8PEVPRgotIyBiYWQ6IFszMmE1OTRhM2ZkYWMyZDU3Y2Y2ZDAyOTg3ZTMwZWVjNjg1MTE0OThjXSBBZGQgPDQ6IENpYW8gZm9yIG5vdz4gaW50byA8aGVsbG8+LgotIyBnb29kOiBbN2I3ZjIwNGE3NDljMzEyNWQ1MjI0ZWQ2MWVhMmFlMTE4N2FkMDQ2Zl0gQWRkIDwyOiBBIG5ldyBkYXkgZm9yIGdpdD4gaW50byA8aGVsbG8+LgotZ2l0IGJpc2VjdCBzdGFydCAnMzJhNTk0YTNmZGFjMmQ1N2NmNmQwMjk4N2UzMGVlYzY4NTExNDk4YycgJzdiN2YyMDRhNzQ5YzMxMjVkNTIyNGVkNjFlYTJhZTExODdhZDA0NmYnCi0jIHNraXA6IFszZGU5NTJmMjQxNmI2MDg0ZjU1N2VjNDE3NzA5ZWFjNzQwYzY4MThjXSBBZGQgPDM6IEFub3RoZXIgbmV3IGRheSBmb3IgZ2l0PiBpbnRvIDxoZWxsbz4uCi1naXQgYmlzZWN0IHNraXAgM2RlOTUyZjI0MTZiNjA4NGY1NTdlYzQxNzcwOWVhYzc0MGM2ODE4YworIyBiYWQ6IFskSEFTSDRdIEFkZCA8NDogQ2lhbyBmb3Igbm93PiBpbnRvIDxoZWxsbz4uCisjIGdvb2Q6IFskSEFTSDJdIEFkZCA8MjogQSBuZXcgZGF5IGZvciBnaXQ+IGludG8gPGhlbGxvPi4KK2dpdCBiaXNlY3Qgc3RhcnQgJyRIQVNINCcgJyRIQVNIMicKKyMgc2tpcDogWyRIQVNIM10gQWRkIDwzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdD4gaW50byA8aGVsbG8+LgorZ2l0IGJpc2VjdCBza2lwICRIQVNIMwogIyBvbmx5IHNraXBwZWQgY29tbWl0cyBsZWZ0IHRvIHRlc3QKLSMgcG9zc2libGUgZmlyc3QgYmFkIGNvbW1pdDogWzMyYTU5NGEzZmRhYzJkNTdjZjZkMDI5ODdlMzBlZWM2ODUxMTQ5OGNdIEFkZCA8NDogQ2lhbyBmb3Igbm93PiBpbnRvIDxoZWxsbz4uCi0jIHBvc3NpYmxlIGZpcnN0IGJhZCBjb21taXQ6IFszZGU5NTJmMjQxNmI2MDg0ZjU1N2VjNDE3NzA5ZWFjNzQwYzY4MThjXSBBZGQgPDM6IEFub3RoZXIgbmV3IGRheSBmb3IgZ2l0PiBpbnRvIDxoZWxsbz4uCisjIHBvc3NpYmxlIGZpcnN0IGJhZCBjb21taXQ6IFskSEFTSDRdIEFkZCA8NDogQ2lhbyBmb3Igbm93PiBpbnRvIDxoZWxsbz4uCisjIHBvc3NpYmxlIGZpcnN0IGJhZCBjb21taXQ6IFskSEFTSDNdIEFkZCA8MzogQW5vdGhlciBuZXcgZGF5IGZvciBnaXQ+IGludG8gPGhlbGxvPi4KIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgbG9nOiBvbmx5IHNraXAgY29tbWl0cyBsZWZ0JyAnCmRpZmYgLS1naXQgYS90L3Q2MDQwLXRyYWNraW5nLWluZm8uc2ggYi90L3Q2MDQwLXRyYWNraW5nLWluZm8uc2gKaW5kZXggNzE2MjgzYi4uYWQxOTIyYiAxMDA3NTUKLS0tIGEvdC90NjA0MC10cmFja2luZy1pbmZvLnNoCisrKyBiL3QvdDYwNDAtdHJhY2tpbmctaW5mby5zaApAQCAtMzgsNyArMzgsNyBAQAogCWFkdmFuY2UgaAogJwogCi1zY3JpcHQ9J3MvXi4uXChiLlwpICpbMC05YS1mXSogXCguKlwpJC9cMSBcMi9wJwordDYwNDBfc2NyaXB0PSdzL14uLlwoYi5cKSAqWzAtOWEtZl0qIFwoLipcKSQvXDEgXDIvcCcKIGNhdCA+ZXhwZWN0IDw8XEVPRgogYjEgW2FoZWFkIDEsIGJlaGluZCAxXSBkCiBiMiBbYWhlYWQgMSwgYmVoaW5kIDFdIGQKQEAgLTUzLDcgKzUzLDcgQEAKIAkJY2QgdGVzdCAmJgogCQlnaXQgYnJhbmNoIC12CiAJKSB8Ci0Jc2VkIC1uIC1lICIkc2NyaXB0IiA+YWN0dWFsICYmCisJc2VkIC1uIC1lICIkdDYwNDBfc2NyaXB0IiA+YWN0dWFsICYmCiAJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKICcKIApAQCAtNzEsNyArNzEsNyBAQAogCQljZCB0ZXN0ICYmCiAJCWdpdCBicmFuY2ggLXZ2CiAJKSB8Ci0Jc2VkIC1uIC1lICIkc2NyaXB0IiA+YWN0dWFsICYmCisJc2VkIC1uIC1lICIkdDYwNDBfc2NyaXB0IiA+YWN0dWFsICYmCiAJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKICcKIApAQCAtMTYwLDYgKzE2MCwxOSBAQAogJwogCiBjYXQgPmV4cGVjdCA8PFxFT0YKKyMjIGIxLi4ub3JpZ2luL21hc3RlciBbZGlmZmVyZW50XQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cy5haGVhZGJlaGluZD1mYWxzZSBzdGF0dXMgLXMgLWIgKGRpdmVyZ2VkIGZyb20gdXBzdHJlYW0pJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiMSA+L2Rldi9udWxsICYmCisJCWdpdCAtYyBzdGF0dXMuYWhlYWRiZWhpbmQ9ZmFsc2Ugc3RhdHVzIC1zIC1iIHwgaGVhZCAtMQorCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgogT24gYnJhbmNoIGIxCiBZb3VyIGJyYW5jaCBhbmQgJ29yaWdpbi9tYXN0ZXInIGhhdmUgZGl2ZXJnZWQsCiBhbmQgaGF2ZSAxIGFuZCAxIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KQEAgLTE3NCw2ICsxODcsMTUgQEAKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1sb25nIC0tYnJhbmNoJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiMSA+L2Rldi9udWxsICYmCisJCWdpdCAtYyBzdGF0dXMuYWhlYWRiZWhpbmQ9dHJ1ZSBzdGF0dXMgLS1sb25nIC1iIHwgaGVhZCAtMworCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKIGNhdCA+ZXhwZWN0IDw8XEVPRgogT24gYnJhbmNoIGIxCiBZb3VyIGJyYW5jaCBhbmQgJ29yaWdpbi9tYXN0ZXInIHJlZmVyIHRvIGRpZmZlcmVudCBjb21taXRzLgpAQCAtMTg4LDYgKzIxMCwxNSBAQAogCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cy5haGVhZGJlaGluZD1mYWxzZSBzdGF0dXMgLS1sb25nIC0tYnJhbmNoJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiMSA+L2Rldi9udWxsICYmCisJCWdpdCAtYyBzdGF0dXMuYWhlYWRiZWhpbmQ9ZmFsc2Ugc3RhdHVzIC0tbG9uZyAtYiB8IGhlYWQgLTIKKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCiBjYXQgPmV4cGVjdCA8PFxFT0YKICMjIGI1Li4uYnJva2VuYmFzZSBbZ29uZV0KIEVPRgpkaWZmIC0tZ2l0IGEvdC90NjIwMC1mbXQtbWVyZ2UtbXNnLnNoIGIvdC90NjIwMC1mbXQtbWVyZ2UtbXNnLnNoCmluZGV4IDkzZjIzY2YuLjhhNzJiNGMgMTAwNzU1Ci0tLSBhL3QvdDYyMDAtZm10LW1lcmdlLW1zZy5zaAorKysgYi90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2gKQEAgLTY2LDEyICs2Niw3IEBACiAJZ2l0IGNvbW1pdCAtYSAtbSAiUmlnaHQgIzUiICYmCiAKIAlnaXQgY2hlY2tvdXQgLWIgbG9uZyAmJgotCWk9MCAmJgotCXdoaWxlIHRlc3QgJGkgLWx0IDMwCi0JZG8KLQkJdGVzdF9jb21taXQgJGkgb25lICYmCi0JCWk9JCgoJGkrMSkpCi0JZG9uZSAmJgorCXRlc3RfY29tbWl0X2J1bGsgLS1zdGFydD0wIC0tbWVzc2FnZT0lcyAtLWZpbGVuYW1lPW9uZSAzMCAmJgogCiAJZ2l0IHNob3ctYnJhbmNoICYmCiAKZGlmZiAtLWdpdCBhL3QvdDYzMDAtZm9yLWVhY2gtcmVmLnNoIGIvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2gKaW5kZXggZDkyMzUyMS4uYWI2OWFhMSAxMDA3NTUKLS0tIGEvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2gKKysrIGIvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2gKQEAgLTM0Niw2ICszNDYsMzIgQEAKICcKIAogY2F0ID5leHBlY3RlZCA8PFxFT0YKK3JlZnMvdGFncy90ZXN0dGFnCityZWZzL3RhZ3MvdGVzdHRhZy0yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhlcmNpc2UgcGF0dGVybnMgd2l0aCBwcmVmaXhlcycgJworCWdpdCB0YWcgdGVzdHRhZy0yICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdGFnIC1kIHRlc3R0YWctMiIgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiBcCisJCXJlZnMvdGFncy90ZXN0dGFnIHJlZnMvdGFncy90ZXN0dGFnLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorcmVmcy90YWdzL3Rlc3R0YWcKK3JlZnMvdGFncy90ZXN0dGFnLTIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGVyY2lzZSBnbG9iIHBhdHRlcm5zIHdpdGggcHJlZml4ZXMnICcKKwlnaXQgdGFnIHRlc3R0YWctMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCB0ZXN0dGFnLTIiICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgXAorCQlyZWZzL3RhZ3MvdGVzdHRhZyAicmVmcy90YWdzL3Rlc3R0YWctKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgogJ3JlZnMvaGVhZHMvbWFzdGVyJwogJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJwogJ3JlZnMvdGFncy90ZXN0dGFnJwpkaWZmIC0tZ2l0IGEvdC90NjMwMi1mb3ItZWFjaC1yZWYtZmlsdGVyLnNoIGIvdC90NjMwMi1mb3ItZWFjaC1yZWYtZmlsdGVyLnNoCmluZGV4IGZjMDY3ZWQuLjM1NDA4ZDUgMTAwNzU1Ci0tLSBhL3QvdDYzMDItZm9yLWVhY2gtcmVmLWZpbHRlci5zaAorKysgYi90L3Q2MzAyLWZvci1lYWNoLXJlZi1maWx0ZXIuc2gKQEAgLTQ0MSw0ICs0NDEsMTcgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tbWVyZ2VkIEhFQUQgLS1uby1tZXJnZWQgSEVBRAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSB3b3JrdHJlZSBhdG9tJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJbWFzdGVyOiAkKHB3ZCkKKwltYXN0ZXJfd29ya3RyZWU6ICQocHdkKS93b3JrdHJlZV9kaXIKKwlzaWRlOiBub3QgY2hlY2tlZCBvdXQKKwlFT0YKKwlnaXQgd29ya3RyZWUgYWRkIC1iIG1hc3Rlcl93b3JrdHJlZSB3b3JrdHJlZV9kaXIgbWFzdGVyICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOnNob3J0KTogJShpZiklKHdvcmt0cmVlcGF0aCklKHRoZW4pJSh3b3JrdHJlZXBhdGgpJShlbHNlKW5vdCBjaGVja2VkIG91dCUoZW5kKSIgcmVmcy9oZWFkcy8gPmFjdHVhbCAmJgorCXJtIC1yIHdvcmt0cmVlX2RpciAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDA0LXRhZy5zaCBiL3QvdDcwMDQtdGFnLnNoCmluZGV4IDZhZWViMjcuLjgwZWIxM2QgMTAwNzU1Ci0tLSBhL3QvdDcwMDQtdGFnLnNoCisrKyBiL3QvdDcwMDQtdGFnLnNoCkBAIC05MzIsNiArOTMyLDI3IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCitnZXRfdGFnX2hlYWRlciBncGdzaWduLWVuYWJsZWQgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAiQSBtZXNzYWdlIiA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2dpdCB0YWcgY29uZmlndXJlZCB0YWcuZ3Bnc2lnbiBlbmFibGVzIEdQRyBzaWduJyBcCisJJ3Rlc3RfY29uZmlnIHRhZy5ncGdzaWduIHRydWUgJiYKKwlnaXQgdGFnIC1tICJBIG1lc3NhZ2UiIGdwZ3NpZ24tZW5hYmxlZCAmJgorCWdldF90YWdfbXNnIGdwZ3NpZ24tZW5hYmxlZD5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dldF90YWdfaGVhZGVyIG5vLXNpZ24gJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAiQSBtZXNzYWdlIiA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdnaXQgdGFnIC0tbm8tc2lnbiBjb25maWd1cmVkIHRhZy5ncGdzaWduIHNraXAgR1BHIHNpZ24nIFwKKwkndGVzdF9jb25maWcgdGFnLmdwZ3NpZ24gdHJ1ZSAmJgorCWdpdCB0YWcgLWEgLS1uby1zaWduIC1tICJBIG1lc3NhZ2UiIG5vLXNpZ24gJiYKKwlnZXRfdGFnX21zZyBuby1zaWduPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSd0cnlpbmcgdG8gY3JlYXRlIGEgc2lnbmVkIHRhZyB3aXRoIG5vbi1leGlzdGluZyAtRiBmaWxlIHNob3VsZCBmYWlsJyAnCiAJISB0ZXN0IC1mIG5vbmV4aXN0aW5nZmlsZSAmJgpkaWZmIC0tZ2l0IGEvdC90NzA2MC13dHN0YXR1cy5zaCBiL3QvdDcwNjAtd3RzdGF0dXMuc2gKaW5kZXggNTNjZjQyZi4uZDUyMTg3NCAxMDA3NTUKLS0tIGEvdC90NzA2MC13dHN0YXR1cy5zaAorKysgYi90L3Q3MDYwLXd0c3RhdHVzLnNoCkBAIC0zOCw3ICszOCw2IEBACiAKIFVubWVyZ2VkIHBhdGhzOgogICAodXNlICJnaXQgYWRkL3JtIDxmaWxlPi4uLiIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKQotCiAJZGVsZXRlZCBieSB1czogICBmb28KIAogbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKQEAgLTE0Myw3ICsxNDIsNiBAQAogCiBVbm1lcmdlZCBwYXRoczoKICAgKHVzZSAiZ2l0IGFkZC9ybSA8ZmlsZT4uLi4iIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikKLQogCWJvdGggYWRkZWQ6ICAgICAgY29uZmxpY3QudHh0CiAJZGVsZXRlZCBieSB0aGVtOiBtYWluLnR4dAogCkBAIC0xNzcsNyArMTc1LDYgQEAKIAogVW5tZXJnZWQgcGF0aHM6CiAgICh1c2UgImdpdCBhZGQvcm0gPGZpbGU+Li4uIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pCi0KIAlib3RoIGRlbGV0ZWQ6ICAgIG1haW4udHh0CiAJYWRkZWQgYnkgdGhlbTogICBzdWJfbWFzdGVyLnR4dAogCWFkZGVkIGJ5IHVzOiAgICAgc3ViX3NlY29uZC50eHQKQEAgLTIwMSwxMiArMTk4LDEwIEBACiAgICh1c2UgImdpdCBtZXJnZSAtLWFib3J0IiB0byBhYm9ydCB0aGUgbWVyZ2UpCiAKIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgotCiAJbmV3IGZpbGU6ICAgc3ViX21hc3Rlci50eHQKIAogVW5tZXJnZWQgcGF0aHM6CiAgICh1c2UgImdpdCBybSA8ZmlsZT4uLi4iIHRvIG1hcmsgcmVzb2x1dGlvbikKLQogCWJvdGggZGVsZXRlZDogICAgbWFpbi50eHQKIAogVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCmRpZmYgLS1naXQgYS90L3Q3MDY0LXd0c3RhdHVzLXB2Mi5zaCBiL3QvdDcwNjQtd3RzdGF0dXMtcHYyLnNoCmluZGV4IDExZWNjYzIuLjUzNzc4N2UgMTAwNzU1Ci0tLSBhL3QvdDcwNjQtd3RzdGF0dXMtcHYyLnNoCisrKyBiL3QvdDcwNjQtd3RzdGF0dXMtcHYyLnNoCkBAIC00NDUsNiArNDQ1LDE0IEBACiAJCUVPRgogCiAJCWdpdCBzdGF0dXMgLS1haGVhZC1iZWhpbmQgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCSMgQ29uZmlybSB0aGF0ICJzdGF0dXMuYWhlYWRiZWhpbmQiIERPRVMgTk9UIHdvcmsgb24gVjIgZm9ybWF0LgorCQlnaXQgLWMgc3RhdHVzLmFoZWFkYmVoaW5kPWZhbHNlIHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyBDb25maXJtIHRoYXQgInN0YXR1cy5haGVhZGJlaGluZCIgRE9FUyBOT1Qgd29yayBvbiBWMiBmb3JtYXQuCisJCWdpdCAtYyBzdGF0dXMuYWhlYWRiZWhpbmQ9dHJ1ZSBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKIAkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogCSkKICcKZGlmZiAtLWdpdCBhL3QvdDcyMDEtY28uc2ggYi90L3Q3MjAxLWNvLnNoCmluZGV4IDU5OTAyOTkuLmI2OTZiYWUgMTAwNzU1Ci0tLSBhL3QvdDcyMDEtY28uc2gKKysrIGIvdC90NzIwMS1jby5zaApAQCAtMjQ5LDcgKzI0OSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB0byBkZXRhY2ggSEVBRCcgJwogCWdpdCBjb25maWcgYWR2aWNlLmRldGFjaGVkSGVhZCB0cnVlICYmCiAJZ2l0IGNoZWNrb3V0IC1mIHJlbmFtZXIgJiYgZ2l0IGNsZWFuIC1mICYmCi0JR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049IGdpdCBjaGVja291dCByZW5hbWVyXiAyPm1lc3NhZ2VzICYmCisJR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049ZmFsc2UgZ2l0IGNoZWNrb3V0IHJlbmFtZXJeIDI+bWVzc2FnZXMgJiYKIAlncmVwICJIRUFEIGlzIG5vdyBhdCA3MzI5Mzg4IiBtZXNzYWdlcyAmJgogCXRlc3RfbGluZV9jb3VudCAtZ3QgMSBtZXNzYWdlcyAmJgogCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCmRpZmYgLS1naXQgYS90L3Q3MzAwLWNsZWFuLnNoIGIvdC90NzMwMC1jbGVhbi5zaAppbmRleCA3YjM2OTU0Li5hMmM0NWQxIDEwMDc1NQotLS0gYS90L3Q3MzAwLWNsZWFuLnNoCisrKyBiL3QvdDczMDAtY2xlYW4uc2gKQEAgLTY2OSw0ICs2NjksMTYgQEAKIAl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmb28vYi9iYgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdoYW5kbGUgY2xlYW4gJiBjb3JlLmxvbmdwYXRocyA9IGZhbHNlIG5pY2VseScgJworCXRlc3RfY29uZmlnIGNvcmUubG9uZ3BhdGhzIGZhbHNlICYmCisJYTUwPWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhICYmCisJbWtkaXIgLXAgJGE1MCRhNTAvJGE1MCRhNTAvJGE1MCRhNTAgJiYKKwk6ID4iJGE1MCRhNTAvdGVzdC50eHQiIDI+IiRhNTAkYTUwLyRhNTAkYTUwLyRhNTAkYTUwL3Rlc3QudHh0IiAmJgorCSMgY3JlYXRlIGEgdGVtcG9yYXJ5IG91dHNpZGUgdGhlIHdvcmtpbmcgdHJlZSB0byBoaWRlIGZyb20gImdpdCBjbGVhbiIKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xlYW4gLXhkZiAyPi5naXQvZXJyICYmCisJIyBncmVwcGluZyBmb3IgYSBzdHJlcnJvciBzdHJpbmcgaXMgdW5wb3J0YWJsZSBidXQgaXQgaXMgT0sgaGVyZSB3aXRoCisJIyBNSU5HVyBwcmVyZXEKKwl0ZXN0X2kxOG5ncmVwICJ0b28gbG9uZyIgLmdpdC9lcnIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDA1LXN1Ym1vZHVsZS1tZXJnZS5zaCBiL3QvdDc0MDUtc3VibW9kdWxlLW1lcmdlLnNoCmluZGV4IDc4NTViZDguLmFhMzM5NzggMTAwNzU1Ci0tLSBhL3QvdDc0MDUtc3VibW9kdWxlLW1lcmdlLnNoCisrKyBiL3QvdDc0MDUtc3VibW9kdWxlLW1lcmdlLnNoCkBAIC00MTcsNyArNDE3LDcgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RpcmVjdG9yeS9zdWJtb2R1bGUgY29uZmxpY3Q7IHNob3VsZCBub3QgdHJlYXQgc3VibW9kdWxlIGZpbGVzIGFzIHVudHJhY2tlZCBvciBpbiB0aGUgd2F5JyAnCit0ZXN0X2V4cGVjdF9mYWlsdXJlICFGQUlMX1BSRVJFUVMgJ2RpcmVjdG9yeS9zdWJtb2R1bGUgY29uZmxpY3Q7IHNob3VsZCBub3QgdHJlYXQgc3VibW9kdWxlIGZpbGVzIGFzIHVudHJhY2tlZCBvciBpbiB0aGUgd2F5JyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGlyZWN0b3J5LXN1Ym1vZHVsZS9wYXRoIHJlc2V0IC0taGFyZCIgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkaXJlY3Rvcnktc3VibW9kdWxlIHJlc2V0IC0taGFyZCIgJiYKIAkoCmRpZmYgLS1naXQgYS90L3Q3NDA3LXN1Ym1vZHVsZS1mb3JlYWNoLnNoIGIvdC90NzQwNy1zdWJtb2R1bGUtZm9yZWFjaC5zaAppbmRleCA3MDZhZTc2Li42YjJhYTkxIDEwMDc1NQotLS0gYS90L3Q3NDA3LXN1Ym1vZHVsZS1mb3JlYWNoLnNoCisrKyBiL3QvdDc0MDctc3VibW9kdWxlLWZvcmVhY2guc2gKQEAgLTQyMSw0ICs0MjEsMTEgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9uLWxpa2UgYXJndW1lbnRzIHBhc3NlZCB0byBmb3JlYWNoIHJlY3Vyc2UgY29ycmVjdGx5JyAnCisJZ2l0IC1DIGNsb25lMiBzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSAiZWNobyBiZSAtLWFuLW9wdGlvbiIgPmV4cGVjdCAmJgorCWdpdCAtQyBjbG9uZTIgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgZWNobyBiZSAtLWFuLW9wdGlvbiA+YWN0dWFsICYmCisJZ3JlcCAtZSAiLS1hbi1vcHRpb24iIGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAyLWNvbW1pdC1wb3JjZWxhaW4uc2ggYi90L3Q3NTAyLWNvbW1pdC1wb3JjZWxhaW4uc2gKaW5kZXggNTczM2Q5Yy4uMTRjOTJlNCAxMDA3NTUKLS0tIGEvdC90NzUwMi1jb21taXQtcG9yY2VsYWluLnNoCisrKyBiL3QvdDc1MDItY29tbWl0LXBvcmNlbGFpbi5zaApAQCAtNDAyLDcgKzQwMiw3IEBACiBleGl0IDAKIEVPRgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICFBVVRPSURFTlQgJ2RvIG5vdCBmaXJlIGVkaXRvciB3aGVuIGNvbW1pdHRlciBpcyBib2d1cycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAhRkFJTF9QUkVSRVFTLCFBVVRPSURFTlQgJ2RvIG5vdCBmaXJlIGVkaXRvciB3aGVuIGNvbW1pdHRlciBpcyBib2d1cycgJwogCT4uZ2l0L3Jlc3VsdCAmJgogCiAJZWNobyA+Pm5lZ2F0aXZlICYmCmRpZmYgLS1naXQgYS90L3Q3NTA4LXN0YXR1cy5zaCBiL3QvdDc1MDgtc3RhdHVzLnNoCmluZGV4IGUxZjExMjkuLjRlNjc2Y2QgMTAwNzU1Ci0tLSBhL3QvdDc1MDgtc3RhdHVzLnNoCisrKyBiL3QvdDc1MDgtc3RhdHVzLnNoCkBAIC05NCwxOSArOTQsMTYgQEAKICMgICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKICMKICMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Ci0jICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQotIworIyAgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKICMJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAogIwogIyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKICMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0jICAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQotIworIyAgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQogIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCiAjCiAjIFVudHJhY2tlZCBmaWxlczoKICMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotIwogIwlkaXIxL3VudHJhY2tlZCBkaXIyL3VudHJhY2tlZAogIwlkaXIyL21vZGlmaWVkICB1bnRyYWNrZWQKICMKQEAgLTEyOCwxOSArMTI1LDE2IEBACiAjICAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCiAjCiAjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgotIyAgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKLSMKKyMgICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCiAjCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKICMKICMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CiAjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKLSMKKyMgICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKICMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAogIwogIyBVbnRyYWNrZWQgZmlsZXM6CiAjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLSMKICMJZGlyMS91bnRyYWNrZWQKICMJZGlyMi9tb2RpZmllZAogIwlkaXIyL3VudHJhY2tlZApAQCAtMjc4LDI0ICsyNzIsMjAgQEAKICAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCiAKIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgotICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKIAogQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLSAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQotCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQogCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKIAogVW50cmFja2VkIGZpbGVzOgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotCiAJZGlyMi9tb2RpZmllZAogCiBJZ25vcmVkIGZpbGVzOgogICAodXNlICJnaXQgYWRkIC1mIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotCiAJLmdpdGlnbm9yZQogCWRpcjEvdW50cmFja2VkCiAJZGlyMi91bnRyYWNrZWQKQEAgLTM0NywxOSArMzM3LDE2IEBACiAgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQogCiBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKLSAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQotCisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKIAluZXcgZmlsZTogICBkaXIyL2FkZGVkCiAKIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0gICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKLQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKIAltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCiAKIElnbm9yZWQgZmlsZXM6CiAgICh1c2UgImdpdCBhZGQgLWYgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0KIAkuZ2l0aWdub3JlCiAJZGlyMS91bnRyYWNrZWQKIAlkaXIyL21vZGlmaWVkCkBAIC00MjAsMTQgKzQwNywxMiBAQAogICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKIAogQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Ci0gICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKLQorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCiAJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAogCiBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCiAJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAogCiBVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKQEAgLTQ4NCwxOSArNDY5LDE2IEBACiAgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQogCiBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKLSAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQotCisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKIAluZXcgZmlsZTogICBkaXIyL2FkZGVkCiAKIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0gICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKLQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKIAltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCiAKIFVudHJhY2tlZCBmaWxlczoKICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLQogCWRpcjEvdW50cmFja2VkCiAJZGlyMi9tb2RpZmllZAogCWRpcjIvdW50cmFja2VkCkBAIC01NDIsMTkgKzUyNCwxNiBAQAogICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKIAogQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Ci0gICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKLQorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCiAJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAogCiBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCiAJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAogCiBVbnRyYWNrZWQgZmlsZXM6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0KIAlkaXIxL3VudHJhY2tlZAogCWRpcjIvbW9kaWZpZWQKIAlkaXIyL3VudHJhY2tlZApAQCAtNjA1LDE5ICs1ODQsMTYgQEAKICAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCiAKIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgotICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogCW5ldyBmaWxlOiAgIC4uL2RpcjIvYWRkZWQKIAogQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLSAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQotCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQogCW1vZGlmaWVkOiAgIG1vZGlmaWVkCiAKIFVudHJhY2tlZCBmaWxlczoKICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLQogCXVudHJhY2tlZAogCS4uL2RpcjIvbW9kaWZpZWQKIAkuLi9kaXIyL3VudHJhY2tlZApAQCAtNjc2LDE5ICs2NTIsMTYgQEAKICAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCiAKIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgotICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogCTxHUkVFTj5uZXcgZmlsZTogICBkaXIyL2FkZGVkPFJFU0VUPgogCiBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCiAJPFJFRD5tb2RpZmllZDogICBkaXIxL21vZGlmaWVkPFJFU0VUPgogCiBVbnRyYWNrZWQgZmlsZXM6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0KIAk8QkxVRT5kaXIxL3VudHJhY2tlZDxSRVNFVD4KIAk8QkxVRT5kaXIyL21vZGlmaWVkPFJFU0VUPgogCTxCTFVFPmRpcjIvdW50cmFja2VkPFJFU0VUPgpAQCAtODAyLDE5ICs3NzUsMTYgQEAKICAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCiAKIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgotICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKIAogQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLSAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQotCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQogCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKIAogVW50cmFja2VkIGZpbGVzOgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotCiAJZGlyMS91bnRyYWNrZWQKIAlkaXIyL21vZGlmaWVkCiAJZGlyMi91bnRyYWNrZWQKQEAgLTg1MiwxMyArODIyLDExIEBACiAgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQogCiBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKLSAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQotCisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKIAltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCiAKIFVudHJhY2tlZCBmaWxlczoKICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLQogCWRpcjEvdW50cmFja2VkCiAJZGlyMi8KIAl1bnRyYWNrZWQKQEAgLTg5NiwyMCArODY0LDE3IEBACiAgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQogCiBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKLSAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQotCisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKIAluZXcgZmlsZTogICBkaXIyL2FkZGVkCiAJbmV3IGZpbGU6ICAgc20KIAogQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLSAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQotCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQogCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKIAogVW50cmFja2VkIGZpbGVzOgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotCiAJZGlyMS91bnRyYWNrZWQKIAlkaXIyL21vZGlmaWVkCiAJZGlyMi91bnRyYWNrZWQKQEAgLTk1NiwxNSArOTIxLDEzIEBACiAgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQogCiBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKLSAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQotCisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKIAluZXcgZmlsZTogICBkaXIyL2FkZGVkCiAJbmV3IGZpbGU6ICAgc20KIAogQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLSAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQotCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQogCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKIAogU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgpAQCAtOTc0LDcgKzkzNyw2IEBACiAKIFVudHJhY2tlZCBmaWxlczoKICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLQogCWRpcjEvdW50cmFja2VkCiAJZGlyMi9tb2RpZmllZAogCWRpcjIvdW50cmFja2VkCkBAIC0xMDE5LDEzICs5ODEsMTEgQEAKIAogQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLSAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQotCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQogCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKIAogVW50cmFja2VkIGZpbGVzOgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotCiAJZGlyMS91bnRyYWNrZWQKIAlkaXIyL21vZGlmaWVkCiAJZGlyMi91bnRyYWNrZWQKQEAgLTEwNjgsMTUgKzEwMjgsMTMgQEAKICAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCiAKIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgotICAodXNlICJnaXQgcmVzZXQgSEVBRF4xIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKLQorICAodXNlICJnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEXjEgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKIAluZXcgZmlsZTogICBzbQogCiBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCiAJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAogCiBTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CkBAIC0xMDg2LDcgKzEwNDQsNiBAQAogCiBVbnRyYWNrZWQgZmlsZXM6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0KIAlkaXIxL3VudHJhY2tlZAogCWRpcjIvbW9kaWZpZWQKIAlkaXIyL3VudHJhY2tlZApAQCAtMTEyMywxNCArMTA4MCwxMiBAQAogICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKIAogQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Ci0gICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKLQorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCiAJbW9kaWZpZWQ6ICAgc20KIAogQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLSAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQotCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQogCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKIAogU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgpAQCAtMTE0MCw3ICsxMDk1LDYgQEAKIAogVW50cmFja2VkIGZpbGVzOgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotCiAJLmdpdG1vZHVsZXMKIAlkaXIxL3VudHJhY2tlZAogCWRpcjIvbW9kaWZpZWQKQEAgLTEyMzUsMTUgKzExODksMTMgQEAKICAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCiAKIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgotICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogCW1vZGlmaWVkOiAgIHNtCiAKIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0gICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCiAgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykKLQogCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKIAltb2RpZmllZDogICBzbSAobW9kaWZpZWQgY29udGVudCkKIApAQCAtMTI1NCw3ICsxMjA2LDYgQEAKIAogVW50cmFja2VkIGZpbGVzOgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotCiAJLmdpdG1vZHVsZXMKIAlkaXIxL3VudHJhY2tlZAogCWRpcjIvbW9kaWZpZWQKQEAgLTEyOTUsMTQgKzEyNDYsMTIgQEAKICAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCiAKIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgotICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogCW1vZGlmaWVkOiAgIHNtCiAKIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0gICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKLQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKIAltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCiAJbW9kaWZpZWQ6ICAgc20gKG5ldyBjb21taXRzKQogCkBAIC0xMzE4LDcgKzEyNjcsNiBAQAogCiBVbnRyYWNrZWQgZmlsZXM6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0KIAkuZ2l0bW9kdWxlcwogCWRpcjEvdW50cmFja2VkCiAJZGlyMi9tb2RpZmllZApAQCAtMTM3OSwxNCArMTMyNywxMiBAQAogOyAgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQogOwogOyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKLTsgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCi07Cis7ICAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogOwltb2RpZmllZDogICBzbQogOwogOyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKIDsgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi07ICAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQotOworOyAgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQogOwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCiA7CW1vZGlmaWVkOiAgIHNtIChuZXcgY29tbWl0cykKIDsKQEAgLTE0MDIsNyArMTM0OCw2IEBACiA7CiA7IFVudHJhY2tlZCBmaWxlczoKIDsgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotOwogOwkuZ2l0bW9kdWxlcwogOwlkaXIxL3VudHJhY2tlZAogOwlkaXIyL21vZGlmaWVkCkBAIC0xNDMxLDEzICsxMzc2LDExIEBACiAKIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0gICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKLQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKIAltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCiAKIFVudHJhY2tlZCBmaWxlczoKICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLQogCS5naXRtb2R1bGVzCiAJZGlyMS91bnRyYWNrZWQKIAlkaXIyL21vZGlmaWVkCkBAIC0xNDU4LDE5ICsxNDAxLDE2IEBACiAgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQogCiBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKLSAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQotCisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKIAltb2RpZmllZDogICBzbQogCiBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQotICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCiAJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAogCiBVbnRyYWNrZWQgZmlsZXM6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0KIAkuZ2l0bW9kdWxlcwogCWRpcjEvdW50cmFja2VkCiAJZGlyMi9tb2RpZmllZApAQCAtMTU4MSwxNCArMTUyMSwxMiBAQAogICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKIAogQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Ci0gICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKLQorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCiAJbW9kaWZpZWQ6ICAgc20KIAogQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKLSAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQotCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQogCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKIAogVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCmRpZmYgLS1naXQgYS90L3Q3NTEyLXN0YXR1cy1oZWxwLnNoIGIvdC90NzUxMi1zdGF0dXMtaGVscC5zaAppbmRleCBjMWViNzI1Li5lMDFjMjg1IDEwMDc1NQotLS0gYS90L3Q3NTEyLXN0YXR1cy1oZWxwLnNoCisrKyBiL3QvdDc1MTItc3RhdHVzLWhlbHAuc2gKQEAgLTMzLDcgKzMzLDYgQEAKIAogVW5tZXJnZWQgcGF0aHM6CiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBtYXJrIHJlc29sdXRpb24pCi0KIAlib3RoIG1vZGlmaWVkOiAgIG1haW4udHh0CiAKIG5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCkBAIC01NCw3ICs1Myw2IEBACiAgICh1c2UgImdpdCBjb21taXQiIHRvIGNvbmNsdWRlIG1lcmdlKQogCiBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKLQogCW1vZGlmaWVkOiAgIG1haW4udHh0CiAKIFVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQpAQCAtODUsOSArODMsOCBAQAogICAodXNlICJnaXQgcmViYXNlIC0tYWJvcnQiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKQogCiBVbm1lcmdlZCBwYXRoczoKLSAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBtYXJrIHJlc29sdXRpb24pCi0KIAlib3RoIG1vZGlmaWVkOiAgIG1haW4udHh0CiAKIG5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCkBAIC0xMTAsOCArMTA3LDcgQEAKICAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKIAogQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Ci0gICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKLQorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCiAJbW9kaWZpZWQ6ICAgbWFpbi50eHQKIAogVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCkBAIC0xNDgsOSArMTQ0LDggQEAKICAgKHVzZSAiZ2l0IHJlYmFzZSAtLWFib3J0IiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkKIAogVW5tZXJnZWQgcGF0aHM6Ci0gICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQotCiAJYm90aCBtb2RpZmllZDogICBtYWluLnR4dAogCiBubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQpAQCAtMTc2LDggKzE3MSw3IEBACiAgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCiAKIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgotICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCi0KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQogCW1vZGlmaWVkOiAgIG1haW4udHh0CiAKIFVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQpAQCAtMjQ2LDggKzI0MCw3IEBACiAKIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0gICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKLQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKIAltb2RpZmllZDogICBtYWluLnR4dAogCiBubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQpAQCAtMzU0LDggKzM0Nyw3IEBACiAKIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0gICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKLQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKIAltb2RpZmllZDogICBtYWluLnR4dAogCiBubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQpAQCAtNDUzLDggKzQ0NSw3IEBACiAKIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0gICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKLQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKIAltb2RpZmllZDogICBtYWluLnR4dAogCiBubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQpAQCAtNTU3LDggKzU0OCw3IEBACiAKIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCi0gICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKLQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKIAltb2RpZmllZDogICBtYWluLnR4dAogCiBubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQpAQCAtNzQ3LDcgKzczNyw2IEBACiAKIFVubWVyZ2VkIHBhdGhzOgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQotCiAJYm90aCBtb2RpZmllZDogICBtYWluLnR4dAogCiBubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQpAQCAtNzcxLDcgKzc2MCw2IEBACiAgICh1c2UgImdpdCBjaGVycnktcGljayAtLWFib3J0IiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikKIAogQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Ci0KIAltb2RpZmllZDogICBtYWluLnR4dAogCiBVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKQEAgLTc5OCw2ICs3ODYsMjIgQEAKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG93cyBjaGVycnktcGljayB3aXRoIGludmFsaWQgb2lkJyAnCisJbWtkaXIgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICJwaWNrIGludmFsaWQtb2lkIiA+LmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAyPmVyciAmJgorCWdpdCBjaGVycnktcGljayAtLXF1aXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZG9lcyBub3Qgc2hvdyBlcnJvciBpZiAuZ2l0L3NlcXVlbmNlciBpcyBhIGZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC5naXQvc2VxdWVuY2VyIiAmJgorCXRlc3Rfd3JpdGVfbGluZXMgaGVsbG8gPi5naXQvc2VxdWVuY2VyICYmCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3dpbmcgZGV0YWNoZWQgYXQgYW5kIGZyb20gYSB0YWcnICcKIAl0ZXN0X2NvbW1pdCBhdGFnIHRhZ2dpbmcgJiYKIAlnaXQgY2hlY2tvdXQgYXRhZyAmJgpAQCAtODM0LDkgKzgzOCw4IEBACiAgICh1c2UgImdpdCByZXZlcnQgLS1hYm9ydCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKQogCiBVbm1lcmdlZCBwYXRoczoKLSAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCiAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBtYXJrIHJlc29sdXRpb24pCi0KIAlib3RoIG1vZGlmaWVkOiAgIHRvLXJldmVydC50eHQKIAogbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKQEAgLTg1NSw4ICs4NTgsNyBAQAogICAodXNlICJnaXQgcmV2ZXJ0IC0tYWJvcnQiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikKIAogQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Ci0gICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKLQorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCiAJbW9kaWZpZWQ6ICAgdG8tcmV2ZXJ0LnR4dAogCiBVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKZGlmZiAtLWdpdCBhL3QvdDc1MTMtaW50ZXJwcmV0LXRyYWlsZXJzLnNoIGIvdC90NzUxMy1pbnRlcnByZXQtdHJhaWxlcnMuc2gKaW5kZXggYzQ0MTg2MS4uZjE5MjAyYiAxMDA3NTUKLS0tIGEvdC90NzUxMy1pbnRlcnByZXQtdHJhaWxlcnMuc2gKKysrIGIvdC90NzUxMy1pbnRlcnByZXQtdHJhaWxlcnMuc2gKQEAgLTUzOCwzMyArNTM4LDUwIEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbWVzc2FnZSB0aGF0IGhhcyBjb21tZW50cycgJwotCWNhdCBiYXNpY19tZXNzYWdlID5tZXNzYWdlX3dpdGhfY29tbWVudHMgJiYKLQlzZWQgLWUgInMvIFpcJC8gLyIgPj5tZXNzYWdlX3dpdGhfY29tbWVudHMgPDwtXEVPRiAmJgotCQkjIGNvbW1lbnQKKyMgQ292ZXIgbXVsdGlwbGUgY29tbWVudCBjaGFyYWN0ZXJzIHdpdGggdGhlIHNhbWUgdGVzdCBpbnB1dC4KK2ZvciBjaGFyIGluICIjIiAiOyIKK2RvCisJY2FzZSAiJGNoYXIiIGluCisJIiMiKQorCQkjIFRoaXMgaXMgdGhlIGRlZmF1bHQsIHNvIGxldCdzIGV4cGxpY2l0bHkgX25vdF8KKwkJIyBzZXQgYW55IGNvbmZpZyB0byBtYWtlIHN1cmUgaXQgYmVoYXZlcyBhcyB3ZSBleHBlY3QuCisJCTs7CisJKikKKwkJY29uZmlnPSItYyBjb3JlLmNvbW1lbnRDaGFyPSRjaGFyIgorCQk7OworCWVzYWMKIAotCQkjIG90aGVyIGNvbW1lbnQKLQkJQ2M6IFoKLQkJIyB5ZXQgYW5vdGhlciBjb21tZW50Ci0JCVJldmlld2VkLWJ5OiBKb2hhbgotCQlSZXZpZXdlZC1ieTogWgotCQkjIGxhc3QgY29tbWVudAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIndpdGggbWVzc2FnZSB0aGF0IGhhcyBjb21tZW50cyAoJGNoYXIpIiAnCisJCWNhdCBiYXNpY19tZXNzYWdlID5tZXNzYWdlX3dpdGhfY29tbWVudHMgJiYKKwkJc2VkIC1lICJzLyBaXCQvIC8iIFwKKwkJICAgIC1lICJzLyMvJGNoYXIvZyIgPj5tZXNzYWdlX3dpdGhfY29tbWVudHMgPDwtRU9GICYmCisJCQkjIGNvbW1lbnQKIAotCUVPRgotCWNhdCBiYXNpY19wYXRjaCA+Pm1lc3NhZ2Vfd2l0aF9jb21tZW50cyAmJgotCWNhdCBiYXNpY19tZXNzYWdlID5leHBlY3RlZCAmJgotCWNhdCA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKLQkJIyBjb21tZW50CisJCQkjIG90aGVyIGNvbW1lbnQKKwkJCUNjOiBaCisJCQkjIHlldCBhbm90aGVyIGNvbW1lbnQKKwkJCVJldmlld2VkLWJ5OiBKb2hhbgorCQkJUmV2aWV3ZWQtYnk6IFoKKwkJCSMgbGFzdCBjb21tZW50CiAKLQkJUmV2aWV3ZWQtYnk6IEpvaGFuCi0JCUNjOiBQZWZmCi0JCSMgbGFzdCBjb21tZW50CisJCUVPRgorCQljYXQgYmFzaWNfcGF0Y2ggPj5tZXNzYWdlX3dpdGhfY29tbWVudHMgJiYKKwkJY2F0IGJhc2ljX21lc3NhZ2UgPmV4cGVjdGVkICYmCisJCXNlZCAtZSAicy8jLyRjaGFyL2ciID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQkJIyBjb21tZW50CiAKLQlFT0YKLQljYXQgYmFzaWNfcGF0Y2ggPj5leHBlY3RlZCAmJgotCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiQ2M6IFBlZmYiIG1lc3NhZ2Vfd2l0aF9jb21tZW50cyA+YWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCi0nCisJCQlSZXZpZXdlZC1ieTogSm9oYW4KKwkJCUNjOiBQZWZmCisJCQkjIGxhc3QgY29tbWVudAorCisJCUVPRgorCQljYXQgYmFzaWNfcGF0Y2ggPj5leHBlY3RlZCAmJgorCQlnaXQgJGNvbmZpZyBpbnRlcnByZXQtdHJhaWxlcnMgXAorCQkJLS10cmltLWVtcHR5IC0tdHJhaWxlciAiQ2M6IFBlZmYiIFwKKwkJCW1lc3NhZ2Vfd2l0aF9jb21tZW50cyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKK2RvbmUKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBtZXNzYWdlIHRoYXQgaGFzIGFuIG9sZCBzdHlsZSBjb25mbGljdCBibG9jaycgJwogCWNhdCBiYXNpY19tZXNzYWdlID5tZXNzYWdlX3dpdGhfY29tbWVudHMgJiYKZGlmZiAtLWdpdCBhL3QvdDc2MDAtbWVyZ2Uuc2ggYi90L3Q3NjAwLW1lcmdlLnNoCmluZGV4IDRlYzVkOWUuLjEzMjYwODggMTAwNzU1Ci0tLSBhL3QvdDc2MDAtbWVyZ2Uuc2gKKysrIGIvdC90NzYwMC1tZXJnZS5zaApAQCAtODczLDQgKzg3Myw1MCBAQAogCXZlcmlmeV9wYXJlbnRzICRjMCAkYzEKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1xdWl0JyAnCisJZ2l0IGluaXQgbWVyZ2UtcXVpdCAmJgorCSgKKwkJY2QgbWVyZ2UtcXVpdCAmJgorCQl0ZXN0X2NvbW1pdCBiYXNlICYmCisJCWVjaG8gb25lID4+YmFzZS50ICYmCisJCWdpdCBjb21taXQgLWFtIG9uZSAmJgorCQlnaXQgYnJhbmNoIG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgYmFzZSAmJgorCQllY2hvIHR3byA+PmJhc2UudCAmJgorCQlnaXQgY29tbWl0IC1hbSB0d28gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHJlcmVyZS5lbmFibGVkPXRydWUgbWVyZ2Ugb25lICYmCisJCXRlc3RfcGF0aF9pc19maWxlIC5naXQvTUVSR0VfSEVBRCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L01FUkdFX01PREUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9NRVJHRV9NU0cgJiYKKwkJZ2l0IHJlcmVyZSBzdGF0dXMgPnJlcmVyZS5iZWZvcmUgJiYKKwkJZ2l0IG1lcmdlIC0tcXVpdCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9NT0RFICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfTVNHICYmCisJCWdpdCByZXJlcmUgc3RhdHVzID5yZXJlcmUuYWZ0ZXIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IHJlcmVyZS5hZnRlciAmJgorCQkhIHRlc3RfY21wIHJlcmVyZS5hZnRlciByZXJlcmUuYmVmb3JlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBzdWdnZXN0cyBtYXRjaGluZyByZW1vdGUgcmVmbmFtZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBub3QtbG9jYWwgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL25vdC1sb2NhbCBIRUFEICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCisJIyBUaGlzIGlzIHdoaXRlLWJveCB0ZXN0aW5nIGhhY2tlcnk7IHdlIGhhcHBlbiB0byBrbm93CisJIyB0aGF0IHJlYWRpbmcgcGFja2VkIHJlZnMgaXMgbW9yZSBwaWNreSBhYm91dCB0aGUgbWVtb3J5CisJIyBvd25lcnNoaXAgb2Ygc3RyaW5ncyB3ZSBwYXNzIHRvIGZvcl9lYWNoX3JlZigpIGNhbGxiYWNrcy4KKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBub3QtbG9jYWwgMj5zdGRlcnIgJiYKKwlncmVwIG9yaWdpbi9ub3QtbG9jYWwgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Z2dlc3RlZCBuYW1lcyBhcmUgbm90IGFtYmlndW91cycgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvb3JpZ2luL25vdC1sb2NhbCBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG5vdC1sb2NhbCAyPnN0ZGVyciAmJgorCWdyZXAgcmVtb3Rlcy9vcmlnaW4vbm90LWxvY2FsIHN0ZGVycgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MTAtbWVyZ2V0b29sLnNoIGIvdC90NzYxMC1tZXJnZXRvb2wuc2gKaW5kZXggNWI2MWMxMC4uYWQyODhkZCAxMDA3NTUKLS0tIGEvdC90NzYxMC1tZXJnZXRvb2wuc2gKKysrIGIvdC90NzYxMC1tZXJnZXRvb2wuc2gKQEAgLTEzMSwxNyArMTMxLDIxIEBACiAJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCiAJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggKSAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMSApICYmCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUyICJzcGFjZWQgbmFtZSIgKSAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvZmlsZTMgKSAmJgotCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExICkgJiYKLQkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMiApICYmCi0JKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgotCXRlc3QgIiQoY2F0IGZpbGUxKSIgPSAibWFzdGVyIHVwZGF0ZWQiICYmCi0JdGVzdCAiJChjYXQgZmlsZTIpIiA9ICJtYXN0ZXIgbmV3IiAmJgotCXRlc3QgIiQoY2F0IHN1YmRpci9maWxlMykiID0gIm1hc3RlciBuZXcgc3ViIiAmJgotCXRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJicmFuY2gxIHN1Ym1vZHVsZSIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUxICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMiAic3BhY2VkIG5hbWUiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTIgJiYKKwl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKKwllY2hvICJtYXN0ZXIgdXBkYXRlZCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMSAmJgorCWVjaG8gIm1hc3RlciBuZXciID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTIgJiYKKwllY2hvICJtYXN0ZXIgbmV3IHN1YiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJkaXIvZmlsZTMgJiYKKwllY2hvICJicmFuY2gxIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCiAJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCIKICcKIApAQCAtMTUzLDE3ICsxNTcsMjEgQEAKIAlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgYm90aCApICYmCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC1nIGZpbGUxIGZpbGUxICkgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTIgInNwYWNlZCBuYW1lIiApICYmCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC0tZ3VpIHN1YmRpci9maWxlMyApICYmCi0JKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBmaWxlMTEgKSAmJgotCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTEyICkgJiYKLQkoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIC0tZ3VpIHN1Ym1vZCApICYmCi0JdGVzdCAiJChjYXQgZmlsZTEpIiA9ICJndWkgbWFzdGVyIHVwZGF0ZWQiICYmCi0JdGVzdCAiJChjYXQgZmlsZTIpIiA9ICJndWkgbWFzdGVyIG5ldyIgJiYKLQl0ZXN0ICIkKGNhdCBzdWJkaXIvZmlsZTMpIiA9ICJndWkgbWFzdGVyIG5ldyBzdWIiICYmCi0JdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gImJyYW5jaDEgc3VibW9kdWxlIiAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgYm90aCAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLWcgZmlsZTEgZmlsZTEgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC0tZ3VpIGZpbGUyICJzcGFjZWQgbmFtZSIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC0tZ3VpIHN1YmRpci9maWxlMyAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIC0tZ3VpIGZpbGUxMSAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIC0tZ3VpIGZpbGUxMiAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIC0tZ3VpIHN1Ym1vZCAmJgorCWVjaG8gImd1aSBtYXN0ZXIgdXBkYXRlZCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMSAmJgorCWVjaG8gImd1aSBtYXN0ZXIgbmV3IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyICYmCisJZWNobyAiZ3VpIG1hc3RlciBuZXcgc3ViIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmRpci9maWxlMyAmJgorCWVjaG8gImJyYW5jaDEgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC9iYXIgJiYKIAlnaXQgY29tbWl0IC1tICJicmFuY2gxIHJlc29sdmVkIHdpdGggbWVyZ2V0b29sIgogJwogCkBAIC0xNzIsMTcgKzE4MCwyMSBAQAogCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgogCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBib3RoICkgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLWcgZmlsZTEgZmlsZTEgKSAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBmaWxlMiAic3BhY2VkIG5hbWUiICkgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgc3ViZGlyL2ZpbGUzICkgJiYKLQkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIC0tZ3VpIGZpbGUxMSApICYmCi0JKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBmaWxlMTIgKSAmJgotCSggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgc3VibW9kICkgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIm1hc3RlciB1cGRhdGVkIiAmJgotCXRlc3QgIiQoY2F0IGZpbGUyKSIgPSAibWFzdGVyIG5ldyIgJiYKLQl0ZXN0ICIkKGNhdCBzdWJkaXIvZmlsZTMpIiA9ICJtYXN0ZXIgbmV3IHN1YiIgJiYKLQl0ZXN0ICIkKGNhdCBzdWJtb2QvYmFyKSIgPSAiYnJhbmNoMSBzdWJtb2R1bGUiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBib3RoICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtZyBmaWxlMSBmaWxlMSAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTIgInNwYWNlZCBuYW1lIiAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgc3ViZGlyL2ZpbGUzICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTExICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTEyICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgc3VibW9kICYmCisJZWNobyAibWFzdGVyIHVwZGF0ZWQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTEgJiYKKwllY2hvICJtYXN0ZXIgbmV3IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyICYmCisJZWNobyAibWFzdGVyIG5ldyBzdWIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3ViZGlyL2ZpbGUzICYmCisJZWNobyAiYnJhbmNoMSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgogCWdpdCBjb21taXQgLW0gImJyYW5jaDEgcmVzb2x2ZWQgd2l0aCBtZXJnZXRvb2wiCiAnCiAKQEAgLTE5NSwxOSArMjA3LDIwIEBACiAJdGVzdF9jb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCiAJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSApICYmCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUyICkgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgInNwYWNlZCBuYW1lIiApICYmCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggKSAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvZmlsZTMgKSAmJgotCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExICkgJiYKLQkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMiApICYmCi0JKCB5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUyICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAic3BhY2VkIG5hbWUiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTIgJiYKKwl5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKIAl0ZXN0ICIkKHByaW50ZiB4IHwgY2F0IGZpbGUxIC0pIiA9ICIkKHByaW50ZiAibWFzdGVyIHVwZGF0ZWRcclxueCIpIiAmJgogCXRlc3QgIiQocHJpbnRmIHggfCBjYXQgZmlsZTIgLSkiID0gIiQocHJpbnRmICJtYXN0ZXIgbmV3XHJcbngiKSIgJiYKIAl0ZXN0ICIkKHByaW50ZiB4IHwgY2F0IHN1YmRpci9maWxlMyAtKSIgPSAiJChwcmludGYgIm1hc3RlciBuZXcgc3ViXHJcbngiKSIgJiYKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgotCXRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJtYXN0ZXIgc3VibW9kdWxlIiAmJgorCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgogCWdpdCBjb21taXQgLW0gImJyYW5jaDEgcmVzb2x2ZWQgd2l0aCBtZXJnZXRvb2wgLSBhdXRvY3JsZiIKICcKIApAQCAtMjE4LDggKzIzMSw5IEBACiAJKAogCQljZCBzdWJkaXIgJiYKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgotCQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTMgKSAmJgotCQl0ZXN0ICIkKGNhdCBmaWxlMykiID0gIm1hc3RlciBuZXcgc3ViIgorCQl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUzICYmCisJCWVjaG8gIm1hc3RlciBuZXcgc3ViIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlMwogCSkKICcKIApAQCAtMjMwLDE2ICsyNDQsMTkgQEAKIAkoCiAJCWNkIHN1YmRpciAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCi0JCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMyApICYmCi0JCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMSApICYmCi0JCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMiAuLi9zcGFjZWRcIG5hbWUgKSAmJgotCQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLi4vYm90aCApICYmCi0JCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLi4vZmlsZTExICkgJiYKLQkJKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMTIgKSAmJgotCQkoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIC4uL3N1Ym1vZCApICYmCi0JCXRlc3QgIiQoY2F0IC4uL2ZpbGUxKSIgPSAibWFzdGVyIHVwZGF0ZWQiICYmCi0JCXRlc3QgIiQoY2F0IC4uL2ZpbGUyKSIgPSAibWFzdGVyIG5ldyIgJiYKLQkJdGVzdCAiJChjYXQgLi4vc3VibW9kL2JhcikiID0gImJyYW5jaDEgc3VibW9kdWxlIiAmJgorCQl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUzICYmCisJCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLi4vZmlsZTEgJiYKKwkJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMiAuLi9zcGFjZWRcIG5hbWUgJiYKKwkJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAuLi9ib3RoICYmCisJCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIC4uL2ZpbGUxMSAmJgorCQl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMTIgJiYKKwkJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgLi4vc3VibW9kICYmCisJCWVjaG8gIm1hc3RlciB1cGRhdGVkIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCAuLi9maWxlMSAmJgorCQllY2hvICJtYXN0ZXIgbmV3IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCAuLi9maWxlMiAmJgorCQllY2hvICJicmFuY2gxIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLi4vc3VibW9kL2JhciAmJgogCQlnaXQgY29tbWl0IC1tICJicmFuY2gxIHJlc29sdmVkIHdpdGggbWVyZ2V0b29sIC0gc3ViZGlyIgogCSkKICcKQEAgLTI1MCw5ICsyNjcsOSBAQAogCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgogCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKLQkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSApICYmCi0JKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTIgKSAmJgotCSggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTIgJiYKKwl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKIAlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCiAJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIgogJwpAQCAtMjY0LDEzICsyODEsMTcgQEAKIAkoCiAJCWNkIHN1YmRpciAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCi0JCSggeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgLi4vc3VibW9kICkgJiYKLQkJKCB5ZXMgImQiICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgKSAmJgotCQl0ZXN0ICIkKGNhdCAuLi9maWxlMSkiID0gIm1hc3RlciB1cGRhdGVkIiAmJgotCQl0ZXN0ICIkKGNhdCAuLi9maWxlMikiID0gIm1hc3RlciBuZXciICYmCi0JCXRlc3QgIiQoY2F0IGZpbGUzKSIgPSAibWFzdGVyIG5ldyBzdWIiICYmCisJCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIC4uL3N1Ym1vZCAmJgorCQl5ZXMgImQiICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgJiYKKwkJZWNobyAibWFzdGVyIHVwZGF0ZWQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL2ZpbGUxICYmCisJCWVjaG8gIm1hc3RlciBuZXciID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL2ZpbGUyICYmCisJCWVjaG8gIm1hc3RlciBuZXcgc3ViIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlMyAmJgogCQkoIGNkIC4uICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICkgJiYKLQkJdGVzdCAiJChjYXQgLi4vc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL3N1Ym1vZC9iYXIgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMiByZXNvbHZlZCBieSBtZXJnZXRvb2wgZnJvbSBzdWJkaXIiCiAJKQogJwpAQCAtMjgzLDEzICszMDQsMTcgQEAKIAkoCiAJCWNkIHN1YmRpciAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCi0JCSggeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgLi4vc3VibW9kICkgJiYKLQkJKCB5ZXMgImQiICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgKSAmJgotCQl0ZXN0ICIkKGNhdCAuLi9maWxlMSkiID0gIm1hc3RlciB1cGRhdGVkIiAmJgotCQl0ZXN0ICIkKGNhdCAuLi9maWxlMikiID0gIm1hc3RlciBuZXciICYmCi0JCXRlc3QgIiQoY2F0IGZpbGUzKSIgPSAibWFzdGVyIG5ldyBzdWIiICYmCisJCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIC4uL3N1Ym1vZCAmJgorCQl5ZXMgImQiICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgJiYKKwkJZWNobyAibWFzdGVyIHVwZGF0ZWQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL2ZpbGUxICYmCisJCWVjaG8gIm1hc3RlciBuZXciID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL2ZpbGUyICYmCisJCWVjaG8gIm1hc3RlciBuZXcgc3ViIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlMyAmJgogCQkoIGNkIC4uICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICkgJiYKLQkJdGVzdCAiJChjYXQgLi4vc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL3N1Ym1vZC9iYXIgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMiByZXNvbHZlZCBieSBtZXJnZXRvb2wgZnJvbSBzdWJkaXIiCiAJKQogJwpAQCAtMzAxLDggKzMyNiw4IEBACiAJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCiAJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCi0JKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCBzdWJtb2QgKSAmJgotCSggeWVzICJkIiAiZCIgfCBnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0ICkgJiYKKwl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCBzdWJtb2QgJiYKKwl5ZXMgImQiICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgJiYKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgogCW91dHB1dD0iJCh5ZXMgIm4iIHwgZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCiAJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIgpAQCAtMzQzLDkgKzM2OCwxMCBAQAogCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgogCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIHN1YmRpciApICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIgJiYKIAotCXRlc3QgIiQoY2F0IHN1YmRpci9maWxlMykiID0gIm1hc3RlciBuZXcgc3ViIgorCWVjaG8gIm1hc3RlciBuZXcgc3ViIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmRpci9maWxlMwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgZGVsZXRlL2RlbGV0ZSBjb25mbGljdCcgJwpAQCAtNDEwLDE0ICs0MzYsMTYgQEAKIAlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50LmEgdGVzdCR0ZXN0X2NvdW50ICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgogCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyApICYmCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggKSAmJgotCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiApICYmCi0JKCB5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgJiYKKwl5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKIAlybWRpciBzdWJtb2QgJiYgbXYgc3VibW9kLW1vdmVkYXNpZGUgc3VibW9kICYmCi0JdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gImJyYW5jaDEgc3VibW9kdWxlIiAmJgorCWVjaG8gImJyYW5jaDEgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC9iYXIgJiYKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgotCXRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJtYXN0ZXIgc3VibW9kdWxlIiAmJgorCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgogCW91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKIAl0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCiAJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkga2VlcGluZyBtb2R1bGUiICYmCkBAIC00MjcsMTAgKzQ1NSwxMCBAQAogCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgogCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyApICYmCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggKSAmJgotCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiApICYmCi0JKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgJiYKKwl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKIAl0ZXN0ICEgLWUgc3VibW9kICYmCiAJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgogCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKQEAgLTQ0MSwxMCArNDY5LDEwIEBACiAJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdCR0ZXN0X2NvdW50ICYmCiAJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICkgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCApICYmCi0JKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICkgJiYKLQkoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiAmJgorCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgogCXRlc3QgISAtZSBzdWJtb2QgJiYKIAl0ZXN0IC1kIHN1Ym1vZC5vcmlnICYmCiAJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKQEAgLTQ1NywxMyArNDg1LDE1IEBACiAJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdCR0ZXN0X2NvdW50ICYmCiAJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICkgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCApICYmCi0JKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICkgJiYKLQkoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCi0JdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgogCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCi0JdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCiAJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgogCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKIAlnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBrZWVwaW5nIG1vZHVsZSIKQEAgLTQ4MSwxNCArNTExLDE2IEBACiAJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudC5hIGJyYW5jaDEgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCiAJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICkgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCApICYmCi0JKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICkgJiYKLQkoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiAmJgorCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgogCXJtZGlyIHN1Ym1vZCAmJiBtdiBzdWJtb2QtbW92ZWRhc2lkZSBzdWJtb2QgJiYKLQl0ZXN0ICIkKGNhdCBzdWJtb2QvYmFyKSIgPSAiYnJhbmNoMSBzdWJtb2R1bGUiICYmCisJZWNobyAiYnJhbmNoMSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgogCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCi0JdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCiAJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgogCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKIAlnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBrZWVwaW5nIG1vZHVsZSIgJiYKQEAgLTQ5NywxMiArNTI5LDEzIEBACiAJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudC5iIHRlc3QkdGVzdF9jb3VudCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKIAl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgKSAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICkgJiYKLQkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgKSAmJgotCSggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCiAJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKLQl0ZXN0ICIkKGNhdCBzdWJtb2QpIiA9ICJub3QgYSBzdWJtb2R1bGUiICYmCisJZWNobyAibm90IGEgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZCAmJgogCW91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKIAl0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCiAJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkga2VlcGluZyBmaWxlIiAmJgpAQCAtNTEzLDEzICs1NDYsMTQgQEAKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0JHRlc3RfY291bnQgJiYKIAl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCi0JKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgKSAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICkgJiYKLQkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgKSAmJgotCSggeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICYmCisJeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCiAJdGVzdCAtZCBzdWJtb2Qub3JpZyAmJgogCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCi0JdGVzdCAiJChjYXQgc3VibW9kKSIgPSAibm90IGEgc3VibW9kdWxlIiAmJgorCWVjaG8gIm5vdCBhIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QgJiYKIAlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCiAJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgogCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGtlZXBpbmcgZmlsZSIgJiYKQEAgLTUyOSwxMyArNTYzLDE1IEBACiAJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdCR0ZXN0X2NvdW50ICYmCiAJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgotCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICkgJiYKLQkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCApICYmCi0JKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICkgJiYKLQkoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCi0JdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgogCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCi0JdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCiAJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgogCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKIAlnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBrZWVwaW5nIG1vZHVsZSIKQEAgLTU4NywxOSArNjIzLDIzIEBACiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3QkdGVzdF9jb3VudC5hICYmCiAJKAogCQljZCBzdWJkaXIgJiYKLQkJKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXJfbW9kdWxlICkKKwkJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3ViZGlyX21vZHVsZQogCSkgJiYKLQl0ZXN0ICIkKGNhdCBzdWJkaXIvc3ViZGlyX21vZHVsZS9maWxlMTUpIiA9ICJ0ZXN0JHRlc3RfY291bnQuYiIgJiYKKwllY2hvICJ0ZXN0JHRlc3RfY291bnQuYiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJkaXIvc3ViZGlyX21vZHVsZS9maWxlMTUgJiYKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgotCXRlc3QgIiQoY2F0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSkiID0gInRlc3QkdGVzdF9jb3VudC5iIiAmJgorCWVjaG8gInRlc3QkdGVzdF9jb3VudC5iIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSAmJgogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgogCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3QkdGVzdF9jb3VudC5hICYmCi0JKCB5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvc3ViZGlyX21vZHVsZSApICYmCi0JdGVzdCAiJChjYXQgc3ViZGlyL3N1YmRpcl9tb2R1bGUvZmlsZTE1KSIgPSAidGVzdCR0ZXN0X2NvdW50LmIiICYmCisJeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3ViZGlyL3N1YmRpcl9tb2R1bGUgJiYKKwllY2hvICJ0ZXN0JHRlc3RfY291bnQuYiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJkaXIvc3ViZGlyX21vZHVsZS9maWxlMTUgJiYKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgotCXRlc3QgIiQoY2F0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSkiID0gInRlc3QkdGVzdF9jb3VudC5hIiAmJgorCWVjaG8gInRlc3QkdGVzdF9jb3VudC5hIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSAmJgogCWdpdCBjb21taXQgLW0gImJyYW5jaDEgcmVzb2x2ZWQgd2l0aCBtZXJnZXRvb2wiCiAnCiAKQEAgLTYxNSwyMiArNjU1LDI1IEBACiAKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCiAJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgotCSggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKLQl0ZXN0ICIkKGNhdCBzdWJtb2QvZmlsZTE2KSIgPSAibm90IGEgc3VibW9kdWxlIiAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCWVjaG8gIm5vdCBhIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvZmlsZTE2ICYmCiAJcm0gLXJmIHN1Ym1vZC5vcmlnICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgogCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKIAl0ZXN0ICEgLWUgc3VibW9kLm9yaWcgJiYKLQkoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisJeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCiAJdGVzdCAtZCBzdWJtb2Qub3JpZyAmJgotCXRlc3QgIiQoY2F0IHN1Ym1vZC5vcmlnL2ZpbGUxNikiID0gIm5vdCBhIHN1Ym1vZHVsZSIgJiYKKwllY2hvICJub3QgYSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kLm9yaWcvZmlsZTE2ICYmCiAJcm0gLXIgc3VibW9kLm9yaWcgJiYKIAltdiBzdWJtb2QtbW92ZWRhc2lkZS8uZ2l0IHN1Ym1vZCAmJgogCSggY2Qgc3VibW9kICYmIGdpdCBjbGVhbiAtZiAmJiBnaXQgcmVzZXQgLS1oYXJkICkgJiYKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgotCXRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJtYXN0ZXIgc3VibW9kdWxlIiAmJgorCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlybSAtcmYgc3VibW9kLW1vdmVkYXNpZGUgJiYKIApAQCAtNjM4LDE3ICs2ODEsMTkgQEAKIAlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0JHRlc3RfY291bnQgJiYKIAl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCi0JKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgogCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCi0JdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdCR0ZXN0X2NvdW50ICYmCiAJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgogCXRlc3QgISAtZSBzdWJtb2Qub3JpZyAmJgotCSggeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKLQl0ZXN0ICIkKGNhdCBzdWJtb2QvZmlsZTE2KSIgPSAibm90IGEgc3VibW9kdWxlIiAmJgorCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCWVjaG8gIm5vdCBhIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvZmlsZTE2ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgogCSggY2Qgc3VibW9kICYmIGdpdCBjbGVhbiAtZiAmJiBnaXQgcmVzZXQgLS1oYXJkICkgJiYKZGlmZiAtLWdpdCBhL3QvdDc3MDAtcmVwYWNrLnNoIGIvdC90NzcwMC1yZXBhY2suc2gKaW5kZXggODZkMDUxNi4uNGU4NTViYzIgMTAwNzU1Ci0tLSBhL3QvdDc3MDAtcmVwYWNrLnNoCisrKyBiL3QvdDc3MDAtcmVwYWNrLnNoCkBAIC0yMzksNCArMjM5LDI3IEBACiAJdGVzdCAteiAiJGJpdG1hcCIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gYml0bWFwcyBjcmVhdGVkIGlmIC5rZWVwIGZpbGVzIHByZXNlbnQnICcKKwlwYWNrPSQobHMgYmFyZS5naXQvb2JqZWN0cy9wYWNrLyoucGFjaykgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJHBhY2siICYmCisJa2VlcD0ke3BhY2slLnBhY2t9LmtlZXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiXCRrZWVwXCIiICYmCisJPiIka2VlcCIgJiYKKwlnaXQgLUMgYmFyZS5naXQgcmVwYWNrIC1hZCAyPnN0ZGVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBzdGRlcnIgJiYKKwlmaW5kIGJhcmUuZ2l0L29iamVjdHMvcGFjay8gLXR5cGUgZiAtbmFtZSAiKi5iaXRtYXAiID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8tYml0bWFwcyBkbyBub3QgY29tcGxhaW4gaWYgdW5hdmFpbGFibGUnICcKKwl0ZXN0X2NvbmZpZyAtQyBiYXJlLmdpdCBwYWNrLnBhY2tTaXplTGltaXQgMU0gJiYKKwlibG9iPSQodGVzdC10b29sIGdlbnJhbmRvbSBiaWcgJCgoMTAyNCoxMDI0KSkgfAorCSAgICAgICBnaXQgLUMgYmFyZS5naXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlnaXQgLUMgYmFyZS5naXQgdXBkYXRlLXJlZiByZWZzL3RhZ3MvYmlnICRibG9iICYmCisJZ2l0IC1DIGJhcmUuZ2l0IHJlcGFjayAtYWQgMj5zdGRlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgc3RkZXJyICYmCisJZmluZCBiYXJlLmdpdC9vYmplY3RzL3BhY2sgLXR5cGUgZiAtbmFtZSAiKi5iaXRtYXAiID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzgxMC1ncmVwLnNoIGIvdC90NzgxMC1ncmVwLnNoCmluZGV4IDJlMWJiNjEuLjdkN2IzOTYgMTAwNzU1Ci0tLSBhL3QvdDc4MTAtZ3JlcC5zaAorKysgYi90L3Q3ODEwLWdyZXAuc2gKQEAgLTQxMiw3ICs0MTIsNyBAQAogCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKIAknCiAKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICFQQ1JFICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJudHlwZT1wZXJsIGVycm9ycyB3aXRob3V0IFBDUkUiICcKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICFGQUlMX1BSRVJFUVMsIVBDUkUgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm50eXBlPXBlcmwgZXJyb3JzIHdpdGhvdXQgUENSRSIgJwogCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZ3JlcC5wYXR0ZXJudHlwZT1wZXJsIGdyZXAgImZvby4qYmFyIgogCScKIApAQCAtMTIzNCw3ICsxMjM0LDcgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAhUENSRSAnZ3JlcCAtLXBlcmwtcmVnZXhwIHBhdHRlcm4gZXJyb3JzIHdpdGhvdXQgUENSRScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAhRkFJTF9QUkVSRVFTLCFQQ1JFICdncmVwIC0tcGVybC1yZWdleHAgcGF0dGVybiBlcnJvcnMgd2l0aG91dCBQQ1JFJyAnCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1wZXJsLXJlZ2V4cCAiZm9vLipiYXIiCiAnCiAKQEAgLTEyNDksNyArMTI0OSw3IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAhUENSRSAnZ3JlcCAtUCBwYXR0ZXJuIGVycm9ycyB3aXRob3V0IFBDUkUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUZBSUxfUFJFUkVRUywhUENSRSAnZ3JlcCAtUCBwYXR0ZXJuIGVycm9ycyB3aXRob3V0IFBDUkUnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtUCAiZm9vLipiYXIiCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDc4MTQtZ3JlcC1yZWN1cnNlLXN1Ym1vZHVsZXMuc2ggYi90L3Q3ODE0LWdyZXAtcmVjdXJzZS1zdWJtb2R1bGVzLnNoCmluZGV4IDEzNGE2OTQ1Li5hMTEzNjZiIDEwMDc1NQotLS0gYS90L3Q3ODE0LWdyZXAtcmVjdXJzZS1zdWJtb2R1bGVzLnNoCisrKyBiL3QvdDc4MTQtZ3JlcC1yZWN1cnNlLXN1Ym1vZHVsZXMuc2gKQEAgLTE0LDEyICsxNCwxNCBAQAogCWVjaG8gIigzfDQpIiA+Yi9iICYmCiAJZ2l0IGFkZCBhIGIgJiYKIAlnaXQgY29tbWl0IC1tICJhZGQgYSBhbmQgYiIgJiYKKwl0ZXN0X3RpY2sgJiYKIAlnaXQgaW5pdCBzdWJtb2R1bGUgJiYKIAllY2hvICIoMXwyKWQoM3w0KSIgPnN1Ym1vZHVsZS9hICYmCiAJZ2l0IC1DIHN1Ym1vZHVsZSBhZGQgYSAmJgogCWdpdCAtQyBzdWJtb2R1bGUgY29tbWl0IC1tICJhZGQgYSIgJiYKIAlnaXQgc3VibW9kdWxlIGFkZCAuL3N1Ym1vZHVsZSAmJgotCWdpdCBjb21taXQgLW0gImFkZGVkIHN1Ym1vZHVsZSIKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBzdWJtb2R1bGUiICYmCisJdGVzdF90aWNrCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgY29ycmVjdGx5IGZpbmRzIHBhdHRlcm5zIGluIGEgc3VibW9kdWxlJyAnCkBAIC02NSwxMSArNjcsMTQgQEAKIAllY2hvICIoMXwyKWQoM3w0KSIgPnN1Ym1vZHVsZS9zdWIvYSAmJgogCWdpdCAtQyBzdWJtb2R1bGUvc3ViIGFkZCBhICYmCiAJZ2l0IC1DIHN1Ym1vZHVsZS9zdWIgY29tbWl0IC1tICJhZGQgYSIgJiYKKwl0ZXN0X3RpY2sgJiYKIAlnaXQgLUMgc3VibW9kdWxlIHN1Ym1vZHVsZSBhZGQgLi9zdWIgJiYKIAlnaXQgLUMgc3VibW9kdWxlIGFkZCBzdWIgJiYKIAlnaXQgLUMgc3VibW9kdWxlIGNvbW1pdCAtbSAiYWRkZWQgc3ViIiAmJgorCXRlc3RfdGljayAmJgogCWdpdCBhZGQgc3VibW9kdWxlICYmCiAJZ2l0IGNvbW1pdCAtbSAidXBkYXRlZCBzdWJtb2R1bGUiICYmCisJdGVzdF90aWNrICYmCiAKIAljYXQgPmV4cGVjdCA8PC1cRU9GICYmCiAJYTooMXwyKWQoM3w0KQpAQCAtMTc5LDE1ICsxODQsMTggQEAKIAllY2hvICIoMXwyKWQoM3w0KSIgPiJwYXJlbnQvZmk6bGUiICYmCiAJZ2l0IC1DIHBhcmVudCBhZGQgImZpOmxlIiAmJgogCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJhZGQgZmk6bGUiICYmCisJdGVzdF90aWNrICYmCiAKIAlnaXQgaW5pdCAic3U6YiIgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdTpiIiAmJgogCWVjaG8gIigxfDIpZCgzfDQpIiA+InN1OmIvZmk6bGUiICYmCiAJZ2l0IC1DICJzdTpiIiBhZGQgImZpOmxlIiAmJgogCWdpdCAtQyAic3U6YiIgY29tbWl0IC1tICJhZGQgZmk6bGUiICYmCisJdGVzdF90aWNrICYmCiAKIAlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSBhZGQgIi4uL3N1OmIiICJzdTpiIiAmJgogCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIiAmJgorCXRlc3RfdGljayAmJgogCiAJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgogCWZpOmxlOigxfDIpZCgzfDQpCkBAIC0yMTAsMTUgKzIxOCwxOCBAQAogCWVjaG8gIigxfDIpZCgzfDQpIiA+cGFyZW50L2ZpbGUgJiYKIAlnaXQgLUMgcGFyZW50IGFkZCBmaWxlICYmCiAJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gImFkZCBmaWxlIiAmJgorCXRlc3RfdGljayAmJgogCiAJZ2l0IGluaXQgc3ViICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3ViIiAmJgogCWVjaG8gIigxfDIpZCgzfDQpIiA+c3ViL2ZpbGUgJiYKIAlnaXQgLUMgc3ViIGFkZCBmaWxlICYmCiAJZ2l0IC1DIHN1YiBjb21taXQgLW0gImFkZCBmaWxlIiAmJgorCXRlc3RfdGljayAmJgogCiAJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgYWRkIC4uL3N1YiBkaXIvc3ViICYmCiAJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiICYmCisJdGVzdF90aWNrICYmCiAKIAljYXQgPmV4cGVjdCA8PC1cRU9GICYmCiAJZGlyL3N1Yi9maWxlOigxfDIpZCgzfDQpCkBAIC0yMjksNiArMjQwLDcgQEAKIAogCWdpdCAtQyBwYXJlbnQgbXYgZGlyL3N1YiBzdWItbW92ZWQgJiYKIAlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAibW92ZWQgc3VibW9kdWxlIiAmJgorCXRlc3RfdGljayAmJgogCiAJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgogCWZpbGU6KDF8MilkKDN8NCkKQEAgLTI1MSw2ICsyNjMsNyBAQAogCWVjaG8gIigxfDIpZCgzfDQpIiA+c3ViL2ZpbGUgJiYKIAlnaXQgLUMgc3ViIGFkZCBmaWxlICYmCiAJZ2l0IC1DIHN1YiBjb21taXQgLW0gImFkZCBmaWxlIiAmJgorCXRlc3RfdGljayAmJgogCiAJZ2l0IGluaXQgcGFyZW50ICYmCiAJZWNobyAiKDF8MilkKDN8NCkiID5wYXJlbnQvZmlsZSAmJgpAQCAtMjYwLDYgKzI3Myw3IEBACiAJZ2l0IC1DIHBhcmVudCBhZGQgc3JjL2ZpbGUyICYmCiAJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgYWRkIC4uL3N1YiAmJgogCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJhZGQgZmlsZXMgYW5kIHN1Ym1vZHVsZSIgJiYKKwl0ZXN0X3RpY2sgJiYKIAogCSMgRnJvbSB0b3Agd29ya3MKIAljYXQgPmV4cGVjdCA8PC1cRU9GICYmCkBAIC0yOTMsNiArMzA3LDcgQEAKIAllY2hvICIoMXwyKWQoM3w0KSIgPnN1Yi9maWxlICYmCiAJZ2l0IC1DIHN1YiBhZGQgZmlsZSAmJgogCWdpdCAtQyBzdWIgY29tbWl0IC1tICJhZGQgZmlsZSIgJiYKKwl0ZXN0X3RpY2sgJiYKIAogCWdpdCBpbml0IHBhcmVudCAmJgogCW1rZGlyIHBhcmVudC9zcmMgJiYKQEAgLTMwMSw2ICszMTYsNyBAQAogCWdpdCAtQyBwYXJlbnQgc3VibW9kdWxlIGFkZCAuLi9zdWIgc3JjL3N1YiAmJgogCWdpdCAtQyBwYXJlbnQgc3VibW9kdWxlIGFkZCAuLi9zdWIgc3ViICYmCiAJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gImFkZCBmaWxlcyBhbmQgc3VibW9kdWxlcyIgJiYKKwl0ZXN0X3RpY2sgJiYKIAogCSMgVmVyaWZ5IGdyZXAgZnJvbSByb290IHdvcmtzCiAJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgpkaWZmIC0tZ2l0IGEvdC90ODAwMy1ibGFtZS1jb3JuZXItY2FzZXMuc2ggYi90L3Q4MDAzLWJsYW1lLWNvcm5lci1jYXNlcy5zaAppbmRleCBjOTJhNDdiLi4xYzVmYjFkIDEwMDc1NQotLS0gYS90L3Q4MDAzLWJsYW1lLWNvcm5lci1jYXNlcy5zaAorKysgYi90L3Q4MDAzLWJsYW1lLWNvcm5lci1jYXNlcy5zaApAQCAtMjc1LDQgKzI3NSw0MCBAQAogCWdyZXAgIkEgVSBUaG9yIiBhY3R1YWwKICcKIAorIyBUZXN0cyB0aGUgc3BsaXR0aW5nIGFuZCBtZXJnaW5nIG9mIGJsYW1lIGVudHJpZXMgaW4gYmxhbWVfY29hbGVzY2UoKS4KKyMgVGhlIG91dHB1dCBvZiBibGFtZSBpcyB0aGUgc2FtZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGJsYW1lX2NvYWxlc2NlKCkgcnVucworIyBvciBub3QsIHNvIHdlJ2QgbGlrZWx5IG9ubHkgbm90aWNlIGEgcHJvYmxlbSBpZiBibGFtZSBjcmFzaGVzIG9yIGFzc2lnbmVkCisjIGJsYW1lIHRvIHRoZSAic3BsaXR0aW5nIiBjb21taXQgKCdTUExJVCcgYmVsb3cpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgY29hbGVzY2UnICcKKwljYXQgPmdpcmFmZmUgPDwtXEVPRiAmJgorCUFCQworCURFRgorCUVPRgorCWdpdCBhZGQgZ2lyYWZmZSAmJgorCWdpdCBjb21taXQgLW0gIm9yaWdpbmFsIGZpbGUiICYmCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJY2F0ID5naXJhZmZlIDw8LVxFT0YgJiYKKwlBQkMKKwlTUExJVAorCURFRgorCUVPRgorCWdpdCBhZGQgZ2lyYWZmZSAmJgorCWdpdCBjb21taXQgLW0gImludGVyaW9yIFNQTElUIGxpbmUiICYmCisKKwljYXQgPmdpcmFmZmUgPDwtXEVPRiAmJgorCUFCQworCURFRgorCUVPRgorCWdpdCBhZGQgZ2lyYWZmZSAmJgorCWdpdCBjb21taXQgLW0gInNhbWUgY29udGVudHMgYXMgb3JpZ2luYWwiICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkb2lkIDEpIEFCQworCSRvaWQgMikgREVGCisJRU9GCisJZ2l0IC1jIGNvcmUuYWJicmV2PTQwIGJsYW1lIC1zIGdpcmFmZmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDEzLWJsYW1lLWlnbm9yZS1yZXZzLnNoIGIvdC90ODAxMy1ibGFtZS1pZ25vcmUtcmV2cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNmRjMzFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAxMy1ibGFtZS1pZ25vcmUtcmV2cy5zaApAQCAtMCwwICsxLDI3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2lnbm9yZSByZXZpc2lvbnMgd2hlbiBibGFtaW5nJworLiAuL3Rlc3QtbGliLnNoCisKKyMgQ3JlYXRlczoKKyMgCUEtLUItLVgKKyMgQSBhZGRlZCBsaW5lIDEgYW5kIEIgYWRkZWQgbGluZSAyLiAgWCBtYWtlcyBjaGFuZ2VzIHRvIHRob3NlIGxpbmVzLiAgU2FuaXR5CisjIGNoZWNrIHRoYXQgWCBpcyBibGFtZWQgZm9yIGJvdGggbGluZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBBIGZpbGUgbGluZTEgJiYKKworCWVjaG8gbGluZTIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisJZ2l0IHRhZyBCICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIGxpbmUtb25lIGxpbmUtdHdvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBYICYmCisJZ2l0IHRhZyBYICYmCisKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBmaWxlID5ibGFtZV9yYXcgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDEiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgWCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ3JlcCAtRSAiXlswLTlhLWZdKyBbMC05XSsgMiIgYmxhbWVfcmF3IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBYID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisjIElnbm9yZSBYLCBtYWtlIHN1cmUgQSBpcyBibGFtZWQgZm9yIGxpbmUgMSBhbmQgQiBmb3IgbGluZSAyLgordGVzdF9leHBlY3Rfc3VjY2VzcyBpZ25vcmVfcmV2X2NoYW5naW5nX2xpbmVzICcKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiAtLWlnbm9yZS1yZXYgWCBmaWxlID5ibGFtZV9yYXcgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDEiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ3JlcCAtRSAiXlswLTlhLWZdKyBbMC05XSsgMiIgYmxhbWVfcmF3IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBCID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisjIEZvciBpZ25vcmVkIHJldnMgdGhhdCBoYXZlIGFkZGVkICd1bmJsYW1hYmxlJyBsaW5lcywgYXR0cmlidXRlIHRob3NlIHRvIHRoZQorIyBpZ25vcmVkIGNvbW1pdC4KKyMgCUEtLUItLVgtLVkKKyMgV2hlcmUgWSBjaGFuZ2VzIGxpbmVzIDEgYW5kIDIsIGFuZCBhZGRzIGxpbmVzIDMgYW5kIDQuICBUaGUgYWRkZWQgbGluZXMgb3VnaHQKKyMgdG8gaGF2ZSBub3RoaW5nIGluIGNvbW1vbiB3aXRoICJsaW5lLW9uZSIgb3IgImxpbmUtdHdvIiwgdG8ga2VlcCBhbnkKKyMgaGV1cmlzdGljcyBmcm9tIG1hdGNoaW5nIHRoZW0gd2l0aCBhbnkgbGluZXMgaW4gdGhlIHBhcmVudC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgaWdub3JlX3Jldl9hZGRpbmdfdW5ibGFtYWJsZV9saW5lcyAnCisJdGVzdF93cml0ZV9saW5lcyBsaW5lLW9uZS1jaGFuZ2UgbGluZS10d28tY2hhbmdlZCB5MyB5NCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gWSAmJgorCWdpdCB0YWcgWSAmJgorCisJZ2l0IHJldi1wYXJzZSBZID5leHBlY3QgJiYKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBmaWxlIC0taWdub3JlLXJldiBZID5ibGFtZV9yYXcgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDMiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDQiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKyMgSWdub3JlIFggYW5kIFksIGJvdGggaW4gc2VwYXJhdGUgZmlsZXMuICBMaW5lcyAxID09IEEsIDIgPT0gQi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgaWdub3JlX3JldnNfZnJvbV9maWxlcyAnCisJZ2l0IHJldi1wYXJzZSBYID5pZ25vcmVfeCAmJgorCWdpdCByZXYtcGFyc2UgWSA+aWdub3JlX3kgJiYKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBmaWxlIC0taWdub3JlLXJldnMtZmlsZSBpZ25vcmVfeCAtLWlnbm9yZS1yZXZzLWZpbGUgaWdub3JlX3kgPmJsYW1lX3JhdyAmJgorCisJZ3JlcCAtRSAiXlswLTlhLWZdKyBbMC05XSsgMSIgYmxhbWVfcmF3IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBBID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlncmVwIC1FICJeWzAtOWEtZl0rIFswLTldKyAyIiBibGFtZV9yYXcgfCBzZWQgLWUgInMvIC4qLy8iID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKyMgSWdub3JlIFggZnJvbSB0aGUgY29uZmlnIG9wdGlvbiwgWSBmcm9tIGEgZmlsZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgaWdub3JlX3JldnNfZnJvbV9jb25maWdzX2FuZF9maWxlcyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBibGFtZS5pZ25vcmVSZXZzRmlsZSBpZ25vcmVfeCAmJgorCWdpdCBibGFtZSAtLWxpbmUtcG9yY2VsYWluIGZpbGUgLS1pZ25vcmUtcmV2cy1maWxlIGlnbm9yZV95ID5ibGFtZV9yYXcgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDEiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ3JlcCAtRSAiXlswLTlhLWZdKyBbMC05XSsgMiIgYmxhbWVfcmF3IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBCID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisjIE92ZXJyaWRlIGJsYW1lLmlnbm9yZVJldnNGaWxlIChpZ25vcmVfeCkgd2l0aCBhbiBlbXB0eSBzdHJpbmcuICBYIHNob3VsZCBiZQorIyBibGFtZWQgbm93IGZvciBsaW5lcyAxIGFuZCAyLCBzaW5jZSB3ZSBhcmUgbm8gbG9uZ2VyIGlnbm9yaW5nIFguCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG92ZXJyaWRlX2lnbm9yZV9yZXZzX2ZpbGUgJworCWdpdCBibGFtZSAtLWxpbmUtcG9yY2VsYWluIGZpbGUgLS1pZ25vcmUtcmV2cy1maWxlICIiIC0taWdub3JlLXJldnMtZmlsZSBpZ25vcmVfeSA+YmxhbWVfcmF3ICYmCisJZ2l0IHJldi1wYXJzZSBYID5leHBlY3QgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDEiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDIiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGJhZF9maWxlc19hbmRfcmV2cyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJsYW1lIGZpbGUgLS1pZ25vcmUtcmV2IE5PUkVWIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiY2Fubm90IGZpbmQgcmV2aXNpb24gTk9SRVYgdG8gaWdub3JlIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBibGFtZSBmaWxlIC0taWdub3JlLXJldnMtZmlsZSBOT0ZJTEUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJjb3VsZCBub3Qgb3Blbi4qOiBOT0ZJTEUiIGVyciAmJgorCisJZWNobyBOT1JFViA+aWdub3JlX25vcmV2ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJsYW1lIGZpbGUgLS1pZ25vcmUtcmV2cy1maWxlIGlnbm9yZV9ub3JldiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQgb2JqZWN0IG5hbWU6IE5PUkVWIiBlcnIKKwknCisKKyMgRm9yIGlnbm9yZWQgcmV2cyB0aGF0IGhhdmUgYWRkZWQgJ3VuYmxhbWFibGUnIGxpbmVzLCBtYXJrIHRob3NlIGxpbmVzIHdpdGggYQorIyAnKicKKyMgCUEtLUItLVgtLVkKKyMgTGluZXMgMyBhbmQgNCBhcmUgZnJvbSBZIGFuZCB1bmJsYW1hYmxlLiAgVGhpcyB3YXMgc2V0IHVwIGluCisjIGlnbm9yZV9yZXZfYWRkaW5nX3VuYmxhbWFibGVfbGluZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG1hcmtfdW5ibGFtYWJsZV9saW5lcyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBibGFtZS5tYXJrVW5ibGFtYWJsZUxpbmVzIHRydWUgJiYKKworCWdpdCBibGFtZSAtLWlnbm9yZS1yZXYgWSBmaWxlID5ibGFtZV9yYXcgJiYKKwllY2hvICIqIiA+ZXhwZWN0ICYmCisKKwlzZWQgLW4gIjNwIiBibGFtZV9yYXcgfCBjdXQgLWMxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlzZWQgLW4gIjRwIiBibGFtZV9yYXcgfCBjdXQgLWMxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisjIENvbW1pdCBaIHdpbGwgdG91Y2ggdGhlIGZpcnN0IHR3byBsaW5lcy4gIFkgdG91Y2hlZCBhbGwgZm91ci4KKyMgCUEtLUItLVgtLVktLVoKKyMgVGhlIGJsYW1lIG91dHB1dCB3aGVuIGlnbm9yaW5nIFogc2hvdWxkIGJlOgorIyA/WSAuLi4gMSkKKyMgP1kgLi4uIDIpCisjIFkgIC4uLiAzKQorIyBZICAuLi4gNCkKKyMgV2UncmUgY2hlY2tpbmcgb25seSB0aGUgZmlyc3QgY2hhcmFjdGVyCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG1hcmtfaWdub3JlZF9saW5lcyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBibGFtZS5tYXJrSWdub3JlZExpbmVzIHRydWUgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgbGluZS1vbmUtWiBsaW5lLXR3by1aIHkzIHk0ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBaICYmCisJZ2l0IHRhZyBaICYmCisKKwlnaXQgYmxhbWUgLS1pZ25vcmUtcmV2IFogZmlsZSA+YmxhbWVfcmF3ICYmCisJZWNobyAiPyIgPmV4cGVjdCAmJgorCisJc2VkIC1uICIxcCIgYmxhbWVfcmF3IHwgY3V0IC1jMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJc2VkIC1uICIycCIgYmxhbWVfcmF3IHwgY3V0IC1jMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJc2VkIC1uICIzcCIgYmxhbWVfcmF3IHwgY3V0IC1jMSA+YWN0dWFsICYmCisJISB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlzZWQgLW4gIjRwIiBibGFtZV9yYXcgfCBjdXQgLWMxID5hY3R1YWwgJiYKKwkhIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKyMgRm9yIGlnbm9yZWQgcmV2cyB0aGF0IGFkZGVkICd1bmJsYW1hYmxlJyBsaW5lcyBhbmQgbW9yZSByZWNlbnQgY29tbWl0cyBjaGFuZ2VkCisjIHRoZSBibGFtYWJsZSBsaW5lcywgbWFyayB0aGUgdW5ibGFtYWJsZSBsaW5lcyB3aXRoIGEKKyMgJyonCisjIAlBLS1CLS1YLS1ZLS1aCisjIExpbmVzIDMgYW5kIDQgYXJlIGZyb20gWSBhbmQgdW5ibGFtYWJsZSwgYXMgc2V0IHVwIGluCisjIGlnbm9yZV9yZXZfYWRkaW5nX3VuYmxhbWFibGVfbGluZXMuICBaIGNoYW5nZWQgbGluZXMgMSBhbmQgMi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgbWFya191bmJsYW1hYmxlX2xpbmVzX2ludGVybWVkaWF0ZSAnCisJZ2l0IGNvbmZpZyAtLWFkZCBibGFtZS5tYXJrVW5ibGFtYWJsZUxpbmVzIHRydWUgJiYKKworCWdpdCBibGFtZSAtLWlnbm9yZS1yZXYgWSBmaWxlID5ibGFtZV9yYXcgMj5zdGRlcnIgJiYKKwllY2hvICIqIiA+ZXhwZWN0ICYmCisKKwlzZWQgLW4gIjNwIiBibGFtZV9yYXcgfCBjdXQgLWMxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlzZWQgLW4gIjRwIiBibGFtZV9yYXcgfCBjdXQgLWMxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisjIFRoZSBoZXVyaXN0aWMgY2FsbGVkIGJ5IGd1ZXNzX2xpbmVfYmxhbWVzKCkgdHJpZXMgdG8gZmluZCB0aGUgc2l6ZSBvZiBhCisjIGJsYW1lX2VudHJ5ICdlJyBpbiB0aGUgcGFyZW50J3MgYWRkcmVzcyBzcGFjZS4gIFRob3NlIGNhbGN1bGF0aW9ucyBuZWVkIHRvCisjIGNoZWNrIGZvciBuZWdhdGl2ZSBvciB6ZXJvIHZhbHVlcyBmb3Igd2hlbiBhIGJsYW1lIGVudHJ5IGlzIGNvbXBsZXRlbHkgb3V0c2lkZQorIyB0aGUgd2luZG93IG9mIHRoZSBwYXJlbnQncyB2ZXJzaW9uIG9mIGEgZmlsZS4KKyMKKyMgVGhpcyBoYXBwZW5zIHdoZW4gb25lIGNvbW1pdCBhZGRzIHNldmVyYWwgbGluZXMgKGNvbW1pdCBCIGJlbG93KS4gIEEgbGF0ZXIKKyMgY29tbWl0IChDKSBjaGFuZ2VzIG9uZSBsaW5lIGluIHRoZSBtaWRkbGUgb2YgQidzIGNoYW5nZS4gIENvbW1pdCBDIGdldHMgYmxhbWVkCisjIGZvciBpdHMgY2hhbmdlLCBhbmQgdGhhdCBicmVha3MgdXAgQidzIGNoYW5nZSBpbnRvIG11bHRpcGxlIGJsYW1lIGVudHJpZXMuCisjIFdoZW4gcHJvY2Vzc2luZyBCLCBvbmUgb2YgdGhlIGJsYW1lX2VudHJpZXMgaXMgb3V0c2lkZSBBJ3Mgd2luZG93ICh3aGljaCB3YXMKKyMgemVybyAtIGl0IGhhZCBubyBsaW5lcyBhZGRlZCBvbiBpdHMgc2lkZSBvZiB0aGUgZGlmZikuCisjCisjIEEtLUItLUMsIGlnbm9yZSBCIHRvIHRlc3QgdGhlIGlnbm9yZSBoZXVyaXN0aWMncyBib3VuZGFyeSBjaGVja3MuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGlnbm9yZWRfY2h1bmtfbmVnYXRpdmVfcGFyZW50X3NpemUgJworCXJtIC1yZiAuZ2l0LyAmJgorCWdpdCBpbml0ICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEwxIEwyIEw3IEw4IEw5ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEwxIEwyIEwzIEw0IEw1IEw2IEw3IEw4IEw5ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisJZ2l0IHRhZyBCICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEwxIEwyIEwzIEw0IHh4eCBMNiBMNyBMOCBMOSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQyAmJgorCWdpdCB0YWcgQyAmJgorCisJZ2l0IGJsYW1lIGZpbGUgLS1pZ25vcmUtcmV2IEIgPmJsYW1lX3JhdworCScKKworIyBSZXNldHRpbmcgdGhlIHJlcG8gYW5kIGNyZWF0aW5nOgorIworIyBBLS1CLS1NCisjICBcICAgLworIyAgIEMtKworIworIyAnQScgY3JlYXRlcyBhIGZpbGUuICBCIGNoYW5nZXMgbGluZSAxLCBhbmQgQyBjaGFuZ2VzIGxpbmUgOS4gIE0gbWVyZ2VzLgordGVzdF9leHBlY3Rfc3VjY2VzcyBpZ25vcmVfbWVyZ2UgJworCXJtIC1yZiAuZ2l0LyAmJgorCWdpdCBpbml0ICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEwxIEwyIEwzIEw0IEw1IEw2IEw3IEw4IEw5ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEJCIEwyIEwzIEw0IEw1IEw2IEw3IEw4IEw5ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisJZ2l0IHRhZyBCICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIEEgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIEwxIEwyIEwzIEw0IEw1IEw2IEw3IEw4IENDID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisJZ2l0IHRhZyBDICYmCisKKwl0ZXN0X21lcmdlIE0gQiAmJgorCWdpdCBibGFtZSAtLWxpbmUtcG9yY2VsYWluIGZpbGUgLS1pZ25vcmUtcmV2IE0gPmJsYW1lX3JhdyAmJgorCisJZ3JlcCAtRSAiXlswLTlhLWZdKyBbMC05XSsgMSIgYmxhbWVfcmF3IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBCID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlncmVwIC1FICJeWzAtOWEtZl0rIFswLTldKyA5IiBibGFtZV9yYXcgfCBzZWQgLWUgInMvIC4qLy8iID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAxNC1ibGFtZS1pZ25vcmUtZnV6enkuc2ggYi90L3Q4MDE0LWJsYW1lLWlnbm9yZS1mdXp6eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZTYxODgyCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAxNC1ibGFtZS1pZ25vcmUtZnV6enkuc2gKQEAgLTAsMCArMSw0MzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYmxhbWUgaWdub3JlIGZ1enp5IGhldXJpc3RpYycKKy4gLi90ZXN0LWxpYi5zaAorCitwaWNrX2F1dGhvcj0ncy9eWzAtOWEtZl5dKiAqKFwoW14gXSpcKSAuKi9cMS8nCisKKyMgRWFjaCB0ZXN0IGlzIGNvbXBvc2VkIG9mIDQgdmFyaWFibGVzOgorIyB0aXRsZU4gLSB0aGUgdGVzdCBuYW1lCisjIGFOIC0gdGhlIGluaXRpYWwgY29udGVudAorIyBiTiAtIHRoZSBmaW5hbCBjb250ZW50CisjIGV4cGVjdGVkTiAtIHRoZSBsaW5lIG51bWJlcnMgZnJvbSBhTiB0aGF0IHdlIGV4cGVjdCBnaXQgYmxhbWUKKyMgICAgICAgICAgICAgb24gYk4gdG8gaWRlbnRpZnksIG9yICJGaW5hbCIgaWYgYk4gaXRzZWxmIHNob3VsZAorIyAgICAgICAgICAgICBiZSBpZGVudGlmaWVkIGFzIHRoZSBvcmlnaW4gb2YgdGhhdCBsaW5lLgorCisjIFdlIHN0YXJ0IGF0IHRlc3QgMiBiZWNhdXNlIHNldHVwIHdpbGwgc2hvdyBhcyB0ZXN0IDEKK3RpdGxlMj0iUmVncmVzc2lvbiB0ZXN0IGZvciBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgc2VhcmNoIHJhbmdlcyIKK2NhdCA8PEVPRiA+YTIKKzEKKzIKKzMKK2FiY2RlZgorNQorNgorNworaWprbAorOQorMTAKKzExCitwcXJzCisxMworMTQKKzE1Cit3eHl6CisxNworMTgKKzE5CitFT0YKK2NhdCA8PEVPRiA+YjIKK2FiY2RlCitpamsKK3Bxcgord3h5CitFT0YKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQyCis0Cis4CisxMgorMTYKK0VPRgorCit0aXRsZTM9IkNvbWJpbmUgMyBsaW5lcyBpbnRvIDIiCitjYXQgPDxFT0YgPmEzCitpZiAoKG1heGdyb3c9PTApIHx8CisJKCBzaW5nbGVfbGluZV9maWVsZCAmJiAoZmllbGQtPmRjb2xzIDwgbWF4Z3JvdykpIHx8CisJKCFzaW5nbGVfbGluZV9maWVsZCAmJiAoZmllbGQtPmRyb3dzIDwgbWF4Z3JvdykpKQorRU9GCitjYXQgPDxFT0YgPmIzCitpZiAoKG1heGdyb3cgPT0gMCkgfHwgKHNpbmdsZV9saW5lX2ZpZWxkICYmIChmaWVsZC0+ZGNvbHMgPCBtYXhncm93KSkgfHwKKwkoIXNpbmdsZV9saW5lX2ZpZWxkICYmIChmaWVsZC0+ZHJvd3MgPCBtYXhncm93KSkpIHsKK0VPRgorY2F0IDw8RU9GID5leHBlY3RlZDMKKzIKKzMKK0VPRgorCit0aXRsZTQ9IkFkZCBjdXJseSBicmFja2V0cyIKK2NhdCA8PEVPRiA+YTQKKwlpZiAocm93cykgKnJvd3MgPSBmaWVsZC0+cm93czsKKwlpZiAoY29scykgKmNvbHMgPSBmaWVsZC0+Y29sczsKKwlpZiAoZnJvdykgKmZyb3cgPSBmaWVsZC0+ZnJvdzsKKwlpZiAoZmNvbCkgKmZjb2wgPSBmaWVsZC0+ZmNvbDsKK0VPRgorY2F0IDw8RU9GID5iNAorCWlmIChyb3dzKSB7CisJCSpyb3dzID0gZmllbGQtPnJvd3M7CisJfQorCWlmIChjb2xzKSB7CisJCSpjb2xzID0gZmllbGQtPmNvbHM7CisJfQorCWlmIChmcm93KSB7CisJCSpmcm93ID0gZmllbGQtPmZyb3c7CisJfQorCWlmIChmY29sKSB7CisJCSpmY29sID0gZmllbGQtPmZjb2w7CisJfQorRU9GCitjYXQgPDxFT0YgPmV4cGVjdGVkNAorMQorMQorRmluYWwKKzIKKzIKK0ZpbmFsCiszCiszCitGaW5hbAorNAorNAorRmluYWwKK0VPRgorCisKK3RpdGxlNT0iQ29tYmluZSBtYW55IGxpbmVzIGFuZCBjaGFuZ2UgY2FzZSIKK2NhdCA8PEVPRiA+YTUKK2Zvcihyb3c9MCxwQnVmZmVyPWZpZWxkLT5idWY7CisJcm93PGhlaWdodDsKKwlyb3crKyxwQnVmZmVyKz13aWR0aCApCit7CisJaWYgKChsZW4gPSAoaW50KSggQWZ0ZXJfRW5kX09mX0RhdGEoIHBCdWZmZXIsIHdpZHRoICkgLSBwQnVmZmVyICkpID4gMCkKKwl7CisJCXdtb3ZlKCB3aW4sIHJvdywgMCApOworCQl3YWRkbnN0ciggd2luLCBwQnVmZmVyLCBsZW4gKTsKK0VPRgorY2F0IDw8RU9GID5iNQorZm9yIChSb3cgPSAwLCBQQnVmZmVyID0gZmllbGQtPmJ1ZjsgUm93IDwgSGVpZ2h0OyBSb3crKywgUEJ1ZmZlciArPSBXaWR0aCkgeworCWlmICgoTGVuID0gKGludCkoYWZ0ZXJFbmRPZkRhdGEoUEJ1ZmZlciwgV2lkdGgpIC0gUEJ1ZmZlcikpID4gMCkgeworCQl3bW92ZSh3aW4sIFJvdywgMCk7CisJCXdhZGRuc3RyKHdpbiwgUEJ1ZmZlciwgTGVuKTsKK0VPRgorY2F0IDw8RU9GID5leHBlY3RlZDUKKzEKKzUKKzcKKzgKK0VPRgorCit0aXRsZTY9IlJlbmFtZSBhbmQgY29tYmluZSBsaW5lcyIKK2NhdCA8PEVPRiA+YTYKK2Jvb2wgbmVlZF92aXN1YWxfdXBkYXRlID0gKChmb3JtICE9IChGT1JNICopMCkgICAgICAmJgorCShmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSAmJgorCShmb3JtLT5jdXJyZW50PT1maWVsZCkpOworCitpZiAobmVlZF92aXN1YWxfdXBkYXRlKQorCVN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKworaWYgKHNpbmdsZV9saW5lX2ZpZWxkKQoreworCWdyb3d0aCA9IGZpZWxkLT5jb2xzICogYW1vdW50OworCWlmIChmaWVsZC0+bWF4Z3JvdykKKwkJZ3Jvd3RoID0gTWluaW11bShmaWVsZC0+bWF4Z3JvdyAtIGZpZWxkLT5kY29scyxncm93dGgpOworCWZpZWxkLT5kY29scyArPSBncm93dGg7CisJaWYgKGZpZWxkLT5kY29scyA9PSBmaWVsZC0+bWF4Z3JvdykKK0VPRgorY2F0IDw8RU9GID5iNgorYm9vbCBOZWVkVmlzdWFsVXBkYXRlID0gKChGb3JtICE9IChGT1JNICopMCkgJiYgKEZvcm0tPnN0YXR1cyAmIF9QT1NURUQpICYmCisJKEZvcm0tPmN1cnJlbnQgPT0gZmllbGQpKTsKKworaWYgKE5lZWRWaXN1YWxVcGRhdGUpIHsKKwlzeW5jaHJvbml6ZUJ1ZmZlcihGb3JtKTsKK30KKworaWYgKFNpbmdsZUxpbmVGaWVsZCkgeworCUdyb3d0aCA9IGZpZWxkLT5jb2xzICogYW1vdW50OworCWlmIChmaWVsZC0+bWF4Z3JvdykgeworCQlHcm93dGggPSBNaW5pbXVtKGZpZWxkLT5tYXhncm93IC0gZmllbGQtPmRjb2xzLCBHcm93dGgpOworCX0KKwlmaWVsZC0+ZGNvbHMgKz0gR3Jvd3RoOworCWlmIChmaWVsZC0+ZGNvbHMgPT0gZmllbGQtPm1heGdyb3cpIHsKK0VPRgorY2F0IDw8RU9GID5leHBlY3RlZDYKKzEKKzMKKzQKKzUKKzYKK0ZpbmFsCis3Cis4CisxMAorMTEKKzEyCitGaW5hbAorMTMKKzE0CitFT0YKKworIyBCb3RoIGxpbmVzIG1hdGNoIGlkZW50aWNhbGx5IHNvIHBvc2l0aW9uIG11c3QgYmUgdXNlZCB0byB0aWUtYnJlYWsuCit0aXRsZTc9IlNhbWUgbGluZSB0d2ljZSIKK2NhdCA8PEVPRiA+YTcKK2FiYworYWJjCitFT0YKK2NhdCA8PEVPRiA+YjcKK2FiY2QKK2FiY2QKK0VPRgorY2F0IDw8RU9GID5leHBlY3RlZDcKKzEKKzIKK0VPRgorCit0aXRsZTg9IkVuZm9yY2UgbGluZSBvcmRlciIKK2NhdCA8PEVPRiA+YTgKK2FiY2RlZgorZ2hpamtsCithYgorRU9GCitjYXQgPDxFT0YgPmI4CitnaGlqaworYWJjZAorRU9GCitjYXQgPDxFT0YgPmV4cGVjdGVkOAorMgorMworRU9GCisKK3RpdGxlOT0iRXhwYW5kIGxpbmVzIGFuZCByZW5hbWUgdmFyaWFibGVzIgorY2F0IDw8RU9GID5hOQoraW50IG15RnVuY3Rpb24oaW50IEFyZ3VtZW50T25lLCBUaGluZyAqQXJnVHdvLCBCbGFoIFh1Z2x5QnVnKSB7CisJU3F1aWdnbGUgRmFidWxvdXNSZXN1bHQgPSBzcXVhcmdsZShBcmd1bWVudE9uZSwgKkFyZ1R3bywKKwkJWHVnbHlCdWcpICsgRXd3d0dsb2JhbFdpdGhBUmVhbGx5TG9uZ05hbWVZZXBUb29Mb25nOworCXJldHVybiBGYWJ1bG91c1Jlc3VsdCAqIDQyOworfQorRU9GCitjYXQgPDxFT0YgPmI5CitpbnQgbXlGdW5jdGlvbihpbnQgYXJndW1lbnRfb25lLCBUaGluZyAqYXJnX2FzZGZnaCwKKwlCbGFoIHh1Z2x5X2J1ZykgeworCVNxdWlnZ2xlIGZhYnVsb3VzX3Jlc3VsdCA9IHNxdWFyZ2xlKGFyZ3VtZW50X29uZSwKKwkJKmFyZ19hc2RmZ2gsIHh1Z2x5X2J1ZykKKwkJKyBnX2V3d3dfZ2xvYmFsX3dpdGhfYV9yZWFsbHlfbG9uZ19uYW1lX3llcF90b29fbG9uZzsKKwlyZXR1cm4gZmFidWxvdXNfcmVzdWx0ICogNDI7Cit9CitFT0YKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQ5CisxCisxCisyCiszCiszCis0Cis1CitFT0YKKwordGl0bGUxMD0iVHdvIGNsb3NlIG1hdGNoZXMgdmVyc3VzIG9uZSBsZXNzIGNsb3NlIG1hdGNoIgorY2F0IDw8RU9GID5hMTAKK2FiY2RlZgorYWJjZGVmCitnaGlqa2wKK0VPRgorY2F0IDw8RU9GID5iMTAKK2doCithYmNkZWZ4CitFT0YKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQxMAorRmluYWwKKzIKK0VPRgorCisjIFRoZSBmaXJzdCBsaW5lIG9mIGIgbWF0Y2hlcyBiZXN0IHdpdGggdGhlIGxhc3QgbGluZSBvZiBhLCBidXQgdGhlIG92ZXJhbGwKKyMgbWF0Y2ggaXMgYmV0dGVyIGlmIHdlIG1hdGNoIGl0IHdpdGggdGhlIHRoZSBmaXJzdCBsaW5lIG9mIGEuCit0aXRsZTExPSJQaWdneSBpbiB0aGUgbWlkZGxlIgorY2F0IDw8RU9GID5hMTEKK2FiY2RlZmcKK2lqa2xtbgorYWJjZGVmZ2gKK0VPRgorY2F0IDw8RU9GID5iMTEKK2FiY2RlZmdoeAoraWprbG0KK0VPRgorY2F0IDw8RU9GID5leHBlY3RlZDExCisxCisyCitFT0YKKwordGl0bGUxMj0iTm8gdHJhaWxpbmcgbmV3bGluZSIKK3ByaW50ZiAiYWJjXG5kZWYiID5hMTIKK3ByaW50ZiAiYWJ4XG5zdHUiID5iMTIKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQxMgorMQorRmluYWwKK0VPRgorCit0aXRsZTEzPSJSZW9yZGVyIGluY2x1ZGVzIgorY2F0IDw8RU9GID5hMTMKKyNpbmNsdWRlICJjLmgiCisjaW5jbHVkZSAiYi5oIgorI2luY2x1ZGUgImEuaCIKKyNpbmNsdWRlICJlLmgiCisjaW5jbHVkZSAiZC5oIgorRU9GCitjYXQgPDxFT0YgPmIxMworI2luY2x1ZGUgImEuaCIKKyNpbmNsdWRlICJiLmgiCisjaW5jbHVkZSAiYy5oIgorI2luY2x1ZGUgImQuaCIKKyNpbmNsdWRlICJlLmgiCitFT0YKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQxMworMworMgorMQorNQorNAorRU9GCisKK2xhc3RfdGVzdD0xMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDIgJGxhc3RfdGVzdCkKKwlkbworCQkjIEFwcGVuZCBlYWNoIGxpbmUgaW4gYSBzZXBhcmF0ZSBjb21taXQgdG8gbWFrZSBpdCBlYXN5IHRvCisJCSMgY2hlY2sgd2hpY2ggb3JpZ2luYWwgbGluZSB0aGUgYmxhbWUgb3V0cHV0IHJlbGF0ZXMgdG8uCisKKwkJbGluZV9jb3VudD0wICYmCisJCXdoaWxlIElGUz0gcmVhZCBsaW5lCisJCWRvCisJCQlsaW5lX2NvdW50PSQoKGxpbmVfY291bnQrMSkpICYmCisJCQllY2hvICIkbGluZSIgPj4iJGkiICYmCisJCQlnaXQgYWRkICIkaSIgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJR0lUX0FVVEhPUl9OQU1FPSIkbGluZV9jb3VudCIgZ2l0IGNvbW1pdCAtbSAiJGxpbmVfY291bnQiCisJCWRvbmUgPCJhJGkiCisJZG9uZSAmJgorCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAyICRsYXN0X3Rlc3QpCisJZG8KKwkJIyBPdmVyd3JpdGUgdGhlIGZpbGVzIHdpdGggdGhlIGZpbmFsIGNvbnRlbnQuCisJCWNwIGIkaSAkaSAmJgorCQlnaXQgYWRkICRpCisJZG9uZSAmJgorCXRlc3RfdGljayAmJgorCisJIyBDb21taXQgdGhlIGZpbmFsIGNvbnRlbnQgYWxsIGF0IG9uY2Ugc28gaXQgY2FuIGFsbCBiZQorCSMgcmVmZXJyZWQgdG8gd2l0aCB0aGUgc2FtZSBjb21taXQgSUQuCisJR0lUX0FVVEhPUl9OQU1FPUZpbmFsIGdpdCBjb21taXQgLW0gRmluYWwgJiYKKworCUlHTk9SRU1FPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCitmb3IgaSBpbiAkKHRlc3Rfc2VxIDIgJGxhc3RfdGVzdCk7IGRvCisJZXZhbCB0aXRsZT0iXCR0aXRsZSRpIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiR0aXRsZSIgXAorCSJnaXQgYmxhbWUgLU05IC0taWdub3JlLXJldiAkSUdOT1JFTUUgJGkgPm91dHB1dCAmJgorCXNlZCAtZSBcIiRwaWNrX2F1dGhvclwiIG91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQkaSBhY3R1YWwiCitkb25lCisKKyMgVGhpcyBpbnZva2VkIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gdGhlIGNodW5rIGNhbGxiYWNrIHdhcyBjYWxsZWQKKyMgd2l0aCBhIHplcm8gbGVuZ3RoIHBhcmVudCBjaHVuayBhbmQgdGhlcmUgd2VyZSBubyBtb3JlIHN1c3BlY3RzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnRGlmZiBjaHVua3Mgd2l0aCBubyBzdXNwZWN0cycgJworCXRlc3Rfd3JpdGVfbGluZXMgeHkxIEEgQiBDIHh5MSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0xIGdpdCBjb21taXQgLW0gMSAmJgorCisJdGVzdF93cml0ZV9saW5lcyB4eTIgQSBCIHh5MiBDIHh5MiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0yIGdpdCBjb21taXQgLW0gMiAmJgorCVJFVl8yPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJdGVzdF93cml0ZV9saW5lcyB4eTMgQSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0zIGdpdCBjb21taXQgLW0gMyAmJgorCVJFVl8zPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJdGVzdF93cml0ZV9saW5lcyAxIDEgPmV4cGVjdGVkICYmCisKKwlnaXQgYmxhbWUgLS1pZ25vcmUtcmV2ICRSRVZfMiAtLWlnbm9yZS1yZXYgJFJFVl8zIGZpbGUgPm91dHB1dCAmJgorCXNlZCAtZSAiJHBpY2tfYXV0aG9yIiBvdXRwdXQgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3NpdGlvbiBtYXRjaGluZycgJworCXRlc3Rfd3JpdGVfbGluZXMgYWJjIGRlZiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPTEgZ2l0IGNvbW1pdCAtbSAxICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIGFiYyBkZWYgYWJjIGRlZiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPTIgZ2l0IGNvbW1pdCAtbSAyICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIGFiY3ggZGVmeCBhYmN4IGRlZnggPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0zIGdpdCBjb21taXQgLW0gMyAmJgorCVJFVl8zPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJdGVzdF93cml0ZV9saW5lcyBhYmN5IGRlZnkgYWJjeCBkZWZ4ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9NCBnaXQgY29tbWl0IC1tIDQgJiYKKwlSRVZfND0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgMSAxIDIgMiA+ZXhwZWN0ZWQgJiYKKworCWdpdCBibGFtZSAtLWlnbm9yZS1yZXYgJFJFVl8zIC0taWdub3JlLXJldiAkUkVWXzQgZmlsZTIgPm91dHB1dCAmJgorCXNlZCAtZSAiJHBpY2tfYXV0aG9yIiBvdXRwdXQgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisjIFRoaXMgZmFpbHMgaWYgZWFjaCBibGFtZSBlbnRyeSBpcyBwcm9jZXNzZWQgaW5kZXBlbmRlbnRseSBpbnN0ZWFkIG9mCisjIHByb2Nlc3NpbmcgZWFjaCBkaWZmIGNoYW5nZSBpbiBmdWxsLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgb3JkZXInICcKKwl0ZXN0X3dyaXRlX2xpbmVzIGJjZGUgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0xIGdpdCBjb21taXQgLW0gMSAmJgorCisJdGVzdF93cml0ZV9saW5lcyBiY2RlIGZnaGlqID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9MiBnaXQgY29tbWl0IC1tIDIgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgYmNkZSBmZ2hpaiBhYmNkID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9MyBnaXQgY29tbWl0IC1tIDMgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgYWJjZHggZmdoaWp4IGJjZGV4ID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9NCBnaXQgY29tbWl0IC1tIDQgJiYKKwlSRVZfND0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgYWJjZHggZmdoaWp5IGJjZGV4ID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9NSBnaXQgY29tbWl0IC1tIDUgJiYKKwlSRVZfNT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgPmV4cGVjdGVkICYmCisKKwlnaXQgYmxhbWUgLS1pZ25vcmUtcmV2ICRSRVZfNCAtLWlnbm9yZS1yZXYgJFJFVl81IGZpbGUzID5vdXRwdXQgJiYKKwlzZWQgLWUgIiRwaWNrX2F1dGhvciIgb3V0cHV0ID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDAxLXNlbmQtZW1haWwuc2ggYi90L3Q5MDAxLXNlbmQtZW1haWwuc2gKaW5kZXggMWUzYWMzYy4uOTk3ZjkwYiAxMDA3NTUKLS0tIGEvdC90OTAwMS1zZW5kLWVtYWlsLnNoCisrKyBiL3QvdDkwMDEtc2VuZC1lbWFpbC5zaApAQCAtMTIwNCw3ICsxMjA0LDcgQEAKIAkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCiAJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKIAkJLS1uby10aHJlYWQgXAotCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKIAkhIGdyZXAgIkluLVJlcGx5LVRvOiAiIHN0ZG91dAogJwogCkBAIC0xMjI0LDE3ICsxMjI0LDcyIEBACiAJZ2l0IHNlbmQtZW1haWwgXAogCQktLWRyeS1ydW4gXAogCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKLQkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCQkkcGF0Y2hlcyA+c3Rkb3V0ICYmCiAJZ3JlcCAiVG86IFNvbWVib2R5IDxzb21lYm9keUBleC5jb20+IiBzdGRvdXQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBzZW5kZW1haWwuaWRlbnRpdHknICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLnRvICJkZWZhdWx0QGV4YW1wbGUuY29tIiAmJgorCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZW5kZW1haWwuaXNwLnRvICJpc3BAZXhhbXBsZS5jb20iICYmCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIHNlbmRlbWFpbC5jbG91ZC50byAiY2xvdWRAZXhhbXBsZS5jb20iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmlkZW50aXR5OiByZWFkcyB0aGUgY29ycmVjdCBpZGVudGl0eSBjb25maWcnICcKKwlnaXQgLWMgc2VuZGVtYWlsLmlkZW50aXR5PWNsb3VkIHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209Im5vYm9keUBleGFtcGxlLmNvbSIgXAorCQkkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiVG86IGNsb3VkQGV4YW1wbGUuY29tIiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuaWRlbnRpdHk6IGlkZW50aXR5IG92ZXJyaWRlcyBzZW5kZW1haWwuaWRlbnRpdHknICcKKwlnaXQgLWMgc2VuZGVtYWlsLmlkZW50aXR5PWNsb3VkIHNlbmQtZW1haWwgXAorCQktLWlkZW50aXR5PWlzcCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0ibm9ib2R5QGV4YW1wbGUuY29tIiBcCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKKwlncmVwICJUbzogaXNwQGV4YW1wbGUuY29tIiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuaWRlbnRpdHk6IC0tbm8taWRlbnRpdHkgY2xlYXJzIHByZXZpb3VzIGlkZW50aXR5JyAnCisJZ2l0IC1jIHNlbmRlbWFpbC5pZGVudGl0eT1jbG91ZCBzZW5kLWVtYWlsIFwKKwkJLS1uby1pZGVudGl0eSBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0ibm9ib2R5QGV4YW1wbGUuY29tIiBcCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKKwlncmVwICJUbzogZGVmYXVsdEBleGFtcGxlLmNvbSIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmlkZW50aXR5OiBib29sIGlkZW50aXR5IHZhcmlhYmxlIGV4aXN0YW5jZSBvdmVycmlkZXMnICcKKwlnaXQgLWMgc2VuZGVtYWlsLmlkZW50aXR5PWNsb3VkIFwKKwkJLWMgc2VuZGVtYWlsLnhtYWlsZXI9dHJ1ZSBcCisJCS1jIHNlbmRlbWFpbC5jbG91ZC54bWFpbGVyPWZhbHNlIFwKKwkJc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0ibm9ib2R5QGV4YW1wbGUuY29tIiBcCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKKwlncmVwICJUbzogY2xvdWRAZXhhbXBsZS5jb20iIHN0ZG91dCAmJgorCSEgZ3JlcCAiWC1NYWlsZXIiIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5pZGVudGl0eTogYm9vbCB2YXJpYWJsZSBmYWxsYmFjaycgJworCWdpdCAtYyBzZW5kZW1haWwuaWRlbnRpdHk9Y2xvdWQgXAorCQktYyBzZW5kZW1haWwueG1haWxlcj1mYWxzZSBcCisJCXNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209Im5vYm9keUBleGFtcGxlLmNvbSIgXAorCQkkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiVG86IGNsb3VkQGV4YW1wbGUuY29tIiBzdGRvdXQgJiYKKwkhIGdyZXAgIlgtTWFpbGVyIiBzdGRvdXQKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLW5vLXRvIG92ZXJyaWRlcyBzZW5kZW1haWwudG8nICcKIAlnaXQgc2VuZC1lbWFpbCBcCiAJCS0tZHJ5LXJ1biBcCiAJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAogCQktLW5vLXRvIFwKIAkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAotCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKIAlncmVwICJUbzogbm9ib2R5QGV4YW1wbGUuY29tIiBzdGRvdXQgJiYKIAkhIGdyZXAgIlRvOiBTb21lYm9keSA8c29tZWJvZHlAZXguY29tPiIgc3Rkb3V0CiAnCkBAIC0xMjQ1LDcgKzEzMDAsNyBAQAogCQktLWRyeS1ydW4gXAogCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKIAkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAotCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKIAlncmVwICJDYzogU29tZWJvZHkgPHNvbWVib2R5QGV4LmNvbT4iIHN0ZG91dAogJwogCkBAIC0xMjU2LDcgKzEzMTEsNyBAQAogCQktLW5vLWNjIFwKIAkJLS1jYz1ib2RpZXNAZXhhbXBsZS5jb20gXAogCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCi0JCSRwYXRjaGVzICRwYXRjaGVzID5zdGRvdXQgJiYKKwkJJHBhdGNoZXMgPnN0ZG91dCAmJgogCWdyZXAgIkNjOiBib2RpZXNAZXhhbXBsZS5jb20iIHN0ZG91dCAmJgogCSEgZ3JlcCAiQ2M6IFNvbWVib2R5IDxzb21lYm9keUBleC5jb20+IiBzdGRvdXQKICcKQEAgLTEyNjgsNyArMTMyMyw3IEBACiAJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAogCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCiAJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAotCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKIAlncmVwICJSQ1BUIFRPOjxvdGhlckBleC5jb20+IiBzdGRvdXQKICcKIApAQCAtMTI4MCw3ICsxMzM1LDcgQEAKIAkJLS1iY2M9Ym9kaWVzQGV4YW1wbGUuY29tIFwKIAkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAogCQktLXNtdHAtc2VydmVyIHJlbGF5LmV4YW1wbGUuY29tIFwKLQkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCQkkcGF0Y2hlcyA+c3Rkb3V0ICYmCiAJZ3JlcCAiUkNQVCBUTzo8Ym9kaWVzQGV4YW1wbGUuY29tPiIgc3Rkb3V0ICYmCiAJISBncmVwICJSQ1BUIFRPOjxvdGhlckBleC5jb20+IiBzdGRvdXQKICcKQEAgLTE0MzcsMjIgKzE0OTIsMTAgQEAKIAlFT0YKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwudHJhbnNmZXJlbmNvZGluZz03Yml0IGZhaWxzIG9uIDhiaXQgZGF0YScgJwotCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKLQlnaXQgY29uZmlnIHNlbmRlbWFpbC50cmFuc2ZlckVuY29kaW5nIDdiaXQgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1lbWFpbCBcCi0JCS0tdHJhbnNmZXItZW5jb2Rpbmc9N2JpdCBcCi0JCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCi0JCWVtYWlsLXVzaW5nLThiaXQgXAotCQkyPmVycm9ycyA+b3V0ICYmCi0JZ3JlcCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IiBlcnJvcnMgJiYKLQl0ZXN0IC16ICIkKGxzIG1zZ3R4dCopIgotJwotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tdHJhbnNmZXItZW5jb2Rpbmcgb3ZlcnJpZGVzIHNlbmRlbWFpbC50cmFuc2ZlckVuY29kaW5nJyAnCiAJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgotCWdpdCBjb25maWcgc2VuZGVtYWlsLnRyYW5zZmVyRW5jb2RpbmcgOGJpdCAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLWVtYWlsIFwKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgc2VuZGVtYWlsLnRyYW5zZmVyRW5jb2Rpbmc9OGJpdCBcCisJCXNlbmQtZW1haWwgXAogCQktLXRyYW5zZmVyLWVuY29kaW5nPTdiaXQgXAogCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAogCQllbWFpbC11c2luZy04Yml0IFwKQEAgLTE0NjEsMTYgKzE1MDQsMjYgQEAKIAl0ZXN0IC16ICIkKGxzIG1zZ3R4dCopIgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC50cmFuc2ZlcmVuY29kaW5nPThiaXQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLnRyYW5zZmVyRW5jb2RpbmcgdmlhIGNvbmZpZycgJwogCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKLQlnaXQgc2VuZC1lbWFpbCBcCi0JCS0tdHJhbnNmZXItZW5jb2Rpbmc9OGJpdCBcCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHNlbmRlbWFpbC50cmFuc2ZlckVuY29kaW5nPTdiaXQgXAorCQlzZW5kLWVtYWlsIFwKIAkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKIAkJZW1haWwtdXNpbmctOGJpdCBcCiAJCTI+ZXJyb3JzID5vdXQgJiYKLQlzZWQgJzEsL14kL2QnIG1zZ3R4dDEgPmFjdHVhbCAmJgotCXNlZCAnMSwvXiQvZCcgZW1haWwtdXNpbmctOGJpdCA+ZXhwZWN0ZWQgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwlncmVwICJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiIGVycm9ycyAmJgorCXRlc3QgLXogIiQobHMgbXNndHh0KikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLnRyYW5zZmVyRW5jb2RpbmcgdmlhIGNsaScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1lbWFpbCBcCisJCS0tdHJhbnNmZXItZW5jb2Rpbmc9N2JpdCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCWVtYWlsLXVzaW5nLThiaXQgXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IiBlcnJvcnMgJiYKKwl0ZXN0IC16ICIkKGxzIG1zZ3R4dCopIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJwpAQCAtMTc4Nyw2ICsxODQwLDE1IEBACiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgLS1kdW1wLWFsaWFzZXMgLS10bz1qYW5pY2VAZXhhbXBsZS5jb20gLTEgcmVmcy9oZWFkcy9hY2NvdW50aW5nCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnYWxpYXNlcyBhbmQgc2VuZGVtYWlsLmlkZW50aXR5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IFwKKwkJLWMgc2VuZGVtYWlsLmlkZW50aXR5PWNsb3VkIFwKKwkJLWMgc2VuZGVtYWlsLmFsaWFzZXNmaWxlPWRlZmF1bHQtYWxpYXNlcyBcCisJCS1jIHNlbmRlbWFpbC5jbG91ZC5hbGlhc2VzZmlsZT1jbG91ZC1hbGlhc2VzIFwKKwkJc2VuZC1lbWFpbCAtMSAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNsb3VkLWFsaWFzZXMiIHN0ZGVycgorJworCiB0ZXN0X3NlbmRtYWlsX2FsaWFzZXMgKCkgewogCW1zZz0iJDEiICYmIHNoaWZ0ICYmCiAJZXhwZWN0PSIkQCIgJiYKZGlmZiAtLWdpdCBhL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2ggYi90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCmluZGV4IDM2NjgyNjMuLjE0MWI3ZmEgMTAwNzU1Ci0tLSBhL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2gKKysrIGIvdC90OTMwMC1mYXN0LWltcG9ydC5zaApAQCAtMzI5OSw0ICszMjk5LDI0IEBACiAJc2VkIC1lIHMvTEZzL0xMTC8gVy1pbnB1dCB8IHRyIEwgIlxuIiB8IHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydAogJwogCisjIyMKKyMjIyBzZXJpZXMgWCAob3RoZXIgbmV3IGZlYXR1cmVzKQorIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1g6IGhhbmRsaW5nIGVuY29kaW5nJyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9lbmNvZGluZworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWVuY29kaW5nIGlzby04ODU5LTcKKwlkYXRhIDw8Q09NTUlUCisJSU5QVVRfRU5ECisKKwlwcmludGYgIlBpOiBcMzYwXG5DT01NSVRcbiIgPj5pbnB1dCAmJgorCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBjYXQtZmlsZSAtcCBlbmNvZGluZyB8IGdyZXAgJChwcmludGYgIlwzNjAiKSAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JUIgZW5jb2RpbmcgfCBncmVwICQocHJpbnRmICJcMzE3XDIwMCIpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTM1MC1mYXN0LWV4cG9ydC5zaCBiL3QvdDkzNTAtZmFzdC1leHBvcnQuc2gKaW5kZXggNTY5MGZlMi4uYjQwMDRlMCAxMDA3NTUKLS0tIGEvdC90OTM1MC1mYXN0LWV4cG9ydC5zaAorKysgYi90L3Q5MzUwLWZhc3QtZXhwb3J0LnNoCkBAIC05NCwyMiArOTQsODMgQEAKIAl0ZXN0ICRNVVNTID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvdGFncy9tdXNzKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpc28tODg1OS0xJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWVuY29kaW5nIGlzby04ODU5LTcnICcKIAotCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKLQkjIHVzZSBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lIGluIElTTy04ODU5LTEgdG8gbWF0Y2ggaXQuCi0JLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MSIgJiYKKwl0ZXN0X2NvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIGlzby04ODU5LTcgJiYKIAl0ZXN0X3RpY2sgJiYKIAllY2hvIHJvc3RlbiA+ZmlsZSAmJgotCWdpdCBjb21taXQgLXMgLW0gZGVuIGZpbGUgJiYKLQlnaXQgZmFzdC1leHBvcnQgd2VyXi4ud2VyID5pc284ODU5LTEuZmkgJiYKLQlzZWQgInMvd2VyL2kxOG4vIiBpc284ODU5LTEuZmkgfAorCWdpdCBjb21taXQgLXMgLUYgIiRURVNUX0RJUkVDVE9SWS90OTM1MC9zaW1wbGUtaXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQiIGZpbGUgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1yZWVuY29kZT15ZXMgd2VyXi4ud2VyID5pc28tODg1OS03LmZpICYmCisJc2VkICJzL3dlci9pMThuLyIgaXNvLTg4NTktNy5maSB8CiAJCShjZCBuZXcgJiYKIAkJIGdpdCBmYXN0LWltcG9ydCAmJgorCQkgIyBUaGUgY29tbWl0IG9iamVjdCwgaWYgbm90IHJlLWVuY29kZWQsIHdvdWxkIGJlIDI0MCBieXRlcy4KKwkJICMgUmVtb3ZpbmcgdGhlICJlbmNvZGluZyBpc28tODg1OS03XG4iIGhlYWRlciBkcm9wcyAyMCBieXRlcy4KKwkJICMgUmUtZW5jb2RpbmcgdGhlIFBpIGNoYXJhY3RlciBmcm9tIFx4RjAgKFwzNjApIGluIGlzby04ODU5LTcKKwkJICMgdG8gXHhDRlx4ODAgKFwzMTdcMjAwKSBpbiBVVEYtOCBhZGRzIGEgYnl0ZS4gIENoZWNrIGZvcgorCQkgIyB0aGUgZXhwZWN0ZWQgc2l6ZS4KKwkJIHRlc3QgMjIxIC1lcSAiJChnaXQgY2F0LWZpbGUgLXMgaTE4bikiICYmCisJCSAjIC4uLmFuZCBmb3IgdGhlIGV4cGVjdGVkIHRyYW5zbGF0aW9uIG9mIGJ5dGVzLgogCQkgZ2l0IGNhdC1maWxlIGNvbW1pdCBpMThuID5hY3R1YWwgJiYKLQkJIGdyZXAgIsOBw6nDrSDDs8O6IiBhY3R1YWwpCi0KKwkJIGdyZXAgJChwcmludGYgIlwzMTdcMjAwIikgYWN0dWFsICYmCisJCSAjIEFsc28gbWFrZSBzdXJlIHRoZSBjb21taXQgZG9lcyBub3QgaGF2ZSB0aGUgImVuY29kaW5nIiBoZWFkZXIKKwkJICEgZ3JlcCBeZW5jb2RpbmcgYWN0dWFsKQogJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYm9ydGluZyBvbiBpc28tODg1OS03JyAnCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRH4xIiAmJgorCXRlc3RfY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgaXNvLTg4NTktNyAmJgorCWVjaG8gcm9zdGVuID5maWxlICYmCisJZ2l0IGNvbW1pdCAtcyAtRiAiJFRFU1RfRElSRUNUT1JZL3Q5MzUwL3NpbXBsZS1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dCIgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWV4cG9ydCAtLXJlZW5jb2RlPWFib3J0IHdlcl4uLndlciA+aXNvLTg4NTktNy5maQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVzZXJ2aW5nIGlzby04ODU5LTcnICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEiICYmCisJdGVzdF9jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBpc28tODg1OS03ICYmCisJZWNobyByb3N0ZW4gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1zIC1GICIkVEVTVF9ESVJFQ1RPUlkvdDkzNTAvc2ltcGxlLWlzby04ODU5LTctY29tbWl0LW1lc3NhZ2UudHh0IiBmaWxlICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tcmVlbmNvZGU9bm8gd2VyXi4ud2VyID5pc28tODg1OS03LmZpICYmCisJc2VkICJzL3dlci9pMThuLW5vLXJlY29kaW5nLyIgaXNvLTg4NTktNy5maSB8CisJCShjZCBuZXcgJiYKKwkJIGdpdCBmYXN0LWltcG9ydCAmJgorCQkgIyBUaGUgY29tbWl0IG9iamVjdCwgaWYgbm90IHJlLWVuY29kZWQsIGlzIDI0MCBieXRlcy4KKwkJICMgUmVtb3ZpbmcgdGhlICJlbmNvZGluZyBpc28tODg1OS03XG4iIGhlYWRlciB3b3VsZCBkcm9wcyAyMAorCQkgIyBieXRlcy4gIFJlLWVuY29kaW5nIHRoZSBQaSBjaGFyYWN0ZXIgZnJvbSBceEYwIChcMzYwKSBpbgorCQkgIyBpc28tODg1OS03IHRvIFx4Q0ZceDgwIChcMzE3XDIwMCkgaW4gVVRGLTggYWRkcyBhIGJ5dGUuCisJCSAjIENoZWNrIGZvciB0aGUgZXhwZWN0ZWQgc2l6ZS4uLgorCQkgdGVzdCAyNDAgLWVxICIkKGdpdCBjYXQtZmlsZSAtcyBpMThuLW5vLXJlY29kaW5nKSIgJiYKKwkJICMgLi4uYXMgd2VsbCBhcyB0aGUgZXhwZWN0ZWQgYnl0ZS4KKwkJIGdpdCBjYXQtZmlsZSBjb21taXQgaTE4bi1uby1yZWNvZGluZyA+YWN0dWFsICYmCisJCSBncmVwICQocHJpbnRmICJcMzYwIikgYWN0dWFsICYmCisJCSAjIEFsc28gbWFrZSBzdXJlIHRoZSBjb21taXQgaGFzIHRoZSAiZW5jb2RpbmciIGhlYWRlcgorCQkgZ3JlcCBeZW5jb2RpbmcgYWN0dWFsKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmNvZGluZyBwcmVzZXJ2ZWQgaWYgcmVlbmNvZGluZyBmYWlscycgJworCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MSIgJiYKKwl0ZXN0X2NvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIGlzby04ODU5LTcgJiYKKwllY2hvIHJvc3RlbiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLXMgLUYgIiRURVNUX0RJUkVDVE9SWS90OTM1MC9icm9rZW4taXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQiIGZpbGUgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1yZWVuY29kZT15ZXMgd2VyXi4ud2VyID5pc28tODg1OS03LmZpICYmCisJc2VkICJzL3dlci9pMThuLWludmFsaWQvIiBpc28tODg1OS03LmZpIHwKKwkJKGNkIG5ldyAmJgorCQkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJCSBnaXQgY2F0LWZpbGUgY29tbWl0IGkxOG4taW52YWxpZCA+YWN0dWFsICYmCisJCSAjIE1ha2Ugc3VyZSB0aGUgY29tbWl0IHN0aWxsIGhhcyB0aGUgZW5jb2RpbmcgaGVhZGVyCisJCSBncmVwIF5lbmNvZGluZyBhY3R1YWwgJiYKKwkJICMgVmVyaWZ5IHRoYXQgdGhlIGNvbW1pdCBoYXMgdGhlIGV4cGVjdGVkIHNpemU7IGkuZS4KKwkJICMgdGhhdCBubyBieXRlcyB3ZXJlIHJlLWVuY29kZWQgdG8gYSBkaWZmZXJlbnQgZW5jb2RpbmcuCisJCSB0ZXN0IDI1MiAtZXEgIiQoZ2l0IGNhdC1maWxlIC1zIGkxOG4taW52YWxpZCkiICYmCisJCSAjIC4uLmFuZCBjaGVjayBmb3IgdGhlIG9yaWdpbmFsIHNwZWNpYWwgYnl0ZXMKKwkJIGdyZXAgJChwcmludGYgIlwzNjAiKSBhY3R1YWwgJiYKKwkJIGdyZXAgJChwcmludGYgIlwzNzciKSBhY3R1YWwpCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydC9leHBvcnQtbWFya3MnICcKIAogCWdpdCBjaGVja291dCAtYiBtYXJrcyBtYXN0ZXIgJiYKQEAgLTIyNCw3ICsyODUsNiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb3BpZXMnICcKIAotCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCiAJZ2l0IGNoZWNrb3V0IC1iIGNvcHkgcmVpbiAmJgogCWdpdCBtdiBmaWxlIGZpbGUzICYmCiAJZ2l0IGNvbW1pdCAtbSBtb3ZlMSAmJgpkaWZmIC0tZ2l0IGEvdC90OTM1MC9icm9rZW4taXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQgYi90L3Q5MzUwL2Jyb2tlbi1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZhZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTM1MC9icm9rZW4taXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQKQEAgLTAsMCArMSBAQAorUGk6IPA7IEludmFsaWQ6IP8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q5MzUwL3NpbXBsZS1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dCBiL3QvdDkzNTAvc2ltcGxlLWlzby04ODU5LTctY29tbWl0LW1lc3NhZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiM2YwYzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MzUwL3NpbXBsZS1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dApAQCAtMCwwICsxIEBACitQaTog8ApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDk4MDEtZ2l0LXA0LWJyYW5jaC5zaCBiL3QvdDk4MDEtZ2l0LXA0LWJyYW5jaC5zaAppbmRleCAzOGQ2YjkwLi42N2ZmMjcxIDEwMDc1NQotLS0gYS90L3Q5ODAxLWdpdC1wNC1icmFuY2guc2gKKysrIGIvdC90OTgwMS1naXQtcDQtYnJhbmNoLnNoCkBAIC00MTEsNiArNDExLDQ2IEBACiAJKQogJwogCisjIENoZWNrIHRoYXQgZXhjbHVkZWQgZmlsZXMgYXJlIG9taXR0ZWQgZHVyaW5nIGltcG9ydAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IGNsb25lIGNvbXBsZXggYnJhbmNoZXMgd2l0aCBleGNsdWRlZCBmaWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDMgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDQgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDUgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDYgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC0vL2RlcG90L2JyYW5jaDEvZmlsZTIgLS8vZGVwb3QvYnJhbmNoMi9maWxlMiAtLy9kZXBvdC9icmFuY2gzL2ZpbGUyIC0vL2RlcG90L2JyYW5jaDQvZmlsZTIgLS8vZGVwb3QvYnJhbmNoNS9maWxlMiAtLy9kZXBvdC9icmFuY2g2L2ZpbGUyIC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g1ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMworCSkKKycKKwogIyBGcm9tIGEgcmVwb3J0IGluIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4OTM2ODgKICMgd2hlcmUgLS11c2UtY2xpZW50LXNwZWMgY2F1c2VkIGJyYW5jaCBwcmVmaXhlcyBub3QgdG8gYmUgcmVtb3ZlZDsKICMgZXZlcnkgZmlsZSBpbiBnaXQgYXBwZWFyZWQgaW50byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgYnJhbmNoIG5hbWUuCkBAIC02MTAsNCArNjUwLDk2IEBACiAJKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0YXJ0IHA0ZCAoY2FzZSBmb2xkaW5nIGVuYWJsZWQpJyAnCisJc3RvcF9hbmRfY2xlYW51cF9wNGQgJiYKKwlzdGFydF9wNGQgLUMxCisnCisKKyMKKyMgMTogLy9kZXBvdC9tYWluL21mMQorIyAyOiBpbnRlZ3JhdGUgLy9kZXBvdC9tYWluLy4uLiAtPiAvL2RlcG90L2JyYW5jaDEvLi4uCisjIDM6IC8vZGVwb3QvbWFpbi9tZjIKKyMgNDogLy9kZXBvdC9CUkFOQ0gxL0IxZjMKKyMgNTogLy9kZXBvdC9icmFuY2gxL2IxZjQKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUNBU0VfSU5TRU5TSVRJVkVfRlMgJ2Jhc2ljIHA0IGJyYW5jaGVzIGZvciBjYXNlIGZvbGRpbmcnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBtYWluICYmCisKKwkJZWNobyBtZjEgPm1haW4vbWYxICYmCisJCXA0IGFkZCBtYWluL21mMSAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vbWYxIiAmJgorCisJCXA0IGludGVncmF0ZSAvL2RlcG90L21haW4vLi4uIC8vZGVwb3QvYnJhbmNoMS8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJpbnRlZ3JhdGUgbWFpbiB0byBicmFuY2gxIiAmJgorCisJCWVjaG8gbWYyID5tYWluL21mMiAmJgorCQlwNCBhZGQgbWFpbi9tZjIgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL21mMiIgJiYKKworCQlta2RpciBCUkFOQ0gxICYmCisJCWVjaG8gQjFmMyA+QlJBTkNIMS9CMWYzICYmCisJCXA0IGFkZCBCUkFOQ0gxL0IxZjMgJiYKKwkJcDQgc3VibWl0IC1kICJCUkFOQ0gxL0IxZjMiICYmCisKKwkJZWNobyBiMWY0ID5icmFuY2gxL2IxZjQgJiYKKwkJcDQgYWRkIGJyYW5jaDEvYjFmNCAmJgorCQlwNCBzdWJtaXQgLWQgImJyYW5jaDEvYjFmNCIKKwkpCisnCisKKyMgQ2hlY2sgdGhhdCBmaWxlcyBhcmUgcHJvcGVybHkgc3BsaXQgYWNyb3NzIGJyYW5jaGVzIHdoZW4gaWdub3JlY2FzZSBpcyBzZXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUNBU0VfSU5TRU5TSVRJVkVfRlMgJ2dpdCBwNCBjbG9uZSwgYnJhbmNoTGlzdCBicmFuY2ggZGVmaW5pdGlvbiwgaWdub3JlY2FzZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaDEgJiYKKwkJZ2l0IGNvbmZpZyAtLXR5cGU9Ym9vbCBjb3JlLmlnbm9yZUNhc2UgdHJ1ZSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKworCQlnaXQgbG9nIC0tYWxsIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLXN0YXQgJiYKKworCQlnaXQgcmVzZXQgLS1oYXJkIHA0L21hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBtZjEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgbWYyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIEIxZjMgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYjFmNCAmJgorCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBtZjEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgbWYyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIEIxZjMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYjFmNAorCSkKKycKKworIyBDaGVjayB0aGF0IGZpbGVzIGFyZSBwcm9wZXJseSBzcGxpdCBhY3Jvc3MgYnJhbmNoZXMgd2hlbiBpZ25vcmVjYXNlIGlzIHNldCwgdXNlLWNsaWVudC1zcGVjIGNhc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUNBU0VfSU5TRU5TSVRJVkVfRlMgJ2dpdCBwNCBjbG9uZSB3aXRoIGNsaWVudC1zcGVjLCBicmFuY2hMaXN0IGJyYW5jaCBkZWZpbml0aW9uLCBpZ25vcmVjYXNlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmJyYW5jaExpc3QgbWFpbjpicmFuY2gxICYmCisJCWdpdCBjb25maWcgLS10eXBlPWJvb2wgY29yZS5pZ25vcmVDYXNlIHRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tdXNlLWNsaWVudC1zcGVjIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9tYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgbWYxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIG1mMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBCMWYzICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIxZjQgJiYKKworCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgbWYxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIG1mMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBCMWYzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGIxZjQKKwkpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxNy1naXQtcDQtZXhjbHVkZS5zaCBiL3QvdDk4MTctZ2l0LXA0LWV4Y2x1ZGUuc2gKaW5kZXggOTZkMjVmMC4uZWMzZDkzNyAxMDA3NTUKLS0tIGEvdC90OTgxNy1naXQtcDQtZXhjbHVkZS5zaAorKysgYi90L3Q5ODE3LWdpdC1wNC1leGNsdWRlLnNoCkBAIC0yMiw3ICsyMiw5IEBACiAJCW1rZGlyIC1wIHdhbnRlZCBkaXNjYXJkICYmCiAJCWVjaG8gd2FudGVkID53YW50ZWQvZm9vICYmCiAJCWVjaG8gZGlzY2FyZCA+ZGlzY2FyZC9mb28gJiYKLQkJcDQgYWRkIHdhbnRlZC9mb28gZGlzY2FyZC9mb28gJiYKKwkJZWNobyBkaXNjYXJkX2ZpbGUgPmRpc2NhcmRfZmlsZSAmJgorCQllY2hvIGRpc2NhcmRfZmlsZV9ub3QgPmRpc2NhcmRfZmlsZV9ub3QgJiYKKwkJcDQgYWRkIHdhbnRlZC9mb28gZGlzY2FyZC9mb28gZGlzY2FyZF9maWxlIGRpc2NhcmRfZmlsZV9ub3QgJiYKIAkJcDQgc3VibWl0IC1kICJpbml0aWFsIHJldmlzaW9uIgogCSkKICcKQEAgLTMzLDcgKzM1LDkgQEAKIAkoCiAJCWNkICIkZ2l0IiAmJgogCQl0ZXN0X3BhdGhfaXNfZmlsZSB3YW50ZWQvZm9vICYmCi0JCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmQvZm9vCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmRfZmlsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkX2ZpbGVfbm90CiAJKQogJwogCkBAIC00Myw3ICs0NywyMSBAQAogCSgKIAkJY2QgIiRnaXQiICYmCiAJCXRlc3RfcGF0aF9pc19maWxlIHdhbnRlZC9mb28gJiYKLQkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlzY2FyZC9mb28KKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlzY2FyZC9mb28gJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlzY2FyZF9maWxlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmRfZmlsZV9ub3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lLCBleGNsdWRpbmcgc2luZ2xlIGZpbGUsIG5vIHRyYWlsaW5nIC8nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS8vZGVwb3QvZGlzY2FyZF9maWxlIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC8uLi5AYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgd2FudGVkL2ZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkL2ZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkaXNjYXJkX2ZpbGUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlzY2FyZF9maWxlX25vdAogCSkKICcKIApAQCAtNTIsMTUgKzcwLDM4IEBACiAJZ2l0IHA0IGNsb25lIC0vL2RlcG90L2Rpc2NhcmQvLi4uIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC8uLi5AYWxsICYmCiAJKAogCQljZCAiJGNsaSIgJiYKLQkJcDQgZWRpdCB3YW50ZWQvZm9vIGRpc2NhcmQvZm9vICYmCisJCXA0IGVkaXQgd2FudGVkL2ZvbyBkaXNjYXJkL2ZvbyBkaXNjYXJkX2ZpbGVfbm90ICYmCiAJCWRhdGUgPj53YW50ZWQvZm9vICYmCiAJCWRhdGUgPj5kaXNjYXJkL2ZvbyAmJgorCQlkYXRlID4+ZGlzY2FyZF9maWxlX25vdCAmJgogCQlwNCBzdWJtaXQgLWQgInVwZGF0aW5nIiAmJgogCiAJCWNkICIkZ2l0IiAmJgogCQlnaXQgcDQgc3luYyAtLy9kZXBvdC9kaXNjYXJkLy4uLiAmJgogCQl0ZXN0X3BhdGhfaXNfZmlsZSB3YW50ZWQvZm9vICYmCi0JCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpc2NhcmQvZm9vCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpc2NhcmQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmRfZmlsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkX2ZpbGVfbm90CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSwgdGhlbiBzeW5jIHdpdGggZXhjbHVkZSwgbm8gdHJhaWxpbmcgLycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLy9kZXBvdC9kaXNjYXJkLy4uLiAtLy9kZXBvdC9kaXNjYXJkX2ZpbGUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90Ly4uLkBhbGwgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBlZGl0IHdhbnRlZC9mb28gZGlzY2FyZC9mb28gZGlzY2FyZF9maWxlX25vdCAmJgorCQlkYXRlID4+d2FudGVkL2ZvbyAmJgorCQlkYXRlID4+ZGlzY2FyZC9mb28gJiYKKwkJZGF0ZSA+PmRpc2NhcmRfZmlsZV9ub3QgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGluZyIgJiYKKworCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS8vZGVwb3QvZGlzY2FyZC8uLi4gLS8vZGVwb3QvZGlzY2FyZF9maWxlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHdhbnRlZC9mb28gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlzY2FyZC9mb28gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlzY2FyZF9maWxlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmRfZmlsZV9ub3QKIAkpCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDk5MDItY29tcGxldGlvbi5zaCBiL3QvdDk5MDItY29tcGxldGlvbi5zaAppbmRleCA0M2NmMzEzLi43NTUxMmMzIDEwMDc1NQotLS0gYS90L3Q5OTAyLWNvbXBsZXRpb24uc2gKKysrIGIvdC90OTkwMi1jb21wbGV0aW9uLnNoCkBAIC0xNzA2LDcgKzE3MDYsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzb3VyY2luZyB0aGUgY29tcGxldGlvbiBzY3JpcHQgY2xlYXJzIGNhY2hlZCBtZXJnZSBzdHJhdGVnaWVzJyAnCi0JR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049ICYmCisJR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049ZmFsc2UgJiYKIAlfX2dpdF9jb21wdXRlX21lcmdlX3N0cmF0ZWdpZXMgJiYKIAl2ZXJib3NlIHRlc3QgLW4gIiRfX2dpdF9tZXJnZV9zdHJhdGVnaWVzIiAmJgogCS4gIiRHSVRfQlVJTERfRElSL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIiAmJgpkaWZmIC0tZ2l0IGEvdC90OTkwMy1iYXNoLXByb21wdC5zaCBiL3QvdDk5MDMtYmFzaC1wcm9tcHQuc2gKaW5kZXggNWNhZGVkYi4uODhiYzczMyAxMDA3NTUKLS0tIGEvdC90OTkwMy1iYXNoLXByb21wdC5zaAorKysgYi90L3Q5OTAzLWJhc2gtcHJvbXB0LnNoCkBAIC0yMTEsOCArMjExLDI0IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGNoZXJyeS1waWNrJyAnCiAJcHJpbnRmICIgKG1hc3RlcnxDSEVSUlktUElDS0lORykiID5leHBlY3RlZCAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiMSAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYjEgYjFeICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIiAmJgorCWdpdCByZXNldCAtLW1lcmdlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBDSEVSUllfUElDS19IRUFEICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gcmV2ZXJ0JyAnCisJcHJpbnRmICIgKG1hc3RlcnxSRVZFUlRJTkcpIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IGIxXiBiMSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJldmVydCAtLWFib3J0IiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiICYmCisJZ2l0IHJlc2V0IC0tbWVyZ2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIFJFVkVSVF9IRUFEICYmCiAJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKICcKZGlmZiAtLWdpdCBhL3QvdGVzdC1saWItZnVuY3Rpb25zLnNoIGIvdC90ZXN0LWxpYi1mdW5jdGlvbnMuc2gKaW5kZXggODI3MGRlNy4uNDhiZDNiNCAxMDA2NDQKLS0tIGEvdC90ZXN0LWxpYi1mdW5jdGlvbnMuc2gKKysrIGIvdC90ZXN0LWxpYi1mdW5jdGlvbnMuc2gKQEAgLTIzMyw2ICsyMzMsMTI5IEBACiAJZ2l0IHRhZyAiJDEiCiB9CiAKKyMgRWZmaWNpZW50bHkgY3JlYXRlIDxucj4gY29tbWl0cywgZWFjaCB3aXRoIGEgdW5pcXVlIG51bWJlciAoZnJvbSAxIHRvIDxucj4KKyMgYnkgZGVmYXVsdCkgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLgorIworIyBVc2FnZTogdGVzdF9jb21taXRfYnVsayBbb3B0aW9uc10gPG5yPgorIyAgIC1DIDxkaXI+OgorIwlSdW4gYWxsIGdpdCBjb21tYW5kcyBpbiBkaXJlY3RvcnkgPGRpcj4KKyMgICAtLXJlZj08bj46CisjCXJlZiBvbiB3aGljaCB0byBjcmVhdGUgY29tbWl0cyAoZGVmYXVsdDogSEVBRCkKKyMgICAtLXN0YXJ0PTxuPjoKKyMJbnVtYmVyIGNvbW1pdCBtZXNzYWdlcyBmcm9tIDxuPiAoZGVmYXVsdDogMSkKKyMgICAtLW1lc3NhZ2U9PG1zZz46CisjCXVzZSA8bXNnPiBhcyB0aGUgY29tbWl0IG1lc2FzZ2UgKGRlZmF1bHQ6ICJjb21taXQgJXMiKQorIyAgIC0tZmlsZW5hbWU9PGZuPjoKKyMJbW9kaWZ5IDxmbj4gaW4gZWFjaCBjb21taXQgKGRlZmF1bHQ6ICVzLnQpCisjICAgLS1jb250ZW50cz08c3RyaW5nPjoKKyMJcGxhY2UgPHN0cmluZz4gaW4gZWFjaCBmaWxlIChkZWZhdWx0OiAiY29udGVudCAlcyIpCisjICAgLS1pZD08c3RyaW5nPjoKKyMJc2hvcnRoYW5kIHRvIHVzZSA8c3RyaW5nPiBhbmQgJXMgaW4gbWVzc2FnZSwgZmlsZW5hbWUsIGFuZCBjb250ZW50cworIworIyBUaGUgbWVzc2FnZSwgZmlsZW5hbWUsIGFuZCBjb250ZW50cyBzdHJpbmdzIGFyZSBldmFsdWF0ZWQgYnkgcHJpbnRmLCB3aXRoIHRoZQorIyBmaXJzdCAiJXMiIHJlcGxhY2VkIGJ5IHRoZSBjdXJyZW50IGNvbW1pdCBudW1iZXIuIFNvIHlvdSBjYW4gZG86CisjCisjICAgdGVzdF9jb21taXRfYnVsayAtLWZpbGVuYW1lPWZpbGUgLS1jb250ZW50cz0ibW9kaWZpY2F0aW9uICVzIgorIworIyB0byBoYXZlIGV2ZXJ5IGNvbW1pdCB0b3VjaCB0aGUgc2FtZSBmaWxlLCBidXQgd2l0aCB1bmlxdWUgY29udGVudC4KKyMKK3Rlc3RfY29tbWl0X2J1bGsgKCkgeworCXRtcGZpbGU9LmJ1bGstY29tbWl0LmlucHV0CisJaW5kaXI9LgorCXJlZj1IRUFECisJbj0xCisJbWVzc2FnZT0nY29tbWl0ICVzJworCWZpbGVuYW1lPSclcy50JworCWNvbnRlbnRzPSdjb250ZW50ICVzJworCXdoaWxlIHRlc3QgJCMgLWd0IDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLUMpCisJCQlpbmRpcj0kMgorCQkJc2hpZnQKKwkJCTs7CisJCS0tcmVmPSopCisJCQlyZWY9JHsxIy0tKj19CisJCQk7OworCQktLXN0YXJ0PSopCisJCQluPSR7MSMtLSo9fQorCQkJOzsKKwkJLS1tZXNzYWdlPSopCisJCQltZXNzYWdlPSR7MSMtLSo9fQorCQkJOzsKKwkJLS1maWxlbmFtZT0qKQorCQkJZmlsZW5hbWU9JHsxIy0tKj19CisJCQk7OworCQktLWNvbnRlbnRzPSopCisJCQljb250ZW50cz0kezEjLS0qPX0KKwkJCTs7CisJCS0taWQ9KikKKwkJCW1lc3NhZ2U9IiR7MSMtLSo9fSAlcyIKKwkJCWZpbGVuYW1lPSIkezEjLS0qPX0tJXMudCIKKwkJCWNvbnRlbnRzPSIkezEjLS0qPX0gJXMiCisJCQk7OworCQktKikKKwkJCUJVRyAiaW52YWxpZCB0ZXN0X2NvbW1pdF9idWxrIG9wdGlvbjogJDEiCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisJdG90YWw9JDEKKworCWFkZF9mcm9tPQorCWlmIGdpdCAtQyAiJGluZGlyIiByZXYtcGFyc2UgLS12ZXJpZnkgIiRyZWYiCisJdGhlbgorCQlhZGRfZnJvbT10CisJZmkKKworCXdoaWxlIHRlc3QgIiR0b3RhbCIgLWd0IDAKKwlkbworCQl0ZXN0X3RpY2sgJiYKKwkJZWNobyAiY29tbWl0ICRyZWYiCisJCXByaW50ZiAnYXV0aG9yICVzIDwlcz4gJXNcbicgXAorCQkJIiRHSVRfQVVUSE9SX05BTUUiIFwKKwkJCSIkR0lUX0FVVEhPUl9FTUFJTCIgXAorCQkJIiRHSVRfQVVUSE9SX0RBVEUiCisJCXByaW50ZiAnY29tbWl0dGVyICVzIDwlcz4gJXNcbicgXAorCQkJIiRHSVRfQ09NTUlUVEVSX05BTUUiIFwKKwkJCSIkR0lUX0NPTU1JVFRFUl9FTUFJTCIgXAorCQkJIiRHSVRfQ09NTUlUVEVSX0RBVEUiCisJCWVjaG8gImRhdGEgPDxFT0YiCisJCXByaW50ZiAiJG1lc3NhZ2VcbiIgJG4KKwkJZWNobyAiRU9GIgorCQlpZiB0ZXN0IC1uICIkYWRkX2Zyb20iCisJCXRoZW4KKwkJCWVjaG8gImZyb20gJHJlZl4wIgorCQkJYWRkX2Zyb209CisJCWZpCisJCXByaW50ZiAiTSA2NDQgaW5saW5lICRmaWxlbmFtZVxuIiAkbgorCQllY2hvICJkYXRhIDw8RU9GIgorCQlwcmludGYgIiRjb250ZW50c1xuIiAkbgorCQllY2hvICJFT0YiCisJCWVjaG8KKwkJbj0kKChuICsgMSkpCisJCXRvdGFsPSQoKHRvdGFsIC0gMSkpCisJZG9uZSA+IiR0bXBmaWxlIgorCisJZ2l0IC1DICIkaW5kaXIiIFwKKwkgICAgLWMgZmFzdGltcG9ydC51bnBhY2tsaW1pdD0wIFwKKwkgICAgZmFzdC1pbXBvcnQgPCIkdG1wZmlsZSIgfHwgcmV0dXJuIDEKKworCSMgVGhpcyB3aWxsIGJlIGxlZnQgaW4gcGxhY2Ugb24gZmFpbHVyZSwgd2hpY2ggbWF5IGFpZCBkZWJ1Z2dpbmcuCisJcm0gLWYgIiR0bXBmaWxlIgorCisJIyBJZiB3ZSB1cGRhdGVkIEhFQUQsIHRoZW4gYmUgbmljZSBhbmQgdXBkYXRlIHRoZSBpbmRleCBhbmQgd29ya2luZworCSMgdHJlZSwgdG9vLgorCWlmIHRlc3QgIiRyZWYiID0gIkhFQUQiCisJdGhlbgorCQlnaXQgLUMgIiRpbmRpciIgY2hlY2tvdXQgLWYgSEVBRCB8fCByZXR1cm4gMQorCWZpCisKK30KKwogIyBUaGlzIGZ1bmN0aW9uIGhlbHBzIHN5c3RlbXMgd2hlcmUgY29yZS5maWxlbW9kZT1mYWxzZSBpcyBzZXQuCiAjIFVzZSBpdCBpbnN0ZWFkIG9mIHBsYWluICdjaG1vZCAreCcgdG8gc2V0IG9yIHVuc2V0IHRoZSBleGVjdXRhYmxlIGJpdAogIyBvZiBhIGZpbGUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBhZGQgaXQgdG8gdGhlIGluZGV4LgpAQCAtMzA5LDYgKzQzMiwyNiBAQAogfQogCiB0ZXN0X3NldF9wcmVyZXEgKCkgeworCWlmIHRlc3QgLW4gIiRHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUwiCisJdGhlbgorCQljYXNlICIkMSIgaW4KKwkJIyBUaGUgIiEiIGNhc2UgaXMgaGFuZGxlZCBiZWxvdyB3aXRoCisJCSMgdGVzdF91bnNldF9wcmVyZXEoKQorCQkhKikKKwkJCTs7CisJCSMgKFRlbXBvcmFyeT8pIHdoaXRlbGlzdCBvZiB0aGluZ3Mgd2UgY2FuJ3QgZWFzaWx5CisJCSMgcHJldGVuZCBub3QgdG8gc3VwcG9ydAorCQlTWU1MSU5LUykKKwkJCTs7CisJCSMgSW5zcGVjdGluZyB3aGV0aGVyIEdJVF9URVNUX0ZBSUxfUFJFUkVRUyBpcyBvbgorCQkjIHNob3VsZCBiZSB1bmFmZmVjdGVkLgorCQlGQUlMX1BSRVJFUVMpCisJCQk7OworCQkqKQorCQkJcmV0dXJuCisJCWVzYWMKKwlmaQorCiAJY2FzZSAiJDEiIGluCiAJISopCiAJCXRlc3RfdW5zZXRfcHJlcmVxICIkezEjIX0iCkBAIC04ODgsNiArMTAzMSwyMSBAQAogCWZpCiB9CiAKKyMgQ29tcGFyZSBwYXRocyByZXNwZWN0aW5nIGNvcmUuaWdub3JlQ2FzZQordGVzdF9jbXBfZnNwYXRoICgpIHsKKwlpZiB0ZXN0ICJ4JDEiID0gIngkMiIKKwl0aGVuCisJCXJldHVybiAwCisJZmkKKworCWlmIHRlc3QgdHJ1ZSAhPSAiJChnaXQgY29uZmlnIC0tZ2V0IC0tdHlwZT1ib29sIGNvcmUuaWdub3JlY2FzZSkiCisJdGhlbgorCQlyZXR1cm4gMQorCWZpCisKKwl0ZXN0ICJ4JChlY2hvICIkMSIgfCB0ciBBLVogYS16KSIgPSAgIngkKGVjaG8gIiQyIiB8IHRyIEEtWiBhLXopIgorfQorCiAjIFByaW50IGEgc2VxdWVuY2Ugb2YgaW50ZWdlcnMgaW4gaW5jcmVhc2luZyBvcmRlciwgZWl0aGVyIHdpdGgKICMgdHdvIGFyZ3VtZW50cyAoc3RhcnQgYW5kIGVuZCk6CiAjCkBAIC0xMDE1LDYyICsxMTczLDIwIEBACiAJY29tbWFuZCAiJFBFUkxfUEFUSCIgIiRAIiAyPiY3CiB9IDc+JjIgMj4mNAogCi0jIElzIHRoZSB2YWx1ZSBvbmUgb2YgdGhlIHZhcmlvdXMgd2F5cyB0byBzcGVsbCBhIGJvb2xlYW4gdHJ1ZS9mYWxzZT8KLXRlc3Rfbm9ybWFsaXplX2Jvb2wgKCkgewotCWdpdCAtYyBtYWdpYy52YXJpYWJsZT0iJDEiIGNvbmZpZyAtLWJvb2wgbWFnaWMudmFyaWFibGUgMj4vZGV2L251bGwKLX0KLQotIyBHaXZlbiBhIHZhcmlhYmxlICQxLCBub3JtYWxpemUgdGhlIHZhbHVlIG9mIGl0IHRvIG9uZSBvZiAidHJ1ZSIsCi0jICJmYWxzZSIsIG9yICJhdXRvIiBhbmQgc3RvcmUgdGhlIHJlc3VsdCB0byBpdC4KLSMKLSMgICAgIHRlc3RfdHJpc3RhdGUgR0lUX1RFU1RfSFRUUEQKLSMKLSMgQSB2YXJpYWJsZSBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGlzIHNldCB0byAnZmFsc2UnLgotIyBBIHZhcmlhYmxlIHNldCB0byAnZmFsc2UnIG9yICdhdXRvJyBrZWVwcyBpdHMgdmFsdWUuCi0jIEFueXRoaW5nIGVsc2UgaXMgc2V0IHRvICd0cnVlJy4KLSMgQW4gdW5zZXQgdmFyaWFibGUgZGVmYXVsdHMgdG8gJ2F1dG8nLgotIwotIyBUaGUgbGFzdCBydWxlIGlzIHRvIGFsbG93IHBlb3BsZSB0byBzZXQgdGhlIHZhcmlhYmxlIHRvIGFuIGVtcHR5Ci0jIHN0cmluZyBhbmQgZXhwb3J0IGl0IHRvIGRlY2xpbmUgdGVzdGluZyB0aGUgcGFydGljdWxhciBmZWF0dXJlCi0jIGZvciB2ZXJzaW9ucyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBjaGFuZ2UuICBXZSB1c2VkIHRvIHRyZWF0Ci0jIGJvdGggdW5zZXQgYW5kIGVtcHR5IHZhcmlhYmxlIGFzIGEgc2lnbmFsIGZvciAiZG8gbm90IHRlc3QiIGFuZAotIyB0b29rIGFueSBub24tZW1wdHkgc3RyaW5nIGFzICJwbGVhc2UgdGVzdCIuCi0KLXRlc3RfdHJpc3RhdGUgKCkgewotCWlmIGV2YWwgInRlc3QgeFwiXCR7JDEraXNzZXR9XCIgPSB4aXNzZXQiCi0JdGhlbgotCQkjIGV4cGxpY2l0bHkgc2V0Ci0JCWV2YWwgIgotCQkJY2FzZSBcIlwkJDFcIiBpbgotCQkJJycpCSQxPWZhbHNlIDs7Ci0JCQlhdXRvKQk7OwotCQkJKikJJDE9XCQodGVzdF9ub3JtYWxpemVfYm9vbCBcJCQxIHx8IGVjaG8gdHJ1ZSkgOzsKLQkJCWVzYWMKLQkJIgotCWVsc2UKLQkJZXZhbCAiJDE9YXV0byIKLQlmaQotfQotCiAjIEV4aXQgdGhlIHRlc3Qgc3VpdGUsIGVpdGhlciBieSBza2lwcGluZyBhbGwgcmVtYWluaW5nIHRlc3RzIG9yIGJ5Ci0jIGV4aXRpbmcgd2l0aCBhbiBlcnJvci4gSWYgIiQxIiBpcyAiYXV0byIsIHdlIHRoZW4gd2UgYXNzdW1lIHdlIHdlcmUKLSMgb3Bwb3J0dW5pc3RpY2FsbHkgdHJ5aW5nIHRvIHNldCB1cCBzb21lIHRlc3RzIGFuZCB3ZSBza2lwLiBJZiBpdCBpcwotIyAidHJ1ZSIsIHRoZW4gd2UgcmVwb3J0IGEgZmFpbHVyZS4KKyMgZXhpdGluZyB3aXRoIGFuIGVycm9yLiBJZiBvdXIgcHJlcmVxdWlzaXRlIHZhcmlhYmxlICQxIGZhbGxzIGJhY2sKKyMgb24gYSBkZWZhdWx0IGFzc3VtZSB3ZSB3ZXJlIG9wcG9ydHVuaXN0aWNhbGx5IHRyeWluZyB0byBzZXQgdXAgc29tZQorIyB0ZXN0cyBhbmQgd2Ugc2tpcC4gSWYgaXQgaXMgZXhwbGljaXRseSAidHJ1ZSIsIHRoZW4gd2UgcmVwb3J0IGEgZmFpbHVyZS4KICMKICMgVGhlIGVycm9yL3NraXAgbWVzc2FnZSBzaG91bGQgYmUgZ2l2ZW4gYnkgJDIuCiAjCiB0ZXN0X3NraXBfb3JfZGllICgpIHsKLQljYXNlICIkMSIgaW4KLQlhdXRvKQorCWlmICEgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD1mYWxzZSAtLWV4aXQtY29kZSAkMQorCXRoZW4KIAkJc2tpcF9hbGw9JDIKIAkJdGVzdF9kb25lCi0JCTs7Ci0JdHJ1ZSkKLQkJZXJyb3IgIiQyIgotCQk7OwotCSopCi0JCWVycm9yICJCVUc6IHRlc3QgdHJpc3RhdGUgaXMgJyQxJyAocmVhbCBlcnJvcjogJDIpIgotCWVzYWMKKwlmaQorCWVycm9yICIkMiIKIH0KIAogIyBUaGUgZm9sbG93aW5nIG1pbmd3XyogZnVuY3Rpb25zIG9iZXkgUE9TSVggc2hlbGwgc3ludGF4LCBidXQgYXJlIGFjdHVhbGx5CkBAIC0xMzE0LDYgKzE0MzAsMTIgQEAKIAlldmFsICJwcmludGYgJyVzJyBcIlwkeyR2YXJ9XCIiCiB9CiAKKyMgSW5zZXJ0IGEgc2xhc2ggaW50byBhbiBvYmplY3QgSUQgc28gaXQgY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlIGEgbG9jYXRpb24KKyMgdW5kZXIgIi5naXQvb2JqZWN0cyIuICBGb3IgZXhhbXBsZSwgImRlYWRiZWVmLi4uIiBiZWNvbWVzICJkZS9hZGJlZWYuLiIuCit0ZXN0X29pZF90b19wYXRoICgpIHsKKwllY2hvICIkezElJHsxIz8/fX0vJHsxIz8/fSIKK30KKwogIyBDaG9vc2UgYSBwb3J0IG51bWJlciBiYXNlZCBvbiB0aGUgdGVzdCBzY3JpcHQncyBudW1iZXIgYW5kIHN0b3JlIGl0IGluCiAjIHRoZSBnaXZlbiB2YXJpYWJsZSBuYW1lLCB1bmxlc3MgdGhhdCB2YXJpYWJsZSBhbHJlYWR5IGNvbnRhaW5zIGEgbnVtYmVyLgogdGVzdF9zZXRfcG9ydCAoKSB7CmRpZmYgLS1naXQgYS90L3Rlc3QtbGliLnNoIGIvdC90ZXN0LWxpYi5zaAppbmRleCA1OTlmZDcwLi4zMGIwN2UzIDEwMDY0NAotLS0gYS90L3Rlc3QtbGliLnNoCisrKyBiL3QvdGVzdC1saWIuc2gKQEAgLTM4Niw3ICszODYsNiBAQAogCW15IEBlbnYgPSBrZXlzICVFTlY7CiAJbXkgJG9rID0gam9pbigifCIsIHF3KAogCQlUUkFDRQotCQlUUjJfCiAJCURFQlVHCiAJCVRFU1QKIAkJLipfVEVTVApAQCAtMTM4OSw2ICsxMzg4LDI1IEBACiAJZG9uZQogfQogCisjIFRoZSBHSVRfVEVTVF9GQUlMX1BSRVJFUVMgY29kZSBob29rcyBpbnRvIHRlc3Rfc2V0X3ByZXJlcSgpLCBhbmQKKyMgdGh1cyBuZWVkcyB0byBiZSBzZXQgdXAgcmVhbGx5IGVhcmx5LCBhbmQgc2V0IGFuIGludGVybmFsIHZhcmlhYmxlCisjIGZvciBjb252ZW5pZW5jZSBzbyB0aGUgaG90IHRlc3Rfc2V0X3ByZXJlcSgpIGNvZGVwYXRoIGRvZXNuJ3QgbmVlZAorIyB0byBjYWxsICJnaXQgZW52LS1oZWxwZXIiLiBPbmx5IGRvIHRoYXQgd29yayBpZiBuZWVkZWQgYnkgc2VlaW5nIGlmCisjIEdJVF9URVNUX0ZBSUxfUFJFUkVRUyBpcyBzZXQgYXQgYWxsLgorR0lUX1RFU1RfRkFJTF9QUkVSRVFTX0lOVEVSTkFMPQoraWYgdGVzdCAtbiAiJEdJVF9URVNUX0ZBSUxfUFJFUkVRUyIKK3RoZW4KKwlpZiBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PTAgLS1leGl0LWNvZGUgR0lUX1RFU1RfRkFJTF9QUkVSRVFTCisJdGhlbgorCQlHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUw9dHJ1ZQorCQl0ZXN0X3NldF9wcmVyZXEgRkFJTF9QUkVSRVFTCisJZmkKK2Vsc2UKKwl0ZXN0X2xhenlfcHJlcmVxIEZBSUxfUFJFUkVRUyAnCisJCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9MCAtLWV4aXQtY29kZSBHSVRfVEVTVF9GQUlMX1BSRVJFUVMKKwknCitmaQorCiAjIEZpeCBzb21lIGNvbW1hbmRzIG9uIFdpbmRvd3MKIHVuYW1lX3M9JCh1bmFtZSAtcykKIGNhc2UgJHVuYW1lX3MgaW4KQEAgLTE0NDMsMTEgKzE0NjEsOSBAQAogCXVuc2V0IEdJVF9URVNUX0dFVFRFWFRfUE9JU09OX09SSUcKIGZpCiAKLSMgQ2FuIHdlIHJlbHkgb24gZ2l0J3Mgb3V0cHV0IGluIHRoZSBDIGxvY2FsZT8KLWlmIHRlc3QgLXogIiRHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiIKLXRoZW4KLQl0ZXN0X3NldF9wcmVyZXEgQ19MT0NBTEVfT1VUUFVUCi1maQordGVzdF9sYXp5X3ByZXJlcSBDX0xPQ0FMRV9PVVRQVVQgJworCSEgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD0wIC0tZXhpdC1jb2RlIEdJVF9URVNUX0dFVFRFWFRfUE9JU09OCisnCiAKIGlmIHRlc3QgLXogIiRHSVRfVEVTVF9DSEVDS19DQUNIRV9UUkVFIgogdGhlbgpkaWZmIC0tZ2l0IGEvdGFnLmMgYi90YWcuYwppbmRleCA3NDQ1YjhmLi41ZGI4NzBlIDEwMDY0NAotLS0gYS90YWcuYworKysgYi90YWcuYwpAQCAtMTAwLDEwICsxMDAsOSBAQAogCiBzdHJ1Y3QgdGFnICpsb29rdXBfdGFnKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCiB7Ci0Jc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChyLCBvaWQtPmhhc2gpOworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3Qociwgb2lkKTsKIAlpZiAoIW9iaikKLQkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qociwgb2lkLT5oYXNoLAotCQkJCSAgICAgYWxsb2NfdGFnX25vZGUocikpOworCQlyZXR1cm4gY3JlYXRlX29iamVjdChyLCBvaWQsIGFsbG9jX3RhZ19ub2RlKHIpKTsKIAlyZXR1cm4gb2JqZWN0X2FzX3R5cGUociwgb2JqLCBPQkpfVEFHLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LWhlbHBlci5jIGIvdHJhbnNwb3J0LWhlbHBlci5jCmluZGV4IGM3ZTE3ZWMuLjZiMDVhODggMTAwNjQ0Ci0tLSBhL3RyYW5zcG9ydC1oZWxwZXIuYworKysgYi90cmFuc3BvcnQtaGVscGVyLmMKQEAgLTg1Myw2ICs4NTMsNyBAQAogewogCWludCBmb3JjZV9hbGwgPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPUkNFOwogCWludCBtaXJyb3IgPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUjsKKwlpbnQgYXRvbWljID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BVE9NSUM7CiAJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOwogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IHJlZiAqcmVmOwpAQCAtODcyLDYgKzg3MywxMSBAQAogCQljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOgogCQljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX1NUQUxFOgogCQljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX0FMUkVBRFlfRVhJU1RTOgorCQkJaWYgKGF0b21pYykgeworCQkJCXN0cmluZ19saXN0X2NsZWFyKCZjYXNfb3B0aW9ucywgMCk7CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UKKwkJCQljb250aW51ZTsKIAkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgogCQkJY29udGludWU7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS90cmFuc3BvcnQuYyBiL3RyYW5zcG9ydC5jCmluZGV4IGYxZmNkMmMuLjc3OGM2MGIgMTAwNjQ0Ci0tLSBhL3RyYW5zcG9ydC5jCisrKyBiL3RyYW5zcG9ydC5jCkBAIC0xMjI2LDYgKzEyMjYsMjAgQEAKIAkJZXJyID0gcHVzaF9oYWRfZXJyb3JzKHJlbW90ZV9yZWZzKTsKIAkJcmV0ID0gcHVzaF9yZXQgfCBlcnI7CiAKKwkJaWYgKChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FUT01JQykgJiYgZXJyKSB7CisJCQlzdHJ1Y3QgcmVmICppdDsKKwkJCWZvciAoaXQgPSByZW1vdGVfcmVmczsgaXQ7IGl0ID0gaXQtPm5leHQpCisJCQkJc3dpdGNoIChpdC0+c3RhdHVzKSB7CisJCQkJY2FzZSBSRUZfU1RBVFVTX05PTkU6CisJCQkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQkJCWNhc2UgUkVGX1NUQVRVU19PSzoKKwkJCQkJaXQtPnN0YXR1cyA9IFJFRl9TVEFUVVNfQVRPTUlDX1BVU0hfRkFJTEVEOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKwogCQlpZiAoIXF1aWV0IHx8IGVycikKIAkJCXRyYW5zcG9ydF9wcmludF9wdXNoX3N0YXR1cyh0cmFuc3BvcnQtPnVybCwgcmVtb3RlX3JlZnMsCiAJCQkJCXZlcmJvc2UgfCBwb3JjZWxhaW4sIHBvcmNlbGFpbiwKQEAgLTEzODAsMTAwICsxMzk0LDMgQEAKIGxpdGVyYWxfY29weToKIAlyZXR1cm4geHN0cmR1cCh1cmwpOwogfQotCi1zdGF0aWMgdm9pZCBmaWxsX2FsdGVybmF0ZV9yZWZzX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCwKLQkJCQkJY29uc3QgY2hhciAqcmVwb19wYXRoKQotewotCWNvbnN0IGNoYXIgKnZhbHVlOwotCi0JaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgiY29yZS5hbHRlcm5hdGVSZWZzQ29tbWFuZCIsICZ2YWx1ZSkpIHsKLQkJY21kLT51c2Vfc2hlbGwgPSAxOwotCi0JCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCB2YWx1ZSk7Ci0JCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCByZXBvX3BhdGgpOwotCX0gZWxzZSB7Ci0JCWNtZC0+Z2l0X2NtZCA9IDE7Ci0KLQkJYXJndl9hcnJheV9wdXNoZigmY21kLT5hcmdzLCAiLS1naXQtZGlyPSVzIiwgcmVwb19wYXRoKTsKLQkJYXJndl9hcnJheV9wdXNoKCZjbWQtPmFyZ3MsICJmb3ItZWFjaC1yZWYiKTsKLQkJYXJndl9hcnJheV9wdXNoKCZjbWQtPmFyZ3MsICItLWZvcm1hdD0lKG9iamVjdG5hbWUpIik7Ci0KLQkJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgiY29yZS5hbHRlcm5hdGVSZWZzUHJlZml4ZXMiLCAmdmFsdWUpKSB7Ci0JCQlhcmd2X2FycmF5X3B1c2goJmNtZC0+YXJncywgIi0tIik7Ci0JCQlhcmd2X2FycmF5X3NwbGl0KCZjbWQtPmFyZ3MsIHZhbHVlKTsKLQkJfQotCX0KLQotCWNtZC0+ZW52ID0gbG9jYWxfcmVwb19lbnY7Ci0JY21kLT5vdXQgPSAtMTsKLX0KLQotc3RhdGljIHZvaWQgcmVhZF9hbHRlcm5hdGVfcmVmcyhjb25zdCBjaGFyICpwYXRoLAotCQkJCWFsdGVybmF0ZV9yZWZfZm4gKmNiLAotCQkJCXZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOwotCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOwotCUZJTEUgKmZoOwotCi0JZmlsbF9hbHRlcm5hdGVfcmVmc19jb21tYW5kKCZjbWQsIHBhdGgpOwotCi0JaWYgKHN0YXJ0X2NvbW1hbmQoJmNtZCkpCi0JCXJldHVybjsKLQotCWZoID0geGZkb3BlbihjbWQub3V0LCAiciIpOwotCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgZmgpICE9IEVPRikgewotCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKLQkJY29uc3QgY2hhciAqcDsKLQotCQlpZiAocGFyc2Vfb2lkX2hleChsaW5lLmJ1ZiwgJm9pZCwgJnApIHx8ICpwKSB7Ci0JCQl3YXJuaW5nKF8oImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIpLAotCQkJCWxpbmUuYnVmKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJY2IoJm9pZCwgZGF0YSk7Ci0JfQotCi0JZmNsb3NlKGZoKTsKLQlmaW5pc2hfY29tbWFuZCgmY21kKTsKLX0KLQotc3RydWN0IGFsdGVybmF0ZV9yZWZzX2RhdGEgewotCWFsdGVybmF0ZV9yZWZfZm4gKmZuOwotCXZvaWQgKmRhdGE7Ci19OwotCi1zdGF0aWMgaW50IHJlZnNfZnJvbV9hbHRlcm5hdGVfY2Ioc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKmUsCi0JCQkJICB2b2lkICpkYXRhKQotewotCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOwotCXNpemVfdCBiYXNlX2xlbjsKLQlzdHJ1Y3QgYWx0ZXJuYXRlX3JlZnNfZGF0YSAqY2IgPSBkYXRhOwotCi0JaWYgKCFzdHJidWZfcmVhbHBhdGgoJnBhdGgsIGUtPnBhdGgsIDApKQotCQlnb3RvIG91dDsKLQlpZiAoIXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJnBhdGgsICIvb2JqZWN0cyIpKQotCQlnb3RvIG91dDsKLQliYXNlX2xlbiA9IHBhdGgubGVuOwotCi0JLyogSXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5IHdpdGggcmVmcz8gKi8KLQlzdHJidWZfYWRkc3RyKCZwYXRoLCAiL3JlZnMiKTsKLQlpZiAoIWlzX2RpcmVjdG9yeShwYXRoLmJ1ZikpCi0JCWdvdG8gb3V0OwotCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGJhc2VfbGVuKTsKLQotCXJlYWRfYWx0ZXJuYXRlX3JlZnMocGF0aC5idWYsIGNiLT5mbiwgY2ItPmRhdGEpOwotCi1vdXQ6Ci0Jc3RyYnVmX3JlbGVhc2UoJnBhdGgpOwotCXJldHVybiAwOwotfQotCi12b2lkIGZvcl9lYWNoX2FsdGVybmF0ZV9yZWYoYWx0ZXJuYXRlX3JlZl9mbiBmbiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYWx0ZXJuYXRlX3JlZnNfZGF0YSBjYjsKLQljYi5mbiA9IGZuOwotCWNiLmRhdGEgPSBkYXRhOwotCWZvcmVhY2hfYWx0X29kYihyZWZzX2Zyb21fYWx0ZXJuYXRlX2NiLCAmY2IpOwotfQpkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LmggYi90cmFuc3BvcnQuaAppbmRleCAwNmUwNmQzLi4wYjVmNzgwIDEwMDY0NAotLS0gYS90cmFuc3BvcnQuaAorKysgYi90cmFuc3BvcnQuaApAQCAtMjYyLDYgKzI2Miw0IEBACiB2b2lkIHRyYW5zcG9ydF9wcmludF9wdXNoX3N0YXR1cyhjb25zdCBjaGFyICpkZXN0LCBzdHJ1Y3QgcmVmICpyZWZzLAogCQkgIGludCB2ZXJib3NlLCBpbnQgcG9yY2VsYWluLCB1bnNpZ25lZCBpbnQgKnJlamVjdF9yZWFzb25zKTsKIAotdHlwZWRlZiB2b2lkIGFsdGVybmF0ZV9yZWZfZm4oY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICopOwotdm9pZCBmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKGFsdGVybmF0ZV9yZWZfZm4sIHZvaWQgKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3RyZWUtZGlmZi5jIGIvdHJlZS1kaWZmLmMKaW5kZXggZjFmNjQxZS4uMzNkZWQ3ZiAxMDA2NDQKLS0tIGEvdHJlZS1kaWZmLmMKKysrIGIvdHJlZS1kaWZmLmMKQEAgLTQyMiw4ICs0MjIsOCBAQAogCSAqICAgZGlmZl90cmVlX29pZChwYXJlbnQsIGNvbW1pdCkgKQogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBucGFyZW50OyArK2kpCi0JCXRwdHJlZVtpXSA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKCZ0cFtpXSwgcGFyZW50c19vaWRbaV0pOwotCXR0cmVlID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IoJnQsIG9pZCk7CisJCXRwdHJlZVtpXSA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKG9wdC0+cmVwbywgJnRwW2ldLCBwYXJlbnRzX29pZFtpXSk7CisJdHRyZWUgPSBmaWxsX3RyZWVfZGVzY3JpcHRvcihvcHQtPnJlcG8sICZ0LCBvaWQpOwogCiAJLyogRW5hYmxlIHJlY3Vyc2lvbiBpbmRlZmluaXRlbHkgKi8KIAlvcHQtPnBhdGhzcGVjLnJlY3Vyc2l2ZSA9IG9wdC0+ZmxhZ3MucmVjdXJzaXZlOwpkaWZmIC0tZ2l0IGEvdHJlZS13YWxrLmMgYi90cmVlLXdhbGsuYwppbmRleCBlYzMyYTQ3Li5jMjBiNjJmIDEwMDY0NAotLS0gYS90cmVlLXdhbGsuYworKysgYi90cmVlLXdhbGsuYwpAQCAtODEsMTMgKzgxLDE1IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCAqZmlsbF90cmVlX2Rlc2NyaXB0b3Ioc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQordm9pZCAqZmlsbF90cmVlX2Rlc2NyaXB0b3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiAJdm9pZCAqYnVmID0gTlVMTDsKIAogCWlmIChvaWQpIHsKLQkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uob2lkLCB0cmVlX3R5cGUsICZzaXplLCBOVUxMKTsKKwkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uociwgb2lkLCB0cmVlX3R5cGUsICZzaXplLCBOVUxMKTsKIAkJaWYgKCFidWYpCiAJCQlkaWUoInVuYWJsZSB0byByZWFkIHRyZWUgJXMiLCBvaWRfdG9faGV4KG9pZCkpOwogCX0KQEAgLTUwMCw3ICs1MDIsOSBAQAogCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogfTsKIAotc3RhdGljIGludCBmaW5kX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqdCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LCB1bnNpZ25lZCBzaG9ydCAqbW9kZSkKK3N0YXRpYyBpbnQgZmluZF90cmVlX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LAorCQkJICAgdW5zaWduZWQgc2hvcnQgKm1vZGUpCiB7CiAJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CiAJd2hpbGUgKHQtPnNpemUpIHsKQEAgLTUzMCwxOSArNTM0LDIzIEBACiAJCQlvaWRjcHkocmVzdWx0LCAmb2lkKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXJldHVybiBnZXRfdHJlZV9lbnRyeSgmb2lkLCBuYW1lICsgZW50cnlsZW4sIHJlc3VsdCwgbW9kZSk7CisJCXJldHVybiBnZXRfdHJlZV9lbnRyeShyLCAmb2lkLCBuYW1lICsgZW50cnlsZW4sIHJlc3VsdCwgbW9kZSk7CiAJfQogCXJldHVybiAtMTsKIH0KIAotaW50IGdldF90cmVlX2VudHJ5KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRyZWVfb2lkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHVuc2lnbmVkIHNob3J0ICptb2RlKQoraW50IGdldF90cmVlX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX29pZCwKKwkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICB1bnNpZ25lZCBzaG9ydCAqbW9kZSkKIHsKIAlpbnQgcmV0dmFsOwogCXZvaWQgKnRyZWU7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXN0cnVjdCBvYmplY3RfaWQgcm9vdDsKIAotCXRyZWUgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSh0cmVlX29pZCwgdHJlZV90eXBlLCAmc2l6ZSwgJnJvb3QpOworCXRyZWUgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShyLCB0cmVlX29pZCwgdHJlZV90eXBlLCAmc2l6ZSwgJnJvb3QpOwogCWlmICghdHJlZSkKIAkJcmV0dXJuIC0xOwogCkBAIC01NTcsNyArNTY1LDcgQEAKIAl9IGVsc2UgewogCQlzdHJ1Y3QgdHJlZV9kZXNjIHQ7CiAJCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLCBzaXplKTsKLQkJcmV0dmFsID0gZmluZF90cmVlX2VudHJ5KCZ0LCBuYW1lLCBvaWQsIG1vZGUpOworCQlyZXR2YWwgPSBmaW5kX3RyZWVfZW50cnkociwgJnQsIG5hbWUsIG9pZCwgbW9kZSk7CiAJfQogCWZyZWUodHJlZSk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTU4NSw3ICs1OTMsMTAgQEAKICAqIFNlZSB0aGUgY29kZSBmb3IgZW51bSBnZXRfb2lkX3Jlc3VsdCBmb3IgYSBkZXNjcmlwdGlvbiBvZgogICogdGhlIHJldHVybiB2YWx1ZXMuCiAgKi8KLWVudW0gZ2V0X29pZF9yZXN1bHQgZ2V0X3RyZWVfZW50cnlfZm9sbG93X3N5bWxpbmtzKHN0cnVjdCBvYmplY3RfaWQgKnRyZWVfb2lkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQsIHN0cnVjdCBzdHJidWYgKnJlc3VsdF9wYXRoLCB1bnNpZ25lZCBzaG9ydCAqbW9kZSkKK2VudW0gZ2V0X29pZF9yZXN1bHQgZ2V0X3RyZWVfZW50cnlfZm9sbG93X3N5bWxpbmtzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQlzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX29pZCwgY29uc3QgY2hhciAqbmFtZSwKKwkJc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LCBzdHJ1Y3Qgc3RyYnVmICpyZXN1bHRfcGF0aCwKKwkJdW5zaWduZWQgc2hvcnQgKm1vZGUpCiB7CiAJaW50IHJldHZhbCA9IE1JU1NJTkdfT0JKRUNUOwogCXN0cnVjdCBkaXJfc3RhdGUgKnBhcmVudHMgPSBOVUxMOwpAQCAtNjA5LDcgKzYyMCw4IEBACiAJCQl2b2lkICp0cmVlOwogCQkJc3RydWN0IG9iamVjdF9pZCByb290OwogCQkJdW5zaWduZWQgbG9uZyBzaXplOwotCQkJdHJlZSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKCZjdXJyZW50X3RyZWVfb2lkLAorCQkJdHJlZSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHIsCisJCQkJCQkJICAmY3VycmVudF90cmVlX29pZCwKIAkJCQkJCQkgIHRyZWVfdHlwZSwgJnNpemUsCiAJCQkJCQkJICAmcm9vdCk7CiAJCQlpZiAoIXRyZWUpCkBAIC02NzgsNyArNjkwLDcgQEAKIAkJfQogCiAJCS8qIExvb2sgdXAgdGhlIGZpcnN0IChvciBvbmx5KSBwYXRoIGNvbXBvbmVudCBpbiB0aGUgdHJlZS4gKi8KLQkJZmluZF9yZXN1bHQgPSBmaW5kX3RyZWVfZW50cnkoJnQsIG5hbWVidWYuYnVmLAorCQlmaW5kX3Jlc3VsdCA9IGZpbmRfdHJlZV9lbnRyeShyLCAmdCwgbmFtZWJ1Zi5idWYsCiAJCQkJCSAgICAgICZjdXJyZW50X3RyZWVfb2lkLCBtb2RlKTsKIAkJaWYgKGZpbmRfcmVzdWx0KSB7CiAJCQlnb3RvIGRvbmU7CkBAIC03MjIsNyArNzM0LDggQEAKIAkJCSAqLwogCQkJcmV0dmFsID0gREFOR0xJTkdfU1lNTElOSzsKIAotCQkJY29udGVudHMgPSByZWFkX29iamVjdF9maWxlKCZjdXJyZW50X3RyZWVfb2lkLCAmdHlwZSwKKwkJCWNvbnRlbnRzID0gcmVwb19yZWFkX29iamVjdF9maWxlKHIsCisJCQkJCQkgICAgJmN1cnJlbnRfdHJlZV9vaWQsICZ0eXBlLAogCQkJCQkJICAgICZsaW5rX2xlbik7CiAKIAkJCWlmICghY29udGVudHMpCmRpZmYgLS1naXQgYS90cmVlLXdhbGsuaCBiL3RyZWUtd2Fsay5oCmluZGV4IDE2MWUyNDAuLjJhNWRiMjkgMTAwNjQ0Ci0tLSBhL3RyZWUtd2Fsay5oCisrKyBiL3RyZWUtd2Fsay5oCkBAIC00NSwxMyArNDUsMTUgQEAKIGludCB0cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKiwgc3RydWN0IG5hbWVfZW50cnkgKik7CiBpbnQgdHJlZV9lbnRyeV9nZW50bHkoc3RydWN0IHRyZWVfZGVzYyAqLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqKTsKIAotdm9pZCAqZmlsbF90cmVlX2Rlc2NyaXB0b3Ioc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK3ZvaWQgKmZpbGxfdHJlZV9kZXNjcmlwdG9yKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgc3RydWN0IHRyZWVfZGVzYyAqZGVzYywKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CiAKIHN0cnVjdCB0cmF2ZXJzZV9pbmZvOwogdHlwZWRlZiBpbnQgKCp0cmF2ZXJzZV9jYWxsYmFja190KShpbnQgbiwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGRpcm1hc2ssIHN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSwgc3RydWN0IHRyYXZlcnNlX2luZm8gKik7CiBpbnQgdHJhdmVyc2VfdHJlZXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbyk7CiAKLWVudW0gZ2V0X29pZF9yZXN1bHQgZ2V0X3RyZWVfZW50cnlfZm9sbG93X3N5bWxpbmtzKHN0cnVjdCBvYmplY3RfaWQgKnRyZWVfb2lkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQsIHN0cnVjdCBzdHJidWYgKnJlc3VsdF9wYXRoLCB1bnNpZ25lZCBzaG9ydCAqbW9kZSk7CitlbnVtIGdldF9vaWRfcmVzdWx0IGdldF90cmVlX2VudHJ5X2ZvbGxvd19zeW1saW5rcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IG9iamVjdF9pZCAqdHJlZV9vaWQsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdCwgc3RydWN0IHN0cmJ1ZiAqcmVzdWx0X3BhdGgsIHVuc2lnbmVkIHNob3J0ICptb2RlKTsKIAogc3RydWN0IHRyYXZlcnNlX2luZm8gewogCWNvbnN0IGNoYXIgKnRyYXZlcnNlX3BhdGg7CkBAIC02Niw3ICs2OCw3IEBACiAJaW50IHNob3dfYWxsX2Vycm9yczsKIH07CiAKLWludCBnZXRfdHJlZV9lbnRyeShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IG9iamVjdF9pZCAqLCB1bnNpZ25lZCBzaG9ydCAqKTsKK2ludCBnZXRfdHJlZV9lbnRyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IG9iamVjdF9pZCAqLCB1bnNpZ25lZCBzaG9ydCAqKTsKIGNoYXIgKm1ha2VfdHJhdmVyc2VfcGF0aChjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm4pOwogdm9pZCBzZXR1cF90cmF2ZXJzZV9pbmZvKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpiYXNlKTsKIApkaWZmIC0tZ2l0IGEvdHJlZS5jIGIvdHJlZS5jCmluZGV4IGY0MTZhZmMuLjQ3MjA5NDUgMTAwNjQ0Ci0tLSBhL3RyZWUuYworKysgYi90cmVlLmMKQEAgLTE5NywxMCArMTk3LDkgQEAKIAogc3RydWN0IHRyZWUgKmxvb2t1cF90cmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCiB7Ci0Jc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChyLCBvaWQtPmhhc2gpOworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3Qociwgb2lkKTsKIAlpZiAoIW9iaikKLQkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qociwgb2lkLT5oYXNoLAotCQkJCSAgICAgYWxsb2NfdHJlZV9ub2RlKHIpKTsKKwkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qociwgb2lkLCBhbGxvY190cmVlX25vZGUocikpOwogCXJldHVybiBvYmplY3RfYXNfdHlwZShyLCBvYmosIE9CSl9UUkVFLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmMgYi91bnBhY2stdHJlZXMuYwppbmRleCA1MDE4OTkwLi42MjI3NmQ0IDEwMDY0NAotLS0gYS91bnBhY2stdHJlZXMuYworKysgYi91bnBhY2stdHJlZXMuYwpAQCAtMzE1LDcgKzMxNSw3IEBACiAJCQl0b3RhbCsrOwogCX0KIAotCXJldHVybiBzdGFydF9kZWxheWVkX3Byb2dyZXNzKF8oIkNoZWNraW5nIG91dCBmaWxlcyIpLCB0b3RhbCk7CisJcmV0dXJuIHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoXygiVXBkYXRpbmcgZmlsZXMiKSwgdG90YWwpOwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF9jb2xsaWRlZF9jaGVja291dF9kZXRlY3Rpb24oc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwKQEAgLTg0MCw3ICs4NDAsNyBAQAogCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkID0gTlVMTDsKIAkJCWlmIChkaXJtYXNrICYgMSkKIAkJCQlvaWQgPSAmbmFtZXNbaV0ub2lkOwotCQkJYnVmW25yX2J1ZisrXSA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHQgKyBpLCBvaWQpOworCQkJYnVmW25yX2J1ZisrXSA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHRoZV9yZXBvc2l0b3J5LCB0ICsgaSwgb2lkKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvdXBsb2FkLXBhY2suYyBiL3VwbG9hZC1wYWNrLmMKaW5kZXggNGQyMTI5ZS4uMjIyY2QzYSAxMDA2NDQKLS0tIGEvdXBsb2FkLXBhY2suYworKysgYi91cGxvYWQtcGFjay5jCkBAIC01MjgsMTMgKzUyOCwxMyBAQAogCQlyZXR1cm4gLTE7CiAKIAl3aGlsZSAoKGkgPSByZWFkX2luX2Z1bGwoY21kLm91dCwgbmFtZWJ1ZiwgaGV4c3ogKyAxKSkgPT0gaGV4c3ogKyAxKSB7Ci0JCXN0cnVjdCBvYmplY3RfaWQgc2hhMTsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJCWNvbnN0IGNoYXIgKnA7CiAKLQkJaWYgKHBhcnNlX29pZF9oZXgobmFtZWJ1ZiwgJnNoYTEsICZwKSB8fCAqcCAhPSAnXG4nKQorCQlpZiAocGFyc2Vfb2lkX2hleChuYW1lYnVmLCAmb2lkLCAmcCkgfHwgKnAgIT0gJ1xuJykKIAkJCWJyZWFrOwogCi0JCW8gPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBzaGExLmhhc2gpOworCQlvID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CiAJCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkgewogCQkJby0+ZmxhZ3MgJj0gflRNUF9NQVJLOwogCQl9CkBAIC03MjIsNyArNzIyLDcgQEAKIHsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdDsKIAotCWNsb3NlX2NvbW1pdF9ncmFwaCh0aGVfcmVwb3NpdG9yeSk7CisJY2xvc2VfY29tbWl0X2dyYXBoKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKIAlyZXN1bHQgPSBnZXRfc2hhbGxvd19jb21taXRzX2J5X3Jldl9saXN0KGFjLCBhdiwgU0hBTExPVywgTk9UX1NIQUxMT1cpOwogCXNlbmRfc2hhbGxvdyh3cml0ZXIsIHJlc3VsdCk7CiAJZnJlZV9jb21taXRfbGlzdChyZXN1bHQpOwpAQCAtOTYwLDcgKzk2MCw3IEBACiBzdGF0aWMgaW50IG1hcmtfb3VyX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBjaGFyICpyZWZuYW1lX2Z1bGwsCiAJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCiB7Ci0Jc3RydWN0IG9iamVjdCAqbyA9IGxvb2t1cF91bmtub3duX29iamVjdChvaWQtPmhhc2gpOworCXN0cnVjdCBvYmplY3QgKm8gPSBsb29rdXBfdW5rbm93bl9vYmplY3Qob2lkKTsKIAogCWlmIChyZWZfaXNfaGlkZGVuKHJlZm5hbWUsIHJlZm5hbWVfZnVsbCkpIHsKIAkJby0+ZmxhZ3MgfD0gSElEREVOX1JFRjsKZGlmZiAtLWdpdCBhL3VzZXJkaWZmLmMgYi91c2VyZGlmZi5jCmluZGV4IDNhNzhmYmYuLmU3NGE2ZDQgMTAwNjQ0Ci0tLSBhL3VzZXJkaWZmLmMKKysrIGIvdXNlcmRpZmYuYwpAQCAtNTgsNyArNTgsMTIgQEAKIAkgInxbLSsqLzw+JSZefD0hXT0iCiAJICJ8LS18XFwrXFwrfDw8PT98Pj4+Pz0/fCYmfFxcfFxcfCIpLAogUEFUVEVSTlMoIm1hdGxhYiIsCi0JICJeW1s6c3BhY2U6XV0qKChjbGFzc2RlZnxmdW5jdGlvbilbWzpzcGFjZTpdXS4qKSR8XiUlW1s6c3BhY2U6XV0uKiQiLAorCSAvKgorCSAgKiBPY3RhdmUgcGF0dGVybiBpcyBtb3N0bHkgdGhlIHNhbWUgYXMgbWF0bGFiLCBleGNlcHQgdGhhdCAnJSUlJyBhbmQKKwkgICogJyMjJyBjYW4gYWxzbyBiZSB1c2VkIHRvIGJlZ2luIGNvZGUgc2VjdGlvbnMsIGluIGFkZGl0aW9uIHRvICclJScKKwkgICogdGhhdCBpcyB1bmRlcnN0b29kIGJ5IGJvdGguCisJICAqLworCSAiXltbOnNwYWNlOl1dKigoY2xhc3NkZWZ8ZnVuY3Rpb24pW1s6c3BhY2U6XV0uKikkfF4oJSUlP3wjIylbWzpzcGFjZTpdXS4qJCIsCiAJICJbYS16QS1aX11bYS16QS1aMC05X10qfFstKzAtOS5lXSt8Wz1+PD5dPXxcXC5bKi9cXF4nXXxcXHxcXHx8JiYiKSwKIFBBVFRFUk5TKCJvYmpjIiwKIAkgLyogTmVnYXRlIEMgc3RhdGVtZW50cyB0aGF0IGNhbiBsb29rIGxpa2UgZnVuY3Rpb25zICovCkBAIC0xMzAsNiArMTM1LDEyIEBACiAJICIoQHxAQHxcXCQpP1thLXpBLVpfXVthLXpBLVowLTlfXSoiCiAJICJ8Wy0rMC05LmVdK3wwW3hYYkJdP1swLTlhLWZBLUZdK3xcXD8oXFxcXEMtKT8oXFxcXE0tKT8uIgogCSAifC8vPT98Wy0rKi88PiUmXnw9IV09fDw8PT98Pj49P3w9PT18XFwuezEsM318Ojp8WyE9XX4iKSwKK1BBVFRFUk5TKCJydXN0IiwKKwkgIl5bXHQgXSooKHB1YihcXChbXlxcKV0rXFwpKT9bXHQgXSspPygoYXN5bmN8Y29uc3R8dW5zYWZlfGV4dGVybihbXHQgXStcIlteXCJdK1wiKSlbXHQgXSspPyhzdHJ1Y3R8ZW51bXx1bmlvbnxtb2R8dHJhaXR8Zm58aW1wbClbPCBcdF0rW147XSopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFswLTldWzAtOV9hLWZBLUZpb3N1eHpdKihcXC4oWzAtOV0qW2VFXVsrLV0/KT9bMC05X2ZGXSopPyIKKwkgInxbLSsqXFwvPD4lJl58PSE6XT18PDw9P3w+Pj0/fCYmfFxcfFxcfHwtPnw9PnxcXC57Mn09fFxcLnszfXw6OiIpLAogUEFUVEVSTlMoImJpYnRleCIsICIoQFthLXpBLVpdezEsfVsgXHRdKlxce3swLDF9WyBcdF0qW14gXHRcIkAnLFxcI317fiVdKikuKiQiLAogCSAiWz17fVwiXXxbXj17fVwiIFx0XSsiKSwKIFBBVFRFUk5TKCJ0ZXgiLCAiXihcXFxcKChzdWIpKnNlY3Rpb258Y2hhcHRlcnxwYXJ0KVxcKnswLDF9XFx7LiopJCIsCmRpZmYgLS1naXQgYS93YWxrZXIuYyBiL3dhbGtlci5jCmluZGV4IGQ3NGFlNTkuLjA2Y2QyYmQgMTAwNjQ0Ci0tLSBhL3dhbGtlci5jCisrKyBiL3dhbGtlci5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAkJCWVycm9yKCJDb3VsZCBub3QgaW50ZXJwcmV0IHJlc3BvbnNlIGZyb20gc2VydmVyICclcycgYXMgc29tZXRoaW5nIHRvIHB1bGwiLCB0YXJnZXRbaV0pOwogCQkJZ290byBkb25lOwogCQl9Ci0JCWlmIChwcm9jZXNzKHdhbGtlciwgbG9va3VwX3Vua25vd25fb2JqZWN0KG9pZHNbaV0uaGFzaCkpKQorCQlpZiAocHJvY2Vzcyh3YWxrZXIsIGxvb2t1cF91bmtub3duX29iamVjdCgmb2lkc1tpXSkpKQogCQkJZ290byBkb25lOwogCX0KIApkaWZmIC0tZ2l0IGEvd3JhcHBlci5jIGIvd3JhcHBlci5jCmluZGV4IGVhM2NmNjQuLjFlNDVhYjcgMTAwNjQ0Ci0tLSBhL3dyYXBwZXIuYworKysgYi93cmFwcGVyLmMKQEAgLTUwMiw3ICs1MDIsNyBAQAogCSAqIFRyeSBUTVBfTUFYIGRpZmZlcmVudCBmaWxlbmFtZXMuCiAJICovCiAJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JdmFsdWUgPSAoKHNpemVfdCkodHYudHZfdXNlYyA8PCAxNikpIF4gdHYudHZfc2VjIF4gZ2V0cGlkKCk7CisJdmFsdWUgPSAoKHVpbnQ2NF90KXR2LnR2X3VzZWMgPDwgMTYpIF4gdHYudHZfc2VjIF4gZ2V0cGlkKCk7CiAJZmlsZW5hbWVfdGVtcGxhdGUgPSAmcGF0dGVybltsZW4gLSA2IC0gc3VmZml4X2xlbl07CiAJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgVE1QX01BWDsgKytjb3VudCkgewogCQl1aW50NjRfdCB2ID0gdmFsdWU7CmRpZmYgLS1naXQgYS93dC1zdGF0dXMuYyBiL3d0LXN0YXR1cy5jCmluZGV4IGQyYTFiZWMuLjlmNmM2NWEgMTAwNjQ0Ci0tLSBhL3d0LXN0YXR1cy5jCisrKyBiL3d0LXN0YXR1cy5jCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSAibG9ja2ZpbGUuaCIKICNpbmNsdWRlICJzZXF1ZW5jZXIuaCIKIAorI2RlZmluZSBBQl9ERUxBWV9XQVJOSU5HX0lOX01TICgyICogMTAwMCkKKwogc3RhdGljIGNvbnN0IGNoYXIgY3V0X2xpbmVbXSA9CiAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKIApAQCAtMTc5LDkgKzE4MSwxNSBAQAogCQlyZXR1cm47CiAJaWYgKHMtPndoZW5jZSAhPSBGUk9NX0NPTU1JVCkKIAkJOwotCWVsc2UgaWYgKCFzLT5pc19pbml0aWFsKQotCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpLCBzLT5yZWZlcmVuY2UpOwotCWVsc2UKKwllbHNlIGlmICghcy0+aXNfaW5pdGlhbCkgeworCQlpZiAoIXN0cmNtcChzLT5yZWZlcmVuY2UsICJIRUFEIikpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsCisJCQkJCSBfKCIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpKTsKKwkJZWxzZQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLAorCQkJCQkgXygiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiKSwKKwkJCQkJIHMtPnJlZmVyZW5jZSk7CisJfSBlbHNlCiAJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIikpOwogCiAJaWYgKCFib3RoX2RlbGV0ZWQpIHsKQEAgLTE5NCw3ICsyMDIsNiBAQAogCX0gZWxzZSB7CiAJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIikpOwogCX0KLQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsICIlcyIsICIiKTsKIH0KIAogc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9jYWNoZWRfaGVhZGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMpCkBAIC0yMDYsMTEgKzIxMywxNiBAQAogCQlyZXR1cm47CiAJaWYgKHMtPndoZW5jZSAhPSBGUk9NX0NPTU1JVCkKIAkJOyAvKiBORUVEU1dPUks6IHVzZSAiZ2l0IHJlc2V0IC0tdW5yZXNvbHZlIj8/PyAqLwotCWVsc2UgaWYgKCFzLT5pc19pbml0aWFsKQotCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpLCBzLT5yZWZlcmVuY2UpOwotCWVsc2UKKwllbHNlIGlmICghcy0+aXNfaW5pdGlhbCkgeworCQlpZiAoIXN0cmNtcChzLT5yZWZlcmVuY2UsICJIRUFEIikpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMKKwkJCQkJICwgXygiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiKSk7CisJCWVsc2UKKwkJCXN0YXR1c19wcmludGZfbG4ocywgYywKKwkJCQkJIF8oIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIiksCisJCQkJCSBzLT5yZWZlcmVuY2UpOworCX0gZWxzZQogCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpKTsKLQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsICIlcyIsICIiKTsKIH0KIAogc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9kaXJ0eV9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcywKQEAgLTIyNiwxMCArMjM4LDkgQEAKIAkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIpKTsKIAllbHNlCiAJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiKSk7Ci0Jc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIpKTsKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCByZXN0b3JlIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiKSk7CiAJaWYgKGhhc19kaXJ0eV9zdWJtb2R1bGVzKQogCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIpKTsKLQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsICIlcyIsICIiKTsKIH0KIAogc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9vdGhlcl9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcywKQEAgLTI0MSw3ICsyNTIsNiBAQAogCWlmICghcy0+aGludHMpCiAJCXJldHVybjsKIAlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIiksIGhvdyk7Ci0Jc3RhdHVzX3ByaW50Zl9sbihzLCBjLCAiJXMiLCAiIik7CiB9CiAKIHN0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfdHJhaWxlcihzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQpAQCAtMTA4NSwxNCArMTA5NSwyOSBAQAogCXN0cnVjdCBicmFuY2ggKmJyYW5jaDsKIAljaGFyIGNvbW1lbnRfbGluZV9zdHJpbmdbM107CiAJaW50IGk7CisJdWludDY0X3QgdF9iZWdpbiA9IDA7CiAKIAlhc3NlcnQocy0+YnJhbmNoICYmICFzLT5pc19pbml0aWFsKTsKIAlpZiAoIXNraXBfcHJlZml4KHMtPmJyYW5jaCwgInJlZnMvaGVhZHMvIiwgJmJyYW5jaF9uYW1lKSkKIAkJcmV0dXJuOwogCWJyYW5jaCA9IGJyYW5jaF9nZXQoYnJhbmNoX25hbWUpOworCisJdF9iZWdpbiA9IGdldG5hbm90aW1lKCk7CisKIAlpZiAoIWZvcm1hdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJnNiLCBzLT5haGVhZF9iZWhpbmRfZmxhZ3MpKQogCQlyZXR1cm47CiAKKwlpZiAoYWR2aWNlX3N0YXR1c19haGVhZF9iZWhpbmRfd2FybmluZyAmJgorCSAgICBzLT5haGVhZF9iZWhpbmRfZmxhZ3MgPT0gQUhFQURfQkVISU5EX0ZVTEwpIHsKKwkJdWludDY0X3QgdF9kZWx0YV9pbl9tcyA9IChnZXRuYW5vdGltZSgpIC0gdF9iZWdpbikgLyAxMDAwMDAwOworCQlpZiAodF9kZWx0YV9pbl9tcyA+IEFCX0RFTEFZX1dBUk5JTkdfSU5fTVMpIHsKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgXygiXG4iCisJCQkJCSAgICJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjb21wdXRlIHRoZSBicmFuY2ggYWhlYWQvYmVoaW5kIHZhbHVlcy5cbiIKKwkJCQkJICAgIllvdSBjYW4gdXNlICctLW5vLWFoZWFkLWJlaGluZCcgdG8gYXZvaWQgdGhpcy5cbiIpLAorCQkJCSAgICB0X2RlbHRhX2luX21zIC8gMTAwMC4wKTsKKwkJfQorCX0KKwogCWkgPSAwOwogCWlmIChzLT5kaXNwbGF5X2NvbW1lbnRfcHJlZml4KSB7CiAJCWNvbW1lbnRfbGluZV9zdHJpbmdbaSsrXSA9IGNvbW1lbnRfbGluZV9jaGFyOwpAQCAtMTY3Niw5ICsxNzAxLDkgQEAKIAkJCX0gZWxzZSBpZiAocy0+c3RhdGUuZGV0YWNoZWRfZnJvbSkgewogCQkJCWJyYW5jaF9uYW1lID0gcy0+c3RhdGUuZGV0YWNoZWRfZnJvbTsKIAkJCQlpZiAocy0+c3RhdGUuZGV0YWNoZWRfYXQpCi0JCQkJCW9uX3doYXQgPSBfKCJIRUFEIGRldGFjaGVkIGF0ICIpOworCQkJCQlvbl93aGF0ID0gSEVBRF9ERVRBQ0hFRF9BVDsKIAkJCQllbHNlCi0JCQkJCW9uX3doYXQgPSBfKCJIRUFEIGRldGFjaGVkIGZyb20gIik7CisJCQkJCW9uX3doYXQgPSBIRUFEX0RFVEFDSEVEX0ZST007CiAJCQl9IGVsc2UgewogCQkJCWJyYW5jaF9uYW1lID0gIiI7CiAJCQkJb25fd2hhdCA9IF8oIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iKTsKQEAgLTIwNzYsOSArMjEwMSw3IEBACiAvKgogICogRml4LXVwIGNoYW5nZWQgZW50cmllcyBiZWZvcmUgd2UgcHJpbnQgdGhlbS4KICAqLwotc3RhdGljIHZvaWQgd3RfcG9yY2VsYWluX3YyX2ZpeF91cF9jaGFuZ2VkKAotCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCwKLQlzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQorc3RhdGljIHZvaWQgd3RfcG9yY2VsYWluX3YyX2ZpeF91cF9jaGFuZ2VkKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCkKIHsKIAlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkID0gaXQtPnV0aWw7CiAKQEAgLTIxMzgsNyArMjE2MSw3IEBACiAJY2hhciBzdWJtb2R1bGVfdG9rZW5bNV07CiAJY2hhciBzZXBfY2hhciwgZW9sX2NoYXI7CiAKLQl3dF9wb3JjZWxhaW5fdjJfZml4X3VwX2NoYW5nZWQoaXQsIHMpOworCXd0X3BvcmNlbGFpbl92Ml9maXhfdXBfY2hhbmdlZChpdCk7CiAJd3RfcG9yY2VsYWluX3YyX3N1Ym1vZHVsZV9zdGF0ZShkLCBzdWJtb2R1bGVfdG9rZW4pOwogCiAJa2V5WzBdID0gZC0+aW5kZXhfc3RhdHVzID8gZC0+aW5kZXhfc3RhdHVzIDogJy4nOwpkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmggYi93dC1zdGF0dXMuaAppbmRleCA2NGYxZGRjLi43N2RhZDViIDEwMDY0NAotLS0gYS93dC1zdGF0dXMuaAorKysgYi93dC1zdGF0dXMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgU1RBVFVTX0gKICNkZWZpbmUgU1RBVFVTX0gKIAotI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKICNpbmNsdWRlICJjb2xvci5oIgogI2luY2x1ZGUgInBhdGhzcGVjLmgiCkBAIC02NSw2ICs2NCw5IEBACiAJU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRAogfTsKIAorI2RlZmluZSBIRUFEX0RFVEFDSEVEX0FUIF8oIkhFQUQgZGV0YWNoZWQgYXQgIikKKyNkZWZpbmUgSEVBRF9ERVRBQ0hFRF9GUk9NIF8oIkhFQUQgZGV0YWNoZWQgZnJvbSAiKQorCiBzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlIHsKIAlpbnQgbWVyZ2VfaW5fcHJvZ3Jlc3M7CiAJaW50IGFtX2luX3Byb2dyZXNzOwpkaWZmIC0tZ2l0IGEveGRpZmYveGVtaXQuYyBiL3hkaWZmL3hlbWl0LmMKaW5kZXggNzc3OGRjMi4uMzA3MTNhZSAxMDA2NDQKLS0tIGEveGRpZmYveGVtaXQuYworKysgYi94ZGlmZi94ZW1pdC5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAkJCWlmIChmczEgPCAwKQogCQkJCWZzMSA9IDA7CiAJCQlpZiAoZnMxIDwgczEpIHsKLQkJCQlzMiAtPSBzMSAtIGZzMTsKKwkJCQlzMiA9IFhETF9NQVgoczIgLSAoczEgLSBmczEpLCAwKTsKIAkJCQlzMSA9IGZzMTsKIAkJCX0KIAkJfQpAQCAtMjMyLDcgKzIzMiw3IEBACiAJCQlpZiAoZmUxIDwgMCkKIAkJCQlmZTEgPSB4ZS0+eGRmMS5ucmVjOwogCQkJaWYgKGZlMSA+IGUxKSB7Ci0JCQkJZTIgKz0gZmUxIC0gZTE7CisJCQkJZTIgPSBYRExfTUlOKGUyICsgKGZlMSAtIGUxKSwgeGUtPnhkZjIubnJlYyk7CiAJCQkJZTEgPSBmZTE7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL3hkaWZmL3hoaXN0b2dyYW0uYyBiL3hkaWZmL3hoaXN0b2dyYW0uYwppbmRleCBlYzg1ZjU5Li5jN2IzNWE5IDEwMDY0NAotLS0gYS94ZGlmZi94aGlzdG9ncmFtLmMKKysrIGIveGRpZmYveGhpc3RvZ3JhbS5jCkBAIC00Miw4ICs0Miw2IEBACiAgKi8KIAogI2luY2x1ZGUgInhpbmNsdWRlLmgiCi0jaW5jbHVkZSAieHR5cGVzLmgiCi0jaW5jbHVkZSAieGRpZmYuaCIKIAogI2RlZmluZSBNQVhfUFRSCVVJTlRfTUFYCiAjZGVmaW5lIE1BWF9DTlQJVUlOVF9NQVgKZGlmZiAtLWdpdCBhL3hkaWZmL3hwYXRpZW5jZS5jIGIveGRpZmYveHBhdGllbmNlLmMKaW5kZXggZjM1NzNkOS4uM2M1NjAxYiAxMDA2NDQKLS0tIGEveGRpZmYveHBhdGllbmNlLmMKKysrIGIveGRpZmYveHBhdGllbmNlLmMKQEAgLTIwLDggKzIwLDYgQEAKICAqCiAgKi8KICNpbmNsdWRlICJ4aW5jbHVkZS5oIgotI2luY2x1ZGUgInh0eXBlcy5oIgotI2luY2x1ZGUgInhkaWZmLmgiCiAKIC8qCiAgKiBUaGUgYmFzaWMgaWRlYSBvZiBwYXRpZW5jZSBkaWZmIGlzIHRvIGZpbmQgbGluZXMgdGhhdCBhcmUgdW5pcXVlIGluCmRpZmYgLS1naXQgYS94ZGlmZi94dXRpbHMuYyBiL3hkaWZmL3h1dGlscy5jCmluZGV4IDk2M2UxYzUuLmNmYTZlMjIgMTAwNjQ0Ci0tLSBhL3hkaWZmL3h1dGlscy5jCisrKyBiL3hkaWZmL3h1dGlscy5jCkBAIC0yMCwxMyArMjAsOSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSAieGluY2x1ZGUuaCIKIAogCi0KLQogbG9uZyB4ZGxfYm9nb3NxcnQobG9uZyBuKSB7CiAJbG9uZyBpOwogCg==