ZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKaW5kZXggNWU5ODgwNi4uMzIwZTMzYyAxMDA2NDQKLS0tIGEvLmdpdGF0dHJpYnV0ZXMKKysrIGIvLmdpdGF0dHJpYnV0ZXMKQEAgLTEsMyArMSwzIEBACiAqIHdoaXRlc3BhY2U9IWluZGVudCx0cmFpbCxzcGFjZQotKi5bY2hdIHdoaXRlc3BhY2U9aW5kZW50LHRyYWlsLHNwYWNlCisqLltjaF0gd2hpdGVzcGFjZT1pbmRlbnQsdHJhaWwsc3BhY2UgZGlmZj1jcHAKICouc2ggd2hpdGVzcGFjZT1pbmRlbnQsdHJhaWwsc3BhY2UKZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggYTkxNjJjMC4uOTQ0MWE1NCAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTMzLDYgKzMzLDcgQEAKIENocmlzIFNob2VtYWtlciA8Yy5zaG9lbWFrZXJAY294Lm5ldD4KIENocmlzIFdyaWdodCA8Y2hyaXN3QHNvdXMtc29sLm9yZz4gPGNocmlzd0Bvc2RsLm9yZz4KIENvcmQgU2VlbGUgPGNvd29zZUBnbWFpbC5jb20+IDxjb3dvc2VAZ29vZ2xlbWFpbC5jb20+CitDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz4gPGNocmlzdGlhbi5jb3VkZXJAZ21haWwuY29tPgogQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPiA8Y2hzQGNraXN0ZS5nb2V0aGVhbGxlZT4KIENzYWJhIEhlbmsgPGNzYWJhQGdsdXN0ZXIuY29tPiA8Y3NhYmFAbG93bGlmZS5odT4KIERhbiBKb2huc29uIDxjb21wdXRlcmRydWlkQGdtYWlsLmNvbT4KQEAgLTQ2LDYgKzQ3LDcgQEAKIERhdmlkIEvDpWdlZGFsIDxkYXZpZGtAbHlzYXRvci5saXUuc2U+CiBEYXZpZCBSZWlzcyA8ZHJlaXNzQGZhY2Vib29rLmNvbT4gPGRyZWlzc0BkcmVpc3Mtdm13YXJlLihub25lKT4KIERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK0RhdmlkIFR1cm5lciA8bm92YWxpc0Bub3ZhbGlzLm9yZz4gPGR0dXJuZXJAdHdvcGVuc291cmNlLmNvbT4KIERlc2tpbiBNaWxsZXIgPGRlc2tpbm1AdW1pY2guZWR1PgogRGlyayBTw7xzc2Vyb3R0IDxuZXdzbGV0dGVyQGRpcmsubXkxLmNjPgogRXJpYyBCbGFrZSA8ZWJsYWtlQHJlZGhhdC5jb20+IDxlYmI5QGJ5dS5uZXQ+CmRpZmYgLS1naXQgYS8udHJhdmlzLnltbCBiLy50cmF2aXMueW1sCmluZGV4IGMyMGVjNTQuLjQ3N2MzZDIgMTAwNjQ0Ci0tLSBhLy50cmF2aXMueW1sCisrKyBiLy50cmF2aXMueW1sCkBAIC0xOSw2ICsxOSw3IEBACiAgICAgcGFja2FnZXM6CiAgICAgLSBsYW5ndWFnZS1wYWNrLWlzCiAgICAgLSBnaXQtc3ZuCisgICAgLSBhcGFjaGUyCiAKIGVudjoKICAgZ2xvYmFsOgpAQCAtMzEsNiArMzIsNyBAQAogICAgIC0gREVGQVVMVF9URVNUX1RBUkdFVD1wcm92ZQogICAgIC0gR0lUX1BST1ZFX09QVFM9Ii0tdGltZXIgLS1qb2JzIDMgLS1zdGF0ZT1mYWlsZWQsc2xvdyxzYXZlIgogICAgIC0gR0lUX1RFU1RfT1BUUz0iLS12ZXJib3NlIC0tdGVlIgorICAgIC0gR0lUX1RFU1RfSFRUUEQ9dHJ1ZQogICAgIC0gR0lUX1RFU1RfQ0xPTkVfMkdCPVllc1BsZWFzZQogICAgICMgdDk4MTAgb2NjYXNpb25hbGx5IGZhaWxzIG9uIFRyYXZpcyBDSSBPUyBYCiAgICAgIyB0OTgxNiBvY2Nhc2lvbmFsbHkgZmFpbHMgd2l0aCAiVEFQIG91dCBvZiBzZXF1ZW5jZSBlcnJvcnMiIG9uIFRyYXZpcyBDSSBPUyBYCkBAIC04Miw2ICs4NCw4IEBACiAgICAgICBicmV3IHRhcCBob21lYnJldy9iaW5hcnkgLS1xdWlldAogICAgICAgYnJld19mb3JjZV9zZXRfbGF0ZXN0X2JpbmFyeV9oYXNoIHBlcmZvcmNlCiAgICAgICBicmV3X2ZvcmNlX3NldF9sYXRlc3RfYmluYXJ5X2hhc2ggcGVyZm9yY2Utc2VydmVyCisgICAgICAjIFVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IHRvIHJ1biBwZXJmIHRlc3RzOgorICAgICAgIyBicmV3IGluc3RhbGwgZ251LXRpbWUKICAgICAgIGJyZXcgaW5zdGFsbCBnaXQtbGZzIHBlcmZvcmNlLXNlcnZlciBwZXJmb3JjZSBnZXR0ZXh0CiAgICAgICBicmV3IGxpbmsgLS1mb3JjZSBnZXR0ZXh0CiAgICAgICA7OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzCmluZGV4IDBkZGQzNjguLjRjZDk1ZGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcworKysgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMKQEAgLTUyNiwxMiArNTI2LDIwIEBACiAgbW9kaWZ5aW5nIHBhcmFncmFwaHMgb3Igb3B0aW9uL2NvbW1hbmQgZXhwbGFuYXRpb25zIHRoYXQgY29udGFpbiBvcHRpb25zCiAgb3IgY29tbWFuZHM6CiAKLSBMaXRlcmFsIGV4YW1wbGVzIChlLmcuIHVzZSBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucywgY29tbWFuZCBuYW1lcywgYW5kCi0gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMpIGFyZSB0eXBlc2V0IGluIG1vbm9zcGFjZSwgYW5kIGlmIHlvdSBjYW4gdXNlCi0gYGJhY2t0aWNrcyBhcm91bmQgd29yZCBwaHJhc2VzYCwgZG8gc28uCisgTGl0ZXJhbCBleGFtcGxlcyAoZS5nLiB1c2Ugb2YgY29tbWFuZC1saW5lIG9wdGlvbnMsIGNvbW1hbmQgbmFtZXMsCisgYnJhbmNoIG5hbWVzLCBjb25maWd1cmF0aW9uIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMpIG11c3QgYmUKKyB0eXBlc2V0IGluIG1vbm9zcGFjZSAoaS5lLiB3cmFwcGVkIHdpdGggYmFja3RpY2tzKToKICAgIGAtLXByZXR0eT1vbmVsaW5lYAogICAgYGdpdCByZXYtbGlzdGAKICAgIGByZW1vdGUucHVzaERlZmF1bHRgCisgICBgR0lUX0RJUmAKKyAgIGBIRUFEYAorCisgQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBiZSBwcmVmaXhlZCB3aXRoICIkIiBvbmx5IHdoZW4gcmVmZXJyaW5nIHRvIGl0cworIHZhbHVlIGFuZCBub3Qgd2hlbiByZWZlcnJpbmcgdG8gdGhlIHZhcmlhYmxlIGl0c2VsZiwgaW4gdGhpcyBjYXNlIHRoZXJlIGlzCisgbm90aGluZyB0byBhZGQgZXhjZXB0IHRoZSBiYWNrdGlja3M6CisgICBgR0lUX0RJUmAgaXMgc3BlY2lmaWVkCisgICBgJEdJVF9ESVIvaG9va3MvcHJlLXJlY2VpdmVgCiAKICBXb3JkIHBocmFzZXMgZW5jbG9zZWQgaW4gYGJhY2t0aWNrIGNoYXJhY3RlcnNgIGFyZSByZW5kZXJlZCBsaXRlcmFsbHkKICBhbmQgd2lsbCBub3QgYmUgZnVydGhlciBleHBhbmRlZC4gVGhlIHVzZSBvZiBgYmFja3RpY2tzYCB0byBhY2hpZXZlIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKaW5kZXggMzVjMTM4NS4uYjQzZDY2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCkBAIC03Niw2ICs3Niw3IEBACiBURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3JhY3ktZ2l0CiBURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3NlbmQtcGFjay1waXBlbGluZQogVEVDSF9ET0NTICs9IHRlY2huaWNhbC9zaGFsbG93CitURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3NpZ25hdHVyZS1mb3JtYXQKIFRFQ0hfRE9DUyArPSB0ZWNobmljYWwvdHJpdmlhbC1tZXJnZQogU1BfQVJUSUNMRVMgKz0gJChURUNIX0RPQ1MpCiBTUF9BUlRJQ0xFUyArPSB0ZWNobmljYWwvYXBpLWluZGV4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhYzI5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4wLnR4dApAQCAtMCwwICsxLDU1NiBAQAorR2l0IDIuMTAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VwZGF0ZXMgc2luY2UgdjIuOQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UgLS12ZXJpZnktc2lnbmF0dXJlIiBsZWFybmVkIHRvIHdhcm4gdGhlIHVzZXIKKyAgIHRoYXQgIi0tdmVyaWZ5LXNpZ25hdHVyZSIgaXMgYSBuby1vcCB3aGVuIHJlYmFzaW5nLgorCisgKiBBbiB1cHN0cmVhbSBwcm9qZWN0IGNhbiBtYWtlIGEgcmVjb21tZW5kYXRpb24gdG8gc2hhbGxvd2x5IGNsb25lCisgICBzb21lIHN1Ym1vZHVsZXMgaW4gdGhlIC5naXRtb2R1bGVzIGZpbGUgaXQgc2hpcHMuCisKKyAqICJnaXQgd29ya3RyZWUgYWRkIiBsZWFybmVkIHRoYXQgJy0nIGNhbiBiZSB1c2VkIGFzIGEgc2hvcnQtaGFuZCBmb3IKKyAgICJAey0xfSIsIHRoZSBwcmV2aW91cyBicmFuY2guCisKKyAqIFVwZGF0ZSB0aGUgZnVuY25hbWUgZGVmaW5pdGlvbiB0byBzdXBwb3J0IGNzcyBmaWxlcy4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCB0byBjb21wbGV0ZSAiZ2l0CisgICBzdGF0dXMiIG9wdGlvbnMuCisKKyAqIE1lc3NhZ2VzIHRoYXQgYXJlIGdlbmVyYXRlZCBieSBhdXRvIGdjIGR1cmluZyAiZ2l0IHB1c2giIG9uIHRoZQorICAgcmVjZWl2aW5nIGVuZCBhcmUgbm93IHBhc3NlZCBiYWNrIHRvIHRoZSBzZW5kaW5nIGVuZCBpbiBzdWNoIGEgd2F5CisgICB0aGF0IHRoZXkgYXJlIHNob3duIHdpdGggInJlbW90ZTogIiBwcmVmaXggdG8gYXZvaWQgY29uZnVzaW5nIHRoZQorICAgdXNlcnMuCisKKyAqICJnaXQgYWRkIC1pLy1wIiBsZWFybmVkIHRvIGhvbm9yIGRpZmYuY29tcGFjdGlvbkhldXJpc3RpYworICAgZXhwZXJpbWVudGFsIGtub2IsIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHdvcmsgb24gdGhlIHNhbWUgaHVuayBzcGxpdAorICAgYXMgImdpdCBkaWZmIiBvdXRwdXQuCisKKyAqICJ1cGxvYWQtcGFjayIgYWxsb3dzIGEgY3VzdG9tICJnaXQgcGFjay1vYmplY3RzIiByZXBsYWNlbWVudCB3aGVuCisgICByZXNwb25kaW5nIHRvICJmZXRjaC9jbG9uZSIgdmlhIHRoZSB1cGxvYWRwYWNrLnBhY2tPYmplY3RzSG9vay4KKyAgIChtZXJnZSBiNzM4Mzk2IGprL3VwbG9hZC1wYWNrLWhvb2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUZWFjaCBmb3JtYXQtcGF0Y2ggYW5kIG1haWxzcGxpdCAoaGVuY2UgImFtIikgaG93IGEgbGluZSB0aGF0CisgICBoYXBwZW5zIHRvIGJlZ2luIHdpdGggIkZyb20gIiBpbiB0aGUgZS1tYWlsIG1lc3NhZ2UgaXMgcXVvdGVkIHdpdGgKKyAgICI+Iiwgc28gdGhhdCB0aGVzZSBsaW5lcyBjYW4gYmUgcmVzdG9yZWQgdG8gdGhlaXIgb3JpZ2luYWwgc2hhcGUuCisgICAobWVyZ2UgZDk5MjVkMSBldy9tYm94cmQtZm9ybWF0LWFtIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXBhY2siIGxlYXJuZWQgdGhlICItLWtlZXAtdW5yZWFjaGFibGUiIG9wdGlvbiwgd2hpY2ggc2VuZHMKKyAgIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMgdG8gYSBwYWNrIGluc3RlYWQgb2YgbGVhdmluZyB0aGVtIGxvb3NlLgorICAgVGhpcyBoZWxwcyBoZXVyaXN0aWNzIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgbG9vc2Ugb2JqZWN0cworICAgKGUuZy4gImdjIC0tYXV0byIpLgorICAgKG1lcmdlIGUyNmE4YzQgamsvcmVwYWNrLWtlZXAtdW5yZWFjaGFibGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAibG9nIC0tZ3JhcGggLS1mb3JtYXQ9IiBsZWFybmVkIHRoYXQgIiU+fChOKSIgc3BlY2lmaWVzIHRoZSB3aWR0aAorICAgcmVsYXRpdmUgdG8gdGhlIHRlcm1pbmFsJ3MgbGVmdCBlZGdlLCBub3QgcmVsYXRpdmUgdG8gdGhlIGFyZWEgdG8KKyAgIGRyYXcgdGV4dCB0aGF0IGlzIHRvIHRoZSByaWdodCBvZiB0aGUgYW5jZXN0cnktZ3JhcGggc2VjdGlvbi4gIEl0CisgICBhbHNvIG5vdyBhY2NlcHRzIG5lZ2F0aXZlIE4gdGhhdCBtZWFucyB0aGUgY29sdW1uIGxpbWl0IGlzIHJlbGF0aXZlCisgICB0byB0aGUgcmlnaHQgYm9yZGVyLgorCisgKiBBIGNhcmVsZXNzIGludm9jYXRpb24gb2YgImdpdCBzZW5kLWVtYWlsIGRpcmVjdG9yeS8iIGFmdGVyIGVkaXRpbmcKKyAgIDAwMDEtY2hhbmdlLnBhdGNoIHdpdGggYW4gZWRpdG9yIG9mdGVuIGVuZHMgdXAgc2VuZGluZyBib3RoCisgICAwMDAxLWNoYW5nZS5wYXRjaCBhbmQgaXRzIGJhY2t1cCBmaWxlLCAwMDAxLWNoYW5nZS5wYXRjaH4sIGNhdXNpbmcKKyAgIGVtYmFycmFzc21lbnQgYW5kIGEgbWlub3IgY29uZnVzaW9uLiAgRGV0ZWN0IHN1Y2ggYW4gaW5wdXQgYW5kCisgICBvZmZlciB0byBza2lwIHRoZSBiYWNrdXAgZmlsZXMgd2hlbiBzZW5kaW5nIHRoZSBwYXRjaGVzIG91dC4KKyAgIChtZXJnZSA1MzEyMjBiIGpjL3NlbmQtZW1haWwtc2tpcC1iYWNrdXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIHRoYXQgZHJpdmVzIG1hbnkgImdpdCBjbG9uZSIgY291bGQKKyAgIGV2ZW50dWFsbHkgaGl0IGZsYWt5IHNlcnZlcnMvbmV0d29yayBjb25kaXRpb25zIG9uIG9uZSBvZiB0aGUKKyAgIHN1Ym1vZHVsZXM7IHRoZSBjb21tYW5kIGxlYXJuZWQgdG8gcmV0cnkgdGhlIGF0dGVtcHQuCisKKyAqIFRoZSBvdXRwdXQgY29sb3Jpbmcgc2NoZW1lIGxlYXJuZWQgdHdvIG5ldyBhdHRyaWJ1dGVzLCBpdGFsaWMgYW5kCisgICBzdHJpa2UsIGluIGFkZGl0aW9uIHRvIGV4aXN0aW5nIGJvbGQsIHJldmVyc2UsIGV0Yy4KKworICogImdpdCBsb2ciIGxlYXJucyBsb2cuc2hvd1NpZ25hdHVyZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBhbmQgYQorICAgY29tbWFuZCBsaW5lIG9wdGlvbiAiLS1uby1zaG93LXNpZ25hdHVyZSIgdG8gY291bnRlcm1hbmQgaXQuCisgICAobWVyZ2UgZmNlMDRjMyBtai9sb2ctc2hvdy1zaWduYXR1cmUtY29uZiBsYXRlciB0byBtYWludCkuCisKKyAqIEEgY291cGxlIG9mICJnaXQgc3ZuIiB1cGRhdGVzLgorCisgKiBNb3JlIG1hcmtpbmdzIG9mIG1lc3NhZ2VzIGZvciBpMThuLCB3aXRoIHVwZGF0ZXMgdG8gdmFyaW91cyB0ZXN0cworICAgdG8gcGFzcyBHRVRURVhUX1BPSVNPTiB0ZXN0cy4KKworICogImdpdCBhcmNoaXZlIiBsZWFybmVkIHRvIGhhbmRsZSBmaWxlcyB0aGF0IGFyZSBsYXJnZXIgdGhhbiA4R0IgYW5kCisgICBjb21taXRzIGZhciBpbiB0aGUgZnV0dXJlIHRoYW4gZXhwcmVzc2libGUgYnkgdGhlIHRyYWRpdGlvbmFsIFVTLVRBUgorICAgZm9ybWF0LgorICAgKG1lcmdlIDVjYWVlYjggamsvYmlnLWFuZC1mdXR1cmUtYXJjaGl2ZS10YXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIG5ldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvcmUuc3NoQ29tbWFuZCBoYXMgYmVlbiBhZGRlZCB0bworICAgc3BlY2lmeSB3aGF0IHZhbHVlIGZvciBHSVRfU1NIX0NPTU1BTkQgdG8gdXNlIHBlciByZXBvc2l0b3J5LgorCisgKiAiZ2l0IHdvcmt0cmVlIHBydW5lIiBwcm90ZWN0ZWQgd29ya3RyZWVzIHRoYXQgYXJlIG1hcmtlZCBhcworICAgImxvY2tlZCIgYnkgY3JlYXRpbmcgYSBmaWxlIGluIGEga25vd24gbG9jYXRpb24uICAiZ2l0IHdvcmt0cmVlIgorICAgY29tbWFuZCBsZWFybmVkIGEgZGVkaWNhdGVkIGNvbW1hbmQgcGFpciB0byBjcmVhdGUgYW5kIHJlbW92ZSBzdWNoCisgICBhIGZpbGUsIHNvIHRoYXQgdGhlIHVzZXJzIGRvIG5vdCBoYXZlIHRvIGRvIHRoaXMgd2l0aCBlZGl0b3IuCisKKyAqIEEgaGFuZGZ1bCBvZiAiZ2l0IHN2biIgdXBkYXRlcy4KKworICogImdpdCBwdXNoIiBsZWFybmVkIHRvIGFjY2VwdCBhbmQgcGFzcyBleHRyYSBvcHRpb25zIHRvIHRoZQorICAgcmVjZWl2aW5nIGVuZCBzbyB0aGF0IGhvb2tzIGNhbiByZWFkIGFuZCByZWFjdCB0byB0aGVtLgorCisgKiAiZ2l0IHN0YXR1cyIgbGVhcm5lZCB0byBzdWdnZXN0ICJtZXJnZSAtLWFib3J0IiBkdXJpbmcgYSBjb25mbGljdGVkCisgICBtZXJnZSwganVzdCBsaWtlIGl0IGFscmVhZHkgc3VnZ2VzdHMgInJlYmFzZSAtLWFib3J0IiBkdXJpbmcgYQorICAgY29uZmxpY3RlZCByZWJhc2UuCisKKyAqICJnaXQganVtcCIgc2NyaXB0IChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZCBhIGJpdC4KKyAgIChtZXJnZSBhOTFlNjkyIGprL2dpdC1qdW1wIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdXNoIiBhbmQgImdpdCBjbG9uZSIgbGVhcm5lZCB0byBnaXZlIGJldHRlciBwcm9ncmVzcyBtZXRlcnMKKyAgIHRvIHRoZSBlbmQgdXNlciB3aG8gaXMgd2FpdGluZyBvbiB0aGUgdGVybWluYWwuCisKKyAqIEFuIGVudHJ5ICJnaXQgbG9nIC0tZGVjb3JhdGUiIGZvciB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcworICAgc2hvd24gYXMgIkhFQUQgLT4gbmFtZSIgKHdoZXJlICJuYW1lIiBpcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoKTsKKyAgIHBhaW50IHRoZSBhcnJvdyBpbiB0aGUgc2FtZSBjb2xvciBhcyAiSEVBRCIsIG5vdCBpbiB0aGUgY29sb3IgZm9yCisgICBjb21taXRzLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCBmb3JtYXQuZnJvbSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvCisgICBzcGVjaWZ5IHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBpdHMgIi0tZnJvbSIgb3B0aW9uLgorCisgKiAiZ2l0IGFtIC0zIiBjYWxscyAiZ2l0IG1lcmdlLXJlY3Vyc2l2ZSIgd2hlbiBpdCBuZWVkcyB0byBmYWxsIGJhY2sKKyAgIHRvIGEgdGhyZWUtd2F5IG1lcmdlOyB0aGlzIGNhbGwgaGFzIGJlZW4gdHVybmVkIGludG8gYW4gaW50ZXJuYWwKKyAgIHN1YnJvdXRpbmUgY2FsbCBpbnN0ZWFkIG9mIHNwYXduaW5nIGEgc2VwYXJhdGUgc3VicHJvY2Vzcy4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBsZWFybmVkIHRoZSBzYW1lIHBlcmZvcm1hbmNlIHRyaWNrIHRvIGF2b2lkCisgICBjcmVhdGluZyB0b28gc21hbGwgYSBwYWNrZmlsZSBhcyAiZ2l0IGZldGNoIiBhbmQgImdpdCBwdXNoIiBoYXZlLAorICAgdXNpbmcgKi51bnBhY2tMaW1pdCBjb25maWd1cmF0aW9uLgorCisgKiBXaGVuICJnaXQgZGFlbW9uIiBpcyBydW4gd2l0aG91dCAtLVtpbml0LV10aW1lb3V0IHNwZWNpZmllZCwgYQorICAgY29ubmVjdGlvbiBmcm9tIGEgY2xpZW50IHRoYXQgc2lsZW50bHkgZ29lcyBvZmZsaW5lIGNhbiBoYW5nIGFyb3VuZAorICAgZm9yIGEgbG9uZyB0aW1lLCB3YXN0aW5nIHJlc291cmNlcy4gIFRoZSBzb2NrZXQtbGV2ZWwgS0VFUEFMSVZFIGhhcworICAgYmVlbiBlbmFibGVkIHRvIGFsbG93IHRoZSBPUyB0byBub3RpY2Ugc3VjaCBmYWlsZWQgY29ubmVjdGlvbnMuCisKKyAqICJnaXQgdXBsb2FkLXBhY2siIGNvbW1hbmQgaGFzIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlIHBhcnNlLW9wdGlvbnMKKyAgIEFQSS4KKworICogVGhlICJnaXQgYXBwbHkiIHN0YW5kYWxvbmUgcHJvZ3JhbSBpcyBiZWluZyBsaWJpZmllZDsgdGhpcyBpcyB0aGUKKyAgIGZpcnN0IHN0ZXAgdG8gbW92ZSBtYW55IHN0YXRlIHZhcmlhYmxlcyBpbnRvIGEgc3RydWN0dXJlIHRoYXQgY2FuCisgICBiZSBleHBsaWNpdGx5IChyZSlpbml0aWFsaXplZCB0byBtYWtlIHRoZSBtYWNoaW5lcnkgY2FsbGFibGUgbW9yZQorICAgdGhhbiBvbmNlLgorCisgKiBIVFRQIHRyYW5zcG9ydCBnYWluZWQgYW4gb3B0aW9uIHRvIHByb2R1Y2UgbW9yZSBkZXRhaWxlZCBkZWJ1Z2dpbmcKKyAgIHRyYWNlLgorICAgKG1lcmdlIDczZTU3YWEgZXAvaHR0cC1jdXJsLXRyYWNlIGxhdGVyIHRvIG1haW50KS4KKworICogSW5zdGVhZCBvZiB0YWtpbmcgYWR2YW50YWdlIG9mIGEgc3RydWN0IHN0cmluZ19saXN0IHRoYXQgaXMKKyAgIGFsbG9jYXRlZCB3aXRoIGFsbCBOVUxzIGhhcHBlbnMgdG8gYmUgU1RSSU5HX0xJU1RfSU5JVF9OT0RVUCBraW5kLAorICAgaW5pdGlhbGl6ZSB0aGVtIGV4cGxpY2l0bHkgYXMgc3VjaCwgdG8gZG9jdW1lbnQgdGhlaXIgYmVoYXZpb3VyCisgICBiZXR0ZXIuCisgICAobWVyZ2UgMjcyMWNlMiBqay9zdHJpbmctbGlzdC1zdGF0aWMtaW5pdCBsYXRlciB0byBtYWludCkuCisKKyAqIEhUVFBkIHRlc3RzIGxlYXJuZWQgdG8gc2hvdyB0aGUgc2VydmVyIGVycm9yIGxvZyB0byBoZWxwIGRpYWdub3NpbmcKKyAgIGEgZmFpbGluZyB0ZXN0cy4KKyAgIChtZXJnZSA0NGYyNDNkIG5kL3Rlc3QtbGliLWh0dHBkLXNob3ctZXJyb3ItbG9nLWluLXZlcmJvc2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgb3duZXJzaGlwIHJ1bGUgZm9yIHRoZSBwaWVjZSBvZiBtZW1vcnkgdGhhdCBob2xkIHJlZmVyZW5jZXMgdG8KKyAgIGJlIGZldGNoZWQgaW4gImdpdCBmZXRjaCIgd2FzIHNjcmV3eSwgd2hpY2ggaGFzIGJlZW4gY2xlYW5lZCB1cC4KKworICogImdpdCBiaXNlY3QiIG1ha2VzIGFuIGludGVybmFsIGNhbGwgdG8gImdpdCBkaWZmLXRyZWUiIHdoZW4KKyAgIGJpc2VjdGlvbiBmaW5kcyB0aGUgY3VscHJpdCwgYnV0IHRoaXMgY2FsbCBkaWQgbm90IGluaXRpYWxpemUgdGhlCisgICBkYXRhIHN0cnVjdHVyZSB0byBwYXNzIHRvIHRoZSBkaWZmLXRyZWUgQVBJIGNvcnJlY3RseS4KKworICogRnVydGhlciBwcmVwYXJhdG9yeSBjbGVhbi11cCBmb3IgIndvcmt0cmVlIiBmZWF0dXJlIGNvbnRpbnVlcy4KKyAgIChtZXJnZSAwNDA5ZTBiIG5kL3dvcmt0cmVlLWNsZWFudXAtcG9zdC1oZWFkLXByb3RlY3Rpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGb3JtYXRzIG9mIHRoZSB2YXJpb3VzIGRhdGEgKGFuZCBob3cgdG8gdmFsaWRhdGUgdGhlbSkgd2hlcmUgd2UgdXNlCisgICBHUEcgc2lnbmF0dXJlIGhhdmUgYmVlbiBkb2N1bWVudGVkLgorCisgKiBBIG5ldyBydW4tY29tbWFuZCBBUEkgZnVuY3Rpb24gcGlwZV9jb21tYW5kKCkgaXMgaW50cm9kdWNlZCB0bworICAgc2FuZWx5IGZlZWQgZGF0YSB0byB0aGUgc3RhbmRhcmQgaW5wdXQgd2hpbGUgY2FwdHVyaW5nIGRhdGEgZnJvbQorICAgdGhlIHN0YW5kYXJkIG91dHB1dCBhbmQgdGhlIHN0YW5kYXJkIGVycm9yIG9mIGFuIGV4dGVybmFsIHByb2Nlc3MsCisgICB3aGljaCBpcyBjdW1iZXJzb21lIHRvIGhhbmQtcm9sbCBjb3JyZWN0bHkgd2l0aG91dCBkZWFkbG9ja2luZy4KKworICAgVGhlIGNvZGVwYXRoIHRvIHNpZ24gZGF0YSBpbiBhIHByZXBhcmVkIGJ1ZmZlciB3aXRoIEdQRyBoYXMgYmVlbgorICAgdXBkYXRlZCB0byB1c2UgdGhpcyBBUEkgdG8gcmVhZCBmcm9tIHRoZSBzdGF0dXMtZmQgdG8gY2hlY2sgZm9yCisgICBlcnJvcnMgKGluc3RlYWQgb2YgcmVseWluZyBvbiBHUEcncyBleGl0IHN0YXR1cykuCisgICAobWVyZ2UgZWZlZTk1NSBqay9ncGctaW50ZXJmYWNlLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbGxvdyB0L3BlcmYgZnJhbWV3b3JrIHRvIHVzZSB0aGUgZmVhdHVyZXMgZnJvbSB0aGUgbW9zdCByZWNlbnQKKyAgIHZlcnNpb24gb2YgR2l0IGV2ZW4gd2hlbiB0ZXN0aW5nIGFuIG9sZGVyIGluc3RhbGxlZCB2ZXJzaW9uLgorCisgKiBUaGUgY29tbWFuZHMgaW4gdGhlICJsb2cvZGlmZiIgZmFtaWx5IGhhdmUgaGFkIGFuIEZJTEUqIHBvaW50ZXIgaW4gdGhlCisgICBkYXRhIHN0cnVjdHVyZSB0aGV5IHBhc3MgYXJvdW5kIGZvciBhIGxvbmcgdGltZSwgYnV0IHNvbWUgY29kZXBhdGhzCisgICB1c2VkIHRvIGFsd2F5cyB3cml0ZSB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgQXMgYSBwcmVwYXJhdG9yeSBzdGVwCisgICB0byBtYWtlICJnaXQgZm9ybWF0LXBhdGNoIiBhdmFpbGFibGUgdG8gdGhlIGludGVybmFsIGNhbGxlcnMsIHRoZXNlCisgICBjb2RlcGF0aHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gY29uc2lzdGVudGx5IHdyaXRlIGludG8gdGhhdCBGSUxFKgorICAgaW5zdGVhZC4KKworICogQ29udmVyc2lvbiBmcm9tIHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0gdG8gc3RydWN0IG9iamVjdF9pZAorICAgY29udGludWVzLgorCisgKiBJbXByb3ZlIHRoZSBsb29rIG9mIHRoZSB3YXkgImdpdCBmZXRjaCIgcmVwb3J0cyB3aGF0IGhhcHBlbmVkIHRvCisgICBlYWNoIHJlZiB0aGF0IHdhcyBmZXRjaGVkLgorCisgKiBUaGUgLmMvLmggc291cmNlcyBhcmUgbWFya2VkIGFzIHN1Y2ggaW4gb3VyIC5naXRhdHRyaWJ1dGVzIGZpbGUgc28KKyAgIHRoYXQgImdpdCBkaWZmIC1XIiBhbmQgZnJpZW5kcyB3b3VsZCB3b3JrIGJldHRlci4KKworICogQ29kZSBjbGVhbi11cCB0byBhdm9pZCB1c2luZyBhIHZhcmlhYmxlIHN0cmluZyB0aGF0IGNvbXBpbGVycyBtYXkKKyAgIGZlZWwgdW50cnVzdGFibGUgYXMgcHJpbnRmLXN0eWxlIGZvcm1hdCBnaXZlbiB0byB3cml0ZV9maWxlKCkKKyAgIGhlbHBlciBmdW5jdGlvbi4KKworICogImdpdCBwNCIgdXNlZCBhIGxvY2F0aW9uIG91dHNpZGUgJEdJVF9ESVIvcmVmcy8gdG8gcGxhY2UgaXRzCisgICB0ZW1wb3JhcnkgYnJhbmNoZXMsIHdoaWNoIGhhcyBiZWVuIG1vdmVkIHRvIHJlZnMvZ2l0LXA0LXRtcC8uCisKKyAqIEV4aXN0aW5nIGF1dG9jb25mIGdlbmVyYXRlZCB0ZXN0IGZvciB0aGUgbmVlZCB0byBsaW5rIHdpdGggcHRocmVhZAorICAgbGlicmFyeSBkaWQgbm90IGNoZWNrIGFsbCB0aGUgZnVuY3Rpb25zIGZyb20gcHRocmVhZCBsaWJyYXJpZXM7CisgICByZWNlbnQgRnJlZUJTRCBoYXMgc29tZSBmdW5jdGlvbnMgaW4gbGliYyBidXQgbm90IG90aGVycywgYW5kIHdlCisgICBtaXN0YWtlbmx5IHRob3VnaHQgbGlua2luZyB3aXRoIGxpYmMgaXMgZW5vdWdoIHdoZW4gaXQgaXMgbm90LgorCisgKiBXaGVuICJnaXQgZnNjayIgcmVwb3J0cyBhIGJyb2tlbiBsaW5rIChlLmcuIGEgdHJlZSBvYmplY3QgY29udGFpbnMKKyAgIGEgYmxvYiB0aGF0IGRvZXMgbm90IGV4aXN0KSwgYm90aCBjb250YWluaW5nIG9iamVjdCBhbmQgdGhlIG9iamVjdAorICAgdGhhdCBpcyByZWZlcnJlZCB0byB3ZXJlIHJlcG9ydGVkIHdpdGggdGhlaXIgNDAtaGV4IG9iamVjdCBuYW1lcy4KKyAgIFRoZSBjb21tYW5kIGxlYXJuZWQgdGhlICItLW5hbWUtb2JqZWN0cyIgb3B0aW9uIHRvIHNob3cgdGhlIHBhdGggdG8KKyAgIHRoZSBjb250YWluaW5nIG9iamVjdCBmcm9tIGV4aXN0aW5nIHJlZnMgKGUuZy4gIkhFQUR+MjReMjpmaWxlLnR4dCIpLgorCisgKiBBbGxvdyBodHRwIGRhZW1vbiB0ZXN0cyBpbiBUcmF2aXMgQ0kgdGVzdHMuCisKKyAqIE1ha2VmaWxlIGFzc3VtZWQgdGhhdCAtbHJ0IGlzIGFsd2F5cyBhdmFpbGFibGUgb24gcGxhdGZvcm1zIHRoYXQKKyAgIHdhbnQgdG8gdXNlIGNsb2NrX2dldHRpbWUoKSBhbmQgQ0xPQ0tfTU9OT1RPTklDLCB3aGljaCBpcyBub3QgYQorICAgY2FzZSBmb3IgcmVjZW50IE1hYyBPUyBYLiAgVGhlIG5lY2Vzc2FyeSBzeW1ib2xzIGFyZSBvZnRlbiBmb3VuZCBpbgorICAgbGliYyBvbiBtYW55IG1vZGVybiBzeXN0ZW1zIGFuZCBoYXZpbmcgLWxydCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhcworICAgbG9uZyBhcyB0aGUgbGlicmFyeSBleGlzdHMsIGhhZCBubyBlZmZlY3QsIGJ1dCB3aGVuIHRoZSBwbGF0Zm9ybQorICAgcmVtb3ZlcyBsaWJydC5hIHRoYXQgaXMgYSBkaWZmZXJlbnQgbWF0dGVyLS1oYXZpbmcgLWxydCB3aWxsIGJyZWFrCisgICB0aGUgbGlua2FnZS4KKworICAgVGhpcyBjaGFuZ2UgY291bGQgYmUgc2VlbiBhcyBhIHJlZ3Jlc3Npb24gZm9yIHRob3NlIHdobyBkbyBuZWVkIHRvCisgICBzcGVjaWZ5IC1scnQsIGFzIHRoZXkgbm93IHNwZWNpZmljYWxseSBhc2sgZm9yIE5FRURTX0xJQlJUIHdoZW4KKyAgIGJ1aWxkaW5nLiBIb3BlZnVsbHkgdGhleSBhcmUgaW4gdGhlIG1pbm9yaXR5IHRoZXNlIGRheXMuCisKKyAqIEZ1cnRoZXIgcHJlcGFyYXRvcnkgd29yayBvbiB0aGUgcmVmcyBBUEkgYmVmb3JlIHRoZSBwbHVnZ2FibGUKKyAgIGJhY2tlbmQgc2VyaWVzIGNhbiBsYW5kLgorCisgKiBFcnJvciBoYW5kbGluZyBpbiB0aGUgY29kZXBhdGhzIHRoYXQgdXBkYXRlcyByZWZzIGhhcyBiZWVuCisgICBpbXByb3ZlZC4KKworICogVGhlIEFQSSB0byBpdGVyYXRlIG92ZXIgYWxsIHRoZSByZWZzIChpLmUuIGZvcl9lYWNoX3JlZigpLCBldGMuKQorICAgaGFzIGJlZW4gcmV2YW1wZWQuCisKKyAqIEEgZmV3IHRlc3RzIHRoYXQgc3BlY2lmaWNhbGx5IHRhcmdldCAiZ2l0IHJlYmFzZSAtaSIgaGF2ZSBiZWVuCisgICBhZGRlZC4KKworICogRHVtYiBodHRwIHRyYW5zcG9ydCBvbiB0aGUgY2xpZW50IHNpZGUgaGFzIGJlZW4gb3B0aW1pemVkLgorICAgKG1lcmdlIGVjYmExOTUgZXcvaHR0cC13YWxrZXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVc2VycyBvZiB0aGUgcGFyc2Vfb3B0aW9uc19jb25jYXQoKSBBUEkgZnVuY3Rpb24gbmVlZCB0byBhbGxvY2F0ZQorICAgZXh0cmEgc2xvdHMgaW4gYWR2YW5jZSBhbmQgZmlsbCB0aGVtIHdpdGggT1BUX0VORCgpIHdoZW4gdGhleSB3YW50CisgICB0byBkZWNpZGUgdGhlIHNldCBvZiBzdXBwb3J0ZWQgb3B0aW9ucyBkeW5hbWljYWxseSwgd2hpY2ggbWFrZXMgdGhlCisgICBjb2RlIGVycm9yLXByb25lIGFuZCBoYXJkIHRvIHJlYWQuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCBieSB0d2Vha2luZworICAgdGhlIEFQSSB0byBhbGxvY2F0ZSBhbmQgcmV0dXJuIGEgbmV3IGNvcHkgb2YgInN0cnVjdCBvcHRpb24iIGFycmF5LgorCisgKiAiZ2l0IGZldGNoIiBleGNoYW5nZXMgYmF0Y2hlZCBoYXZlL2FjayBtZXNzYWdlcyBiZXR3ZWVuIHRoZSBzZW5kZXIKKyAgIGFuZCB0aGUgcmVjZWl2ZXIsIGluaXRpYWxseSBkb3VibGluZyBldmVyeSB0aW1lIGFuZCB0aGVuIGZhbGxpbmcKKyAgIGJhY2sgdG8gZW5sYXJnZSB0aGUgd2luZG93IHNpemUgbGluZWFybHkuICBUaGUgInNtYXJ0IGh0dHAiCisgICB0cmFuc3BvcnQsIGJlaW5nIGFuIGhhbGYtZHVwbGV4IHByb3RvY29sLCBvdXRncm93cyB0aGUgcHJlc2V0IGxpbWl0CisgICB0b28gcXVpY2tseSBhbmQgYmVjb21lcyBpbmVmZmljaWVudCB3aGVuIGludGVyYWN0aW5nIHdpdGggYSBsYXJnZQorICAgcmVwb3NpdG9yeS4gIFRoZSBpbnRlcm5hbCBtZWNoYW5pc20gbGVhcm5lZCB0byBncm93IHRoZSB3aW5kb3cgc2l6ZQorICAgbW9yZSBhZ2dyZXNzaXZlbHkgd2hlbiB3b3JraW5nIHdpdGggdGhlICJzbWFydCBodHRwIiB0cmFuc3BvcnQuCisKKyAqIFRlc3RzIGZvciAiZ2l0IHN2biIgaGF2ZSBiZWVuIHRhdWdodCB0byByZXVzZSB0aGUgbGliLWh0dHBkIHRlc3QKKyAgIGluZnJhc3RydWN0dXJlIHdoZW4gdGVzdGluZyB0aGUgc3VidmVyc2lvbiBpbnRlZ3JhdGlvbiB0aGF0CisgICBpbnRlcmFjdHMgd2l0aCBzdWJ2ZXJzaW9uIHJlcG9zaXRvcmllcyBzZXJ2ZWQgb3ZlciB0aGUgaHR0cDovLworICAgcHJvdG9jb2wuCisgICAobWVyZ2UgYThhNWQyNSBldy9naXQtc3ZuLWh0dHAtdGVzdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgaGFzIGEgZmV3IG9wdGlvbnMgdGhhdCB0ZWxsIGl0IG5vdCB0byBwYWNrCisgICBvYmplY3RzIGZvdW5kIGluIGNlcnRhaW4gcGFja2ZpbGVzLCB3aGljaCByZXF1aXJlIGl0IHRvIHNjYW4gLmlkeAorICAgZmlsZXMgb2YgYWxsIGF2YWlsYWJsZSBwYWNrcy4gIFRoZSBjb2RlcGF0aHMgaW52b2x2ZWQgaW4gdGhlc2UKKyAgIG9wZXJhdGlvbnMgaGF2ZSBiZWVuIG9wdGltaXplZCBmb3IgYSBjb21tb24gY2FzZSBvZiBub3QgaGF2aW5nIGFueQorICAgbm9uLWxvY2FsIHBhY2sgYW5kL29yIGFueSAua2VwdCBwYWNrLgorCisgKiBUaGUgdDM3MDAgdGVzdCBhYm91dCAiYWRkIC0tY2htb2Q9LXgiIGhhdmUgYmVlbiBtYWRlIGEgYml0IG1vcmUKKyAgIHJvYnVzdCBhbmQgZ2VuZXJhbGx5IGNsZWFuZWQgdXAuCisgICAobWVyZ2UgNzY2Y2RjNCBpYi90MzcwMC1hZGQtY2htb2QteC11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSBsZWFybmVkIFBBR0VSX0VOViBrbm9iIHRoYXQgbGlzdHMgd2hhdCBkZWZhdWx0CisgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXR0aW5ncyB0byBleHBvcnQgZm9yIHBvcHVsYXIgcGFnZXJzLiAgVGhpcworICAgbWVjaGFuaXNtIGlzIHVzZWQgdG8gdHdlYWsgdGhlIGRlZmF1bHQgc2V0dGluZ3MgdG8gTU9SRSBvbiBGcmVlQlNELgorICAgKG1lcmdlIDk5NWJjMjIgZXcvYnVpbGQtdGltZS1wYWdlci10d2Vha3MgbGF0ZXIgdG8gbWFpbnQpLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjkKKy0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi44IGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqIFRoZSBjb21tYW5kcyBpbiBgZ2l0IGxvZ2AgZmFtaWx5IHRha2UgJUMoYXV0bykgaW4gYSBjdXN0b20gZm9ybWF0CisgICBzdHJpbmcuICBUaGlzIHVuY29uZGl0aW9uYWxseSB0dXJuZWQgdGhlIGNvbG9yIG9uLCBpZ25vcmluZworICAgLS1uby1jb2xvciBvciB3aXRoIC0tY29sb3I9YXV0byB3aGVuIHRoZSBvdXRwdXQgaXMgbm90IGNvbm5lY3RlZCB0bworICAgYSB0dHk7IHRoaXMgd2FzIGNvcnJlY3RlZCB0byBtYWtlIHRoZSBmb3JtYXQgdHJ1bHkgYmVoYXZlIGFzCisgICAiYXV0byIuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1jb3VudCIgd2hvc2Ugd2Fsay1sZW5ndGggaXMgbGltaXRlZCB3aXRoICItbiIKKyAgIG9wdGlvbiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIHRoZSBjb3VudGluZyBvcHRpbWl6ZWQgdG8gbG9vayBhdCB0aGUKKyAgIGJpdG1hcCBpbmRleC4KKworICogImdpdCBzaG93IC1XIiAoZXh0ZW5kIGh1bmtzIHRvIGNvdmVyIHRoZSBlbnRpcmUgZnVuY3Rpb24sIGRlbGltaXRlZAorICAgYnkgbGluZXMgdGhhdCBtYXRjaCB0aGUgImZ1bmNuYW1lIiBwYXR0ZXJuKSB1c2VkIHRvIHNob3cgdGhlIGVudGlyZQorICAgZmlsZSB3aGVuIGEgY2hhbmdlIGFkZGVkIGFuIGVudGlyZSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLAorICAgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIHNldCBoYXMgYmVlbiB1cGRhdGVkIHNvIHRoYXQgbGl0ZXJhbCBjb21tYW5kcywKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGNvbnNpc3RlbnRseQorICAgdHlwZXNldCBpbiBmaXhlZC13aWR0aCBmb250IGFuZCBib2xkIGluIG1hbnBhZ2VzLgorCisgKiAiZ2l0IHN2biBwcm9wc2V0IiBzdWJjb21tYW5kIHRoYXQgd2FzIGFkZGVkIGluIDIuMyBkYXlzIGlzCisgICBkb2N1bWVudGVkIG5vdy4KKworICogVGhlIGRvY3VtZW50YXRpb24gdHJpZXMgdG8gY29uc2lzdGVudGx5IHNwZWxsICJHUEciOyB3aGVuCisgICByZWZlcnJpbmcgdG8gdGhlIHNwZWNpZmljIHByb2dyYW0gbmFtZSwgImdwZyIgaXMgdXNlZC4KKworICogImdpdCByZWZsb2ciIHN0b3BwZWQgdXBvbiBzZWVpbmcgYW4gZW50cnkgdGhhdCBkZW5vdGVzIGEgYnJhbmNoCisgICBjcmVhdGlvbiBldmVudCAoYWthICJ1bmJvcm4iKSwgd2hpY2ggbWFkZSBpdCBhcHBlYXIgYXMgaWYgdGhlCisgICByZWZsb2cgd2FzIHRydW5jYXRlZC4KKworICogVGhlIGdpdC1wcm9tcHQgc2NyaXB0bGV0IChpbiBjb250cmliLykgd2FzIG5vdCBmcmllbmRseSB3aXRoIHRob3NlCisgICB3aG8gdXNlcyAic2V0IC11Iiwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIGNvbXBhdC9yZWdleCBjb2RlIGRpZCBub3QgY2xlYW5seSBjb21waWxlLgorCisgKiBBIGNvZGVwYXRoIHRoYXQgdXNlZCBhbGxvY2EoMykgdG8gcGxhY2UgYW4gdW5ib3VuZGVkIGFtb3VudCBvZiBkYXRhCisgICBvbiB0aGUgc3RhY2sgaGFzIGJlZW4gdXBkYXRlZCB0byBhdm9pZCBkb2luZyBzby4KKworICogImdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jaG1vZD0reCBmaWxlIiBtYXkgYmUgdXNhYmxlIGFzIGFuIGVzY2FwZQorICAgaGF0Y2gsIGJ1dCBub3QgYSBmcmllbmRseSB0aGluZyB0byBmb3JjZSBmb3IgcGVvcGxlIHdobyBkbyBuZWVkIHRvCisgICB1c2UgaXQgcmVndWxhcmx5LiAgImdpdCBhZGQgLS1jaG1vZD0reCBmaWxlIiBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorCisgKiBCdWlsZCBpbXByb3ZlbWVudHMgZm9yIGdub21lLWtleXJpbmcgKGluIGNvbnRyaWIvKQorCisgKiAiZ2l0IHN0YXR1cyIgdXNlZCB0byBzYXkgIndvcmtpbmcgZGlyZWN0b3J5IiB3aGVuIGl0IG1lYW50ICJ3b3JraW5nCisgICB0cmVlIi4KKworICogQ29tbWVudHMgYWJvdXQgbWlzYmVoYXZpbmcgRnJlZUJTRCBzaGVsbHMgaGF2ZSBiZWVuIGNsYXJpZmllZCB3aXRoCisgICB0aGUgdmVyc2lvbiBudW1iZXIgKDkueCBhbmQgYmVmb3JlIGFyZSBicm9rZW4sIG5ld2VyIG9uZXMgYXJlIE9LKS4KKworICogImdpdCBjaGVycnktcGljayBBIiB3b3JrZWQgb24gYW4gdW5ib3JuIGJyYW5jaCwgYnV0ICJnaXQKKyAgIGNoZXJyeS1waWNrIEEuLkIiIGRpZG4ndC4KKworICogRml4IGFuIHVuaW50ZW5kZWQgcmVncmVzc2lvbiBpbiB2Mi45IHRoYXQgYnJlYWtzICJjbG9uZSAtLWRlcHRoIgorICAgdGhhdCByZWN1cnNlcyBkb3duIHRvIHN1Ym1vZHVsZXMgYnkgZm9yY2luZyB0aGUgc3VibW9kdWxlcyB0byBhbHNvCisgICBiZSBjbG9uZWQgc2hhbGxvd2x5LCB3aGljaCBtYW55IHNlcnZlciBpbnN0YW5jZXMgdGhhdCBob3N0IHVwc3RyZWFtCisgICBvZiB0aGUgc3VibW9kdWxlcyBhcmUgbm90IHByZXBhcmVkIGZvci4KKworICogRml4IHVubmVjZXNzYXJpbHkgd2FzdGUgaW4gdGhlIGlkaW9tYXRpYyB1c2Ugb2YgJzogJHtWQVI9ZGVmYXVsdH0nCisgICB0byBzZXQgdGhlIGRlZmF1bHQgdmFsdWUsIHdpdGhvdXQgZW5jbG9zaW5nIGl0IGluIGRvdWJsZSBxdW90ZXMuCisKKyAqIFNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBoYWQgbm9uLUFOU0kgc3RyaWN0IGRlY2xhcmF0aW9ucyBvZiBDCisgICBmdW5jdGlvbnMgdGhhdCBkbyBub3QgdGFrZSBhbnkgcGFyYW1ldGVycywgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogVGhlIGludGVybmFsIGNvZGUgdXNlZCB0byBzaG93IGxvY2FsIHRpbWV6b25lIG9mZnNldCBpcyBub3QKKyAgIHByZXBhcmVkIHRvIGhhbmRsZSB0aW1lc3RhbXBzIGJleW9uZCB5ZWFyIDIxMDAsIGFuZCBnYXZlIGEKKyAgIGJvZ3VzIG9mZnNldCB2YWx1ZSB0byB0aGUgY2FsbGVyLiAgVXNlIGEgbW9yZSBiZW5pZ24gbG9va2luZworICAgKzAwMDAgaW5zdGVhZCBhbmQgbGV0ICJnaXQgbG9nIiBnb2luZyBpbiBzdWNoIGEgY2FzZSwgaW5zdGVhZAorICAgb2YgYWJvcnRpbmcuCisKKyAqIE9uZSBhbW9uZyBmb3VyIGludm9jYXRpb25zIG9mIHJlYWRsaW5rKDEpIGluIG91ciB0ZXN0IHN1aXRlIGhhcworICAgYmVlbiByZXdyaXR0ZW4gc28gdGhhdCB0aGUgdGVzdCBjYW4gcnVuIG9uIHN5c3RlbXMgd2l0aG91dCB0aGUKKyAgIGNvbW1hbmQgKG90aGVycyBhcmUgaW4gdmFsZ3JpbmQgdGVzdCBmcmFtZXdvcmsgYW5kIHQ5ODAyKS4KKworICogdC9wZXJmIG5lZWRzIC91c3IvYmluL3RpbWUgd2l0aCBHTlUgZXh0ZW5zaW9uOyB0aGUgaW52b2NhdGlvbiBvZiBpdAorICAgaXMgdXBkYXRlZCB0byAiZ3RpbWUiIG9uIERhcndpbi4KKworICogQSBidWcsIHdoaWNoIGNhdXNlZCAiZ2l0IHA0IiB3aGlsZSBydW5uaW5nIHVuZGVyIHZlcmJvc2UgbW9kZSB0bworICAgcmVwb3J0IHBhdGhzIHRoYXQgYXJlIG9taXR0ZWQgZHVlIHRvIGJyYW5jaCBwcmVmaXggaW5jb3JyZWN0bHksIGhhcworICAgYmVlbiBmaXhlZDsgdGhlIGNvbW1hbmQgc2FpZCAiSWdub3JpbmcgZmlsZSBvdXRzaWRlIG9mIHByZWZpeCIgZm9yCisgICBwYXRocyB0aGF0IGFyZSBfaW5zaWRlXy4KKworICogVGhlIHRvcCBsZXZlbCBkb2N1bWVudGF0aW9uICJnaXQgaGVscCBnaXQiIHN0aWxsIHBvaW50ZWQgYXQgdGhlCisgICBkb2N1bWVudGF0aW9uIHNldCBob3N0ZWQgYXQgbm93LWRlZnVuY3QgZ29vZ2xlLWNvZGUgcmVwb3NpdG9yeS4KKyAgIFVwZGF0ZSBpdCB0byBwb2ludCB0byBodHRwczovL2dpdC5naXRodWIuaW8vaHRtbGRvY3MvZ2l0Lmh0bWwKKyAgIGluc3RlYWQuCisKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGNvbnRlbnRzIG9mIGEgY29tbWl0IG9iamVjdCBhbmQKKyAgIGZpbmRzIGl0cyBzdWJqZWN0IGxpbmUgZGlkIG5vdCBpZ25vcmUgbGVhZGluZyBibGFuayBsaW5lcywgYXMgaXMKKyAgIGNvbW1vbmx5IGRvbmUgYnkgb3RoZXIgY29kZXBhdGhzLiAgTWFrZSBpdCBpZ25vcmUgbGVhZGluZyBibGFuaworICAgbGluZXMgdG8gbWF0Y2guCisKKyAqIEZvciBhIGxvbmcgdGltZSwgd2UgY2FycmllZCBhbiBpbi1jb2RlIGNvbW1lbnQgdGhhdCBzYWlkIG91cgorICAgY29sb3JlZCBvdXRwdXQgd291bGQgd29yayBvbmx5IHdoZW4gd2UgdXNlIGZwcmludGYvZnB1dHMgb24KKyAgIFdpbmRvd3MsIHdoaWNoIG5vIGxvbmdlciBpcyB0aGUgY2FzZSBmb3IgdGhlIHBhc3QgZmV3IHllYXJzLgorCisgKiAiZ2MuYXV0b1BhY2tMaW1pdCIgd2hlbiBzZXQgdG8gMSBzaG91bGQgbm90IHRyaWdnZXIgYSByZXBhY2tpbmcKKyAgIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgcGFjaywgYnV0IHRoZSBjb2RlIGNvdW50ZWQgcG9vcmx5IGFuZCBkaWQKKyAgIHNvLgorCisgKiBBZGQgYSB0ZXN0IHRvIHNwZWNpZnkgdGhlIGRlc2lyZWQgYmVoYXZpb3VyIHRoYXQgY3VycmVudGx5IGlzIG5vdAorICAgYXZhaWxhYmxlIGluICJnaXQgcmViYXNlIC1Yc3VidHJlZT0uLi4iLgorCisgKiBNb3JlIG1hcmstdXAgdXBkYXRlcyB0byB0eXBlc2V0IHN0cmluZ3MgdGhhdCBhcmUgZXhwZWN0ZWQgdG8KKyAgIGxpdGVyYWxseSB0eXBlZCBieSB0aGUgZW5kIHVzZXIgaW4gZml4ZWQtd2lkdGggZm9udC4KKworICogImdpdCBjb21taXQgLS1hbWVuZCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLVMiIGZvciBhIGNvbW1pdCB3aXRob3V0CisgICBhbnkgbWVzc2FnZSBib2R5IGNvdWxkIGhhdmUgbWlzaWRlbnRpZmllZCB3aGVyZSB0aGUgaGVhZGVyIG9mIHRoZQorICAgY29tbWl0IG9iamVjdCBlbmRzLgorCisgKiAiZ2l0IHJlYmFzZSAtaSAtLWF1dG9zdGFzaCIgZGlkIG5vdCByZXN0b3JlIHRoZSBhdXRvLXN0YXNoZWQgY2hhbmdlCisgICB3aGVuIHRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuCisKKyAqIEdpdCBkb2VzIG5vdCBrbm93IHdoYXQgdGhlIGNvbnRlbnRzIGluIHRoZSBpbmRleCBzaG91bGQgYmUgZm9yIGEKKyAgIHBhdGggYWRkZWQgd2l0aCAiZ2l0IGFkZCAtTiIgeWV0LCBzbyAiZ2l0IGdyZXAgLS1jYWNoZWQiIHNob3VsZCBub3QKKyAgIHNob3cgaGl0cyAob3Igc2hvdyBsYWNrIG9mIGhpdHMsIHdpdGggLUwpIGluIHN1Y2ggYSBwYXRoLCBidXQgdGhhdAorICAgbG9naWMgZG9lcyBub3QgYXBwbHkgdG8gImdpdCBncmVwIiwgaS5lLiBzZWFyY2hpbmcgaW4gdGhlIHdvcmtpbmcKKyAgIHRyZWUgZmlsZXMuICBCdXQgd2UgZGlkIHNvIGJ5IG1pc3Rha2UsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBibGFtZSAtTSIgbWlzc2VkIGEgc2luZ2xlIGxpbmUgdGhhdCB3YXMgbW92ZWQgd2l0aGluIHRoZSBmaWxlLgorCisgKiBGaXggcmVjZW50bHkgaW50cm9kdWNlZCBjb2RlcGF0aHMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gcGFyYWxsZWwKKyAgIHN1Ym1vZHVsZSBvcGVyYXRpb25zLCB3aGljaCBnYXZlIHVwIG9uIHJlYWRpbmcgdG9vIGVhcmx5LCBhbmQKKyAgIGNvdWxkIGhhdmUgd2FzdGVkIENQVSB3aGlsZSBhdHRlbXB0aW5nIHRvIHdyaXRlIHVuZGVyIGEgY29ybmVyCisgICBjYXNlIGNvbmRpdGlvbi4KKworICogImdpdCBncmVwIC1pIiBoYXMgYmVlbiB0YXVnaHQgdG8gZm9sZCBjYXNlIGluIG5vbi1hc2NpaSBsb2NhbGVzCisgICBjb3JyZWN0bHkuCisKKyAqIEEgdGVzdCB0aGF0IHVuY29uZGl0aW9uYWxseSB1c2VkICJta3RlbXAiIGxlYXJuZWQgdGhhdCB0aGUgY29tbWFuZAorICAgaXMgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBldmVyeXdoZXJlLgorCisgKiBUaGVyZSBhcmUgY2VydGFpbiBob3VzZS1rZWVwaW5nIHRhc2tzIHRoYXQgbmVlZCB0byBiZSBwZXJmb3JtZWQgYXQKKyAgIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiBhbnkgR2l0IHByb2dyYW0sIGFuZCBwcm9ncmFtcyB0aGF0IGFyZSBub3QKKyAgIGJ1aWx0LWluIGNvbW1hbmRzIGhhZCB0byBkbyB0aGVtIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzICJnaXQiCisgICBwb3R0eSBkb2VzLiAgSXQgd2FzIGVhc3kgdG8gbWFrZSBtaXN0YWtlcyBpbiBvbmUtb2ZmIHN0YW5kYWxvbmUKKyAgIHByb2dyYW1zIChsaWtlIHRlc3QgaGVscGVycykuICBBIGNvbW1vbiAibWFpbigpIiBmdW5jdGlvbiB0aGF0CisgICBjYWxscyBjbWRfbWFpbigpIG9mIGluZGl2aWR1YWwgcHJvZ3JhbSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvCisgICBtYWtlIGl0IGhhcmRlciB0byBtYWtlIG1pc3Rha2VzLgorICAgKG1lcmdlIGRlNjFjZWIgamsvY29tbW9uLW1haW4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdGVzdCBmcmFtZXdvcmsgbGVhcm5lZCBhIG5ldyBoZWxwZXIgdGVzdF9tYXRjaF9zaWduYWwgdG8KKyAgIGNoZWNrIGFuIGV4aXQgY29kZSBmcm9tIGdldHRpbmcga2lsbGVkIGJ5IGFuIGV4cGVjdGVkIHNpZ25hbC4KKworICogR2VuZXJhbCBjb2RlIGNsZWFuLXVwIGFyb3VuZCBhIGhlbHBlciBmdW5jdGlvbiB0byB3cml0ZSBhCisgICBzaW5nbGUtbGluZXIgdG8gYSBmaWxlLgorICAgKG1lcmdlIDdlYjZlMTAgamsvd3JpdGUtZmlsZSBsYXRlciB0byBtYWludCkuCisKKyAqIE9uZSBwYXJ0IG9mICJnaXQgYW0iIGhhZCBhbiBvZGRiYWxsIGhlbHBlciBmdW5jdGlvbiB0aGF0IGNhbGxlZAorICAgc3R1ZmYgZnJvbSBvdXRzaWRlICJoaXMiIGFzIG9wcG9zZWQgdG8gY2FsbGluZyB3aGF0IHdlIGhhdmUgIm91cnMiLAorICAgd2hpY2ggd2FzIG5vdCBnZW5kZXItbmV1dHJhbCBhbmQgYWxzbyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZgorICAgdGhlIHN5c3RlbSB3aGVyZSBvdXRzaWRlIHN0dWZmIGlzIHVzdWFsbCBjYWxsZWQgInRoZWlycyIgaW4KKyAgIGNvbnRyYXN0IHRvICJvdXJzIi4KKworICogImdpdCBibGFtZSBmaWxlIiBhbGxvd2VkIHRoZSBsaW5lYWdlIG9mIGxpbmVzIGluIHRoZSB1bmNvbW1pdHRlZCwKKyAgIHVuYWRkZWQgY29udGVudHMgb2YgImZpbGUiIHRvIGJlIGluc3BlY3RlZCwgYnV0IGl0IHJlZnVzZWQgd2hlbgorICAgImZpbGUiIGRpZCBub3QgYXBwZWFyIGluIHRoZSBjdXJyZW50IGNvbW1pdC4gIFdoZW4gImZpbGUiIHdhcworICAgY3JlYXRlZCBieSByZW5hbWluZyBhbiBleGlzdGluZyBmaWxlIChidXQgdGhlIGNoYW5nZSBoYXMgbm90IGJlZW4KKyAgIGNvbW1pdHRlZCksIHRoaXMgcmVzdHJpY3Rpb24gd2FzIHVubmVjZXNzYXJpbHkgdGlnaHQuCisKKyAqICJnaXQgYWRkIC1OIGRpci9maWxlICYmIGdpdCB3cml0ZS10cmVlIiBwcm9kdWNlZCBhbiBpbmNvcnJlY3QgdHJlZQorICAgd2hlbiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRoYXQgc29ydHMgYWZ0ZXIKKyAgICJmaWxlIi4KKworICogImdpdCBmZXRjaCBodHRwOi8vdXNlcjpwYXNzQGhvc3QvcmVwby4uLiIgc2NydWJiZWQgdGhlIHVzZXJpbmZvCisgICBwYXJ0LCBidXQgImdpdCBwdXNoIiBkaWRuJ3QuCisKKyAqICJnaXQgbWVyZ2UiIHdpdGggcmVub3JtYWxpemF0aW9uIGRpZCBub3Qgd29yayB3ZWxsIHdpdGgKKyAgIG1lcmdlLXJlY3Vyc2l2ZSwgZHVlIHRvICJzYWZlciBjcmxmIiBjb252ZXJzaW9uIGtpY2tpbmcgaW4gd2hlbiBpdAorICAgc2hvdWxkbid0LgorICAgKG1lcmdlIDEzMzVkNzYgamMvcmVub3JtYWxpemUtbWVyZ2Uta2lsbC1zYWZlci1jcmxmIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHVzZSBvZiBzdHJidWYgaW4gImdpdCBybSIgdG8gYnVpbGQgZmlsZW5hbWUgdG8gcmVtb3ZlIHdhcyBhIGJpdAorICAgc3Vib3B0aW1hbCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIEFuIGFnZSBvbGQgYnVnIHRoYXQgY2F1c2VkICJnaXQgZGlmZiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wiCisgICBtaXNiZWhhdmUgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgbm90ZXMgbWVyZ2UiIGhhZCBhIGNvZGUgdG8gc2VlIGlmIGEgcGF0aCBleGlzdHMgKGFuZCBmYWlscyBpZgorICAgaXQgZG9lcykgYW5kIHRoZW4gb3BlbiB0aGUgcGF0aCBmb3Igd3JpdGluZyAod2hlbiBpdCBkb2Vzbid0KS4KKyAgIFJlcGxhY2UgaXQgd2l0aCBvcGVuIHdpdGggT19FWENMLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgYW5kICJnaXQgaW5kZXgtcGFjayIgbW9zdGx5IG9wZXJhdGUgd2l0aCBvZmZfdAorICAgd2hlbiB0YWxraW5nIGFib3V0IHRoZSBvZmZzZXQgb2Ygb2JqZWN0cyBpbiBhIHBhY2tmaWxlLCBidXQgdGhlcmUKKyAgIHdlcmUgYSBoYW5kZnVsIG9mIHBsYWNlcyB0aGF0IHVzZWQgInVuc2lnbmVkIGxvbmciIHRvIGhvbGQgdGhhdAorICAgdmFsdWUsIGxlYWRpbmcgdG8gYW4gdW5pbnRlbmRlZCB0cnVuY2F0aW9uLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvICJnaXQgZGFlbW9uIiB0cmllcyB0byBlbmFibGUgdGhlIHNvY2tldC1sZXZlbAorICAgS0VFUEFMSVZFLCBidXQgd2hlbiBpdCBpcyBzcGF3bmVkIHZpYSBpbmV0ZCwgdGhlIHN0YW5kYXJkIGlucHV0CisgICBmaWxlIGRlc2NyaXB0b3IgbWF5IG5vdCBuZWNlc3NhcmlseSBiZSBjb25uZWN0ZWQgdG8gYSBzb2NrZXQuCisgICBTdXBwcmVzcyBhbiBFTk9UU09DSyBlcnJvciBmcm9tIHNldHNvY2tvcHQoKS4KKworICogUmVjZW50IEZyZWVCU0Qgc3RvcHBlZCBtYWtpbmcgcGVybCBhdmFpbGFibGUgYXQgL3Vzci9iaW4vcGVybDsKKyAgIHN3aXRjaCB0aGUgZGVmYXVsdCB0aGUgYnVpbHQtaW4gcGF0aCB0byAvdXNyL2xvY2FsL2Jpbi9wZXJsIG9uIG5vdAorICAgdG9vIGFuY2llbnQgRnJlZUJTRCByZWxlYXNlcy4KKworICogImdpdCBjb21taXQgLS1oZWxwIiBzYWlkICItLW5vLXZlcmlmeSIgaXMgb25seSBhYm91dCBza2lwcGluZyB0aGUKKyAgIHByZS1jb21taXQgaG9vaywgYW5kIGZhaWxlZCB0byBzYXkgdGhhdCBpdCBhbHNvIHNraXBwZWQgdGhlCisgICBjb21taXQtbXNnIGhvb2suCisKKyAqICJnaXQgbWVyZ2UiIGluIEdpdCB2Mi45IHdhcyB0YXVnaHQgdG8gZm9yYmlkIG1lcmdpbmcgYW4gdW5yZWxhdGVkCisgICBsaW5lcyBvZiBoaXN0b3J5IGJ5IGRlZmF1bHQsIGJ1dCB0aGF0IGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcKKyAgIHRoZSAiLS1yZWpvaW4iIG1vZGUgb2YgImdpdCBzdWJ0cmVlIiAoaW4gY29udHJpYi8pIHdhbnRzIHRvIGRvLgorICAgImdpdCBzdWJ0cmVlIiBoYXMgYmVlbiB0YXVnaHQgdG8gdXNlIHRoZSAiLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIgorICAgb3B0aW9uIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0LgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGZvciAiZ2l0IHBlcnNpc3RlbnQtaHR0cHMiIGhlbHBlciAoaW4gY29udHJpYi8pCisgICBoYXMgYmVlbiB1cGRhdGVkIHNvIHRoYXQgaXQgY2FuIGJlIGJ1aWx0IHdpdGggbW9yZSByZWNlbnQgdmVyc2lvbnMKKyAgIG9mIEdvLgorCisgKiBUaGVyZSBpcyBhbiBvcHRpbWl6YXRpb24gdXNlZCBpbiAiZ2l0IGRpZmYgJHRyZWVBICR0cmVlQiIgdG8gYm9ycm93CisgICBhbiBhbHJlYWR5IGNoZWNrZWQtb3V0IGNvcHkgaW4gdGhlIHdvcmtpbmcgdHJlZSB3aGVuIGl0IGlzIGtub3duIHRvCisgICBiZSB0aGUgc2FtZSBhcyB0aGUgYmxvYiBiZWluZyBjb21wYXJlZCwgZXhwZWN0aW5nIHRoYXQgb3Blbi9tbWFwIG9mCisgICBzdWNoIGEgZmlsZSBpcyBmYXN0ZXIgdGhhbiByZWFkaW5nIGl0IGZyb20gdGhlIG9iamVjdCBzdG9yZSwgd2hpY2gKKyAgIGludm9sdmVzIGluZmxhdGluZyBhbmQgYXBwbHlpbmcgZGVsdGEuICBUaGlzIGhvd2V2ZXIga2lja2VkIGluIGV2ZW4KKyAgIHdoZW4gdGhlIGNoZWNrZWQtb3V0IGNvcHkgbmVlZHMgdG8gZ28gdGhyb3VnaCB0aGUgY29udmVydC10by1naXQKKyAgIGNvbnZlcnNpb24gKGluY2x1ZGluZyB0aGUgY2xlYW4gZmlsdGVyKSwgd2hpY2ggZGVmZWF0cyB0aGUgd2hvbGUKKyAgIHBvaW50IG9mIHRoZSBvcHRpbWl6YXRpb24uICBUaGUgb3B0aW1pemF0aW9uIGhhcyBiZWVuIGRpc2FibGVkIHdoZW4KKyAgIHRoZSBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeS4KKworICogImdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWV4dGVuZGVkIGxvZyAtLWJhc2ljLXJlZ2V4cCIgbWlzYmVoYXZlZAorICAgYmVjYXVzZSB0aGUgaW50ZXJuYWwgQVBJIHRvIGFjY2VzcyB0aGUgZ3JlcCBtYWNoaW5lcnkgd2FzIG5vdAorICAgZGVzaWduZWQgd2VsbC4KKworICogV2luZG93cyBwb3J0IHdhcyBmYWlsaW5nIHNvbWUgdGVzdHMgaW4gdDQxMzAsIGR1ZSB0byB0aGUgbGFjayBvZgorICAgaW51bSBpbiB0aGUgcmV0dXJuZWQgdmFsdWVzIGJ5IGl0cyBsc3RhdCgyKSBlbXVsYXRpb24uCisKKyAqIFRoZSByZWZsb2cgb3V0cHV0IGZvcm1hdCBpcyBkb2N1bWVudGVkIGJldHRlciwgYW5kIGEgbmV3IGZvcm1hdAorICAgLS1kYXRlPXVuaXggdG8gcmVwb3J0IHRoZSBzZWNvbmRzLXNpbmNlLWVwb2NoICh3aXRob3V0IHRpbWV6b25lKQorICAgaGFzIGJlZW4gYWRkZWQuCisgICAobWVyZ2UgNDQyZjZmZCBqay9yZWZsb2ctZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZnRvb2wgPHBhdGhzPi4uLiIgc3RhcnRlZCBpbiBhIHN1YmRpcmVjdG9yeSBmYWlsZWQgdG8KKyAgIGludGVycHJldCB0aGUgcGF0aHMgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnksIHdoaWNoIGhhcyBiZWVuCisgICBmaXhlZC4KKyAgIChtZXJnZSAzMmI4YzU4IGprL2RpZmZ0b29sLWluLXN1YmRpciBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjaGFyYWN0ZXJzIGluIHRoZSBsYWJlbCBzaG93biBmb3IgdGFncy9yZWZzIGZvciBjb21taXRzIGluCisgICAiZ2l0d2ViIiBvdXRwdXQgYXJlIG5vdyBwcm9wZXJseSBlc2NhcGVkIGZvciBwcm9wZXIgSFRNTCBvdXRwdXQuCisKKyAqIEZyZWVCU0QgY2FuIGxpZSB3aGVuIGFza2VkIG10aW1lIG9mIGEgZGlyZWN0b3J5LCB3aGljaCBtYWRlIHRoZQorICAgdW50cmFja2VkIGNhY2hlIGNvZGUgdG8gZmFsbCBiYWNrIHRvIGEgc2xvdy1wYXRoLCB3aGljaCBpbiB0dXJuCisgICBjYXVzZWQgdGVzdHMgaW4gdDcwNjMgdG8gZmFpbCBiZWNhdXNlIGl0IHdhbnRlZCB0byB2ZXJpZnkgdGhlCisgICBiZWhhdmlvdXIgb2YgdGhlIGZhc3QtcGF0aC4KKworICogU3F1ZWxjaCBjb21waWxlciB3YXJuaW5ncyBmb3IgbmV0bWFsbG9jIChpbiBjb21wYXQvKSBsaWJyYXJ5LgorCisgKiBBIHNtYWxsIG1lbW9yeSBsZWFrIGluIHRoZSBjb21tYW5kIGxpbmUgcGFyc2luZyBvZiAiZ2l0IGJsYW1lIgorICAgaGFzIGJlZW4gcGx1Z2dlZC4KKworICogVGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBoYXNobWFwIHdhcyB1bmNsZWFyIGlmIGhhc2htYXBfZW50cnkKKyAgIGNhbiBiZSBzYWZlbHkgZGlzY2FyZGVkIHdpdGhvdXQgYW55IG90aGVyIGNvbnNpZGVyYXRpb24uICBTdGF0ZQorICAgdGhhdCBpdCBpcyBzYWZlIHRvIGRvIHNvLgorCisgKiBOb3Qtc28tcmVjZW50IHJld3JpdGUgb2YgImdpdCBhbSIgdGhhdCBzdGFydGVkIG1ha2luZyBpbnRlcm5hbAorICAgY2FsbHMgaW50byB0aGUgY29tbWl0IG1hY2hpbmVyeSBoYWQgYW4gdW5pbnRlbmRlZCByZWdyZXNzaW9uLCBpbgorICAgdGhhdCBubyBtYXR0ZXIgaG93IG1hbnkgc2Vjb25kcyBpdCB0b29rIHRvIGFwcGx5IG1hbnkgcGF0Y2hlcywgdGhlCisgICByZXN1bHRpbmcgY29tbWl0dGVyIHRpbWVzdGFtcCBmb3IgdGhlIHJlc3VsdGluZyBjb21taXRzIHdlcmUgYWxsCisgICB0aGUgc2FtZS4KKyAgIChtZXJnZSA0ZDljN2U2IGprL3Jlc2V0LWlkZW50LXRpbWUtcGVyLWNvbW1pdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2UiIGFscmVhZHkgaGFkIGVub3VnaCBsb2dpYyB0byBhbGxvdworICAgZW5zdXJpbmcgdGhhdCBzdWNoIGEgcHVzaCByZXN1bHRzIGluIGNyZWF0aW9uIG9mIGEgcmVmIChpLmUuIHRoZQorICAgcmVjZWl2aW5nIGVuZCBkaWQgbm90IGhhdmUgYW5vdGhlciBwdXNoIGZyb20gc2lkZXdheXMgdGhhdCB3b3VsZCBiZQorICAgZGlzY2FyZGVkIGJ5IG91ciBmb3JjZS1wdXNoaW5nKSwgYnV0IGRpZG4ndCBleHBvc2UgdGhpcyBwb3NzaWJpbGl0eQorICAgdG8gdGhlIHVzZXJzLiAgSXQgZG9lcyBzbyBub3cuCisgICAobWVyZ2UgOWVlZDRmMyBqay9wdXNoLWZvcmNlLXdpdGgtbGVhc2UtY3JlYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPdGhlciBtaW5vciBjbGVhbi11cHMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMTAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMTAudHh0CmluZGV4IDlkNDI1ZDguLjIwYzJkMmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjEwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4xMC50eHQKQEAgLTcsNyArNyw3IEBACiAgKiB4ZGlmZiBjb2RlIHdlIHVzZSB0byBnZW5lcmF0ZSBkaWZmcyBpcyBub3QgcHJlcGFyZWQgdG8gaGFuZGxlCiAgICBleHRyZW1lbHkgbGFyZ2UgZmlsZXMuICBJdCB1c2VzICJpbnQiIGluIG1hbnkgcGxhY2VzLCB3aGljaCBjYW4KICAgIG92ZXJmbG93IGlmIHdlIGhhdmUgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBsaW5lcyBvciBldmVuIGJ5dGVzIGluCi0gICBvdXIgaW5wdXQgZmlsZXMsIGZvciBleGFtcGxlLiAgQ2FwIHRoZSBpbnB1dCBzaXplIHRvIHNvZW13aGVyZQorICAgb3VyIGlucHV0IGZpbGVzLCBmb3IgZXhhbXBsZS4gIENhcCB0aGUgaW5wdXQgc2l6ZSB0byBzb21ld2hlcmUKICAgIGFyb3VuZCAxR0IgZm9yIG5vdy4KIAogICogU29tZSBwcm90b2NvbHMgKGxpa2UgZ2l0LXJlbW90ZS1leHQpIGNhbiBleGVjdXRlIGFyYml0cmFyeSBjb2RlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4xMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4xMC50eHQKaW5kZXggODYyMTE5OS4uNzAyZDhkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEwLnR4dApAQCAtNyw3ICs3LDcgQEAKICAqIHhkaWZmIGNvZGUgd2UgdXNlIHRvIGdlbmVyYXRlIGRpZmZzIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUKICAgIGV4dHJlbWVseSBsYXJnZSBmaWxlcy4gIEl0IHVzZXMgImludCIgaW4gbWFueSBwbGFjZXMsIHdoaWNoIGNhbgogICAgb3ZlcmZsb3cgaWYgd2UgaGF2ZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIGxpbmVzIG9yIGV2ZW4gYnl0ZXMgaW4KLSAgIG91ciBpbnB1dCBmaWxlcywgZm9yIGV4YW1wbGUuICBDYXAgdGhlIGlucHV0IHNpemUgdG8gc29lbXdoZXJlCisgICBvdXIgaW5wdXQgZmlsZXMsIGZvciBleGFtcGxlLiAgQ2FwIHRoZSBpbnB1dCBzaXplIHRvIHNvbWV3aGVyZQogICAgYXJvdW5kIDFHQiBmb3Igbm93LgogCiAgKiBTb21lIHByb3RvY29scyAobGlrZSBnaXQtcmVtb3RlLWV4dCkgY2FuIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuNC50eHQKaW5kZXggYTVlODQ3Ny4uYjhhMmY5MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuNC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuNC50eHQKQEAgLTcsNyArNyw3IEBACiAgKiB4ZGlmZiBjb2RlIHdlIHVzZSB0byBnZW5lcmF0ZSBkaWZmcyBpcyBub3QgcHJlcGFyZWQgdG8gaGFuZGxlCiAgICBleHRyZW1lbHkgbGFyZ2UgZmlsZXMuICBJdCB1c2VzICJpbnQiIGluIG1hbnkgcGxhY2VzLCB3aGljaCBjYW4KICAgIG92ZXJmbG93IGlmIHdlIGhhdmUgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBsaW5lcyBvciBldmVuIGJ5dGVzIGluCi0gICBvdXIgaW5wdXQgZmlsZXMsIGZvciBleGFtcGxlLiAgQ2FwIHRoZSBpbnB1dCBzaXplIHRvIHNvZW13aGVyZQorICAgb3VyIGlucHV0IGZpbGVzLCBmb3IgZXhhbXBsZS4gIENhcCB0aGUgaW5wdXQgc2l6ZSB0byBzb21ld2hlcmUKICAgIGFyb3VuZCAxR0IgZm9yIG5vdy4KIAogICogU29tZSBwcm90b2NvbHMgKGxpa2UgZ2l0LXJlbW90ZS1leHQpIGNhbiBleGVjdXRlIGFyYml0cmFyeSBjb2RlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjEudHh0CmluZGV4IDFlNTEzNjMuLmYzN2VhODkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjEudHh0CkBAIC03LDcgKzcsNyBAQAogICogeGRpZmYgY29kZSB3ZSB1c2UgdG8gZ2VuZXJhdGUgZGlmZnMgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQogICAgZXh0cmVtZWx5IGxhcmdlIGZpbGVzLiAgSXQgdXNlcyAiaW50IiBpbiBtYW55IHBsYWNlcywgd2hpY2ggY2FuCiAgICBvdmVyZmxvdyBpZiB3ZSBoYXZlIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgbGluZXMgb3IgZXZlbiBieXRlcyBpbgotICAgb3VyIGlucHV0IGZpbGVzLCBmb3IgZXhhbXBsZS4gIENhcCB0aGUgaW5wdXQgc2l6ZSB0byBzb2Vtd2hlcmUKKyAgIG91ciBpbnB1dCBmaWxlcywgZm9yIGV4YW1wbGUuICBDYXAgdGhlIGlucHV0IHNpemUgdG8gc29tZXdoZXJlCiAgICBhcm91bmQgMUdCIGZvciBub3cuCiAKICAqIFNvbWUgcHJvdG9jb2xzIChsaWtlIGdpdC1yZW1vdGUtZXh0KSBjYW4gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzgzOTQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMS50eHQKQEAgLTAsMCArMSwxMTcgQEAKK0dpdCB2Mi45LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjkKKy0tLS0tLS0tLS0tLS0tLS0KKworICogV2hlbiAiZ2l0IGRhZW1vbiIgaXMgcnVuIHdpdGhvdXQgLS1baW5pdC1ddGltZW91dCBzcGVjaWZpZWQsIGEKKyAgIGNvbm5lY3Rpb24gZnJvbSBhIGNsaWVudCB0aGF0IHNpbGVudGx5IGdvZXMgb2ZmbGluZSBjYW4gaGFuZyBhcm91bmQKKyAgIGZvciBhIGxvbmcgdGltZSwgd2FzdGluZyByZXNvdXJjZXMuICBUaGUgc29ja2V0LWxldmVsIEtFRVBBTElWRSBoYXMKKyAgIGJlZW4gZW5hYmxlZCB0byBhbGxvdyB0aGUgT1MgdG8gbm90aWNlIHN1Y2ggZmFpbGVkIGNvbm5lY3Rpb25zLgorCisgKiBUaGUgY29tbWFuZHMgaW4gYGdpdCBsb2dgIGZhbWlseSB0YWtlICVDKGF1dG8pIGluIGEgY3VzdG9tIGZvcm1hdAorICAgc3RyaW5nLiAgVGhpcyB1bmNvbmRpdGlvbmFsbHkgdHVybmVkIHRoZSBjb2xvciBvbiwgaWdub3JpbmcKKyAgIC0tbm8tY29sb3Igb3Igd2l0aCAtLWNvbG9yPWF1dG8gd2hlbiB0aGUgb3V0cHV0IGlzIG5vdCBjb25uZWN0ZWQgdG8KKyAgIGEgdHR5OyB0aGlzIHdhcyBjb3JyZWN0ZWQgdG8gbWFrZSB0aGUgZm9ybWF0IHRydWx5IGJlaGF2ZSBhcworICAgImF1dG8iLgorCisgKiAiZ2l0IHJldi1saXN0IC0tY291bnQiIHdob3NlIHdhbGstbGVuZ3RoIGlzIGxpbWl0ZWQgd2l0aCAiLW4iCisgICBvcHRpb24gZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCB0aGUgY291bnRpbmcgb3B0aW1pemVkIHRvIGxvb2sgYXQgdGhlCisgICBiaXRtYXAgaW5kZXguCisKKyAqICJnaXQgc2hvdyAtVyIgKGV4dGVuZCBodW5rcyB0byBjb3ZlciB0aGUgZW50aXJlIGZ1bmN0aW9uLCBkZWxpbWl0ZWQKKyAgIGJ5IGxpbmVzIHRoYXQgbWF0Y2ggdGhlICJmdW5jbmFtZSIgcGF0dGVybikgdXNlZCB0byBzaG93IHRoZSBlbnRpcmUKKyAgIGZpbGUgd2hlbiBhIGNoYW5nZSBhZGRlZCBhbiBlbnRpcmUgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwKKyAgIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBzZXQgaGFzIGJlZW4gdXBkYXRlZCBzbyB0aGF0IGxpdGVyYWwgY29tbWFuZHMsCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBjb25zaXN0ZW50bHkKKyAgIHR5cGVzZXQgaW4gZml4ZWQtd2lkdGggZm9udCBhbmQgYm9sZCBpbiBtYW5wYWdlcy4KKworICogImdpdCBzdm4gcHJvcHNldCIgc3ViY29tbWFuZCB0aGF0IHdhcyBhZGRlZCBpbiAyLjMgZGF5cyBpcworICAgZG9jdW1lbnRlZCBub3cuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIHRyaWVzIHRvIGNvbnNpc3RlbnRseSBzcGVsbCAiR1BHIjsgd2hlbgorICAgcmVmZXJyaW5nIHRvIHRoZSBzcGVjaWZpYyBwcm9ncmFtIG5hbWUsICJncGciIGlzIHVzZWQuCisKKyAqICJnaXQgcmVmbG9nIiBzdG9wcGVkIHVwb24gc2VlaW5nIGFuIGVudHJ5IHRoYXQgZGVub3RlcyBhIGJyYW5jaAorICAgY3JlYXRpb24gZXZlbnQgKGFrYSAidW5ib3JuIiksIHdoaWNoIG1hZGUgaXQgYXBwZWFyIGFzIGlmIHRoZQorICAgcmVmbG9nIHdhcyB0cnVuY2F0ZWQuCisKKyAqIFRoZSBnaXQtcHJvbXB0IHNjcmlwdGxldCAoaW4gY29udHJpYi8pIHdhcyBub3QgZnJpZW5kbHkgd2l0aCB0aG9zZQorICAgd2hvIHVzZXMgInNldCAtdSIsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBBIGNvZGVwYXRoIHRoYXQgdXNlZCBhbGxvY2EoMykgdG8gcGxhY2UgYW4gdW5ib3VuZGVkIGFtb3VudCBvZiBkYXRhCisgICBvbiB0aGUgc3RhY2sgaGFzIGJlZW4gdXBkYXRlZCB0byBhdm9pZCBkb2luZyBzby4KKworICogImdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jaG1vZD0reCBmaWxlIiBtYXkgYmUgdXNhYmxlIGFzIGFuIGVzY2FwZQorICAgaGF0Y2gsIGJ1dCBub3QgYSBmcmllbmRseSB0aGluZyB0byBmb3JjZSBmb3IgcGVvcGxlIHdobyBkbyBuZWVkIHRvCisgICB1c2UgaXQgcmVndWxhcmx5LiAgImdpdCBhZGQgLS1jaG1vZD0reCBmaWxlIiBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorCisgKiBCdWlsZCBpbXByb3ZlbWVudHMgZm9yIGdub21lLWtleXJpbmcgKGluIGNvbnRyaWIvKQorCisgKiAiZ2l0IHN0YXR1cyIgdXNlZCB0byBzYXkgIndvcmtpbmcgZGlyZWN0b3J5IiB3aGVuIGl0IG1lYW50ICJ3b3JraW5nCisgICB0cmVlIi4KKworICogQ29tbWVudHMgYWJvdXQgbWlzYmVoYXZpbmcgRnJlZUJTRCBzaGVsbHMgaGF2ZSBiZWVuIGNsYXJpZmllZCB3aXRoCisgICB0aGUgdmVyc2lvbiBudW1iZXIgKDkueCBhbmQgYmVmb3JlIGFyZSBicm9rZW4sIG5ld2VyIG9uZXMgYXJlIE9LKS4KKworICogImdpdCBjaGVycnktcGljayBBIiB3b3JrZWQgb24gYW4gdW5ib3JuIGJyYW5jaCwgYnV0ICJnaXQKKyAgIGNoZXJyeS1waWNrIEEuLkIiIGRpZG4ndC4KKworICogImdpdCBhZGQgLWkvLXAiIGxlYXJuZWQgdG8gaG9ub3IgZGlmZi5jb21wYWN0aW9uSGV1cmlzdGljCisgICBleHBlcmltZW50YWwga25vYiwgc28gdGhhdCB0aGUgdXNlciBjYW4gd29yayBvbiB0aGUgc2FtZSBodW5rIHNwbGl0CisgICBhcyAiZ2l0IGRpZmYiIG91dHB1dC4KKworICogImxvZyAtLWdyYXBoIC0tZm9ybWF0PSIgbGVhcm5lZCB0aGF0ICIlPnwoTikiIHNwZWNpZmllcyB0aGUgd2lkdGgKKyAgIHJlbGF0aXZlIHRvIHRoZSB0ZXJtaW5hbCdzIGxlZnQgZWRnZSwgbm90IHJlbGF0aXZlIHRvIHRoZSBhcmVhIHRvCisgICBkcmF3IHRleHQgdGhhdCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIGFuY2VzdHJ5LWdyYXBoIHNlY3Rpb24uICBJdAorICAgYWxzbyBub3cgYWNjZXB0cyBuZWdhdGl2ZSBOIHRoYXQgbWVhbnMgdGhlIGNvbHVtbiBsaW1pdCBpcyByZWxhdGl2ZQorICAgdG8gdGhlIHJpZ2h0IGJvcmRlci4KKworICogVGhlIG93bmVyc2hpcCBydWxlIGZvciB0aGUgcGllY2Ugb2YgbWVtb3J5IHRoYXQgaG9sZCByZWZlcmVuY2VzIHRvCisgICBiZSBmZXRjaGVkIGluICJnaXQgZmV0Y2giIHdhcyBzY3Jld3ksIHdoaWNoIGhhcyBiZWVuIGNsZWFuZWQgdXAuCisKKyAqICJnaXQgYmlzZWN0IiBtYWtlcyBhbiBpbnRlcm5hbCBjYWxsIHRvICJnaXQgZGlmZi10cmVlIiB3aGVuCisgICBiaXNlY3Rpb24gZmluZHMgdGhlIGN1bHByaXQsIGJ1dCB0aGlzIGNhbGwgZGlkIG5vdCBpbml0aWFsaXplIHRoZQorICAgZGF0YSBzdHJ1Y3R1cmUgdG8gcGFzcyB0byB0aGUgZGlmZi10cmVlIEFQSSBjb3JyZWN0bHkuCisKKyAqIEZvcm1hdHMgb2YgdGhlIHZhcmlvdXMgZGF0YSAoYW5kIGhvdyB0byB2YWxpZGF0ZSB0aGVtKSB3aGVyZSB3ZSB1c2UKKyAgIEdQRyBzaWduYXR1cmUgaGF2ZSBiZWVuIGRvY3VtZW50ZWQuCisKKyAqIEZpeCBhbiB1bmludGVuZGVkIHJlZ3Jlc3Npb24gaW4gdjIuOSB0aGF0IGJyZWFrcyAiY2xvbmUgLS1kZXB0aCIKKyAgIHRoYXQgcmVjdXJzZXMgZG93biB0byBzdWJtb2R1bGVzIGJ5IGZvcmNpbmcgdGhlIHN1Ym1vZHVsZXMgdG8gYWxzbworICAgYmUgY2xvbmVkIHNoYWxsb3dseSwgd2hpY2ggbWFueSBzZXJ2ZXIgaW5zdGFuY2VzIHRoYXQgaG9zdCB1cHN0cmVhbQorICAgb2YgdGhlIHN1Ym1vZHVsZXMgYXJlIG5vdCBwcmVwYXJlZCBmb3IuCisKKyAqIEZpeCB1bm5lY2Vzc2FyaWx5IHdhc3RlIGluIHRoZSBpZGlvbWF0aWMgdXNlIG9mICc6ICR7VkFSPWRlZmF1bHR9JworICAgdG8gc2V0IHRoZSBkZWZhdWx0IHZhbHVlLCB3aXRob3V0IGVuY2xvc2luZyBpdCBpbiBkb3VibGUgcXVvdGVzLgorCisgKiBTb21lIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgaGFkIG5vbi1BTlNJIHN0cmljdCBkZWNsYXJhdGlvbnMgb2YgQworICAgZnVuY3Rpb25zIHRoYXQgZG8gbm90IHRha2UgYW55IHBhcmFtZXRlcnMsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFRoZSBpbnRlcm5hbCBjb2RlIHVzZWQgdG8gc2hvdyBsb2NhbCB0aW1lem9uZSBvZmZzZXQgaXMgbm90CisgICBwcmVwYXJlZCB0byBoYW5kbGUgdGltZXN0YW1wcyBiZXlvbmQgeWVhciAyMTAwLCBhbmQgZ2F2ZSBhCisgICBib2d1cyBvZmZzZXQgdmFsdWUgdG8gdGhlIGNhbGxlci4gIFVzZSBhIG1vcmUgYmVuaWduIGxvb2tpbmcKKyAgICswMDAwIGluc3RlYWQgYW5kIGxldCAiZ2l0IGxvZyIgZ29pbmcgaW4gc3VjaCBhIGNhc2UsIGluc3RlYWQKKyAgIG9mIGFib3J0aW5nLgorCisgKiBPbmUgYW1vbmcgZm91ciBpbnZvY2F0aW9ucyBvZiByZWFkbGluaygxKSBpbiBvdXIgdGVzdCBzdWl0ZSBoYXMKKyAgIGJlZW4gcmV3cml0dGVuIHNvIHRoYXQgdGhlIHRlc3QgY2FuIHJ1biBvbiBzeXN0ZW1zIHdpdGhvdXQgdGhlCisgICBjb21tYW5kIChvdGhlcnMgYXJlIGluIHZhbGdyaW5kIHRlc3QgZnJhbWV3b3JrIGFuZCB0OTgwMikuCisKKyAqIHQvcGVyZiBuZWVkcyAvdXNyL2Jpbi90aW1lIHdpdGggR05VIGV4dGVuc2lvbjsgdGhlIGludm9jYXRpb24gb2YgaXQKKyAgIGlzIHVwZGF0ZWQgdG8gImd0aW1lIiBvbiBEYXJ3aW4uCisKKyAqIEEgYnVnLCB3aGljaCBjYXVzZWQgImdpdCBwNCIgd2hpbGUgcnVubmluZyB1bmRlciB2ZXJib3NlIG1vZGUgdG8KKyAgIHJlcG9ydCBwYXRocyB0aGF0IGFyZSBvbWl0dGVkIGR1ZSB0byBicmFuY2ggcHJlZml4IGluY29ycmVjdGx5LCBoYXMKKyAgIGJlZW4gZml4ZWQ7IHRoZSBjb21tYW5kIHNhaWQgIklnbm9yaW5nIGZpbGUgb3V0c2lkZSBvZiBwcmVmaXgiIGZvcgorICAgcGF0aHMgdGhhdCBhcmUgX2luc2lkZV8uCisKKyAqIFRoZSB0b3AgbGV2ZWwgZG9jdW1lbnRhdGlvbiAiZ2l0IGhlbHAgZ2l0IiBzdGlsbCBwb2ludGVkIGF0IHRoZQorICAgZG9jdW1lbnRhdGlvbiBzZXQgaG9zdGVkIGF0IG5vdy1kZWZ1bmN0IGdvb2dsZS1jb2RlIHJlcG9zaXRvcnkuCisgICBVcGRhdGUgaXQgdG8gcG9pbnQgdG8gaHR0cHM6Ly9naXQuZ2l0aHViLmlvL2h0bWxkb2NzL2dpdC5odG1sCisgICBpbnN0ZWFkLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MjAwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4yLnR4dApAQCAtMCwwICsxLDEzIEBACitHaXQgdjIuOS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi45LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGZpeCBtZXJnZWQgdG8gdjIuOS4xIGhhZCBhIGZldyB0ZXN0cyB0aGF0IGFyZSBub3QgbWVhbnQgdG8gYmUKKyAgIHJ1biBvbiBwbGF0Zm9ybXMgd2l0aG91dCA2NC1iaXQgbG9uZywgd2hpY2ggY2F1c2VkIHVubmVjZXNzYXJ5CisgICB0ZXN0IGZhaWx1cmVzIG9uIHRoZW0gYmVjYXVzZSB3ZSBkaWRuJ3QgZGV0ZWN0IHRoZSBwbGF0Zm9ybSBhbmQKKyAgIHNraXAgdGhlbS4gIFRoZXNlIHRlc3RzIGFyZSBub3cgc2tpcHBlZCBvbiBwbGF0Zm9ybXMgdGhhdCB0aGV5CisgICBhcmUgbm90IGFwcGxpY2FibGUgdG8uCisKK05vIG90aGVyIGNoYW5nZSBpcyBpbmNsdWRlZCBpbiB0aGlzIHVwZGF0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5ZjE0NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjMudHh0CkBAIC0wLDAgKzEsMTYwIEBACitHaXQgdjIuOS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi45LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBjb250ZW50cyBvZiBhIGNvbW1pdCBvYmplY3QgYW5kCisgICBmaW5kcyBpdHMgc3ViamVjdCBsaW5lIGRpZCBub3QgaWdub3JlIGxlYWRpbmcgYmxhbmsgbGluZXMsIGFzIGlzCisgICBjb21tb25seSBkb25lIGJ5IG90aGVyIGNvZGVwYXRocy4gIE1ha2UgaXQgaWdub3JlIGxlYWRpbmcgYmxhbmsKKyAgIGxpbmVzIHRvIG1hdGNoLgorCisgKiBHaXQgZG9lcyBub3Qga25vdyB3aGF0IHRoZSBjb250ZW50cyBpbiB0aGUgaW5kZXggc2hvdWxkIGJlIGZvciBhCisgICBwYXRoIGFkZGVkIHdpdGggImdpdCBhZGQgLU4iIHlldCwgc28gImdpdCBncmVwIC0tY2FjaGVkIiBzaG91bGQgbm90CisgICBzaG93IGhpdHMgKG9yIHNob3cgbGFjayBvZiBoaXRzLCB3aXRoIC1MKSBpbiBzdWNoIGEgcGF0aCwgYnV0IHRoYXQKKyAgIGxvZ2ljIGRvZXMgbm90IGFwcGx5IHRvICJnaXQgZ3JlcCIsIGkuZS4gc2VhcmNoaW5nIGluIHRoZSB3b3JraW5nCisgICB0cmVlIGZpbGVzLiAgQnV0IHdlIGRpZCBzbyBieSBtaXN0YWtlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIC0tYXV0b3N0YXNoIiBkaWQgbm90IHJlc3RvcmUgdGhlIGF1dG8tc3Rhc2hlZCBjaGFuZ2UKKyAgIHdoZW4gdGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4KKworICogImdpdCBjb21taXQgLS1hbWVuZCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLVMiIGZvciBhIGNvbW1pdCB3aXRob3V0CisgICBhbnkgbWVzc2FnZSBib2R5IGNvdWxkIGhhdmUgbWlzaWRlbnRpZmllZCB3aGVyZSB0aGUgaGVhZGVyIG9mIHRoZQorICAgY29tbWl0IG9iamVjdCBlbmRzLgorCisgKiBNb3JlIG1hcmstdXAgdXBkYXRlcyB0byB0eXBlc2V0IHN0cmluZ3MgdGhhdCBhcmUgZXhwZWN0ZWQgdG8KKyAgIGxpdGVyYWxseSB0eXBlZCBieSB0aGUgZW5kIHVzZXIgaW4gZml4ZWQtd2lkdGggZm9udC4KKworICogRm9yIGEgbG9uZyB0aW1lLCB3ZSBjYXJyaWVkIGFuIGluLWNvZGUgY29tbWVudCB0aGF0IHNhaWQgb3VyCisgICBjb2xvcmVkIG91dHB1dCB3b3VsZCB3b3JrIG9ubHkgd2hlbiB3ZSB1c2UgZnByaW50Zi9mcHV0cyBvbgorICAgV2luZG93cywgd2hpY2ggbm8gbG9uZ2VyIGlzIHRoZSBjYXNlIGZvciB0aGUgcGFzdCBmZXcgeWVhcnMuCisKKyAqICJnYy5hdXRvUGFja0xpbWl0IiB3aGVuIHNldCB0byAxIHNob3VsZCBub3QgdHJpZ2dlciBhIHJlcGFja2luZworICAgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwYWNrLCBidXQgdGhlIGNvZGUgY291bnRlZCBwb29ybHkgYW5kIGRpZAorICAgc28uCisKKyAqIE9uZSBwYXJ0IG9mICJnaXQgYW0iIGhhZCBhbiBvZGRiYWxsIGhlbHBlciBmdW5jdGlvbiB0aGF0IGNhbGxlZAorICAgc3R1ZmYgZnJvbSBvdXRzaWRlICJoaXMiIGFzIG9wcG9zZWQgdG8gY2FsbGluZyB3aGF0IHdlIGhhdmUgIm91cnMiLAorICAgd2hpY2ggd2FzIG5vdCBnZW5kZXItbmV1dHJhbCBhbmQgYWxzbyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZgorICAgdGhlIHN5c3RlbSB3aGVyZSBvdXRzaWRlIHN0dWZmIGlzIHVzdWFsbCBjYWxsZWQgInRoZWlycyIgaW4KKyAgIGNvbnRyYXN0IHRvICJvdXJzIi4KKworICogVGhlIHRlc3QgZnJhbWV3b3JrIGxlYXJuZWQgYSBuZXcgaGVscGVyIHRlc3RfbWF0Y2hfc2lnbmFsIHRvCisgICBjaGVjayBhbiBleGl0IGNvZGUgZnJvbSBnZXR0aW5nIGtpbGxlZCBieSBhbiBleHBlY3RlZCBzaWduYWwuCisKKyAqICJnaXQgYmxhbWUgLU0iIG1pc3NlZCBhIHNpbmdsZSBsaW5lIHRoYXQgd2FzIG1vdmVkIHdpdGhpbiB0aGUgZmlsZS4KKworICogRml4IHJlY2VudGx5IGludHJvZHVjZWQgY29kZXBhdGhzIHRoYXQgYXJlIGludm9sdmVkIGluIHBhcmFsbGVsCisgICBzdWJtb2R1bGUgb3BlcmF0aW9ucywgd2hpY2ggZ2F2ZSB1cCBvbiByZWFkaW5nIHRvbyBlYXJseSwgYW5kCisgICBjb3VsZCBoYXZlIHdhc3RlZCBDUFUgd2hpbGUgYXR0ZW1wdGluZyB0byB3cml0ZSB1bmRlciBhIGNvcm5lcgorICAgY2FzZSBjb25kaXRpb24uCisKKyAqICJnaXQgZ3JlcCAtaSIgaGFzIGJlZW4gdGF1Z2h0IHRvIGZvbGQgY2FzZSBpbiBub24tYXNjaWkgbG9jYWxlcworICAgY29ycmVjdGx5LgorCisgKiBBIHRlc3QgdGhhdCB1bmNvbmRpdGlvbmFsbHkgdXNlZCAibWt0ZW1wIiBsZWFybmVkIHRoYXQgdGhlIGNvbW1hbmQKKyAgIGlzIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgZXZlcnl3aGVyZS4KKworICogImdpdCBibGFtZSBmaWxlIiBhbGxvd2VkIHRoZSBsaW5lYWdlIG9mIGxpbmVzIGluIHRoZSB1bmNvbW1pdHRlZCwKKyAgIHVuYWRkZWQgY29udGVudHMgb2YgImZpbGUiIHRvIGJlIGluc3BlY3RlZCwgYnV0IGl0IHJlZnVzZWQgd2hlbgorICAgImZpbGUiIGRpZCBub3QgYXBwZWFyIGluIHRoZSBjdXJyZW50IGNvbW1pdC4gIFdoZW4gImZpbGUiIHdhcworICAgY3JlYXRlZCBieSByZW5hbWluZyBhbiBleGlzdGluZyBmaWxlIChidXQgdGhlIGNoYW5nZSBoYXMgbm90IGJlZW4KKyAgIGNvbW1pdHRlZCksIHRoaXMgcmVzdHJpY3Rpb24gd2FzIHVubmVjZXNzYXJpbHkgdGlnaHQuCisKKyAqICJnaXQgYWRkIC1OIGRpci9maWxlICYmIGdpdCB3cml0ZS10cmVlIiBwcm9kdWNlZCBhbiBpbmNvcnJlY3QgdHJlZQorICAgd2hlbiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRoYXQgc29ydHMgYWZ0ZXIKKyAgICJmaWxlIi4KKworICogImdpdCBmZXRjaCBodHRwOi8vdXNlcjpwYXNzQGhvc3QvcmVwby4uLiIgc2NydWJiZWQgdGhlIHVzZXJpbmZvCisgICBwYXJ0LCBidXQgImdpdCBwdXNoIiBkaWRuJ3QuCisKKyAqIEFuIGFnZSBvbGQgYnVnIHRoYXQgY2F1c2VkICJnaXQgZGlmZiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wiCisgICBtaXNiZWhhdmUgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgbm90ZXMgbWVyZ2UiIGhhZCBhIGNvZGUgdG8gc2VlIGlmIGEgcGF0aCBleGlzdHMgKGFuZCBmYWlscyBpZgorICAgaXQgZG9lcykgYW5kIHRoZW4gb3BlbiB0aGUgcGF0aCBmb3Igd3JpdGluZyAod2hlbiBpdCBkb2Vzbid0KS4KKyAgIFJlcGxhY2UgaXQgd2l0aCBvcGVuIHdpdGggT19FWENMLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgYW5kICJnaXQgaW5kZXgtcGFjayIgbW9zdGx5IG9wZXJhdGUgd2l0aCBvZmZfdAorICAgd2hlbiB0YWxraW5nIGFib3V0IHRoZSBvZmZzZXQgb2Ygb2JqZWN0cyBpbiBhIHBhY2tmaWxlLCBidXQgdGhlcmUKKyAgIHdlcmUgYSBoYW5kZnVsIG9mIHBsYWNlcyB0aGF0IHVzZWQgInVuc2lnbmVkIGxvbmciIHRvIGhvbGQgdGhhdAorICAgdmFsdWUsIGxlYWRpbmcgdG8gYW4gdW5pbnRlbmRlZCB0cnVuY2F0aW9uLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvICJnaXQgZGFlbW9uIiB0cmllcyB0byBlbmFibGUgdGhlIHNvY2tldC1sZXZlbAorICAgS0VFUEFMSVZFLCBidXQgd2hlbiBpdCBpcyBzcGF3bmVkIHZpYSBpbmV0ZCwgdGhlIHN0YW5kYXJkIGlucHV0CisgICBmaWxlIGRlc2NyaXB0b3IgbWF5IG5vdCBuZWNlc3NhcmlseSBiZSBjb25uZWN0ZWQgdG8gYSBzb2NrZXQuCisgICBTdXBwcmVzcyBhbiBFTk9UU09DSyBlcnJvciBmcm9tIHNldHNvY2tvcHQoKS4KKworICogUmVjZW50IEZyZWVCU0Qgc3RvcHBlZCBtYWtpbmcgcGVybCBhdmFpbGFibGUgYXQgL3Vzci9iaW4vcGVybDsKKyAgIHN3aXRjaCB0aGUgZGVmYXVsdCB0aGUgYnVpbHQtaW4gcGF0aCB0byAvdXNyL2xvY2FsL2Jpbi9wZXJsIG9uIG5vdAorICAgdG9vIGFuY2llbnQgRnJlZUJTRCByZWxlYXNlcy4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgdG8gc3VnZ2VzdCAibWVyZ2UgLS1hYm9ydCIgZHVyaW5nIGEgY29uZmxpY3RlZAorICAgbWVyZ2UsIGp1c3QgbGlrZSBpdCBhbHJlYWR5IHN1Z2dlc3RzICJyZWJhc2UgLS1hYm9ydCIgZHVyaW5nIGEKKyAgIGNvbmZsaWN0ZWQgcmViYXNlLgorCisgKiBUaGUgLmMvLmggc291cmNlcyBhcmUgbWFya2VkIGFzIHN1Y2ggaW4gb3VyIC5naXRhdHRyaWJ1dGVzIGZpbGUgc28KKyAgIHRoYXQgImdpdCBkaWZmIC1XIiBhbmQgZnJpZW5kcyB3b3VsZCB3b3JrIGJldHRlci4KKworICogRXhpc3RpbmcgYXV0b2NvbmYgZ2VuZXJhdGVkIHRlc3QgZm9yIHRoZSBuZWVkIHRvIGxpbmsgd2l0aCBwdGhyZWFkCisgICBsaWJyYXJ5IGRpZCBub3QgY2hlY2sgYWxsIHRoZSBmdW5jdGlvbnMgZnJvbSBwdGhyZWFkIGxpYnJhcmllczsKKyAgIHJlY2VudCBGcmVlQlNEIGhhcyBzb21lIGZ1bmN0aW9ucyBpbiBsaWJjIGJ1dCBub3Qgb3RoZXJzLCBhbmQgd2UKKyAgIG1pc3Rha2VubHkgdGhvdWdodCBsaW5raW5nIHdpdGggbGliYyBpcyBlbm91Z2ggd2hlbiBpdCBpcyBub3QuCisKKyAqIEFsbG93IGh0dHAgZGFlbW9uIHRlc3RzIGluIFRyYXZpcyBDSSB0ZXN0cy4KKworICogVXNlcnMgb2YgdGhlIHBhcnNlX29wdGlvbnNfY29uY2F0KCkgQVBJIGZ1bmN0aW9uIG5lZWQgdG8gYWxsb2NhdGUKKyAgIGV4dHJhIHNsb3RzIGluIGFkdmFuY2UgYW5kIGZpbGwgdGhlbSB3aXRoIE9QVF9FTkQoKSB3aGVuIHRoZXkgd2FudAorICAgdG8gZGVjaWRlIHRoZSBzZXQgb2Ygc3VwcG9ydGVkIG9wdGlvbnMgZHluYW1pY2FsbHksIHdoaWNoIG1ha2VzIHRoZQorICAgY29kZSBlcnJvci1wcm9uZSBhbmQgaGFyZCB0byByZWFkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQgYnkgdHdlYWtpbmcKKyAgIHRoZSBBUEkgdG8gYWxsb2NhdGUgYW5kIHJldHVybiBhIG5ldyBjb3B5IG9mICJzdHJ1Y3Qgb3B0aW9uIiBhcnJheS4KKworICogVGhlIHVzZSBvZiBzdHJidWYgaW4gImdpdCBybSIgdG8gYnVpbGQgZmlsZW5hbWUgdG8gcmVtb3ZlIHdhcyBhIGJpdAorICAgc3Vib3B0aW1hbCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY29tbWl0IC0taGVscCIgc2FpZCAiLS1uby12ZXJpZnkiIGlzIG9ubHkgYWJvdXQgc2tpcHBpbmcgdGhlCisgICBwcmUtY29tbWl0IGhvb2ssIGFuZCBmYWlsZWQgdG8gc2F5IHRoYXQgaXQgYWxzbyBza2lwcGVkIHRoZQorICAgY29tbWl0LW1zZyBob29rLgorCisgKiAiZ2l0IG1lcmdlIiBpbiBHaXQgdjIuOSB3YXMgdGF1Z2h0IHRvIGZvcmJpZCBtZXJnaW5nIGFuIHVucmVsYXRlZAorICAgbGluZXMgb2YgaGlzdG9yeSBieSBkZWZhdWx0LCBidXQgdGhhdCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nCisgICB0aGUgIi0tcmVqb2luIiBtb2RlIG9mICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSB3YW50cyB0byBkby4KKyAgICJnaXQgc3VidHJlZSIgaGFzIGJlZW4gdGF1Z2h0IHRvIHVzZSB0aGUgIi0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyIKKyAgIG9wdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdC4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSBmb3IgImdpdCBwZXJzaXN0ZW50LWh0dHBzIiBoZWxwZXIgKGluIGNvbnRyaWIvKQorICAgaGFzIGJlZW4gdXBkYXRlZCBzbyB0aGF0IGl0IGNhbiBiZSBidWlsdCB3aXRoIG1vcmUgcmVjZW50IHZlcnNpb25zCisgICBvZiBHby4KKworICogVGhlcmUgaXMgYW4gb3B0aW1pemF0aW9uIHVzZWQgaW4gImdpdCBkaWZmICR0cmVlQSAkdHJlZUIiIHRvIGJvcnJvdworICAgYW4gYWxyZWFkeSBjaGVja2VkLW91dCBjb3B5IGluIHRoZSB3b3JraW5nIHRyZWUgd2hlbiBpdCBpcyBrbm93biB0bworICAgYmUgdGhlIHNhbWUgYXMgdGhlIGJsb2IgYmVpbmcgY29tcGFyZWQsIGV4cGVjdGluZyB0aGF0IG9wZW4vbW1hcCBvZgorICAgc3VjaCBhIGZpbGUgaXMgZmFzdGVyIHRoYW4gcmVhZGluZyBpdCBmcm9tIHRoZSBvYmplY3Qgc3RvcmUsIHdoaWNoCisgICBpbnZvbHZlcyBpbmZsYXRpbmcgYW5kIGFwcGx5aW5nIGRlbHRhLiAgVGhpcyBob3dldmVyIGtpY2tlZCBpbiBldmVuCisgICB3aGVuIHRoZSBjaGVja2VkLW91dCBjb3B5IG5lZWRzIHRvIGdvIHRocm91Z2ggdGhlIGNvbnZlcnQtdG8tZ2l0CisgICBjb252ZXJzaW9uIChpbmNsdWRpbmcgdGhlIGNsZWFuIGZpbHRlciksIHdoaWNoIGRlZmVhdHMgdGhlIHdob2xlCisgICBwb2ludCBvZiB0aGUgb3B0aW1pemF0aW9uLiAgVGhlIG9wdGltaXphdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCB3aGVuCisgICB0aGUgY29udmVyc2lvbiBpcyBuZWNlc3NhcnkuCisKKyAqICJnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1leHRlbmRlZCBsb2cgLS1iYXNpYy1yZWdleHAiIG1pc2JlaGF2ZWQKKyAgIGJlY2F1c2UgdGhlIGludGVybmFsIEFQSSB0byBhY2Nlc3MgdGhlIGdyZXAgbWFjaGluZXJ5IHdhcyBub3QKKyAgIGRlc2lnbmVkIHdlbGwuCisKKyAqIFdpbmRvd3MgcG9ydCB3YXMgZmFpbGluZyBzb21lIHRlc3RzIGluIHQ0MTMwLCBkdWUgdG8gdGhlIGxhY2sgb2YKKyAgIGludW0gaW4gdGhlIHJldHVybmVkIHZhbHVlcyBieSBpdHMgbHN0YXQoMikgZW11bGF0aW9uLgorCisgKiBUaGUgY2hhcmFjdGVycyBpbiB0aGUgbGFiZWwgc2hvd24gZm9yIHRhZ3MvcmVmcyBmb3IgY29tbWl0cyBpbgorICAgImdpdHdlYiIgb3V0cHV0IGFyZSBub3cgcHJvcGVybHkgZXNjYXBlZCBmb3IgcHJvcGVyIEhUTUwgb3V0cHV0LgorCisgKiBGcmVlQlNEIGNhbiBsaWUgd2hlbiBhc2tlZCBtdGltZSBvZiBhIGRpcmVjdG9yeSwgd2hpY2ggbWFkZSB0aGUKKyAgIHVudHJhY2tlZCBjYWNoZSBjb2RlIHRvIGZhbGwgYmFjayB0byBhIHNsb3ctcGF0aCwgd2hpY2ggaW4gdHVybgorICAgY2F1c2VkIHRlc3RzIGluIHQ3MDYzIHRvIGZhaWwgYmVjYXVzZSBpdCB3YW50ZWQgdG8gdmVyaWZ5IHRoZQorICAgYmVoYXZpb3VyIG9mIHRoZSBmYXN0LXBhdGguCisKKyAqIFNxdWVsY2ggY29tcGlsZXIgd2FybmluZ3MgZm9yIG5ldG1hbGxvYyAoaW4gY29tcGF0LykgbGlicmFyeS4KKworICogVGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBoYXNobWFwIHdhcyB1bmNsZWFyIGlmIGhhc2htYXBfZW50cnkKKyAgIGNhbiBiZSBzYWZlbHkgZGlzY2FyZGVkIHdpdGhvdXQgYW55IG90aGVyIGNvbnNpZGVyYXRpb24uICBTdGF0ZQorICAgdGhhdCBpdCBpcyBzYWZlIHRvIGRvIHNvLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKaW5kZXggMmUxYjJlNC4uMGJjYjY3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dApAQCAtMTQwLDcgKzE0MCw3IEBACiAgICAgICAgZmFsc2U7OyBCb29sZWFuIGZhbHNlIGNhbiBiZSBzcGVsbGVkIGFzIGBub2AsIGBvZmZgLAogCQlgZmFsc2VgLCBvciBgMGAuCiArCi1XaGVuIGNvbnZlcnRpbmcgdmFsdWUgdG8gdGhlIGNhbm9uaWNhbCBmb3JtIHVzaW5nICctLWJvb2wnIHR5cGUKK1doZW4gY29udmVydGluZyB2YWx1ZSB0byB0aGUgY2Fub25pY2FsIGZvcm0gdXNpbmcgYC0tYm9vbGAgdHlwZQogc3BlY2lmaWVyOyAnZ2l0IGNvbmZpZycgd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGlzICJ0cnVlIiBvcgogImZhbHNlIiAoc3BlbGxlZCBpbiBsb3dlcmNhc2UpLgogCkBAIC0xNTAsMjcgKzE1MCwzNCBAQAogICAgICAgIDEwMjQiLCAiYnkgMTAyNHgxMDI0IiwgZXRjLgogCiBjb2xvcjo6Ci0gICAgICAgVGhlIHZhbHVlIGZvciBhIHZhcmlhYmxlcyB0aGF0IHRha2VzIGEgY29sb3IgaXMgYSBsaXN0IG9mCi0gICAgICAgY29sb3JzIChhdCBtb3N0IHR3bykgYW5kIGF0dHJpYnV0ZXMgKGF0IG1vc3Qgb25lKSwgc2VwYXJhdGVkCi0gICAgICAgYnkgc3BhY2VzLiAgVGhlIGNvbG9ycyBhY2NlcHRlZCBhcmUgYG5vcm1hbGAsIGBibGFja2AsCi0gICAgICAgYHJlZGAsIGBncmVlbmAsIGB5ZWxsb3dgLCBgYmx1ZWAsIGBtYWdlbnRhYCwgYGN5YW5gIGFuZAotICAgICAgIGB3aGl0ZWA7IHRoZSBhdHRyaWJ1dGVzIGFyZSBgYm9sZGAsIGBkaW1gLCBgdWxgLCBgYmxpbmtgIGFuZAotICAgICAgIGByZXZlcnNlYC4gIFRoZSBmaXJzdCBjb2xvciBnaXZlbiBpcyB0aGUgZm9yZWdyb3VuZDsgdGhlCi0gICAgICAgc2Vjb25kIGlzIHRoZSBiYWNrZ3JvdW5kLiAgVGhlIHBvc2l0aW9uIG9mIHRoZSBhdHRyaWJ1dGUsIGlmCi0gICAgICAgYW55LCBkb2Vzbid0IG1hdHRlci4gQXR0cmlidXRlcyBtYXkgYmUgdHVybmVkIG9mZiBzcGVjaWZpY2FsbHkKLSAgICAgICBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIGBub2AgKGUuZy4sIGBub3JldmVyc2VgLCBgbm91bGAsIGV0YykuCisgICAgICAgVGhlIHZhbHVlIGZvciBhIHZhcmlhYmxlIHRoYXQgdGFrZXMgYSBjb2xvciBpcyBhIGxpc3Qgb2YKKyAgICAgICBjb2xvcnMgKGF0IG1vc3QgdHdvLCBvbmUgZm9yIGZvcmVncm91bmQgYW5kIG9uZSBmb3IgYmFja2dyb3VuZCkKKyAgICAgICBhbmQgYXR0cmlidXRlcyAoYXMgbWFueSBhcyB5b3Ugd2FudCksIHNlcGFyYXRlZCBieSBzcGFjZXMuCiArCi1Db2xvcnMgKGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQpIG1heSBhbHNvIGJlIGdpdmVuIGFzIG51bWJlcnMgYmV0d2VlbgotMCBhbmQgMjU1OyB0aGVzZSB1c2UgQU5TSSAyNTYtY29sb3IgbW9kZSAoYnV0IG5vdGUgdGhhdCBub3QgYWxsCi10ZXJtaW5hbHMgbWF5IHN1cHBvcnQgdGhpcykuICBJZiB5b3VyIHRlcm1pbmFsIHN1cHBvcnRzIGl0LCB5b3UgbWF5IGFsc28KLXNwZWNpZnkgMjQtYml0IFJHQiB2YWx1ZXMgYXMgaGV4LCBsaWtlIGAjZmYwYWIzYC4KK1RoZSBiYXNpYyBjb2xvcnMgYWNjZXB0ZWQgYXJlIGBub3JtYWxgLCBgYmxhY2tgLCBgcmVkYCwgYGdyZWVuYCwgYHllbGxvd2AsCitgYmx1ZWAsIGBtYWdlbnRhYCwgYGN5YW5gIGFuZCBgd2hpdGVgLiAgVGhlIGZpcnN0IGNvbG9yIGdpdmVuIGlzIHRoZQorZm9yZWdyb3VuZDsgdGhlIHNlY29uZCBpcyB0aGUgYmFja2dyb3VuZC4KICsKLVRoZSBhdHRyaWJ1dGVzIGFyZSBtZWFudCB0byBiZSByZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRlbQotaW4gdGhlIGNvbG9yZWQgb3V0cHV0LCBzbyBzZXR0aW5nIGNvbG9yLmRlY29yYXRlLmJyYW5jaCB0byBgYmxhY2tgCi13aWxsIHBhaW50IHRoYXQgYnJhbmNoIG5hbWUgaW4gYSBwbGFpbiBgYmxhY2tgLCBldmVuIGlmIHRoZSBwcmV2aW91cwotdGhpbmcgb24gdGhlIHNhbWUgb3V0cHV0IGxpbmUgKGUuZy4gb3BlbmluZyBwYXJlbnRoZXNpcyBiZWZvcmUgdGhlCi1saXN0IG9mIGJyYW5jaCBuYW1lcyBpbiBgbG9nIC0tZGVjb3JhdGVgIG91dHB1dCkgaXMgc2V0IHRvIGJlCi1wYWludGVkIHdpdGggYGJvbGRgIG9yIHNvbWUgb3RoZXIgYXR0cmlidXRlLgorQ29sb3JzIG1heSBhbHNvIGJlIGdpdmVuIGFzIG51bWJlcnMgYmV0d2VlbiAwIGFuZCAyNTU7IHRoZXNlIHVzZSBBTlNJCisyNTYtY29sb3IgbW9kZSAoYnV0IG5vdGUgdGhhdCBub3QgYWxsIHRlcm1pbmFscyBtYXkgc3VwcG9ydCB0aGlzKS4gIElmCit5b3VyIHRlcm1pbmFsIHN1cHBvcnRzIGl0LCB5b3UgbWF5IGFsc28gc3BlY2lmeSAyNC1iaXQgUkdCIHZhbHVlcyBhcworaGV4LCBsaWtlIGAjZmYwYWIzYC4KKysKK1RoZSBhY2NlcHRlZCBhdHRyaWJ1dGVzIGFyZSBgYm9sZGAsIGBkaW1gLCBgdWxgLCBgYmxpbmtgLCBgcmV2ZXJzZWAsCitgaXRhbGljYCwgYW5kIGBzdHJpa2VgIChmb3IgY3Jvc3NlZC1vdXQgb3IgInN0cmlrZXRocm91Z2giIGxldHRlcnMpLgorVGhlIHBvc2l0aW9uIG9mIGFueSBhdHRyaWJ1dGVzIHdpdGggcmVzcGVjdCB0byB0aGUgY29sb3JzCisoYmVmb3JlLCBhZnRlciwgb3IgaW4gYmV0d2VlbiksIGRvZXNuJ3QgbWF0dGVyLiBTcGVjaWZpYyBhdHRyaWJ1dGVzIG1heQorYmUgdHVybmVkIG9mZiBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIGBub2Agb3IgYG5vLWAgKGUuZy4sIGBub3JldmVyc2VgLAorYG5vLXVsYCwgZXRjKS4KKysKK0ZvciBnaXQncyBwcmUtZGVmaW5lZCBjb2xvciBzbG90cywgdGhlIGF0dHJpYnV0ZXMgYXJlIG1lYW50IHRvIGJlIHJlc2V0CithdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRlbSBpbiB0aGUgY29sb3JlZCBvdXRwdXQuIFNvIHNldHRpbmcKK2Bjb2xvci5kZWNvcmF0ZS5icmFuY2hgIHRvIGBibGFja2Agd2lsbCBwYWludCB0aGF0IGJyYW5jaCBuYW1lIGluIGEKK3BsYWluIGBibGFja2AsIGV2ZW4gaWYgdGhlIHByZXZpb3VzIHRoaW5nIG9uIHRoZSBzYW1lIG91dHB1dCBsaW5lIChlLmcuCitvcGVuaW5nIHBhcmVudGhlc2lzIGJlZm9yZSB0aGUgbGlzdCBvZiBicmFuY2ggbmFtZXMgaW4gYGxvZyAtLWRlY29yYXRlYAorb3V0cHV0KSBpcyBzZXQgdG8gYmUgcGFpbnRlZCB3aXRoIGBib2xkYCBvciBzb21lIG90aGVyIGF0dHJpYnV0ZS4KK0hvd2V2ZXIsIGN1c3RvbSBsb2cgZm9ybWF0cyBtYXkgZG8gbW9yZSBjb21wbGljYXRlZCBhbmQgbGF5ZXJlZAorY29sb3JpbmcsIGFuZCB0aGUgbmVnYXRlZCBmb3JtcyBtYXkgYmUgdXNlZnVsIHRoZXJlLgogCiBwYXRobmFtZTo6CiAJQSB2YXJpYWJsZSB0aGF0IHRha2VzIGEgcGF0aG5hbWUgdmFsdWUgY2FuIGJlIGdpdmVuIGEKQEAgLTQwNSwxMyArNDEyLDExIEBACiBtZWNoYW5pc20uCiAKIGNvcmUuYXV0b2NybGY6OgotCVNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byAidHJ1ZSIgaXMgYWxtb3N0IHRoZSBzYW1lIGFzIHNldHRpbmcKLQl0aGUgYHRleHRgIGF0dHJpYnV0ZSB0byAiYXV0byIgb24gYWxsIGZpbGVzIGV4Y2VwdCB0aGF0IHRleHQKLQlmaWxlcyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgbm9ybWFsaXplZDogZmlsZXMgdGhhdCBjb250YWluCi0JYENSTEZgIGluIHRoZSByZXBvc2l0b3J5IHdpbGwgbm90IGJlIHRvdWNoZWQuICBVc2UgdGhpcwotCXNldHRpbmcgaWYgeW91IHdhbnQgdG8gaGF2ZSBgQ1JMRmAgbGluZSBlbmRpbmdzIGluIHlvdXIKLQl3b3JraW5nIGRpcmVjdG9yeSBldmVuIHRob3VnaCB0aGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBoYXZlCi0Jbm9ybWFsaXplZCBsaW5lIGVuZGluZ3MuICBUaGlzIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gJ2lucHV0JywKKwlTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gInRydWUiIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcKKwl0aGUgYHRleHRgIGF0dHJpYnV0ZSB0byAiYXV0byIgb24gYWxsIGZpbGVzIGFuZCBjb3JlLmVvbCB0byAiY3JsZiIuCisJU2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gaGF2ZSBgQ1JMRmAgbGluZSBlbmRpbmdzIGluIHlvdXIKKwl3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGhlIHJlcG9zaXRvcnkgaGFzIExGIGxpbmUgZW5kaW5ncy4KKwlUaGlzIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gJ2lucHV0JywKIAlpbiB3aGljaCBjYXNlIG5vIG91dHB1dCBjb252ZXJzaW9uIGlzIHBlcmZvcm1lZC4KIAogY29yZS5zeW1saW5rczo6CkBAIC00MzQsNyArNDM5LDcgQEAKIAltYXkgYmUgc2V0IG11bHRpcGxlIHRpbWVzIGFuZCBpcyBtYXRjaGVkIGluIHRoZSBnaXZlbiBvcmRlcjsKIAl0aGUgZmlyc3QgbWF0Y2ggd2lucy4KICsKLUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX1BST1hZX0NPTU1BTkQnIGVudmlyb25tZW50IHZhcmlhYmxlCitDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9QUk9YWV9DT01NQU5EYCBlbnZpcm9ubWVudCB2YXJpYWJsZQogKHdoaWNoIGFsd2F5cyBhcHBsaWVzIHVuaXZlcnNhbGx5LCB3aXRob3V0IHRoZSBzcGVjaWFsICJmb3IiCiBoYW5kbGluZykuCiArCkBAIC00NDMsNiArNDQ4LDEzIEBACiBUaGlzIGlzIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIHNlcnZlcnMgaW5zaWRlIGEgZmlyZXdhbGwgZnJvbQogcHJveHkgdXNlLCB3aGlsZSBkZWZhdWx0aW5nIHRvIGEgY29tbW9uIHByb3h5IGZvciBleHRlcm5hbCBkb21haW5zLgogCitjb3JlLnNzaENvbW1hbmQ6OgorCUlmIHRoaXMgdmFyaWFibGUgaXMgc2V0LCBgZ2l0IGZldGNoYCBhbmQgYGdpdCBwdXNoYCB3aWxsCisJdXNlIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBpbnN0ZWFkIG9mIGBzc2hgIHdoZW4gdGhleSBuZWVkIHRvCisJY29ubmVjdCB0byBhIHJlbW90ZSBzeXN0ZW0uIFRoZSBjb21tYW5kIGlzIGluIHRoZSBzYW1lIGZvcm0gYXMKKwl0aGUgYEdJVF9TU0hfQ09NTUFORGAgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGlzIG92ZXJyaWRkZW4KKwl3aGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuCisKIGNvcmUuaWdub3JlU3RhdDo6CiAJSWYgdHJ1ZSwgR2l0IHdpbGwgYXZvaWQgdXNpbmcgbHN0YXQoKSBjYWxscyB0byBkZXRlY3QgaWYgZmlsZXMgaGF2ZQogCWNoYW5nZWQgYnkgc2V0dGluZyB0aGUgImFzc3VtZS11bmNoYW5nZWQiIGJpdCBmb3IgdGhvc2UgdHJhY2tlZCBmaWxlcwpAQCAtNDc4LDEwICs0OTAsMTAgQEAKIAogY29yZS53b3JrdHJlZTo6CiAJU2V0IHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUuCi0JSWYgR0lUX0NPTU1PTl9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBjb3JlLndvcmt0cmVlCisJSWYgYEdJVF9DT01NT05fRElSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGNvcmUud29ya3RyZWUKIAlpcyBpZ25vcmVkIGFuZCBub3QgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHJvb3Qgb2Ygd29ya2luZyB0cmVlLgotCVRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQKLQl2YXJpYWJsZSBhbmQgdGhlICctLXdvcmstdHJlZScgY29tbWFuZC1saW5lIG9wdGlvbi4KKwlUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX1dPUktfVFJFRWAgZW52aXJvbm1lbnQKKwl2YXJpYWJsZSBhbmQgdGhlIGAtLXdvcmstdHJlZWAgY29tbWFuZC1saW5lIG9wdGlvbi4KIAlUaGUgdmFsdWUgY2FuIGJlIGFuIGFic29sdXRlIHBhdGggb3IgcmVsYXRpdmUgdG8gdGhlIHBhdGggdG8KIAl0aGUgLmdpdCBkaXJlY3RvcnksIHdoaWNoIGlzIGVpdGhlciBzcGVjaWZpZWQgYnkgLS1naXQtZGlyCiAJb3IgR0lUX0RJUiwgb3IgYXV0b21hdGljYWxseSBkaXNjb3ZlcmVkLgpAQCAtNTQ1LDcgKzU1Nyw3IEBACiAJLTEgaXMgdGhlIHpsaWIgZGVmYXVsdC4gMCBtZWFucyBubyBjb21wcmVzc2lvbiwKIAlhbmQgMS4uOSBhcmUgdmFyaW91cyBzcGVlZC9zaXplIHRyYWRlb2ZmcywgOSBiZWluZyBzbG93ZXN0LgogCUlmIHNldCwgdGhpcyBwcm92aWRlcyBhIGRlZmF1bHQgdG8gb3RoZXIgY29tcHJlc3Npb24gdmFyaWFibGVzLAotCXN1Y2ggYXMgJ2NvcmUubG9vc2VDb21wcmVzc2lvbicgYW5kICdwYWNrLmNvbXByZXNzaW9uJy4KKwlzdWNoIGFzIGBjb3JlLmxvb3NlQ29tcHJlc3Npb25gIGFuZCBgcGFjay5jb21wcmVzc2lvbmAuCiAKIGNvcmUubG9vc2VDb21wcmVzc2lvbjo6CiAJQW4gaW50ZWdlciAtMS4uOSwgaW5kaWNhdGluZyB0aGUgY29tcHJlc3Npb24gbGV2ZWwgZm9yIG9iamVjdHMgdGhhdApAQCAtNjE5LDkgKzYzMSw5IEBACiBjb3JlLmFza1Bhc3M6OgogCVNvbWUgY29tbWFuZHMgKGUuZy4gc3ZuIGFuZCBodHRwIGludGVyZmFjZXMpIHRoYXQgaW50ZXJhY3RpdmVseQogCWFzayBmb3IgYSBwYXNzd29yZCBjYW4gYmUgdG9sZCB0byB1c2UgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBnaXZlbgotCXZpYSB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZS4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfQVNLUEFTUycKKwl2aWEgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX0FTS1BBU1NgCiAJZW52aXJvbm1lbnQgdmFyaWFibGUuIElmIG5vdCBzZXQsIGZhbGwgYmFjayB0byB0aGUgdmFsdWUgb2YgdGhlCi0JJ1NTSF9BU0tQQVNTJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciwgZmFpbGluZyB0aGF0LCBhIHNpbXBsZSBwYXNzd29yZAorCWBTU0hfQVNLUEFTU2AgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IsIGZhaWxpbmcgdGhhdCwgYSBzaW1wbGUgcGFzc3dvcmQKIAlwcm9tcHQuIFRoZSBleHRlcm5hbCBwcm9ncmFtIHNoYWxsIGJlIGdpdmVuIGEgc3VpdGFibGUgcHJvbXB0IGFzCiAJY29tbWFuZC1saW5lIGFyZ3VtZW50IGFuZCB3cml0ZSB0aGUgcGFzc3dvcmQgb24gaXRzIFNURE9VVC4KIApAQCAtNzY0LDcgKzc3Niw3IEBACiAJbm90ZXMgc2hvdWxkIGJlIHByaW50ZWQuCiArCiBUaGlzIHNldHRpbmcgZGVmYXVsdHMgdG8gInJlZnMvbm90ZXMvY29tbWl0cyIsIGFuZCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBieQotdGhlICdHSVRfTk9URVNfUkVGJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFNlZSBsaW5rZ2l0OmdpdC1ub3Rlc1sxXS4KK3RoZSBgR0lUX05PVEVTX1JFRmAgZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgbGlua2dpdDpnaXQtbm90ZXNbMV0uCiAKIGNvcmUuc3BhcnNlQ2hlY2tvdXQ6OgogCUVuYWJsZSAic3BhcnNlIGNoZWNrb3V0IiBmZWF0dXJlLiBTZWUgc2VjdGlvbiAiU3BhcnNlIGNoZWNrb3V0IiBpbgpAQCAtNzc5LDcgKzc5MSw3IEBACiBhZGQuaWdub3JlRXJyb3JzOjoKIGFkZC5pZ25vcmUtZXJyb3JzIChkZXByZWNhdGVkKTo6CiAJVGVsbHMgJ2dpdCBhZGQnIHRvIGNvbnRpbnVlIGFkZGluZyBmaWxlcyB3aGVuIHNvbWUgZmlsZXMgY2Fubm90IGJlCi0JYWRkZWQgZHVlIHRvIGluZGV4aW5nIGVycm9ycy4gRXF1aXZhbGVudCB0byB0aGUgJy0taWdub3JlLWVycm9ycycKKwlhZGRlZCBkdWUgdG8gaW5kZXhpbmcgZXJyb3JzLiBFcXVpdmFsZW50IHRvIHRoZSBgLS1pZ25vcmUtZXJyb3JzYAogCW9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0uICBgYWRkLmlnbm9yZS1lcnJvcnNgIGlzIGRlcHJlY2F0ZWQsCiAJYXMgaXQgZG9lcyBub3QgZm9sbG93IHRoZSB1c3VhbCBuYW1pbmcgY29udmVudGlvbiBmb3IgY29uZmlndXJhdGlvbgogCXZhcmlhYmxlcy4KQEAgLTgwMCwxNCArODEyLDE0IEBACiAiZ2l0ayAtLWFsbCAtLW5vdCBPUklHX0hFQUQiLiAgTm90ZSB0aGF0IHNoZWxsIGNvbW1hbmRzIHdpbGwgYmUKIGV4ZWN1dGVkIGZyb20gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgYSByZXBvc2l0b3J5LCB3aGljaCBtYXkKIG5vdCBuZWNlc3NhcmlseSBiZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0nR0lUX1BSRUZJWCcgaXMgc2V0IGFzIHJldHVybmVkIGJ5IHJ1bm5pbmcgJ2dpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeCcKK2BHSVRfUFJFRklYYCBpcyBzZXQgYXMgcmV0dXJuZWQgYnkgcnVubmluZyAnZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4JwogZnJvbSB0aGUgb3JpZ2luYWwgY3VycmVudCBkaXJlY3RvcnkuIFNlZSBsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0uCiAKIGFtLmtlZXBjcjo6CiAJSWYgdHJ1ZSwgZ2l0LWFtIHdpbGwgY2FsbCBnaXQtbWFpbHNwbGl0IGZvciBwYXRjaGVzIGluIG1ib3ggZm9ybWF0Ci0Jd2l0aCBwYXJhbWV0ZXIgJy0ta2VlcC1jcicuIEluIHRoaXMgY2FzZSBnaXQtbWFpbHNwbGl0IHdpbGwKKwl3aXRoIHBhcmFtZXRlciBgLS1rZWVwLWNyYC4gSW4gdGhpcyBjYXNlIGdpdC1tYWlsc3BsaXQgd2lsbAogCW5vdCByZW1vdmUgYFxyYCBmcm9tIGxpbmVzIGVuZGluZyB3aXRoIGBcclxuYC4gQ2FuIGJlIG92ZXJyaWRkZW4KLQlieSBnaXZpbmcgJy0tbm8ta2VlcC1jcicgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCWJ5IGdpdmluZyBgLS1uby1rZWVwLWNyYCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCiAJU2VlIGxpbmtnaXQ6Z2l0LWFtWzFdLCBsaW5rZ2l0OmdpdC1tYWlsc3BsaXRbMV0uCiAKIGFtLnRocmVlV2F5OjoKQEAgLTgyMCw3ICs4MzIsNyBAQAogCiBhcHBseS5pZ25vcmVXaGl0ZXNwYWNlOjoKIAlXaGVuIHNldCB0byAnY2hhbmdlJywgdGVsbHMgJ2dpdCBhcHBseScgdG8gaWdub3JlIGNoYW5nZXMgaW4KLQl3aGl0ZXNwYWNlLCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlICctLWlnbm9yZS1zcGFjZS1jaGFuZ2UnCisJd2hpdGVzcGFjZSwgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBgLS1pZ25vcmUtc3BhY2UtY2hhbmdlYAogCW9wdGlvbi4KIAlXaGVuIHNldCB0byBvbmUgb2Y6IG5vLCBub25lLCBuZXZlciwgZmFsc2UgdGVsbHMgJ2dpdCBhcHBseScgdG8KIAlyZXNwZWN0IGFsbCB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzLgpAQCAtODI4LDcgKzg0MCw3IEBACiAKIGFwcGx5LndoaXRlc3BhY2U6OgogCVRlbGxzICdnaXQgYXBwbHknIGhvdyB0byBoYW5kbGUgd2hpdGVzcGFjZXMsIGluIHRoZSBzYW1lIHdheQotCWFzIHRoZSAnLS13aGl0ZXNwYWNlJyBvcHRpb24uIFNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXS4KKwlhcyB0aGUgYC0td2hpdGVzcGFjZWAgb3B0aW9uLiBTZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0uCiAKIGJyYW5jaC5hdXRvU2V0dXBNZXJnZTo6CiAJVGVsbHMgJ2dpdCBicmFuY2gnIGFuZCAnZ2l0IGNoZWNrb3V0JyB0byBzZXQgdXAgbmV3IGJyYW5jaGVzCkBAIC05MzAsNyArOTQyLDcgQEAKIAogYnJvd3Nlci48dG9vbD4ucGF0aDo6CiAJT3ZlcnJpZGUgdGhlIHBhdGggZm9yIHRoZSBnaXZlbiB0b29sIHRoYXQgbWF5IGJlIHVzZWQgdG8KLQlicm93c2UgSFRNTCBoZWxwIChzZWUgJy13JyBvcHRpb24gaW4gbGlua2dpdDpnaXQtaGVscFsxXSkgb3IgYQorCWJyb3dzZSBIVE1MIGhlbHAgKHNlZSBgLXdgIG9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1oZWxwWzFdKSBvciBhCiAJd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiAoc2VlIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdKS4KIAogY2xlYW4ucmVxdWlyZUZvcmNlOjoKQEAgLTExODksNiArMTIwMSwxNSBAQAogZGlmZnRvb2wucHJvbXB0OjoKIAlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgZGlmZiB0b29sLgogCitmYXN0aW1wb3J0LnVucGFja0xpbWl0OjoKKwlJZiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW1wb3J0ZWQgYnkgbGlua2dpdDpnaXQtZmFzdC1pbXBvcnRbMV0KKwlpcyBiZWxvdyB0aGlzIGxpbWl0LCB0aGVuIHRoZSBvYmplY3RzIHdpbGwgYmUgdW5wYWNrZWQgaW50bworCWxvb3NlIG9iamVjdCBmaWxlcy4gIEhvd2V2ZXIgaWYgdGhlIG51bWJlciBvZiBpbXBvcnRlZCBvYmplY3RzCisJZXF1YWxzIG9yIGV4Y2VlZHMgdGhpcyBsaW1pdCB0aGVuIHRoZSBwYWNrIHdpbGwgYmUgc3RvcmVkIGFzIGEKKwlwYWNrLiAgU3RvcmluZyB0aGUgcGFjayBmcm9tIGEgZmFzdC1pbXBvcnQgY2FuIG1ha2UgdGhlIGltcG9ydAorCW9wZXJhdGlvbiBjb21wbGV0ZSBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gc2xvdyBmaWxlc3lzdGVtcy4gIElmCisJbm90IHNldCwgdGhlIHZhbHVlIG9mIGB0cmFuc2Zlci51bnBhY2tMaW1pdGAgaXMgdXNlZCBpbnN0ZWFkLgorCiBmZXRjaC5yZWN1cnNlU3VibW9kdWxlczo6CiAJVGhpcyBvcHRpb24gY2FuIGJlIGVpdGhlciBzZXQgdG8gYSBib29sZWFuIHZhbHVlIG9yIHRvICdvbi1kZW1hbmQnLgogCVNldHRpbmcgaXQgdG8gYSBib29sZWFuIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIGZldGNoIGFuZCBwdWxsIHRvCkBAIC0xMjIwLDYgKzEyNDEsMTEgQEAKIAlJZiB0cnVlLCBmZXRjaCB3aWxsIGF1dG9tYXRpY2FsbHkgYmVoYXZlIGFzIGlmIHRoZSBgLS1wcnVuZWAKIAlvcHRpb24gd2FzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuICBTZWUgYWxzbyBgcmVtb3RlLjxuYW1lPi5wcnVuZWAuCiAKK2ZldGNoLm91dHB1dDo6CisJQ29udHJvbCBob3cgcmVmIHVwZGF0ZSBzdGF0dXMgaXMgcHJpbnRlZC4gVmFsaWQgdmFsdWVzIGFyZQorCWBmdWxsYCBhbmQgYGNvbXBhY3RgLiBEZWZhdWx0IHZhbHVlIGlzIGBmdWxsYC4gU2VlIHNlY3Rpb24KKwlPVVRQVVQgaW4gbGlua2dpdDpnaXQtZmV0Y2hbMV0gZm9yIGRldGFpbC4KKwogZm9ybWF0LmF0dGFjaDo6CiAJRW5hYmxlIG11bHRpcGFydC9taXhlZCBhdHRhY2htZW50cyBhcyB0aGUgZGVmYXVsdCBmb3IKIAknZm9ybWF0LXBhdGNoJy4gIFRoZSB2YWx1ZSBjYW4gYWxzbyBiZSBhIGRvdWJsZSBxdW90ZWQgc3RyaW5nCkBAIC0xMjI3LDYgKzEyNTMsMTYgQEAKIAl2YWx1ZSBhcyB0aGUgYm91bmRhcnkuICBTZWUgdGhlIC0tYXR0YWNoIG9wdGlvbiBpbgogCWxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KIAorZm9ybWF0LmZyb206OgorCVByb3ZpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYC0tZnJvbWAgb3B0aW9uIHRvIGZvcm1hdC1wYXRjaC4KKwlBY2NlcHRzIGEgYm9vbGVhbiB2YWx1ZSwgb3IgYSBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzLiAgSWYgZmFsc2UsCisJZm9ybWF0LXBhdGNoIGRlZmF1bHRzIHRvIGAtLW5vLWZyb21gLCB1c2luZyBjb21taXQgYXV0aG9ycyBkaXJlY3RseSBpbgorCXRoZSAiRnJvbToiIGZpZWxkIG9mIHBhdGNoIG1haWxzLiAgSWYgdHJ1ZSwgZm9ybWF0LXBhdGNoIGRlZmF1bHRzIHRvCisJYC0tZnJvbWAsIHVzaW5nIHlvdXIgY29tbWl0dGVyIGlkZW50aXR5IGluIHRoZSAiRnJvbToiIGZpZWxkIG9mIHBhdGNoCisJbWFpbHMgYW5kIGluY2x1ZGluZyBhICJGcm9tOiIgZmllbGQgaW4gdGhlIGJvZHkgb2YgdGhlIHBhdGNoIG1haWwgaWYKKwlkaWZmZXJlbnQuICBJZiBzZXQgdG8gYSBub24tYm9vbGVhbiB2YWx1ZSwgZm9ybWF0LXBhdGNoIHVzZXMgdGhhdAorCXZhbHVlIGluc3RlYWQgb2YgeW91ciBjb21taXR0ZXIgaWRlbnRpdHkuICBEZWZhdWx0cyB0byBmYWxzZS4KKwogZm9ybWF0Lm51bWJlcmVkOjoKIAlBIGJvb2xlYW4gd2hpY2ggY2FuIGVuYWJsZSBvciBkaXNhYmxlIHNlcXVlbmNlIG51bWJlcnMgaW4gcGF0Y2gKIAlzdWJqZWN0cy4gIEl0IGRlZmF1bHRzIHRvICJhdXRvIiB3aGljaCBlbmFibGVzIGl0IG9ubHkgaWYgdGhlcmUKQEAgLTE0MjAsMjQgKzE0NTYsMjQgQEAKIAogZ2l0Y3ZzLnVzZWNybGZhdHRyOjoKIAlJZiB0cnVlLCB0aGUgc2VydmVyIHdpbGwgbG9vayB1cCB0aGUgZW5kLW9mLWxpbmUgY29udmVyc2lvbgotCWF0dHJpYnV0ZXMgZm9yIGZpbGVzIHRvIGRldGVybWluZSB0aGUgJy1rJyBtb2RlcyB0byB1c2UuIElmCisJYXR0cmlidXRlcyBmb3IgZmlsZXMgdG8gZGV0ZXJtaW5lIHRoZSBgLWtgIG1vZGVzIHRvIHVzZS4gSWYKIAl0aGUgYXR0cmlidXRlcyBmb3JjZSBHaXQgdG8gdHJlYXQgYSBmaWxlIGFzIHRleHQsCi0JdGhlICctaycgbW9kZSB3aWxsIGJlIGxlZnQgYmxhbmsgc28gQ1ZTIGNsaWVudHMgd2lsbAorCXRoZSBgLWtgIG1vZGUgd2lsbCBiZSBsZWZ0IGJsYW5rIHNvIENWUyBjbGllbnRzIHdpbGwKIAl0cmVhdCBpdCBhcyB0ZXh0LiBJZiB0aGV5IHN1cHByZXNzIHRleHQgY29udmVyc2lvbiwgdGhlIGZpbGUKIAl3aWxsIGJlIHNldCB3aXRoICcta2InIG1vZGUsIHdoaWNoIHN1cHByZXNzZXMgYW55IG5ld2xpbmUgbXVuZ2luZwogCXRoZSBjbGllbnQgbWlnaHQgb3RoZXJ3aXNlIGRvLiBJZiB0aGUgYXR0cmlidXRlcyBkbyBub3QgYWxsb3cKLQl0aGUgZmlsZSB0eXBlIHRvIGJlIGRldGVybWluZWQsIHRoZW4gJ2dpdGN2cy5hbGxCaW5hcnknIGlzCisJdGhlIGZpbGUgdHlwZSB0byBiZSBkZXRlcm1pbmVkLCB0aGVuIGBnaXRjdnMuYWxsQmluYXJ5YCBpcwogCXVzZWQuIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0uCiAKIGdpdGN2cy5hbGxCaW5hcnk6OgotCVRoaXMgaXMgdXNlZCBpZiAnZ2l0Y3ZzLnVzZWNybGZhdHRyJyBkb2VzIG5vdCByZXNvbHZlCisJVGhpcyBpcyB1c2VkIGlmIGBnaXRjdnMudXNlY3JsZmF0dHJgIGRvZXMgbm90IHJlc29sdmUKIAl0aGUgY29ycmVjdCAnLWtiJyBtb2RlIHRvIHVzZS4gSWYgdHJ1ZSwgYWxsCiAJdW5yZXNvbHZlZCBmaWxlcyBhcmUgc2VudCB0byB0aGUgY2xpZW50IGluCiAJbW9kZSAnLWtiJy4gVGhpcyBjYXVzZXMgdGhlIGNsaWVudCB0byB0cmVhdCB0aGVtCiAJYXMgYmluYXJ5IGZpbGVzLCB3aGljaCBzdXBwcmVzc2VzIGFueSBuZXdsaW5lIG11bmdpbmcgaXQKIAlvdGhlcndpc2UgbWlnaHQgZG8uIEFsdGVybmF0aXZlbHksIGlmIGl0IGlzIHNldCB0byAiZ3Vlc3MiLAogCXRoZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGFyZSBleGFtaW5lZCB0byBkZWNpZGUgaWYKLQlpdCBpcyBiaW5hcnksIHNpbWlsYXIgdG8gJ2NvcmUuYXV0b2NybGYnLgorCWl0IGlzIGJpbmFyeSwgc2ltaWxhciB0byBgY29yZS5hdXRvY3JsZmAuCiAKIGdpdGN2cy5kYk5hbWU6OgogCURhdGFiYXNlIHVzZWQgYnkgZ2l0LWN2c3NlcnZlciB0byBjYWNoZSByZXZpc2lvbiBpbmZvcm1hdGlvbgpAQCAtMTQ1Niw3ICsxNDkyLDcgQEAKIAlTZWUgbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdLgogCiBnaXRjdnMuZGJVc2VyLCBnaXRjdnMuZGJQYXNzOjoKLQlEYXRhYmFzZSB1c2VyIGFuZCBwYXNzd29yZC4gT25seSB1c2VmdWwgaWYgc2V0dGluZyAnZ2l0Y3ZzLmRiRHJpdmVyJywKKwlEYXRhYmFzZSB1c2VyIGFuZCBwYXNzd29yZC4gT25seSB1c2VmdWwgaWYgc2V0dGluZyBgZ2l0Y3ZzLmRiRHJpdmVyYCwKIAlzaW5jZSBTUUxpdGUgaGFzIG5vIGNvbmNlcHQgb2YgZGF0YWJhc2UgdXNlcnMgYW5kL29yIHBhc3N3b3Jkcy4KIAknZ2l0Y3ZzLmRiVXNlcicgc3VwcG9ydHMgdmFyaWFibGUgc3Vic3RpdHV0aW9uIChzZWUKIAlsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0gZm9yIGRldGFpbHMpLgpAQCAtMTQ2OCw4ICsxNTA0LDggQEAKIAlsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0gZm9yIGRldGFpbHMpLiAgQW55IG5vbi1hbHBoYWJldGljCiAJY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdW5kZXJzY29yZXMuCiAKLUFsbCBnaXRjdnMgdmFyaWFibGVzIGV4Y2VwdCBmb3IgJ2dpdGN2cy51c2VjcmxmYXR0cicgYW5kCi0nZ2l0Y3ZzLmFsbEJpbmFyeScgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGFzCitBbGwgZ2l0Y3ZzIHZhcmlhYmxlcyBleGNlcHQgZm9yIGBnaXRjdnMudXNlY3JsZmF0dHJgIGFuZAorYGdpdGN2cy5hbGxCaW5hcnlgIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBhcwogJ2dpdGN2cy48YWNjZXNzX21ldGhvZD4uPHZhcm5hbWU+JyAod2hlcmUgJ2FjY2Vzc19tZXRob2QnCiBpcyBvbmUgb2YgImV4dCIgYW5kICJwc2VydmVyIikgdG8gbWFrZSB0aGVtIGFwcGx5IG9ubHkgZm9yIHRoZSBnaXZlbgogYWNjZXNzIG1ldGhvZC4KQEAgLTE0OTIsMTcgKzE1MjgsMTcgQEAKIAlTZWUgbGlua2dpdDpnaXR3ZWIuY29uZls1XSBmb3IgZGVzY3JpcHRpb24uCiAKIGdyZXAubGluZU51bWJlcjo6Ci0JSWYgc2V0IHRvIHRydWUsIGVuYWJsZSAnLW4nIG9wdGlvbiBieSBkZWZhdWx0LgorCUlmIHNldCB0byB0cnVlLCBlbmFibGUgYC1uYCBvcHRpb24gYnkgZGVmYXVsdC4KIAogZ3JlcC5wYXR0ZXJuVHlwZTo6CiAJU2V0IHRoZSBkZWZhdWx0IG1hdGNoaW5nIGJlaGF2aW9yLiBVc2luZyBhIHZhbHVlIG9mICdiYXNpYycsICdleHRlbmRlZCcsCi0JJ2ZpeGVkJywgb3IgJ3BlcmwnIHdpbGwgZW5hYmxlIHRoZSAnLS1iYXNpYy1yZWdleHAnLCAnLS1leHRlbmRlZC1yZWdleHAnLAotCSctLWZpeGVkLXN0cmluZ3MnLCBvciAnLS1wZXJsLXJlZ2V4cCcgb3B0aW9uIGFjY29yZGluZ2x5LCB3aGlsZSB0aGUKKwknZml4ZWQnLCBvciAncGVybCcgd2lsbCBlbmFibGUgdGhlIGAtLWJhc2ljLXJlZ2V4cGAsIGAtLWV4dGVuZGVkLXJlZ2V4cGAsCisJYC0tZml4ZWQtc3RyaW5nc2AsIG9yIGAtLXBlcmwtcmVnZXhwYCBvcHRpb24gYWNjb3JkaW5nbHksIHdoaWxlIHRoZQogCXZhbHVlICdkZWZhdWx0JyB3aWxsIHJldHVybiB0byB0aGUgZGVmYXVsdCBtYXRjaGluZyBiZWhhdmlvci4KIAogZ3JlcC5leHRlbmRlZFJlZ2V4cDo6Ci0JSWYgc2V0IHRvIHRydWUsIGVuYWJsZSAnLS1leHRlbmRlZC1yZWdleHAnIG9wdGlvbiBieSBkZWZhdWx0LiBUaGlzCi0Jb3B0aW9uIGlzIGlnbm9yZWQgd2hlbiB0aGUgJ2dyZXAucGF0dGVyblR5cGUnIG9wdGlvbiBpcyBzZXQgdG8gYSB2YWx1ZQorCUlmIHNldCB0byB0cnVlLCBlbmFibGUgYC0tZXh0ZW5kZWQtcmVnZXhwYCBvcHRpb24gYnkgZGVmYXVsdC4gVGhpcworCW9wdGlvbiBpcyBpZ25vcmVkIHdoZW4gdGhlIGBncmVwLnBhdHRlcm5UeXBlYCBvcHRpb24gaXMgc2V0IHRvIGEgdmFsdWUKIAlvdGhlciB0aGFuICdkZWZhdWx0Jy4KIAogZ3JlcC50aHJlYWRzOjoKQEAgLTE1ODcsNyArMTYyMyw3IEBACiAJb2YgdGhlIGxpbmtnaXQ6Z2l0LWd1aVsxXSBgVG9vbHNgIG1lbnUgaXMgaW52b2tlZC4gVGhpcyBvcHRpb24gaXMKIAltYW5kYXRvcnkgZm9yIGV2ZXJ5IHRvb2wuIFRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIGZyb20gdGhlIHJvb3Qgb2YKIAl0aGUgd29ya2luZyBkaXJlY3RvcnksIGFuZCBpbiB0aGUgZW52aXJvbm1lbnQgaXQgcmVjZWl2ZXMgdGhlIG5hbWUgb2YKLQl0aGUgdG9vbCBhcyAnR0lUX0dVSVRPT0wnLCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZpbGUgYXMKKwl0aGUgdG9vbCBhcyBgR0lUX0dVSVRPT0xgLCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZpbGUgYXMKIAknRklMRU5BTUUnLCBhbmQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGFzICdDVVJfQlJBTkNIJyAoaWYKIAl0aGUgaGVhZCBpcyBkZXRhY2hlZCwgJ0NVUl9CUkFOQ0gnIGlzIGVtcHR5KS4KIApAQCAtMTYwOCw3ICsxNjQ0LDcgQEAKIAogZ3VpdG9vbC48bmFtZT4uYXJnUHJvbXB0OjoKIAlSZXF1ZXN0IGEgc3RyaW5nIGFyZ3VtZW50IGZyb20gdGhlIHVzZXIsIGFuZCBwYXNzIGl0IHRvIHRoZSB0b29sCi0JdGhyb3VnaCB0aGUgJ0FSR1MnIGVudmlyb25tZW50IHZhcmlhYmxlLiBTaW5jZSByZXF1ZXN0aW5nIGFuCisJdGhyb3VnaCB0aGUgYEFSR1NgIGVudmlyb25tZW50IHZhcmlhYmxlLiBTaW5jZSByZXF1ZXN0aW5nIGFuCiAJYXJndW1lbnQgaW1wbGllcyBjb25maXJtYXRpb24sIHRoZSAnY29uZmlybScgb3B0aW9uIGhhcyBubyBlZmZlY3QKIAlpZiB0aGlzIGlzIGVuYWJsZWQuIElmIHRoZSBvcHRpb24gaXMgc2V0IHRvICd0cnVlJywgJ3llcycsIG9yICcxJywKIAl0aGUgZGlhbG9nIHVzZXMgYSBidWlsdC1pbiBnZW5lcmljIHByb21wdDsgb3RoZXJ3aXNlIHRoZSBleGFjdApAQCAtMTYxNiw3ICsxNjUyLDcgQEAKIAogZ3VpdG9vbC48bmFtZT4ucmV2UHJvbXB0OjoKIAlSZXF1ZXN0IGEgc2luZ2xlIHZhbGlkIHJldmlzaW9uIGZyb20gdGhlIHVzZXIsIGFuZCBzZXQgdGhlCi0JJ1JFVklTSU9OJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSW4gb3RoZXIgYXNwZWN0cyB0aGlzIG9wdGlvbgorCWBSRVZJU0lPTmAgZW52aXJvbm1lbnQgdmFyaWFibGUuIEluIG90aGVyIGFzcGVjdHMgdGhpcyBvcHRpb24KIAlpcyBzaW1pbGFyIHRvICdhcmdQcm9tcHQnLCBhbmQgY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBpdC4KIAogZ3VpdG9vbC48bmFtZT4ucmV2VW5tZXJnZWQ6OgpAQCAtMTY3Miw3ICsxNzA4LDcgQEAKIAlvbmx5IHRha2VzIGVmZmVjdCBpZiB0aGUgY29uZmlndXJlZCBwcm94eSBzdHJpbmcgY29udGFpbnMgYSB1c2VyIG5hbWUgcGFydAogCShpLmUuIGlzIG9mIHRoZSBmb3JtICd1c2VyQGhvc3QnIG9yICd1c2VyQGhvc3Q6cG9ydCcpLiBUaGlzIGNhbiBiZQogCW92ZXJyaWRkZW4gb24gYSBwZXItcmVtb3RlIGJhc2lzOyBzZWUgYHJlbW90ZS48bmFtZT4ucHJveHlBdXRoTWV0aG9kYC4KLQlCb3RoIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX0hUVFBfUFJPWFlfQVVUSE1FVEhPRCcgZW52aXJvbm1lbnQKKwlCb3RoIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX0hUVFBfUFJPWFlfQVVUSE1FVEhPRGAgZW52aXJvbm1lbnQKIAl2YXJpYWJsZS4gIFBvc3NpYmxlIHZhbHVlcyBhcmU6CiArCiAtLQpAQCAtMTczMSw5ICsxNzY3LDkgQEAKIAktIHRsc3YxLjIKIAogKwotQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfU1NMX1ZFUlNJT04nIGVudmlyb25tZW50IHZhcmlhYmxlLgorQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfU1NMX1ZFUlNJT05gIGVudmlyb25tZW50IHZhcmlhYmxlLgogVG8gZm9yY2UgZ2l0IHRvIHVzZSBsaWJjdXJsJ3MgZGVmYXVsdCBzc2wgdmVyc2lvbiBhbmQgaWdub3JlIGFueQotZXhwbGljaXQgaHR0cC5zc2x2ZXJzaW9uIG9wdGlvbiwgc2V0ICdHSVRfU1NMX1ZFUlNJT04nIHRvIHRoZQorZXhwbGljaXQgaHR0cC5zc2x2ZXJzaW9uIG9wdGlvbiwgc2V0IGBHSVRfU1NMX1ZFUlNJT05gIHRvIHRoZQogZW1wdHkgc3RyaW5nLgogCiBodHRwLnNzbENpcGhlckxpc3Q6OgpAQCAtMTc0NCw0MSArMTc4MCw0MSBAQAogICBvcHRpb247IHNlZSB0aGUgbGliY3VybCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGZvcm1hdAogICBvZiB0aGlzIGxpc3QuCiArCi1DYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9TU0xfQ0lQSEVSX0xJU1QnIGVudmlyb25tZW50IHZhcmlhYmxlLgorQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfU1NMX0NJUEhFUl9MSVNUYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KIFRvIGZvcmNlIGdpdCB0byB1c2UgbGliY3VybCdzIGRlZmF1bHQgY2lwaGVyIGxpc3QgYW5kIGlnbm9yZSBhbnkKLWV4cGxpY2l0IGh0dHAuc3NsQ2lwaGVyTGlzdCBvcHRpb24sIHNldCAnR0lUX1NTTF9DSVBIRVJfTElTVCcgdG8gdGhlCitleHBsaWNpdCBodHRwLnNzbENpcGhlckxpc3Qgb3B0aW9uLCBzZXQgYEdJVF9TU0xfQ0lQSEVSX0xJU1RgIHRvIHRoZQogZW1wdHkgc3RyaW5nLgogCiBodHRwLnNzbFZlcmlmeTo6CiAJV2hldGhlciB0byB2ZXJpZnkgdGhlIFNTTCBjZXJ0aWZpY2F0ZSB3aGVuIGZldGNoaW5nIG9yIHB1c2hpbmcKLQlvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9TU0xfTk9fVkVSSUZZJyBlbnZpcm9ubWVudAorCW92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX1NTTF9OT19WRVJJRllgIGVudmlyb25tZW50CiAJdmFyaWFibGUuCiAKIGh0dHAuc3NsQ2VydDo6CiAJRmlsZSBjb250YWluaW5nIHRoZSBTU0wgY2VydGlmaWNhdGUgd2hlbiBmZXRjaGluZyBvciBwdXNoaW5nCi0Jb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfU1NMX0NFUlQnIGVudmlyb25tZW50CisJb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfU1NMX0NFUlRgIGVudmlyb25tZW50CiAJdmFyaWFibGUuCiAKIGh0dHAuc3NsS2V5OjoKIAlGaWxlIGNvbnRhaW5pbmcgdGhlIFNTTCBwcml2YXRlIGtleSB3aGVuIGZldGNoaW5nIG9yIHB1c2hpbmcKLQlvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9TU0xfS0VZJyBlbnZpcm9ubWVudAorCW92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX1NTTF9LRVlgIGVudmlyb25tZW50CiAJdmFyaWFibGUuCiAKIGh0dHAuc3NsQ2VydFBhc3N3b3JkUHJvdGVjdGVkOjoKIAlFbmFibGUgR2l0J3MgcGFzc3dvcmQgcHJvbXB0IGZvciB0aGUgU1NMIGNlcnRpZmljYXRlLiAgT3RoZXJ3aXNlCiAJT3BlblNTTCB3aWxsIHByb21wdCB0aGUgdXNlciwgcG9zc2libHkgbWFueSB0aW1lcywgaWYgdGhlCiAJY2VydGlmaWNhdGUgb3IgcHJpdmF0ZSBrZXkgaXMgZW5jcnlwdGVkLiAgQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlCi0JJ0dJVF9TU0xfQ0VSVF9QQVNTV09SRF9QUk9URUNURUQnIGVudmlyb25tZW50IHZhcmlhYmxlLgorCWBHSVRfU1NMX0NFUlRfUEFTU1dPUkRfUFJPVEVDVEVEYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KIAogaHR0cC5zc2xDQUluZm86OgogCUZpbGUgY29udGFpbmluZyB0aGUgY2VydGlmaWNhdGVzIHRvIHZlcmlmeSB0aGUgcGVlciB3aXRoIHdoZW4KIAlmZXRjaGluZyBvciBwdXNoaW5nIG92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZQotCSdHSVRfU1NMX0NBSU5GTycgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJYEdJVF9TU0xfQ0FJTkZPYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KIAogaHR0cC5zc2xDQVBhdGg6OgogCVBhdGggY29udGFpbmluZyBmaWxlcyB3aXRoIHRoZSBDQSBjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5IHRoZSBwZWVyCiAJd2l0aCB3aGVuIGZldGNoaW5nIG9yIHB1c2hpbmcgb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4KLQlieSB0aGUgJ0dJVF9TU0xfQ0FQQVRIJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwlieSB0aGUgYEdJVF9TU0xfQ0FQQVRIYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KIAogaHR0cC5waW5uZWRwdWJrZXk6OgogCVB1YmxpYyBrZXkgb2YgdGhlIGh0dHBzIHNlcnZpY2UuIEl0IG1heSBlaXRoZXIgYmUgdGhlIGZpbGVuYW1lIG9mCkBAIC0xNzk4LDcgKzE4MzQsNyBAQAogCiBodHRwLm1heFJlcXVlc3RzOjoKIAlIb3cgbWFueSBIVFRQIHJlcXVlc3RzIHRvIGxhdW5jaCBpbiBwYXJhbGxlbC4gQ2FuIGJlIG92ZXJyaWRkZW4KLQlieSB0aGUgJ0dJVF9IVFRQX01BWF9SRVFVRVNUUycgZW52aXJvbm1lbnQgdmFyaWFibGUuIERlZmF1bHQgaXMgNS4KKwlieSB0aGUgYEdJVF9IVFRQX01BWF9SRVFVRVNUU2AgZW52aXJvbm1lbnQgdmFyaWFibGUuIERlZmF1bHQgaXMgNS4KIAogaHR0cC5taW5TZXNzaW9uczo6CiAJVGhlIG51bWJlciBvZiBjdXJsIHNlc3Npb25zIChjb3VudGVkIGFjcm9zcyBzbG90cykgdG8gYmUga2VwdCBhY3Jvc3MKQEAgLTE4MTcsMTMgKzE4NTMsMTMgQEAKIGh0dHAubG93U3BlZWRMaW1pdCwgaHR0cC5sb3dTcGVlZFRpbWU6OgogCUlmIHRoZSBIVFRQIHRyYW5zZmVyIHNwZWVkIGlzIGxlc3MgdGhhbiAnaHR0cC5sb3dTcGVlZExpbWl0JwogCWZvciBsb25nZXIgdGhhbiAnaHR0cC5sb3dTcGVlZFRpbWUnIHNlY29uZHMsIHRoZSB0cmFuc2ZlciBpcyBhYm9ydGVkLgotCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX0hUVFBfTE9XX1NQRUVEX0xJTUlUJyBhbmQKLQknR0lUX0hUVFBfTE9XX1NQRUVEX1RJTUUnIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwlDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9IVFRQX0xPV19TUEVFRF9MSU1JVGAgYW5kCisJYEdJVF9IVFRQX0xPV19TUEVFRF9USU1FYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAKIGh0dHAubm9FUFNWOjoKIAlBIGJvb2xlYW4gd2hpY2ggZGlzYWJsZXMgdXNpbmcgb2YgRVBTViBmdHAgY29tbWFuZCBieSBjdXJsLgogCVRoaXMgY2FuIGhlbHBmdWwgd2l0aCBzb21lICJwb29yIiBmdHAgc2VydmVycyB3aGljaCBkb24ndAotCXN1cHBvcnQgRVBTViBtb2RlLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9DVVJMX0ZUUF9OT19FUFNWJworCXN1cHBvcnQgRVBTViBtb2RlLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9DVVJMX0ZUUF9OT19FUFNWYAogCWVudmlyb25tZW50IHZhcmlhYmxlLiBEZWZhdWx0IGlzIGZhbHNlIChjdXJsIHdpbGwgdXNlIEVQU1YpLgogCiBodHRwLnVzZXJBZ2VudDo6CkBAIC0xODMzLDcgKzE4NjksNyBAQAogCXN1Y2ggYXMgTW96aWxsYS80LjAuICBUaGlzIG1heSBiZSBuZWNlc3NhcnksIGZvciBpbnN0YW5jZSwgaWYKIAljb25uZWN0aW5nIHRocm91Z2ggYSBmaXJld2FsbCB0aGF0IHJlc3RyaWN0cyBIVFRQIGNvbm5lY3Rpb25zIHRvIGEgc2V0CiAJb2YgY29tbW9uIFVTRVJfQUdFTlQgc3RyaW5ncyAoYnV0IG5vdCBpbmNsdWRpbmcgdGhvc2UgbGlrZSBnaXQvMS43LjEpLgotCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX0hUVFBfVVNFUl9BR0VOVCcgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfSFRUUF9VU0VSX0FHRU5UYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KIAogaHR0cC48dXJsPi4qOjoKIAlBbnkgb2YgdGhlIGh0dHAuKiBvcHRpb25zIGFib3ZlIGNhbiBiZSBhcHBsaWVkIHNlbGVjdGl2ZWx5IHRvIHNvbWUgVVJMcy4KQEAgLTE5NTgsNyArMTk5NCw3IEBACiAJc3BlY2lmaWVkLCB0aGUgZnVsbCByZWYgbmFtZSAoaW5jbHVkaW5nIHByZWZpeCkgd2lsbCBiZSBwcmludGVkLgogCUlmICdhdXRvJyBpcyBzcGVjaWZpZWQsIHRoZW4gaWYgdGhlIG91dHB1dCBpcyBnb2luZyB0byBhIHRlcm1pbmFsLAogCXRoZSByZWYgbmFtZXMgYXJlIHNob3duIGFzIGlmICdzaG9ydCcgd2VyZSBnaXZlbiwgb3RoZXJ3aXNlIG5vIHJlZgotCW5hbWVzIGFyZSBzaG93bi4gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgJy0tZGVjb3JhdGUnIG9wdGlvbgorCW5hbWVzIGFyZSBzaG93bi4gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYC0tZGVjb3JhdGVgIG9wdGlvbgogCW9mIHRoZSBgZ2l0IGxvZ2AuCiAKIGxvZy5mb2xsb3c6OgpAQCAtMjM0MSwxNiArMjM3NywxNiBAQAogLS0KIAogcHVzaC5mb2xsb3dUYWdzOjoKLQlJZiBzZXQgdG8gdHJ1ZSBlbmFibGUgJy0tZm9sbG93LXRhZ3MnIG9wdGlvbiBieSBkZWZhdWx0LiAgWW91CisJSWYgc2V0IHRvIHRydWUgZW5hYmxlIGAtLWZvbGxvdy10YWdzYCBvcHRpb24gYnkgZGVmYXVsdC4gIFlvdQogCW1heSBvdmVycmlkZSB0aGlzIGNvbmZpZ3VyYXRpb24gYXQgdGltZSBvZiBwdXNoIGJ5IHNwZWNpZnlpbmcKLQknLS1uby1mb2xsb3ctdGFncycuCisJYC0tbm8tZm9sbG93LXRhZ3NgLgogCiBwdXNoLmdwZ1NpZ246OgogCU1heSBiZSBzZXQgdG8gYSBib29sZWFuIHZhbHVlLCBvciB0aGUgc3RyaW5nICdpZi1hc2tlZCcuIEEgdHJ1ZQotCXZhbHVlIGNhdXNlcyBhbGwgcHVzaGVzIHRvIGJlIEdQRyBzaWduZWQsIGFzIGlmICctLXNpZ25lZCcgaXMKKwl2YWx1ZSBjYXVzZXMgYWxsIHB1c2hlcyB0byBiZSBHUEcgc2lnbmVkLCBhcyBpZiBgLS1zaWduZWRgIGlzCiAJcGFzc2VkIHRvIGxpbmtnaXQ6Z2l0LXB1c2hbMV0uIFRoZSBzdHJpbmcgJ2lmLWFza2VkJyBjYXVzZXMKIAlwdXNoZXMgdG8gYmUgc2lnbmVkIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQsIGFzIGlmCi0JJy0tc2lnbmVkPWlmLWFza2VkJyBpcyBwYXNzZWQgdG8gJ2dpdCBwdXNoJy4gQSBmYWxzZSB2YWx1ZSBtYXkKKwlgLS1zaWduZWQ9aWYtYXNrZWRgIGlzIHBhc3NlZCB0byAnZ2l0IHB1c2gnLiBBIGZhbHNlIHZhbHVlIG1heQogCW92ZXJyaWRlIGEgdmFsdWUgZnJvbSBhIGxvd2VyLXByaW9yaXR5IGNvbmZpZyBmaWxlLiBBbiBleHBsaWNpdAogCWNvbW1hbmQtbGluZSBmbGFnIGFsd2F5cyBvdmVycmlkZXMgdGhpcyBjb25maWcgb3B0aW9uLgogCkBAIC0yMzczLDcgKzI0MDksNyBAQAogCXJlYmFzZS4gRmFsc2UgYnkgZGVmYXVsdC4KIAogcmViYXNlLmF1dG9TcXVhc2g6OgotCUlmIHNldCB0byB0cnVlIGVuYWJsZSAnLS1hdXRvc3F1YXNoJyBvcHRpb24gYnkgZGVmYXVsdC4KKwlJZiBzZXQgdG8gdHJ1ZSBlbmFibGUgYC0tYXV0b3NxdWFzaGAgb3B0aW9uIGJ5IGRlZmF1bHQuCiAKIHJlYmFzZS5hdXRvU3Rhc2g6OgogCVdoZW4gc2V0IHRvIHRydWUsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgdGVtcG9yYXJ5IHN0YXNoCkBAIC0yNDAxLDggKzI0MzcsMTMgQEAKIAogcmVjZWl2ZS5hZHZlcnRpc2VBdG9taWM6OgogCUJ5IGRlZmF1bHQsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBhZHZlcnRpc2UgdGhlIGF0b21pYyBwdXNoCi0JY2FwYWJpbGl0eSB0byBpdHMgY2xpZW50cy4gSWYgeW91IGRvbid0IHdhbnQgdG8gdGhpcyBjYXBhYmlsaXR5Ci0JdG8gYmUgYWR2ZXJ0aXNlZCwgc2V0IHRoaXMgdmFyaWFibGUgdG8gZmFsc2UuCisJY2FwYWJpbGl0eSB0byBpdHMgY2xpZW50cy4gSWYgeW91IGRvbid0IHdhbnQgdG8gYWR2ZXJ0aXNlIHRoaXMKKwljYXBhYmlsaXR5LCBzZXQgdGhpcyB2YXJpYWJsZSB0byBmYWxzZS4KKworcmVjZWl2ZS5hZHZlcnRpc2VQdXNoT3B0aW9uczo6CisJQnkgZGVmYXVsdCwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIGFkdmVydGlzZSB0aGUgcHVzaCBvcHRpb25zCisJY2FwYWJpbGl0eSB0byBpdHMgY2xpZW50cy4gSWYgeW91IGRvbid0IHdhbnQgdG8gYWR2ZXJ0aXNlIHRoaXMKKwljYXBhYmlsaXR5LCBzZXQgdGhpcyB2YXJpYWJsZSB0byBmYWxzZS4KIAogcmVjZWl2ZS5hdXRvZ2M6OgogCUJ5IGRlZmF1bHQsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBydW4gImdpdC1nYyAtLWF1dG8iIGFmdGVyCkBAIC0yNDU3LDYgKzI0OTgsMTUgQEAKIAljYW4gYmUgc2FmZWx5IGlnbm9yZWQgc3VjaCBhcyBpbnZhbGlkIGNvbW1pdHRlciBlbWFpbCBhZGRyZXNzZXMuCiAJTm90ZTogY29ycnVwdCBvYmplY3RzIGNhbm5vdCBiZSBza2lwcGVkIHdpdGggdGhpcyBzZXR0aW5nLgogCityZWNlaXZlLmtlZXBBbGl2ZTo6CisJQWZ0ZXIgcmVjZWl2aW5nIHRoZSBwYWNrIGZyb20gdGhlIGNsaWVudCwgYHJlY2VpdmUtcGFja2AgbWF5CisJcHJvZHVjZSBubyBvdXRwdXQgKGlmIGAtLXF1aWV0YCB3YXMgc3BlY2lmaWVkKSB3aGlsZSBwcm9jZXNzaW5nCisJdGhlIHBhY2ssIGNhdXNpbmcgc29tZSBuZXR3b3JrcyB0byBkcm9wIHRoZSBUQ1AgY29ubmVjdGlvbi4KKwlXaXRoIHRoaXMgb3B0aW9uIHNldCwgaWYgYHJlY2VpdmUtcGFja2AgZG9lcyBub3QgdHJhbnNtaXQKKwlhbnkgZGF0YSBpbiB0aGlzIHBoYXNlIGZvciBgcmVjZWl2ZS5rZWVwQWxpdmVgIHNlY29uZHMsIGl0IHdpbGwKKwlzZW5kIGEgc2hvcnQga2VlcGFsaXZlIHBhY2tldC4gIFRoZSBkZWZhdWx0IGlzIDUgc2Vjb25kczsgc2V0CisJdG8gMCB0byBkaXNhYmxlIGtlZXBhbGl2ZXMgZW50aXJlbHkuCisKIHJlY2VpdmUudW5wYWNrTGltaXQ6OgogCUlmIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyByZWNlaXZlZCBpbiBhIHB1c2ggaXMgYmVsb3cgdGhpcwogCWxpbWl0IHRoZW4gdGhlIG9iamVjdHMgd2lsbCBiZSB1bnBhY2tlZCBpbnRvIGxvb3NlIG9iamVjdApAQCAtMjYzMCw3ICsyNjgwLDcgQEAKIAlBIGNvbmZpZ3VyYXRpb24gaWRlbnRpdHkuIFdoZW4gZ2l2ZW4sIGNhdXNlcyB2YWx1ZXMgaW4gdGhlCiAJJ3NlbmRlbWFpbC48aWRlbnRpdHk+JyBzdWJzZWN0aW9uIHRvIHRha2UgcHJlY2VkZW5jZSBvdmVyCiAJdmFsdWVzIGluIHRoZSAnc2VuZGVtYWlsJyBzZWN0aW9uLiBUaGUgZGVmYXVsdCBpZGVudGl0eSBpcwotCXRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLmlkZW50aXR5Jy4KKwl0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5pZGVudGl0eWAuCiAKIHNlbmRlbWFpbC5zbXRwRW5jcnlwdGlvbjo6CiAJU2VlIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0gZm9yIGRlc2NyaXB0aW9uLiAgTm90ZSB0aGF0IHRoaXMKQEAgLTI2NDcsNyArMjY5Nyw3IEBACiAJSWRlbnRpdHktc3BlY2lmaWMgdmVyc2lvbnMgb2YgdGhlICdzZW5kZW1haWwuKicgcGFyYW1ldGVycwogCWZvdW5kIGJlbG93LCB0YWtpbmcgcHJlY2VkZW5jZSBvdmVyIHRob3NlIHdoZW4gdGhlIHRoaXMKIAlpZGVudGl0eSBpcyBzZWxlY3RlZCwgdGhyb3VnaCBjb21tYW5kLWxpbmUgb3IKLQknc2VuZGVtYWlsLmlkZW50aXR5Jy4KKwlgc2VuZGVtYWlsLmlkZW50aXR5YC4KIAogc2VuZGVtYWlsLmFsaWFzZXNGaWxlOjoKIHNlbmRlbWFpbC5hbGlhc0ZpbGVUeXBlOjoKQEAgLTI2NzcsNyArMjcyNyw3IEBACiAJU2VlIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0gZm9yIGRlc2NyaXB0aW9uLgogCiBzZW5kZW1haWwuc2lnbmVkb2ZmY2MgKGRlcHJlY2F0ZWQpOjoKLQlEZXByZWNhdGVkIGFsaWFzIGZvciAnc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2MnLgorCURlcHJlY2F0ZWQgYWxpYXMgZm9yIGBzZW5kZW1haWwuc2lnbmVkb2ZmYnljY2AuCiAKIHNob3dicmFuY2guZGVmYXVsdDo6CiAJVGhlIGRlZmF1bHQgc2V0IG9mIGJyYW5jaGVzIGZvciBsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXS4KQEAgLTI4ODMsNiArMjkzMywyMSBAQAogCWB1cGxvYWRwYWNrLmtlZXBBbGl2ZWAgc2Vjb25kcy4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byAwCiAJZGlzYWJsZXMga2VlcGFsaXZlIHBhY2tldHMgZW50aXJlbHkuIFRoZSBkZWZhdWx0IGlzIDUgc2Vjb25kcy4KIAordXBsb2FkcGFjay5wYWNrT2JqZWN0c0hvb2s6OgorCUlmIHRoaXMgb3B0aW9uIGlzIHNldCwgd2hlbiBgdXBsb2FkLXBhY2tgIHdvdWxkIHJ1bgorCWBnaXQgcGFjay1vYmplY3RzYCB0byBjcmVhdGUgYSBwYWNrZmlsZSBmb3IgYSBjbGllbnQsIGl0IHdpbGwKKwlydW4gdGhpcyBzaGVsbCBjb21tYW5kIGluc3RlYWQuICBUaGUgYHBhY2stb2JqZWN0c2AgY29tbWFuZCBhbmQKKwlhcmd1bWVudHMgaXQgX3dvdWxkXyBoYXZlIHJ1biAoaW5jbHVkaW5nIHRoZSBgZ2l0IHBhY2stb2JqZWN0c2AKKwlhdCB0aGUgYmVnaW5uaW5nKSBhcmUgYXBwZW5kZWQgdG8gdGhlIHNoZWxsIGNvbW1hbmQuIFRoZSBzdGRpbgorCWFuZCBzdGRvdXQgb2YgdGhlIGhvb2sgYXJlIHRyZWF0ZWQgYXMgaWYgYHBhY2stb2JqZWN0c2AgaXRzZWxmCisJd2FzIHJ1bi4gSS5lLiwgYHVwbG9hZC1wYWNrYCB3aWxsIGZlZWQgaW5wdXQgaW50ZW5kZWQgZm9yCisJYHBhY2stb2JqZWN0c2AgdG8gdGhlIGhvb2ssIGFuZCBleHBlY3RzIGEgY29tcGxldGVkIHBhY2tmaWxlIG9uCisJc3Rkb3V0LgorKworTm90ZSB0aGF0IHRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBpZ25vcmVkIGlmIGl0IGlzIHNlZW4gaW4gdGhlCityZXBvc2l0b3J5LWxldmVsIGNvbmZpZyAodGhpcyBpcyBhIHNhZmV0eSBtZWFzdXJlIGFnYWluc3QgZmV0Y2hpbmcgZnJvbQordW50cnVzdGVkIHJlcG9zaXRvcmllcykuCisKIHVybC48YmFzZT4uaW5zdGVhZE9mOjoKIAlBbnkgVVJMIHRoYXQgc3RhcnRzIHdpdGggdGhpcyB2YWx1ZSB3aWxsIGJlIHJld3JpdHRlbiB0bwogCXN0YXJ0LCBpbnN0ZWFkLCB3aXRoIDxiYXNlPi4gSW4gY2FzZXMgd2hlcmUgc29tZSBzaXRlIHNlcnZlcyBhCkBAIC0yOTA5LDE3ICsyOTc0LDE3IEBACiAKIHVzZXIuZW1haWw6OgogCVlvdXIgZW1haWwgYWRkcmVzcyB0byBiZSByZWNvcmRlZCBpbiBhbnkgbmV3bHkgY3JlYXRlZCBjb21taXRzLgotCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX0FVVEhPUl9FTUFJTCcsICdHSVRfQ09NTUlUVEVSX0VNQUlMJywgYW5kCi0JJ0VNQUlMJyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBTZWUgbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV0uCisJQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfQVVUSE9SX0VNQUlMYCwgYEdJVF9DT01NSVRURVJfRU1BSUxgLCBhbmQKKwlgRU1BSUxgIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFNlZSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXS4KIAogdXNlci5uYW1lOjoKIAlZb3VyIGZ1bGwgbmFtZSB0byBiZSByZWNvcmRlZCBpbiBhbnkgbmV3bHkgY3JlYXRlZCBjb21taXRzLgotCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX0FVVEhPUl9OQU1FJyBhbmQgJ0dJVF9DT01NSVRURVJfTkFNRScKKwlDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9BVVRIT1JfTkFNRWAgYW5kIGBHSVRfQ09NTUlUVEVSX05BTUVgCiAJZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdC10cmVlWzFdLgogCiB1c2VyLnVzZUNvbmZpZ09ubHk6OgotCUluc3RydWN0IEdpdCB0byBhdm9pZCB0cnlpbmcgdG8gZ3Vlc3MgZGVmYXVsdHMgZm9yICd1c2VyLmVtYWlsJwotCWFuZCAndXNlci5uYW1lJywgYW5kIGluc3RlYWQgcmV0cmlldmUgdGhlIHZhbHVlcyBvbmx5IGZyb20gdGhlCisJSW5zdHJ1Y3QgR2l0IHRvIGF2b2lkIHRyeWluZyB0byBndWVzcyBkZWZhdWx0cyBmb3IgYHVzZXIuZW1haWxgCisJYW5kIGB1c2VyLm5hbWVgLCBhbmQgaW5zdGVhZCByZXRyaWV2ZSB0aGUgdmFsdWVzIG9ubHkgZnJvbSB0aGUKIAljb25maWd1cmF0aW9uLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgbXVsdGlwbGUgZW1haWwgYWRkcmVzc2VzCiAJYW5kIHdvdWxkIGxpa2UgdG8gdXNlIGEgZGlmZmVyZW50IG9uZSBmb3IgZWFjaCByZXBvc2l0b3J5LCB0aGVuCiAJd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNldCB0byBgdHJ1ZWAgaW4gdGhlIGdsb2JhbCBjb25maWcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGF0ZS1mb3JtYXRzLnR4dCBiL0RvY3VtZW50YXRpb24vZGF0ZS1mb3JtYXRzLnR4dAppbmRleCBjY2QxZmM4Li4zNWU4ZGEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RhdGUtZm9ybWF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kYXRlLWZvcm1hdHMudHh0CkBAIC0xLDcgKzEsNyBAQAogREFURSBGT1JNQVRTCiAtLS0tLS0tLS0tLS0KIAotVGhlIEdJVF9BVVRIT1JfREFURSwgR0lUX0NPTU1JVFRFUl9EQVRFIGVudmlyb25tZW50IHZhcmlhYmxlcworVGhlIGBHSVRfQVVUSE9SX0RBVEVgLCBgR0lUX0NPTU1JVFRFUl9EQVRFYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKIGlmZGVmOjpnaXQtY29tbWl0W10KIGFuZCB0aGUgYC0tZGF0ZWAgb3B0aW9uCiBlbmRpZjo6Z2l0LWNvbW1pdFtdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1jb25maWcudHh0CmluZGV4IGQ3OGNmYzUuLmQ1YTViMTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGlmZi1jb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1jb25maWcudHh0CkBAIC03NSw3ICs3NSw3IEBACiAJY29tbWFuZHMgc3VjaCBhcyAnZ2l0IGRpZmYtZmlsZXMnLiAnZ2l0IGNoZWNrb3V0JyBhbHNvIGhvbm9ycwogCXRoaXMgc2V0dGluZyB3aGVuIHJlcG9ydGluZyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiBTZXR0aW5nIGl0IHRvCiAJJ2FsbCcgZGlzYWJsZXMgdGhlIHN1Ym1vZHVsZSBzdW1tYXJ5IG5vcm1hbGx5IHNob3duIGJ5ICdnaXQgY29tbWl0JwotCWFuZCAnZ2l0IHN0YXR1cycgd2hlbiAnc3RhdHVzLnN1Ym1vZHVsZVN1bW1hcnknIGlzIHNldCB1bmxlc3MgaXQgaXMKKwlhbmQgJ2dpdCBzdGF0dXMnIHdoZW4gYHN0YXR1cy5zdWJtb2R1bGVTdW1tYXJ5YCBpcyBzZXQgdW5sZXNzIGl0IGlzCiAJb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUgLS1pZ25vcmUtc3VibW9kdWxlcyBjb21tYW5kLWxpbmUgb3B0aW9uLgogCVRoZSAnZ2l0IHN1Ym1vZHVsZScgY29tbWFuZHMgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGlzIHNldHRpbmcuCiAKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiBkaWZmLnJlbmFtZUxpbWl0OjoKIAlUaGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gcGVyZm9ybWluZyB0aGUgY29weS9yZW5hbWUKLQlkZXRlY3Rpb247IGVxdWl2YWxlbnQgdG8gdGhlICdnaXQgZGlmZicgb3B0aW9uICctbCcuCisJZGV0ZWN0aW9uOyBlcXVpdmFsZW50IHRvIHRoZSAnZ2l0IGRpZmYnIG9wdGlvbiBgLWxgLgogCiBkaWZmLnJlbmFtZXM6OgogCVdoZXRoZXIgYW5kIGhvdyBHaXQgZGV0ZWN0cyByZW5hbWVzLiAgSWYgc2V0IHRvICJmYWxzZSIsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CmluZGV4IDg1YjA4OTAuLmNmNTI2MjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CkBAIC00NiwxMSArNDYsMTEgQEAKIC4gc2hhMSBmb3IgImRzdCI7IDBcezQwXH0gaWYgY3JlYXRpb24sIHVubWVyZ2VkIG9yICJsb29rIGF0IHdvcmsgdHJlZSIuCiAuIGEgc3BhY2UuCiAuIHN0YXR1cywgZm9sbG93ZWQgYnkgb3B0aW9uYWwgInNjb3JlIiBudW1iZXIuCi0uIGEgdGFiIG9yIGEgTlVMIHdoZW4gJy16JyBvcHRpb24gaXMgdXNlZC4KKy4gYSB0YWIgb3IgYSBOVUwgd2hlbiBgLXpgIG9wdGlvbiBpcyB1c2VkLgogLiBwYXRoIGZvciAic3JjIgotLiBhIHRhYiBvciBhIE5VTCB3aGVuICcteicgb3B0aW9uIGlzIHVzZWQ7IG9ubHkgZXhpc3RzIGZvciBDIG9yIFIuCisuIGEgdGFiIG9yIGEgTlVMIHdoZW4gYC16YCBvcHRpb24gaXMgdXNlZDsgb25seSBleGlzdHMgZm9yIEMgb3IgUi4KIC4gcGF0aCBmb3IgImRzdCI7IG9ubHkgZXhpc3RzIGZvciBDIG9yIFIuCi0uIGFuIExGIG9yIGEgTlVMIHdoZW4gJy16JyBvcHRpb24gaXMgdXNlZCwgdG8gdGVybWluYXRlIHRoZSByZWNvcmQuCisuIGFuIExGIG9yIGEgTlVMIHdoZW4gYC16YCBvcHRpb24gaXMgdXNlZCwgdG8gdGVybWluYXRlIHRoZSByZWNvcmQuCiAKIFBvc3NpYmxlIHN0YXR1cyBsZXR0ZXJzIGFyZToKIApAQCAtODYsNyArODYsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAiZ2l0LWRpZmYtdHJlZSIsICJnaXQtZGlmZi1maWxlcyIgYW5kICJnaXQtZGlmZiAtLXJhdyIKLWNhbiB0YWtlICctYycgb3IgJy0tY2MnIG9wdGlvbgorY2FuIHRha2UgYC1jYCBvciBgLS1jY2Agb3B0aW9uCiB0byBnZW5lcmF0ZSBkaWZmIG91dHB1dCBhbHNvIGZvciBtZXJnZSBjb21taXRzLiAgVGhlIG91dHB1dCBkaWZmZXJzCiBmcm9tIHRoZSBmb3JtYXQgZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBmb2xsb3dpbmcgd2F5OgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWdlbmVyYXRlLXBhdGNoLnR4dAppbmRleCBiY2Y1NGRhLi5kMmE3ZmY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1nZW5lcmF0ZS1wYXRjaC50eHQKQEAgLTIsMTEgKzIsMTEgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoZW4gImdpdC1kaWZmLWluZGV4IiwgImdpdC1kaWZmLXRyZWUiLCBvciAiZ2l0LWRpZmYtZmlsZXMiIGFyZSBydW4KLXdpdGggYSAnLXAnIG9wdGlvbiwgImdpdCBkaWZmIiB3aXRob3V0IHRoZSAnLS1yYXcnIG9wdGlvbiwgb3IKK3dpdGggYSBgLXBgIG9wdGlvbiwgImdpdCBkaWZmIiB3aXRob3V0IHRoZSBgLS1yYXdgIG9wdGlvbiwgb3IKICJnaXQgbG9nIiB3aXRoIHRoZSAiLXAiIG9wdGlvbiwgdGhleQogZG8gbm90IHByb2R1Y2UgdGhlIG91dHB1dCBkZXNjcmliZWQgYWJvdmU7IGluc3RlYWQgdGhleSBwcm9kdWNlIGEKIHBhdGNoIGZpbGUuICBZb3UgY2FuIGN1c3RvbWl6ZSB0aGUgY3JlYXRpb24gb2Ygc3VjaCBwYXRjaGVzIHZpYSB0aGUKLUdJVF9FWFRFUk5BTF9ESUZGIGFuZCB0aGUgR0lUX0RJRkZfT1BUUyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCitgR0lUX0VYVEVSTkFMX0RJRkZgIGFuZCB0aGUgYEdJVF9ESUZGX09QVFNgIGVudmlyb25tZW50IHZhcmlhYmxlcy4KIAogV2hhdCB0aGUgLXAgb3B0aW9uIHByb2R1Y2VzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoZSB0cmFkaXRpb25hbAogZGlmZiBmb3JtYXQ6CkBAIC0xMTQsMTEgKzExNCwxMSBAQAogLS0tLS0tLS0tLS0tCiAKIDEuICAgSXQgaXMgcHJlY2VkZWQgd2l0aCBhICJnaXQgZGlmZiIgaGVhZGVyLCB0aGF0IGxvb2tzIGxpa2UKLSAgICAgdGhpcyAod2hlbiAnLWMnIG9wdGlvbiBpcyB1c2VkKToKKyAgICAgdGhpcyAod2hlbiBgLWNgIG9wdGlvbiBpcyB1c2VkKToKIAogICAgICAgIGRpZmYgLS1jb21iaW5lZCBmaWxlCiArCi1vciBsaWtlIHRoaXMgKHdoZW4gJy0tY2MnIG9wdGlvbiBpcyB1c2VkKToKK29yIGxpa2UgdGhpcyAod2hlbiBgLS1jY2Agb3B0aW9uIGlzIHVzZWQpOgogCiAgICAgICAgZGlmZiAtLWNjIGZpbGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0CmluZGV4IGQ5YWU2ODEuLjcwNWE4NzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKQEAgLTQxOSw2ICs0MTksOSBAQAogCXBhdGhzIGFyZSBzZWxlY3RlZCBpZiB0aGVyZSBpcyBhbnkgZmlsZSB0aGF0IG1hdGNoZXMKIAlvdGhlciBjcml0ZXJpYSBpbiB0aGUgY29tcGFyaXNvbjsgaWYgdGhlcmUgaXMgbm8gZmlsZQogCXRoYXQgbWF0Y2hlcyBvdGhlciBjcml0ZXJpYSwgbm90aGluZyBpcyBzZWxlY3RlZC4KKysKK0Fsc28sIHRoZXNlIHVwcGVyLWNhc2UgbGV0dGVycyBjYW4gYmUgZG93bmNhc2VkIHRvIGV4Y2x1ZGUuICBFLmcuCitgLS1kaWZmLWZpbHRlcj1hZGAgZXhjbHVkZXMgYWRkZWQgYW5kIGRlbGV0ZWQgcGF0aHMuCiAKIC1TPHN0cmluZz46OgogCUxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CmluZGV4IDAzNmVkZmIuLjllYWIxZjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dApAQCAtNTIsNyArNTIsNyBAQAogCiAtcDo6CiAtLXBydW5lOjoKLQlBZnRlciBmZXRjaGluZywgcmVtb3ZlIGFueSByZW1vdGUtdHJhY2tpbmcgcmVmZXJlbmNlcyB0aGF0IG5vCisJQmVmb3JlIGZldGNoaW5nLCByZW1vdmUgYW55IHJlbW90ZS10cmFja2luZyByZWZlcmVuY2VzIHRoYXQgbm8KIAlsb25nZXIgZXhpc3Qgb24gdGhlIHJlbW90ZS4gIFRhZ3MgYXJlIG5vdCBzdWJqZWN0IHRvIHBydW5pbmcKIAlpZiB0aGV5IGFyZSBmZXRjaGVkIG9ubHkgYmVjYXVzZSBvZiB0aGUgZGVmYXVsdCB0YWcKIAlhdXRvLWZvbGxvd2luZyBvciBkdWUgdG8gYSAtLXRhZ3Mgb3B0aW9uLiAgSG93ZXZlciwgaWYgdGFncwpAQCAtODgsNyArODgsNyBAQAogCXRvIHdoYXRldmVyIGVsc2Ugd291bGQgb3RoZXJ3aXNlIGJlIGZldGNoZWQuICBVc2luZyB0aGlzCiAJb3B0aW9uIGFsb25lIGRvZXMgbm90IHN1YmplY3QgdGFncyB0byBwcnVuaW5nLCBldmVuIGlmIC0tcHJ1bmUKIAlpcyB1c2VkICh0aG91Z2ggdGFncyBtYXkgYmUgcHJ1bmVkIGFueXdheSBpZiB0aGV5IGFyZSBhbHNvIHRoZQotCWRlc3RpbmF0aW9uIG9mIGFuIGV4cGxpY2l0IHJlZnNwZWM7IHNlZSAnLS1wcnVuZScpLgorCWRlc3RpbmF0aW9uIG9mIGFuIGV4cGxpY2l0IHJlZnNwZWM7IHNlZSBgLS1wcnVuZWApLgogCiAtLXJlY3Vyc2Utc3VibW9kdWxlc1s9eWVzfG9uLWRlbWFuZHxub106OgogCVRoaXMgb3B0aW9uIGNvbnRyb2xzIGlmIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgbmV3IGNvbW1pdHMgb2YKQEAgLTExMCw3ICsxMTAsNyBAQAogCiAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlczo6CiAJRGlzYWJsZSByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyAodGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzCi0JdXNpbmcgdGhlICctLXJlY3Vyc2Utc3VibW9kdWxlcz1ubycgb3B0aW9uKS4KKwl1c2luZyB0aGUgYC0tcmVjdXJzZS1zdWJtb2R1bGVzPW5vYCBvcHRpb24pLgogCiAtLXN1Ym1vZHVsZS1wcmVmaXg9PHBhdGg+OjoKIAlQcmVwZW5kIDxwYXRoPiB0byBwYXRocyBwcmludGVkIGluIGluZm9ybWF0aXZlIG1lc3NhZ2VzCkBAIC0xMzcsNyArMTM3LDcgQEAKIAogLS11cGxvYWQtcGFjayA8dXBsb2FkLXBhY2s+OjoKIAlXaGVuIGdpdmVuLCBhbmQgdGhlIHJlcG9zaXRvcnkgdG8gZmV0Y2ggZnJvbSBpcyBoYW5kbGVkCi0JYnkgJ2dpdCBmZXRjaC1wYWNrJywgJy0tZXhlYz08dXBsb2FkLXBhY2s+JyBpcyBwYXNzZWQgdG8KKwlieSAnZ2l0IGZldGNoLXBhY2snLCBgLS1leGVjPTx1cGxvYWQtcGFjaz5gIGlzIHBhc3NlZCB0bwogCXRoZSBjb21tYW5kIHRvIHNwZWNpZnkgbm9uLWRlZmF1bHQgcGF0aCBmb3IgdGhlIGNvbW1hbmQKIAlydW4gb24gdGhlIG90aGVyIGVuZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CmluZGV4IDEzY2RkN2YuLjEyODc5ZTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKQEAgLTExNiw3ICsxMTYsOCBAQAogCUJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgd2lsbCB0cnkgdG8gZGV0ZWN0IHRoZSBwYXRjaCBmb3JtYXQKIAlhdXRvbWF0aWNhbGx5LiBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gYnlwYXNzIHRoZSBhdXRvbWF0aWMKIAlkZXRlY3Rpb24gYW5kIHNwZWNpZnkgdGhlIHBhdGNoIGZvcm1hdCB0aGF0IHRoZSBwYXRjaChlcykgc2hvdWxkIGJlCi0JaW50ZXJwcmV0ZWQgYXMuIFZhbGlkIGZvcm1hdHMgYXJlIG1ib3gsIHN0Z2l0LCBzdGdpdC1zZXJpZXMgYW5kIGhnLgorCWludGVycHJldGVkIGFzLiBWYWxpZCBmb3JtYXRzIGFyZSBtYm94LCBtYm94cmQsCisJc3RnaXQsIHN0Z2l0LXNlcmllcyBhbmQgaGcuCiAKIC1pOjoKIC0taW50ZXJhY3RpdmU6OgpAQCAtMTk4LDEyICsxOTksMTIgQEAKIHRvIHByb2Nlc3MuICBVcG9uIHNlZWluZyB0aGUgZmlyc3QgcGF0Y2ggdGhhdCBkb2VzIG5vdCBhcHBseSwgaXQKIGFib3J0cyBpbiB0aGUgbWlkZGxlLiAgWW91IGNhbiByZWNvdmVyIGZyb20gdGhpcyBpbiBvbmUgb2YgdHdvIHdheXM6CiAKLS4gc2tpcCB0aGUgY3VycmVudCBwYXRjaCBieSByZS1ydW5uaW5nIHRoZSBjb21tYW5kIHdpdGggdGhlICctLXNraXAnCisuIHNraXAgdGhlIGN1cnJlbnQgcGF0Y2ggYnkgcmUtcnVubmluZyB0aGUgY29tbWFuZCB3aXRoIHRoZSBgLS1za2lwYAogICBvcHRpb24uCiAKIC4gaGFuZCByZXNvbHZlIHRoZSBjb25mbGljdCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnksIGFuZCB1cGRhdGUKICAgdGhlIGluZGV4IGZpbGUgdG8gYnJpbmcgaXQgaW50byBhIHN0YXRlIHRoYXQgdGhlIHBhdGNoIHNob3VsZAotICBoYXZlIHByb2R1Y2VkLiAgVGhlbiBydW4gdGhlIGNvbW1hbmQgd2l0aCB0aGUgJy0tY29udGludWUnIG9wdGlvbi4KKyAgaGF2ZSBwcm9kdWNlZC4gIFRoZW4gcnVuIHRoZSBjb21tYW5kIHdpdGggdGhlIGAtLWNvbnRpbnVlYCBvcHRpb24uCiAKIFRoZSBjb21tYW5kIHJlZnVzZXMgdG8gcHJvY2VzcyBuZXcgbWFpbGJveGVzIHVudGlsIHRoZSBjdXJyZW50CiBvcGVyYXRpb24gaXMgZmluaXNoZWQsIHNvIGlmIHlvdSBkZWNpZGUgdG8gc3RhcnQgb3ZlciBmcm9tIHNjcmF0Y2gsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QtbGsyMDA5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0CmluZGV4IGMwNmVmYmQuLmUwMTVmNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0CkBAIC0zNjYsNyArMzY2LDcgQEAKIAogT3IgaWYgeW91IHdhbnQgbW9yZSBjb250cm9sLCB5b3UgY2FuIGluc3BlY3QgdGhlIGN1cnJlbnQgc3RhdGUgdXNpbmcKIGZvciBleGFtcGxlICJnaXQgYmlzZWN0IHZpc3VhbGl6ZSIuIEl0IHdpbGwgbGF1bmNoIGdpdGsgKG9yICJnaXQgbG9nIgotaWYgdGhlIERJU1BMQVkgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCkgdG8gaGVscCB5b3UgZmluZCBhCitpZiB0aGUgYERJU1BMQVlgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQpIHRvIGhlbHAgeW91IGZpbmQgYQogYmV0dGVyIGJpc2VjdGlvbiBwb2ludC4KIAogRWl0aGVyIHdheSwgaWYgeW91IGhhdmUgYSBzdHJpbmcgb2YgdW50ZXN0YWJsZSBjb21taXRzLCBpdCBtaWdodApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKaW5kZXggN2U3OWFhZS4uMmJiOWE1NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CkBAIC0yMDUsNyArMjA1LDcgQEAKIAogYHZpZXdgIG1heSBhbHNvIGJlIHVzZWQgYXMgYSBzeW5vbnltIGZvciBgdmlzdWFsaXplYC4KIAotSWYgdGhlICdESVNQTEFZJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LCAnZ2l0IGxvZycgaXMgdXNlZAorSWYgdGhlIGBESVNQTEFZYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LCAnZ2l0IGxvZycgaXMgdXNlZAogaW5zdGVhZC4gIFlvdSBjYW4gYWxzbyBnaXZlIGNvbW1hbmQtbGluZSBvcHRpb25zIHN1Y2ggYXMgYC1wYCBhbmQKIGAtLXN0YXRgLgogCkBAIC0zNTgsNyArMzU4LDcgQEAKIC0tbm8tY2hlY2tvdXQ6OgogKwogRG8gbm90IGNoZWNrb3V0IHRoZSBuZXcgd29ya2luZyB0cmVlIGF0IGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBiaXNlY3Rpb24KLXByb2Nlc3MuIEluc3RlYWQganVzdCB1cGRhdGUgYSBzcGVjaWFsIHJlZmVyZW5jZSBuYW1lZCAnQklTRUNUX0hFQUQnIHRvIG1ha2UKK3Byb2Nlc3MuIEluc3RlYWQganVzdCB1cGRhdGUgYSBzcGVjaWFsIHJlZmVyZW5jZSBuYW1lZCBgQklTRUNUX0hFQURgIHRvIG1ha2UKIGl0IHBvaW50IHRvIHRoZSBjb21taXQgdGhhdCBzaG91bGQgYmUgdGVzdGVkLgogKwogVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCB3aGVuIHRoZSB0ZXN0IHlvdSB3b3VsZCBwZXJmb3JtIGluIGVhY2ggc3RlcApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKaW5kZXggNGE3MDM3Zi4uMWZlNzM0NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0CkBAIC0zOSwxMCArMzksMTAgQEAKIGNvbW1pdCAoaS5lLiB0aGUgYnJhbmNoZXMgd2hvc2UgdGlwIGNvbW1pdHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBuYW1lZAogY29tbWl0KSB3aWxsIGJlIGxpc3RlZC4gIFdpdGggYC0tbm8tbWVyZ2VkYCBvbmx5IGJyYW5jaGVzIG5vdCBtZXJnZWQgaW50bwogdGhlIG5hbWVkIGNvbW1pdCB3aWxsIGJlIGxpc3RlZC4gIElmIHRoZSA8Y29tbWl0PiBhcmd1bWVudCBpcyBtaXNzaW5nIGl0Ci1kZWZhdWx0cyB0byAnSEVBRCcgKGkuZS4gdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2gpLgorZGVmYXVsdHMgdG8gYEhFQURgIChpLmUuIHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoKS4KIAogVGhlIGNvbW1hbmQncyBzZWNvbmQgZm9ybSBjcmVhdGVzIGEgbmV3IGJyYW5jaCBoZWFkIG5hbWVkIDxicmFuY2huYW1lPgotd2hpY2ggcG9pbnRzIHRvIHRoZSBjdXJyZW50ICdIRUFEJywgb3IgPHN0YXJ0LXBvaW50PiBpZiBnaXZlbi4KK3doaWNoIHBvaW50cyB0byB0aGUgY3VycmVudCBgSEVBRGAsIG9yIDxzdGFydC1wb2ludD4gaWYgZ2l2ZW4uCiAKIE5vdGUgdGhhdCB0aGlzIHdpbGwgY3JlYXRlIHRoZSBuZXcgYnJhbmNoLCBidXQgaXQgd2lsbCBub3Qgc3dpdGNoIHRoZQogd29ya2luZyB0cmVlIHRvIGl0OyB1c2UgImdpdCBjaGVja291dCA8bmV3YnJhbmNoPiIgdG8gc3dpdGNoIHRvIHRoZQpAQCAtMTcyLDcgKzE3Miw3IEBACiArCiBUaGlzIGJlaGF2aW9yIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhlIHN0YXJ0IHBvaW50IGlzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4KIFNldCB0aGUgYnJhbmNoLmF1dG9TZXR1cE1lcmdlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gYGZhbHNlYCBpZiB5b3UKLXdhbnQgYGdpdCBjaGVja291dGAgYW5kIGBnaXQgYnJhbmNoYCB0byBhbHdheXMgYmVoYXZlIGFzIGlmICctLW5vLXRyYWNrJword2FudCBgZ2l0IGNoZWNrb3V0YCBhbmQgYGdpdCBicmFuY2hgIHRvIGFsd2F5cyBiZWhhdmUgYXMgaWYgYC0tbm8tdHJhY2tgCiB3ZXJlIGdpdmVuLiBTZXQgaXQgdG8gYGFsd2F5c2AgaWYgeW91IHdhbnQgdGhpcyBiZWhhdmlvciB3aGVuIHRoZQogc3RhcnQtcG9pbnQgaXMgZWl0aGVyIGEgbG9jYWwgb3IgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0CmluZGV4IGViM2Q2OTQuLjE4ZDAzZDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQKQEAgLTE1LDggKzE1LDggQEAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogSW4gaXRzIGZpcnN0IGZvcm0sIHRoZSBjb21tYW5kIHByb3ZpZGVzIHRoZSBjb250ZW50IG9yIHRoZSB0eXBlIG9mIGFuIG9iamVjdCBpbgotdGhlIHJlcG9zaXRvcnkuIFRoZSB0eXBlIGlzIHJlcXVpcmVkIHVubGVzcyAnLXQnIG9yICctcCcgaXMgdXNlZCB0byBmaW5kIHRoZQotb2JqZWN0IHR5cGUsIG9yICctcycgaXMgdXNlZCB0byBmaW5kIHRoZSBvYmplY3Qgc2l6ZSwgb3IgJy0tdGV4dGNvbnYnIGlzIHVzZWQKK3RoZSByZXBvc2l0b3J5LiBUaGUgdHlwZSBpcyByZXF1aXJlZCB1bmxlc3MgYC10YCBvciBgLXBgIGlzIHVzZWQgdG8gZmluZCB0aGUKK29iamVjdCB0eXBlLCBvciBgLXNgIGlzIHVzZWQgdG8gZmluZCB0aGUgb2JqZWN0IHNpemUsIG9yIGAtLXRleHRjb252YCBpcyB1c2VkCiAod2hpY2ggaW1wbGllcyB0eXBlICJibG9iIikuCiAKIEluIHRoZSBzZWNvbmQgZm9ybSwgYSBsaXN0IG9mIG9iamVjdHMgKHNlcGFyYXRlZCBieSBsaW5lZmVlZHMpIGlzIHByb3ZpZGVkIG9uCkBAIC0xNDQsMTMgKzE0NCwxMyBAQAogCiBPVVRQVVQKIC0tLS0tLQotSWYgJy10JyBpcyBzcGVjaWZpZWQsIG9uZSBvZiB0aGUgPHR5cGU+LgorSWYgYC10YCBpcyBzcGVjaWZpZWQsIG9uZSBvZiB0aGUgPHR5cGU+LgogCi1JZiAnLXMnIGlzIHNwZWNpZmllZCwgdGhlIHNpemUgb2YgdGhlIDxvYmplY3Q+IGluIGJ5dGVzLgorSWYgYC1zYCBpcyBzcGVjaWZpZWQsIHRoZSBzaXplIG9mIHRoZSA8b2JqZWN0PiBpbiBieXRlcy4KIAotSWYgJy1lJyBpcyBzcGVjaWZpZWQsIG5vIG91dHB1dC4KK0lmIGAtZWAgaXMgc3BlY2lmaWVkLCBubyBvdXRwdXQuCiAKLUlmICctcCcgaXMgc3BlY2lmaWVkLCB0aGUgY29udGVudHMgb2YgPG9iamVjdD4gYXJlIHByZXR0eS1wcmludGVkLgorSWYgYC1wYCBpcyBzcGVjaWZpZWQsIHRoZSBjb250ZW50cyBvZiA8b2JqZWN0PiBhcmUgcHJldHR5LXByaW50ZWQuCiAKIElmIDx0eXBlPiBpcyBzcGVjaWZpZWQsIHRoZSByYXcgKHRob3VnaCB1bmNvbXByZXNzZWQpIGNvbnRlbnRzIG9mIHRoZSA8b2JqZWN0Pgogd2lsbCBiZSByZXR1cm5lZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dAppbmRleCA1ZTUyNzNlLi43YTIyMDFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CkBAIC0xNTcsNyArMTU3LDcgQEAKIAlXaGVuIGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgc2V0IHVwICJ1cHN0cmVhbSIgY29uZmlndXJhdGlvbi4gU2VlCiAJIi0tdHJhY2siIGluIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IgZGV0YWlscy4KICsKLUlmIG5vICctYicgb3B0aW9uIGlzIGdpdmVuLCB0aGUgbmFtZSBvZiB0aGUgbmV3IGJyYW5jaCB3aWxsIGJlCitJZiBubyBgLWJgIG9wdGlvbiBpcyBnaXZlbiwgdGhlIG5hbWUgb2YgdGhlIG5ldyBicmFuY2ggd2lsbCBiZQogZGVyaXZlZCBmcm9tIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBieSBsb29raW5nIGF0IHRoZSBsb2NhbCBwYXJ0IG9mCiB0aGUgcmVmc3BlYyBjb25maWd1cmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUsIGFuZCB0aGVuIHN0cmlwcGluZwogdGhlIGluaXRpYWwgcGFydCB1cCB0byB0aGUgIioiLgpAQCAtMTY1LDcgKzE2NSw3IEBACiBvZmYgb2YgIm9yaWdpbi9oYWNrIiAob3IgInJlbW90ZXMvb3JpZ2luL2hhY2siLCBvciBldmVuCiAicmVmcy9yZW1vdGVzL29yaWdpbi9oYWNrIikuICBJZiB0aGUgZ2l2ZW4gbmFtZSBoYXMgbm8gc2xhc2gsIG9yIHRoZSBhYm92ZQogZ3Vlc3NpbmcgcmVzdWx0cyBpbiBhbiBlbXB0eSBuYW1lLCB0aGUgZ3Vlc3NpbmcgaXMgYWJvcnRlZC4gIFlvdSBjYW4KLWV4cGxpY2l0bHkgZ2l2ZSBhIG5hbWUgd2l0aCAnLWInIGluIHN1Y2ggYSBjYXNlLgorZXhwbGljaXRseSBnaXZlIGEgbmFtZSB3aXRoIGAtYmAgaW4gc3VjaCBhIGNhc2UuCiAKIC0tbm8tdHJhY2s6OgogCURvIG5vdCBzZXQgdXAgInVwc3RyZWFtIiBjb25maWd1cmF0aW9uLCBldmVuIGlmIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0CmluZGV4IGMxMDRhNTkuLmQzNWQ3NzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS1waWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCBjb21taXRzLCBzZWUKIAlsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KIAlTZXRzIG9mIGNvbW1pdHMgY2FuIGJlIHBhc3NlZCBidXQgbm8gdHJhdmVyc2FsIGlzIGRvbmUgYnkKLQlkZWZhdWx0LCBhcyBpZiB0aGUgJy0tbm8td2Fsaycgb3B0aW9uIHdhcyBzcGVjaWZpZWQsIHNlZQorCWRlZmF1bHQsIGFzIGlmIHRoZSBgLS1uby13YWxrYCBvcHRpb24gd2FzIHNwZWNpZmllZCwgc2VlCiAJbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIGEgcmFuZ2Ugd2lsbAogCWZlZWQgYWxsIDxjb21taXQ+Li4uIGFyZ3VtZW50cyB0byBhIHNpbmdsZSByZXZpc2lvbiB3YWxrCiAJKHNlZSBhIGxhdGVyIGV4YW1wbGUgdGhhdCB1c2VzICdtYWludCBtYXN0ZXIuLm5leHQnKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dAppbmRleCA1MWE3ZTI2Li4wMzA1NmRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0CkBAIC0xNiw3ICsxNiw3IEBACiBDbGVhbnMgdGhlIHdvcmtpbmcgdHJlZSBieSByZWN1cnNpdmVseSByZW1vdmluZyBmaWxlcyB0aGF0IGFyZSBub3QKIHVuZGVyIHZlcnNpb24gY29udHJvbCwgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAKLU5vcm1hbGx5LCBvbmx5IGZpbGVzIHVua25vd24gdG8gR2l0IGFyZSByZW1vdmVkLCBidXQgaWYgdGhlICcteCcKK05vcm1hbGx5LCBvbmx5IGZpbGVzIHVua25vd24gdG8gR2l0IGFyZSByZW1vdmVkLCBidXQgaWYgdGhlIGAteGAKIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGlnbm9yZWQgZmlsZXMgYXJlIGFsc28gcmVtb3ZlZC4gVGhpcyBjYW4sIGZvcgogZXhhbXBsZSwgYmUgdXNlZnVsIHRvIHJlbW92ZSBhbGwgYnVpbGQgcHJvZHVjdHMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dAppbmRleCAxYjE1Y2Q3Li5lYzQxZDNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CkBAIC0xOTEsOSArMTkxLDggQEAKIAlDcmVhdGUgYSAnc2hhbGxvdycgY2xvbmUgd2l0aCBhIGhpc3RvcnkgdHJ1bmNhdGVkIHRvIHRoZQogCXNwZWNpZmllZCBudW1iZXIgb2YgY29tbWl0cy4gSW1wbGllcyBgLS1zaW5nbGUtYnJhbmNoYCB1bmxlc3MKIAlgLS1uby1zaW5nbGUtYnJhbmNoYCBpcyBnaXZlbiB0byBmZXRjaCB0aGUgaGlzdG9yaWVzIG5lYXIgdGhlCi0JdGlwcyBvZiBhbGwgYnJhbmNoZXMuIFRoaXMgaW1wbGllcyBgLS1zaGFsbG93LXN1Ym1vZHVsZXNgLiBJZgotCXlvdSB3YW50IHRvIGhhdmUgYSBzaGFsbG93IHN1cGVycHJvamVjdCBjbG9uZSwgYnV0IGZ1bGwgc3VibW9kdWxlcywKLQlhbHNvIHBhc3MgYC0tbm8tc2hhbGxvdy1zdWJtb2R1bGVzYC4KKwl0aXBzIG9mIGFsbCBicmFuY2hlcy4gSWYgeW91IHdhbnQgdG8gY2xvbmUgc3VibW9kdWxlcyBzaGFsbG93bHksCisJYWxzbyBwYXNzIGAtLXNoYWxsb3ctc3VibW9kdWxlc2AuCiAKIC0tW25vLV1zaW5nbGUtYnJhbmNoOjoKIAlDbG9uZSBvbmx5IHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIHRpcCBvZiBhIHNpbmdsZSBicmFuY2gsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQKaW5kZXggY2I2OWZhYS4uMDAyZGFlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dApAQCAtNDQsNyArNDQsNyBAQAogCUFuIGV4aXN0aW5nIHRyZWUgb2JqZWN0CiAKIC1wIDxwYXJlbnQ+OjoKLQlFYWNoICctcCcgaW5kaWNhdGVzIHRoZSBpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0LgorCUVhY2ggYC1wYCBpbmRpY2F0ZXMgdGhlIGlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QuCiAKIC1tIDxtZXNzYWdlPjo6CiAJQSBwYXJhZ3JhcGggaW4gdGhlIGNvbW1pdCBsb2cgbWVzc2FnZS4gVGhpcyBjYW4gYmUgZ2l2ZW4gbW9yZSB0aGFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dAppbmRleCBkNDc0MjI2Li5iMGEyOTRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKQEAgLTc1LDcgKzc1LDcgQEAKIAogLWMgPGNvbW1pdD46OgogLS1yZWVkaXQtbWVzc2FnZT08Y29tbWl0Pjo6Ci0JTGlrZSAnLUMnLCBidXQgd2l0aCAnLWMnIHRoZSBlZGl0b3IgaXMgaW52b2tlZCwgc28gdGhhdAorCUxpa2UgJy1DJywgYnV0IHdpdGggYC1jYCB0aGUgZWRpdG9yIGlzIGludm9rZWQsIHNvIHRoYXQKIAl0aGUgdXNlciBjYW4gZnVydGhlciBlZGl0IHRoZSBjb21taXQgbWVzc2FnZS4KIAogLS1maXh1cD08Y29tbWl0Pjo6CkBAIC0yMDEsNyArMjAxLDcgQEAKIAlPdGhlcndpc2UgYHdoaXRlc3BhY2VgLgogLS0KICsKLVRoZSBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSAnY29tbWl0LmNsZWFudXAnIGNvbmZpZ3VyYXRpb24KK1RoZSBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSBgY29tbWl0LmNsZWFudXBgIGNvbmZpZ3VyYXRpb24KIHZhcmlhYmxlIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KIAogLWU6OgpAQCAtMjYwLDcgKzI2MCw3IEBACiAJc3RhZ2VkIGZvciBvdGhlciBwYXRocy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlIG9mIG9wZXJhdGlvbiBvZgogCSdnaXQgY29tbWl0JyBpZiBhbnkgcGF0aHMgYXJlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsCiAJaW4gd2hpY2ggY2FzZSB0aGlzIG9wdGlvbiBjYW4gYmUgb21pdHRlZC4KLQlJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAnLS1hbWVuZCcsIHRoZW4KKwlJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCBgLS1hbWVuZGAsIHRoZW4KIAlubyBwYXRocyBuZWVkIHRvIGJlIHNwZWNpZmllZCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYW1lbmQKIAl0aGUgbGFzdCBjb21taXQgd2l0aG91dCBjb21taXR0aW5nIGNoYW5nZXMgdGhhdCBoYXZlCiAJYWxyZWFkeSBiZWVuIHN0YWdlZC4KQEAgLTQ1MCw4ICs0NTAsOCBAQAogRU5WSVJPTk1FTlQgQU5EIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRoZSBlZGl0b3IgdXNlZCB0byBlZGl0IHRoZSBjb21taXQgbG9nIG1lc3NhZ2Ugd2lsbCBiZSBjaG9zZW4gZnJvbSB0aGUKLUdJVF9FRElUT1IgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBjb3JlLmVkaXRvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB0aGUKLVZJU1VBTCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgdGhlIEVESVRPUiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoaW4gdGhhdAorYEdJVF9FRElUT1JgIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgY29yZS5lZGl0b3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgdGhlCitgVklTVUFMYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgdGhlIGBFRElUT1JgIGVudmlyb25tZW50IHZhcmlhYmxlIChpbiB0aGF0CiBvcmRlcikuICBTZWUgbGlua2dpdDpnaXQtdmFyWzFdIGZvciBkZXRhaWxzLgogCiBIT09LUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKaW5kZXggNjg0MzExNC4uZjE2MzExMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb25maWcudHh0CkBAIC0zMSwyOSArMzEsMjkgQEAKIGFjdHVhbGx5IHRoZSBzZWN0aW9uIGFuZCB0aGUga2V5IHNlcGFyYXRlZCBieSBhIGRvdCwgYW5kIHRoZSB2YWx1ZSB3aWxsIGJlCiBlc2NhcGVkLgogCi1NdWx0aXBsZSBsaW5lcyBjYW4gYmUgYWRkZWQgdG8gYW4gb3B0aW9uIGJ5IHVzaW5nIHRoZSAnLS1hZGQnIG9wdGlvbi4KK011bHRpcGxlIGxpbmVzIGNhbiBiZSBhZGRlZCB0byBhbiBvcHRpb24gYnkgdXNpbmcgdGhlIGAtLWFkZGAgb3B0aW9uLgogSWYgeW91IHdhbnQgdG8gdXBkYXRlIG9yIHVuc2V0IGFuIG9wdGlvbiB3aGljaCBjYW4gb2NjdXIgb24gbXVsdGlwbGUKIGxpbmVzLCBhIFBPU0lYIHJlZ2V4cCBgdmFsdWVfcmVnZXhgIG5lZWRzIHRvIGJlIGdpdmVuLiAgT25seSB0aGUKIGV4aXN0aW5nIHZhbHVlcyB0aGF0IG1hdGNoIHRoZSByZWdleHAgYXJlIHVwZGF0ZWQgb3IgdW5zZXQuICBJZgogeW91IHdhbnQgdG8gaGFuZGxlIHRoZSBsaW5lcyB0aGF0IGRvICpub3QqIG1hdGNoIHRoZSByZWdleCwganVzdAogcHJlcGVuZCBhIHNpbmdsZSBleGNsYW1hdGlvbiBtYXJrIGluIGZyb250IChzZWUgYWxzbyA8PEVYQU1QTEVTPj4pLgogCi1UaGUgdHlwZSBzcGVjaWZpZXIgY2FuIGJlIGVpdGhlciAnLS1pbnQnIG9yICctLWJvb2wnLCB0byBtYWtlCitUaGUgdHlwZSBzcGVjaWZpZXIgY2FuIGJlIGVpdGhlciBgLS1pbnRgIG9yIGAtLWJvb2xgLCB0byBtYWtlCiAnZ2l0IGNvbmZpZycgZW5zdXJlIHRoYXQgdGhlIHZhcmlhYmxlKHMpIGFyZSBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQKIGNvbnZlcnQgdGhlIHZhbHVlIHRvIHRoZSBjYW5vbmljYWwgZm9ybSAoc2ltcGxlIGRlY2ltYWwgbnVtYmVyIGZvciBpbnQsCi1hICJ0cnVlIiBvciAiZmFsc2UiIHN0cmluZyBmb3IgYm9vbCksIG9yICctLXBhdGgnLCB3aGljaCBkb2VzIHNvbWUKLXBhdGggZXhwYW5zaW9uIChzZWUgJy0tcGF0aCcgYmVsb3cpLiAgSWYgbm8gdHlwZSBzcGVjaWZpZXIgaXMgcGFzc2VkLCBubworYSAidHJ1ZSIgb3IgImZhbHNlIiBzdHJpbmcgZm9yIGJvb2wpLCBvciBgLS1wYXRoYCwgd2hpY2ggZG9lcyBzb21lCitwYXRoIGV4cGFuc2lvbiAoc2VlIGAtLXBhdGhgIGJlbG93KS4gIElmIG5vIHR5cGUgc3BlY2lmaWVyIGlzIHBhc3NlZCwgbm8KIGNoZWNrcyBvciB0cmFuc2Zvcm1hdGlvbnMgYXJlIHBlcmZvcm1lZCBvbiB0aGUgdmFsdWUuCiAKIFdoZW4gcmVhZGluZywgdGhlIHZhbHVlcyBhcmUgcmVhZCBmcm9tIHRoZSBzeXN0ZW0sIGdsb2JhbCBhbmQKIHJlcG9zaXRvcnkgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlcyBieSBkZWZhdWx0LCBhbmQgb3B0aW9ucwotJy0tc3lzdGVtJywgJy0tZ2xvYmFsJywgJy0tbG9jYWwnIGFuZCAnLS1maWxlIDxmaWxlbmFtZT4nIGNhbiBiZQorYC0tc3lzdGVtYCwgYC0tZ2xvYmFsYCwgYC0tbG9jYWxgIGFuZCBgLS1maWxlIDxmaWxlbmFtZT5gIGNhbiBiZQogdXNlZCB0byB0ZWxsIHRoZSBjb21tYW5kIHRvIHJlYWQgZnJvbSBvbmx5IHRoYXQgbG9jYXRpb24gKHNlZSA8PEZJTEVTPj4pLgogCiBXaGVuIHdyaXRpbmcsIHRoZSBuZXcgdmFsdWUgaXMgd3JpdHRlbiB0byB0aGUgcmVwb3NpdG9yeSBsb2NhbAotY29uZmlndXJhdGlvbiBmaWxlIGJ5IGRlZmF1bHQsIGFuZCBvcHRpb25zICctLXN5c3RlbScsICctLWdsb2JhbCcsCi0nLS1maWxlIDxmaWxlbmFtZT4nIGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIGNvbW1hbmQgdG8gd3JpdGUgdG8KLXRoYXQgbG9jYXRpb24gKHlvdSBjYW4gc2F5ICctLWxvY2FsJyBidXQgdGhhdCBpcyB0aGUgZGVmYXVsdCkuCitjb25maWd1cmF0aW9uIGZpbGUgYnkgZGVmYXVsdCwgYW5kIG9wdGlvbnMgYC0tc3lzdGVtYCwgYC0tZ2xvYmFsYCwKK2AtLWZpbGUgPGZpbGVuYW1lPmAgY2FuIGJlIHVzZWQgdG8gdGVsbCB0aGUgY29tbWFuZCB0byB3cml0ZSB0bwordGhhdCBsb2NhdGlvbiAoeW91IGNhbiBzYXkgYC0tbG9jYWxgIGJ1dCB0aGF0IGlzIHRoZSBkZWZhdWx0KS4KIAogVGhpcyBjb21tYW5kIHdpbGwgZmFpbCB3aXRoIG5vbi16ZXJvIHN0YXR1cyB1cG9uIGVycm9yLiAgU29tZSBleGl0CiBjb2RlcyBhcmU6CkBAIC0xMzgsNyArMTM4LDcgQEAKIAlVc2UgdGhlIGdpdmVuIGNvbmZpZyBmaWxlIGluc3RlYWQgb2YgdGhlIG9uZSBzcGVjaWZpZWQgYnkgR0lUX0NPTkZJRy4KIAogLS1ibG9iIGJsb2I6OgotCVNpbWlsYXIgdG8gJy0tZmlsZScgYnV0IHVzZSB0aGUgZ2l2ZW4gYmxvYiBpbnN0ZWFkIG9mIGEgZmlsZS4gRS5nLgorCVNpbWlsYXIgdG8gYC0tZmlsZWAgYnV0IHVzZSB0aGUgZ2l2ZW4gYmxvYiBpbnN0ZWFkIG9mIGEgZmlsZS4gRS5nLgogCXlvdSBjYW4gdXNlICdtYXN0ZXI6LmdpdG1vZHVsZXMnIHRvIHJlYWQgdmFsdWVzIGZyb20gdGhlIGZpbGUKIAknLmdpdG1vZHVsZXMnIGluIHRoZSBtYXN0ZXIgYnJhbmNoLiBTZWUgIlNQRUNJRllJTkcgUkVWSVNJT05TIgogCXNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10gZm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mCkBAIC0yMjAsNyArMjIwLDcgQEAKIC1lOjoKIC0tZWRpdDo6CiAJT3BlbnMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgc3BlY2lmaWVkIGNvbmZpZyBmaWxlOyBlaXRoZXIKLQknLS1zeXN0ZW0nLCAnLS1nbG9iYWwnLCBvciByZXBvc2l0b3J5IChkZWZhdWx0KS4KKwlgLS1zeXN0ZW1gLCBgLS1nbG9iYWxgLCBvciByZXBvc2l0b3J5IChkZWZhdWx0KS4KIAogLS1bbm8tXWluY2x1ZGVzOjoKIAlSZXNwZWN0IGBpbmNsdWRlLipgIGRpcmVjdGl2ZXMgaW4gY29uZmlnIGZpbGVzIHdoZW4gbG9va2luZyB1cApAQCAtMjMyLDcgKzIzMiw3IEBACiBGSUxFUwogLS0tLS0KIAotSWYgbm90IHNldCBleHBsaWNpdGx5IHdpdGggJy0tZmlsZScsIHRoZXJlIGFyZSBmb3VyIGZpbGVzIHdoZXJlCitJZiBub3Qgc2V0IGV4cGxpY2l0bHkgd2l0aCBgLS1maWxlYCwgdGhlcmUgYXJlIGZvdXIgZmlsZXMgd2hlcmUKICdnaXQgY29uZmlnJyB3aWxsIHNlYXJjaCBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zOgogCiAkKHByZWZpeCkvZXRjL2dpdGNvbmZpZzo6CkBAIC0yNjQsMTIgKzI2NCwxMiBAQAogdmFsdWVzIG9mIGEga2V5IGZyb20gYWxsIGZpbGVzIHdpbGwgYmUgdXNlZC4KIAogQWxsIHdyaXRpbmcgb3B0aW9ucyB3aWxsIHBlciBkZWZhdWx0IHdyaXRlIHRvIHRoZSByZXBvc2l0b3J5IHNwZWNpZmljCi1jb25maWd1cmF0aW9uIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGFsc28gYWZmZWN0cyBvcHRpb25zIGxpa2UgJy0tcmVwbGFjZS1hbGwnCi1hbmQgJy0tdW5zZXQnLiAqJ2dpdCBjb25maWcnIHdpbGwgb25seSBldmVyIGNoYW5nZSBvbmUgZmlsZSBhdCBhIHRpbWUqLgorY29uZmlndXJhdGlvbiBmaWxlLiBOb3RlIHRoYXQgdGhpcyBhbHNvIGFmZmVjdHMgb3B0aW9ucyBsaWtlIGAtLXJlcGxhY2UtYWxsYAorYW5kIGAtLXVuc2V0YC4gKidnaXQgY29uZmlnJyB3aWxsIG9ubHkgZXZlciBjaGFuZ2Ugb25lIGZpbGUgYXQgYSB0aW1lKi4KIAogWW91IGNhbiBvdmVycmlkZSB0aGVzZSBydWxlcyBlaXRoZXIgYnkgY29tbWFuZC1saW5lIG9wdGlvbnMgb3IgYnkgZW52aXJvbm1lbnQKLXZhcmlhYmxlcy4gVGhlICctLWdsb2JhbCcgYW5kIHRoZSAnLS1zeXN0ZW0nIG9wdGlvbnMgd2lsbCBsaW1pdCB0aGUgZmlsZSB1c2VkCi10byB0aGUgZ2xvYmFsIG9yIHN5c3RlbS13aWRlIGZpbGUgcmVzcGVjdGl2ZWx5LiBUaGUgR0lUX0NPTkZJRyBlbnZpcm9ubWVudAordmFyaWFibGVzLiBUaGUgYC0tZ2xvYmFsYCBhbmQgdGhlIGAtLXN5c3RlbWAgb3B0aW9ucyB3aWxsIGxpbWl0IHRoZSBmaWxlIHVzZWQKK3RvIHRoZSBnbG9iYWwgb3Igc3lzdGVtLXdpZGUgZmlsZSByZXNwZWN0aXZlbHkuIFRoZSBgR0lUX0NPTkZJR2AgZW52aXJvbm1lbnQKIHZhcmlhYmxlIGhhcyBhIHNpbWlsYXIgZWZmZWN0LCBidXQgeW91IGNhbiBzcGVjaWZ5IGFueSBmaWxlbmFtZSB5b3Ugd2FudC4KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLXN0b3JlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtc3RvcmUudHh0CmluZGV4IGUzYzhmMjcuLjI1ZmI5NjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtc3RvcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtc3RvcmUudHh0CkBAIC00NCw3ICs0NCw3IEBACiBGSUxFUwogLS0tLS0KIAotSWYgbm90IHNldCBleHBsaWNpdGx5IHdpdGggJy0tZmlsZScsIHRoZXJlIGFyZSB0d28gZmlsZXMgd2hlcmUKK0lmIG5vdCBzZXQgZXhwbGljaXRseSB3aXRoIGAtLWZpbGVgLCB0aGVyZSBhcmUgdHdvIGZpbGVzIHdoZXJlCiBnaXQtY3JlZGVudGlhbC1zdG9yZSB3aWxsIHNlYXJjaCBmb3IgY3JlZGVudGlhbHMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKIAogfi8uZ2l0LWNyZWRlbnRpYWxzOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0CmluZGV4IDAwYTA2NzkuLjQxMjA3YTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dApAQCAtNzQsMTAgKzc0LDEwIEBACiAJYWtpbiB0byB0aGUgd2F5ICdnaXQgY2xvbmUnIHVzZXMgJ29yaWdpbicgYnkgZGVmYXVsdC4KIAogLW8gPGJyYW5jaC1mb3ItSEVBRD46OgotCVdoZW4gbm8gcmVtb3RlIGlzIHNwZWNpZmllZCAodmlhIC1yKSB0aGUgJ0hFQUQnIGJyYW5jaAorCVdoZW4gbm8gcmVtb3RlIGlzIHNwZWNpZmllZCAodmlhIC1yKSB0aGUgYEhFQURgIGJyYW5jaAogCWZyb20gQ1ZTIGlzIGltcG9ydGVkIHRvIHRoZSAnb3JpZ2luJyBicmFuY2ggd2l0aGluIHRoZSBHaXQKLQlyZXBvc2l0b3J5LCBhcyAnSEVBRCcgYWxyZWFkeSBoYXMgYSBzcGVjaWFsIG1lYW5pbmcgZm9yIEdpdC4KLQlXaGVuIGEgcmVtb3RlIGlzIHNwZWNpZmllZCB0aGUgJ0hFQUQnIGJyYW5jaCBpcyBuYW1lZAorCXJlcG9zaXRvcnksIGFzIGBIRUFEYCBhbHJlYWR5IGhhcyBhIHNwZWNpYWwgbWVhbmluZyBmb3IgR2l0LgorCVdoZW4gYSByZW1vdGUgaXMgc3BlY2lmaWVkIHRoZSBgSEVBRGAgYnJhbmNoIGlzIG5hbWVkCiAJcmVtb3Rlcy88cmVtb3RlPi9tYXN0ZXIgbWlycm9yaW5nICdnaXQgY2xvbmUnIGJlaGF2aW91ci4KIAlVc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gaW1wb3J0IGludG8gYSBkaWZmZXJlbnQKIAlicmFuY2guCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogLXAgPG9wdGlvbnMtZm9yLWN2c3BzPjo6CiAJQWRkaXRpb25hbCBvcHRpb25zIGZvciBjdnNwcy4KLQlUaGUgb3B0aW9ucyAnLXUnIGFuZCAnLUEnIGFyZSBpbXBsaWNpdCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmUuCisJVGhlIG9wdGlvbnMgYC11YCBhbmQgJy1BJyBhcmUgaW1wbGljaXQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBoZXJlLgogKwogSWYgeW91IG5lZWQgdG8gcGFzcyBtdWx0aXBsZSBvcHRpb25zLCBzZXBhcmF0ZSB0aGVtIHdpdGggYSBjb21tYS4KIApAQCAtMTIyLDcgKzEyMiw3IEBACiAKIC1NIDxyZWdleD46OgogCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCBhIGN1c3RvbQotCXJlZ2V4LiBJdCBjYW4gYmUgdXNlZCB3aXRoICctbScgdG8gZW5hYmxlIHRoZSBkZWZhdWx0IHJlZ2V4ZXMKKwlyZWdleC4gSXQgY2FuIGJlIHVzZWQgd2l0aCBgLW1gIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCByZWdleGVzCiAJYXMgd2VsbC4gWW91IG11c3QgZXNjYXBlIGZvcndhcmQgc2xhc2hlcy4KICsKIFRoZSByZWdleCBtdXN0IGNhcHR1cmUgdGhlIHNvdXJjZSBicmFuY2ggbmFtZSBpbiAkMS4KQEAgLTE4Niw3ICsxODYsNyBAQAogCiBPVVRQVVQKIC0tLS0tLQotSWYgJy12JyBpcyBzcGVjaWZpZWQsIHRoZSBzY3JpcHQgcmVwb3J0cyB3aGF0IGl0IGlzIGRvaW5nLgorSWYgYC12YCBpcyBzcGVjaWZpZWQsIHRoZSBzY3JpcHQgcmVwb3J0cyB3aGF0IGl0IGlzIGRvaW5nLgogCiBPdGhlcndpc2UsIHN1Y2Nlc3MgaXMgaW5kaWNhdGVkIHRoZSBVbml4IHdheSwgaS5lLiBieSBzaW1wbHkgZXhpdGluZyB3aXRoCiBhIHplcm8gZXhpdCBzdGF0dXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dAppbmRleCBkYjRkN2E5Li5hMzM2YWU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKQEAgLTU0LDcgKzU0LDcgQEAKIFlvdSBjYW4gc3BlY2lmeSBhIGxpc3Qgb2YgYWxsb3dlZCBkaXJlY3Rvcmllcy4gSWYgbm8gZGlyZWN0b3JpZXMKIGFyZSBnaXZlbiwgYWxsIGFyZSBhbGxvd2VkLiBUaGlzIGlzIGFuIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24sIGdpdGN2cwogYWNjZXNzIHN0aWxsIG5lZWRzIHRvIGJlIGVuYWJsZWQgYnkgdGhlIGBnaXRjdnMuZW5hYmxlZGAgY29uZmlnIG9wdGlvbgotdW5sZXNzICctLWV4cG9ydC1hbGwnIHdhcyBnaXZlbiwgdG9vLgordW5sZXNzIGAtLWV4cG9ydC1hbGxgIHdhcyBnaXZlbiwgdG9vLgogCiAKIERFU0NSSVBUSU9OCkBAIC0zMzIsNyArMzMyLDcgQEAKIDMuIEJyb3dzZSB0aGUgJ21vZHVsZXMnIGF2YWlsYWJsZS4gSXQgd2lsbCBnaXZlIHlvdSBhIGxpc3Qgb2YgdGhlIGhlYWRzIGluCiAgICB0aGUgcmVwb3NpdG9yeS4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gYnJvd3NlIHRoZSB0cmVlIGZyb20gdGhlcmUuIE9ubHkKICAgIHRoZSBoZWFkcy4KLTQuIFBpY2sgJ0hFQUQnIHdoZW4gaXQgYXNrcyB3aGF0IGJyYW5jaC90YWcgdG8gY2hlY2sgb3V0LiBVbnRpY2sgdGhlCis0LiBQaWNrIGBIRUFEYCB3aGVuIGl0IGFza3Mgd2hhdCBicmFuY2gvdGFnIHRvIGNoZWNrIG91dC4gVW50aWNrIHRoZQogICAgImxhdW5jaCBjb21taXQgd2l6YXJkIiB0byBhdm9pZCBjb21taXR0aW5nIHRoZSAucHJvamVjdCBmaWxlLgogCiBQcm90b2NvbCBub3RlczogSWYgeW91IGFyZSB1c2luZyBhbm9ueW1vdXMgYWNjZXNzIHZpYSBwc2VydmVyLCBqdXN0IHNlbGVjdCB0aGF0LgpAQCAtNDAyLDEyICs0MDIsMTIgQEAKIENSTEYgTGluZSBFbmRpbmcgQ29udmVyc2lvbnMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotQnkgZGVmYXVsdCB0aGUgc2VydmVyIGxlYXZlcyB0aGUgJy1rJyBtb2RlIGJsYW5rIGZvciBhbGwgZmlsZXMsCitCeSBkZWZhdWx0IHRoZSBzZXJ2ZXIgbGVhdmVzIHRoZSBgLWtgIG1vZGUgYmxhbmsgZm9yIGFsbCBmaWxlcywKIHdoaWNoIGNhdXNlcyB0aGUgQ1ZTIGNsaWVudCB0byB0cmVhdCB0aGVtIGFzIGEgdGV4dCBmaWxlcywgc3ViamVjdAogdG8gZW5kLW9mLWxpbmUgY29udmVyc2lvbiBvbiBzb21lIHBsYXRmb3Jtcy4KIAogWW91IGNhbiBtYWtlIHRoZSBzZXJ2ZXIgdXNlIHRoZSBlbmQtb2YtbGluZSBjb252ZXJzaW9uIGF0dHJpYnV0ZXMgdG8KLXNldCB0aGUgJy1rJyBtb2RlcyBmb3IgZmlsZXMgYnkgc2V0dGluZyB0aGUgYGdpdGN2cy51c2VjcmxmYXR0cmAKK3NldCB0aGUgYC1rYCBtb2RlcyBmb3IgZmlsZXMgYnkgc2V0dGluZyB0aGUgYGdpdGN2cy51c2VjcmxmYXR0cmAKIGNvbmZpZyB2YXJpYWJsZS4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIG1vcmUgaW5mb3JtYXRpb24KIGFib3V0IGVuZC1vZi1saW5lIGNvbnZlcnNpb24uCiAKQEAgLTQxNSw5ICs0MTUsOSBAQAogb3IgdGhlIGF0dHJpYnV0ZXMgZG8gbm90IGFsbG93IGF1dG9tYXRpYyBkZXRlY3Rpb24gZm9yIGEgZmlsZW5hbWUsIHRoZW4KIHRoZSBzZXJ2ZXIgdXNlcyB0aGUgYGdpdGN2cy5hbGxCaW5hcnlgIGNvbmZpZyBmb3IgdGhlIGRlZmF1bHQgc2V0dGluZy4KIElmIGBnaXRjdnMuYWxsQmluYXJ5YCBpcyBzZXQsIHRoZW4gZmlsZSBub3Qgb3RoZXJ3aXNlCi1zcGVjaWZpZWQgd2lsbCBkZWZhdWx0IHRvICcta2InIG1vZGUuIE90aGVyd2lzZSB0aGUgJy1rJyBtb2RlCitzcGVjaWZpZWQgd2lsbCBkZWZhdWx0IHRvICcta2InIG1vZGUuIE90aGVyd2lzZSB0aGUgYC1rYCBtb2RlCiBpcyBsZWZ0IGJsYW5rLiBCdXQgaWYgYGdpdGN2cy5hbGxCaW5hcnlgIGlzIHNldCB0byAiZ3Vlc3MiLCB0aGVuCi10aGUgY29ycmVjdCAnLWsnIG1vZGUgd2lsbCBiZSBndWVzc2VkIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZgordGhlIGNvcnJlY3QgYC1rYCBtb2RlIHdpbGwgYmUgZ3Vlc3NlZCBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YKIHRoZSBmaWxlLgogCiBGb3IgYmVzdCBjb25zaXN0ZW5jeSB3aXRoICdjdnMnLCBpdCBpcyBwcm9iYWJseSBiZXN0IHRvIG92ZXJyaWRlIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQKaW5kZXggYTY5YjM2MS4uM2M5MWRiNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0CkBAIC0zMCw3ICszMCw3IEBACiAKIEl0IHZlcmlmaWVzIHRoYXQgdGhlIGRpcmVjdG9yeSBoYXMgdGhlIG1hZ2ljIGZpbGUgImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgYW5kCiBpdCB3aWxsIHJlZnVzZSB0byBleHBvcnQgYW55IEdpdCBkaXJlY3RvcnkgdGhhdCBoYXNuJ3QgZXhwbGljaXRseSBiZWVuIG1hcmtlZAotZm9yIGV4cG9ydCB0aGlzIHdheSAodW5sZXNzIHRoZSAnLS1leHBvcnQtYWxsJyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkKS4gSWYgeW91Citmb3IgZXhwb3J0IHRoaXMgd2F5ICh1bmxlc3MgdGhlIGAtLWV4cG9ydC1hbGxgIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQpLiBJZiB5b3UKIHBhc3Mgc29tZSBkaXJlY3RvcnkgcGF0aHMgYXMgJ2dpdCBkYWVtb24nIGFyZ3VtZW50cywgeW91IGNhbiBmdXJ0aGVyIHJlc3RyaWN0CiB0aGUgb2ZmZXJzIHRvIGEgd2hpdGVsaXN0IGNvbXByaXNpbmcgb2YgdGhvc2UuCiAKQEAgLTkwLDEwICs5MCwxMCBAQAogCWlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gLS1saXN0ZW49aG9zdG5hbWUgaXMgYWxzbyBub3Qgc3VwcG9ydGVkIGFuZAogCS0tbGlzdGVuIG11c3QgYmUgZ2l2ZW4gYW4gSVB2NCBhZGRyZXNzLgogCUNhbiBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KLQlJbmNvbXBhdGlibGUgd2l0aCAnLS1pbmV0ZCcgb3B0aW9uLgorCUluY29tcGF0aWJsZSB3aXRoIGAtLWluZXRkYCBvcHRpb24uCiAKIC0tcG9ydD08bj46OgotCUxpc3RlbiBvbiBhbiBhbHRlcm5hdGl2ZSBwb3J0LiAgSW5jb21wYXRpYmxlIHdpdGggJy0taW5ldGQnIG9wdGlvbi4KKwlMaXN0ZW4gb24gYW4gYWx0ZXJuYXRpdmUgcG9ydC4gIEluY29tcGF0aWJsZSB3aXRoIGAtLWluZXRkYCBvcHRpb24uCiAKIC0taW5pdC10aW1lb3V0PTxuPjo6CiAJVGltZW91dCAoaW4gc2Vjb25kcykgYmV0d2VlbiB0aGUgbW9tZW50IHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCkBAIC0xODgsNyArMTg4LDcgQEAKIAlhcmd1bWVudHMuIFRoZSBleHRlcm5hbCBjb21tYW5kIGNhbiBkZWNpZGUgdG8gZGVjbGluZSB0aGUKIAlzZXJ2aWNlIGJ5IGV4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyAob3IgdG8gYWxsb3cgaXQgYnkKIAlleGl0aW5nIHdpdGggYSB6ZXJvIHN0YXR1cykuICBJdCBjYW4gYWxzbyBsb29rIGF0IHRoZSAkUkVNT1RFX0FERFIKLQlhbmQgJFJFTU9URV9QT1JUIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBsZWFybiBhYm91dCB0aGUKKwlhbmQgYCRSRU1PVEVfUE9SVGAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGxlYXJuIGFib3V0IHRoZQogCXJlcXVlc3RvciB3aGVuIG1ha2luZyB0aGlzIGRlY2lzaW9uLgogKwogVGhlIGV4dGVybmFsIGNvbW1hbmQgY2FuIG9wdGlvbmFsbHkgd3JpdGUgYSBzaW5nbGUgbGluZSB0byBpdHMKQEAgLTI5Niw3ICsyOTYsNyBAQAogc2VsZWN0aXZlbHkgZW5hYmxlL2Rpc2FibGUgc2VydmljZXMgcGVyIHJlcG9zaXRvcnk6OgogCVRvIGVuYWJsZSAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUnIGFuZCBkaXNhYmxlICdnaXQgZmV0Y2gnIGFnYWluc3QKIAlhIHJlcG9zaXRvcnksIGhhdmUgdGhlIGZvbGxvd2luZyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQotCXJlcG9zaXRvcnkgKHRoYXQgaXMgdGhlIGZpbGUgJ2NvbmZpZycgbmV4dCB0byAnSEVBRCcsICdyZWZzJyBhbmQKKwlyZXBvc2l0b3J5ICh0aGF0IGlzIHRoZSBmaWxlICdjb25maWcnIG5leHQgdG8gYEhFQURgLCAncmVmcycgYW5kCiAJJ29iamVjdHMnKS4KICsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dAppbmRleCBjOGYyOGM4Li5lNGFjNDQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0CkBAIC0xNTQsNyArMTU0LDcgQEAKIElmIGFuIGV4YWN0IG1hdGNoIHdhcyBub3QgZm91bmQsICdnaXQgZGVzY3JpYmUnIHdpbGwgd2FsayBiYWNrCiB0aHJvdWdoIHRoZSBjb21taXQgaGlzdG9yeSB0byBsb2NhdGUgYW4gYW5jZXN0b3IgY29tbWl0IHdoaWNoCiBoYXMgYmVlbiB0YWdnZWQuICBUaGUgYW5jZXN0b3IncyB0YWcgd2lsbCBiZSBvdXRwdXQgYWxvbmcgd2l0aCBhbgotYWJicmV2aWF0aW9uIG9mIHRoZSBpbnB1dCBjb21taXQtaXNoJ3MgU0hBLTEuIElmICctLWZpcnN0LXBhcmVudCcgd2FzCithYmJyZXZpYXRpb24gb2YgdGhlIGlucHV0IGNvbW1pdC1pc2gncyBTSEEtMS4gSWYgYC0tZmlyc3QtcGFyZW50YCB3YXMKIHNwZWNpZmllZCB0aGVuIHRoZSB3YWxrIHdpbGwgb25seSBjb25zaWRlciB0aGUgZmlyc3QgcGFyZW50IG9mIGVhY2gKIGNvbW1pdC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dAppbmRleCBhODZjZjYyLi5hMTcxNTA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dApAQCAtNDAsMTMgKzQwLDEzIEBACiBPcGVyYXRpbmcgTW9kZXMKIC0tLS0tLS0tLS0tLS0tLQogWW91IGNhbiBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byB0cnVzdCB0aGUgaW5kZXggZmlsZSBlbnRpcmVseQotKHVzaW5nIHRoZSAnLS1jYWNoZWQnIGZsYWcpIG9yIGFzayB0aGUgZGlmZiBsb2dpYyB0byBzaG93IGFueSBmaWxlcworKHVzaW5nIHRoZSBgLS1jYWNoZWRgIGZsYWcpIG9yIGFzayB0aGUgZGlmZiBsb2dpYyB0byBzaG93IGFueSBmaWxlcwogdGhhdCBkb24ndCBtYXRjaCB0aGUgc3RhdCBzdGF0ZSBhcyBiZWluZyAidGVudGF0aXZlbHkgY2hhbmdlZCIuICBCb3RoCiBvZiB0aGVzZSBvcGVyYXRpb25zIGFyZSB2ZXJ5IHVzZWZ1bCBpbmRlZWQuCiAKIENhY2hlZCBNb2RlCiAtLS0tLS0tLS0tLQotSWYgJy0tY2FjaGVkJyBpcyBzcGVjaWZpZWQsIGl0IGFsbG93cyB5b3UgdG8gYXNrOgorSWYgYC0tY2FjaGVkYCBpcyBzcGVjaWZpZWQsIGl0IGFsbG93cyB5b3UgdG8gYXNrOgogCiAJc2hvdyBtZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBIRUFEIGFuZCB0aGUgY3VycmVudCBpbmRleAogCWNvbnRlbnRzICh0aGUgb25lcyBJJ2Qgd3JpdGUgdXNpbmcgJ2dpdCB3cml0ZS10cmVlJykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0CmluZGV4IDE0Mzk0ODYuLjc4NzBlMTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dApAQCAtNDMsMTEgKzQzLDExIEBACiAJc2hvdyB0cmVlIGVudHJ5IGl0c2VsZiBhcyB3ZWxsIGFzIHN1YnRyZWVzLiAgSW1wbGllcyAtci4KIAogLS1yb290OjoKLQlXaGVuICctLXJvb3QnIGlzIHNwZWNpZmllZCB0aGUgaW5pdGlhbCBjb21taXQgd2lsbCBiZSBzaG93biBhcyBhIGJpZworCVdoZW4gYC0tcm9vdGAgaXMgc3BlY2lmaWVkIHRoZSBpbml0aWFsIGNvbW1pdCB3aWxsIGJlIHNob3duIGFzIGEgYmlnCiAJY3JlYXRpb24gZXZlbnQuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhIGRpZmYgYWdhaW5zdCB0aGUgTlVMTCB0cmVlLgogCiAtLXN0ZGluOjoKLQlXaGVuICctLXN0ZGluJyBpcyBzcGVjaWZpZWQsIHRoZSBjb21tYW5kIGRvZXMgbm90IHRha2UKKwlXaGVuIGAtLXN0ZGluYCBpcyBzcGVjaWZpZWQsIHRoZSBjb21tYW5kIGRvZXMgbm90IHRha2UKIAk8dHJlZS1pc2g+IGFyZ3VtZW50cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBJbnN0ZWFkLCBpdAogCXJlYWRzIGxpbmVzIGNvbnRhaW5pbmcgZWl0aGVyIHR3byA8dHJlZT4sIG9uZSA8Y29tbWl0Piwgb3IgYQogCWxpc3Qgb2YgPGNvbW1pdD4gZnJvbSBpdHMgc3RhbmRhcmQgaW5wdXQuICAoVXNlIGEgc2luZ2xlIHNwYWNlCkBAIC03MCwxMyArNzAsMTMgQEAKIAlCeSBkZWZhdWx0LCAnZ2l0IGRpZmYtdHJlZSAtLXN0ZGluJyBkb2VzIG5vdCBzaG93CiAJZGlmZmVyZW5jZXMgZm9yIG1lcmdlIGNvbW1pdHMuICBXaXRoIHRoaXMgZmxhZywgaXQgc2hvd3MKIAlkaWZmZXJlbmNlcyB0byB0aGF0IGNvbW1pdCBmcm9tIGFsbCBvZiBpdHMgcGFyZW50cy4gU2VlCi0JYWxzbyAnLWMnLgorCWFsc28gYC1jYC4KIAogLXM6OgogCUJ5IGRlZmF1bHQsICdnaXQgZGlmZi10cmVlIC0tc3RkaW4nIHNob3dzIGRpZmZlcmVuY2VzLAotCWVpdGhlciBpbiBtYWNoaW5lLXJlYWRhYmxlIGZvcm0gKHdpdGhvdXQgJy1wJykgb3IgaW4gcGF0Y2gKLQlmb3JtICh3aXRoICctcCcpLiAgVGhpcyBvdXRwdXQgY2FuIGJlIHN1cHByZXNzZWQuICBJdCBpcwotCW9ubHkgdXNlZnVsIHdpdGggJy12JyBmbGFnLgorCWVpdGhlciBpbiBtYWNoaW5lLXJlYWRhYmxlIGZvcm0gKHdpdGhvdXQgYC1wYCkgb3IgaW4gcGF0Y2gKKwlmb3JtICh3aXRoIGAtcGApLiAgVGhpcyBvdXRwdXQgY2FuIGJlIHN1cHByZXNzZWQuICBJdCBpcworCW9ubHkgdXNlZnVsIHdpdGggYC12YCBmbGFnLgogCiAtdjo6CiAJVGhpcyBmbGFnIGNhdXNlcyAnZ2l0IGRpZmYtdHJlZSAtLXN0ZGluJyB0byBhbHNvIHNob3cKQEAgLTkxLDE3ICs5MSwxNyBAQAogLWM6OgogCVRoaXMgZmxhZyBjaGFuZ2VzIHRoZSB3YXkgYSBtZXJnZSBjb21taXQgaXMgZGlzcGxheWVkCiAJKHdoaWNoIG1lYW5zIGl0IGlzIHVzZWZ1bCBvbmx5IHdoZW4gdGhlIGNvbW1hbmQgaXMgZ2l2ZW4KLQlvbmUgPHRyZWUtaXNoPiwgb3IgJy0tc3RkaW4nKS4gIEl0IHNob3dzIHRoZSBkaWZmZXJlbmNlcworCW9uZSA8dHJlZS1pc2g+LCBvciBgLS1zdGRpbmApLiAgSXQgc2hvd3MgdGhlIGRpZmZlcmVuY2VzCiAJZnJvbSBlYWNoIG9mIHRoZSBwYXJlbnRzIHRvIHRoZSBtZXJnZSByZXN1bHQgc2ltdWx0YW5lb3VzbHkKIAlpbnN0ZWFkIG9mIHNob3dpbmcgcGFpcndpc2UgZGlmZiBiZXR3ZWVuIGEgcGFyZW50IGFuZCB0aGUKLQlyZXN1bHQgb25lIGF0IGEgdGltZSAod2hpY2ggaXMgd2hhdCB0aGUgJy1tJyBvcHRpb24gZG9lcykuCisJcmVzdWx0IG9uZSBhdCBhIHRpbWUgKHdoaWNoIGlzIHdoYXQgdGhlIGAtbWAgb3B0aW9uIGRvZXMpLgogCUZ1cnRoZXJtb3JlLCBpdCBsaXN0cyBvbmx5IGZpbGVzIHdoaWNoIHdlcmUgbW9kaWZpZWQKIAlmcm9tIGFsbCBwYXJlbnRzLgogCiAtLWNjOjoKIAlUaGlzIGZsYWcgY2hhbmdlcyB0aGUgd2F5IGEgbWVyZ2UgY29tbWl0IHBhdGNoIGlzIGRpc3BsYXllZCwKLQlpbiBhIHNpbWlsYXIgd2F5IHRvIHRoZSAnLWMnIG9wdGlvbi4gSXQgaW1wbGllcyB0aGUgJy1jJwotCWFuZCAnLXAnIG9wdGlvbnMgYW5kIGZ1cnRoZXIgY29tcHJlc3NlcyB0aGUgcGF0Y2ggb3V0cHV0CisJaW4gYSBzaW1pbGFyIHdheSB0byB0aGUgYC1jYCBvcHRpb24uIEl0IGltcGxpZXMgdGhlIGAtY2AKKwlhbmQgYC1wYCBvcHRpb25zIGFuZCBmdXJ0aGVyIGNvbXByZXNzZXMgdGhlIHBhdGNoIG91dHB1dAogCWJ5IG9taXR0aW5nIHVuaW50ZXJlc3RpbmcgaHVua3Mgd2hvc2UgdGhlIGNvbnRlbnRzIGluIHRoZSBwYXJlbnRzCiAJaGF2ZSBvbmx5IHR3byB2YXJpYW50cyBhbmQgdGhlIG1lcmdlIHJlc3VsdCBwaWNrcyBvbmUgb2YgdGhlbQogCXdpdGhvdXQgbW9kaWZpY2F0aW9uLiAgV2hlbiBhbGwgaHVua3MgYXJlIHVuaW50ZXJlc3RpbmcsIHRoZSBjb21taXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmZ0b29sLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmZ0b29sLnR4dAppbmRleCAzMzNjZjZmLi4yMjRmYjMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmdG9vbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0CkBAIC05OCw3ICs5OCw3IEBACiAJaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgY29kZS4KICsKICdnaXQtZGlmZnRvb2wnIHdpbGwgZm9yd2FyZCB0aGUgZXhpdCBjb2RlIG9mIHRoZSBpbnZva2VkIHRvb2wgd2hlbgotJy0tdHJ1c3QtZXhpdC1jb2RlJyBpcyB1c2VkLgorYC0tdHJ1c3QtZXhpdC1jb2RlYCBpcyB1c2VkLgogCiBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXSBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgb3B0aW9ucy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0CmluZGV4IDY2OTEwYWEuLjJiNzYyNjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWltcG9ydC50eHQKQEAgLTEzNiw2ICsxMzYsOCBAQAogCU1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrZmlsZS4KIAlUaGUgZGVmYXVsdCBpcyB1bmxpbWl0ZWQuCiAKK2Zhc3RpbXBvcnQudW5wYWNrTGltaXQ6OgorCVNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0KIAogUGVyZm9ybWFuY2UKIC0tLS0tLS0tLS0tCkBAIC0xMDU0LDcgKzEwNTYsNyBAQAogbm8tcmVsYXRpdmUtbWFya3M6OgogZm9yY2U6OgogCUFjdCBhcyB0aG91Z2ggdGhlIGNvcnJlc3BvbmRpbmcgY29tbWFuZC1saW5lIG9wdGlvbiB3aXRoCi0JYSBsZWFkaW5nICctLScgd2FzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lCisJYSBsZWFkaW5nIGAtLWAgd2FzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lCiAJKHNlZSBPUFRJT05TLCBhYm92ZSkuCiAKIGltcG9ydC1tYXJrczo6CkBAIC0xMTA1LDcgKzExMDcsNyBAQAogCiBUaGUgYDxvcHRpb24+YCBwYXJ0IG9mIHRoZSBjb21tYW5kIG1heSBjb250YWluIGFueSBvZiB0aGUgb3B0aW9ucwogbGlzdGVkIGluIHRoZSBPUFRJT05TIHNlY3Rpb24gdGhhdCBkbyBub3QgY2hhbmdlIGltcG9ydCBzZW1hbnRpY3MsCi13aXRob3V0IHRoZSBsZWFkaW5nICctLScgYW5kIGlzIHRyZWF0ZWQgaW4gdGhlIHNhbWUgd2F5Lgord2l0aG91dCB0aGUgbGVhZGluZyBgLS1gIGFuZCBpcyB0cmVhdGVkIGluIHRoZSBzYW1lIHdheS4KIAogT3B0aW9uIGNvbW1hbmRzIG11c3QgYmUgdGhlIGZpcnN0IGNvbW1hbmRzIG9uIHRoZSBpbnB1dCAobm90IGNvdW50aW5nCiBmZWF0dXJlIGNvbW1hbmRzKSwgdG8gZ2l2ZSBhbiBvcHRpb24gY29tbWFuZCBhZnRlciBhbnkgbm9uLW9wdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dAppbmRleCAyMzk2MjNjLi4yNDQxN2VlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dApAQCAtNDEsMTMgKzQxLDEzIEBACiAJb3B0aW9uLCB0aGVuIHRoZSByZWZzIGZyb20gc3RkaW4gYXJlIHByb2Nlc3NlZCBhZnRlciB0aG9zZQogCW9uIHRoZSBjb21tYW5kIGxpbmUuCiArCi1JZiAnLS1zdGF0ZWxlc3MtcnBjJyBpcyBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCB0aGlzIG9wdGlvbiB0aGVuCitJZiBgLS1zdGF0ZWxlc3MtcnBjYCBpcyBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCB0aGlzIG9wdGlvbiB0aGVuCiB0aGUgbGlzdCBvZiByZWZzIG11c3QgYmUgaW4gcGFja2V0IGZvcm1hdCAocGt0LWxpbmUpLiBFYWNoIHJlZiBtdXN0CiBiZSBpbiBhIHNlcGFyYXRlIHBhY2tldCwgYW5kIHRoZSBsaXN0IG11c3QgZW5kIHdpdGggYSBmbHVzaCBwYWNrZXQuCiAKIC1xOjoKIC0tcXVpZXQ6OgotCVBhc3MgJy1xJyBmbGFnIHRvICdnaXQgdW5wYWNrLW9iamVjdHMnOyB0aGlzIG1ha2VzIHRoZQorCVBhc3MgYC1xYCBmbGFnIHRvICdnaXQgdW5wYWNrLW9iamVjdHMnOyB0aGlzIG1ha2VzIHRoZQogCWNsb25pbmcgcHJvY2VzcyBsZXNzIHZlcmJvc2UuCiAKIC1rOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLnR4dAppbmRleCBlZmU1NmUwLi45ZTQyMTY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gudHh0CkBAIC05OSw2ICs5OSw1NyBAQAogb3ZlcnJpZGRlbiBieSBnaXZpbmcgdGhlIGAtLXJlZm1hcD08cmVmc3BlYz5gIHBhcmFtZXRlcihzKSBvbiB0aGUKIGNvbW1hbmQgbGluZS4KIAorT1VUUFVUCistLS0tLS0KKworVGhlIG91dHB1dCBvZiAiZ2l0IGZldGNoIiBkZXBlbmRzIG9uIHRoZSB0cmFuc3BvcnQgbWV0aG9kIHVzZWQ7IHRoaXMKK3NlY3Rpb24gZGVzY3JpYmVzIHRoZSBvdXRwdXQgd2hlbiBmZXRjaGluZyBvdmVyIHRoZSBHaXQgcHJvdG9jb2wKKyhlaXRoZXIgbG9jYWxseSBvciB2aWEgc3NoKSBhbmQgU21hcnQgSFRUUCBwcm90b2NvbC4KKworVGhlIHN0YXR1cyBvZiB0aGUgZmV0Y2ggaXMgb3V0cHV0IGluIHRhYnVsYXIgZm9ybSwgd2l0aCBlYWNoIGxpbmUKK3JlcHJlc2VudGluZyB0aGUgc3RhdHVzIG9mIGEgc2luZ2xlIHJlZi4gRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgPGZsYWc+IDxzdW1tYXJ5PiA8ZnJvbT4gLT4gPHRvPiBbPHJlYXNvbj5dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzdGF0dXMgb2YgdXAtdG8tZGF0ZSByZWZzIGlzIHNob3duIG9ubHkgaWYgdGhlIC0tdmVyYm9zZSBvcHRpb24gaXMKK3VzZWQuCisKK0luIGNvbXBhY3Qgb3V0cHV0IG1vZGUsIHNwZWNpZmllZCB3aXRoIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKK2ZldGNoLm91dHB1dCwgaWYgZWl0aGVyIGVudGlyZSBgPGZyb20+YCBvciBgPHRvPmAgaXMgZm91bmQgaW4gdGhlCitvdGhlciBzdHJpbmcsIGl0IHdpbGwgYmUgc3Vic3RpdHV0ZWQgd2l0aCBgKmAgaW4gdGhlIG90aGVyIHN0cmluZy4gRm9yCitleGFtcGxlLCBgbWFzdGVyIC0+IG9yaWdpbi9tYXN0ZXJgIGJlY29tZXMgYG1hc3RlciAtPiBvcmlnaW4vKmAuCisKK2ZsYWc6OgorCUEgc2luZ2xlIGNoYXJhY3RlciBpbmRpY2F0aW5nIHRoZSBzdGF0dXMgb2YgdGhlIHJlZjoKKyhzcGFjZSk7OyBmb3IgYSBzdWNjZXNzZnVsbHkgZmV0Y2hlZCBmYXN0LWZvcndhcmQ7CitgK2A7OyBmb3IgYSBzdWNjZXNzZnVsIGZvcmNlZCB1cGRhdGU7CitgLWA7OyBmb3IgYSBzdWNjZXNzZnVsbHkgcHJ1bmVkIHJlZjsKK2B0YDs7IGZvciBhIHN1Y2Nlc3NmdWwgdGFnIHVwZGF0ZTsKK2AqYDs7IGZvciBhIHN1Y2Nlc3NmdWxseSBmZXRjaGVkIG5ldyByZWY7CitgIWA7OyBmb3IgYSByZWYgdGhhdCB3YXMgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIHVwZGF0ZTsgYW5kCitgPWA7OyBmb3IgYSByZWYgdGhhdCB3YXMgdXAgdG8gZGF0ZSBhbmQgZGlkIG5vdCBuZWVkIGZldGNoaW5nLgorCitzdW1tYXJ5OjoKKwlGb3IgYSBzdWNjZXNzZnVsbHkgZmV0Y2hlZCByZWYsIHRoZSBzdW1tYXJ5IHNob3dzIHRoZSBvbGQgYW5kIG5ldworCXZhbHVlcyBvZiB0aGUgcmVmIGluIGEgZm9ybSBzdWl0YWJsZSBmb3IgdXNpbmcgYXMgYW4gYXJndW1lbnQgdG8KKwlgZ2l0IGxvZ2AgKHRoaXMgaXMgYDxvbGQ+Li48bmV3PmAgaW4gbW9zdCBjYXNlcywgYW5kCisJYDxvbGQ+Li4uPG5ldz5gIGZvciBmb3JjZWQgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzKS4KKworZnJvbTo6CisJVGhlIG5hbWUgb2YgdGhlIHJlbW90ZSByZWYgYmVpbmcgZmV0Y2hlZCBmcm9tLCBtaW51cyBpdHMKKwlgcmVmcy88dHlwZT4vYCBwcmVmaXguIEluIHRoZSBjYXNlIG9mIGRlbGV0aW9uLCB0aGUgbmFtZSBvZgorCXRoZSByZW1vdGUgcmVmIGlzICIobm9uZSkiLgorCit0bzo6CisJVGhlIG5hbWUgb2YgdGhlIGxvY2FsIHJlZiBiZWluZyB1cGRhdGVkLCBtaW51cyBpdHMKKwlgcmVmcy88dHlwZT4vYCBwcmVmaXguCisKK3JlYXNvbjo6CisJQSBodW1hbi1yZWFkYWJsZSBleHBsYW5hdGlvbi4gSW4gdGhlIGNhc2Ugb2Ygc3VjY2Vzc2Z1bGx5IGZldGNoZWQKKwlyZWZzLCBubyBleHBsYW5hdGlvbiBpcyBuZWVkZWQuIEZvciBhIGZhaWxlZCByZWYsIHRoZSByZWFzb24gZm9yCisJZmFpbHVyZSBpcyBkZXNjcmliZWQuCiAKIEVYQU1QTEVTCiAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dAppbmRleCAwMDM3MzFmLi4wYTA5Njk4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dApAQCAtNTIsNyArNTIsNyBAQAogCiBOb3RlIHRoYXQgc2luY2UgdGhpcyBvcGVyYXRpb24gaXMgdmVyeSBJL08gZXhwZW5zaXZlLCBpdCBtaWdodAogYmUgYSBnb29kIGlkZWEgdG8gcmVkaXJlY3QgdGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnkgb2ZmLWRpc2sgd2l0aCB0aGUKLSctZCcgb3B0aW9uLCBlLmcuIG9uIHRtcGZzLiAgUmVwb3J0ZWRseSB0aGUgc3BlZWR1cCBpcyB2ZXJ5IG5vdGljZWFibGUuCitgLWRgIG9wdGlvbiwgZS5nLiBvbiB0bXBmcy4gIFJlcG9ydGVkbHkgdGhlIHNwZWVkdXAgaXMgdmVyeSBub3RpY2VhYmxlLgogCiAKIEZpbHRlcnMKQEAgLTYxLDcgKzYxLDcgQEAKIFRoZSBmaWx0ZXJzIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlciBhcyBsaXN0ZWQgYmVsb3cuICBUaGUgPGNvbW1hbmQ+CiBhcmd1bWVudCBpcyBhbHdheXMgZXZhbHVhdGVkIGluIHRoZSBzaGVsbCBjb250ZXh0IHVzaW5nIHRoZSAnZXZhbCcgY29tbWFuZAogKHdpdGggdGhlIG5vdGFibGUgZXhjZXB0aW9uIG9mIHRoZSBjb21taXQgZmlsdGVyLCBmb3IgdGVjaG5pY2FsIHJlYXNvbnMpLgotUHJpb3IgdG8gdGhhdCwgdGhlICRHSVRfQ09NTUlUIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIGNvbnRhaW4KK1ByaW9yIHRvIHRoYXQsIHRoZSBgJEdJVF9DT01NSVRgIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIGNvbnRhaW4KIHRoZSBpZCBvZiB0aGUgY29tbWl0IGJlaW5nIHJld3JpdHRlbi4gIEFsc28sIEdJVF9BVVRIT1JfTkFNRSwKIEdJVF9BVVRIT1JfRU1BSUwsIEdJVF9BVVRIT1JfREFURSwgR0lUX0NPTU1JVFRFUl9OQU1FLCBHSVRfQ09NTUlUVEVSX0VNQUlMLAogYW5kIEdJVF9DT01NSVRURVJfREFURSBhcmUgdGFrZW4gZnJvbSB0aGUgY3VycmVudCBjb21taXQgYW5kIGV4cG9ydGVkIHRvCkBAIC0xNzEsNyArMTcxLDcgQEAKIAl1bnRvdWNoZWQuICBUaGlzIHN3aXRjaCBhbGxvdyBnaXQtZmlsdGVyLWJyYW5jaCB0byBpZ25vcmUgc3VjaAogCWNvbW1pdHMuICBUaG91Z2gsIHRoaXMgc3dpdGNoIG9ubHkgYXBwbGllcyBmb3IgY29tbWl0cyB0aGF0IGhhdmUgb25lCiAJYW5kIG9ubHkgb25lIHBhcmVudCwgaXQgd2lsbCBoZW5jZSBrZWVwIG1lcmdlcyBwb2ludHMuIEFsc28sIHRoaXMKLQlvcHRpb24gaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgdXNlIG9mICctLWNvbW1pdC1maWx0ZXInLiBUaG91Z2ggeW91CisJb3B0aW9uIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHVzZSBvZiBgLS1jb21taXQtZmlsdGVyYC4gVGhvdWdoIHlvdQogCWp1c3QgbmVlZCB0byB1c2UgdGhlIGZ1bmN0aW9uICdnaXRfY29tbWl0X25vbl9lbXB0eV90cmVlICIkQCInIGluc3RlYWQKIAlvZiB0aGUgYGdpdCBjb21taXQtdHJlZSAiJEAiYCBpZGlvbSBpbiB5b3VyIGNvbW1pdCBmaWx0ZXIgdG8gbWFrZSB0aGF0CiAJaGFwcGVuLgpAQCAtMTk3LDcgKzE5Nyw3IEBACiA8cmV2LWxpc3Qgb3B0aW9ucz4uLi46OgogCUFyZ3VtZW50cyBmb3IgJ2dpdCByZXYtbGlzdCcuICBBbGwgcG9zaXRpdmUgcmVmcyBpbmNsdWRlZCBieQogCXRoZXNlIG9wdGlvbnMgYXJlIHJld3JpdHRlbi4gIFlvdSBtYXkgYWxzbyBzcGVjaWZ5IG9wdGlvbnMKLQlzdWNoIGFzICctLWFsbCcsIGJ1dCB5b3UgbXVzdCB1c2UgJy0tJyB0byBzZXBhcmF0ZSB0aGVtIGZyb20KKwlzdWNoIGFzIGAtLWFsbGAsIGJ1dCB5b3UgbXVzdCB1c2UgYC0tYCB0byBzZXBhcmF0ZSB0aGVtIGZyb20KIAl0aGUgJ2dpdCBmaWx0ZXItYnJhbmNoJyBvcHRpb25zLiBJbXBsaWVzIDw8UmVtYXBfdG9fYW5jZXN0b3I+Pi4KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3ItZWFjaC1yZWYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dAppbmRleCBkOWQ0MDZkLi5mNTdlNjliIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3ItZWFjaC1yZWYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQKQEAgLTE0Miw3ICsxNDIsNyBAQAogCTx3aWR0aD4gYW5kIDxwb3NpdGlvbj4gdXNlZCBpbnN0ZWFkLiAgRm9yIGluc3RhbmNlLAogCWAlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPilgLiBJZiB0aGUgY29udGVudHMgbGVuZ3RoIGlzIG1vcmUKIAl0aGFuIHRoZSB3aWR0aCB0aGVuIG5vIGFsaWdubWVudCBpcyBwZXJmb3JtZWQuIElmIHVzZWQgd2l0aAotCSctLXF1b3RlJyBldmVyeXRoaW5nIGluIGJldHdlZW4gJShhbGlnbjouLi4pIGFuZCAlKGVuZCkgaXMKKwlgLS1xdW90ZWAgZXZlcnl0aGluZyBpbiBiZXR3ZWVuICUoYWxpZ246Li4uKSBhbmQgJShlbmQpIGlzCiAJcXVvdGVkLCBidXQgaWYgbmVzdGVkIHRoZW4gb25seSB0aGUgdG9wbW9zdCBsZXZlbCBwZXJmb3JtcwogCXF1b3RpbmcuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CmluZGV4IGJkZWVjZDUuLjk2MjRjODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApAQCAtNTgsNyArNTgsNyBAQAogCiBJZiBgLW9gIGlzIHNwZWNpZmllZCwgb3V0cHV0IGZpbGVzIGFyZSBjcmVhdGVkIGluIDxkaXI+LiAgT3RoZXJ3aXNlCiB0aGV5IGFyZSBjcmVhdGVkIGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBUaGUgZGVmYXVsdCBwYXRoCi1jYW4gYmUgc2V0IHdpdGggdGhlICdmb3JtYXQub3V0cHV0RGlyZWN0b3J5JyBjb25maWd1cmF0aW9uIG9wdGlvbi4KK2NhbiBiZSBzZXQgd2l0aCB0aGUgYGZvcm1hdC5vdXRwdXREaXJlY3RvcnlgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgogVGhlIGAtb2Agb3B0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBgZm9ybWF0Lm91dHB1dERpcmVjdG9yeWAuCiBUbyBzdG9yZSBwYXRjaGVzIGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGV2ZW4gd2hlbgogYGZvcm1hdC5vdXRwdXREaXJlY3RvcnlgIHBvaW50cyBlbHNld2hlcmUsIHVzZSBgLW8gLmAuCkBAIC0xNDYsOSArMTQ2LDkgQEAKIGAtLWluLXJlcGx5LXRvYCwgYW5kIHRoZSBmaXJzdCBwYXRjaCBtYWlsLCBpbiB0aGlzIG9yZGVyLiAgJ2RlZXAnCiB0aHJlYWRpbmcgbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cyBvbmUuCiArCi1UaGUgZGVmYXVsdCBpcyBgLS1uby10aHJlYWRgLCB1bmxlc3MgdGhlICdmb3JtYXQudGhyZWFkJyBjb25maWd1cmF0aW9uCitUaGUgZGVmYXVsdCBpcyBgLS1uby10aHJlYWRgLCB1bmxlc3MgdGhlIGBmb3JtYXQudGhyZWFkYCBjb25maWd1cmF0aW9uCiBpcyBzZXQuICBJZiBgLS10aHJlYWRgIGlzIHNwZWNpZmllZCB3aXRob3V0IGEgc3R5bGUsIGl0IGRlZmF1bHRzIHRvIHRoZQotc3R5bGUgc3BlY2lmaWVkIGJ5ICdmb3JtYXQudGhyZWFkJyBpZiBhbnksIG9yIGVsc2UgYHNoYWxsb3dgLgorc3R5bGUgc3BlY2lmaWVkIGJ5IGBmb3JtYXQudGhyZWFkYCBpZiBhbnksIG9yIGVsc2UgYHNoYWxsb3dgLgogKwogQmV3YXJlIHRoYXQgdGhlIGRlZmF1bHQgZm9yICdnaXQgc2VuZC1lbWFpbCcgaXMgdG8gdGhyZWFkIGVtYWlscwogaXRzZWxmLiAgSWYgeW91IHdhbnQgYGdpdCBmb3JtYXQtcGF0Y2hgIHRvIHRha2UgY2FyZSBvZiB0aHJlYWRpbmcsIHlvdQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZnNjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dAppbmRleCA4NGVlOTJlLi5iOWYwNjBlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dApAQCAtMTEsNyArMTEsOCBAQAogW3ZlcnNlXQogJ2dpdCBmc2NrJyBbLS10YWdzXSBbLS1yb290XSBbLS11bnJlYWNoYWJsZV0gWy0tY2FjaGVdIFstLW5vLXJlZmxvZ3NdCiAJIFstLVtuby1dZnVsbF0gWy0tc3RyaWN0XSBbLS12ZXJib3NlXSBbLS1sb3N0LWZvdW5kXQotCSBbLS1bbm8tXWRhbmdsaW5nXSBbLS1bbm8tXXByb2dyZXNzXSBbLS1jb25uZWN0aXZpdHktb25seV0gWzxvYmplY3Q+Kl0KKwkgWy0tW25vLV1kYW5nbGluZ10gWy0tW25vLV1wcm9ncmVzc10gWy0tY29ubmVjdGl2aXR5LW9ubHldCisJIFstLVtuby1dbmFtZS1vYmplY3RzXSBbPG9iamVjdD4qXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTgyLDYgKzgzLDEyIEBACiAJYSBibG9iLCB0aGUgY29udGVudHMgYXJlIHdyaXR0ZW4gaW50byB0aGUgZmlsZSwgcmF0aGVyIHRoYW4KIAlpdHMgb2JqZWN0IG5hbWUuCiAKKy0tbmFtZS1vYmplY3RzOjoKKwlXaGVuIGRpc3BsYXlpbmcgbmFtZXMgb2YgcmVhY2hhYmxlIG9iamVjdHMsIGluIGFkZGl0aW9uIHRvIHRoZQorCVNIQS0xIGFsc28gZGlzcGxheSBhIG5hbWUgdGhhdCBkZXNjcmliZXMgKmhvdyogdGhleSBhcmUgcmVhY2hhYmxlLAorCWNvbXBhdGlibGUgd2l0aCBsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0sIGUuZy4KKwlgSEVBREB7MTIzNDU2Nzg5MH1+MjVeMjpzcmMvYC4KKwogLS1bbm8tXXByb2dyZXNzOjoKIAlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBieQogCWRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MKQEAgLTk1LDcgKzEwMiw3IEBACiBnaXQtZnNjayB0ZXN0cyBTSEEtMSBhbmQgZ2VuZXJhbCBvYmplY3Qgc2FuaXR5LCBhbmQgaXQgZG9lcyBmdWxsIHRyYWNraW5nCiBvZiB0aGUgcmVzdWx0aW5nIHJlYWNoYWJpbGl0eSBhbmQgZXZlcnl0aGluZyBlbHNlLiBJdCBwcmludHMgb3V0IGFueQogY29ycnVwdGlvbiBpdCBmaW5kcyAobWlzc2luZyBvciBiYWQgb2JqZWN0cyksIGFuZCBpZiB5b3UgdXNlIHRoZQotJy0tdW5yZWFjaGFibGUnIGZsYWcgaXQgd2lsbCBhbHNvIHByaW50IG91dCBvYmplY3RzIHRoYXQgZXhpc3QgYnV0IHRoYXQKK2AtLXVucmVhY2hhYmxlYCBmbGFnIGl0IHdpbGwgYWxzbyBwcmludCBvdXQgb2JqZWN0cyB0aGF0IGV4aXN0IGJ1dCB0aGF0CiBhcmVuJ3QgcmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZSBzcGVjaWZpZWQgaGVhZCBub2RlcyAob3IgdGhlIGRlZmF1bHQKIHNldCwgYXMgbWVudGlvbmVkIGFib3ZlKS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0CmluZGV4IGZhMTUxMDQuLmJlZDYwZjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQKQEAgLTgyLDEzICs4MiwxMyBAQAogQ29uZmlndXJhdGlvbgogLS0tLS0tLS0tLS0tLQogCi1UaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnZ2MucmVmbG9nRXhwaXJlJyBjYW4gYmUKK1RoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBnYy5yZWZsb2dFeHBpcmVgIGNhbiBiZQogc2V0IHRvIGluZGljYXRlIGhvdyBsb25nIGhpc3RvcmljYWwgZW50cmllcyB3aXRoaW4gZWFjaCBicmFuY2gncwogcmVmbG9nIHNob3VsZCByZW1haW4gYXZhaWxhYmxlIGluIHRoaXMgcmVwb3NpdG9yeS4gIFRoZSBzZXR0aW5nIGlzCiBleHByZXNzZWQgYXMgYSBsZW5ndGggb2YgdGltZSwgZm9yIGV4YW1wbGUgJzkwIGRheXMnIG9yICczIG1vbnRocycuCiBJdCBkZWZhdWx0cyB0byAnOTAgZGF5cycuCiAKLVRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdnYy5yZWZsb2dFeHBpcmVVbnJlYWNoYWJsZScKK1RoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBnYy5yZWZsb2dFeHBpcmVVbnJlYWNoYWJsZWAKIGNhbiBiZSBzZXQgdG8gaW5kaWNhdGUgaG93IGxvbmcgaGlzdG9yaWNhbCByZWZsb2cgZW50cmllcyB3aGljaAogYXJlIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IGJyYW5jaCBzaG91bGQgcmVtYWluIGF2YWlsYWJsZSBpbgogdGhpcyByZXBvc2l0b3J5LiAgVGhlc2UgdHlwZXMgb2YgZW50cmllcyBhcmUgZ2VuZXJhbGx5IGNyZWF0ZWQgYXMKQEAgLTEwNywzMCArMTA3LDMwIEBACiAJcmVmbG9nRXhwaXJlVW5yZWFjaGFibGUgPSAzIGRheXMKIC0tLS0tLS0tLS0tLQogCi1UaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnZ2MucmVyZXJlUmVzb2x2ZWQnIGluZGljYXRlcworVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGdjLnJlcmVyZVJlc29sdmVkYCBpbmRpY2F0ZXMKIGhvdyBsb25nIHJlY29yZHMgb2YgY29uZmxpY3RlZCBtZXJnZSB5b3UgcmVzb2x2ZWQgZWFybGllciBhcmUKIGtlcHQuICBUaGlzIGRlZmF1bHRzIHRvIDYwIGRheXMuCiAKLVRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdnYy5yZXJlcmVVbnJlc29sdmVkJyBpbmRpY2F0ZXMKK1RoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBnYy5yZXJlcmVVbnJlc29sdmVkYCBpbmRpY2F0ZXMKIGhvdyBsb25nIHJlY29yZHMgb2YgY29uZmxpY3RlZCBtZXJnZSB5b3UgaGF2ZSBub3QgcmVzb2x2ZWQgYXJlCiBrZXB0LiAgVGhpcyBkZWZhdWx0cyB0byAxNSBkYXlzLgogCi1UaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnZ2MucGFja1JlZnMnIGRldGVybWluZXMgaWYKK1RoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBnYy5wYWNrUmVmc2AgZGV0ZXJtaW5lcyBpZgogJ2dpdCBnYycgcnVucyAnZ2l0IHBhY2stcmVmcycuIFRoaXMgY2FuIGJlIHNldCB0byAibm90YmFyZSIgdG8gZW5hYmxlCiBpdCB3aXRoaW4gYWxsIG5vbi1iYXJlIHJlcG9zIG9yIGl0IGNhbiBiZSBzZXQgdG8gYSBib29sZWFuIHZhbHVlLgogVGhpcyBkZWZhdWx0cyB0byB0cnVlLgogCi1UaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnZ2MuYWdncmVzc2l2ZVdpbmRvdycgY29udHJvbHMgaG93CitUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgZ2MuYWdncmVzc2l2ZVdpbmRvd2AgY29udHJvbHMgaG93CiBtdWNoIHRpbWUgaXMgc3BlbnQgb3B0aW1pemluZyB0aGUgZGVsdGEgY29tcHJlc3Npb24gb2YgdGhlIG9iamVjdHMgaW4KIHRoZSByZXBvc2l0b3J5IHdoZW4gdGhlIC0tYWdncmVzc2l2ZSBvcHRpb24gaXMgc3BlY2lmaWVkLiAgVGhlIGxhcmdlcgogdGhlIHZhbHVlLCB0aGUgbW9yZSB0aW1lIGlzIHNwZW50IG9wdGltaXppbmcgdGhlIGRlbHRhIGNvbXByZXNzaW9uLiAgU2VlCiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIC0td2luZG93JyBvcHRpb24gaW4gbGlua2dpdDpnaXQtcmVwYWNrWzFdIGZvcgogbW9yZSBkZXRhaWxzLiAgVGhpcyBkZWZhdWx0cyB0byAyNTAuCiAKLVNpbWlsYXJseSwgdGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ2djLmFnZ3Jlc3NpdmVEZXB0aCcKK1NpbWlsYXJseSwgdGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGdjLmFnZ3Jlc3NpdmVEZXB0aGAKIGNvbnRyb2xzIC0tZGVwdGggb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4gVGhpcyBkZWZhdWx0cyB0byAyNTAuCiAKLVRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdnYy5wcnVuZUV4cGlyZScgY29udHJvbHMgaG93IG9sZAorVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGdjLnBydW5lRXhwaXJlYCBjb250cm9scyBob3cgb2xkCiB0aGUgdW5yZWZlcmVuY2VkIGxvb3NlIG9iamVjdHMgaGF2ZSB0byBiZSBiZWZvcmUgdGhleSBhcmUgcHJ1bmVkLiAgVGhlCiBkZWZhdWx0IGlzICIyIHdlZWtzIGFnbyIuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ3JlcC50eHQKaW5kZXggY2IwZjZjZi4uMGVjZWE2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZ3JlcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ3JlcC50eHQKQEAgLTQxLDE3ICs0MSwxNyBAQAogLS0tLS0tLS0tLS0tLQogCiBncmVwLmxpbmVOdW1iZXI6OgotCUlmIHNldCB0byB0cnVlLCBlbmFibGUgJy1uJyBvcHRpb24gYnkgZGVmYXVsdC4KKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlIGAtbmAgb3B0aW9uIGJ5IGRlZmF1bHQuCiAKIGdyZXAucGF0dGVyblR5cGU6OgogCVNldCB0aGUgZGVmYXVsdCBtYXRjaGluZyBiZWhhdmlvci4gVXNpbmcgYSB2YWx1ZSBvZiAnYmFzaWMnLCAnZXh0ZW5kZWQnLAotCSdmaXhlZCcsIG9yICdwZXJsJyB3aWxsIGVuYWJsZSB0aGUgJy0tYmFzaWMtcmVnZXhwJywgJy0tZXh0ZW5kZWQtcmVnZXhwJywKLQknLS1maXhlZC1zdHJpbmdzJywgb3IgJy0tcGVybC1yZWdleHAnIG9wdGlvbiBhY2NvcmRpbmdseSwgd2hpbGUgdGhlCisJJ2ZpeGVkJywgb3IgJ3BlcmwnIHdpbGwgZW5hYmxlIHRoZSBgLS1iYXNpYy1yZWdleHBgLCBgLS1leHRlbmRlZC1yZWdleHBgLAorCWAtLWZpeGVkLXN0cmluZ3NgLCBvciBgLS1wZXJsLXJlZ2V4cGAgb3B0aW9uIGFjY29yZGluZ2x5LCB3aGlsZSB0aGUKIAl2YWx1ZSAnZGVmYXVsdCcgd2lsbCByZXR1cm4gdG8gdGhlIGRlZmF1bHQgbWF0Y2hpbmcgYmVoYXZpb3IuCiAKIGdyZXAuZXh0ZW5kZWRSZWdleHA6OgotCUlmIHNldCB0byB0cnVlLCBlbmFibGUgJy0tZXh0ZW5kZWQtcmVnZXhwJyBvcHRpb24gYnkgZGVmYXVsdC4gVGhpcwotCW9wdGlvbiBpcyBpZ25vcmVkIHdoZW4gdGhlICdncmVwLnBhdHRlcm5UeXBlJyBvcHRpb24gaXMgc2V0IHRvIGEgdmFsdWUKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlIGAtLWV4dGVuZGVkLXJlZ2V4cGAgb3B0aW9uIGJ5IGRlZmF1bHQuIFRoaXMKKwlvcHRpb24gaXMgaWdub3JlZCB3aGVuIHRoZSBgZ3JlcC5wYXR0ZXJuVHlwZWAgb3B0aW9uIGlzIHNldCB0byBhIHZhbHVlCiAJb3RoZXIgdGhhbiAnZGVmYXVsdCcuCiAKIGdyZXAudGhyZWFkczo6CkBAIC01OSw3ICs1OSw3IEBACiAJOCB0aHJlYWRzIGFyZSB1c2VkIGJ5IGRlZmF1bHQgKGZvciBub3cpLgogCiBncmVwLmZ1bGxOYW1lOjoKLQlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlICctLWZ1bGwtbmFtZScgb3B0aW9uIGJ5IGRlZmF1bHQuCisJSWYgc2V0IHRvIHRydWUsIGVuYWJsZSBgLS1mdWxsLW5hbWVgIG9wdGlvbiBieSBkZWZhdWx0LgogCiBncmVwLmZhbGxiYWNrVG9Ob0luZGV4OjoKIAlJZiBzZXQgdG8gdHJ1ZSwgZmFsbCBiYWNrIHRvIGdpdCBncmVwIC0tbm8taW5kZXggaWYgZ2l0IGdyZXAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWd1aS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ndWkudHh0CmluZGV4IDgxNDQ1MjcuLmMxYTNlOGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWd1aS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ3VpLnR4dApAQCAtMzUsNyArMzUsNyBAQAogCiBicm93c2VyOjoKIAlTdGFydCBhIHRyZWUgYnJvd3NlciBzaG93aW5nIGFsbCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkCi0JY29tbWl0IChvciAnSEVBRCcgYnkgZGVmYXVsdCkuICBGaWxlcyBzZWxlY3RlZCB0aHJvdWdoIHRoZQorCWNvbW1pdCAob3IgYEhFQURgIGJ5IGRlZmF1bHQpLiAgRmlsZXMgc2VsZWN0ZWQgdGhyb3VnaCB0aGUKIAlicm93c2VyIGFyZSBvcGVuZWQgaW4gdGhlIGJsYW1lIHZpZXdlci4KIAogY2l0b29sOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWhlbHAudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQKaW5kZXggMzk1NjUyNS4uNDBkMzI4YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQKQEAgLTE4LDEwICsxOCwxMCBAQAogY29tbWFuZCBhbmQgYSBsaXN0IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgR2l0IGNvbW1hbmRzIGFyZSBwcmludGVkCiBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgogCi1JZiB0aGUgb3B0aW9uICctLWFsbCcgb3IgJy1hJyBpcyBnaXZlbiwgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyBhcmUKK0lmIHRoZSBvcHRpb24gYC0tYWxsYCBvciBgLWFgIGlzIGdpdmVuLCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIGFyZQogcHJpbnRlZCBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgogCi1JZiB0aGUgb3B0aW9uICctLWd1aWRlJyBvciAnLWcnIGlzIGdpdmVuLCBhIGxpc3Qgb2YgdGhlIHVzZWZ1bAorSWYgdGhlIG9wdGlvbiBgLS1ndWlkZWAgb3IgYC1nYCBpcyBnaXZlbiwgYSBsaXN0IG9mIHRoZSB1c2VmdWwKIEdpdCBndWlkZXMgaXMgYWxzbyBwcmludGVkIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAKIElmIGEgY29tbWFuZCwgb3IgYSBndWlkZSwgaXMgZ2l2ZW4sIGEgbWFudWFsIHBhZ2UgZm9yIHRoYXQgY29tbWFuZCBvcgpAQCAtNTcsMTAgKzU3LDEwIEBACiAtLW1hbjo6CiAJRGlzcGxheSBtYW51YWwgcGFnZSBmb3IgdGhlIGNvbW1hbmQgaW4gdGhlICdtYW4nIGZvcm1hdC4gVGhpcwogCW9wdGlvbiBtYXkgYmUgdXNlZCB0byBvdmVycmlkZSBhIHZhbHVlIHNldCBpbiB0aGUKLQknaGVscC5mb3JtYXQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisJYGhlbHAuZm9ybWF0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgogKwogQnkgZGVmYXVsdCB0aGUgJ21hbicgcHJvZ3JhbSB3aWxsIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgbWFudWFsIHBhZ2UsCi1idXQgdGhlICdtYW4udmlld2VyJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG1heSBiZSB1c2VkIHRvIGNob29zZQorYnV0IHRoZSBgbWFuLnZpZXdlcmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBtYXkgYmUgdXNlZCB0byBjaG9vc2UKIG90aGVyIGRpc3BsYXkgcHJvZ3JhbXMgKHNlZSBiZWxvdykuCiAKIC13OjoKQEAgLTY5LDcgKzY5LDcgQEAKIAlmb3JtYXQuIEEgd2ViIGJyb3dzZXIgd2lsbCBiZSB1c2VkIGZvciB0aGF0IHB1cnBvc2UuCiArCiBUaGUgd2ViIGJyb3dzZXIgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQotJ2hlbHAuYnJvd3NlcicsIG9yICd3ZWIuYnJvd3NlcicgaWYgdGhlIGZvcm1lciBpcyBub3Qgc2V0LiBJZiBub25lIG9mCitgaGVscC5icm93c2VyYCwgb3IgYHdlYi5icm93c2VyYCBpZiB0aGUgZm9ybWVyIGlzIG5vdCBzZXQuIElmIG5vbmUgb2YKIHRoZXNlIGNvbmZpZyB2YXJpYWJsZXMgaXMgc2V0LCB0aGUgJ2dpdCB3ZWJ7bGl0ZGR9YnJvd3NlJyBoZWxwZXIgc2NyaXB0CiAoY2FsbGVkIGJ5ICdnaXQgaGVscCcpIHdpbGwgcGljayBhIHN1aXRhYmxlIGRlZmF1bHQuIFNlZQogbGlua2dpdDpnaXQtd2Vie2xpdGRkfWJyb3dzZVsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzLgpAQCAtODAsNyArODAsNyBAQAogaGVscC5mb3JtYXQKIH5+fn5+fn5+fn5+CiAKLUlmIG5vIGNvbW1hbmQtbGluZSBvcHRpb24gaXMgcGFzc2VkLCB0aGUgJ2hlbHAuZm9ybWF0JyBjb25maWd1cmF0aW9uCitJZiBubyBjb21tYW5kLWxpbmUgb3B0aW9uIGlzIHBhc3NlZCwgdGhlIGBoZWxwLmZvcm1hdGAgY29uZmlndXJhdGlvbgogdmFyaWFibGUgd2lsbCBiZSBjaGVja2VkLiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgc3VwcG9ydGVkIGZvciB0aGlzCiB2YXJpYWJsZTsgdGhleSBtYWtlICdnaXQgaGVscCcgYmVoYXZlIGFzIHRoZWlyIGNvcnJlc3BvbmRpbmcgY29tbWFuZC0KIGxpbmUgb3B0aW9uOgpAQCAtOTIsNyArOTIsNyBAQAogaGVscC5icm93c2VyLCB3ZWIuYnJvd3NlciBhbmQgYnJvd3Nlci48dG9vbD4ucGF0aAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi1UaGUgJ2hlbHAuYnJvd3NlcicsICd3ZWIuYnJvd3NlcicgYW5kICdicm93c2VyLjx0b29sPi5wYXRoJyB3aWxsIGFsc28KK1RoZSBgaGVscC5icm93c2VyYCwgYHdlYi5icm93c2VyYCBhbmQgYGJyb3dzZXIuPHRvb2w+LnBhdGhgIHdpbGwgYWxzbwogYmUgY2hlY2tlZCBpZiB0aGUgJ3dlYicgZm9ybWF0IGlzIGNob3NlbiAoZWl0aGVyIGJ5IGNvbW1hbmQtbGluZQogb3B0aW9uIG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUpLiBTZWUgJy13fC0td2ViJyBpbiB0aGUgT1BUSU9OUwogc2VjdGlvbiBhYm92ZSBhbmQgbGlua2dpdDpnaXQtd2Vie2xpdGRkfWJyb3dzZVsxXS4KQEAgLTEwMCw3ICsxMDAsNyBAQAogbWFuLnZpZXdlcgogfn5+fn5+fn5+fgogCi1UaGUgJ21hbi52aWV3ZXInIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2lsbCBiZSBjaGVja2VkIGlmIHRoZSAnbWFuJworVGhlIGBtYW4udmlld2VyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHdpbGwgYmUgY2hlY2tlZCBpZiB0aGUgJ21hbicKIGZvcm1hdCBpcyBjaG9zZW4uIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOgogCiAqICJtYW4iOiB1c2UgdGhlICdtYW4nIHByb2dyYW0gYXMgdXN1YWwsCkBAIC0xMTAsOSArMTEwLDkgQEAKIHRhYiAoc2VlICdOb3RlIGFib3V0IGtvbnF1ZXJvcicgYmVsb3cpLgogCiBWYWx1ZXMgZm9yIG90aGVyIHRvb2xzIGNhbiBiZSB1c2VkIGlmIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZwotJ21hbi48dG9vbD4uY21kJyBjb25maWd1cmF0aW9uIGVudHJ5IChzZWUgYmVsb3cpLgorYG1hbi48dG9vbD4uY21kYCBjb25maWd1cmF0aW9uIGVudHJ5IChzZWUgYmVsb3cpLgogCi1NdWx0aXBsZSB2YWx1ZXMgbWF5IGJlIGdpdmVuIHRvIHRoZSAnbWFuLnZpZXdlcicgY29uZmlndXJhdGlvbgorTXVsdGlwbGUgdmFsdWVzIG1heSBiZSBnaXZlbiB0byB0aGUgYG1hbi52aWV3ZXJgIGNvbmZpZ3VyYXRpb24KIHZhcmlhYmxlLiBUaGVpciBjb3JyZXNwb25kaW5nIHByb2dyYW1zIHdpbGwgYmUgdHJpZWQgaW4gdGhlIG9yZGVyCiBsaXN0ZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KIApAQCAtMTI4LDE0ICsxMjgsMTQgQEAKIERJU1BMQVkgaXMgbm90IHNldCkgYW5kIGluIHRoYXQgY2FzZSBlbWFjcycgd29tYW4gbW9kZSB3aWxsIGJlIHRyaWVkLgogCiBJZiBldmVyeXRoaW5nIGZhaWxzLCBvciBpZiBubyB2aWV3ZXIgaXMgY29uZmlndXJlZCwgdGhlIHZpZXdlciBzcGVjaWZpZWQKLWluIHRoZSBHSVRfTUFOX1ZJRVdFUiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIHRyaWVkLiAgSWYgdGhhdAoraW4gdGhlIGBHSVRfTUFOX1ZJRVdFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSB0cmllZC4gIElmIHRoYXQKIGZhaWxzIHRvbywgdGhlICdtYW4nIHByb2dyYW0gd2lsbCBiZSB0cmllZCBhbnl3YXkuCiAKIG1hbi48dG9vbD4ucGF0aAogfn5+fn5+fn5+fn5+fn5+CiAKIFlvdSBjYW4gZXhwbGljaXRseSBwcm92aWRlIGEgZnVsbCBwYXRoIHRvIHlvdXIgcHJlZmVycmVkIG1hbiB2aWV3ZXIgYnkKLXNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ21hbi48dG9vbD4ucGF0aCcuIEZvciBleGFtcGxlLCB5b3UKK3NldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYG1hbi48dG9vbD4ucGF0aGAuIEZvciBleGFtcGxlLCB5b3UKIGNhbiBjb25maWd1cmUgdGhlIGFic29sdXRlIHBhdGggdG8ga29ucXVlcm9yIGJ5IHNldHRpbmcKICdtYW4ua29ucXVlcm9yLnBhdGgnLiBPdGhlcndpc2UsICdnaXQgaGVscCcgYXNzdW1lcyB0aGUgdG9vbCBpcwogYXZhaWxhYmxlIGluIFBBVEguCkBAIC0xNDMsOSArMTQzLDkgQEAKIG1hbi48dG9vbD4uY21kCiB+fn5+fn5+fn5+fn5+fgogCi1XaGVuIHRoZSBtYW4gdmlld2VyLCBzcGVjaWZpZWQgYnkgdGhlICdtYW4udmlld2VyJyBjb25maWd1cmF0aW9uCitXaGVuIHRoZSBtYW4gdmlld2VyLCBzcGVjaWZpZWQgYnkgdGhlIGBtYW4udmlld2VyYCBjb25maWd1cmF0aW9uCiB2YXJpYWJsZXMsIGlzIG5vdCBhbW9uZyB0aGUgc3VwcG9ydGVkIG9uZXMsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcKLSdtYW4uPHRvb2w+LmNtZCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3aWxsIGJlIGxvb2tlZCB1cC4gSWYgdGhpcworYG1hbi48dG9vbD4uY21kYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHdpbGwgYmUgbG9va2VkIHVwLiBJZiB0aGlzCiB2YXJpYWJsZSBleGlzdHMgdGhlbiB0aGUgc3BlY2lmaWVkIHRvb2wgd2lsbCBiZSB0cmVhdGVkIGFzIGEgY3VzdG9tCiBjb21tYW5kIGFuZCBhIHNoZWxsIGV2YWwgd2lsbCBiZSB1c2VkIHRvIHJ1biB0aGUgY29tbWFuZCB3aXRoIHRoZSBtYW4KIHBhZ2UgcGFzc2VkIGFzIGFyZ3VtZW50cy4KQEAgLTE1Myw3ICsxNTMsNyBAQAogTm90ZSBhYm91dCBrb25xdWVyb3IKIH5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVdoZW4gJ2tvbnF1ZXJvcicgaXMgc3BlY2lmaWVkIGluIHRoZSAnbWFuLnZpZXdlcicgY29uZmlndXJhdGlvbgorV2hlbiAna29ucXVlcm9yJyBpcyBzcGVjaWZpZWQgaW4gdGhlIGBtYW4udmlld2VyYCBjb25maWd1cmF0aW9uCiB2YXJpYWJsZSwgd2UgbGF1bmNoICdrZm1jbGllbnQnIHRvIHRyeSB0byBvcGVuIHRoZSBtYW4gcGFnZSBvbiBhbgogYWxyZWFkeSBvcGVuZWQga29ucXVlcm9yIGluIGEgbmV3IHRhYiBpZiBwb3NzaWJsZS4KIApAQCAtMTc2LDcgKzE3Niw3IEBACiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAogTm90ZSB0aGF0IGFsbCB0aGVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzaG91bGQgcHJvYmFibHkgYmUgc2V0Ci11c2luZyB0aGUgJy0tZ2xvYmFsJyBmbGFnLCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6Cit1c2luZyB0aGUgYC0tZ2xvYmFsYCBmbGFnLCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCBnaXQgY29uZmlnIC0tZ2xvYmFsIGhlbHAuZm9ybWF0IHdlYgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1iYWNrZW5kLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtYmFja2VuZC50eHQKaW5kZXggOTI2OGZiNi4uYmIwZGIxOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1iYWNrZW5kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWJhY2tlbmQudHh0CkBAIC0yMSw3ICsyMSw3IEBACiBJdCB2ZXJpZmllcyB0aGF0IHRoZSBkaXJlY3RvcnkgaGFzIHRoZSBtYWdpYyBmaWxlCiAiZ2l0LWRhZW1vbi1leHBvcnQtb2siLCBhbmQgaXQgd2lsbCByZWZ1c2UgdG8gZXhwb3J0IGFueSBHaXQgZGlyZWN0b3J5CiB0aGF0IGhhc24ndCBleHBsaWNpdGx5IGJlZW4gbWFya2VkIGZvciBleHBvcnQgdGhpcyB3YXkgKHVubGVzcyB0aGUKLUdJVF9IVFRQX0VYUE9SVF9BTEwgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBpcyBzZXQpLgorYEdJVF9IVFRQX0VYUE9SVF9BTExgIGVudmlyb25tZW50YWwgdmFyaWFibGUgaXMgc2V0KS4KIAogQnkgZGVmYXVsdCwgb25seSB0aGUgYHVwbG9hZC1wYWNrYCBzZXJ2aWNlIGlzIGVuYWJsZWQsIHdoaWNoIHNlcnZlcwogJ2dpdCBmZXRjaC1wYWNrJyBhbmQgJ2dpdCBscy1yZW1vdGUnIGNsaWVudHMsIHdoaWNoIGFyZSBpbnZva2VkIGZyb20KQEAgLTI0MSw3ICsyNDEsNyBAQAogCiBFTlZJUk9OTUVOVAogLS0tLS0tLS0tLS0KLSdnaXQgaHR0cC1iYWNrZW5kJyByZWxpZXMgdXBvbiB0aGUgQ0dJIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZXQKKydnaXQgaHR0cC1iYWNrZW5kJyByZWxpZXMgdXBvbiB0aGUgYENHSWAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldAogYnkgdGhlIGludm9raW5nIHdlYiBzZXJ2ZXIsIGluY2x1ZGluZzoKIAogKiBQQVRIX0lORk8gKGlmIEdJVF9QUk9KRUNUX1JPT1QgaXMgc2V0LCBvdGhlcndpc2UgUEFUSF9UUkFOU0xBVEVEKQpAQCAtMjUxLDcgKzI1MSw3IEBACiAqIFFVRVJZX1NUUklORwogKiBSRVFVRVNUX01FVEhPRAogCi1UaGUgR0lUX0hUVFBfRVhQT1JUX0FMTCBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIG1heSBiZSBwYXNzZWQgdG8KK1RoZSBgR0lUX0hUVFBfRVhQT1JUX0FMTGAgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBtYXkgYmUgcGFzc2VkIHRvCiAnZ2l0LWh0dHAtYmFja2VuZCcgdG8gYnlwYXNzIHRoZSBjaGVjayBmb3IgdGhlICJnaXQtZGFlbW9uLWV4cG9ydC1vayIKIGZpbGUgaW4gZWFjaCByZXBvc2l0b3J5IGJlZm9yZSBhbGxvd2luZyBleHBvcnQgb2YgdGhhdCByZXBvc2l0b3J5LgogCkBAIC0yNjksNyArMjY5LDcgQEAKIGVuc3VyaW5nIHRoYXQgYW55IHJlZmxvZ3MgY3JlYXRlZCBieSAnZ2l0LXJlY2VpdmUtcGFjaycgY29udGFpbiBzb21lCiBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiBvZiB0aGUgcmVtb3RlIHVzZXIgd2hvIHBlcmZvcm1lZCB0aGUgcHVzaC4KIAotQWxsIENHSSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSB0byBlYWNoIG9mIHRoZSBob29rcworQWxsIGBDR0lgIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIHRvIGVhY2ggb2YgdGhlIGhvb2tzCiBpbnZva2VkIGJ5IHRoZSAnZ2l0LXJlY2VpdmUtcGFjaycuCiAKIEdJVApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQKaW5kZXggMmU2NzM2Mi4uMmFjZWI2ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLXB1c2gudHh0CkBAIC04MSwxMyArODEsMTMgQEAKICAgICAgZXhpc3QgaW4gdGhlIHNldCBvZiByZW1vdGUgcmVmczsgdGhlIHJlZiBtYXRjaGVkIDxzcmM+CiAgICAgIGxvY2FsbHkgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24uCiAKLVdpdGhvdXQgJy0tZm9yY2UnLCB0aGUgPHNyYz4gcmVmIGlzIHN0b3JlZCBhdCB0aGUgcmVtb3RlIG9ubHkgaWYKK1dpdGhvdXQgYC0tZm9yY2VgLCB0aGUgPHNyYz4gcmVmIGlzIHN0b3JlZCBhdCB0aGUgcmVtb3RlIG9ubHkgaWYKIDxkc3Q+IGRvZXMgbm90IGV4aXN0LCBvciA8ZHN0PiBpcyBhIHByb3BlciBzdWJzZXQgKGkuZS4gYW4KIGFuY2VzdG9yKSBvZiA8c3JjPi4gIFRoaXMgY2hlY2ssIGtub3duIGFzICJmYXN0LWZvcndhcmQgY2hlY2siLAogaXMgcGVyZm9ybWVkIGluIG9yZGVyIHRvIGF2b2lkIGFjY2lkZW50YWxseSBvdmVyd3JpdGluZyB0aGUKIHJlbW90ZSByZWYgYW5kIGxvc2Ugb3RoZXIgcGVvcGxlcycgY29tbWl0cyBmcm9tIHRoZXJlLgogCi1XaXRoICctLWZvcmNlJywgdGhlIGZhc3QtZm9yd2FyZCBjaGVjayBpcyBkaXNhYmxlZCBmb3IgYWxsIHJlZnMuCitXaXRoIGAtLWZvcmNlYCwgdGhlIGZhc3QtZm9yd2FyZCBjaGVjayBpcyBkaXNhYmxlZCBmb3IgYWxsIHJlZnMuCiAKIE9wdGlvbmFsbHksIGEgPHJlZj4gcGFyYW1ldGVyIGNhbiBiZSBwcmVmaXhlZCB3aXRoIGEgcGx1cyAnKycgc2lnbgogdG8gZGlzYWJsZSB0aGUgZmFzdC1mb3J3YXJkIGNoZWNrIG9ubHkgb24gdGhhdCByZWYuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0CmluZGV4IDYzNjRlNWQuLjlkMjcxOTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0CkBAIC00Nyw3ICs0Nyw3IEBACiAKIC0tYmFyZTo6CiAKLUNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeS4gSWYgR0lUX0RJUiBlbnZpcm9ubWVudCBpcyBub3Qgc2V0LCBpdCBpcyBzZXQgdG8gdGhlCitDcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkuIElmIGBHSVRfRElSYCBlbnZpcm9ubWVudCBpcyBub3Qgc2V0LCBpdCBpcyBzZXQgdG8gdGhlCiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogCiAtLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+OjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluc3Rhd2ViLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWluc3Rhd2ViLnR4dAppbmRleCBjYzc1YjI1Li5lOGVjZGJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1pbnN0YXdlYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5zdGF3ZWIudHh0CkBAIC04MCw4ICs4MCw4IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlmIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdpbnN0YXdlYi5icm93c2VyJyBpcyBub3Qgc2V0LAotJ3dlYi5icm93c2VyJyB3aWxsIGJlIHVzZWQgaW5zdGVhZCBpZiBpdCBpcyBkZWZpbmVkLiBTZWUKK0lmIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBpbnN0YXdlYi5icm93c2VyYCBpcyBub3Qgc2V0LAorYHdlYi5icm93c2VyYCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBpZiBpdCBpcyBkZWZpbmVkLiBTZWUKIGxpbmtnaXQ6Z2l0LXdlYntsaXRkZH1icm93c2VbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4KIAogU0VFIEFMU08KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWludGVycHJldC10cmFpbGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbnRlcnByZXQtdHJhaWxlcnMudHh0CmluZGV4IGE3N2I5MDEuLjkzZDFkYjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWludGVycHJldC10cmFpbGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW50ZXJwcmV0LXRyYWlsZXJzLnR4dApAQCAtMjE5LDcgKzIxOSw3IEBACiBTaWduZWQtb2ZmLWJ5OiBCb2IgPGJvYkBleGFtcGxlLmNvbT4KIC0tLS0tLS0tLS0tLQogCi0qIFVzZSB0aGUgJy0taW4tcGxhY2UnIG9wdGlvbiB0byBlZGl0IGEgbWVzc2FnZSBmaWxlIGluIHBsYWNlOgorKiBVc2UgdGhlIGAtLWluLXBsYWNlYCBvcHRpb24gdG8gZWRpdCBhIG1lc3NhZ2UgZmlsZSBpbiBwbGFjZToKICsKIC0tLS0tLS0tLS0tLQogJCBjYXQgbXNnLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKaW5kZXggZGVjMzc5Yi4uMzIyNDZmZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CkBAIC0xOTgsMTIgKzE5OCwxNiBAQAogCWBnaXQgbG9nIC1wYCBvdXRwdXQgd291bGQgYmUgc2hvd24gd2l0aG91dCBhIGRpZmYgYXR0YWNoZWQuCiAJVGhlIGRlZmF1bHQgaXMgYHRydWVgLgogCitsb2cuc2hvd1NpZ25hdHVyZTo6CisJSWYgYHRydWVgLCBgZ2l0IGxvZ2AgYW5kIHJlbGF0ZWQgY29tbWFuZHMgd2lsbCBhY3QgYXMgaWYgdGhlCisJYC0tc2hvdy1zaWduYXR1cmVgIG9wdGlvbiB3YXMgcGFzc2VkIHRvIHRoZW0uCisKIG1haWxtYXAuKjo6CiAJU2VlIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdLgogCiBub3Rlcy5kaXNwbGF5UmVmOjoKIAlXaGljaCByZWZzLCBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBzZXQgYnkgYGNvcmUubm90ZXNSZWZgCi0Jb3IgJ0dJVF9OT1RFU19SRUYnLCB0byByZWFkIG5vdGVzIGZyb20gd2hlbiBzaG93aW5nIGNvbW1pdAorCW9yIGBHSVRfTk9URVNfUkVGYCwgdG8gcmVhZCBub3RlcyBmcm9tIHdoZW4gc2hvd2luZyBjb21taXQKIAltZXNzYWdlcyB3aXRoIHRoZSBgbG9nYCBmYW1pbHkgb2YgY29tbWFuZHMuICBTZWUKIAlsaW5rZ2l0OmdpdC1ub3Rlc1sxXS4KICsKQEAgLTIxMiw3ICsyMTYsNyBAQAogYnV0IGEgZ2xvYiB0aGF0IGRvZXMgbm90IG1hdGNoIGFueSByZWZzIGlzIHNpbGVudGx5IGlnbm9yZWQuCiArCiBUaGlzIHNldHRpbmcgY2FuIGJlIGRpc2FibGVkIGJ5IHRoZSBgLS1uby1ub3Rlc2Agb3B0aW9uLAotb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9OT1RFU19ESVNQTEFZX1JFRicgZW52aXJvbm1lbnQgdmFyaWFibGUsCitvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX05PVEVTX0RJU1BMQVlfUkVGYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwKIGFuZCBvdmVycmlkZGVuIGJ5IHRoZSBgLS1ub3Rlcz08cmVmPmAgb3B0aW9uLgogCiBHSVQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dAppbmRleCA3NWMzZjQxLi4wNzhiNTU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0CkBAIC0xNzUsNyArMTc1LDcgQEAKIAogT3V0cHV0CiAtLS0tLS0KLSdnaXQgbHMtZmlsZXMnIGp1c3Qgb3V0cHV0cyB0aGUgZmlsZW5hbWVzIHVubGVzcyAnLS1zdGFnZScgaXMgc3BlY2lmaWVkIGluCisnZ2l0IGxzLWZpbGVzJyBqdXN0IG91dHB1dHMgdGhlIGZpbGVuYW1lcyB1bmxlc3MgYC0tc3RhZ2VgIGlzIHNwZWNpZmllZCBpbgogd2hpY2ggY2FzZSBpdCBvdXRwdXRzOgogCiAgICAgICAgIFs8dGFnPiBdPG1vZGU+IDxvYmplY3Q+IDxzdGFnZT4gPGZpbGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CmluZGV4IDE2ZTg3ZmQuLmRiYzkxZjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CkBAIC0yMCwxNiArMjAsMTYgQEAKIAogIC0gdGhlIGJlaGF2aW91ciBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aGF0IG9mICIvYmluL2xzIiBpbiB0aGF0IHRoZQogICAgJzxwYXRoPicgZGVub3RlcyBqdXN0IGEgbGlzdCBvZiBwYXR0ZXJucyB0byBtYXRjaCwgZS5nLiBzbyBzcGVjaWZ5aW5nCi0gICBkaXJlY3RvcnkgbmFtZSAod2l0aG91dCAnLXInKSB3aWxsIGJlaGF2ZSBkaWZmZXJlbnRseSwgYW5kIG9yZGVyIG9mIHRoZQorICAgZGlyZWN0b3J5IG5hbWUgKHdpdGhvdXQgYC1yYCkgd2lsbCBiZWhhdmUgZGlmZmVyZW50bHksIGFuZCBvcmRlciBvZiB0aGUKICAgIGFyZ3VtZW50cyBkb2VzIG5vdCBtYXR0ZXIuCiAKICAtIHRoZSBiZWhhdmlvdXIgaXMgc2ltaWxhciB0byB0aGF0IG9mICIvYmluL2xzIiBpbiB0aGF0IHRoZSAnPHBhdGg+JyBpcwogICAgdGFrZW4gYXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBFLmcuIHdoZW4geW91IGFyZQogICAgaW4gYSBkaXJlY3RvcnkgJ3N1YicgdGhhdCBoYXMgYSBkaXJlY3RvcnkgJ2RpcicsIHlvdSBjYW4gcnVuICdnaXQKICAgIGxzLXRyZWUgLXIgSEVBRCBkaXInIHRvIGxpc3QgdGhlIGNvbnRlbnRzIG9mIHRoZSB0cmVlICh0aGF0IGlzCi0gICAnc3ViL2RpcicgaW4gJ0hFQUQnKS4gIFlvdSBkb24ndCB3YW50IHRvIGdpdmUgYSB0cmVlIHRoYXQgaXMgbm90IGF0IHRoZQorICAgJ3N1Yi9kaXInIGluIGBIRUFEYCkuICBZb3UgZG9uJ3Qgd2FudCB0byBnaXZlIGEgdHJlZSB0aGF0IGlzIG5vdCBhdCB0aGUKICAgIHJvb3QgbGV2ZWwgKGUuZy4gYGdpdCBscy10cmVlIC1yIEhFQUQ6c3ViIGRpcmApIGluIHRoaXMgY2FzZSwgYXMgdGhhdAotICAgd291bGQgcmVzdWx0IGluIGFza2luZyBmb3IgJ3N1Yi9zdWIvZGlyJyBpbiB0aGUgJ0hFQUQnIGNvbW1pdC4KKyAgIHdvdWxkIHJlc3VsdCBpbiBhc2tpbmcgZm9yICdzdWIvc3ViL2RpcicgaW4gdGhlIGBIRUFEYCBjb21taXQuCiAgICBIb3dldmVyLCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBjYW4gYmUgaWdub3JlZCBieSBwYXNzaW5nCiAgICAtLWZ1bGwtdHJlZSBvcHRpb24uCiAKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogLXQ6OgogCVNob3cgdHJlZSBlbnRyaWVzIGV2ZW4gd2hlbiBnb2luZyB0byByZWN1cnNlIHRoZW0uIEhhcyBubyBlZmZlY3QKLQlpZiAnLXInIHdhcyBub3QgcGFzc2VkLiAnLWQnIGltcGxpZXMgJy10Jy4KKwlpZiBgLXJgIHdhcyBub3QgcGFzc2VkLiBgLWRgIGltcGxpZXMgYC10YC4KIAogLWw6OgogLS1sb25nOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsc3BsaXQudHh0CmluZGV4IDRkMWI4NzEuLmUzYjJhODggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWFpbHNwbGl0LnR4dApAQCAtOCw3ICs4LDggQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdCBtYWlsc3BsaXQnIFstYl0gWy1mPG5uPl0gWy1kPHByZWM+XSBbLS1rZWVwLWNyXSAtbzxkaXJlY3Rvcnk+IFstLV0gWyg8bWJveD58PE1haWxkaXI+KS4uLl0KKydnaXQgbWFpbHNwbGl0JyBbLWJdIFstZjxubj5dIFstZDxwcmVjPl0gWy0ta2VlcC1jcl0gWy0tbWJveHJkXQorCQktbzxkaXJlY3Rvcnk+IFstLV0gWyg8bWJveD58PE1haWxkaXI+KS4uLl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC00Nyw2ICs0OCwxMCBAQAogLS1rZWVwLWNyOjoKIAlEbyBub3QgcmVtb3ZlIGBccmAgZnJvbSBsaW5lcyBlbmRpbmcgd2l0aCBgXHJcbmAuCiAKKy0tbWJveHJkOjoKKwlJbnB1dCBpcyBvZiB0aGUgIm1ib3hyZCIgZm9ybWF0IGFuZCAiXj4rRnJvbSAiIGxpbmUgZXNjYXBpbmcgaXMKKwlyZXZlcnNlZC4KKwogR0lUCiAtLS0KIFBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dAppbmRleCA1YzZlYmRmLi5jMzYxNmU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1rdHJlZS50eHQKQEAgLTMyLDcgKzMyLDcgQEAKIC0tYmF0Y2g6OgogCUFsbG93IGJ1aWxkaW5nIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSBvYmplY3QgYmVmb3JlIGV4aXRpbmcuICBFYWNoCiAJdHJlZSBpcyBzZXBhcmF0ZWQgYnkgYXMgc2luZ2xlIGJsYW5rIGxpbmUuIFRoZSBmaW5hbCBuZXctbGluZSBpcwotCW9wdGlvbmFsLiAgTm90ZSAtIGlmIHRoZSAnLXonIG9wdGlvbiBpcyB1c2VkLCBsaW5lcyBhcmUgdGVybWluYXRlZAorCW9wdGlvbmFsLiAgTm90ZSAtIGlmIHRoZSBgLXpgIG9wdGlvbiBpcyB1c2VkLCBsaW5lcyBhcmUgdGVybWluYXRlZAogCXdpdGggTlVMLgogCiBHSVQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dAppbmRleCBlNDUzMTMyLi43OTQ0OWJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbXYudHh0CkBAIC0zMiwxMCArMzIsMTAgQEAKIC0tZm9yY2U6OgogCUZvcmNlIHJlbmFtaW5nIG9yIG1vdmluZyBvZiBhIGZpbGUgZXZlbiBpZiB0aGUgdGFyZ2V0IGV4aXN0cwogLWs6OgotICAgICAgICBTa2lwIG1vdmUgb3IgcmVuYW1lIGFjdGlvbnMgd2hpY2ggd291bGQgbGVhZCB0byBhbiBlcnJvcgorCVNraXAgbW92ZSBvciByZW5hbWUgYWN0aW9ucyB3aGljaCB3b3VsZCBsZWFkIHRvIGFuIGVycm9yCiAJY29uZGl0aW9uLiBBbiBlcnJvciBoYXBwZW5zIHdoZW4gYSBzb3VyY2UgaXMgbmVpdGhlciBleGlzdGluZyBub3IKIAljb250cm9sbGVkIGJ5IEdpdCwgb3Igd2hlbiBpdCB3b3VsZCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcKLSAgICAgICAgZmlsZSB1bmxlc3MgJy1mJyBpcyBnaXZlbi4KKwlmaWxlIHVubGVzcyBgLWZgIGlzIGdpdmVuLgogLW46OgogLS1kcnktcnVuOjoKIAlEbyBub3RoaW5nOyBvbmx5IHNob3cgd2hhdCB3b3VsZCBoYXBwZW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dAppbmRleCA5YzRmZDY4Li5iZTdkYjMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ub3Rlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0CkBAIC0xNTIsNyArMTUyLDcgQEAKIAogLWMgPG9iamVjdD46OgogLS1yZWVkaXQtbWVzc2FnZT08b2JqZWN0Pjo6Ci0JTGlrZSAnLUMnLCBidXQgd2l0aCAnLWMnIHRoZSBlZGl0b3IgaXMgaW52b2tlZCwgc28gdGhhdAorCUxpa2UgJy1DJywgYnV0IHdpdGggYC1jYCB0aGUgZWRpdG9yIGlzIGludm9rZWQsIHNvIHRoYXQKIAl0aGUgdXNlciBjYW4gZnVydGhlciBlZGl0IHRoZSBub3RlIG1lc3NhZ2UuCiAKIC0tYWxsb3ctZW1wdHk6OgpAQCAtMTYxLDcgKzE2MSw3IEBACiAKIC0tcmVmIDxyZWY+OjoKIAlNYW5pcHVsYXRlIHRoZSBub3RlcyB0cmVlIGluIDxyZWY+LiAgVGhpcyBvdmVycmlkZXMKLQknR0lUX05PVEVTX1JFRicgYW5kIHRoZSAiY29yZS5ub3Rlc1JlZiIgY29uZmlndXJhdGlvbi4gIFRoZSByZWYKKwlgR0lUX05PVEVTX1JFRmAgYW5kIHRoZSAiY29yZS5ub3Rlc1JlZiIgY29uZmlndXJhdGlvbi4gIFRoZSByZWYKIAlzcGVjaWZpZXMgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucyB3aXRoIGByZWZzL25vdGVzL2A7IHdoZW4gaXQKIAliZWdpbnMgd2l0aCBgbm90ZXMvYCwgYHJlZnMvYCBhbmQgb3RoZXJ3aXNlIGByZWZzL25vdGVzL2AgaXMgcHJlZml4ZWQKIAl0byBmb3JtIGEgZnVsbCBuYW1lIG9mIHRoZSByZWYuCkBAIC0zMzMsMTAgKzMzMywxMCBAQAogbm90ZXMuZGlzcGxheVJlZjo6CiAJV2hpY2ggcmVmIChvciByZWZzLCBpZiBhIGdsb2Igb3Igc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlKSwgaW4KIAlhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBzZXQgYnkgYGNvcmUubm90ZXNSZWZgIG9yCi0JJ0dJVF9OT1RFU19SRUYnLCB0byByZWFkIG5vdGVzIGZyb20gd2hlbiBzaG93aW5nIGNvbW1pdAorCWBHSVRfTk9URVNfUkVGYCwgdG8gcmVhZCBub3RlcyBmcm9tIHdoZW4gc2hvd2luZyBjb21taXQKIAltZXNzYWdlcyB3aXRoIHRoZSAnZ2l0IGxvZycgZmFtaWx5IG9mIGNvbW1hbmRzLgogCVRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGJ5IHRoZQotCSdHSVRfTk9URVNfRElTUExBWV9SRUYnIGVudmlyb25tZW50IHZhcmlhYmxlLgorCWBHSVRfTk9URVNfRElTUExBWV9SRUZgIGVudmlyb25tZW50IHZhcmlhYmxlLgogCVNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0uCiAKIG5vdGVzLnJld3JpdGUuPGNvbW1hbmQ+OjoKQEAgLTM0NSw3ICszNDUsNyBAQAogCW5vdGVzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSByZXdyaXR0ZW4gY29tbWl0LiAgRGVmYXVsdHMgdG8KIAlgdHJ1ZWAuICBTZWUgYWxzbyAiYG5vdGVzLnJld3JpdGVSZWZgIiBiZWxvdy4KICsKLVRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9OT1RFU19SRVdSSVRFX1JFRicKK1RoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9OT1RFU19SRVdSSVRFX1JFRmAKIGVudmlyb25tZW50IHZhcmlhYmxlLgogCiBub3Rlcy5yZXdyaXRlTW9kZTo6CkBAIC0zNjYsMzMgKzM2NiwzMyBAQAogRG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWU7IHlvdSBtdXN0IGNvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIHRvCiBlbmFibGUgbm90ZSByZXdyaXRpbmcuCiArCi1DYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAnR0lUX05PVEVTX1JFV1JJVEVfUkVGJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KK0NhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGBHSVRfTk9URVNfUkVXUklURV9SRUZgIGVudmlyb25tZW50IHZhcmlhYmxlLgogCiAKIEVOVklST05NRU5UCiAtLS0tLS0tLS0tLQogCi0nR0lUX05PVEVTX1JFRic6OgorYEdJVF9OT1RFU19SRUZgOjoKIAlXaGljaCByZWYgdG8gbWFuaXB1bGF0ZSBub3RlcyBmcm9tLCBpbnN0ZWFkIG9mIGByZWZzL25vdGVzL2NvbW1pdHNgLgogCVRoaXMgb3ZlcnJpZGVzIHRoZSBgY29yZS5ub3Rlc1JlZmAgc2V0dGluZy4KIAotJ0dJVF9OT1RFU19ESVNQTEFZX1JFRic6OgorYEdJVF9OT1RFU19ESVNQTEFZX1JFRmA6OgogCUNvbG9uLWRlbGltaXRlZCBsaXN0IG9mIHJlZnMgb3IgZ2xvYnMgaW5kaWNhdGluZyB3aGljaCByZWZzLAogCWluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IGZyb20gYGNvcmUubm90ZXNSZWZgIG9yCi0JJ0dJVF9OT1RFU19SRUYnLCB0byByZWFkIG5vdGVzIGZyb20gd2hlbiBzaG93aW5nIGNvbW1pdAorCWBHSVRfTk9URVNfUkVGYCwgdG8gcmVhZCBub3RlcyBmcm9tIHdoZW4gc2hvd2luZyBjb21taXQKIAltZXNzYWdlcy4KIAlUaGlzIG92ZXJyaWRlcyB0aGUgYG5vdGVzLmRpc3BsYXlSZWZgIHNldHRpbmcuCiArCiBBIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgZm9yIHJlZnMgdGhhdCBkbyBub3QgZXhpc3QsIGJ1dCBhIGdsb2IgdGhhdAogZG9lcyBub3QgbWF0Y2ggYW55IHJlZnMgaXMgc2lsZW50bHkgaWdub3JlZC4KIAotJ0dJVF9OT1RFU19SRVdSSVRFX01PREUnOjoKK2BHSVRfTk9URVNfUkVXUklURV9NT0RFYDo6CiAJV2hlbiBjb3B5aW5nIG5vdGVzIGR1cmluZyBhIHJld3JpdGUsIHdoYXQgdG8gZG8gaWYgdGhlIHRhcmdldAogCWNvbW1pdCBhbHJlYWR5IGhhcyBhIG5vdGUuCiAJTXVzdCBiZSBvbmUgb2YgYG92ZXJ3cml0ZWAsIGBjb25jYXRlbmF0ZWAsIGBjYXRfc29ydF91bmlxYCwgb3IgYGlnbm9yZWAuCiAJVGhpcyBvdmVycmlkZXMgdGhlIGBjb3JlLnJld3JpdGVNb2RlYCBzZXR0aW5nLgogCi0nR0lUX05PVEVTX1JFV1JJVEVfUkVGJzo6CitgR0lUX05PVEVTX1JFV1JJVEVfUkVGYDo6CiAJV2hlbiByZXdyaXRpbmcgY29tbWl0cywgd2hpY2ggbm90ZXMgdG8gY29weSBmcm9tIHRoZSBvcmlnaW5hbAogCXRvIHRoZSByZXdyaXR0ZW4gY29tbWl0LiAgTXVzdCBiZSBhIGNvbG9uLWRlbGltaXRlZCBsaXN0IG9mCiAJcmVmcyBvciBnbG9icy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXA0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXA0LnR4dAppbmRleCA4OGJhNDJiLi5jODNhYWYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wNC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcDQudHh0CkBAIC0xMDQsNyArMTA0LDcgQEAKIC0tLS0tLS0tLS0tLQogVGhpcyBpbXBvcnRzIHRoZSBzcGVjaWZpZWQgZGVwb3QgaW50bwogJ3JlZnMvcmVtb3Rlcy9wNC9tYXN0ZXInIGluIGFuIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5LiAgVGhlCi0nLS1icmFuY2gnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IGJyYW5jaCB0bworYC0tYnJhbmNoYCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBicmFuY2ggdG8KIGJlIHVzZWQgZm9yIHRoZSBwNCBjb250ZW50LgogCiBJZiBhIEdpdCByZXBvc2l0b3J5IGluY2x1ZGVzIGJyYW5jaGVzICdyZWZzL3JlbW90ZXMvb3JpZ2luL3A0JywgdGhlc2UKQEAgLTExNCw3ICsxMTQsNyBAQAogCiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYnJhbmNoZXMsIGRvaW5nICdnaXQgcDQgc3luYycgd2lsbCBhdXRvbWF0aWNhbGx5CiB1c2UgdGhlICJCUkFOQ0ggREVURUNUSU9OIiBhbGdvcml0aG0gdG8gdHJ5IHRvIHBhcnRpdGlvbiBuZXcgY2hhbmdlcwotaW50byB0aGUgcmlnaHQgYnJhbmNoLiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAnLS1icmFuY2gnCitpbnRvIHRoZSByaWdodCBicmFuY2guICBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGAtLWJyYW5jaGAKIG9wdGlvbiB0byBzcGVjaWZ5IGp1c3QgYSBzaW5nbGUgYnJhbmNoIHRvIHVwZGF0ZS4KIAogCkBAIC0xMzQsNyArMTM0LDcgQEAKIH5+fn5+fgogU3VibWl0dGluZyBjaGFuZ2VzIGZyb20gYSBHaXQgcmVwb3NpdG9yeSBiYWNrIHRvIHRoZSBwNCByZXBvc2l0b3J5CiByZXF1aXJlcyBhIHNlcGFyYXRlIHA0IGNsaWVudCB3b3Jrc3BhY2UuICBUaGlzIHNob3VsZCBiZSBzcGVjaWZpZWQKLXVzaW5nIHRoZSAnUDRDTElFTlQnIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIHRoZSBHaXQgY29uZmlndXJhdGlvbgordXNpbmcgdGhlIGBQNENMSUVOVGAgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgdGhlIEdpdCBjb25maWd1cmF0aW9uCiB2YXJpYWJsZSAnZ2l0LXA0LmNsaWVudCcuICBUaGUgcDQgY2xpZW50IG11c3QgZXhpc3QsIGJ1dCB0aGUgY2xpZW50IHJvb3QKIHdpbGwgYmUgY3JlYXRlZCBhbmQgcG9wdWxhdGVkIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCiAKQEAgLTE1MCwxMCArMTUwLDEwIEBACiAtLS0tLS0tLS0tLS0KIAogVGhlIHVwc3RyZWFtIHJlZmVyZW5jZSBpcyBnZW5lcmFsbHkgJ3JlZnMvcmVtb3Rlcy9wNC9tYXN0ZXInLCBidXQgY2FuCi1iZSBvdmVycmlkZGVuIHVzaW5nIHRoZSAnLS1vcmlnaW49JyBjb21tYW5kLWxpbmUgb3B0aW9uLgorYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgYC0tb3JpZ2luPWAgY29tbWFuZC1saW5lIG9wdGlvbi4KIAogVGhlIHA0IGNoYW5nZXMgd2lsbCBiZSBjcmVhdGVkIGFzIHRoZSB1c2VyIGludm9raW5nICdnaXQgcDQgc3VibWl0Jy4gVGhlCi0nLS1wcmVzZXJ2ZS11c2VyJyBvcHRpb24gd2lsbCBjYXVzZSBvd25lcnNoaXAgdG8gYmUgbW9kaWZpZWQKK2AtLXByZXNlcnZlLXVzZXJgIG9wdGlvbiB3aWxsIGNhdXNlIG93bmVyc2hpcCB0byBiZSBtb2RpZmllZAogYWNjb3JkaW5nIHRvIHRoZSBhdXRob3Igb2YgdGhlIEdpdCBjb21taXQuICBUaGlzIG9wdGlvbiByZXF1aXJlcyBhZG1pbgogcHJpdmlsZWdlcyBpbiBwNCwgd2hpY2ggY2FuIGJlIGdyYW50ZWQgdXNpbmcgJ3A0IHByb3RlY3QnLgogCkBAIC0xNjYsNyArMTY2LDcgQEAKIEFsbCBjb21tYW5kcyBleGNlcHQgY2xvbmUgYWNjZXB0IHRoZXNlIG9wdGlvbnMuCiAKIC0tZ2l0LWRpciA8ZGlyPjo6Ci0JU2V0IHRoZSAnR0lUX0RJUicgZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgbGlua2dpdDpnaXRbMV0uCisJU2V0IHRoZSBgR0lUX0RJUmAgZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgbGlua2dpdDpnaXRbMV0uCiAKIC12OjoKIC0tdmVyYm9zZTo6CkBAIC0yMjEsNyArMjIxLDcgQEAKIAl3aGVyZSB0aGV5IHdpbGwgYmUgdHJlYXRlZCBhcyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYnkKIAlsaW5rZ2l0OmdpdC1icmFuY2hbMV0gYW5kIG90aGVyIGNvbW1hbmRzLiAgVGhpcyBvcHRpb24gaW5zdGVhZAogCXB1dHMgcDQgYnJhbmNoZXMgaW4gJ3JlZnMvaGVhZHMvcDQvJy4gIE5vdGUgdGhhdCBmdXR1cmUKLQlzeW5jIG9wZXJhdGlvbnMgbXVzdCBzcGVjaWZ5ICctLWltcG9ydC1sb2NhbCcgYXMgd2VsbCBzbyB0aGF0CisJc3luYyBvcGVyYXRpb25zIG11c3Qgc3BlY2lmeSBgLS1pbXBvcnQtbG9jYWxgIGFzIHdlbGwgc28gdGhhdAogCXRoZXkgY2FuIGZpbmQgdGhlIHA0IGJyYW5jaGVzIGluIHJlZnMvaGVhZHMuCiAKIC0tbWF4LWNoYW5nZXMgPG4+OjoKQEAgLTI0NSw3ICsyNDUsNyBAQAogCWRlZmF1bHQsIGludm9sdmVzIHJlbW92aW5nIHRoZSBlbnRpcmUgZGVwb3QgcGF0aC4gIFdpdGggdGhpcwogCW9wdGlvbiwgdGhlIGZ1bGwgcDQgZGVwb3QgcGF0aCBpcyByZXRhaW5lZCBpbiBHaXQuICBGb3IgZXhhbXBsZSwKIAlwYXRoICcvL2RlcG90L21haW4vZm9vL2Jhci5jJywgd2hlbiBpbXBvcnRlZCBmcm9tCi0JJy8vZGVwb3QvbWFpbi8nLCBiZWNvbWVzICdmb28vYmFyLmMnLiAgV2l0aCAnLS1rZWVwLXBhdGgnLCB0aGUKKwknLy9kZXBvdC9tYWluLycsIGJlY29tZXMgJ2Zvby9iYXIuYycuICBXaXRoIGAtLWtlZXAtcGF0aGAsIHRoZQogCUdpdCBwYXRoIGlzIGluc3RlYWQgJ2RlcG90L21haW4vZm9vL2Jhci5jJy4KIAogLS11c2UtY2xpZW50LXNwZWM6OgpAQCAtMjc1LDcgKzI3NSw3IEBACiAtLW9yaWdpbiA8Y29tbWl0Pjo6CiAJVXBzdHJlYW0gbG9jYXRpb24gZnJvbSB3aGljaCBjb21taXRzIGFyZSBpZGVudGlmaWVkIHRvIHN1Ym1pdCB0bwogCXA0LiAgQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgbW9zdCByZWNlbnQgcDQgY29tbWl0IHJlYWNoYWJsZQotCWZyb20gJ0hFQUQnLgorCWZyb20gYEhFQURgLgogCiAtTTo6CiAJRGV0ZWN0IHJlbmFtZXMuICBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXS4gIFJlbmFtZXMgd2lsbCBiZQpAQCAtMzQxLDcgKzM0MSw3IEBACiAgICAgSW1wb3J0IGFsbCBjaGFuZ2VzIGZyb20gYm90aCBuYW1lZCBkZXBvdCBwYXRocyBpbnRvIGEgc2luZ2xlCiAgICAgcmVwb3NpdG9yeS4gIE9ubHkgZmlsZXMgYmVsb3cgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIGluY2x1ZGVkLgogICAgIFRoZXJlIGlzIG5vdCBhIHN1YmRpcmVjdG9yeSBpbiBHaXQgZm9yIGVhY2ggInByb2oxIiBhbmQgInByb2oyIi4KLSAgICBZb3UgbXVzdCB1c2UgdGhlICctLWRlc3RpbmF0aW9uJyBvcHRpb24gd2hlbiBzcGVjaWZ5aW5nIG1vcmUKKyAgICBZb3UgbXVzdCB1c2UgdGhlIGAtLWRlc3RpbmF0aW9uYCBvcHRpb24gd2hlbiBzcGVjaWZ5aW5nIG1vcmUKICAgICB0aGFuIG9uZSBkZXBvdCBwYXRoLiAgVGhlIHJldmlzaW9uIHNwZWNpZmllciBtdXN0IGJlIHNwZWNpZmllZAogICAgIGlkZW50aWNhbGx5IG9uIGVhY2ggZGVwb3QgcGF0aC4gIElmIHRoZXJlIGFyZSBmaWxlcyBpbiB0aGUKICAgICBkZXBvdCBwYXRocyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZSBwYXRoIHdpdGggdGhlIG1vc3QgcmVjZW50bHkKQEAgLTM1NSw3ICszNTUsNyBAQAogVGhlIHA0IGNsaWVudCBzcGVjaWZpY2F0aW9uIGlzIG1haW50YWluZWQgd2l0aCB0aGUgJ3A0IGNsaWVudCcgY29tbWFuZAogYW5kIGNvbnRhaW5zIGFtb25nIG90aGVyIGZpZWxkcywgYSBWaWV3IHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgZGVwb3QKIGlzIG1hcHBlZCBpbnRvIHRoZSBjbGllbnQgcmVwb3NpdG9yeS4gIFRoZSAnY2xvbmUnIGFuZCAnc3luYycgY29tbWFuZHMKLWNhbiBjb25zdWx0IHRoZSBjbGllbnQgc3BlYyB3aGVuIGdpdmVuIHRoZSAnLS11c2UtY2xpZW50LXNwZWMnIG9wdGlvbiBvcgorY2FuIGNvbnN1bHQgdGhlIGNsaWVudCBzcGVjIHdoZW4gZ2l2ZW4gdGhlIGAtLXVzZS1jbGllbnQtc3BlY2Agb3B0aW9uIG9yCiB3aGVuIHRoZSB1c2VDbGllbnRTcGVjIHZhcmlhYmxlIGlzIHRydWUuICBBZnRlciAnZ2l0IHA0IGNsb25lJywgdGhlCiB1c2VDbGllbnRTcGVjIHZhcmlhYmxlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IGluIHRoZSByZXBvc2l0b3J5CiBjb25maWd1cmF0aW9uIGZpbGUuICBUaGlzIGFsbG93cyBmdXR1cmUgJ2dpdCBwNCBzdWJtaXQnIGNvbW1hbmRzIHRvCkBAIC0zOTAsNyArMzkwLDcgQEAKIGNhbiB1c2UgdGhlc2UgbWFwcGluZ3MgdG8gZGV0ZXJtaW5lIGJyYW5jaCByZWxhdGlvbnNoaXBzLgogCiBJZiB5b3UgaGF2ZSBhIHJlcG9zaXRvcnkgd2hlcmUgYWxsIHRoZSBicmFuY2hlcyBvZiBpbnRlcmVzdCBleGlzdCBhcwotc3ViZGlyZWN0b3JpZXMgb2YgYSBzaW5nbGUgZGVwb3QgcGF0aCwgeW91IGNhbiB1c2UgJy0tZGV0ZWN0LWJyYW5jaGVzJworc3ViZGlyZWN0b3JpZXMgb2YgYSBzaW5nbGUgZGVwb3QgcGF0aCwgeW91IGNhbiB1c2UgYC0tZGV0ZWN0LWJyYW5jaGVzYAogd2hlbiBjbG9uaW5nIG9yIHN5bmNpbmcgdG8gaGF2ZSAnZ2l0IHA0JyBhdXRvbWF0aWNhbGx5IGZpbmQKIHN1YmRpcmVjdG9yaWVzIGluIHA0LCBhbmQgdG8gZ2VuZXJhdGUgdGhlc2UgYXMgYnJhbmNoZXMgaW4gR2l0LgogCkBAIC01MDcsNyArNTA3LDcgQEAKIGdpdC1wNC51c2VDbGllbnRTcGVjOjoKIAlTcGVjaWZ5IHRoYXQgdGhlIHA0IGNsaWVudCBzcGVjIHNob3VsZCBiZSB1c2VkIHRvIGlkZW50aWZ5IHA0CiAJZGVwb3QgcGF0aHMgb2YgaW50ZXJlc3QuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyB0aGUKLQlvcHRpb24gJy0tdXNlLWNsaWVudC1zcGVjJy4gIFNlZSB0aGUgIkNMSUVOVCBTUEVDIiBzZWN0aW9uIGFib3ZlLgorCW9wdGlvbiBgLS11c2UtY2xpZW50LXNwZWNgLiAgU2VlIHRoZSAiQ0xJRU5UIFNQRUMiIHNlY3Rpb24gYWJvdmUuCiAJVGhpcyB2YXJpYWJsZSBpcyBhIGJvb2xlYW4sIG5vdCB0aGUgbmFtZSBvZiBhIHA0IGNsaWVudC4KIAogZ2l0LXA0LnBhdGhFbmNvZGluZzo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dAppbmRleCAxOWNkY2QwLi44OTczNTEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQKQEAgLTEwNCw4ICsxMDQsOCBAQAogCW91dCBvZiBtZW1vcnkgd2l0aCBhIGxhcmdlIHdpbmRvdywgYnV0IHN0aWxsIGJlIGFibGUgdG8gdGFrZQogCWFkdmFudGFnZSBvZiB0aGUgbGFyZ2Ugd2luZG93IGZvciB0aGUgc21hbGxlciBvYmplY3RzLiAgVGhlCiAJc2l6ZSBjYW4gYmUgc3VmZml4ZWQgd2l0aCAiayIsICJtIiwgb3IgImciLgotCWAtLXdpbmRvdy1tZW1vcnk9MGAgbWFrZXMgbWVtb3J5IHVzYWdlIHVubGltaXRlZCwgd2hpY2ggaXMgdGhlCi0JZGVmYXVsdC4KKwlgLS13aW5kb3ctbWVtb3J5PTBgIG1ha2VzIG1lbW9yeSB1c2FnZSB1bmxpbWl0ZWQuICBUaGUgZGVmYXVsdAorCWlzIHRha2VuIGZyb20gdGhlIGBwYWNrLndpbmRvd01lbW9yeWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KIAogLS1tYXgtcGFjay1zaXplPTxuPjo6CiAJTWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZS4gVGhlIHNpemUgY2FuIGJlIHN1ZmZpeGVkIHdpdGgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKaW5kZXggY2Y2ZWU0YS4uNDdiNzdlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKQEAgLTExLDcgKzExLDcgQEAKIFt2ZXJzZV0KICdnaXQgcHVzaCcgWy0tYWxsIHwgLS1taXJyb3IgfCAtLXRhZ3NdIFstLWZvbGxvdy10YWdzXSBbLS1hdG9taWNdIFstbiB8IC0tZHJ5LXJ1bl0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0KIAkgICBbLS1yZXBvPTxyZXBvc2l0b3J5Pl0gWy1mIHwgLS1mb3JjZV0gWy1kIHwgLS1kZWxldGVdIFstLXBydW5lXSBbLXYgfCAtLXZlcmJvc2VdCi0JICAgWy11IHwgLS1zZXQtdXBzdHJlYW1dCisJICAgWy11IHwgLS1zZXQtdXBzdHJlYW1dIFstLXB1c2gtb3B0aW9uPTxzdHJpbmc+XQogCSAgIFstLVtuby1dc2lnbmVkfC0tc2lnbj0odHJ1ZXxmYWxzZXxpZi1hc2tlZCldCiAJICAgWy0tZm9yY2Utd2l0aC1sZWFzZVs9PHJlZm5hbWU+Wzo8ZXhwZWN0Pl1dXQogCSAgIFstLW5vLXZlcmlmeV0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0KQEAgLTEzNyw4ICsxMzcsOCBAQAogCWFuZCBhbHNvIHB1c2ggYW5ub3RhdGVkIHRhZ3MgaW4gYHJlZnMvdGFnc2AgdGhhdCBhcmUgbWlzc2luZwogCWZyb20gdGhlIHJlbW90ZSBidXQgYXJlIHBvaW50aW5nIGF0IGNvbW1pdC1pc2ggdGhhdCBhcmUKIAlyZWFjaGFibGUgZnJvbSB0aGUgcmVmcyBiZWluZyBwdXNoZWQuICBUaGlzIGNhbiBhbHNvIGJlIHNwZWNpZmllZAotCXdpdGggY29uZmlndXJhdGlvbiB2YXJpYWJsZSAncHVzaC5mb2xsb3dUYWdzJy4gIEZvciBtb3JlCi0JaW5mb3JtYXRpb24sIHNlZSAncHVzaC5mb2xsb3dUYWdzJyBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisJd2l0aCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBwdXNoLmZvbGxvd1RhZ3NgLiAgRm9yIG1vcmUKKwlpbmZvcm1hdGlvbiwgc2VlIGBwdXNoLmZvbGxvd1RhZ3NgIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KIAogLS1bbm8tXXNpZ25lZDo6CiAtLXNpZ249KHRydWV8ZmFsc2V8aWYtYXNrZWQpOjoKQEAgLTE1Niw2ICsxNTYsMTIgQEAKIAlFaXRoZXIgYWxsIHJlZnMgYXJlIHVwZGF0ZWQsIG9yIG9uIGVycm9yLCBubyByZWZzIGFyZSB1cGRhdGVkLgogCUlmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhdG9taWMgcHVzaGVzIHRoZSBwdXNoIHdpbGwgZmFpbC4KIAorLW86OgorLS1wdXNoLW9wdGlvbjo6CisJVHJhbnNtaXQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgc2VydmVyLCB3aGljaCBwYXNzZXMgdGhlbSB0bworCXRoZSBwcmUtcmVjZWl2ZSBhcyB3ZWxsIGFzIHRoZSBwb3N0LXJlY2VpdmUgaG9vay4gVGhlIGdpdmVuIHN0cmluZworCW11c3Qgbm90IGNvbnRhaW4gYSBOVUwgb3IgTEYgY2hhcmFjdGVyLgorCiAtLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz46OgogLS1leGVjPTxnaXQtcmVjZWl2ZS1wYWNrPjo6CiAJUGF0aCB0byB0aGUgJ2dpdC1yZWNlaXZlLXBhY2snIHByb2dyYW0gb24gdGhlIHJlbW90ZQpAQCAtMTk4LDEwICsyMDQsMTEgQEAKICsKIGAtLWZvcmNlLXdpdGgtbGVhc2U9PHJlZm5hbWU+OjxleHBlY3Q+YCB3aWxsIHByb3RlY3QgdGhlIG5hbWVkIHJlZiAoYWxvbmUpLAogaWYgaXQgaXMgZ29pbmcgdG8gYmUgdXBkYXRlZCwgYnkgcmVxdWlyaW5nIGl0cyBjdXJyZW50IHZhbHVlIHRvIGJlCi10aGUgc2FtZSBhcyB0aGUgc3BlY2lmaWVkIHZhbHVlIDxleHBlY3Q+ICh3aGljaCBpcyBhbGxvd2VkIHRvIGJlCit0aGUgc2FtZSBhcyB0aGUgc3BlY2lmaWVkIHZhbHVlIGA8ZXhwZWN0PmAgKHdoaWNoIGlzIGFsbG93ZWQgdG8gYmUKIGRpZmZlcmVudCBmcm9tIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHdlIGhhdmUgZm9yIHRoZSByZWZuYW1lLAogb3Igd2UgZG8gbm90IGV2ZW4gaGF2ZSB0byBoYXZlIHN1Y2ggYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHdoZW4KLXRoaXMgZm9ybSBpcyB1c2VkKS4KK3RoaXMgZm9ybSBpcyB1c2VkKS4gIElmIGA8ZXhwZWN0PmAgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiB0aGUgbmFtZWQgcmVmCittdXN0IG5vdCBhbHJlYWR5IGV4aXN0LgogKwogTm90ZSB0aGF0IGFsbCBmb3JtcyBvdGhlciB0aGFuIGAtLWZvcmNlLXdpdGgtbGVhc2U9PHJlZm5hbWU+OjxleHBlY3Q+YAogdGhhdCBzcGVjaWZpZXMgdGhlIGV4cGVjdGVkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlZiBleHBsaWNpdGx5IGFyZQpAQCAtMjQwLDcgKzI0Nyw3IEBACiAJRm9yIGV2ZXJ5IGJyYW5jaCB0aGF0IGlzIHVwIHRvIGRhdGUgb3Igc3VjY2Vzc2Z1bGx5IHB1c2hlZCwgYWRkCiAJdXBzdHJlYW0gKHRyYWNraW5nKSByZWZlcmVuY2UsIHVzZWQgYnkgYXJndW1lbnQtbGVzcwogCWxpbmtnaXQ6Z2l0LXB1bGxbMV0gYW5kIG90aGVyIGNvbW1hbmRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKLQlzZWUgJ2JyYW5jaC48bmFtZT4ubWVyZ2UnIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKwlzZWUgYGJyYW5jaC48bmFtZT4ubWVyZ2VgIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KIAogLS1bbm8tXXRoaW46OgogCVRoZXNlIG9wdGlvbnMgYXJlIHBhc3NlZCB0byBsaW5rZ2l0OmdpdC1zZW5kLXBhY2tbMV0uIEEgdGhpbiB0cmFuc2ZlcgpAQCAtMjc1LDcgKzI4Miw3IEBACiAJYWxsIHN1Ym1vZHVsZXMgdGhhdCBjaGFuZ2VkIGluIHRoZSByZXZpc2lvbnMgdG8gYmUgcHVzaGVkIHdpbGwgYmUKIAlwdXNoZWQuIElmIG9uLWRlbWFuZCB3YXMgbm90IGFibGUgdG8gcHVzaCBhbGwgbmVjZXNzYXJ5IHJldmlzaW9ucwogCWl0IHdpbGwgYWxzbyBiZSBhYm9ydGVkIGFuZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzLiBBIHZhbHVlIG9mCi0JJ25vJyBvciB1c2luZyAnLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMnIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZQorCSdubycgb3IgdXNpbmcgYC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzYCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUKIAlwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2hlbiBubyBzdWJtb2R1bGUKIAlyZWN1cnNpb24gaXMgcmVxdWlyZWQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dAppbmRleCBmZjYzM2IwLi44Y2Y5NTJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1xdWlsdGltcG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcXVpbHRpbXBvcnQudHh0CkBAIC00NiwxNCArNDYsMTQgQEAKIAlUaGUgZGlyZWN0b3J5IHRvIGZpbmQgdGhlIHF1aWx0IHBhdGNoZXMuCiArCiBUaGUgZGVmYXVsdCBmb3IgdGhlIHBhdGNoIGRpcmVjdG9yeSBpcyBwYXRjaGVzCi1vciB0aGUgdmFsdWUgb2YgdGhlICRRVUlMVF9QQVRDSEVTIGVudmlyb25tZW50CitvciB0aGUgdmFsdWUgb2YgdGhlIGAkUVVJTFRfUEFUQ0hFU2AgZW52aXJvbm1lbnQKIHZhcmlhYmxlLgogCiAtLXNlcmllcyA8ZmlsZT46OgogCVRoZSBxdWlsdCBzZXJpZXMgZmlsZS4KICsKIFRoZSBkZWZhdWx0IGZvciB0aGUgc2VyaWVzIGZpbGUgaXMgPHBhdGNoZXM+L3Nlcmllcwotb3IgdGhlIHZhbHVlIG9mIHRoZSAkUVVJTFRfU0VSSUVTIGVudmlyb25tZW50CitvciB0aGUgdmFsdWUgb2YgdGhlIGAkUVVJTFRfU0VSSUVTYCBlbnZpcm9ubWVudAogdmFyaWFibGUuCiAKIEdJVApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKaW5kZXggMDM4N2I0MC4uZGUyMjJjOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CkBAIC0yMDgsMTAgKzIwOCwxMCBAQAogCXJlYmFzZS4gRmFsc2UgYnkgZGVmYXVsdC4KIAogcmViYXNlLmF1dG9TcXVhc2g6OgotCUlmIHNldCB0byB0cnVlIGVuYWJsZSAnLS1hdXRvc3F1YXNoJyBvcHRpb24gYnkgZGVmYXVsdC4KKwlJZiBzZXQgdG8gdHJ1ZSBlbmFibGUgYC0tYXV0b3NxdWFzaGAgb3B0aW9uIGJ5IGRlZmF1bHQuCiAKIHJlYmFzZS5hdXRvU3Rhc2g6OgotCUlmIHNldCB0byB0cnVlIGVuYWJsZSAnLS1hdXRvc3Rhc2gnIG9wdGlvbiBieSBkZWZhdWx0LgorCUlmIHNldCB0byB0cnVlIGVuYWJsZSBgLS1hdXRvc3Rhc2hgIG9wdGlvbiBieSBkZWZhdWx0LgogCiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjazo6CiAJSWYgc2V0IHRvICJ3YXJuIiwgcHJpbnQgd2FybmluZ3MgYWJvdXQgcmVtb3ZlZCBjb21taXRzIGluCkBAIC0yMjAsNyArMjIwLDcgQEAKIAlkb25lLiAiaWdub3JlIiBieSBkZWZhdWx0LgogCiByZWJhc2UuaW5zdHJ1Y3Rpb25Gb3JtYXQ6OgotCUN1c3RvbSBjb21taXQgbGlzdCBmb3JtYXQgdG8gdXNlIGR1cmluZyBhbiAnLS1pbnRlcmFjdGl2ZScgcmViYXNlLgorCUN1c3RvbSBjb21taXQgbGlzdCBmb3JtYXQgdG8gdXNlIGR1cmluZyBhbiBgLS1pbnRlcmFjdGl2ZWAgcmViYXNlLgogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC00MjgsOSArNDI4LDkgQEAKIAkiZml4dXAhICIgb3IgInNxdWFzaCEgIiBhZnRlciB0aGUgZmlyc3QsIGluIGNhc2UgeW91IHJlZmVycmVkIHRvIGFuCiAJZWFybGllciBmaXh1cC9zcXVhc2ggd2l0aCBgZ2l0IGNvbW1pdCAtLWZpeHVwLy0tc3F1YXNoYC4KICsKLVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUgJy0taW50ZXJhY3RpdmUnIG9wdGlvbiBpcyB1c2VkLgorVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCB3aGVuIHRoZSBgLS1pbnRlcmFjdGl2ZWAgb3B0aW9uIGlzIHVzZWQuCiArCi1JZiB0aGUgJy0tYXV0b3NxdWFzaCcgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB1c2luZyB0aGUKK0lmIHRoZSBgLS1hdXRvc3F1YXNoYCBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IHVzaW5nIHRoZQogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgcmViYXNlLmF1dG9TcXVhc2hgLCB0aGlzIG9wdGlvbiBjYW4gYmUKIHVzZWQgdG8gb3ZlcnJpZGUgYW5kIGRpc2FibGUgdGhpcyBzZXR0aW5nLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZmQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWZkLnR4dAppbmRleCBlNzAwYmFmLi44MGFmY2E4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZmQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1mZC50eHQKQEAgLTE3LDcgKzE3LDcgQEAKIAogSWYgb25seSA8aW5mZD4gaXMgZ2l2ZW4sIGl0IGlzIGFzc3VtZWQgdG8gYmUgYSBiaWRpcmVjdGlvbmFsIHNvY2tldCBjb25uZWN0ZWQKIHRvIHJlbW90ZSBHaXQgc2VydmVyIChnaXQtdXBsb2FkLXBhY2ssIGdpdC1yZWNlaXZlLXBhY2sgb3IKLWdpdC11cGxvYWQtYWNoaXZlKS4gSWYgYm90aCA8aW5mZD4gYW5kIDxvdXRmZD4gYXJlIGdpdmVuLCB0aGV5IGFyZSBhc3N1bWVkCitnaXQtdXBsb2FkLWFyY2hpdmUpLiBJZiBib3RoIDxpbmZkPiBhbmQgPG91dGZkPiBhcmUgZ2l2ZW4sIHRoZXkgYXJlIGFzc3VtZWQKIHRvIGJlIHBpcGVzIGNvbm5lY3RlZCB0byBhIHJlbW90ZSBHaXQgc2VydmVyICg8aW5mZD4gYmVpbmcgdGhlIGluYm91bmQgcGlwZQogYW5kIDxvdXRmZD4gYmVpbmcgdGhlIG91dGJvdW5kIHBpcGUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0CmluZGV4IDFkN2VjZWEuLjU3N2I5NjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dApAQCAtMTM3LDkgKzEzNyw5IEBACiBSZXRyaWV2ZXMgdGhlIFVSTHMgZm9yIGEgcmVtb3RlLiBDb25maWd1cmF0aW9ucyBmb3IgYGluc3RlYWRPZmAgYW5kCiBgcHVzaEluc3RlYWRPZmAgYXJlIGV4cGFuZGVkIGhlcmUuIEJ5IGRlZmF1bHQsIG9ubHkgdGhlIGZpcnN0IFVSTCBpcyBsaXN0ZWQuCiArCi1XaXRoICctLXB1c2gnLCBwdXNoIFVSTHMgYXJlIHF1ZXJpZWQgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcy4KK1dpdGggYC0tcHVzaGAsIHB1c2ggVVJMcyBhcmUgcXVlcmllZCByYXRoZXIgdGhhbiBmZXRjaCBVUkxzLgogKwotV2l0aCAnLS1hbGwnLCBhbGwgVVJMcyBmb3IgdGhlIHJlbW90ZSB3aWxsIGJlIGxpc3RlZC4KK1dpdGggYC0tYWxsYCwgYWxsIFVSTHMgZm9yIHRoZSByZW1vdGUgd2lsbCBiZSBsaXN0ZWQuCiAKICdzZXQtdXJsJzo6CiAKQEAgLTE0NywxMSArMTQ3LDExIEBACiByZWdleCA8b2xkdXJsPiAoZmlyc3QgVVJMIGlmIG5vIDxvbGR1cmw+IGlzIGdpdmVuKSB0byA8bmV3dXJsPi4gSWYKIDxvbGR1cmw+IGRvZXNuJ3QgbWF0Y2ggYW55IFVSTCwgYW4gZXJyb3Igb2NjdXJzIGFuZCBub3RoaW5nIGlzIGNoYW5nZWQuCiArCi1XaXRoICctLXB1c2gnLCBwdXNoIFVSTHMgYXJlIG1hbmlwdWxhdGVkIGluc3RlYWQgb2YgZmV0Y2ggVVJMcy4KK1dpdGggYC0tcHVzaGAsIHB1c2ggVVJMcyBhcmUgbWFuaXB1bGF0ZWQgaW5zdGVhZCBvZiBmZXRjaCBVUkxzLgogKwotV2l0aCAnLS1hZGQnLCBpbnN0ZWFkIG9mIGNoYW5naW5nIGV4aXN0aW5nIFVSTHMsIG5ldyBVUkwgaXMgYWRkZWQuCitXaXRoIGAtLWFkZGAsIGluc3RlYWQgb2YgY2hhbmdpbmcgZXhpc3RpbmcgVVJMcywgbmV3IFVSTCBpcyBhZGRlZC4KICsKLVdpdGggJy0tZGVsZXRlJywgaW5zdGVhZCBvZiBjaGFuZ2luZyBleGlzdGluZyBVUkxzLCBhbGwgVVJMcyBtYXRjaGluZworV2l0aCBgLS1kZWxldGVgLCBpbnN0ZWFkIG9mIGNoYW5naW5nIGV4aXN0aW5nIFVSTHMsIGFsbCBVUkxzIG1hdGNoaW5nCiByZWdleCA8dXJsPiBhcmUgZGVsZXRlZCBmb3IgcmVtb3RlIDxuYW1lPi4gIFRyeWluZyB0byBkZWxldGUgYWxsCiBub24tcHVzaCBVUkxzIGlzIGFuIGVycm9yLgogKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQKaW5kZXggYjljMDJjZS4uMjZhZmU2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0CkBAIC0zMyw3ICszMyw3IEBACiAJcGFjayBldmVyeXRoaW5nIHJlZmVyZW5jZWQgaW50byBhIHNpbmdsZSBwYWNrLgogCUVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gcGFja2luZyBhIHJlcG9zaXRvcnkgdGhhdCBpcyB1c2VkCiAJZm9yIHByaXZhdGUgZGV2ZWxvcG1lbnQuIFVzZQotCXdpdGggJy1kJy4gIFRoaXMgd2lsbCBjbGVhbiB1cCB0aGUgb2JqZWN0cyB0aGF0IGBnaXQgcHJ1bmVgCisJd2l0aCBgLWRgLiAgVGhpcyB3aWxsIGNsZWFuIHVwIHRoZSBvYmplY3RzIHRoYXQgYGdpdCBwcnVuZWAKIAlsZWF2ZXMgYmVoaW5kLCBidXQgYGdpdCBmc2NrIC0tZnVsbCAtLWRhbmdsaW5nYCBzaG93cyBhcwogCWRhbmdsaW5nLgogKwpAQCAtNDIsNyArNDIsNyBAQAogb3RoZXIgb2JqZWN0cyBpbiB0aGF0IHBhY2sgdGhleSBhbHJlYWR5IGhhdmUgbG9jYWxseS4KIAogLUE6OgotCVNhbWUgYXMgYC1hYCwgdW5sZXNzICctZCcgaXMgdXNlZC4gIFRoZW4gYW55IHVucmVhY2hhYmxlCisJU2FtZSBhcyBgLWFgLCB1bmxlc3MgYC1kYCBpcyB1c2VkLiAgVGhlbiBhbnkgdW5yZWFjaGFibGUKIAlvYmplY3RzIGluIGEgcHJldmlvdXMgcGFjayBiZWNvbWUgbG9vc2UsIHVucGFja2VkIG9iamVjdHMsCiAJaW5zdGVhZCBvZiBiZWluZyBsZWZ0IGluIHRoZSBvbGQgcGFjay4gIFVucmVhY2hhYmxlIG9iamVjdHMKIAlhcmUgbmV2ZXIgaW50ZW50aW9uYWxseSBhZGRlZCB0byBhIHBhY2ssIGV2ZW4gd2hlbiByZXBhY2tpbmcuCkBAIC0xMDAsOCArMTAwLDEwIEBACiAJb3V0IG9mIG1lbW9yeSB3aXRoIGEgbGFyZ2Ugd2luZG93LCBidXQgc3RpbGwgYmUgYWJsZSB0byB0YWtlCiAJYWR2YW50YWdlIG9mIHRoZSBsYXJnZSB3aW5kb3cgZm9yIHRoZSBzbWFsbGVyIG9iamVjdHMuICBUaGUKIAlzaXplIGNhbiBiZSBzdWZmaXhlZCB3aXRoICJrIiwgIm0iLCBvciAiZyIuCi0JYC0td2luZG93LW1lbW9yeT0wYCBtYWtlcyBtZW1vcnkgdXNhZ2UgdW5saW1pdGVkLCB3aGljaCBpcyB0aGUKLQlkZWZhdWx0LgorCWAtLXdpbmRvdy1tZW1vcnk9MGAgbWFrZXMgbWVtb3J5IHVzYWdlIHVubGltaXRlZC4gIFRoZSBkZWZhdWx0CisJaXMgdGFrZW4gZnJvbSB0aGUgYHBhY2sud2luZG93TWVtb3J5YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCU5vdGUgdGhhdCB0aGUgYWN0dWFsIG1lbW9yeSB1c2FnZSB3aWxsIGJlIHRoZSBsaW1pdCBtdWx0aXBsaWVkCisJYnkgdGhlIG51bWJlciBvZiB0aHJlYWRzIHVzZWQgYnkgbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLgogCiAtLW1heC1wYWNrLXNpemU9PG4+OjoKIAlNYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlLiBUaGUgc2l6ZSBjYW4gYmUgc3VmZml4ZWQgd2l0aApAQCAtMTI4LDYgKzEzMCwxOSBAQAogCXdpdGggYC1iYCBvciBgcmVwYWNrLndyaXRlQml0bWFwc2AsIGFzIGl0IGVuc3VyZXMgdGhhdCB0aGUKIAliaXRtYXBwZWQgcGFja2ZpbGUgaGFzIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cy4KIAorLS11bnBhY2stdW5yZWFjaGFibGU9PHdoZW4+OjoKKwlXaGVuIGxvb3NlbmluZyB1bnJlYWNoYWJsZSBvYmplY3RzLCBkbyBub3QgYm90aGVyIGxvb3NlbmluZyBhbnkKKwlvYmplY3RzIG9sZGVyIHRoYW4gYDx3aGVuPmAuIFRoaXMgY2FuIGJlIHVzZWQgdG8gb3B0aW1pemUgb3V0CisJdGhlIHdyaXRlIG9mIGFueSBvYmplY3RzIHRoYXQgd291bGQgYmUgaW1tZWRpYXRlbHkgcHJ1bmVkIGJ5CisJYSBmb2xsb3ctdXAgYGdpdCBwcnVuZWAuCisKKy1rOjoKKy0ta2VlcC11bnJlYWNoYWJsZTo6CisJV2hlbiB1c2VkIHdpdGggYC1hZGAsIGFueSB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gZXhpc3RpbmcKKwlwYWNrcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHBhY2tmaWxlIGluc3RlYWQgb2YKKwliZWluZyByZW1vdmVkLiBJbiBhZGRpdGlvbiwgYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHMgd2lsbAorCWJlIHBhY2tlZCAoYW5kIHRoZWlyIGxvb3NlIGNvdW50ZXJwYXJ0cyByZW1vdmVkKS4KKwogQ29uZmlndXJhdGlvbgogLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBsYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGxhY2UudHh0CmluZGV4IDhmZmY1OTguLmU1YzU3YWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcGxhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGxhY2UudHh0CkBAIC01MSw3ICs1MSw3IEBACiAKIHNob3dzIGluZm9ybWF0aW9uIGFib3V0IGNvbW1pdCAnYmFyJy4KIAotVGhlICdHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvCitUaGUgYEdJVF9OT19SRVBMQUNFX09CSkVDVFNgIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8KIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgLS1uby1yZXBsYWNlLW9iamVjdHNgIG9wdGlvbi4KIAogT1BUSU9OUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKaW5kZXggNTczNjE2YS4uODM3NzA3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXZlcnQudHh0CkBAIC0yNCw3ICsyNCw3IEBACiBOb3RlOiAnZ2l0IHJldmVydCcgaXMgdXNlZCB0byByZWNvcmQgc29tZSBuZXcgY29tbWl0cyB0byByZXZlcnNlIHRoZQogZWZmZWN0IG9mIHNvbWUgZWFybGllciBjb21taXRzIChvZnRlbiBvbmx5IGEgZmF1bHR5IG9uZSkuICBJZiB5b3Ugd2FudCB0bwogdGhyb3cgYXdheSBhbGwgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LCB5b3UKLXNob3VsZCBzZWUgbGlua2dpdDpnaXQtcmVzZXRbMV0sIHBhcnRpY3VsYXJseSB0aGUgJy0taGFyZCcgb3B0aW9uLiAgSWYKK3Nob3VsZCBzZWUgbGlua2dpdDpnaXQtcmVzZXRbMV0sIHBhcnRpY3VsYXJseSB0aGUgYC0taGFyZGAgb3B0aW9uLiAgSWYKIHlvdSB3YW50IHRvIGV4dHJhY3Qgc3BlY2lmaWMgZmlsZXMgYXMgdGhleSB3ZXJlIGluIGFub3RoZXIgY29tbWl0LCB5b3UKIHNob3VsZCBzZWUgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0sIHNwZWNpZmljYWxseSB0aGUgYGdpdCBjaGVja291dAogPGNvbW1pdD4gLS0gPGZpbGVuYW1lPmAgc3ludGF4LiAgVGFrZSBjYXJlIHdpdGggdGhlc2UgYWx0ZXJuYXRpdmVzIGFzCkBAIC0zNyw3ICszNyw3IEBACiAJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgY29tbWl0IG5hbWVzLCBzZWUKIAlsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KIAlTZXRzIG9mIGNvbW1pdHMgY2FuIGFsc28gYmUgZ2l2ZW4gYnV0IG5vIHRyYXZlcnNhbCBpcyBkb25lIGJ5Ci0JZGVmYXVsdCwgc2VlIGxpbmtnaXQ6Z2l0LXJldi1saXN0WzFdIGFuZCBpdHMgJy0tbm8td2FsaycKKwlkZWZhdWx0LCBzZWUgbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0gYW5kIGl0cyBgLS1uby13YWxrYAogCW9wdGlvbi4KIAogLWU6OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dAppbmRleCBhODhkMTg2Li42NDJkMGVmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dApAQCAtNDcsMTggKzQ3LDE4IEBACiAKIC0tYW5ub3RhdGU6OgogCVJldmlldyBhbmQgZWRpdCBlYWNoIHBhdGNoIHlvdSdyZSBhYm91dCB0byBzZW5kLiBEZWZhdWx0IGlzIHRoZSB2YWx1ZQotCW9mICdzZW5kZW1haWwuYW5ub3RhdGUnLiBTZWUgdGhlIENPTkZJR1VSQVRJT04gc2VjdGlvbiBmb3IKLQknc2VuZGVtYWlsLm11bHRpRWRpdCcuCisJb2YgYHNlbmRlbWFpbC5hbm5vdGF0ZWAuIFNlZSB0aGUgQ09ORklHVVJBVElPTiBzZWN0aW9uIGZvcgorCWBzZW5kZW1haWwubXVsdGlFZGl0YC4KIAogLS1iY2M9PGFkZHJlc3M+LC4uLjo6CiAJU3BlY2lmeSBhICJCY2M6IiB2YWx1ZSBmb3IgZWFjaCBlbWFpbC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YKLQknc2VuZGVtYWlsLmJjYycuCisJYHNlbmRlbWFpbC5iY2NgLgogKwogVGhpcyBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KIAogLS1jYz08YWRkcmVzcz4sLi4uOjoKIAlTcGVjaWZ5IGEgc3RhcnRpbmcgIkNjOiIgdmFsdWUgZm9yIGVhY2ggZW1haWwuCi0JRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5jYycuCisJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5jY2AuCiArCiBUaGlzIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgogCkBAIC02Niw3ICs2Niw3IEBACiAJSW52b2tlIGEgdGV4dCBlZGl0b3IgKHNlZSBHSVRfRURJVE9SIGluIGxpbmtnaXQ6Z2l0LXZhclsxXSkKIAl0byBlZGl0IGFuIGludHJvZHVjdG9yeSBtZXNzYWdlIGZvciB0aGUgcGF0Y2ggc2VyaWVzLgogKwotV2hlbiAnLS1jb21wb3NlJyBpcyB1c2VkLCBnaXQgc2VuZC1lbWFpbCB3aWxsIHVzZSB0aGUgRnJvbSwgU3ViamVjdCwgYW5kCitXaGVuIGAtLWNvbXBvc2VgIGlzIHVzZWQsIGdpdCBzZW5kLWVtYWlsIHdpbGwgdXNlIHRoZSBGcm9tLCBTdWJqZWN0LCBhbmQKIEluLVJlcGx5LVRvIGhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSBtZXNzYWdlLiBJZiB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZQogKHdoYXQgeW91IHR5cGUgYWZ0ZXIgdGhlIGhlYWRlcnMgYW5kIGEgYmxhbmsgbGluZSkgb25seSBjb250YWlucyBibGFuawogKG9yIEdpdDogcHJlZml4ZWQpIGxpbmVzLCB0aGUgc3VtbWFyeSB3b24ndCBiZSBzZW50LCBidXQgRnJvbSwgU3ViamVjdCwKQEAgLTc0LDEyICs3NCwxMiBAQAogKwogTWlzc2luZyBGcm9tIG9yIEluLVJlcGx5LVRvIGhlYWRlcnMgd2lsbCBiZSBwcm9tcHRlZCBmb3IuCiArCi1TZWUgdGhlIENPTkZJR1VSQVRJT04gc2VjdGlvbiBmb3IgJ3NlbmRlbWFpbC5tdWx0aUVkaXQnLgorU2VlIHRoZSBDT05GSUdVUkFUSU9OIHNlY3Rpb24gZm9yIGBzZW5kZW1haWwubXVsdGlFZGl0YC4KIAogLS1mcm9tPTxhZGRyZXNzPjo6CiAJU3BlY2lmeSB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbHMuICBJZiBub3Qgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsCi0JdGhlIHZhbHVlIG9mIHRoZSAnc2VuZGVtYWlsLmZyb20nIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHVzZWQuICBJZgotCW5laXRoZXIgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24gbm9yICdzZW5kZW1haWwuZnJvbScgYXJlIHNldCwgdGhlbiB0aGUKKwl0aGUgdmFsdWUgb2YgdGhlIGBzZW5kZW1haWwuZnJvbWAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdXNlZC4gIElmCisJbmVpdGhlciB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiBub3IgYHNlbmRlbWFpbC5mcm9tYCBhcmUgc2V0LCB0aGVuIHRoZQogCXVzZXIgd2lsbCBiZSBwcm9tcHRlZCBmb3IgdGhlIHZhbHVlLiAgVGhlIGRlZmF1bHQgZm9yIHRoZSBwcm9tcHQgd2lsbCBiZQogCXRoZSB2YWx1ZSBvZiBHSVRfQVVUSE9SX0lERU5ULCBvciBHSVRfQ09NTUlUVEVSX0lERU5UIGlmIHRoYXQgaXMgbm90CiAJc2V0LCBhcyByZXR1cm5lZCBieSAiZ2l0IHZhciAtbCIuCkBAIC0xMTQsNyArMTE0LDcgQEAKIC0tdG89PGFkZHJlc3M+LC4uLjo6CiAJU3BlY2lmeSB0aGUgcHJpbWFyeSByZWNpcGllbnQgb2YgdGhlIGVtYWlscyBnZW5lcmF0ZWQuIEdlbmVyYWxseSwgdGhpcwogCXdpbGwgYmUgdGhlIHVwc3RyZWFtIG1haW50YWluZXIgb2YgdGhlIHByb2plY3QgaW52b2x2ZWQuIERlZmF1bHQgaXMgdGhlCi0JdmFsdWUgb2YgdGhlICdzZW5kZW1haWwudG8nIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsCisJdmFsdWUgb2YgdGhlIGBzZW5kZW1haWwudG9gIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsCiAJYW5kIC0tdG8tY21kIGlzIG5vdCBzcGVjaWZpZWQsIHRoaXMgd2lsbCBiZSBwcm9tcHRlZCBmb3IuCiArCiBUaGlzIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgpAQCAtMTM4LDcgKzEzOCw3IEBACiAJY2FuIGJlIHVzZWZ1bCB3aGVuIHRoZSByZXBvc2l0b3J5IGNvbnRhaW5zIGZpbGVzIHRoYXQgY29udGFpbiBjYXJyaWFnZQogCXJldHVybnMsIGJ1dCBtYWtlcyB0aGUgcmF3IHBhdGNoIGVtYWlsIGZpbGUgKGFzIHNhdmVkIGZyb20gYSBNVUEpIG11Y2gKIAloYXJkZXIgdG8gaW5zcGVjdCBtYW51YWxseS4gIGJhc2U2NCBpcyBldmVuIG1vcmUgZm9vbCBwcm9vZiwgYnV0IGFsc28KLQlldmVuIG1vcmUgb3BhcXVlLiAgRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgdGhlICdzZW5kZW1haWwudHJhbnNmZXJFbmNvZGluZycKKwlldmVuIG1vcmUgb3BhcXVlLiAgRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgdGhlIGBzZW5kZW1haWwudHJhbnNmZXJFbmNvZGluZ2AKIAljb25maWd1cmF0aW9uIHZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBnaXQgd2lsbCB1c2UgOGJpdCBhbmQgbm90CiAJYWRkIGEgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyBoZWFkZXIuCiAKQEAgLTE1NywyMCArMTU3LDIwIEBACiAJc3Vic2NyaWJlZCB0byBhIGxpc3QuIEluIG9yZGVyIHRvIHVzZSB0aGUgJ0Zyb20nIGFkZHJlc3MsIHNldCB0aGUKIAl2YWx1ZSB0byAiYXV0byIuIElmIHlvdSB1c2UgdGhlIHNlbmRtYWlsIGJpbmFyeSwgeW91IG11c3QgaGF2ZQogCXN1aXRhYmxlIHByaXZpbGVnZXMgZm9yIHRoZSAtZiBwYXJhbWV0ZXIuICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUKLQknc2VuZGVtYWlsLmVudmVsb3BlU2VuZGVyJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlOyBpZiB0aGF0IGlzCisJYHNlbmRlbWFpbC5lbnZlbG9wZVNlbmRlcmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZTsgaWYgdGhhdCBpcwogCXVuc3BlY2lmaWVkLCBjaG9vc2luZyB0aGUgZW52ZWxvcGUgc2VuZGVyIGlzIGxlZnQgdG8geW91ciBNVEEuCiAKIC0tc210cC1lbmNyeXB0aW9uPTxlbmNyeXB0aW9uPjo6CiAJU3BlY2lmeSB0aGUgZW5jcnlwdGlvbiB0byB1c2UsIGVpdGhlciAnc3NsJyBvciAndGxzJy4gIEFueSBvdGhlcgogCXZhbHVlIHJldmVydHMgdG8gcGxhaW4gU01UUC4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mCi0JJ3NlbmRlbWFpbC5zbXRwRW5jcnlwdGlvbicuCisJYHNlbmRlbWFpbC5zbXRwRW5jcnlwdGlvbmAuCiAKIC0tc210cC1kb21haW49PEZRRE4+OjoKIAlTcGVjaWZpZXMgdGhlIEZ1bGx5IFF1YWxpZmllZCBEb21haW4gTmFtZSAoRlFETikgdXNlZCBpbiB0aGUKIAlIRUxPL0VITE8gY29tbWFuZCB0byB0aGUgU01UUCBzZXJ2ZXIuICBTb21lIHNlcnZlcnMgcmVxdWlyZSB0aGUKIAlGUUROIHRvIG1hdGNoIHlvdXIgSVAgYWRkcmVzcy4gIElmIG5vdCBzZXQsIGdpdCBzZW5kLWVtYWlsIGF0dGVtcHRzCiAJdG8gZGV0ZXJtaW5lIHlvdXIgRlFETiBhdXRvbWF0aWNhbGx5LiAgRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YKLQknc2VuZGVtYWlsLnNtdHBEb21haW4nLgorCWBzZW5kZW1haWwuc210cERvbWFpbmAuCiAKIC0tc210cC1hdXRoPTxtZWNoYW5pc21zPjo6CiAJV2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIFNNVFAtQVVUSCBtZWNoYW5pc21zLiBUaGlzIHNldHRpbmcKQEAgLTE4MiwxOSArMTgyLDE5IEBACiArCiBJZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHNwZWNpZmllZCBtZWNoYW5pc21zIG1hdGNoZXMgdGhlIG9uZXMgYWR2ZXJ0aXNlZCBieSB0aGUKIFNNVFAgc2VydmVyIGFuZCBpZiBpdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIHV0aWxpemVkIFNBU0wgbGlicmFyeSwgdGhlIG1lY2hhbmlzbQotaXMgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uIElmIG5laXRoZXIgJ3NlbmRlbWFpbC5zbXRwQXV0aCcgbm9yICctLXNtdHAtYXV0aCcKK2lzIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLiBJZiBuZWl0aGVyICdzZW5kZW1haWwuc210cEF1dGgnIG5vciBgLS1zbXRwLWF1dGhgCiBpcyBzcGVjaWZpZWQsIGFsbCBtZWNoYW5pc21zIHN1cHBvcnRlZCBieSB0aGUgU0FTTCBsaWJyYXJ5IGNhbiBiZSB1c2VkLgogCiAtLXNtdHAtcGFzc1s9PHBhc3N3b3JkPl06OgogCVBhc3N3b3JkIGZvciBTTVRQLUFVVEguIFRoZSBhcmd1bWVudCBpcyBvcHRpb25hbDogSWYgbm8KIAlhcmd1bWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGVtcHR5IHN0cmluZyBpcyB1c2VkIGFzCi0JdGhlIHBhc3N3b3JkLiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnNtdHBQYXNzJywKLQlob3dldmVyICctLXNtdHAtcGFzcycgYWx3YXlzIG92ZXJyaWRlcyB0aGlzIHZhbHVlLgorCXRoZSBwYXNzd29yZC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5zbXRwUGFzc2AsCisJaG93ZXZlciBgLS1zbXRwLXBhc3NgIGFsd2F5cyBvdmVycmlkZXMgdGhpcyB2YWx1ZS4KICsKIEZ1cnRoZXJtb3JlLCBwYXNzd29yZHMgbmVlZCBub3QgYmUgc3BlY2lmaWVkIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMKIG9yIG9uIHRoZSBjb21tYW5kIGxpbmUuIElmIGEgdXNlcm5hbWUgaGFzIGJlZW4gc3BlY2lmaWVkICh3aXRoCi0nLS1zbXRwLXVzZXInIG9yIGEgJ3NlbmRlbWFpbC5zbXRwVXNlcicpLCBidXQgbm8gcGFzc3dvcmQgaGFzIGJlZW4KLXNwZWNpZmllZCAod2l0aCAnLS1zbXRwLXBhc3MnIG9yICdzZW5kZW1haWwuc210cFBhc3MnKSwgdGhlbgorYC0tc210cC11c2VyYCBvciBhIGBzZW5kZW1haWwuc210cFVzZXJgKSwgYnV0IG5vIHBhc3N3b3JkIGhhcyBiZWVuCitzcGVjaWZpZWQgKHdpdGggYC0tc210cC1wYXNzYCBvciBgc2VuZGVtYWlsLnNtdHBQYXNzYCksIHRoZW4KIGEgcGFzc3dvcmQgaXMgb2J0YWluZWQgdXNpbmcgJ2dpdC1jcmVkZW50aWFsJy4KIAogLS1zbXRwLXNlcnZlcj08aG9zdD46OgpAQCAtMjAyLDcgKzIwMiw3IEBACiAJYHNtdHAuZXhhbXBsZS5jb21gIG9yIGEgcmF3IElQIGFkZHJlc3MpLiAgQWx0ZXJuYXRpdmVseSBpdCBjYW4KIAlzcGVjaWZ5IGEgZnVsbCBwYXRobmFtZSBvZiBhIHNlbmRtYWlsLWxpa2UgcHJvZ3JhbSBpbnN0ZWFkOwogCXRoZSBwcm9ncmFtIG11c3Qgc3VwcG9ydCB0aGUgYC1pYCBvcHRpb24uICBEZWZhdWx0IHZhbHVlIGNhbgotCWJlIHNwZWNpZmllZCBieSB0aGUgJ3NlbmRlbWFpbC5zbXRwU2VydmVyJyBjb25maWd1cmF0aW9uCisJYmUgc3BlY2lmaWVkIGJ5IHRoZSBgc2VuZGVtYWlsLnNtdHBTZXJ2ZXJgIGNvbmZpZ3VyYXRpb24KIAlvcHRpb247IHRoZSBidWlsdC1pbiBkZWZhdWx0IGlzIGAvdXNyL3NiaW4vc2VuZG1haWxgIG9yCiAJYC91c3IvbGliL3NlbmRtYWlsYCBpZiBzdWNoIHByb2dyYW0gaXMgYXZhaWxhYmxlLCBvcgogCWBsb2NhbGhvc3RgIG90aGVyd2lzZS4KQEAgLTIxMywxMSArMjEzLDExIEBACiAJc3VibWlzc2lvbiBwb3J0IDU4Nywgb3IgdGhlIGNvbW1vbiBTU0wgc210cCBwb3J0IDQ2NSk7CiAJc3ltYm9saWMgcG9ydCBuYW1lcyAoZS5nLiAic3VibWlzc2lvbiIgaW5zdGVhZCBvZiA1ODcpCiAJYXJlIGFsc28gYWNjZXB0ZWQuIFRoZSBwb3J0IGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZQotCSdzZW5kZW1haWwuc210cFNlcnZlclBvcnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisJYHNlbmRlbWFpbC5zbXRwU2VydmVyUG9ydGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KIAogLS1zbXRwLXNlcnZlci1vcHRpb249PG9wdGlvbj46OgogCUlmIHNldCwgc3BlY2lmaWVzIHRoZSBvdXRnb2luZyBTTVRQIHNlcnZlciBvcHRpb24gdG8gdXNlLgotCURlZmF1bHQgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBieSB0aGUgJ3NlbmRlbWFpbC5zbXRwU2VydmVyT3B0aW9uJworCURlZmF1bHQgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBieSB0aGUgYHNlbmRlbWFpbC5zbXRwU2VydmVyT3B0aW9uYAogCWNvbmZpZ3VyYXRpb24gb3B0aW9uLgogKwogVGhlIC0tc210cC1zZXJ2ZXItb3B0aW9uIG9wdGlvbiBtdXN0IGJlIHJlcGVhdGVkIGZvciBlYWNoIG9wdGlvbiB5b3Ugd2FudApAQCAtMjM0LDEzICsyMzQsMTMgQEAKIAljZXJ0aWZpY2F0ZXMgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyOiBzZWUgdmVyaWZ5KDEpIC1DQWZpbGUgYW5kCiAJLUNBcGF0aCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSkuIFNldCBpdCB0byBhbiBlbXB0eSBzdHJpbmcKIAl0byBkaXNhYmxlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbi4gRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIHRoZQotCSdzZW5kZW1haWwuc210cHNzbGNlcnRwYXRoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBpZiBzZXQsIG9yIHRoZQorCWBzZW5kZW1haWwuc210cHNzbGNlcnRwYXRoYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBpZiBzZXQsIG9yIHRoZQogCWJhY2tpbmcgU1NMIGxpYnJhcnkncyBjb21waWxlZC1pbiBkZWZhdWx0IG90aGVyd2lzZSAod2hpY2ggc2hvdWxkCiAJYmUgdGhlIGJlc3QgY2hvaWNlIG9uIG1vc3QgcGxhdGZvcm1zKS4KIAogLS1zbXRwLXVzZXI9PHVzZXI+OjoKLQlVc2VybmFtZSBmb3IgU01UUC1BVVRILiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnNtdHBVc2VyJzsKLQlpZiBhIHVzZXJuYW1lIGlzIG5vdCBzcGVjaWZpZWQgKHdpdGggJy0tc210cC11c2VyJyBvciAnc2VuZGVtYWlsLnNtdHBVc2VyJyksCisJVXNlcm5hbWUgZm9yIFNNVFAtQVVUSC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5zbXRwVXNlcmA7CisJaWYgYSB1c2VybmFtZSBpcyBub3Qgc3BlY2lmaWVkICh3aXRoIGAtLXNtdHAtdXNlcmAgb3IgYHNlbmRlbWFpbC5zbXRwVXNlcmApLAogCXRoZW4gYXV0aGVudGljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4KIAogLS1zbXRwLWRlYnVnPTB8MTo6CkBAIC0yNjEsMjUgKzI2MSwyNSBAQAogCVNwZWNpZnkgYSBjb21tYW5kIHRvIGV4ZWN1dGUgb25jZSBwZXIgcGF0Y2ggZmlsZSB3aGljaAogCXNob3VsZCBnZW5lcmF0ZSBwYXRjaCBmaWxlIHNwZWNpZmljICJDYzoiIGVudHJpZXMuCiAJT3V0cHV0IG9mIHRoaXMgY29tbWFuZCBtdXN0IGJlIHNpbmdsZSBlbWFpbCBhZGRyZXNzIHBlciBsaW5lLgotCURlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuY2NDbWQnIGNvbmZpZ3VyYXRpb24gdmFsdWUuCisJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5jY0NtZGAgY29uZmlndXJhdGlvbiB2YWx1ZS4KIAogLS1bbm8tXWNoYWluLXJlcGx5LXRvOjoKIAlJZiB0aGlzIGlzIHNldCwgZWFjaCBlbWFpbCB3aWxsIGJlIHNlbnQgYXMgYSByZXBseSB0byB0aGUgcHJldmlvdXMKIAllbWFpbCBzZW50LiAgSWYgZGlzYWJsZWQgd2l0aCAiLS1uby1jaGFpbi1yZXBseS10byIsIGFsbCBlbWFpbHMgYWZ0ZXIKIAl0aGUgZmlyc3Qgd2lsbCBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGZpcnN0IGVtYWlsIHNlbnQuICBXaGVuIHVzaW5nCiAJdGhpcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgZmlyc3QgZmlsZSBnaXZlbiBiZSBhbiBvdmVydmlldyBvZiB0aGUKLQllbnRpcmUgcGF0Y2ggc2VyaWVzLiBEaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgdGhlICdzZW5kZW1haWwuY2hhaW5SZXBseVRvJworCWVudGlyZSBwYXRjaCBzZXJpZXMuIERpc2FibGVkIGJ5IGRlZmF1bHQsIGJ1dCB0aGUgYHNlbmRlbWFpbC5jaGFpblJlcGx5VG9gCiAJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBlbmFibGUgaXQuCiAKIC0taWRlbnRpdHk9PGlkZW50aXR5Pjo6CiAJQSBjb25maWd1cmF0aW9uIGlkZW50aXR5LiBXaGVuIGdpdmVuLCBjYXVzZXMgdmFsdWVzIGluIHRoZQogCSdzZW5kZW1haWwuPGlkZW50aXR5Picgc3Vic2VjdGlvbiB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlcgogCXZhbHVlcyBpbiB0aGUgJ3NlbmRlbWFpbCcgc2VjdGlvbi4gVGhlIGRlZmF1bHQgaWRlbnRpdHkgaXMKLQl0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5pZGVudGl0eScuCisJdGhlIHZhbHVlIG9mIGBzZW5kZW1haWwuaWRlbnRpdHlgLgogCiAtLVtuby1dc2lnbmVkLW9mZi1ieS1jYzo6CiAJSWYgdGhpcyBpcyBzZXQsIGFkZCBlbWFpbHMgZm91bmQgaW4gU2lnbmVkLW9mZi1ieTogb3IgQ2M6IGxpbmVzIHRvIHRoZQotCWNjIGxpc3QuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuc2lnbmVkb2ZmYnljYycgY29uZmlndXJhdGlvbgorCWNjIGxpc3QuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIGBzZW5kZW1haWwuc2lnbmVkb2ZmYnljY2AgY29uZmlndXJhdGlvbgogCXZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tc2lnbmVkLW9mZi1ieS1jYy4KIAogLS1bbm8tXWNjLWNvdmVyOjoKQEAgLTMxMiwxMyArMzEyLDEzIEBACiAtICdhbGwnIHdpbGwgc3VwcHJlc3MgYWxsIGF1dG8gY2MgdmFsdWVzLgogLS0KICsKLURlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuc3VwcHJlc3NjYycgY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYKK0RlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIGBzZW5kZW1haWwuc3VwcHJlc3NjY2AgY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYKIHRoYXQgaXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gJ3NlbGYnIGlmIC0tc3VwcHJlc3MtZnJvbSBpcwogc3BlY2lmaWVkLCBhcyB3ZWxsIGFzICdib2R5JyBpZiAtLW5vLXNpZ25lZC1vZmYtY2MgaXMgc3BlY2lmaWVkLgogCiAtLVtuby1dc3VwcHJlc3MtZnJvbTo6CiAJSWYgdGhpcyBpcyBzZXQsIGRvIG5vdCBhZGQgdGhlIEZyb206IGFkZHJlc3MgdG8gdGhlIGNjOiBsaXN0LgotCURlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuc3VwcHJlc3NGcm9tJyBjb25maWd1cmF0aW9uCisJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5zdXBwcmVzc0Zyb21gIGNvbmZpZ3VyYXRpb24KIAl2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAtLW5vLXN1cHByZXNzLWZyb20uCiAKIC0tW25vLV10aHJlYWQ6OgpAQCAtMzMwLDcgKzMzMCw3IEBACiArCiBJZiBkaXNhYmxlZCB3aXRoICItLW5vLXRocmVhZCIsIHRob3NlIGhlYWRlcnMgd2lsbCBub3QgYmUgYWRkZWQKICh1bmxlc3Mgc3BlY2lmaWVkIHdpdGggLS1pbi1yZXBseS10bykuICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUKLSdzZW5kZW1haWwudGhyZWFkJyBjb25maWd1cmF0aW9uIHZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLAorYHNlbmRlbWFpbC50aHJlYWRgIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsCiBkZWZhdWx0IHRvIC0tdGhyZWFkLgogKwogSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8gZW5zdXJlIHRoYXQgbm8gSW4tUmVwbHktVG8gaGVhZGVyIGFscmVhZHkKQEAgLTM1NSw3ICszNTUsNyBAQAogLSAnYXV0bycgaXMgZXF1aXZhbGVudCB0byAnY2MnICsgJ2NvbXBvc2UnCiAtLQogKwotRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5jb25maXJtJyBjb25maWd1cmF0aW9uIHZhbHVlOyBpZiB0aGF0CitEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiBgc2VuZGVtYWlsLmNvbmZpcm1gIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQKIGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvICdhdXRvJyB1bmxlc3MgYW55IG9mIHRoZSBzdXBwcmVzcyBvcHRpb25zCiBoYXZlIGJlZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGRlZmF1bHQgdG8gJ2NvbXBvc2UnLgogCkBAIC0zNjQsOCArMzY0LDggQEAKIAogLS1bbm8tXWZvcm1hdC1wYXRjaDo6CiAJV2hlbiBhbiBhcmd1bWVudCBtYXkgYmUgdW5kZXJzdG9vZCBlaXRoZXIgYXMgYSByZWZlcmVuY2Ugb3IgYXMgYSBmaWxlIG5hbWUsCi0JY2hvb3NlIHRvIHVuZGVyc3RhbmQgaXQgYXMgYSBmb3JtYXQtcGF0Y2ggYXJndW1lbnQgKCctLWZvcm1hdC1wYXRjaCcpCi0Jb3IgYXMgYSBmaWxlIG5hbWUgKCctLW5vLWZvcm1hdC1wYXRjaCcpLiBCeSBkZWZhdWx0LCB3aGVuIHN1Y2ggYSBjb25mbGljdAorCWNob29zZSB0byB1bmRlcnN0YW5kIGl0IGFzIGEgZm9ybWF0LXBhdGNoIGFyZ3VtZW50IChgLS1mb3JtYXQtcGF0Y2hgKQorCW9yIGFzIGEgZmlsZSBuYW1lIChgLS1uby1mb3JtYXQtcGF0Y2hgKS4gQnkgZGVmYXVsdCwgd2hlbiBzdWNoIGEgY29uZmxpY3QKIAlvY2N1cnMsIGdpdCBzZW5kLWVtYWlsIHdpbGwgZmFpbC4KIAogLS1xdWlldDo6CkBAIC0zODEsOCArMzgxLDggQEAKIAkJCWlzIGR1ZSB0byBTTVRQIGxpbWl0cyBhcyBkZXNjcmliZWQgYnkgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjgyMS50eHQuCiAtLQogKwotRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC52YWxpZGF0ZSc7IGlmIHRoaXMgaXMgbm90IHNldCwKLWRlZmF1bHQgdG8gJy0tdmFsaWRhdGUnLgorRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC52YWxpZGF0ZWA7IGlmIHRoaXMgaXMgbm90IHNldCwKK2RlZmF1bHQgdG8gYC0tdmFsaWRhdGVgLgogCiAtLWZvcmNlOjoKIAlTZW5kIGVtYWlscyBldmVuIGlmIHNhZmV0eSBjaGVja3Mgd291bGQgcHJldmVudCBpdC4KQEAgLTQwMyw3ICs0MDMsNyBAQAogCiBzZW5kZW1haWwuYWxpYXNlc0ZpbGU6OgogCVRvIGF2b2lkIHR5cGluZyBsb25nIGVtYWlsIGFkZHJlc3NlcywgcG9pbnQgdGhpcyB0byBvbmUgb3IgbW9yZQotCWVtYWlsIGFsaWFzZXMgZmlsZXMuICBZb3UgbXVzdCBhbHNvIHN1cHBseSAnc2VuZGVtYWlsLmFsaWFzRmlsZVR5cGUnLgorCWVtYWlsIGFsaWFzZXMgZmlsZXMuICBZb3UgbXVzdCBhbHNvIHN1cHBseSBgc2VuZGVtYWlsLmFsaWFzRmlsZVR5cGVgLgogCiBzZW5kZW1haWwuYWxpYXNGaWxlVHlwZTo6CiAJRm9ybWF0IG9mIHRoZSBmaWxlKHMpIHNwZWNpZmllZCBpbiBzZW5kZW1haWwuYWxpYXNlc0ZpbGUuIE11c3QgYmUKQEAgLTQyOCwxMyArNDI4LDEzIEBACiAKIHNlbmRlbWFpbC5tdWx0aUVkaXQ6OgogCUlmIHRydWUgKGRlZmF1bHQpLCBhIHNpbmdsZSBlZGl0b3IgaW5zdGFuY2Ugd2lsbCBiZSBzcGF3bmVkIHRvIGVkaXQKLQlmaWxlcyB5b3UgaGF2ZSB0byBlZGl0IChwYXRjaGVzIHdoZW4gJy0tYW5ub3RhdGUnIGlzIHVzZWQsIGFuZCB0aGUKLQlzdW1tYXJ5IHdoZW4gJy0tY29tcG9zZScgaXMgdXNlZCkuIElmIGZhbHNlLCBmaWxlcyB3aWxsIGJlIGVkaXRlZCBvbmUKKwlmaWxlcyB5b3UgaGF2ZSB0byBlZGl0IChwYXRjaGVzIHdoZW4gYC0tYW5ub3RhdGVgIGlzIHVzZWQsIGFuZCB0aGUKKwlzdW1tYXJ5IHdoZW4gYC0tY29tcG9zZWAgaXMgdXNlZCkuIElmIGZhbHNlLCBmaWxlcyB3aWxsIGJlIGVkaXRlZCBvbmUKIAlhZnRlciB0aGUgb3RoZXIsIHNwYXduaW5nIGEgbmV3IGVkaXRvciBlYWNoIHRpbWUuCiAKIHNlbmRlbWFpbC5jb25maXJtOjoKIAlTZXRzIHRoZSBkZWZhdWx0IGZvciB3aGV0aGVyIHRvIGNvbmZpcm0gYmVmb3JlIHNlbmRpbmcuIE11c3QgYmUKLQlvbmUgb2YgJ2Fsd2F5cycsICduZXZlcicsICdjYycsICdjb21wb3NlJywgb3IgJ2F1dG8nLiBTZWUgJy0tY29uZmlybScKKwlvbmUgb2YgJ2Fsd2F5cycsICduZXZlcicsICdjYycsICdjb21wb3NlJywgb3IgJ2F1dG8nLiBTZWUgYC0tY29uZmlybWAKIAlpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgdmFsdWVzLgogCiBFWEFNUExFCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1wYWNrLnR4dAppbmRleCA2YWE5MWU4Li5hODMxZGQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlvcHRpb24sIHRoZW4gdGhlIHJlZnMgZnJvbSBzdGRpbiBhcmUgcHJvY2Vzc2VkIGFmdGVyIHRob3NlCiAJb24gdGhlIGNvbW1hbmQgbGluZS4KICsKLUlmICctLXN0YXRlbGVzcy1ycGMnIGlzIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIHRoaXMgb3B0aW9uIHRoZW4KK0lmIGAtLXN0YXRlbGVzcy1ycGNgIGlzIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIHRoaXMgb3B0aW9uIHRoZW4KIHRoZSBsaXN0IG9mIHJlZnMgbXVzdCBiZSBpbiBwYWNrZXQgZm9ybWF0IChwa3QtbGluZSkuIEVhY2ggcmVmIG11c3QKIGJlIGluIGEgc2VwYXJhdGUgcGFja2V0LCBhbmQgdGhlIGxpc3QgbXVzdCBlbmQgd2l0aCBhIGZsdXNoIHBhY2tldC4KIApAQCAtOTksMTEgKzk5LDExIEBACiBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBzcGVjaWZ5IHdoaWNoIHJlZnMgdG8gdXBkYXRlIG9uIHRoZQogcmVtb3RlIGVuZC4KIAotV2l0aCAnLS1hbGwnIGZsYWcsIGFsbCByZWZzIHRoYXQgZXhpc3QgbG9jYWxseSBhcmUgdHJhbnNmZXJyZWQgdG8KK1dpdGggYC0tYWxsYCBmbGFnLCBhbGwgcmVmcyB0aGF0IGV4aXN0IGxvY2FsbHkgYXJlIHRyYW5zZmVycmVkIHRvCiB0aGUgcmVtb3RlIHNpZGUuICBZb3UgY2Fubm90IHNwZWNpZnkgYW55ICc8cmVmPicgaWYgeW91IHVzZQogdGhpcyBmbGFnLgogCi1XaXRob3V0ICctLWFsbCcgYW5kIHdpdGhvdXQgYW55ICc8cmVmPicsIHRoZSBoZWFkcyB0aGF0IGV4aXN0CitXaXRob3V0IGAtLWFsbGAgYW5kIHdpdGhvdXQgYW55ICc8cmVmPicsIHRoZSBoZWFkcyB0aGF0IGV4aXN0CiBib3RoIG9uIHRoZSBsb2NhbCBzaWRlIGFuZCBvbiB0aGUgcmVtb3RlIHNpZGUgYXJlIHVwZGF0ZWQuCiAKIFdoZW4gb25lIG9yIG1vcmUgJzxyZWY+JyBhcmUgc3BlY2lmaWVkIGV4cGxpY2l0bHkgKHdoZXRoZXIgb24gdGhlCkBAIC0xMzQsMTMgKzEzNCwxMyBAQAogICAgICBleGlzdCBpbiB0aGUgc2V0IG9mIHJlbW90ZSByZWZzOyB0aGUgcmVmIG1hdGNoZWQgPHNyYz4KICAgICAgbG9jYWxseSBpcyB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbi4KIAotV2l0aG91dCAnLS1mb3JjZScsIHRoZSA8c3JjPiByZWYgaXMgc3RvcmVkIGF0IHRoZSByZW1vdGUgb25seSBpZgorV2l0aG91dCBgLS1mb3JjZWAsIHRoZSA8c3JjPiByZWYgaXMgc3RvcmVkIGF0IHRoZSByZW1vdGUgb25seSBpZgogPGRzdD4gZG9lcyBub3QgZXhpc3QsIG9yIDxkc3Q+IGlzIGEgcHJvcGVyIHN1YnNldCAoaS5lLiBhbgogYW5jZXN0b3IpIG9mIDxzcmM+LiAgVGhpcyBjaGVjaywga25vd24gYXMgImZhc3QtZm9yd2FyZCBjaGVjayIsCiBpcyBwZXJmb3JtZWQgaW4gb3JkZXIgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIHRoZQogcmVtb3RlIHJlZiBhbmQgbG9zZSBvdGhlciBwZW9wbGVzJyBjb21taXRzIGZyb20gdGhlcmUuCiAKLVdpdGggJy0tZm9yY2UnLCB0aGUgZmFzdC1mb3J3YXJkIGNoZWNrIGlzIGRpc2FibGVkIGZvciBhbGwgcmVmcy4KK1dpdGggYC0tZm9yY2VgLCB0aGUgZmFzdC1mb3J3YXJkIGNoZWNrIGlzIGRpc2FibGVkIGZvciBhbGwgcmVmcy4KIAogT3B0aW9uYWxseSwgYSA8cmVmPiBwYXJhbWV0ZXIgY2FuIGJlIHByZWZpeGVkIHdpdGggYSBwbHVzICcrJyBzaWduCiB0byBkaXNhYmxlIHRoZSBmYXN0LWZvcndhcmQgY2hlY2sgb25seSBvbiB0aGF0IHJlZi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dAppbmRleCA0ZjY3YzRjLi44NjMyNjEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaC1zZXR1cC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtc2V0dXAudHh0CkBAIC00MSw3ICs0MSw3IEBACiAJZGllIHdpdGggdGhlIHVzYWdlIG1lc3NhZ2UuCiAKIHNldF9yZWZsb2dfYWN0aW9uOjoKLQlTZXQgR0lUX1JFRkxPR19BQ1RJT04gZW52aXJvbm1lbnQgdG8gYSBnaXZlbiBzdHJpbmcgKHR5cGljYWxseQorCVNldCBgR0lUX1JFRkxPR19BQ1RJT05gIGVudmlyb25tZW50IHRvIGEgZ2l2ZW4gc3RyaW5nICh0eXBpY2FsbHkKIAl0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSkgdW5sZXNzIGl0IGlzIGFscmVhZHkgc2V0LiAgV2hlbmV2ZXIKIAl0aGUgc2NyaXB0IHJ1bnMgYSBgZ2l0YCBjb21tYW5kIHRoYXQgdXBkYXRlcyByZWZzLCBhIHJlZmxvZwogCWVudHJ5IGlzIGNyZWF0ZWQgdXNpbmcgdGhlIHZhbHVlIG9mIHRoaXMgc3RyaW5nIHRvIGxlYXZlIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0CmluZGV4IGU0YmRkMjIuLjJlMzBhM2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNoZWxsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQKQEAgLTI0LDcgKzI0LDcgQEAKIENPTU1BTkRTCiAtLS0tLS0tLQogCi0nZ2l0IHNoZWxsJyBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYWZ0ZXIgdGhlICctYycgb3B0aW9uOgorJ2dpdCBzaGVsbCcgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGFmdGVyIHRoZSBgLWNgIG9wdGlvbjoKIAogJ2dpdCByZWNlaXZlLXBhY2sgPGFyZ3VtZW50Pic6OgogJ2dpdCB1cGxvYWQtcGFjayA8YXJndW1lbnQ+Jzo6CkBAIC00Myw3ICs0Myw3IEBACiBJTlRFUkFDVElWRSBVU0UKIC0tLS0tLS0tLS0tLS0tLQogCi1CeSBkZWZhdWx0LCB0aGUgY29tbWFuZHMgYWJvdmUgY2FuIGJlIGV4ZWN1dGVkIG9ubHkgd2l0aCB0aGUgJy1jJworQnkgZGVmYXVsdCwgdGhlIGNvbW1hbmRzIGFib3ZlIGNhbiBiZSBleGVjdXRlZCBvbmx5IHdpdGggdGhlIGAtY2AKIG9wdGlvbjsgdGhlIHNoZWxsIGlzIG5vdCBpbnRlcmFjdGl2ZS4KIAogSWYgYSBgfi9naXQtc2hlbGwtY29tbWFuZHNgIGRpcmVjdG9yeSBpcyBwcmVzZW50LCAnZ2l0IHNoZWxsJwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0CmluZGV4IGI5MWQ0ZTUuLjc4MThlMGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctYnJhbmNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgYXJlIHNob3duIGJlZm9yZSB0aGVpciBwYXJlbnRzKS4KIAogLS1kYXRlLW9yZGVyOjoKLQlUaGlzIG9wdGlvbiBpcyBzaW1pbGFyIHRvICctLXRvcG8tb3JkZXInIGluIHRoZSBzZW5zZSB0aGF0IG5vCisJVGhpcyBvcHRpb24gaXMgc2ltaWxhciB0byBgLS10b3BvLW9yZGVyYCBpbiB0aGUgc2Vuc2UgdGhhdCBubwogCXBhcmVudCBjb21lcyBiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYnV0IG90aGVyd2lzZSBjb21taXRzCiAJYXJlIG9yZGVyZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGNvbW1pdCBkYXRlLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQKaW5kZXggM2EzMjQ1MS4uYzBhYTg3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1yZWYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dApAQCAtNjAsNyArNjAsNyBAQAogCiAJRW5hYmxlIHN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZyBieSByZXF1aXJpbmcgYW4gZXhhY3QgcmVmIHBhdGguCiAJQXNpZGUgZnJvbSByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBvZiAxLCBpdCB3aWxsIGFsc28gcHJpbnQgYW4gZXJyb3IKLQltZXNzYWdlIGlmICctLXF1aWV0JyB3YXMgbm90IHNwZWNpZmllZC4KKwltZXNzYWdlIGlmIGAtLXF1aWV0YCB3YXMgbm90IHNwZWNpZmllZC4KIAogLS1hYmJyZXZbPTxuPl06OgogCkBAIC03MCw3ICs3MCw3IEBACiAtcTo6CiAtLXF1aWV0OjoKIAotCURvIG5vdCBwcmludCBhbnkgcmVzdWx0cyB0byBzdGRvdXQuIFdoZW4gY29tYmluZWQgd2l0aCAnLS12ZXJpZnknIHRoaXMKKwlEbyBub3QgcHJpbnQgYW55IHJlc3VsdHMgdG8gc3Rkb3V0LiBXaGVuIGNvbWJpbmVkIHdpdGggYC0tdmVyaWZ5YCB0aGlzCiAJY2FuIGJlIHVzZWQgdG8gc2lsZW50bHkgY2hlY2sgaWYgYSByZWZlcmVuY2UgZXhpc3RzLgogCiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl06OgpAQCAtMTM0LDcgKzEzNCw3IEBACiBUaGlzIHdpbGwgc2hvdyAicmVmcy9oZWFkcy9tYXN0ZXIiIGJ1dCBhbHNvICJyZWZzL3JlbW90ZS9vdGhlci1yZXBvL21hc3RlciIsCiBpZiBzdWNoIHJlZmVyZW5jZXMgZXhpc3RzLgogCi1XaGVuIHVzaW5nIHRoZSAnLS12ZXJpZnknIGZsYWcsIHRoZSBjb21tYW5kIHJlcXVpcmVzIGFuIGV4YWN0IHBhdGg6CitXaGVuIHVzaW5nIHRoZSBgLS12ZXJpZnlgIGZsYWcsIHRoZSBjb21tYW5kIHJlcXVpcmVzIGFuIGV4YWN0IHBhdGg6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dAppbmRleCA5MjI2YzQzLi5iZjNiYjM3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKQEAgLTE1LDggKzE1LDkgQEAKICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gaW5pdCBbLS1dIFs8cGF0aD4uLi5dCiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGRlaW5pdCBbLWZ8LS1mb3JjZV0gKC0tYWxsfFstLV0gPHBhdGg+Li4uKQogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSB1cGRhdGUgWy0taW5pdF0gWy0tcmVtb3RlXSBbLU58LS1uby1mZXRjaF0KLQkgICAgICBbLWZ8LS1mb3JjZV0gWy0tcmViYXNlfC0tbWVyZ2VdIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dCi0JICAgICAgWy0tZGVwdGggPGRlcHRoPl0gWy0tcmVjdXJzaXZlXSBbLS1qb2JzIDxuPl0gWy0tXSBbPHBhdGg+Li4uXQorCSAgICAgIFstLVtuby1dcmVjb21tZW5kLXNoYWxsb3ddIFstZnwtLWZvcmNlXSBbLS1yZWJhc2V8LS1tZXJnZV0KKwkgICAgICBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1yZWN1cnNpdmVdCisJICAgICAgWy0tam9icyA8bj5dIFstLV0gWzxwYXRoPi4uLl0KICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3VtbWFyeSBbLS1jYWNoZWR8LS1maWxlc10gWygtbnwtLXN1bW1hcnktbGltaXQpIDxuPl0KIAkgICAgICBbY29tbWl0XSBbLS1dIFs8cGF0aD4uLi5dCiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGZvcmVhY2ggWy0tcmVjdXJzaXZlXSA8Y29tbWFuZD4KQEAgLTM4NCw2ICszODUsMTIgQEAKIAljbG9uZSB3aXRoIGEgaGlzdG9yeSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zLgogCVNlZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXQogCistLVtuby1dcmVjb21tZW5kLXNoYWxsb3c6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KKwlUaGUgaW5pdGlhbCBjbG9uZSBvZiBhIHN1Ym1vZHVsZSB3aWxsIHVzZSB0aGUgcmVjb21tZW5kZWQKKwlgc3VibW9kdWxlLjxuYW1lPi5zaGFsbG93YCBhcyBwcm92aWRlZCBieSB0aGUgLmdpdG1vZHVsZXMgZmlsZQorCWJ5IGRlZmF1bHQuIFRvIGlnbm9yZSB0aGUgc3VnZ2VzdGlvbnMgdXNlIGAtLW5vLXJlY29tbWVuZC1zaGFsbG93YC4KKwogLWogPG4+OjoKIC0tam9icyA8bj46OgogCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0CmluZGV4IGZiMjNhOTguLjVmOWU2NWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dApAQCAtOTgsMTEgKzk4LDExIEBACiAtLWlnbm9yZS1wYXRocz08cmVnZXg+OzsKIAlXaGVuIHBhc3NlZCB0byAnaW5pdCcgb3IgJ2Nsb25lJyB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aWxsCiAJYmUgcHJlc2VydmVkIGFzIGEgY29uZmlnIGtleS4gIFNlZSAnZmV0Y2gnIGZvciBhIGRlc2NyaXB0aW9uCi0Jb2YgJy0taWdub3JlLXBhdGhzJy4KKwlvZiBgLS1pZ25vcmUtcGF0aHNgLgogLS1pbmNsdWRlLXBhdGhzPTxyZWdleD47OwogCVdoZW4gcGFzc2VkIHRvICdpbml0JyBvciAnY2xvbmUnIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwKIAliZSBwcmVzZXJ2ZWQgYXMgYSBjb25maWcga2V5LiAgU2VlICdmZXRjaCcgZm9yIGEgZGVzY3JpcHRpb24KLQlvZiAnLS1pbmNsdWRlLXBhdGhzJy4KKwlvZiBgLS1pbmNsdWRlLXBhdGhzYC4KIC0tbm8tbWluaW1pemUtdXJsOzsKIAlXaGVuIHRyYWNraW5nIG11bHRpcGxlIGRpcmVjdG9yaWVzICh1c2luZyAtLXN0ZGxheW91dCwKIAktLWJyYW5jaGVzLCBvciAtLXRhZ3Mgb3B0aW9ucyksIGdpdCBzdm4gd2lsbCBhdHRlbXB0IHRvIGNvbm5lY3QKQEAgLTExMCw3ICsxMTAsNyBAQAogCXJlcG9zaXRvcnkuICBUaGlzIGRlZmF1bHQgYWxsb3dzIGJldHRlciB0cmFja2luZyBvZiBoaXN0b3J5IGlmCiAJZW50aXJlIHByb2plY3RzIGFyZSBtb3ZlZCB3aXRoaW4gYSByZXBvc2l0b3J5LCBidXQgbWF5IGNhdXNlCiAJaXNzdWVzIG9uIHJlcG9zaXRvcmllcyB3aGVyZSByZWFkIGFjY2VzcyByZXN0cmljdGlvbnMgYXJlIGluCi0JcGxhY2UuICBQYXNzaW5nICctLW5vLW1pbmltaXplLXVybCcgd2lsbCBhbGxvdyBnaXQgc3ZuIHRvCisJcGxhY2UuICBQYXNzaW5nIGAtLW5vLW1pbmltaXplLXVybGAgd2lsbCBhbGxvdyBnaXQgc3ZuIHRvCiAJYWNjZXB0IFVSTHMgYXMtaXMgd2l0aG91dCBhdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gYSBoaWdoZXIKIAlsZXZlbCBkaXJlY3RvcnkuICBUaGlzIG9wdGlvbiBpcyBvZmYgYnkgZGVmYXVsdCB3aGVuIG9ubHkKIAlvbmUgVVJML2JyYW5jaCBpcyB0cmFja2VkIChpdCB3b3VsZCBkbyBsaXR0bGUgZ29vZCkuCkBAIC0xNDEsNyArMTQxLDcgQEAKIC0taWdub3JlLXBhdGhzPTxyZWdleD47OwogCVRoaXMgYWxsb3dzIG9uZSB0byBzcGVjaWZ5IGEgUGVybCByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsCiAJY2F1c2Ugc2tpcHBpbmcgb2YgYWxsIG1hdGNoaW5nIHBhdGhzIGZyb20gY2hlY2tvdXQgZnJvbSBTVk4uCi0JVGhlICctLWlnbm9yZS1wYXRocycgb3B0aW9uIHNob3VsZCBtYXRjaCBmb3IgZXZlcnkgJ2ZldGNoJworCVRoZSBgLS1pZ25vcmUtcGF0aHNgIG9wdGlvbiBzaG91bGQgbWF0Y2ggZm9yIGV2ZXJ5ICdmZXRjaCcKIAkoaW5jbHVkaW5nIGF1dG9tYXRpYyBmZXRjaGVzIGR1ZSB0byAnY2xvbmUnLCAnZGNvbW1pdCcsCiAJJ3JlYmFzZScsIGV0Yykgb24gYSBnaXZlbiByZXBvc2l0b3J5LgogKwpAQCAtMTcwLDEwICsxNzAsMTAgQEAKIC0taW5jbHVkZS1wYXRocz08cmVnZXg+OzsKIAlUaGlzIGFsbG93cyBvbmUgdG8gc3BlY2lmeSBhIFBlcmwgcmVndWxhciBleHByZXNzaW9uIHRoYXQgd2lsbAogCWNhdXNlIHRoZSBpbmNsdXNpb24gb2Ygb25seSBtYXRjaGluZyBwYXRocyBmcm9tIGNoZWNrb3V0IGZyb20gU1ZOLgotCVRoZSAnLS1pbmNsdWRlLXBhdGhzJyBvcHRpb24gc2hvdWxkIG1hdGNoIGZvciBldmVyeSAnZmV0Y2gnCisJVGhlIGAtLWluY2x1ZGUtcGF0aHNgIG9wdGlvbiBzaG91bGQgbWF0Y2ggZm9yIGV2ZXJ5ICdmZXRjaCcKIAkoaW5jbHVkaW5nIGF1dG9tYXRpYyBmZXRjaGVzIGR1ZSB0byAnY2xvbmUnLCAnZGNvbW1pdCcsCi0JJ3JlYmFzZScsIGV0Yykgb24gYSBnaXZlbiByZXBvc2l0b3J5LiAnLS1pZ25vcmUtcGF0aHMnIHRha2VzCi0JcHJlY2VkZW5jZSBvdmVyICctLWluY2x1ZGUtcGF0aHMnLgorCSdyZWJhc2UnLCBldGMpIG9uIGEgZ2l2ZW4gcmVwb3NpdG9yeS4gYC0taWdub3JlLXBhdGhzYCB0YWtlcworCXByZWNlZGVuY2Ugb3ZlciBgLS1pbmNsdWRlLXBhdGhzYC4KICsKIFt2ZXJzZV0KIGNvbmZpZyBrZXk6IHN2bi1yZW1vdGUuPG5hbWU+LmluY2x1ZGUtcGF0aHMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCW9yIGlmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHBhc3NlZDsgaXQgd2lsbCBjcmVhdGUgYSBkaXJlY3RvcnkKIAlhbmQgd29yayB3aXRoaW4gdGhhdC4gIEl0IGFjY2VwdHMgYWxsIGFyZ3VtZW50cyB0aGF0IHRoZQogCSdpbml0JyBhbmQgJ2ZldGNoJyBjb21tYW5kcyBhY2NlcHQ7IHdpdGggdGhlIGV4Y2VwdGlvbiBvZgotCSctLWZldGNoLWFsbCcgYW5kICctLXBhcmVudCcuICBBZnRlciBhIHJlcG9zaXRvcnkgaXMgY2xvbmVkLAorCWAtLWZldGNoLWFsbGAgYW5kIGAtLXBhcmVudGAuICBBZnRlciBhIHJlcG9zaXRvcnkgaXMgY2xvbmVkLAogCXRoZSAnZmV0Y2gnIGNvbW1hbmQgd2lsbCBiZSBhYmxlIHRvIHVwZGF0ZSByZXZpc2lvbnMgd2l0aG91dAogCWFmZmVjdGluZyB0aGUgd29ya2luZyB0cmVlOyBhbmQgdGhlICdyZWJhc2UnIGNvbW1hbmQgd2lsbCBiZQogCWFibGUgdG8gdXBkYXRlIHRoZSB3b3JraW5nIHRyZWUgd2l0aCB0aGUgbGF0ZXN0IGNoYW5nZXMuCkBAIC0yMTYsNyArMjE2LDcgQEAKICdnaXQgbWVyZ2UnIGZvciBlYXNlIG9mIGRjb21taXR0aW5nIHdpdGggJ2dpdCBzdm4nLgogKwogVGhpcyBhY2NlcHRzIGFsbCBvcHRpb25zIHRoYXQgJ2dpdCBzdm4gZmV0Y2gnIGFuZCAnZ2l0IHJlYmFzZScKLWFjY2VwdC4gIEhvd2V2ZXIsICctLWZldGNoLWFsbCcgb25seSBmZXRjaGVzIGZyb20gdGhlIGN1cnJlbnQKK2FjY2VwdC4gIEhvd2V2ZXIsIGAtLWZldGNoLWFsbGAgb25seSBmZXRjaGVzIGZyb20gdGhlIGN1cnJlbnQKIFtzdm4tcmVtb3RlXSwgYW5kIG5vdCBhbGwgW3N2bi1yZW1vdGVdIGRlZmluaXRpb25zLgogKwogTGlrZSAnZ2l0IHJlYmFzZSc7IHRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgd29ya2luZyB0cmVlIGJlIGNsZWFuCkBAIC00NTksNiArNDU5LDIwIEBACiAJR2V0cyB0aGUgU3VidmVyc2lvbiBwcm9wZXJ0eSBnaXZlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGZvciBhCiAJZmlsZS4gIEEgc3BlY2lmaWMgcmV2aXNpb24gY2FuIGJlIHNwZWNpZmllZCB3aXRoIC1yLy0tcmV2aXNpb24uCiAKKydwcm9wc2V0Jzo6CisJU2V0cyB0aGUgU3VidmVyc2lvbiBwcm9wZXJ0eSBnaXZlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIHRvIHRoZQorCXZhbHVlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgZm9yIHRoZSBmaWxlIGdpdmVuIGFzIHRoZQorCXRoaXJkIGFyZ3VtZW50LgorKworRXhhbXBsZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IHN2biBwcm9wc2V0IHN2bjprZXl3b3JkcyAiRnJlZUJTRD0lSCIgZGV2ZWwvcHktdGlwcGVyL01ha2VmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgd2lsbCBzZXQgdGhlIHByb3BlcnR5ICdzdm46a2V5d29yZHMnIHRvICdGcmVlQlNEPSVIJyBmb3IgdGhlIGZpbGUKKydkZXZlbC9weS10aXBwZXIvTWFrZWZpbGUnLgorCiAnc2hvdy1leHRlcm5hbHMnOjoKIAlTaG93cyB0aGUgU3VidmVyc2lvbiBleHRlcm5hbHMuICBVc2UgLXIvLS1yZXZpc2lvbiB0byBzcGVjaWZ5IGEKIAlzcGVjaWZpYyByZXZpc2lvbi4KQEAgLTYxMSw2ICs2MjUsOSBAQAogCXdpdGggdGhlIGNvbW1pdHRlciBuYW1lIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gIFRoZSBwcm9ncmFtIGlzCiAJZXhwZWN0ZWQgdG8gcmV0dXJuIGEgc2luZ2xlIGxpbmUgb2YgdGhlIGZvcm0gIk5hbWUgPGVtYWlsPiIsCiAJd2hpY2ggd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGluY2x1ZGVkIGluIHRoZSBhdXRob3JzIGZpbGUuCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4uYXV0aG9yc1Byb2cKIAogLXE6OgogLS1xdWlldDo6CkBAIC03NDgsNyArNzY1LDcgQEAKIAogc3ZuLXJlbW90ZS48bmFtZT4ucHVzaHVybDo6CiAKLQlTaW1pbGFyIHRvIEdpdCdzICdyZW1vdGUuPG5hbWU+LnB1c2h1cmwnLCB0aGlzIGtleSBpcyBkZXNpZ25lZAorCVNpbWlsYXIgdG8gR2l0J3MgYHJlbW90ZS48bmFtZT4ucHVzaHVybGAsIHRoaXMga2V5IGlzIGRlc2lnbmVkCiAJdG8gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSAndXJsJyBwb2ludHMgdG8gYW4gU1ZOIHJlcG9zaXRvcnkKIAl2aWEgYSByZWFkLW9ubHkgdHJhbnNwb3J0LCB0byBwcm92aWRlIGFuIGFsdGVybmF0ZSByZWFkL3dyaXRlCiAJdHJhbnNwb3J0LiBJdCBpcyBhc3N1bWVkIHRoYXQgYm90aCBrZXlzIHBvaW50IHRvIHRoZSBzYW1lCkBAIC05MDUsNyArOTIyLDcgQEAKIEdpdCBjb21taXQgdG8gc2VydmUgYXMgcGFyZW50LiAgVGhpcyB3aWxsIGhhcHBlbiwgYW1vbmcgb3RoZXIgcmVhc29ucywKIGlmIHRoZSBTVk4gYnJhbmNoIGlzIGEgY29weSBvZiBhIHJldmlzaW9uIHRoYXQgd2FzIG5vdCBmZXRjaGVkIGJ5ICdnaXQKIHN2bicgKGUuZy4gYmVjYXVzZSBpdCBpcyBhbiBvbGQgcmV2aXNpb24gdGhhdCB3YXMgc2tpcHBlZCB3aXRoCi0nLS1yZXZpc2lvbicpLCBvciBpZiBpbiBTVk4gYSBkaXJlY3Rvcnkgd2FzIGNvcGllZCB0aGF0IGlzIG5vdCB0cmFja2VkCitgLS1yZXZpc2lvbmApLCBvciBpZiBpbiBTVk4gYSBkaXJlY3Rvcnkgd2FzIGNvcGllZCB0aGF0IGlzIG5vdCB0cmFja2VkCiBieSAnZ2l0IHN2bicgKHN1Y2ggYXMgYSBicmFuY2ggdGhhdCBpcyBub3QgdHJhY2tlZCBhdCBhbGwsIG9yIGEKIHN1YmRpcmVjdG9yeSBvZiBhIHRyYWNrZWQgYnJhbmNoKS4gSW4gdGhlc2UgY2FzZXMsICdnaXQgc3ZuJyB3aWxsIHN0aWxsCiBjcmVhdGUgYSBHaXQgYnJhbmNoLCBidXQgaW5zdGVhZCBvZiB1c2luZyBhbiBleGlzdGluZyBHaXQgY29tbWl0IGFzIHRoZQpAQCAtOTgyLDEyICs5OTksMTIgQEAKIGNvcHkgb2YgYSBjb21wbGV0ZSByZXBvc2l0b3J5LCBmb3IgcHJvamVjdHMgd2l0aCBtYW55IGJyYW5jaGVzIGl0IHdpbGwKIGxlYWQgdG8gYSB3b3JraW5nIGNvcHkgbWFueSB0aW1lcyBsYXJnZXIgdGhhbiBqdXN0IHRoZSB0cnVuay4gVGh1cyBmb3IKIHByb2plY3RzIHVzaW5nIHRoZSBzdGFuZGFyZCBkaXJlY3Rvcnkgc3RydWN0dXJlICh0cnVuay9icmFuY2hlcy90YWdzKSwKLWl0IGlzIHJlY29tbWVuZGVkIHRvIGNsb25lIHdpdGggb3B0aW9uICctLXN0ZGxheW91dCcuIElmIHRoZSBwcm9qZWN0CitpdCBpcyByZWNvbW1lbmRlZCB0byBjbG9uZSB3aXRoIG9wdGlvbiBgLS1zdGRsYXlvdXRgLiBJZiB0aGUgcHJvamVjdAogdXNlcyBhIG5vbi1zdGFuZGFyZCBzdHJ1Y3R1cmUsIGFuZC9vciBpZiBicmFuY2hlcyBhbmQgdGFncyBhcmUgbm90CiByZXF1aXJlZCwgaXQgaXMgZWFzaWVzdCB0byBvbmx5IGNsb25lIG9uZSBkaXJlY3RvcnkgKHR5cGljYWxseSB0cnVuayksCiB3aXRob3V0IGdpdmluZyBhbnkgcmVwb3NpdG9yeSBsYXlvdXQgb3B0aW9ucy4gIElmIHRoZSBmdWxsIGhpc3Rvcnkgd2l0aAotYnJhbmNoZXMgYW5kIHRhZ3MgaXMgcmVxdWlyZWQsIHRoZSBvcHRpb25zICctLXRydW5rJyAvICctLWJyYW5jaGVzJyAvCi0nLS10YWdzJyBtdXN0IGJlIHVzZWQuCiticmFuY2hlcyBhbmQgdGFncyBpcyByZXF1aXJlZCwgdGhlIG9wdGlvbnMgYC0tdHJ1bmtgIC8gYC0tYnJhbmNoZXNgIC8KK2AtLXRhZ3NgIG11c3QgYmUgdXNlZC4KIAogV2hlbiB1c2luZyBtdWx0aXBsZSAtLWJyYW5jaGVzIG9yIC0tdGFncywgJ2dpdCBzdm4nIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkKIGhhbmRsZSBuYW1lIGNvbGxpc2lvbnMgKGZvciBleGFtcGxlLCBpZiB0d28gYnJhbmNoZXMgZnJvbSBkaWZmZXJlbnQgcGF0aHMgaGF2ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKaW5kZXggYWJhYjQ4MS4uN2VjY2E4ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CkBAIC03OCw3ICs3OCw3IEBACiAKIC12OjoKIC0tdmVyaWZ5OjoKLQlWZXJpZnkgdGhlIGdwZyBzaWduYXR1cmUgb2YgdGhlIGdpdmVuIHRhZyBuYW1lcy4KKwlWZXJpZnkgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGhlIGdpdmVuIHRhZyBuYW1lcy4KIAogLW48bnVtPjo6CiAJPG51bT4gc3BlY2lmaWVzIGhvdyBtYW55IGxpbmVzIGZyb20gdGhlIGFubm90YXRpb24sIGlmIGFueSwKQEAgLTEwNCw3ICsxMDQsNyBAQAogCW9yZGVyIGNhbiBhbHNvIGJlIGFmZmVjdGVkIGJ5IHRoZQogCSJ2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgogCVRoZSBrZXlzIHN1cHBvcnRlZCBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgaW4gYGdpdCBmb3ItZWFjaC1yZWZgLgotCVNvcnQgb3JkZXIgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIGNvbmZpZ3VyZWQgZm9yIHRoZSAndGFnLnNvcnQnCisJU29ydCBvcmRlciBkZWZhdWx0cyB0byB0aGUgdmFsdWUgY29uZmlndXJlZCBmb3IgdGhlIGB0YWcuc29ydGAKIAl2YXJpYWJsZSBpZiBpdCBleGlzdHMsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIgb3RoZXJ3aXNlLiBTZWUKIAlsaW5rZ2l0OmdpdC1jb25maWdbMV0uCiAKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCiAtLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl06OgogCU9ubHkgbGlzdCB0YWdzIHdob3NlIHRpcHMgYXJlIHJlYWNoYWJsZSwgb3Igbm90IHJlYWNoYWJsZQotCWlmICctLW5vLW1lcmdlZCcgaXMgdXNlZCwgZnJvbSB0aGUgc3BlY2lmaWVkIGNvbW1pdCAoJ0hFQUQnCisJaWYgYC0tbm8tbWVyZ2VkYCBpcyB1c2VkLCBmcm9tIHRoZSBzcGVjaWZpZWQgY29tbWl0IChgSEVBRGAKIAlpZiBub3Qgc3BlY2lmaWVkKS4KIAogQ09ORklHVVJBVElPTgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKaW5kZXggYzZjYmVkMS4uNzM4NmM5MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CkBAIC0xMDIsNyArMTAyLDcgQEAKIHlvdSB3aWxsIG5lZWQgdG8gaGFuZGxlIHRoZSBzaXR1YXRpb24gbWFudWFsbHkuCiAKIC0tcmVhbGx5LXJlZnJlc2g6OgotCUxpa2UgJy0tcmVmcmVzaCcsIGJ1dCBjaGVja3Mgc3RhdCBpbmZvcm1hdGlvbiB1bmNvbmRpdGlvbmFsbHksCisJTGlrZSBgLS1yZWZyZXNoYCwgYnV0IGNoZWNrcyBzdGF0IGluZm9ybWF0aW9uIHVuY29uZGl0aW9uYWxseSwKIAl3aXRob3V0IHJlZ2FyZCB0byB0aGUgImFzc3VtZSB1bmNoYW5nZWQiIHNldHRpbmcuCiAKIC0tW25vLV1za2lwLXdvcmt0cmVlOjoKQEAgLTIxMSw3ICsyMTEsNyBAQAogCiBVc2luZyAtLXJlZnJlc2gKIC0tLS0tLS0tLS0tLS0tLQotJy0tcmVmcmVzaCcgZG9lcyBub3QgY2FsY3VsYXRlIGEgbmV3IHNoYTEgZmlsZSBvciBicmluZyB0aGUgaW5kZXgKK2AtLXJlZnJlc2hgIGRvZXMgbm90IGNhbGN1bGF0ZSBhIG5ldyBzaGExIGZpbGUgb3IgYnJpbmcgdGhlIGluZGV4CiB1cC10by1kYXRlIGZvciBtb2RlL2NvbnRlbnQgY2hhbmdlcy4gQnV0IHdoYXQgaXQgKmRvZXMqIGRvIGlzIHRvCiAicmUtbWF0Y2giIHRoZSBzdGF0IGluZm9ybWF0aW9uIG9mIGEgZmlsZSB3aXRoIHRoZSBpbmRleCwgc28gdGhhdCB5b3UKIGNhbiByZWZyZXNoIHRoZSBpbmRleCBmb3IgYSBmaWxlIHRoYXQgaGFzbid0IGJlZW4gY2hhbmdlZCBidXQgd2hlcmUKQEAgLTIyMiw3ICsyMjIsNyBAQAogCiBVc2luZyAtLWNhY2hlaW5mbyBvciAtLWluZm8tb25seQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSctLWNhY2hlaW5mbycgaXMgdXNlZCB0byByZWdpc3RlciBhIGZpbGUgdGhhdCBpcyBub3QgaW4gdGhlCitgLS1jYWNoZWluZm9gIGlzIHVzZWQgdG8gcmVnaXN0ZXIgYSBmaWxlIHRoYXQgaXMgbm90IGluIHRoZQogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIFRoaXMgaXMgdXNlZnVsIGZvciBtaW5pbXVtLWNoZWNrb3V0CiBtZXJnaW5nLgogCkBAIC0yMzIsMTIgKzIzMiwxMiBAQAogJCBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDxtb2RlPiw8c2hhMT4sPHBhdGg+CiAtLS0tLS0tLS0tLS0tLS0tCiAKLSctLWluZm8tb25seScgaXMgdXNlZCB0byByZWdpc3RlciBmaWxlcyB3aXRob3V0IHBsYWNpbmcgdGhlbSBpbiB0aGUgb2JqZWN0CitgLS1pbmZvLW9ubHlgIGlzIHVzZWQgdG8gcmVnaXN0ZXIgZmlsZXMgd2l0aG91dCBwbGFjaW5nIHRoZW0gaW4gdGhlIG9iamVjdAogZGF0YWJhc2UuICBUaGlzIGlzIHVzZWZ1bCBmb3Igc3RhdHVzLW9ubHkgcmVwb3NpdG9yaWVzLgogCi1Cb3RoICctLWNhY2hlaW5mbycgYW5kICctLWluZm8tb25seScgYmVoYXZlIHNpbWlsYXJseTogdGhlIGluZGV4IGlzIHVwZGF0ZWQKLWJ1dCB0aGUgb2JqZWN0IGRhdGFiYXNlIGlzbid0LiAgJy0tY2FjaGVpbmZvJyBpcyB1c2VmdWwgd2hlbiB0aGUgb2JqZWN0IGlzCi1pbiB0aGUgZGF0YWJhc2UgYnV0IHRoZSBmaWxlIGlzbid0IGF2YWlsYWJsZSBsb2NhbGx5LiAgJy0taW5mby1vbmx5JyBpcworQm90aCBgLS1jYWNoZWluZm9gIGFuZCBgLS1pbmZvLW9ubHlgIGJlaGF2ZSBzaW1pbGFybHk6IHRoZSBpbmRleCBpcyB1cGRhdGVkCitidXQgdGhlIG9iamVjdCBkYXRhYmFzZSBpc24ndC4gIGAtLWNhY2hlaW5mb2AgaXMgdXNlZnVsIHdoZW4gdGhlIG9iamVjdCBpcworaW4gdGhlIGRhdGFiYXNlIGJ1dCB0aGUgZmlsZSBpc24ndCBhdmFpbGFibGUgbG9jYWxseS4gIGAtLWluZm8tb25seWAgaXMKIHVzZWZ1bCB3aGVuIHRoZSBmaWxlIGlzIGF2YWlsYWJsZSwgYnV0IHlvdSBkbyBub3Qgd2lzaCB0byB1cGRhdGUgdGhlCiBvYmplY3QgZGF0YWJhc2UuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dAppbmRleCAwYWJjODA2Li44MjJhZDU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtcGFjay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLXBhY2sudHh0CkBAIC05LDggKzksOCBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0LXVwbG9hZC1wYWNrJyBbLS1zdHJpY3RdIFstLXRpbWVvdXQ9PG4+XSA8ZGlyZWN0b3J5PgotCisnZ2l0LXVwbG9hZC1wYWNrJyBbLS1bbm8tXXN0cmljdF0gWy0tdGltZW91dD08bj5dIFstLXN0YXRlbGVzcy1ycGNdCisJCSAgWy0tYWR2ZXJ0aXNlLXJlZnNdIDxkaXJlY3Rvcnk+CiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIEludm9rZWQgYnkgJ2dpdCBmZXRjaC1wYWNrJywgbGVhcm5zIHdoYXQKQEAgLTI1LDEyICsyNSwyMiBAQAogT1BUSU9OUwogLS0tLS0tLQogCi0tLXN0cmljdDo6CistLVtuby1dc3RyaWN0OjoKIAlEbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkuCiAKIC0tdGltZW91dD08bj46OgogCUludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5LgogCistLXN0YXRlbGVzcy1ycGM6OgorCVBlcmZvcm0gb25seSBhIHNpbmdsZSByZWFkLXdyaXRlIGN5Y2xlIHdpdGggc3RkaW4gYW5kIHN0ZG91dC4KKwlUaGlzIGZpdHMgd2l0aCB0aGUgSFRUUCBQT1NUIHJlcXVlc3QgcHJvY2Vzc2luZyBtb2RlbCB3aGVyZQorCWEgcHJvZ3JhbSBtYXkgcmVhZCB0aGUgcmVxdWVzdCwgd3JpdGUgYSByZXNwb25zZSwgYW5kIG11c3QgZXhpdC4KKworLS1hZHZlcnRpc2UtcmVmczo6CisJT25seSB0aGUgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCBpcyBvdXRwdXQsIGFuZCB0aGUgcHJvZ3JhbSBleGl0cworCWltbWVkaWF0ZWx5LiBUaGlzIGZpdHMgd2l0aCB0aGUgSFRUUCBHRVQgcmVxdWVzdCBtb2RlbCwgd2hlcmUKKwlubyByZXF1ZXN0IGNvbnRlbnQgaXMgcmVjZWl2ZWQgYnV0IGEgcmVzcG9uc2UgbXVzdCBiZSBwcm9kdWNlZC4KKwogPGRpcmVjdG9yeT46OgogCVRoZSByZXBvc2l0b3J5IHRvIHN5bmMgZnJvbS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LWNvbW1pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktY29tbWl0LnR4dAppbmRleCBlY2Y0ZGExLi45MjA5N2Y2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktY29tbWl0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktY29tbWl0LnR4dApAQCAtMTIsNyArMTIsNyBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLVZhbGlkYXRlcyB0aGUgZ3BnIHNpZ25hdHVyZSBjcmVhdGVkIGJ5ICdnaXQgY29tbWl0IC1TJy4KK1ZhbGlkYXRlcyB0aGUgR1BHIHNpZ25hdHVyZSBjcmVhdGVkIGJ5ICdnaXQgY29tbWl0IC1TJy4KIAogT1BUSU9OUwogLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd2ViLS1icm93c2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtd2ViLS1icm93c2UudHh0CmluZGV4IDE2ZWRlNWIuLjJkNmIwOWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXdlYi0tYnJvd3NlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC13ZWItLWJyb3dzZS50eHQKQEAgLTYyLDE0ICs2MiwxNCBAQAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAogVGhlIHdlYiBicm93c2VyIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHBhc3NlZAotd2l0aCB0aGUgLWMgKG9yIC0tY29uZmlnKSBjb21tYW5kLWxpbmUgb3B0aW9uLCBvciB0aGUgJ3dlYi5icm93c2VyJword2l0aCB0aGUgLWMgKG9yIC0tY29uZmlnKSBjb21tYW5kLWxpbmUgb3B0aW9uLCBvciB0aGUgYHdlYi5icm93c2VyYAogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpZiB0aGUgZm9ybWVyIGlzIG5vdCB1c2VkLgogCiBicm93c2VyLjx0b29sPi5wYXRoCiB+fn5+fn5+fn5+fn5+fn5+fn5+CiAKIFlvdSBjYW4gZXhwbGljaXRseSBwcm92aWRlIGEgZnVsbCBwYXRoIHRvIHlvdXIgcHJlZmVycmVkIGJyb3dzZXIgYnkKLXNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ2Jyb3dzZXIuPHRvb2w+LnBhdGgnLiBGb3IgZXhhbXBsZSwKK3NldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGJyb3dzZXIuPHRvb2w+LnBhdGhgLiBGb3IgZXhhbXBsZSwKIHlvdSBjYW4gY29uZmlndXJlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGZpcmVmb3ggYnkgc2V0dGluZwogJ2Jyb3dzZXIuZmlyZWZveC5wYXRoJy4gT3RoZXJ3aXNlLCAnZ2l0IHdlYntsaXRkZH1icm93c2UnIGFzc3VtZXMgdGhlIHRvb2wKIGlzIGF2YWlsYWJsZSBpbiBQQVRILgpAQCAtNzksNyArNzksNyBAQAogCiBXaGVuIHRoZSBicm93c2VyLCBzcGVjaWZpZWQgYnkgb3B0aW9ucyBvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgaXMKIG5vdCBhbW9uZyB0aGUgc3VwcG9ydGVkIG9uZXMsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcKLSdicm93c2VyLjx0b29sPi5jbWQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2lsbCBiZSBsb29rZWQgdXAuIElmIHRoaXMKK2Bicm93c2VyLjx0b29sPi5jbWRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2lsbCBiZSBsb29rZWQgdXAuIElmIHRoaXMKIHZhcmlhYmxlIGV4aXN0cyB0aGVuICdnaXQgd2Vie2xpdGRkfWJyb3dzZScgd2lsbCB0cmVhdCB0aGUgc3BlY2lmaWVkIHRvb2wKIGFzIGEgY3VzdG9tIGNvbW1hbmQgYW5kIHdpbGwgdXNlIGEgc2hlbGwgZXZhbCB0byBydW4gdGhlIGNvbW1hbmQgd2l0aAogdGhlIFVSTHMgcGFzc2VkIGFzIGFyZ3VtZW50cy4KQEAgLTExMCw3ICsxMTAsNyBAQAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKIE5vdGUgdGhhdCB0aGVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzaG91bGQgcHJvYmFibHkgYmUgc2V0IHVzaW5nCi10aGUgJy0tZ2xvYmFsJyBmbGFnLCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6Cit0aGUgYC0tZ2xvYmFsYCBmbGFnLCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHdlYi5icm93c2VyIGZpcmVmb3gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXdvcmt0cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXdvcmt0cmVlLnR4dAppbmRleCBjNjIyMzQ1Li4wYWViMDIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC13b3JrdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtd29ya3RyZWUudHh0CkBAIC0xMCw4ICsxMCwxMCBAQAogLS0tLS0tLS0KIFt2ZXJzZV0KICdnaXQgd29ya3RyZWUgYWRkJyBbLWZdIFstLWRldGFjaF0gWy0tY2hlY2tvdXRdIFstYiA8bmV3LWJyYW5jaD5dIDxwYXRoPiBbPGJyYW5jaD5dCi0nZ2l0IHdvcmt0cmVlIHBydW5lJyBbLW5dIFstdl0gWy0tZXhwaXJlIDxleHBpcmU+XQogJ2dpdCB3b3JrdHJlZSBsaXN0JyBbLS1wb3JjZWxhaW5dCisnZ2l0IHdvcmt0cmVlIGxvY2snIFstLXJlYXNvbiA8c3RyaW5nPl0gPHdvcmt0cmVlPgorJ2dpdCB3b3JrdHJlZSBwcnVuZScgWy1uXSBbLXZdIFstLWV4cGlyZSA8ZXhwaXJlPl0KKydnaXQgd29ya3RyZWUgdW5sb2NrJyA8d29ya3RyZWU+CiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMzgsOSArNDAsOCBAQAogCiBJZiBhIGxpbmtlZCB3b3JraW5nIHRyZWUgaXMgc3RvcmVkIG9uIGEgcG9ydGFibGUgZGV2aWNlIG9yIG5ldHdvcmsgc2hhcmUKIHdoaWNoIGlzIG5vdCBhbHdheXMgbW91bnRlZCwgeW91IGNhbiBwcmV2ZW50IGl0cyBhZG1pbmlzdHJhdGl2ZSBmaWxlcyBmcm9tCi1iZWluZyBwcnVuZWQgYnkgY3JlYXRpbmcgYSBmaWxlIG5hbWVkICdsb2NrZWQnIGFsb25nc2lkZSB0aGUgb3RoZXIKLWFkbWluaXN0cmF0aXZlIGZpbGVzLCBvcHRpb25hbGx5IGNvbnRhaW5pbmcgYSBwbGFpbiB0ZXh0IHJlYXNvbiB0aGF0Ci1wcnVuaW5nIHNob3VsZCBiZSBzdXBwcmVzc2VkLiBTZWUgc2VjdGlvbiAiREVUQUlMUyIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCitiZWluZyBwcnVuZWQgYnkgaXNzdWluZyB0aGUgYGdpdCB3b3JrdHJlZSBsb2NrYCBjb21tYW5kLCBvcHRpb25hbGx5CitzcGVjaWZ5aW5nIGAtLXJlYXNvbmAgdG8gZXhwbGFpbiB3aHkgdGhlIHdvcmtpbmcgdHJlZSBpcyBsb2NrZWQuCiAKIENPTU1BTkRTCiAtLS0tLS0tLQpAQCAtNDgsMTYgKzQ5LDEzIEBACiAKIENyZWF0ZSBgPHBhdGg+YCBhbmQgY2hlY2tvdXQgYDxicmFuY2g+YCBpbnRvIGl0LiBUaGUgbmV3IHdvcmtpbmcgZGlyZWN0b3J5CiBpcyBsaW5rZWQgdG8gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSwgc2hhcmluZyBldmVyeXRoaW5nIGV4Y2VwdCB3b3JraW5nCi1kaXJlY3Rvcnkgc3BlY2lmaWMgZmlsZXMgc3VjaCBhcyBIRUFELCBpbmRleCwgZXRjLgorZGlyZWN0b3J5IHNwZWNpZmljIGZpbGVzIHN1Y2ggYXMgSEVBRCwgaW5kZXgsIGV0Yy4gYC1gIG1heSBhbHNvIGJlCitzcGVjaWZpZWQgYXMgYDxicmFuY2g+YDsgaXQgaXMgc3lub255bW91cyB3aXRoIGBAey0xfWAuCiArCiBJZiBgPGJyYW5jaD5gIGlzIG9taXR0ZWQgYW5kIG5laXRoZXIgYC1iYCBub3IgYC1CYCBub3IgYC0tZGV0YWNoZWRgIHVzZWQsCiB0aGVuLCBhcyBhIGNvbnZlbmllbmNlLCBhIG5ldyBicmFuY2ggYmFzZWQgYXQgSEVBRCBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHksCiBhcyBpZiBgLWIgJChiYXNlbmFtZSA8cGF0aD4pYCB3YXMgc3BlY2lmaWVkLgogCi1wcnVuZTo6Ci0KLVBydW5lIHdvcmtpbmcgdHJlZSBpbmZvcm1hdGlvbiBpbiAkR0lUX0RJUi93b3JrdHJlZXMuCi0KIGxpc3Q6OgogCiBMaXN0IGRldGFpbHMgb2YgZWFjaCB3b3JrdHJlZS4gIFRoZSBtYWluIHdvcmt0cmVlIGlzIGxpc3RlZCBmaXJzdCwgZm9sbG93ZWQgYnkKQEAgLTY1LDYgKzYzLDIyIEBACiBiYXJlLCB0aGUgcmV2aXNpb24gY3VycmVudGx5IGNoZWNrZWQgb3V0LCBhbmQgdGhlIGJyYW5jaCBjdXJyZW50bHkgY2hlY2tlZCBvdXQKIChvciAnZGV0YWNoZWQgSEVBRCcgaWYgbm9uZSkuCiAKK2xvY2s6OgorCitJZiBhIHdvcmtpbmcgdHJlZSBpcyBvbiBhIHBvcnRhYmxlIGRldmljZSBvciBuZXR3b3JrIHNoYXJlIHdoaWNoCitpcyBub3QgYWx3YXlzIG1vdW50ZWQsIGxvY2sgaXQgdG8gcHJldmVudCBpdHMgYWRtaW5pc3RyYXRpdmUKK2ZpbGVzIGZyb20gYmVpbmcgcHJ1bmVkIGF1dG9tYXRpY2FsbHkuIFRoaXMgYWxzbyBwcmV2ZW50cyBpdCBmcm9tCitiZWluZyBtb3ZlZCBvciBkZWxldGVkLiBPcHRpb25hbGx5LCBzcGVjaWZ5IGEgcmVhc29uIGZvciB0aGUgbG9jaword2l0aCBgLS1yZWFzb25gLgorCitwcnVuZTo6CisKK1BydW5lIHdvcmtpbmcgdHJlZSBpbmZvcm1hdGlvbiBpbiAkR0lUX0RJUi93b3JrdHJlZXMuCisKK3VubG9jazo6CisKK1VubG9jayBhIHdvcmtpbmcgdHJlZSwgYWxsb3dpbmcgaXQgdG8gYmUgcHJ1bmVkLCBtb3ZlZCBvciBkZWxldGVkLgorCiBPUFRJT05TCiAtLS0tLS0tCiAKQEAgLTExMCw2ICsxMjQsMTggQEAKIC0tZXhwaXJlIDx0aW1lPjo6CiAJV2l0aCBgcHJ1bmVgLCBvbmx5IGV4cGlyZSB1bnVzZWQgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPi4KIAorLS1yZWFzb24gPHN0cmluZz46OgorCVdpdGggYGxvY2tgLCBhbiBleHBsYW5hdGlvbiB3aHkgdGhlIHdvcmtpbmcgdHJlZSBpcyBsb2NrZWQuCisKKzx3b3JrdHJlZT46OgorCVdvcmtpbmcgdHJlZXMgY2FuIGJlIGlkZW50aWZpZWQgYnkgcGF0aCwgZWl0aGVyIHJlbGF0aXZlIG9yCisJYWJzb2x1dGUuCisrCitJZiB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSdzIHBhdGggaXMgdW5pcXVlIGFtb25nCit3b3JraW5nIHRyZWVzLCBpdCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB3b3JrdHJlZXMuIEZvciBleGFtcGxlIGlmCit5b3Ugb25seSBoYXZlIHRvIHdvcmtpbmcgdHJlZXMgYXQgIi9hYmMvZGVmL2doaSIgYW5kICIvYWJjL2RlZi9nZ2ciLAordGhlbiAiZ2hpIiBvciAiZGVmL2doaSIgaXMgZW5vdWdoIHRvIHBvaW50IHRvIHRoZSBmb3JtZXIgd29ya2luZyB0cmVlLgorCiBERVRBSUxTCiAtLS0tLS0tCiBFYWNoIGxpbmtlZCB3b3JraW5nIHRyZWUgaGFzIGEgcHJpdmF0ZSBzdWItZGlyZWN0b3J5IGluIHRoZSByZXBvc2l0b3J5J3MKQEAgLTE1MCw3ICsxNzYsOCBAQAogCiBUbyBwcmV2ZW50IGEgJEdJVF9ESVIvd29ya3RyZWVzIGVudHJ5IGZyb20gYmVpbmcgcHJ1bmVkICh3aGljaAogY2FuIGJlIHVzZWZ1bCBpbiBzb21lIHNpdHVhdGlvbnMsIHN1Y2ggYXMgd2hlbiB0aGUKLWVudHJ5J3Mgd29ya2luZyB0cmVlIGlzIHN0b3JlZCBvbiBhIHBvcnRhYmxlIGRldmljZSksIGFkZCBhIGZpbGUgbmFtZWQKK2VudHJ5J3Mgd29ya2luZyB0cmVlIGlzIHN0b3JlZCBvbiBhIHBvcnRhYmxlIGRldmljZSksIHVzZSB0aGUKK2BnaXQgd29ya3RyZWUgbG9ja2AgY29tbWFuZCwgd2hpY2ggYWRkcyBhIGZpbGUgbmFtZWQKICdsb2NrZWQnIHRvIHRoZSBlbnRyeSdzIGRpcmVjdG9yeS4gVGhlIGZpbGUgY29udGFpbnMgdGhlIHJlYXNvbiBpbgogcGxhaW4gdGV4dC4gRm9yIGV4YW1wbGUsIGlmIGEgbGlua2VkIHdvcmtpbmcgdHJlZSdzIGAuZ2l0YCBmaWxlIHBvaW50cwogdG8gYC9wYXRoL21haW4vLmdpdC93b3JrdHJlZXMvdGVzdC1uZXh0YCB0aGVuIGEgZmlsZSBuYW1lZApAQCAtMjI2LDggKzI1Myw2IEBACiAtIGByZW1vdmVgIHRvIHJlbW92ZSBhIGxpbmtlZCB3b3JraW5nIHRyZWUgYW5kIGl0cyBhZG1pbmlzdHJhdGl2ZSBmaWxlcyAoYW5kCiAgIHdhcm4gaWYgdGhlIHdvcmtpbmcgdHJlZSBpcyBkaXJ0eSkKIC0gYG12YCB0byBtb3ZlIG9yIHJlbmFtZSBhIHdvcmtpbmcgdHJlZSBhbmQgdXBkYXRlIGl0cyBhZG1pbmlzdHJhdGl2ZSBmaWxlcwotLSBgbG9ja2AgdG8gcHJldmVudCBhdXRvbWF0aWMgcHJ1bmluZyBvZiBhZG1pbmlzdHJhdGl2ZSBmaWxlcyAoZm9yIGluc3RhbmNlLAotICBmb3IgYSB3b3JraW5nIHRyZWUgb24gYSBwb3J0YWJsZSBkZXZpY2UpCiAKIEdJVAogLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKaW5kZXggNTQ5MGQzYy4uZjRkZmM5ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dApAQCAtMzEsOCArMzEsOCBAQAogaW5kaXZpZHVhbCBHaXQgY29tbWFuZHMgd2l0aCAiZ2l0IGhlbHAgY29tbWFuZCIuICBsaW5rZ2l0OmdpdGNsaVs3XQogbWFudWFsIHBhZ2UgZ2l2ZXMgeW91IGFuIG92ZXJ2aWV3IG9mIHRoZSBjb21tYW5kLWxpbmUgY29tbWFuZCBzeW50YXguCiAKLUZvcm1hdHRlZCBhbmQgaHlwZXJsaW5rZWQgdmVyc2lvbiBvZiB0aGUgbGF0ZXN0IEdpdCBkb2N1bWVudGF0aW9uCi1jYW4gYmUgdmlld2VkIGF0IGBodHRwOi8vZ2l0LWh0bWxkb2NzLmdvb2dsZWNvZGUuY29tL2dpdC9naXQuaHRtbGAuCitBIGZvcm1hdHRlZCBhbmQgaHlwZXJsaW5rZWQgY29weSBvZiB0aGUgbGF0ZXN0IEdpdCBkb2N1bWVudGF0aW9uCitjYW4gYmUgdmlld2VkIGF0IGBodHRwczovL2dpdC5naXRodWIuaW8vaHRtbGRvY3MvZ2l0Lmh0bWxgLgogCiBpZmRlZjo6c3RhbGVub3Rlc1tdCiBbTk9URV0KQEAgLTQzLDkgKzQzLDExIEBACiBicmFuY2ggb2YgdGhlIGBnaXQuZ2l0YCByZXBvc2l0b3J5LgogRG9jdW1lbnRhdGlvbiBmb3Igb2xkZXIgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBoZXJlOgogCi0qIGxpbms6djIuOS4wL2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMi45XQorKiBsaW5rOnYyLjkuMi9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDIuOS4yXQogCiAqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMi45LjIudHh0WzIuOS4yXSwKKyAgbGluazpSZWxOb3Rlcy8yLjkuMS50eHRbMi45LjFdLAogICBsaW5rOlJlbE5vdGVzLzIuOS4wLnR4dFsyLjldLgogCiAqIGxpbms6djIuOC40L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMi44LjRdCkBAIC01MTMsNyArNTE1LDcgQEAKIAogLS1oZWxwOjoKIAlQcmludHMgdGhlIHN5bm9wc2lzIGFuZCBhIGxpc3Qgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZAotCWNvbW1hbmRzLiBJZiB0aGUgb3B0aW9uICctLWFsbCcgb3IgJy1hJyBpcyBnaXZlbiB0aGVuIGFsbAorCWNvbW1hbmRzLiBJZiB0aGUgb3B0aW9uIGAtLWFsbGAgb3IgYC1hYCBpcyBnaXZlbiB0aGVuIGFsbAogCWF2YWlsYWJsZSBjb21tYW5kcyBhcmUgcHJpbnRlZC4gSWYgYSBHaXQgY29tbWFuZCBpcyBuYW1lZCB0aGlzCiAJb3B0aW9uIHdpbGwgYnJpbmcgdXAgdGhlIG1hbnVhbCBwYWdlIGZvciB0aGF0IGNvbW1hbmQuCiArCkBAIC01NzcsNyArNTc5LDcgQEAKIAogLS1naXQtZGlyPTxwYXRoPjo6CiAJU2V0IHRoZSBwYXRoIHRvIHRoZSByZXBvc2l0b3J5LiBUaGlzIGNhbiBhbHNvIGJlIGNvbnRyb2xsZWQgYnkKLQlzZXR0aW5nIHRoZSBHSVRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlLiBJdCBjYW4gYmUgYW4gYWJzb2x1dGUKKwlzZXR0aW5nIHRoZSBgR0lUX0RJUmAgZW52aXJvbm1lbnQgdmFyaWFibGUuIEl0IGNhbiBiZSBhbiBhYnNvbHV0ZQogCXBhdGggb3IgcmVsYXRpdmUgcGF0aCB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogCiAtLXdvcmstdHJlZT08cGF0aD46OgpAQCAtODI3LDQ2ICs4MjksNDYgQEAKIGlzIHdvcnRoIG5vdGluZyB0aGF0IHRoZXkgbWF5IGJlIHVzZWQvb3ZlcnJpZGRlbiBieSBTQ01TIHNpdHRpbmcgYWJvdmUKIEdpdCBzbyB0YWtlIGNhcmUgaWYgdXNpbmcgYSBmb3JlaWduIGZyb250LWVuZC4KIAotJ0dJVF9JTkRFWF9GSUxFJzo6CitgR0lUX0lOREVYX0ZJTEVgOjoKIAlUaGlzIGVudmlyb25tZW50IGFsbG93cyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBhbiBhbHRlcm5hdGUKIAlpbmRleCBmaWxlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBvZiBgJEdJVF9ESVIvaW5kZXhgCiAJaXMgdXNlZC4KIAotJ0dJVF9JTkRFWF9WRVJTSU9OJzo6CitgR0lUX0lOREVYX1ZFUlNJT05gOjoKIAlUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGFsbG93cyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBhbiBpbmRleAogCXZlcnNpb24gZm9yIG5ldyByZXBvc2l0b3JpZXMuICBJdCB3b24ndCBhZmZlY3QgZXhpc3RpbmcgaW5kZXgKIAlmaWxlcy4gIEJ5IGRlZmF1bHQgaW5kZXggZmlsZSB2ZXJzaW9uIDIgb3IgMyBpcyB1c2VkLiBTZWUKIAlsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLSdHSVRfT0JKRUNUX0RJUkVDVE9SWSc6OgorYEdJVF9PQkpFQ1RfRElSRUNUT1JZYDo6CiAJSWYgdGhlIG9iamVjdCBzdG9yYWdlIGRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgdmlhIHRoaXMKIAllbnZpcm9ubWVudCB2YXJpYWJsZSB0aGVuIHRoZSBzaGExIGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkCiAJdW5kZXJuZWF0aCAtIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBgJEdJVF9ESVIvb2JqZWN0c2AKIAlkaXJlY3RvcnkgaXMgdXNlZC4KIAotJ0dJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTJzo6CitgR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVNgOjoKIAlEdWUgdG8gdGhlIGltbXV0YWJsZSBuYXR1cmUgb2YgR2l0IG9iamVjdHMsIG9sZCBvYmplY3RzIGNhbiBiZQogCWFyY2hpdmVkIGludG8gc2hhcmVkLCByZWFkLW9ubHkgZGlyZWN0b3JpZXMuIFRoaXMgdmFyaWFibGUKIAlzcGVjaWZpZXMgYSAiOiIgc2VwYXJhdGVkIChvbiBXaW5kb3dzICI7IiBzZXBhcmF0ZWQpIGxpc3QKIAlvZiBHaXQgb2JqZWN0IGRpcmVjdG9yaWVzIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlYXJjaCBmb3IgR2l0CiAJb2JqZWN0cy4gTmV3IG9iamVjdHMgd2lsbCBub3QgYmUgd3JpdHRlbiB0byB0aGVzZSBkaXJlY3Rvcmllcy4KIAotJ0dJVF9ESVInOjoKLQlJZiB0aGUgJ0dJVF9ESVInIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0aGVuIGl0CitgR0lUX0RJUmA6OgorCUlmIHRoZSBgR0lUX0RJUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRoZW4gaXQKIAlzcGVjaWZpZXMgYSBwYXRoIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGAuZ2l0YAogCWZvciB0aGUgYmFzZSBvZiB0aGUgcmVwb3NpdG9yeS4KLQlUaGUgJy0tZ2l0LWRpcicgY29tbWFuZC1saW5lIG9wdGlvbiBhbHNvIHNldHMgdGhpcyB2YWx1ZS4KKwlUaGUgYC0tZ2l0LWRpcmAgY29tbWFuZC1saW5lIG9wdGlvbiBhbHNvIHNldHMgdGhpcyB2YWx1ZS4KIAotJ0dJVF9XT1JLX1RSRUUnOjoKK2BHSVRfV09SS19UUkVFYDo6CiAJU2V0IHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUuCi0JVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5IHRoZSAnLS13b3JrLXRyZWUnIGNvbW1hbmQtbGluZQorCVRoaXMgY2FuIGFsc28gYmUgY29udHJvbGxlZCBieSB0aGUgYC0td29yay10cmVlYCBjb21tYW5kLWxpbmUKIAlvcHRpb24gYW5kIHRoZSBjb3JlLndvcmt0cmVlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCiAKLSdHSVRfTkFNRVNQQUNFJzo6CitgR0lUX05BTUVTUEFDRWA6OgogCVNldCB0aGUgR2l0IG5hbWVzcGFjZTsgc2VlIGxpbmtnaXQ6Z2l0bmFtZXNwYWNlc1s3XSBmb3IgZGV0YWlscy4KLQlUaGUgJy0tbmFtZXNwYWNlJyBjb21tYW5kLWxpbmUgb3B0aW9uIGFsc28gc2V0cyB0aGlzIHZhbHVlLgorCVRoZSBgLS1uYW1lc3BhY2VgIGNvbW1hbmQtbGluZSBvcHRpb24gYWxzbyBzZXRzIHRoaXMgdmFsdWUuCiAKLSdHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyc6OgorYEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTYDo6CiAJVGhpcyBzaG91bGQgYmUgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBhYnNvbHV0ZSBwYXRocy4gIElmCiAJc2V0LCBpdCBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCBHaXQgc2hvdWxkIG5vdCBjaGRpciB1cAogCWludG8gd2hpbGUgbG9va2luZyBmb3IgYSByZXBvc2l0b3J5IGRpcmVjdG9yeSAodXNlZnVsIGZvcgpAQCAtODc5LDE5ICs4ODEsMTkgQEAKIAljYW4gYWRkIGFuIGVtcHR5IGVudHJ5IHRvIHRoZSBsaXN0IHRvIHRlbGwgR2l0IHRoYXQgdGhlCiAJc3Vic2VxdWVudCBlbnRyaWVzIGFyZSBub3Qgc3ltbGlua3MgYW5kIG5lZWRuJ3QgYmUgcmVzb2x2ZWQ7CiAJZS5nLiwKLQknR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9L21heWJlL3N5bWxpbms6Oi92ZXJ5L3Nsb3cvbm9uL3N5bWxpbmsnLgorCWBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0vbWF5YmUvc3ltbGluazo6L3Zlcnkvc2xvdy9ub24vc3ltbGlua2AuCiAKLSdHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNJzo6CitgR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTWA6OgogCVdoZW4gcnVuIGluIGEgZGlyZWN0b3J5IHRoYXQgZG9lcyBub3QgaGF2ZSAiLmdpdCIgcmVwb3NpdG9yeQogCWRpcmVjdG9yeSwgR2l0IHRyaWVzIHRvIGZpbmQgc3VjaCBhIGRpcmVjdG9yeSBpbiB0aGUgcGFyZW50CiAJZGlyZWN0b3JpZXMgdG8gZmluZCB0aGUgdG9wIG9mIHRoZSB3b3JraW5nIHRyZWUsIGJ1dCBieSBkZWZhdWx0IGl0CiAJZG9lcyBub3QgY3Jvc3MgZmlsZXN5c3RlbSBib3VuZGFyaWVzLiAgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZQogCWNhbiBiZSBzZXQgdG8gdHJ1ZSB0byB0ZWxsIEdpdCBub3QgdG8gc3RvcCBhdCBmaWxlc3lzdGVtCi0JYm91bmRhcmllcy4gIExpa2UgJ0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTJywgdGhpcyB3aWxsIG5vdCBhZmZlY3QKLQlhbiBleHBsaWNpdCByZXBvc2l0b3J5IGRpcmVjdG9yeSBzZXQgdmlhICdHSVRfRElSJyBvciBvbiB0aGUKKwlib3VuZGFyaWVzLiAgTGlrZSBgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVNgLCB0aGlzIHdpbGwgbm90IGFmZmVjdAorCWFuIGV4cGxpY2l0IHJlcG9zaXRvcnkgZGlyZWN0b3J5IHNldCB2aWEgYEdJVF9ESVJgIG9yIG9uIHRoZQogCWNvbW1hbmQgbGluZS4KIAotJ0dJVF9DT01NT05fRElSJzo6CitgR0lUX0NPTU1PTl9ESVJgOjoKIAlJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byBhIHBhdGgsIG5vbi13b3JrdHJlZSBmaWxlcyB0aGF0IGFyZQogCW5vcm1hbGx5IGluICRHSVRfRElSIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGlzIHBhdGgKIAlpbnN0ZWFkLiBXb3JrdHJlZS1zcGVjaWZpYyBmaWxlcyBzdWNoIGFzIEhFQUQgb3IgaW5kZXggYXJlCkBAIC05MDIsMjggKzkwNCwyOCBAQAogCiBHaXQgQ29tbWl0cwogfn5+fn5+fn5+fn4KLSdHSVRfQVVUSE9SX05BTUUnOjoKLSdHSVRfQVVUSE9SX0VNQUlMJzo6Ci0nR0lUX0FVVEhPUl9EQVRFJzo6Ci0nR0lUX0NPTU1JVFRFUl9OQU1FJzo6Ci0nR0lUX0NPTU1JVFRFUl9FTUFJTCc6OgotJ0dJVF9DT01NSVRURVJfREFURSc6OgorYEdJVF9BVVRIT1JfTkFNRWA6OgorYEdJVF9BVVRIT1JfRU1BSUxgOjoKK2BHSVRfQVVUSE9SX0RBVEVgOjoKK2BHSVRfQ09NTUlUVEVSX05BTUVgOjoKK2BHSVRfQ09NTUlUVEVSX0VNQUlMYDo6CitgR0lUX0NPTU1JVFRFUl9EQVRFYDo6CiAnRU1BSUwnOjoKIAlzZWUgbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV0KIAogR2l0IERpZmZzCiB+fn5+fn5+fn4KLSdHSVRfRElGRl9PUFRTJzo6CitgR0lUX0RJRkZfT1BUU2A6OgogCU9ubHkgdmFsaWQgc2V0dGluZyBpcyAiLS11bmlmaWVkPT8/IiBvciAiLXU/PyIgdG8gc2V0IHRoZQogCW51bWJlciBvZiBjb250ZXh0IGxpbmVzIHNob3duIHdoZW4gYSB1bmlmaWVkIGRpZmYgaXMgY3JlYXRlZC4KIAlUaGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhbnkgIi1VIiBvciAiLS11bmlmaWVkIiBvcHRpb24KIAl2YWx1ZSBwYXNzZWQgb24gdGhlIEdpdCBkaWZmIGNvbW1hbmQgbGluZS4KIAotJ0dJVF9FWFRFUk5BTF9ESUZGJzo6Ci0JV2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBzZXQsIHRoZQorYEdJVF9FWFRFUk5BTF9ESUZGYDo6CisJV2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9FWFRFUk5BTF9ESUZGYCBpcyBzZXQsIHRoZQogCXByb2dyYW0gbmFtZWQgYnkgaXQgaXMgY2FsbGVkLCBpbnN0ZWFkIG9mIHRoZSBkaWZmIGludm9jYXRpb24KIAlkZXNjcmliZWQgYWJvdmUuICBGb3IgYSBwYXRoIHRoYXQgaXMgYWRkZWQsIHJlbW92ZWQsIG9yIG1vZGlmaWVkLAotICAgICAgICAnR0lUX0VYVEVSTkFMX0RJRkYnIGlzIGNhbGxlZCB3aXRoIDcgcGFyYW1ldGVyczoKKwlgR0lUX0VYVEVSTkFMX0RJRkZgIGlzIGNhbGxlZCB3aXRoIDcgcGFyYW1ldGVyczoKIAogCXBhdGggb2xkLWZpbGUgb2xkLWhleCBvbGQtbW9kZSBuZXctZmlsZSBuZXctaGV4IG5ldy1tb2RlCiArCkBAIC05MzcsNDkgKzkzOSw0OSBAQAogVGhlIGZpbGUgcGFyYW1ldGVycyBjYW4gcG9pbnQgYXQgdGhlIHVzZXIncyB3b3JraW5nIGZpbGUKIChlLmcuIGBuZXctZmlsZWAgaW4gImdpdC1kaWZmLWZpbGVzIiksIGAvZGV2L251bGxgIChlLmcuIGBvbGQtZmlsZWAKIHdoZW4gYSBuZXcgZmlsZSBpcyBhZGRlZCksIG9yIGEgdGVtcG9yYXJ5IGZpbGUgKGUuZy4gYG9sZC1maWxlYCBpbiB0aGUKLWluZGV4KS4gICdHSVRfRVhURVJOQUxfRElGRicgc2hvdWxkIG5vdCB3b3JyeSBhYm91dCB1bmxpbmtpbmcgdGhlCi10ZW1wb3JhcnkgZmlsZSAtLS0gaXQgaXMgcmVtb3ZlZCB3aGVuICdHSVRfRVhURVJOQUxfRElGRicgZXhpdHMuCitpbmRleCkuICBgR0lUX0VYVEVSTkFMX0RJRkZgIHNob3VsZCBub3Qgd29ycnkgYWJvdXQgdW5saW5raW5nIHRoZQordGVtcG9yYXJ5IGZpbGUgLS0tIGl0IGlzIHJlbW92ZWQgd2hlbiBgR0lUX0VYVEVSTkFMX0RJRkZgIGV4aXRzLgogKwotRm9yIGEgcGF0aCB0aGF0IGlzIHVubWVyZ2VkLCAnR0lUX0VYVEVSTkFMX0RJRkYnIGlzIGNhbGxlZCB3aXRoIDEKK0ZvciBhIHBhdGggdGhhdCBpcyB1bm1lcmdlZCwgYEdJVF9FWFRFUk5BTF9ESUZGYCBpcyBjYWxsZWQgd2l0aCAxCiBwYXJhbWV0ZXIsIDxwYXRoPi4KICsKLUZvciBlYWNoIHBhdGggJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBjYWxsZWQsIHR3byBlbnZpcm9ubWVudCB2YXJpYWJsZXMsCi0nR0lUX0RJRkZfUEFUSF9DT1VOVEVSJyBhbmQgJ0dJVF9ESUZGX1BBVEhfVE9UQUwnIGFyZSBzZXQuCitGb3IgZWFjaCBwYXRoIGBHSVRfRVhURVJOQUxfRElGRmAgaXMgY2FsbGVkLCB0d28gZW52aXJvbm1lbnQgdmFyaWFibGVzLAorYEdJVF9ESUZGX1BBVEhfQ09VTlRFUmAgYW5kIGBHSVRfRElGRl9QQVRIX1RPVEFMYCBhcmUgc2V0LgogCi0nR0lUX0RJRkZfUEFUSF9DT1VOVEVSJzo6CitgR0lUX0RJRkZfUEFUSF9DT1VOVEVSYDo6CiAJQSAxLWJhc2VkIGNvdW50ZXIgaW5jcmVtZW50ZWQgYnkgb25lIGZvciBldmVyeSBwYXRoLgogCi0nR0lUX0RJRkZfUEFUSF9UT1RBTCc6OgorYEdJVF9ESUZGX1BBVEhfVE9UQUxgOjoKIAlUaGUgdG90YWwgbnVtYmVyIG9mIHBhdGhzLgogCiBvdGhlcgogfn5+fn4KLSdHSVRfTUVSR0VfVkVSQk9TSVRZJzo6CitgR0lUX01FUkdFX1ZFUkJPU0lUWWA6OgogCUEgbnVtYmVyIGNvbnRyb2xsaW5nIHRoZSBhbW91bnQgb2Ygb3V0cHV0IHNob3duIGJ5CiAJdGhlIHJlY3Vyc2l2ZSBtZXJnZSBzdHJhdGVneS4gIE92ZXJyaWRlcyBtZXJnZS52ZXJib3NpdHkuCiAJU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdCiAKLSdHSVRfUEFHRVInOjoKK2BHSVRfUEFHRVJgOjoKIAlUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlcyBgJFBBR0VSYC4gSWYgaXQgaXMgc2V0CiAJdG8gYW4gZW1wdHkgc3RyaW5nIG9yIHRvIHRoZSB2YWx1ZSAiY2F0IiwgR2l0IHdpbGwgbm90IGxhdW5jaAogCWEgcGFnZXIuICBTZWUgYWxzbyB0aGUgYGNvcmUucGFnZXJgIG9wdGlvbiBpbgogCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KIAotJ0dJVF9FRElUT1InOjoKK2BHSVRfRURJVE9SYDo6CiAJVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXMgYCRFRElUT1JgIGFuZCBgJFZJU1VBTGAuCiAJSXQgaXMgdXNlZCBieSBzZXZlcmFsIEdpdCBjb21tYW5kcyB3aGVuLCBvbiBpbnRlcmFjdGl2ZSBtb2RlLAogCWFuIGVkaXRvciBpcyB0byBiZSBsYXVuY2hlZC4gU2VlIGFsc28gbGlua2dpdDpnaXQtdmFyWzFdCiAJYW5kIHRoZSBgY29yZS5lZGl0b3JgIG9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCiAKLSdHSVRfU1NIJzo6Ci0nR0lUX1NTSF9DT01NQU5EJzo6CitgR0lUX1NTSGA6OgorYEdJVF9TU0hfQ09NTUFORGA6OgogCUlmIGVpdGhlciBvZiB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaXMgc2V0IHRoZW4gJ2dpdCBmZXRjaCcKIAlhbmQgJ2dpdCBwdXNoJyB3aWxsIHVzZSB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgaW5zdGVhZCBvZiAnc3NoJwogCXdoZW4gdGhleSBuZWVkIHRvIGNvbm5lY3QgdG8gYSByZW1vdGUgc3lzdGVtLgogCVRoZSBjb21tYW5kIHdpbGwgYmUgZ2l2ZW4gZXhhY3RseSB0d28gb3IgZm91ciBhcmd1bWVudHM6IHRoZQogCSd1c2VybmFtZUBob3N0JyAob3IganVzdCAnaG9zdCcpIGZyb20gdGhlIFVSTCBhbmQgdGhlIHNoZWxsCiAJY29tbWFuZCB0byBleGVjdXRlIG9uIHRoYXQgcmVtb3RlIHN5c3RlbSwgb3B0aW9uYWxseSBwcmVjZWRlZCBieQotCSctcCcgKGxpdGVyYWxseSkgYW5kIHRoZSAncG9ydCcgZnJvbSB0aGUgVVJMIHdoZW4gaXQgc3BlY2lmaWVzCisJYC1wYCAobGl0ZXJhbGx5KSBhbmQgdGhlICdwb3J0JyBmcm9tIHRoZSBVUkwgd2hlbiBpdCBzcGVjaWZpZXMKIAlzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBTU0ggcG9ydC4KICsKIGAkR0lUX1NTSF9DT01NQU5EYCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYCRHSVRfU1NIYCwgYW5kIGlzIGludGVycHJldGVkCkBAIC05OTIsMTggKzk5NCwxOCBAQAogcGVyc29uYWwgYC5zc2gvY29uZmlnYCBmaWxlLiAgUGxlYXNlIGNvbnN1bHQgeW91ciBzc2ggZG9jdW1lbnRhdGlvbgogZm9yIGZ1cnRoZXIgZGV0YWlscy4KIAotJ0dJVF9BU0tQQVNTJzo6CitgR0lUX0FTS1BBU1NgOjoKIAlJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgdGhlbiBHaXQgY29tbWFuZHMgd2hpY2ggbmVlZCB0bwogCWFjcXVpcmUgcGFzc3dvcmRzIG9yIHBhc3NwaHJhc2VzIChlLmcuIGZvciBIVFRQIG9yIElNQVAgYXV0aGVudGljYXRpb24pCiAJd2lsbCBjYWxsIHRoaXMgcHJvZ3JhbSB3aXRoIGEgc3VpdGFibGUgcHJvbXB0IGFzIGNvbW1hbmQtbGluZSBhcmd1bWVudAotCWFuZCByZWFkIHRoZSBwYXNzd29yZCBmcm9tIGl0cyBTVERPVVQuIFNlZSBhbHNvIHRoZSAnY29yZS5hc2tQYXNzJworCWFuZCByZWFkIHRoZSBwYXNzd29yZCBmcm9tIGl0cyBTVERPVVQuIFNlZSBhbHNvIHRoZSBgY29yZS5hc2tQYXNzYAogCW9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCiAKLSdHSVRfVEVSTUlOQUxfUFJPTVBUJzo6CitgR0lUX1RFUk1JTkFMX1BST01QVGA6OgogCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGAwYCwgZ2l0IHdpbGwgbm90IHByb21wdAogCW9uIHRoZSB0ZXJtaW5hbCAoZS5nLiwgd2hlbiBhc2tpbmcgZm9yIEhUVFAgYXV0aGVudGljYXRpb24pLgogCi0nR0lUX0NPTkZJR19OT1NZU1RFTSc6OgorYEdJVF9DT05GSUdfTk9TWVNURU1gOjoKIAlXaGV0aGVyIHRvIHNraXAgcmVhZGluZyBzZXR0aW5ncyBmcm9tIHRoZSBzeXN0ZW0td2lkZQogCWAkKHByZWZpeCkvZXRjL2dpdGNvbmZpZ2AgZmlsZS4gIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuCiAJYmUgdXNlZCBhbG9uZyB3aXRoIGAkSE9NRWAgYW5kIGAkWERHX0NPTkZJR19IT01FYCB0byBjcmVhdGUgYQpAQCAtMTAxMSw3ICsxMDEzLDcgQEAKIAl0ZW1wb3JhcmlseSB0byBhdm9pZCB1c2luZyBhIGJ1Z2d5IGAvZXRjL2dpdGNvbmZpZ2AgZmlsZSB3aGlsZQogCXdhaXRpbmcgZm9yIHNvbWVvbmUgd2l0aCBzdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGZpeCBpdC4KIAotJ0dJVF9GTFVTSCc6OgorYEdJVF9GTFVTSGA6OgogCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvICIxIiwgdGhlbiBjb21tYW5kcyBzdWNoCiAJYXMgJ2dpdCBibGFtZScgKGluIGluY3JlbWVudGFsIG1vZGUpLCAnZ2l0IHJldi1saXN0JywgJ2dpdCBsb2cnLAogCSdnaXQgY2hlY2stYXR0cicgYW5kICdnaXQgY2hlY2staWdub3JlJyB3aWxsCkBAIC0xMDIyLDcgKzEwMjQsNyBAQAogCW5vdCBzZXQsIEdpdCB3aWxsIGNob29zZSBidWZmZXJlZCBvciByZWNvcmQtb3JpZW50ZWQgZmx1c2hpbmcKIAliYXNlZCBvbiB3aGV0aGVyIHN0ZG91dCBhcHBlYXJzIHRvIGJlIHJlZGlyZWN0ZWQgdG8gYSBmaWxlIG9yIG5vdC4KIAotJ0dJVF9UUkFDRSc6OgorYEdJVF9UUkFDRWA6OgogCUVuYWJsZXMgZ2VuZXJhbCB0cmFjZSBtZXNzYWdlcywgZS5nLiBhbGlhcyBleHBhbnNpb24sIGJ1aWx0LWluCiAJY29tbWFuZCBleGVjdXRpb24gYW5kIGV4dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uLgogKwpAQCAtMTA0MywyMSArMTA0NSwyMSBAQAogVW5zZXR0aW5nIHRoZSB2YXJpYWJsZSwgb3Igc2V0dGluZyBpdCB0byBlbXB0eSwgIjAiIG9yCiAiZmFsc2UiIChjYXNlIGluc2Vuc2l0aXZlKSBkaXNhYmxlcyB0cmFjZSBtZXNzYWdlcy4KIAotJ0dJVF9UUkFDRV9QQUNLX0FDQ0VTUyc6OgorYEdJVF9UUkFDRV9QQUNLX0FDQ0VTU2A6OgogCUVuYWJsZXMgdHJhY2UgbWVzc2FnZXMgZm9yIGFsbCBhY2Nlc3NlcyB0byBhbnkgcGFja3MuIEZvciBlYWNoCiAJYWNjZXNzLCB0aGUgcGFjayBmaWxlIG5hbWUgYW5kIGFuIG9mZnNldCBpbiB0aGUgcGFjayBpcwogCXJlY29yZGVkLiBUaGlzIG1heSBiZSBoZWxwZnVsIGZvciB0cm91Ymxlc2hvb3Rpbmcgc29tZQogCXBhY2stcmVsYXRlZCBwZXJmb3JtYW5jZSBwcm9ibGVtcy4KLQlTZWUgJ0dJVF9UUkFDRScgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucy4KKwlTZWUgYEdJVF9UUkFDRWAgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucy4KIAotJ0dJVF9UUkFDRV9QQUNLRVQnOjoKK2BHSVRfVFJBQ0VfUEFDS0VUYDo6CiAJRW5hYmxlcyB0cmFjZSBtZXNzYWdlcyBmb3IgYWxsIHBhY2tldHMgY29taW5nIGluIG9yIG91dCBvZiBhCiAJZ2l2ZW4gcHJvZ3JhbS4gVGhpcyBjYW4gaGVscCB3aXRoIGRlYnVnZ2luZyBvYmplY3QgbmVnb3RpYXRpb24KIAlvciBvdGhlciBwcm90b2NvbCBpc3N1ZXMuIFRyYWNpbmcgaXMgdHVybmVkIG9mZiBhdCBhIHBhY2tldAotCXN0YXJ0aW5nIHdpdGggIlBBQ0siIChidXQgc2VlICdHSVRfVFJBQ0VfUEFDS0ZJTEUnIGJlbG93KS4KLQlTZWUgJ0dJVF9UUkFDRScgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucy4KKwlzdGFydGluZyB3aXRoICJQQUNLIiAoYnV0IHNlZSBgR0lUX1RSQUNFX1BBQ0tGSUxFYCBiZWxvdykuCisJU2VlIGBHSVRfVFJBQ0VgIGZvciBhdmFpbGFibGUgdHJhY2Ugb3V0cHV0IG9wdGlvbnMuCiAKLSdHSVRfVFJBQ0VfUEFDS0ZJTEUnOjoKK2BHSVRfVFJBQ0VfUEFDS0ZJTEVgOjoKIAlFbmFibGVzIHRyYWNpbmcgb2YgcGFja2ZpbGVzIHNlbnQgb3IgcmVjZWl2ZWQgYnkgYQogCWdpdmVuIHByb2dyYW0uIFVubGlrZSBvdGhlciB0cmFjZSBvdXRwdXQsIHRoaXMgdHJhY2UgaXMKIAl2ZXJiYXRpbTogbm8gaGVhZGVycywgYW5kIG5vIHF1b3Rpbmcgb2YgYmluYXJ5IGRhdGEuIFlvdSBhbG1vc3QKQEAgLTEwNjgsMjIgKzEwNzAsMzAgQEAKIE5vdGUgdGhhdCB0aGlzIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgY2xpZW50IHNpZGUKIG9mIGNsb25lcyBhbmQgZmV0Y2hlcy4KIAotJ0dJVF9UUkFDRV9QRVJGT1JNQU5DRSc6OgorYEdJVF9UUkFDRV9QRVJGT1JNQU5DRWA6OgogCUVuYWJsZXMgcGVyZm9ybWFuY2UgcmVsYXRlZCB0cmFjZSBtZXNzYWdlcywgZS5nLiB0b3RhbCBleGVjdXRpb24KIAl0aW1lIG9mIGVhY2ggR2l0IGNvbW1hbmQuCi0JU2VlICdHSVRfVFJBQ0UnIGZvciBhdmFpbGFibGUgdHJhY2Ugb3V0cHV0IG9wdGlvbnMuCisJU2VlIGBHSVRfVFJBQ0VgIGZvciBhdmFpbGFibGUgdHJhY2Ugb3V0cHV0IG9wdGlvbnMuCiAKLSdHSVRfVFJBQ0VfU0VUVVAnOjoKK2BHSVRfVFJBQ0VfU0VUVVBgOjoKIAlFbmFibGVzIHRyYWNlIG1lc3NhZ2VzIHByaW50aW5nIHRoZSAuZ2l0LCB3b3JraW5nIHRyZWUgYW5kIGN1cnJlbnQKIAl3b3JraW5nIGRpcmVjdG9yeSBhZnRlciBHaXQgaGFzIGNvbXBsZXRlZCBpdHMgc2V0dXAgcGhhc2UuCi0JU2VlICdHSVRfVFJBQ0UnIGZvciBhdmFpbGFibGUgdHJhY2Ugb3V0cHV0IG9wdGlvbnMuCisJU2VlIGBHSVRfVFJBQ0VgIGZvciBhdmFpbGFibGUgdHJhY2Ugb3V0cHV0IG9wdGlvbnMuCiAKLSdHSVRfVFJBQ0VfU0hBTExPVyc6OgorYEdJVF9UUkFDRV9TSEFMTE9XYDo6CiAJRW5hYmxlcyB0cmFjZSBtZXNzYWdlcyB0aGF0IGNhbiBoZWxwIGRlYnVnZ2luZyBmZXRjaGluZyAvCiAJY2xvbmluZyBvZiBzaGFsbG93IHJlcG9zaXRvcmllcy4KLQlTZWUgJ0dJVF9UUkFDRScgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucy4KKwlTZWUgYEdJVF9UUkFDRWAgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucy4KIAotJ0dJVF9MSVRFUkFMX1BBVEhTUEVDUyc6OgorYEdJVF9UUkFDRV9DVVJMYDo6CisJRW5hYmxlcyBhIGN1cmwgZnVsbCB0cmFjZSBkdW1wIG9mIGFsbCBpbmNvbWluZyBhbmQgb3V0Z29pbmcgZGF0YSwKKwlpbmNsdWRpbmcgZGVzY3JpcHRpdmUgaW5mb3JtYXRpb24sIG9mIHRoZSBnaXQgdHJhbnNwb3J0IHByb3RvY29sLgorCVRoaXMgaXMgc2ltaWxhciB0byBkb2luZyBjdXJsIGAtLXRyYWNlLWFzY2lpYCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCVRoaXMgb3B0aW9uIG92ZXJyaWRlcyBzZXR0aW5nIHRoZSBgR0lUX0NVUkxfVkVSQk9TRWAgZW52aXJvbm1lbnQKKwl2YXJpYWJsZS4KKwlTZWUgYEdJVF9UUkFDRWAgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucy4KKworYEdJVF9MSVRFUkFMX1BBVEhTUEVDU2A6OgogCVNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBgMWAgd2lsbCBjYXVzZSBHaXQgdG8gdHJlYXQgYWxsCiAJcGF0aHNwZWNzIGxpdGVyYWxseSwgcmF0aGVyIHRoYW4gYXMgZ2xvYiBwYXR0ZXJucy4gRm9yIGV4YW1wbGUsCiAJcnVubmluZyBgR0lUX0xJVEVSQUxfUEFUSFNQRUNTPTEgZ2l0IGxvZyAtLSAnKi5jJ2Agd2lsbCBzZWFyY2gKQEAgLTEwOTIsMTkgKzExMDIsMTkgQEAKIAlsaXRlcmFsIHBhdGhzIHRvIEdpdCAoZS5nLiwgcGF0aHMgcHJldmlvdXNseSBnaXZlbiB0byB5b3UgYnkKIAlgZ2l0IGxzLXRyZWVgLCBgLS1yYXdgIGRpZmYgb3V0cHV0LCBldGMpLgogCi0nR0lUX0dMT0JfUEFUSFNQRUNTJzo6CitgR0lUX0dMT0JfUEFUSFNQRUNTYDo6CiAJU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGAxYCB3aWxsIGNhdXNlIEdpdCB0byB0cmVhdCBhbGwKIAlwYXRoc3BlY3MgYXMgZ2xvYiBwYXR0ZXJucyAoYWthICJnbG9iIiBtYWdpYykuCiAKLSdHSVRfTk9HTE9CX1BBVEhTUEVDUyc6OgorYEdJVF9OT0dMT0JfUEFUSFNQRUNTYDo6CiAJU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGAxYCB3aWxsIGNhdXNlIEdpdCB0byB0cmVhdCBhbGwKIAlwYXRoc3BlY3MgYXMgbGl0ZXJhbCAoYWthICJsaXRlcmFsIiBtYWdpYykuCiAKLSdHSVRfSUNBU0VfUEFUSFNQRUNTJzo6CitgR0lUX0lDQVNFX1BBVEhTUEVDU2A6OgogCVNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBgMWAgd2lsbCBjYXVzZSBHaXQgdG8gdHJlYXQgYWxsCiAJcGF0aHNwZWNzIGFzIGNhc2UtaW5zZW5zaXRpdmUuCiAKLSdHSVRfUkVGTE9HX0FDVElPTic6OgorYEdJVF9SRUZMT0dfQUNUSU9OYDo6CiAJV2hlbiBhIHJlZiBpcyB1cGRhdGVkLCByZWZsb2cgZW50cmllcyBhcmUgY3JlYXRlZCB0byBrZWVwCiAJdHJhY2sgb2YgdGhlIHJlYXNvbiB3aHkgdGhlIHJlZiB3YXMgdXBkYXRlZCAod2hpY2ggaXMKIAl0eXBpY2FsbHkgdGhlIG5hbWUgb2YgdGhlIGhpZ2gtbGV2ZWwgY29tbWFuZCB0aGF0IHVwZGF0ZWQKQEAgLTExMTQsNyArMTEyNCw3IEBACiAJdmFyaWFibGUgd2hlbiBpdCBpcyBpbnZva2VkIGFzIHRoZSB0b3AgbGV2ZWwgY29tbWFuZCBieSB0aGUKIAllbmQgdXNlciwgdG8gYmUgcmVjb3JkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIHJlZmxvZy4KIAotJ0dJVF9SRUZfUEFSQU5PSUEnOjoKK2BHSVRfUkVGX1BBUkFOT0lBYDo6CiAJSWYgc2V0IHRvIGAxYCwgaW5jbHVkZSBicm9rZW4gb3IgYmFkbHkgbmFtZWQgcmVmcyB3aGVuIGl0ZXJhdGluZwogCW92ZXIgbGlzdHMgb2YgcmVmcy4gSW4gYSBub3JtYWwsIG5vbi1jb3JydXB0ZWQgcmVwb3NpdG9yeSwgdGhpcwogCWRvZXMgbm90aGluZy4gSG93ZXZlciwgZW5hYmxpbmcgaXQgbWF5IGhlbHAgZ2l0IHRvIGRldGVjdCBhbmQKQEAgLTExMjUsNyArMTEzNSw3IEBACiAJYW4gb3BlcmF0aW9uIGhhcyB0b3VjaGVkIGV2ZXJ5IHJlZiAoZS5nLiwgYmVjYXVzZSB5b3UgYXJlCiAJY2xvbmluZyBhIHJlcG9zaXRvcnkgdG8gbWFrZSBhIGJhY2t1cCkuCiAKLSdHSVRfQUxMT1dfUFJPVE9DT0wnOjoKK2BHSVRfQUxMT1dfUFJPVE9DT0xgOjoKIAlJZiBzZXQsIHByb3ZpZGUgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwcm90b2NvbHMgd2hpY2ggYXJlCiAJYWxsb3dlZCB0byBiZSB1c2VkIHdpdGggZmV0Y2gvcHVzaC9jbG9uZS4gVGhpcyBpcyB1c2VmdWwgdG8KIAlyZXN0cmljdCByZWN1cnNpdmUgc3VibW9kdWxlIGluaXRpYWxpemF0aW9uIGZyb20gYW4gdW50cnVzdGVkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dAppbmRleCBlM2IxZGU4Li44MDc1NzdhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKQEAgLTExNSw2ICsxMTUsNyBAQAogcmVwb3NpdG9yeS4gIFRvIGNvbnRyb2wgd2hhdCBsaW5lIGVuZGluZyBzdHlsZSBpcyB1c2VkIGluIHRoZSB3b3JraW5nCiBkaXJlY3RvcnksIHVzZSB0aGUgYGVvbGAgYXR0cmlidXRlIGZvciBhIHNpbmdsZSBmaWxlIGFuZCB0aGUKIGBjb3JlLmVvbGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmb3IgYWxsIHRleHQgZmlsZXMuCitOb3RlIHRoYXQgYGNvcmUuYXV0b2NybGZgIG92ZXJyaWRlcyBgY29yZS5lb2xgCiAKIFNldDo6CiAKQEAgLTEzMCw4ICsxMzEsOSBAQAogU2V0IHRvIHN0cmluZyB2YWx1ZSAiYXV0byI6OgogCiAJV2hlbiBgdGV4dGAgaXMgc2V0IHRvICJhdXRvIiwgdGhlIHBhdGggaXMgbWFya2VkIGZvciBhdXRvbWF0aWMKLQllbmQtb2YtbGluZSBub3JtYWxpemF0aW9uLiAgSWYgR2l0IGRlY2lkZXMgdGhhdCB0aGUgY29udGVudCBpcwotCXRleHQsIGl0cyBsaW5lIGVuZGluZ3MgYXJlIG5vcm1hbGl6ZWQgdG8gTEYgb24gY2hlY2tpbi4KKwllbmQtb2YtbGluZSBjb252ZXJzaW9uLiAgSWYgR2l0IGRlY2lkZXMgdGhhdCB0aGUgY29udGVudCBpcworCXRleHQsIGl0cyBsaW5lIGVuZGluZ3MgYXJlIGNvbnZlcnRlZCB0byBMRiBvbiBjaGVja2luLgorCVdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gY29tbWl0dGVkIHdpdGggQ1JMRiwgbm8gY29udmVyc2lvbiBpcyBkb25lLgogCiBVbnNwZWNpZmllZDo6CiAKQEAgLTE0Niw3ICsxNDgsNyBAQAogXl5eXl4KIAogVGhpcyBhdHRyaWJ1dGUgc2V0cyBhIHNwZWNpZmljIGxpbmUtZW5kaW5nIHN0eWxlIHRvIGJlIHVzZWQgaW4gdGhlCi13b3JraW5nIGRpcmVjdG9yeS4gIEl0IGVuYWJsZXMgZW5kLW9mLWxpbmUgbm9ybWFsaXphdGlvbiB3aXRob3V0IGFueQord29ya2luZyBkaXJlY3RvcnkuICBJdCBlbmFibGVzIGVuZC1vZi1saW5lIGNvbnZlcnNpb24gd2l0aG91dCBhbnkKIGNvbnRlbnQgY2hlY2tzLCBlZmZlY3RpdmVseSBzZXR0aW5nIHRoZSBgdGV4dGAgYXR0cmlidXRlLgogCiBTZXQgdG8gc3RyaW5nIHZhbHVlICJjcmxmIjo6CkBAIC0xODYsOSArMTg4LDEwIEBACiByZWdhcmRsZXNzIG9mIHRoZWlyIGNvbnRlbnQuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgICAgICAgICAgICAgIHRleHQ9YXV0bwogKi50eHQJCXRleHQKLSoudmNwcm9qCWVvbD1jcmxmCi0qLnNoCQllb2w9bGYKKyoudmNwcm9qCXRleHQgZW9sPWNybGYKKyouc2gJCXRleHQgZW9sPWxmCiAqLmpwZwkJLXRleHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xOTgsNyArMjAxLDcgQEAKIAogSWYgeW91IHNpbXBseSB3YW50IHRvIGhhdmUgQ1JMRiBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeQogcmVnYXJkbGVzcyBvZiB0aGUgcmVwb3NpdG9yeSB5b3UgYXJlIHdvcmtpbmcgd2l0aCwgeW91IGNhbiBzZXQgdGhlCi1jb25maWcgdmFyaWFibGUgImNvcmUuYXV0b2NybGYiIHdpdGhvdXQgY2hhbmdpbmcgYW55IGF0dHJpYnV0ZXMuCitjb25maWcgdmFyaWFibGUgImNvcmUuYXV0b2NybGYiIHdpdGhvdXQgdXNpbmcgYW55IGF0dHJpYnV0ZXMuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogW2NvcmVdCkBAIC0zNzQsNiArMzc3LDExIEBACiAJc211ZGdlID0gZ2l0LXA0LWZpbHRlciAtLXNtdWRnZSAlZgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK05vdGUgdGhhdCAiJWYiIGlzIHRoZSBuYW1lIG9mIHRoZSBwYXRoIHRoYXQgaXMgYmVpbmcgd29ya2VkIG9uLiBEZXBlbmRpbmcKK29uIHRoZSB2ZXJzaW9uIHRoYXQgaXMgYmVpbmcgZmlsdGVyZWQsIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgb24gZGlzayBtYXkKK25vdCBleGlzdCwgb3IgbWF5IGhhdmUgZGlmZmVyZW50IGNvbnRlbnRzLiBTbywgc211ZGdlIGFuZCBjbGVhbiBjb21tYW5kcworc2hvdWxkIG5vdCB0cnkgdG8gYWNjZXNzIHRoZSBmaWxlIG9uIGRpc2ssIGJ1dCBvbmx5IGFjdCBhcyBmaWx0ZXJzIG9uIHRoZQorY29udGVudCBwcm92aWRlZCB0byB0aGVtIG9uIHN0YW5kYXJkIGlucHV0LgogCiBJbnRlcmFjdGlvbiBiZXR3ZWVuIGNoZWNraW4vY2hlY2tvdXQgYXR0cmlidXRlcwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KQEAgLTUyNSw2ICs1MzMsOCBAQAogCiAtIGBjc2hhcnBgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgQyMgbGFuZ3VhZ2UuCiAKKy0gYGNzc2Agc3VpdGFibGUgZm9yIGNhc2NhZGluZyBzdHlsZSBzaGVldHMuCisKIC0gYGZvcnRyYW5gIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgRm9ydHJhbiBsYW5ndWFnZS4KIAogLSBgZm91bnRhaW5gIHN1aXRhYmxlIGZvciBGb3VudGFpbiBkb2N1bWVudHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRjb3JlLXR1dG9yaWFsLnR4dAppbmRleCAxNWIzYmZhLi40NTQ2ZmEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0Y29yZS10dXRvcmlhbC50eHQKQEAgLTk0OSw3ICs5NDksNyBAQAogW05PVEVdCiBJZiB0aGVyZSB3ZXJlIG1vcmUgY29tbWl0cyBvbiB0aGUgJ21hc3RlcicgYnJhbmNoIGFmdGVyIHRoZSBtZXJnZSwgdGhlCiBtZXJnZSBjb21taXQgaXRzZWxmIHdvdWxkIG5vdCBiZSBzaG93biBieSAnZ2l0IHNob3ctYnJhbmNoJyBieQotZGVmYXVsdC4gIFlvdSB3b3VsZCBuZWVkIHRvIHByb3ZpZGUgJy0tc3BhcnNlJyBvcHRpb24gdG8gbWFrZSB0aGUKK2RlZmF1bHQuICBZb3Ugd291bGQgbmVlZCB0byBwcm92aWRlIGAtLXNwYXJzZWAgb3B0aW9uIHRvIG1ha2UgdGhlCiBtZXJnZSBjb21taXQgdmlzaWJsZSBpbiB0aGlzIGNhc2UuCiAKIE5vdywgbGV0J3MgcHJldGVuZCB5b3UgYXJlIHRoZSBvbmUgd2hvIGRpZCBhbGwgdGhlIHdvcmsgaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0ZGlmZmNvcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRkaWZmY29yZS50eHQKaW5kZXggYzU3OTU5My4uMDhjZjYyMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRkaWZmY29yZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRkaWZmY29yZS50eHQKQEAgLTI4LDggKzI4LDggQEAKIGZpbGVzOgogCiAgLSAnZ2l0IGRpZmYtaW5kZXgnIGNvbXBhcmVzIGNvbnRlbnRzIG9mIGEgInRyZWUiIG9iamVjdCBhbmQgdGhlCi0gICB3b3JraW5nIGRpcmVjdG9yeSAod2hlbiAnLS1jYWNoZWQnIGZsYWcgaXMgbm90IHVzZWQpIG9yIGEKLSAgICJ0cmVlIiBvYmplY3QgYW5kIHRoZSBpbmRleCBmaWxlICh3aGVuICctLWNhY2hlZCcgZmxhZyBpcworICAgd29ya2luZyBkaXJlY3RvcnkgKHdoZW4gYC0tY2FjaGVkYCBmbGFnIGlzIG5vdCB1c2VkKSBvciBhCisgICAidHJlZSIgb2JqZWN0IGFuZCB0aGUgaW5kZXggZmlsZSAod2hlbiBgLS1jYWNoZWRgIGZsYWcgaXMKICAgIHVzZWQpOwogCiAgLSAnZ2l0IGRpZmYtZmlsZXMnIGNvbXBhcmVzIGNvbnRlbnRzIG9mIHRoZSBpbmRleCBmaWxlIGFuZCB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0aG9va3MudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQKaW5kZXggZDgyZTkxMi4uOTU2NWRjMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQKQEAgLTI0Nyw2ICsyNDcsMTUgQEAKICdnaXQgc2VuZC1wYWNrJyBvbiB0aGUgb3RoZXIgZW5kLCBzbyB5b3UgY2FuIHNpbXBseSBgZWNob2AgbWVzc2FnZXMKIGZvciB0aGUgdXNlci4KIAorVGhlIG51bWJlciBvZiBwdXNoIG9wdGlvbnMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBvZgorYGdpdCBwdXNoIC0tcHVzaC1vcHRpb249Li4uYCBjYW4gYmUgcmVhZCBmcm9tIHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgYEdJVF9QVVNIX09QVElPTl9DT1VOVGAsIGFuZCB0aGUgb3B0aW9ucyB0aGVtc2VsdmVzIGFyZQorZm91bmQgaW4gYEdJVF9QVVNIX09QVElPTl8wYCwgYEdJVF9QVVNIX09QVElPTl8xYCwuLi4KK0lmIGl0IGlzIG5lZ290aWF0ZWQgdG8gbm90IHVzZSB0aGUgcHVzaCBvcHRpb25zIHBoYXNlLCB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIG5vdCBiZSBzZXQuIElmIHRoZSBjbGllbnQgc2VsZWN0cwordG8gdXNlIHB1c2ggb3B0aW9ucywgYnV0IGRvZXNuJ3QgdHJhbnNtaXQgYW55LCB0aGUgY291bnQgdmFyaWFibGUKK3dpbGwgYmUgc2V0IHRvIHplcm8sIGBHSVRfUFVTSF9PUFRJT05fQ09VTlQ9MGAuCisKIFtbdXBkYXRlXV0KIHVwZGF0ZQogfn5+fn5+CkBAIC0zMjIsNiArMzMxLDE1IEBACiBkaXJlY3RvcnkgaW4gR2l0IGRpc3RyaWJ1dGlvbiwgd2hpY2ggaW1wbGVtZW50cyBzZW5kaW5nIGNvbW1pdAogZW1haWxzLgogCitUaGUgbnVtYmVyIG9mIHB1c2ggb3B0aW9ucyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIG9mCitgZ2l0IHB1c2ggLS1wdXNoLW9wdGlvbj0uLi5gIGNhbiBiZSByZWFkIGZyb20gdGhlIGVudmlyb25tZW50Cit2YXJpYWJsZSBgR0lUX1BVU0hfT1BUSU9OX0NPVU5UYCwgYW5kIHRoZSBvcHRpb25zIHRoZW1zZWx2ZXMgYXJlCitmb3VuZCBpbiBgR0lUX1BVU0hfT1BUSU9OXzBgLCBgR0lUX1BVU0hfT1BUSU9OXzFgLC4uLgorSWYgaXQgaXMgbmVnb3RpYXRlZCB0byBub3QgdXNlIHRoZSBwdXNoIG9wdGlvbnMgcGhhc2UsIHRoZQorZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgbm90IGJlIHNldC4gSWYgdGhlIGNsaWVudCBzZWxlY3RzCit0byB1c2UgcHVzaCBvcHRpb25zLCBidXQgZG9lc24ndCB0cmFuc21pdCBhbnksIHRoZSBjb3VudCB2YXJpYWJsZQord2lsbCBiZSBzZXQgdG8gemVybywgYEdJVF9QVVNIX09QVElPTl9DT1VOVD0wYC4KKwogW1twb3N0LXVwZGF0ZV1dCiBwb3N0LXVwZGF0ZQogfn5+fn5+fn5+fn4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0aWdub3JlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0aWdub3JlLnR4dAppbmRleCA0NzM2MjNkLi42MzI2MGYwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGlnbm9yZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRpZ25vcmUudHh0CkBAIC0zOCw3ICszOCw3IEBACiAgKiBQYXR0ZXJucyByZWFkIGZyb20gYCRHSVRfRElSL2luZm8vZXhjbHVkZWAuCiAKICAqIFBhdHRlcm5zIHJlYWQgZnJvbSB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24KLSAgIHZhcmlhYmxlICdjb3JlLmV4Y2x1ZGVzRmlsZScuCisgICB2YXJpYWJsZSBgY29yZS5leGNsdWRlc0ZpbGVgLgogCiBXaGljaCBmaWxlIHRvIHBsYWNlIGEgcGF0dGVybiBpbiBkZXBlbmRzIG9uIGhvdyB0aGUgcGF0dGVybiBpcyBtZWFudCB0bwogYmUgdXNlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0ay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGsudHh0CmluZGV4IDZhZGUwMDIuLmE2OGQ4NjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0ay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRrLnR4dApAQCAtODIsNyArODIsNyBAQAogCiAtLXNpbXBsaWZ5LW1lcmdlczo6CiAKLQlBZGRpdGlvbmFsIG9wdGlvbiB0byAnLS1mdWxsLWhpc3RvcnknIHRvIHJlbW92ZSBzb21lIG5lZWRsZXNzCisJQWRkaXRpb25hbCBvcHRpb24gdG8gYC0tZnVsbC1oaXN0b3J5YCB0byByZW1vdmUgc29tZSBuZWVkbGVzcwogCW1lcmdlcyBmcm9tIHRoZSByZXN1bHRpbmcgaGlzdG9yeSwgYXMgdGhlcmUgYXJlIG5vIHNlbGVjdGVkCiAJY29tbWl0cyBjb250cmlidXRpbmcgdG8gdGhpcyBtZXJnZS4gIChTZWUgIkhpc3RvcnkKIAlzaW1wbGlmaWNhdGlvbiIgaW4gbGlua2dpdDpnaXQtbG9nWzFdIGZvciBhIG1vcmUgZGV0YWlsZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0CmluZGV4IGFjNzBlY2EuLjEwZGNjMDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dApAQCAtMTksNyArMTksNyBAQAogCiBUaGUgZmlsZSBjb250YWlucyBvbmUgc3Vic2VjdGlvbiBwZXIgc3VibW9kdWxlLCBhbmQgdGhlIHN1YnNlY3Rpb24gdmFsdWUKIGlzIHRoZSBuYW1lIG9mIHRoZSBzdWJtb2R1bGUuIFRoZSBuYW1lIGlzIHNldCB0byB0aGUgcGF0aCB3aGVyZSB0aGUKLXN1Ym1vZHVsZSBoYXMgYmVlbiBhZGRlZCB1bmxlc3MgaXQgd2FzIGN1c3RvbWl6ZWQgd2l0aCB0aGUgJy0tbmFtZScKK3N1Ym1vZHVsZSBoYXMgYmVlbiBhZGRlZCB1bmxlc3MgaXQgd2FzIGN1c3RvbWl6ZWQgd2l0aCB0aGUgYC0tbmFtZWAKIG9wdGlvbiBvZiAnZ2l0IHN1Ym1vZHVsZSBhZGQnLiBFYWNoIHN1Ym1vZHVsZSBzZWN0aW9uIGFsc28gY29udGFpbnMgdGhlCiBmb2xsb3dpbmcgcmVxdWlyZWQga2V5czoKIApAQCAtNzksNiArNzksMTEgQEAKIAkiLS1pZ25vcmUtc3VibW9kdWxlIiBvcHRpb24uIFRoZSAnZ2l0IHN1Ym1vZHVsZScgY29tbWFuZHMgYXJlIG5vdAogCWFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4KIAorc3VibW9kdWxlLjxuYW1lPi5zaGFsbG93OjoKKwlXaGVuIHNldCB0byB0cnVlLCBhIGNsb25lIG9mIHRoaXMgc3VibW9kdWxlIHdpbGwgYmUgcGVyZm9ybWVkIGFzIGEKKwlzaGFsbG93IGNsb25lIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5IGFza3MgZm9yIGEgbm9uLXNoYWxsb3cKKwljbG9uZS4KKwogCiBFWEFNUExFUwogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0cmVtb3RlLWhlbHBlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRyZW1vdGUtaGVscGVycy50eHQKaW5kZXggNzhlMGIyNy4uYTRkZTUwYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRyZW1vdGUtaGVscGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRyZW1vdGUtaGVscGVycy50eHQKQEAgLTQzLDcgKzQzLDcgQEAKIGl0IGlzIGVpdGhlciB0aGUgbmFtZSBvZiBhIGNvbmZpZ3VyZWQgcmVtb3RlIG9yIGEgVVJMLiBUaGUgc2Vjb25kCiBhcmd1bWVudCBzcGVjaWZpZXMgYSBVUkw7IGl0IGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0KICc8dHJhbnNwb3J0PjovLzxhZGRyZXNzPicsIGJ1dCBhbnkgYXJiaXRyYXJ5IHN0cmluZyBpcyBwb3NzaWJsZS4KLVRoZSAnR0lUX0RJUicgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHVwIGZvciB0aGUgcmVtb3RlIGhlbHBlcgorVGhlIGBHSVRfRElSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdXAgZm9yIHRoZSByZW1vdGUgaGVscGVyCiBhbmQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIHN0b3JlIGFkZGl0aW9uYWwgZGF0YSBvciBmcm9tCiB3aGljaCBkaXJlY3RvcnkgdG8gaW52b2tlIGF1eGlsaWFyeSBHaXQgY29tbWFuZHMuCiAKQEAgLTYxLDEwICs2MSwxMCBAQAogdGhlIGZpcnN0IGFyZ3VtZW50IGlzICc8YWRkcmVzcz4nLCBhbmQgaWYgaXQgaXMgZW5jb3VudGVyZWQgaW4gYQogY29uZmlndXJlZCByZW1vdGUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGF0IHJlbW90ZS4KIAotQWRkaXRpb25hbGx5LCB3aGVuIGEgY29uZmlndXJlZCByZW1vdGUgaGFzICdyZW1vdGUuPG5hbWU+LnZjcycgc2V0IHRvCitBZGRpdGlvbmFsbHksIHdoZW4gYSBjb25maWd1cmVkIHJlbW90ZSBoYXMgYHJlbW90ZS48bmFtZT4udmNzYCBzZXQgdG8KICc8dHJhbnNwb3J0PicsIEdpdCBleHBsaWNpdGx5IGludm9rZXMgJ2dpdCByZW1vdGUtPHRyYW5zcG9ydD4nIHdpdGgKICc8bmFtZT4nIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gSWYgc2V0LCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCi0ncmVtb3RlLjxuYW1lPi51cmwnOyBvdGhlcndpc2UsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgb21pdHRlZC4KK2ByZW1vdGUuPG5hbWU+LnVybGA7IG90aGVyd2lzZSwgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBvbWl0dGVkLgogCiBJTlBVVCBGT1JNQVQKIC0tLS0tLS0tLS0tLQpAQCAtMjEwLDE3ICsyMTAsMTcgQEAKICdleHBvcnQtbWFya3MnIDxmaWxlPjo6CiAJVGhpcyBtb2RpZmllcyB0aGUgJ2V4cG9ydCcgY2FwYWJpbGl0eSwgaW5zdHJ1Y3RpbmcgR2l0IHRvIGR1bXAgdGhlCiAJaW50ZXJuYWwgbWFya3MgdGFibGUgdG8gPGZpbGU+IHdoZW4gY29tcGxldGUuIEZvciBkZXRhaWxzLAotCXJlYWQgdXAgb24gJy0tZXhwb3J0LW1hcmtzPTxmaWxlPicgaW4gbGlua2dpdDpnaXQtZmFzdC1leHBvcnRbMV0uCisJcmVhZCB1cCBvbiBgLS1leHBvcnQtbWFya3M9PGZpbGU+YCBpbiBsaW5rZ2l0OmdpdC1mYXN0LWV4cG9ydFsxXS4KIAogJ2ltcG9ydC1tYXJrcycgPGZpbGU+OjoKIAlUaGlzIG1vZGlmaWVzIHRoZSAnZXhwb3J0JyBjYXBhYmlsaXR5LCBpbnN0cnVjdGluZyBHaXQgdG8gbG9hZCB0aGUKIAltYXJrcyBzcGVjaWZpZWQgaW4gPGZpbGU+IGJlZm9yZSBwcm9jZXNzaW5nIGFueSBpbnB1dC4gRm9yIGRldGFpbHMsCi0JcmVhZCB1cCBvbiAnLS1pbXBvcnQtbWFya3M9PGZpbGU+JyBpbiBsaW5rZ2l0OmdpdC1mYXN0LWV4cG9ydFsxXS4KKwlyZWFkIHVwIG9uIGAtLWltcG9ydC1tYXJrcz08ZmlsZT5gIGluIGxpbmtnaXQ6Z2l0LWZhc3QtZXhwb3J0WzFdLgogCiAnc2lnbmVkLXRhZ3MnOjoKIAlUaGlzIG1vZGlmaWVzIHRoZSAnZXhwb3J0JyBjYXBhYmlsaXR5LCBpbnN0cnVjdGluZyBHaXQgdG8gcGFzcwotCSctLXNpZ25lZC10YWdzPXZlcmJhdGltJyB0byBsaW5rZ2l0OmdpdC1mYXN0LWV4cG9ydFsxXS4gIEluIHRoZQotCWFic2VuY2Ugb2YgdGhpcyBjYXBhYmlsaXR5LCBHaXQgd2lsbCB1c2UgJy0tc2lnbmVkLXRhZ3M9d2Fybi1zdHJpcCcuCisJYC0tc2lnbmVkLXRhZ3M9dmVyYmF0aW1gIHRvIGxpbmtnaXQ6Z2l0LWZhc3QtZXhwb3J0WzFdLiAgSW4gdGhlCisJYWJzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHksIEdpdCB3aWxsIHVzZSBgLS1zaWduZWQtdGFncz13YXJuLXN0cmlwYC4KIAogCiAKQEAgLTI5OCw3ICsyOTgsNyBAQAogCWlzIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSkuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHdvdWxkCiAJYmUgdHdvIGJhdGNoZXMgb2YgJ3B1c2gnLCB0aGUgZmlyc3QgYXNraW5nIHRoZSByZW1vdGUtaGVscGVyCiAJdG8gcHVzaCB0aGUgbG9jYWwgcmVmICdtYXN0ZXInIHRvIHRoZSByZW1vdGUgcmVmICdtYXN0ZXInIGFuZAotCXRoZSBsb2NhbCAnSEVBRCcgdG8gdGhlIHJlbW90ZSAnYnJhbmNoJywgYW5kIHRoZSBzZWNvbmQKKwl0aGUgbG9jYWwgYEhFQURgIHRvIHRoZSByZW1vdGUgJ2JyYW5jaCcsIGFuZCB0aGUgc2Vjb25kCiAJYXNraW5nIHRvIHB1c2ggcmVmICdmb28nIHRvIHJlZiAnYmFyJyAoZm9yY2VkIHVwZGF0ZSByZXF1ZXN0ZWQKIAlieSB0aGUgJysnKS4KICsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0d2ViLmNvbmYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR3ZWIuY29uZi50eHQKaW5kZXggOGE0MjI3MC4uYTc5ZTM1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXR3ZWIuY29uZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR3ZWIuY29uZi50eHQKQEAgLTM3Niw3ICszNzYsNyBAQAogCU5hbWUgb2YgeW91ciBzaXRlIG9yIG9yZ2FuaXphdGlvbiwgdG8gYXBwZWFyIGluIHBhZ2UgdGl0bGVzLiAgU2V0IGl0CiAJdG8gc29tZXRoaW5nIGRlc2NyaXB0aXZlIGZvciBjbGVhcmVyIGJvb2ttYXJrcyBldGMuICBJZiB0aGlzIHZhcmlhYmxlCiAJaXMgbm90IHNldCBvciBpcywgdGhlbiBnaXR3ZWIgdXNlcyB0aGUgdmFsdWUgb2YgdGhlIGBTRVJWRVJfTkFNRWAKLQlDR0kgZW52aXJvbm1lbnQgdmFyaWFibGUsIHNldHRpbmcgc2l0ZSBuYW1lIHRvICIkU0VSVkVSX05BTUUgR2l0IiwKKwlgQ0dJYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgc2V0dGluZyBzaXRlIG5hbWUgdG8gIiRTRVJWRVJfTkFNRSBHaXQiLAogCW9yICJVbnRpdGxlZCBHaXQiIGlmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCAoZS5nLiBpZiBydW5uaW5nIGdpdHdlYgogCWFzIHN0YW5kYWxvbmUgc2NyaXB0KS4KICsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0d2ViLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0d2ViLnR4dAppbmRleCBjZDljODk1Li45NjE1NmU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdHdlYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR3ZWIudHh0CkBAIC0yMDYsOCArMjA2LDggQEAKIFBlci1yZXBvc2l0b3J5IGdpdHdlYiBjb25maWd1cmF0aW9uCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogWW91IGNhbiBjb25maWd1cmUgaW5kaXZpZHVhbCByZXBvc2l0b3JpZXMgc2hvd24gaW4gZ2l0d2ViIGJ5IGNyZWF0aW5nIGZpbGUKLWluIHRoZSAnR0lUX0RJUicgb2YgR2l0IHJlcG9zaXRvcnksIG9yIGJ5IHNldHRpbmcgc29tZSByZXBvIGNvbmZpZ3VyYXRpb24KLXZhcmlhYmxlIChpbiAnR0lUX0RJUi9jb25maWcnLCBzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KK2luIHRoZSBgR0lUX0RJUmAgb2YgR2l0IHJlcG9zaXRvcnksIG9yIGJ5IHNldHRpbmcgc29tZSByZXBvIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIChpbiBgR0lUX0RJUi9jb25maWdgLCBzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KIAogWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBmaWxlcyBpbiByZXBvc2l0b3J5OgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL25ldy1jb21tYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vbmV3LWNvbW1hbmQudHh0CmluZGV4IDZkNzcyYmQuLjE1YTRjODAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaG93dG8vbmV3LWNvbW1hbmQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vbmV3LWNvbW1hbmQudHh0CkBAIC05NCw3ICs5NCw3IEBACiA2LiBUaGVyZSBpcyBhIGZpbGUgY29tbWFuZC1saXN0LnR4dCBpbiB0aGUgZGlzdHJpYnV0aW9uIG1haW4gZGlyZWN0b3J5CiB0aGF0IGNhdGVnb3JpemVzIGNvbW1hbmRzIGJ5IHR5cGUsIHNvIHRoZXkgY2FuIGJlIGxpc3RlZCBpbiBhcHByb3ByaWF0ZQogc3Vic2VjdGlvbnMgaW4gdGhlIGRvY3VtZW50YXRpb24ncyBzdW1tYXJ5IGNvbW1hbmQgbGlzdC4gIEFkZCBhbiBlbnRyeQotZm9yIHlvdXJzLiAgVG8gdW5kZXJzdGFuZCB0aGUgY2F0ZWdvcmllcywgbG9vayBhdCBnaXQtY29tbWFuZHMudHh0Citmb3IgeW91cnMuICBUbyB1bmRlcnN0YW5kIHRoZSBjYXRlZ29yaWVzLCBsb29rIGF0IGNvbW1hbmQtbGlzdC50eHQKIGluIHRoZSBtYWluIGRpcmVjdG9yeS4gIElmIHRoZSBuZXcgY29tbWFuZCBpcyBwYXJ0IG9mIHRoZSB0eXBpY2FsIEdpdAogd29ya2Zsb3cgYW5kIHlvdSBiZWxpZXZlIGl0IGNvbW1vbiBlbm91Z2ggdG8gYmUgbWVudGlvbmVkIGluICdnaXQgaGVscCcsCiBtYXAgdGhpcyBjb21tYW5kIHRvIGEgY29tbW9uIGdyb3VwIGluIHRoZSBjb2x1bW4gW2NvbW1vbl0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLWNvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL21lcmdlLWNvbmZpZy50eHQKaW5kZXggMDAyY2E1OC4uZGYzZWEzNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1jb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2UtY29uZmlnLnR4dApAQCAtNjEsNyArNjEsNyBAQAogCW1lc3NhZ2UgaWYgY29uZmxpY3RzIHdlcmUgZGV0ZWN0ZWQuIExldmVsIDEgb3V0cHV0cyBvbmx5CiAJY29uZmxpY3RzLCAyIG91dHB1dHMgY29uZmxpY3RzIGFuZCBmaWxlIGNoYW5nZXMuICBMZXZlbCA1IGFuZAogCWFib3ZlIG91dHB1dHMgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgVGhlIGRlZmF1bHQgaXMgbGV2ZWwgMi4KLQlDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9NRVJHRV9WRVJCT1NJVFknIGVudmlyb25tZW50IHZhcmlhYmxlLgorCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX01FUkdFX1ZFUkJPU0lUWWAgZW52aXJvbm1lbnQgdmFyaWFibGUuCiAKIG1lcmdlLjxkcml2ZXI+Lm5hbWU6OgogCURlZmluZXMgYSBodW1hbi1yZWFkYWJsZSBuYW1lIGZvciBhIGN1c3RvbSBsb3ctbGV2ZWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKaW5kZXggMjliMTliOS4uYjk1ZDY3ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKQEAgLTE0Nyw4ICsxNDcsMTQgQEAKICAgIlUiIGZvciBhIGdvb2Qgc2lnbmF0dXJlIHdpdGggdW5rbm93biB2YWxpZGl0eSBhbmQgIk4iIGZvciBubyBzaWduYXR1cmUKIC0gJyVHUyc6IHNob3cgdGhlIG5hbWUgb2YgdGhlIHNpZ25lciBmb3IgYSBzaWduZWQgY29tbWl0CiAtICclR0snOiBzaG93IHRoZSBrZXkgdXNlZCB0byBzaWduIGEgc2lnbmVkIGNvbW1pdAotLSAnJWdEJzogcmVmbG9nIHNlbGVjdG9yLCBlLmcuLCBgcmVmcy9zdGFzaEB7MX1gCi0tICclZ2QnOiBzaG9ydGVuZWQgcmVmbG9nIHNlbGVjdG9yLCBlLmcuLCBgc3Rhc2hAezF9YAorLSAnJWdEJzogcmVmbG9nIHNlbGVjdG9yLCBlLmcuLCBgcmVmcy9zdGFzaEB7MX1gIG9yCisgIGByZWZzL3N0YXNoQHsyIG1pbnV0ZXMgYWdvYH07IHRoZSBmb3JtYXQgZm9sbG93cyB0aGUgcnVsZXMgZGVzY3JpYmVkCisgIGZvciB0aGUgYC1nYCBvcHRpb24uIFRoZSBwb3J0aW9uIGJlZm9yZSB0aGUgYEBgIGlzIHRoZSByZWZuYW1lIGFzCisgIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgKHNvIGBnaXQgbG9nIC1nIHJlZnMvaGVhZHMvbWFzdGVyYCB3b3VsZAorICB5aWVsZCBgcmVmcy9oZWFkcy9tYXN0ZXJAezB9YCkuCistICclZ2QnOiBzaG9ydGVuZWQgcmVmbG9nIHNlbGVjdG9yOyBzYW1lIGFzIGAlZ0RgLCBidXQgdGhlIHJlZm5hbWUKKyAgcG9ydGlvbiBpcyBzaG9ydGVuZWQgZm9yIGh1bWFuIHJlYWRhYmlsaXR5IChzbyBgcmVmcy9oZWFkcy9tYXN0ZXJgCisgIGJlY29tZXMganVzdCBgbWFzdGVyYCkuCiAtICclZ24nOiByZWZsb2cgaWRlbnRpdHkgbmFtZQogLSAnJWdOJzogcmVmbG9nIGlkZW50aXR5IG5hbWUgKHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZQogICBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKaW5kZXggNmM2NzE4Mi4uZTQ0ZmM4ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKQEAgLTI2LDcgKzI2LDcgQEAKIC0tbm8tYWJicmV2LWNvbW1pdDo6CiAJU2hvdyB0aGUgZnVsbCA0MC1ieXRlIGhleGFkZWNpbWFsIGNvbW1pdCBvYmplY3QgbmFtZS4gVGhpcyBuZWdhdGVzCiAJYC0tYWJicmV2LWNvbW1pdGAgYW5kIHRob3NlIG9wdGlvbnMgd2hpY2ggaW1wbHkgaXQgc3VjaCBhcwotCSItLW9uZWxpbmUiLiBJdCBhbHNvIG92ZXJyaWRlcyB0aGUgJ2xvZy5hYmJyZXZDb21taXQnIHZhcmlhYmxlLgorCSItLW9uZWxpbmUiLiBJdCBhbHNvIG92ZXJyaWRlcyB0aGUgYGxvZy5hYmJyZXZDb21taXRgIHZhcmlhYmxlLgogCiAtLW9uZWxpbmU6OgogCVRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yICItLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCIKQEAgLTY1LDcgKzY1LDcgQEAKIAlvbiB0aGUgY29tbWFuZCBsaW5lLgogKwogQnkgZGVmYXVsdCwgdGhlIG5vdGVzIHNob3duIGFyZSBmcm9tIHRoZSBub3RlcyByZWZzIGxpc3RlZCBpbiB0aGUKLSdjb3JlLm5vdGVzUmVmJyBhbmQgJ25vdGVzLmRpc3BsYXlSZWYnIHZhcmlhYmxlcyAob3IgY29ycmVzcG9uZGluZworYGNvcmUubm90ZXNSZWZgIGFuZCBgbm90ZXMuZGlzcGxheVJlZmAgdmFyaWFibGVzIChvciBjb3JyZXNwb25kaW5nCiBlbnZpcm9ubWVudCBvdmVycmlkZXMpLiBTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBtb3JlIGRldGFpbHMuCiArCiBXaXRoIGFuIG9wdGlvbmFsICc8dHJlZWlzaD4nIGFyZ3VtZW50LCB1c2UgdGhlIHRyZWVpc2ggdG8gZmluZCB0aGUgbm90ZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CmluZGV4IDRmMDA5ZDQuLmE3NzljOWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApAQCAtMTkzLDcgKzE5Myw3IEBACiAKIC0tc3RkaW46OgogCUluIGFkZGl0aW9uIHRvIHRoZSAnPGNvbW1pdD4nIGxpc3RlZCBvbiB0aGUgY29tbWFuZAotCWxpbmUsIHJlYWQgdGhlbSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gSWYgYSAnLS0nIHNlcGFyYXRvciBpcworCWxpbmUsIHJlYWQgdGhlbSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gSWYgYSBgLS1gIHNlcGFyYXRvciBpcwogCXNlZW4sIHN0b3AgcmVhZGluZyBjb21taXRzIGFuZCBzdGFydCByZWFkaW5nIHBhdGhzIHRvIGxpbWl0IHRoZQogCXJlc3VsdC4KIApAQCAtMjUyLDEwICsyNTIsMjUgQEAKICsKIFdpdGggYC0tcHJldHR5YCBmb3JtYXQgb3RoZXIgdGhhbiBgb25lbGluZWAgKGZvciBvYnZpb3VzIHJlYXNvbnMpLAogdGhpcyBjYXVzZXMgdGhlIG91dHB1dCB0byBoYXZlIHR3byBleHRyYSBsaW5lcyBvZiBpbmZvcm1hdGlvbgotdGFrZW4gZnJvbSB0aGUgcmVmbG9nLiAgQnkgZGVmYXVsdCwgJ2NvbW1pdEBce050aH0nIG5vdGF0aW9uIGlzCi11c2VkIGluIHRoZSBvdXRwdXQuICBXaGVuIHRoZSBzdGFydGluZyBjb21taXQgaXMgc3BlY2lmaWVkIGFzCi0nY29tbWl0QFx7bm93fScsIG91dHB1dCBhbHNvIHVzZXMgJ2NvbW1pdEBce3RpbWVzdGFtcH0nIG5vdGF0aW9uCi1pbnN0ZWFkLiAgVW5kZXIgYC0tcHJldHR5PW9uZWxpbmVgLCB0aGUgY29tbWl0IG1lc3NhZ2UgaXMKK3Rha2VuIGZyb20gdGhlIHJlZmxvZy4gIFRoZSByZWZsb2cgZGVzaWduYXRvciBpbiB0aGUgb3V0cHV0IG1heSBiZSBzaG93bgorYXMgYHJlZkB7TnRofWAgKHdoZXJlIGBOdGhgIGlzIHRoZSByZXZlcnNlLWNocm9ub2xvZ2ljYWwgaW5kZXggaW4gdGhlCityZWZsb2cpIG9yIGFzIGByZWZAe3RpbWVzdGFtcH1gICh3aXRoIHRoZSB0aW1lc3RhbXAgZm9yIHRoYXQgZW50cnkpLAorZGVwZW5kaW5nIG9uIGEgZmV3IHJ1bGVzOgorKworLS0KKzEuIElmIHRoZSBzdGFydGluZyBwb2ludCBpcyBzcGVjaWZpZWQgYXMgYHJlZkB7TnRofWAsIHNob3cgdGhlIGluZGV4Citmb3JtYXQuCisrCisyLiBJZiB0aGUgc3RhcnRpbmcgcG9pbnQgd2FzIHNwZWNpZmllZCBhcyBgcmVmQHtub3d9YCwgc2hvdyB0aGUKK3RpbWVzdGFtcCBmb3JtYXQuCisrCiszLiBJZiBuZWl0aGVyIHdhcyB1c2VkLCBidXQgYC0tZGF0ZWAgd2FzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIHNob3cKK3RoZSB0aW1lc3RhbXAgaW4gdGhlIGZvcm1hdCByZXF1ZXN0ZWQgYnkgYC0tZGF0ZWAuCisrCis0LiBPdGhlcndpc2UsIHNob3cgdGhlIGluZGV4IGZvcm1hdC4KKy0tCisrCitVbmRlciBgLS1wcmV0dHk9b25lbGluZWAsIHRoZSBjb21taXQgbWVzc2FnZSBpcwogcHJlZml4ZWQgd2l0aCB0aGlzIGluZm9ybWF0aW9uIG9uIHRoZSBzYW1lIGxpbmUuCiBUaGlzIG9wdGlvbiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1yZXZlcnNlYC4KIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LXJlZmxvZ1sxXS4KQEAgLTI3NCw2ICsyODksMTAgQEAKIAlUcnkgdG8gc3BlZWQgdXAgdGhlIHRyYXZlcnNhbCB1c2luZyB0aGUgcGFjayBiaXRtYXAgaW5kZXggKGlmCiAJb25lIGlzIGF2YWlsYWJsZSkuIE5vdGUgdGhhdCB3aGVuIHRyYXZlcnNpbmcgd2l0aCBgLS1vYmplY3RzYCwKIAl0cmVlcyBhbmQgYmxvYnMgd2lsbCBub3QgaGF2ZSB0aGVpciBhc3NvY2lhdGVkIHBhdGggcHJpbnRlZC4KKworLS1wcm9ncmVzcz08aGVhZGVyPjo6CisJU2hvdyBwcm9ncmVzcyByZXBvcnRzIG9uIHN0ZGVyciBhcyBvYmplY3RzIGFyZSBjb25zaWRlcmVkLiBUaGUKKwlgPGhlYWRlcj5gIHRleHQgd2lsbCBiZSBwcmludGVkIHdpdGggZWFjaCBwcm9ncmVzcyB1cGRhdGUuCiBlbmRpZjo6Z2l0LXJldi1saXN0W10KIAogLS0KQEAgLTcxMCw4ICs3MjksOCBAQAogCWBpc28tbG9jYWxgKSwgdGhlIHVzZXIncyBsb2NhbCB0aW1lIHpvbmUgaXMgdXNlZCBpbnN0ZWFkLgogKwogYC0tZGF0ZT1yZWxhdGl2ZWAgc2hvd3MgZGF0ZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZSwKLWUuZy4gYGAyIGhvdXJzIGFnbycnLiBUaGUgYC1sb2NhbGAgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGgKLWAtLXJhd2Agb3IgYC0tcmVsYXRpdmVgLgorZS5nLiBgYDIgaG91cnMgYWdvJycuIFRoZSBgLWxvY2FsYCBvcHRpb24gaGFzIG5vIGVmZmVjdCBmb3IKK2AtLWRhdGU9cmVsYXRpdmVgLgogKwogYC0tZGF0ZT1sb2NhbGAgaXMgYW4gYWxpYXMgZm9yIGAtLWRhdGU9ZGVmYXVsdC1sb2NhbGAuCiArCkBAIC03MzEsNyArNzUwLDE4IEBACiArCiBgLS1kYXRlPXNob3J0YCBzaG93cyBvbmx5IHRoZSBkYXRlLCBidXQgbm90IHRoZSB0aW1lLCBpbiBgWVlZWS1NTS1ERGAgZm9ybWF0LgogKwotYC0tZGF0ZT1yYXdgIHNob3dzIHRoZSBkYXRlIGluIHRoZSBpbnRlcm5hbCByYXcgR2l0IGZvcm1hdCBgJXMgJXpgIGZvcm1hdC4KK2AtLWRhdGU9cmF3YCBzaG93cyB0aGUgZGF0ZSBhcyBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAoMTk3MC0wMS0wMQorMDA6MDA6MDAgVVRDKSwgZm9sbG93ZWQgYnkgYSBzcGFjZSwgYW5kIHRoZW4gdGhlIHRpbWV6b25lIGFzIGFuIG9mZnNldAorZnJvbSBVVEMgKGEgYCtgIG9yIGAtYCB3aXRoIGZvdXIgZGlnaXRzOyB0aGUgZmlyc3QgdHdvIGFyZSBob3VycywgYW5kCit0aGUgc2Vjb25kIHR3byBhcmUgbWludXRlcykuIEkuZS4sIGFzIGlmIHRoZSB0aW1lc3RhbXAgd2VyZSBmb3JtYXR0ZWQKK3dpdGggYHN0cmZ0aW1lKCIlcyAleiIpYCkuCitOb3RlIHRoYXQgdGhlIGAtbG9jYWxgIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIHNlY29uZHMtc2luY2UtZXBvY2gKK3ZhbHVlICh3aGljaCBpcyBhbHdheXMgbWVhc3VyZWQgaW4gVVRDKSwgYnV0IGRvZXMgc3dpdGNoIHRoZSBhY2NvbXBhbnlpbmcKK3RpbWV6b25lIHZhbHVlLgorKworYC0tZGF0ZT11bml4YCBzaG93cyB0aGUgZGF0ZSBhcyBhIFVuaXggZXBvY2ggdGltZXN0YW1wIChzZWNvbmRzIHNpbmNlCisxOTcwKS4gIEFzIHdpdGggYC0tcmF3YCwgdGhpcyBpcyBhbHdheXMgaW4gVVRDIGFuZCB0aGVyZWZvcmUgYC1sb2NhbGAKK2hhcyBubyBlZmZlY3QuCiArCiBgLS1kYXRlPWZvcm1hdDouLi5gIGZlZWRzIHRoZSBmb3JtYXQgYC4uLmAgdG8geW91ciBzeXN0ZW0gYHN0cmZ0aW1lYC4KIFVzZSBgLS1kYXRlPWZvcm1hdDolY2AgdG8gc2hvdyB0aGUgZGF0ZSBpbiB5b3VyIHN5c3RlbSBsb2NhbGUncwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0CmluZGV4IDE5MzE0ZTMuLmFiYWUzNjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmV2aXNpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3JldmlzaW9ucy50eHQKQEAgLTI4LDggKzI4LDggQEAKICAgZmlyc3QgbWF0Y2ggaW4gdGhlIGZvbGxvd2luZyBydWxlczoKIAogICAuIElmICckR0lUX0RJUi88cmVmbmFtZT4nIGV4aXN0cywgdGhhdCBpcyB3aGF0IHlvdSBtZWFuICh0aGlzIGlzIHVzdWFsbHkKLSAgICB1c2VmdWwgb25seSBmb3IgJ0hFQUQnLCAnRkVUQ0hfSEVBRCcsICdPUklHX0hFQUQnLCAnTUVSR0VfSEVBRCcKLSAgICBhbmQgJ0NIRVJSWV9QSUNLX0hFQUQnKTsKKyAgICB1c2VmdWwgb25seSBmb3IgYEhFQURgLCBgRkVUQ0hfSEVBRGAsIGBPUklHX0hFQURgLCBgTUVSR0VfSEVBRGAKKyAgICBhbmQgYENIRVJSWV9QSUNLX0hFQURgKTsKIAogICAuIG90aGVyd2lzZSwgJ3JlZnMvPHJlZm5hbWU+JyBpZiBpdCBleGlzdHM7CiAKQEAgLTQxLDE2ICs0MSwxNiBAQAogCiAgIC4gb3RoZXJ3aXNlLCAncmVmcy9yZW1vdGVzLzxyZWZuYW1lPi9IRUFEJyBpZiBpdCBleGlzdHMuCiArCi0nSEVBRCcgbmFtZXMgdGhlIGNvbW1pdCBvbiB3aGljaCB5b3UgYmFzZWQgdGhlIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KLSdGRVRDSF9IRUFEJyByZWNvcmRzIHRoZSBicmFuY2ggd2hpY2ggeW91IGZldGNoZWQgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5CitgSEVBRGAgbmFtZXMgdGhlIGNvbW1pdCBvbiB3aGljaCB5b3UgYmFzZWQgdGhlIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KK2BGRVRDSF9IRUFEYCByZWNvcmRzIHRoZSBicmFuY2ggd2hpY2ggeW91IGZldGNoZWQgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5CiB3aXRoIHlvdXIgbGFzdCBgZ2l0IGZldGNoYCBpbnZvY2F0aW9uLgotJ09SSUdfSEVBRCcgaXMgY3JlYXRlZCBieSBjb21tYW5kcyB0aGF0IG1vdmUgeW91ciAnSEVBRCcgaW4gYSBkcmFzdGljCi13YXksIHRvIHJlY29yZCB0aGUgcG9zaXRpb24gb2YgdGhlICdIRUFEJyBiZWZvcmUgdGhlaXIgb3BlcmF0aW9uLCBzbyB0aGF0CitgT1JJR19IRUFEYCBpcyBjcmVhdGVkIGJ5IGNvbW1hbmRzIHRoYXQgbW92ZSB5b3VyIGBIRUFEYCBpbiBhIGRyYXN0aWMKK3dheSwgdG8gcmVjb3JkIHRoZSBwb3NpdGlvbiBvZiB0aGUgYEhFQURgIGJlZm9yZSB0aGVpciBvcGVyYXRpb24sIHNvIHRoYXQKIHlvdSBjYW4gZWFzaWx5IGNoYW5nZSB0aGUgdGlwIG9mIHRoZSBicmFuY2ggYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIHlvdSByYW4KIHRoZW0uCi0nTUVSR0VfSEVBRCcgcmVjb3JkcyB0aGUgY29tbWl0KHMpIHdoaWNoIHlvdSBhcmUgbWVyZ2luZyBpbnRvIHlvdXIgYnJhbmNoCitgTUVSR0VfSEVBRGAgcmVjb3JkcyB0aGUgY29tbWl0KHMpIHdoaWNoIHlvdSBhcmUgbWVyZ2luZyBpbnRvIHlvdXIgYnJhbmNoCiB3aGVuIHlvdSBydW4gYGdpdCBtZXJnZWAuCi0nQ0hFUlJZX1BJQ0tfSEVBRCcgcmVjb3JkcyB0aGUgY29tbWl0IHdoaWNoIHlvdSBhcmUgY2hlcnJ5LXBpY2tpbmcKK2BDSEVSUllfUElDS19IRUFEYCByZWNvcmRzIHRoZSBjb21taXQgd2hpY2ggeW91IGFyZSBjaGVycnktcGlja2luZwogd2hlbiB5b3UgcnVuIGBnaXQgY2hlcnJ5LXBpY2tgLgogKwogTm90ZSB0aGF0IGFueSBvZiB0aGUgJ3JlZnMvKicgY2FzZXMgYWJvdmUgbWF5IGNvbWUgZWl0aGVyIGZyb20KQEAgLTU5LDcgKzU5LDcgQEAKIHNvbWUgb3V0cHV0IHByb2Nlc3NpbmcgbWF5IGFzc3VtZSByZWYgbmFtZXMgaW4gVVRGLTguCiAKICdAJzo6Ci0gICdAJyBhbG9uZSBpcyBhIHNob3J0Y3V0IGZvciAnSEVBRCcuCisgICdAJyBhbG9uZSBpcyBhIHNob3J0Y3V0IGZvciBgSEVBRGAuCiAKICc8cmVmbmFtZT5AezxkYXRlPn0nLCBlLmcuICdtYXN0ZXJAXHt5ZXN0ZXJkYXlcfScsICdIRUFEQHs1IG1pbnV0ZXMgYWdvfSc6OgogICBBIHJlZiBmb2xsb3dlZCBieSB0aGUgc3VmZml4ICdAJyB3aXRoIGEgZGF0ZSBzcGVjaWZpY2F0aW9uCkBAIC03MSw3ICs3MSw3IEBACiAgIGV4aXN0aW5nIGxvZyAoJyRHSVRfRElSL2xvZ3MvPHJlZj4nKS4gTm90ZSB0aGF0IHRoaXMgbG9va3MgdXAgdGhlIHN0YXRlCiAgIG9mIHlvdXIgKmxvY2FsKiByZWYgYXQgYSBnaXZlbiB0aW1lOyBlLmcuLCB3aGF0IHdhcyBpbiB5b3VyIGxvY2FsCiAgICdtYXN0ZXInIGJyYW5jaCBsYXN0IHdlZWsuIElmIHlvdSB3YW50IHRvIGxvb2sgYXQgY29tbWl0cyBtYWRlIGR1cmluZwotICBjZXJ0YWluIHRpbWVzLCBzZWUgJy0tc2luY2UnIGFuZCAnLS11bnRpbCcuCisgIGNlcnRhaW4gdGltZXMsIHNlZSBgLS1zaW5jZWAgYW5kIGAtLXVudGlsYC4KIAogJzxyZWZuYW1lPkB7PG4+fScsIGUuZy4gJ21hc3RlckBcezFcfSc6OgogICBBIHJlZiBmb2xsb3dlZCBieSB0aGUgc3VmZml4ICdAJyB3aXRoIGFuIG9yZGluYWwgc3BlY2lmaWNhdGlvbgpAQCAtMTAxLDcgKzEwMSw3IEBACiAnPGJyYW5jaG5hbWU+QFx7cHVzaFx9JywgZS5nLiAnbWFzdGVyQFx7cHVzaFx9JywgJ0Bce3B1c2hcfSc6OgogICBUaGUgc3VmZml4ICdAXHtwdXNofScgcmVwb3J0cyB0aGUgYnJhbmNoICJ3aGVyZSB3ZSB3b3VsZCBwdXNoIHRvIiBpZgogICBgZ2l0IHB1c2hgIHdlcmUgcnVuIHdoaWxlIGBicmFuY2huYW1lYCB3YXMgY2hlY2tlZCBvdXQgKG9yIHRoZSBjdXJyZW50Ci0gICdIRUFEJyBpZiBubyBicmFuY2huYW1lIGlzIHNwZWNpZmllZCkuIFNpbmNlIG91ciBwdXNoIGRlc3RpbmF0aW9uIGlzCisgIGBIRUFEYCBpZiBubyBicmFuY2huYW1lIGlzIHNwZWNpZmllZCkuIFNpbmNlIG91ciBwdXNoIGRlc3RpbmF0aW9uIGlzCiAgIGluIGEgcmVtb3RlIHJlcG9zaXRvcnksIG9mIGNvdXJzZSwgd2UgcmVwb3J0IHRoZSBsb2NhbCB0cmFja2luZyBicmFuY2gKICAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0IGJyYW5jaCAoaS5lLiwgc29tZXRoaW5nIGluICdyZWZzL3JlbW90ZXMvJykuCiArCkBAIC0yODMsMTIgKzI4MywxMiBAQAogJzxyZXYxPi4uPHJldjI+Jzo6CiAJSW5jbHVkZSBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIDxyZXYyPiBidXQgZXhjbHVkZQogCXRob3NlIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIDxyZXYxPi4gIFdoZW4gZWl0aGVyIDxyZXYxPiBvcgotCTxyZXYyPiBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAnSEVBRCcuCisJPHJldjI+IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBIRUFEYC4KIAogJzxyZXYxPlwuLi48cmV2Mj4nOjoKIAlJbmNsdWRlIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gZWl0aGVyIDxyZXYxPiBvcgogCTxyZXYyPiBidXQgZXhjbHVkZSB0aG9zZSB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBib3RoLiAgV2hlbgotCWVpdGhlciA8cmV2MT4gb3IgPHJldjI+IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICdIRUFEJy4KKwllaXRoZXIgPHJldjE+IG9yIDxyZXYyPiBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgSEVBRGAuCiAKICc8cmV2PntjYXJldH1AJywgZS5nLiAnSEVBRHtjYXJldH1AJzo6CiAgIEEgc3VmZml4ICd7Y2FyZXR9JyBmb2xsb3dlZCBieSBhbiBhdCBzaWduIGlzIHRoZSBzYW1lIGFzIGxpc3RpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1oYXNobWFwLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1oYXNobWFwLnR4dAppbmRleCBhZDdhNWJkLi4yOGY1YThiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGFzaG1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhhc2htYXAudHh0CkBAIC0xMDQsNiArMTA0LDExIEBACiBgZW50cnlgIHBvaW50cyB0byB0aGUgZW50cnkgdG8gaW5pdGlhbGl6ZS4KICsKIGBoYXNoYCBpcyB0aGUgaGFzaCBjb2RlIG9mIHRoZSBlbnRyeS4KKysKK1RoZSBoYXNobWFwX2VudHJ5IHN0cnVjdHVyZSBkb2VzIG5vdCBob2xkIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwgcmVzb3VyY2VzLAorYW5kIGl0IGlzIHNhZmUgdG8ganVzdCBkaXNjYXJkIGl0IG9uY2UgeW91IGFyZSBkb25lIHdpdGggaXQgKGkuZS4gaWYKK3lvdXIgc3RydWN0dXJlIHdhcyBhbGxvY2F0ZWQgd2l0aCB4bWFsbG9jKCksIHlvdSBjYW4ganVzdCBmcmVlKDMpIGl0LAorYW5kIGlmIGl0IGlzIG9uIHN0YWNrLCB5b3UgY2FuIGp1c3QgbGV0IGl0IGdvIG91dCBvZiBzY29wZSkuCiAKIGB2b2lkICpoYXNobWFwX2dldChjb25zdCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmtleWRhdGEpYDo6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKaW5kZXggOGIzNjM0My4uNzM2ZjM4OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKQEAgLTMwNyw3ICszMDcsNyBAQAogICAgIHJlYWR5IHRvIG1ha2UgYSBwYWNrZmlsZSwgaXQgd2lsbCBibGluZGx5IEFDSyBhbGwgJ2hhdmUnIG9iai1pZHMKICAgICBiYWNrIHRvIHRoZSBjbGllbnQuCiAKLSAgKiB0aGUgc2VydmVyIHdpbGwgdGhlbiBzZW5kIGEgJ05BQ0snIGFuZCB0aGVuIHdhaXQgZm9yIGFub3RoZXIgcmVzcG9uc2UKKyAgKiB0aGUgc2VydmVyIHdpbGwgdGhlbiBzZW5kIGEgJ05BSycgYW5kIHRoZW4gd2FpdCBmb3IgYW5vdGhlciByZXNwb25zZQogICAgIGZyb20gdGhlIGNsaWVudCAtIGVpdGhlciBhICdkb25lJyBvciBhbm90aGVyIGxpc3Qgb2YgJ2hhdmUnIGxpbmVzLgogCiBJbiBtdWx0aV9hY2tfZGV0YWlsZWQgbW9kZToKQEAgLTQ1NCw3ICs0NTQsOCBAQAogZmV0Y2hpbmcgcHJvdG9jb2wuIEVhY2ggcmVmZXJlbmNlIG9iai1pZCBhbmQgbmFtZSBvbiB0aGUgc2VydmVyIGlzIHNlbnQKIGluIHBhY2tldC1saW5lIGZvcm1hdCB0byB0aGUgY2xpZW50LCBmb2xsb3dlZCBieSBhIGZsdXNoLXBrdC4gIFRoZSBvbmx5CiByZWFsIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgY2FwYWJpbGl0eSBsaXN0aW5nIGlzIGRpZmZlcmVudCAtIHRoZSBvbmx5Ci1wb3NzaWJsZSB2YWx1ZXMgYXJlICdyZXBvcnQtc3RhdHVzJywgJ2RlbGV0ZS1yZWZzJyBhbmQgJ29mcy1kZWx0YScuCitwb3NzaWJsZSB2YWx1ZXMgYXJlICdyZXBvcnQtc3RhdHVzJywgJ2RlbGV0ZS1yZWZzJywgJ29mcy1kZWx0YScgYW5kCisncHVzaC1vcHRpb25zJy4KIAogUmVmZXJlbmNlIFVwZGF0ZSBSZXF1ZXN0IGFuZCBQYWNrZmlsZSBUcmFuc2ZlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDY1LDkgKzQ2NiwxMCBAQAogdGhlIHNlcnZlciwgdGhlIG9iai1pZCB0aGUgY2xpZW50IHdvdWxkIGxpa2UgdG8gdXBkYXRlIGl0IHRvIGFuZCB0aGUgbmFtZQogb2YgdGhlIHJlZmVyZW5jZS4KIAotVGhpcyBsaXN0IGlzIGZvbGxvd2VkIGJ5IGEgZmx1c2gtcGt0IGFuZCB0aGVuIHRoZSBwYWNrZmlsZSB0aGF0IHNob3VsZAotY29udGFpbiBhbGwgdGhlIG9iamVjdHMgdGhhdCB0aGUgc2VydmVyIHdpbGwgbmVlZCB0byBjb21wbGV0ZSB0aGUgbmV3Ci1yZWZlcmVuY2VzLgorVGhpcyBsaXN0IGlzIGZvbGxvd2VkIGJ5IGEgZmx1c2gtcGt0LiBUaGVuIHRoZSBwdXNoIG9wdGlvbnMgYXJlIHRyYW5zbWl0dGVkCitvbmUgcGVyIHBhY2tldCBmb2xsb3dlZCBieSBhbm90aGVyIGZsdXNoLXBrdC4gQWZ0ZXIgdGhhdCB0aGUgcGFja2ZpbGUgdGhhdAorc2hvdWxkIGNvbnRhaW4gYWxsIHRoZSBvYmplY3RzIHRoYXQgdGhlIHNlcnZlciB3aWxsIG5lZWQgdG8gY29tcGxldGUgdGhlIG5ldworcmVmZXJlbmNlcyB3aWxsIGJlIHNlbnQuCiAKIC0tLS0KICAgdXBkYXRlLXJlcXVlc3QgICAgPSAgKnNoYWxsb3cgKCBjb21tYW5kLWxpc3QgfCBwdXNoLWNlcnQgKSBbcGFja2ZpbGVdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jYXBhYmlsaXRpZXMudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dAppbmRleCBlYWFiNmI0Li40YzI4ZDNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jYXBhYmlsaXRpZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLWNhcGFiaWxpdGllcy50eHQKQEAgLTI1Myw2ICsyNTMsMTUgQEAKIHdpbGwgdXBkYXRlIHRoZSByZWZzIGluIG9uZSBhdG9taWMgdHJhbnNhY3Rpb24uIEVpdGhlciBhbGwgcmVmcyBhcmUKIHVwZGF0ZWQgb3Igbm9uZS4KIAorcHVzaC1vcHRpb25zCistLS0tLS0tLS0tLS0KKworSWYgdGhlIHNlcnZlciBzZW5kcyB0aGUgJ3B1c2gtb3B0aW9ucycgY2FwYWJpbGl0eSBpdCBpcyBhYmxlIHRvIGFjY2VwdAorcHVzaCBvcHRpb25zIGFmdGVyIHRoZSB1cGRhdGUgY29tbWFuZHMgaGF2ZSBiZWVuIHNlbnQsIGJ1dCBiZWZvcmUgdGhlCitwYWNrZmlsZSBpcyBzdHJlYW1lZC4gSWYgdGhlIHB1c2hpbmcgY2xpZW50IHJlcXVlc3RzIHRoaXMgY2FwYWJpbGl0eSwKK3RoZSBzZXJ2ZXIgd2lsbCBwYXNzIHRoZSBvcHRpb25zIHRvIHRoZSBwcmUtIGFuZCBwb3N0LSByZWNlaXZlIGhvb2tzCit0aGF0IHByb2Nlc3MgdGhpcyBwdXNoIHJlcXVlc3QuCisKIGFsbG93LXRpcC1zaGExLWluLXdhbnQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2lnbmF0dXJlLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9zaWduYXR1cmUtZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzk0MDZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2lnbmF0dXJlLWZvcm1hdC50eHQKQEAgLTAsMCArMSwxODYgQEAKK0dpdCBzaWduYXR1cmUgZm9ybWF0Cis9PT09PT09PT09PT09PT09PT09PQorCis9PSBPdmVydmlldworCitHaXQgdXNlcyBjcnlwdG9ncmFwaGljIHNpZ25hdHVyZXMgaW4gdmFyaW91cyBwbGFjZXMsIGN1cnJlbnRseSBvYmplY3RzICh0YWdzLAorY29tbWl0cywgbWVyZ2V0YWdzKSBhbmQgdHJhbnNhY3Rpb25zIChwdXNoZXMpLiBJbiBldmVyeSBjYXNlLCB0aGUgY29tbWFuZCB3aGljaAoraXMgYWJvdXQgdG8gY3JlYXRlIGFuIG9iamVjdCBvciB0cmFuc2FjdGlvbiBkZXRlcm1pbmVzIGEgcGF5bG9hZCBmcm9tIHRoYXQsCitjYWxscyBncGcgdG8gb2J0YWluIGEgZGV0YWNoZWQgc2lnbmF0dXJlIGZvciB0aGUgcGF5bG9hZCAoYGdwZyAtYnNhYCkgYW5kCitlbWJlZHMgdGhlIHNpZ25hdHVyZSBpbnRvIHRoZSBvYmplY3Qgb3IgdHJhbnNhY3Rpb24uCisKK1NpZ25hdHVyZXMgYWx3YXlzIGJlZ2luIHdpdGggYC0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tYAorYW5kIGVuZCB3aXRoIGAtLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1gLCB1bmxlc3MgZ3BnIGlzIHRvbGQgdG8KK3Byb2R1Y2UgUkZDMTk5MSBzaWduYXR1cmVzIHdoaWNoIHVzZSBgTUVTU0FHRWAgaW5zdGVhZCBvZiBgU0lHTkFUVVJFYC4KKworVGhlIHNpZ25lZCBwYXlsb2FkIGFuZCB0aGUgd2F5IHRoZSBzaWduYXR1cmUgaXMgZW1iZWRkZWQgZGVwZW5kcworb24gdGhlIHR5cGUgb2YgdGhlIG9iamVjdCByZXNwLiB0cmFuc2FjdGlvbi4KKworPT0gVGFnIHNpZ25hdHVyZXMKKworLSBjcmVhdGVkIGJ5OiBgZ2l0IHRhZyAtc2AKKy0gcGF5bG9hZDogYW5ub3RhdGVkIHRhZyBvYmplY3QKKy0gZW1iZWRkaW5nOiBhcHBlbmQgdGhlIHNpZ25hdHVyZSB0byB0aGUgdW5zaWduZWQgdGFnIG9iamVjdAorLSBleGFtcGxlOiB0YWcgYHNpZ25lZHRhZ2Agd2l0aCBzdWJqZWN0IGBzaWduZWQgdGFnYAorCistLS0tCitvYmplY3QgMDRiODcxNzk2ZGMwNDIwZjhlNzU2MWE4OTViNTI0ODRiNzAxZDUxYQordHlwZSBjb21taXQKK3RhZyBzaWduZWR0YWcKK3RhZ2dlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDE0NjU5ODEwMDYgKzAwMDAKKworc2lnbmVkIHRhZworCitzaWduZWQgdGFnIG1lc3NhZ2UgYm9keQorLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KK1ZlcnNpb246IEdudVBHIHYxCisKK2lRRWNCQUFCQWdBR0JRSlhZUmhPQUFvSkVHRUpMb1czSW5HSmtsa0lBSWNuaEw3UndFYi8rUWVYOWVua1hoeG4KK3J4ZmRxcnZXZDFLODBzbDJUT3Q4QmcvTll3clVCdy9SV0orc2cvaGhIcDRXdHZFMUhER0hsa0V6M3kxMUxrdWgKKzh0U3hTM3FLVHhYVUdvenlQR3VFOTBzSmZFeGhabFc0a25JUTF3dC95V3FNKzMzRTlwTjRoelBxTHd5cmRvZHMKK3E4RldFcVBQVWJTSlhvTWJSUHcwNFM1anJMdFpTc1VXYlJZam1KQ0h6bGhTZkZXVzRlRmQzN3VxdUlhTFVCUzAKK3JrQzNKcng3NDIwamtJcGdGY1RJMnM2MHVoU1FMemdjQ3dkQTJ1a1NZSVJuamcvekRrajgrM2gvR2FST0o3MngKK2xaeUk2SFdpeEtKa1d3OGxFOWFBT0Q5VG1UVzlzRkp3Y1ZBem1BdUZYMmtVcmVEVUtNWmR1R2NvUllHcEQ3RT0KKz1qcFhhCistLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KKy0tLS0KKworLSB2ZXJpZnkgd2l0aDogYGdpdCB2ZXJpZnktdGFnIFstdl1gIG9yIGBnaXQgdGFnIC12YAorCistLS0tCitncGc6IFNpZ25hdHVyZSBtYWRlIFdlZCBKdW4gMTUgMTA6NTY6NDYgMjAxNiBDRVNUIHVzaW5nIFJTQSBrZXkgSUQgQjcyMjcxODkKK2dwZzogR29vZCBzaWduYXR1cmUgZnJvbSAiRXJpcyBEaXNjb3JkaWEgPGRpc2NvcmRAZXhhbXBsZS5uZXQ+IgorZ3BnOiBXQVJOSU5HOiBUaGlzIGtleSBpcyBub3QgY2VydGlmaWVkIHdpdGggYSB0cnVzdGVkIHNpZ25hdHVyZSEKK2dwZzogICAgICAgICAgVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBzaWduYXR1cmUgYmVsb25ncyB0byB0aGUgb3duZXIuCitQcmltYXJ5IGtleSBmaW5nZXJwcmludDogRDRCRSAyMjMxIDFBRDMgMTMxRSA1RURBICAyOUE0IDYxMDkgMkU4NSBCNzIyIDcxODkKK29iamVjdCAwNGI4NzE3OTZkYzA0MjBmOGU3NTYxYTg5NWI1MjQ4NGI3MDFkNTFhCit0eXBlIGNvbW1pdAordGFnIHNpZ25lZHRhZwordGFnZ2VyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTQ2NTk4MTAwNiArMDAwMAorCitzaWduZWQgdGFnCisKK3NpZ25lZCB0YWcgbWVzc2FnZSBib2R5CistLS0tCisKKz09IENvbW1pdCBzaWduYXR1cmVzCisKKy0gY3JlYXRlZCBieTogYGdpdCBjb21taXQgLVNgCistIHBheWxvYWQ6IGNvbW1pdCBvYmplY3QKKy0gZW1iZWRkaW5nOiBoZWFkZXIgZW50cnkgYGdwZ3NpZ2AKKyAgKGNvbnRlbnQgaXMgcHJlY2VkZWQgYnkgYSBzcGFjZSkKKy0gZXhhbXBsZTogY29tbWl0IHdpdGggc3ViamVjdCBgc2lnbmVkIGNvbW1pdGAKKworLS0tLQordHJlZSBlZWJmZWQ5NGU3NWU3NzYwNTQwZDE0ODVjNzQwOTAyNTkwYTAwMzMyCitwYXJlbnQgMDRiODcxNzk2ZGMwNDIwZjhlNzU2MWE4OTViNTI0ODRiNzAxZDUxYQorYXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDE0NjU5ODExMzcgKzAwMDAKK2NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDE0NjU5ODExMzcgKzAwMDAKK2dwZ3NpZyAtLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQorIFZlcnNpb246IEdudVBHIHYxCisKKyBpUUVjQkFBQkFnQUdCUUpYWVJqUkFBb0pFR0VKTG9XM0luR0ozSXdJQUlZNFNBNkd4WTNCakw2MFl5dnNKUGgvCisgSFJDSndIK3c3d3QzWWMvOS9iVzJGK2dGNzJrZEhPT3MyamZ2K09aaHEwcTRPQU42ZnZWU2N6SVNZLzgyTHBTNworIERWZE1RajIvWWNIRFQ0eHJETkJuWG52aURPOUc3YW0vOU9FNzdrRWJYcnA3UVB4dmhqa2ljSE53eTJyRWZsQUEKKyB6bjA3NXJ0RUVSREhyOG5SWWlEaDhlVnJlZlNPN0QrYmRRN2d2KzdHc1lNc2QyYXVKV2kxZEhPU2ZUcjlISUY0CisgSEpoV1hUOWQyZjhXK2RpUllYR2g0WDB3WWlHZzZuYS9zb1hjK3ZkdERZQnpJeGFuUnFqZzhqQ0FlbzFlT1RrMQorIEVkVHdoY1RabEkweDVwdkozSDArNGhBMmp0bGRWdG1QTTRPVEIwY1RyRVdCYWQ3WFY2WWdpeXVJSTczVmUzST0KKyA9aktITQorIC0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQorCitzaWduZWQgY29tbWl0CisKK3NpZ25lZCBjb21taXQgbWVzc2FnZSBib2R5CistLS0tCisKKy0gdmVyaWZ5IHdpdGg6IGBnaXQgdmVyaWZ5LWNvbW1pdCBbLXZdYCAob3IgYGdpdCBzaG93IC0tc2hvdy1zaWduYXR1cmVgKQorCistLS0tCitncGc6IFNpZ25hdHVyZSBtYWRlIFdlZCBKdW4gMTUgMTA6NTg6NTcgMjAxNiBDRVNUIHVzaW5nIFJTQSBrZXkgSUQgQjcyMjcxODkKK2dwZzogR29vZCBzaWduYXR1cmUgZnJvbSAiRXJpcyBEaXNjb3JkaWEgPGRpc2NvcmRAZXhhbXBsZS5uZXQ+IgorZ3BnOiBXQVJOSU5HOiBUaGlzIGtleSBpcyBub3QgY2VydGlmaWVkIHdpdGggYSB0cnVzdGVkIHNpZ25hdHVyZSEKK2dwZzogICAgICAgICAgVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBzaWduYXR1cmUgYmVsb25ncyB0byB0aGUgb3duZXIuCitQcmltYXJ5IGtleSBmaW5nZXJwcmludDogRDRCRSAyMjMxIDFBRDMgMTMxRSA1RURBICAyOUE0IDYxMDkgMkU4NSBCNzIyIDcxODkKK3RyZWUgZWViZmVkOTRlNzVlNzc2MDU0MGQxNDg1Yzc0MDkwMjU5MGEwMDMzMgorcGFyZW50IDA0Yjg3MTc5NmRjMDQyMGY4ZTc1NjFhODk1YjUyNDg0YjcwMWQ1MWEKK2F1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxNDY1OTgxMTM3ICswMDAwCitjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxNDY1OTgxMTM3ICswMDAwCisKK3NpZ25lZCBjb21taXQKKworc2lnbmVkIGNvbW1pdCBtZXNzYWdlIGJvZHkKKy0tLS0KKworPT0gTWVyZ2V0YWcgc2lnbmF0dXJlcworCistIGNyZWF0ZWQgYnk6IGBnaXQgbWVyZ2VgIG9uIHNpZ25lZCB0YWcKKy0gcGF5bG9hZC9lbWJlZGRpbmc6IHRoZSB3aG9sZSBzaWduZWQgdGFnIG9iamVjdCBpcyBlbWJlZGRlZCBpbnRvCisgIHRoZSAobWVyZ2UpIGNvbW1pdCBvYmplY3QgYXMgaGVhZGVyIGVudHJ5IGBtZXJnZXRhZ2AKKy0gZXhhbXBsZTogbWVyZ2Ugb2YgdGhlIHNpZ25lZCB0YWcgYHNpZ25lZHRhZ2AgYXMgYWJvdmUKKworLS0tLQordHJlZSBjN2IxY2ZmMDM5YTkzZjM2MDBhMWQxOGI4MmQyNjY4ODY2OGM3ZGVhCitwYXJlbnQgYzMzNDI5YmU5NGI1ZjJkM2VlOWIwYWRhZDIyM2Y4NzdmMTc0YjA1ZAorcGFyZW50IDA0Yjg3MTc5NmRjMDQyMGY4ZTc1NjFhODk1YjUyNDg0YjcwMWQ1MWEKK2F1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxNDY1OTgyMDA5ICswMDAwCitjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxNDY1OTgyMDA5ICswMDAwCittZXJnZXRhZyBvYmplY3QgMDRiODcxNzk2ZGMwNDIwZjhlNzU2MWE4OTViNTI0ODRiNzAxZDUxYQorIHR5cGUgY29tbWl0CisgdGFnIHNpZ25lZHRhZworIHRhZ2dlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDE0NjU5ODEwMDYgKzAwMDAKKworIHNpZ25lZCB0YWcKKworIHNpZ25lZCB0YWcgbWVzc2FnZSBib2R5CisgLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KKyBWZXJzaW9uOiBHbnVQRyB2MQorCisgaVFFY0JBQUJBZ0FHQlFKWFlSaE9BQW9KRUdFSkxvVzNJbkdKa2xrSUFJY25oTDdSd0ViLytRZVg5ZW5rWGh4bgorIHJ4ZmRxcnZXZDFLODBzbDJUT3Q4QmcvTll3clVCdy9SV0orc2cvaGhIcDRXdHZFMUhER0hsa0V6M3kxMUxrdWgKKyA4dFN4UzNxS1R4WFVHb3p5UEd1RTkwc0pmRXhoWmxXNGtuSVExd3QveVdxTSszM0U5cE40aHpQcUx3eXJkb2RzCisgcThGV0VxUFBVYlNKWG9NYlJQdzA0UzVqckx0WlNzVVdiUllqbUpDSHpsaFNmRldXNGVGZDM3dXF1SWFMVUJTMAorIHJrQzNKcng3NDIwamtJcGdGY1RJMnM2MHVoU1FMemdjQ3dkQTJ1a1NZSVJuamcvekRrajgrM2gvR2FST0o3MngKKyBsWnlJNkhXaXhLSmtXdzhsRTlhQU9EOVRtVFc5c0ZKd2NWQXptQXVGWDJrVXJlRFVLTVpkdUdjb1JZR3BEN0U9CisgPWpwWGEKKyAtLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KKworTWVyZ2UgdGFnICdzaWduZWR0YWcnIGludG8gZG93bnN0cmVhbQorCitzaWduZWQgdGFnCisKK3NpZ25lZCB0YWcgbWVzc2FnZSBib2R5CisKKyMgZ3BnOiBTaWduYXR1cmUgbWFkZSBXZWQgSnVuIDE1IDA4OjU2OjQ2IDIwMTYgVVRDIHVzaW5nIFJTQSBrZXkgSUQgQjcyMjcxODkKKyMgZ3BnOiBHb29kIHNpZ25hdHVyZSBmcm9tICJFcmlzIERpc2NvcmRpYSA8ZGlzY29yZEBleGFtcGxlLm5ldD4iCisjIGdwZzogV0FSTklORzogVGhpcyBrZXkgaXMgbm90IGNlcnRpZmllZCB3aXRoIGEgdHJ1c3RlZCBzaWduYXR1cmUhCisjIGdwZzogICAgICAgICAgVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBzaWduYXR1cmUgYmVsb25ncyB0byB0aGUgb3duZXIuCisjIFByaW1hcnkga2V5IGZpbmdlcnByaW50OiBENEJFIDIyMzEgMUFEMyAxMzFFIDVFREEgIDI5QTQgNjEwOSAyRTg1IEI3MjIgNzE4OQorLS0tLQorCistIHZlcmlmeSB3aXRoOiB2ZXJpZmljYXRpb24gaXMgZW1iZWRkZWQgaW4gbWVyZ2UgY29tbWl0IG1lc3NhZ2UgYnkgZGVmYXVsdCwKKyAgYWx0ZXJuYXRpdmVseSB3aXRoIGBnaXQgc2hvdyAtLXNob3ctc2lnbmF0dXJlYDoKKworLS0tLQorY29tbWl0IDk4NjNmMGM3NmZmNzg3MTJiNjgwMGUxOTlhNDZhYTU2YWZiY2JkNDkKK21lcmdlZCB0YWcgJ3NpZ25lZHRhZycKK2dwZzogU2lnbmF0dXJlIG1hZGUgV2VkIEp1biAxNSAxMDo1Njo0NiAyMDE2IENFU1QgdXNpbmcgUlNBIGtleSBJRCBCNzIyNzE4OQorZ3BnOiBHb29kIHNpZ25hdHVyZSBmcm9tICJFcmlzIERpc2NvcmRpYSA8ZGlzY29yZEBleGFtcGxlLm5ldD4iCitncGc6IFdBUk5JTkc6IFRoaXMga2V5IGlzIG5vdCBjZXJ0aWZpZWQgd2l0aCBhIHRydXN0ZWQgc2lnbmF0dXJlIQorZ3BnOiAgICAgICAgICBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhlIHNpZ25hdHVyZSBiZWxvbmdzIHRvIHRoZSBvd25lci4KK1ByaW1hcnkga2V5IGZpbmdlcnByaW50OiBENEJFIDIyMzEgMUFEMyAxMzFFIDVFREEgIDI5QTQgNjEwOSAyRTg1IEI3MjIgNzE4OQorTWVyZ2U6IGMzMzQyOWIgMDRiODcxNworQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDE1IDA5OjEzOjI5IDIwMTYgKzAwMDAKKworICAgIE1lcmdlIHRhZyAnc2lnbmVkdGFnJyBpbnRvIGRvd25zdHJlYW0KKworICAgIHNpZ25lZCB0YWcKKworICAgIHNpZ25lZCB0YWcgbWVzc2FnZSBib2R5CisKKyAgICAjIGdwZzogU2lnbmF0dXJlIG1hZGUgV2VkIEp1biAxNSAwODo1Njo0NiAyMDE2IFVUQyB1c2luZyBSU0Ega2V5IElEIEI3MjI3MTg5CisgICAgIyBncGc6IEdvb2Qgc2lnbmF0dXJlIGZyb20gIkVyaXMgRGlzY29yZGlhIDxkaXNjb3JkQGV4YW1wbGUubmV0PiIKKyAgICAjIGdwZzogV0FSTklORzogVGhpcyBrZXkgaXMgbm90IGNlcnRpZmllZCB3aXRoIGEgdHJ1c3RlZCBzaWduYXR1cmUhCisgICAgIyBncGc6ICAgICAgICAgIFRoZXJlIGlzIG5vIGluZGljYXRpb24gdGhhdCB0aGUgc2lnbmF0dXJlIGJlbG9uZ3MgdG8gdGhlIG93bmVyLgorICAgICMgUHJpbWFyeSBrZXkgZmluZ2VycHJpbnQ6IEQ0QkUgMjIzMSAxQUQzIDEzMUUgNUVEQSAgMjlBNCA2MTA5IDJFODUgQjcyMiA3MTg5CistLS0tCmRpZmYgLS1naXQgYS9HSVQtVkVSU0lPTi1HRU4gYi9HSVQtVkVSU0lPTi1HRU4KaW5kZXggYWU0ZjU2MC4uMGZlMDJhNiAxMDA3NTUKLS0tIGEvR0lULVZFUlNJT04tR0VOCisrKyBiL0dJVC1WRVJTSU9OLUdFTgpAQCAtMSw3ICsxLDcgQEAKICMhL2Jpbi9zaAogCiBHVkY9R0lULVZFUlNJT04tRklMRQotREVGX1ZFUj12Mi45LjAKK0RFRl9WRVI9djIuOS4wLkdJVAogCiBMRj0nCiAnCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGRlNWEwMzAuLmQ5NmVjYjcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0zNTEsOSArMzUxLDEyIEBACiAjIERlZmluZSBHTVRJTUVfVU5SRUxJQUJMRV9FUlJPUlMgaWYgeW91ciBnbXRpbWUoKSBmdW5jdGlvbiBkb2VzIG5vdAogIyByZXR1cm4gTlVMTCB3aGVuIGl0IHJlY2VpdmVzIGEgYm9ndXMgdGltZV90LgogIwotIyBEZWZpbmUgSEFWRV9DTE9DS19HRVRUSU1FIGlmIHlvdXIgcGxhdGZvcm0gaGFzIGNsb2NrX2dldHRpbWUgaW4gbGlicnQuCisjIERlZmluZSBIQVZFX0NMT0NLX0dFVFRJTUUgaWYgeW91ciBwbGF0Zm9ybSBoYXMgY2xvY2tfZ2V0dGltZS4KICMKLSMgRGVmaW5lIEhBVkVfQ0xPQ0tfTU9OT1RPTklDIGlmIHlvdXIgcGxhdGZvcm0gaGFzIENMT0NLX01PTk9UT05JQyBpbiBsaWJydC4KKyMgRGVmaW5lIEhBVkVfQ0xPQ0tfTU9OT1RPTklDIGlmIHlvdXIgcGxhdGZvcm0gaGFzIENMT0NLX01PTk9UT05JQy4KKyMKKyMgRGVmaW5lIE5FRURTX0xJQlJUIGlmIHlvdXIgcGxhdGZvcm0gcmVxdWlyZXMgbGlua2luZyB3aXRoIGxpYnJ0IChnbGliYyB2ZXJzaW9uCisjIGJlZm9yZSAyLjE3KSBmb3IgY2xvY2tfZ2V0dGltZSBhbmQgQ0xPQ0tfTU9OT1RPTklDLgogIwogIyBEZWZpbmUgVVNFX1BBUkVOU19BUk9VTkRfR0VUVEVYVF9OIHRvICJ5ZXMiIGlmIHlvdXIgY29tcGlsZXIgaGFwcGlseQogIyBjb21waWxlcyB0aGUgZm9sbG93aW5nIGluaXRpYWxpemF0aW9uOgpAQCAtMzY3LDYgKzM3MCwxNCBAQAogIyBEZWZpbmUgSEFWRV9CU0RfU1lTQ1RMIGlmIHlvdXIgcGxhdGZvcm0gaGFzIGEgQlNELWNvbXBhdGlibGUgc3lzY3RsIGZ1bmN0aW9uLgogIwogIyBEZWZpbmUgSEFWRV9HRVRERUxJTSBpZiB5b3VyIHN5c3RlbSBoYXMgdGhlIGdldGRlbGltKCkgZnVuY3Rpb24uCisjCisjIERlZmluZSBQQUdFUl9FTlYgdG8gYSBTUCBzZXBhcmF0ZWQgVkFSPVZBTCBwYWlycyB0byBkZWZpbmUKKyMgZGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgcGFzc2VkIHdoZW4gYSBwYWdlciBpcyBzcGF3bmVkLCBlLmcuCisjCisjICAgIFBBR0VSX0VOViA9IExFU1M9RlJYIExWPS1jCisjCisjIHRvIHNheSAiZXhwb3J0IExFU1M9RlJYIChhbmQgTFY9LWMpIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorIyBMRVNTIChhbmQgTFYpIGlzIG5vdCBzZXQsIHJlc3BlY3RpdmVseSIuCiAKIEdJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCiAJQCQoU0hFTExfUEFUSCkgLi9HSVQtVkVSU0lPTi1HRU4KQEAgLTcxOCw2ICs3MjksNyBAQAogTElCX09CSlMgKz0gZGlmZi1uby1pbmRleC5vCiBMSUJfT0JKUyArPSBkaWZmLm8KIExJQl9PQkpTICs9IGRpci5vCitMSUJfT0JKUyArPSBkaXItaXRlcmF0b3IubwogTElCX09CSlMgKz0gZWRpdG9yLm8KIExJQl9PQkpTICs9IGVudHJ5Lm8KIExJQl9PQkpTICs9IGVudmlyb25tZW50Lm8KQEAgLTc1MSw2ICs3NjMsNyBAQAogTElCX09CSlMgKz0gbWVyZ2UtYmxvYnMubwogTElCX09CSlMgKz0gbWVyZ2UtcmVjdXJzaXZlLm8KIExJQl9PQkpTICs9IG1lcmdlc29ydC5vCitMSUJfT0JKUyArPSBtcnUubwogTElCX09CSlMgKz0gbmFtZS1oYXNoLm8KIExJQl9PQkpTICs9IG5vdGVzLm8KIExJQl9PQkpTICs9IG5vdGVzLWNhY2hlLm8KQEAgLTc4Miw2ICs3OTUsNyBAQAogTElCX09CSlMgKz0gcmVmbG9nLXdhbGsubwogTElCX09CSlMgKz0gcmVmcy5vCiBMSUJfT0JKUyArPSByZWZzL2ZpbGVzLWJhY2tlbmQubworTElCX09CSlMgKz0gcmVmcy9pdGVyYXRvci5vCiBMSUJfT0JKUyArPSByZWYtZmlsdGVyLm8KIExJQl9PQkpTICs9IHJlbW90ZS5vCiBMSUJfT0JKUyArPSByZXBsYWNlX29iamVjdC5vCkBAIC05MzksNyArOTUzLDcgQEAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluL3dvcmt0cmVlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluL3dyaXRlLXRyZWUubwogCi1HSVRMSUJTID0gJChMSUJfRklMRSkgJChYRElGRl9MSUIpCitHSVRMSUJTID0gY29tbW9uLW1haW4ubyAkKExJQl9GSUxFKSAkKFhESUZGX0xJQikKIEVYVExJQlMgPQogCiBHSVRfVVNFUl9BR0VOVCA9IGdpdC8kKEdJVF9WRVJTSU9OKQpAQCAtMTQ2NSwxMyArMTQ3OSwxNiBAQAogCiBpZmRlZiBIQVZFX0NMT0NLX0dFVFRJTUUKIAlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0NMT0NLX0dFVFRJTUUKLQlFWFRMSUJTICs9IC1scnQKIGVuZGlmCiAKIGlmZGVmIEhBVkVfQ0xPQ0tfTU9OT1RPTklDCiAJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9DTE9DS19NT05PVE9OSUMKIGVuZGlmCiAKK2lmZGVmIE5FRURTX0xJQlJUCisJRVhUTElCUyArPSAtbHJ0CitlbmRpZgorCiBpZmRlZiBIQVZFX0JTRF9TWVNDVEwKIAlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0JTRF9TWVNDVEwKIGVuZGlmCkBAIC0xNDkyLDYgKzE1MDksMTAgQEAKIE5PX1BZVEhPTiA9IE5vVGhhbmtzCiBlbmRpZgogCitpZm5kZWYgUEFHRVJfRU5WCitQQUdFUl9FTlYgPSBMRVNTPUZSWCBMVj0tYworZW5kaWYKKwogUVVJRVRfU1VCRElSMCAgPSArJChNQUtFKSAtQyAjIHNwYWNlIHRvIHNlcGFyYXRlIC1DIGFuZCBzdWJkaXIKIFFVSUVUX1NVQkRJUjEgID0KIApAQCAtMTU3Miw3ICsxNTkzLDE1IEBACiBESUZGX1NRID0gJChzdWJzdCAnLCdcJycsJChESUZGKSkKIFBFUkxMSUJfRVhUUkFfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBFUkxMSUJfRVhUUkEpKQogCi1MSUJTID0gJChHSVRMSUJTKSAkKEVYVExJQlMpCisjIFdlIG11c3QgZmlsdGVyIG91dCBhbnkgb2JqZWN0IGZpbGVzIGZyb20gJChHSVRMSUJTKSwKKyMgYXMgaXQgaXMgdHlwaWNhbGx5IHVzZWQgbGlrZToKKyMKKyMgICBmb286IGZvby5vICQoR0lUTElCUykKKyMJJChDQykgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCisjCisjIHdoZXJlIHdlIHVzZSBpdCBhcyBhIGRlcGVuZGVuY3kuIFNpbmNlIHdlIGFsc28gcHVsbCBvYmplY3QgZmlsZXMKKyMgZnJvbSB0aGUgZGVwZW5kZW5jeSBsaXN0LCB0aGF0IHdvdWxkIG1ha2UgZWFjaCBlbnRyeSBhcHBlYXIgdHdpY2UuCitMSUJTID0gJChmaWx0ZXItb3V0ICUubywgJChHSVRMSUJTKSkgJChFWFRMSUJTKQogCiBCQVNJQ19DRkxBR1MgKz0gLURTSEExX0hFQURFUj0nJChTSEExX0hFQURFUl9TUSknIFwKIAkkKENPTVBBVF9DRkxBR1MpCkBAIC0xNjEzLDYgKzE2NDIsMTEgQEAKIEJBU0lDX0NGTEFHUyArPSAtRERFRkFVTFRfSEVMUF9GT1JNQVQ9JyIkKERFRkFVTFRfSEVMUF9GT1JNQVQpIicKIGVuZGlmCiAKK1BBR0VSX0VOVl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEFHRVJfRU5WKSkKK1BBR0VSX0VOVl9DUSA9ICIkKHN1YnN0ICIsXCIsJChzdWJzdCBcLFxcLCQoUEFHRVJfRU5WKSkpIgorUEFHRVJfRU5WX0NRX1NRID0gJChzdWJzdCAnLCdcJycsJChQQUdFUl9FTlZfQ1EpKQorQkFTSUNfQ0ZMQUdTICs9IC1EUEFHRVJfRU5WPSckKFBBR0VSX0VOVl9DUV9TUSknCisKIEFMTF9DRkxBR1MgKz0gJChCQVNJQ19DRkxBR1MpCiBBTExfTERGTEFHUyArPSAkKEJBU0lDX0xERkxBR1MpCiAKQEAgLTE3MDgsOCArMTc0Miw4IEBACiAJJy1ER0lUX0lORk9fUEFUSD0iJChpbmZvZGlyX3JlbGF0aXZlX1NRKSInCiAKIGdpdCRYOiBnaXQubyBHSVQtTERGTEFHUyAkKEJVSUxUSU5fT0JKUykgJChHSVRMSUJTKQotCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpIGdpdC5vIFwKLQkJJChCVUlMVElOX09CSlMpICQoTElCUykKKwkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSBcCisJCSQoZmlsdGVyICUubywkXikgJChMSUJTKQogCiBoZWxwLnNwIGhlbHAucyBoZWxwLm86IGNvbW1vbi1jbWRzLmgKIApAQCAtMTczNyw3ICsxNzcxLDcgQEAKIAogU0NSSVBUX0RFRklORVMgPSAkKFNIRUxMX1BBVEhfU1EpOiQoRElGRl9TUSk6JChHSVRfVkVSU0lPTik6XAogCSQobG9jYWxlZGlyX1NRKTokKE5PX0NVUkwpOiQoVVNFX0dFVFRFWFRfU0NIRU1FKTokKFNBTkVfVE9PTF9QQVRIX1NRKTpcCi0JJChnaXR3ZWJkaXJfU1EpOiQoUEVSTF9QQVRIX1NRKTokKFNBTkVfVEVYVF9HUkVQKQorCSQoZ2l0d2ViZGlyX1NRKTokKFBFUkxfUEFUSF9TUSk6JChTQU5FX1RFWFRfR1JFUCk6JChQQUdFUl9FTlYpCiBkZWZpbmUgY21kX211bmdlX3NjcmlwdAogJChSTSkgJEAgJEArICYmIFwKIHNlZCAtZSAnMXN8IyEuKi9zaHwjISQoU0hFTExfUEFUSF9TUSl8JyBcCkBAIC0xNzUwLDYgKzE3ODQsNyBAQAogICAgIC1lICdzfEBAR0lUV0VCRElSQEB8JChnaXR3ZWJkaXJfU1EpfGcnIFwKICAgICAtZSAnc3xAQFBFUkxAQHwkKFBFUkxfUEFUSF9TUSl8ZycgXAogICAgIC1lICdzfEBAU0FORV9URVhUX0dSRVBAQHwkKFNBTkVfVEVYVF9HUkVQKXxnJyBcCisgICAgLWUgJ3N8QEBQQUdFUl9FTlZAQHwkKFBBR0VSX0VOVl9TUSl8ZycgXAogICAgICRALnNoID4kQCsKIGVuZGVmCiAKQEAgLTE5MDIsNiArMTkzNyw3IEBACiBPQkpFQ1RTIDo9ICQoTElCX09CSlMpICQoQlVJTFRJTl9PQkpTKSAkKFBST0dSQU1fT0JKUykgJChURVNUX09CSlMpIFwKIAkkKFhESUZGX09CSlMpIFwKIAkkKFZDU1NWTl9PQkpTKSBcCisJY29tbW9uLW1haW4ubyBcCiAJZ2l0Lm8KIGlmbmRlZiBOT19DVVJMCiAJT0JKRUNUUyArPSBodHRwLm8gaHR0cC13YWxrZXIubyByZW1vdGUtY3VybC5vCkBAIC0yMDYzLDcgKzIwOTksMTAgQEAKIAktLWtleXdvcmQ9Z2V0dGV4dGxuIC0ta2V5d29yZD1ldmFsX2dldHRleHRsbgogWEdFVFRFWFRfRkxBR1NfUEVSTCA9ICQoWEdFVFRFWFRfRkxBR1MpIC0ta2V5d29yZD1fXyAtLWxhbmd1YWdlPVBlcmwKIExPQ0FMSVpFRF9DID0gJChDX09CSjpvPWMpICQoTElCX0gpICQoR0VORVJBVEVEX0gpCi1MT0NBTElaRURfU0ggPSAkKFNDUklQVF9TSCkgZ2l0LXBhcnNlLXJlbW90ZS5zaAorTE9DQUxJWkVEX1NIID0gJChTQ1JJUFRfU0gpCitMT0NBTElaRURfU0ggKz0gZ2l0LXBhcnNlLXJlbW90ZS5zaAorTE9DQUxJWkVEX1NIICs9IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCitMT0NBTElaRURfU0ggKz0gZ2l0LXNoLXNldHVwLnNoCiBMT0NBTElaRURfUEVSTCA9ICQoU0NSSVBUX1BFUkwpCiAKIGlmZGVmIFhHRVRURVhUX0lOQ0xVREVfVEVTVFMKQEAgLTIxNTMsNiArMjE5Miw3IEBACiAJQGVjaG8gTk9fUEVSTD1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX1BFUkwpKSknXCcgPj4kQCsKIAlAZWNobyBOT19QWVRIT049XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19QWVRIT04pKSknXCcgPj4kQCsKIAlAZWNobyBOT19VTklYX1NPQ0tFVFM9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19VTklYX1NPQ0tFVFMpKSknXCcgPj4kQCsKKwlAZWNobyBQQUdFUl9FTlY9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChQQUdFUl9FTlYpKSknXCcgPj4kQCsKIGlmZGVmIFRFU1RfT1VUUFVUX0RJUkVDVE9SWQogCUBlY2hvIFRFU1RfT1VUUFVUX0RJUkVDVE9SWT1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKFRFU1RfT1VUUFVUX0RJUkVDVE9SWSkpKSdcJyA+PiRAKwogZW5kaWYKQEAgLTIyMjUsMTcgKzIyNjUsOSBAQAogCiAuUEhPTlk6IHRlc3QgcGVyZgogCi10L2hlbHBlci90ZXN0LWN0eXBlJFg6IGN0eXBlLm8KK3QvaGVscGVyL3Rlc3QtbGluZS1idWZmZXIkWDogJChWQ1NTVk5fTElCKQogCi10L2hlbHBlci90ZXN0LWRhdGUkWDogZGF0ZS5vIGN0eXBlLm8KLQotdC9oZWxwZXIvdGVzdC1kZWx0YSRYOiBkaWZmLWRlbHRhLm8gcGF0Y2gtZGVsdGEubwotCi10L2hlbHBlci90ZXN0LWxpbmUtYnVmZmVyJFg6IHZjcy1zdm4vbGliLmEKLQotdC9oZWxwZXIvdGVzdC1wYXJzZS1vcHRpb25zJFg6IHBhcnNlLW9wdGlvbnMubyBwYXJzZS1vcHRpb25zLWNiLm8KLQotdC9oZWxwZXIvdGVzdC1zdm4tZmUkWDogdmNzLXN2bi9saWIuYQordC9oZWxwZXIvdGVzdC1zdm4tZmUkWDogJChWQ1NTVk5fTElCKQogCiAuUFJFQ0lPVVM6ICQoVEVTVF9PQkpTKQogCmRpZmYgLS1naXQgYS9SZWxOb3RlcyBiL1JlbE5vdGVzCmluZGV4IDY2NjA2NzMuLjYyNjE1ZmYgMTIwMDAwCi0tLSBhL1JlbE5vdGVzCisrKyBiL1JlbE5vdGVzCkBAIC0xICsxIEBACi1Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4wLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4wLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FkdmljZS5jIGIvYWR2aWNlLmMKaW5kZXggNGRjNWNmMS4uYjg0YWU0OSAxMDA2NDQKLS0tIGEvYWR2aWNlLmMKKysrIGIvYWR2aWNlLmMKQEAgLTc5LDcgKzc5LDIwIEBACiAKIGludCBlcnJvcl9yZXNvbHZlX2NvbmZsaWN0KGNvbnN0IGNoYXIgKm1lKQogewotCWVycm9yKCIlcyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iLCBtZSk7CisJaWYgKCFzdHJjbXAobWUsICJjaGVycnktcGljayIpKQorCQllcnJvcihfKCJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iKSk7CisJZWxzZSBpZiAoIXN0cmNtcChtZSwgImNvbW1pdCIpKQorCQllcnJvcihfKCJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIpKTsKKwllbHNlIGlmICghc3RyY21wKG1lLCAibWVyZ2UiKSkKKwkJZXJyb3IoXygiTWVyZ2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iKSk7CisJZWxzZSBpZiAoIXN0cmNtcChtZSwgInB1bGwiKSkKKwkJZXJyb3IoXygiUHVsbGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iKSk7CisJZWxzZSBpZiAoIXN0cmNtcChtZSwgInJldmVydCIpKQorCQllcnJvcihfKCJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIikpOworCWVsc2UKKwkJZXJyb3IoXygiSXQgaXMgbm90IHBvc3NpYmxlIHRvICVzIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIiksCisJCQltZSk7CisKIAlpZiAoYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QpCiAJCS8qCiAJCSAqIE1lc3NhZ2UgdXNlZCBib3RoIHdoZW4gJ2dpdCBjb21taXQnIGZhaWxzIGFuZCB3aGVuCkBAIC05Myw3ICsxMDYsNyBAQAogdm9pZCBOT1JFVFVSTiBkaWVfcmVzb2x2ZV9jb25mbGljdChjb25zdCBjaGFyICptZSkKIHsKIAllcnJvcl9yZXNvbHZlX2NvbmZsaWN0KG1lKTsKLQlkaWUoIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIpOworCWRpZShfKCJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iKSk7CiB9CiAKIHZvaWQgTk9SRVRVUk4gZGllX2NvbmNsdWRlX21lcmdlKHZvaWQpCkBAIC0xMDYsMTQgKzExOSwxNCBAQAogCiB2b2lkIGRldGFjaF9hZHZpY2UoY29uc3QgY2hhciAqbmV3X25hbWUpCiB7Ci0JY29uc3QgY2hhciBmbXRbXSA9Ci0JIk5vdGU6IGNoZWNraW5nIG91dCAnJXMnLlxuXG4iCisJY29uc3QgY2hhciAqZm10ID0KKwlfKCJOb3RlOiBjaGVja2luZyBvdXQgJyVzJy5cblxuIgogCSJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKIAkiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgogCSJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgcGVyZm9ybWluZyBhbm90aGVyIGNoZWNrb3V0LlxuXG4iCiAJIklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heVxuIgogCSJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYiB3aXRoIHRoZSBjaGVja291dCBjb21tYW5kIGFnYWluLiBFeGFtcGxlOlxuXG4iCi0JIiAgZ2l0IGNoZWNrb3V0IC1iIDxuZXctYnJhbmNoLW5hbWU+XG5cbiI7CisJIiAgZ2l0IGNoZWNrb3V0IC1iIDxuZXctYnJhbmNoLW5hbWU+XG5cbiIpOwogCiAJZnByaW50ZihzdGRlcnIsIGZtdCwgbmV3X25hbWUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaGl2ZS10YXIuYyBiL2FyY2hpdmUtdGFyLmMKaW5kZXggY2I5OWRmMi4uMzgwZTNhZSAxMDA2NDQKLS0tIGEvYXJjaGl2ZS10YXIuYworKysgYi9hcmNoaXZlLXRhci5jCkBAIC0xOCw2ICsxOCwyMSBAQAogc3RhdGljIGludCB3cml0ZV90YXJfZmlsdGVyX2FyY2hpdmUoY29uc3Qgc3RydWN0IGFyY2hpdmVyICphciwKIAkJCQkgICAgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MpOwogCisvKgorICogVGhpcyBpcyB0aGUgbWF4IHZhbHVlIHRoYXQgYSB1c3RhciBzaXplIGhlYWRlciBjYW4gc3BlY2lmeSwgYXMgaXQgaXMgZml4ZWQKKyAqIGF0IDExIG9jdGFsIGRpZ2l0cy4gUE9TSVggc3BlY2lmaWVzIHRoYXQgd2Ugc3dpdGNoIHRvIGV4dGVuZGVkIGhlYWRlcnMgYXQKKyAqIHRoaXMgc2l6ZS4KKyAqCisgKiBMaWtld2lzZSBmb3IgdGhlIG10aW1lICh3aGljaCBoYXBwZW5zIHRvIHVzZSBhIGJ1ZmZlciBvZiB0aGUgc2FtZSBzaXplKS4KKyAqLworI2lmIFVMT05HX01BWCA9PSAweEZGRkZGRkZGCisjZGVmaW5lIFVTVEFSX01BWF9TSVpFIFVMT05HX01BWAorI2RlZmluZSBVU1RBUl9NQVhfTVRJTUUgVUxPTkdfTUFYCisjZWxzZQorI2RlZmluZSBVU1RBUl9NQVhfU0laRSAwNzc3Nzc3Nzc3NzdVTAorI2RlZmluZSBVU1RBUl9NQVhfTVRJTUUgMDc3Nzc3Nzc3Nzc3VUwKKyNlbmRpZgorCiAvKiB3cml0ZXMgb3V0IHRoZSB3aG9sZSBibG9jaywgYnV0IG9ubHkgaWYgaXQgaXMgZnVsbCAqLwogc3RhdGljIHZvaWQgd3JpdGVfaWZfbmVlZGVkKHZvaWQpCiB7CkBAIC0xMzcsNiArMTUyLDIwIEBACiAJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKIH0KIAorLyoKKyAqIExpa2Ugc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyLCBidXQgZm9yIG51bWVyaWMgdmFsdWVzLgorICovCitzdGF0aWMgdm9pZCBzdHJidWZfYXBwZW5kX2V4dF9oZWFkZXJfdWludChzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQkJICBjb25zdCBjaGFyICprZXl3b3JkLAorCQkJCQkgIHVpbnRtYXhfdCB2YWx1ZSkKK3sKKwljaGFyIGJ1Zls0MF07IC8qIGJpZyBlbm91Z2ggZm9yIDJeMTI4IGluIGRlY2ltYWwsIHBsdXMgTlVMICovCisJaW50IGxlbjsKKworCWxlbiA9IHhzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJSJQUkl1TUFYLCB2YWx1ZSk7CisJc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyKHNiLCBrZXl3b3JkLCBidWYsIGxlbik7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdXN0YXJfaGVhZGVyX2Noa3N1bShjb25zdCBzdHJ1Y3QgdXN0YXJfaGVhZGVyICpoZWFkZXIpCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopaGVhZGVyOwpAQCAtMTg0LDkgKzIxMyw5IEBACiAJeHNucHJpbnRmKGhlYWRlci0+Y2hrc3VtLCBzaXplb2YoaGVhZGVyLT5jaGtzdW0pLCAiJTA3byIsIHVzdGFyX2hlYWRlcl9jaGtzdW0oaGVhZGVyKSk7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfZXh0ZW5kZWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAotCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAotCQkJCSBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyB2b2lkIHdyaXRlX2V4dGVuZGVkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlzdHJ1Y3QgdXN0YXJfaGVhZGVyIGhlYWRlcjsKIAl1bnNpZ25lZCBpbnQgbW9kZTsKQEAgLTE5Nyw3ICsyMjYsNiBAQAogCXByZXBhcmVfaGVhZGVyKGFyZ3MsICZoZWFkZXIsIG1vZGUsIHNpemUpOwogCXdyaXRlX2Jsb2NrZWQoJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOwogCXdyaXRlX2Jsb2NrZWQoYnVmZmVyLCBzaXplKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB3cml0ZV90YXJfZW50cnkoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCkBAIC0yMDgsNyArMjM2LDcgQEAKIAlzdHJ1Y3QgdXN0YXJfaGVhZGVyIGhlYWRlcjsKIAlzdHJ1Y3Qgc3RyYnVmIGV4dF9oZWFkZXIgPSBTVFJCVUZfSU5JVDsKIAl1bnNpZ25lZCBpbnQgb2xkX21vZGUgPSBtb2RlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfaW5faGVhZGVyOwogCXZvaWQgKmJ1ZmZlcjsKIAlpbnQgZXJyID0gMDsKIApAQCAtMjY3LDE1ICsyOTUsMTcgQEAKIAkJCW1lbWNweShoZWFkZXIubGlua25hbWUsIGJ1ZmZlciwgc2l6ZSk7CiAJfQogCi0JcHJlcGFyZV9oZWFkZXIoYXJncywgJmhlYWRlciwgbW9kZSwgc2l6ZSk7CisJc2l6ZV9pbl9oZWFkZXIgPSBzaXplOworCWlmIChTX0lTUkVHKG1vZGUpICYmIHNpemUgPiBVU1RBUl9NQVhfU0laRSkgeworCQlzaXplX2luX2hlYWRlciA9IDA7CisJCXN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcl91aW50KCZleHRfaGVhZGVyLCAic2l6ZSIsIHNpemUpOworCX0KKworCXByZXBhcmVfaGVhZGVyKGFyZ3MsICZoZWFkZXIsIG1vZGUsIHNpemVfaW5faGVhZGVyKTsKIAogCWlmIChleHRfaGVhZGVyLmxlbiA+IDApIHsKLQkJZXJyID0gd3JpdGVfZXh0ZW5kZWRfaGVhZGVyKGFyZ3MsIHNoYTEsIGV4dF9oZWFkZXIuYnVmLAotCQkJCQkgICAgZXh0X2hlYWRlci5sZW4pOwotCQlpZiAoZXJyKSB7Ci0JCQlmcmVlKGJ1ZmZlcik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJCXdyaXRlX2V4dGVuZGVkX2hlYWRlcihhcmdzLCBzaGExLCBleHRfaGVhZGVyLmJ1ZiwKKwkJCQkgICAgICBleHRfaGVhZGVyLmxlbik7CiAJfQogCXN0cmJ1Zl9yZWxlYXNlKCZleHRfaGVhZGVyKTsKIAl3cml0ZV9ibG9ja2VkKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKQEAgLTI4OSwxNSArMzE5LDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB3cml0ZV9nbG9iYWxfZXh0ZW5kZWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzKQorc3RhdGljIHZvaWQgd3JpdGVfZ2xvYmFsX2V4dGVuZGVkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncykKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gYXJncy0+Y29tbWl0X3NoYTE7CiAJc3RydWN0IHN0cmJ1ZiBleHRfaGVhZGVyID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IHVzdGFyX2hlYWRlciBoZWFkZXI7CiAJdW5zaWduZWQgaW50IG1vZGU7Ci0JaW50IGVyciA9IDA7CiAKLQlzdHJidWZfYXBwZW5kX2V4dF9oZWFkZXIoJmV4dF9oZWFkZXIsICJjb21tZW50Iiwgc2hhMV90b19oZXgoc2hhMSksIDQwKTsKKwlpZiAoc2hhMSkKKwkJc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyKCZleHRfaGVhZGVyLCAiY29tbWVudCIsCisJCQkJCSBzaGExX3RvX2hleChzaGExKSwgNDApOworCWlmIChhcmdzLT50aW1lID4gVVNUQVJfTUFYX01USU1FKSB7CisJCXN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcl91aW50KCZleHRfaGVhZGVyLCAibXRpbWUiLAorCQkJCQkgICAgICBhcmdzLT50aW1lKTsKKwkJYXJncy0+dGltZSA9IFVTVEFSX01BWF9NVElNRTsKKwl9CisKKwlpZiAoIWV4dF9oZWFkZXIubGVuKQorCQlyZXR1cm47CisKIAltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOwogCSpoZWFkZXIudHlwZWZsYWcgPSBUWVBFRkxBR19HTE9CQUxfSEVBREVSOwogCW1vZGUgPSAwMTAwNjY2OwpAQCAtMzA2LDcgKzM0Niw2IEBACiAJd3JpdGVfYmxvY2tlZCgmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CiAJd3JpdGVfYmxvY2tlZChleHRfaGVhZGVyLmJ1ZiwgZXh0X2hlYWRlci5sZW4pOwogCXN0cmJ1Zl9yZWxlYXNlKCZleHRfaGVhZGVyKTsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IGFyY2hpdmVyICoqdGFyX2ZpbHRlcnM7CkBAIC0zODIsMTAgKzQyMSw4IEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoYXJncy0+Y29tbWl0X3NoYTEpCi0JCWVyciA9IHdyaXRlX2dsb2JhbF9leHRlbmRlZF9oZWFkZXIoYXJncyk7Ci0JaWYgKCFlcnIpCi0JCWVyciA9IHdyaXRlX2FyY2hpdmVfZW50cmllcyhhcmdzLCB3cml0ZV90YXJfZW50cnkpOworCXdyaXRlX2dsb2JhbF9leHRlbmRlZF9oZWFkZXIoYXJncyk7CisJZXJyID0gd3JpdGVfYXJjaGl2ZV9lbnRyaWVzKGFyZ3MsIHdyaXRlX3Rhcl9lbnRyeSk7CiAJaWYgKCFlcnIpCiAJCXdyaXRlX3RyYWlsZXIoKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvYXJjaGl2ZS5jIGIvYXJjaGl2ZS5jCmluZGV4IDVkNzM1YWUuLmRkZTFhYjQgMTAwNjQ0Ci0tLSBhL2FyY2hpdmUuYworKysgYi9hcmNoaXZlLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCXBhdGhzcGVjLnJlY3Vyc2l2ZSA9IDE7CiAJcmV0ID0gcmVhZF90cmVlX3JlY3Vyc2l2ZSh0cmVlLCAiIiwgMCwgMCwgJnBhdGhzcGVjLAogCQkJCSAgcmVqZWN0X2VudHJ5LCAmcGF0aHNwZWMpOwotCWZyZWVfcGF0aHNwZWMoJnBhdGhzcGVjKTsKKwljbGVhcl9wYXRoc3BlYygmcGF0aHNwZWMpOwogCXJldHVybiByZXQgIT0gMDsKIH0KIApAQCAtNDU4LDExICs0NTgsMTEgQEAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRzLCBhcmNoaXZlX3VzYWdlLCAwKTsKIAogCWlmIChyZW1vdGUpCi0JCWRpZSgiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiKTsKKwkJZGllKF8oIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIikpOwogCWlmIChleGVjKQotCQlkaWUoIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIik7CisJCWRpZShfKCJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIpKTsKIAlpZiAob3V0cHV0KQotCQlkaWUoIlVuZXhwZWN0ZWQgb3B0aW9uIC0tb3V0cHV0Iik7CisJCWRpZShfKCJVbmV4cGVjdGVkIG9wdGlvbiAtLW91dHB1dCIpKTsKIAogCWlmICghYmFzZSkKIAkJYmFzZSA9ICIiOwpAQCAtNDg0LDE0ICs0ODQsMTQgQEAKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGFyY2hpdmVfdXNhZ2UsIG9wdHMpOwogCSphciA9IGxvb2t1cF9hcmNoaXZlcihmb3JtYXQpOwogCWlmICghKmFyIHx8IChpc19yZW1vdGUgJiYgISgoKmFyKS0+ZmxhZ3MgJiBBUkNISVZFUl9SRU1PVEUpKSkKLQkJZGllKCJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciLCBmb3JtYXQpOworCQlkaWUoXygiVW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIiksIGZvcm1hdCk7CiAKIAlhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKIAlpZiAoY29tcHJlc3Npb25fbGV2ZWwgIT0gLTEpIHsKIAkJaWYgKCgqYXIpLT5mbGFncyAmIEFSQ0hJVkVSX1dBTlRfQ09NUFJFU1NJT05fTEVWRUxTKQogCQkJYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwgPSBjb21wcmVzc2lvbl9sZXZlbDsKIAkJZWxzZSB7Ci0JCQlkaWUoIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiLAorCQkJZGllKF8oIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiKSwKIAkJCQkJZm9ybWF0LCBjb21wcmVzc2lvbl9sZXZlbCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9iaXNlY3QuYyBiL2Jpc2VjdC5jCmluZGV4IDZkOTNlZGIuLjZmNTEyYzIgMTAwNjQ0Ci0tLSBhL2Jpc2VjdC5jCisrKyBiL2Jpc2VjdC5jCkBAIC00MzgsMTIgKzQzOCwxMiBAQAogCUZJTEUgKmZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CiAKIAlpZiAoIWZwKQotCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuIGZpbGUgJyVzJyIsIGZpbGVuYW1lKTsKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCBvcGVuIGZpbGUgJyVzJyIpLCBmaWxlbmFtZSk7CiAKIAl3aGlsZSAoc3RyYnVmX2dldGxpbmVfbGYoJnN0ciwgZnApICE9IEVPRikgewogCQlzdHJidWZfdHJpbSgmc3RyKTsKIAkJaWYgKHNxX2RlcXVvdGVfdG9fYXJndl9hcnJheShzdHIuYnVmLCBhcnJheSkpCi0JCQlkaWUoIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiLAorCQkJZGllKF8oIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiKSwKIAkJCSAgICBmaWxlbmFtZSwgc3RyLmJ1Zik7CiAJfQogCkBAIC02NDYsMTAgKzY0NiwxMyBAQAogCiAJcHJpbnRmKCJUaGVyZSBhcmUgb25seSAnc2tpcCdwZWQgY29tbWl0cyBsZWZ0IHRvIHRlc3QuXG4iCiAJICAgICAgICJUaGUgZmlyc3QgJXMgY29tbWl0IGNvdWxkIGJlIGFueSBvZjpcbiIsIHRlcm1fYmFkKTsKLQlwcmludF9jb21taXRfbGlzdCh0cmllZCwgIiVzXG4iLCAiJXNcbiIpOworCisJZm9yICggOyB0cmllZDsgdHJpZWQgPSB0cmllZC0+bmV4dCkKKwkJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleCgmdHJpZWQtPml0ZW0tPm9iamVjdC5vaWQpKTsKKwogCWlmIChiYWQpCiAJCXByaW50ZigiJXNcbiIsIG9pZF90b19oZXgoYmFkKSk7Ci0JcHJpbnRmKCJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iKTsKKwlwcmludGYoXygiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIikpOwogCWV4aXQoMik7CiB9CiAKQEAgLTcwMiw3ICs3MDUsNyBAQAogewogCXN0cnVjdCBjb21taXQgKnIgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKIAlpZiAoIXIpCi0JCWRpZSgiTm90IGEgdmFsaWQgY29tbWl0IG5hbWUgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJCWRpZShfKCJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIpLCBzaGExX3RvX2hleChzaGExKSk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTcyNiwyNyArNzI5LDI3IEBACiAJCWNoYXIgKmJhZF9oZXggPSBvaWRfdG9faGV4KGN1cnJlbnRfYmFkX29pZCk7CiAJCWNoYXIgKmdvb2RfaGV4ID0gam9pbl9zaGExX2FycmF5X2hleCgmZ29vZF9yZXZzLCAnICcpOwogCQlpZiAoIXN0cmNtcCh0ZXJtX2JhZCwgImJhZCIpICYmICFzdHJjbXAodGVybV9nb29kLCAiZ29vZCIpKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBiYWQuXG4iCiAJCQkJIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCAiCi0JCQkJImJldHdlZW4gJXMgYW5kIFslc10uXG4iLAorCQkJCSJiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIiksCiAJCQkJYmFkX2hleCwgYmFkX2hleCwgZ29vZF9oZXgpOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGVybV9iYWQsICJuZXciKSAmJiAhc3RyY21wKHRlcm1fZ29vZCwgIm9sZCIpKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCiAJCQkJIlRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCAiCi0JCQkJImJldHdlZW4gJXMgYW5kIFslc10uXG4iLAorCQkJCSJiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIiksCiAJCQkJYmFkX2hleCwgYmFkX2hleCwgZ29vZF9oZXgpOwogCQl9IGVsc2UgewotCQkJZnByaW50ZihzdGRlcnIsICJUaGUgbWVyZ2UgYmFzZSAlcyBpcyAlcy5cbiIKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgbWVyZ2UgYmFzZSAlcyBpcyAlcy5cbiIKIAkJCQkiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgIgotCQkJCSJiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIiwKKwkJCQkiYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIpLAogCQkJCWJhZF9oZXgsIHRlcm1fYmFkLCB0ZXJtX2dvb2QsIGJhZF9oZXgsIGdvb2RfaGV4KTsKIAkJfQogCQlleGl0KDMpOwogCX0KIAotCWZwcmludGYoc3RkZXJyLCAiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3Igb2YgdGhlICVzIHJldi5cbiIKKwlmcHJpbnRmKHN0ZGVyciwgXygiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3Igb2YgdGhlICVzIHJldi5cbiIKIAkJImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgotCQkiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iLAorCQkiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iKSwKIAkJdGVybV9nb29kLCB0ZXJtX2JhZCwgdGVybV9nb29kLCB0ZXJtX2JhZCk7CiAJZXhpdCgxKTsKIH0KQEAgLTc1NCwxNCArNzU3LDE0IEBACiBzdGF0aWMgdm9pZCBoYW5kbGVfc2tpcHBlZF9tZXJnZV9iYXNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1iKQogewogCWNoYXIgKm1iX2hleCA9IHNoYTFfdG9faGV4KG1iKTsKLQljaGFyICpiYWRfaGV4ID0gc2hhMV90b19oZXgoY3VycmVudF9iYWRfb2lkLT5oYXNoKTsKKwljaGFyICpiYWRfaGV4ID0gb2lkX3RvX2hleChjdXJyZW50X2JhZF9vaWQpOwogCWNoYXIgKmdvb2RfaGV4ID0gam9pbl9zaGExX2FycmF5X2hleCgmZ29vZF9yZXZzLCAnICcpOwogCi0Jd2FybmluZygidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSAiCisJd2FybmluZyhfKCJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdICIKIAkJIm11c3QgYmUgc2tpcHBlZC5cbiIKIAkJIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgIgogCQkiYmV0d2VlbiAlcyBhbmQgJXMuXG4iCi0JCSJXZSBjb250aW51ZSBhbnl3YXkuIiwKKwkJIldlIGNvbnRpbnVlIGFueXdheS4iKSwKIAkJYmFkX2hleCwgZ29vZF9oZXgsIHRlcm1fYmFkLCBtYl9oZXgsIGJhZF9oZXgpOwogCWZyZWUoZ29vZF9oZXgpOwogfQpAQCAtNzkyLDcgKzc5NSw3IEBACiAJCX0gZWxzZSBpZiAoMCA8PSBzaGExX2FycmF5X2xvb2t1cCgmc2tpcHBlZF9yZXZzLCBtYikpIHsKIAkJCWhhbmRsZV9za2lwcGVkX21lcmdlX2Jhc2UobWIpOwogCQl9IGVsc2UgewotCQkJcHJpbnRmKCJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIik7CisJCQlwcmludGYoXygiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIpKTsKIAkJCWV4aXQoYmlzZWN0X2NoZWNrb3V0KG1iLCBub19jaGVja291dCkpOwogCQl9CiAJfQpAQCAtODQzLDcgKzg0Niw3IEBACiAJaW50IGZkOwogCiAJaWYgKCFjdXJyZW50X2JhZF9vaWQpCi0JCWRpZSgiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiLCB0ZXJtX2JhZCk7CisJCWRpZShfKCJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIpLCB0ZXJtX2JhZCk7CiAKIAkvKiBDaGVjayBpZiBmaWxlIEJJU0VDVF9BTkNFU1RPUlNfT0sgZXhpc3RzLiAqLwogCWlmICghc3RhdChmaWxlbmFtZSwgJnN0KSAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKQpAQCAtODYwLDcgKzg2Myw3IEBACiAJLyogQ3JlYXRlIGZpbGUgQklTRUNUX0FOQ0VTVE9SU19PSy4gKi8KIAlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFksIDA2MDApOwogCWlmIChmZCA8IDApCi0JCXdhcm5pbmdfZXJybm8oImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIiwKKwkJd2FybmluZ19lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIpLAogCQkJICAgICAgZmlsZW5hbWUpOwogCWVsc2UKIAkJY2xvc2UoZmQpOwpAQCAtODkwLDYgKzg5Myw3IEBACiAJaWYgKCFvcHQuZGlmZm9wdC5vdXRwdXRfZm9ybWF0KQogCQlvcHQuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUkFXOwogCisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZvcHQsIE5VTEwpOwogCWxvZ190cmVlX2NvbW1pdCgmb3B0LCBjb21taXQpOwogfQogCkBAIC05MTAsNyArOTE0LDcgQEAKIAkJCSpyZWFkX2dvb2QgPSAiZ29vZCI7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSB7Ci0JCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIsIGZpbGVuYW1lKTsKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciKSwgZmlsZW5hbWUpOwogCQl9CiAJfSBlbHNlIHsKIAkJc3RyYnVmX2dldGxpbmVfbGYoJnN0ciwgZnApOwpAQCAtOTM2LDEwICs5NDAsMTEgQEAKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRyaWVkOwogCWludCByZWFjaGVzID0gMCwgYWxsID0gMCwgbnIsIHN0ZXBzOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJpc2VjdF9yZXY7CisJY2hhciBzdGVwc19tc2dbMzJdOwogCiAJcmVhZF9iaXNlY3RfdGVybXMoJnRlcm1fYmFkLCAmdGVybV9nb29kKTsKIAlpZiAocmVhZF9iaXNlY3RfcmVmcygpKQotCQlkaWUoInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIik7CisJCWRpZShfKCJyZWFkaW5nIGJpc2VjdCByZWZzIGZhaWxlZCIpKTsKIAogCWNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQocHJlZml4LCBub19jaGVja291dCk7CiAKQEAgLTk1OSw3ICs5NjQsNyBAQAogCQkgKi8KIAkJZXhpdF9pZl9za2lwcGVkX2NvbW1pdHModHJpZWQsIE5VTEwpOwogCi0JCXByaW50ZigiJXMgd2FzIGJvdGggJXMgYW5kICVzXG4iLAorCQlwcmludGYoXygiJXMgd2FzIGJvdGggJXMgYW5kICVzXG4iKSwKIAkJICAgICAgIG9pZF90b19oZXgoY3VycmVudF9iYWRfb2lkKSwKIAkJICAgICAgIHRlcm1fZ29vZCwKIAkJICAgICAgIHRlcm1fYmFkKTsKQEAgLTk2Nyw4ICs5NzIsOCBAQAogCX0KIAogCWlmICghYWxsKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgotCQkJIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIpOworCQlmcHJpbnRmKHN0ZGVyciwgXygiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorCQkJIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIpKTsKIAkJZXhpdCg0KTsKIAl9CiAKQEAgLTk4NSw5ICs5OTAsMTQgQEAKIAogCW5yID0gYWxsIC0gcmVhY2hlcyAtIDE7CiAJc3RlcHMgPSBlc3RpbWF0ZV9iaXNlY3Rfc3RlcHMoYWxsKTsKLQlwcmludGYoIkJpc2VjdGluZzogJWQgcmV2aXNpb24lcyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAiCi0JICAgICAgICIocm91Z2hseSAlZCBzdGVwJXMpXG4iLCBuciwgKG5yID09IDEgPyAiIiA6ICJzIiksCi0JICAgICAgIHN0ZXBzLCAoc3RlcHMgPT0gMSA/ICIiIDogInMiKSk7CisJeHNucHJpbnRmKHN0ZXBzX21zZywgc2l6ZW9mKHN0ZXBzX21zZyksCisJCSAgUV8oIihyb3VnaGx5ICVkIHN0ZXApIiwgIihyb3VnaGx5ICVkIHN0ZXBzKSIsIHN0ZXBzKSwKKwkJICBzdGVwcyk7CisJLyogVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aAorCSAgICIocm91Z2hseSAlZCBzdGVwcykiIHRyYW5zbGF0aW9uICovCisJcHJpbnRmKFFfKCJCaXNlY3Rpbmc6ICVkIHJldmlzaW9uIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iLAorCQkgICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIiwKKwkJICBuciksIG5yLCBzdGVwc19tc2cpOwogCiAJcmV0dXJuIGJpc2VjdF9jaGVja291dChiaXNlY3RfcmV2LCBub19jaGVja291dCk7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluL2FkZC5jIGIvYnVpbHRpbi9hZGQuYwppbmRleCAxNDVmMDZlLi5iMWRkZGI0IDEwMDY0NAotLS0gYS9idWlsdGluL2FkZC5jCisrKyBiL2J1aWx0aW4vYWRkLmMKQEAgLTI2LDcgKzI2LDcgQEAKIHN0YXRpYyBpbnQgdGFrZV93b3JrdHJlZV9jaGFuZ2VzOwogCiBzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgewotCWludCBmbGFnczsKKwlpbnQgZmxhZ3MsIGZvcmNlX21vZGU7CiAJaW50IGFkZF9lcnJvcnM7CiB9OwogCkBAIC02NSw3ICs2NSw4IEBACiAJCQlkaWUoXygidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIpLCBwLT5zdGF0dXMpOwogCQljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgogCQljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKLQkJCWlmIChhZGRfZmlsZV90b19pbmRleCgmdGhlX2luZGV4LCBwYXRoLCBkYXRhLT5mbGFncykpIHsKKwkJCWlmIChhZGRfZmlsZV90b19pbmRleCgmdGhlX2luZGV4LCBwYXRoLAorCQkJCQlkYXRhLT5mbGFncywgZGF0YS0+Zm9yY2VfbW9kZSkpIHsKIAkJCQlpZiAoIShkYXRhLT5mbGFncyAmIEFERF9DQUNIRV9JR05PUkVfRVJST1JTKSkKIAkJCQkJZGllKF8oInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIpKTsKIAkJCQlkYXRhLT5hZGRfZXJyb3JzKys7CkBAIC04MywxNCArODQsMTUgQEAKIAl9CiB9CiAKLWludCBhZGRfZmlsZXNfdG9fY2FjaGUoY29uc3QgY2hhciAqcHJlZml4LAotCQkgICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywgaW50IGZsYWdzKQoraW50IGFkZF9maWxlc190b19jYWNoZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJaW50IGZsYWdzLCBpbnQgZm9yY2VfbW9kZSkKIHsKIAlzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgZGF0YTsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2OwogCiAJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOwogCWRhdGEuZmxhZ3MgPSBmbGFnczsKKwlkYXRhLmZvcmNlX21vZGUgPSBmb3JjZV9tb2RlOwogCiAJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKIAlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CkBAIC0yMzgsNiArMjQwLDggQEAKIHN0YXRpYyBpbnQgYWRkcmVtb3ZlID0gQUREUkVNT1ZFX0RFRkFVTFQ7CiBzdGF0aWMgaW50IGFkZHJlbW92ZV9leHBsaWNpdCA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLwogCitzdGF0aWMgY2hhciAqY2htb2RfYXJnOworCiBzdGF0aWMgaW50IGlnbm9yZV9yZW1vdmFsX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCiB7CiAJLyogaWYgd2UgYXJlIHRvbGQgdG8gaWdub3JlLCB3ZSBhcmUgbm90IGFkZGluZyByZW1vdmFscyAqLwpAQCAtMjYzLDYgKzI2Nyw3IEBACiAJT1BUX0JPT0woIDAgLCAicmVmcmVzaCIsICZyZWZyZXNoX29ubHksIE5fKCJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiKSksCiAJT1BUX0JPT0woIDAgLCAiaWdub3JlLWVycm9ycyIsICZpZ25vcmVfYWRkX2Vycm9ycywgTl8oImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiKSksCiAJT1BUX0JPT0woIDAgLCAiaWdub3JlLW1pc3NpbmciLCAmaWdub3JlX21pc3NpbmcsIE5fKCJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iKSksCisJT1BUX1NUUklORyggMCAsICJjaG1vZCIsICZjaG1vZF9hcmcsIE5fKCIoKy8tKXgiKSwgTl8oIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIikpLAogCU9QVF9FTkQoKSwKIH07CiAKQEAgLTI3Niw3ICsyODEsNyBAQAogCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCi1zdGF0aWMgaW50IGFkZF9maWxlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IGFkZF9maWxlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBpbnQgZmxhZ3MsIGludCBmb3JjZV9tb2RlKQogewogCWludCBpLCBleGl0X3N0YXR1cyA9IDA7CiAKQEAgLTI4OSw3ICsyOTQsOCBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspCi0JCWlmIChhZGRfZmlsZV90b19jYWNoZShkaXItPmVudHJpZXNbaV0tPm5hbWUsIGZsYWdzKSkgeworCQlpZiAoYWRkX2ZpbGVfdG9faW5kZXgoJnRoZV9pbmRleCwgZGlyLT5lbnRyaWVzW2ldLT5uYW1lLAorCQkJCWZsYWdzLCBmb3JjZV9tb2RlKSkgewogCQkJaWYgKCFpZ25vcmVfYWRkX2Vycm9ycykKIAkJCQlkaWUoXygiYWRkaW5nIGZpbGVzIGZhaWxlZCIpKTsKIAkJCWV4aXRfc3RhdHVzID0gMTsKQEAgLTMwMiw3ICszMDgsNyBAQAogCWludCBleGl0X3N0YXR1cyA9IDA7CiAJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOwogCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKLQlpbnQgZmxhZ3M7CisJaW50IGZsYWdzLCBmb3JjZV9tb2RlOwogCWludCBhZGRfbmV3X2ZpbGVzOwogCWludCByZXF1aXJlX3BhdGhzcGVjOwogCWNoYXIgKnNlZW4gPSBOVUxMOwpAQCAtMzM2LDYgKzM0MiwxNSBAQAogCWlmICghc2hvd19vbmx5ICYmIGlnbm9yZV9taXNzaW5nKQogCQlkaWUoXygiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIpKTsKIAorCWlmICghY2htb2RfYXJnKQorCQlmb3JjZV9tb2RlID0gMDsKKwllbHNlIGlmICghc3RyY21wKGNobW9kX2FyZywgIi14IikpCisJCWZvcmNlX21vZGUgPSAwNjY2OworCWVsc2UgaWYgKCFzdHJjbXAoY2htb2RfYXJnLCAiK3giKSkKKwkJZm9yY2VfbW9kZSA9IDA3Nzc7CisJZWxzZQorCQlkaWUoXygiLS1jaG1vZCBwYXJhbSAnJXMnIG11c3QgYmUgZWl0aGVyIC14IG9yICt4IiksIGNobW9kX2FyZyk7CisKIAlhZGRfbmV3X2ZpbGVzID0gIXRha2Vfd29ya3RyZWVfY2hhbmdlcyAmJiAhcmVmcmVzaF9vbmx5OwogCXJlcXVpcmVfcGF0aHNwZWMgPSAhKHRha2Vfd29ya3RyZWVfY2hhbmdlcyB8fCAoMCA8IGFkZHJlbW92ZV9leHBsaWNpdCkpOwogCkBAIC00MjYsMTAgKzQ0MSwxMCBAQAogCiAJcGx1Z19idWxrX2NoZWNraW4oKTsKIAotCWV4aXRfc3RhdHVzIHw9IGFkZF9maWxlc190b19jYWNoZShwcmVmaXgsICZwYXRoc3BlYywgZmxhZ3MpOworCWV4aXRfc3RhdHVzIHw9IGFkZF9maWxlc190b19jYWNoZShwcmVmaXgsICZwYXRoc3BlYywgZmxhZ3MsIGZvcmNlX21vZGUpOwogCiAJaWYgKGFkZF9uZXdfZmlsZXMpCi0JCWV4aXRfc3RhdHVzIHw9IGFkZF9maWxlcygmZGlyLCBmbGFncyk7CisJCWV4aXRfc3RhdHVzIHw9IGFkZF9maWxlcygmZGlyLCBmbGFncywgZm9yY2VfbW9kZSk7CiAKIAl1bnBsdWdfYnVsa19jaGVja2luKCk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vYW0uYyBiL2J1aWx0aW4vYW0uYwppbmRleCAzZGZlNzBiLi43MzliMzRkIDEwMDY0NAotLS0gYS9idWlsdGluL2FtLmMKKysrIGIvYnVpbHRpbi9hbS5jCkBAIC03MCw3ICs3MCw4IEBACiAJUEFUQ0hfRk9STUFUX01CT1gsCiAJUEFUQ0hfRk9STUFUX1NUR0lULAogCVBBVENIX0ZPUk1BVF9TVEdJVF9TRVJJRVMsCi0JUEFUQ0hfRk9STUFUX0hHCisJUEFUQ0hfRk9STUFUX0hHLAorCVBBVENIX0ZPUk1BVF9NQk9YUkQKIH07CiAKIGVudW0ga2VlcF90eXBlIHsKQEAgLTE4MywyMiArMTg0LDIyIEBACiAvKioKICAqIEZvciBjb252ZW5pZW5jZSB0byBjYWxsIHdyaXRlX2ZpbGUoKQogICovCi1zdGF0aWMgaW50IHdyaXRlX3N0YXRlX3RleHQoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwKLQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdHJpbmcpCitzdGF0aWMgdm9pZCB3cml0ZV9zdGF0ZV90ZXh0KGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN0cmluZykKIHsKLQlyZXR1cm4gd3JpdGVfZmlsZShhbV9wYXRoKHN0YXRlLCBuYW1lKSwgIiVzIiwgc3RyaW5nKTsKKwl3cml0ZV9maWxlKGFtX3BhdGgoc3RhdGUsIG5hbWUpLCAiJXMiLCBzdHJpbmcpOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX3N0YXRlX2NvdW50KGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgdm9pZCB3cml0ZV9zdGF0ZV9jb3VudChjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQoreworCXdyaXRlX2ZpbGUoYW1fcGF0aChzdGF0ZSwgbmFtZSksICIlZCIsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfc3RhdGVfYm9vbChjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLAogCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpCiB7Ci0JcmV0dXJuIHdyaXRlX2ZpbGUoYW1fcGF0aChzdGF0ZSwgbmFtZSksICIlZCIsIHZhbHVlKTsKLX0KLQotc3RhdGljIGludCB3cml0ZV9zdGF0ZV9ib29sKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsCi0JCQkgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQotewotCXJldHVybiB3cml0ZV9zdGF0ZV90ZXh0KHN0YXRlLCBuYW1lLCB2YWx1ZSA/ICJ0IiA6ICJmIik7CisJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgbmFtZSwgdmFsdWUgPyAidCIgOiAiZiIpOwogfQogCiAvKioKQEAgLTQwMiwxMyArNDAzLDggQEAKICAqLwogc3RhdGljIHZvaWQgd3JpdGVfY29tbWl0X21zZyhjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQogewotCWludCBmZDsKIAljb25zdCBjaGFyICpmaWxlbmFtZSA9IGFtX3BhdGgoc3RhdGUsICJmaW5hbC1jb21taXQiKTsKLQotCWZkID0geG9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDY2Nik7Ci0JaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHN0YXRlLT5tc2csIHN0YXRlLT5tc2dfbGVuKSA8IDApCi0JCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgdG8gJXMiKSwgZmlsZW5hbWUpOwotCWNsb3NlKGZkKTsKKwl3cml0ZV9maWxlX2J1ZihmaWxlbmFtZSwgc3RhdGUtPm1zZywgc3RhdGUtPm1zZ19sZW4pOwogfQogCiAvKioKQEAgLTcxMiw3ICs3MDgsOCBAQAogICogU3BsaXRzIG91dCBpbmRpdmlkdWFsIGVtYWlsIHBhdGNoZXMgZnJvbSBgcGF0aHNgLCB3aGVyZSBlYWNoIHBhdGggaXMgZWl0aGVyCiAgKiBhIG1ib3ggZmlsZSBvciBhIE1haWxkaXIuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IHNwbGl0X21haWxfbWJveChzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICoqcGF0aHMsIGludCBrZWVwX2NyKQorc3RhdGljIGludCBzcGxpdF9tYWlsX21ib3goc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqKnBhdGhzLAorCQkJCWludCBrZWVwX2NyLCBpbnQgbWJveHJkKQogewogCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOwogCXN0cnVjdCBzdHJidWYgbGFzdCA9IFNUUkJVRl9JTklUOwpAQCAtNzI0LDYgKzcyMSw4IEBACiAJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLWIiKTsKIAlpZiAoa2VlcF9jcikKIAkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1rZWVwLWNyIik7CisJaWYgKG1ib3hyZCkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1tYm94cmQiKTsKIAlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLSIpOwogCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwLmFyZ3MsIHBhdGhzKTsKIApAQCAtOTY1LDEzICs5NjQsMTUgQEAKIAogCXN3aXRjaCAocGF0Y2hfZm9ybWF0KSB7CiAJY2FzZSBQQVRDSF9GT1JNQVRfTUJPWDoKLQkJcmV0dXJuIHNwbGl0X21haWxfbWJveChzdGF0ZSwgcGF0aHMsIGtlZXBfY3IpOworCQlyZXR1cm4gc3BsaXRfbWFpbF9tYm94KHN0YXRlLCBwYXRocywga2VlcF9jciwgMCk7CiAJY2FzZSBQQVRDSF9GT1JNQVRfU1RHSVQ6CiAJCXJldHVybiBzcGxpdF9tYWlsX2NvbnYoc3RnaXRfcGF0Y2hfdG9fbWFpbCwgc3RhdGUsIHBhdGhzLCBrZWVwX2NyKTsKIAljYXNlIFBBVENIX0ZPUk1BVF9TVEdJVF9TRVJJRVM6CiAJCXJldHVybiBzcGxpdF9tYWlsX3N0Z2l0X3NlcmllcyhzdGF0ZSwgcGF0aHMsIGtlZXBfY3IpOwogCWNhc2UgUEFUQ0hfRk9STUFUX0hHOgogCQlyZXR1cm4gc3BsaXRfbWFpbF9jb252KGhnX3BhdGNoX3RvX21haWwsIHN0YXRlLCBwYXRocywga2VlcF9jcik7CisJY2FzZSBQQVRDSF9GT1JNQVRfTUJPWFJEOgorCQlyZXR1cm4gc3BsaXRfbWFpbF9tYm94KHN0YXRlLCBwYXRocywga2VlcF9jciwgMSk7CiAJZGVmYXVsdDoKIAkJZGllKCJCVUc6IGludmFsaWQgcGF0Y2hfZm9ybWF0Iik7CiAJfQpAQCAtMTU3OCw0NyArMTU3OSwxOCBAQAogfQogCiAvKioKLSAqIERvIHRoZSB0aHJlZS13YXkgbWVyZ2UgdXNpbmcgZmFrZSBhbmNlc3RvciwgaGlzIHRyZWUgY29uc3RydWN0ZWQKLSAqIGZyb20gdGhlIGZha2UgYW5jZXN0b3IgYW5kIHRoZSBwb3N0aW1hZ2Ugb2YgdGhlIHBhdGNoLCBhbmQgb3VyCi0gKiBzdGF0ZS4KLSAqLwotc3RhdGljIGludCBydW5fZmFsbGJhY2tfbWVyZ2VfcmVjdXJzaXZlKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsCi0JCQkJCXVuc2lnbmVkIGNoYXIgKm9yaWdfdHJlZSwKLQkJCQkJdW5zaWduZWQgY2hhciAqb3VyX3RyZWUsCi0JCQkJCXVuc2lnbmVkIGNoYXIgKmhpc190cmVlKQotewotCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOwotCWludCBzdGF0dXM7Ci0KLQljcC5naXRfY21kID0gMTsKLQotCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmVudl9hcnJheSwgIkdJVEhFQURfJXM9JS4qcyIsCi0JCQkgc2hhMV90b19oZXgoaGlzX3RyZWUpLCBsaW5lbGVuKHN0YXRlLT5tc2cpLCBzdGF0ZS0+bXNnKTsKLQlpZiAoc3RhdGUtPnF1aWV0KQotCQlhcmd2X2FycmF5X3B1c2goJmNwLmVudl9hcnJheSwgIkdJVF9NRVJHRV9WRVJCT1NJVFk9MCIpOwotCi0JYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAibWVyZ2UtcmVjdXJzaXZlIik7Ci0JYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBzaGExX3RvX2hleChvcmlnX3RyZWUpKTsKLQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLSIpOwotCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgc2hhMV90b19oZXgob3VyX3RyZWUpKTsKLQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHNoYTFfdG9faGV4KGhpc190cmVlKSk7Ci0KLQlzdGF0dXMgPSBydW5fY29tbWFuZCgmY3ApID8gKC0xKSA6IDA7Ci0JZGlzY2FyZF9jYWNoZSgpOwotCXJlYWRfY2FjaGUoKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKioKICAqIEF0dGVtcHQgYSB0aHJlZXdheSBtZXJnZSwgdXNpbmcgaW5kZXhfcGF0aCBhcyB0aGUgdGVtcG9yYXJ5IGluZGV4LgogICovCiBzdGF0aWMgaW50IGZhbGxfYmFja190aHJlZXdheShjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICppbmRleF9wYXRoKQogewotCXVuc2lnbmVkIGNoYXIgb3JpZ190cmVlW0dJVF9TSEExX1JBV1NaXSwgaGlzX3RyZWVbR0lUX1NIQTFfUkFXU1pdLAotCQkgICAgICBvdXJfdHJlZVtHSVRfU0hBMV9SQVdTWl07CisJc3RydWN0IG9iamVjdF9pZCBvcmlnX3RyZWUsIHRoZWlyX3RyZWUsIG91cl90cmVlOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJhc2VzWzFdID0geyAmb3JpZ190cmVlIH07CisJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKKwlzdHJ1Y3QgY29tbWl0ICpyZXN1bHQ7CisJY2hhciAqdGhlaXJfdHJlZV9uYW1lOwogCi0JaWYgKGdldF9zaGExKCJIRUFEIiwgb3VyX3RyZWUpIDwgMCkKLQkJaGFzaGNweShvdXJfdHJlZSwgRU1QVFlfVFJFRV9TSEExX0JJTik7CisJaWYgKGdldF9vaWQoIkhFQUQiLCAmb3VyX3RyZWUpIDwgMCkKKwkJaGFzaGNweShvdXJfdHJlZS5oYXNoLCBFTVBUWV9UUkVFX1NIQTFfQklOKTsKIAogCWlmIChidWlsZF9mYWtlX2FuY2VzdG9yKHN0YXRlLCBpbmRleF9wYXRoKSkKIAkJcmV0dXJuIGVycm9yKCJjb3VsZCBub3QgYnVpbGQgZmFrZSBhbmNlc3RvciIpOwpAQCAtMTYyNiw3ICsxNTk4LDcgQEAKIAlkaXNjYXJkX2NhY2hlKCk7CiAJcmVhZF9jYWNoZV9mcm9tKGluZGV4X3BhdGgpOwogCi0JaWYgKHdyaXRlX2luZGV4X2FzX3RyZWUob3JpZ190cmVlLCAmdGhlX2luZGV4LCBpbmRleF9wYXRoLCAwLCBOVUxMKSkKKwlpZiAod3JpdGVfaW5kZXhfYXNfdHJlZShvcmlnX3RyZWUuaGFzaCwgJnRoZV9pbmRleCwgaW5kZXhfcGF0aCwgMCwgTlVMTCkpCiAJCXJldHVybiBlcnJvcihfKCJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIikpOwogCiAJc2F5KHN0YXRlLCBzdGRvdXQsIF8oIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iKSk7CkBAIC0xNjQyLDcgKzE2MTQsNyBAQAogCQlpbml0X3JldmlzaW9ucygmcmV2X2luZm8sIE5VTEwpOwogCQlyZXZfaW5mby5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUzsKIAkJZGlmZl9vcHRfcGFyc2UoJnJldl9pbmZvLmRpZmZvcHQsICZkaWZmX2ZpbHRlcl9zdHIsIDEsIHJldl9pbmZvLnByZWZpeCk7Ci0JCWFkZF9wZW5kaW5nX3NoYTEoJnJldl9pbmZvLCAiSEVBRCIsIG91cl90cmVlLCAwKTsKKwkJYWRkX3BlbmRpbmdfc2hhMSgmcmV2X2luZm8sICJIRUFEIiwgb3VyX3RyZWUuaGFzaCwgMCk7CiAJCWRpZmZfc2V0dXBfZG9uZSgmcmV2X2luZm8uZGlmZm9wdCk7CiAJCXJ1bl9kaWZmX2luZGV4KCZyZXZfaW5mbywgMSk7CiAJfQpAQCAtMTY1MSw3ICsxNjIzLDcgQEAKIAkJcmV0dXJuIGVycm9yKF8oIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCiAJCQkJIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iKSk7CiAKLQlpZiAod3JpdGVfaW5kZXhfYXNfdHJlZShoaXNfdHJlZSwgJnRoZV9pbmRleCwgaW5kZXhfcGF0aCwgMCwgTlVMTCkpCisJaWYgKHdyaXRlX2luZGV4X2FzX3RyZWUodGhlaXJfdHJlZS5oYXNoLCAmdGhlX2luZGV4LCBpbmRleF9wYXRoLCAwLCBOVUxMKSkKIAkJcmV0dXJuIGVycm9yKCJjb3VsZCBub3Qgd3JpdGUgdHJlZSIpOwogCiAJc2F5KHN0YXRlLCBzdGRvdXQsIF8oIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIpKTsKQEAgLTE2NjEsMTcgKzE2MzMsMjggQEAKIAogCS8qCiAJICogVGhpcyBpcyBub3Qgc28gd3JvbmcuIERlcGVuZGluZyBvbiB3aGljaCBiYXNlIHdlIHBpY2tlZCwgb3JpZ190cmVlCi0JICogbWF5IGJlIHdpbGRseSBkaWZmZXJlbnQgZnJvbSBvdXJzLCBidXQgaGlzX3RyZWUgaGFzIHRoZSBzYW1lIHNldCBvZgorCSAqIG1heSBiZSB3aWxkbHkgZGlmZmVyZW50IGZyb20gb3VycywgYnV0IHRoZWlyX3RyZWUgaGFzIHRoZSBzYW1lIHNldCBvZgogCSAqIHdpbGRseSBkaWZmZXJlbnQgY2hhbmdlcyBpbiBwYXJ0cyB0aGUgcGF0Y2ggZGlkIG5vdCB0b3VjaCwgc28KIAkgKiByZWN1cnNpdmUgZW5kcyB1cCBjYW5jZWxpbmcgdGhlbSwgc2F5aW5nIHRoYXQgd2UgcmV2ZXJ0ZWQgYWxsIHRob3NlCiAJICogY2hhbmdlcy4KIAkgKi8KIAotCWlmIChydW5fZmFsbGJhY2tfbWVyZ2VfcmVjdXJzaXZlKHN0YXRlLCBvcmlnX3RyZWUsIG91cl90cmVlLCBoaXNfdHJlZSkpIHsKKwlpbml0X21lcmdlX29wdGlvbnMoJm8pOworCisJby5icmFuY2gxID0gIkhFQUQiOworCXRoZWlyX3RyZWVfbmFtZSA9IHhzdHJmbXQoIiUuKnMiLCBsaW5lbGVuKHN0YXRlLT5tc2cpLCBzdGF0ZS0+bXNnKTsKKwlvLmJyYW5jaDIgPSB0aGVpcl90cmVlX25hbWU7CisKKwlpZiAoc3RhdGUtPnF1aWV0KQorCQlvLnZlcmJvc2l0eSA9IDA7CisKKwlpZiAobWVyZ2VfcmVjdXJzaXZlX2dlbmVyaWMoJm8sICZvdXJfdHJlZSwgJnRoZWlyX3RyZWUsIDEsIGJhc2VzLCAmcmVzdWx0KSkgewogCQlyZXJlcmUoc3RhdGUtPmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlKTsKKwkJZnJlZSh0aGVpcl90cmVlX25hbWUpOwogCQlyZXR1cm4gZXJyb3IoXygiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIpKTsKIAl9CiAKKwlmcmVlKHRoZWlyX3RyZWVfbmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MzksNiArMTgyMiw4IEBACiAJCWNvbnN0IGNoYXIgKm1haWwgPSBhbV9wYXRoKHN0YXRlLCBtc2dudW0oc3RhdGUpKTsKIAkJaW50IGFwcGx5X3N0YXR1czsKIAorCQlyZXNldF9pZGVudF9kYXRlKCk7CisKIAkJaWYgKCFmaWxlX2V4aXN0cyhtYWlsKSkKIAkJCWdvdG8gbmV4dDsKIApAQCAtMjIwMSw2ICsyMTg2LDggQEAKIAkJKm9wdF92YWx1ZSA9IFBBVENIX0ZPUk1BVF9TVEdJVF9TRVJJRVM7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJoZyIpKQogCQkqb3B0X3ZhbHVlID0gUEFUQ0hfRk9STUFUX0hHOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAibWJveHJkIikpCisJCSpvcHRfdmFsdWUgPSBQQVRDSF9GT1JNQVRfTUJPWFJEOwogCWVsc2UKIAkJcmV0dXJuIGVycm9yKF8oIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIpLCBhcmcpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9hcHBseS5jIGIvYnVpbHRpbi9hcHBseS5jCmluZGV4IGM3NzBkN2QuLjFhNDg4ZjkgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vYXBwbHkuYworKysgYi9idWlsdGluL2FwcGx5LmMKQEAgLTIxLDEzMiArMjEsMTYxIEBACiAjaW5jbHVkZSAibGwtbWVyZ2UuaCIKICNpbmNsdWRlICJyZXJlcmUuaCIKIAotLyoKLSAqICAtLWNoZWNrIHR1cm5zIG9uIGNoZWNraW5nIHRoYXQgdGhlIHdvcmtpbmcgdHJlZSBtYXRjaGVzIHRoZQotICogICAgZmlsZXMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQsIGJ1dCBkb2Vzbid0IGFwcGx5IHRoZSBwYXRjaAotICogIC0tc3RhdCBkb2VzIGp1c3QgYSBkaWZmc3RhdCwgYW5kIGRvZXNuJ3QgYWN0dWFsbHkgYXBwbHkKLSAqICAtLW51bXN0YXQgZG9lcyBudW1lcmljIGRpZmZzdGF0LCBhbmQgZG9lc24ndCBhY3R1YWxseSBhcHBseQotICogIC0taW5kZXgtaW5mbyBzaG93cyB0aGUgb2xkIGFuZCBuZXcgaW5kZXggaW5mbyBmb3IgcGF0aHMgaWYgYXZhaWxhYmxlLgotICogIC0taW5kZXggdXBkYXRlcyB0aGUgY2FjaGUgYXMgd2VsbC4KLSAqICAtLWNhY2hlZCB1cGRhdGVzIG9ubHkgdGhlIGNhY2hlIHdpdGhvdXQgZXZlciB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlLgotICovCi1zdGF0aWMgY29uc3QgY2hhciAqcHJlZml4Owotc3RhdGljIGludCBwcmVmaXhfbGVuZ3RoID0gLTE7Ci1zdGF0aWMgaW50IG5ld2ZkID0gLTE7CitlbnVtIHdzX2Vycm9yX2FjdGlvbiB7CisJbm93YXJuX3dzX2Vycm9yLAorCXdhcm5fb25fd3NfZXJyb3IsCisJZGllX29uX3dzX2Vycm9yLAorCWNvcnJlY3Rfd3NfZXJyb3IKK307CiAKLXN0YXRpYyBpbnQgdW5pZGlmZl96ZXJvOwotc3RhdGljIGludCBwX3ZhbHVlID0gMTsKLXN0YXRpYyBpbnQgcF92YWx1ZV9rbm93bjsKLXN0YXRpYyBpbnQgY2hlY2tfaW5kZXg7Ci1zdGF0aWMgaW50IHVwZGF0ZV9pbmRleDsKLXN0YXRpYyBpbnQgY2FjaGVkOwotc3RhdGljIGludCBkaWZmc3RhdDsKLXN0YXRpYyBpbnQgbnVtc3RhdDsKLXN0YXRpYyBpbnQgc3VtbWFyeTsKLXN0YXRpYyBpbnQgY2hlY2s7Ci1zdGF0aWMgaW50IGFwcGx5ID0gMTsKLXN0YXRpYyBpbnQgYXBwbHlfaW5fcmV2ZXJzZTsKLXN0YXRpYyBpbnQgYXBwbHlfd2l0aF9yZWplY3Q7Ci1zdGF0aWMgaW50IGFwcGx5X3ZlcmJvc2VseTsKLXN0YXRpYyBpbnQgYWxsb3dfb3ZlcmxhcDsKLXN0YXRpYyBpbnQgbm9fYWRkOwotc3RhdGljIGludCB0aHJlZXdheTsKLXN0YXRpYyBpbnQgdW5zYWZlX3BhdGhzOwotc3RhdGljIGNvbnN0IGNoYXIgKmZha2VfYW5jZXN0b3I7Ci1zdGF0aWMgaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOwotc3RhdGljIHVuc2lnbmVkIGludCBwX2NvbnRleHQgPSBVSU5UX01BWDsKKworZW51bSB3c19pZ25vcmUgeworCWlnbm9yZV93c19ub25lLAorCWlnbm9yZV93c19jaGFuZ2UKK307CisKKy8qCisgKiBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93IHN5bWxpbmtzIGluIHRoZSBwcmVpbWFnZSBhcmUKKyAqIG1hbmlwdWxhdGVkIGJ5IHRoZSBwYXRjaGVzLiAgQSBwYXRjaCB0byBhZGQgYS9iL2Mgd2hlcmUgYS9iCisgKiBpcyBhIHN5bWxpbmsgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGFmZmVjdCB0aGUgZGlyZWN0b3J5CisgKiB0aGUgc3ltbGluayBwb2ludHMgYXQsIGJ1dCBpZiB0aGUgc2FtZSBwYXRjaCByZW1vdmVzIGEvYiwKKyAqIGl0IGlzIHBlcmZlY3RseSBmaW5lLCBhcyB0aGUgcGF0Y2ggcmVtb3ZlcyBhL2IgdG8gbWFrZSByb29tCisgKiB0byBjcmVhdGUgYSBkaXJlY3RvcnkgYS9iIHNvIHRoYXQgYS9iL2MgY2FuIGJlIGNyZWF0ZWQuCisgKgorICogU2VlIGFsc28gInN0cnVjdCBzdHJpbmdfbGlzdCBzeW1saW5rX2NoYW5nZXMiIGluICJzdHJ1Y3QKKyAqIGFwcGx5X3N0YXRlIi4KKyAqLworI2RlZmluZSBTWU1MSU5LX0dPRVNfQVdBWSAwMQorI2RlZmluZSBTWU1MSU5LX0lOX1JFU1VMVCAwMgorCitzdHJ1Y3QgYXBwbHlfc3RhdGUgeworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwlpbnQgcHJlZml4X2xlbmd0aDsKKworCS8qIFRoZXNlIGFyZSBsb2NrX2ZpbGUgcmVsYXRlZCAqLworCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZTsKKwlpbnQgbmV3ZmQ7CisKKwkvKiBUaGVzZSBjb250cm9sIHdoYXQgZ2V0cyBsb29rZWQgYXQgYW5kIG1vZGlmaWVkICovCisJaW50IGFwcGx5OyAvKiB0aGlzIGlzIG5vdCBhIGRyeS1ydW4gKi8KKwlpbnQgY2FjaGVkOyAvKiBhcHBseSB0byB0aGUgaW5kZXggb25seSAqLworCWludCBjaGVjazsgLyogcHJlaW1hZ2UgbXVzdCBtYXRjaCB3b3JraW5nIHRyZWUsIGRvbid0IGFjdHVhbGx5IGFwcGx5ICovCisJaW50IGNoZWNrX2luZGV4OyAvKiBwcmVpbWFnZSBtdXN0IG1hdGNoIHRoZSBpbmRleGVkIHZlcnNpb24gKi8KKwlpbnQgdXBkYXRlX2luZGV4OyAvKiBjaGVja19pbmRleCAmJiBhcHBseSAqLworCisJLyogVGhlc2UgY29udHJvbCBjb3NtZXRpYyBhc3BlY3Qgb2YgdGhlIG91dHB1dCAqLworCWludCBkaWZmc3RhdDsgLyoganVzdCBzaG93IGEgZGlmZnN0YXQsIGFuZCBkb24ndCBhY3R1YWxseSBhcHBseSAqLworCWludCBudW1zdGF0OyAvKiBqdXN0IHNob3cgYSBudW1lcmljIGRpZmZzdGF0LCBhbmQgZG9uJ3QgYWN0dWFsbHkgYXBwbHkgKi8KKwlpbnQgc3VtbWFyeTsgLyoganVzdCByZXBvcnQgY3JlYXRpb24sIGRlbGV0aW9uLCBldGMsIGFuZCBkb24ndCBhY3R1YWxseSBhcHBseSAqLworCisJLyogVGhlc2UgYm9vbGVhbiBwYXJhbWV0ZXJzIGNvbnRyb2wgaG93IHRoZSBhcHBseSBpcyBkb25lICovCisJaW50IGFsbG93X292ZXJsYXA7CisJaW50IGFwcGx5X2luX3JldmVyc2U7CisJaW50IGFwcGx5X3dpdGhfcmVqZWN0OworCWludCBhcHBseV92ZXJib3NlbHk7CisJaW50IG5vX2FkZDsKKwlpbnQgdGhyZWV3YXk7CisJaW50IHVuaWRpZmZfemVybzsKKwlpbnQgdW5zYWZlX3BhdGhzOworCisJLyogT3RoZXIgbm9uIGJvb2xlYW4gcGFyYW1ldGVycyAqLworCWNvbnN0IGNoYXIgKmZha2VfYW5jZXN0b3I7CisJY29uc3QgY2hhciAqcGF0Y2hfaW5wdXRfZmlsZTsKKwlpbnQgbGluZV90ZXJtaW5hdGlvbjsKKwlzdHJ1Y3Qgc3RyYnVmIHJvb3Q7CisJaW50IHBfdmFsdWU7CisJaW50IHBfdmFsdWVfa25vd247CisJdW5zaWduZWQgaW50IHBfY29udGV4dDsKKworCS8qIEV4Y2x1ZGUgYW5kIGluY2x1ZGUgcGF0aCBwYXJhbWV0ZXJzICovCisJc3RydWN0IHN0cmluZ19saXN0IGxpbWl0X2J5X25hbWU7CisJaW50IGhhc19pbmNsdWRlOworCisJLyogVmFyaW91cyAiY3VycmVudCBzdGF0ZSIgKi8KKwlpbnQgbGluZW5yOyAvKiBjdXJyZW50IGxpbmUgbnVtYmVyICovCisJc3RydWN0IHN0cmluZ19saXN0IHN5bWxpbmtfY2hhbmdlczsgLyogd2UgaGF2ZSB0byB0cmFjayBzeW1saW5rcyAqLworCisJLyoKKwkgKiBGb3IgImRpZmYtc3RhdCIgbGlrZSBiZWhhdmlvdXIsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIGJpZ2dlc3QgY2hhbmdlCisJICogd2UndmUgc2VlbiwgYW5kIHRoZSBsb25nZXN0IGZpbGVuYW1lLiBUaGF0IGFsbG93cyB1cyB0byBkbyBzaW1wbGUKKwkgKiBzY2FsaW5nLgorCSAqLworCWludCBtYXhfY2hhbmdlOworCWludCBtYXhfbGVuOworCisJLyoKKwkgKiBSZWNvcmRzIGZpbGVuYW1lcyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLCBpbiBvcmRlciB0byBoYW5kbGUKKwkgKiB0aGUgY2FzZSB3aGVyZSBtb3JlIHRoYW4gb25lIHBhdGNoZXMgdG91Y2ggdGhlIHNhbWUgZmlsZS4KKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZm5fdGFibGU7CisKKwkvKiBUaGVzZSBjb250cm9sIHdoaXRlc3BhY2UgZXJyb3JzICovCisJZW51bSB3c19lcnJvcl9hY3Rpb24gd3NfZXJyb3JfYWN0aW9uOworCWVudW0gd3NfaWdub3JlIHdzX2lnbm9yZV9hY3Rpb247CisJY29uc3QgY2hhciAqd2hpdGVzcGFjZV9vcHRpb247CisJaW50IHdoaXRlc3BhY2VfZXJyb3I7CisJaW50IHNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnM7CisJaW50IGFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzOworfTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcHBseV91c2FnZVtdID0gewogCU5fKCJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIiksCiAJTlVMTAogfTsKIAotc3RhdGljIGVudW0gd3NfZXJyb3JfYWN0aW9uIHsKLQlub3dhcm5fd3NfZXJyb3IsCi0Jd2Fybl9vbl93c19lcnJvciwKLQlkaWVfb25fd3NfZXJyb3IsCi0JY29ycmVjdF93c19lcnJvcgotfSB3c19lcnJvcl9hY3Rpb24gPSB3YXJuX29uX3dzX2Vycm9yOwotc3RhdGljIGludCB3aGl0ZXNwYWNlX2Vycm9yOwotc3RhdGljIGludCBzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzID0gNTsKLXN0YXRpYyBpbnQgYXBwbGllZF9hZnRlcl9maXhpbmdfd3M7Ci0KLXN0YXRpYyBlbnVtIHdzX2lnbm9yZSB7Ci0JaWdub3JlX3dzX25vbmUsCi0JaWdub3JlX3dzX2NoYW5nZQotfSB3c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7Ci0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnBhdGNoX2lucHV0X2ZpbGU7Ci1zdGF0aWMgc3RydWN0IHN0cmJ1ZiByb290ID0gU1RSQlVGX0lOSVQ7Ci1zdGF0aWMgaW50IHJlYWRfc3RkaW4gPSAxOwotc3RhdGljIGludCBvcHRpb25zOwotCi1zdGF0aWMgdm9pZCBwYXJzZV93aGl0ZXNwYWNlX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24pCitzdGF0aWMgdm9pZCBwYXJzZV93aGl0ZXNwYWNlX29wdGlvbihzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpvcHRpb24pCiB7CiAJaWYgKCFvcHRpb24pIHsKLQkJd3NfZXJyb3JfYWN0aW9uID0gd2Fybl9vbl93c19lcnJvcjsKKwkJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IHdhcm5fb25fd3NfZXJyb3I7CiAJCXJldHVybjsKIAl9CiAJaWYgKCFzdHJjbXAob3B0aW9uLCAid2FybiIpKSB7Ci0JCXdzX2Vycm9yX2FjdGlvbiA9IHdhcm5fb25fd3NfZXJyb3I7CisJCXN0YXRlLT53c19lcnJvcl9hY3Rpb24gPSB3YXJuX29uX3dzX2Vycm9yOwogCQlyZXR1cm47CiAJfQogCWlmICghc3RyY21wKG9wdGlvbiwgIm5vd2FybiIpKSB7Ci0JCXdzX2Vycm9yX2FjdGlvbiA9IG5vd2Fybl93c19lcnJvcjsKKwkJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IG5vd2Fybl93c19lcnJvcjsKIAkJcmV0dXJuOwogCX0KIAlpZiAoIXN0cmNtcChvcHRpb24sICJlcnJvciIpKSB7Ci0JCXdzX2Vycm9yX2FjdGlvbiA9IGRpZV9vbl93c19lcnJvcjsKKwkJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IGRpZV9vbl93c19lcnJvcjsKIAkJcmV0dXJuOwogCX0KIAlpZiAoIXN0cmNtcChvcHRpb24sICJlcnJvci1hbGwiKSkgewotCQl3c19lcnJvcl9hY3Rpb24gPSBkaWVfb25fd3NfZXJyb3I7Ci0JCXNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgPSAwOworCQlzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID0gZGllX29uX3dzX2Vycm9yOworCQlzdGF0ZS0+c3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9ycyA9IDA7CiAJCXJldHVybjsKIAl9CiAJaWYgKCFzdHJjbXAob3B0aW9uLCAic3RyaXAiKSB8fCAhc3RyY21wKG9wdGlvbiwgImZpeCIpKSB7Ci0JCXdzX2Vycm9yX2FjdGlvbiA9IGNvcnJlY3Rfd3NfZXJyb3I7CisJCXN0YXRlLT53c19lcnJvcl9hY3Rpb24gPSBjb3JyZWN0X3dzX2Vycm9yOwogCQlyZXR1cm47CiAJfQogCWRpZShfKCJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIpLCBvcHRpb24pOwogfQogCi1zdGF0aWMgdm9pZCBwYXJzZV9pZ25vcmV3aGl0ZXNwYWNlX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24pCitzdGF0aWMgdm9pZCBwYXJzZV9pZ25vcmV3aGl0ZXNwYWNlX29wdGlvbihzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCQkgIGNvbnN0IGNoYXIgKm9wdGlvbikKIHsKIAlpZiAoIW9wdGlvbiB8fCAhc3RyY21wKG9wdGlvbiwgIm5vIikgfHwKIAkgICAgIXN0cmNtcChvcHRpb24sICJmYWxzZSIpIHx8ICFzdHJjbXAob3B0aW9uLCAibmV2ZXIiKSB8fAogCSAgICAhc3RyY21wKG9wdGlvbiwgIm5vbmUiKSkgewotCQl3c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7CisJCXN0YXRlLT53c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7CiAJCXJldHVybjsKIAl9CiAJaWYgKCFzdHJjbXAob3B0aW9uLCAiY2hhbmdlIikpIHsKLQkJd3NfaWdub3JlX2FjdGlvbiA9IGlnbm9yZV93c19jaGFuZ2U7CisJCXN0YXRlLT53c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX2NoYW5nZTsKIAkJcmV0dXJuOwogCX0KIAlkaWUoXygidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIiksIG9wdGlvbik7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZShjb25zdCBjaGFyICp3aGl0ZXNwYWNlX29wdGlvbikKK3N0YXRpYyB2b2lkIHNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlKQogewotCWlmICghd2hpdGVzcGFjZV9vcHRpb24gJiYgIWFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSkKLQkJd3NfZXJyb3JfYWN0aW9uID0gKGFwcGx5ID8gd2Fybl9vbl93c19lcnJvciA6IG5vd2Fybl93c19lcnJvcik7CisJaWYgKCFzdGF0ZS0+d2hpdGVzcGFjZV9vcHRpb24gJiYgIWFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSkKKwkJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IChzdGF0ZS0+YXBwbHkgPyB3YXJuX29uX3dzX2Vycm9yIDogbm93YXJuX3dzX2Vycm9yKTsKIH0KIAogLyoKLSAqIEZvciAiZGlmZi1zdGF0IiBsaWtlIGJlaGF2aW91ciwgd2Uga2VlcCB0cmFjayBvZiB0aGUgYmlnZ2VzdCBjaGFuZ2UKLSAqIHdlJ3ZlIHNlZW4sIGFuZCB0aGUgbG9uZ2VzdCBmaWxlbmFtZS4gVGhhdCBhbGxvd3MgdXMgdG8gZG8gc2ltcGxlCi0gKiBzY2FsaW5nLgotICovCi1zdGF0aWMgaW50IG1heF9jaGFuZ2UsIG1heF9sZW47Ci0KLS8qCi0gKiBWYXJpb3VzICJjdXJyZW50IHN0YXRlIiwgbm90YWJseSBsaW5lIG51bWJlcnMgYW5kIHdoYXQKLSAqIGZpbGUgKGFuZCBob3cpIHdlJ3JlIHBhdGNoaW5nIHJpZ2h0IG5vdy4uIFRoZSAiaXNfeHh4eCIKLSAqIHRoaW5ncyBhcmUgZmxhZ3MsIHdoZXJlIC0xIG1lYW5zICJkb24ndCBrbm93IHlldCIuCi0gKi8KLXN0YXRpYyBpbnQgbGluZW5yID0gMTsKLQotLyoKICAqIFRoaXMgcmVwcmVzZW50cyBvbmUgImh1bmsiIGZyb20gYSBwYXRjaCwgc3RhcnRpbmcgd2l0aAogICogIkBAIC1vbGRwb3Msb2xkbGluZXMgK25ld3BvcyxuZXdsaW5lcyBAQCIgbWFya2VyLiAgVGhlCiAgKiBwYXRjaCB0ZXh0IGlzIHBvaW50ZWQgYXQgYnkgcGF0Y2gsIGFuZCBpdHMgYnl0ZSBsZW5ndGgKQEAgLTI2NSwxMyArMjk0LDYgQEAKIAlzdHJ1Y3QgbGluZSAqbGluZTsKIH07CiAKLS8qCi0gKiBSZWNvcmRzIGZpbGVuYW1lcyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLCBpbiBvcmRlciB0byBoYW5kbGUKLSAqIHRoZSBjYXNlIHdoZXJlIG1vcmUgdGhhbiBvbmUgcGF0Y2hlcyB0b3VjaCB0aGUgc2FtZSBmaWxlLgotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZm5fdGFibGU7Ci0KIHN0YXRpYyB1aW50MzJfdCBoYXNoX2xpbmUoY29uc3QgY2hhciAqY3AsIHNpemVfdCBsZW4pCiB7CiAJc2l6ZV90IGk7CkBAIC00NjksNyArNDkxLDEwIEBACiAJcmV0dXJuIG5hbWU7CiB9CiAKLXN0YXRpYyBjaGFyICpmaW5kX25hbWVfZ251KGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmRlZiwgaW50IHBfdmFsdWUpCitzdGF0aWMgY2hhciAqZmluZF9uYW1lX2dudShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIGNvbnN0IGNoYXIgKmRlZiwKKwkJCSAgIGludCBwX3ZhbHVlKQogewogCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOwogCWNoYXIgKmNwOwpAQCAtNDkzLDggKzUxOCw4IEBACiAJfQogCiAJc3RyYnVmX3JlbW92ZSgmbmFtZSwgMCwgY3AgLSBuYW1lLmJ1Zik7Ci0JaWYgKHJvb3QubGVuKQotCQlzdHJidWZfaW5zZXJ0KCZuYW1lLCAwLCByb290LmJ1Ziwgcm9vdC5sZW4pOworCWlmIChzdGF0ZS0+cm9vdC5sZW4pCisJCXN0cmJ1Zl9pbnNlcnQoJm5hbWUsIDAsIHN0YXRlLT5yb290LmJ1Ziwgc3RhdGUtPnJvb3QubGVuKTsKIAlyZXR1cm4gc3F1YXNoX3NsYXNoKHN0cmJ1Zl9kZXRhY2goJm5hbWUsIE5VTEwpKTsKIH0KIApAQCAtNjU3LDggKzY4MiwxMiBAQAogCXJldHVybiBsaW5lICsgbGVuIC0gZW5kOwogfQogCi1zdGF0aWMgY2hhciAqZmluZF9uYW1lX2NvbW1vbihjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpkZWYsCi0JCQkgICAgICBpbnQgcF92YWx1ZSwgY29uc3QgY2hhciAqZW5kLCBpbnQgdGVybWluYXRlKQorc3RhdGljIGNoYXIgKmZpbmRfbmFtZV9jb21tb24oc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICAgICBjb25zdCBjaGFyICpkZWYsCisJCQkgICAgICBpbnQgcF92YWx1ZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKwkJCSAgICAgIGludCB0ZXJtaW5hdGUpCiB7CiAJaW50IGxlbjsKIAljb25zdCBjaGFyICpzdGFydCA9IE5VTEw7CkBAIC02OTYsMzIgKzcyNSwzOSBAQAogCQkJcmV0dXJuIHNxdWFzaF9zbGFzaCh4c3RyZHVwKGRlZikpOwogCX0KIAotCWlmIChyb290LmxlbikgewotCQljaGFyICpyZXQgPSB4c3RyZm10KCIlcyUuKnMiLCByb290LmJ1ZiwgbGVuLCBzdGFydCk7CisJaWYgKHN0YXRlLT5yb290LmxlbikgeworCQljaGFyICpyZXQgPSB4c3RyZm10KCIlcyUuKnMiLCBzdGF0ZS0+cm9vdC5idWYsIGxlbiwgc3RhcnQpOwogCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHJldCk7CiAJfQogCiAJcmV0dXJuIHNxdWFzaF9zbGFzaCh4bWVtZHVweihzdGFydCwgbGVuKSk7CiB9CiAKLXN0YXRpYyBjaGFyICpmaW5kX25hbWUoY29uc3QgY2hhciAqbGluZSwgY2hhciAqZGVmLCBpbnQgcF92YWx1ZSwgaW50IHRlcm1pbmF0ZSkKK3N0YXRpYyBjaGFyICpmaW5kX25hbWUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCSAgICAgICBjaGFyICpkZWYsCisJCSAgICAgICBpbnQgcF92YWx1ZSwKKwkJICAgICAgIGludCB0ZXJtaW5hdGUpCiB7CiAJaWYgKCpsaW5lID09ICciJykgewotCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShsaW5lLCBkZWYsIHBfdmFsdWUpOworCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShzdGF0ZSwgbGluZSwgZGVmLCBwX3ZhbHVlKTsKIAkJaWYgKG5hbWUpCiAJCQlyZXR1cm4gbmFtZTsKIAl9CiAKLQlyZXR1cm4gZmluZF9uYW1lX2NvbW1vbihsaW5lLCBkZWYsIHBfdmFsdWUsIE5VTEwsIHRlcm1pbmF0ZSk7CisJcmV0dXJuIGZpbmRfbmFtZV9jb21tb24oc3RhdGUsIGxpbmUsIGRlZiwgcF92YWx1ZSwgTlVMTCwgdGVybWluYXRlKTsKIH0KIAotc3RhdGljIGNoYXIgKmZpbmRfbmFtZV90cmFkaXRpb25hbChjb25zdCBjaGFyICpsaW5lLCBjaGFyICpkZWYsIGludCBwX3ZhbHVlKQorc3RhdGljIGNoYXIgKmZpbmRfbmFtZV90cmFkaXRpb25hbChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCSAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkJICAgY2hhciAqZGVmLAorCQkJCSAgIGludCBwX3ZhbHVlKQogewogCXNpemVfdCBsZW47CiAJc2l6ZV90IGRhdGVfbGVuOwogCiAJaWYgKCpsaW5lID09ICciJykgewotCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShsaW5lLCBkZWYsIHBfdmFsdWUpOworCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShzdGF0ZSwgbGluZSwgZGVmLCBwX3ZhbHVlKTsKIAkJaWYgKG5hbWUpCiAJCQlyZXR1cm4gbmFtZTsKIAl9CkBAIC03MjksMTAgKzc2NSwxMCBAQAogCWxlbiA9IHN0cmNocm51bChsaW5lLCAnXG4nKSAtIGxpbmU7CiAJZGF0ZV9sZW4gPSBkaWZmX3RpbWVzdGFtcF9sZW4obGluZSwgbGVuKTsKIAlpZiAoIWRhdGVfbGVuKQotCQlyZXR1cm4gZmluZF9uYW1lX2NvbW1vbihsaW5lLCBkZWYsIHBfdmFsdWUsIE5VTEwsIFRFUk1fVEFCKTsKKwkJcmV0dXJuIGZpbmRfbmFtZV9jb21tb24oc3RhdGUsIGxpbmUsIGRlZiwgcF92YWx1ZSwgTlVMTCwgVEVSTV9UQUIpOwogCWxlbiAtPSBkYXRlX2xlbjsKIAotCXJldHVybiBmaW5kX25hbWVfY29tbW9uKGxpbmUsIGRlZiwgcF92YWx1ZSwgbGluZSArIGxlbiwgMCk7CisJcmV0dXJuIGZpbmRfbmFtZV9jb21tb24oc3RhdGUsIGxpbmUsIGRlZiwgcF92YWx1ZSwgbGluZSArIGxlbiwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgY291bnRfc2xhc2hlcyhjb25zdCBjaGFyICpjcCkKQEAgLTc1MCwzMCArNzg2LDMwIEBACiAgKiBHaXZlbiB0aGUgc3RyaW5nIGFmdGVyICItLS0gIiBvciAiKysrICIsIGd1ZXNzIHRoZSBhcHByb3ByaWF0ZQogICogcF92YWx1ZSBmb3IgdGhlIGdpdmVuIHBhdGNoLgogICovCi1zdGF0aWMgaW50IGd1ZXNzX3BfdmFsdWUoY29uc3QgY2hhciAqbmFtZWxpbmUpCitzdGF0aWMgaW50IGd1ZXNzX3BfdmFsdWUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbmFtZWxpbmUpCiB7CiAJY2hhciAqbmFtZSwgKmNwOwogCWludCB2YWwgPSAtMTsKIAogCWlmIChpc19kZXZfbnVsbChuYW1lbGluZSkpCiAJCXJldHVybiAtMTsKLQluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKG5hbWVsaW5lLCBOVUxMLCAwKTsKKwluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKHN0YXRlLCBuYW1lbGluZSwgTlVMTCwgMCk7CiAJaWYgKCFuYW1lKQogCQlyZXR1cm4gLTE7CiAJY3AgPSBzdHJjaHIobmFtZSwgJy8nKTsKIAlpZiAoIWNwKQogCQl2YWwgPSAwOwotCWVsc2UgaWYgKHByZWZpeCkgeworCWVsc2UgaWYgKHN0YXRlLT5wcmVmaXgpIHsKIAkJLyoKIAkJICogRG9lcyBpdCBiZWdpbiB3aXRoICJhLyRvdXItcHJlZml4IiBhbmQgc3VjaD8gIFRoZW4gdGhpcyBpcwogCQkgKiB2ZXJ5IGxpa2VseSB0byBhcHBseSB0byBvdXIgZGlyZWN0b3J5LgogCQkgKi8KLQkJaWYgKCFzdHJuY21wKG5hbWUsIHByZWZpeCwgcHJlZml4X2xlbmd0aCkpCi0JCQl2YWwgPSBjb3VudF9zbGFzaGVzKHByZWZpeCk7CisJCWlmICghc3RybmNtcChuYW1lLCBzdGF0ZS0+cHJlZml4LCBzdGF0ZS0+cHJlZml4X2xlbmd0aCkpCisJCQl2YWwgPSBjb3VudF9zbGFzaGVzKHN0YXRlLT5wcmVmaXgpOwogCQllbHNlIHsKIAkJCWNwKys7Ci0JCQlpZiAoIXN0cm5jbXAoY3AsIHByZWZpeCwgcHJlZml4X2xlbmd0aCkpCi0JCQkJdmFsID0gY291bnRfc2xhc2hlcyhwcmVmaXgpICsgMTsKKwkJCWlmICghc3RybmNtcChjcCwgc3RhdGUtPnByZWZpeCwgc3RhdGUtPnByZWZpeF9sZW5ndGgpKQorCQkJCXZhbCA9IGNvdW50X3NsYXNoZXMoc3RhdGUtPnByZWZpeCkgKyAxOwogCQl9CiAJfQogCWZyZWUobmFtZSk7CkBAIC04NjAsMzYgKzg5NiwzOSBAQAogICogZmlsZXMsIHdlIGNhbiBoYXBwaWx5IGNoZWNrIHRoZSBpbmRleCBmb3IgYSBtYXRjaCwgYnV0IGZvciBjcmVhdGluZyBhCiAgKiBuZXcgZmlsZSB3ZSBzaG91bGQgdHJ5IHRvIG1hdGNoIHdoYXRldmVyICJwYXRjaCIgZG9lcy4gSSBoYXZlIG5vIGlkZWEuCiAgKi8KLXN0YXRpYyB2b2lkIHBhcnNlX3RyYWRpdGlvbmFsX3BhdGNoKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgdm9pZCBwYXJzZV90cmFkaXRpb25hbF9wYXRjaChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCSAgICBjb25zdCBjaGFyICpmaXJzdCwKKwkJCQkgICAgY29uc3QgY2hhciAqc2Vjb25kLAorCQkJCSAgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCWNoYXIgKm5hbWU7CiAKIAlmaXJzdCArPSA0OwkvKiBza2lwICItLS0gIiAqLwogCXNlY29uZCArPSA0OwkvKiBza2lwICIrKysgIiAqLwotCWlmICghcF92YWx1ZV9rbm93bikgeworCWlmICghc3RhdGUtPnBfdmFsdWVfa25vd24pIHsKIAkJaW50IHAsIHE7Ci0JCXAgPSBndWVzc19wX3ZhbHVlKGZpcnN0KTsKLQkJcSA9IGd1ZXNzX3BfdmFsdWUoc2Vjb25kKTsKKwkJcCA9IGd1ZXNzX3BfdmFsdWUoc3RhdGUsIGZpcnN0KTsKKwkJcSA9IGd1ZXNzX3BfdmFsdWUoc3RhdGUsIHNlY29uZCk7CiAJCWlmIChwIDwgMCkgcCA9IHE7CiAJCWlmICgwIDw9IHAgJiYgcCA9PSBxKSB7Ci0JCQlwX3ZhbHVlID0gcDsKLQkJCXBfdmFsdWVfa25vd24gPSAxOworCQkJc3RhdGUtPnBfdmFsdWUgPSBwOworCQkJc3RhdGUtPnBfdmFsdWVfa25vd24gPSAxOwogCQl9CiAJfQogCWlmIChpc19kZXZfbnVsbChmaXJzdCkpIHsKIAkJcGF0Y2gtPmlzX25ldyA9IDE7CiAJCXBhdGNoLT5pc19kZWxldGUgPSAwOwotCQluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKHNlY29uZCwgTlVMTCwgcF92YWx1ZSk7CisJCW5hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoc3RhdGUsIHNlY29uZCwgTlVMTCwgc3RhdGUtPnBfdmFsdWUpOwogCQlwYXRjaC0+bmV3X25hbWUgPSBuYW1lOwogCX0gZWxzZSBpZiAoaXNfZGV2X251bGwoc2Vjb25kKSkgewogCQlwYXRjaC0+aXNfbmV3ID0gMDsKIAkJcGF0Y2gtPmlzX2RlbGV0ZSA9IDE7Ci0JCW5hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoZmlyc3QsIE5VTEwsIHBfdmFsdWUpOworCQluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKHN0YXRlLCBmaXJzdCwgTlVMTCwgc3RhdGUtPnBfdmFsdWUpOwogCQlwYXRjaC0+b2xkX25hbWUgPSBuYW1lOwogCX0gZWxzZSB7CiAJCWNoYXIgKmZpcnN0X25hbWU7Ci0JCWZpcnN0X25hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoZmlyc3QsIE5VTEwsIHBfdmFsdWUpOwotCQluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKHNlY29uZCwgZmlyc3RfbmFtZSwgcF92YWx1ZSk7CisJCWZpcnN0X25hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoc3RhdGUsIGZpcnN0LCBOVUxMLCBzdGF0ZS0+cF92YWx1ZSk7CisJCW5hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoc3RhdGUsIHNlY29uZCwgZmlyc3RfbmFtZSwgc3RhdGUtPnBfdmFsdWUpOwogCQlmcmVlKGZpcnN0X25hbWUpOwogCQlpZiAoaGFzX2Vwb2NoX3RpbWVzdGFtcChmaXJzdCkpIHsKIAkJCXBhdGNoLT5pc19uZXcgPSAxOwpAQCAtOTA1LDEwICs5NDQsMTIgQEAKIAkJfQogCX0KIAlpZiAoIW5hbWUpCi0JCWRpZShfKCJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIiksIGxpbmVucik7CisJCWRpZShfKCJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIiksIHN0YXRlLT5saW5lbnIpOwogfQogCi1zdGF0aWMgaW50IGdpdGRpZmZfaGRyZW5kKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGdpdGRpZmZfaGRyZW5kKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJcmV0dXJuIC0xOwogfQpAQCAtOTI1LDEwNyArOTY2LDEzNSBAQAogI2RlZmluZSBESUZGX09MRF9OQU1FIDAKICNkZWZpbmUgRElGRl9ORVdfTkFNRSAxCiAKLXN0YXRpYyBjaGFyICpnaXRkaWZmX3ZlcmlmeV9uYW1lKGNvbnN0IGNoYXIgKmxpbmUsIGludCBpc251bGwsIGNoYXIgKm9yaWdfbmFtZSwgaW50IHNpZGUpCitzdGF0aWMgdm9pZCBnaXRkaWZmX3ZlcmlmeV9uYW1lKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkJY29uc3QgY2hhciAqbGluZSwKKwkJCQlpbnQgaXNudWxsLAorCQkJCWNoYXIgKipuYW1lLAorCQkJCWludCBzaWRlKQogewotCWlmICghb3JpZ19uYW1lICYmICFpc251bGwpCi0JCXJldHVybiBmaW5kX25hbWUobGluZSwgTlVMTCwgcF92YWx1ZSwgVEVSTV9UQUIpOworCWlmICghKm5hbWUgJiYgIWlzbnVsbCkgeworCQkqbmFtZSA9IGZpbmRfbmFtZShzdGF0ZSwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUsIFRFUk1fVEFCKTsKKwkJcmV0dXJuOworCX0KIAotCWlmIChvcmlnX25hbWUpIHsKLQkJaW50IGxlbiA9IHN0cmxlbihvcmlnX25hbWUpOworCWlmICgqbmFtZSkgeworCQlpbnQgbGVuID0gc3RybGVuKCpuYW1lKTsKIAkJY2hhciAqYW5vdGhlcjsKIAkJaWYgKGlzbnVsbCkKIAkJCWRpZShfKCJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiKSwKLQkJCSAgICBvcmlnX25hbWUsIGxpbmVucik7Ci0JCWFub3RoZXIgPSBmaW5kX25hbWUobGluZSwgTlVMTCwgcF92YWx1ZSwgVEVSTV9UQUIpOwotCQlpZiAoIWFub3RoZXIgfHwgbWVtY21wKGFub3RoZXIsIG9yaWdfbmFtZSwgbGVuICsgMSkpCisJCQkgICAgKm5hbWUsIHN0YXRlLT5saW5lbnIpOworCQlhbm90aGVyID0gZmluZF9uYW1lKHN0YXRlLCBsaW5lLCBOVUxMLCBzdGF0ZS0+cF92YWx1ZSwgVEVSTV9UQUIpOworCQlpZiAoIWFub3RoZXIgfHwgbWVtY21wKGFub3RoZXIsICpuYW1lLCBsZW4gKyAxKSkKIAkJCWRpZSgoc2lkZSA9PSBESUZGX05FV19OQU1FKSA/CiAJCQkgICAgXygiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiKSA6Ci0JCQkgICAgXygiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiKSwgbGluZW5yKTsKKwkJCSAgICBfKCJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIpLCBzdGF0ZS0+bGluZW5yKTsKIAkJZnJlZShhbm90aGVyKTsKLQkJcmV0dXJuIG9yaWdfbmFtZTsKIAl9IGVsc2UgewogCQkvKiBleHBlY3QgIi9kZXYvbnVsbCIgKi8KIAkJaWYgKG1lbWNtcCgiL2Rldi9udWxsIiwgbGluZSwgOSkgfHwgbGluZVs5XSAhPSAnXG4nKQotCQkJZGllKF8oImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiKSwgbGluZW5yKTsKLQkJcmV0dXJuIE5VTEw7CisJCQlkaWUoXygiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIpLCBzdGF0ZS0+bGluZW5yKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9vbGRuYW1lKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGdpdGRpZmZfb2xkbmFtZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7Ci0JcGF0Y2gtPm9sZF9uYW1lID0gZ2l0ZGlmZl92ZXJpZnlfbmFtZShsaW5lLCBwYXRjaC0+aXNfbmV3LCBwYXRjaC0+b2xkX25hbWUsCi0JCQkJCSAgICAgIERJRkZfT0xEX05BTUUpOworCWdpdGRpZmZfdmVyaWZ5X25hbWUoc3RhdGUsIGxpbmUsCisJCQkgICAgcGF0Y2gtPmlzX25ldywgJnBhdGNoLT5vbGRfbmFtZSwKKwkJCSAgICBESUZGX09MRF9OQU1FKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaXRkaWZmX25ld25hbWUoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9uZXduYW1lKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKLQlwYXRjaC0+bmV3X25hbWUgPSBnaXRkaWZmX3ZlcmlmeV9uYW1lKGxpbmUsIHBhdGNoLT5pc19kZWxldGUsIHBhdGNoLT5uZXdfbmFtZSwKLQkJCQkJICAgICAgRElGRl9ORVdfTkFNRSk7CisJZ2l0ZGlmZl92ZXJpZnlfbmFtZShzdGF0ZSwgbGluZSwKKwkJCSAgICBwYXRjaC0+aXNfZGVsZXRlLCAmcGF0Y2gtPm5ld19uYW1lLAorCQkJICAgIERJRkZfTkVXX05BTUUpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdpdGRpZmZfb2xkbW9kZShjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQorc3RhdGljIGludCBnaXRkaWZmX29sZG1vZGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCXBhdGNoLT5vbGRfbW9kZSA9IHN0cnRvdWwobGluZSwgTlVMTCwgOCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9uZXdtb2RlKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGdpdGRpZmZfbmV3bW9kZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJcGF0Y2gtPm5ld19tb2RlID0gc3RydG91bChsaW5lLCBOVUxMLCA4KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaXRkaWZmX2RlbGV0ZShjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQorc3RhdGljIGludCBnaXRkaWZmX2RlbGV0ZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICBjb25zdCBjaGFyICpsaW5lLAorCQkJICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCXBhdGNoLT5pc19kZWxldGUgPSAxOwogCWZyZWUocGF0Y2gtPm9sZF9uYW1lKTsKIAlwYXRjaC0+b2xkX25hbWUgPSB4c3RyZHVwX29yX251bGwocGF0Y2gtPmRlZl9uYW1lKTsKLQlyZXR1cm4gZ2l0ZGlmZl9vbGRtb2RlKGxpbmUsIHBhdGNoKTsKKwlyZXR1cm4gZ2l0ZGlmZl9vbGRtb2RlKHN0YXRlLCBsaW5lLCBwYXRjaCk7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9uZXdmaWxlKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGdpdGRpZmZfbmV3ZmlsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJcGF0Y2gtPmlzX25ldyA9IDE7CiAJZnJlZShwYXRjaC0+bmV3X25hbWUpOwogCXBhdGNoLT5uZXdfbmFtZSA9IHhzdHJkdXBfb3JfbnVsbChwYXRjaC0+ZGVmX25hbWUpOwotCXJldHVybiBnaXRkaWZmX25ld21vZGUobGluZSwgcGF0Y2gpOworCXJldHVybiBnaXRkaWZmX25ld21vZGUoc3RhdGUsIGxpbmUsIHBhdGNoKTsKIH0KIAotc3RhdGljIGludCBnaXRkaWZmX2NvcHlzcmMoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9jb3B5c3JjKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAlwYXRjaC0+aXNfY29weSA9IDE7CiAJZnJlZShwYXRjaC0+b2xkX25hbWUpOwotCXBhdGNoLT5vbGRfbmFtZSA9IGZpbmRfbmFtZShsaW5lLCBOVUxMLCBwX3ZhbHVlID8gcF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlwYXRjaC0+b2xkX25hbWUgPSBmaW5kX25hbWUoc3RhdGUsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlID8gc3RhdGUtPnBfdmFsdWUgLSAxIDogMCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9jb3B5ZHN0KGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGdpdGRpZmZfY29weWRzdChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJcGF0Y2gtPmlzX2NvcHkgPSAxOwogCWZyZWUocGF0Y2gtPm5ld19uYW1lKTsKLQlwYXRjaC0+bmV3X25hbWUgPSBmaW5kX25hbWUobGluZSwgTlVMTCwgcF92YWx1ZSA/IHBfdmFsdWUgLSAxIDogMCwgMCk7CisJcGF0Y2gtPm5ld19uYW1lID0gZmluZF9uYW1lKHN0YXRlLCBsaW5lLCBOVUxMLCBzdGF0ZS0+cF92YWx1ZSA/IHN0YXRlLT5wX3ZhbHVlIC0gMSA6IDAsIDApOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdpdGRpZmZfcmVuYW1lc3JjKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGdpdGRpZmZfcmVuYW1lc3JjKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJcGF0Y2gtPmlzX3JlbmFtZSA9IDE7CiAJZnJlZShwYXRjaC0+b2xkX25hbWUpOwotCXBhdGNoLT5vbGRfbmFtZSA9IGZpbmRfbmFtZShsaW5lLCBOVUxMLCBwX3ZhbHVlID8gcF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlwYXRjaC0+b2xkX25hbWUgPSBmaW5kX25hbWUoc3RhdGUsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlID8gc3RhdGUtPnBfdmFsdWUgLSAxIDogMCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9yZW5hbWVkc3QoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9yZW5hbWVkc3Qoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAlwYXRjaC0+aXNfcmVuYW1lID0gMTsKIAlmcmVlKHBhdGNoLT5uZXdfbmFtZSk7Ci0JcGF0Y2gtPm5ld19uYW1lID0gZmluZF9uYW1lKGxpbmUsIE5VTEwsIHBfdmFsdWUgPyBwX3ZhbHVlIC0gMSA6IDAsIDApOworCXBhdGNoLT5uZXdfbmFtZSA9IGZpbmRfbmFtZShzdGF0ZSwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUgPyBzdGF0ZS0+cF92YWx1ZSAtIDEgOiAwLCAwKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaXRkaWZmX3NpbWlsYXJpdHkoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9zaW1pbGFyaXR5KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvdWwobGluZSwgTlVMTCwgMTApOwogCWlmICh2YWwgPD0gMTAwKQpAQCAtMTAzMyw3ICsxMTAyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaXRkaWZmX2Rpc3NpbWlsYXJpdHkoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9kaXNzaW1pbGFyaXR5KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkJIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkJIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzdHJ0b3VsKGxpbmUsIE5VTEwsIDEwKTsKIAlpZiAodmFsIDw9IDEwMCkKQEAgLTEwNDEsNyArMTExMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0ZGlmZl9pbmRleChjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQorc3RhdGljIGludCBnaXRkaWZmX2luZGV4KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgY29uc3QgY2hhciAqbGluZSwKKwkJCSBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCS8qCiAJICogaW5kZXggbGluZSBpcyBOIGhleGFkZWNpbWFsLCAiLi4iLCBOIGhleGFkZWNpbWFsLApAQCAtMTA3OCw3ICsxMTUxLDkgQEAKICAqIFRoaXMgaXMgbm9ybWFsIGZvciBhIGRpZmYgdGhhdCBkb2Vzbid0IGNoYW5nZSBhbnl0aGluZzogd2UnbGwgZmFsbCB0aHJvdWdoCiAgKiBpbnRvIHRoZSBuZXh0IGRpZmYuIFRlbGwgdGhlIHBhcnNlciB0byBicmVhayBvdXQuCiAgKi8KLXN0YXRpYyBpbnQgZ2l0ZGlmZl91bnJlY29nbml6ZWQoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyBpbnQgZ2l0ZGlmZl91bnJlY29nbml6ZWQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCQljb25zdCBjaGFyICpsaW5lLAorCQkJCXN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJcmV0dXJuIC0xOwogfQpAQCAtMTA4NywxNSArMTE2MiwxNyBAQAogICogU2tpcCBwX3ZhbHVlIGxlYWRpbmcgY29tcG9uZW50cyBmcm9tICJsaW5lIjsgYXMgd2UgZG8gbm90IGFjY2VwdAogICogYWJzb2x1dGUgcGF0aHMsIHJldHVybiBOVUxMIGluIHRoYXQgY2FzZS4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfdHJlZV9wcmVmaXgoY29uc3QgY2hhciAqbGluZSwgaW50IGxsZW4pCitzdGF0aWMgY29uc3QgY2hhciAqc2tpcF90cmVlX3ByZWZpeChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCSAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJCSAgICBpbnQgbGxlbikKIHsKIAlpbnQgbnNsYXNoOwogCWludCBpOwogCi0JaWYgKCFwX3ZhbHVlKQorCWlmICghc3RhdGUtPnBfdmFsdWUpCiAJCXJldHVybiAobGxlbiAmJiBsaW5lWzBdID09ICcvJykgPyBOVUxMIDogbGluZTsKIAotCW5zbGFzaCA9IHBfdmFsdWU7CisJbnNsYXNoID0gc3RhdGUtPnBfdmFsdWU7CiAJZm9yIChpID0gMDsgaSA8IGxsZW47IGkrKykgewogCQlpbnQgY2ggPSBsaW5lW2ldOwogCQlpZiAoY2ggPT0gJy8nICYmIC0tbnNsYXNoIDw9IDApCkBAIC0xMTEyLDcgKzExODksOSBAQAogICogY3JlYXRpb24gb3IgZGVsZXRpb24gb2YgYW4gZW1wdHkgZmlsZS4gIEluIGFueSBvZiB0aGVzZSBjYXNlcywKICAqIGJvdGggc2lkZXMgYXJlIHRoZSBzYW1lIG5hbWUgdW5kZXIgYS8gYW5kIGIvIHJlc3BlY3RpdmVseS4KICAqLwotc3RhdGljIGNoYXIgKmdpdF9oZWFkZXJfbmFtZShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGxlbikKK3N0YXRpYyBjaGFyICpnaXRfaGVhZGVyX25hbWUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgICAgaW50IGxsZW4pCiB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICpzZWNvbmQgPSBOVUxMOwpAQCAtMTEzMCw3ICsxMjA5LDcgQEAKIAkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CiAKIAkJLyogc3RyaXAgdGhlIGEvYiBwcmVmaXggaW5jbHVkaW5nIHRyYWlsaW5nIHNsYXNoICovCi0JCWNwID0gc2tpcF90cmVlX3ByZWZpeChmaXJzdC5idWYsIGZpcnN0Lmxlbik7CisJCWNwID0gc2tpcF90cmVlX3ByZWZpeChzdGF0ZSwgZmlyc3QuYnVmLCBmaXJzdC5sZW4pOwogCQlpZiAoIWNwKQogCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKIAkJc3RyYnVmX3JlbW92ZSgmZmlyc3QsIDAsIGNwIC0gZmlyc3QuYnVmKTsKQEAgLTExNDcsNyArMTIyNiw3IEBACiAJCWlmICgqc2Vjb25kID09ICciJykgewogCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmc3AsIHNlY29uZCwgTlVMTCkpCiAJCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKLQkJCWNwID0gc2tpcF90cmVlX3ByZWZpeChzcC5idWYsIHNwLmxlbik7CisJCQljcCA9IHNraXBfdHJlZV9wcmVmaXgoc3RhdGUsIHNwLmJ1Ziwgc3AubGVuKTsKIAkJCWlmICghY3ApCiAJCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKIAkJCS8qIFRoZXkgbXVzdCBtYXRjaCwgb3RoZXJ3aXNlIGlnbm9yZSAqLwpAQCAtMTE1OCw3ICsxMjM3LDcgQEAKIAkJfQogCiAJCS8qIHVucXVvdGVkIHNlY29uZCAqLwotCQljcCA9IHNraXBfdHJlZV9wcmVmaXgoc2Vjb25kLCBsaW5lICsgbGxlbiAtIHNlY29uZCk7CisJCWNwID0gc2tpcF90cmVlX3ByZWZpeChzdGF0ZSwgc2Vjb25kLCBsaW5lICsgbGxlbiAtIHNlY29uZCk7CiAJCWlmICghY3ApCiAJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOwogCQlpZiAobGluZSArIGxsZW4gLSBjcCAhPSBmaXJzdC5sZW4gfHwKQEAgLTExNzMsNyArMTI1Miw3IEBACiAJfQogCiAJLyogdW5xdW90ZWQgZmlyc3QgbmFtZSAqLwotCW5hbWUgPSBza2lwX3RyZWVfcHJlZml4KGxpbmUsIGxsZW4pOworCW5hbWUgPSBza2lwX3RyZWVfcHJlZml4KHN0YXRlLCBsaW5lLCBsbGVuKTsKIAlpZiAoIW5hbWUpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xMTg5LDcgKzEyNjgsNyBAQAogCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmc3AsIHNlY29uZCwgTlVMTCkpCiAJCQkJZ290byBmcmVlX2FuZF9mYWlsMjsKIAotCQkJbnAgPSBza2lwX3RyZWVfcHJlZml4KHNwLmJ1Ziwgc3AubGVuKTsKKwkJCW5wID0gc2tpcF90cmVlX3ByZWZpeChzdGF0ZSwgc3AuYnVmLCBzcC5sZW4pOwogCQkJaWYgKCFucCkKIAkJCQlnb3RvIGZyZWVfYW5kX2ZhaWwyOwogCkBAIC0xMjMzLDcgKzEzMTIsNyBAQAogCQkJICovCiAJCQlpZiAoIW5hbWVbbGVuICsgMV0pCiAJCQkJcmV0dXJuIE5VTEw7IC8qIG5vIHBvc3RpbWFnZSBuYW1lICovCi0JCQlzZWNvbmQgPSBza2lwX3RyZWVfcHJlZml4KG5hbWUgKyBsZW4gKyAxLAorCQkJc2Vjb25kID0gc2tpcF90cmVlX3ByZWZpeChzdGF0ZSwgbmFtZSArIGxlbiArIDEsCiAJCQkJCQkgIGxpbmVfbGVuIC0gKGxlbiArIDEpKTsKIAkJCWlmICghc2Vjb25kKQogCQkJCXJldHVybiBOVUxMOwpAQCAtMTI0OSw3ICsxMzI4LDExIEBACiB9CiAKIC8qIFZlcmlmeSB0aGF0IHdlIHJlY29nbml6ZSB0aGUgbGluZXMgZm9sbG93aW5nIGEgZ2l0IGhlYWRlciAqLwotc3RhdGljIGludCBwYXJzZV9naXRfaGVhZGVyKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIGludCBzaXplLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQorc3RhdGljIGludCBwYXJzZV9naXRfaGVhZGVyKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgICBpbnQgbGVuLAorCQkJICAgIHVuc2lnbmVkIGludCBzaXplLAorCQkJICAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAKQEAgLTEyNjMsMjAgKzEzNDYsMjAgQEAKIAkgKiBvciByZW1vdmluZyBvciBhZGRpbmcgZW1wdHkgZmlsZXMpLCBzbyB3ZSBnZXQKIAkgKiB0aGUgZGVmYXVsdCBuYW1lIGZyb20gdGhlIGhlYWRlci4KIAkgKi8KLQlwYXRjaC0+ZGVmX25hbWUgPSBnaXRfaGVhZGVyX25hbWUobGluZSwgbGVuKTsKLQlpZiAocGF0Y2gtPmRlZl9uYW1lICYmIHJvb3QubGVuKSB7Ci0JCWNoYXIgKnMgPSB4c3RyZm10KCIlcyVzIiwgcm9vdC5idWYsIHBhdGNoLT5kZWZfbmFtZSk7CisJcGF0Y2gtPmRlZl9uYW1lID0gZ2l0X2hlYWRlcl9uYW1lKHN0YXRlLCBsaW5lLCBsZW4pOworCWlmIChwYXRjaC0+ZGVmX25hbWUgJiYgc3RhdGUtPnJvb3QubGVuKSB7CisJCWNoYXIgKnMgPSB4c3RyZm10KCIlcyVzIiwgc3RhdGUtPnJvb3QuYnVmLCBwYXRjaC0+ZGVmX25hbWUpOwogCQlmcmVlKHBhdGNoLT5kZWZfbmFtZSk7CiAJCXBhdGNoLT5kZWZfbmFtZSA9IHM7CiAJfQogCiAJbGluZSArPSBsZW47CiAJc2l6ZSAtPSBsZW47Ci0JbGluZW5yKys7Ci0JZm9yIChvZmZzZXQgPSBsZW4gOyBzaXplID4gMCA7IG9mZnNldCArPSBsZW4sIHNpemUgLT0gbGVuLCBsaW5lICs9IGxlbiwgbGluZW5yKyspIHsKKwlzdGF0ZS0+bGluZW5yKys7CisJZm9yIChvZmZzZXQgPSBsZW4gOyBzaXplID4gMCA7IG9mZnNldCArPSBsZW4sIHNpemUgLT0gbGVuLCBsaW5lICs9IGxlbiwgc3RhdGUtPmxpbmVucisrKSB7CiAJCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3BlbnRyeSB7CiAJCQljb25zdCBjaGFyICpzdHI7Ci0JCQlpbnQgKCpmbikoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcGF0Y2ggKik7CisJCQlpbnQgKCpmbikoc3RydWN0IGFwcGx5X3N0YXRlICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IHBhdGNoICopOwogCQl9IG9wdGFibGVbXSA9IHsKIAkJCXsgIkBAIC0iLCBnaXRkaWZmX2hkcmVuZCB9LAogCQkJeyAiLS0tICIsIGdpdGRpZmZfb2xkbmFtZSB9LApAQCAtMTMwNiw3ICsxMzg5LDcgQEAKIAkJCWludCBvcGxlbiA9IHN0cmxlbihwLT5zdHIpOwogCQkJaWYgKGxlbiA8IG9wbGVuIHx8IG1lbWNtcChwLT5zdHIsIGxpbmUsIG9wbGVuKSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChwLT5mbihsaW5lICsgb3BsZW4sIHBhdGNoKSA8IDApCisJCQlpZiAocC0+Zm4oc3RhdGUsIGxpbmUgKyBvcGxlbiwgcGF0Y2gpIDwgMCkKIAkJCQlyZXR1cm4gb2Zmc2V0OwogCQkJYnJlYWs7CiAJCX0KQEAgLTE0MzEsNyArMTUxNCwxMSBAQAogCXJldHVybiBvZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZmluZF9oZWFkZXIoY29uc3QgY2hhciAqbGluZSwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgKmhkcnNpemUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGZpbmRfaGVhZGVyKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCSAgICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgICAgaW50ICpoZHJzaXplLAorCQkgICAgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGVuOwogCkBAIC0xNDQwLDcgKzE1MjcsNyBAQAogCXBhdGNoLT5pc19uZXcgPSBwYXRjaC0+aXNfZGVsZXRlID0gLTE7CiAJcGF0Y2gtPm9sZF9tb2RlID0gcGF0Y2gtPm5ld19tb2RlID0gMDsKIAlwYXRjaC0+b2xkX25hbWUgPSBwYXRjaC0+bmV3X25hbWUgPSBOVUxMOwotCWZvciAob2Zmc2V0ID0gMDsgc2l6ZSA+IDA7IG9mZnNldCArPSBsZW4sIHNpemUgLT0gbGVuLCBsaW5lICs9IGxlbiwgbGluZW5yKyspIHsKKwlmb3IgKG9mZnNldCA9IDA7IHNpemUgPiAwOyBvZmZzZXQgKz0gbGVuLCBzaXplIC09IGxlbiwgbGluZSArPSBsZW4sIHN0YXRlLT5saW5lbnIrKykgewogCQl1bnNpZ25lZCBsb25nIG5leHRsZW47CiAKIAkJbGVuID0gbGluZWxlbihsaW5lLCBzaXplKTsKQEAgLTE0NjEsNyArMTU0OCw3IEBACiAJCQlpZiAocGFyc2VfZnJhZ21lbnRfaGVhZGVyKGxpbmUsIGxlbiwgJmR1bW15KSA8IDApCiAJCQkJY29udGludWU7CiAJCQlkaWUoXygicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIpLAotCQkJICAgIGxpbmVuciwgKGludClsZW4tMSwgbGluZSk7CisJCQkgICAgc3RhdGUtPmxpbmVuciwgKGludClsZW4tMSwgbGluZSk7CiAJCX0KIAogCQlpZiAoc2l6ZSA8IGxlbiArIDYpCkBAIC0xNDcyLDcgKzE1NTksNyBAQAogCQkgKiBvciBtb2RlIGNoYW5nZSwgc28gd2UgaGFuZGxlIHRoYXQgc3BlY2lhbGx5CiAJCSAqLwogCQlpZiAoIW1lbWNtcCgiZGlmZiAtLWdpdCAiLCBsaW5lLCAxMSkpIHsKLQkJCWludCBnaXRfaGRyX2xlbiA9IHBhcnNlX2dpdF9oZWFkZXIobGluZSwgbGVuLCBzaXplLCBwYXRjaCk7CisJCQlpbnQgZ2l0X2hkcl9sZW4gPSBwYXJzZV9naXRfaGVhZGVyKHN0YXRlLCBsaW5lLCBsZW4sIHNpemUsIHBhdGNoKTsKIAkJCWlmIChnaXRfaGRyX2xlbiA8PSBsZW4pCiAJCQkJY29udGludWU7CiAJCQlpZiAoIXBhdGNoLT5vbGRfbmFtZSAmJiAhcGF0Y2gtPm5ld19uYW1lKSB7CkBAIC0xNDgxLDE0ICsxNTY4LDE0IEBACiAJCQkJCSAgICAgICAiJWQgbGVhZGluZyBwYXRobmFtZSBjb21wb25lbnQgKGxpbmUgJWQpIiwKIAkJCQkJICAgICAgICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAiCiAJCQkJCSAgICAgICAiJWQgbGVhZGluZyBwYXRobmFtZSBjb21wb25lbnRzIChsaW5lICVkKSIsCi0JCQkJCSAgICAgICBwX3ZhbHVlKSwKLQkJCQkJICAgIHBfdmFsdWUsIGxpbmVucik7CisJCQkJCSAgICAgICBzdGF0ZS0+cF92YWx1ZSksCisJCQkJCSAgICBzdGF0ZS0+cF92YWx1ZSwgc3RhdGUtPmxpbmVucik7CiAJCQkJcGF0Y2gtPm9sZF9uYW1lID0geHN0cmR1cChwYXRjaC0+ZGVmX25hbWUpOwogCQkJCXBhdGNoLT5uZXdfbmFtZSA9IHhzdHJkdXAocGF0Y2gtPmRlZl9uYW1lKTsKIAkJCX0KIAkJCWlmICghcGF0Y2gtPmlzX2RlbGV0ZSAmJiAhcGF0Y2gtPm5ld19uYW1lKQogCQkJCWRpZSgiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uICIKLQkJCQkgICAgIihsaW5lICVkKSIsIGxpbmVucik7CisJCQkJICAgICIobGluZSAlZCkiLCBzdGF0ZS0+bGluZW5yKTsKIAkJCXBhdGNoLT5pc190b3BsZXZlbF9yZWxhdGl2ZSA9IDE7CiAJCQkqaGRyc2l6ZSA9IGdpdF9oZHJfbGVuOwogCQkJcmV0dXJuIG9mZnNldDsKQEAgLTE1MDgsMzcgKzE1OTUsNDQgQEAKIAkJCWNvbnRpbnVlOwogCiAJCS8qIE9rLCB3ZSdsbCBjb25zaWRlciBpdCBhIHBhdGNoICovCi0JCXBhcnNlX3RyYWRpdGlvbmFsX3BhdGNoKGxpbmUsIGxpbmUrbGVuLCBwYXRjaCk7CisJCXBhcnNlX3RyYWRpdGlvbmFsX3BhdGNoKHN0YXRlLCBsaW5lLCBsaW5lK2xlbiwgcGF0Y2gpOwogCQkqaGRyc2l6ZSA9IGxlbiArIG5leHRsZW47Ci0JCWxpbmVuciArPSAyOworCQlzdGF0ZS0+bGluZW5yICs9IDI7CiAJCXJldHVybiBvZmZzZXQ7CiAJfQogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgcmVjb3JkX3dzX2Vycm9yKHVuc2lnbmVkIHJlc3VsdCwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgaW50IGxpbmVucikKK3N0YXRpYyB2b2lkIHJlY29yZF93c19lcnJvcihzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgIHVuc2lnbmVkIHJlc3VsdCwKKwkJCSAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgIGludCBsZW4sCisJCQkgICAgaW50IGxpbmVucikKIHsKIAljaGFyICplcnI7CiAKIAlpZiAoIXJlc3VsdCkKIAkJcmV0dXJuOwogCi0Jd2hpdGVzcGFjZV9lcnJvcisrOwotCWlmIChzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzICYmCi0JICAgIHNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgPCB3aGl0ZXNwYWNlX2Vycm9yKQorCXN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yKys7CisJaWYgKHN0YXRlLT5zcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzICYmCisJICAgIHN0YXRlLT5zcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzIDwgc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IpCiAJCXJldHVybjsKIAogCWVyciA9IHdoaXRlc3BhY2VfZXJyb3Jfc3RyaW5nKHJlc3VsdCk7CiAJZnByaW50ZihzdGRlcnIsICIlczolZDogJXMuXG4lLipzXG4iLAotCQlwYXRjaF9pbnB1dF9maWxlLCBsaW5lbnIsIGVyciwgbGVuLCBsaW5lKTsKKwkJc3RhdGUtPnBhdGNoX2lucHV0X2ZpbGUsIGxpbmVuciwgZXJyLCBsZW4sIGxpbmUpOwogCWZyZWUoZXJyKTsKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tfd2hpdGVzcGFjZShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlKQorc3RhdGljIHZvaWQgY2hlY2tfd2hpdGVzcGFjZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgICBpbnQgbGVuLAorCQkJICAgICB1bnNpZ25lZCB3c19ydWxlKQogewogCXVuc2lnbmVkIHJlc3VsdCA9IHdzX2NoZWNrKGxpbmUgKyAxLCBsZW4gLSAxLCB3c19ydWxlKTsKIAotCXJlY29yZF93c19lcnJvcihyZXN1bHQsIGxpbmUgKyAxLCBsZW4gLSAyLCBsaW5lbnIpOworCXJlY29yZF93c19lcnJvcihzdGF0ZSwgcmVzdWx0LCBsaW5lICsgMSwgbGVuIC0gMiwgc3RhdGUtPmxpbmVucik7CiB9CiAKIC8qCkBAIC0xNTQ3LDggKzE2NDEsMTEgQEAKICAqIGJldHdlZW4gYSAiLS0tIiB0aGF0IGlzIHBhcnQgb2YgYSBwYXRjaCwgYW5kIGEgIi0tLSIgdGhhdCBzdGFydHMKICAqIHRoZSBuZXh0IHBhdGNoIGlzIHRvIGxvb2sgYXQgdGhlIGxpbmUgY291bnRzLi4KICAqLwotc3RhdGljIGludCBwYXJzZV9mcmFnbWVudChjb25zdCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgIHN0cnVjdCBwYXRjaCAqcGF0Y2gsIHN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnQpCitzdGF0aWMgaW50IHBhcnNlX2ZyYWdtZW50KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgc3RydWN0IHBhdGNoICpwYXRjaCwKKwkJCSAgc3RydWN0IGZyYWdtZW50ICpmcmFnbWVudCkKIHsKIAlpbnQgYWRkZWQsIGRlbGV0ZWQ7CiAJaW50IGxlbiA9IGxpbmVsZW4obGluZSwgc2l6ZSksIG9mZnNldDsKQEAgLTE1NjgsMTEgKzE2NjUsMTEgQEAKIAkvKiBQYXJzZSB0aGUgdGhpbmcuLiAqLwogCWxpbmUgKz0gbGVuOwogCXNpemUgLT0gbGVuOwotCWxpbmVucisrOworCXN0YXRlLT5saW5lbnIrKzsKIAlhZGRlZCA9IGRlbGV0ZWQgPSAwOwogCWZvciAob2Zmc2V0ID0gbGVuOwogCSAgICAgMCA8IHNpemU7Ci0JICAgICBvZmZzZXQgKz0gbGVuLCBzaXplIC09IGxlbiwgbGluZSArPSBsZW4sIGxpbmVucisrKSB7CisJICAgICBvZmZzZXQgKz0gbGVuLCBzaXplIC09IGxlbiwgbGluZSArPSBsZW4sIHN0YXRlLT5saW5lbnIrKykgewogCQlpZiAoIW9sZGxpbmVzICYmICFuZXdsaW5lcykKIAkJCWJyZWFrOwogCQlsZW4gPSBsaW5lbGVuKGxpbmUsIHNpemUpOwpAQCAtMTU4OCwyMiArMTY4NSwyMiBAQAogCQkJaWYgKCFkZWxldGVkICYmICFhZGRlZCkKIAkJCQlsZWFkaW5nKys7CiAJCQl0cmFpbGluZysrOwotCQkJaWYgKCFhcHBseV9pbl9yZXZlcnNlICYmCi0JCQkgICAgd3NfZXJyb3JfYWN0aW9uID09IGNvcnJlY3Rfd3NfZXJyb3IpCi0JCQkJY2hlY2tfd2hpdGVzcGFjZShsaW5lLCBsZW4sIHBhdGNoLT53c19ydWxlKTsKKwkJCWlmICghc3RhdGUtPmFwcGx5X2luX3JldmVyc2UgJiYKKwkJCSAgICBzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID09IGNvcnJlY3Rfd3NfZXJyb3IpCisJCQkJY2hlY2tfd2hpdGVzcGFjZShzdGF0ZSwgbGluZSwgbGVuLCBwYXRjaC0+d3NfcnVsZSk7CiAJCQlicmVhazsKIAkJY2FzZSAnLSc6Ci0JCQlpZiAoYXBwbHlfaW5fcmV2ZXJzZSAmJgotCQkJICAgIHdzX2Vycm9yX2FjdGlvbiAhPSBub3dhcm5fd3NfZXJyb3IpCi0JCQkJY2hlY2tfd2hpdGVzcGFjZShsaW5lLCBsZW4sIHBhdGNoLT53c19ydWxlKTsKKwkJCWlmIChzdGF0ZS0+YXBwbHlfaW5fcmV2ZXJzZSAmJgorCQkJICAgIHN0YXRlLT53c19lcnJvcl9hY3Rpb24gIT0gbm93YXJuX3dzX2Vycm9yKQorCQkJCWNoZWNrX3doaXRlc3BhY2Uoc3RhdGUsIGxpbmUsIGxlbiwgcGF0Y2gtPndzX3J1bGUpOwogCQkJZGVsZXRlZCsrOwogCQkJb2xkbGluZXMtLTsKIAkJCXRyYWlsaW5nID0gMDsKIAkJCWJyZWFrOwogCQljYXNlICcrJzoKLQkJCWlmICghYXBwbHlfaW5fcmV2ZXJzZSAmJgotCQkJICAgIHdzX2Vycm9yX2FjdGlvbiAhPSBub3dhcm5fd3NfZXJyb3IpCi0JCQkJY2hlY2tfd2hpdGVzcGFjZShsaW5lLCBsZW4sIHBhdGNoLT53c19ydWxlKTsKKwkJCWlmICghc3RhdGUtPmFwcGx5X2luX3JldmVyc2UgJiYKKwkJCSAgICBzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uICE9IG5vd2Fybl93c19lcnJvcikKKwkJCQljaGVja193aGl0ZXNwYWNlKHN0YXRlLCBsaW5lLCBsZW4sIHBhdGNoLT53c19ydWxlKTsKIAkJCWFkZGVkKys7CiAJCQluZXdsaW5lcy0tOwogCQkJdHJhaWxpbmcgPSAwOwpAQCAtMTY1Nyw3ICsxNzU0LDEwIEBACiAgKiBUaGUgKGZyYWdtZW50LT5wYXRjaCwgZnJhZ21lbnQtPnNpemUpIHBhaXIgcG9pbnRzIGludG8gdGhlIG1lbW9yeSBnaXZlbgogICogYnkgdGhlIGNhbGxlciwgbm90IGEgY29weSwgd2hlbiB3ZSByZXR1cm4uCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2Vfc2luZ2xlX3BhdGNoKGNvbnN0IGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyBpbnQgcGFyc2Vfc2luZ2xlX3BhdGNoKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBvbGRsaW5lcyA9IDAsIG5ld2xpbmVzID0gMCwgY29udGV4dCA9IDA7CkBAIC0xNjY4LDEwICsxNzY4LDEwIEBACiAJCWludCBsZW47CiAKIAkJZnJhZ21lbnQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZnJhZ21lbnQpKTsKLQkJZnJhZ21lbnQtPmxpbmVuciA9IGxpbmVucjsKLQkJbGVuID0gcGFyc2VfZnJhZ21lbnQobGluZSwgc2l6ZSwgcGF0Y2gsIGZyYWdtZW50KTsKKwkJZnJhZ21lbnQtPmxpbmVuciA9IHN0YXRlLT5saW5lbnI7CisJCWxlbiA9IHBhcnNlX2ZyYWdtZW50KHN0YXRlLCBsaW5lLCBzaXplLCBwYXRjaCwgZnJhZ21lbnQpOwogCQlpZiAobGVuIDw9IDApCi0JCQlkaWUoXygiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIiksIGxpbmVucik7CisJCQlkaWUoXygiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIiksIHN0YXRlLT5saW5lbnIpOwogCQlmcmFnbWVudC0+cGF0Y2ggPSBsaW5lOwogCQlmcmFnbWVudC0+c2l6ZSA9IGxlbjsKIAkJb2xkbGluZXMgKz0gZnJhZ21lbnQtPm9sZGxpbmVzOwpAQCAtMTc1Nyw3ICsxODU3LDggQEAKICAqIHBvaW50cyBhdCBhbiBhbGxvY2F0ZWQgbWVtb3J5IHRoYXQgdGhlIGNhbGxlciBtdXN0IGZyZWUsIHNvCiAgKiBpdCBpcyBtYXJrZWQgYXMgIi0+ZnJlZV9wYXRjaCA9IDEiLgogICovCi1zdGF0aWMgc3RydWN0IGZyYWdtZW50ICpwYXJzZV9iaW5hcnlfaHVuayhjaGFyICoqYnVmX3AsCitzdGF0aWMgc3RydWN0IGZyYWdtZW50ICpwYXJzZV9iaW5hcnlfaHVuayhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCQkgIGNoYXIgKipidWZfcCwKIAkJCQkJICB1bnNpZ25lZCBsb25nICpzel9wLAogCQkJCQkgIGludCAqc3RhdHVzX3AsCiAJCQkJCSAgaW50ICp1c2VkX3ApCkBAIC0xNzk5LDEzICsxOTAwLDEzIEBACiAJZWxzZQogCQlyZXR1cm4gTlVMTDsKIAotCWxpbmVucisrOworCXN0YXRlLT5saW5lbnIrKzsKIAlidWZmZXIgKz0gbGxlbjsKIAl3aGlsZSAoMSkgewogCQlpbnQgYnl0ZV9sZW5ndGgsIG1heF9ieXRlX2xlbmd0aCwgbmV3c2l6ZTsKIAkJbGxlbiA9IGxpbmVsZW4oYnVmZmVyLCBzaXplKTsKIAkJdXNlZCArPSBsbGVuOwotCQlsaW5lbnIrKzsKKwkJc3RhdGUtPmxpbmVucisrOwogCQlpZiAobGxlbiA9PSAxKSB7CiAJCQkvKiBjb25zdW1lIHRoZSBibGFuayBsaW5lICovCiAJCQlidWZmZXIrKzsKQEAgLTE4NTksNyArMTk2MCw3IEBACiAJZnJlZShkYXRhKTsKIAkqc3RhdHVzX3AgPSAtMTsKIAllcnJvcihfKCJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIiksCi0JICAgICAgbGluZW5yLTEsIGxsZW4tMSwgYnVmZmVyKTsKKwkgICAgICBzdGF0ZS0+bGluZW5yLTEsIGxsZW4tMSwgYnVmZmVyKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTg2OCw3ICsxOTY5LDEwIEBACiAgKiAgIC0xIGluIGNhc2Ugb2YgZXJyb3IsCiAgKiAgIHRoZSBsZW5ndGggb2YgdGhlIHBhcnNlZCBiaW5hcnkgcGF0Y2ggb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfYmluYXJ5KGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQorc3RhdGljIGludCBwYXJzZV9iaW5hcnkoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCWNoYXIgKmJ1ZmZlciwKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCXN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJLyoKIAkgKiBXZSBoYXZlIHJlYWQgIkdJVCBiaW5hcnkgcGF0Y2hcbiI7IHdoYXQgZm9sbG93cyBpcyBhIGxpbmUKQEAgLTE4ODksMTUgKzE5OTMsMTUgQEAKIAlpbnQgc3RhdHVzOwogCWludCB1c2VkLCB1c2VkXzE7CiAKLQlmb3J3YXJkID0gcGFyc2VfYmluYXJ5X2h1bmsoJmJ1ZmZlciwgJnNpemUsICZzdGF0dXMsICZ1c2VkKTsKKwlmb3J3YXJkID0gcGFyc2VfYmluYXJ5X2h1bmsoc3RhdGUsICZidWZmZXIsICZzaXplLCAmc3RhdHVzLCAmdXNlZCk7CiAJaWYgKCFmb3J3YXJkICYmICFzdGF0dXMpCiAJCS8qIHRoZXJlIGhhcyB0byBiZSBvbmUgaHVuayAoZm9yd2FyZCBodW5rKSAqLwotCQlyZXR1cm4gZXJyb3IoXygidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIiksIGxpbmVuci0xKTsKKwkJcmV0dXJuIGVycm9yKF8oInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIpLCBzdGF0ZS0+bGluZW5yLTEpOwogCWlmIChzdGF0dXMpCiAJCS8qIG90aGVyd2lzZSB3ZSBhbHJlYWR5IGdhdmUgYW4gZXJyb3IgbWVzc2FnZSAqLwogCQlyZXR1cm4gc3RhdHVzOwogCi0JcmV2ZXJzZSA9IHBhcnNlX2JpbmFyeV9odW5rKCZidWZmZXIsICZzaXplLCAmc3RhdHVzLCAmdXNlZF8xKTsKKwlyZXZlcnNlID0gcGFyc2VfYmluYXJ5X2h1bmsoc3RhdGUsICZidWZmZXIsICZzaXplLCAmc3RhdHVzLCAmdXNlZF8xKTsKIAlpZiAocmV2ZXJzZSkKIAkJdXNlZCArPSB1c2VkXzE7CiAJZWxzZSBpZiAoc3RhdHVzKSB7CkBAIC0xOTE1LDUzICsyMDE5LDUzIEBACiAJcmV0dXJuIHVzZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIHByZWZpeF9vbmUoY2hhciAqKm5hbWUpCitzdGF0aWMgdm9pZCBwcmVmaXhfb25lKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNoYXIgKipuYW1lKQogewogCWNoYXIgKm9sZF9uYW1lID0gKm5hbWU7CiAJaWYgKCFvbGRfbmFtZSkKIAkJcmV0dXJuOwotCSpuYW1lID0geHN0cmR1cChwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCAqbmFtZSkpOworCSpuYW1lID0geHN0cmR1cChwcmVmaXhfZmlsZW5hbWUoc3RhdGUtPnByZWZpeCwgc3RhdGUtPnByZWZpeF9sZW5ndGgsICpuYW1lKSk7CiAJZnJlZShvbGRfbmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByZWZpeF9wYXRjaChzdHJ1Y3QgcGF0Y2ggKnApCitzdGF0aWMgdm9pZCBwcmVmaXhfcGF0Y2goc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwKQogewotCWlmICghcHJlZml4IHx8IHAtPmlzX3RvcGxldmVsX3JlbGF0aXZlKQorCWlmICghc3RhdGUtPnByZWZpeCB8fCBwLT5pc190b3BsZXZlbF9yZWxhdGl2ZSkKIAkJcmV0dXJuOwotCXByZWZpeF9vbmUoJnAtPm5ld19uYW1lKTsKLQlwcmVmaXhfb25lKCZwLT5vbGRfbmFtZSk7CisJcHJlZml4X29uZShzdGF0ZSwgJnAtPm5ld19uYW1lKTsKKwlwcmVmaXhfb25lKHN0YXRlLCAmcC0+b2xkX25hbWUpOwogfQogCiAvKgogICogaW5jbHVkZS9leGNsdWRlCiAgKi8KIAotc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBsaW1pdF9ieV9uYW1lOwotc3RhdGljIGludCBoYXNfaW5jbHVkZTsKLXN0YXRpYyB2b2lkIGFkZF9uYW1lX2xpbWl0KGNvbnN0IGNoYXIgKm5hbWUsIGludCBleGNsdWRlKQorc3RhdGljIHZvaWQgYWRkX25hbWVfbGltaXQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICBpbnQgZXhjbHVkZSkKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CiAKLQlpdCA9IHN0cmluZ19saXN0X2FwcGVuZCgmbGltaXRfYnlfbmFtZSwgbmFtZSk7CisJaXQgPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlLT5saW1pdF9ieV9uYW1lLCBuYW1lKTsKIAlpdC0+dXRpbCA9IGV4Y2x1ZGUgPyBOVUxMIDogKHZvaWQgKikgMTsKIH0KIAotc3RhdGljIGludCB1c2VfcGF0Y2goc3RydWN0IHBhdGNoICpwKQorc3RhdGljIGludCB1c2VfcGF0Y2goc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwKQogewogCWNvbnN0IGNoYXIgKnBhdGhuYW1lID0gcC0+bmV3X25hbWUgPyBwLT5uZXdfbmFtZSA6IHAtPm9sZF9uYW1lOwogCWludCBpOwogCiAJLyogUGF0aHMgb3V0c2lkZSBhcmUgbm90IHRvdWNoZWQgcmVnYXJkbGVzcyBvZiAiLS1pbmNsdWRlIiAqLwotCWlmICgwIDwgcHJlZml4X2xlbmd0aCkgeworCWlmICgwIDwgc3RhdGUtPnByZWZpeF9sZW5ndGgpIHsKIAkJaW50IHBhdGhsZW4gPSBzdHJsZW4ocGF0aG5hbWUpOwotCQlpZiAocGF0aGxlbiA8PSBwcmVmaXhfbGVuZ3RoIHx8Ci0JCSAgICBtZW1jbXAocHJlZml4LCBwYXRobmFtZSwgcHJlZml4X2xlbmd0aCkpCisJCWlmIChwYXRobGVuIDw9IHN0YXRlLT5wcmVmaXhfbGVuZ3RoIHx8CisJCSAgICBtZW1jbXAoc3RhdGUtPnByZWZpeCwgcGF0aG5hbWUsIHN0YXRlLT5wcmVmaXhfbGVuZ3RoKSkKIAkJCXJldHVybiAwOwogCX0KIAogCS8qIFNlZSBpZiBpdCBtYXRjaGVzIGFueSBvZiBleGNsdWRlL2luY2x1ZGUgcnVsZSAqLwotCWZvciAoaSA9IDA7IGkgPCBsaW1pdF9ieV9uYW1lLm5yOyBpKyspIHsKLQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ID0gJmxpbWl0X2J5X25hbWUuaXRlbXNbaV07CisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5saW1pdF9ieV9uYW1lLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ID0gJnN0YXRlLT5saW1pdF9ieV9uYW1lLml0ZW1zW2ldOwogCQlpZiAoIXdpbGRtYXRjaChpdC0+c3RyaW5nLCBwYXRobmFtZSwgMCwgTlVMTCkpCiAJCQlyZXR1cm4gKGl0LT51dGlsICE9IE5VTEwpOwogCX0KQEAgLTE5NzEsNyArMjA3NSw3IEBACiAJICogbm90IHVzZWQuICBPdGhlcndpc2UsIHdlIHNhdyBidW5jaCBvZiBleGNsdWRlIHJ1bGVzIChvciBub25lKQogCSAqIGFuZCBzdWNoIGEgcGF0aCBpcyB1c2VkLgogCSAqLwotCXJldHVybiAhaGFzX2luY2x1ZGU7CisJcmV0dXJuICFzdGF0ZS0+aGFzX2luY2x1ZGU7CiB9CiAKIApAQCAtMTk4MiwyNSArMjA4NiwyNyBAQAogICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29uc3VtZWQsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gY2FsbCB1cwogICogYWdhaW4gZm9yIHRoZSBuZXh0IHBhdGNoLgogICovCi1zdGF0aWMgaW50IHBhcnNlX2NodW5rKGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQorc3RhdGljIGludCBwYXJzZV9jaHVuayhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAlpbnQgaGRyc2l6ZSwgcGF0Y2hzaXplOwotCWludCBvZmZzZXQgPSBmaW5kX2hlYWRlcihidWZmZXIsIHNpemUsICZoZHJzaXplLCBwYXRjaCk7CisJaW50IG9mZnNldCA9IGZpbmRfaGVhZGVyKHN0YXRlLCBidWZmZXIsIHNpemUsICZoZHJzaXplLCBwYXRjaCk7CiAKIAlpZiAob2Zmc2V0IDwgMCkKIAkJcmV0dXJuIG9mZnNldDsKIAotCXByZWZpeF9wYXRjaChwYXRjaCk7CisJcHJlZml4X3BhdGNoKHN0YXRlLCBwYXRjaCk7CiAKLQlpZiAoIXVzZV9wYXRjaChwYXRjaCkpCisJaWYgKCF1c2VfcGF0Y2goc3RhdGUsIHBhdGNoKSkKIAkJcGF0Y2gtPndzX3J1bGUgPSAwOwogCWVsc2UKIAkJcGF0Y2gtPndzX3J1bGUgPSB3aGl0ZXNwYWNlX3J1bGUocGF0Y2gtPm5ld19uYW1lCiAJCQkJCQkgPyBwYXRjaC0+bmV3X25hbWUKIAkJCQkJCSA6IHBhdGNoLT5vbGRfbmFtZSk7CiAKLQlwYXRjaHNpemUgPSBwYXJzZV9zaW5nbGVfcGF0Y2goYnVmZmVyICsgb2Zmc2V0ICsgaGRyc2l6ZSwKLQkJCQkgICAgICAgc2l6ZSAtIG9mZnNldCAtIGhkcnNpemUsIHBhdGNoKTsKKwlwYXRjaHNpemUgPSBwYXJzZV9zaW5nbGVfcGF0Y2goc3RhdGUsCisJCQkJICAgICAgIGJ1ZmZlciArIG9mZnNldCArIGhkcnNpemUsCisJCQkJICAgICAgIHNpemUgLSBvZmZzZXQgLSBoZHJzaXplLAorCQkJCSAgICAgICBwYXRjaCk7CiAKIAlpZiAoIXBhdGNoc2l6ZSkgewogCQlzdGF0aWMgY29uc3QgY2hhciBnaXRfYmluYXJ5W10gPSAiR0lUIGJpbmFyeSBwYXRjaFxuIjsKQEAgLTIwMTAsOCArMjExNiw4IEBACiAJCWlmIChsbGVuID09IHNpemVvZihnaXRfYmluYXJ5KSAtIDEgJiYKIAkJICAgICFtZW1jbXAoZ2l0X2JpbmFyeSwgYnVmZmVyICsgaGQsIGxsZW4pKSB7CiAJCQlpbnQgdXNlZDsKLQkJCWxpbmVucisrOwotCQkJdXNlZCA9IHBhcnNlX2JpbmFyeShidWZmZXIgKyBoZCArIGxsZW4sCisJCQlzdGF0ZS0+bGluZW5yKys7CisJCQl1c2VkID0gcGFyc2VfYmluYXJ5KHN0YXRlLCBidWZmZXIgKyBoZCArIGxsZW4sCiAJCQkJCSAgICBzaXplIC0gaGQgLSBsbGVuLCBwYXRjaCk7CiAJCQlpZiAodXNlZCA8IDApCiAJCQkJcmV0dXJuIC0xOwpAQCAtMjAzMSw3ICsyMTM3LDcgQEAKIAkJCQlpbnQgbGVuID0gc3RybGVuKGJpbmhkcltpXSk7CiAJCQkJaWYgKGxlbiA8IHNpemUgLSBoZCAmJgogCQkJCSAgICAhbWVtY21wKGJpbmhkcltpXSwgYnVmZmVyICsgaGQsIGxlbikpIHsKLQkJCQkJbGluZW5yKys7CisJCQkJCXN0YXRlLT5saW5lbnIrKzsKIAkJCQkJcGF0Y2gtPmlzX2JpbmFyeSA9IDE7CiAJCQkJCXBhdGNoc2l6ZSA9IGxsZW47CiAJCQkJCWJyZWFrOwpAQCAtMjA0Myw5ICsyMTQ5LDkgQEAKIAkJICogd2l0aG91dCBtZXRhZGF0YSBjaGFuZ2UuICBBIGJpbmFyeSBwYXRjaCBhcHBlYXJzCiAJCSAqIGVtcHR5IHRvIHVzIGhlcmUuCiAJCSAqLwotCQlpZiAoKGFwcGx5IHx8IGNoZWNrKSAmJgorCQlpZiAoKHN0YXRlLT5hcHBseSB8fCBzdGF0ZS0+Y2hlY2spICYmCiAJCSAgICAoIXBhdGNoLT5pc19iaW5hcnkgJiYgIW1ldGFkYXRhX2NoYW5nZXMocGF0Y2gpKSkKLQkJCWRpZShfKCJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIiksIGxpbmVucik7CisJCQlkaWUoXygicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIpLCBzdGF0ZS0+bGluZW5yKTsKIAl9CiAKIAlyZXR1cm4gb2Zmc2V0ICsgaGRyc2l6ZSArIHBhdGNoc2l6ZTsKQEAgLTIwODMsNyArMjE4OSw3IEBACiBzdGF0aWMgY29uc3QgY2hhciBtaW51c2VzW109CiAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSI7CiAKLXN0YXRpYyB2b2lkIHNob3dfc3RhdHMoc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyB2b2lkIHNob3dfc3RhdHMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAlzdHJ1Y3Qgc3RyYnVmIHFuYW1lID0gU1RSQlVGX0lOSVQ7CiAJY2hhciAqY3AgPSBwYXRjaC0+bmV3X25hbWUgPyBwYXRjaC0+bmV3X25hbWUgOiBwYXRjaC0+b2xkX25hbWU7CkBAIC0yMDk0LDcgKzIyMDAsNyBAQAogCS8qCiAJICogInNjYWxlIiB0aGUgZmlsZW5hbWUKIAkgKi8KLQltYXggPSBtYXhfbGVuOworCW1heCA9IHN0YXRlLT5tYXhfbGVuOwogCWlmIChtYXggPiA1MCkKIAkJbWF4ID0gNTA7CiAKQEAgLTIxMTcsMTMgKzIyMjMsMTMgQEAKIAkvKgogCSAqIHNjYWxlIHRoZSBhZGQvZGVsZXRlCiAJICovCi0JbWF4ID0gbWF4ICsgbWF4X2NoYW5nZSA+IDcwID8gNzAgLSBtYXggOiBtYXhfY2hhbmdlOworCW1heCA9IG1heCArIHN0YXRlLT5tYXhfY2hhbmdlID4gNzAgPyA3MCAtIG1heCA6IHN0YXRlLT5tYXhfY2hhbmdlOwogCWFkZCA9IHBhdGNoLT5saW5lc19hZGRlZDsKIAlkZWwgPSBwYXRjaC0+bGluZXNfZGVsZXRlZDsKIAotCWlmIChtYXhfY2hhbmdlID4gMCkgewotCQlpbnQgdG90YWwgPSAoKGFkZCArIGRlbCkgKiBtYXggKyBtYXhfY2hhbmdlIC8gMikgLyBtYXhfY2hhbmdlOwotCQlhZGQgPSAoYWRkICogbWF4ICsgbWF4X2NoYW5nZSAvIDIpIC8gbWF4X2NoYW5nZTsKKwlpZiAoc3RhdGUtPm1heF9jaGFuZ2UgPiAwKSB7CisJCWludCB0b3RhbCA9ICgoYWRkICsgZGVsKSAqIG1heCArIHN0YXRlLT5tYXhfY2hhbmdlIC8gMikgLyBzdGF0ZS0+bWF4X2NoYW5nZTsKKwkJYWRkID0gKGFkZCAqIG1heCArIHN0YXRlLT5tYXhfY2hhbmdlIC8gMikgLyBzdGF0ZS0+bWF4X2NoYW5nZTsKIAkJZGVsID0gdG90YWwgLSBhZGQ7CiAJfQogCXByaW50ZigiJTVkICUuKnMlLipzXG4iLCBwYXRjaC0+bGluZXNfYWRkZWQgKyBwYXRjaC0+bGluZXNfZGVsZXRlZCwKQEAgLTIxOTQsMTcgKzIzMDAsMTcgQEAKIAlmaXhlZCA9IHByZWltYWdlLT5idWY7CiAKIAlmb3IgKGkgPSByZWR1Y2VkID0gY3R4ID0gMDsgaSA8IHBvc3RpbWFnZS0+bnI7IGkrKykgewotCQlzaXplX3QgbGVuID0gcG9zdGltYWdlLT5saW5lW2ldLmxlbjsKKwkJc2l6ZV90IGxfbGVuID0gcG9zdGltYWdlLT5saW5lW2ldLmxlbjsKIAkJaWYgKCEocG9zdGltYWdlLT5saW5lW2ldLmZsYWcgJiBMSU5FX0NPTU1PTikpIHsKIAkJCS8qIGFuIGFkZGVkIGxpbmUgLS0gbm8gY291bnRlcnBhcnRzIGluIHByZWltYWdlICovCi0JCQltZW1tb3ZlKG5ldywgb2xkLCBsZW4pOwotCQkJb2xkICs9IGxlbjsKLQkJCW5ldyArPSBsZW47CisJCQltZW1tb3ZlKG5ldywgb2xkLCBsX2xlbik7CisJCQlvbGQgKz0gbF9sZW47CisJCQluZXcgKz0gbF9sZW47CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIGEgY29tbW9uIGNvbnRleHQgLS0gc2tpcCBpdCBpbiB0aGUgb3JpZ2luYWwgcG9zdGltYWdlICovCi0JCW9sZCArPSBsZW47CisJCW9sZCArPSBsX2xlbjsKIAogCQkvKiBhbmQgZmluZCB0aGUgY29ycmVzcG9uZGluZyBvbmUgaW4gdGhlIGZpeGVkIHByZWltYWdlICovCiAJCXdoaWxlIChjdHggPCBwcmVpbWFnZS0+bnIgJiYKQEAgLTIyMjMsMTEgKzIzMjksMTEgQEAKIAkJfQogCiAJCS8qIGFuZCBjb3B5IGl0IGluLCB3aGlsZSBmaXhpbmcgdGhlIGxpbmUgbGVuZ3RoICovCi0JCWxlbiA9IHByZWltYWdlLT5saW5lW2N0eF0ubGVuOwotCQltZW1jcHkobmV3LCBmaXhlZCwgbGVuKTsKLQkJbmV3ICs9IGxlbjsKLQkJZml4ZWQgKz0gbGVuOwotCQlwb3N0aW1hZ2UtPmxpbmVbaV0ubGVuID0gbGVuOworCQlsX2xlbiA9IHByZWltYWdlLT5saW5lW2N0eF0ubGVuOworCQltZW1jcHkobmV3LCBmaXhlZCwgbF9sZW4pOworCQluZXcgKz0gbF9sZW47CisJCWZpeGVkICs9IGxfbGVuOworCQlwb3N0aW1hZ2UtPmxpbmVbaV0ubGVuID0gbF9sZW47CiAJCWN0eCsrOwogCX0KIApAQCAtMjI0Miw3ICsyMzQ4LDc2IEBACiAJcG9zdGltYWdlLT5uciAtPSByZWR1Y2VkOwogfQogCi1zdGF0aWMgaW50IG1hdGNoX2ZyYWdtZW50KHN0cnVjdCBpbWFnZSAqaW1nLAorc3RhdGljIGludCBsaW5lX2J5X2xpbmVfZnV6enlfbWF0Y2goc3RydWN0IGltYWdlICppbWcsCisJCQkJICAgIHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCisJCQkJICAgIHN0cnVjdCBpbWFnZSAqcG9zdGltYWdlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHRyeSwKKwkJCQkgICAgaW50IHRyeV9sbm8sCisJCQkJICAgIGludCBwcmVpbWFnZV9saW1pdCkKK3sKKwlpbnQgaTsKKwlzaXplX3QgaW1nb2ZmID0gMDsKKwlzaXplX3QgcHJlb2ZmID0gMDsKKwlzaXplX3QgcG9zdGxlbiA9IHBvc3RpbWFnZS0+bGVuOworCXNpemVfdCBleHRyYV9jaGFyczsKKwljaGFyICpidWY7CisJY2hhciAqcHJlaW1hZ2VfZW9mOworCWNoYXIgKnByZWltYWdlX2VuZDsKKwlzdHJ1Y3Qgc3RyYnVmIGZpeGVkOworCWNoYXIgKmZpeGVkX2J1ZjsKKwlzaXplX3QgZml4ZWRfbGVuOworCisJZm9yIChpID0gMDsgaSA8IHByZWltYWdlX2xpbWl0OyBpKyspIHsKKwkJc2l6ZV90IHByZWxlbiA9IHByZWltYWdlLT5saW5lW2ldLmxlbjsKKwkJc2l6ZV90IGltZ2xlbiA9IGltZy0+bGluZVt0cnlfbG5vK2ldLmxlbjsKKworCQlpZiAoIWZ1enp5X21hdGNobGluZXMoaW1nLT5idWYgKyB0cnkgKyBpbWdvZmYsIGltZ2xlbiwKKwkJCQkgICAgICBwcmVpbWFnZS0+YnVmICsgcHJlb2ZmLCBwcmVsZW4pKQorCQkJcmV0dXJuIDA7CisJCWlmIChwcmVpbWFnZS0+bGluZVtpXS5mbGFnICYgTElORV9DT01NT04pCisJCQlwb3N0bGVuICs9IGltZ2xlbiAtIHByZWxlbjsKKwkJaW1nb2ZmICs9IGltZ2xlbjsKKwkJcHJlb2ZmICs9IHByZWxlbjsKKwl9CisKKwkvKgorCSAqIE9rLCB0aGUgcHJlaW1hZ2UgbWF0Y2hlcyB3aXRoIHdoaXRlc3BhY2UgZnV6ei4KKwkgKgorCSAqIGltZ29mZiBub3cgaG9sZHMgdGhlIHRydWUgbGVuZ3RoIG9mIHRoZSB0YXJnZXQgdGhhdAorCSAqIG1hdGNoZXMgdGhlIHByZWltYWdlIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCSAqCisJICogQ291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwcmVpbWFnZSB0aGF0IGZhbGwKKwkgKiBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgbWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZW0KKwkgKiBhcmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLiAoVGhpcyBjYW4gb25seSBoYXBwZW4gaWYKKwkgKiB3ZSBhcmUgcmVtb3ZpbmcgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4pCisJICovCisJYnVmID0gcHJlaW1hZ2VfZW9mID0gcHJlaW1hZ2UtPmJ1ZiArIHByZW9mZjsKKwlmb3IgKCA7IGkgPCBwcmVpbWFnZS0+bnI7IGkrKykKKwkJcHJlb2ZmICs9IHByZWltYWdlLT5saW5lW2ldLmxlbjsKKwlwcmVpbWFnZV9lbmQgPSBwcmVpbWFnZS0+YnVmICsgcHJlb2ZmOworCWZvciAoIDsgYnVmIDwgcHJlaW1hZ2VfZW5kOyBidWYrKykKKwkJaWYgKCFpc3NwYWNlKCpidWYpKQorCQkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgcHJlaW1hZ2UgYW5kIHRoZSBjb21tb24gcG9zdGltYWdlIGNvbnRleHQKKwkgKiBsaW5lcyB0byB1c2UgdGhlIHNhbWUgd2hpdGVzcGFjZSBhcyB0aGUgdGFyZ2V0LgorCSAqIElmIHdoaXRlc3BhY2UgaXMgbWlzc2luZyBpbiB0aGUgdGFyZ2V0IChpLmUuCisJICogaWYgdGhlIHByZWltYWdlIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUpLAorCSAqIHVzZSB0aGUgd2hpdGVzcGFjZSBmcm9tIHRoZSBwcmVpbWFnZS4KKwkgKi8KKwlleHRyYV9jaGFycyA9IHByZWltYWdlX2VuZCAtIHByZWltYWdlX2VvZjsKKwlzdHJidWZfaW5pdCgmZml4ZWQsIGltZ29mZiArIGV4dHJhX2NoYXJzKTsKKwlzdHJidWZfYWRkKCZmaXhlZCwgaW1nLT5idWYgKyB0cnksIGltZ29mZik7CisJc3RyYnVmX2FkZCgmZml4ZWQsIHByZWltYWdlX2VvZiwgZXh0cmFfY2hhcnMpOworCWZpeGVkX2J1ZiA9IHN0cmJ1Zl9kZXRhY2goJmZpeGVkLCAmZml4ZWRfbGVuKTsKKwl1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHByZWltYWdlLCBwb3N0aW1hZ2UsCisJCQkgICAgICAgZml4ZWRfYnVmLCBmaXhlZF9sZW4sIHBvc3RsZW4pOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1hdGNoX2ZyYWdtZW50KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgIHN0cnVjdCBpbWFnZSAqaW1nLAogCQkJICBzdHJ1Y3QgaW1hZ2UgKnByZWltYWdlLAogCQkJICBzdHJ1Y3QgaW1hZ2UgKnBvc3RpbWFnZSwKIAkJCSAgdW5zaWduZWQgbG9uZyB0cnksCkBAIC0yMjYzLDcgKzI0MzgsNyBAQAogCQlwcmVpbWFnZV9saW1pdCA9IHByZWltYWdlLT5ucjsKIAkJaWYgKG1hdGNoX2VuZCAmJiAocHJlaW1hZ2UtPm5yICsgdHJ5X2xubyAhPSBpbWctPm5yKSkKIAkJCXJldHVybiAwOwotCX0gZWxzZSBpZiAod3NfZXJyb3JfYWN0aW9uID09IGNvcnJlY3Rfd3NfZXJyb3IgJiYKKwl9IGVsc2UgaWYgKHN0YXRlLT53c19lcnJvcl9hY3Rpb24gPT0gY29ycmVjdF93c19lcnJvciAmJgogCQkgICAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikpIHsKIAkJLyoKIAkJICogVGhpcyBodW5rIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgaW1nLCBhbmQgd2UgYXJlCkBAIC0yMzMxLDYzICsyNTA2LDExIEBACiAJICogZnV6enkgbWF0Y2hpbmcuIFdlIGNvbGxlY3QgYWxsIHRoZSBsaW5lIGxlbmd0aCBpbmZvcm1hdGlvbiBiZWNhdXNlCiAJICogd2UgbmVlZCBpdCB0byBhZGp1c3Qgd2hpdGVzcGFjZSBpZiB3ZSBtYXRjaC4KIAkgKi8KLQlpZiAod3NfaWdub3JlX2FjdGlvbiA9PSBpZ25vcmVfd3NfY2hhbmdlKSB7Ci0JCXNpemVfdCBpbWdvZmYgPSAwOwotCQlzaXplX3QgcHJlb2ZmID0gMDsKLQkJc2l6ZV90IHBvc3RsZW4gPSBwb3N0aW1hZ2UtPmxlbjsKLQkJc2l6ZV90IGV4dHJhX2NoYXJzOwotCQljaGFyICpwcmVpbWFnZV9lb2Y7Ci0JCWNoYXIgKnByZWltYWdlX2VuZDsKLQkJZm9yIChpID0gMDsgaSA8IHByZWltYWdlX2xpbWl0OyBpKyspIHsKLQkJCXNpemVfdCBwcmVsZW4gPSBwcmVpbWFnZS0+bGluZVtpXS5sZW47Ci0JCQlzaXplX3QgaW1nbGVuID0gaW1nLT5saW5lW3RyeV9sbm8raV0ubGVuOworCWlmIChzdGF0ZS0+d3NfaWdub3JlX2FjdGlvbiA9PSBpZ25vcmVfd3NfY2hhbmdlKQorCQlyZXR1cm4gbGluZV9ieV9saW5lX2Z1enp5X21hdGNoKGltZywgcHJlaW1hZ2UsIHBvc3RpbWFnZSwKKwkJCQkJCXRyeSwgdHJ5X2xubywgcHJlaW1hZ2VfbGltaXQpOwogCi0JCQlpZiAoIWZ1enp5X21hdGNobGluZXMoaW1nLT5idWYgKyB0cnkgKyBpbWdvZmYsIGltZ2xlbiwKLQkJCQkJICAgICAgcHJlaW1hZ2UtPmJ1ZiArIHByZW9mZiwgcHJlbGVuKSkKLQkJCQlyZXR1cm4gMDsKLQkJCWlmIChwcmVpbWFnZS0+bGluZVtpXS5mbGFnICYgTElORV9DT01NT04pCi0JCQkJcG9zdGxlbiArPSBpbWdsZW4gLSBwcmVsZW47Ci0JCQlpbWdvZmYgKz0gaW1nbGVuOwotCQkJcHJlb2ZmICs9IHByZWxlbjsKLQkJfQotCi0JCS8qCi0JCSAqIE9rLCB0aGUgcHJlaW1hZ2UgbWF0Y2hlcyB3aXRoIHdoaXRlc3BhY2UgZnV6ei4KLQkJICoKLQkJICogaW1nb2ZmIG5vdyBob2xkcyB0aGUgdHJ1ZSBsZW5ndGggb2YgdGhlIHRhcmdldCB0aGF0Ci0JCSAqIG1hdGNoZXMgdGhlIHByZWltYWdlIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBmaWxlLgotCQkgKgotCQkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHByZWltYWdlIHRoYXQgZmFsbAotCQkgKiBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgbWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZW0KLQkJICogYXJlIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gKFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmCi0JCSAqIHdlIGFyZSByZW1vdmluZyBibGFuayBsaW5lcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLikKLQkJICovCi0JCWJ1ZiA9IHByZWltYWdlX2VvZiA9IHByZWltYWdlLT5idWYgKyBwcmVvZmY7Ci0JCWZvciAoIDsgaSA8IHByZWltYWdlLT5ucjsgaSsrKQotCQkJcHJlb2ZmICs9IHByZWltYWdlLT5saW5lW2ldLmxlbjsKLQkJcHJlaW1hZ2VfZW5kID0gcHJlaW1hZ2UtPmJ1ZiArIHByZW9mZjsKLQkJZm9yICggOyBidWYgPCBwcmVpbWFnZV9lbmQ7IGJ1ZisrKQotCQkJaWYgKCFpc3NwYWNlKCpidWYpKQotCQkJCXJldHVybiAwOwotCi0JCS8qCi0JCSAqIFVwZGF0ZSB0aGUgcHJlaW1hZ2UgYW5kIHRoZSBjb21tb24gcG9zdGltYWdlIGNvbnRleHQKLQkJICogbGluZXMgdG8gdXNlIHRoZSBzYW1lIHdoaXRlc3BhY2UgYXMgdGhlIHRhcmdldC4KLQkJICogSWYgd2hpdGVzcGFjZSBpcyBtaXNzaW5nIGluIHRoZSB0YXJnZXQgKGkuZS4KLQkJICogaWYgdGhlIHByZWltYWdlIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUpLAotCQkgKiB1c2UgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgcHJlaW1hZ2UuCi0JCSAqLwotCQlleHRyYV9jaGFycyA9IHByZWltYWdlX2VuZCAtIHByZWltYWdlX2VvZjsKLQkJc3RyYnVmX2luaXQoJmZpeGVkLCBpbWdvZmYgKyBleHRyYV9jaGFycyk7Ci0JCXN0cmJ1Zl9hZGQoJmZpeGVkLCBpbWctPmJ1ZiArIHRyeSwgaW1nb2ZmKTsKLQkJc3RyYnVmX2FkZCgmZml4ZWQsIHByZWltYWdlX2VvZiwgZXh0cmFfY2hhcnMpOwotCQlmaXhlZF9idWYgPSBzdHJidWZfZGV0YWNoKCZmaXhlZCwgJmZpeGVkX2xlbik7Ci0JCXVwZGF0ZV9wcmVfcG9zdF9pbWFnZXMocHJlaW1hZ2UsIHBvc3RpbWFnZSwKLQkJCQlmaXhlZF9idWYsIGZpeGVkX2xlbiwgcG9zdGxlbik7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICh3c19lcnJvcl9hY3Rpb24gIT0gY29ycmVjdF93c19lcnJvcikKKwlpZiAoc3RhdGUtPndzX2Vycm9yX2FjdGlvbiAhPSBjb3JyZWN0X3dzX2Vycm9yKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC0yNDk5LDcgKzI2MjIsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZpbmRfcG9zKHN0cnVjdCBpbWFnZSAqaW1nLAorc3RhdGljIGludCBmaW5kX3BvcyhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkgICAgc3RydWN0IGltYWdlICppbWcsCiAJCSAgICBzdHJ1Y3QgaW1hZ2UgKnByZWltYWdlLAogCQkgICAgc3RydWN0IGltYWdlICpwb3N0aW1hZ2UsCiAJCSAgICBpbnQgbGluZSwKQEAgLTI1NDMsNyArMjY2Nyw3IEBACiAJdHJ5X2xubyA9IGxpbmU7CiAKIAlmb3IgKGkgPSAwOyA7IGkrKykgewotCQlpZiAobWF0Y2hfZnJhZ21lbnQoaW1nLCBwcmVpbWFnZSwgcG9zdGltYWdlLAorCQlpZiAobWF0Y2hfZnJhZ21lbnQoc3RhdGUsIGltZywgcHJlaW1hZ2UsIHBvc3RpbWFnZSwKIAkJCQkgICB0cnksIHRyeV9sbm8sIHdzX3J1bGUsCiAJCQkJICAgbWF0Y2hfYmVnaW5uaW5nLCBtYXRjaF9lbmQpKQogCQkJcmV0dXJuIHRyeV9sbm87CkBAIC0yNTk0LDcgKzI3MTgsOCBAQAogICogYXBwbHkgYXQgYXBwbGllZF9wb3MgKGNvdW50cyBpbiBsaW5lIG51bWJlcnMpIGluICJpbWciLgogICogVXBkYXRlICJpbWciIHRvIHJlbW92ZSAicHJlaW1hZ2UiIGFuZCByZXBsYWNlIGl0IHdpdGggInBvc3RpbWFnZSIuCiAgKi8KLXN0YXRpYyB2b2lkIHVwZGF0ZV9pbWFnZShzdHJ1Y3QgaW1hZ2UgKmltZywKK3N0YXRpYyB2b2lkIHVwZGF0ZV9pbWFnZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJIHN0cnVjdCBpbWFnZSAqaW1nLAogCQkJIGludCBhcHBsaWVkX3BvcywKIAkJCSBzdHJ1Y3QgaW1hZ2UgKnByZWltYWdlLAogCQkJIHN0cnVjdCBpbWFnZSAqcG9zdGltYWdlKQpAQCAtMjY1OSw3ICsyNzg0LDcgQEAKIAltZW1jcHkoaW1nLT5saW5lICsgYXBwbGllZF9wb3MsCiAJICAgICAgIHBvc3RpbWFnZS0+bGluZSwKIAkgICAgICAgcG9zdGltYWdlLT5uciAqIHNpemVvZigqaW1nLT5saW5lKSk7Ci0JaWYgKCFhbGxvd19vdmVybGFwKQorCWlmICghc3RhdGUtPmFsbG93X292ZXJsYXApCiAJCWZvciAoaSA9IDA7IGkgPCBwb3N0aW1hZ2UtPm5yOyBpKyspCiAJCQlpbWctPmxpbmVbYXBwbGllZF9wb3MgKyBpXS5mbGFnIHw9IExJTkVfUEFUQ0hFRDsKIAlpbWctPm5yID0gbnI7CkBAIC0yNjcwLDcgKzI3OTUsOCBAQAogICogcG9zdGltYWdlKSBmb3IgdGhlIGh1bmsuICBGaW5kIGxpbmVzIHRoYXQgbWF0Y2ggInByZWltYWdlIiBpbiAiaW1nIiBhbmQKICAqIHJlcGxhY2UgdGhlIHBhcnQgb2YgImltZyIgd2l0aCAicG9zdGltYWdlIiB0ZXh0LgogICovCi1zdGF0aWMgaW50IGFwcGx5X29uZV9mcmFnbWVudChzdHJ1Y3QgaW1hZ2UgKmltZywgc3RydWN0IGZyYWdtZW50ICpmcmFnLAorc3RhdGljIGludCBhcHBseV9vbmVfZnJhZ21lbnQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIHN0cnVjdCBpbWFnZSAqaW1nLCBzdHJ1Y3QgZnJhZ21lbnQgKmZyYWcsCiAJCQkgICAgICBpbnQgaW5hY2N1cmF0ZV9lb2YsIHVuc2lnbmVkIHdzX3J1bGUsCiAJCQkgICAgICBpbnQgbnRoX2ZyYWdtZW50KQogewpAQCAtMjcxNSw3ICsyODQxLDcgQEAKIAkJaWYgKGxlbiA8IHNpemUgJiYgcGF0Y2hbbGVuXSA9PSAnXFwnKQogCQkJcGxlbi0tOwogCQlmaXJzdCA9ICpwYXRjaDsKLQkJaWYgKGFwcGx5X2luX3JldmVyc2UpIHsKKwkJaWYgKHN0YXRlLT5hcHBseV9pbl9yZXZlcnNlKSB7CiAJCQlpZiAoZmlyc3QgPT0gJy0nKQogCQkJCWZpcnN0ID0gJysnOwogCQkJZWxzZSBpZiAoZmlyc3QgPT0gJysnKQpAQCAtMjc0OCwxNyArMjg3NCwxNyBAQAogCQkvKiBGYWxsLXRocm91Z2ggZm9yICcgJyAqLwogCQljYXNlICcrJzoKIAkJCS8qIC0tbm8tYWRkIGRvZXMgbm90IGFkZCBuZXcgbGluZXMgKi8KLQkJCWlmIChmaXJzdCA9PSAnKycgJiYgbm9fYWRkKQorCQkJaWYgKGZpcnN0ID09ICcrJyAmJiBzdGF0ZS0+bm9fYWRkKQogCQkJCWJyZWFrOwogCiAJCQlzdGFydCA9IG5ld2xpbmVzLmxlbjsKIAkJCWlmIChmaXJzdCAhPSAnKycgfHwKLQkJCSAgICAhd2hpdGVzcGFjZV9lcnJvciB8fAotCQkJICAgIHdzX2Vycm9yX2FjdGlvbiAhPSBjb3JyZWN0X3dzX2Vycm9yKSB7CisJCQkgICAgIXN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yIHx8CisJCQkgICAgc3RhdGUtPndzX2Vycm9yX2FjdGlvbiAhPSBjb3JyZWN0X3dzX2Vycm9yKSB7CiAJCQkJc3RyYnVmX2FkZCgmbmV3bGluZXMsIHBhdGNoICsgMSwgcGxlbik7CiAJCQl9CiAJCQllbHNlIHsKLQkJCQl3c19maXhfY29weSgmbmV3bGluZXMsIHBhdGNoICsgMSwgcGxlbiwgd3NfcnVsZSwgJmFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzKTsKKwkJCQl3c19maXhfY29weSgmbmV3bGluZXMsIHBhdGNoICsgMSwgcGxlbiwgd3NfcnVsZSwgJnN0YXRlLT5hcHBsaWVkX2FmdGVyX2ZpeGluZ193cyk7CiAJCQl9CiAJCQlhZGRfbGluZV9pbmZvKCZwb3N0aW1hZ2UsIG5ld2xpbmVzLmJ1ZiArIHN0YXJ0LCBuZXdsaW5lcy5sZW4gLSBzdGFydCwKIAkJCQkgICAgICAoZmlyc3QgPT0gJysnID8gMCA6IExJTkVfQ09NTU9OKSk7CkBAIC0yNzcxLDcgKzI4OTcsNyBAQAogCQkJLyogSWdub3JlIGl0LCB3ZSBhbHJlYWR5IGhhbmRsZWQgaXQgKi8KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJaWYgKGFwcGx5X3ZlcmJvc2VseSkKKwkJCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zZWx5KQogCQkJCWVycm9yKF8oImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIpLCBmaXJzdCk7CiAJCQlhcHBsaWVkX3BvcyA9IC0xOwogCQkJZ290byBvdXQ7CkBAIC0yODEyLDcgKzI5MzgsNyBAQAogCSAqIHdpdGhvdXQgbGVhZGluZyBjb250ZXh0IG11c3QgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZy4KIAkgKi8KIAltYXRjaF9iZWdpbm5pbmcgPSAoIWZyYWctPm9sZHBvcyB8fAotCQkJICAgKGZyYWctPm9sZHBvcyA9PSAxICYmICF1bmlkaWZmX3plcm8pKTsKKwkJCSAgIChmcmFnLT5vbGRwb3MgPT0gMSAmJiAhc3RhdGUtPnVuaWRpZmZfemVybykpOwogCiAJLyoKIAkgKiBBIGh1bmsgd2l0aG91dCB0cmFpbGluZyBsaW5lcyBtdXN0IG1hdGNoIGF0IHRoZSBlbmQuCkBAIC0yODIwLDcgKzI5NDYsNyBAQAogCSAqIGZyb20gdGhlIGxhY2sgb2YgdHJhaWxpbmcgbGluZXMgaWYgdGhlIHBhdGNoIHdhcyBnZW5lcmF0ZWQKIAkgKiB3aXRoIHVuaWRpZmYgd2l0aG91dCBhbnkgY29udGV4dC4KIAkgKi8KLQltYXRjaF9lbmQgPSAhdW5pZGlmZl96ZXJvICYmICF0cmFpbGluZzsKKwltYXRjaF9lbmQgPSAhc3RhdGUtPnVuaWRpZmZfemVybyAmJiAhdHJhaWxpbmc7CiAKIAlwb3MgPSBmcmFnLT5uZXdwb3MgPyAoZnJhZy0+bmV3cG9zIC0gMSkgOiAwOwogCXByZWltYWdlLmJ1ZiA9IG9sZGxpbmVzOwpAQCAtMjgzMiwxNCArMjk1OCwxNCBAQAogCiAJZm9yICg7OykgewogCi0JCWFwcGxpZWRfcG9zID0gZmluZF9wb3MoaW1nLCAmcHJlaW1hZ2UsICZwb3N0aW1hZ2UsIHBvcywKKwkJYXBwbGllZF9wb3MgPSBmaW5kX3BvcyhzdGF0ZSwgaW1nLCAmcHJlaW1hZ2UsICZwb3N0aW1hZ2UsIHBvcywKIAkJCQkgICAgICAgd3NfcnVsZSwgbWF0Y2hfYmVnaW5uaW5nLCBtYXRjaF9lbmQpOwogCiAJCWlmIChhcHBsaWVkX3BvcyA+PSAwKQogCQkJYnJlYWs7CiAKIAkJLyogQW0gSSBhdCBteSBjb250ZXh0IGxpbWl0cz8gKi8KLQkJaWYgKChsZWFkaW5nIDw9IHBfY29udGV4dCkgJiYgKHRyYWlsaW5nIDw9IHBfY29udGV4dCkpCisJCWlmICgobGVhZGluZyA8PSBzdGF0ZS0+cF9jb250ZXh0KSAmJiAodHJhaWxpbmcgPD0gc3RhdGUtPnBfY29udGV4dCkpCiAJCQlicmVhazsKIAkJaWYgKG1hdGNoX2JlZ2lubmluZyB8fCBtYXRjaF9lbmQpIHsKIAkJCW1hdGNoX2JlZ2lubmluZyA9IG1hdGNoX2VuZCA9IDA7CkBAIC0yODY4LDEwICsyOTk0LDEwIEBACiAJCWlmIChuZXdfYmxhbmtfbGluZXNfYXRfZW5kICYmCiAJCSAgICBwcmVpbWFnZS5uciArIGFwcGxpZWRfcG9zID49IGltZy0+bnIgJiYKIAkJICAgICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSAmJgotCQkgICAgd3NfZXJyb3JfYWN0aW9uICE9IG5vd2Fybl93c19lcnJvcikgewotCQkJcmVjb3JkX3dzX2Vycm9yKFdTX0JMQU5LX0FUX0VPRiwgIisiLCAxLAorCQkgICAgc3RhdGUtPndzX2Vycm9yX2FjdGlvbiAhPSBub3dhcm5fd3NfZXJyb3IpIHsKKwkJCXJlY29yZF93c19lcnJvcihzdGF0ZSwgV1NfQkxBTktfQVRfRU9GLCAiKyIsIDEsCiAJCQkJCWZvdW5kX25ld19ibGFua19saW5lc19hdF9lbmQpOwotCQkJaWYgKHdzX2Vycm9yX2FjdGlvbiA9PSBjb3JyZWN0X3dzX2Vycm9yKSB7CisJCQlpZiAoc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9PSBjb3JyZWN0X3dzX2Vycm9yKSB7CiAJCQkJd2hpbGUgKG5ld19ibGFua19saW5lc19hdF9lbmQtLSkKIAkJCQkJcmVtb3ZlX2xhc3RfbGluZSgmcG9zdGltYWdlKTsKIAkJCX0KQEAgLTI4ODIsMTMgKzMwMDgsMTMgQEAKIAkJCSAqIGFwcGx5X3BhdGNoLT5jaGVja19wYXRjaF9saXN0LT5jaGVja19wYXRjaC0+CiAJCQkgKiBhcHBseV9kYXRhLT5hcHBseV9mcmFnbWVudHMtPmFwcGx5X29uZV9mcmFnbWVudAogCQkJICovCi0JCQlpZiAod3NfZXJyb3JfYWN0aW9uID09IGRpZV9vbl93c19lcnJvcikKLQkJCQlhcHBseSA9IDA7CisJCQlpZiAoc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9PSBkaWVfb25fd3NfZXJyb3IpCisJCQkJc3RhdGUtPmFwcGx5ID0gMDsKIAkJfQogCi0JCWlmIChhcHBseV92ZXJib3NlbHkgJiYgYXBwbGllZF9wb3MgIT0gcG9zKSB7CisJCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zZWx5ICYmIGFwcGxpZWRfcG9zICE9IHBvcykgewogCQkJaW50IG9mZnNldCA9IGFwcGxpZWRfcG9zIC0gcG9zOwotCQkJaWYgKGFwcGx5X2luX3JldmVyc2UpCisJCQlpZiAoc3RhdGUtPmFwcGx5X2luX3JldmVyc2UpCiAJCQkJb2Zmc2V0ID0gMCAtIG9mZnNldDsKIAkJCWZwcmludGZfbG4oc3RkZXJyLAogCQkJCSAgIFFfKCJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iLApAQCAtMjkwNiw5ICszMDMyLDkgQEAKIAkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIgogCQkJCQkgICAgICIgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiKSwKIAkJCQkgICBsZWFkaW5nLCB0cmFpbGluZywgYXBwbGllZF9wb3MrMSk7Ci0JCXVwZGF0ZV9pbWFnZShpbWcsIGFwcGxpZWRfcG9zLCAmcHJlaW1hZ2UsICZwb3N0aW1hZ2UpOworCQl1cGRhdGVfaW1hZ2Uoc3RhdGUsIGltZywgYXBwbGllZF9wb3MsICZwcmVpbWFnZSwgJnBvc3RpbWFnZSk7CiAJfSBlbHNlIHsKLQkJaWYgKGFwcGx5X3ZlcmJvc2VseSkKKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NlbHkpCiAJCQllcnJvcihfKCJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuJS4qcyIpLAogCQkJICAgICAgKGludCkob2xkIC0gb2xkbGluZXMpLCBvbGRsaW5lcyk7CiAJfQpAQCAtMjkyMiw3ICszMDQ4LDkgQEAKIAlyZXR1cm4gKGFwcGxpZWRfcG9zIDwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgYXBwbHlfYmluYXJ5X2ZyYWdtZW50KHN0cnVjdCBpbWFnZSAqaW1nLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQorc3RhdGljIGludCBhcHBseV9iaW5hcnlfZnJhZ21lbnQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCQkgc3RydWN0IGltYWdlICppbWcsCisJCQkJIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJc3RydWN0IGZyYWdtZW50ICpmcmFnbWVudCA9IHBhdGNoLT5mcmFnbWVudHM7CiAJdW5zaWduZWQgbG9uZyBsZW47CkBAIC0yOTM1LDcgKzMwNjMsNyBAQAogCQkJICAgICBwYXRjaC0+b2xkX25hbWUpOwogCiAJLyogQmluYXJ5IHBhdGNoIGlzIGlycmV2ZXJzaWJsZSB3aXRob3V0IHRoZSBvcHRpb25hbCBzZWNvbmQgaHVuayAqLwotCWlmIChhcHBseV9pbl9yZXZlcnNlKSB7CisJaWYgKHN0YXRlLT5hcHBseV9pbl9yZXZlcnNlKSB7CiAJCWlmICghZnJhZ21lbnQtPm5leHQpCiAJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoICIKIAkJCQkgICAgICJ3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIsCkBAIC0yOTY4LDcgKzMwOTYsOSBAQAogICogYnV0IHRoZSBwcmVpbWFnZSBwcmVwYXJlZCBieSB0aGUgY2FsbGVyIGluICJpbWciIGlzIGZyZWVkIGhlcmUKICAqIG9yIGluIHRoZSBoZWxwZXIgZnVuY3Rpb24gYXBwbHlfYmluYXJ5X2ZyYWdtZW50KCkgdGhpcyBjYWxscy4KICAqLwotc3RhdGljIGludCBhcHBseV9iaW5hcnkoc3RydWN0IGltYWdlICppbWcsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGFwcGx5X2JpbmFyeShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJc3RydWN0IGltYWdlICppbWcsCisJCQlzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCWNvbnN0IGNoYXIgKm5hbWUgPSBwYXRjaC0+b2xkX25hbWUgPyBwYXRjaC0+b2xkX25hbWUgOiBwYXRjaC0+bmV3X25hbWU7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKQEAgLTMwMjksNyArMzE1OSw3IEBACiAJCSAqIGFwcGx5IHRoZSBwYXRjaCBkYXRhIHRvIGl0LCB3aGljaCBpcyBzdG9yZWQKIAkJICogaW4gdGhlIHBhdGNoLT5mcmFnbWVudHMtPntwYXRjaCxzaXplfS4KIAkJICovCi0JCWlmIChhcHBseV9iaW5hcnlfZnJhZ21lbnQoaW1nLCBwYXRjaCkpCisJCWlmIChhcHBseV9iaW5hcnlfZnJhZ21lbnQoc3RhdGUsIGltZywgcGF0Y2gpKQogCQkJcmV0dXJuIGVycm9yKF8oImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIiksCiAJCQkJICAgICBuYW1lKTsKIApAQCAtMzA0Myw3ICszMTczLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhcHBseV9mcmFnbWVudHMoc3RydWN0IGltYWdlICppbWcsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGFwcGx5X2ZyYWdtZW50cyhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgaW1hZ2UgKmltZywgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWcgPSBwYXRjaC0+ZnJhZ21lbnRzOwogCWNvbnN0IGNoYXIgKm5hbWUgPSBwYXRjaC0+b2xkX25hbWUgPyBwYXRjaC0+b2xkX25hbWUgOiBwYXRjaC0+bmV3X25hbWU7CkBAIC0zMDUyLDEzICszMTgyLDEzIEBACiAJaW50IG50aCA9IDA7CiAKIAlpZiAocGF0Y2gtPmlzX2JpbmFyeSkKLQkJcmV0dXJuIGFwcGx5X2JpbmFyeShpbWcsIHBhdGNoKTsKKwkJcmV0dXJuIGFwcGx5X2JpbmFyeShzdGF0ZSwgaW1nLCBwYXRjaCk7CiAKIAl3aGlsZSAoZnJhZykgewogCQludGgrKzsKLQkJaWYgKGFwcGx5X29uZV9mcmFnbWVudChpbWcsIGZyYWcsIGluYWNjdXJhdGVfZW9mLCB3c19ydWxlLCBudGgpKSB7CisJCWlmIChhcHBseV9vbmVfZnJhZ21lbnQoc3RhdGUsIGltZywgZnJhZywgaW5hY2N1cmF0ZV9lb2YsIHdzX3J1bGUsIG50aCkpIHsKIAkJCWVycm9yKF8oInBhdGNoIGZhaWxlZDogJXM6JWxkIiksIG5hbWUsIGZyYWctPm9sZHBvcyk7Ci0JCQlpZiAoIWFwcGx5X3dpdGhfcmVqZWN0KQorCQkJaWYgKCFzdGF0ZS0+YXBwbHlfd2l0aF9yZWplY3QpCiAJCQkJcmV0dXJuIC0xOwogCQkJZnJhZy0+cmVqZWN0ZWQgPSAxOwogCQl9CkBAIC0zMDkzLDE0ICszMjIzLDE0IEBACiAJcmV0dXJuIHJlYWRfYmxvYl9vYmplY3QoYnVmLCBjZS0+c2hhMSwgY2UtPmNlX21vZGUpOwogfQogCi1zdGF0aWMgc3RydWN0IHBhdGNoICppbl9mbl90YWJsZShjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHN0cnVjdCBwYXRjaCAqaW5fZm5fdGFibGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKIAogCWlmIChuYW1lID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cCgmZm5fdGFibGUsIG5hbWUpOworCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoJnN0YXRlLT5mbl90YWJsZSwgbmFtZSk7CiAJaWYgKGl0ZW0gIT0gTlVMTCkKIAkJcmV0dXJuIChzdHJ1Y3QgcGF0Y2ggKilpdGVtLT51dGlsOwogCkBAIC0zMTMyLDcgKzMyNjIsNyBAQAogCXJldHVybiBwYXRjaCA9PSBQQVRIX1dBU19ERUxFVEVEOwogfQogCi1zdGF0aWMgdm9pZCBhZGRfdG9fZm5fdGFibGUoc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyB2b2lkIGFkZF90b19mbl90YWJsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOwogCkBAIC0zMTQyLDcgKzMyNzIsNyBAQAogCSAqIGZpbGUgY3JlYXRpb25zIGFuZCBjb3BpZXMKIAkgKi8KIAlpZiAocGF0Y2gtPm5ld19uYW1lICE9IE5VTEwpIHsKLQkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmZm5fdGFibGUsIHBhdGNoLT5uZXdfbmFtZSk7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJnN0YXRlLT5mbl90YWJsZSwgcGF0Y2gtPm5ld19uYW1lKTsKIAkJaXRlbS0+dXRpbCA9IHBhdGNoOwogCX0KIApAQCAtMzE1MSwxMiArMzI4MSwxMiBAQAogCSAqIGxhdGVyIGNodW5rcyBzaG91bGRuJ3QgcGF0Y2ggb2xkIG5hbWVzCiAJICovCiAJaWYgKChwYXRjaC0+bmV3X25hbWUgPT0gTlVMTCkgfHwgKHBhdGNoLT5pc19yZW5hbWUpKSB7Ci0JCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJmZuX3RhYmxlLCBwYXRjaC0+b2xkX25hbWUpOworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZzdGF0ZS0+Zm5fdGFibGUsIHBhdGNoLT5vbGRfbmFtZSk7CiAJCWl0ZW0tPnV0aWwgPSBQQVRIX1dBU19ERUxFVEVEOwogCX0KIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZV9mbl90YWJsZShzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQorc3RhdGljIHZvaWQgcHJlcGFyZV9mbl90YWJsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCS8qCiAJICogc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgaW5jb21pbmcgZmlsZSBkZWxldGlvbgpAQCAtMzE2NCw3ICszMjk0LDcgQEAKIAl3aGlsZSAocGF0Y2gpIHsKIAkJaWYgKChwYXRjaC0+bmV3X25hbWUgPT0gTlVMTCkgfHwgKHBhdGNoLT5pc19yZW5hbWUpKSB7CiAJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKLQkJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJmZuX3RhYmxlLCBwYXRjaC0+b2xkX25hbWUpOworCQkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmc3RhdGUtPmZuX3RhYmxlLCBwYXRjaC0+b2xkX25hbWUpOwogCQkJaXRlbS0+dXRpbCA9IFBBVEhfVE9fQkVfREVMRVRFRDsKIAkJfQogCQlwYXRjaCA9IHBhdGNoLT5uZXh0OwpAQCAtMzE4NSw3ICszMzE1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYXRjaCAqcHJldmlvdXNfcGF0Y2goc3RydWN0IHBhdGNoICpwYXRjaCwgaW50ICpnb25lKQorc3RhdGljIHN0cnVjdCBwYXRjaCAqcHJldmlvdXNfcGF0Y2goc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgc3RydWN0IHBhdGNoICpwYXRjaCwKKwkJCQkgICAgaW50ICpnb25lKQogewogCXN0cnVjdCBwYXRjaCAqcHJldmlvdXM7CiAKQEAgLTMxOTMsNyArMzMyNSw3IEBACiAJaWYgKHBhdGNoLT5pc19jb3B5IHx8IHBhdGNoLT5pc19yZW5hbWUpCiAJCXJldHVybiBOVUxMOyAvKiAiZ2l0IiBwYXRjaGVzIGRvIG5vdCBkZXBlbmQgb24gdGhlIG9yZGVyICovCiAKLQlwcmV2aW91cyA9IGluX2ZuX3RhYmxlKHBhdGNoLT5vbGRfbmFtZSk7CisJcHJldmlvdXMgPSBpbl9mbl90YWJsZShzdGF0ZSwgcGF0Y2gtPm9sZF9uYW1lKTsKIAlpZiAoIXByZXZpb3VzKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMzIxOCwxNSArMzM1MCwxNiBAQAogCiAjZGVmaW5lIFNVQk1PRFVMRV9QQVRDSF9XSVRIT1VUX0lOREVYIDEKIAotc3RhdGljIGludCBsb2FkX3BhdGNoX3RhcmdldChzdHJ1Y3Qgc3RyYnVmICpidWYsCitzdGF0aWMgaW50IGxvYWRfcGF0Y2hfdGFyZ2V0KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwKIAkJCSAgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKIAkJCSAgICAgc3RydWN0IHN0YXQgKnN0LAogCQkJICAgICBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICB1bnNpZ25lZCBleHBlY3RlZF9tb2RlKQogewotCWlmIChjYWNoZWQgfHwgY2hlY2tfaW5kZXgpIHsKKwlpZiAoc3RhdGUtPmNhY2hlZCB8fCBzdGF0ZS0+Y2hlY2tfaW5kZXgpIHsKIAkJaWYgKHJlYWRfZmlsZV9vcl9naXRsaW5rKGNlLCBidWYpKQotCQkJcmV0dXJuIGVycm9yKF8oInJlYWQgb2YgJXMgZmFpbGVkIiksIG5hbWUpOworCQkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byByZWFkICVzIiksIG5hbWUpOwogCX0gZWxzZSBpZiAobmFtZSkgewogCQlpZiAoU19JU0dJVExJTksoZXhwZWN0ZWRfbW9kZSkpIHsKIAkJCWlmIChjZSkKQEAgLTMyMzcsNyArMzM3MCw3IEBACiAJCQlyZXR1cm4gZXJyb3IoXygicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIpLCBuYW1lKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChyZWFkX29sZF9kYXRhKHN0LCBuYW1lLCBidWYpKQotCQkJCXJldHVybiBlcnJvcihfKCJyZWFkIG9mICVzIGZhaWxlZCIpLCBuYW1lKTsKKwkJCQlyZXR1cm4gZXJyb3IoXygiZmFpbGVkIHRvIHJlYWQgJXMiKSwgbmFtZSk7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0zMjUwLDcgKzMzODMsOCBAQAogICogYXBwbHlpbmcgYSBub24tZ2l0IHBhdGNoIHRoYXQgaW5jcmVtZW50YWxseSB1cGRhdGVzIHRoZSB0cmVlLAogICogd2UgcmVhZCBmcm9tIHRoZSByZXN1bHQgb2YgYSBwcmV2aW91cyBkaWZmLgogICovCi1zdGF0aWMgaW50IGxvYWRfcHJlaW1hZ2Uoc3RydWN0IGltYWdlICppbWFnZSwKK3N0YXRpYyBpbnQgbG9hZF9wcmVpbWFnZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJIHN0cnVjdCBpbWFnZSAqaW1hZ2UsCiAJCQkgc3RydWN0IHBhdGNoICpwYXRjaCwgc3RydWN0IHN0YXQgKnN0LAogCQkJIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCiB7CkBAIC0zMjYwLDcgKzMzOTQsNyBAQAogCXN0cnVjdCBwYXRjaCAqcHJldmlvdXM7CiAJaW50IHN0YXR1czsKIAotCXByZXZpb3VzID0gcHJldmlvdXNfcGF0Y2gocGF0Y2gsICZzdGF0dXMpOworCXByZXZpb3VzID0gcHJldmlvdXNfcGF0Y2goc3RhdGUsIHBhdGNoLCAmc3RhdHVzKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gZXJyb3IoXygicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiKSwKIAkJCSAgICAgcGF0Y2gtPm9sZF9uYW1lKTsKQEAgLTMyNjgsNyArMzQwMiw3IEBACiAJCS8qIFdlIGhhdmUgYSBwYXRjaGVkIGNvcHkgaW4gbWVtb3J5OyB1c2UgdGhhdC4gKi8KIAkJc3RyYnVmX2FkZCgmYnVmLCBwcmV2aW91cy0+cmVzdWx0LCBwcmV2aW91cy0+cmVzdWx0c2l6ZSk7CiAJfSBlbHNlIHsKLQkJc3RhdHVzID0gbG9hZF9wYXRjaF90YXJnZXQoJmJ1ZiwgY2UsIHN0LAorCQlzdGF0dXMgPSBsb2FkX3BhdGNoX3RhcmdldChzdGF0ZSwgJmJ1ZiwgY2UsIHN0LAogCQkJCQkgICBwYXRjaC0+b2xkX25hbWUsIHBhdGNoLT5vbGRfbW9kZSk7CiAJCWlmIChzdGF0dXMgPCAwKQogCQkJcmV0dXJuIHN0YXR1czsKQEAgLTMyODIsNyArMzQxNiw3IEBACiAJCQlmcmVlX2ZyYWdtZW50X2xpc3QocGF0Y2gtPmZyYWdtZW50cyk7CiAJCQlwYXRjaC0+ZnJhZ21lbnRzID0gTlVMTDsKIAkJfSBlbHNlIGlmIChzdGF0dXMpIHsKLQkJCXJldHVybiBlcnJvcihfKCJyZWFkIG9mICVzIGZhaWxlZCIpLCBwYXRjaC0+b2xkX25hbWUpOworCQkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byByZWFkICVzIiksIHBhdGNoLT5vbGRfbmFtZSk7CiAJCX0KIAl9CiAKQEAgLTMzMjcsNyArMzQ2MSw5IEBACiAgKiB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgbmV3X25hbWUuICBJbiBubyBjYXNlcyBvdGhlciB0aGFuIHRoYXQKICAqIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQuCiAgKi8KLXN0YXRpYyBpbnQgbG9hZF9jdXJyZW50KHN0cnVjdCBpbWFnZSAqaW1hZ2UsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGxvYWRfY3VycmVudChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJc3RydWN0IGltYWdlICppbWFnZSwKKwkJCXN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAlpbnQgc3RhdHVzLCBwb3M7CkBAIC0zMzU0LDcgKzM0OTAsNyBAQAogCWlmICh2ZXJpZnlfaW5kZXhfbWF0Y2goY2UsICZzdCkpCiAJCXJldHVybiBlcnJvcihfKCIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiKSwgbmFtZSk7CiAKLQlzdGF0dXMgPSBsb2FkX3BhdGNoX3RhcmdldCgmYnVmLCBjZSwgJnN0LCBuYW1lLCBtb2RlKTsKKwlzdGF0dXMgPSBsb2FkX3BhdGNoX3RhcmdldChzdGF0ZSwgJmJ1ZiwgY2UsICZzdCwgbmFtZSwgbW9kZSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAJZWxzZSBpZiAoc3RhdHVzKQpAQCAtMzM2NCw4ICszNTAwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHJ5X3RocmVld2F5KHN0cnVjdCBpbWFnZSAqaW1hZ2UsIHN0cnVjdCBwYXRjaCAqcGF0Y2gsCi0JCQlzdHJ1Y3Qgc3RhdCAqc3QsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCitzdGF0aWMgaW50IHRyeV90aHJlZXdheShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJc3RydWN0IGltYWdlICppbWFnZSwKKwkJCXN0cnVjdCBwYXRjaCAqcGF0Y2gsCisJCQlzdHJ1Y3Qgc3RhdCAqc3QsCisJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQogewogCXVuc2lnbmVkIGNoYXIgcHJlX3NoYTFbMjBdLCBwb3N0X3NoYTFbMjBdLCBvdXJfc2hhMVsyMF07CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKQEAgLTMzOTEsNyArMzUzMCw3IEBACiAJaW1nID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmbGVuKTsKIAlwcmVwYXJlX2ltYWdlKCZ0bXBfaW1hZ2UsIGltZywgbGVuLCAxKTsKIAkvKiBBcHBseSB0aGUgcGF0Y2ggdG8gZ2V0IHRoZSBwb3N0IGltYWdlICovCi0JaWYgKGFwcGx5X2ZyYWdtZW50cygmdG1wX2ltYWdlLCBwYXRjaCkgPCAwKSB7CisJaWYgKGFwcGx5X2ZyYWdtZW50cyhzdGF0ZSwgJnRtcF9pbWFnZSwgcGF0Y2gpIDwgMCkgewogCQljbGVhcl9pbWFnZSgmdG1wX2ltYWdlKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTM0MDEsMTEgKzM1NDAsMTEgQEAKIAogCS8qIG91cl9zaGExW10gaXMgb3VycyAqLwogCWlmIChwYXRjaC0+aXNfbmV3KSB7Ci0JCWlmIChsb2FkX2N1cnJlbnQoJnRtcF9pbWFnZSwgcGF0Y2gpKQorCQlpZiAobG9hZF9jdXJyZW50KHN0YXRlLCAmdG1wX2ltYWdlLCBwYXRjaCkpCiAJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciLAogCQkJCSAgICAgcGF0Y2gtPm5ld19uYW1lKTsKIAl9IGVsc2UgewotCQlpZiAobG9hZF9wcmVpbWFnZSgmdG1wX2ltYWdlLCBwYXRjaCwgc3QsIGNlKSkKKwkJaWYgKGxvYWRfcHJlaW1hZ2Uoc3RhdGUsICZ0bXBfaW1hZ2UsIHBhdGNoLCBzdCwgY2UpKQogCQkJcmV0dXJuIGVycm9yKCJjYW5ub3QgcmVhZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiAnJXMnIiwKIAkJCQkgICAgIHBhdGNoLT5vbGRfbmFtZSk7CiAJfQpAQCAtMzQzNSwyMiArMzU3NCwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFwcGx5X2RhdGEoc3RydWN0IHBhdGNoICpwYXRjaCwgc3RydWN0IHN0YXQgKnN0LCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQorc3RhdGljIGludCBhcHBseV9kYXRhKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gsCisJCSAgICAgIHN0cnVjdCBzdGF0ICpzdCwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKIHsKIAlzdHJ1Y3QgaW1hZ2UgaW1hZ2U7CiAKLQlpZiAobG9hZF9wcmVpbWFnZSgmaW1hZ2UsIHBhdGNoLCBzdCwgY2UpIDwgMCkKKwlpZiAobG9hZF9wcmVpbWFnZShzdGF0ZSwgJmltYWdlLCBwYXRjaCwgc3QsIGNlKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWlmIChwYXRjaC0+ZGlyZWN0X3RvX3RocmVld2F5IHx8Ci0JICAgIGFwcGx5X2ZyYWdtZW50cygmaW1hZ2UsIHBhdGNoKSA8IDApIHsKKwkgICAgYXBwbHlfZnJhZ21lbnRzKHN0YXRlLCAmaW1hZ2UsIHBhdGNoKSA8IDApIHsKIAkJLyogTm90ZTogd2l0aCAtLXJlamVjdCwgYXBwbHlfZnJhZ21lbnRzKCkgcmV0dXJucyAwICovCi0JCWlmICghdGhyZWV3YXkgfHwgdHJ5X3RocmVld2F5KCZpbWFnZSwgcGF0Y2gsIHN0LCBjZSkgPCAwKQorCQlpZiAoIXN0YXRlLT50aHJlZXdheSB8fCB0cnlfdGhyZWV3YXkoc3RhdGUsICZpbWFnZSwgcGF0Y2gsIHN0LCBjZSkgPCAwKQogCQkJcmV0dXJuIC0xOwogCX0KIAlwYXRjaC0+cmVzdWx0ID0gaW1hZ2UuYnVmOwogCXBhdGNoLT5yZXN1bHRzaXplID0gaW1hZ2UubGVuOwotCWFkZF90b19mbl90YWJsZShwYXRjaCk7CisJYWRkX3RvX2ZuX3RhYmxlKHN0YXRlLCBwYXRjaCk7CiAJZnJlZShpbWFnZS5saW5lX2FsbG9jYXRlZCk7CiAKIAlpZiAoMCA8IHBhdGNoLT5pc19kZWxldGUgJiYgcGF0Y2gtPnJlc3VsdHNpemUpCkBAIC0zNDcwLDcgKzM2MTAsMTAgQEAKICAqIGNoZWNrX3BhdGNoKCkgc2VwYXJhdGVseSBtYWtlcyBzdXJlIChhbmQgZXJyb3JzIG91dCBvdGhlcndpc2UpIHRoYXQKICAqIHRoZSBwYXRoIHRoZSBwYXRjaCBjcmVhdGVzIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IHRyZWUuCiAgKi8KLXN0YXRpYyBpbnQgY2hlY2tfcHJlaW1hZ2Uoc3RydWN0IHBhdGNoICpwYXRjaCwgc3RydWN0IGNhY2hlX2VudHJ5ICoqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3N0YXRpYyBpbnQgY2hlY2tfcHJlaW1hZ2Uoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgc3RydWN0IHBhdGNoICpwYXRjaCwKKwkJCSAgc3RydWN0IGNhY2hlX2VudHJ5ICoqY2UsCisJCQkgIHN0cnVjdCBzdGF0ICpzdCkKIHsKIAljb25zdCBjaGFyICpvbGRfbmFtZSA9IHBhdGNoLT5vbGRfbmFtZTsKIAlzdHJ1Y3QgcGF0Y2ggKnByZXZpb3VzID0gTlVMTDsKQEAgLTM0ODEsMTkgKzM2MjQsMTkgQEAKIAkJcmV0dXJuIDA7CiAKIAlhc3NlcnQocGF0Y2gtPmlzX25ldyA8PSAwKTsKLQlwcmV2aW91cyA9IHByZXZpb3VzX3BhdGNoKHBhdGNoLCAmc3RhdHVzKTsKKwlwcmV2aW91cyA9IHByZXZpb3VzX3BhdGNoKHN0YXRlLCBwYXRjaCwgJnN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gZXJyb3IoXygicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiKSwgb2xkX25hbWUpOwogCWlmIChwcmV2aW91cykgewogCQlzdF9tb2RlID0gcHJldmlvdXMtPm5ld19tb2RlOwotCX0gZWxzZSBpZiAoIWNhY2hlZCkgeworCX0gZWxzZSBpZiAoIXN0YXRlLT5jYWNoZWQpIHsKIAkJc3RhdF9yZXQgPSBsc3RhdChvbGRfbmFtZSwgc3QpOwogCQlpZiAoc3RhdF9yZXQgJiYgZXJybm8gIT0gRU5PRU5UKQogCQkJcmV0dXJuIGVycm9yKF8oIiVzOiAlcyIpLCBvbGRfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiAKLQlpZiAoY2hlY2tfaW5kZXggJiYgIXByZXZpb3VzKSB7CisJaWYgKHN0YXRlLT5jaGVja19pbmRleCAmJiAhcHJldmlvdXMpIHsKIAkJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKG9sZF9uYW1lLCBzdHJsZW4ob2xkX25hbWUpKTsKIAkJaWYgKHBvcyA8IDApIHsKIAkJCWlmIChwYXRjaC0+aXNfbmV3IDwgMCkKQEAgLTM1MDUsOSArMzY0OCw5IEBACiAJCQlpZiAoY2hlY2tvdXRfdGFyZ2V0KCZ0aGVfaW5kZXgsICpjZSwgc3QpKQogCQkJCXJldHVybiAtMTsKIAkJfQotCQlpZiAoIWNhY2hlZCAmJiB2ZXJpZnlfaW5kZXhfbWF0Y2goKmNlLCBzdCkpCisJCWlmICghc3RhdGUtPmNhY2hlZCAmJiB2ZXJpZnlfaW5kZXhfbWF0Y2goKmNlLCBzdCkpCiAJCQlyZXR1cm4gZXJyb3IoXygiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IiksIG9sZF9uYW1lKTsKLQkJaWYgKGNhY2hlZCkKKwkJaWYgKHN0YXRlLT5jYWNoZWQpCiAJCQlzdF9tb2RlID0gKCpjZSktPmNlX21vZGU7CiAJfSBlbHNlIGlmIChzdGF0X3JldCA8IDApIHsKIAkJaWYgKHBhdGNoLT5pc19uZXcgPCAwKQpAQCAtMzUxNSw3ICszNjU4LDcgQEAKIAkJcmV0dXJuIGVycm9yKF8oIiVzOiAlcyIpLCBvbGRfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiAKLQlpZiAoIWNhY2hlZCAmJiAhcHJldmlvdXMpCisJaWYgKCFzdGF0ZS0+Y2FjaGVkICYmICFwcmV2aW91cykKIAkJc3RfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KCpjZSwgc3QtPnN0X21vZGUpOwogCiAJaWYgKHBhdGNoLT5pc19uZXcgPCAwKQpAQCAtMzU0MywxNSArMzY4NiwxNyBAQAogI2RlZmluZSBFWElTVFNfSU5fSU5ERVggMQogI2RlZmluZSBFWElTVFNfSU5fV09SS1RSRUUgMgogCi1zdGF0aWMgaW50IGNoZWNrX3RvX2NyZWF0ZShjb25zdCBjaGFyICpuZXdfbmFtZSwgaW50IG9rX2lmX2V4aXN0cykKK3N0YXRpYyBpbnQgY2hlY2tfdG9fY3JlYXRlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICpuZXdfbmFtZSwKKwkJCSAgIGludCBva19pZl9leGlzdHMpCiB7CiAJc3RydWN0IHN0YXQgbnN0OwogCi0JaWYgKGNoZWNrX2luZGV4ICYmCisJaWYgKHN0YXRlLT5jaGVja19pbmRleCAmJgogCSAgICBjYWNoZV9uYW1lX3BvcyhuZXdfbmFtZSwgc3RybGVuKG5ld19uYW1lKSkgPj0gMCAmJgogCSAgICAhb2tfaWZfZXhpc3RzKQogCQlyZXR1cm4gRVhJU1RTX0lOX0lOREVYOwotCWlmIChjYWNoZWQpCisJaWYgKHN0YXRlLT5jYWNoZWQpCiAJCXJldHVybiAwOwogCiAJaWYgKCFsc3RhdChuZXdfbmFtZSwgJm5zdCkpIHsKQEAgLTM1NzQsNTYgKzM3MTksNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3cgc3ltbGlua3MgaW4gdGhlIHByZWltYWdlIGFyZQotICogbWFuaXB1bGF0ZWQgYnkgdGhlIHBhdGNoZXMuICBBIHBhdGNoIHRvIGFkZCBhL2IvYyB3aGVyZSBhL2IKLSAqIGlzIGEgc3ltbGluayBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gYWZmZWN0IHRoZSBkaXJlY3RvcnkKLSAqIHRoZSBzeW1saW5rIHBvaW50cyBhdCwgYnV0IGlmIHRoZSBzYW1lIHBhdGNoIHJlbW92ZXMgYS9iLAotICogaXQgaXMgcGVyZmVjdGx5IGZpbmUsIGFzIHRoZSBwYXRjaCByZW1vdmVzIGEvYiB0byBtYWtlIHJvb20KLSAqIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBhL2Igc28gdGhhdCBhL2IvYyBjYW4gYmUgY3JlYXRlZC4KLSAqLwotc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBzeW1saW5rX2NoYW5nZXM7Ci0jZGVmaW5lIFNZTUxJTktfR09FU19BV0FZIDAxCi0jZGVmaW5lIFNZTUxJTktfSU5fUkVTVUxUIDAyCi0KLXN0YXRpYyB1aW50cHRyX3QgcmVnaXN0ZXJfc3ltbGlua19jaGFuZ2VzKGNvbnN0IGNoYXIgKnBhdGgsIHVpbnRwdHJfdCB3aGF0KQorc3RhdGljIHVpbnRwdHJfdCByZWdpc3Rlcl9zeW1saW5rX2NoYW5nZXMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCQkJICBjb25zdCBjaGFyICpwYXRoLAorCQkJCQkgIHVpbnRwdHJfdCB3aGF0KQogewogCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICplbnQ7CiAKLQllbnQgPSBzdHJpbmdfbGlzdF9sb29rdXAoJnN5bWxpbmtfY2hhbmdlcywgcGF0aCk7CisJZW50ID0gc3RyaW5nX2xpc3RfbG9va3VwKCZzdGF0ZS0+c3ltbGlua19jaGFuZ2VzLCBwYXRoKTsKIAlpZiAoIWVudCkgewotCQllbnQgPSBzdHJpbmdfbGlzdF9pbnNlcnQoJnN5bWxpbmtfY2hhbmdlcywgcGF0aCk7CisJCWVudCA9IHN0cmluZ19saXN0X2luc2VydCgmc3RhdGUtPnN5bWxpbmtfY2hhbmdlcywgcGF0aCk7CiAJCWVudC0+dXRpbCA9ICh2b2lkICopMDsKIAl9CiAJZW50LT51dGlsID0gKHZvaWQgKikod2hhdCB8ICgodWludHB0cl90KWVudC0+dXRpbCkpOwogCXJldHVybiAodWludHB0cl90KWVudC0+dXRpbDsKIH0KIAotc3RhdGljIHVpbnRwdHJfdCBjaGVja19zeW1saW5rX2NoYW5nZXMoY29uc3QgY2hhciAqcGF0aCkKK3N0YXRpYyB1aW50cHRyX3QgY2hlY2tfc3ltbGlua19jaGFuZ2VzKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmVudDsKIAotCWVudCA9IHN0cmluZ19saXN0X2xvb2t1cCgmc3ltbGlua19jaGFuZ2VzLCBwYXRoKTsKKwllbnQgPSBzdHJpbmdfbGlzdF9sb29rdXAoJnN0YXRlLT5zeW1saW5rX2NoYW5nZXMsIHBhdGgpOwogCWlmICghZW50KQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gKHVpbnRwdHJfdCllbnQtPnV0aWw7CiB9CiAKLXN0YXRpYyB2b2lkIHByZXBhcmVfc3ltbGlua19jaGFuZ2VzKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgdm9pZCBwcmVwYXJlX3N5bWxpbmtfY2hhbmdlcyhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCWZvciAoIDsgcGF0Y2g7IHBhdGNoID0gcGF0Y2gtPm5leHQpIHsKIAkJaWYgKChwYXRjaC0+b2xkX25hbWUgJiYgU19JU0xOSyhwYXRjaC0+b2xkX21vZGUpKSAmJgogCQkgICAgKHBhdGNoLT5pc19yZW5hbWUgfHwgcGF0Y2gtPmlzX2RlbGV0ZSkpCiAJCQkvKiB0aGUgc3ltbGluayBhdCBwYXRjaC0+b2xkX25hbWUgaXMgcmVtb3ZlZCAqLwotCQkJcmVnaXN0ZXJfc3ltbGlua19jaGFuZ2VzKHBhdGNoLT5vbGRfbmFtZSwgU1lNTElOS19HT0VTX0FXQVkpOworCQkJcmVnaXN0ZXJfc3ltbGlua19jaGFuZ2VzKHN0YXRlLCBwYXRjaC0+b2xkX25hbWUsIFNZTUxJTktfR09FU19BV0FZKTsKIAogCQlpZiAocGF0Y2gtPm5ld19uYW1lICYmIFNfSVNMTksocGF0Y2gtPm5ld19tb2RlKSkKIAkJCS8qIHRoZSBzeW1saW5rIGF0IHBhdGNoLT5uZXdfbmFtZSBpcyBjcmVhdGVkIG9yIHJlbWFpbnMgKi8KLQkJCXJlZ2lzdGVyX3N5bWxpbmtfY2hhbmdlcyhwYXRjaC0+bmV3X25hbWUsIFNZTUxJTktfSU5fUkVTVUxUKTsKKwkJCXJlZ2lzdGVyX3N5bWxpbmtfY2hhbmdlcyhzdGF0ZSwgcGF0Y2gtPm5ld19uYW1lLCBTWU1MSU5LX0lOX1JFU1VMVCk7CiAJfQogfQogCi1zdGF0aWMgaW50IHBhdGhfaXNfYmV5b25kX3N5bWxpbmtfMShzdHJ1Y3Qgc3RyYnVmICpuYW1lKQorc3RhdGljIGludCBwYXRoX2lzX2JleW9uZF9zeW1saW5rXzEoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHN0cmJ1ZiAqbmFtZSkKIHsKIAlkbyB7CiAJCXVuc2lnbmVkIGludCBjaGFuZ2U7CkBAIC0zNjMzLDcgKzM3NjgsNyBAQAogCQlpZiAoIW5hbWUtPmxlbikKIAkJCWJyZWFrOwogCQluYW1lLT5idWZbbmFtZS0+bGVuXSA9ICdcMCc7Ci0JCWNoYW5nZSA9IGNoZWNrX3N5bWxpbmtfY2hhbmdlcyhuYW1lLT5idWYpOworCQljaGFuZ2UgPSBjaGVja19zeW1saW5rX2NoYW5nZXMoc3RhdGUsIG5hbWUtPmJ1Zik7CiAJCWlmIChjaGFuZ2UgJiBTWU1MSU5LX0lOX1JFU1VMVCkKIAkJCXJldHVybiAxOwogCQlpZiAoY2hhbmdlICYgU1lNTElOS19HT0VTX0FXQVkpCkBAIC0zNjQ0LDcgKzM3NzksNyBAQAogCQkJY29udGludWU7CiAKIAkJLyogb3RoZXJ3aXNlLCBjaGVjayB0aGUgcHJlaW1hZ2UgKi8KLQkJaWYgKGNoZWNrX2luZGV4KSB7CisJCWlmIChzdGF0ZS0+Y2hlY2tfaW5kZXgpIHsKIAkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CiAKIAkJCWNlID0gY2FjaGVfZmlsZV9leGlzdHMobmFtZS0+YnVmLCBuYW1lLT5sZW4sIGlnbm9yZV9jYXNlKTsKQEAgLTM2NTksMTQgKzM3OTQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYXRoX2lzX2JleW9uZF9zeW1saW5rKGNvbnN0IGNoYXIgKm5hbWVfKQorc3RhdGljIGludCBwYXRoX2lzX2JleW9uZF9zeW1saW5rKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWVfKQogewogCWludCByZXQ7CiAJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CiAKIAlhc3NlcnQoKm5hbWVfICE9ICdcMCcpOwogCXN0cmJ1Zl9hZGRzdHIoJm5hbWUsIG5hbWVfKTsKLQlyZXQgPSBwYXRoX2lzX2JleW9uZF9zeW1saW5rXzEoJm5hbWUpOworCXJldCA9IHBhdGhfaXNfYmV5b25kX3N5bWxpbmtfMShzdGF0ZSwgJm5hbWUpOwogCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKIAogCXJldHVybiByZXQ7CkBAIC0zNjkzLDcgKzM4MjgsNyBAQAogICogQ2hlY2sgYW5kIGFwcGx5IHRoZSBwYXRjaCBpbi1jb3JlOyBsZWF2ZSB0aGUgcmVzdWx0IGluIHBhdGNoLT5yZXN1bHQKICAqIGZvciB0aGUgY2FsbGVyIHRvIHdyaXRlIGl0IG91dCB0byB0aGUgZmluYWwgZGVzdGluYXRpb24uCiAgKi8KLXN0YXRpYyBpbnQgY2hlY2tfcGF0Y2goc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyBpbnQgY2hlY2tfcGF0Y2goc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAljb25zdCBjaGFyICpvbGRfbmFtZSA9IHBhdGNoLT5vbGRfbmFtZTsKQEAgLTM3MDYsNyArMzg0MSw3IEBACiAKIAlwYXRjaC0+cmVqZWN0ZWQgPSAxOyAvKiB3ZSB3aWxsIGRyb3AgdGhpcyBhZnRlciB3ZSBzdWNjZWVkICovCiAKLQlzdGF0dXMgPSBjaGVja19wcmVpbWFnZShwYXRjaCwgJmNlLCAmc3QpOworCXN0YXR1cyA9IGNoZWNrX3ByZWltYWdlKHN0YXRlLCBwYXRjaCwgJmNlLCAmc3QpOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAJb2xkX25hbWUgPSBwYXRjaC0+b2xkX25hbWU7CkBAIC0zNzI1LDcgKzM4NjAsNyBAQAogCSAqIEIgYW5kIHJlbmFtZSBmcm9tIEEgdG8gQiBpcyBoYW5kbGVkIHRoZSBzYW1lIHdheSBieSBhc2tpbmcKIAkgKiB3YXNfZGVsZXRlZCgpLgogCSAqLwotCWlmICgodHBhdGNoID0gaW5fZm5fdGFibGUobmV3X25hbWUpKSAmJgorCWlmICgodHBhdGNoID0gaW5fZm5fdGFibGUoc3RhdGUsIG5ld19uYW1lKSkgJiYKIAkgICAgKHdhc19kZWxldGVkKHRwYXRjaCkgfHwgdG9fYmVfZGVsZXRlZCh0cGF0Y2gpKSkKIAkJb2tfaWZfZXhpc3RzID0gMTsKIAllbHNlCkBAIC0zNzMzLDkgKzM4NjgsOSBAQAogCiAJaWYgKG5ld19uYW1lICYmCiAJICAgICgoMCA8IHBhdGNoLT5pc19uZXcpIHx8IHBhdGNoLT5pc19yZW5hbWUgfHwgcGF0Y2gtPmlzX2NvcHkpKSB7Ci0JCWludCBlcnIgPSBjaGVja190b19jcmVhdGUobmV3X25hbWUsIG9rX2lmX2V4aXN0cyk7CisJCWludCBlcnIgPSBjaGVja190b19jcmVhdGUoc3RhdGUsIG5ld19uYW1lLCBva19pZl9leGlzdHMpOwogCi0JCWlmIChlcnIgJiYgdGhyZWV3YXkpIHsKKwkJaWYgKGVyciAmJiBzdGF0ZS0+dGhyZWV3YXkpIHsKIAkJCXBhdGNoLT5kaXJlY3RfdG9fdGhyZWV3YXkgPSAxOwogCQl9IGVsc2Ugc3dpdGNoIChlcnIpIHsKIAkJY2FzZSAwOgpAQCAtMzc3Niw3ICszOTExLDcgQEAKIAkJfQogCX0KIAotCWlmICghdW5zYWZlX3BhdGhzKQorCWlmICghc3RhdGUtPnVuc2FmZV9wYXRocykKIAkJZGllX29uX3Vuc2FmZV9wYXRoKHBhdGNoKTsKIAogCS8qCkBAIC0zNzg4LDI3ICszOTIzLDI3IEBACiAJICogaXMgbm90IGRlcG9zaXRlZCB0byBhIHBhdGggdGhhdCBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rCiAJICogaGVyZS4KIAkgKi8KLQlpZiAoIXBhdGNoLT5pc19kZWxldGUgJiYgcGF0aF9pc19iZXlvbmRfc3ltbGluayhwYXRjaC0+bmV3X25hbWUpKQorCWlmICghcGF0Y2gtPmlzX2RlbGV0ZSAmJiBwYXRoX2lzX2JleW9uZF9zeW1saW5rKHN0YXRlLCBwYXRjaC0+bmV3X25hbWUpKQogCQlyZXR1cm4gZXJyb3IoXygiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiKSwKIAkJCSAgICAgcGF0Y2gtPm5ld19uYW1lKTsKIAotCWlmIChhcHBseV9kYXRhKHBhdGNoLCAmc3QsIGNlKSA8IDApCisJaWYgKGFwcGx5X2RhdGEoc3RhdGUsIHBhdGNoLCAmc3QsIGNlKSA8IDApCiAJCXJldHVybiBlcnJvcihfKCIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiKSwgbmFtZSk7CiAJcGF0Y2gtPnJlamVjdGVkID0gMDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaGVja19wYXRjaF9saXN0KHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgaW50IGNoZWNrX3BhdGNoX2xpc3Qoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAlpbnQgZXJyID0gMDsKIAotCXByZXBhcmVfc3ltbGlua19jaGFuZ2VzKHBhdGNoKTsKLQlwcmVwYXJlX2ZuX3RhYmxlKHBhdGNoKTsKKwlwcmVwYXJlX3N5bWxpbmtfY2hhbmdlcyhzdGF0ZSwgcGF0Y2gpOworCXByZXBhcmVfZm5fdGFibGUoc3RhdGUsIHBhdGNoKTsKIAl3aGlsZSAocGF0Y2gpIHsKLQkJaWYgKGFwcGx5X3ZlcmJvc2VseSkKKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NlbHkpCiAJCQlzYXlfcGF0Y2hfbmFtZShzdGRlcnIsCiAJCQkJICAgICAgIF8oIkNoZWNraW5nIHBhdGNoICVzLi4uIiksIHBhdGNoKTsKLQkJZXJyIHw9IGNoZWNrX3BhdGNoKHBhdGNoKTsKKwkJZXJyIHw9IGNoZWNrX3BhdGNoKHN0YXRlLCBwYXRjaCk7CiAJCXBhdGNoID0gcGF0Y2gtPm5leHQ7CiAJfQogCXJldHVybiBlcnI7CkBAIC0zOTEyLDcgKzQwNDcsNyBAQAogCWRpc2NhcmRfaW5kZXgoJnJlc3VsdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0YXRfcGF0Y2hfbGlzdChzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQorc3RhdGljIHZvaWQgc3RhdF9wYXRjaF9saXN0KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJaW50IGZpbGVzLCBhZGRzLCBkZWxzOwogCkBAIC0zOTIwLDEzICs0MDU1LDE0IEBACiAJCWZpbGVzKys7CiAJCWFkZHMgKz0gcGF0Y2gtPmxpbmVzX2FkZGVkOwogCQlkZWxzICs9IHBhdGNoLT5saW5lc19kZWxldGVkOwotCQlzaG93X3N0YXRzKHBhdGNoKTsKKwkJc2hvd19zdGF0cyhzdGF0ZSwgcGF0Y2gpOwogCX0KIAogCXByaW50X3N0YXRfc3VtbWFyeShzdGRvdXQsIGZpbGVzLCBhZGRzLCBkZWxzKTsKIH0KIAotc3RhdGljIHZvaWQgbnVtc3RhdF9wYXRjaF9saXN0KHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgdm9pZCBudW1zdGF0X3BhdGNoX2xpc3Qoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCWZvciAoIDsgcGF0Y2g7IHBhdGNoID0gcGF0Y2gtPm5leHQpIHsKIAkJY29uc3QgY2hhciAqbmFtZTsKQEAgLTM5MzUsNyArNDA3MSw3IEBACiAJCQlwcmludGYoIi1cdC1cdCIpOwogCQllbHNlCiAJCQlwcmludGYoIiVkXHQlZFx0IiwgcGF0Y2gtPmxpbmVzX2FkZGVkLCBwYXRjaC0+bGluZXNfZGVsZXRlZCk7Ci0JCXdyaXRlX25hbWVfcXVvdGVkKG5hbWUsIHN0ZG91dCwgbGluZV90ZXJtaW5hdGlvbik7CisJCXdyaXRlX25hbWVfcXVvdGVkKG5hbWUsIHN0ZG91dCwgc3RhdGUtPmxpbmVfdGVybWluYXRpb24pOwogCX0KIH0KIApAQCAtNDAxNyw0OSArNDE1Myw1MyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcGF0Y2hfc3RhdHMoc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyB2b2lkIHBhdGNoX3N0YXRzKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJaW50IGxpbmVzID0gcGF0Y2gtPmxpbmVzX2FkZGVkICsgcGF0Y2gtPmxpbmVzX2RlbGV0ZWQ7CiAKLQlpZiAobGluZXMgPiBtYXhfY2hhbmdlKQotCQltYXhfY2hhbmdlID0gbGluZXM7CisJaWYgKGxpbmVzID4gc3RhdGUtPm1heF9jaGFuZ2UpCisJCXN0YXRlLT5tYXhfY2hhbmdlID0gbGluZXM7CiAJaWYgKHBhdGNoLT5vbGRfbmFtZSkgewogCQlpbnQgbGVuID0gcXVvdGVfY19zdHlsZShwYXRjaC0+b2xkX25hbWUsIE5VTEwsIE5VTEwsIDApOwogCQlpZiAoIWxlbikKIAkJCWxlbiA9IHN0cmxlbihwYXRjaC0+b2xkX25hbWUpOwotCQlpZiAobGVuID4gbWF4X2xlbikKLQkJCW1heF9sZW4gPSBsZW47CisJCWlmIChsZW4gPiBzdGF0ZS0+bWF4X2xlbikKKwkJCXN0YXRlLT5tYXhfbGVuID0gbGVuOwogCX0KIAlpZiAocGF0Y2gtPm5ld19uYW1lKSB7CiAJCWludCBsZW4gPSBxdW90ZV9jX3N0eWxlKHBhdGNoLT5uZXdfbmFtZSwgTlVMTCwgTlVMTCwgMCk7CiAJCWlmICghbGVuKQogCQkJbGVuID0gc3RybGVuKHBhdGNoLT5uZXdfbmFtZSk7Ci0JCWlmIChsZW4gPiBtYXhfbGVuKQotCQkJbWF4X2xlbiA9IGxlbjsKKwkJaWYgKGxlbiA+IHN0YXRlLT5tYXhfbGVuKQorCQkJc3RhdGUtPm1heF9sZW4gPSBsZW47CiAJfQogfQogCi1zdGF0aWMgdm9pZCByZW1vdmVfZmlsZShzdHJ1Y3QgcGF0Y2ggKnBhdGNoLCBpbnQgcm1kaXJfZW1wdHkpCitzdGF0aWMgdm9pZCByZW1vdmVfZmlsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoLCBpbnQgcm1kaXJfZW1wdHkpCiB7Ci0JaWYgKHVwZGF0ZV9pbmRleCkgeworCWlmIChzdGF0ZS0+dXBkYXRlX2luZGV4KSB7CiAJCWlmIChyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGNoLT5vbGRfbmFtZSkgPCAwKQogCQkJZGllKF8oInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIpLCBwYXRjaC0+b2xkX25hbWUpOwogCX0KLQlpZiAoIWNhY2hlZCkgeworCWlmICghc3RhdGUtPmNhY2hlZCkgewogCQlpZiAoIXJlbW92ZV9vcl93YXJuKHBhdGNoLT5vbGRfbW9kZSwgcGF0Y2gtPm9sZF9uYW1lKSAmJiBybWRpcl9lbXB0eSkgewogCQkJcmVtb3ZlX3BhdGgocGF0Y2gtPm9sZF9uYW1lKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgYWRkX2luZGV4X2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbW9kZSwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgdm9pZCBhZGRfaW5kZXhfZmlsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIHVuc2lnbmVkIG1vZGUsCisJCQkgICB2b2lkICpidWYsCisJCQkgICB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJc3RydWN0IHN0YXQgc3Q7CiAJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKIAlpbnQgbmFtZWxlbiA9IHN0cmxlbihwYXRoKTsKIAl1bnNpZ25lZCBjZV9zaXplID0gY2FjaGVfZW50cnlfc2l6ZShuYW1lbGVuKTsKIAotCWlmICghdXBkYXRlX2luZGV4KQorCWlmICghc3RhdGUtPnVwZGF0ZV9pbmRleCkKIAkJcmV0dXJuOwogCiAJY2UgPSB4Y2FsbG9jKDEsIGNlX3NpemUpOwpAQCAtNDA3NCw3ICs0MjE0LDcgQEAKIAkJICAgIGdldF9zaGExX2hleChzLCBjZS0+c2hhMSkpCiAJCQlkaWUoXygiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIiksIHBhdGgpOwogCX0gZWxzZSB7Ci0JCWlmICghY2FjaGVkKSB7CisJCWlmICghc3RhdGUtPmNhY2hlZCkgewogCQkJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKQogCQkJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIpLAogCQkJCQkgIHBhdGgpOwpAQCAtNDEyNiw5ICs0MjY2LDEzIEBACiAgKiB3aGljaCBpcyB0cnVlIDk5JSBvZiB0aGUgdGltZSBhbnl3YXkuIElmIHRoZXkgZG9uJ3QsCiAgKiB3ZSBjcmVhdGUgdGhlbSBhbmQgdHJ5IGFnYWluLgogICovCi1zdGF0aWMgdm9pZCBjcmVhdGVfb25lX2ZpbGUoY2hhciAqcGF0aCwgdW5zaWduZWQgbW9kZSwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgdm9pZCBjcmVhdGVfb25lX2ZpbGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICBjaGFyICpwYXRoLAorCQkJICAgIHVuc2lnbmVkIG1vZGUsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlpZiAoY2FjaGVkKQorCWlmIChzdGF0ZS0+Y2FjaGVkKQogCQlyZXR1cm47CiAJaWYgKCF0cnlfY3JlYXRlX2ZpbGUocGF0aCwgbW9kZSwgYnVmLCBzaXplKSkKIAkJcmV0dXJuOwpAQCAtNDE2OSwxMyArNDMxMywxNCBAQAogCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iKSwgcGF0aCwgbW9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9jb25mbGljdGVkX3N0YWdlc19maWxlKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCitzdGF0aWMgdm9pZCBhZGRfY29uZmxpY3RlZF9zdGFnZXNfZmlsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQogewogCWludCBzdGFnZSwgbmFtZWxlbjsKIAl1bnNpZ25lZCBjZV9zaXplLCBtb2RlOwogCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CiAKLQlpZiAoIXVwZGF0ZV9pbmRleCkKKwlpZiAoIXN0YXRlLT51cGRhdGVfaW5kZXgpCiAJCXJldHVybjsKIAluYW1lbGVuID0gc3RybGVuKHBhdGNoLT5uZXdfbmFtZSk7CiAJY2Vfc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobmFtZWxlbik7CkBAIC00MTk2LDcgKzQzNDEsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgY3JlYXRlX2ZpbGUoc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyB2b2lkIGNyZWF0ZV9maWxlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJY2hhciAqcGF0aCA9IHBhdGNoLT5uZXdfbmFtZTsKIAl1bnNpZ25lZCBtb2RlID0gcGF0Y2gtPm5ld19tb2RlOwpAQCAtNDIwNSwyNSArNDM1MCwyNyBAQAogCiAJaWYgKCFtb2RlKQogCQltb2RlID0gU19JRlJFRyB8IDA2NDQ7Ci0JY3JlYXRlX29uZV9maWxlKHBhdGgsIG1vZGUsIGJ1Ziwgc2l6ZSk7CisJY3JlYXRlX29uZV9maWxlKHN0YXRlLCBwYXRoLCBtb2RlLCBidWYsIHNpemUpOwogCiAJaWYgKHBhdGNoLT5jb25mbGljdGVkX3RocmVld2F5KQotCQlhZGRfY29uZmxpY3RlZF9zdGFnZXNfZmlsZShwYXRjaCk7CisJCWFkZF9jb25mbGljdGVkX3N0YWdlc19maWxlKHN0YXRlLCBwYXRjaCk7CiAJZWxzZQotCQlhZGRfaW5kZXhfZmlsZShwYXRoLCBtb2RlLCBidWYsIHNpemUpOworCQlhZGRfaW5kZXhfZmlsZShzdGF0ZSwgcGF0aCwgbW9kZSwgYnVmLCBzaXplKTsKIH0KIAogLyogcGhhc2UgemVybyBpcyB0byByZW1vdmUsIHBoYXNlIG9uZSBpcyB0byBjcmVhdGUgKi8KLXN0YXRpYyB2b2lkIHdyaXRlX291dF9vbmVfcmVzdWx0KHN0cnVjdCBwYXRjaCAqcGF0Y2gsIGludCBwaGFzZSkKK3N0YXRpYyB2b2lkIHdyaXRlX291dF9vbmVfcmVzdWx0KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkJIHN0cnVjdCBwYXRjaCAqcGF0Y2gsCisJCQkJIGludCBwaGFzZSkKIHsKIAlpZiAocGF0Y2gtPmlzX2RlbGV0ZSA+IDApIHsKIAkJaWYgKHBoYXNlID09IDApCi0JCQlyZW1vdmVfZmlsZShwYXRjaCwgMSk7CisJCQlyZW1vdmVfZmlsZShzdGF0ZSwgcGF0Y2gsIDEpOwogCQlyZXR1cm47CiAJfQogCWlmIChwYXRjaC0+aXNfbmV3ID4gMCB8fCBwYXRjaC0+aXNfY29weSkgewogCQlpZiAocGhhc2UgPT0gMSkKLQkJCWNyZWF0ZV9maWxlKHBhdGNoKTsKKwkJCWNyZWF0ZV9maWxlKHN0YXRlLCBwYXRjaCk7CiAJCXJldHVybjsKIAl9CiAJLyoKQEAgLTQyMzEsMTIgKzQzNzgsMTIgQEAKIAkgKiB0aGluZzogcmVtb3ZlIHRoZSBvbGQsIHdyaXRlIHRoZSBuZXcKIAkgKi8KIAlpZiAocGhhc2UgPT0gMCkKLQkJcmVtb3ZlX2ZpbGUocGF0Y2gsIHBhdGNoLT5pc19yZW5hbWUpOworCQlyZW1vdmVfZmlsZShzdGF0ZSwgcGF0Y2gsIHBhdGNoLT5pc19yZW5hbWUpOwogCWlmIChwaGFzZSA9PSAxKQotCQljcmVhdGVfZmlsZShwYXRjaCk7CisJCWNyZWF0ZV9maWxlKHN0YXRlLCBwYXRjaCk7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfb3V0X29uZV9yZWplY3Qoc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyBpbnQgd3JpdGVfb3V0X29uZV9yZWplY3Qoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAlGSUxFICpyZWo7CiAJY2hhciBuYW1lYnVmW1BBVEhfTUFYXTsKQEAgLTQyNTEsNyArNDM5OCw3IEBACiAJfQogCiAJaWYgKCFjbnQpIHsKLQkJaWYgKGFwcGx5X3ZlcmJvc2VseSkKKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NlbHkpCiAJCQlzYXlfcGF0Y2hfbmFtZShzdGRlcnIsCiAJCQkJICAgICAgIF8oIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iKSwgcGF0Y2gpOwogCQlyZXR1cm4gMDsKQEAgLTQzMDcsNyArNDQ1NCw3IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX291dF9yZXN1bHRzKHN0cnVjdCBwYXRjaCAqbGlzdCkKK3N0YXRpYyBpbnQgd3JpdGVfb3V0X3Jlc3VsdHMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpsaXN0KQogewogCWludCBwaGFzZTsKIAlpbnQgZXJycyA9IDA7CkBAIC00MzIwLDkgKzQ0NjcsOSBAQAogCQkJaWYgKGwtPnJlamVjdGVkKQogCQkJCWVycnMgPSAxOwogCQkJZWxzZSB7Ci0JCQkJd3JpdGVfb3V0X29uZV9yZXN1bHQobCwgcGhhc2UpOworCQkJCXdyaXRlX291dF9vbmVfcmVzdWx0KHN0YXRlLCBsLCBwaGFzZSk7CiAJCQkJaWYgKHBoYXNlID09IDEpIHsKLQkJCQkJaWYgKHdyaXRlX291dF9vbmVfcmVqZWN0KGwpKQorCQkJCQlpZiAod3JpdGVfb3V0X29uZV9yZWplY3Qoc3RhdGUsIGwpKQogCQkJCQkJZXJycyA9IDE7CiAJCQkJCWlmIChsLT5jb25mbGljdGVkX3RocmVld2F5KSB7CiAJCQkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmNwYXRoLCBsLT5uZXdfbmFtZSk7CkBAIC00MzUzLDE0ICs0NTAwLDE3IEBACiAjZGVmaW5lIElOQUNDVVJBVEVfRU9GCSgxPDwwKQogI2RlZmluZSBSRUNPVU5UCQkoMTw8MSkKIAotc3RhdGljIGludCBhcHBseV9wYXRjaChpbnQgZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgb3B0aW9ucykKK3N0YXRpYyBpbnQgYXBwbHlfcGF0Y2goc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJICAgICAgIGludCBmZCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkgICAgICAgaW50IG9wdGlvbnMpCiB7CiAJc2l6ZV90IG9mZnNldDsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOyAvKiBvd25zIHRoZSBwYXRjaCB0ZXh0ICovCiAJc3RydWN0IHBhdGNoICpsaXN0ID0gTlVMTCwgKipsaXN0cCA9ICZsaXN0OwogCWludCBza2lwcGVkX3BhdGNoID0gMDsKIAotCXBhdGNoX2lucHV0X2ZpbGUgPSBmaWxlbmFtZTsKKwlzdGF0ZS0+cGF0Y2hfaW5wdXRfZmlsZSA9IGZpbGVuYW1lOwogCXJlYWRfcGF0Y2hfZmlsZSgmYnVmLCBmZCk7CiAJb2Zmc2V0ID0gMDsKIAl3aGlsZSAob2Zmc2V0IDwgYnVmLmxlbikgewpAQCAtNDM3MCwyMCArNDUyMCwyMCBAQAogCQlwYXRjaCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpwYXRjaCkpOwogCQlwYXRjaC0+aW5hY2N1cmF0ZV9lb2YgPSAhIShvcHRpb25zICYgSU5BQ0NVUkFURV9FT0YpOwogCQlwYXRjaC0+cmVjb3VudCA9ICAhIShvcHRpb25zICYgUkVDT1VOVCk7Ci0JCW5yID0gcGFyc2VfY2h1bmsoYnVmLmJ1ZiArIG9mZnNldCwgYnVmLmxlbiAtIG9mZnNldCwgcGF0Y2gpOworCQluciA9IHBhcnNlX2NodW5rKHN0YXRlLCBidWYuYnVmICsgb2Zmc2V0LCBidWYubGVuIC0gb2Zmc2V0LCBwYXRjaCk7CiAJCWlmIChuciA8IDApIHsKIAkJCWZyZWVfcGF0Y2gocGF0Y2gpOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGFwcGx5X2luX3JldmVyc2UpCisJCWlmIChzdGF0ZS0+YXBwbHlfaW5fcmV2ZXJzZSkKIAkJCXJldmVyc2VfcGF0Y2hlcyhwYXRjaCk7Ci0JCWlmICh1c2VfcGF0Y2gocGF0Y2gpKSB7Ci0JCQlwYXRjaF9zdGF0cyhwYXRjaCk7CisJCWlmICh1c2VfcGF0Y2goc3RhdGUsIHBhdGNoKSkgeworCQkJcGF0Y2hfc3RhdHMoc3RhdGUsIHBhdGNoKTsKIAkJCSpsaXN0cCA9IHBhdGNoOwogCQkJbGlzdHAgPSAmcGF0Y2gtPm5leHQ7CiAJCX0KIAkJZWxzZSB7Ci0JCQlpZiAoYXBwbHlfdmVyYm9zZWx5KQorCQkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NlbHkpCiAJCQkJc2F5X3BhdGNoX25hbWUoc3RkZXJyLCBfKCJTa2lwcGVkIHBhdGNoICclcycuIiksIHBhdGNoKTsKIAkJCWZyZWVfcGF0Y2gocGF0Y2gpOwogCQkJc2tpcHBlZF9wYXRjaCsrOwpAQCAtNDM5NCw0NSArNDU0NCw0NSBAQAogCWlmICghbGlzdCAmJiAhc2tpcHBlZF9wYXRjaCkKIAkJZGllKF8oInVucmVjb2duaXplZCBpbnB1dCIpKTsKIAotCWlmICh3aGl0ZXNwYWNlX2Vycm9yICYmICh3c19lcnJvcl9hY3Rpb24gPT0gZGllX29uX3dzX2Vycm9yKSkKLQkJYXBwbHkgPSAwOworCWlmIChzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvciAmJiAoc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9PSBkaWVfb25fd3NfZXJyb3IpKQorCQlzdGF0ZS0+YXBwbHkgPSAwOwogCi0JdXBkYXRlX2luZGV4ID0gY2hlY2tfaW5kZXggJiYgYXBwbHk7Ci0JaWYgKHVwZGF0ZV9pbmRleCAmJiBuZXdmZCA8IDApCi0JCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisJc3RhdGUtPnVwZGF0ZV9pbmRleCA9IHN0YXRlLT5jaGVja19pbmRleCAmJiBzdGF0ZS0+YXBwbHk7CisJaWYgKHN0YXRlLT51cGRhdGVfaW5kZXggJiYgc3RhdGUtPm5ld2ZkIDwgMCkKKwkJc3RhdGUtPm5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoc3RhdGUtPmxvY2tfZmlsZSwgMSk7CiAKLQlpZiAoY2hlY2tfaW5kZXgpIHsKKwlpZiAoc3RhdGUtPmNoZWNrX2luZGV4KSB7CiAJCWlmIChyZWFkX2NhY2hlKCkgPCAwKQogCQkJZGllKF8oInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiKSk7CiAJfQogCi0JaWYgKChjaGVjayB8fCBhcHBseSkgJiYKLQkgICAgY2hlY2tfcGF0Y2hfbGlzdChsaXN0KSA8IDAgJiYKLQkgICAgIWFwcGx5X3dpdGhfcmVqZWN0KQorCWlmICgoc3RhdGUtPmNoZWNrIHx8IHN0YXRlLT5hcHBseSkgJiYKKwkgICAgY2hlY2tfcGF0Y2hfbGlzdChzdGF0ZSwgbGlzdCkgPCAwICYmCisJICAgICFzdGF0ZS0+YXBwbHlfd2l0aF9yZWplY3QpCiAJCWV4aXQoMSk7CiAKLQlpZiAoYXBwbHkgJiYgd3JpdGVfb3V0X3Jlc3VsdHMobGlzdCkpIHsKLQkJaWYgKGFwcGx5X3dpdGhfcmVqZWN0KQorCWlmIChzdGF0ZS0+YXBwbHkgJiYgd3JpdGVfb3V0X3Jlc3VsdHMoc3RhdGUsIGxpc3QpKSB7CisJCWlmIChzdGF0ZS0+YXBwbHlfd2l0aF9yZWplY3QpCiAJCQlleGl0KDEpOwogCQkvKiB3aXRoIC0tM3dheSwgd2Ugc3RpbGwgbmVlZCB0byB3cml0ZSB0aGUgaW5kZXggb3V0ICovCiAJCXJldHVybiAxOwogCX0KIAotCWlmIChmYWtlX2FuY2VzdG9yKQotCQlidWlsZF9mYWtlX2FuY2VzdG9yKGxpc3QsIGZha2VfYW5jZXN0b3IpOworCWlmIChzdGF0ZS0+ZmFrZV9hbmNlc3RvcikKKwkJYnVpbGRfZmFrZV9hbmNlc3RvcihsaXN0LCBzdGF0ZS0+ZmFrZV9hbmNlc3Rvcik7CiAKLQlpZiAoZGlmZnN0YXQpCi0JCXN0YXRfcGF0Y2hfbGlzdChsaXN0KTsKKwlpZiAoc3RhdGUtPmRpZmZzdGF0KQorCQlzdGF0X3BhdGNoX2xpc3Qoc3RhdGUsIGxpc3QpOwogCi0JaWYgKG51bXN0YXQpCi0JCW51bXN0YXRfcGF0Y2hfbGlzdChsaXN0KTsKKwlpZiAoc3RhdGUtPm51bXN0YXQpCisJCW51bXN0YXRfcGF0Y2hfbGlzdChzdGF0ZSwgbGlzdCk7CiAKLQlpZiAoc3VtbWFyeSkKKwlpZiAoc3RhdGUtPnN1bW1hcnkpCiAJCXN1bW1hcnlfcGF0Y2hfbGlzdChsaXN0KTsKIAogCWZyZWVfcGF0Y2hfbGlzdChsaXN0KTsKIAlzdHJidWZfcmVsZWFzZSgmYnVmKTsKLQlzdHJpbmdfbGlzdF9jbGVhcigmZm5fdGFibGUsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZS0+Zm5fdGFibGUsIDApOwogCXJldHVybiAwOwogfQogCkBAIC00NDQ2LDIyMCArNDU5NiwyODQgQEAKIHN0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2V4Y2x1ZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAogCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQogewotCWFkZF9uYW1lX2xpbWl0KGFyZywgMSk7CisJc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSA9IG9wdC0+dmFsdWU7CisJYWRkX25hbWVfbGltaXQoc3RhdGUsIGFyZywgMSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2luY2x1ZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAogCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQogewotCWFkZF9uYW1lX2xpbWl0KGFyZywgMCk7Ci0JaGFzX2luY2x1ZGUgPSAxOworCXN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUgPSBvcHQtPnZhbHVlOworCWFkZF9uYW1lX2xpbWl0KHN0YXRlLCBhcmcsIDApOworCXN0YXRlLT5oYXNfaW5jbHVkZSA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3AoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAotCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKKwkJCSAgY29uc3QgY2hhciAqYXJnLAorCQkJICBpbnQgdW5zZXQpCiB7Ci0JcF92YWx1ZSA9IGF0b2koYXJnKTsKLQlwX3ZhbHVlX2tub3duID0gMTsKKwlzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlID0gb3B0LT52YWx1ZTsKKwlzdGF0ZS0+cF92YWx1ZSA9IGF0b2koYXJnKTsKKwlzdGF0ZS0+cF92YWx1ZV9rbm93biA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3NwYWNlX2NoYW5nZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCi0JCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQorCQkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCiB7CisJc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSA9IG9wdC0+dmFsdWU7CiAJaWYgKHVuc2V0KQotCQl3c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7CisJCXN0YXRlLT53c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7CiAJZWxzZQotCQl3c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX2NoYW5nZTsKKwkJc3RhdGUtPndzX2lnbm9yZV9hY3Rpb24gPSBpZ25vcmVfd3NfY2hhbmdlOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV93aGl0ZXNwYWNlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKIAkJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKIHsKLQljb25zdCBjaGFyICoqd2hpdGVzcGFjZV9vcHRpb24gPSBvcHQtPnZhbHVlOwotCi0JKndoaXRlc3BhY2Vfb3B0aW9uID0gYXJnOwotCXBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKGFyZyk7CisJc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSA9IG9wdC0+dmFsdWU7CisJc3RhdGUtPndoaXRlc3BhY2Vfb3B0aW9uID0gYXJnOworCXBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKHN0YXRlLCBhcmcpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9kaXJlY3RvcnkoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAogCQkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCiB7Ci0Jc3RyYnVmX3Jlc2V0KCZyb290KTsKLQlzdHJidWZfYWRkc3RyKCZyb290LCBhcmcpOwotCXN0cmJ1Zl9jb21wbGV0ZSgmcm9vdCwgJy8nKTsKKwlzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlID0gb3B0LT52YWx1ZTsKKwlzdHJidWZfcmVzZXQoJnN0YXRlLT5yb290KTsKKwlzdHJidWZfYWRkc3RyKCZzdGF0ZS0+cm9vdCwgYXJnKTsKKwlzdHJidWZfY29tcGxldGUoJnN0YXRlLT5yb290LCAnLycpOwogCXJldHVybiAwOwogfQogCi1pbnQgY21kX2FwcGx5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4XykKK3N0YXRpYyB2b2lkIGluaXRfYXBwbHlfc3RhdGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGUpCit7CisJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJc3RhdGUtPnByZWZpeCA9IHByZWZpeDsKKwlzdGF0ZS0+cHJlZml4X2xlbmd0aCA9IHN0YXRlLT5wcmVmaXggPyBzdHJsZW4oc3RhdGUtPnByZWZpeCkgOiAwOworCXN0YXRlLT5sb2NrX2ZpbGUgPSBsb2NrX2ZpbGU7CisJc3RhdGUtPm5ld2ZkID0gLTE7CisJc3RhdGUtPmFwcGx5ID0gMTsKKwlzdGF0ZS0+bGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CisJc3RhdGUtPnBfdmFsdWUgPSAxOworCXN0YXRlLT5wX2NvbnRleHQgPSBVSU5UX01BWDsKKwlzdGF0ZS0+c3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9ycyA9IDU7CisJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IHdhcm5fb25fd3NfZXJyb3I7CisJc3RhdGUtPndzX2lnbm9yZV9hY3Rpb24gPSBpZ25vcmVfd3Nfbm9uZTsKKwlzdGF0ZS0+bGluZW5yID0gMTsKKwlzdHJpbmdfbGlzdF9pbml0KCZzdGF0ZS0+Zm5fdGFibGUsIDApOworCXN0cmluZ19saXN0X2luaXQoJnN0YXRlLT5saW1pdF9ieV9uYW1lLCAwKTsKKwlzdHJpbmdfbGlzdF9pbml0KCZzdGF0ZS0+c3ltbGlua19jaGFuZ2VzLCAwKTsKKwlzdHJidWZfaW5pdCgmc3RhdGUtPnJvb3QsIDApOworCisJZ2l0X2FwcGx5X2NvbmZpZygpOworCWlmIChhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UpCisJCXBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKHN0YXRlLCBhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UpOworCWlmIChhcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2UpCisJCXBhcnNlX2lnbm9yZXdoaXRlc3BhY2Vfb3B0aW9uKHN0YXRlLCBhcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2UpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9hcHBseV9zdGF0ZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlKQoreworCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZS0+bGltaXRfYnlfbmFtZSwgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlLT5zeW1saW5rX2NoYW5nZXMsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZzdGF0ZS0+cm9vdCk7CisKKwkvKiAmc3RhdGUtPmZuX3RhYmxlIGlzIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhcHBseV9wYXRjaCgpICovCit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2FwcGx5X3N0YXRlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGludCBmb3JjZV9hcHBseSkKK3sKKwlpbnQgaXNfbm90X2dpdGRpciA9ICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeTsKKworCWlmIChzdGF0ZS0+YXBwbHlfd2l0aF9yZWplY3QgJiYgc3RhdGUtPnRocmVld2F5KQorCQlkaWUoIi0tcmVqZWN0IGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIik7CisJaWYgKHN0YXRlLT5jYWNoZWQgJiYgc3RhdGUtPnRocmVld2F5KQorCQlkaWUoIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIik7CisJaWYgKHN0YXRlLT50aHJlZXdheSkgeworCQlpZiAoaXNfbm90X2dpdGRpcikKKwkJCWRpZShfKCItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiKSk7CisJCXN0YXRlLT5jaGVja19pbmRleCA9IDE7CisJfQorCWlmIChzdGF0ZS0+YXBwbHlfd2l0aF9yZWplY3QpCisJCXN0YXRlLT5hcHBseSA9IHN0YXRlLT5hcHBseV92ZXJib3NlbHkgPSAxOworCWlmICghZm9yY2VfYXBwbHkgJiYgKHN0YXRlLT5kaWZmc3RhdCB8fCBzdGF0ZS0+bnVtc3RhdCB8fCBzdGF0ZS0+c3VtbWFyeSB8fCBzdGF0ZS0+Y2hlY2sgfHwgc3RhdGUtPmZha2VfYW5jZXN0b3IpKQorCQlzdGF0ZS0+YXBwbHkgPSAwOworCWlmIChzdGF0ZS0+Y2hlY2tfaW5kZXggJiYgaXNfbm90X2dpdGRpcikKKwkJZGllKF8oIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiKSk7CisJaWYgKHN0YXRlLT5jYWNoZWQpIHsKKwkJaWYgKGlzX25vdF9naXRkaXIpCisJCQlkaWUoXygiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiKSk7CisJCXN0YXRlLT5jaGVja19pbmRleCA9IDE7CisJfQorCWlmIChzdGF0ZS0+Y2hlY2tfaW5kZXgpCisJCXN0YXRlLT51bnNhZmVfcGF0aHMgPSAwOworCWlmICghc3RhdGUtPmxvY2tfZmlsZSkKKwkJZGllKCJCVUc6IHN0YXRlLT5sb2NrX2ZpbGUgc2hvdWxkIG5vdCBiZSBOVUxMIik7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfYWxsX3BhdGNoZXMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgaW50IGFyZ2MsCisJCQkgICAgIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgICBpbnQgb3B0aW9ucykKIHsKIAlpbnQgaTsKIAlpbnQgZXJycyA9IDA7Ci0JaW50IGlzX25vdF9naXRkaXIgPSAhc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnk7Ci0JaW50IGZvcmNlX2FwcGx5ID0gMDsKLQotCWNvbnN0IGNoYXIgKndoaXRlc3BhY2Vfb3B0aW9uID0gTlVMTDsKLQotCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9hcHBseV9vcHRpb25zW10gPSB7Ci0JCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiZXhjbHVkZSIsIE5VTEwsIE5fKCJwYXRoIiksCi0JCQlOXygiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIpLAotCQkJMCwgb3B0aW9uX3BhcnNlX2V4Y2x1ZGUgfSwKLQkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpbmNsdWRlIiwgTlVMTCwgTl8oInBhdGgiKSwKLQkJCU5fKCJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIiksCi0JCQkwLCBvcHRpb25fcGFyc2VfaW5jbHVkZSB9LAotCQl7IE9QVElPTl9DQUxMQkFDSywgJ3AnLCBOVUxMLCBOVUxMLCBOXygibnVtIiksCi0JCQlOXygicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiKSwKLQkJCTAsIG9wdGlvbl9wYXJzZV9wIH0sCi0JCU9QVF9CT09MKDAsICJuby1hZGQiLCAmbm9fYWRkLAotCQkJTl8oImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giKSksCi0JCU9QVF9CT09MKDAsICJzdGF0IiwgJmRpZmZzdGF0LAotCQkJTl8oImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIpKSwKLQkJT1BUX05PT1BfTk9BUkcoMCwgImFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCIpLAotCQlPUFRfTk9PUF9OT0FSRygwLCAiYmluYXJ5IiksCi0JCU9QVF9CT09MKDAsICJudW1zdGF0IiwgJm51bXN0YXQsCi0JCQlOXygic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIpKSwKLQkJT1BUX0JPT0woMCwgInN1bW1hcnkiLCAmc3VtbWFyeSwKLQkJCU5fKCJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IikpLAotCQlPUFRfQk9PTCgwLCAiY2hlY2siLCAmY2hlY2ssCi0JCQlOXygiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIpKSwKLQkJT1BUX0JPT0woMCwgImluZGV4IiwgJmNoZWNrX2luZGV4LAotCQkJTl8oIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIpKSwKLQkJT1BUX0JPT0woMCwgImNhY2hlZCIsICZjYWNoZWQsCi0JCQlOXygiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiKSksCi0JCU9QVF9CT09MKDAsICJ1bnNhZmUtcGF0aHMiLCAmdW5zYWZlX3BhdGhzLAotCQkJTl8oImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiKSksCi0JCU9QVF9CT09MKDAsICJhcHBseSIsICZmb3JjZV9hcHBseSwKLQkJCU5fKCJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIpKSwKLQkJT1BUX0JPT0woJzMnLCAiM3dheSIsICZ0aHJlZXdheSwKLQkJCSBOXyggImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiKSksCi0JCU9QVF9GSUxFTkFNRSgwLCAiYnVpbGQtZmFrZS1hbmNlc3RvciIsICZmYWtlX2FuY2VzdG9yLAotCQkJTl8oImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIikpLAotCQkvKiBUaGluayB0d2ljZSBiZWZvcmUgYWRkaW5nICItLW51bCIgc3lub255bSB0byB0aGlzICovCi0JCU9QVF9TRVRfSU5UKCd6JywgTlVMTCwgJmxpbmVfdGVybWluYXRpb24sCi0JCQlOXygicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiKSwgJ1wwJyksCi0JCU9QVF9JTlRFR0VSKCdDJywgTlVMTCwgJnBfY29udGV4dCwKLQkJCQlOXygiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIikpLAotCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgIndoaXRlc3BhY2UiLCAmd2hpdGVzcGFjZV9vcHRpb24sIE5fKCJhY3Rpb24iKSwKLQkJCU5fKCJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIpLAotCQkJMCwgb3B0aW9uX3BhcnNlX3doaXRlc3BhY2UgfSwKLQkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpZ25vcmUtc3BhY2UtY2hhbmdlIiwgTlVMTCwgTlVMTCwKLQkJCU5fKCJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IiksCi0JCQlQQVJTRV9PUFRfTk9BUkcsIG9wdGlvbl9wYXJzZV9zcGFjZV9jaGFuZ2UgfSwKLQkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpZ25vcmUtd2hpdGVzcGFjZSIsIE5VTEwsIE5VTEwsCi0JCQlOXygiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIpLAotCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2Vfc3BhY2VfY2hhbmdlIH0sCi0JCU9QVF9CT09MKCdSJywgInJldmVyc2UiLCAmYXBwbHlfaW5fcmV2ZXJzZSwKLQkJCU5fKCJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIpKSwKLQkJT1BUX0JPT0woMCwgInVuaWRpZmYtemVybyIsICZ1bmlkaWZmX3plcm8sCi0JCQlOXygiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiKSksCi0JCU9QVF9CT09MKDAsICJyZWplY3QiLCAmYXBwbHlfd2l0aF9yZWplY3QsCi0JCQlOXygibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiKSksCi0JCU9QVF9CT09MKDAsICJhbGxvdy1vdmVybGFwIiwgJmFsbG93X292ZXJsYXAsCi0JCQlOXygiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiKSksCi0JCU9QVF9fVkVSQk9TRSgmYXBwbHlfdmVyYm9zZWx5LCBOXygiYmUgdmVyYm9zZSIpKSwKLQkJT1BUX0JJVCgwLCAiaW5hY2N1cmF0ZS1lb2YiLCAmb3B0aW9ucywKLQkJCU5fKCJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIpLAotCQkJSU5BQ0NVUkFURV9FT0YpLAotCQlPUFRfQklUKDAsICJyZWNvdW50IiwgJm9wdGlvbnMsCi0JCQlOXygiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIiksCi0JCQlSRUNPVU5UKSwKLQkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJkaXJlY3RvcnkiLCBOVUxMLCBOXygicm9vdCIpLAotCQkJTl8oInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiKSwKLQkJCTAsIG9wdGlvbl9wYXJzZV9kaXJlY3RvcnkgfSwKLQkJT1BUX0VORCgpCi0JfTsKLQotCXByZWZpeCA9IHByZWZpeF87Ci0JcHJlZml4X2xlbmd0aCA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKLQlnaXRfYXBwbHlfY29uZmlnKCk7Ci0JaWYgKGFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSkKLQkJcGFyc2Vfd2hpdGVzcGFjZV9vcHRpb24oYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlKTsKLQlpZiAoYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlKQotCQlwYXJzZV9pZ25vcmV3aGl0ZXNwYWNlX29wdGlvbihhcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2UpOwotCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2FwcGx5X29wdGlvbnMsCi0JCQlhcHBseV91c2FnZSwgMCk7Ci0KLQlpZiAoYXBwbHlfd2l0aF9yZWplY3QgJiYgdGhyZWV3YXkpCi0JCWRpZSgiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iKTsKLQlpZiAoY2FjaGVkICYmIHRocmVld2F5KQotCQlkaWUoIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIik7Ci0JaWYgKHRocmVld2F5KSB7Ci0JCWlmIChpc19ub3RfZ2l0ZGlyKQotCQkJZGllKF8oIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpKTsKLQkJY2hlY2tfaW5kZXggPSAxOwotCX0KLQlpZiAoYXBwbHlfd2l0aF9yZWplY3QpCi0JCWFwcGx5ID0gYXBwbHlfdmVyYm9zZWx5ID0gMTsKLQlpZiAoIWZvcmNlX2FwcGx5ICYmIChkaWZmc3RhdCB8fCBudW1zdGF0IHx8IHN1bW1hcnkgfHwgY2hlY2sgfHwgZmFrZV9hbmNlc3RvcikpCi0JCWFwcGx5ID0gMDsKLQlpZiAoY2hlY2tfaW5kZXggJiYgaXNfbm90X2dpdGRpcikKLQkJZGllKF8oIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiKSk7Ci0JaWYgKGNhY2hlZCkgewotCQlpZiAoaXNfbm90X2dpdGRpcikKLQkJCWRpZShfKCItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpKTsKLQkJY2hlY2tfaW5kZXggPSAxOwotCX0KLQlpZiAoY2hlY2tfaW5kZXgpCi0JCXVuc2FmZV9wYXRocyA9IDA7CisJaW50IHJlYWRfc3RkaW4gPSAxOwogCiAJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwogCQlpbnQgZmQ7CiAKIAkJaWYgKCFzdHJjbXAoYXJnLCAiLSIpKSB7Ci0JCQllcnJzIHw9IGFwcGx5X3BhdGNoKDAsICI8c3RkaW4+Iiwgb3B0aW9ucyk7CisJCQllcnJzIHw9IGFwcGx5X3BhdGNoKHN0YXRlLCAwLCAiPHN0ZGluPiIsIG9wdGlvbnMpOwogCQkJcmVhZF9zdGRpbiA9IDA7CiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmICgwIDwgcHJlZml4X2xlbmd0aCkKLQkJCWFyZyA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHByZWZpeF9sZW5ndGgsIGFyZyk7CisJCX0gZWxzZSBpZiAoMCA8IHN0YXRlLT5wcmVmaXhfbGVuZ3RoKQorCQkJYXJnID0gcHJlZml4X2ZpbGVuYW1lKHN0YXRlLT5wcmVmaXgsCisJCQkJCSAgICAgIHN0YXRlLT5wcmVmaXhfbGVuZ3RoLAorCQkJCQkgICAgICBhcmcpOwogCiAJCWZkID0gb3BlbihhcmcsIE9fUkRPTkxZKTsKIAkJaWYgKGZkIDwgMCkKIAkJCWRpZV9lcnJubyhfKCJjYW4ndCBvcGVuIHBhdGNoICclcyciKSwgYXJnKTsKIAkJcmVhZF9zdGRpbiA9IDA7Ci0JCXNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZSh3aGl0ZXNwYWNlX29wdGlvbik7Ci0JCWVycnMgfD0gYXBwbHlfcGF0Y2goZmQsIGFyZywgb3B0aW9ucyk7CisJCXNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZShzdGF0ZSk7CisJCWVycnMgfD0gYXBwbHlfcGF0Y2goc3RhdGUsIGZkLCBhcmcsIG9wdGlvbnMpOwogCQljbG9zZShmZCk7CiAJfQotCXNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZSh3aGl0ZXNwYWNlX29wdGlvbik7CisJc2V0X2RlZmF1bHRfd2hpdGVzcGFjZV9tb2RlKHN0YXRlKTsKIAlpZiAocmVhZF9zdGRpbikKLQkJZXJycyB8PSBhcHBseV9wYXRjaCgwLCAiPHN0ZGluPiIsIG9wdGlvbnMpOwotCWlmICh3aGl0ZXNwYWNlX2Vycm9yKSB7Ci0JCWlmIChzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzICYmCi0JCSAgICBzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzIDwgd2hpdGVzcGFjZV9lcnJvcikgeworCQllcnJzIHw9IGFwcGx5X3BhdGNoKHN0YXRlLCAwLCAiPHN0ZGluPiIsIG9wdGlvbnMpOworCisJaWYgKHN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yKSB7CisJCWlmIChzdGF0ZS0+c3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9ycyAmJgorCQkgICAgc3RhdGUtPnNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgPCBzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvcikgewogCQkJaW50IHNxdWVsY2hlZCA9Ci0JCQkJd2hpdGVzcGFjZV9lcnJvciAtIHNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnM7CisJCQkJc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IgLSBzdGF0ZS0+c3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9yczsKIAkJCXdhcm5pbmcoUV8oInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIiwKIAkJCQkgICAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIiwKIAkJCQkgICBzcXVlbGNoZWQpLAogCQkJCXNxdWVsY2hlZCk7CiAJCX0KLQkJaWYgKHdzX2Vycm9yX2FjdGlvbiA9PSBkaWVfb25fd3NfZXJyb3IpCisJCWlmIChzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID09IGRpZV9vbl93c19lcnJvcikKIAkJCWRpZShRXygiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIsCiAJCQkgICAgICAgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iLAotCQkJICAgICAgIHdoaXRlc3BhY2VfZXJyb3IpLAotCQkJICAgIHdoaXRlc3BhY2VfZXJyb3IpOwotCQlpZiAoYXBwbGllZF9hZnRlcl9maXhpbmdfd3MgJiYgYXBwbHkpCisJCQkgICAgICAgc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IpLAorCQkJICAgIHN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yKTsKKwkJaWYgKHN0YXRlLT5hcHBsaWVkX2FmdGVyX2ZpeGluZ193cyAmJiBzdGF0ZS0+YXBwbHkpCiAJCQl3YXJuaW5nKCIlZCBsaW5lJXMgYXBwbGllZCBhZnRlciIKIAkJCQkiIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iLAotCQkJCWFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzLAotCQkJCWFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzID09IDEgPyAiIiA6ICJzIik7Ci0JCWVsc2UgaWYgKHdoaXRlc3BhY2VfZXJyb3IpCisJCQkJc3RhdGUtPmFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzLAorCQkJCXN0YXRlLT5hcHBsaWVkX2FmdGVyX2ZpeGluZ193cyA9PSAxID8gIiIgOiAicyIpOworCQllbHNlIGlmIChzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvcikKIAkJCXdhcm5pbmcoUV8oIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iLAogCQkJCSAgICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIiwKLQkJCQkgICB3aGl0ZXNwYWNlX2Vycm9yKSwKLQkJCQl3aGl0ZXNwYWNlX2Vycm9yKTsKKwkJCQkgICBzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvciksCisJCQkJc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IpOwogCX0KIAotCWlmICh1cGRhdGVfaW5kZXgpIHsKLQkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJaWYgKHN0YXRlLT51cGRhdGVfaW5kZXgpIHsKKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCBzdGF0ZS0+bG9ja19maWxlLCBDT01NSVRfTE9DSykpCiAJCQlkaWUoXygiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCQlzdGF0ZS0+bmV3ZmQgPSAtMTsKIAl9CiAKIAlyZXR1cm4gISFlcnJzOwogfQorCitpbnQgY21kX2FwcGx5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBmb3JjZV9hcHBseSA9IDA7CisJaW50IG9wdGlvbnMgPSAwOworCWludCByZXQ7CisJc3RydWN0IGFwcGx5X3N0YXRlIHN0YXRlOworCisJc3RydWN0IG9wdGlvbiBidWlsdGluX2FwcGx5X29wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJleGNsdWRlIiwgJnN0YXRlLCBOXygicGF0aCIpLAorCQkJTl8oImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiKSwKKwkJCTAsIG9wdGlvbl9wYXJzZV9leGNsdWRlIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaW5jbHVkZSIsICZzdGF0ZSwgTl8oInBhdGgiKSwKKwkJCU5fKCJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIiksCisJCQkwLCBvcHRpb25fcGFyc2VfaW5jbHVkZSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ3AnLCBOVUxMLCAmc3RhdGUsIE5fKCJudW0iKSwKKwkJCU5fKCJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIpLAorCQkJMCwgb3B0aW9uX3BhcnNlX3AgfSwKKwkJT1BUX0JPT0woMCwgIm5vLWFkZCIsICZzdGF0ZS5ub19hZGQsCisJCQlOXygiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIpKSwKKwkJT1BUX0JPT0woMCwgInN0YXQiLCAmc3RhdGUuZGlmZnN0YXQsCisJCQlOXygiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IikpLAorCQlPUFRfTk9PUF9OT0FSRygwLCAiYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IiksCisJCU9QVF9OT09QX05PQVJHKDAsICJiaW5hcnkiKSwKKwkJT1BUX0JPT0woMCwgIm51bXN0YXQiLCAmc3RhdGUubnVtc3RhdCwKKwkJCU5fKCJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIikpLAorCQlPUFRfQk9PTCgwLCAic3VtbWFyeSIsICZzdGF0ZS5zdW1tYXJ5LAorCQkJTl8oImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiKSksCisJCU9QVF9CT09MKDAsICJjaGVjayIsICZzdGF0ZS5jaGVjaywKKwkJCU5fKCJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIikpLAorCQlPUFRfQk9PTCgwLCAiaW5kZXgiLCAmc3RhdGUuY2hlY2tfaW5kZXgsCisJCQlOXygibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IikpLAorCQlPUFRfQk9PTCgwLCAiY2FjaGVkIiwgJnN0YXRlLmNhY2hlZCwKKwkJCU5fKCJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIpKSwKKwkJT1BUX0JPT0woMCwgInVuc2FmZS1wYXRocyIsICZzdGF0ZS51bnNhZmVfcGF0aHMsCisJCQlOXygiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIpKSwKKwkJT1BUX0JPT0woMCwgImFwcGx5IiwgJmZvcmNlX2FwcGx5LAorCQkJTl8oImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIikpLAorCQlPUFRfQk9PTCgnMycsICIzd2F5IiwgJnN0YXRlLnRocmVld2F5LAorCQkJIE5fKCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIpKSwKKwkJT1BUX0ZJTEVOQU1FKDAsICJidWlsZC1mYWtlLWFuY2VzdG9yIiwgJnN0YXRlLmZha2VfYW5jZXN0b3IsCisJCQlOXygiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iKSksCisJCS8qIFRoaW5rIHR3aWNlIGJlZm9yZSBhZGRpbmcgIi0tbnVsIiBzeW5vbnltIHRvIHRoaXMgKi8KKwkJT1BUX1NFVF9JTlQoJ3onLCBOVUxMLCAmc3RhdGUubGluZV90ZXJtaW5hdGlvbiwKKwkJCU5fKCJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIpLCAnXDAnKSwKKwkJT1BUX0lOVEVHRVIoJ0MnLCBOVUxMLCAmc3RhdGUucF9jb250ZXh0LAorCQkJCU5fKCJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAid2hpdGVzcGFjZSIsICZzdGF0ZSwgTl8oImFjdGlvbiIpLAorCQkJTl8oImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIiksCisJCQkwLCBvcHRpb25fcGFyc2Vfd2hpdGVzcGFjZSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImlnbm9yZS1zcGFjZS1jaGFuZ2UiLCAmc3RhdGUsIE5VTEwsCisJCQlOXygiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2Vfc3BhY2VfY2hhbmdlIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaWdub3JlLXdoaXRlc3BhY2UiLCAmc3RhdGUsIE5VTEwsCisJCQlOXygiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2Vfc3BhY2VfY2hhbmdlIH0sCisJCU9QVF9CT09MKCdSJywgInJldmVyc2UiLCAmc3RhdGUuYXBwbHlfaW5fcmV2ZXJzZSwKKwkJCU5fKCJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIpKSwKKwkJT1BUX0JPT0woMCwgInVuaWRpZmYtemVybyIsICZzdGF0ZS51bmlkaWZmX3plcm8sCisJCQlOXygiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiKSksCisJCU9QVF9CT09MKDAsICJyZWplY3QiLCAmc3RhdGUuYXBwbHlfd2l0aF9yZWplY3QsCisJCQlOXygibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiKSksCisJCU9QVF9CT09MKDAsICJhbGxvdy1vdmVybGFwIiwgJnN0YXRlLmFsbG93X292ZXJsYXAsCisJCQlOXygiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiKSksCisJCU9QVF9fVkVSQk9TRSgmc3RhdGUuYXBwbHlfdmVyYm9zZWx5LCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX0JJVCgwLCAiaW5hY2N1cmF0ZS1lb2YiLCAmb3B0aW9ucywKKwkJCU5fKCJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIpLAorCQkJSU5BQ0NVUkFURV9FT0YpLAorCQlPUFRfQklUKDAsICJyZWNvdW50IiwgJm9wdGlvbnMsCisJCQlOXygiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIiksCisJCQlSRUNPVU5UKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJkaXJlY3RvcnkiLCAmc3RhdGUsIE5fKCJyb290IiksCisJCQlOXygicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIpLAorCQkJMCwgb3B0aW9uX3BhcnNlX2RpcmVjdG9yeSB9LAorCQlPUFRfRU5EKCkKKwl9OworCisJaW5pdF9hcHBseV9zdGF0ZSgmc3RhdGUsIHByZWZpeCwgJmxvY2tfZmlsZSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBzdGF0ZS5wcmVmaXgsIGJ1aWx0aW5fYXBwbHlfb3B0aW9ucywKKwkJCWFwcGx5X3VzYWdlLCAwKTsKKworCWNoZWNrX2FwcGx5X3N0YXRlKCZzdGF0ZSwgZm9yY2VfYXBwbHkpOworCisJcmV0ID0gYXBwbHlfYWxsX3BhdGNoZXMoJnN0YXRlLCBhcmdjLCBhcmd2LCBvcHRpb25zKTsKKworCWNsZWFyX2FwcGx5X3N0YXRlKCZzdGF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ibGFtZS5jIGIvYnVpbHRpbi9ibGFtZS5jCmluZGV4IDIxZjQyYjAuLjdlYzc4MjMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vYmxhbWUuYworKysgYi9idWlsdGluL2JsYW1lLmMKQEAgLTU2LDcgKzU2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZGF0ZV9tb2RlIGJsYW1lX2RhdGVfbW9kZSA9IHsgREFURV9JU084NjAxIH07CiBzdGF0aWMgc2l6ZV90IGJsYW1lX2RhdGVfd2lkdGg7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWFpbG1hcDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWFpbG1hcCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CiAKICNpZm5kZWYgREVCVUcKICNkZWZpbmUgREVCVUcgMApAQCAtMTM0LDcgKzEzNCw3IEBACiAJaW50IGJsYW1lZF9saW5lczsKIH07CiAKLXN0YXRpYyBpbnQgZGlmZl9odW5rcyhtbWZpbGVfdCAqZmlsZV9hLCBtbWZpbGVfdCAqZmlsZV9iLCBsb25nIGN0eGxlbiwKK3N0YXRpYyBpbnQgZGlmZl9odW5rcyhtbWZpbGVfdCAqZmlsZV9hLCBtbWZpbGVfdCAqZmlsZV9iLAogCQkgICAgICB4ZGxfZW1pdF9odW5rX2NvbnN1bWVfZnVuY190IGh1bmtfZnVuYywgdm9pZCAqY2JfZGF0YSkKIHsKIAl4cHBhcmFtX3QgeHBwID0gezB9OwpAQCAtMTQyLDcgKzE0Miw2IEBACiAJeGRlbWl0Y2JfdCBlY2IgPSB7TlVMTH07CiAKIAl4cHAuZmxhZ3MgPSB4ZGxfb3B0czsKLQl4ZWNmZy5jdHhsZW4gPSBjdHhsZW47CiAJeGVjZmcuaHVua19mdW5jID0gaHVua19mdW5jOwogCWVjYi5wcml2ID0gY2JfZGF0YTsKIAlyZXR1cm4geGRpX2RpZmYoZmlsZV9hLCBmaWxlX2IsICZ4cHAsICZ4ZWNmZywgJmVjYik7CkBAIC01OTksNyArNTk4LDcgQEAKIAkJCSAgICBwLT5zdGF0dXMpOwogCQljYXNlICdNJzoKIAkJCXBvcmlnaW4gPSBnZXRfb3JpZ2luKHNiLCBwYXJlbnQsIG9yaWdpbi0+cGF0aCk7Ci0JCQloYXNoY3B5KHBvcmlnaW4tPmJsb2Jfc2hhMSwgcC0+b25lLT5zaGExKTsKKwkJCWhhc2hjcHkocG9yaWdpbi0+YmxvYl9zaGExLCBwLT5vbmUtPm9pZC5oYXNoKTsKIAkJCXBvcmlnaW4tPm1vZGUgPSBwLT5vbmUtPm1vZGU7CiAJCQlicmVhazsKIAkJY2FzZSAnQSc6CkBAIC02MDksNyArNjA4LDcgQEAKIAkJfQogCX0KIAlkaWZmX2ZsdXNoKCZkaWZmX29wdHMpOwotCWZyZWVfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYyk7CisJY2xlYXJfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYyk7CiAJcmV0dXJuIHBvcmlnaW47CiB9CiAKQEAgLTY0NSwxMyArNjQ0LDEzIEBACiAJCWlmICgocC0+c3RhdHVzID09ICdSJyB8fCBwLT5zdGF0dXMgPT0gJ0MnKSAmJgogCQkgICAgIXN0cmNtcChwLT50d28tPnBhdGgsIG9yaWdpbi0+cGF0aCkpIHsKIAkJCXBvcmlnaW4gPSBnZXRfb3JpZ2luKHNiLCBwYXJlbnQsIHAtPm9uZS0+cGF0aCk7Ci0JCQloYXNoY3B5KHBvcmlnaW4tPmJsb2Jfc2hhMSwgcC0+b25lLT5zaGExKTsKKwkJCWhhc2hjcHkocG9yaWdpbi0+YmxvYl9zaGExLCBwLT5vbmUtPm9pZC5oYXNoKTsKIAkJCXBvcmlnaW4tPm1vZGUgPSBwLT5vbmUtPm1vZGU7CiAJCQlicmVhazsKIAkJfQogCX0KIAlkaWZmX2ZsdXNoKCZkaWZmX29wdHMpOwotCWZyZWVfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYyk7CisJY2xlYXJfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYyk7CiAJcmV0dXJuIHBvcmlnaW47CiB9CiAKQEAgLTk4MCw3ICs5NzksNyBAQAogCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCB0YXJnZXQsICZmaWxlX28pOwogCW51bV9nZXRfcGF0Y2grKzsKIAotCWlmIChkaWZmX2h1bmtzKCZmaWxlX3AsICZmaWxlX28sIDAsIGJsYW1lX2NodW5rX2NiLCAmZCkpCisJaWYgKGRpZmZfaHVua3MoJmZpbGVfcCwgJmZpbGVfbywgYmxhbWVfY2h1bmtfY2IsICZkKSkKIAkJZGllKCJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiAoJXMgLT4gJXMpIiwKIAkJICAgIG9pZF90b19oZXgoJnBhcmVudC0+Y29tbWl0LT5vYmplY3Qub2lkKSwKIAkJICAgIG9pZF90b19oZXgoJnRhcmdldC0+Y29tbWl0LT5vYmplY3Qub2lkKSk7CkBAIC0xMTI5LDcgKzExMjgsNyBAQAogCSAqIGZpbGVfcCBwYXJ0aWFsbHkgbWF5IG1hdGNoIHRoYXQgaW1hZ2UuCiAJICovCiAJbWVtc2V0KHNwbGl0LCAwLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5IFszXSkpOwotCWlmIChkaWZmX2h1bmtzKGZpbGVfcCwgJmZpbGVfbywgMSwgaGFuZGxlX3NwbGl0X2NiLCAmZCkpCisJaWYgKGRpZmZfaHVua3MoZmlsZV9wLCAmZmlsZV9vLCBoYW5kbGVfc3BsaXRfY2IsICZkKSkKIAkJZGllKCJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiAoJXMpIiwKIAkJICAgIG9pZF90b19oZXgoJnBhcmVudC0+Y29tbWl0LT5vYmplY3Qub2lkKSk7CiAJLyogcmVtYWluZGVyLCBpZiBhbnksIGFsbCBtYXRjaCB0aGUgcHJlaW1hZ2UgKi8KQEAgLTEzMDksNyArMTMwOCw3IEBACiAJCQkJY29udGludWU7CiAKIAkJCW5vcmlnaW4gPSBnZXRfb3JpZ2luKHNiLCBwYXJlbnQsIHAtPm9uZS0+cGF0aCk7Ci0JCQloYXNoY3B5KG5vcmlnaW4tPmJsb2Jfc2hhMSwgcC0+b25lLT5zaGExKTsKKwkJCWhhc2hjcHkobm9yaWdpbi0+YmxvYl9zaGExLCBwLT5vbmUtPm9pZC5oYXNoKTsKIAkJCW5vcmlnaW4tPm1vZGUgPSBwLT5vbmUtPm1vZGU7CiAJCQlmaWxsX29yaWdpbl9ibG9iKCZzYi0+cmV2cy0+ZGlmZm9wdCwgbm9yaWdpbiwgJmZpbGVfcCk7CiAJCQlpZiAoIWZpbGVfcC5wdHIpCkBAIC0xMzQzLDcgKzEzNDIsNyBAQAogCX0gd2hpbGUgKHVuYmxhbWVkKTsKIAl0YXJnZXQtPnN1c3BlY3RzID0gcmV2ZXJzZV9ibGFtZShsZWZ0b3ZlciwgTlVMTCk7CiAJZGlmZl9mbHVzaCgmZGlmZl9vcHRzKTsKLQlmcmVlX3BhdGhzcGVjKCZkaWZmX29wdHMucGF0aHNwZWMpOworCWNsZWFyX3BhdGhzcGVjKCZkaWZmX29wdHMucGF0aHNwZWMpOwogfQogCiAvKgpAQCAtMjIzMCw2ICsyMjI5LDcgQEAKIHN0YXRpYyB2b2lkIHZlcmlmeV93b3JraW5nX3RyZWVfcGF0aChzdHJ1Y3QgY29tbWl0ICp3b3JrX3RyZWUsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCWludCBwb3M7CiAKIAlmb3IgKHBhcmVudHMgPSB3b3JrX3RyZWUtPnBhcmVudHM7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9zaGExID0gcGFyZW50cy0+aXRlbS0+b2JqZWN0Lm9pZC5oYXNoOwpAQCAtMjI0MCw3ICsyMjQwLDE0IEBACiAJCSAgICBzaGExX29iamVjdF9pbmZvKGJsb2Jfc2hhMSwgTlVMTCkgPT0gT0JKX0JMT0IpCiAJCQlyZXR1cm47CiAJfQotCWRpZSgibm8gc3VjaCBwYXRoICclcycgaW4gSEVBRCIsIHBhdGgpOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKKwlpZiAocG9zID49IDApCisJCTsgLyogcGF0aCBpcyBpbiB0aGUgaW5kZXggKi8KKwllbHNlIGlmICghc3RyY21wKGFjdGl2ZV9jYWNoZVstMSAtIHBvc10tPm5hbWUsIHBhdGgpKQorCQk7IC8qIHBhdGggaXMgaW4gdGhlIGluZGV4LCB1bm1lcmdlZCAqLworCWVsc2UKKwkJZGllKCJubyBzdWNoIHBhdGggJyVzJyBpbiBIRUFEIiwgcGF0aCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKiphcHBlbmRfcGFyZW50KHN0cnVjdCBjb21taXRfbGlzdCAqKnRhaWwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCkBAIC0yNDI1LDggKzI0MzIsNyBAQAogCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0uaXRlbTsKIAkJaWYgKG9iai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQogCQkJY29udGludWU7Ci0JCXdoaWxlIChvYmotPnR5cGUgPT0gT0JKX1RBRykKLQkJCW9iaiA9IGRlcmVmX3RhZyhvYmosIE5VTEwsIDApOworCQlvYmogPSBkZXJlZl90YWcob2JqLCBOVUxMLCAwKTsKIAkJaWYgKG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUKQogCQkJZGllKCJOb24gY29tbWl0ICVzPyIsIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lKTsKIAkJaWYgKGZvdW5kKQpAQCAtMjQ2MSw4ICsyNDY3LDcgQEAKIAkJc3RydWN0IG9iamVjdCAqb2JqID0gcmV2cy0+cGVuZGluZy5vYmplY3RzW2ldLml0ZW07CiAJCWlmICghKG9iai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKIAkJCWNvbnRpbnVlOwotCQl3aGlsZSAob2JqLT50eXBlID09IE9CSl9UQUcpCi0JCQlvYmogPSBkZXJlZl90YWcob2JqLCBOVUxMLCAwKTsKKwkJb2JqID0gZGVyZWZfdGFnKG9iaiwgTlVMTCwgMCk7CiAJCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKIAkJCWRpZSgiTm9uIGNvbW1pdCAlcz8iLCByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSk7CiAJCWlmIChzYi0+ZmluYWwpCkBAIC0yNTIyLDEyICsyNTI3LDEyIEBACiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCXN0cnVjdCBjb21taXQgKmZpbmFsX2NvbW1pdCA9IE5VTEw7CiAKLQlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHJhbmdlX2xpc3Q7Ci0Jc3RhdGljIGludCBvdXRwdXRfb3B0aW9uID0gMCwgb3B0ID0gMDsKLQlzdGF0aWMgaW50IHNob3dfc3RhdHMgPSAwOwotCXN0YXRpYyBjb25zdCBjaGFyICpyZXZzX2ZpbGUgPSBOVUxMOwotCXN0YXRpYyBjb25zdCBjaGFyICpjb250ZW50c19mcm9tID0gTlVMTDsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJc3RydWN0IHN0cmluZ19saXN0IHJhbmdlX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCBvdXRwdXRfb3B0aW9uID0gMCwgb3B0ID0gMDsKKwlpbnQgc2hvd19zdGF0cyA9IDA7CisJY29uc3QgY2hhciAqcmV2c19maWxlID0gTlVMTDsKKwljb25zdCBjaGFyICpjb250ZW50c19mcm9tID0gTlVMTDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAkJT1BUX0JPT0woMCwgImluY3JlbWVudGFsIiwgJmluY3JlbWVudGFsLCBOXygiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIpKSwKIAkJT1BUX0JPT0woJ2InLCBOVUxMLCAmYmxhbmtfYm91bmRhcnksIE5fKCJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIikpLAogCQlPUFRfQk9PTCgwLCAicm9vdCIsICZzaG93X3Jvb3QsIE5fKCJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiKSksCkBAIC0yNjI4LDYgKzI2MzMsOSBAQAogCWNhc2UgREFURV9SQVc6CiAJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIjExNjEyOTg4MDQgLTA3MDAiKTsKIAkJYnJlYWs7CisJY2FzZSBEQVRFX1VOSVg6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIjExNjEyOTg4MDQiKTsKKwkJYnJlYWs7CiAJY2FzZSBEQVRFX1NIT1JUOgogCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCIyMDA2LTEwLTE5Iik7CiAJCWJyZWFrOwpAQCAtMjgwMCw3ICsyODA4LDcgQEAKIAlsbm8gPSBwcmVwYXJlX2xpbmVzKCZzYik7CiAKIAlpZiAobG5vICYmICFyYW5nZV9saXN0Lm5yKQotCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJhbmdlX2xpc3QsIHhzdHJkdXAoIjEiKSk7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmcmFuZ2VfbGlzdCwgIjEiKTsKIAogCWFuY2hvciA9IDE7CiAJcmFuZ2Vfc2V0X2luaXQoJnJhbmdlcywgcmFuZ2VfbGlzdC5ucik7CmRpZmYgLS1naXQgYS9idWlsdGluL2JyYW5jaC5jIGIvYnVpbHRpbi9icmFuY2guYwppbmRleCAyZWNkZTUzLi43ZGYwNTQzIDEwMDY0NAotLS0gYS9idWlsdGluL2JyYW5jaC5jCisrKyBiL2J1aWx0aW4vYnJhbmNoLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogCQkJZGllKF8oIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIpKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKywgc3RyYnVmX3JlbGVhc2UoJmJuYW1lKSkgewotCQljb25zdCBjaGFyICp0YXJnZXQ7CisJCWNoYXIgKnRhcmdldCA9IE5VTEw7CiAJCWludCBmbGFncyA9IDA7CiAKIAkJc3RyYnVmX2JyYW5jaG5hbWUoJmJuYW1lLCBhcmd2W2ldKTsKQEAgLTIzMSwxMSArMjMxLDExIEBACiAJCQl9CiAJCX0KIAotCQl0YXJnZXQgPSByZXNvbHZlX3JlZl91bnNhZmUobmFtZSwKLQkJCQkJICAgIFJFU09MVkVfUkVGX1JFQURJTkcKLQkJCQkJICAgIHwgUkVTT0xWRV9SRUZfTk9fUkVDVVJTRQotCQkJCQkgICAgfCBSRVNPTFZFX1JFRl9BTExPV19CQURfTkFNRSwKLQkJCQkJICAgIHNoYTEsICZmbGFncyk7CisJCXRhcmdldCA9IHJlc29sdmVfcmVmZHVwKG5hbWUsCisJCQkJCVJFU09MVkVfUkVGX1JFQURJTkcKKwkJCQkJfCBSRVNPTFZFX1JFRl9OT19SRUNVUlNFCisJCQkJCXwgUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUUsCisJCQkJCXNoYTEsICZmbGFncyk7CiAJCWlmICghdGFyZ2V0KSB7CiAJCQllcnJvcihyZW1vdGVfYnJhbmNoCiAJCQkgICAgICA/IF8oInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIikKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQkgICAgY2hlY2tfYnJhbmNoX2NvbW1pdChibmFtZS5idWYsIG5hbWUsIHNoYTEsIGhlYWRfcmV2LCBraW5kcywKIAkJCQkJZm9yY2UpKSB7CiAJCQlyZXQgPSAxOwotCQkJY29udGludWU7CisJCQlnb3RvIG5leHQ7CiAJCX0KIAogCQlpZiAoZGVsZXRlX3JlZihuYW1lLCBpc19udWxsX3NoYTEoc2hhMSkgPyBOVUxMIDogc2hhMSwKQEAgLTI1OCw3ICsyNTgsNyBAQAogCQkJICAgICAgOiBfKCJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIpLAogCQkJICAgICAgYm5hbWUuYnVmKTsKIAkJCXJldCA9IDE7Ci0JCQljb250aW51ZTsKKwkJCWdvdG8gbmV4dDsKIAkJfQogCQlpZiAoIXF1aWV0KSB7CiAJCQlwcmludGYocmVtb3RlX2JyYW5jaApAQCAtMjcwLDYgKzI3MCw5IEBACiAJCQkgICAgICAgOiBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKIAkJfQogCQlkZWxldGVfYnJhbmNoX2NvbmZpZyhibmFtZS5idWYpOworCisJbmV4dDoKKwkJZnJlZSh0YXJnZXQpOwogCX0KIAogCWZyZWUobmFtZSk7CkBAIC02MTQsMTQgKzYxNywxMSBAQAogCWlmICghYnVmLmxlbiB8fCBidWYuYnVmW2J1Zi5sZW4tMV0gIT0gJ1xuJykKIAkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOwogCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmYnVmLAotCQkgICAgIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgotCQkgICAgIiAgJXNcbiIKLQkJICAgICJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIsCisJCSAgICBfKCJQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKwkJICAgICAgIiAgJXNcbiIKKwkJICAgICAgIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIiksCiAJCSAgICBicmFuY2hfbmFtZSwgY29tbWVudF9saW5lX2NoYXIpOwotCWlmICh3cml0ZV9maWxlX2dlbnRseShnaXRfcGF0aChlZGl0X2Rlc2NyaXB0aW9uKSwgIiVzIiwgYnVmLmJ1ZikpIHsKLQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Ci0JCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRlbXBsYXRlIikpOwotCX0KKwl3cml0ZV9maWxlX2J1ZihnaXRfcGF0aChlZGl0X2Rlc2NyaXB0aW9uKSwgYnVmLmJ1ZiwgYnVmLmxlbik7CiAJc3RyYnVmX3Jlc2V0KCZidWYpOwogCWlmIChsYXVuY2hfZWRpdG9yKGdpdF9wYXRoKGVkaXRfZGVzY3JpcHRpb24pLCAmYnVmLCBOVUxMKSkgewogCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2F0LWZpbGUuYyBiL2J1aWx0aW4vY2F0LWZpbGUuYwppbmRleCA2MTgxMDNmLi4yZGZlNjI2IDEwMDY0NAotLS0gYS9idWlsdGluL2NhdC1maWxlLmMKKysrIGIvYnVpbHRpbi9jYXQtZmlsZS5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBkaXNrX3NpemU7CisJb2ZmX3QgZGlza19zaXplOwogCWNvbnN0IGNoYXIgKnJlc3Q7CiAJdW5zaWduZWQgY2hhciBkZWx0YV9iYXNlX3NoYTFbMjBdOwogCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkJaWYgKGRhdGEtPm1hcmtfcXVlcnkpCiAJCQlkYXRhLT5pbmZvLmRpc2tfc2l6ZXAgPSAmZGF0YS0+ZGlza19zaXplOwogCQllbHNlCi0JCQlzdHJidWZfYWRkZihzYiwgIiVsdSIsIGRhdGEtPmRpc2tfc2l6ZSk7CisJCQlzdHJidWZfYWRkZihzYiwgIiUiUFJJdU1BWCwgKHVpbnRtYXhfdClkYXRhLT5kaXNrX3NpemUpOwogCX0gZWxzZSBpZiAoaXNfYXRvbSgicmVzdCIsIGF0b20sIGxlbikpIHsKIAkJaWYgKGRhdGEtPm1hcmtfcXVlcnkpCiAJCQlkYXRhLT5zcGxpdF9vbl93aGl0ZXNwYWNlID0gMTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2hlY2tvdXQuYyBiL2J1aWx0aW4vY2hlY2tvdXQuYwppbmRleCAzMzk4YzYxLi40ODY2MTExIDEwMDY0NAotLS0gYS9idWlsdGluL2NoZWNrb3V0LmMKKysrIGIvYnVpbHRpbi9jaGVja291dC5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAogCWhvbGRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSwgMSk7CiAJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZCgmb3B0cy0+cGF0aHNwZWMpIDwgMCkKLQkJcmV0dXJuIGVycm9yKF8oImNvcnJ1cHQgaW5kZXggZmlsZSIpKTsKKwkJcmV0dXJuIGVycm9yKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKIAogCWlmIChvcHRzLT5zb3VyY2VfdHJlZSkKIAkJcmVhZF90cmVlX3NvbWUob3B0cy0+c291cmNlX3RyZWUsICZvcHRzLT5wYXRoc3BlYyk7CkBAIC00NzAsNyArNDcwLDcgQEAKIAogCWhvbGRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSwgMSk7CiAJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZChOVUxMKSA8IDApCi0JCXJldHVybiBlcnJvcihfKCJjb3JydXB0IGluZGV4IGZpbGUiKSk7CisJCXJldHVybiBlcnJvcihfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CiAKIAlyZXNvbHZlX3VuZG9fY2xlYXIoKTsKIAlpZiAob3B0cy0+Zm9yY2UpIHsKQEAgLTU0OCw3ICs1NDgsNyBAQAogCQkJICogZW50cmllcyBpbiB0aGUgaW5kZXguCiAJCQkgKi8KIAotCQkJYWRkX2ZpbGVzX3RvX2NhY2hlKE5VTEwsIE5VTEwsIDApOworCQkJYWRkX2ZpbGVzX3RvX2NhY2hlKE5VTEwsIE5VTEwsIDAsIDApOwogCQkJLyoKIAkJCSAqIE5FRURTV09SSzogY2Fycnlpbmcgb3ZlciBsb2NhbCBjaGFuZ2VzCiAJCQkgKiB3aGVuIGJyYW5jaGVzIGhhdmUgZGlmZmVyZW50IGVuZC1vZi1saW5lCkBAIC01NjcsMTAgKzU2NywxMyBAQAogCQkJby5hbmNlc3RvciA9IG9sZC0+bmFtZTsKIAkJCW8uYnJhbmNoMSA9IG5ldy0+bmFtZTsKIAkJCW8uYnJhbmNoMiA9ICJsb2NhbCI7Ci0JCQltZXJnZV90cmVlcygmbywgbmV3LT5jb21taXQtPnRyZWUsIHdvcmssCisJCQlyZXQgPSBtZXJnZV90cmVlcygmbywgbmV3LT5jb21taXQtPnRyZWUsIHdvcmssCiAJCQkJb2xkLT5jb21taXQtPnRyZWUsICZyZXN1bHQpOworCQkJaWYgKHJldCA8IDApCisJCQkJZXhpdCgxMjgpOwogCQkJcmV0ID0gcmVzZXRfdHJlZShuZXctPmNvbW1pdC0+dHJlZSwgb3B0cywgMCwKIAkJCQkJIHdyaXRlb3V0X2Vycm9yKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZvLm9idWYpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC03MDMsOCArNzA2LDcgQEAKIHN0YXRpYyB2b2lkIGRlc2NyaWJlX29uZV9vcnBoYW4oc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKIAlzdHJidWZfYWRkc3RyKHNiLCAiICAiKTsKLQlzdHJidWZfYWRkc3RyKHNiLAotCQlmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Qub2lkLmhhc2gsIERFRkFVTFRfQUJCUkVWKSk7CisJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHNiLCBjb21taXQtPm9iamVjdC5vaWQuaGFzaCwgREVGQVVMVF9BQkJSRVYpOwogCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKIAlpZiAoIXBhcnNlX2NvbW1pdChjb21taXQpKQogCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsIHNiKTsKQEAgLTExMzgsNyArMTE0MCw3IEBACiAJCU9QVF9TVFJJTkcoJ0InLCBOVUxMLCAmb3B0cy5uZXdfYnJhbmNoX2ZvcmNlLCBOXygiYnJhbmNoIiksCiAJCQkgICBOXygiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIpKSwKIAkJT1BUX0JPT0woJ2wnLCBOVUxMLCAmb3B0cy5uZXdfYnJhbmNoX2xvZywgTl8oImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giKSksCi0JCU9QVF9CT09MKDAsICJkZXRhY2giLCAmb3B0cy5mb3JjZV9kZXRhY2gsIE5fKCJkZXRhY2ggdGhlIEhFQUQgYXQgbmFtZWQgY29tbWl0IikpLAorCQlPUFRfQk9PTCgwLCAiZGV0YWNoIiwgJm9wdHMuZm9yY2VfZGV0YWNoLCBOXygiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IikpLAogCQlPUFRfU0VUX0lOVCgndCcsICJ0cmFjayIsICAmb3B0cy50cmFjaywgTl8oInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIiksCiAJCQlCUkFOQ0hfVFJBQ0tfRVhQTElDSVQpLAogCQlPUFRfU1RSSU5HKDAsICJvcnBoYW4iLCAmb3B0cy5uZXdfb3JwaGFuX2JyYW5jaCwgTl8oIm5ldy1icmFuY2giKSwgTl8oIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIpKSwKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2xvbmUuYyBiL2J1aWx0aW4vY2xvbmUuYwppbmRleCA1Zjg2N2U2Li5mMDQ0YThjIDEwMDY0NAotLS0gYS9idWlsdGluL2Nsb25lLmMKKysrIGIvYnVpbHRpbi9jbG9uZS5jCkBAIC00MCw3ICs0MCw3IEBACiAKIHN0YXRpYyBpbnQgb3B0aW9uX25vX2NoZWNrb3V0LCBvcHRpb25fYmFyZSwgb3B0aW9uX21pcnJvciwgb3B0aW9uX3NpbmdsZV9icmFuY2ggPSAtMTsKIHN0YXRpYyBpbnQgb3B0aW9uX2xvY2FsID0gLTEsIG9wdGlvbl9ub19oYXJkbGlua3MsIG9wdGlvbl9zaGFyZWQsIG9wdGlvbl9yZWN1cnNpdmU7Ci1zdGF0aWMgaW50IG9wdGlvbl9zaGFsbG93X3N1Ym1vZHVsZXMgPSAtMTsKK3N0YXRpYyBpbnQgb3B0aW9uX3NoYWxsb3dfc3VibW9kdWxlczsKIHN0YXRpYyBjaGFyICpvcHRpb25fdGVtcGxhdGUsICpvcHRpb25fZGVwdGg7CiBzdGF0aWMgY2hhciAqb3B0aW9uX29yaWdpbiA9IE5VTEw7CiBzdGF0aWMgY2hhciAqb3B0aW9uX2JyYW5jaCA9IE5VTEw7CkBAIC00OSw4ICs0OSw4IEBACiBzdGF0aWMgaW50IG9wdGlvbl92ZXJib3NpdHk7CiBzdGF0aWMgaW50IG9wdGlvbl9wcm9ncmVzcyA9IC0xOwogc3RhdGljIGVudW0gdHJhbnNwb3J0X2ZhbWlseSBmYW1pbHk7Ci1zdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9wdGlvbl9jb25maWc7Ci1zdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9wdGlvbl9yZWZlcmVuY2U7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9wdGlvbl9jb25maWcgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvcHRpb25fcmVmZXJlbmNlID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKIHN0YXRpYyBpbnQgb3B0aW9uX2Rpc3NvY2lhdGU7CiBzdGF0aWMgaW50IG1heF9qb2JzID0gLTE7CiAKQEAgLTYyNCwxMyArNjI0LDEzIEBACiAJY29uc3Qgc3RydWN0IHJlZiAqcm0gPSBtYXBwZWRfcmVmczsKIAogCWlmIChjaGVja19jb25uZWN0aXZpdHkpIHsKLQkJaWYgKHRyYW5zcG9ydC0+cHJvZ3Jlc3MpCi0JCQlmcHJpbnRmKHN0ZGVyciwgXygiQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uICIpKTsKLQkJaWYgKGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkX3dpdGhfdHJhbnNwb3J0KGl0ZXJhdGVfcmVmX21hcCwKLQkJCQkJCQkgICAgICAwLCAmcm0sIHRyYW5zcG9ydCkpCisJCXN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyBvcHQgPSBDSEVDS19DT05ORUNURURfSU5JVDsKKworCQlvcHQudHJhbnNwb3J0ID0gdHJhbnNwb3J0OworCQlvcHQucHJvZ3Jlc3MgPSB0cmFuc3BvcnQtPnByb2dyZXNzOworCisJCWlmIChjaGVja19jb25uZWN0ZWQoaXRlcmF0ZV9yZWZfbWFwLCAmcm0sICZvcHQpKQogCQkJZGllKF8oInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIikpOwotCQlpZiAodHJhbnNwb3J0LT5wcm9ncmVzcykKLQkJCWZwcmludGYoc3RkZXJyLCBfKCJkb25lLlxuIikpOwogCX0KIAogCWlmIChyZWZzKSB7CkBAIC03MzgsOCArNzM4LDcgQEAKIAkJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKIAkJYXJndl9hcnJheV9wdXNobCgmYXJncywgInN1Ym1vZHVsZSIsICJ1cGRhdGUiLCAiLS1pbml0IiwgIi0tcmVjdXJzaXZlIiwgTlVMTCk7CiAKLQkJaWYgKG9wdGlvbl9zaGFsbG93X3N1Ym1vZHVsZXMgPT0gMQotCQkgICAgfHwgKG9wdGlvbl9zaGFsbG93X3N1Ym1vZHVsZXMgPT0gLTEgJiYgb3B0aW9uX2RlcHRoKSkKKwkJaWYgKG9wdGlvbl9zaGFsbG93X3N1Ym1vZHVsZXMgPT0gMSkKIAkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tZGVwdGg9MSIpOwogCiAJCWlmIChtYXhfam9icyAhPSAtMSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29tbWl0LmMgYi9idWlsdGluL2NvbW1pdC5jCmluZGV4IDQ0M2ZmOTEuLjc3ZTNkYzggMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vY29tbWl0LmMKKysrIGIvYnVpbHRpbi9jb21taXQuYwpAQCAtOTIsOCArOTIsOSBAQAogIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCiAidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIik7CiAKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2NvbW1pdF9lZGl0bXNnLCAiQ09NTUlUX0VESVRNU0ciKQorCiBzdGF0aWMgY29uc3QgY2hhciAqdXNlX21lc3NhZ2VfYnVmZmVyOwotc3RhdGljIGNvbnN0IGNoYXIgY29tbWl0X2VkaXRtc2dbXSA9ICJDT01NSVRfRURJVE1TRyI7CiBzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrOyAvKiByZWFsIGluZGV4ICovCiBzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBmYWxzZV9sb2NrOyAvKiB1c2VkIG9ubHkgZm9yIHBhcnRpYWwgY29tbWl0cyAqLwogc3RhdGljIGVudW0gewpAQCAtMzg2LDcgKzM4Nyw3IEBACiAJICovCiAJaWYgKGFsbCB8fCAoYWxzbyAmJiBwYXRoc3BlYy5ucikpIHsKIAkJaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDEpOwotCQlhZGRfZmlsZXNfdG9fY2FjaGUoYWxzbyA/IHByZWZpeCA6IE5VTEwsICZwYXRoc3BlYywgMCk7CisJCWFkZF9maWxlc190b19jYWNoZShhbHNvID8gcHJlZml4IDogTlVMTCwgJnBhdGhzcGVjLCAwLCAwKTsKIAkJcmVmcmVzaF9jYWNoZV9vcl9kaWUocmVmcmVzaF9mbGFncyk7CiAJCXVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoV1JJVEVfVFJFRV9TSUxFTlQpOwogCQlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZpbmRleF9sb2NrLCBDTE9TRV9MT0NLKSkKQEAgLTcxNCw3ICs3MTUsNyBAQAogCQljaGFyICpidWZmZXI7CiAJCWJ1ZmZlciA9IHN0cnN0cih1c2VfbWVzc2FnZV9idWZmZXIsICJcblxuIik7CiAJCWlmIChidWZmZXIpCi0JCQlzdHJidWZfYWRkc3RyKCZzYiwgYnVmZmVyICsgMik7CisJCQlzdHJidWZfYWRkc3RyKCZzYiwgc2tpcF9ibGFua19saW5lcyhidWZmZXIgKyAyKSk7CiAJCWhvb2tfYXJnMSA9ICJjb21taXQiOwogCQlob29rX2FyZzIgPSB1c2VfbWVzc2FnZTsKIAl9IGVsc2UgaWYgKGZpeHVwX21lc3NhZ2UpIHsKQEAgLTc3Miw5ICs3NzMsOSBAQAogCQlob29rX2FyZzIgPSAiIjsKIAl9CiAKLQlzLT5mcCA9IGZvcGVuX2Zvcl93cml0aW5nKGdpdF9wYXRoKGNvbW1pdF9lZGl0bXNnKSk7CisJcy0+ZnAgPSBmb3Blbl9mb3Jfd3JpdGluZyhnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpKTsKIAlpZiAocy0+ZnAgPT0gTlVMTCkKLQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcyciKSwgZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpKTsKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcyciKSwgZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2coKSk7CiAKIAkvKiBJZ25vcmUgc3RhdHVzLmRpc3BsYXlDb21tZW50UHJlZml4OiB3ZSBkbyBuZWVkIGNvbW1lbnRzIGluIENPTU1JVF9FRElUTVNHLiAqLwogCW9sZF9kaXNwbGF5X2NvbW1lbnRfcHJlZml4ID0gcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeDsKQEAgLTk1MSw3ICs5NTIsNyBAQAogCX0KIAogCWlmIChydW5fY29tbWl0X2hvb2sodXNlX2VkaXRvciwgaW5kZXhfZmlsZSwgInByZXBhcmUtY29tbWl0LW1zZyIsCi0JCQkgICAgZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCBob29rX2FyZzEsIGhvb2tfYXJnMiwgTlVMTCkpCisJCQkgICAgZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2coKSwgaG9va19hcmcxLCBob29rX2FyZzIsIE5VTEwpKQogCQlyZXR1cm4gMDsKIAogCWlmICh1c2VfZWRpdG9yKSB7CkBAIC05NTksNyArOTYwLDcgQEAKIAkJY29uc3QgY2hhciAqZW52WzJdID0geyBOVUxMIH07CiAJCWVudlswXSA9ICBpbmRleDsKIAkJc25wcmludGYoaW5kZXgsIHNpemVvZihpbmRleCksICJHSVRfSU5ERVhfRklMRT0lcyIsIGluZGV4X2ZpbGUpOwotCQlpZiAobGF1bmNoX2VkaXRvcihnaXRfcGF0aChjb21taXRfZWRpdG1zZyksIE5VTEwsIGVudikpIHsKKwkJaWYgKGxhdW5jaF9lZGl0b3IoZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2coKSwgTlVMTCwgZW52KSkgewogCQkJZnByaW50ZihzdGRlcnIsCiAJCQlfKCJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iKSk7CiAJCQlleGl0KDEpOwpAQCAtOTY3LDcgKzk2OCw3IEBACiAJfQogCiAJaWYgKCFub192ZXJpZnkgJiYKLQkgICAgcnVuX2NvbW1pdF9ob29rKHVzZV9lZGl0b3IsIGluZGV4X2ZpbGUsICJjb21taXQtbXNnIiwgZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCBOVUxMKSkgeworCSAgICBydW5fY29tbWl0X2hvb2sodXNlX2VkaXRvciwgaW5kZXhfZmlsZSwgImNvbW1pdC1tc2ciLCBnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpLCBOVUxMKSkgewogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE2MTYsNyArMTYxNyw3IEBACiAJCU9QVF9CT09MKDAsICJpbnRlcmFjdGl2ZSIsICZpbnRlcmFjdGl2ZSwgTl8oImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIikpLAogCQlPUFRfQk9PTCgncCcsICJwYXRjaCIsICZwYXRjaF9pbnRlcmFjdGl2ZSwgTl8oImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiKSksCiAJCU9QVF9CT09MKCdvJywgIm9ubHkiLCAmb25seSwgTl8oImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIpKSwKLQkJT1BUX0JPT0woJ24nLCAibm8tdmVyaWZ5IiwgJm5vX3ZlcmlmeSwgTl8oImJ5cGFzcyBwcmUtY29tbWl0IGhvb2siKSksCisJCU9QVF9CT09MKCduJywgIm5vLXZlcmlmeSIsICZub192ZXJpZnksIE5fKCJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIpKSwKIAkJT1BUX0JPT0woMCwgImRyeS1ydW4iLCAmZHJ5X3J1biwgTl8oInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiKSksCiAJCU9QVF9TRVRfSU5UKDAsICJzaG9ydCIsICZzdGF0dXNfZm9ybWF0LCBOXygic2hvdyBzdGF0dXMgY29uY2lzZWx5IiksCiAJCQkgICAgU1RBVFVTX0ZPUk1BVF9TSE9SVCksCkBAIC0xNzM4LDcgKzE3MzksNyBAQAogCiAJLyogRmluYWxseSwgZ2V0IHRoZSBjb21taXQgbWVzc2FnZSAqLwogCXN0cmJ1Zl9yZXNldCgmc2IpOwotCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCAwKSA8IDApIHsKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoX2NvbW1pdF9lZGl0bXNnKCksIDApIDwgMCkgewogCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKIAkJcm9sbGJhY2tfaW5kZXhfZmlsZXMoKTsKIAkJZGllKF8oImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIpLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jb25maWcuYyBiL2J1aWx0aW4vY29uZmlnLmMKaW5kZXggMWQ3YzZlZi4uNmNiZjczMyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9jb25maWcuYworKysgYi9idWlsdGluL2NvbmZpZy5jCkBAIC0yNSw3ICsyNSw2IEBACiBzdGF0aWMgaW50IHVzZV9nbG9iYWxfY29uZmlnLCB1c2Vfc3lzdGVtX2NvbmZpZywgdXNlX2xvY2FsX2NvbmZpZzsKIHN0YXRpYyBzdHJ1Y3QgZ2l0X2NvbmZpZ19zb3VyY2UgZ2l2ZW5fY29uZmlnX3NvdXJjZTsKIHN0YXRpYyBpbnQgYWN0aW9ucywgdHlwZXM7Ci1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X2NvbG9yX3Nsb3QsICpnZXRfY29sb3Jib29sX3Nsb3Q7CiBzdGF0aWMgaW50IGVuZF9udWxsOwogc3RhdGljIGludCByZXNwZWN0X2luY2x1ZGVzID0gLTE7CiBzdGF0aWMgaW50IHNob3dfb3JpZ2luOwpAQCAtNjA0LDcgKzYwMyw3IEBACiAJCQkJICAgICAgZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlIDogZ2l0X3BhdGgoImNvbmZpZyIpKTsKIAkJaWYgKHVzZV9nbG9iYWxfY29uZmlnKSB7CiAJCQlpbnQgZmQgPSBvcGVuKGNvbmZpZ19maWxlLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFksIDA2NjYpOwotCQkJaWYgKGZkKSB7CisJCQlpZiAoZmQgPj0gMCkgewogCQkJCWNoYXIgKmNvbnRlbnQgPSBkZWZhdWx0X3VzZXJfY29uZmlnKCk7CiAJCQkJd3JpdGVfc3RyX2luX2Z1bGwoZmQsIGNvbnRlbnQpOwogCQkJCWZyZWUoY29udGVudCk7CmRpZmYgLS1naXQgYS9idWlsdGluL2Zhc3QtZXhwb3J0LmMgYi9idWlsdGluL2Zhc3QtZXhwb3J0LmMKaW5kZXggODE2NGI1OC4uYzA2NTJhNyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9mYXN0LWV4cG9ydC5jCisrKyBiL2J1aWx0aW4vZmFzdC1leHBvcnQuYwpAQCAtMzY4LDcgKzM2OCw3IEBACiAJCQlwcmludF9wYXRoKHNwZWMtPnBhdGgpOwogCQkJcHV0Y2hhcignXG4nKTsKIAotCQkJaWYgKCFoYXNoY21wKG9zcGVjLT5zaGExLCBzcGVjLT5zaGExKSAmJgorCQkJaWYgKCFvaWRjbXAoJm9zcGVjLT5vaWQsICZzcGVjLT5vaWQpICYmCiAJCQkgICAgb3NwZWMtPm1vZGUgPT0gc3BlYy0+bW9kZSkKIAkJCQlicmVhazsKIAkJCS8qIGZhbGx0aHJvdWdoICovCkBAIC0zODMsMTAgKzM4MywxMCBAQAogCQkJaWYgKG5vX2RhdGEgfHwgU19JU0dJVExJTksoc3BlYy0+bW9kZSkpCiAJCQkJcHJpbnRmKCJNICUwNm8gJXMgIiwgc3BlYy0+bW9kZSwKIAkJCQkgICAgICAgc2hhMV90b19oZXgoYW5vbnltaXplID8KLQkJCQkJCSAgIGFub255bWl6ZV9zaGExKHNwZWMtPnNoYTEpIDoKLQkJCQkJCSAgIHNwZWMtPnNoYTEpKTsKKwkJCQkJCSAgIGFub255bWl6ZV9zaGExKHNwZWMtPm9pZC5oYXNoKSA6CisJCQkJCQkgICBzcGVjLT5vaWQuaGFzaCkpOwogCQkJZWxzZSB7Ci0JCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gbG9va3VwX29iamVjdChzcGVjLT5zaGExKTsKKwkJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBsb29rdXBfb2JqZWN0KHNwZWMtPm9pZC5oYXNoKTsKIAkJCQlwcmludGYoIk0gJTA2byA6JWQgIiwgc3BlYy0+bW9kZSwKIAkJCQkgICAgICAgZ2V0X29iamVjdF9tYXJrKG9iamVjdCkpOwogCQkJfQpAQCAtNTcyLDcgKzU3Miw3IEBACiAJLyogRXhwb3J0IHRoZSByZWZlcmVuY2VkIGJsb2JzLCBhbmQgcmVtZW1iZXIgdGhlIG1hcmtzLiAqLwogCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspCiAJCWlmICghU19JU0dJVExJTksoZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXS0+dHdvLT5tb2RlKSkKLQkJCWV4cG9ydF9ibG9iKGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV0tPnR3by0+c2hhMSk7CisJCQlleHBvcnRfYmxvYihkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldLT50d28tPm9pZC5oYXNoKTsKIAogCXJlZm5hbWUgPSBjb21taXQtPnV0aWw7CiAJaWYgKGFub255bWl6ZSkgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mZXRjaC5jIGIvYnVpbHRpbi9mZXRjaC5jCmluZGV4IDE1ODJjYTcuLjE2NDYyM2IgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vZmV0Y2guYworKysgYi9idWlsdGluL2ZldGNoLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlICJzdWJtb2R1bGUuaCIKICNpbmNsdWRlICJjb25uZWN0ZWQuaCIKICNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAidXRmOC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fZmV0Y2hfdXNhZ2VbXSA9IHsKIAlOXygiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIiksCkBAIC00NDksNyArNDUwLDEzMiBAQAogCQkJICAgOiBTVE9SRV9SRUZfRVJST1JfT1RIRVI7CiB9CiAKLSNkZWZpbmUgUkVGQ09MX1dJRFRIICAxMAorc3RhdGljIGludCByZWZjb2xfd2lkdGggPSAxMDsKK3N0YXRpYyBpbnQgY29tcGFjdF9mb3JtYXQ7CisKK3N0YXRpYyB2b2lkIGFkanVzdF9yZWZjb2xfd2lkdGgoY29uc3Qgc3RydWN0IHJlZiAqcmVmKQoreworCWludCBtYXgsIHJsZW4sIGxsZW4sIGxlbjsKKworCS8qIHVwdG9kYXRlIGxpbmVzIGFyZSBvbmx5IHNob3duIG9uIGhpZ2ggdmVyYm9zaXR5IGxldmVsICovCisJaWYgKCF2ZXJib3NpdHkgJiYgIW9pZGNtcCgmcmVmLT5wZWVyX3JlZi0+b2xkX29pZCwgJnJlZi0+b2xkX29pZCkpCisJCXJldHVybjsKKworCW1heCAgICA9IHRlcm1fY29sdW1ucygpOworCXJsZW4gICA9IHV0Zjhfc3Ryd2lkdGgocHJldHRpZnlfcmVmbmFtZShyZWYtPm5hbWUpKTsKKworCWxsZW4gICA9IHV0Zjhfc3Ryd2lkdGgocHJldHRpZnlfcmVmbmFtZShyZWYtPnBlZXJfcmVmLT5uYW1lKSk7CisKKwkvKgorCSAqIHJvdWdoIGVzdGltYXRpb24gdG8gc2VlIGlmIHRoZSBvdXRwdXQgbGluZSBpcyB0b28gbG9uZyBhbmQKKwkgKiBzaG91bGQgbm90IGJlIGNvdW50ZWQgKHdlIGNhbid0IGRvIHByZWNpc2UgY2FsY3VsYXRpb24KKwkgKiBhbnl3YXkgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGlmIHRoZSBlcnJvciBleHBsYW5hdGlvbiBwYXJ0CisJICogd2lsbCBiZSBwcmludGVkIGluIHVwZGF0ZV9sb2NhbF9yZWYpCisJICovCisJaWYgKGNvbXBhY3RfZm9ybWF0KSB7CisJCWxsZW4gPSAwOworCQltYXggPSBtYXggKiAyIC8gMzsKKwl9CisJbGVuID0gMjEgLyogZmxhZyBhbmQgc3VtbWFyeSAqLyArIHJsZW4gKyA0IC8qIC0+ICovICsgbGxlbjsKKwlpZiAobGVuID49IG1heCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBOb3QgcHJlY2lzZSBjYWxjdWxhdGlvbiBmb3IgY29tcGFjdCBtb2RlIGJlY2F1c2UgJyonIGNhbgorCSAqIGFwcGVhciBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgJy0+JyBhbmQgc2hyaW5rIHRoZSBjb2x1bW4KKwkgKiBiYWNrLgorCSAqLworCWlmIChyZWZjb2xfd2lkdGggPCBybGVuKQorCQlyZWZjb2xfd2lkdGggPSBybGVuOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2Zvcm1hdF9kaXNwbGF5KHN0cnVjdCByZWYgKnJlZl9tYXApCit7CisJc3RydWN0IHJlZiAqcm07CisJY29uc3QgY2hhciAqZm9ybWF0ID0gImZ1bGwiOworCisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJmZXRjaC5vdXRwdXQiLCAmZm9ybWF0KTsKKwlpZiAoIXN0cmNhc2VjbXAoZm9ybWF0LCAiZnVsbCIpKQorCQljb21wYWN0X2Zvcm1hdCA9IDA7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoZm9ybWF0LCAiY29tcGFjdCIpKQorCQljb21wYWN0X2Zvcm1hdCA9IDE7CisJZWxzZQorCQlkaWUoXygiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIpLAorCQkgICAgZm9ybWF0KTsKKworCWZvciAocm0gPSByZWZfbWFwOyBybTsgcm0gPSBybS0+bmV4dCkgeworCQlpZiAocm0tPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1JFSkVDVF9TSEFMTE9XIHx8CisJCSAgICAhcm0tPnBlZXJfcmVmIHx8CisJCSAgICAhc3RyY21wKHJtLT5uYW1lLCAiSEVBRCIpKQorCQkJY29udGludWU7CisKKwkJYWRqdXN0X3JlZmNvbF93aWR0aChybSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmludF9yZW1vdGVfdG9fbG9jYWwoc3RydWN0IHN0cmJ1ZiAqZGlzcGxheSwKKwkJCQkgIGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqbG9jYWwpCit7CisJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiUtKnMgLT4gJXMiLCByZWZjb2xfd2lkdGgsIHJlbW90ZSwgbG9jYWwpOworfQorCitzdGF0aWMgaW50IGZpbmRfYW5kX3JlcGxhY2Uoc3RydWN0IHN0cmJ1ZiAqaGF5c3RhY2ssCisJCQkgICAgY29uc3QgY2hhciAqbmVlZGxlLAorCQkJICAgIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyKQoreworCWNvbnN0IGNoYXIgKnAgPSBzdHJzdHIoaGF5c3RhY2stPmJ1ZiwgbmVlZGxlKTsKKwlpbnQgcGxlbiwgbmxlbjsKKworCWlmICghcCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocCA+IGhheXN0YWNrLT5idWYgJiYgcFstMV0gIT0gJy8nKQorCQlyZXR1cm4gMDsKKworCXBsZW4gPSBzdHJsZW4ocCk7CisJbmxlbiA9IHN0cmxlbihuZWVkbGUpOworCWlmIChwbGVuID4gbmxlbiAmJiBwW25sZW5dICE9ICcvJykKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfc3BsaWNlKGhheXN0YWNrLCBwIC0gaGF5c3RhY2stPmJ1ZiwgbmxlbiwKKwkJICAgICAgcGxhY2Vob2xkZXIsIHN0cmxlbihwbGFjZWhvbGRlcikpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwcmludF9jb21wYWN0KHN0cnVjdCBzdHJidWYgKmRpc3BsYXksCisJCQkgIGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqbG9jYWwpCit7CisJc3RydWN0IHN0cmJ1ZiByID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBsID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIXN0cmNtcChyZW1vdGUsIGxvY2FsKSkgeworCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiJS0qcyAtPiAqIiwgcmVmY29sX3dpZHRoLCByZW1vdGUpOworCQlyZXR1cm47CisJfQorCisJc3RyYnVmX2FkZHN0cigmciwgcmVtb3RlKTsKKwlzdHJidWZfYWRkc3RyKCZsLCBsb2NhbCk7CisKKwlpZiAoIWZpbmRfYW5kX3JlcGxhY2UoJnIsIGxvY2FsLCAiKiIpKQorCQlmaW5kX2FuZF9yZXBsYWNlKCZsLCByZW1vdGUsICIqIik7CisJcHJpbnRfcmVtb3RlX3RvX2xvY2FsKGRpc3BsYXksIHIuYnVmLCBsLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmcik7CisJc3RyYnVmX3JlbGVhc2UoJmwpOworfQorCitzdGF0aWMgdm9pZCBmb3JtYXRfZGlzcGxheShzdHJ1Y3Qgc3RyYnVmICpkaXNwbGF5LCBjaGFyIGNvZGUsCisJCQkgICBjb25zdCBjaGFyICpzdW1tYXJ5LCBjb25zdCBjaGFyICplcnJvciwKKwkJCSAgIGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqbG9jYWwpCit7CisJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiVjICUtKnMgIiwgY29kZSwgVFJBTlNQT1JUX1NVTU1BUlkoc3VtbWFyeSkpOworCWlmICghY29tcGFjdF9mb3JtYXQpCisJCXByaW50X3JlbW90ZV90b19sb2NhbChkaXNwbGF5LCByZW1vdGUsIGxvY2FsKTsKKwllbHNlCisJCXByaW50X2NvbXBhY3QoZGlzcGxheSwgcmVtb3RlLCBsb2NhbCk7CisJaWYgKGVycm9yKQorCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiICAoJXMpIiwgZXJyb3IpOworfQogCiBzdGF0aWMgaW50IHVwZGF0ZV9sb2NhbF9yZWYoc3RydWN0IHJlZiAqcmVmLAogCQkJICAgIGNvbnN0IGNoYXIgKnJlbW90ZSwKQEAgLTQ2Nyw5ICs1OTMsOCBAQAogCiAJaWYgKCFvaWRjbXAoJnJlZi0+b2xkX29pZCwgJnJlZi0+bmV3X29pZCkpIHsKIAkJaWYgKHZlcmJvc2l0eSA+IDApCi0JCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiPSAlLSpzICUtKnMgLT4gJXMiLAotCQkJCSAgICBUUkFOU1BPUlRfU1VNTUFSWShfKCJbdXAgdG8gZGF0ZV0iKSksCi0JCQkJICAgIFJFRkNPTF9XSURUSCwgcmVtb3RlLCBwcmV0dHlfcmVmKTsKKwkJCWZvcm1hdF9kaXNwbGF5KGRpc3BsYXksICc9JywgXygiW3VwIHRvIGRhdGVdIiksIE5VTEwsCisJCQkJICAgICAgIHJlbW90ZSwgcHJldHR5X3JlZik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDgxLDEwICs2MDYsOSBAQAogCQkgKiBJZiB0aGlzIGlzIHRoZSBoZWFkLCBhbmQgaXQncyBub3Qgb2theSB0byB1cGRhdGUKIAkJICogdGhlIGhlYWQsIGFuZCB0aGUgb2xkIHZhbHVlIG9mIHRoZSBoZWFkIGlzbid0IGVtcHR5Li4uCiAJCSAqLwotCQlzdHJidWZfYWRkZihkaXNwbGF5LAotCQkJICAgIF8oIiEgJS0qcyAlLSpzIC0+ICVzICAoY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2gpIiksCi0JCQkgICAgVFJBTlNQT1JUX1NVTU1BUlkoXygiW3JlamVjdGVkXSIpKSwKLQkJCSAgICBSRUZDT0xfV0lEVEgsIHJlbW90ZSwgcHJldHR5X3JlZik7CisJCWZvcm1hdF9kaXNwbGF5KGRpc3BsYXksICchJywgXygiW3JlamVjdGVkXSIpLAorCQkJICAgICAgIF8oImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIiksCisJCQkgICAgICAgcmVtb3RlLCBwcmV0dHlfcmVmKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC00OTIsMTEgKzYxNiw5IEBACiAJICAgIHN0YXJ0c193aXRoKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSkgewogCQlpbnQgcjsKIAkJciA9IHNfdXBkYXRlX3JlZigidXBkYXRpbmcgdGFnIiwgcmVmLCAwKTsKLQkJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiVjICUtKnMgJS0qcyAtPiAlcyVzIiwKLQkJCSAgICByID8gJyEnIDogJy0nLAotCQkJICAgIFRSQU5TUE9SVF9TVU1NQVJZKF8oIlt0YWcgdXBkYXRlXSIpKSwKLQkJCSAgICBSRUZDT0xfV0lEVEgsIHJlbW90ZSwgcHJldHR5X3JlZiwKLQkJCSAgICByID8gXygiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIikgOiAiIik7CisJCWZvcm1hdF9kaXNwbGF5KGRpc3BsYXksIHIgPyAnIScgOiAndCcsIF8oIlt0YWcgdXBkYXRlXSIpLAorCQkJICAgICAgIHIgPyBfKCJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIpIDogTlVMTCwKKwkJCSAgICAgICByZW1vdGUsIHByZXR0eV9yZWYpOwogCQlyZXR1cm4gcjsKIAl9CiAKQEAgLTUyNywxMSArNjQ5LDkgQEAKIAkJICAgIChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OKSkKIAkJCWNoZWNrX2Zvcl9uZXdfc3VibW9kdWxlX2NvbW1pdHMocmVmLT5uZXdfb2lkLmhhc2gpOwogCQlyID0gc191cGRhdGVfcmVmKG1zZywgcmVmLCAwKTsKLQkJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiVjICUtKnMgJS0qcyAtPiAlcyVzIiwKLQkJCSAgICByID8gJyEnIDogJyonLAotCQkJICAgIFRSQU5TUE9SVF9TVU1NQVJZKHdoYXQpLAotCQkJICAgIFJFRkNPTF9XSURUSCwgcmVtb3RlLCBwcmV0dHlfcmVmLAotCQkJICAgIHIgPyBfKCIgICh1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZikiKSA6ICIiKTsKKwkJZm9ybWF0X2Rpc3BsYXkoZGlzcGxheSwgciA/ICchJyA6ICcqJywgd2hhdCwKKwkJCSAgICAgICByID8gXygidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiKSA6IE5VTEwsCisJCQkgICAgICAgcmVtb3RlLCBwcmV0dHlfcmVmKTsKIAkJcmV0dXJuIHI7CiAJfQogCkBAIC01NDUsMTEgKzY2NSw5IEBACiAJCSAgICAocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PTikpCiAJCQljaGVja19mb3JfbmV3X3N1Ym1vZHVsZV9jb21taXRzKHJlZi0+bmV3X29pZC5oYXNoKTsKIAkJciA9IHNfdXBkYXRlX3JlZigiZmFzdC1mb3J3YXJkIiwgcmVmLCAxKTsKLQkJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiVjICUtKnMgJS0qcyAtPiAlcyVzIiwKLQkJCSAgICByID8gJyEnIDogJyAnLAotCQkJICAgIFRSQU5TUE9SVF9TVU1NQVJZX1dJRFRILCBxdWlja3JlZi5idWYsCi0JCQkgICAgUkVGQ09MX1dJRFRILCByZW1vdGUsIHByZXR0eV9yZWYsCi0JCQkgICAgciA/IF8oIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIpIDogIiIpOworCQlmb3JtYXRfZGlzcGxheShkaXNwbGF5LCByID8gJyEnIDogJyAnLCBxdWlja3JlZi5idWYsCisJCQkgICAgICAgciA/IF8oInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIikgOiBOVUxMLAorCQkJICAgICAgIHJlbW90ZSwgcHJldHR5X3JlZik7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZxdWlja3JlZik7CiAJCXJldHVybiByOwogCX0gZWxzZSBpZiAoZm9yY2UgfHwgcmVmLT5mb3JjZSkgewpAQCAtNTYyLDE4ICs2ODAsMTQgQEAKIAkJICAgIChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OKSkKIAkJCWNoZWNrX2Zvcl9uZXdfc3VibW9kdWxlX2NvbW1pdHMocmVmLT5uZXdfb2lkLmhhc2gpOwogCQlyID0gc191cGRhdGVfcmVmKCJmb3JjZWQtdXBkYXRlIiwgcmVmLCAxKTsKLQkJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiVjICUtKnMgJS0qcyAtPiAlcyAgKCVzKSIsCi0JCQkgICAgciA/ICchJyA6ICcrJywKLQkJCSAgICBUUkFOU1BPUlRfU1VNTUFSWV9XSURUSCwgcXVpY2tyZWYuYnVmLAotCQkJICAgIFJFRkNPTF9XSURUSCwgcmVtb3RlLCBwcmV0dHlfcmVmLAotCQkJICAgIHIgPyBfKCJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIpIDogXygiZm9yY2VkIHVwZGF0ZSIpKTsKKwkJZm9ybWF0X2Rpc3BsYXkoZGlzcGxheSwgciA/ICchJyA6ICcrJywgcXVpY2tyZWYuYnVmLAorCQkJICAgICAgIHIgPyBfKCJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIpIDogXygiZm9yY2VkIHVwZGF0ZSIpLAorCQkJICAgICAgIHJlbW90ZSwgcHJldHR5X3JlZik7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZxdWlja3JlZik7CiAJCXJldHVybiByOwogCX0gZWxzZSB7Ci0JCXN0cmJ1Zl9hZGRmKGRpc3BsYXksICIhICUtKnMgJS0qcyAtPiAlcyAgJXMiLAotCQkJICAgIFRSQU5TUE9SVF9TVU1NQVJZKF8oIltyZWplY3RlZF0iKSksCi0JCQkgICAgUkVGQ09MX1dJRFRILCByZW1vdGUsIHByZXR0eV9yZWYsCi0JCQkgICAgXygiKG5vbi1mYXN0LWZvcndhcmQpIikpOworCQlmb3JtYXRfZGlzcGxheShkaXNwbGF5LCAnIScsIF8oIltyZWplY3RlZF0iKSwgXygibm9uLWZhc3QtZm9yd2FyZCIpLAorCQkJICAgICAgIHJlbW90ZSwgcHJldHR5X3JlZik7CiAJCXJldHVybiAxOwogCX0KIH0KQEAgLTYxNSwxMSArNzI5LDEzIEBACiAJCXVybCA9IHhzdHJkdXAoImZvcmVpZ24iKTsKIAogCXJtID0gcmVmX21hcDsKLQlpZiAoY2hlY2tfZXZlcnl0aGluZ19jb25uZWN0ZWQoaXRlcmF0ZV9yZWZfbWFwLCAwLCAmcm0pKSB7CisJaWYgKGNoZWNrX2Nvbm5lY3RlZChpdGVyYXRlX3JlZl9tYXAsICZybSwgTlVMTCkpIHsKIAkJcmMgPSBlcnJvcihfKCIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iKSwgdXJsKTsKIAkJZ290byBhYm9ydDsKIAl9CiAKKwlwcmVwYXJlX2Zvcm1hdF9kaXNwbGF5KHJlZl9tYXApOworCiAJLyoKIAkgKiBXZSBkbyBhIHBhc3MgZm9yIGVhY2ggZmV0Y2hfaGVhZF9zdGF0dXMgdHlwZSBpbiB0aGVpciBlbnVtIG9yZGVyLCBzbwogCSAqIG1lcmdlZCBlbnRyaWVzIGFyZSB3cml0dGVuIGJlZm9yZSBub3QtZm9yLW1lcmdlLiBUaGF0IGxldHMgcmVhZGVycwpAQCAtNzE0LDExICs4MzAsMTAgQEAKIAkJCQlyYyB8PSB1cGRhdGVfbG9jYWxfcmVmKHJlZiwgd2hhdCwgcm0sICZub3RlKTsKIAkJCQlmcmVlKHJlZik7CiAJCQl9IGVsc2UKLQkJCQlzdHJidWZfYWRkZigmbm90ZSwgIiogJS0qcyAlLSpzIC0+IEZFVENIX0hFQUQiLAotCQkJCQkgICAgVFJBTlNQT1JUX1NVTU1BUllfV0lEVEgsCi0JCQkJCSAgICAqa2luZCA/IGtpbmQgOiAiYnJhbmNoIiwKLQkJCQkJICAgIFJFRkNPTF9XSURUSCwKLQkJCQkJICAgICp3aGF0ID8gd2hhdCA6ICJIRUFEIik7CisJCQkJZm9ybWF0X2Rpc3BsYXkoJm5vdGUsICcqJywKKwkJCQkJICAgICAgICpraW5kID8ga2luZCA6ICJicmFuY2giLCBOVUxMLAorCQkJCQkgICAgICAgKndoYXQgPyB3aGF0IDogIkhFQUQiLAorCQkJCQkgICAgICAgIkZFVENIX0hFQUQiKTsKIAkJCWlmIChub3RlLmxlbikgewogCQkJCWlmICh2ZXJib3NpdHkgPj0gMCAmJiAhc2hvd25fdXJsKSB7CiAJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJGcm9tICUuKnNcbiIpLApAQCAtNzUxLDYgKzg2Niw3IEBACiBzdGF0aWMgaW50IHF1aWNrZmV0Y2goc3RydWN0IHJlZiAqcmVmX21hcCkKIHsKIAlzdHJ1Y3QgcmVmICpybSA9IHJlZl9tYXA7CisJc3RydWN0IGNoZWNrX2Nvbm5lY3RlZF9vcHRpb25zIG9wdCA9IENIRUNLX0NPTk5FQ1RFRF9JTklUOwogCiAJLyoKIAkgKiBJZiB3ZSBhcmUgZGVlcGVuaW5nIGEgc2hhbGxvdyBjbG9uZSB3ZSBhbHJlYWR5IGhhdmUgdGhlc2UKQEAgLTc2MSw3ICs4NzcsOCBAQAogCSAqLwogCWlmIChkZXB0aCkKIAkJcmV0dXJuIC0xOwotCXJldHVybiBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZChpdGVyYXRlX3JlZl9tYXAsIDEsICZybSk7CisJb3B0LnF1aWV0ID0gMTsKKwlyZXR1cm4gY2hlY2tfY29ubmVjdGVkKGl0ZXJhdGVfcmVmX21hcCwgJnJtLCAmb3B0KTsKIH0KIAogc3RhdGljIGludCBmZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmX21hcCkKQEAgLTgwNiwxOSArOTIzLDIxIEBACiAJCWZvciAocmVmID0gc3RhbGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCiAJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlZm5hbWVzLCByZWYtPm5hbWUpOwogCi0JCXJlc3VsdCA9IGRlbGV0ZV9yZWZzKCZyZWZuYW1lcyk7CisJCXJlc3VsdCA9IGRlbGV0ZV9yZWZzKCZyZWZuYW1lcywgMCk7CiAJCXN0cmluZ19saXN0X2NsZWFyKCZyZWZuYW1lcywgMCk7CiAJfQogCiAJaWYgKHZlcmJvc2l0eSA+PSAwKSB7CiAJCWZvciAocmVmID0gc3RhbGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIAkJCWlmICghc2hvd25fdXJsKSB7CiAJCQkJZnByaW50ZihzdGRlcnIsIF8oIkZyb20gJS4qc1xuIiksIHVybF9sZW4sIHVybCk7CiAJCQkJc2hvd25fdXJsID0gMTsKIAkJCX0KLQkJCWZwcmludGYoc3RkZXJyLCAiIHggJS0qcyAlLSpzIC0+ICVzXG4iLAotCQkJCVRSQU5TUE9SVF9TVU1NQVJZKF8oIltkZWxldGVkXSIpKSwKLQkJCQlSRUZDT0xfV0lEVEgsIF8oIihub25lKSIpLCBwcmV0dGlmeV9yZWZuYW1lKHJlZi0+bmFtZSkpOworCQkJZm9ybWF0X2Rpc3BsYXkoJnNiLCAnLScsIF8oIltkZWxldGVkXSIpLCBOVUxMLAorCQkJCSAgICAgICBfKCIobm9uZSkiKSwgcHJldHRpZnlfcmVmbmFtZShyZWYtPm5hbWUpKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiICVzXG4iLHNiLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOwogCQkJd2Fybl9kYW5nbGluZ19zeW1yZWYoc3RkZXJyLCBkYW5nbGluZ19tc2csIHJlZi0+bmFtZSk7CiAJCX0KIAl9CkBAIC0xMDA1LDcgKzExMjQsNyBAQAogCQkJc2l6ZV90IHdvcmRsZW4gPSBzdHJjc3BuKHZhbHVlLCAiIFx0XG4iKTsKIAogCQkJaWYgKHdvcmRsZW4gPj0gMSkKLQkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoZy0+bGlzdCwKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoZy0+bGlzdCwKIAkJCQkJCSAgIHhzdHJuZHVwKHZhbHVlLCB3b3JkbGVuKSk7CiAJCQl2YWx1ZSArPSB3b3JkbGVuICsgKHZhbHVlW3dvcmRsZW5dICE9ICdcMCcpOwogCQl9CkBAIC0xMTQzLDcgKzEyNjIsNyBAQAogaW50IGNtZF9mZXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKIAlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndl9nY19hdXRvID0gQVJHVl9BUlJBWV9JTklUOwpAQCAtMTIyNiw4ICsxMzQ1LDYgQEAKIAkJYXJndl9hcnJheV9jbGVhcigmb3B0aW9ucyk7CiAJfQogCi0JLyogQWxsIG5hbWVzIHdlcmUgc3RyZHVwKCllZCBvciBzdHJuZHVwKCllZCAqLwotCWxpc3Quc3RyZHVwX3N0cmluZ3MgPSAxOwogCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKIAogCWNsb3NlX2FsbF9wYWNrcygpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMgYi9idWlsdGluL2ZtdC1tZXJnZS1tc2cuYwppbmRleCBlNTY1OGMzLi5hYzg0ZTk5IDEwMDY0NAotLS0gYS9idWlsdGluL2ZtdC1tZXJnZS1tc2cuYworKysgYi9idWlsdGluL2ZtdC1tZXJnZS1tc2cuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiBzdGF0aWMgdm9pZCBhZGRfcGVvcGxlX2NvdW50KHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IHN0cmluZ19saXN0ICpwZW9wbGUpCiB7CiAJaWYgKHBlb3BsZS0+bnIgPT0gMSkKLQkJc3RyYnVmX2FkZGYob3V0LCAiJXMiLCBwZW9wbGUtPml0ZW1zWzBdLnN0cmluZyk7CisJCXN0cmJ1Zl9hZGRzdHIob3V0LCBwZW9wbGUtPml0ZW1zWzBdLnN0cmluZyk7CiAJZWxzZSBpZiAocGVvcGxlLT5uciA9PSAyKQogCQlzdHJidWZfYWRkZihvdXQsICIlcyAoJWQpIGFuZCAlcyAoJWQpIiwKIAkJCSAgICBwZW9wbGUtPml0ZW1zWzBdLnN0cmluZywKZGlmZiAtLWdpdCBhL2J1aWx0aW4vZnNjay5jIGIvYnVpbHRpbi9mc2NrLmMKaW5kZXggM2YyNzQ1Ni4uMmRlMjcyZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9mc2NrLmMKKysrIGIvYnVpbHRpbi9mc2NrLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlICJkaXIuaCIKICNpbmNsdWRlICJwcm9ncmVzcy5oIgogI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCiAKICNkZWZpbmUgUkVBQ0hBQkxFIDB4MDAwMQogI2RlZmluZSBTRUVOICAgICAgMHgwMDAyCkBAIC0zNSwxMSArMzYsMjYgQEAKIHN0YXRpYyBpbnQgdmVyYm9zZTsKIHN0YXRpYyBpbnQgc2hvd19wcm9ncmVzcyA9IC0xOwogc3RhdGljIGludCBzaG93X2RhbmdsaW5nID0gMTsKK3N0YXRpYyBpbnQgbmFtZV9vYmplY3RzOwogI2RlZmluZSBFUlJPUl9PQkpFQ1QgMDEKICNkZWZpbmUgRVJST1JfUkVBQ0hBQkxFIDAyCiAjZGVmaW5lIEVSUk9SX1BBQ0sgMDQKICNkZWZpbmUgRVJST1JfUkVGUyAwMTAKIAorc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NyaWJlX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqbmFtZSA9IG5hbWVfb2JqZWN0cyA/CisJCWxvb2t1cF9kZWNvcmF0aW9uKGZzY2tfd2Fsa19vcHRpb25zLm9iamVjdF9uYW1lcywgb2JqKSA6IE5VTEw7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZHN0cigmYnVmLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCWlmIChuYW1lKQorCQlzdHJidWZfYWRkZigmYnVmLCAiICglcykiLCBuYW1lKTsKKworCXJldHVybiBidWYuYnVmOworfQorCiBzdGF0aWMgaW50IGZzY2tfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmIChzdHJjbXAodmFyLCAiZnNjay5za2lwbGlzdCIpID09IDApIHsKQEAgLTY3LDcgKzgzLDcgQEAKIAkJCWNvbnN0IGNoYXIgKmVycikKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIiVzIGluICVzICVzOiAlc1xuIiwKLQkJbXNnX3R5cGUsIHR5cGVuYW1lKG9iai0+dHlwZSksIG9pZF90b19oZXgoJm9iai0+b2lkKSwgZXJyKTsKKwkJbXNnX3R5cGUsIHR5cGVuYW1lKG9iai0+dHlwZSksIGRlc2NyaWJlX29iamVjdChvYmopLCBlcnIpOwogfQogCiBzdGF0aWMgaW50IG9iamVycm9yKHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqZXJyKQpAQCAtNzcsNyArOTMsOCBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBmc2NrX2Vycm9yX2Z1bmMoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3N0YXRpYyBpbnQgZnNja19lcnJvcl9mdW5jKHN0cnVjdCBmc2NrX29wdGlvbnMgKm8sCisJc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKIAlvYmpyZXBvcnQob2JqLCAodHlwZSA9PSBGU0NLX1dBUk4pID8gIndhcm5pbmciIDogImVycm9yIiwgbWVzc2FnZSk7CiAJcmV0dXJuICh0eXBlID09IEZTQ0tfV0FSTikgPyAwIDogMTsKQEAgLTk3LDcgKzExNCw3IEBACiAJaWYgKCFvYmopIHsKIAkJLyogLi4uIHRoZXNlIHJlZmVyZW5jZXMgdG8gcGFyZW50LT5mbGQgYXJlIHNhZmUgaGVyZSAqLwogCQlwcmludGYoImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iLAotCQkJICAgdHlwZW5hbWUocGFyZW50LT50eXBlKSwgb2lkX3RvX2hleCgmcGFyZW50LT5vaWQpKTsKKwkJCSAgIHR5cGVuYW1lKHBhcmVudC0+dHlwZSksIGRlc2NyaWJlX29iamVjdChwYXJlbnQpKTsKIAkJcHJpbnRmKCJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIiwKIAkJCSAgICh0eXBlID09IE9CSl9BTlkgPyAidW5rbm93biIgOiB0eXBlbmFtZSh0eXBlKSksICJ1bmtub3duIik7CiAJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CkBAIC0xMTQsOSArMTMxLDkgQEAKIAlpZiAoIShvYmotPmZsYWdzICYgSEFTX09CSikpIHsKIAkJaWYgKHBhcmVudCAmJiAhaGFzX29iamVjdF9maWxlKCZvYmotPm9pZCkpIHsKIAkJCXByaW50ZigiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIsCi0JCQkJIHR5cGVuYW1lKHBhcmVudC0+dHlwZSksIG9pZF90b19oZXgoJnBhcmVudC0+b2lkKSk7CisJCQkJIHR5cGVuYW1lKHBhcmVudC0+dHlwZSksIGRlc2NyaWJlX29iamVjdChwYXJlbnQpKTsKIAkJCXByaW50ZigiICAgICAgICAgICAgICB0byAlN3MgJXNcbiIsCi0JCQkJIHR5cGVuYW1lKG9iai0+dHlwZSksIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJCQkJIHR5cGVuYW1lKG9iai0+dHlwZSksIGRlc2NyaWJlX29iamVjdChvYmopKTsKIAkJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CiAJCX0KIAkJcmV0dXJuIDE7CkBAIC0xOTAsNyArMjA3LDggQEAKIAkJCXJldHVybjsgLyogaXQgaXMgaW4gcGFjayAtIGZvcmdldCBhYm91dCBpdCAqLwogCQlpZiAoY29ubmVjdGl2aXR5X29ubHkgJiYgaGFzX29iamVjdF9maWxlKCZvYmotPm9pZCkpCiAJCQlyZXR1cm47Ci0JCXByaW50ZigibWlzc2luZyAlcyAlc1xuIiwgdHlwZW5hbWUob2JqLT50eXBlKSwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKwkJcHJpbnRmKCJtaXNzaW5nICVzICVzXG4iLCB0eXBlbmFtZShvYmotPnR5cGUpLAorCQkJZGVzY3JpYmVfb2JqZWN0KG9iaikpOwogCQllcnJvcnNfZm91bmQgfD0gRVJST1JfUkVBQ0hBQkxFOwogCQlyZXR1cm47CiAJfQpAQCAtMjE1LDcgKzIzMyw4IEBACiAJICogc2luY2UgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBpcyBwcnVuYWJsZS4KIAkgKi8KIAlpZiAoc2hvd191bnJlYWNoYWJsZSkgewotCQlwcmludGYoInVucmVhY2hhYmxlICVzICVzXG4iLCB0eXBlbmFtZShvYmotPnR5cGUpLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCQlwcmludGYoInVucmVhY2hhYmxlICVzICVzXG4iLCB0eXBlbmFtZShvYmotPnR5cGUpLAorCQkJZGVzY3JpYmVfb2JqZWN0KG9iaikpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMzQsMTEgKzI1MywxMSBAQAogCWlmICghb2JqLT51c2VkKSB7CiAJCWlmIChzaG93X2RhbmdsaW5nKQogCQkJcHJpbnRmKCJkYW5nbGluZyAlcyAlc1xuIiwgdHlwZW5hbWUob2JqLT50eXBlKSwKLQkJCSAgICAgICBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCQkJICAgICAgIGRlc2NyaWJlX29iamVjdChvYmopKTsKIAkJaWYgKHdyaXRlX2xvc3RfYW5kX2ZvdW5kKSB7CiAJCQljaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoZHVwKCJsb3N0LWZvdW5kLyVzLyVzIiwKIAkJCQlvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCA/ICJjb21taXQiIDogIm90aGVyIiwKLQkJCQlvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCQkJCWRlc2NyaWJlX29iamVjdChvYmopKTsKIAkJCUZJTEUgKmY7CiAKIAkJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGZpbGVuYW1lKSkgewpAQCAtMjUyLDcgKzI3MSw3IEBACiAJCQkJaWYgKHN0cmVhbV9ibG9iX3RvX2ZkKGZpbGVubyhmKSwgb2JqLT5vaWQuaGFzaCwgTlVMTCwgMSkpCiAJCQkJCWRpZV9lcnJubygiQ291bGQgbm90IHdyaXRlICclcyciLCBmaWxlbmFtZSk7CiAJCQl9IGVsc2UKLQkJCQlmcHJpbnRmKGYsICIlc1xuIiwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKwkJCQlmcHJpbnRmKGYsICIlc1xuIiwgZGVzY3JpYmVfb2JqZWN0KG9iaikpOwogCQkJaWYgKGZjbG9zZShmKSkKIAkJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBmaW5pc2ggJyVzJyIsCiAJCQkJCSAgZmlsZW5hbWUpOwpAQCAtMjcxLDcgKzI5MCw3IEBACiBzdGF0aWMgdm9pZCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQogewogCWlmICh2ZXJib3NlKQotCQlmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nICVzXG4iLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCQlmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nICVzXG4iLCBkZXNjcmliZV9vYmplY3Qob2JqKSk7CiAKIAlpZiAob2JqLT5mbGFncyAmIFJFQUNIQUJMRSkKIAkJY2hlY2tfcmVhY2hhYmxlX29iamVjdChvYmopOwpAQCAtMzA3LDcgKzMyNiw3IEBACiAKIAlpZiAodmVyYm9zZSkKIAkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyAlcyAlc1xuIiwKLQkJCXR5cGVuYW1lKG9iai0+dHlwZSksIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJCQl0eXBlbmFtZShvYmotPnR5cGUpLCBkZXNjcmliZV9vYmplY3Qob2JqKSk7CiAKIAlpZiAoZnNja193YWxrKG9iaiwgTlVMTCwgJmZzY2tfb2JqX29wdGlvbnMpKQogCQlvYmplcnJvcihvYmosICJicm9rZW4gbGlua3MiKTsKQEAgLTMyNiwxNSArMzQ1LDE3IEBACiAJCWZyZWVfY29tbWl0X2J1ZmZlcihjb21taXQpOwogCiAJCWlmICghY29tbWl0LT5wYXJlbnRzICYmIHNob3dfcm9vdCkKLQkJCXByaW50Zigicm9vdCAlc1xuIiwgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCQlwcmludGYoInJvb3QgJXNcbiIsIGRlc2NyaWJlX29iamVjdCgmY29tbWl0LT5vYmplY3QpKTsKIAl9CiAKIAlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKIAkJc3RydWN0IHRhZyAqdGFnID0gKHN0cnVjdCB0YWcgKikgb2JqOwogCiAJCWlmIChzaG93X3RhZ3MgJiYgdGFnLT50YWdnZWQpIHsKLQkJCXByaW50ZigidGFnZ2VkICVzICVzIiwgdHlwZW5hbWUodGFnLT50YWdnZWQtPnR5cGUpLCBvaWRfdG9faGV4KCZ0YWctPnRhZ2dlZC0+b2lkKSk7Ci0JCQlwcmludGYoIiAoJXMpIGluICVzXG4iLCB0YWctPnRhZywgb2lkX3RvX2hleCgmdGFnLT5vYmplY3Qub2lkKSk7CisJCQlwcmludGYoInRhZ2dlZCAlcyAlcyIsIHR5cGVuYW1lKHRhZy0+dGFnZ2VkLT50eXBlKSwKKwkJCQlkZXNjcmliZV9vYmplY3QodGFnLT50YWdnZWQpKTsKKwkJCXByaW50ZigiICglcykgaW4gJXNcbiIsIHRhZy0+dGFnLAorCQkJCWRlc2NyaWJlX29iamVjdCgmdGFnLT5vYmplY3QpKTsKIAkJfQogCX0KIApAQCAtMzU2LDYgKzM3NywxMCBAQAogc3RhdGljIGludCBmc2NrX29ial9idWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAogCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpidWZmZXIsIGludCAqZWF0ZW4pCiB7CisJLyoKKwkgKiBOb3RlLCBidWZmZXIgbWF5IGJlIE5VTEwgaWYgdHlwZSBpcyBPQkpfQkxPQi4gU2VlCisJICogdmVyaWZ5X3BhY2tmaWxlKCksIGRhdGFfdmFsaWQgdmFyaWFibGUgZm9yIGRldGFpbHMuCisJICovCiAJc3RydWN0IG9iamVjdCAqb2JqOwogCW9iaiA9IHBhcnNlX29iamVjdF9idWZmZXIoc2hhMSwgdHlwZSwgc2l6ZSwgYnVmZmVyLCBlYXRlbik7CiAJaWYgKCFvYmopIHsKQEAgLTM2OCwxMyArMzkzLDE4IEBACiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9yZWZzOwogCi1zdGF0aWMgdm9pZCBmc2NrX2hhbmRsZV9yZWZsb2dfc2hhMShjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQorc3RhdGljIHZvaWQgZnNja19oYW5kbGVfcmVmbG9nX3NoYTEoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSwKKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCkKIHsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CiAKIAlpZiAoIWlzX251bGxfc2hhMShzaGExKSkgewogCQlvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOwogCQlpZiAob2JqKSB7CisJCQlpZiAodGltZXN0YW1wICYmIG5hbWVfb2JqZWN0cykKKwkJCQlhZGRfZGVjb3JhdGlvbihmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMsCisJCQkJCW9iaiwKKwkJCQkJeHN0cmZtdCgiJXNAeyVsZH0iLCByZWZuYW1lLCB0aW1lc3RhbXApKTsKIAkJCW9iai0+dXNlZCA9IDE7CiAJCQltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKIAkJfSBlbHNlIHsKQEAgLTM5NCw4ICs0MjQsOCBAQAogCQlmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nIHJlZmxvZyAlcy0+JXNcbiIsCiAJCQlzaGExX3RvX2hleChvc2hhMSksIHNoYTFfdG9faGV4KG5zaGExKSk7CiAKLQlmc2NrX2hhbmRsZV9yZWZsb2dfc2hhMShyZWZuYW1lLCBvc2hhMSk7Ci0JZnNja19oYW5kbGVfcmVmbG9nX3NoYTEocmVmbmFtZSwgbnNoYTEpOworCWZzY2tfaGFuZGxlX3JlZmxvZ19zaGExKHJlZm5hbWUsIG9zaGExLCAwKTsKKwlmc2NrX2hhbmRsZV9yZWZsb2dfc2hhMShyZWZuYW1lLCBuc2hhMSwgdGltZXN0YW1wKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDI0LDYgKzQ1NCw5IEBACiAJfQogCWRlZmF1bHRfcmVmcysrOwogCW9iai0+dXNlZCA9IDE7CisJaWYgKG5hbWVfb2JqZWN0cykKKwkJYWRkX2RlY29yYXRpb24oZnNja193YWxrX29wdGlvbnMub2JqZWN0X25hbWVzLAorCQkJb2JqLCB4c3RyZHVwKHJlZm5hbWUpKTsKIAltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKIAogCXJldHVybiAwOwpAQCAtNTM5LDYgKzU3Miw5IEBACiAJCQlyZXR1cm4gMTsKIAkJfQogCQlvYmotPnVzZWQgPSAxOworCQlpZiAobmFtZV9vYmplY3RzKQorCQkJYWRkX2RlY29yYXRpb24oZnNja193YWxrX29wdGlvbnMub2JqZWN0X25hbWVzLAorCQkJCW9iaiwgeHN0cmR1cCgiOiIpKTsKIAkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CiAJCWlmIChvYmotPnR5cGUgIT0gT0JKX1RSRUUpCiAJCQllcnIgfD0gb2JqZXJyb3Iob2JqLCAibm9uLXRyZWUgaW4gY2FjaGUtdHJlZSIpOwpAQCAtNTY3LDYgKzYwMyw3IEBACiAJT1BUX0JPT0woMCwgImxvc3QtZm91bmQiLCAmd3JpdGVfbG9zdF9hbmRfZm91bmQsCiAJCQkJTl8oIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIikpLAogCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZzaG93X3Byb2dyZXNzLCBOXygic2hvdyBwcm9ncmVzcyIpKSwKKwlPUFRfQk9PTCgwLCAibmFtZS1vYmplY3RzIiwgJm5hbWVfb2JqZWN0cywgTl8oInNob3cgdmVyYm9zZSBuYW1lcyBmb3IgcmVhY2hhYmxlIG9iamVjdHMiKSksCiAJT1BUX0VORCgpLAogfTsKIApAQCAtNTk2LDYgKzYzMywxMCBAQAogCQlpbmNsdWRlX3JlZmxvZ3MgPSAwOwogCX0KIAorCWlmIChuYW1lX29iamVjdHMpCisJCWZzY2tfd2Fsa19vcHRpb25zLm9iamVjdF9uYW1lcyA9CisJCQl4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGVjb3JhdGlvbikpOworCiAJZ2l0X2NvbmZpZyhmc2NrX2NvbmZpZywgTlVMTCk7CiAKIAlmc2NrX2hlYWRfbGluaygpOwpAQCAtNjUxLDYgKzY5Miw5IEBACiAJCQkJY29udGludWU7CiAKIAkJCW9iai0+dXNlZCA9IDE7CisJCQlpZiAobmFtZV9vYmplY3RzKQorCQkJCWFkZF9kZWNvcmF0aW9uKGZzY2tfd2Fsa19vcHRpb25zLm9iamVjdF9uYW1lcywKKwkJCQkJb2JqLCB4c3RyZHVwKGFyZykpOwogCQkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CiAJCQloZWFkcysrOwogCQkJY29udGludWU7CkBAIC02ODMsNiArNzI3LDEwIEBACiAJCQkJY29udGludWU7CiAJCQlvYmogPSAmYmxvYi0+b2JqZWN0OwogCQkJb2JqLT51c2VkID0gMTsKKwkJCWlmIChuYW1lX29iamVjdHMpCisJCQkJYWRkX2RlY29yYXRpb24oZnNja193YWxrX29wdGlvbnMub2JqZWN0X25hbWVzLAorCQkJCQlvYmosCisJCQkJCXhzdHJmbXQoIjolcyIsIGFjdGl2ZV9jYWNoZVtpXS0+bmFtZSkpOwogCQkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CiAJCX0KIAkJaWYgKGFjdGl2ZV9jYWNoZV90cmVlKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9nYy5jIGIvYnVpbHRpbi9nYy5jCmluZGV4IGM1ODNhYWQuLjMzMmJjZjdlIDEwMDY0NAotLS0gYS9idWlsdGluL2djLmMKKysrIGIvYnVpbHRpbi9nYy5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJICovCiAJCWNudCsrOwogCX0KLQlyZXR1cm4gZ2NfYXV0b19wYWNrX2xpbWl0IDw9IGNudDsKKwlyZXR1cm4gZ2NfYXV0b19wYWNrX2xpbWl0IDwgY250OwogfQogCiBzdGF0aWMgdm9pZCBhZGRfcmVwYWNrX2FsbF9vcHRpb24odm9pZCkKZGlmZiAtLWdpdCBhL2J1aWx0aW4vZ3JlcC5jIGIvYnVpbHRpbi9ncmVwLmMKaW5kZXggNDYyZTYwNy4uYWU3MzgzMSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9ncmVwLmMKKysrIGIvYnVpbHRpbi9ncmVwLmMKQEAgLTM4Niw3ICszODYsNyBAQAogCiAJZm9yIChuciA9IDA7IG5yIDwgYWN0aXZlX25yOyBucisrKSB7CiAJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbbnJdOwotCQlpZiAoIVNfSVNSRUcoY2UtPmNlX21vZGUpIHx8IGNlX2ludGVudF90b19hZGQoY2UpKQorCQlpZiAoIVNfSVNSRUcoY2UtPmNlX21vZGUpKQogCQkJY29udGludWU7CiAJCWlmICghY2VfcGF0aF9tYXRjaChjZSwgcGF0aHNwZWMsIE5VTEwpKQogCQkJY29udGludWU7CkBAIC0zOTYsNyArMzk2LDcgQEAKIAkJICogY2FjaGUgdmVyc2lvbiBpbnN0ZWFkCiAJCSAqLwogCQlpZiAoY2FjaGVkIHx8IChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkgfHwgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKLQkJCWlmIChjZV9zdGFnZShjZSkpCisJCQlpZiAoY2Vfc3RhZ2UoY2UpIHx8IGNlX2ludGVudF90b19hZGQoY2UpKQogCQkJCWNvbnRpbnVlOwogCQkJaGl0IHw9IGdyZXBfc2hhMShvcHQsIGNlLT5zaGExLCBjZS0+bmFtZSwgMCwgY2UtPm5hbWUpOwogCQl9CmRpZmYgLS1naXQgYS9idWlsdGluL2luZGV4LXBhY2suYyBiL2J1aWx0aW4vaW5kZXgtcGFjay5jCmluZGV4IGU4YzcxZmMuLjFkMmVhNTggMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vaW5kZXgtcGFjay5jCisrKyBiL2J1aWx0aW4vaW5kZXgtcGFjay5jCkBAIC03Nyw2ICs3Nyw3IEBACiBzdGF0aWMgaW50IGRvX2ZzY2tfb2JqZWN0Owogc3RhdGljIHN0cnVjdCBmc2NrX29wdGlvbnMgZnNja19vcHRpb25zID0gRlNDS19PUFRJT05TX1NUUklDVDsKIHN0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgc2hvd19yZXNvbHZpbmdfcHJvZ3Jlc3M7CiBzdGF0aWMgaW50IHNob3dfc3RhdDsKIHN0YXRpYyBpbnQgY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZDsKIApAQCAtMzM4LDEwICszMzksMTAgQEAKIAl1c2Uoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikpOwogfQogCi1zdGF0aWMgTk9SRVRVUk4gdm9pZCBiYWRfb2JqZWN0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjb25zdCBjaGFyICpmb3JtYXQsCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBiYWRfb2JqZWN0KG9mZl90IG9mZnNldCwgY29uc3QgY2hhciAqZm9ybWF0LAogCQkgICAgICAgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKIAotc3RhdGljIE5PUkVUVVJOIHZvaWQgYmFkX29iamVjdCh1bnNpZ25lZCBsb25nIG9mZnNldCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBiYWRfb2JqZWN0KG9mZl90IG9mZnNldCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAJdmFfbGlzdCBwYXJhbXM7CiAJY2hhciBidWZbMTAyNF07CkBAIC0zNDksNyArMzUwLDggQEAKIAl2YV9zdGFydChwYXJhbXMsIGZvcm1hdCk7CiAJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgcGFyYW1zKTsKIAl2YV9lbmQocGFyYW1zKTsKLQlkaWUoXygicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJWx1OiAlcyIpLCBvZmZzZXQsIGJ1Zik7CisJZGllKF8oInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICUiUFJJdU1BWCI6ICVzIiksCisJICAgICh1aW50bWF4X3Qpb2Zmc2V0LCBidWYpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfbG9jYWwgKmdldF90aHJlYWRfZGF0YSh2b2lkKQpAQCAtNDI5LDcgKzQzMSw3IEBACiAJcmV0dXJuICh0eXBlID09IE9CSl9SRUZfREVMVEEgfHwgdHlwZSA9PSBPQkpfT0ZTX0RFTFRBKTsKIH0KIAotc3RhdGljIHZvaWQgKnVucGFja19lbnRyeV9kYXRhKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCitzdGF0aWMgdm9pZCAqdW5wYWNrX2VudHJ5X2RhdGEob2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkgICAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCXN0YXRpYyBjaGFyIGZpeGVkX2J1Zls4MTkyXTsKQEAgLTU0OSwxMyArNTUxLDEzIEBACiAJCQkgdm9pZCAqY2JfZGF0YSkKIHsKIAlvZmZfdCBmcm9tID0gb2JqWzBdLmlkeC5vZmZzZXQgKyBvYmpbMF0uaGRyX3NpemU7Ci0JdW5zaWduZWQgbG9uZyBsZW4gPSBvYmpbMV0uaWR4Lm9mZnNldCAtIGZyb207CisJb2ZmX3QgbGVuID0gb2JqWzFdLmlkeC5vZmZzZXQgLSBmcm9tOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEsICppbmJ1ZjsKIAlnaXRfenN0cmVhbSBzdHJlYW07CiAJaW50IHN0YXR1czsKIAogCWRhdGEgPSB4bWFsbG9jeihjb25zdW1lID8gNjQqMTAyNCA6IG9iai0+c2l6ZSk7Ci0JaW5idWYgPSB4bWFsbG9jKChsZW4gPCA2NCoxMDI0KSA/IGxlbiA6IDY0KjEwMjQpOworCWluYnVmID0geG1hbGxvYygobGVuIDwgNjQqMTAyNCkgPyAoaW50KWxlbiA6IDY0KjEwMjQpOwogCiAJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKIAlnaXRfaW5mbGF0ZV9pbml0KCZzdHJlYW0pOwpAQCAtNTYzLDE1ICs1NjUsMTUgQEAKIAlzdHJlYW0uYXZhaWxfb3V0ID0gY29uc3VtZSA/IDY0KjEwMjQgOiBvYmotPnNpemU7CiAKIAlkbyB7Ci0JCXNzaXplX3QgbiA9IChsZW4gPCA2NCoxMDI0KSA/IGxlbiA6IDY0KjEwMjQ7CisJCXNzaXplX3QgbiA9IChsZW4gPCA2NCoxMDI0KSA/IChzc2l6ZV90KWxlbiA6IDY0KjEwMjQ7CiAJCW4gPSB4cHJlYWQoZ2V0X3RocmVhZF9kYXRhKCktPnBhY2tfZmQsIGluYnVmLCBuLCBmcm9tKTsKIAkJaWYgKG4gPCAwKQogCQkJZGllX2Vycm5vKF8oImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiKSk7CiAJCWlmICghbikKLQkJCWRpZShRXygicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlIG1pc3NpbmciLAotCQkJICAgICAgICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGVzIG1pc3NpbmciLAotCQkJICAgICAgIGxlbiksCi0JCQkgICAgbGVuKTsKKwkJCWRpZShRXygicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICUiUFJJdU1BWCIgYnl0ZSBtaXNzaW5nIiwKKwkJCSAgICAgICAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICUiUFJJdU1BWCIgYnl0ZXMgbWlzc2luZyIsCisJCQkgICAgICAgKHVuc2lnbmVkIGludClsZW4pLAorCQkJICAgICh1aW50bWF4X3QpbGVuKTsKIAkJZnJvbSArPSBuOwogCQlsZW4gLT0gbjsKIAkJc3RyZWFtLm5leHRfaW4gPSBpbmJ1ZjsKQEAgLTExOTAsNyArMTE5Miw3IEBACiAJcXNvcnQocmVmX2RlbHRhcywgbnJfcmVmX2RlbHRhcywgc2l6ZW9mKHN0cnVjdCByZWZfZGVsdGFfZW50cnkpLAogCSAgICAgIGNvbXBhcmVfcmVmX2RlbHRhX2VudHJ5KTsKIAotCWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3NlIHx8IHNob3dfcmVzb2x2aW5nX3Byb2dyZXNzKQogCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIlJlc29sdmluZyBkZWx0YXMiKSwKIAkJCQkJICBucl9yZWZfZGVsdGFzICsgbnJfb2ZzX2RlbHRhcyk7CiAKQEAgLTE2MjUsNiArMTYyNyw3IEBACiAJc3RydWN0IHBhY2tfaWR4X29wdGlvbiBvcHRzOwogCXVuc2lnbmVkIGNoYXIgcGFja19zaGExWzIwXTsKIAl1bnNpZ25lZCBmb3JlaWduX25yID0gMTsJLyogemVybyBpcyBhICJnb29kIiB2YWx1ZSwgYXNzdW1lIGJhZCAqLworCWludCByZXBvcnRfZW5kX29mX2lucHV0ID0gMDsKIAogCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKIAkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CkBAIC0xNjk0LDYgKzE2OTcsMTAgQEAKIAkJCQlpbnB1dF9sZW4gPSBzaXplb2YoKmhkcik7CiAJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXYiKSkgewogCQkJCXZlcmJvc2UgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1yZXNvbHZpbmctcHJvZ3Jlc3MiKSkgeworCQkJCXNob3dfcmVzb2x2aW5nX3Byb2dyZXNzID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlcG9ydC1lbmQtb2YtaW5wdXQiKSkgeworCQkJCXJlcG9ydF9lbmRfb2ZfaW5wdXQgPSAxOwogCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi1vIikpIHsKIAkJCQlpZiAoaW5kZXhfbmFtZSB8fCAoaSsxKSA+PSBhcmdjKQogCQkJCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKQEAgLTE3NTEsNiArMTc1OCw4IEBACiAJCW9ial9zdGF0ID0geGNhbGxvYyhzdF9hZGQobnJfb2JqZWN0cywgMSksIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X3N0YXQpKTsKIAlvZnNfZGVsdGFzID0geGNhbGxvYyhucl9vYmplY3RzLCBzaXplb2Yoc3RydWN0IG9mc19kZWx0YV9lbnRyeSkpOwogCXBhcnNlX3BhY2tfb2JqZWN0cyhwYWNrX3NoYTEpOworCWlmIChyZXBvcnRfZW5kX29mX2lucHV0KQorCQl3cml0ZV9pbl9mdWxsKDIsICJcMCIsIDEpOwogCXJlc29sdmVfZGVsdGFzKCk7CiAJY29uY2x1ZGVfcGFjayhmaXhfdGhpbl9wYWNrLCBjdXJyX3BhY2ssIHBhY2tfc2hhMSk7CiAJZnJlZShvZnNfZGVsdGFzKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vaW5pdC1kYi5jIGIvYnVpbHRpbi9pbml0LWRiLmMKaW5kZXggYjJkOGQ0MC4uM2E0NWYwYiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9pbml0LWRiLmMKKysrIGIvYnVpbHRpbi9pbml0LWRiLmMKQEAgLTM5NywxMyArMzk3LDE2IEBACiAJaWYgKCEoZmxhZ3MgJiBJTklUX0RCX1FVSUVUKSkgewogCQlpbnQgbGVuID0gc3RybGVuKGdpdF9kaXIpOwogCi0JCS8qIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJyVzJyBpcyBlaXRoZXIgIlJlaW5pdGlhbGl6ZWQKLQkJICAgZXhpc3RpbmciIG9yICJJbml0aWFsaXplZCBlbXB0eSIsIHRoZSBzZWNvbmQgIiBzaGFyZWQiIG9yCi0JCSAgICIiLCBhbmQgdGhlIGxhc3QgJyVzJXMnIGlzIHRoZSB2ZXJiYXRpbSBkaXJlY3RvcnkgbmFtZS4gKi8KLQkJcHJpbnRmKF8oIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIiksCi0JCSAgICAgICByZWluaXQgPyBfKCJSZWluaXRpYWxpemVkIGV4aXN0aW5nIikgOiBfKCJJbml0aWFsaXplZCBlbXB0eSIpLAotCQkgICAgICAgZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkgPyBfKCIgc2hhcmVkIikgOiAiIiwKLQkJICAgICAgIGdpdF9kaXIsIGxlbiAmJiBnaXRfZGlyW2xlbi0xXSAhPSAnLycgPyAiLyIgOiAiIik7CisJCWlmIChyZWluaXQpCisJCQlwcmludGYoZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkKKwkJCSAgICAgICA/IF8oIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIpCisJCQkgICAgICAgOiBfKCJSZWluaXRpYWxpemVkIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIpLAorCQkJICAgICAgIGdpdF9kaXIsIGxlbiAmJiBnaXRfZGlyW2xlbi0xXSAhPSAnLycgPyAiLyIgOiAiIik7CisJCWVsc2UKKwkJCXByaW50ZihnZXRfc2hhcmVkX3JlcG9zaXRvcnkoKQorCQkJICAgICAgID8gXygiSW5pdGlhbGl6ZWQgZW1wdHkgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIpCisJCQkgICAgICAgOiBfKCJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iKSwKKwkJCSAgICAgICBnaXRfZGlyLCBsZW4gJiYgZ2l0X2RpcltsZW4tMV0gIT0gJy8nID8gIi8iIDogIiIpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYyBiL2J1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmMKaW5kZXggYjk5YWU0Yi4uMTc1ZjE0NyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYworKysgYi9idWlsdGluL2ludGVycHJldC10cmFpbGVycy5jCkBAIC0yMCw3ICsyMCw3IEBACiB7CiAJaW50IGluX3BsYWNlID0gMDsKIAlpbnQgdHJpbV9lbXB0eSA9IDA7Ci0Jc3RydWN0IHN0cmluZ19saXN0IHRyYWlsZXJzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IHRyYWlsZXJzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKIAogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCQlPUFRfQk9PTCgwLCAiaW4tcGxhY2UiLCAmaW5fcGxhY2UsIE5fKCJlZGl0IGZpbGVzIGluIHBsYWNlIikpLApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9sb2cuYyBiL2J1aWx0aW4vbG9nLmMKaW5kZXggZTM2NDU3Mi4uOTJkYzM0ZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9sb2cuYworKysgYi9idWlsdGluL2xvZy5jCkBAIC0zMyw2ICszMyw3IEBACiBzdGF0aWMgaW50IGRlZmF1bHRfYWJicmV2X2NvbW1pdDsKIHN0YXRpYyBpbnQgZGVmYXVsdF9zaG93X3Jvb3QgPSAxOwogc3RhdGljIGludCBkZWZhdWx0X2ZvbGxvdzsKK3N0YXRpYyBpbnQgZGVmYXVsdF9zaG93X3NpZ25hdHVyZTsKIHN0YXRpYyBpbnQgZGVjb3JhdGlvbl9zdHlsZTsKIHN0YXRpYyBpbnQgZGVjb3JhdGlvbl9naXZlbjsKIHN0YXRpYyBpbnQgdXNlX21haWxtYXBfY29uZmlnOwpAQCAtMTE5LDYgKzEyMCw3IEBACiAJcmV2LT5hYmJyZXZfY29tbWl0ID0gZGVmYXVsdF9hYmJyZXZfY29tbWl0OwogCXJldi0+c2hvd19yb290X2RpZmYgPSBkZWZhdWx0X3Nob3dfcm9vdDsKIAlyZXYtPnN1YmplY3RfcHJlZml4ID0gZm10X3BhdGNoX3N1YmplY3RfcHJlZml4OworCXJldi0+c2hvd19zaWduYXR1cmUgPSBkZWZhdWx0X3Nob3dfc2lnbmF0dXJlOwogCURJRkZfT1BUX1NFVCgmcmV2LT5kaWZmb3B0LCBBTExPV19URVhUQ09OVik7CiAKIAlpZiAoZGVmYXVsdF9kYXRlX21vZGUpCkBAIC0yMzYsMTYgKzIzOCwxNyBAQAogCQlpZiAocmV2LT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUpCiAJCQlwdXRjaGFyKHJldi0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uKTsKIAl9Ci0JcHJpbnRmKF8oIkZpbmFsIG91dHB1dDogJWQgJXNcbiIpLCBuciwgc3RhZ2UpOworCWZwcmludGYocmV2LT5kaWZmb3B0LmZpbGUsIF8oIkZpbmFsIG91dHB1dDogJWQgJXNcbiIpLCBuciwgc3RhZ2UpOwogfQogCiBzdGF0aWMgc3RydWN0IGl0aW1lcnZhbCBlYXJseV9vdXRwdXRfdGltZXI7CiAKIHN0YXRpYyB2b2lkIGxvZ19zaG93X2Vhcmx5KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQogewotCWludCBpID0gcmV2cy0+ZWFybHlfb3V0cHV0OworCWludCBpID0gcmV2cy0+ZWFybHlfb3V0cHV0LCBjbG9zZV9maWxlID0gcmV2cy0+ZGlmZm9wdC5jbG9zZV9maWxlOwogCWludCBzaG93X2hlYWRlciA9IDE7CiAKKwlyZXZzLT5kaWZmb3B0LmNsb3NlX2ZpbGUgPSAwOwogCXNvcnRfaW5fdG9wb2xvZ2ljYWxfb3JkZXIoJmxpc3QsIHJldnMtPnNvcnRfb3JkZXIpOwogCXdoaWxlIChsaXN0ICYmIGkpIHsKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKQEAgLTI2MiwxNCArMjY1LDE5IEBACiAJCWNhc2UgY29tbWl0X2lnbm9yZToKIAkJCWJyZWFrOwogCQljYXNlIGNvbW1pdF9lcnJvcjoKKwkJCWlmIChjbG9zZV9maWxlKQorCQkJCWZjbG9zZShyZXZzLT5kaWZmb3B0LmZpbGUpOwogCQkJcmV0dXJuOwogCQl9CiAJCWxpc3QgPSBsaXN0LT5uZXh0OwogCX0KIAogCS8qIERpZCB3ZSBhbHJlYWR5IGdldCBlbm91Z2ggY29tbWl0cyBmb3IgdGhlIGVhcmx5IG91dHB1dD8gKi8KLQlpZiAoIWkpCisJaWYgKCFpKSB7CisJCWlmIChjbG9zZV9maWxlKQorCQkJZmNsb3NlKHJldnMtPmRpZmZvcHQuZmlsZSk7CiAJCXJldHVybjsKKwl9CiAKIAkvKgogCSAqIC4uaWYgbm8sIHRoZW4gcmVwZWF0IGl0IHR3aWNlIGEgc2Vjb25kIHVudGlsIHdlCkBAIC0zMzEsNyArMzM5LDcgQEAKIHsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAJaW50IHNhdmVkX25ybCA9IDA7Ci0JaW50IHNhdmVkX2RjY3RjID0gMDsKKwlpbnQgc2F2ZWRfZGNjdGMgPSAwLCBjbG9zZV9maWxlID0gcmV2LT5kaWZmb3B0LmNsb3NlX2ZpbGU7CiAKIAlpZiAocmV2LT5lYXJseV9vdXRwdXQpCiAJCXNldHVwX2Vhcmx5X291dHB1dChyZXYpOwpAQCAtMzQ3LDYgKzM1NSw3IEBACiAJICogYW5kIEhBU19DSEFOR0VTIGJlaW5nIGFjY3VtdWxhdGVkIGluIHJldi0+ZGlmZm9wdCwgc28gYmUgY2FyZWZ1bCB0bwogCSAqIHJldGFpbiB0aGF0IHN0YXRlIGluZm9ybWF0aW9uIGlmIHJlcGxhY2luZyByZXYtPmRpZmZvcHQgaW4gdGhpcyBsb29wCiAJICovCisJcmV2LT5kaWZmb3B0LmNsb3NlX2ZpbGUgPSAwOwogCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldikpICE9IE5VTEwpIHsKIAkJaWYgKCFsb2dfdHJlZV9jb21taXQocmV2LCBjb21taXQpICYmIHJldi0+bWF4X2NvdW50ID49IDApCiAJCQkvKgpAQCAtMzY3LDYgKzM3Niw4IEBACiAJfQogCXJldi0+ZGlmZm9wdC5kZWdyYWRlZF9jY190b19jID0gc2F2ZWRfZGNjdGM7CiAJcmV2LT5kaWZmb3B0Lm5lZWRlZF9yZW5hbWVfbGltaXQgPSBzYXZlZF9ucmw7CisJaWYgKGNsb3NlX2ZpbGUpCisJCWZjbG9zZShyZXYtPmRpZmZvcHQuZmlsZSk7CiAKIAlpZiAocmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9DSEVDS0RJRkYgJiYKIAkgICAgRElGRl9PUFRfVFNUKCZyZXYtPmRpZmZvcHQsIENIRUNLX0ZBSUxFRCkpIHsKQEAgLTQwOSw2ICs0MjAsMTAgQEAKIAkJdXNlX21haWxtYXBfY29uZmlnID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKCFzdHJjbXAodmFyLCAibG9nLnNob3dzaWduYXR1cmUiKSkgeworCQlkZWZhdWx0X3Nob3dfc2lnbmF0dXJlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CiAKIAlpZiAoZ3JlcF9jb25maWcodmFyLCB2YWx1ZSwgY2IpIDwgMCkKIAkJcmV0dXJuIC0xOwpAQCAtNDQ1LDcgKzQ2MCw3IEBACiAJcHAuZm10ID0gcmV2LT5jb21taXRfZm9ybWF0OwogCXBwLmRhdGVfbW9kZSA9IHJldi0+ZGF0ZV9tb2RlOwogCXBwX3VzZXJfaW5mbygmcHAsICJUYWdnZXIiLCAmb3V0LCBidWYsIGdldF9sb2dfb3V0cHV0X2VuY29kaW5nKCkpOwotCXByaW50ZigiJXMiLCBvdXQuYnVmKTsKKwlmcHJpbnRmKHJldi0+ZGlmZm9wdC5maWxlLCAiJXMiLCBvdXQuYnVmKTsKIAlzdHJidWZfcmVsZWFzZSgmb3V0KTsKIH0KIApAQCAtNDU2LDcgKzQ3MSw3IEBACiAJY2hhciAqYnVmOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAotCWZmbHVzaChzdGRvdXQpOworCWZmbHVzaChyZXYtPmRpZmZvcHQuZmlsZSk7CiAJaWYgKCFESUZGX09QVF9UT1VDSEVEKCZyZXYtPmRpZmZvcHQsIEFMTE9XX1RFWFRDT05WKSB8fAogCSAgICAhRElGRl9PUFRfVFNUKCZyZXYtPmRpZmZvcHQsIEFMTE9XX1RFWFRDT05WKSkKIAkJcmV0dXJuIHN0cmVhbV9ibG9iX3RvX2ZkKDEsIHNoYTEsIE5VTEwsIDApOwpAQCAtNDk2LDcgKzUxMSw3IEBACiAJfQogCiAJaWYgKG9mZnNldCA8IHNpemUpCi0JCWZ3cml0ZShidWYgKyBvZmZzZXQsIHNpemUgLSBvZmZzZXQsIDEsIHN0ZG91dCk7CisJCWZ3cml0ZShidWYgKyBvZmZzZXQsIHNpemUgLSBvZmZzZXQsIDEsIHJldi0+ZGlmZm9wdC5maWxlKTsKIAlmcmVlKGJ1Zik7CiAJcmV0dXJuIDA7CiB9CkBAIC01MDUsNyArNTIwLDggQEAKIAkJc3RydWN0IHN0cmJ1ZiAqYmFzZSwKIAkJY29uc3QgY2hhciAqcGF0aG5hbWUsIHVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwgdm9pZCAqY29udGV4dCkKIHsKLQlwcmludGYoIiVzJXNcbiIsIHBhdGhuYW1lLCBTX0lTRElSKG1vZGUpID8gIi8iIDogIiIpOworCUZJTEUgKmZpbGUgPSBjb250ZXh0OworCWZwcmludGYoZmlsZSwgIiVzJXNcbiIsIHBhdGhuYW1lLCBTX0lTRElSKG1vZGUpID8gIi8iIDogIiIpOwogCXJldHVybiAwOwogfQogCkBAIC01NjUsNyArNTgxLDcgQEAKIAogCQkJaWYgKHJldi5zaG93bl9vbmUpCiAJCQkJcHV0Y2hhcignXG4nKTsKLQkJCXByaW50ZigiJXN0YWcgJXMlc1xuIiwKKwkJCWZwcmludGYocmV2LmRpZmZvcHQuZmlsZSwgIiVzdGFnICVzJXNcbiIsCiAJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfQ09NTUlUKSwKIAkJCQkJdC0+dGFnLAogCQkJCQlkaWZmX2dldF9jb2xvcl9vcHQoJnJldi5kaWZmb3B0LCBESUZGX1JFU0VUKSk7CkBAIC01ODQsMTIgKzYwMCwxMiBAQAogCQljYXNlIE9CSl9UUkVFOgogCQkJaWYgKHJldi5zaG93bl9vbmUpCiAJCQkJcHV0Y2hhcignXG4nKTsKLQkJCXByaW50ZigiJXN0cmVlICVzJXNcblxuIiwKKwkJCWZwcmludGYocmV2LmRpZmZvcHQuZmlsZSwgIiVzdHJlZSAlcyVzXG5cbiIsCiAJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfQ09NTUlUKSwKIAkJCQkJbmFtZSwKIAkJCQkJZGlmZl9nZXRfY29sb3Jfb3B0KCZyZXYuZGlmZm9wdCwgRElGRl9SRVNFVCkpOwogCQkJcmVhZF90cmVlX3JlY3Vyc2l2ZSgoc3RydWN0IHRyZWUgKilvLCAiIiwgMCwgMCwgJm1hdGNoX2FsbCwKLQkJCQkJc2hvd190cmVlX29iamVjdCwgTlVMTCk7CisJCQkJCXNob3dfdHJlZV9vYmplY3QsIHJldi5kaWZmb3B0LmZpbGUpOwogCQkJcmV2LnNob3duX29uZSA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPQkpfQ09NTUlUOgpAQCAtNjc0LDkgKzY5MCw5IEBACiAKIHN0YXRpYyBjaGFyICpkZWZhdWx0X2F0dGFjaCA9IE5VTEw7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfaGRyOwotc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBleHRyYV90bzsKLXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfY2M7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGV4dHJhX2hkciA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGV4dHJhX3RvID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfY2MgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwogCiBzdGF0aWMgdm9pZCBhZGRfaGVhZGVyKGNvbnN0IGNoYXIgKnZhbHVlKQogewpAQCAtNzAzLDYgKzcxOSw3IEBACiBzdGF0aWMgaW50IHRocmVhZDsKIHN0YXRpYyBpbnQgZG9fc2lnbm9mZjsKIHN0YXRpYyBpbnQgYmFzZV9hdXRvOworc3RhdGljIGNoYXIgKmZyb207CiBzdGF0aWMgY29uc3QgY2hhciAqc2lnbmF0dXJlID0gZ2l0X3ZlcnNpb25fc3RyaW5nOwogc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25hdHVyZV9maWxlOwogc3RhdGljIGludCBjb25maWdfY292ZXJfbGV0dGVyOwpAQCAtNzkxLDE1ICs4MDgsMjUgQEAKIAkJYmFzZV9hdXRvID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LmZyb20iKSkgeworCQlpbnQgYiA9IGdpdF9jb25maWdfbWF5YmVfYm9vbCh2YXIsIHZhbHVlKTsKKwkJZnJlZShmcm9tKTsKKwkJaWYgKGIgPCAwKQorCQkJZnJvbSA9IHhzdHJkdXAodmFsdWUpOworCQllbHNlIGlmIChiKQorCQkJZnJvbSA9IHhzdHJkdXAoZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX05PX0RBVEUpKTsKKwkJZWxzZQorCQkJZnJvbSA9IE5VTEw7CisJCXJldHVybiAwOworCX0KIAogCXJldHVybiBnaXRfbG9nX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKLXN0YXRpYyBGSUxFICpyZWFsc3Rkb3V0ID0gTlVMTDsKIHN0YXRpYyBjb25zdCBjaGFyICpvdXRwdXRfZGlyZWN0b3J5ID0gTlVMTDsKIHN0YXRpYyBpbnQgb3V0ZGlyX29mZnNldDsKIAotc3RhdGljIGludCByZW9wZW5fc3Rkb3V0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqc3ViamVjdCwKK3N0YXRpYyBpbnQgb3Blbl9uZXh0X2ZpbGUoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpzdWJqZWN0LAogCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2LCBpbnQgcXVpZXQpCiB7CiAJc3RydWN0IHN0cmJ1ZiBmaWxlbmFtZSA9IFNUUkJVRl9JTklUOwpAQCAtODIxLDkgKzg0OCw5IEBACiAJCWZtdF9vdXRwdXRfc3ViamVjdCgmZmlsZW5hbWUsIHN1YmplY3QsIHJldik7CiAKIAlpZiAoIXF1aWV0KQotCQlmcHJpbnRmKHJlYWxzdGRvdXQsICIlc1xuIiwgZmlsZW5hbWUuYnVmICsgb3V0ZGlyX29mZnNldCk7CisJCXByaW50ZigiJXNcbiIsIGZpbGVuYW1lLmJ1ZiArIG91dGRpcl9vZmZzZXQpOwogCi0JaWYgKGZyZW9wZW4oZmlsZW5hbWUuYnVmLCAidyIsIHN0ZG91dCkgPT0gTlVMTCkKKwlpZiAoKHJldi0+ZGlmZm9wdC5maWxlID0gZm9wZW4oZmlsZW5hbWUuYnVmLCAidyIpKSA9PSBOVUxMKQogCQlyZXR1cm4gZXJyb3IoXygiQ2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIpLCBmaWxlbmFtZS5idWYpOwogCiAJc3RyYnVmX3JlbGVhc2UoJmZpbGVuYW1lKTsKQEAgLTg4MiwxNSArOTA5LDE1IEBACiAJaW5mby0+bWVzc2FnZV9pZCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X3NpZ25hdHVyZSh2b2lkKQorc3RhdGljIHZvaWQgcHJpbnRfc2lnbmF0dXJlKEZJTEUgKmZpbGUpCiB7CiAJaWYgKCFzaWduYXR1cmUgfHwgISpzaWduYXR1cmUpCiAJCXJldHVybjsKIAotCXByaW50ZigiLS0gXG4lcyIsIHNpZ25hdHVyZSk7CisJZnByaW50ZihmaWxlLCAiLS0gXG4lcyIsIHNpZ25hdHVyZSk7CiAJaWYgKHNpZ25hdHVyZVtzdHJsZW4oc2lnbmF0dXJlKS0xXSAhPSAnXG4nKQotCQlwdXRjaGFyKCdcbicpOwotCXB1dGNoYXIoJ1xuJyk7CisJCXB1dGMoJ1xuJywgZmlsZSk7CisJcHV0YygnXG4nLCBmaWxlKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkX2JyYW5jaF9kZXNjcmlwdGlvbihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lKQpAQCAtOTUzLDEzICs5ODAsMTMgQEAKIAlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgcHAgPSB7MH07CiAJc3RydWN0IGNvbW1pdCAqaGVhZCA9IGxpc3RbMF07CiAKLQlpZiAocmV2LT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX0VNQUlMKQorCWlmICghY21pdF9mbXRfaXNfbWFpbChyZXYtPmNvbW1pdF9mb3JtYXQpKQogCQlkaWUoXygiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIpKTsKIAogCWNvbW1pdHRlciA9IGdpdF9jb21taXR0ZXJfaW5mbygwKTsKIAogCWlmICghdXNlX3N0ZG91dCAmJgotCSAgICByZW9wZW5fc3Rkb3V0KE5VTEwsIHJldi0+bnVtYmVyZWRfZmlsZXMgPyBOVUxMIDogImNvdmVyLWxldHRlciIsIHJldiwgcXVpZXQpKQorCSAgICBvcGVuX25leHRfZmlsZShOVUxMLCByZXYtPm51bWJlcmVkX2ZpbGVzID8gTlVMTCA6ICJjb3Zlci1sZXR0ZXIiLCByZXYsIHF1aWV0KSkKIAkJcmV0dXJuOwogCiAJbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMocmV2LCBoZWFkLCAmcHAuc3ViamVjdCwgJnBwLmFmdGVyX3N1YmplY3QsCkBAIC05ODIsNyArMTAwOSw3IEBACiAJcHBfdGl0bGVfbGluZSgmcHAsICZtc2csICZzYiwgZW5jb2RpbmcsIG5lZWRfOGJpdF9jdGUpOwogCXBwX3JlbWFpbmRlcigmcHAsICZtc2csICZzYiwgMCk7CiAJYWRkX2JyYW5jaF9kZXNjcmlwdGlvbigmc2IsIGJyYW5jaF9uYW1lKTsKLQlwcmludGYoIiVzXG4iLCBzYi5idWYpOworCWZwcmludGYocmV2LT5kaWZmb3B0LmZpbGUsICIlc1xuIiwgc2IuYnVmKTsKIAogCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiAKQEAgLTk5MSw2ICsxMDE4LDcgQEAKIAlsb2cud3JhcCA9IDcyOwogCWxvZy5pbjEgPSAyOwogCWxvZy5pbjIgPSA0OworCWxvZy5maWxlID0gcmV2LT5kaWZmb3B0LmZpbGU7CiAJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCiAJCXNob3J0bG9nX2FkZF9jb21taXQoJmxvZywgbGlzdFtpXSk7CiAKQEAgLTEwMTMsOCArMTA0MSw4IEBACiAJZGlmZmNvcmVfc3RkKCZvcHRzKTsKIAlkaWZmX2ZsdXNoKCZvcHRzKTsKIAotCXByaW50ZigiXG4iKTsKLQlwcmludF9zaWduYXR1cmUoKTsKKwlmcHJpbnRmKHJldi0+ZGlmZm9wdC5maWxlLCAiXG4iKTsKKwlwcmludF9zaWduYXR1cmUocmV2LT5kaWZmb3B0LmZpbGUpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqY2xlYW5fbWVzc2FnZV9pZChjb25zdCBjaGFyICptc2dfaWQpCkBAIC0xMzI0LDcgKzEzNTIsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfYmFzZXMoc3RydWN0IGJhc2VfdHJlZV9pbmZvICpiYXNlcykKK3N0YXRpYyB2b2lkIHByaW50X2Jhc2VzKHN0cnVjdCBiYXNlX3RyZWVfaW5mbyAqYmFzZXMsIEZJTEUgKmZpbGUpCiB7CiAJaW50IGk7CiAKQEAgLTEzMzMsMTEgKzEzNjEsMTEgQEAKIAkJcmV0dXJuOwogCiAJLyogU2hvdyB0aGUgYmFzZSBjb21taXQgKi8KLQlwcmludGYoImJhc2UtY29tbWl0OiAlc1xuIiwgb2lkX3RvX2hleCgmYmFzZXMtPmJhc2VfY29tbWl0KSk7CisJZnByaW50ZihmaWxlLCAiYmFzZS1jb21taXQ6ICVzXG4iLCBvaWRfdG9faGV4KCZiYXNlcy0+YmFzZV9jb21taXQpKTsKIAogCS8qIFNob3cgdGhlIHByZXJlcXVpc2l0ZSBwYXRjaGVzICovCiAJZm9yIChpID0gYmFzZXMtPm5yX3BhdGNoX2lkIC0gMTsgaSA+PSAwOyBpLS0pCi0JCXByaW50ZigicHJlcmVxdWlzaXRlLXBhdGNoLWlkOiAlc1xuIiwgb2lkX3RvX2hleCgmYmFzZXMtPnBhdGNoX2lkW2ldKSk7CisJCWZwcmludGYoZmlsZSwgInByZXJlcXVpc2l0ZS1wYXRjaC1pZDogJXNcbiIsIG9pZF90b19oZXgoJmJhc2VzLT5wYXRjaF9pZFtpXSkpOwogCiAJZnJlZShiYXNlcy0+cGF0Y2hfaWQpOwogCWJhc2VzLT5ucl9wYXRjaF9pZCA9IDA7CkBAIC0xMzY4LDcgKzEzOTYsNiBAQAogCWludCBxdWlldCA9IDA7CiAJaW50IHJlcm9sbF9jb3VudCA9IC0xOwogCWNoYXIgKmJyYW5jaF9uYW1lID0gTlVMTDsKLQljaGFyICpmcm9tID0gTlVMTDsKIAljaGFyICpiYXNlX2NvbW1pdCA9IE5VTEw7CiAJc3RydWN0IGJhc2VfdHJlZV9pbmZvIGJhc2VzOwogCkBAIC0xNTY5LDYgKzE1OTYsOCBAQAogCQlzZXR1cF9wYWdlcigpOwogCiAJaWYgKG91dHB1dF9kaXJlY3RvcnkpIHsKKwkJaWYgKHJldi5kaWZmb3B0LnVzZV9jb2xvciAhPSBHSVRfQ09MT1JfQUxXQVlTKQorCQkJcmV2LmRpZmZvcHQudXNlX2NvbG9yID0gR0lUX0NPTE9SX05FVkVSOwogCQlpZiAodXNlX3N0ZG91dCkKIAkJCWRpZShfKCJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIpKTsKIAkJaWYgKG1rZGlyKG91dHB1dF9kaXJlY3RvcnksIDA3NzcpIDwgMCAmJiBlcnJubyAhPSBFRVhJU1QpCkBAIC0xNjI2LDkgKzE2NTUsNiBAQAogCQlnZXRfcGF0Y2hfaWRzKCZyZXYsICZpZHMpOwogCX0KIAotCWlmICghdXNlX3N0ZG91dCkKLQkJcmVhbHN0ZG91dCA9IHhmZG9wZW4oeGR1cCgxKSwgInciKTsKLQogCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldikpCiAJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKIAlyZXYuYm91bmRhcnkgPSAxOwpAQCAtMTY5Myw3ICsxNzE5LDcgQEAKIAkJCWdlbl9tZXNzYWdlX2lkKCZyZXYsICJjb3ZlciIpOwogCQltYWtlX2NvdmVyX2xldHRlcigmcmV2LCB1c2Vfc3Rkb3V0LAogCQkJCSAgb3JpZ2luLCBuciwgbGlzdCwgYnJhbmNoX25hbWUsIHF1aWV0KTsKLQkJcHJpbnRfYmFzZXMoJmJhc2VzKTsKKwkJcHJpbnRfYmFzZXMoJmJhc2VzLCByZXYuZGlmZm9wdC5maWxlKTsKIAkJdG90YWwrKzsKIAkJc3RhcnRfbnVtYmVyLS07CiAJfQpAQCAtMTczOSw3ICsxNzY1LDcgQEAKIAkJfQogCiAJCWlmICghdXNlX3N0ZG91dCAmJgotCQkgICAgcmVvcGVuX3N0ZG91dChyZXYubnVtYmVyZWRfZmlsZXMgPyBOVUxMIDogY29tbWl0LCBOVUxMLCAmcmV2LCBxdWlldCkpCisJCSAgICBvcGVuX25leHRfZmlsZShyZXYubnVtYmVyZWRfZmlsZXMgPyBOVUxMIDogY29tbWl0LCBOVUxMLCAmcmV2LCBxdWlldCkpCiAJCQlkaWUoXygiRmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiKSk7CiAJCXNob3duID0gbG9nX3RyZWVfY29tbWl0KCZyZXYsIGNvbW1pdCk7CiAJCWZyZWVfY29tbWl0X2J1ZmZlcihjb21taXQpOwpAQCAtMTc1NCwxNSArMTc4MCwxNSBAQAogCQkJcmV2LnNob3duX29uZSA9IDA7CiAJCWlmIChzaG93bikgewogCQkJaWYgKHJldi5taW1lX2JvdW5kYXJ5KQotCQkJCXByaW50ZigiXG4tLSVzJXMtLVxuXG5cbiIsCisJCQkJZnByaW50ZihyZXYuZGlmZm9wdC5maWxlLCAiXG4tLSVzJXMtLVxuXG5cbiIsCiAJCQkJICAgICAgIG1pbWVfYm91bmRhcnlfbGVhZGVyLAogCQkJCSAgICAgICByZXYubWltZV9ib3VuZGFyeSk7CiAJCQllbHNlCi0JCQkJcHJpbnRfc2lnbmF0dXJlKCk7Ci0JCQlwcmludF9iYXNlcygmYmFzZXMpOworCQkJCXByaW50X3NpZ25hdHVyZShyZXYuZGlmZm9wdC5maWxlKTsKKwkJCXByaW50X2Jhc2VzKCZiYXNlcywgcmV2LmRpZmZvcHQuZmlsZSk7CiAJCX0KIAkJaWYgKCF1c2Vfc3Rkb3V0KQotCQkJZmNsb3NlKHN0ZG91dCk7CisJCQlmY2xvc2UocmV2LmRpZmZvcHQuZmlsZSk7CiAJfQogCWZyZWUobGlzdCk7CiAJZnJlZShicmFuY2hfbmFtZSk7CkBAIC0xNzk0LDE1ICsxODIwLDE1IEBACiB9OwogCiBzdGF0aWMgdm9pZCBwcmludF9jb21taXQoY2hhciBzaWduLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCB2ZXJib3NlLAotCQkJIGludCBhYmJyZXYpCisJCQkgaW50IGFiYnJldiwgRklMRSAqZmlsZSkKIHsKIAlpZiAoIXZlcmJvc2UpIHsKLQkJcHJpbnRmKCIlYyAlc1xuIiwgc2lnbiwKKwkJZnByaW50ZihmaWxlLCAiJWMgJXNcbiIsIHNpZ24sCiAJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Qub2lkLmhhc2gsIGFiYnJldikpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJmJ1Zik7Ci0JCXByaW50ZigiJWMgJXMgJXNcbiIsIHNpZ24sCisJCWZwcmludGYoZmlsZSwgIiVjICVzICVzXG4iLCBzaWduLAogCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0Lm9pZC5oYXNoLCBhYmJyZXYpLAogCQkgICAgICAgYnVmLmJ1Zik7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwpAQCAtMTg4Myw3ICsxOTA5LDcgQEAKIAkJY29tbWl0ID0gbGlzdC0+aXRlbTsKIAkJaWYgKGhhc19jb21taXRfcGF0Y2hfaWQoY29tbWl0LCAmaWRzKSkKIAkJCXNpZ24gPSAnLSc7Ci0JCXByaW50X2NvbW1pdChzaWduLCBjb21taXQsIHZlcmJvc2UsIGFiYnJldik7CisJCXByaW50X2NvbW1pdChzaWduLCBjb21taXQsIHZlcmJvc2UsIGFiYnJldiwgcmV2cy5kaWZmb3B0LmZpbGUpOwogCQlsaXN0ID0gbGlzdC0+bmV4dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vbHMtZmlsZXMuYyBiL2J1aWx0aW4vbHMtZmlsZXMuYwppbmRleCBmMDJlM2QyLi4wMGVhOTFhIDEwMDY0NAotLS0gYS9idWlsdGluL2xzLWZpbGVzLmMKKysrIGIvYnVpbHRpbi9scy1maWxlcy5jCkBAIC0xMTgsNyArMTE4LDggQEAKIAkJCQkgKi8KIAkJCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhlbnQtPm5hbWUsIGVudC0+bGVuKTsKIAkJCQlpZiAoMCA8PSBwb3MpCi0JCQkJCWRpZSgiYnVnIGluIHNob3cta2lsbGVkLWZpbGVzIik7CisJCQkJCWRpZSgiQlVHOiBraWxsZWQtZmlsZSAlLipzIG5vdCBmb3VuZCIsCisJCQkJCQllbnQtPmxlbiwgZW50LT5uYW1lKTsKIAkJCQlwb3MgPSAtcG9zIC0gMTsKIAkJCQl3aGlsZSAocG9zIDwgYWN0aXZlX25yICYmCiAJCQkJICAgICAgIGNlX3N0YWdlKGFjdGl2ZV9jYWNoZVtwb3NdKSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWFpbHNwbGl0LmMgYi9idWlsdGluL21haWxzcGxpdC5jCmluZGV4IDQ4NTllZGUuLjMwNjgxNjggMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbWFpbHNwbGl0LmMKKysrIGIvYnVpbHRpbi9tYWlsc3BsaXQuYwpAQCAtNDUsNiArNDUsMTkgQEAKIAogc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiBzdGF0aWMgaW50IGtlZXBfY3I7CitzdGF0aWMgaW50IG1ib3hyZDsKKworc3RhdGljIGludCBpc19ndGZyb20oY29uc3Qgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXNpemVfdCBtaW4gPSBzdHJsZW4oIj5Gcm9tICIpOworCXNpemVfdCBuZ3Q7CisKKwlpZiAoYnVmLT5sZW4gPCBtaW4pCisJCXJldHVybiAwOworCisJbmd0ID0gc3Ryc3BuKGJ1Zi0+YnVmLCAiPiIpOworCXJldHVybiBuZ3QgJiYgc3RhcnRzX3dpdGgoYnVmLT5idWYgKyBuZ3QsICJGcm9tICIpOworfQogCiAvKiBDYWxsZWQgd2l0aCB0aGUgZmlyc3QgbGluZSAocG90ZW50aWFsbHkgcGFydGlhbCkKICAqIGFscmVhZHkgaW4gYnVmW10gLS0gbm9ybWFsbHkgdGhhdCBzaG91bGQgYmVnaW4gd2l0aApAQCAtNzcsNiArOTAsOSBAQAogCQkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOwogCQl9CiAKKwkJaWYgKG1ib3hyZCAmJiBpc19ndGZyb20oJmJ1ZikpCisJCQlzdHJidWZfcmVtb3ZlKCZidWYsIDAsIDEpOworCiAJCWlmIChmd3JpdGUoYnVmLmJ1ZiwgMSwgYnVmLmxlbiwgb3V0cHV0KSAhPSBidWYubGVuKQogCQkJZGllX2Vycm5vKCJjYW5ub3Qgd3JpdGUgb3V0cHV0Iik7CiAKQEAgLTI3MSw2ICsyODcsOCBAQAogCQkJa2VlcF9jciA9IDE7CiAJCX0gZWxzZSBpZiAoIGFyZ1sxXSA9PSAnbycgJiYgYXJnWzJdICkgewogCQkJZGlyID0gYXJnKzI7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW1ib3hyZCIpKSB7CisJCQltYm94cmQgPSAxOwogCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJy0nICYmICFhcmdbMl0gKSB7CiAJCQlhcmdwKys7CS8qIC0tIG1hcmtzIGVuZCBvZiBvcHRpb25zICovCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmMgYi9idWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jCmluZGV4IDQ5MWVmZDUuLmZkMmM0NTUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmMKKysrIGIvYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYwpAQCAtOSwxMCArOSwxMCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqYmV0dGVyX2JyYW5jaF9uYW1lKGNvbnN0IGNoYXIgKmJyYW5jaCkKIHsKLQlzdGF0aWMgY2hhciBnaXRoZWFkX2Vudls4ICsgNDAgKyAxXTsKKwlzdGF0aWMgY2hhciBnaXRoZWFkX2Vudls4ICsgR0lUX1NIQTFfSEVYU1ogKyAxXTsKIAljaGFyICpuYW1lOwogCi0JaWYgKHN0cmxlbihicmFuY2gpICE9IDQwKQorCWlmIChzdHJsZW4oYnJhbmNoKSAhPSBHSVRfU0hBMV9IRVhTWikKIAkJcmV0dXJuIGJyYW5jaDsKIAl4c25wcmludGYoZ2l0aGVhZF9lbnYsIHNpemVvZihnaXRoZWFkX2VudiksICJHSVRIRUFEXyVzIiwgYnJhbmNoKTsKIAluYW1lID0gZ2V0ZW52KGdpdGhlYWRfZW52KTsKQEAgLTIxLDEwICsyMSwxMCBAQAogCiBpbnQgY21kX21lcmdlX3JlY3Vyc2l2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlc1syMV07CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFzZXNbMjFdOwogCXVuc2lnbmVkIGJhc2VzX2NvdW50ID0gMDsKIAlpbnQgaSwgZmFpbGVkOwotCXVuc2lnbmVkIGNoYXIgaDFbMjBdLCBoMlsyMF07CisJc3RydWN0IG9iamVjdF9pZCBoMSwgaDI7CiAJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKIAlzdHJ1Y3QgY29tbWl0ICpyZXN1bHQ7CiAKQEAgLTQ2LDEwICs0NiwxMCBAQAogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGJhc2VzX2NvdW50IDwgQVJSQVlfU0laRShiYXNlcyktMSkgewotCQkJdW5zaWduZWQgY2hhciAqc2hhID0geG1hbGxvYygyMCk7Ci0JCQlpZiAoZ2V0X3NoYTEoYXJndltpXSwgc2hhKSkKKwkJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvYmplY3RfaWQpKTsKKwkJCWlmIChnZXRfb2lkKGFyZ3ZbaV0sIG9pZCkpCiAJCQkJZGllKCJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciLCBhcmd2W2ldKTsKLQkJCWJhc2VzW2Jhc2VzX2NvdW50KytdID0gc2hhOworCQkJYmFzZXNbYmFzZXNfY291bnQrK10gPSBvaWQ7CiAJCX0KIAkJZWxzZQogCQkJd2FybmluZygiQ2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZXMuICIKQEAgLTYyLDkgKzYyLDkgQEAKIAlvLmJyYW5jaDEgPSBhcmd2WysraV07CiAJby5icmFuY2gyID0gYXJndlsrK2ldOwogCi0JaWYgKGdldF9zaGExKG8uYnJhbmNoMSwgaDEpKQorCWlmIChnZXRfb2lkKG8uYnJhbmNoMSwgJmgxKSkKIAkJZGllKCJDb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIsIG8uYnJhbmNoMSk7Ci0JaWYgKGdldF9zaGExKG8uYnJhbmNoMiwgaDIpKQorCWlmIChnZXRfb2lkKG8uYnJhbmNoMiwgJmgyKSkKIAkJZGllKCJDb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIsIG8uYnJhbmNoMik7CiAKIAlvLmJyYW5jaDEgPSBiZXR0ZXJfYnJhbmNoX25hbWUoby5icmFuY2gxKTsKQEAgLTczLDcgKzczLDcgQEAKIAlpZiAoby52ZXJib3NpdHkgPj0gMykKIAkJcHJpbnRmKCJNZXJnaW5nICVzIHdpdGggJXNcbiIsIG8uYnJhbmNoMSwgby5icmFuY2gyKTsKIAotCWZhaWxlZCA9IG1lcmdlX3JlY3Vyc2l2ZV9nZW5lcmljKCZvLCBoMSwgaDIsIGJhc2VzX2NvdW50LCBiYXNlcywgJnJlc3VsdCk7CisJZmFpbGVkID0gbWVyZ2VfcmVjdXJzaXZlX2dlbmVyaWMoJm8sICZoMSwgJmgyLCBiYXNlc19jb3VudCwgYmFzZXMsICZyZXN1bHQpOwogCWlmIChmYWlsZWQgPCAwKQogCQlyZXR1cm4gMTI4OyAvKiBkaWUoKSBlcnJvciBjb2RlICovCiAJcmV0dXJuIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2UuYyBiL2J1aWx0aW4vbWVyZ2UuYwppbmRleCBiNTU1YTFiLi4wYWUwOTlmIDEwMDY0NAotLS0gYS9idWlsdGluL21lcmdlLmMKKysrIGIvYnVpbHRpbi9tZXJnZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiZm10LW1lcmdlLW1zZy5oIgogI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJzZXF1ZW5jZXIuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgogCiAjZGVmaW5lIERFRkFVTFRfVFdPSEVBRCAoMTw8MCkKICNkZWZpbmUgREVGQVVMVF9PQ1RPUFVTICgxPDwxKQpAQCAtMjExLDcgKzIxMiw3IEBACiAJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgRkZfT05MWSB9LAogCU9QVF9SRVJFUkVfQVVUT1VQREFURSgmYWxsb3dfcmVyZXJlX2F1dG8pLAogCU9QVF9CT09MKDAsICJ2ZXJpZnktc2lnbmF0dXJlcyIsICZ2ZXJpZnlfc2lnbmF0dXJlcywKLQkJTl8oIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIpKSwKKwkJTl8oInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIpKSwKIAlPUFRfQ0FMTEJBQ0soJ3MnLCAic3RyYXRlZ3kiLCAmdXNlX3N0cmF0ZWdpZXMsIE5fKCJzdHJhdGVneSIpLAogCQlOXygibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIiksIG9wdGlvbl9wYXJzZV9zdHJhdGVneSksCiAJT1BUX0NBTExCQUNLKCdYJywgInN0cmF0ZWd5LW9wdGlvbiIsICZ4b3B0cywgTl8oIm9wdGlvbj12YWx1ZSIpLApAQCAtMzM2LDE1ICszMzcsOSBAQAogCXN0cnVjdCByZXZfaW5mbyByZXY7CiAJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKmo7Ci0JY29uc3QgY2hhciAqZmlsZW5hbWU7Ci0JaW50IGZkOwogCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CiAKIAlwcmludGYoXygiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIikpOwotCWZpbGVuYW1lID0gZ2l0X3BhdGhfc3F1YXNoX21zZygpOwotCWZkID0gb3BlbihmaWxlbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKLQlpZiAoZmQgPCAwKQotCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHdyaXRlIHRvICclcyciKSwgZmlsZW5hbWUpOwogCiAJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CiAJcmV2Lmlnbm9yZV9tZXJnZXMgPSAxOwpAQCAtMzcxLDEwICszNjYsNyBAQAogCQkJb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CiAJCXByZXR0eV9wcmludF9jb21taXQoJmN0eCwgY29tbWl0LCAmb3V0KTsKIAl9Ci0JaWYgKHdyaXRlX2luX2Z1bGwoZmQsIG91dC5idWYsIG91dC5sZW4pICE9IG91dC5sZW4pCi0JCWRpZV9lcnJubyhfKCJXcml0aW5nIFNRVUFTSF9NU0ciKSk7Ci0JaWYgKGNsb3NlKGZkKSkKLQkJZGllX2Vycm5vKF8oIkZpbmlzaGluZyBTUVVBU0hfTVNHIikpOworCXdyaXRlX2ZpbGVfYnVmKGdpdF9wYXRoX3NxdWFzaF9tc2coKSwgb3V0LmJ1Ziwgb3V0Lmxlbik7CiAJc3RyYnVmX3JlbGVhc2UoJm91dCk7CiB9CiAKQEAgLTUwMSw3ICs0OTMsNyBAQAogCQlpZiAocmVmX2V4aXN0cyh0cnVuYW1lLmJ1ZikpIHsKIAkJCXN0cmJ1Zl9hZGRmKG1zZywKIAkJCQkgICAgIiVzXHRcdGJyYW5jaCAnJXMnJXMgb2YgLlxuIiwKLQkJCQkgICAgc2hhMV90b19oZXgocmVtb3RlX2hlYWQtPm9iamVjdC5vaWQuaGFzaCksCisJCQkJICAgIG9pZF90b19oZXgoJnJlbW90ZV9oZWFkLT5vYmplY3Qub2lkKSwKIAkJCQkgICAgdHJ1bmFtZS5idWYgKyAxMSwKIAkJCQkgICAgKGVhcmx5ID8gIiAoZWFybHkgcGFydCkiIDogIiIpKTsKIAkJCXN0cmJ1Zl9yZWxlYXNlKCZ0cnVuYW1lKTsKQEAgLTUxNSw3ICs1MDcsNyBAQAogCQlkZXNjID0gbWVyZ2VfcmVtb3RlX3V0aWwocmVtb3RlX2hlYWQpOwogCQlpZiAoZGVzYyAmJiBkZXNjLT5vYmogJiYgZGVzYy0+b2JqLT50eXBlID09IE9CSl9UQUcpIHsKIAkJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXHRcdCVzICclcydcbiIsCi0JCQkJICAgIHNoYTFfdG9faGV4KGRlc2MtPm9iai0+b2lkLmhhc2gpLAorCQkJCSAgICBvaWRfdG9faGV4KCZkZXNjLT5vYmotPm9pZCksCiAJCQkJICAgIHR5cGVuYW1lKGRlc2MtPm9iai0+dHlwZSksCiAJCQkJICAgIHJlbW90ZSk7CiAJCQlnb3RvIGNsZWFudXA7CkBAIC01MjMsNyArNTE1LDcgQEAKIAl9CiAKIAlzdHJidWZfYWRkZihtc2csICIlc1x0XHRjb21taXQgJyVzJ1xuIiwKLQkJc2hhMV90b19oZXgocmVtb3RlX2hlYWQtPm9iamVjdC5vaWQuaGFzaCksIHJlbW90ZSk7CisJCW9pZF90b19oZXgoJnJlbW90ZV9oZWFkLT5vYmplY3Qub2lkKSwgcmVtb3RlKTsKIGNsZWFudXA6CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJc3RyYnVmX3JlbGVhc2UoJmJuYW1lKTsKQEAgLTY4Miw2ICs2NzQsOCBAQAogCQlob2xkX2xvY2tlZF9pbmRleCgmbG9jaywgMSk7CiAJCWNsZWFuID0gbWVyZ2VfcmVjdXJzaXZlKCZvLCBoZWFkLAogCQkJCXJlbW90ZWhlYWRzLT5pdGVtLCByZXZlcnNlZCwgJnJlc3VsdCk7CisJCWlmIChjbGVhbiA8IDApCisJCQlleGl0KDEyOCk7CiAJCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCAmJgogCQkgICAgd3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrLCBDT01NSVRfTE9DSykpCiAJCQlkaWUgKF8oInVuYWJsZSB0byB3cml0ZSAlcyIpLCBnZXRfaW5kZXhfZmlsZSgpKTsKQEAgLTcxMiw0MiArNzA2LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgc3BsaXRfbWVyZ2Vfc3RyYXRlZ2llcyhjb25zdCBjaGFyICpzdHJpbmcsIHN0cnVjdCBzdHJhdGVneSAqKmxpc3QsCi0JCQkJICAgaW50ICpuciwgaW50ICphbGxvYykKLXsKLQljaGFyICpwLCAqcSwgKmJ1ZjsKLQotCWlmICghc3RyaW5nKQotCQlyZXR1cm47Ci0KLQlidWYgPSB4c3RyZHVwKHN0cmluZyk7Ci0JcSA9IGJ1ZjsKLQlmb3IgKDs7KSB7Ci0JCXAgPSBzdHJjaHIocSwgJyAnKTsKLQkJaWYgKCFwKSB7Ci0JCQlBTExPQ19HUk9XKCpsaXN0LCAqbnIgKyAxLCAqYWxsb2MpOwotCQkJKCpsaXN0KVsoKm5yKSsrXS5uYW1lID0geHN0cmR1cChxKTsKLQkJCWZyZWUoYnVmKTsKLQkJCXJldHVybjsKLQkJfSBlbHNlIHsKLQkJCSpwID0gJ1wwJzsKLQkJCUFMTE9DX0dST1coKmxpc3QsICpuciArIDEsICphbGxvYyk7Ci0JCQkoKmxpc3QpWygqbnIpKytdLm5hbWUgPSB4c3RyZHVwKHEpOwotCQkJcSA9ICsrcDsKLQkJfQotCX0KLX0KLQogc3RhdGljIHZvaWQgYWRkX3N0cmF0ZWdpZXMoY29uc3QgY2hhciAqc3RyaW5nLCB1bnNpZ25lZCBhdHRyKQogewotCXN0cnVjdCBzdHJhdGVneSAqbGlzdCA9IE5VTEw7Ci0JaW50IGxpc3RfYWxsb2MgPSAwLCBsaXN0X25yID0gMCwgaTsKKwlpbnQgaTsKIAotCW1lbXNldCgmbGlzdCwgMCwgc2l6ZW9mKGxpc3QpKTsKLQlzcGxpdF9tZXJnZV9zdHJhdGVnaWVzKHN0cmluZywgJmxpc3QsICZsaXN0X25yLCAmbGlzdF9hbGxvYyk7Ci0JaWYgKGxpc3QpIHsKLQkJZm9yIChpID0gMDsgaSA8IGxpc3RfbnI7IGkrKykKLQkJCWFwcGVuZF9zdHJhdGVneShnZXRfc3RyYXRlZ3kobGlzdFtpXS5uYW1lKSk7CisJaWYgKHN0cmluZykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJc3RyaW5nX2xpc3Rfc3BsaXQoJmxpc3QsIHN0cmluZywgJyAnLCAtMSk7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmxpc3QpCisJCQlhcHBlbmRfc3RyYXRlZ3koZ2V0X3N0cmF0ZWd5KGl0ZW0tPnN0cmluZykpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CiAJCXJldHVybjsKIAl9CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsX3N0cmF0ZWd5KTsgaSsrKQpAQCAtNzU2LDE4ICs3MjUsNiBAQAogCiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlX21lcmdlX21zZyhzdHJ1Y3Qgc3RyYnVmICptc2cpCi17Ci0JY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aF9tZXJnZV9tc2coKTsKLQlpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1dST05MWSB8IE9fQ1JFQVQsIDA2NjYpOwotCWlmIChmZCA8IDApCi0JCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksCi0JCQkgIGZpbGVuYW1lKTsKLQlpZiAod3JpdGVfaW5fZnVsbChmZCwgbXNnLT5idWYsIG1zZy0+bGVuKSAhPSBtc2ctPmxlbikKLQkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIGZpbGVuYW1lKTsKLQljbG9zZShmZCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJlYWRfbWVyZ2VfbXNnKHN0cnVjdCBzdHJidWYgKm1zZykKIHsKIAljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoX21lcmdlX21zZygpOwpAQCAtODAxLDcgKzc1OCw3IEBACiAJc3RyYnVmX2FkZGNoKCZtc2csICdcbicpOwogCWlmICgwIDwgb3B0aW9uX2VkaXQpCiAJCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmbXNnLCBfKG1lcmdlX2VkaXRvcl9jb21tZW50KSwgY29tbWVudF9saW5lX2NoYXIpOwotCXdyaXRlX21lcmdlX21zZygmbXNnKTsKKwl3cml0ZV9maWxlX2J1ZihnaXRfcGF0aF9tZXJnZV9tc2coKSwgbXNnLmJ1ZiwgbXNnLmxlbik7CiAJaWYgKHJ1bl9jb21taXRfaG9vaygwIDwgb3B0aW9uX2VkaXQsIGdldF9pbmRleF9maWxlKCksICJwcmVwYXJlLWNvbW1pdC1tc2ciLAogCQkJICAgIGdpdF9wYXRoX21lcmdlX21zZygpLCAibWVyZ2UiLCBOVUxMKSkKIAkJYWJvcnRfY29tbWl0KHJlbW90ZWhlYWRzLCBOVUxMKTsKQEAgLTk2NCw4ICs5MjEsNiBAQAogCiBzdGF0aWMgdm9pZCB3cml0ZV9tZXJnZV9zdGF0ZShzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzKQogewotCWNvbnN0IGNoYXIgKmZpbGVuYW1lOwotCWludCBmZDsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKmo7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIApAQCAtOTc5LDI2ICs5MzQsMTQgQEAKIAkJfQogCQlzdHJidWZfYWRkZigmYnVmLCAiJXNcbiIsIG9pZF90b19oZXgob2lkKSk7CiAJfQotCWZpbGVuYW1lID0gZ2l0X3BhdGhfbWVyZ2VfaGVhZCgpOwotCWZkID0gb3BlbihmaWxlbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKLQlpZiAoZmQgPCAwKQotCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIpLCBmaWxlbmFtZSk7Ci0JaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pICE9IGJ1Zi5sZW4pCi0JCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBmaWxlbmFtZSk7Ci0JY2xvc2UoZmQpOworCXdyaXRlX2ZpbGVfYnVmKGdpdF9wYXRoX21lcmdlX2hlYWQoKSwgYnVmLmJ1ZiwgYnVmLmxlbik7CiAJc3RyYnVmX2FkZGNoKCZtZXJnZV9tc2csICdcbicpOwotCXdyaXRlX21lcmdlX21zZygmbWVyZ2VfbXNnKTsKKwl3cml0ZV9maWxlX2J1ZihnaXRfcGF0aF9tZXJnZV9tc2coKSwgbWVyZ2VfbXNnLmJ1ZiwgbWVyZ2VfbXNnLmxlbik7CiAKLQlmaWxlbmFtZSA9IGdpdF9wYXRoX21lcmdlX21vZGUoKTsKLQlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NjYpOwotCWlmIChmZCA8IDApCi0JCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksIGZpbGVuYW1lKTsKIAlzdHJidWZfcmVzZXQoJmJ1Zik7CiAJaWYgKGZhc3RfZm9yd2FyZCA9PSBGRl9OTykKIAkJc3RyYnVmX2FkZGYoJmJ1ZiwgIm5vLWZmIik7Ci0JaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pICE9IGJ1Zi5sZW4pCi0JCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBmaWxlbmFtZSk7Ci0JY2xvc2UoZmQpOworCXdyaXRlX2ZpbGVfYnVmKGdpdF9wYXRoX21lcmdlX21vZGUoKSwgYnVmLmJ1ZiwgYnVmLmxlbik7CiB9CiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9lZGl0X29wdGlvbih2b2lkKQpAQCAtMTAxNCw3ICs5NTcsNyBAQAogCWlmIChlKSB7CiAJCWludCB2ID0gZ2l0X2NvbmZpZ19tYXliZV9ib29sKG5hbWUsIGUpOwogCQlpZiAodiA8IDApCi0JCQlkaWUoIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciLCBlLCBuYW1lKTsKKwkJCWRpZShfKCJCYWQgdmFsdWUgJyVzJyBpbiBlbnZpcm9ubWVudCAnJXMnIiksIGUsIG5hbWUpOwogCQlyZXR1cm4gdjsKIAl9CiAKQEAgLTExMTUsNyArMTA1OCw3IEBACiAJCWlmICghY29tbWl0KSB7CiAJCQlpZiAocHRyKQogCQkJCSpwdHIgPSAnXDAnOwotCQkJZGllKCJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiLAorCQkJZGllKF8oIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIGluICVzOiAlcyIpLAogCQkJICAgIGZpbGVuYW1lLCBtZXJnZV9uYW1lcy0+YnVmICsgcG9zKTsKIAkJfQogCQlyZW1vdGVzID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHJlbW90ZXMpLT5uZXh0OwpAQCAtMTE0OSw3ICsxMDkyLDcgQEAKIAkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGdldF9tZXJnZV9wYXJlbnQoYXJndltpXSk7CiAJCQlpZiAoIWNvbW1pdCkKIAkJCQloZWxwX3Vua25vd25fcmVmKGFyZ3ZbaV0sICJtZXJnZSIsCi0JCQkJCQkgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIik7CisJCQkJCQkgXygibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiKSk7CiAJCQlyZW1vdGVzID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHJlbW90ZXMpLT5uZXh0OwogCQl9CiAJCXJlbW90ZWhlYWRzID0gcmVkdWNlX3BhcmVudHMoaGVhZF9jb21taXQsIGhlYWRfc3Vic3VtZWQsIHJlbW90ZWhlYWRzKTsKQEAgLTEzNjYsNyArMTMwOSw3IEBACiAJZm9yIChwID0gcmVtb3RlaGVhZHM7IHA7IHAgPSBwLT5uZXh0KSB7CiAJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CiAJCXN0cmJ1Zl9hZGRmKCZidWYsICJHSVRIRUFEXyVzIiwKLQkJCSAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5vaWQuaGFzaCkpOworCQkJICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOwogCQlzZXRlbnYoYnVmLmJ1ZiwgbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KS0+bmFtZSwgMSk7CiAJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKIAkJaWYgKGZhc3RfZm9yd2FyZCAhPSBGRl9PTkxZICYmCkBAIC0xNDIxLDExICsxMzY0LDExIEBACiAJCSAqIElmIGhlYWQgY2FuIHJlYWNoIGFsbCB0aGUgbWVyZ2UgdGhlbiB3ZSBhcmUgdXAgdG8gZGF0ZS4KIAkJICogYnV0IGZpcnN0IHRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIG1lcmdpbmcgb25lIHJlbW90ZS4KIAkJICovCi0JCWZpbmlzaF91cF90b19kYXRlKCJBbHJlYWR5IHVwLXRvLWRhdGUuIik7CisJCWZpbmlzaF91cF90b19kYXRlKF8oIkFscmVhZHkgdXAtdG8tZGF0ZS4iKSk7CiAJCWdvdG8gZG9uZTsKIAl9IGVsc2UgaWYgKGZhc3RfZm9yd2FyZCAhPSBGRl9OTyAmJiAhcmVtb3RlaGVhZHMtPm5leHQgJiYKIAkJCSFjb21tb24tPm5leHQgJiYKLQkJCSFoYXNoY21wKGNvbW1vbi0+aXRlbS0+b2JqZWN0Lm9pZC5oYXNoLCBoZWFkX2NvbW1pdC0+b2JqZWN0Lm9pZC5oYXNoKSkgeworCQkJIW9pZGNtcCgmY29tbW9uLT5pdGVtLT5vYmplY3Qub2lkLCAmaGVhZF9jb21taXQtPm9iamVjdC5vaWQpKSB7CiAJCS8qIEFnYWluIHRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIG1lcmdpbmcgb25lIHJlbW90ZS4gKi8KIAkJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0OwpAQCAtMTQ5OSwxNCArMTQ0MiwxMyBAQAogCQkJICogSEVBRF5eIiB3b3VsZCBiZSBtaXNzZWQuCiAJCQkgKi8KIAkJCWNvbW1vbl9vbmUgPSBnZXRfbWVyZ2VfYmFzZXMoaGVhZF9jb21taXQsIGotPml0ZW0pOwotCQkJaWYgKGhhc2hjbXAoY29tbW9uX29uZS0+aXRlbS0+b2JqZWN0Lm9pZC5oYXNoLAotCQkJCWotPml0ZW0tPm9iamVjdC5vaWQuaGFzaCkpIHsKKwkJCWlmIChvaWRjbXAoJmNvbW1vbl9vbmUtPml0ZW0tPm9iamVjdC5vaWQsICZqLT5pdGVtLT5vYmplY3Qub2lkKSkgewogCQkJCXVwX3RvX2RhdGUgPSAwOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCWlmICh1cF90b19kYXRlKSB7Ci0JCQlmaW5pc2hfdXBfdG9fZGF0ZSgiQWxyZWFkeSB1cC10by1kYXRlLiBZZWVhaCEiKTsKKwkJCWZpbmlzaF91cF90b19kYXRlKF8oIkFscmVhZHkgdXAtdG8tZGF0ZS4gWWVlYWghIikpOwogCQkJZ290byBkb25lOwogCQl9CiAJfQpAQCAtMTUzMCw3ICsxNDcyLDcgQEAKIAkgICAgICogU3Rhc2ggYXdheSB0aGUgbG9jYWwgY2hhbmdlcyBzbyB0aGF0IHdlIGNhbiB0cnkgbW9yZSB0aGFuIG9uZS4KIAkgICAgICovCiAJICAgIHNhdmVfc3RhdGUoc3Rhc2gpKQotCQloYXNoY3B5KHN0YXNoLCBudWxsX3NoYTEpOworCQloYXNoY2xyKHN0YXNoKTsKIAogCWZvciAoaSA9IDA7IGkgPCB1c2Vfc3RyYXRlZ2llc19ucjsgaSsrKSB7CiAJCWludCByZXQ7CmRpZmYgLS1naXQgYS9idWlsdGluL212LmMgYi9idWlsdGluL212LmMKaW5kZXggYTIwMTQyNi4uNDQ2YTMxNiAxMDA2NDQKLS0tIGEvYnVpbHRpbi9tdi5jCisrKyBiL2J1aWx0aW4vbXYuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAKIGludCBjbWRfbXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7Ci0JaW50IGksIGdpdG1vZHVsZXNfbW9kaWZpZWQgPSAwOworCWludCBpLCBmbGFncywgZ2l0bW9kdWxlc19tb2RpZmllZCA9IDA7CiAJaW50IHZlcmJvc2UgPSAwLCBzaG93X29ubHkgPSAwLCBmb3JjZSA9IDAsIGlnbm9yZV9lcnJvcnMgPSAwOwogCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9tdl9vcHRpb25zW10gPSB7CiAJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCkBAIC0xMzQsMTAgKzEzNCwxMyBAQAogCW1vZGVzID0geGNhbGxvYyhhcmdjLCBzaXplb2YoZW51bSB1cGRhdGVfbW9kZSkpOwogCS8qCiAJICogS2VlcCB0cmFpbGluZyBzbGFzaCwgbmVlZGVkIHRvIGxldAotCSAqICJnaXQgbXYgZmlsZSBuby1zdWNoLWRpci8iIGVycm9yIG91dC4KKwkgKiAiZ2l0IG12IGZpbGUgbm8tc3VjaC1kaXIvIiBlcnJvciBvdXQsIGV4Y2VwdCBpbiB0aGUgY2FzZQorCSAqICJnaXQgbXYgZGlyZWN0b3J5IG5vLXN1Y2gtZGlyLyIuCiAJICovCi0JZGVzdF9wYXRoID0gaW50ZXJuYWxfY29weV9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YgKyBhcmdjLCAxLAotCQkJCQkgICBLRUVQX1RSQUlMSU5HX1NMQVNIKTsKKwlmbGFncyA9IEtFRVBfVFJBSUxJTkdfU0xBU0g7CisJaWYgKGFyZ2MgPT0gMSAmJiBpc19kaXJlY3RvcnkoYXJndlswXSkgJiYgIWlzX2RpcmVjdG9yeShhcmd2WzFdKSkKKwkJZmxhZ3MgPSAwOworCWRlc3RfcGF0aCA9IGludGVybmFsX2NvcHlfcGF0aHNwZWMocHJlZml4LCBhcmd2ICsgYXJnYywgMSwgZmxhZ3MpOwogCXN1Ym1vZHVsZV9naXRmaWxlID0geGNhbGxvYyhhcmdjLCBzaXplb2YoY2hhciAqKSk7CiAKIAlpZiAoZGVzdF9wYXRoWzBdWzBdID09ICdcMCcpCmRpZmYgLS1naXQgYS9idWlsdGluL25vdGVzLmMgYi9idWlsdGluL25vdGVzLmMKaW5kZXggYzY1YjU5YS4uZjg0OGI4OSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9ub3Rlcy5jCisrKyBiL2J1aWx0aW4vbm90ZXMuYwpAQCAtOTEsNyArOTEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgbm90ZV90ZW1wbGF0ZVtdID0KLQkiXG5Xcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6XG4iOworCU5fKCJXcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6Iik7CiAKIHN0cnVjdCBub3RlX2RhdGEgewogCWludCBnaXZlbjsKQEAgLTE3OSw3ICsxNzksOCBAQAogCQkJY29weV9vYmpfdG9fZmQoZmQsIG9sZF9ub3RlKTsKIAogCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7Ci0JCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZidWYsIG5vdGVfdGVtcGxhdGUsIHN0cmxlbihub3RlX3RlbXBsYXRlKSk7CisJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZidWYsICJcbiIsIHN0cmxlbigiXG4iKSk7CisJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZidWYsIF8obm90ZV90ZW1wbGF0ZSksIHN0cmxlbihfKG5vdGVfdGVtcGxhdGUpKSk7CiAJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKIAkJd3JpdGVfb3JfZGllKGZkLCBidWYuYnVmLCBidWYubGVuKTsKIApAQCAtNzQ5LDcgKzc1MCw3IEBACiAJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZyhrZXksICZ2YWx1ZSkpCiAJCXJldHVybiAxOwogCWlmIChwYXJzZV9ub3Rlc19tZXJnZV9zdHJhdGVneSh2YWx1ZSwgc3RyYXRlZ3kpKQotCQlnaXRfZGllX2NvbmZpZyhrZXksICJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIiwgdmFsdWUpOworCQlnaXRfZGllX2NvbmZpZyhrZXksIF8oInVua25vd24gbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kgJXMiKSwgdmFsdWUpOwogCiAJZnJlZSh2YWx1ZSk7CiAJcmV0dXJuIDA7CkBAIC03ODgsMTUgKzc4OSwxNSBAQAogCWlmIChzdHJhdGVneSB8fCBkb19jb21taXQgKyBkb19hYm9ydCA9PSAwKQogCQlkb19tZXJnZSA9IDE7CiAJaWYgKGRvX21lcmdlICsgZG9fY29tbWl0ICsgZG9fYWJvcnQgIT0gMSkgewotCQllcnJvcigiY2Fubm90IG1peCAtLWNvbW1pdCwgLS1hYm9ydCBvciAtcy8tLXN0cmF0ZWd5Iik7CisJCWVycm9yKF8oImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIpKTsKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19tZXJnZV91c2FnZSwgb3B0aW9ucyk7CiAJfQogCiAJaWYgKGRvX21lcmdlICYmIGFyZ2MgIT0gMSkgewotCQllcnJvcigiTXVzdCBzcGVjaWZ5IGEgbm90ZXMgcmVmIHRvIG1lcmdlIik7CisJCWVycm9yKF8oIk11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIpKTsKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19tZXJnZV91c2FnZSwgb3B0aW9ucyk7CiAJfSBlbHNlIGlmICghZG9fbWVyZ2UgJiYgYXJnYykgewotCQllcnJvcigidG9vIG1hbnkgcGFyYW1ldGVycyIpOworCQllcnJvcihfKCJ0b28gbWFueSBwYXJhbWV0ZXJzIikpOwogCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX21lcmdlX3VzYWdlLCBvcHRpb25zKTsKIAl9CiAKQEAgLTgxNyw3ICs4MTgsNyBAQAogCiAJaWYgKHN0cmF0ZWd5KSB7CiAJCWlmIChwYXJzZV9ub3Rlc19tZXJnZV9zdHJhdGVneShzdHJhdGVneSwgJm8uc3RyYXRlZ3kpKSB7Ci0JCQllcnJvcigiVW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIsIHN0cmF0ZWd5KTsKKwkJCWVycm9yKF8oIlVua25vd24gLXMvLS1zdHJhdGVneTogJXMiKSwgc3RyYXRlZ3kpOwogCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19tZXJnZV91c2FnZSwgb3B0aW9ucyk7CiAJCX0KIAl9IGVsc2UgewpAQCAtODU3LDExICs4NTgsMTEgQEAKIAkJCWRpZShfKCJBIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIpLAogCQkJICAgIGRlZmF1bHRfbm90ZXNfcmVmKCksIHd0LT5wYXRoKTsKIAkJaWYgKGNyZWF0ZV9zeW1yZWYoIk5PVEVTX01FUkdFX1JFRiIsIGRlZmF1bHRfbm90ZXNfcmVmKCksIE5VTEwpKQotCQkJZGllKCJGYWlsZWQgdG8gc3RvcmUgbGluayB0byBjdXJyZW50IG5vdGVzIHJlZiAoJXMpIiwKKwkJCWRpZShfKCJGYWlsZWQgdG8gc3RvcmUgbGluayB0byBjdXJyZW50IG5vdGVzIHJlZiAoJXMpIiksCiAJCQkgICAgZGVmYXVsdF9ub3Rlc19yZWYoKSk7Ci0JCXByaW50ZigiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyBhbmQgIgotCQkgICAgICAgImNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yICIKLQkJICAgICAgICJhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLlxuIiwKKwkJcHJpbnRmKF8oIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kICIKKwkJCSAiY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgIgorCQkJICJhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLlxuIiksCiAJCSAgICAgICBnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpOwogCX0KIApAQCAtOTM0LDggKzkzNSw4IEBACiAJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CiAJaW50IHNob3dfb25seSA9IDAsIHZlcmJvc2UgPSAwOwogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewotCQlPUFRfX0RSWV9SVU4oJnNob3dfb25seSwgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIpLAotCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsICJyZXBvcnQgcHJ1bmVkIG5vdGVzIiksCisJCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5LCBOXygiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IikpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJyZXBvcnQgcHJ1bmVkIG5vdGVzIikpLAogCQlPUFRfRU5EKCkKIAl9OwogCkBAIC05NjQsNyArOTY1LDcgQEAKIAkJCSAgICAgZ2l0X25vdGVzX2dldF9yZWZfdXNhZ2UsIDApOwogCiAJaWYgKGFyZ2MpIHsKLQkJZXJyb3IoInRvbyBtYW55IHBhcmFtZXRlcnMiKTsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19nZXRfcmVmX3VzYWdlLCBvcHRpb25zKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcGFjay1vYmplY3RzLmMgYi9idWlsdGluL3BhY2stb2JqZWN0cy5jCmluZGV4IDhmNWUzNTguLjRhNjMzOTggMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcGFjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi9wYWNrLW9iamVjdHMuYwpAQCAtNDQsNyArNDQsOSBAQAogc3RhdGljIGludCByZXVzZV9kZWx0YSA9IDEsIHJldXNlX29iamVjdCA9IDE7CiBzdGF0aWMgaW50IGtlZXBfdW5yZWFjaGFibGUsIHVucGFja191bnJlYWNoYWJsZSwgaW5jbHVkZV90YWc7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB1bnBhY2tfdW5yZWFjaGFibGVfZXhwaXJhdGlvbjsKK3N0YXRpYyBpbnQgcGFja19sb29zZV91bnJlYWNoYWJsZTsKIHN0YXRpYyBpbnQgbG9jYWw7CitzdGF0aWMgaW50IGhhdmVfbm9uX2xvY2FsX3BhY2tzOwogc3RhdGljIGludCBpbmNyZW1lbnRhbDsKIHN0YXRpYyBpbnQgaWdub3JlX3BhY2tlZF9rZWVwOwogc3RhdGljIGludCBhbGxvd19vZnNfZGVsdGE7CkBAIC0zNDEsMTUgKzM0MywxNSBAQAogfQogCiAvKiBSZXR1cm4gMCBpZiB3ZSB3aWxsIGJ1c3QgdGhlIHBhY2stc2l6ZSBsaW1pdCAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfcmV1c2Vfb2JqZWN0KHN0cnVjdCBzaGExZmlsZSAqZiwgc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnksCi0JCQkJCXVuc2lnbmVkIGxvbmcgbGltaXQsIGludCB1c2FibGVfZGVsdGEpCitzdGF0aWMgb2ZmX3Qgd3JpdGVfcmV1c2Vfb2JqZWN0KHN0cnVjdCBzaGExZmlsZSAqZiwgc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnksCisJCQkJdW5zaWduZWQgbG9uZyBsaW1pdCwgaW50IHVzYWJsZV9kZWx0YSkKIHsKIAlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGVudHJ5LT5pbl9wYWNrOwogCXN0cnVjdCBwYWNrX3dpbmRvdyAqd19jdXJzID0gTlVMTDsKIAlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeDsKIAlvZmZfdCBvZmZzZXQ7CiAJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gZW50cnktPnR5cGU7Ci0JdW5zaWduZWQgbG9uZyBkYXRhbGVuOworCW9mZl90IGRhdGFsZW47CiAJdW5zaWduZWQgY2hhciBoZWFkZXJbMTBdLCBkaGVhZGVyWzEwXTsKIAl1bnNpZ25lZCBoZHJsZW47CiAKQEAgLTQxNSwxMSArNDE3LDEyIEBACiB9CiAKIC8qIFJldHVybiAwIGlmIHdlIHdpbGwgYnVzdCB0aGUgcGFjay1zaXplIGxpbWl0ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV9vYmplY3Qoc3RydWN0IHNoYTFmaWxlICpmLAotCQkJCSAgc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnksCi0JCQkJICBvZmZfdCB3cml0ZV9vZmZzZXQpCitzdGF0aWMgb2ZmX3Qgd3JpdGVfb2JqZWN0KHN0cnVjdCBzaGExZmlsZSAqZiwKKwkJCSAgc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnksCisJCQkgIG9mZl90IHdyaXRlX29mZnNldCkKIHsKLQl1bnNpZ25lZCBsb25nIGxpbWl0LCBsZW47CisJdW5zaWduZWQgbG9uZyBsaW1pdDsKKwlvZmZfdCBsZW47CiAJaW50IHVzYWJsZV9kZWx0YSwgdG9fcmV1c2U7CiAKIAlpZiAoIXBhY2tfdG9fc3Rkb3V0KQpAQCAtNDkxLDcgKzQ5NCw3IEBACiAJCQkJICAgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCiAJCQkJICAgICAgIG9mZl90ICpvZmZzZXQpCiB7Ci0JdW5zaWduZWQgbG9uZyBzaXplOworCW9mZl90IHNpemU7CiAJaW50IHJlY3Vyc2luZzsKIAogCS8qCkBAIC05NzYsNiArOTc5LDIzIEBACiAJCQkJcmV0dXJuIDE7CiAJCQlpZiAoaW5jcmVtZW50YWwpCiAJCQkJcmV0dXJuIDA7CisKKwkJCS8qCisJCQkgKiBXaGVuIGFza2VkIHRvIGRvIC0tbG9jYWwgKGRvIG5vdCBpbmNsdWRlIGFuCisJCQkgKiBvYmplY3QgdGhhdCBhcHBlYXJzIGluIGEgcGFjayB3ZSBib3Jyb3cKKwkJCSAqIGZyb20gZWxzZXdoZXJlKSBvciAtLWhvbm9yLXBhY2sta2VlcCAoZG8gbm90CisJCQkgKiBpbmNsdWRlIGFuIG9iamVjdCB0aGF0IGFwcGVhcnMgaW4gYSBwYWNrIG1hcmtlZAorCQkJICogd2l0aCAua2VlcCksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIG5vIGNvcHkgb2YgdGhpcworCQkJICogb2JqZWN0IGNvbWUgZnJvbSBpbiBfYW55XyBwYWNrIHRoYXQgY2F1c2VzIHVzIHRvCisJCQkgKiBvbWl0IGl0LCBhbmQgbmVlZCB0byBjb21wbGV0ZSB0aGlzIGxvb3AuICBXaGVuCisJCQkgKiBuZWl0aGVyIG9wdGlvbiBpcyBpbiBlZmZlY3QsIHdlIGtub3cgdGhlIG9iamVjdAorCQkJICogd2UganVzdCBmb3VuZCBpcyBnb2luZyB0byBiZSBwYWNrZWQsIHNvIGJyZWFrCisJCQkgKiBvdXQgb2YgdGhlIGxvb3AgdG8gcmV0dXJuIDEgbm93LgorCQkJICovCisJCQlpZiAoIWlnbm9yZV9wYWNrZWRfa2VlcCAmJgorCQkJICAgICghbG9jYWwgfHwgIWhhdmVfbm9uX2xvY2FsX3BhY2tzKSkKKwkJCQlicmVhazsKKwogCQkJaWYgKGxvY2FsICYmICFwLT5wYWNrX2xvY2FsKQogCQkJCXJldHVybiAwOwogCQkJaWYgKGlnbm9yZV9wYWNrZWRfa2VlcCAmJiBwLT5wYWNrX2xvY2FsICYmIHAtPnBhY2tfa2VlcCkKQEAgLTIzNzgsNiArMjM5OCwzMiBAQAogCWZyZWUoaW5fcGFjay5hcnJheSk7CiB9CiAKK3N0YXRpYyBpbnQgYWRkX2xvb3NlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgIHZvaWQgKmRhdGEpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKworCWlmICh0eXBlIDwgMCkgeworCQl3YXJuaW5nKCJsb29zZSBvYmplY3QgYXQgJXMgY291bGQgbm90IGJlIGV4YW1pbmVkIiwgcGF0aCk7CisJCXJldHVybiAwOworCX0KKworCWFkZF9vYmplY3RfZW50cnkoc2hhMSwgdHlwZSwgIiIsIDApOworCXJldHVybiAwOworfQorCisvKgorICogV2UgYWN0dWFsbHkgZG9uJ3QgZXZlbiBoYXZlIHRvIHdvcnJ5IGFib3V0IHJlYWNoYWJpbGl0eSBoZXJlLgorICogYWRkX29iamVjdF9lbnRyeSB3aWxsIHdlZWQgb3V0IGR1cGxpY2F0ZXMsIHNvIHdlIGp1c3QgYWRkIGV2ZXJ5CisgKiBsb29zZSBvYmplY3Qgd2UgZmluZC4KKyAqLworc3RhdGljIHZvaWQgYWRkX3VucmVhY2hhYmxlX2xvb3NlX29iamVjdHModm9pZCkKK3sKKwlmb3JfZWFjaF9sb29zZV9maWxlX2luX29iamRpcihnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLAorCQkJCSAgICAgIGFkZF9sb29zZV9vYmplY3QsCisJCQkJICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7Cit9CisKIHN0YXRpYyBpbnQgaGFzX3NoYTFfcGFja19rZXB0X29yX25vbmxvY2FsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RhdGljIHN0cnVjdCBwYWNrZWRfZ2l0ICpsYXN0X2ZvdW5kID0gKHZvaWQgKikxOwpAQCAtMjU0Nyw2ICsyNTkzLDggQEAKIAogCWlmIChrZWVwX3VucmVhY2hhYmxlKQogCQlhZGRfb2JqZWN0c19pbl91bnBhY2tlZF9wYWNrcygmcmV2cyk7CisJaWYgKHBhY2tfbG9vc2VfdW5yZWFjaGFibGUpCisJCWFkZF91bnJlYWNoYWJsZV9sb29zZV9vYmplY3RzKCk7CiAJaWYgKHVucGFja191bnJlYWNoYWJsZSkKIAkJbG9vc2VuX3VudXNlZF9wYWNrZWRfb2JqZWN0cygmcmV2cyk7CiAKQEAgLTI2NDcsNiArMjY5NSw4IEBACiAJCQkgTl8oImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIpKSwKIAkJT1BUX0JPT0woMCwgImtlZXAtdW5yZWFjaGFibGUiLCAma2VlcF91bnJlYWNoYWJsZSwKIAkJCSBOXygia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIikpLAorCQlPUFRfQk9PTCgwLCAicGFjay1sb29zZS11bnJlYWNoYWJsZSIsICZwYWNrX2xvb3NlX3VucmVhY2hhYmxlLAorCQkJIE5fKCJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiKSksCiAJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAidW5wYWNrLXVucmVhY2hhYmxlIiwgTlVMTCwgTl8oInRpbWUiKSwKIAkJICBOXygidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iKSwKIAkJICBQQVJTRV9PUFRfT1BUQVJHLCBvcHRpb25fcGFyc2VfdW5wYWNrX3VucmVhY2hhYmxlIH0sCkBAIC0yNzUyLDYgKzI4MDIsMjggQEAKIAkJcHJvZ3Jlc3MgPSAyOwogCiAJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisJaWYgKGlnbm9yZV9wYWNrZWRfa2VlcCkgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwkJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpCisJCQlpZiAocC0+cGFja19sb2NhbCAmJiBwLT5wYWNrX2tlZXApCisJCQkJYnJlYWs7CisJCWlmICghcCkgLyogbm8ga2VlcC1hYmxlIHBhY2tzIGZvdW5kICovCisJCQlpZ25vcmVfcGFja2VkX2tlZXAgPSAwOworCX0KKwlpZiAobG9jYWwpIHsKKwkJLyoKKwkJICogdW5saWtlIGlnbm9yZV9wYWNrZWRfa2VlcCBhYm92ZSwgd2UgZG8gbm90IHdhbnQgdG8KKwkJICogdW5zZXQgImxvY2FsIiBiYXNlZCBvbiBsb29raW5nIGF0IHBhY2tzLCBhcyBpdAorCQkgKiBhbHNvIGNvdmVycyBub24tbG9jYWwgb2JqZWN0cworCQkgKi8KKwkJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlpZiAoIXAtPnBhY2tfbG9jYWwpIHsKKwkJCQloYXZlX25vbl9sb2NhbF9wYWNrcyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CiAKIAlpZiAocHJvZ3Jlc3MpCiAJCXByb2dyZXNzX3N0YXRlID0gc3RhcnRfcHJvZ3Jlc3MoXygiQ291bnRpbmcgb2JqZWN0cyIpLCAwKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcHVsbC5jIGIvYnVpbHRpbi9wdWxsLmMKaW5kZXggMWQ3MzMzYy4uMzk4YWFlMSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9wdWxsLmMKKysrIGIvYnVpbHRpbi9wdWxsLmMKQEAgLTgxNSw2ICs4MTUsOSBAQAogCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLW5vLWF1dG9zdGFzaCIpOwogCWVsc2UgaWYgKG9wdF9hdXRvc3Rhc2ggPT0gMSkKIAkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1hdXRvc3Rhc2giKTsKKwlpZiAob3B0X3ZlcmlmeV9zaWduYXR1cmVzICYmCisJICAgICFzdHJjbXAob3B0X3ZlcmlmeV9zaWduYXR1cmVzLCAiLS12ZXJpZnktc2lnbmF0dXJlcyIpKQorCQl3YXJuaW5nKF8oImlnbm9yaW5nIC0tdmVyaWZ5LXNpZ25hdHVyZXMgZm9yIHJlYmFzZSIpKTsKIAogCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tb250byIpOwogCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgc2hhMV90b19oZXgobWVyZ2VfaGVhZCkpOwpAQCAtODUyLDcgKzg1NSw3IEBACiAJZ2l0X2NvbmZpZyhnaXRfcHVsbF9jb25maWcsIE5VTEwpOwogCiAJaWYgKHJlYWRfY2FjaGVfdW5tZXJnZWQoKSkKLQkJZGllX3Jlc29sdmVfY29uZmxpY3QoIlB1bGwiKTsKKwkJZGllX3Jlc29sdmVfY29uZmxpY3QoInB1bGwiKTsKIAogCWlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKSkKIAkJZGllX2NvbmNsdWRlX21lcmdlKCk7CmRpZmYgLS1naXQgYS9idWlsdGluL3B1c2guYyBiL2J1aWx0aW4vcHVzaC5jCmluZGV4IDRlOWU0ZGIuLjNiYjlkNmIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcHVzaC5jCisrKyBiL2J1aWx0aW4vcHVzaC5jCkBAIC0zNTMsNyArMzUzLDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBkb19wdXNoKGNvbnN0IGNoYXIgKnJlcG8sIGludCBmbGFncykKK3N0YXRpYyBpbnQgZG9fcHVzaChjb25zdCBjaGFyICpyZXBvLCBpbnQgZmxhZ3MsCisJCSAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHVzaF9vcHRpb25zKQogewogCWludCBpLCBlcnJzOwogCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IHB1c2hyZW1vdGVfZ2V0KHJlcG8pOwpAQCAtMzc2LDYgKzM3Nyw5IEBACiAJaWYgKHJlbW90ZS0+bWlycm9yKQogCQlmbGFncyB8PSAoVFJBTlNQT1JUX1BVU0hfTUlSUk9SfFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKIAorCWlmIChwdXNoX29wdGlvbnMtPm5yKQorCQlmbGFncyB8PSBUUkFOU1BPUlRfUFVTSF9PUFRJT05TOworCiAJaWYgKChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCkgJiYgcmVmc3BlYykgewogCQlpZiAoIXN0cmNtcCgqcmVmc3BlYywgInJlZnMvdGFncy8qIikpCiAJCQlyZXR1cm4gZXJyb3IoXygiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIikpOwpAQCAtNDA2LDEzICs0MTAsMTYgQEAKIAkJZm9yIChpID0gMDsgaSA8IHVybF9ucjsgaSsrKSB7CiAJCQlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQgPQogCQkJCXRyYW5zcG9ydF9nZXQocmVtb3RlLCB1cmxbaV0pOworCQkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfT1BUSU9OUykKKwkJCQl0cmFuc3BvcnQtPnB1c2hfb3B0aW9ucyA9IHB1c2hfb3B0aW9uczsKIAkJCWlmIChwdXNoX3dpdGhfb3B0aW9ucyh0cmFuc3BvcnQsIGZsYWdzKSkKIAkJCQllcnJzKys7CiAJCX0KIAl9IGVsc2UgewogCQlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQgPQogCQkJdHJhbnNwb3J0X2dldChyZW1vdGUsIE5VTEwpOwotCisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX09QVElPTlMpCisJCQl0cmFuc3BvcnQtPnB1c2hfb3B0aW9ucyA9IHB1c2hfb3B0aW9uczsKIAkJaWYgKHB1c2hfd2l0aF9vcHRpb25zKHRyYW5zcG9ydCwgZmxhZ3MpKQogCQkJZXJycysrOwogCX0KQEAgLTUwMCw2ICs1MDcsOSBAQAogCWludCBwdXNoX2NlcnQgPSAtMTsKIAlpbnQgcmM7CiAJY29uc3QgY2hhciAqcmVwbyA9IE5VTEw7CS8qIGRlZmF1bHQgcmVwb3NpdG9yeSAqLworCXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgcHVzaF9vcHRpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAJCU9QVF9fVkVSQk9TSVRZKCZ2ZXJib3NpdHkpLAogCQlPUFRfU1RSSU5HKCAwICwgInJlcG8iLCAmcmVwbywgTl8oInJlcG9zaXRvcnkiKSwgTl8oInJlcG9zaXRvcnkiKSksCkBAIC01MzMsNiArNTQzLDcgQEAKIAkJICAwLCAic2lnbmVkIiwgJnB1c2hfY2VydCwgInllc3xub3xpZi1hc2tlZCIsIE5fKCJHUEcgc2lnbiB0aGUgcHVzaCIpLAogCQkgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9wYXJzZV9wdXNoX3NpZ25lZCB9LAogCQlPUFRfQklUKDAsICJhdG9taWMiLCAmZmxhZ3MsIE5fKCJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIpLCBUUkFOU1BPUlRfUFVTSF9BVE9NSUMpLAorCQlPUFRfU1RSSU5HX0xJU1QoJ28nLCAicHVzaC1vcHRpb24iLCAmcHVzaF9vcHRpb25zLCBOXygic2VydmVyLXNwZWNpZmljIiksIE5fKCJvcHRpb24gdG8gdHJhbnNtaXQiKSksCiAJCU9QVF9TRVRfSU5UKCc0JywgImlwdjQiLCAmZmFtaWx5LCBOXygidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiKSwKIAkJCQlUUkFOU1BPUlRfRkFNSUxZX0lQVjQpLAogCQlPUFRfU0VUX0lOVCgnNicsICJpcHY2IiwgJmZhbWlseSwgTl8oInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IiksCkBAIC01NjMsNyArNTc0LDExIEBACiAJCXNldF9yZWZzcGVjcyhhcmd2ICsgMSwgYXJnYyAtIDEsIHJlcG8pOwogCX0KIAotCXJjID0gZG9fcHVzaChyZXBvLCBmbGFncyk7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmcHVzaF9vcHRpb25zKQorCQlpZiAoc3RyY2hyKGl0ZW0tPnN0cmluZywgJ1xuJykpCisJCQlkaWUoXygicHVzaCBvcHRpb25zIG11c3Qgbm90IGhhdmUgbmV3IGxpbmUgY2hhcmFjdGVycyIpKTsKKworCXJjID0gZG9fcHVzaChyZXBvLCBmbGFncywgJnB1c2hfb3B0aW9ucyk7CiAJaWYgKHJjID09IC0xKQogCQl1c2FnZV93aXRoX29wdGlvbnMocHVzaF91c2FnZSwgb3B0aW9ucyk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZWNlaXZlLXBhY2suYyBiL2J1aWx0aW4vcmVjZWl2ZS1wYWNrLmMKaW5kZXggYTc0NDQzNy4uOTJlMTIxMyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yZWNlaXZlLXBhY2suYworKysgYi9idWlsdGluL3JlY2VpdmUtcGFjay5jCkBAIC00NCwxMCArNDQsMTIgQEAKIHN0YXRpYyBpbnQgcmVjZWl2ZV91bnBhY2tfbGltaXQgPSAtMTsKIHN0YXRpYyBpbnQgdHJhbnNmZXJfdW5wYWNrX2xpbWl0ID0gLTE7CiBzdGF0aWMgaW50IGFkdmVydGlzZV9hdG9taWNfcHVzaCA9IDE7CitzdGF0aWMgaW50IGFkdmVydGlzZV9wdXNoX29wdGlvbnM7CiBzdGF0aWMgaW50IHVucGFja19saW1pdCA9IDEwMDsKIHN0YXRpYyBpbnQgcmVwb3J0X3N0YXR1czsKIHN0YXRpYyBpbnQgdXNlX3NpZGViYW5kOwogc3RhdGljIGludCB1c2VfYXRvbWljOworc3RhdGljIGludCB1c2VfcHVzaF9vcHRpb25zOwogc3RhdGljIGludCBxdWlldDsKIHN0YXRpYyBpbnQgcHJlZmVyX29mc19kZWx0YSA9IDE7CiBzdGF0aWMgaW50IGF1dG9fdXBkYXRlX3NlcnZlcl9pbmZvOwpAQCAtNzYsNiArNzgsMTMgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5vbmNlX3N0YW1wX3Nsb3BfbGltaXQ7CiBzdGF0aWMgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CiAKK3N0YXRpYyBlbnVtIHsKKwlLRUVQQUxJVkVfTkVWRVIgPSAwLAorCUtFRVBBTElWRV9BRlRFUl9OVUwsCisJS0VFUEFMSVZFX0FMV0FZUworfSB1c2Vfa2VlcGFsaXZlOworc3RhdGljIGludCBrZWVwYWxpdmVfaW5fc2VjID0gNTsKKwogc3RhdGljIGVudW0gZGVueV9hY3Rpb24gcGFyc2VfZGVueV9hY3Rpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKIAlpZiAodmFsdWUpIHsKQEAgLTE5Myw2ICsyMDIsMTYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmFkdmVydGlzZXB1c2hvcHRpb25zIikgPT0gMCkgeworCQlhZHZlcnRpc2VfcHVzaF9vcHRpb25zID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUua2VlcGFsaXZlIikgPT0gMCkgeworCQlrZWVwYWxpdmVfaW5fc2VjID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwogCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCkBAIC0yMTEsNiArMjMwLDggQEAKIAkJCXN0cmJ1Zl9hZGRzdHIoJmNhcCwgIiBvZnMtZGVsdGEiKTsKIAkJaWYgKHB1c2hfY2VydF9ub25jZSkKIAkJCXN0cmJ1Zl9hZGRmKCZjYXAsICIgcHVzaC1jZXJ0PSVzIiwgcHVzaF9jZXJ0X25vbmNlKTsKKwkJaWYgKGFkdmVydGlzZV9wdXNoX29wdGlvbnMpCisJCQlzdHJidWZfYWRkc3RyKCZjYXAsICIgcHVzaC1vcHRpb25zIik7CiAJCXN0cmJ1Zl9hZGRmKCZjYXAsICIgYWdlbnQ9JXMiLCBnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQoKSk7CiAJCXBhY2tldF93cml0ZSgxLCAiJXMgJXMlYyVzXG4iLAogCQkJICAgICBzaGExX3RvX2hleChzaGExKSwgcGF0aCwgMCwgY2FwLmJ1Zik7CkBAIC0zMTksMTAgKzM0MCw2MCBAQAogc3RhdGljIGludCBjb3B5X3RvX3NpZGViYW5kKGludCBpbiwgaW50IG91dCwgdm9pZCAqYXJnKQogewogCWNoYXIgZGF0YVsxMjhdOworCWludCBrZWVwYWxpdmVfYWN0aXZlID0gMDsKKworCWlmIChrZWVwYWxpdmVfaW5fc2VjIDw9IDApCisJCXVzZV9rZWVwYWxpdmUgPSBLRUVQQUxJVkVfTkVWRVI7CisJaWYgKHVzZV9rZWVwYWxpdmUgPT0gS0VFUEFMSVZFX0FMV0FZUykKKwkJa2VlcGFsaXZlX2FjdGl2ZSA9IDE7CisKIAl3aGlsZSAoMSkgewotCQlzc2l6ZV90IHN6ID0geHJlYWQoaW4sIGRhdGEsIHNpemVvZihkYXRhKSk7CisJCXNzaXplX3Qgc3o7CisKKwkJaWYgKGtlZXBhbGl2ZV9hY3RpdmUpIHsKKwkJCXN0cnVjdCBwb2xsZmQgcGZkOworCQkJaW50IHJldDsKKworCQkJcGZkLmZkID0gaW47CisJCQlwZmQuZXZlbnRzID0gUE9MTElOOworCQkJcmV0ID0gcG9sbCgmcGZkLCAxLCAxMDAwICoga2VlcGFsaXZlX2luX3NlYyk7CisKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJCQljb250aW51ZTsKKwkJCQllbHNlCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChyZXQgPT0gMCkgeworCQkJCS8qIG5vIGRhdGE7IHNlbmQgYSBrZWVwYWxpdmUgcGFja2V0ICovCisJCQkJc3RhdGljIGNvbnN0IGNoYXIgYnVmW10gPSAiMDAwNVwxIjsKKwkJCQl3cml0ZV9vcl9kaWUoMSwgYnVmLCBzaXplb2YoYnVmKSAtIDEpOworCQkJCWNvbnRpbnVlOworCQkJfSAvKiBlbHNlIHRoZXJlIGlzIGFjdHVhbCBkYXRhIHRvIHJlYWQgKi8KKwkJfQorCisJCXN6ID0geHJlYWQoaW4sIGRhdGEsIHNpemVvZihkYXRhKSk7CiAJCWlmIChzeiA8PSAwKQogCQkJYnJlYWs7CisKKwkJaWYgKHVzZV9rZWVwYWxpdmUgPT0gS0VFUEFMSVZFX0FGVEVSX05VTCAmJiAha2VlcGFsaXZlX2FjdGl2ZSkgeworCQkJY29uc3QgY2hhciAqcCA9IG1lbWNocihkYXRhLCAnXDAnLCBzeik7CisJCQlpZiAocCkgeworCQkJCS8qCisJCQkJICogVGhlIE5VTCB0ZWxscyB1cyB0byBzdGFydCBzZW5kaW5nIGtlZXBhbGl2ZXMuIE1ha2UKKwkJCQkgKiBzdXJlIHdlIHNlbmQgYW55IG90aGVyIGRhdGEgd2UgcmVhZCBhbG9uZworCQkJCSAqIHdpdGggaXQuCisJCQkJICovCisJCQkJa2VlcGFsaXZlX2FjdGl2ZSA9IDE7CisJCQkJc2VuZF9zaWRlYmFuZCgxLCAyLCBkYXRhLCBwIC0gZGF0YSwgdXNlX3NpZGViYW5kKTsKKwkJCQlzZW5kX3NpZGViYW5kKDEsIDIsIHAgKyAxLCBzeiAtIChwIC0gZGF0YSArIDEpLCB1c2Vfc2lkZWJhbmQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogRWl0aGVyIHdlJ3JlIG5vdCBsb29raW5nIGZvciBhIE5VTCBzaWduYWwsIG9yIHdlIGRpZG4ndCBzZWUKKwkJICogaXQgeWV0OyBqdXN0IHBhc3MgYWxvbmcgdGhlIGRhdGEuCisJCSAqLwogCQlzZW5kX3NpZGViYW5kKDEsIDIsIGRhdGEsIHN6LCB1c2Vfc2lkZWJhbmQpOwogCX0KIAljbG9zZShpbik7CkBAIC01NTAsOCArNjIxLDE2IEBACiAJfQogfQogCitzdHJ1Y3QgcmVjZWl2ZV9ob29rX2ZlZWRfc3RhdGUgeworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJaW50IHNraXBfYnJva2VuOworCXN0cnVjdCBzdHJidWYgYnVmOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHVzaF9vcHRpb25zOworfTsKKwogdHlwZWRlZiBpbnQgKCpmZWVkX2ZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiosIHNpemVfdCAqKTsKLXN0YXRpYyBpbnQgcnVuX2FuZF9mZWVkX2hvb2soY29uc3QgY2hhciAqaG9va19uYW1lLCBmZWVkX2ZuIGZlZWQsIHZvaWQgKmZlZWRfc3RhdGUpCitzdGF0aWMgaW50IHJ1bl9hbmRfZmVlZF9ob29rKGNvbnN0IGNoYXIgKmhvb2tfbmFtZSwgZmVlZF9mbiBmZWVkLAorCQkJICAgICBzdHJ1Y3QgcmVjZWl2ZV9ob29rX2ZlZWRfc3RhdGUgKmZlZWRfc3RhdGUpCiB7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcHJvYyA9IENISUxEX1BST0NFU1NfSU5JVDsKIAlzdHJ1Y3QgYXN5bmMgbXV4ZXI7CkBAIC01NjcsNiArNjQ2LDE2IEBACiAJcHJvYy5hcmd2ID0gYXJndjsKIAlwcm9jLmluID0gLTE7CiAJcHJvYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlpZiAoZmVlZF9zdGF0ZS0+cHVzaF9vcHRpb25zKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgZmVlZF9zdGF0ZS0+cHVzaF9vcHRpb25zLT5ucjsgaSsrKQorCQkJYXJndl9hcnJheV9wdXNoZigmcHJvYy5lbnZfYXJyYXksCisJCQkJIkdJVF9QVVNIX09QVElPTl8lZD0lcyIsIGksCisJCQkJZmVlZF9zdGF0ZS0+cHVzaF9vcHRpb25zLT5pdGVtc1tpXS5zdHJpbmcpOworCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLmVudl9hcnJheSwgIkdJVF9QVVNIX09QVElPTl9DT1VOVD0lZCIsCisJCQkJIGZlZWRfc3RhdGUtPnB1c2hfb3B0aW9ucy0+bnIpOworCX0gZWxzZQorCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLmVudl9hcnJheSwgIkdJVF9QVVNIX09QVElPTl9DT1VOVCIpOwogCiAJaWYgKHVzZV9zaWRlYmFuZCkgewogCQltZW1zZXQoJm11eGVyLCAwLCBzaXplb2YobXV4ZXIpKTsKQEAgLTYwNiwxMiArNjk1LDYgQEAKIAlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJnByb2MpOwogfQogCi1zdHJ1Y3QgcmVjZWl2ZV9ob29rX2ZlZWRfc3RhdGUgewotCXN0cnVjdCBjb21tYW5kICpjbWQ7Ci0JaW50IHNraXBfYnJva2VuOwotCXN0cnVjdCBzdHJidWYgYnVmOwotfTsKLQogc3RhdGljIGludCBmZWVkX3JlY2VpdmVfaG9vayh2b2lkICpzdGF0ZV8sIGNvbnN0IGNoYXIgKipidWZwLCBzaXplX3QgKnNpemVwKQogewogCXN0cnVjdCByZWNlaXZlX2hvb2tfZmVlZF9zdGF0ZSAqc3RhdGUgPSBzdGF0ZV87CkBAIC02MzQsOCArNzE3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnVuX3JlY2VpdmVfaG9vayhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsIGNvbnN0IGNoYXIgKmhvb2tfbmFtZSwKLQkJCSAgICBpbnQgc2tpcF9icm9rZW4pCitzdGF0aWMgaW50IHJ1bl9yZWNlaXZlX2hvb2soc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzLAorCQkJICAgIGNvbnN0IGNoYXIgKmhvb2tfbmFtZSwKKwkJCSAgICBpbnQgc2tpcF9icm9rZW4sCisJCQkgICAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwdXNoX29wdGlvbnMpCiB7CiAJc3RydWN0IHJlY2VpdmVfaG9va19mZWVkX3N0YXRlIHN0YXRlOwogCWludCBzdGF0dXM7CkBAIC02NDYsNiArNzMxLDcgQEAKIAlpZiAoZmVlZF9yZWNlaXZlX2hvb2soJnN0YXRlLCBOVUxMLCBOVUxMKSkKIAkJcmV0dXJuIDA7CiAJc3RhdGUuY21kID0gY29tbWFuZHM7CisJc3RhdGUucHVzaF9vcHRpb25zID0gcHVzaF9vcHRpb25zOwogCXN0YXR1cyA9IHJ1bl9hbmRfZmVlZF9ob29rKGhvb2tfbmFtZSwgZmVlZF9yZWNlaXZlX2hvb2ssICZzdGF0ZSk7CiAJc3RyYnVmX3JlbGVhc2UoJnN0YXRlLmJ1Zik7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTczNyw3ICs4MjMsNyBAQAogewogCXN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIHNoYWxsb3dfbG9jazsKIAlzdHJ1Y3Qgc2hhMV9hcnJheSBleHRyYSA9IFNIQTFfQVJSQVlfSU5JVDsKLQljb25zdCBjaGFyICphbHRfZmlsZTsKKwlzdHJ1Y3QgY2hlY2tfY29ubmVjdGVkX29wdGlvbnMgb3B0ID0gQ0hFQ0tfQ09OTkVDVEVEX0lOSVQ7CiAJdWludDMyX3QgbWFzayA9IDEgPDwgKGNtZC0+aW5kZXggJSAzMik7CiAJaW50IGk7CiAKQEAgLTc0OSw5ICs4MzUsOCBAQAogCQkgICAgIWRlbGF5ZWRfcmVhY2hhYmlsaXR5X3Rlc3Qoc2ksIGkpKQogCQkJc2hhMV9hcnJheV9hcHBlbmQoJmV4dHJhLCBzaS0+c2hhbGxvdy0+c2hhMVtpXSk7CiAKLQlzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdygmc2hhbGxvd19sb2NrLCAmYWx0X2ZpbGUsICZleHRyYSk7Ci0JaWYgKGNoZWNrX3NoYWxsb3dfY29ubmVjdGVkKGNvbW1hbmRfc2luZ2xldG9uX2l0ZXJhdG9yLAotCQkJCSAgICAwLCBjbWQsIGFsdF9maWxlKSkgeworCXNldHVwX2FsdGVybmF0ZV9zaGFsbG93KCZzaGFsbG93X2xvY2ssICZvcHQuc2hhbGxvd19maWxlLCAmZXh0cmEpOworCWlmIChjaGVja19jb25uZWN0ZWQoY29tbWFuZF9zaW5nbGV0b25faXRlcmF0b3IsIGNtZCwgJm9wdCkpIHsKIAkJcm9sbGJhY2tfbG9ja19maWxlKCZzaGFsbG93X2xvY2spOwogCQlzaGExX2FycmF5X2NsZWFyKCZleHRyYSk7CiAJCXJldHVybiAtMTsKQEAgLTExNjAsOCArMTI0NSw4IEBACiAJCWlmIChzaGFsbG93X3VwZGF0ZSAmJiBzaS0+c2hhbGxvd19yZWZbY21kLT5pbmRleF0pCiAJCQkvKiB0byBiZSBjaGVja2VkIGluIHVwZGF0ZV9zaGFsbG93X3JlZigpICovCiAJCQljb250aW51ZTsKLQkJaWYgKCFjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZChjb21tYW5kX3NpbmdsZXRvbl9pdGVyYXRvciwKLQkJCQkJCTAsICZzaW5nbGV0b24pKQorCQlpZiAoIWNoZWNrX2Nvbm5lY3RlZChjb21tYW5kX3NpbmdsZXRvbl9pdGVyYXRvciwgJnNpbmdsZXRvbiwKKwkJCQkgICAgIE5VTEwpKQogCQkJY29udGludWU7CiAJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gIm1pc3NpbmcgbmVjZXNzYXJ5IG9iamVjdHMiOwogCX0KQEAgLTEzMTYsMTEgKzE0MDEsMTUgQEAKIAogc3RhdGljIHZvaWQgZXhlY3V0ZV9jb21tYW5kcyhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsCiAJCQkgICAgIGNvbnN0IGNoYXIgKnVucGFja2VyX2Vycm9yLAotCQkJICAgICBzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKKwkJCSAgICAgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2ksCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHVzaF9vcHRpb25zKQogeworCXN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyBvcHQgPSBDSEVDS19DT05ORUNURURfSU5JVDsKIAlzdHJ1Y3QgY29tbWFuZCAqY21kOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJc3RydWN0IGl0ZXJhdGVfZGF0YSBkYXRhOworCXN0cnVjdCBhc3luYyBtdXhlcjsKKwlpbnQgZXJyX2ZkID0gMDsKIAogCWlmICh1bnBhY2tlcl9lcnJvcikgewogCQlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkKQEAgLTEzMjgsMTQgKzE0MTcsMjggQEAKIAkJcmV0dXJuOwogCX0KIAorCWlmICh1c2Vfc2lkZWJhbmQpIHsKKwkJbWVtc2V0KCZtdXhlciwgMCwgc2l6ZW9mKG11eGVyKSk7CisJCW11eGVyLnByb2MgPSBjb3B5X3RvX3NpZGViYW5kOworCQltdXhlci5pbiA9IC0xOworCQlpZiAoIXN0YXJ0X2FzeW5jKCZtdXhlcikpCisJCQllcnJfZmQgPSBtdXhlci5pbjsKKwkJLyogLi4uZWxzZSwgY29udGludWUgd2l0aG91dCByZWxheWluZyBzaWRlYmFuZCAqLworCX0KKwogCWRhdGEuY21kcyA9IGNvbW1hbmRzOwogCWRhdGEuc2kgPSBzaTsKLQlpZiAoY2hlY2tfZXZlcnl0aGluZ19jb25uZWN0ZWQoaXRlcmF0ZV9yZWNlaXZlX2NvbW1hbmRfbGlzdCwgMCwgJmRhdGEpKQorCW9wdC5lcnJfZmQgPSBlcnJfZmQ7CisJb3B0LnByb2dyZXNzID0gZXJyX2ZkICYmICFxdWlldDsKKwlpZiAoY2hlY2tfY29ubmVjdGVkKGl0ZXJhdGVfcmVjZWl2ZV9jb21tYW5kX2xpc3QsICZkYXRhLCAmb3B0KSkKIAkJc2V0X2Nvbm5lY3Rpdml0eV9lcnJvcnMoY29tbWFuZHMsIHNpKTsKIAorCWlmICh1c2Vfc2lkZWJhbmQpCisJCWZpbmlzaF9hc3luYygmbXV4ZXIpOworCiAJcmVqZWN0X3VwZGF0ZXNfdG9faGlkZGVuKGNvbW1hbmRzKTsKIAotCWlmIChydW5fcmVjZWl2ZV9ob29rKGNvbW1hbmRzLCAicHJlLXJlY2VpdmUiLCAwKSkgeworCWlmIChydW5fcmVjZWl2ZV9ob29rKGNvbW1hbmRzLCAicHJlLXJlY2VpdmUiLCAwLCBwdXNoX29wdGlvbnMpKSB7CiAJCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CiAJCQlpZiAoIWNtZC0+ZXJyb3Jfc3RyaW5nKQogCQkJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gInByZS1yZWNlaXZlIGhvb2sgZGVjbGluZWQiOwpAQCAtMTQzOSw2ICsxNTQyLDkgQEAKIAkJCWlmIChhZHZlcnRpc2VfYXRvbWljX3B1c2gKIAkJCSAgICAmJiBwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZV9saXN0LCAiYXRvbWljIikpCiAJCQkJdXNlX2F0b21pYyA9IDE7CisJCQlpZiAoYWR2ZXJ0aXNlX3B1c2hfb3B0aW9ucworCQkJICAgICYmIHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlX2xpc3QsICJwdXNoLW9wdGlvbnMiKSkKKwkJCQl1c2VfcHVzaF9vcHRpb25zID0gMTsKIAkJfQogCiAJCWlmICghc3RyY21wKGxpbmUsICJwdXNoLWNlcnQiKSkgewpAQCAtMTQ3MSw2ICsxNTc3LDIxIEBACiAJcmV0dXJuIGNvbW1hbmRzOwogfQogCitzdGF0aWMgdm9pZCByZWFkX3B1c2hfb3B0aW9ucyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm9wdGlvbnMpCit7CisJd2hpbGUgKDEpIHsKKwkJY2hhciAqbGluZTsKKwkJaW50IGxlbjsKKworCQlsaW5lID0gcGFja2V0X3JlYWRfbGluZSgwLCAmbGVuKTsKKworCQlpZiAoIWxpbmUpCisJCQlicmVhazsKKworCQlzdHJpbmdfbGlzdF9hcHBlbmQob3B0aW9ucywgbGluZSk7CisJfQorfQorCiBzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfcGFja19oZWFkZXIoc3RydWN0IHBhY2tfaGVhZGVyICpoZHIpCiB7CiAJc3dpdGNoIChyZWFkX3BhY2tfaGVhZGVyKDAsIGhkcikpIHsKQEAgLTE1NDgsNiArMTY2OSwxMCBAQAogCQkJCSAodWludG1heF90KWdldHBpZCgpLAogCQkJCSBob3N0bmFtZSk7CiAKKwkJaWYgKCFxdWlldCAmJiBlcnJfZmQpCisJCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICItLXNob3ctcmVzb2x2aW5nLXByb2dyZXNzIik7CisJCWlmICh1c2Vfc2lkZWJhbmQpCisJCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICItLXJlcG9ydC1lbmQtb2YtaW5wdXQiKTsKIAkJaWYgKGZzY2tfb2JqZWN0cykKIAkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNoaWxkLmFyZ3MsICItLXN0cmljdCVzIiwKIAkJCQlmc2NrX21zZ190eXBlcy5idWYpOwpAQCAtMTU3Nyw2ICsxNzAyLDcgQEAKIAlpZiAoIXVzZV9zaWRlYmFuZCkKIAkJcmV0dXJuIHVucGFjaygwLCBzaSk7CiAKKwl1c2Vfa2VlcGFsaXZlID0gS0VFUEFMSVZFX0FGVEVSX05VTDsKIAltZW1zZXQoJm11eGVyLCAwLCBzaXplb2YobXV4ZXIpKTsKIAltdXhlci5wcm9jID0gY29weV90b19zaWRlYmFuZDsKIAltdXhlci5pbiA9IC0xOwpAQCAtMTc1Niw2ICsxODgyLDEwIEBACiAKIAlpZiAoKGNvbW1hbmRzID0gcmVhZF9oZWFkX2luZm8oJnNoYWxsb3cpKSAhPSBOVUxMKSB7CiAJCWNvbnN0IGNoYXIgKnVucGFja19zdGF0dXMgPSBOVUxMOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcHVzaF9vcHRpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwkJaWYgKHVzZV9wdXNoX29wdGlvbnMpCisJCQlyZWFkX3B1c2hfb3B0aW9ucygmcHVzaF9vcHRpb25zKTsKIAogCQlwcmVwYXJlX3NoYWxsb3dfaW5mbygmc2ksICZzaGFsbG93KTsKIAkJaWYgKCFzaS5ucl9vdXJzICYmICFzaS5ucl90aGVpcnMpCkBAIC0xNzY0LDIwICsxODk0LDM2IEBACiAJCQl1bnBhY2tfc3RhdHVzID0gdW5wYWNrX3dpdGhfc2lkZWJhbmQoJnNpKTsKIAkJCXVwZGF0ZV9zaGFsbG93X2luZm8oY29tbWFuZHMsICZzaSwgJnJlZik7CiAJCX0KLQkJZXhlY3V0ZV9jb21tYW5kcyhjb21tYW5kcywgdW5wYWNrX3N0YXR1cywgJnNpKTsKKwkJdXNlX2tlZXBhbGl2ZSA9IEtFRVBBTElWRV9BTFdBWVM7CisJCWV4ZWN1dGVfY29tbWFuZHMoY29tbWFuZHMsIHVucGFja19zdGF0dXMsICZzaSwKKwkJCQkgJnB1c2hfb3B0aW9ucyk7CiAJCWlmIChwYWNrX2xvY2tmaWxlKQogCQkJdW5saW5rX29yX3dhcm4ocGFja19sb2NrZmlsZSk7CiAJCWlmIChyZXBvcnRfc3RhdHVzKQogCQkJcmVwb3J0KGNvbW1hbmRzLCB1bnBhY2tfc3RhdHVzKTsKLQkJcnVuX3JlY2VpdmVfaG9vayhjb21tYW5kcywgInBvc3QtcmVjZWl2ZSIsIDEpOworCQlydW5fcmVjZWl2ZV9ob29rKGNvbW1hbmRzLCAicG9zdC1yZWNlaXZlIiwgMSwKKwkJCQkgJnB1c2hfb3B0aW9ucyk7CiAJCXJ1bl91cGRhdGVfcG9zdF9ob29rKGNvbW1hbmRzKTsKKwkJaWYgKHB1c2hfb3B0aW9ucy5ucikKKwkJCXN0cmluZ19saXN0X2NsZWFyKCZwdXNoX29wdGlvbnMsIDApOwogCQlpZiAoYXV0b19nYykgewogCQkJY29uc3QgY2hhciAqYXJndl9nY19hdXRvW10gPSB7CiAJCQkJImdjIiwgIi0tYXV0byIsICItLXF1aWV0IiwgTlVMTCwKIAkJCX07Ci0JCQlpbnQgb3B0ID0gUlVOX0dJVF9DTUQgfCBSVU5fQ09NTUFORF9TVERPVVRfVE9fU1RERVJSOworCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcHJvYyA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQkJcHJvYy5ub19zdGRpbiA9IDE7CisJCQlwcm9jLnN0ZG91dF90b19zdGRlcnIgPSAxOworCQkJcHJvYy5lcnIgPSB1c2Vfc2lkZWJhbmQgPyAtMSA6IDA7CisJCQlwcm9jLmdpdF9jbWQgPSAxOworCQkJcHJvYy5hcmd2ID0gYXJndl9nY19hdXRvOworCiAJCQljbG9zZV9hbGxfcGFja3MoKTsKLQkJCXJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3ZfZ2NfYXV0bywgb3B0KTsKKwkJCWlmICghc3RhcnRfY29tbWFuZCgmcHJvYykpIHsKKwkJCQlpZiAodXNlX3NpZGViYW5kKQorCQkJCQljb3B5X3RvX3NpZGViYW5kKHByb2MuZXJyLCAtMSwgTlVMTCk7CisJCQkJZmluaXNoX2NvbW1hbmQoJnByb2MpOworCQkJfQogCQl9CiAJCWlmIChhdXRvX3VwZGF0ZV9zZXJ2ZXJfaW5mbykKIAkJCXVwZGF0ZV9zZXJ2ZXJfaW5mbygwKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVtb3RlLmMgYi9idWlsdGluL3JlbW90ZS5jCmluZGV4IGQzMzc2NmIuLjlmNmE2YjMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmVtb3RlLmMKKysrIGIvYnVpbHRpbi9yZW1vdGUuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJZW51bSB7IE5PX1JFQkFTRSwgTk9STUFMX1JFQkFTRSwgSU5URVJBQ1RJVkVfUkVCQVNFIH0gcmViYXNlOwogfTsKIAotc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBicmFuY2hfbGlzdDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgYnJhbmNoX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwogCiBzdGF0aWMgY29uc3QgY2hhciAqYWJicmV2X3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CkBAIC01MzksMTAgKzUzOSw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qIG1ha2Ugc3VyZSB0aGF0IHN5bXJlZnMgYXJlIGRlbGV0ZWQgKi8KLQlpZiAoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpCi0JCXJldHVybiB1bmxpbmsoZ2l0X3BhdGgoIiVzIiwgcmVmbmFtZSkpOwotCiAJc3RyaW5nX2xpc3RfYXBwZW5kKGJyYW5jaGVzLT5icmFuY2hlcywgcmVmbmFtZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTc4OCw3ICs3ODQsNyBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogCiAJaWYgKCFyZXN1bHQpCi0JCXJlc3VsdCA9IGRlbGV0ZV9yZWZzKCZicmFuY2hlcyk7CisJCXJlc3VsdCA9IGRlbGV0ZV9yZWZzKCZicmFuY2hlcywgUkVGX05PREVSRUYpOwogCXN0cmluZ19saXN0X2NsZWFyKCZicmFuY2hlcywgMCk7CiAKIAlpZiAoc2tpcHBlZC5ucikgewpAQCAtOTUyLDcgKzk0OCw3IEBACiAJc3RydWN0IHNob3dfaW5mbyAqc2hvd19pbmZvID0gY2JfZGF0YTsKIAlzdHJ1Y3QgYnJhbmNoX2luZm8gKmJyYW5jaF9pbmZvID0gaXRlbS0+dXRpbDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1lcmdlID0gJmJyYW5jaF9pbmZvLT5tZXJnZTsKLQljb25zdCBjaGFyICphbHNvOworCWludCB3aWR0aCA9IHNob3dfaW5mby0+d2lkdGggKyA0OwogCWludCBpOwogCiAJaWYgKGJyYW5jaF9pbmZvLT5yZWJhc2UgJiYgYnJhbmNoX2luZm8tPm1lcmdlLm5yID4gMSkgewpAQCAtOTYzLDE5ICs5NTksMTggQEAKIAogCXByaW50ZigiICAgICUtKnMgIiwgc2hvd19pbmZvLT53aWR0aCwgaXRlbS0+c3RyaW5nKTsKIAlpZiAoYnJhbmNoX2luZm8tPnJlYmFzZSkgewotCQlwcmludGZfbG4oXyhicmFuY2hfaW5mby0+cmViYXNlID09IElOVEVSQUNUSVZFX1JFQkFTRSA/Ci0JCQkicmViYXNlcyBpbnRlcmFjdGl2ZWx5IG9udG8gcmVtb3RlICVzIiA6Ci0JCQkicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIpLCBtZXJnZS0+aXRlbXNbMF0uc3RyaW5nKTsKKwkJcHJpbnRmX2xuKGJyYW5jaF9pbmZvLT5yZWJhc2UgPT0gSU5URVJBQ1RJVkVfUkVCQVNFCisJCQkgID8gXygicmViYXNlcyBpbnRlcmFjdGl2ZWx5IG9udG8gcmVtb3RlICVzIikKKwkJCSAgOiBfKCJyZWJhc2VzIG9udG8gcmVtb3RlICVzIiksIG1lcmdlLT5pdGVtc1swXS5zdHJpbmcpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKHNob3dfaW5mby0+YW55X3JlYmFzZSkgewogCQlwcmludGZfbG4oXygiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIpLCBtZXJnZS0+aXRlbXNbMF0uc3RyaW5nKTsKLQkJYWxzbyA9IF8oIiAgICBhbmQgd2l0aCByZW1vdGUiKTsKKwkJd2lkdGgrKzsKIAl9IGVsc2UgewogCQlwcmludGZfbG4oXygibWVyZ2VzIHdpdGggcmVtb3RlICVzIiksIG1lcmdlLT5pdGVtc1swXS5zdHJpbmcpOwotCQlhbHNvID0gXygiICAgYW5kIHdpdGggcmVtb3RlIik7CiAJfQogCWZvciAoaSA9IDE7IGkgPCBtZXJnZS0+bnI7IGkrKykKLQkJcHJpbnRmKCIgICAgJS0qcyAlcyAlc1xuIiwgc2hvd19pbmZvLT53aWR0aCwgIiIsIGFsc28sCisJCXByaW50ZihfKCIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIiksIHdpZHRoLCAiIiwKIAkJICAgICAgIG1lcmdlLT5pdGVtc1tpXS5zdHJpbmcpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTU4LDExICsxMTUzLDExIEBACiAJCQkgICB0aGUgb25lIGluICIgIEZldGNoIFVSTDogJXMiIHRyYW5zbGF0aW9uICovCiAJCQlwcmludGZfbG4oXygiICBQdXNoICBVUkw6ICVzIiksIHVybFtpXSk7CiAJCWlmICghaSkKLQkJCXByaW50Zl9sbihfKCIgIFB1c2ggIFVSTDogJXMiKSwgIihubyBVUkwpIik7CisJCQlwcmludGZfbG4oXygiICBQdXNoICBVUkw6ICVzIiksIF8oIihubyBVUkwpIikpOwogCQlpZiAobm9fcXVlcnkpCi0JCQlwcmludGZfbG4oXygiICBIRUFEIGJyYW5jaDogJXMiKSwgIihub3QgcXVlcmllZCkiKTsKKwkJCXByaW50Zl9sbihfKCIgIEhFQUQgYnJhbmNoOiAlcyIpLCBfKCIobm90IHF1ZXJpZWQpIikpOwogCQllbHNlIGlmICghc3RhdGVzLmhlYWRzLm5yKQotCQkJcHJpbnRmX2xuKF8oIiAgSEVBRCBicmFuY2g6ICVzIiksICIodW5rbm93bikiKTsKKwkJCXByaW50Zl9sbihfKCIgIEhFQUQgYnJhbmNoOiAlcyIpLCBfKCIodW5rbm93bikiKSk7CiAJCWVsc2UgaWYgKHN0YXRlcy5oZWFkcy5uciA9PSAxKQogCQkJcHJpbnRmX2xuKF8oIiAgSEVBRCBicmFuY2g6ICVzIiksIHN0YXRlcy5oZWFkcy5pdGVtc1swXS5zdHJpbmcpOwogCQllbHNlIHsKQEAgLTEzMDUsNyArMTMwMCw3IEBACiAJc3RyaW5nX2xpc3Rfc29ydCgmcmVmc190b19wcnVuZSk7CiAKIAlpZiAoIWRyeV9ydW4pCi0JCXJlc3VsdCB8PSBkZWxldGVfcmVmcygmcmVmc190b19wcnVuZSk7CisJCXJlc3VsdCB8PSBkZWxldGVfcmVmcygmcmVmc190b19wcnVuZSwgMCk7CiAKIAlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZzdGF0ZXMuc3RhbGUpIHsKIAkJY29uc3QgY2hhciAqcmVmbmFtZSA9IGl0ZW0tPnV0aWw7CmRpZmYgLS1naXQgYS9idWlsdGluL3JlcGFjay5jIGIvYnVpbHRpbi9yZXBhY2suYwppbmRleCA4NThkYjM4Li44MGRkMDZiIDEwMDY0NAotLS0gYS9idWlsdGluL3JlcGFjay5jCisrKyBiL2J1aWx0aW4vcmVwYWNrLmMKQEAgLTE0Niw2ICsxNDYsNyBAQAogCWludCBwYWNrX2V2ZXJ5dGhpbmcgPSAwOwogCWludCBkZWxldGVfcmVkdW5kYW50ID0gMDsKIAljb25zdCBjaGFyICp1bnBhY2tfdW5yZWFjaGFibGUgPSBOVUxMOworCWludCBrZWVwX3VucmVhY2hhYmxlID0gMDsKIAljb25zdCBjaGFyICp3aW5kb3cgPSBOVUxMLCAqd2luZG93X21lbW9yeSA9IE5VTEw7CiAJY29uc3QgY2hhciAqZGVwdGggPSBOVUxMOwogCWNvbnN0IGNoYXIgKm1heF9wYWNrX3NpemUgPSBOVUxMOwpAQCAtMTc1LDYgKzE3Niw4IEBACiAJCQkJTl8oIndyaXRlIGJpdG1hcCBpbmRleCIpKSwKIAkJT1BUX1NUUklORygwLCAidW5wYWNrLXVucmVhY2hhYmxlIiwgJnVucGFja191bnJlYWNoYWJsZSwgTl8oImFwcHJveGlkYXRlIiksCiAJCQkJTl8oIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiKSksCisJCU9QVF9CT09MKCdrJywgImtlZXAtdW5yZWFjaGFibGUiLCAma2VlcF91bnJlYWNoYWJsZSwKKwkJCQlOXygid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiKSksCiAJCU9QVF9TVFJJTkcoMCwgIndpbmRvdyIsICZ3aW5kb3csIE5fKCJuIiksCiAJCQkJTl8oInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIpKSwKIAkJT1BUX1NUUklORygwLCAid2luZG93LW1lbW9yeSIsICZ3aW5kb3dfbWVtb3J5LCBOXygiYnl0ZXMiKSwKQEAgLTE5Niw2ICsxOTksMTAgQEAKIAlpZiAoZGVsZXRlX3JlZHVuZGFudCAmJiByZXBvc2l0b3J5X2Zvcm1hdF9wcmVjaW91c19vYmplY3RzKQogCQlkaWUoXygiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIpKTsKIAorCWlmIChrZWVwX3VucmVhY2hhYmxlICYmCisJICAgICh1bnBhY2tfdW5yZWFjaGFibGUgfHwgKHBhY2tfZXZlcnl0aGluZyAmIExPT1NFTl9VTlJFQUNIQUJMRSkpKQorCQlkaWUoXygiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIikpOworCiAJaWYgKHBhY2tfa2VwdF9vYmplY3RzIDwgMCkKIAkJcGFja19rZXB0X29iamVjdHMgPSB3cml0ZV9iaXRtYXBzOwogCkBAIC0yMzksNiArMjQ2LDkgQEAKIAkJCX0gZWxzZSBpZiAocGFja19ldmVyeXRoaW5nICYgTE9PU0VOX1VOUkVBQ0hBQkxFKSB7CiAJCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywKIAkJCQkJCSItLXVucGFjay11bnJlYWNoYWJsZSIpOworCQkJfSBlbHNlIGlmIChrZWVwX3VucmVhY2hhYmxlKSB7CisJCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0ta2VlcC11bnJlYWNoYWJsZSIpOworCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLXBhY2stbG9vc2UtdW5yZWFjaGFibGUiKTsKIAkJCX0gZWxzZSB7CiAJCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuZW52X2FycmF5LCAiR0lUX1JFRl9QQVJBTk9JQT0xIik7CiAJCQl9CkBAIC0zNzgsNyArMzg4LDcgQEAKIAkJCQkJICBpdGVtLT5zdHJpbmcsCiAJCQkJCSAgZXh0c1tleHRdLm5hbWUpOwogCQkJaWYgKHJlbW92ZV9wYXRoKGZuYW1lKSkKLQkJCQl3YXJuaW5nKF8oInJlbW92aW5nICclcycgZmFpbGVkIiksIGZuYW1lKTsKKwkJCQl3YXJuaW5nKF8oImZhaWxlZCB0byByZW1vdmUgJyVzJyIpLCBmbmFtZSk7CiAJCQlmcmVlKGZuYW1lKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVzZXQuYyBiL2J1aWx0aW4vcmVzZXQuYwppbmRleCAwOTJjM2E1Li45MDIwZWM2IDEwMDY0NAotLS0gYS9idWlsdGluL3Jlc2V0LmMKKysrIGIvYnVpbHRpbi9yZXNldC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAlpZiAoYm9keSkgewogCQljb25zdCBjaGFyICplb2w7CiAJCXNpemVfdCBsZW47Ci0JCWJvZHkgKz0gMjsKKwkJYm9keSA9IHNraXBfYmxhbmtfbGluZXMoYm9keSArIDIpOwogCQllb2wgPSBzdHJjaHIoYm9keSwgJ1xuJyk7CiAJCWxlbiA9IGVvbCA/IGVvbCAtIGJvZHkgOiBzdHJsZW4oYm9keSk7CiAJCXByaW50ZigiICUuKnNcbiIsIChpbnQpIGxlbiwgYm9keSk7CkBAIC0xMjEsNyArMTIxLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CiAJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSBxLT5xdWV1ZVtpXS0+b25lOwotCQlpbnQgaXNfbWlzc2luZyA9ICEob25lLT5tb2RlICYmICFpc19udWxsX3NoYTEob25lLT5zaGExKSk7CisJCWludCBpc19taXNzaW5nID0gIShvbmUtPm1vZGUgJiYgIWlzX251bGxfb2lkKCZvbmUtPm9pZCkpOwogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwogCiAJCWlmIChpc19taXNzaW5nICYmICFpbnRlbnRfdG9fYWRkKSB7CkBAIC0xMjksNyArMTI5LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJY2UgPSBtYWtlX2NhY2hlX2VudHJ5KG9uZS0+bW9kZSwgb25lLT5zaGExLCBvbmUtPnBhdGgsCisJCWNlID0gbWFrZV9jYWNoZV9lbnRyeShvbmUtPm1vZGUsIG9uZS0+b2lkLmhhc2gsIG9uZS0+cGF0aCwKIAkJCQkgICAgICAwLCAwKTsKIAkJaWYgKCFjZSkKIAkJCWRpZShfKCJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIiksCkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJcmV0dXJuIDE7CiAJZGlmZmNvcmVfc3RkKCZvcHQpOwogCWRpZmZfZmx1c2goJm9wdCk7Ci0JZnJlZV9wYXRoc3BlYygmb3B0LnBhdGhzcGVjKTsKKwljbGVhcl9wYXRoc3BlYygmb3B0LnBhdGhzcGVjKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXYtbGlzdC5jIGIvYnVpbHRpbi9yZXYtbGlzdC5jCmluZGV4IDI3NWRhMGQuLjBiYTgyYjEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmV2LWxpc3QuYworKysgYi9idWlsdGluL3Jldi1saXN0LmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAibG9nLXRyZWUuaCIKICNpbmNsdWRlICJncmFwaC5oIgogI2luY2x1ZGUgImJpc2VjdC5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHJldl9saXN0X3VzYWdlW10gPQogImdpdCByZXYtbGlzdCBbT1BUSU9OXSA8Y29tbWl0LWlkPi4uLiBbIC0tIHBhdGhzLi4uIF1cbiIKQEAgLTQ5LDEyICs1MCwxNyBAQAogIiAgICAtLWJpc2VjdC1hbGwiCiA7CiAKK3N0YXRpYyBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworc3RhdGljIHVuc2lnbmVkIHByb2dyZXNzX2NvdW50ZXI7CisKIHN0YXRpYyB2b2lkIGZpbmlzaF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkIHNob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcmV2X2xpc3RfaW5mbyAqaW5mbyA9IGRhdGE7CiAJc3RydWN0IHJldl9pbmZvICpyZXZzID0gaW5mby0+cmV2czsKIAorCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrcHJvZ3Jlc3NfY291bnRlcik7CisKIAlpZiAoaW5mby0+ZmxhZ3MgJiBSRVZfTElTVF9RVUlFVCkgewogCQlmaW5pc2hfY29tbWl0KGNvbW1pdCwgZGF0YSk7CiAJCXJldHVybjsKQEAgLTE5MCw2ICsxOTYsNyBAQAogewogCXN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvID0gY2JfZGF0YTsKIAlmaW5pc2hfb2JqZWN0KG9iaiwgbmFtZSwgY2JfZGF0YSk7CisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytwcm9ncmVzc19jb3VudGVyKTsKIAlpZiAoaW5mby0+ZmxhZ3MgJiBSRVZfTElTVF9RVUlFVCkKIAkJcmV0dXJuOwogCXNob3dfb2JqZWN0X3dpdGhfbmFtZShzdGRvdXQsIG9iaiwgbmFtZSk7CkBAIC0yNzYsNiArMjgzLDcgQEAKIAlpbnQgYmlzZWN0X3Nob3dfdmFycyA9IDA7CiAJaW50IGJpc2VjdF9maW5kX2FsbCA9IDA7CiAJaW50IHVzZV9iaXRtYXBfaW5kZXggPSAwOworCWNvbnN0IGNoYXIgKnNob3dfcHJvZ3Jlc3MgPSBOVUxMOwogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCWluaXRfcmV2aXNpb25zKCZyZXZzLCBwcmVmaXgpOwpAQCAtMzI1LDYgKzMzMywxMCBAQAogCQkJdGVzdF9iaXRtYXBfd2FsaygmcmV2cyk7CiAJCQlyZXR1cm4gMDsKIAkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1wcm9ncmVzcz0iLCAmYXJnKSkgeworCQkJc2hvd19wcm9ncmVzcyA9IGFyZzsKKwkJCWNvbnRpbnVlOworCQl9CiAJCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKIAogCX0KQEAgLTM1NSwxNSArMzY3LDIyIEBACiAJaWYgKGJpc2VjdF9saXN0KQogCQlyZXZzLmxpbWl0ZWQgPSAxOwogCisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3NfZGVsYXkoc2hvd19wcm9ncmVzcywgMCwgMCwgMik7CisKIAlpZiAodXNlX2JpdG1hcF9pbmRleCAmJiAhcmV2cy5wcnVuZSkgewogCQlpZiAocmV2cy5jb3VudCAmJiAhcmV2cy5sZWZ0X3JpZ2h0ICYmICFyZXZzLmNoZXJyeV9tYXJrKSB7CiAJCQl1aW50MzJfdCBjb21taXRfY291bnQ7CisJCQlpbnQgbWF4X2NvdW50ID0gcmV2cy5tYXhfY291bnQ7CiAJCQlpZiAoIXByZXBhcmVfYml0bWFwX3dhbGsoJnJldnMpKSB7CiAJCQkJY291bnRfYml0bWFwX2NvbW1pdF9saXN0KCZjb21taXRfY291bnQsIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJCWlmIChtYXhfY291bnQgPj0gMCAmJiBtYXhfY291bnQgPCBjb21taXRfY291bnQpCisJCQkJCWNvbW1pdF9jb3VudCA9IG1heF9jb3VudDsKIAkJCQlwcmludGYoIiVkXG4iLCBjb21taXRfY291bnQpOwogCQkJCXJldHVybiAwOwogCQkJfQotCQl9IGVsc2UgaWYgKHJldnMudGFnX29iamVjdHMgJiYgcmV2cy50cmVlX29iamVjdHMgJiYgcmV2cy5ibG9iX29iamVjdHMpIHsKKwkJfSBlbHNlIGlmIChyZXZzLm1heF9jb3VudCA8IDAgJiYKKwkJCSAgIHJldnMudGFnX29iamVjdHMgJiYgcmV2cy50cmVlX29iamVjdHMgJiYgcmV2cy5ibG9iX29iamVjdHMpIHsKIAkJCWlmICghcHJlcGFyZV9iaXRtYXBfd2FsaygmcmV2cykpIHsKIAkJCQl0cmF2ZXJzZV9iaXRtYXBfY29tbWl0X2xpc3QoJnNob3dfb2JqZWN0X2Zhc3QpOwogCQkJCXJldHVybiAwOwpAQCAtMzg4LDYgKzQwNyw4IEBACiAKIAl0cmF2ZXJzZV9jb21taXRfbGlzdCgmcmV2cywgc2hvd19jb21taXQsIHNob3dfb2JqZWN0LCAmaW5mbyk7CiAKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKIAlpZiAocmV2cy5jb3VudCkgewogCQlpZiAocmV2cy5sZWZ0X3JpZ2h0ICYmIHJldnMuY2hlcnJ5X21hcmspCiAJCQlwcmludGYoIiVkXHQlZFx0JWRcbiIsIHJldnMuY291bnRfbGVmdCwgcmV2cy5jb3VudF9yaWdodCwgcmV2cy5jb3VudF9zYW1lKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmV2LXBhcnNlLmMgYi9idWlsdGluL3Jldi1wYXJzZS5jCmluZGV4IGM5NjFiNzQuLjc2Y2YwNWUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmV2LXBhcnNlLmMKKysrIGIvYnVpbHRpbi9yZXYtcGFyc2UuYwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJCQkoc3RvcF9hdF9ub25fb3B0aW9uID8gUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTiA6IDApIHwKIAkJCVBBUlNFX09QVF9TSEVMTF9FVkFMKTsKIAotCXN0cmJ1Zl9hZGRmKCZwYXJzZWQsICIgLS0iKTsKKwlzdHJidWZfYWRkc3RyKCZwYXJzZWQsICIgLS0iKTsKIAlzcV9xdW90ZV9hcmd2KCZwYXJzZWQsIGFyZ3YsIDApOwogCXB1dHMocGFyc2VkLmJ1Zik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9idWlsdGluL3JldmVydC5jIGIvYnVpbHRpbi9yZXZlcnQuYwppbmRleCA1NmEyYzM2Li40ZTY5MzgwIDEwMDY0NAotLS0gYS9idWlsdGluL3JldmVydC5jCisrKyBiL2J1aWx0aW4vcmV2ZXJ0LmMKQEAgLTc2LDcgKzc2LDcgQEAKIAljb25zdCBjaGFyICogY29uc3QgKiB1c2FnZV9zdHIgPSByZXZlcnRfb3JfY2hlcnJ5X3BpY2tfdXNhZ2Uob3B0cyk7CiAJY29uc3QgY2hhciAqbWUgPSBhY3Rpb25fbmFtZShvcHRzKTsKIAlpbnQgY21kID0gMDsKLQlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlzdHJ1Y3Qgb3B0aW9uIGJhc2Vfb3B0aW9uc1tdID0gewogCQlPUFRfQ01ETU9ERSgwLCAicXVpdCIsICZjbWQsIE5fKCJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIiksICdxJyksCiAJCU9QVF9DTURNT0RFKDAsICJjb250aW51ZSIsICZjbWQsIE5fKCJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIiksICdjJyksCiAJCU9QVF9DTURNT0RFKDAsICJhYm9ydCIsICZjbWQsIE5fKCJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIiksICdhJyksCkBAIC05MSwxMyArOTEsOSBAQAogCQkJTl8oIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiKSwgb3B0aW9uX3BhcnNlX3gpLAogCQl7IE9QVElPTl9TVFJJTkcsICdTJywgImdwZy1zaWduIiwgJm9wdHMtPmdwZ19zaWduLCBOXygia2V5LWlkIiksCiAJCSAgTl8oIkdQRyBzaWduIGNvbW1pdCIpLCBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpICIiIH0sCi0JCU9QVF9FTkQoKSwKLQkJT1BUX0VORCgpLAotCQlPUFRfRU5EKCksCi0JCU9QVF9FTkQoKSwKLQkJT1BUX0VORCgpLAotCQlPUFRfRU5EKCksCisJCU9QVF9FTkQoKQogCX07CisJc3RydWN0IG9wdGlvbiAqb3B0aW9ucyA9IGJhc2Vfb3B0aW9uczsKIAogCWlmIChvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1BJQ0spIHsKIAkJc3RydWN0IG9wdGlvbiBjcF9leHRyYVtdID0gewpAQCAtMTA4LDggKzEwNCw3IEBACiAJCQlPUFRfQk9PTCgwLCAia2VlcC1yZWR1bmRhbnQtY29tbWl0cyIsICZvcHRzLT5rZWVwX3JlZHVuZGFudF9jb21taXRzLCBOXygia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiKSksCiAJCQlPUFRfRU5EKCksCiAJCX07Ci0JCWlmIChwYXJzZV9vcHRpb25zX2NvbmNhdChvcHRpb25zLCBBUlJBWV9TSVpFKG9wdGlvbnMpLCBjcF9leHRyYSkpCi0JCQlkaWUoXygicHJvZ3JhbSBlcnJvciIpKTsKKwkJb3B0aW9ucyA9IHBhcnNlX29wdGlvbnNfY29uY2F0KG9wdGlvbnMsIGNwX2V4dHJhKTsKIAl9CiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZV9zdHIsCmRpZmYgLS1naXQgYS9idWlsdGluL3JtLmMgYi9idWlsdGluL3JtLmMKaW5kZXggOGFiYjAyMC4uYjJmZWUzZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9ybS5jCisrKyBiL2J1aWx0aW4vcm0uYwpAQCAtMzg3LDYgKzM4Nyw3IEBACiAJICovCiAJaWYgKCFpbmRleF9vbmx5KSB7CiAJCWludCByZW1vdmVkID0gMCwgZ2l0bW9kdWxlc19tb2RpZmllZCA9IDA7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKIAkJCWNvbnN0IGNoYXIgKnBhdGggPSBsaXN0LmVudHJ5W2ldLm5hbWU7CiAJCQlpZiAobGlzdC5lbnRyeVtpXS5pc19zdWJtb2R1bGUpIHsKQEAgLTM5OCw3ICszOTksNyBAQAogCQkJCQkJY29udGludWU7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewotCQkJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQkJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CiAJCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcGF0aCk7CiAJCQkJCWlmICghcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmYnVmLCAwKSkgewogCQkJCQkJcmVtb3ZlZCA9IDE7CkBAIC00MTAsNyArNDExLDYgQEAKIAkJCQkJCS8qIFN1Ym1vZHVsZSB3YXMgcmVtb3ZlZCBieSB1c2VyICovCiAJCQkJCQlpZiAoIXJlbW92ZV9wYXRoX2Zyb21fZ2l0bW9kdWxlcyhwYXRoKSkKIAkJCQkJCQlnaXRtb2R1bGVzX21vZGlmaWVkID0gMTsKLQkJCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJCQkJCS8qIEZhbGx0aHJvdWdoIGFuZCBsZXQgcmVtb3ZlX3BhdGgoKSBmYWlsLiAqLwogCQkJCX0KIAkJCX0KQEAgLTQyMSw2ICs0MjEsNyBAQAogCQkJaWYgKCFyZW1vdmVkKQogCQkJCWRpZV9lcnJubygiZ2l0IHJtOiAnJXMnIiwgcGF0aCk7CiAJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJCWlmIChnaXRtb2R1bGVzX21vZGlmaWVkKQogCQkJc3RhZ2VfdXBkYXRlZF9naXRtb2R1bGVzKCk7CiAJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zaG9ydGxvZy5jIGIvYnVpbHRpbi9zaG9ydGxvZy5jCmluZGV4IGJmYzA4MmUuLjI1ZmE4YTYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vc2hvcnRsb2cuYworKysgYi9idWlsdGluL3Nob3J0bG9nLmMKQEAgLTIzMywxMSArMjMzLDExIEBACiAKIGludCBjbWRfc2hvcnRsb2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7Ci0Jc3RhdGljIHN0cnVjdCBzaG9ydGxvZyBsb2c7Ci0Jc3RhdGljIHN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHNob3J0bG9nIGxvZyA9IHsgU1RSSU5HX0xJU1RfSU5JVF9OT0RVUCB9OworCXN0cnVjdCByZXZfaW5mbyByZXY7CiAJaW50IG5vbmdpdCA9ICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeTsKIAotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAkJT1BUX0JPT0woJ24nLCAibnVtYmVyZWQiLCAmbG9nLnNvcnRfYnlfbnVtYmVyLAogCQkJIE5fKCJzb3J0IG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjb21taXRzIHBlciBhdXRob3IiKSksCiAJCU9QVF9CT09MKCdzJywgInN1bW1hcnkiLCAmbG9nLnN1bW1hcnksCkBAIC0yNzYsNiArMjc2LDcgQEAKIAogCWxvZy51c2VyX2Zvcm1hdCA9IHJldi5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX1VTRVJGT1JNQVQ7CiAJbG9nLmFiYnJldiA9IHJldi5hYmJyZXY7CisJbG9nLmZpbGUgPSByZXYuZGlmZm9wdC5maWxlOwogCiAJLyogYXNzdW1lIEhFQUQgaWYgZnJvbSBhIHR0eSAqLwogCWlmICghbm9uZ2l0ICYmICFyZXYucGVuZGluZy5uciAmJiBpc2F0dHkoMCkpCkBAIC0yODksNiArMjkwLDggQEAKIAkJZ2V0X2Zyb21fcmV2KCZyZXYsICZsb2cpOwogCiAJc2hvcnRsb2dfb3V0cHV0KCZsb2cpOworCWlmIChsb2cuZmlsZSAhPSBzdGRvdXQpCisJCWZjbG9zZShsb2cuZmlsZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxMCwyMiArMzEzLDI0IEBACiAJZm9yIChpID0gMDsgaSA8IGxvZy0+bGlzdC5ucjsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gJmxvZy0+bGlzdC5pdGVtc1tpXTsKIAkJaWYgKGxvZy0+c3VtbWFyeSkgewotCQkJcHJpbnRmKCIlNmRcdCVzXG4iLCAoaW50KVVUSUxfVE9fSU5UKGl0ZW0pLCBpdGVtLT5zdHJpbmcpOworCQkJZnByaW50Zihsb2ctPmZpbGUsICIlNmRcdCVzXG4iLAorCQkJCShpbnQpVVRJTF9UT19JTlQoaXRlbSksIGl0ZW0tPnN0cmluZyk7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm9uZWxpbmVzID0gaXRlbS0+dXRpbDsKLQkJCXByaW50ZigiJXMgKCVkKTpcbiIsIGl0ZW0tPnN0cmluZywgb25lbGluZXMtPm5yKTsKKwkJCWZwcmludGYobG9nLT5maWxlLCAiJXMgKCVkKTpcbiIsCisJCQkJaXRlbS0+c3RyaW5nLCBvbmVsaW5lcy0+bnIpOwogCQkJZm9yIChqID0gb25lbGluZXMtPm5yIC0gMTsgaiA+PSAwOyBqLS0pIHsKIAkJCQljb25zdCBjaGFyICptc2cgPSBvbmVsaW5lcy0+aXRlbXNbal0uc3RyaW5nOwogCiAJCQkJaWYgKGxvZy0+d3JhcF9saW5lcykgewogCQkJCQlzdHJidWZfcmVzZXQoJnNiKTsKIAkJCQkJYWRkX3dyYXBwZWRfc2hvcnRsb2dfbXNnKCZzYiwgbXNnLCBsb2cpOwotCQkJCQlmd3JpdGUoc2IuYnVmLCBzYi5sZW4sIDEsIHN0ZG91dCk7CisJCQkJCWZ3cml0ZShzYi5idWYsIHNiLmxlbiwgMSwgbG9nLT5maWxlKTsKIAkJCQl9CiAJCQkJZWxzZQotCQkJCQlwcmludGYoIiAgICAgICVzXG4iLCBtc2cpOworCQkJCQlmcHJpbnRmKGxvZy0+ZmlsZSwgIiAgICAgICVzXG4iLCBtc2cpOwogCQkJfQotCQkJcHV0Y2hhcignXG4nKTsKKwkJCXB1dGMoJ1xuJywgbG9nLT5maWxlKTsKIAkJCW9uZWxpbmVzLT5zdHJkdXBfc3RyaW5ncyA9IDE7CiAJCQlzdHJpbmdfbGlzdF9jbGVhcihvbmVsaW5lcywgMCk7CiAJCQlmcmVlKG9uZWxpbmVzKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYyBiL2J1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYwppbmRleCA5MjZkMjA1Li5lNzk3OTBmIDEwMDY0NAotLS0gYS9idWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmMKKysrIGIvYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jCkBAIC00NDQsOCArNDQ0LDcgQEAKIHN0YXRpYyBpbnQgY2xvbmVfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmdpdGRpciwgY29uc3QgY2hhciAqdXJsLAogCQkJICAgY29uc3QgY2hhciAqZGVwdGgsIGNvbnN0IGNoYXIgKnJlZmVyZW5jZSwgaW50IHF1aWV0KQogewotCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwOwotCWNoaWxkX3Byb2Nlc3NfaW5pdCgmY3ApOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOwogCiAJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiY2xvbmUiKTsKIAlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLW5vLWNoZWNrb3V0Iik7CkBAIC01NzksNiArNTc4LDcgQEAKIAogCS8qIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3aGljaCBhcmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbiAqLwogCWludCBxdWlldDsKKwlpbnQgcmVjb21tZW5kX3NoYWxsb3c7CiAJY29uc3QgY2hhciAqcmVmZXJlbmNlOwogCWNvbnN0IGNoYXIgKmRlcHRoOwogCWNvbnN0IGNoYXIgKnJlY3Vyc2l2ZV9wcmVmaXg7CkBAIC01ODksMTAgKzU4OSwxNCBAQAogCiAJLyogSWYgd2Ugd2FudCB0byBzdG9wIGFzIGZhc3QgYXMgcG9zc2libGUgYW5kIHJldHVybiBhbiBlcnJvciAqLwogCXVuc2lnbmVkIHF1aWNrc3RvcCA6IDE7CisKKwkvKiBmYWlsZWQgY2xvbmVzIHRvIGJlIHJldHJpZWQgYWdhaW4gKi8KKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKipmYWlsZWRfY2xvbmVzOworCWludCBmYWlsZWRfY2xvbmVzX25yLCBmYWlsZWRfY2xvbmVzX2FsbG9jOwogfTsKICNkZWZpbmUgU1VCTU9EVUxFX1VQREFURV9DTE9ORV9JTklUIHswLCBNT0RVTEVfTElTVF9JTklULCAwLCBcCi0JU1VCTU9EVUxFX1VQREFURV9TVFJBVEVHWV9JTklULCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBcCi0JU1RSSU5HX0xJU1RfSU5JVF9EVVAsIDB9CisJU1VCTU9EVUxFX1VQREFURV9TVFJBVEVHWV9JTklULCAwLCAtMSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgXAorCVNUUklOR19MSVNUX0lOSVRfRFVQLCAwLCBOVUxMLCAwLCAwfQogCiAKIHN0YXRpYyB2b2lkIG5leHRfc3VibW9kdWxlX3dhcm5fbWlzc2luZyhzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9jbG9uZSAqc3VjLApAQCAtNjk2LDYgKzcwMCw4IEBACiAJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQtPmFyZ3MsICItLXF1aWV0Iik7CiAJaWYgKHN1Yy0+cHJlZml4KQogCQlhcmd2X2FycmF5X3B1c2hsKCZjaGlsZC0+YXJncywgIi0tcHJlZml4Iiwgc3VjLT5wcmVmaXgsIE5VTEwpOworCWlmIChzdWMtPnJlY29tbWVuZF9zaGFsbG93ICYmIHN1Yi0+cmVjb21tZW5kX3NoYWxsb3cgPT0gMSkKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC0+YXJncywgIi0tZGVwdGg9MSIpOwogCWFyZ3ZfYXJyYXlfcHVzaGwoJmNoaWxkLT5hcmdzLCAiLS1wYXRoIiwgc3ViLT5wYXRoLCBOVUxMKTsKIAlhcmd2X2FycmF5X3B1c2hsKCZjaGlsZC0+YXJncywgIi0tbmFtZSIsIHN1Yi0+bmFtZSwgTlVMTCk7CiAJYXJndl9hcnJheV9wdXNobCgmY2hpbGQtPmFyZ3MsICItLXVybCIsIHVybCwgTlVMTCk7CkBAIC03MTUsMjMgKzcyMSw1MSBAQAogc3RhdGljIGludCB1cGRhdGVfY2xvbmVfZ2V0X25leHRfdGFzayhzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY2hpbGQsCiAJCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyLAogCQkJCSAgICAgIHZvaWQgKnN1Y19jYiwKLQkJCQkgICAgICB2b2lkICoqdm9pZF90YXNrX2NiKQorCQkJCSAgICAgIHZvaWQgKippZHhfdGFza19jYikKIHsKIAlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9jbG9uZSAqc3VjID0gc3VjX2NiOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJaW50IGluZGV4OwogCiAJZm9yICg7IHN1Yy0+Y3VycmVudCA8IHN1Yy0+bGlzdC5ucjsgc3VjLT5jdXJyZW50KyspIHsKLQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IHN1Yy0+bGlzdC5lbnRyaWVzW3N1Yy0+Y3VycmVudF07CisJCWNlID0gc3VjLT5saXN0LmVudHJpZXNbc3VjLT5jdXJyZW50XTsKIAkJaWYgKHByZXBhcmVfdG9fY2xvbmVfbmV4dF9zdWJtb2R1bGUoY2UsIGNoaWxkLCBzdWMsIGVycikpIHsKKwkJCWludCAqcCA9IHhtYWxsb2Moc2l6ZW9mKCpwKSk7CisJCQkqcCA9IHN1Yy0+Y3VycmVudDsKKwkJCSppZHhfdGFza19jYiA9IHA7CiAJCQlzdWMtPmN1cnJlbnQrKzsKIAkJCXJldHVybiAxOwogCQl9CiAJfQorCisJLyoKKwkgKiBUaGUgbG9vcCBhYm92ZSB0cmllZCBjbG9uaW5nIGVhY2ggc3VibW9kdWxlIG9uY2UsIG5vdyB0cnkgdGhlCisJICogc3RyYWdnbGVycyBhZ2Fpbiwgd2hpY2ggd2UgY2FuIGltYWdpbmUgYXMgYW4gZXh0ZW5zaW9uIG9mIHRoZQorCSAqIGVudHJ5IGxpc3QuCisJICovCisJaW5kZXggPSBzdWMtPmN1cnJlbnQgLSBzdWMtPmxpc3QubnI7CisJaWYgKGluZGV4IDwgc3VjLT5mYWlsZWRfY2xvbmVzX25yKSB7CisJCWludCAqcDsKKwkJY2UgPSBzdWMtPmZhaWxlZF9jbG9uZXNbaW5kZXhdOworCQlpZiAoIXByZXBhcmVfdG9fY2xvbmVfbmV4dF9zdWJtb2R1bGUoY2UsIGNoaWxkLCBzdWMsIGVycikpIHsKKwkJCXN1Yy0+Y3VycmVudCArKzsKKwkJCXN0cmJ1Zl9hZGRmKGVyciwgIkJVRzogc3VibW9kdWxlIGNvbnNpZGVyZWQgZm9yIGNsb25pbmcsIgorCQkJCSAgICAiZG9lc24ndCBuZWVkIGNsb25pbmcgYW55IG1vcmU/XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCXAgPSB4bWFsbG9jKHNpemVvZigqcCkpOworCQkqcCA9IHN1Yy0+Y3VycmVudDsKKwkJKmlkeF90YXNrX2NiID0gcDsKKwkJc3VjLT5jdXJyZW50ICsrOworCQlyZXR1cm4gMTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB1cGRhdGVfY2xvbmVfc3RhcnRfZmFpbHVyZShzdHJ1Y3Qgc3RyYnVmICplcnIsCiAJCQkJICAgICAgdm9pZCAqc3VjX2NiLAotCQkJCSAgICAgIHZvaWQgKnZvaWRfdGFza19jYikKKwkJCQkgICAgICB2b2lkICppZHhfdGFza19jYikKIHsKIAlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9jbG9uZSAqc3VjID0gc3VjX2NiOwogCXN1Yy0+cXVpY2tzdG9wID0gMTsKQEAgLTc0MSwxNSArNzc1LDM5IEBACiBzdGF0aWMgaW50IHVwZGF0ZV9jbG9uZV90YXNrX2ZpbmlzaGVkKGludCByZXN1bHQsCiAJCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyLAogCQkJCSAgICAgIHZvaWQgKnN1Y19jYiwKLQkJCQkgICAgICB2b2lkICp2b2lkX3Rhc2tfY2IpCisJCQkJICAgICAgdm9pZCAqaWR4X3Rhc2tfY2IpCiB7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKIAlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9jbG9uZSAqc3VjID0gc3VjX2NiOwogCisJaW50ICppZHhQID0gKihpbnQqKilpZHhfdGFza19jYjsKKwlpbnQgaWR4ID0gKmlkeFA7CisJZnJlZShpZHhQKTsKKwogCWlmICghcmVzdWx0KQogCQlyZXR1cm4gMDsKIAotCXN1Yy0+cXVpY2tzdG9wID0gMTsKLQlyZXR1cm4gMTsKKwlpZiAoaWR4IDwgc3VjLT5saXN0Lm5yKSB7CisJCWNlICA9IHN1Yy0+bGlzdC5lbnRyaWVzW2lkeF07CisJCXN0cmJ1Zl9hZGRmKGVyciwgXygiRmFpbGVkIHRvIGNsb25lICclcycuIFJldHJ5IHNjaGVkdWxlZCIpLAorCQkJICAgIGNlLT5uYW1lKTsKKwkJc3RyYnVmX2FkZGNoKGVyciwgJ1xuJyk7CisJCUFMTE9DX0dST1coc3VjLT5mYWlsZWRfY2xvbmVzLAorCQkJICAgc3VjLT5mYWlsZWRfY2xvbmVzX25yICsgMSwKKwkJCSAgIHN1Yy0+ZmFpbGVkX2Nsb25lc19hbGxvYyk7CisJCXN1Yy0+ZmFpbGVkX2Nsb25lc1tzdWMtPmZhaWxlZF9jbG9uZXNfbnIrK10gPSBjZTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWR4IC09IHN1Yy0+bGlzdC5ucjsKKwkJY2UgID0gc3VjLT5mYWlsZWRfY2xvbmVzW2lkeF07CisJCXN0cmJ1Zl9hZGRmKGVyciwgXygiRmFpbGVkIHRvIGNsb25lICclcycgYSBzZWNvbmQgdGltZSwgYWJvcnRpbmciKSwKKwkJCSAgICBjZS0+bmFtZSk7CisJCXN0cmJ1Zl9hZGRjaChlcnIsICdcbicpOworCQlzdWMtPnF1aWNrc3RvcCA9IDE7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHVwZGF0ZV9jbG9uZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKQEAgLTc3OCw2ICs4MzYsOCBAQAogCQkJICAgICAgInNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIikpLAogCQlPUFRfSU5URUdFUignaicsICJqb2JzIiwgJm1heF9qb2JzLAogCQkJICAgIE5fKCJwYXJhbGxlbCBqb2JzIikpLAorCQlPUFRfQk9PTCgwLCAicmVjb21tZW5kLXNoYWxsb3ciLCAmc3VjLnJlY29tbWVuZF9zaGFsbG93LAorCQkJICAgIE5fKCJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iKSksCiAJCU9QVF9fUVVJRVQoJnN1Yy5xdWlldCwgTl8oImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiKSksCiAJCU9QVF9FTkQoKQogCX07CkBAIC04MzUsMTMgKzg5NSw2NCBAQAogewogCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIAlpZiAoYXJnYyAhPSAzKQotCQlkaWUoInN1Ym1vZHVsZS0taGVscGVyIHJlbGF0aXZlX3BhdGggdGFrZXMgZXhhY3RseSAyIGFyZ3VtZW50cywgZ290ICVkIiwgYXJnYyk7CisJCWRpZSgic3VibW9kdWxlLS1oZWxwZXIgcmVsYXRpdmUtcGF0aCB0YWtlcyBleGFjdGx5IDIgYXJndW1lbnRzLCBnb3QgJWQiLCBhcmdjKTsKIAogCXByaW50ZigiJXMiLCByZWxhdGl2ZV9wYXRoKGFyZ3ZbMV0sIGFyZ3ZbMl0sICZzYikpOwogCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpyZW1vdGVfc3VibW9kdWxlX2JyYW5jaChjb25zdCBjaGFyICpwYXRoKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwlnaXRtb2R1bGVzX2NvbmZpZygpOworCWdpdF9jb25maWcoc3VibW9kdWxlX2NvbmZpZywgTlVMTCk7CisKKwlzdWIgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKG51bGxfc2hhMSwgcGF0aCk7CisJaWYgKCFzdWIpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFzdWItPmJyYW5jaCkKKwkJcmV0dXJuICJtYXN0ZXIiOworCisJaWYgKCFzdHJjbXAoc3ViLT5icmFuY2gsICIuIikpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY29uc3QgY2hhciAqcmVmbmFtZSA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIHNoYTEsIE5VTEwpOworCisJCWlmICghcmVmbmFtZSkKKwkJCWRpZShfKCJObyBzdWNoIHJlZjogJXMiKSwgIkhFQUQiKTsKKworCQkvKiBkZXRhY2hlZCBIRUFEICovCisJCWlmICghc3RyY21wKHJlZm5hbWUsICJIRUFEIikpCisJCQlkaWUoXygiU3VibW9kdWxlICglcykgYnJhbmNoIGNvbmZpZ3VyZWQgdG8gaW5oZXJpdCAiCisJCQkgICAgICAiYnJhbmNoIGZyb20gc3VwZXJwcm9qZWN0LCBidXQgdGhlIHN1cGVycHJvamVjdCAiCisJCQkgICAgICAiaXMgbm90IG9uIGFueSBicmFuY2giKSwgc3ViLT5uYW1lKTsKKworCQlpZiAoIXNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzL2hlYWRzLyIsICZyZWZuYW1lKSkKKwkJCWRpZShfKCJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiKSwgcmVmbmFtZSk7CisJCXJldHVybiByZWZuYW1lOworCX0KKworCXJldHVybiBzdWItPmJyYW5jaDsKK30KKworc3RhdGljIGludCByZXNvbHZlX3JlbW90ZV9zdWJtb2R1bGVfYnJhbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKnJldDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaWYgKGFyZ2MgIT0gMikKKwkJZGllKCJzdWJtb2R1bGUtLWhlbHBlciByZW1vdGUtYnJhbmNoIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50cywgZ290ICVkIiwgYXJnYyk7CisKKwlyZXQgPSByZW1vdGVfc3VibW9kdWxlX2JyYW5jaChhcmd2WzFdKTsKKwlpZiAoIXJldCkKKwkJZGllKCJzdWJtb2R1bGUgJXMgZG9lc24ndCBleGlzdCIsIGFyZ3ZbMV0pOworCisJcHJpbnRmKCIlcyIsIHJldCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IGNtZF9zdHJ1Y3QgewogCWNvbnN0IGNoYXIgKmNtZDsKIAlpbnQgKCpmbikoaW50LCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICopOwpAQCAtODU1LDcgKzk2Niw4IEBACiAJeyJyZWxhdGl2ZS1wYXRoIiwgcmVzb2x2ZV9yZWxhdGl2ZV9wYXRofSwKIAl7InJlc29sdmUtcmVsYXRpdmUtdXJsIiwgcmVzb2x2ZV9yZWxhdGl2ZV91cmx9LAogCXsicmVzb2x2ZS1yZWxhdGl2ZS11cmwtdGVzdCIsIHJlc29sdmVfcmVsYXRpdmVfdXJsX3Rlc3R9LAotCXsiaW5pdCIsIG1vZHVsZV9pbml0fQorCXsiaW5pdCIsIG1vZHVsZV9pbml0fSwKKwl7InJlbW90ZS1icmFuY2giLCByZXNvbHZlX3JlbW90ZV9zdWJtb2R1bGVfYnJhbmNofQogfTsKIAogaW50IGNtZF9zdWJtb2R1bGVfX2hlbHBlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKZGlmZiAtLWdpdCBhL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYyBiL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYwppbmRleCA4NzVlN2VkLi4xNzI0NzBiIDEwMDY0NAotLS0gYS9idWlsdGluL3VucGFjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jCkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJCXJldHVybjsgLyogd2UgYXJlIGRvbmUgKi8KIAkJZWxzZSB7CiAJCQkvKiBjYW5ub3QgcmVzb2x2ZSB5ZXQgLS0tIHF1ZXVlIGl0ICovCi0JCQloYXNoY3B5KG9ial9saXN0W25yXS5zaGExLCBudWxsX3NoYTEpOworCQkJaGFzaGNscihvYmpfbGlzdFtucl0uc2hhMSk7CiAJCQlhZGRfZGVsdGFfdG9fbGlzdChuciwgYmFzZV9zaGExLCAwLCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNDA2LDcgKzQwNiw3IEBACiAJCQkgKiBUaGUgZGVsdGEgYmFzZSBvYmplY3QgaXMgaXRzZWxmIGEgZGVsdGEgdGhhdAogCQkJICogaGFzIG5vdCBiZWVuIHJlc29sdmVkIHlldC4KIAkJCSAqLwotCQkJaGFzaGNweShvYmpfbGlzdFtucl0uc2hhMSwgbnVsbF9zaGExKTsKKwkJCWhhc2hjbHIob2JqX2xpc3RbbnJdLnNoYTEpOwogCQkJYWRkX2RlbHRhX3RvX2xpc3QobnIsIG51bGxfc2hhMSwgYmFzZV9vZmZzZXQsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOwogCQkJcmV0dXJuOwogCQl9CmRpZmYgLS1naXQgYS9idWlsdGluL3VwZGF0ZS1pbmRleC5jIGIvYnVpbHRpbi91cGRhdGUtaW5kZXguYwppbmRleCBiOGI4NTIyLi5iYTA0YjE5IDEwMDY0NAotLS0gYS9idWlsdGluL3VwZGF0ZS1pbmRleC5jCisrKyBiL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMKQEAgLTc1OSw3ICs3NTksNyBAQAogCQlpZiAoc2F2ZV9uciAhPSBhY3RpdmVfbnIpCiAJCQlnb3RvIHJlZG87CiAJfQotCWZyZWVfcGF0aHNwZWMoJnBhdGhzcGVjKTsKKwljbGVhcl9wYXRoc3BlYygmcGF0aHNwZWMpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTQ2LDcgKzExNDYsNyBAQAogCQlyZXBvcnQoXygiVW50cmFja2VkIGNhY2hlIGVuYWJsZWQgZm9yICclcyciKSwgZ2V0X2dpdF93b3JrX3RyZWUoKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRpZSgiQnVnOiBiYWQgdW50cmFja2VkX2NhY2hlIHZhbHVlOiAlZCIsIHVudHJhY2tlZF9jYWNoZSk7CisJCWRpZSgiQlVHOiBiYWQgdW50cmFja2VkX2NhY2hlIHZhbHVlOiAlZCIsIHVudHJhY2tlZF9jYWNoZSk7CiAJfQogCiAJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkKSB7CmRpZmYgLS1naXQgYS9idWlsdGluL3dvcmt0cmVlLmMgYi9idWlsdGluL3dvcmt0cmVlLmMKaW5kZXggOTZhMjgzNC4uNmRjZjdiZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi93b3JrdHJlZS5jCisrKyBiL2J1aWx0aW4vd29ya3RyZWUuYwpAQCAtMTMsOCArMTMsMTAgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3b3JrdHJlZV91c2FnZVtdID0gewogCU5fKCJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGJyYW5jaD5dIiksCi0JTl8oImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIpLAogCU5fKCJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIpLAorCU5fKCJnaXQgd29ya3RyZWUgbG9jayBbPG9wdGlvbnM+XSA8cGF0aD4iKSwKKwlOXygiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIiksCisJTl8oImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IiksCiAJTlVMTAogfTsKIApAQCAtOTUsNyArOTcsNyBAQAogCWlmICghZGlyKQogCQlyZXR1cm47CiAJd2hpbGUgKChkID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7Ci0JCWlmICghc3RyY21wKGQtPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGQtPmRfbmFtZSwgIi4uIikpCisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGQtPmRfbmFtZSkpCiAJCQljb250aW51ZTsKIAkJc3RyYnVmX3Jlc2V0KCZyZWFzb24pOwogCQlpZiAoIXBydW5lX3dvcmt0cmVlKGQtPmRfbmFtZSwgJnJlYXNvbikpCkBAIC0xOTIsNyArMTk0LDcgQEAKIAlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3Qgc3RhdCBzdDsKLQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKIAlzdHJ1Y3QgYXJndl9hcnJheSBjaGlsZF9lbnYgPSBBUkdWX0FSUkFZX0lOSVQ7CiAJaW50IGNvdW50ZXIgPSAwLCBsZW4sIHJldDsKIAlzdHJ1Y3Qgc3RyYnVmIHN5bXJlZiA9IFNUUkJVRl9JTklUOwpAQCAtMjYyLDcgKzI2NCw3IEBACiAJICovCiAJc3RyYnVmX3Jlc2V0KCZzYik7CiAJc3RyYnVmX2FkZGYoJnNiLCAiJXMvSEVBRCIsIHNiX3JlcG8uYnVmKTsKLQl3cml0ZV9maWxlKHNiLmJ1ZiwgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKKwl3cml0ZV9maWxlKHNiLmJ1ZiwgIiVzIiwgc2hhMV90b19oZXgobnVsbF9zaGExKSk7CiAJc3RyYnVmX3Jlc2V0KCZzYik7CiAJc3RyYnVmX2FkZGYoJnNiLCAiJXMvY29tbW9uZGlyIiwgc2JfcmVwby5idWYpOwogCXdyaXRlX2ZpbGUoc2IuYnVmLCAiLi4vLi4iKTsKQEAgLTI3MSw3ICsyNzMsNiBAQAogCiAJYXJndl9hcnJheV9wdXNoZigmY2hpbGRfZW52LCAiJXM9JXMiLCBHSVRfRElSX0VOVklST05NRU5ULCBzYl9naXQuYnVmKTsKIAlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZF9lbnYsICIlcz0lcyIsIEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsIHBhdGgpOwotCW1lbXNldCgmY3AsIDAsIHNpemVvZihjcCkpOwogCWNwLmdpdF9jbWQgPSAxOwogCiAJaWYgKGNvbW1pdCkKQEAgLTMzNyw5ICszMzgsMTIgQEAKIAlpZiAoYWMgPCAxIHx8IGFjID4gMikKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHdvcmt0cmVlX3VzYWdlLCBvcHRpb25zKTsKIAotCXBhdGggPSBwcmVmaXggPyBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBzdHJsZW4ocHJlZml4KSwgYXZbMF0pIDogYXZbMF07CisJcGF0aCA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHN0cmxlbihwcmVmaXgpLCBhdlswXSk7CiAJYnJhbmNoID0gYWMgPCAyID8gIkhFQUQiIDogYXZbMV07CiAKKwlpZiAoIXN0cmNtcChicmFuY2gsICItIikpCisJCWJyYW5jaCA9ICJAey0xfSI7CisKIAlvcHRzLmZvcmNlX25ld19icmFuY2ggPSAhIW5ld19icmFuY2hfZm9yY2U7CiAJaWYgKG9wdHMuZm9yY2VfbmV3X2JyYW5jaCkgewogCQlzdHJ1Y3Qgc3RyYnVmIHN5bXJlZiA9IFNUUkJVRl9JTklUOwpAQCAtMzYwLDggKzM2NCw3IEBACiAJfQogCiAJaWYgKG9wdHMubmV3X2JyYW5jaCkgewotCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcDsKLQkJbWVtc2V0KCZjcCwgMCwgc2l6ZW9mKGNwKSk7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOwogCQljcC5naXRfY21kID0gMTsKIAkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiYnJhbmNoIik7CiAJCWlmIChvcHRzLmZvcmNlX25ld19icmFuY2gpCkBAIC00NTksNiArNDYyLDY2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbG9ja193b3JrdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKnJlYXNvbiA9ICIiLCAqb2xkX3JlYXNvbjsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAicmVhc29uIiwgJnJlYXNvbiwgTl8oInN0cmluZyIpLAorCQkJICAgTl8oInJlYXNvbiBmb3IgbG9ja2luZyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMsICp3dDsKKworCWFjID0gcGFyc2Vfb3B0aW9ucyhhYywgYXYsIHByZWZpeCwgb3B0aW9ucywgd29ya3RyZWVfdXNhZ2UsIDApOworCWlmIChhYyAhPSAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMod29ya3RyZWVfdXNhZ2UsIG9wdGlvbnMpOworCisJd29ya3RyZWVzID0gZ2V0X3dvcmt0cmVlcygpOworCXd0ID0gZmluZF93b3JrdHJlZSh3b3JrdHJlZXMsIHByZWZpeCwgYXZbMF0pOworCWlmICghd3QpCisJCWRpZShfKCInJXMnIGlzIG5vdCBhIHdvcmtpbmcgdHJlZSIpLCBhdlswXSk7CisJaWYgKGlzX21haW5fd29ya3RyZWUod3QpKQorCQlkaWUoXygiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiKSk7CisKKwlvbGRfcmVhc29uID0gaXNfd29ya3RyZWVfbG9ja2VkKHd0KTsKKwlpZiAob2xkX3JlYXNvbikgeworCQlpZiAoKm9sZF9yZWFzb24pCisJCQlkaWUoXygiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCwgcmVhc29uOiAlcyIpLAorCQkJICAgIGF2WzBdLCBvbGRfcmVhc29uKTsKKwkJZGllKF8oIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiKSwgYXZbMF0pOworCX0KKworCXdyaXRlX2ZpbGUoZ2l0X2NvbW1vbl9wYXRoKCJ3b3JrdHJlZXMvJXMvbG9ja2VkIiwgd3QtPmlkKSwKKwkJICAgIiVzIiwgcmVhc29uKTsKKwlmcmVlX3dvcmt0cmVlcyh3b3JrdHJlZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVubG9ja193b3JrdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCB3b3JrdHJlZSAqKndvcmt0cmVlcywgKnd0OworCWludCByZXQ7CisKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIG9wdGlvbnMsIHdvcmt0cmVlX3VzYWdlLCAwKTsKKwlpZiAoYWMgIT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHdvcmt0cmVlX3VzYWdlLCBvcHRpb25zKTsKKworCXdvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoKTsKKwl3dCA9IGZpbmRfd29ya3RyZWUod29ya3RyZWVzLCBwcmVmaXgsIGF2WzBdKTsKKwlpZiAoIXd0KQorCQlkaWUoXygiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiKSwgYXZbMF0pOworCWlmIChpc19tYWluX3dvcmt0cmVlKHd0KSkKKwkJZGllKF8oIlRoZSBtYWluIHdvcmtpbmcgdHJlZSBjYW5ub3QgYmUgbG9ja2VkIG9yIHVubG9ja2VkIikpOworCWlmICghaXNfd29ya3RyZWVfbG9ja2VkKHd0KSkKKwkJZGllKF8oIiclcycgaXMgbm90IGxvY2tlZCIpLCBhdlswXSk7CisJcmV0ID0gdW5saW5rX29yX3dhcm4oZ2l0X2NvbW1vbl9wYXRoKCJ3b3JrdHJlZXMvJXMvbG9ja2VkIiwgd3QtPmlkKSk7CisJZnJlZV93b3JrdHJlZXMod29ya3RyZWVzKTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgY21kX3dvcmt0cmVlKGludCBhYywgY29uc3QgY2hhciAqKmF2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CkBAIC00NjcsMTEgKzUzMCwxNyBAQAogCiAJaWYgKGFjIDwgMikKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHdvcmt0cmVlX3VzYWdlLCBvcHRpb25zKTsKKwlpZiAoIXByZWZpeCkKKwkJcHJlZml4ID0gIiI7CiAJaWYgKCFzdHJjbXAoYXZbMV0sICJhZGQiKSkKIAkJcmV0dXJuIGFkZChhYyAtIDEsIGF2ICsgMSwgcHJlZml4KTsKIAlpZiAoIXN0cmNtcChhdlsxXSwgInBydW5lIikpCiAJCXJldHVybiBwcnVuZShhYyAtIDEsIGF2ICsgMSwgcHJlZml4KTsKIAlpZiAoIXN0cmNtcChhdlsxXSwgImxpc3QiKSkKIAkJcmV0dXJuIGxpc3QoYWMgLSAxLCBhdiArIDEsIHByZWZpeCk7CisJaWYgKCFzdHJjbXAoYXZbMV0sICJsb2NrIikpCisJCXJldHVybiBsb2NrX3dvcmt0cmVlKGFjIC0gMSwgYXYgKyAxLCBwcmVmaXgpOworCWlmICghc3RyY21wKGF2WzFdLCAidW5sb2NrIikpCisJCXJldHVybiB1bmxvY2tfd29ya3RyZWUoYWMgLSAxLCBhdiArIDEsIHByZWZpeCk7CiAJdXNhZ2Vfd2l0aF9vcHRpb25zKHdvcmt0cmVlX3VzYWdlLCBvcHRpb25zKTsKIH0KZGlmZiAtLWdpdCBhL2NhY2hlLXRyZWUuYyBiL2NhY2hlLXRyZWUuYwppbmRleCBkZGYwY2M5Li5mMjhiMWY0IDEwMDY0NAotLS0gYS9jYWNoZS10cmVlLmMKKysrIGIvY2FjaGUtdHJlZS5jCkBAIC0zMTksMTIgKzMxOSwxMyBAQAogCWkgPSAwOwogCXdoaWxlIChpIDwgZW50cmllcykgewogCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gY2FjaGVbaV07Ci0JCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqc3ViOworCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnN1YiA9IE5VTEw7CiAJCWNvbnN0IGNoYXIgKnBhdGgsICpzbGFzaDsKIAkJaW50IHBhdGhsZW4sIGVudGxlbjsKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKIAkJdW5zaWduZWQgbW9kZTsKIAkJaW50IGV4cGVjdGVkX21pc3NpbmcgPSAwOworCQlpbnQgY29udGFpbnNfaXRhID0gMDsKIAogCQlwYXRoID0gY2UtPm5hbWU7CiAJCXBhdGhsZW4gPSBjZV9uYW1lbGVuKGNlKTsKQEAgLTM0MSw3ICszNDIsOCBAQAogCQkJaSArPSBzdWItPmNvdW50OwogCQkJc2hhMSA9IHN1Yi0+Y2FjaGVfdHJlZS0+c2hhMTsKIAkJCW1vZGUgPSBTX0lGRElSOwotCQkJaWYgKHN1Yi0+Y2FjaGVfdHJlZS0+ZW50cnlfY291bnQgPCAwKSB7CisJCQljb250YWluc19pdGEgPSBzdWItPmNhY2hlX3RyZWUtPmVudHJ5X2NvdW50IDwgMDsKKwkJCWlmIChjb250YWluc19pdGEpIHsKIAkJCQl0b19pbnZhbGlkYXRlID0gMTsKIAkJCQlleHBlY3RlZF9taXNzaW5nID0gMTsKIAkJCX0KQEAgLTM3NSwxMSArMzc3LDE3IEBACiAJCSAqIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIGdlbmVyYXRlZCB0cmVlcy4gSW52YWxpZGF0ZSB1cAogCQkgKiB0byByb290IHRvIGZvcmNlIGNhY2hlLXRyZWUgdXNlcnMgdG8gcmVhZCBlbHNld2hlcmUuCiAJCSAqLwotCQlpZiAoY2VfaW50ZW50X3RvX2FkZChjZSkpIHsKKwkJaWYgKCFzdWIgJiYgY2VfaW50ZW50X3RvX2FkZChjZSkpIHsKIAkJCXRvX2ludmFsaWRhdGUgPSAxOwogCQkJY29udGludWU7CiAJCX0KIAorCQkvKgorCQkgKiAic3ViIiBjYW4gYmUgYW4gZW1wdHkgdHJlZSBpZiBhbGwgc3ViZW50cmllcyBhcmUgaS10LWEuCisJCSAqLworCQlpZiAoY29udGFpbnNfaXRhICYmICFoYXNoY21wKHNoYTEsIEVNUFRZX1RSRUVfU0hBMV9CSU4pKQorCQkJY29udGludWU7CisKIAkJc3RyYnVmX2dyb3coJmJ1ZmZlciwgZW50bGVuICsgMTAwKTsKIAkJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgIiVvICUuKnMlYyIsIG1vZGUsIGVudGxlbiwgcGF0aCArIGJhc2VsZW4sICdcMCcpOwogCQlzdHJidWZfYWRkKCZidWZmZXIsIHNoYTEsIDIwKTsKZGlmZiAtLWdpdCBhL2NhY2hlLmggYi9jYWNoZS5oCmluZGV4IDYwNDlmODYuLmI3ODBhOTEgMTAwNjQ0Ci0tLSBhL2NhY2hlLmgKKysrIGIvY2FjaGUuaApAQCAtMzY3LDggKzM2Nyw4IEBACiAjZGVmaW5lIHJlbmFtZV9jYWNoZV9lbnRyeV9hdChwb3MsIG5ld19uYW1lKSByZW5hbWVfaW5kZXhfZW50cnlfYXQoJnRoZV9pbmRleCwgKHBvcyksIChuZXdfbmFtZSkpCiAjZGVmaW5lIHJlbW92ZV9jYWNoZV9lbnRyeV9hdChwb3MpIHJlbW92ZV9pbmRleF9lbnRyeV9hdCgmdGhlX2luZGV4LCAocG9zKSkKICNkZWZpbmUgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSByZW1vdmVfZmlsZV9mcm9tX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSkKLSNkZWZpbmUgYWRkX3RvX2NhY2hlKHBhdGgsIHN0LCBmbGFncykgYWRkX3RvX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSwgKHN0KSwgKGZsYWdzKSkKLSNkZWZpbmUgYWRkX2ZpbGVfdG9fY2FjaGUocGF0aCwgZmxhZ3MpIGFkZF9maWxlX3RvX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSwgKGZsYWdzKSkKKyNkZWZpbmUgYWRkX3RvX2NhY2hlKHBhdGgsIHN0LCBmbGFncykgYWRkX3RvX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSwgKHN0KSwgKGZsYWdzKSwgMCkKKyNkZWZpbmUgYWRkX2ZpbGVfdG9fY2FjaGUocGF0aCwgZmxhZ3MpIGFkZF9maWxlX3RvX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSwgKGZsYWdzKSwgMCkKICNkZWZpbmUgcmVmcmVzaF9jYWNoZShmbGFncykgcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCAoZmxhZ3MpLCBOVUxMLCBOVUxMLCBOVUxMKQogI2RlZmluZSBjZV9tYXRjaF9zdGF0KGNlLCBzdCwgb3B0aW9ucykgaWVfbWF0Y2hfc3RhdCgmdGhlX2luZGV4LCAoY2UpLCAoc3QpLCAob3B0aW9ucykpCiAjZGVmaW5lIGNlX21vZGlmaWVkKGNlLCBzdCwgb3B0aW9ucykgaWVfbW9kaWZpZWQoJnRoZV9pbmRleCwgKGNlKSwgKHN0KSwgKG9wdGlvbnMpKQpAQCAtNTgxLDggKzU4MSw4IEBACiAjZGVmaW5lIEFERF9DQUNIRV9JR05PUkVfRVJST1JTCTQKICNkZWZpbmUgQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMIDgKICNkZWZpbmUgQUREX0NBQ0hFX0lOVEVOVCAxNgotZXh0ZXJuIGludCBhZGRfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICosIGludCBmbGFncyk7Ci1leHRlcm4gaW50IGFkZF9maWxlX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBhZGRfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICosIGludCBmbGFncywgaW50IGZvcmNlX21vZGUpOworZXh0ZXJuIGludCBhZGRfZmlsZV90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLCBpbnQgZm9yY2VfbW9kZSk7CiBleHRlcm4gc3RydWN0IGNhY2hlX2VudHJ5ICptYWtlX2NhY2hlX2VudHJ5KHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgc3RhZ2UsIHVuc2lnbmVkIGludCByZWZyZXNoX29wdGlvbnMpOwogZXh0ZXJuIGludCBjZV9zYW1lX25hbWUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICphLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmIpOwogZXh0ZXJuIHZvaWQgc2V0X29iamVjdF9uYW1lX2Zvcl9pbnRlbnRfdG9fYWRkX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpOwpAQCAtNjMyLDYgKzYzMiw3IEBACiAjZGVmaW5lIFJFRlJFU0hfSUdOT1JFX1NVQk1PRFVMRVMJMHgwMDEwCS8qIGlnbm9yZSBzdWJtb2R1bGVzICovCiAjZGVmaW5lIFJFRlJFU0hfSU5fUE9SQ0VMQUlOCTB4MDAyMAkvKiB1c2VyIGZyaWVuZGx5IG91dHB1dCwgbm90ICJuZWVkcyB1cGRhdGUiICovCiBleHRlcm4gaW50IHJlZnJlc2hfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIHVuc2lnbmVkIGludCBmbGFncywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywgY2hhciAqc2VlbiwgY29uc3QgY2hhciAqaGVhZGVyX21zZyk7CitleHRlcm4gc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqLCB1bnNpZ25lZCBpbnQpOwogCiBleHRlcm4gdm9pZCB1cGRhdGVfaW5kZXhfaWZfYWJsZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IGxvY2tfZmlsZSAqKTsKIApAQCAtMTAwMyw2ICsxMDA0LDExIEBACiAgKiBkaXJlY3Rvcnkgd2hpbGUgd2Ugd2VyZSB3b3JraW5nLiAgVG8gYmUgcm9idXN0IGFnYWluc3QgdGhpcyBraW5kIG9mCiAgKiByYWNlLCBjYWxsZXJzIG1pZ2h0IHdhbnQgdG8gdHJ5IGludm9raW5nIHRoZSBmdW5jdGlvbiBhZ2FpbiB3aGVuIGl0CiAgKiByZXR1cm5zIFNDTERfVkFOSVNIRUQuCisgKgorICogc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcygpIHRlbXBvcmFyaWx5IGNoYW5nZXMgcGF0aCB3aGlsZSBpdAorICogaXMgd29ya2luZyBidXQgcmVzdG9yZXMgaXQgYmVmb3JlIHJldHVybmluZy4KKyAqIHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoKSBkb2Vzbid0IG1vZGlmeSBwYXRoLCBldmVuCisgKiB0ZW1wb3JhcmlseS4KICAqLwogZW51bSBzY2xkX2Vycm9yIHsKIAlTQ0xEX09LID0gMCwKQEAgLTExOTMsNiArMTE5OSw3IEBACiAgKiAgIHByaW50ZigiJXMgLT4gJXMiLCBzaGExX3RvX2hleChvbmUpLCBzaGExX3RvX2hleCh0d28pKTsKICAqLwogZXh0ZXJuIGNoYXIgKnNoYTFfdG9faGV4X3IoY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBjaGFyICpvaWRfdG9faGV4X3IoY2hhciAqb3V0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOwogZXh0ZXJuIGNoYXIgKnNoYTFfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwkvKiBzdGF0aWMgYnVmZmVyIHJlc3VsdCEgKi8KIGV4dGVybiBjaGFyICpvaWRfdG9faGV4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CS8qIHNhbWUgc3RhdGljIGJ1ZmZlciBhcyBzaGExX3RvX2hleCAqLwogCkBAIC0xMjIzLDcgKzEyMzAsOCBAQAogCQlEQVRFX0lTTzg2MDFfU1RSSUNULAogCQlEQVRFX1JGQzI4MjIsCiAJCURBVEVfU1RSRlRJTUUsCi0JCURBVEVfUkFXCisJCURBVEVfUkFXLAorCQlEQVRFX1VOSVgKIAl9IHR5cGU7CiAJY29uc3QgY2hhciAqc3RyZnRpbWVfZm10OwogCWludCBsb2NhbDsKQEAgLTEyNjIsNiArMTI3MCw3IEBACiBleHRlcm4gY29uc3QgY2hhciAqZ2l0X2VkaXRvcih2b2lkKTsKIGV4dGVybiBjb25zdCBjaGFyICpnaXRfcGFnZXIoaW50IHN0ZG91dF9pc190dHkpOwogZXh0ZXJuIGludCBnaXRfaWRlbnRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgcmVzZXRfaWRlbnRfZGF0ZSh2b2lkKTsKIAogc3RydWN0IGlkZW50X3NwbGl0IHsKIAljb25zdCBjaGFyICpuYW1lX2JlZ2luOwpAQCAtMTM3MCw2ICsxMzc5LDEzIEBACiAJY2hhciBwYWNrX25hbWVbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KIH0gKnBhY2tlZF9naXQ7CiAKKy8qCisgKiBBIG1vc3QtcmVjZW50bHktdXNlZCBvcmRlcmVkIHZlcnNpb24gb2YgdGhlIHBhY2tlZF9naXQgbGlzdCwgd2hpY2ggY2FuCisgKiBiZSBpdGVyYXRlZCBpbnN0ZWFkIG9mIHBhY2tlZF9naXQgKGFuZCBtYXJrZWQgdmlhIG1ydV9tYXJrKS4KKyAqLworc3RydWN0IG1ydTsKK2V4dGVybiBzdHJ1Y3QgbXJ1ICpwYWNrZWRfZ2l0X21ydTsKKwogc3RydWN0IHBhY2tfZW50cnkgewogCW9mZl90IG9mZnNldDsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwpAQCAtMTQwOSw3ICsxNDI1LDYgQEAKIGV4dGVybiB2b2lkIGNsb3NlX3BhY2tfd2luZG93cyhzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKIGV4dGVybiB2b2lkIGNsb3NlX2FsbF9wYWNrcyh2b2lkKTsKIGV4dGVybiB2b2lkIHVudXNlX3BhY2soc3RydWN0IHBhY2tfd2luZG93ICoqKTsKLWV4dGVybiB2b2lkIGZyZWVfcGFja19ieV9uYW1lKGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCBjbGVhcl9kZWx0YV9iYXNlX2NhY2hlKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBwYWNrZWRfZ2l0ICphZGRfcGFja2VkX2dpdChjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9sZW4sIGludCBsb2NhbCk7CiAKQEAgLTE1MDgsNyArMTUyMyw3IEBACiAJLyogUmVxdWVzdCAqLwogCWVudW0gb2JqZWN0X3R5cGUgKnR5cGVwOwogCXVuc2lnbmVkIGxvbmcgKnNpemVwOwotCXVuc2lnbmVkIGxvbmcgKmRpc2tfc2l6ZXA7CisJb2ZmX3QgKmRpc2tfc2l6ZXA7CiAJdW5zaWduZWQgY2hhciAqZGVsdGFfYmFzZV9zaGExOwogCXN0cnVjdCBzdHJidWYgKnR5cGVuYW1lOwogCkBAIC0xNTU5LDEwICsxNTc0LDE4IEBACiAJY29uc3QgY2hhciAqYmxvYjsKIH07CiAKK2VudW0gY29uZmlnX29yaWdpbl90eXBlIHsKKwlDT05GSUdfT1JJR0lOX0JMT0IsCisJQ09ORklHX09SSUdJTl9GSUxFLAorCUNPTkZJR19PUklHSU5fU1RESU4sCisJQ09ORklHX09SSUdJTl9TVUJNT0RVTEVfQkxPQiwKKwlDT05GSUdfT1JJR0lOX0NNRExJTkUKK307CisKIHR5cGVkZWYgaW50ICgqY29uZmlnX2ZuX3QpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOwogZXh0ZXJuIGludCBnaXRfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CiBleHRlcm4gaW50IGdpdF9jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICosIHZvaWQgKik7Ci1leHRlcm4gaW50IGdpdF9jb25maWdfZnJvbV9tZW0oY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKm9yaWdpbl90eXBlLAorZXh0ZXJuIGludCBnaXRfY29uZmlnX2Zyb21fbWVtKGNvbmZpZ19mbl90IGZuLCBjb25zdCBlbnVtIGNvbmZpZ19vcmlnaW5fdHlwZSwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLCB2b2lkICpkYXRhKTsKIGV4dGVybiB2b2lkIGdpdF9jb25maWdfcHVzaF9wYXJhbWV0ZXIoY29uc3QgY2hhciAqdGV4dCk7CiBleHRlcm4gaW50IGdpdF9jb25maWdfZnJvbV9wYXJhbWV0ZXJzKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKTsKQEAgLTE2MDQsNiArMTYyNywxNiBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKHZvaWQpOwogCiBleHRlcm4gaW50IGdpdF9jb25maWdfcGFyc2VfcGFyYW1ldGVyKGNvbnN0IGNoYXIgKiwgY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpOworCitlbnVtIGNvbmZpZ19zY29wZSB7CisJQ09ORklHX1NDT1BFX1VOS05PV04gPSAwLAorCUNPTkZJR19TQ09QRV9TWVNURU0sCisJQ09ORklHX1NDT1BFX0dMT0JBTCwKKwlDT05GSUdfU0NPUEVfUkVQTywKKwlDT05GSUdfU0NPUEVfQ01ETElORSwKK307CisKK2V4dGVybiBlbnVtIGNvbmZpZ19zY29wZSBjdXJyZW50X2NvbmZpZ19zY29wZSh2b2lkKTsKIGV4dGVybiBjb25zdCBjaGFyICpjdXJyZW50X2NvbmZpZ19vcmlnaW5fdHlwZSh2b2lkKTsKIGV4dGVybiBjb25zdCBjaGFyICpjdXJyZW50X2NvbmZpZ19uYW1lKHZvaWQpOwogCkBAIC0xNjk2LDYgKzE3MjksOCBAQAogc3RydWN0IGtleV92YWx1ZV9pbmZvIHsKIAljb25zdCBjaGFyICpmaWxlbmFtZTsKIAlpbnQgbGluZW5yOworCWVudW0gY29uZmlnX29yaWdpbl90eXBlIG9yaWdpbl90eXBlOworCWVudW0gY29uZmlnX3Njb3BlIHNjb3BlOwogfTsKIAogZXh0ZXJuIE5PUkVUVVJOIHZvaWQgZ2l0X2RpZV9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKQEAgLTE3MjEsOCArMTc1Niw2IEBACiBleHRlcm4gaW50IGNvcHlfZmlsZV93aXRoX3RpbWUoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBtb2RlKTsKIAogZXh0ZXJuIHZvaWQgd3JpdGVfb3JfZGllKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOwotZXh0ZXJuIGludCB3cml0ZV9vcl93aGluZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICptc2cpOwotZXh0ZXJuIGludCB3cml0ZV9vcl93aGluZV9waXBlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsIGNvbnN0IGNoYXIgKm1zZyk7CiBleHRlcm4gdm9pZCBmc3luY19vcl9kaWUoaW50IGZkLCBjb25zdCBjaGFyICopOwogCiBleHRlcm4gc3NpemVfdCByZWFkX2luX2Z1bGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CkBAIC0xNzM0LDggKzE3NjcsMjEgQEAKIAlyZXR1cm4gd3JpdGVfaW5fZnVsbChmZCwgc3RyLCBzdHJsZW4oc3RyKSk7CiB9CiAKLWV4dGVybiBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Ci1leHRlcm4gaW50IHdyaXRlX2ZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKy8qKgorICogT3BlbiAoYW5kIHRydW5jYXRlKSB0aGUgZmlsZSBhdCBwYXRoLCB3cml0ZSB0aGUgY29udGVudHMgb2YgYnVmIHRvIGl0LAorICogYW5kIGNsb3NlIGl0LiBEaWVzIGlmIGFueSBlcnJvcnMgYXJlIGVuY291bnRlcmVkLgorICovCitleHRlcm4gdm9pZCB3cml0ZV9maWxlX2J1Zihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pOworCisvKioKKyAqIExpa2Ugd3JpdGVfZmlsZV9idWYoKSwgYnV0IGZvcm1hdCB0aGUgY29udGVudHMgaW50byBhIGJ1ZmZlciBmaXJzdC4KKyAqIEFkZGl0aW9uYWxseSwgd3JpdGVfZmlsZSgpIHdpbGwgYXBwZW5kIGEgbmV3bGluZSBpZiBvbmUgaXMgbm90IGFscmVhZHkKKyAqIHByZXNlbnQsIG1ha2luZyBpdCBjb252ZW5pZW50IHRvIHdyaXRlIHRleHQgZmlsZXM6CisgKgorICogICB3cml0ZV9maWxlKHBhdGgsICJjb3VudGVyOiAlZCIsIGN0cik7CisgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitleHRlcm4gdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIAogLyogcGFnZXIuYyAqLwogZXh0ZXJuIHZvaWQgc2V0dXBfcGFnZXIodm9pZCk7CkBAIC0xNzcyLDcgKzE4MTgsNyBAQAogICogcmV0dXJuIDAgaWYgc3VjY2VzcywgMSAtIGlmIGFkZGl0aW9uIG9mIGEgZmlsZSBmYWlsZWQgYW5kCiAgKiBBRERfRklMRVNfSUdOT1JFX0VSUk9SUyB3YXMgc3BlY2lmaWVkIGluIGZsYWdzCiAgKi8KLWludCBhZGRfZmlsZXNfdG9fY2FjaGUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCBpbnQgZmxhZ3MpOworaW50IGFkZF9maWxlc190b19jYWNoZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIGludCBmbGFncywgaW50IGZvcmNlX21vZGUpOwogCiAvKiBkaWZmLmMgKi8KIGV4dGVybiBpbnQgZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXg7CmRpZmYgLS1naXQgYS9jb2xvci5jIGIvY29sb3IuYwppbmRleCA4Zjg1MTUzLi44MWMyNjc2IDEwMDY0NAotLS0gYS9jb2xvci5jCisrKyBiL2NvbG9yLmMKQEAgLTEyMywxOSArMTIzLDM0IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX2F0dHIoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3N0YXRpYyBpbnQgcGFyc2VfYXR0cihjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuKQogewotCXN0YXRpYyBjb25zdCBpbnQgYXR0cl92YWx1ZXNbXSA9IHsgMSwgMiwgNCwgNSwgNywKLQkJCQkJICAgMjIsIDIyLCAyNCwgMjUsIDI3IH07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdHRyX25hbWVzW10gPSB7Ci0JCSJib2xkIiwgImRpbSIsICJ1bCIsICJibGluayIsICJyZXZlcnNlIiwKLQkJIm5vYm9sZCIsICJub2RpbSIsICJub3VsIiwgIm5vYmxpbmsiLCAibm9yZXZlcnNlIgorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQljb25zdCBjaGFyICpuYW1lOworCQlzaXplX3QgbGVuOworCQlpbnQgdmFsLCBuZWc7CisJfSBhdHRyc1tdID0geworI2RlZmluZSBBVFRSKHgsIHZhbCwgbmVnKSB7ICh4KSwgc2l6ZW9mKHgpLTEsICh2YWwpLCAobmVnKSB9CisJCUFUVFIoImJvbGQiLCAgICAgIDEsIDIyKSwKKwkJQVRUUigiZGltIiwgICAgICAgMiwgMjIpLAorCQlBVFRSKCJpdGFsaWMiLCAgICAzLCAyMyksCisJCUFUVFIoInVsIiwgICAgICAgIDQsIDI0KSwKKwkJQVRUUigiYmxpbmsiLCAgICAgNSwgMjUpLAorCQlBVFRSKCJyZXZlcnNlIiwgICA3LCAyNyksCisJCUFUVFIoInN0cmlrZSIsICAgIDksIDI5KQorI3VuZGVmIEFUVFIKIAl9OworCWludCBuZWdhdGUgPSAwOwogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0dHJfbmFtZXMpOyBpKyspIHsKLQkJY29uc3QgY2hhciAqc3RyID0gYXR0cl9uYW1lc1tpXTsKLQkJaWYgKCFzdHJuY2FzZWNtcChuYW1lLCBzdHIsIGxlbikgJiYgIXN0cltsZW5dKQotCQkJcmV0dXJuIGF0dHJfdmFsdWVzW2ldOworCisJaWYgKHNraXBfcHJlZml4X21lbShuYW1lLCBsZW4sICJubyIsICZuYW1lLCAmbGVuKSkgeworCQlza2lwX3ByZWZpeF9tZW0obmFtZSwgbGVuLCAiLSIsICZuYW1lLCAmbGVuKTsKKwkJbmVnYXRlID0gMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdHRycyk7IGkrKykgeworCQlpZiAoYXR0cnNbaV0ubGVuID09IGxlbiAmJiAhbWVtY21wKGF0dHJzW2ldLm5hbWUsIG5hbWUsIGxlbikpCisJCQlyZXR1cm4gbmVnYXRlID8gYXR0cnNbaV0ubmVnIDogYXR0cnNbaV0udmFsOwogCX0KIAlyZXR1cm4gLTE7CiB9CmRpZmYgLS1naXQgYS9jb2xvci5oIGIvY29sb3IuaAppbmRleCBlMTU1ZDEzLi45MDYyNzY1IDEwMDY0NAotLS0gYS9jb2xvci5oCisrKyBiL2NvbG9yLmgKQEAgLTMsMjYgKzMsMjQgQEAKIAogc3RydWN0IHN0cmJ1ZjsKIAotLyogIDIgKyAoMiAqIG51bV9hdHRycykgKyA4ICsgMSArIDggKyAnbScgKyBOVUwgKi8KLS8qICJcMDMzWzE7Mjs0OzU7NzszODs1OzJ4eDs0ODs1OzJ4eG1cMCIgKi8KIC8qCiAgKiBUaGUgbWF4aW11bSBsZW5ndGggb2YgQU5TSSBjb2xvciBzZXF1ZW5jZSB3ZSB3b3VsZCBnZW5lcmF0ZToKICAqIC0gbGVhZGluZyBFU0MgJ1snICAgICAgICAgICAgMgotICogLSBhdHRyICsgJzsnICAgICAgICAgICAgICAgICAzICogMTAgKGUuZy4gIjE7IikKKyAqIC0gYXR0ciArICc7JyAgICAgICAgICAgICAgICAgMiAqIG51bV9hdHRyIChlLmcuICIxOyIpCisgKiAtIG5vLWF0dHIgKyAnOycgICAgICAgICAgICAgIDMgKiBudW1fYXR0ciAoZS5nLiAiMjI7IikKICAqIC0gZmcgY29sb3IgKyAnOycgICAgICAgICAgICAgMTcgKGUuZy4gIjM4OzI7MjU1OzI1NTsyNTU7IikKICAqIC0gYmcgY29sb3IgKyAnOycgICAgICAgICAgICAgMTcgKGUuZy4gIjQ4OzI7MjU1OzI1NTsyNTU7IikKICAqIC0gdGVybWluYXRpbmcgJ20nIE5VTCAgICAgICAgMgogICoKLSAqIFRoZSBhYm92ZSBvdmVyY291bnRzIGF0dHIgKHdlIG9ubHkgdXNlIDUgbm90IDgpIGFuZCBvbmUgc2VtaWNvbG9uCi0gKiBidXQgaXQgaXMgY2xvc2UgZW5vdWdoLgorICogVGhlIGFib3ZlIG92ZXJjb3VudHMgYnkgb25lIHNlbWljb2xvbiBidXQgaXQgaXMgY2xvc2UgZW5vdWdoLgorICoKKyAqIFRoZSBzcGFjZSBmb3IgYXR0cmlidXRlcyBpcyBhbHNvIHNsaWdodGx5IG92ZXJhbGxvY2F0ZWQsIGFzCisgKiB0aGUgbmVnYXRpb24gZm9yIHNvbWUgYXR0cmlidXRlcyBpcyB0aGUgc2FtZSAoZS5nLiwgbm9ib2xkIGFuZCBub2RpbSkuCisgKgorICogV2UgYWxsb2NhdGUgc3BhY2UgZm9yIDcgYXR0cmlidXRlcy4KICAqLwotI2RlZmluZSBDT0xPUl9NQVhMRU4gNzAKKyNkZWZpbmUgQ09MT1JfTUFYTEVOIDc1CiAKLS8qCi0gKiBJTVBPUlRBTlQ6IER1ZSB0byB0aGUgd2F5IHRoZXNlIGNvbG9yIGNvZGVzIGFyZSBlbXVsYXRlZCBvbiBXaW5kb3dzLAotICogd3JpdGUgdGhlbSBvbmx5IHVzaW5nIHByaW50ZigpLCBmcHJpbnRmKCksIGFuZCBmcHV0cygpLiBJbiBwYXJ0aWN1bGFyLAotICogZG8gbm90IHVzZSBwdXRzKCkgb3Igd3JpdGUoKS4KLSAqLwogI2RlZmluZSBHSVRfQ09MT1JfTk9STUFMCSIiCiAjZGVmaW5lIEdJVF9DT0xPUl9SRVNFVAkJIlwwMzNbbSIKICNkZWZpbmUgR0lUX0NPTE9SX0JPTEQJCSJcMDMzWzFtIgpkaWZmIC0tZ2l0IGEvY29tYmluZS1kaWZmLmMgYi9jb21iaW5lLWRpZmYuYwppbmRleCA4ZjIzMTNkLi44ZTJhNTc3IDEwMDY0NAotLS0gYS9jb21iaW5lLWRpZmYuYworKysgYi9jb21iaW5lLWRpZmYuYwpAQCAtNDQsOSArNDQsOSBAQAogCQkJbWVtc2V0KHAtPnBhcmVudCwgMCwKIAkJCSAgICAgICBzaXplb2YocC0+cGFyZW50WzBdKSAqIG51bV9wYXJlbnQpOwogCi0JCQloYXNoY3B5KHAtPm9pZC5oYXNoLCBxLT5xdWV1ZVtpXS0+dHdvLT5zaGExKTsKKwkJCW9pZGNweSgmcC0+b2lkLCAmcS0+cXVldWVbaV0tPnR3by0+b2lkKTsKIAkJCXAtPm1vZGUgPSBxLT5xdWV1ZVtpXS0+dHdvLT5tb2RlOwotCQkJaGFzaGNweShwLT5wYXJlbnRbbl0ub2lkLmhhc2gsIHEtPnF1ZXVlW2ldLT5vbmUtPnNoYTEpOworCQkJb2lkY3B5KCZwLT5wYXJlbnRbbl0ub2lkLCAmcS0+cXVldWVbaV0tPm9uZS0+b2lkKTsKIAkJCXAtPnBhcmVudFtuXS5tb2RlID0gcS0+cXVldWVbaV0tPm9uZS0+bW9kZTsKIAkJCXAtPnBhcmVudFtuXS5zdGF0dXMgPSBxLT5xdWV1ZVtpXS0+c3RhdHVzOwogCQkJKnRhaWwgPSBwOwpAQCAtNzcsNyArNzcsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQloYXNoY3B5KHAtPnBhcmVudFtuXS5vaWQuaGFzaCwgcS0+cXVldWVbaV0tPm9uZS0+c2hhMSk7CisJCW9pZGNweSgmcC0+cGFyZW50W25dLm9pZCwgJnEtPnF1ZXVlW2ldLT5vbmUtPm9pZCk7CiAJCXAtPnBhcmVudFtuXS5tb2RlID0gcS0+cXVldWVbaV0tPm9uZS0+bW9kZTsKIAkJcC0+cGFyZW50W25dLnN0YXR1cyA9IHEtPnF1ZXVlW2ldLT5zdGF0dXM7CiAKQEAgLTEyNjgsMTYgKzEyNjgsMTYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CiAJCXBhaXItPm9uZVtpXS5wYXRoID0gcC0+cGF0aDsKIAkJcGFpci0+b25lW2ldLm1vZGUgPSBwLT5wYXJlbnRbaV0ubW9kZTsKLQkJaGFzaGNweShwYWlyLT5vbmVbaV0uc2hhMSwgcC0+cGFyZW50W2ldLm9pZC5oYXNoKTsKLQkJcGFpci0+b25lW2ldLnNoYTFfdmFsaWQgPSAhaXNfbnVsbF9vaWQoJnAtPnBhcmVudFtpXS5vaWQpOworCQlvaWRjcHkoJnBhaXItPm9uZVtpXS5vaWQsICZwLT5wYXJlbnRbaV0ub2lkKTsKKwkJcGFpci0+b25lW2ldLm9pZF92YWxpZCA9ICFpc19udWxsX29pZCgmcC0+cGFyZW50W2ldLm9pZCk7CiAJCXBhaXItPm9uZVtpXS5oYXNfbW9yZV9lbnRyaWVzID0gMTsKIAl9CiAJcGFpci0+b25lW251bV9wYXJlbnQgLSAxXS5oYXNfbW9yZV9lbnRyaWVzID0gMDsKIAogCXBhaXItPnR3by0+cGF0aCA9IHAtPnBhdGg7CiAJcGFpci0+dHdvLT5tb2RlID0gcC0+bW9kZTsKLQloYXNoY3B5KHBhaXItPnR3by0+c2hhMSwgcC0+b2lkLmhhc2gpOwotCXBhaXItPnR3by0+c2hhMV92YWxpZCA9ICFpc19udWxsX29pZCgmcC0+b2lkKTsKKwlvaWRjcHkoJnBhaXItPnR3by0+b2lkLCAmcC0+b2lkKTsKKwlwYWlyLT50d28tPm9pZF92YWxpZCA9ICFpc19udWxsX29pZCgmcC0+b2lkKTsKIAlyZXR1cm4gcGFpcjsKIH0KIApAQCAtMTUyNSw3ICsxNTI1LDcgQEAKIAkJZnJlZSh0bXApOwogCX0KIAotCWZyZWVfcGF0aHNwZWMoJmRpZmZvcHRzLnBhdGhzcGVjKTsKKwljbGVhcl9wYXRoc3BlYygmZGlmZm9wdHMucGF0aHNwZWMpOwogfQogCiB2b2lkIGRpZmZfdHJlZV9jb21iaW5lZF9tZXJnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBkZW5zZSwKZGlmZiAtLWdpdCBhL2NvbW1pdC1zbGFiLmggYi9jb21taXQtc2xhYi5oCmluZGV4IGY4NGI0NDkuLjQyZDE2ZGMgMTAwNjQ0Ci0tLSBhL2NvbW1pdC1zbGFiLmgKKysrIGIvY29tbWl0LXNsYWIuaApAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBBZnRlciBpbmNsdWRpbmcgdGhpcyBoZWFkZXIgZmlsZSwgdXNpbmc6CiAgKgotICogZGVmaW5lX2NvbW1pdF9zbGFiKGluZGVnZWUsIGludCk7CisgKiBkZWZpbmVfY29tbWl0X3NsYWIoaW5kZWdyZWUsIGludCk7CiAgKgogICogd2lsbCBsZXQgeW91IGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAgKgpAQCAtMTI2LDE2ICsxMjYsMTYgQEAKIAlyZXR1cm4gc2xhYm5hbWUjI19hdF9wZWVrKHMsIGMsIDApOwkJCQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGludCBzdGF0XyAjI3NsYWJuYW1lIyMgcmVhbGxvYworc3RydWN0IHNsYWJuYW1lCiAKIC8qCi0gKiBOb3RlIHRoYXQgdGhpcyBzZWVtaW5nbHkgcmVkdW5kYW50IHNlY29uZCBkZWNsYXJhdGlvbiBpcyByZXF1aXJlZAorICogTm90ZSB0aGF0IHRoaXMgcmVkdW5kYW50IGZvcndhcmQgZGVjbGFyYXRpb24gaXMgcmVxdWlyZWQKICAqIHRvIGFsbG93IGEgdGVybWluYXRpbmcgc2VtaWNvbG9uLCB3aGljaCBtYWtlcyBpbnN0YW50aWF0aW9ucyBsb29rCiAgKiBsaWtlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gIEkuZS4sIHRoZSBleHBhbnNpb24gb2YKICAqCiAgKiAgICBkZWZpbmVfY29tbWl0X3NsYWIoaW5kZWdyZWUsIGludCk7CiAgKgotICogZW5kcyBpbiAnc3RhdGljIGludCBzdGF0X2luZGVncmVlcmVhbGxvYzsnLiAgVGhpcyB3b3VsZCBvdGhlcndpc2UKKyAqIGVuZHMgaW4gJ3N0cnVjdCBpbmRlZ3JlZTsnLiAgVGhpcyB3b3VsZCBvdGhlcndpc2UKICAqIGJlIGEgc3ludGF4IGVycm9yIGFjY29yZGluZyAoYXQgbGVhc3QpIHRvIElTTyBDLiAgSXQncyBoYXJkIHRvCiAgKiBjYXRjaCBiZWNhdXNlIEdDQyBzaWxlbnRseSBwYXJzZXMgaXQgYnkgZGVmYXVsdC4KICAqLwpkaWZmIC0tZ2l0IGEvY29tbWl0LmMgYi9jb21taXQuYwppbmRleCAzZjRmMzcxLi43MWEzNjBkIDEwMDY0NAotLS0gYS9jb21taXQuYworKysgYi9jb21taXQuYwpAQCAtNDE0LDcgKzQxNCw3IEBACiAJd2hpbGUgKCpwICYmICgqcCAhPSAnXG4nIHx8IHBbMV0gIT0gJ1xuJykpCiAJCXArKzsKIAlpZiAoKnApIHsKLQkJcCArPSAyOworCQlwID0gc2tpcF9ibGFua19saW5lcyhwICsgMik7CiAJCWZvciAoZW9sID0gcDsgKmVvbCAmJiAqZW9sICE9ICdcbic7IGVvbCsrKQogCQkJOyAvKiBkbyBub3RoaW5nICovCiAJfSBlbHNlCkBAIC0xMDkyLDkgKzEwOTIsMTQgQEAKIHsKIAlzdHJ1Y3Qgc3RyYnVmIHNpZyA9IFNUUkJVRl9JTklUOwogCWludCBpbnNwb3MsIGNvcHlwb3M7CisJY29uc3QgY2hhciAqZW9oOwogCiAJLyogZmluZCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIgKi8KLQlpbnNwb3MgPSBzdHJzdHIoYnVmLT5idWYsICJcblxuIikgLSBidWYtPmJ1ZiArIDE7CisJZW9oID0gc3Ryc3RyKGJ1Zi0+YnVmLCAiXG5cbiIpOworCWlmICghZW9oKQorCQlpbnNwb3MgPSBidWYtPmxlbjsKKwllbHNlCisJCWluc3BvcyA9IGVvaCAtIGJ1Zi0+YnVmICsgMTsKIAogCWlmICgha2V5aWQgfHwgISprZXlpZCkKIAkJa2V5aWQgPSBnZXRfc2lnbmluZ19rZXkoKTsKQEAgLTE2MTcsMTYgKzE2MjIsNiBAQAogCXJldHVybiAmbmV3LT5uZXh0OwogfQogCi12b2lkIHByaW50X2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKLQkJICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdF9jdXIsCi0JCSAgICAgICBjb25zdCBjaGFyICpmb3JtYXRfbGFzdCkKLXsKLQlmb3IgKCA7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7Ci0JCWNvbnN0IGNoYXIgKmZvcm1hdCA9IGxpc3QtPm5leHQgPyBmb3JtYXRfY3VyIDogZm9ybWF0X2xhc3Q7Ci0JCXByaW50Zihmb3JtYXQsIG9pZF90b19oZXgoJmxpc3QtPml0ZW0tPm9iamVjdC5vaWQpKTsKLQl9Ci19Ci0KIGNvbnN0IGNoYXIgKmZpbmRfY29tbWl0X2hlYWRlcihjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKmtleSwgc2l6ZV90ICpvdXRfbGVuKQogewogCWludCBrZXlfbGVuID0gc3RybGVuKGtleSk7CmRpZmYgLS1naXQgYS9jb21taXQuaCBiL2NvbW1pdC5oCmluZGV4IGIwNmRiNGQuLjIzYWUwYzEgMTAwNjQ0Ci0tLSBhL2NvbW1pdC5oCisrKyBiL2NvbW1pdC5oCkBAIC0xMzEsMTEgKzEzMSwxNyBAQAogCUNNSVRfRk1UX0ZVTExFUiwKIAlDTUlUX0ZNVF9PTkVMSU5FLAogCUNNSVRfRk1UX0VNQUlMLAorCUNNSVRfRk1UX01CT1hSRCwKIAlDTUlUX0ZNVF9VU0VSRk9STUFULAogCiAJQ01JVF9GTVRfVU5TUEVDSUZJRUQKIH07CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNtaXRfZm10X2lzX21haWwoZW51bSBjbWl0X2ZtdCBmbXQpCit7CisJcmV0dXJuIChmbXQgPT0gQ01JVF9GTVRfRU1BSUwgfHwgZm10ID09IENNSVRfRk1UX01CT1hSRCk7Cit9CisKIHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCB7CiAJLyoKIAkgKiBDYWxsZXJzIHNob3VsZCB0d2VhayB0aGVzZSB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHBwXyogZnVuY3Rpb25zLgpAQCAtMTYxLDYgKzE2Nyw3IEBACiAJICogc2hvdWxkIG5vdCBiZSBjb3VudGVkIG9uIGJ5IGNhbGxlcnMuCiAJICovCiAJc3RydWN0IHN0cmluZ19saXN0IGluX2JvZHlfaGVhZGVyczsKKwlpbnQgZ3JhcGhfd2lkdGg7CiB9OwogCiBzdHJ1Y3QgdXNlcmZvcm1hdF93YW50IHsKQEAgLTE3Nyw2ICsxODQsNyBAQAogCQkJCSAgY29uc3QgY2hhciAqbGluZV9zZXBhcmF0b3IpOwogZXh0ZXJuIHZvaWQgdXNlcmZvcm1hdF9maW5kX3JlcXVpcmVtZW50cyhjb25zdCBjaGFyICpmbXQsIHN0cnVjdCB1c2VyZm9ybWF0X3dhbnQgKncpOwogZXh0ZXJuIGludCBjb21taXRfZm9ybWF0X2lzX2VtcHR5KGVudW0gY21pdF9mbXQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNraXBfYmxhbmtfbGluZXMoY29uc3QgY2hhciAqbXNnKTsKIGV4dGVybiB2b2lkIGZvcm1hdF9jb21taXRfbWVzc2FnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCiAJCQkJICBjb25zdCBjaGFyICpmb3JtYXQsIHN0cnVjdCBzdHJidWYgKnNiLAogCQkJCSAgY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpjb250ZXh0KTsKQEAgLTM2OSwxMCArMzc3LDYgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICptZXNzYWdlLCBzdHJ1Y3Qgc3RyYnVmICpzaWduYXR1cmUpOwogZXh0ZXJuIGludCByZW1vdmVfc2lnbmF0dXJlKHN0cnVjdCBzdHJidWYgKmJ1Zik7CiAKLWV4dGVybiB2b2lkIHByaW50X2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKLQkJCSAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdF9jdXIsCi0JCQkgICAgICBjb25zdCBjaGFyICpmb3JtYXRfbGFzdCk7Ci0KIC8qCiAgKiBDaGVjayB0aGUgc2lnbmF0dXJlIG9mIHRoZSBnaXZlbiBjb21taXQuIFRoZSByZXN1bHQgb2YgdGhlIGNoZWNrIGlzIHN0b3JlZAogICogaW4gc2lnLT5jaGVja19yZXN1bHQsICdHJyBmb3IgYSBnb29kIHNpZ25hdHVyZSwgJ1UnIGZvciBhIGdvb2Qgc2lnbmF0dXJlCmRpZmYgLS1naXQgYS9jb21tb24tbWFpbi5jIGIvY29tbW9uLW1haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGEyOWU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uLW1haW4uYwpAQCAtMCwwICsxLDQxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorCisvKgorICogTWFueSBwYXJ0cyBvZiBHaXQgaGF2ZSBzdWJwcm9ncmFtcyBjb21tdW5pY2F0ZSB2aWEgcGlwZSwgZXhwZWN0IHRoZQorICogdXBzdHJlYW0gb2YgYSBwaXBlIHRvIGRpZSB3aXRoIFNJR1BJUEUgd2hlbiB0aGUgZG93bnN0cmVhbSBvZiBhCisgKiBwaXBlIGRvZXMgbm90IG5lZWQgdG8gcmVhZCBhbGwgdGhhdCBpcyB3cml0dGVuLiAgU29tZSB0aGlyZC1wYXJ0eQorICogcHJvZ3JhbXMgdGhhdCBpZ25vcmUgb3IgYmxvY2sgU0lHUElQRSBmb3IgdGhlaXIgb3duIHJlYXNvbiBmb3JnZXQKKyAqIHRvIHJlc3RvcmUgU0lHUElQRSBoYW5kbGluZyB0byB0aGUgZGVmYXVsdCBiZWZvcmUgc3Bhd25pbmcgR2l0IGFuZAorICogYnJlYWsgdGhpcyBjYXJlZnVsbHkgb3JjaGVzdHJhdGVkIG1hY2hpbmVyeS4KKyAqCisgKiBSZXN0b3JlIHRoZSB3YXkgU0lHUElQRSBpcyBoYW5kbGVkIHRvIGRlZmF1bHQsIHdoaWNoIGlzIHdoYXQgd2UKKyAqIGV4cGVjdC4KKyAqLworc3RhdGljIHZvaWQgcmVzdG9yZV9zaWdwaXBlX3RvX2RlZmF1bHQodm9pZCkKK3sKKwlzaWdzZXRfdCB1bmJsb2NrOworCisJc2lnZW1wdHlzZXQoJnVuYmxvY2spOworCXNpZ2FkZHNldCgmdW5ibG9jaywgU0lHUElQRSk7CisJc2lncHJvY21hc2soU0lHX1VOQkxPQ0ssICZ1bmJsb2NrLCBOVUxMKTsKKwlzaWduYWwoU0lHUElQRSwgU0lHX0RGTCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwkvKgorCSAqIEFsd2F5cyBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgMC8xLzIgdG8gYXZvaWQgY2xvYmJlcmluZyBmaWxlcworCSAqIGluIGRpZSgpLiAgSXQgYWxzbyBhdm9pZHMgbWVzc2luZyB1cCB3aGVuIHRoZSBwaXBlcyBhcmUgZHVwJ2VkCisJICogb250byBzdGRpbi9zdGRvdXQvc3RkZXJyIGluIHRoZSBjaGlsZCBwcm9jZXNzZXMgd2Ugc3Bhd24uCisJICovCisJc2FuaXRpemVfc3RkZmRzKCk7CisKKwlnaXRfc2V0dXBfZ2V0dGV4dCgpOworCisJYXJndlswXSA9IGdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisKKwlyZXN0b3JlX3NpZ3BpcGVfdG9fZGVmYXVsdCgpOworCisJcmV0dXJuIGNtZF9tYWluKGFyZ2MsIGFyZ3YpOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmMgYi9jb21wYXQvbWluZ3cuYwppbmRleCBhODIxOGU2Li4yYjU0NjdkIDEwMDY0NAotLS0gYS9jb21wYXQvbWluZ3cuYworKysgYi9jb21wYXQvbWluZ3cuYwpAQCAtMjE2Miw3ICsyMTYyLDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwX3dpbmRvd3NfZW52aXJvbm1lbnQoKQorc3RhdGljIHZvaWQgc2V0dXBfd2luZG93c19lbnZpcm9ubWVudCh2b2lkKQogewogCWNoYXIgKnRtcCA9IGdldGVudigiVE1QRElSIik7CiAKQEAgLTIyMDQsNyArMjIwNCw3IEBACiBleHRlcm4gaW50IF9fd2dldG1haW5hcmdzKGludCAqYXJnYywgd2NoYXJfdCAqKiphcmd2LCB3Y2hhcl90ICoqKmVudiwgaW50IGdsb2IsCiAJCV9zdGFydHVwaW5mbyAqc2kpOwogCi1zdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfc3RhcnR1cCgpCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfc3RhcnR1cCh2b2lkKQogewogCWZwdXRzKCJmYXRhbDogbm90IGVub3VnaCBtZW1vcnkgZm9yIGluaXRpYWxpemF0aW9uIiwgc3RkZXJyKTsKIAlleGl0KDEyOCk7CkBAIC0yMjI0LDcgKzIyMjQsNyBAQAogCXJldHVybiBtZW1jcHkobWFsbG9jX3N0YXJ0dXAobGVuKSwgYnVmZmVyLCBsZW4pOwogfQogCi12b2lkIG1pbmd3X3N0YXJ0dXAoKQordm9pZCBtaW5nd19zdGFydHVwKHZvaWQpCiB7CiAJaW50IGksIG1heGxlbiwgYXJnYzsKIAljaGFyICpidWZmZXI7CmRpZmYgLS1naXQgYS9jb21wYXQvbWluZ3cuaCBiL2NvbXBhdC9taW5ndy5oCmluZGV4IDY5YmI0M2QuLjk1ZTEyOGYgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9taW5ndy5oCisrKyBiL2NvbXBhdC9taW5ndy5oCkBAIC03Myw2ICs3Myw5IEBACiAjaWZuZGVmIEVDT05OQUJPUlRFRAogI2RlZmluZSBFQ09OTkFCT1JURUQgV1NBRUNPTk5BQk9SVEVECiAjZW5kaWYKKyNpZm5kZWYgRU5PVFNPQ0sKKyNkZWZpbmUgRU5PVFNPQ0sgV1NBRU5PVFNPQ0sKKyNlbmRpZgogCiBzdHJ1Y3QgcGFzc3dkIHsKIAljaGFyICpwd19uYW1lOwpAQCAtNTMyLDEwICs1MzUsMTAgQEAKICAqIEEgcmVwbGFjZW1lbnQgb2YgbWFpbigpIHRoYXQgYWRkcyB3aW4zMiBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KICAqLwogCi12b2lkIG1pbmd3X3N0YXJ0dXAoKTsKLSNkZWZpbmUgbWFpbihjLHYpIGR1bW15X2RlY2xfbWluZ3dfbWFpbigpOyBcCit2b2lkIG1pbmd3X3N0YXJ0dXAodm9pZCk7CisjZGVmaW5lIG1haW4oYyx2KSBkdW1teV9kZWNsX21pbmd3X21haW4odm9pZCk7IFwKIHN0YXRpYyBpbnQgbWluZ3dfbWFpbihjLHYpOyBcCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIFwKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikgXAogeyBcCiAJbWluZ3dfc3RhcnR1cCgpOyBcCiAJcmV0dXJuIG1pbmd3X21haW4oX19hcmdjLCAodm9pZCAqKV9fYXJndik7IFwKZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmMgYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5jCmluZGV4IGEwYTE2ZWIuLjJkNGVmNTkgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmMKKysrIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYwpAQCAtOTM4LDEwICs5MzgsMTAgQEAKIAl2b2lkICoqcmV0OwogCXRocmVhZGNhY2hlICp0YzsKIAlpbnQgbXltc3BhY2U7Ci0gICAgc2l6ZV90IGksICphZGp1c3RlZHNpemVzPShzaXplX3QgKikgYWxsb2NhKGVsZW1zKnNpemVvZihzaXplX3QpKTsKLSAgICBpZighYWRqdXN0ZWRzaXplcykgcmV0dXJuIDA7Ci0gICAgZm9yKGk9MDsgaTxlbGVtczsgaSsrKQotCWFkanVzdGVkc2l6ZXNbaV09c2l6ZXNbaV08c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSA/IHNpemVvZih0aHJlYWRjYWNoZWJsaykgOiBzaXplc1tpXTsKKwlzaXplX3QgaSwgKmFkanVzdGVkc2l6ZXM9KHNpemVfdCAqKSBhbGxvY2EoZWxlbXMqc2l6ZW9mKHNpemVfdCkpOworCWlmKCFhZGp1c3RlZHNpemVzKSByZXR1cm4gMDsKKwlmb3IoaT0wOyBpPGVsZW1zOyBpKyspCisJCWFkanVzdGVkc2l6ZXNbaV09c2l6ZXNbaV08c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSA/IHNpemVvZih0aHJlYWRjYWNoZWJsaykgOiBzaXplc1tpXTsKIAlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsIDApOwogCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIDAsCiAJICAgICAgcmV0PW1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtLCBlbGVtcywgYWRqdXN0ZWRzaXplcywgY2h1bmtzKSk7CkBAIC05NTUsMTIgKzk1NSwxMSBAQAogICovCiBjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqczEpCiB7Ci0JY2hhciAqczIgPSAwOwotCWlmIChzMSkgewotCQlzaXplX3QgbGVuID0gc3RybGVuKHMxKSArIDE7Ci0JCXMyID0gbWFsbG9jKGxlbik7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihzMSkgKyAxOworCWNoYXIgKnMyID0gbWFsbG9jKGxlbik7CisKKwlpZiAoczIpCiAJCW1lbWNweShzMiwgczEsIGxlbik7Ci0JfQogCXJldHVybiBzMjsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYyBiL2NvbXBhdC9yZWdleC9yZWdjb21wLmMKaW5kZXggZmJhNTk4Ni4uZDhiZGUwNiAxMDA2NDQKLS0tIGEvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYworKysgYi9jb21wYXQvcmVnZXgvcmVnY29tcC5jCkBAIC0xOCw4ICsxOCw2IEBACiAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCiAgICAwMjExMC0xMzAxIFVTQS4gICovCiAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQogc3RhdGljIHJlZ19lcnJjb2RlX3QgcmVfY29tcGlsZV9pbnRlcm5hbCAocmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqIHBhdHRlcm4sCiAJCQkJCSAgc2l6ZV90IGxlbmd0aCwgcmVnX3N5bnRheF90IHN5bnRheCk7CiBzdGF0aWMgdm9pZCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwKZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleC5jIGIvY29tcGF0L3JlZ2V4L3JlZ2V4LmMKaW5kZXggNmFhYWUwMC4uNWNiMjNlNSAxMDA2NDQKLS0tIGEvY29tcGF0L3JlZ2V4L3JlZ2V4LmMKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4LmMKQEAgLTYwLDYgKzYwLDcgQEAKICAgIEdOVSByZWdleCBhbGxvd3MuICBJbmNsdWRlIGl0IGJlZm9yZSA8cmVnZXguaD4sIHdoaWNoIGNvcnJlY3RseQogICAgI3VuZGVmcyBSRV9EVVBfTUFYIGFuZCBzZXRzIGl0IHRvIHRoZSByaWdodCB2YWx1ZS4gICovCiAjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAKICNpZmRlZiBHQVdLCiAjdW5kZWYgYWxsb2NhCmRpZmYgLS1naXQgYS9jb21wYXQvd2luYW5zaS5jIGIvY29tcGF0L3dpbmFuc2kuYwppbmRleCAzYmU2MGNlLi5kYjRhNWIwIDEwMDY0NAotLS0gYS9jb21wYXQvd2luYW5zaS5jCisrKyBiL2NvbXBhdC93aW5hbnNpLmMKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCQkJKGZkICYgKElPSU5GT19BUlJBWV9FTFRTIC0gMSkpICogc2l6ZW9mX2lvaW5mbyk7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9zaXplb2ZfaW9pbmZvKCkKK3N0YXRpYyBpbnQgaW5pdF9zaXplb2ZfaW9pbmZvKHZvaWQpCiB7CiAJaW50IGlzdHR5LCB3YXN0dHk7CiAJLyogZG9uJ3QgaW5pdCB0d2ljZSAqLwpkaWZmIC0tZ2l0IGEvY29uZmlnLmMgYi9jb25maWcuYwppbmRleCBmNTFjNTZiLi41ODRjYWNmIDEwMDY0NAotLS0gYS9jb25maWcuYworKysgYi9jb25maWcuYwpAQCAtMjQsNyArMjQsNyBAQAogCQkJc2l6ZV90IHBvczsKIAkJfSBidWY7CiAJfSB1OwotCWNvbnN0IGNoYXIgKm9yaWdpbl90eXBlOworCWVudW0gY29uZmlnX29yaWdpbl90eXBlIG9yaWdpbl90eXBlOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqcGF0aDsKIAlpbnQgZGllX29uX2Vycm9yOwpAQCAtMzgsNyArMzgsMzMgQEAKIAlsb25nICgqZG9fZnRlbGwpKHN0cnVjdCBjb25maWdfc291cmNlICpjKTsKIH07CiAKKy8qCisgKiBUaGVzZSB2YXJpYWJsZXMgcmVjb3JkIHRoZSAiY3VycmVudCIgY29uZmlnIHNvdXJjZSwgd2hpY2gKKyAqIGNhbiBiZSBhY2Nlc3NlZCBieSBwYXJzaW5nIGNhbGxiYWNrcy4KKyAqCisgKiBUaGUgImNmIiB2YXJpYWJsZSB3aWxsIGJlIG5vbi1OVUxMIG9ubHkgd2hlbiB3ZSBhcmUgYWN0dWFsbHkgcGFyc2luZyBhIHJlYWwKKyAqIGNvbmZpZyBzb3VyY2UgKGZpbGUsIGJsb2IsIGNtZGxpbmUsIGV0YykuCisgKgorICogVGhlICJjdXJyZW50X2NvbmZpZ19rdmkiIHZhcmlhYmxlIHdpbGwgYmUgbm9uLU5VTEwgb25seSB3aGVuIHdlIGFyZSBmZWVkaW5nCisgKiBjYWNoZWQgY29uZmlnIGZyb20gYSBjb25maWdzZXQgaW50byBhIGNhbGxiYWNrLgorICoKKyAqIFRoZXkgc2hvdWxkIGdlbmVyYWxseSBuZXZlciBiZSBub24tTlVMTCBhdCB0aGUgc2FtZSB0aW1lLiBJZiB0aGV5IGFyZSBib3RoCisgKiBOVUxMLCB0aGVuIHdlIGFyZW4ndCBwYXJzaW5nIGFueXRoaW5nIChhbmQgZGVwZW5kaW5nIG9uIHRoZSBmdW5jdGlvbiBsb29raW5nCisgKiBhdCB0aGUgdmFyaWFibGVzLCBpdCdzIGVpdGhlciBhIGJ1ZyBmb3IgaXQgdG8gYmUgY2FsbGVkIGluIHRoZSBmaXJzdCBwbGFjZSwKKyAqIG9yIGl0J3MgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgcmV1c2VkIGZvciBub24tY29uZmlnIHB1cnBvc2VzLCBhbmQgc2hvdWxkCisgKiBmYWxsIGJhY2sgdG8gc29tZSBzYW5lIGJlaGF2aW9yKS4KKyAqLwogc3RhdGljIHN0cnVjdCBjb25maWdfc291cmNlICpjZjsKK3N0YXRpYyBzdHJ1Y3Qga2V5X3ZhbHVlX2luZm8gKmN1cnJlbnRfY29uZmlnX2t2aTsKKworLyoKKyAqIFNpbWlsYXIgdG8gdGhlIHZhcmlhYmxlcyBhYm92ZSwgdGhpcyBnaXZlcyBhY2Nlc3MgdG8gdGhlICJzY29wZSIgb2YgdGhlCisgKiBjdXJyZW50IHZhbHVlIChyZXBvLCBnbG9iYWwsIGV0YykuIEZvciBjYWNoZWQgdmFsdWVzLCBpdCBjYW4gYmUgZm91bmQgdmlhCisgKiB0aGUgY3VycmVudF9jb25maWdfa3ZpIGFzIGFib3ZlLiBEdXJpbmcgcGFyc2luZywgdGhlIGN1cnJlbnQgdmFsdWUgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGlzIHZhcmlhYmxlLiBJdCdzIG5vdCBwYXJ0IG9mICJjZiIgYmVjYXVzZSBpdCB0cmFuc2NlbmRzIGEgc2luZ2xlCisgKiBmaWxlIChpLmUuLCBhIGZpbGUgaW5jbHVkZWQgZnJvbSAuZ2l0L2NvbmZpZyBpcyBzdGlsbCBpbiAicmVwbyIgc2NvcGUpLgorICovCitzdGF0aWMgZW51bSBjb25maWdfc2NvcGUgY3VycmVudF9wYXJzaW5nX3Njb3BlOwogCiBzdGF0aWMgaW50IHpsaWJfY29tcHJlc3Npb25fc2VlbjsKIApAQCAtMTMxLDcgKzE1Nyw5IEBACiAJaWYgKCFhY2Nlc3Nfb3JfZGllKHBhdGgsIFJfT0ssIDApKSB7CiAJCWlmICgrK2luYy0+ZGVwdGggPiBNQVhfSU5DTFVERV9ERVBUSCkKIAkJCWRpZShpbmNsdWRlX2RlcHRoX2FkdmljZSwgTUFYX0lOQ0xVREVfREVQVEgsIHBhdGgsCi0JCQkgICAgY2YgJiYgY2YtPm5hbWUgPyBjZi0+bmFtZSA6ICJ0aGUgY29tbWFuZCBsaW5lIik7CisJCQkgICAgIWNmID8gIjx1bmtub3duPiIgOgorCQkJICAgIGNmLT5uYW1lID8gY2YtPm5hbWUgOgorCQkJICAgICJ0aGUgY29tbWFuZCBsaW5lIik7CiAJCXJldCA9IGdpdF9jb25maWdfZnJvbV9maWxlKGdpdF9jb25maWdfaW5jbHVkZSwgcGF0aCwgaW5jKTsKIAkJaW5jLT5kZXB0aC0tOwogCX0KQEAgLTIwNSwzMiArMjMzLDQxIEBACiBpbnQgZ2l0X2NvbmZpZ19mcm9tX3BhcmFtZXRlcnMoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCiB7CiAJY29uc3QgY2hhciAqZW52ID0gZ2V0ZW52KENPTkZJR19EQVRBX0VOVklST05NRU5UKTsKKwlpbnQgcmV0ID0gMDsKIAljaGFyICplbnZ3OwogCWNvbnN0IGNoYXIgKiphcmd2ID0gTlVMTDsKIAlpbnQgbnIgPSAwLCBhbGxvYyA9IDA7CiAJaW50IGk7CisJc3RydWN0IGNvbmZpZ19zb3VyY2Ugc291cmNlOwogCiAJaWYgKCFlbnYpCiAJCXJldHVybiAwOworCisJbWVtc2V0KCZzb3VyY2UsIDAsIHNpemVvZihzb3VyY2UpKTsKKwlzb3VyY2UucHJldiA9IGNmOworCXNvdXJjZS5vcmlnaW5fdHlwZSA9IENPTkZJR19PUklHSU5fQ01ETElORTsKKwljZiA9ICZzb3VyY2U7CisKIAkvKiBzcV9kZXF1b3RlIHdpbGwgd3JpdGUgb3ZlciBpdCAqLwogCWVudncgPSB4c3RyZHVwKGVudik7CiAKIAlpZiAoc3FfZGVxdW90ZV90b19hcmd2KGVudncsICZhcmd2LCAmbnIsICZhbGxvYykgPCAwKSB7Ci0JCWZyZWUoZW52dyk7Ci0JCXJldHVybiBlcnJvcigiYm9ndXMgZm9ybWF0IGluICIgQ09ORklHX0RBVEFfRU5WSVJPTk1FTlQpOworCQlyZXQgPSBlcnJvcigiYm9ndXMgZm9ybWF0IGluICIgQ09ORklHX0RBVEFfRU5WSVJPTk1FTlQpOworCQlnb3RvIG91dDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgewogCQlpZiAoZ2l0X2NvbmZpZ19wYXJzZV9wYXJhbWV0ZXIoYXJndltpXSwgZm4sIGRhdGEpIDwgMCkgewotCQkJZnJlZShhcmd2KTsKLQkJCWZyZWUoZW52dyk7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCitvdXQ6CiAJZnJlZShhcmd2KTsKIAlmcmVlKGVudncpOwotCXJldHVybiBuciA+IDA7CisJY2YgPSBzb3VyY2UucHJldjsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGdldF9uZXh0X2NoYXIodm9pZCkKQEAgLTQxNyw2ICs0NTQsOCBAQAogCWludCBjb21tZW50ID0gMDsKIAlpbnQgYmFzZWxlbiA9IDA7CiAJc3RydWN0IHN0cmJ1ZiAqdmFyID0gJmNmLT52YXI7CisJaW50IGVycm9yX3JldHVybiA9IDA7CisJY2hhciAqZXJyb3JfbXNnID0gTlVMTDsKIAogCS8qIFUrRkVGRiBCeXRlIE9yZGVyIE1hcmsgaW4gVVRGOCAqLwogCWNvbnN0IGNoYXIgKmJvbXB0ciA9IHV0ZjhfYm9tOwpAQCAtNDcxLDEwICs1MTAsNDAgQEAKIAkJaWYgKGdldF92YWx1ZShmbiwgZGF0YSwgdmFyKSA8IDApCiAJCQlicmVhazsKIAl9CisKKwlzd2l0Y2ggKGNmLT5vcmlnaW5fdHlwZSkgeworCWNhc2UgQ09ORklHX09SSUdJTl9CTE9COgorCQllcnJvcl9tc2cgPSB4c3RyZm10KF8oImJhZCBjb25maWcgbGluZSAlZCBpbiBibG9iICVzIiksCisJCQkJICAgICAgY2YtPmxpbmVuciwgY2YtPm5hbWUpOworCQlicmVhazsKKwljYXNlIENPTkZJR19PUklHSU5fRklMRToKKwkJZXJyb3JfbXNnID0geHN0cmZtdChfKCJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIpLAorCQkJCSAgICAgIGNmLT5saW5lbnIsIGNmLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfT1JJR0lOX1NURElOOgorCQllcnJvcl9tc2cgPSB4c3RyZm10KF8oImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIpLAorCQkJCSAgICAgIGNmLT5saW5lbnIpOworCQlicmVhazsKKwljYXNlIENPTkZJR19PUklHSU5fU1VCTU9EVUxFX0JMT0I6CisJCWVycm9yX21zZyA9IHhzdHJmbXQoXygiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIiksCisJCQkJICAgICAgIGNmLT5saW5lbnIsIGNmLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfT1JJR0lOX0NNRExJTkU6CisJCWVycm9yX21zZyA9IHhzdHJmbXQoXygiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIpLAorCQkJCSAgICAgICBjZi0+bGluZW5yLCBjZi0+bmFtZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yX21zZyA9IHhzdHJmbXQoXygiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIiksCisJCQkJICAgICAgY2YtPmxpbmVuciwgY2YtPm5hbWUpOworCX0KKwogCWlmIChjZi0+ZGllX29uX2Vycm9yKQotCQlkaWUoXygiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzICVzIiksIGNmLT5saW5lbnIsIGNmLT5vcmlnaW5fdHlwZSwgY2YtPm5hbWUpOworCQlkaWUoIiVzIiwgZXJyb3JfbXNnKTsKIAllbHNlCi0JCXJldHVybiBlcnJvcihfKCJiYWQgY29uZmlnIGxpbmUgJWQgaW4gJXMgJXMiKSwgY2YtPmxpbmVuciwgY2YtPm9yaWdpbl90eXBlLCBjZi0+bmFtZSk7CisJCWVycm9yX3JldHVybiA9IGVycm9yKCIlcyIsIGVycm9yX21zZyk7CisKKwlmcmVlKGVycm9yX21zZyk7CisJcmV0dXJuIGVycm9yX3JldHVybjsKIH0KIAogc3RhdGljIGludCBwYXJzZV91bml0X2ZhY3Rvcihjb25zdCBjaGFyICplbmQsIHVpbnRtYXhfdCAqdmFsKQpAQCAtNTgzLDE2ICs2NTIsNDcgQEAKIE5PUkVUVVJOCiBzdGF0aWMgdm9pZCBkaWVfYmFkX251bWJlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKLQljb25zdCBjaGFyICpyZWFzb24gPSBlcnJubyA9PSBFUkFOR0UgPwotCQkJICAgICAib3V0IG9mIHJhbmdlIiA6Ci0JCQkgICAgICJpbnZhbGlkIHVuaXQiOwogCWlmICghdmFsdWUpCiAJCXZhbHVlID0gIiI7CiAKLQlpZiAoY2YgJiYgY2YtPm9yaWdpbl90eXBlICYmIGNmLT5uYW1lKQotCQlkaWUoXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXMgJXM6ICVzIiksCi0JCSAgICB2YWx1ZSwgbmFtZSwgY2YtPm9yaWdpbl90eXBlLCBjZi0+bmFtZSwgcmVhc29uKTsKLQlkaWUoXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIiksIHZhbHVlLCBuYW1lLCByZWFzb24pOworCWlmICghKGNmICYmIGNmLT5uYW1lKSkKKwkJZGllKGVycm5vID09IEVSQU5HRQorCQkgICAgPyBfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogb3V0IG9mIHJhbmdlIikKKwkJICAgIDogXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6IGludmFsaWQgdW5pdCIpLAorCQkgICAgdmFsdWUsIG5hbWUpOworCisJc3dpdGNoIChjZi0+b3JpZ2luX3R5cGUpIHsKKwljYXNlIENPTkZJR19PUklHSU5fQkxPQjoKKwkJZGllKGVycm5vID09IEVSQU5HRQorCQkgICAgPyBfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiBvdXQgb2YgcmFuZ2UiKQorCQkgICAgOiBfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiBpbnZhbGlkIHVuaXQiKSwKKwkJICAgIHZhbHVlLCBuYW1lLCBjZi0+bmFtZSk7CisJY2FzZSBDT05GSUdfT1JJR0lOX0ZJTEU6CisJCWRpZShlcnJubyA9PSBFUkFOR0UKKwkJICAgID8gXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogb3V0IG9mIHJhbmdlIikKKwkJICAgIDogXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogaW52YWxpZCB1bml0IiksCisJCSAgICB2YWx1ZSwgbmFtZSwgY2YtPm5hbWUpOworCWNhc2UgQ09ORklHX09SSUdJTl9TVERJTjoKKwkJZGllKGVycm5vID09IEVSQU5HRQorCQkgICAgPyBfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogb3V0IG9mIHJhbmdlIikKKwkJICAgIDogXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6IGludmFsaWQgdW5pdCIpLAorCQkgICAgdmFsdWUsIG5hbWUpOworCWNhc2UgQ09ORklHX09SSUdJTl9TVUJNT0RVTEVfQkxPQjoKKwkJZGllKGVycm5vID09IEVSQU5HRQorCQkgICAgPyBfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogb3V0IG9mIHJhbmdlIikKKwkJICAgIDogXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6IGludmFsaWQgdW5pdCIpLAorCQkgICAgdmFsdWUsIG5hbWUsIGNmLT5uYW1lKTsKKwljYXNlIENPTkZJR19PUklHSU5fQ01ETElORToKKwkJZGllKGVycm5vID09IEVSQU5HRQorCQkgICAgPyBfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6IG91dCBvZiByYW5nZSIpCisJCSAgICA6IF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogaW52YWxpZCB1bml0IiksCisJCSAgICB2YWx1ZSwgbmFtZSwgY2YtPm5hbWUpOworCWRlZmF1bHQ6CisJCWRpZShlcnJubyA9PSBFUkFOR0UKKwkJICAgID8gXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6IG91dCBvZiByYW5nZSIpCisJCSAgICA6IF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiBpbnZhbGlkIHVuaXQiKSwKKwkJICAgIHZhbHVlLCBuYW1lLCBjZi0+bmFtZSk7CisJfQogfQogCiBpbnQgZ2l0X2NvbmZpZ19pbnQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCkBAIC0xMDY5LDcgKzExNjksOCBAQAogfQogCiBzdGF0aWMgaW50IGRvX2NvbmZpZ19mcm9tX2ZpbGUoY29uZmlnX2ZuX3QgZm4sCi0JCWNvbnN0IGNoYXIgKm9yaWdpbl90eXBlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmLAorCQljb25zdCBlbnVtIGNvbmZpZ19vcmlnaW5fdHlwZSBvcmlnaW5fdHlwZSwKKwkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCwgRklMRSAqZiwKIAkJdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY29uZmlnX3NvdXJjZSB0b3A7CkBAIC0xMDg4LDcgKzExODksNyBAQAogCiBzdGF0aWMgaW50IGdpdF9jb25maWdfZnJvbV9zdGRpbihjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKIHsKLQlyZXR1cm4gZG9fY29uZmlnX2Zyb21fZmlsZShmbiwgInN0YW5kYXJkIGlucHV0IiwgIiIsIE5VTEwsIHN0ZGluLCBkYXRhKTsKKwlyZXR1cm4gZG9fY29uZmlnX2Zyb21fZmlsZShmbiwgQ09ORklHX09SSUdJTl9TVERJTiwgIiIsIE5VTEwsIHN0ZGluLCBkYXRhKTsKIH0KIAogaW50IGdpdF9jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqZGF0YSkKQEAgLTEwOTksMTQgKzEyMDAsMTQgQEAKIAlmID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CiAJaWYgKGYpIHsKIAkJZmxvY2tmaWxlKGYpOwotCQlyZXQgPSBkb19jb25maWdfZnJvbV9maWxlKGZuLCAiZmlsZSIsIGZpbGVuYW1lLCBmaWxlbmFtZSwgZiwgZGF0YSk7CisJCXJldCA9IGRvX2NvbmZpZ19mcm9tX2ZpbGUoZm4sIENPTkZJR19PUklHSU5fRklMRSwgZmlsZW5hbWUsIGZpbGVuYW1lLCBmLCBkYXRhKTsKIAkJZnVubG9ja2ZpbGUoZik7CiAJCWZjbG9zZShmKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGdpdF9jb25maWdfZnJvbV9tZW0oY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKm9yaWdpbl90eXBlLAoraW50IGdpdF9jb25maWdfZnJvbV9tZW0oY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGVudW0gY29uZmlnX29yaWdpbl90eXBlIG9yaWdpbl90eXBlLAogCQkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBjb25maWdfc291cmNlIHRvcDsKQEAgLTExNDMsNyArMTI0NCw3IEBACiAJCXJldHVybiBlcnJvcigicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIiwgbmFtZSk7CiAJfQogCi0JcmV0ID0gZ2l0X2NvbmZpZ19mcm9tX21lbShmbiwgImJsb2IiLCBuYW1lLCBidWYsIHNpemUsIGRhdGEpOworCXJldCA9IGdpdF9jb25maWdfZnJvbV9tZW0oZm4sIENPTkZJR19PUklHSU5fQkxPQiwgbmFtZSwgYnVmLCBzaXplLCBkYXRhKTsKIAlmcmVlKGJ1Zik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTE5Nyw0NyArMTI5OCwzNiBAQAogCiBzdGF0aWMgaW50IGRvX2dpdF9jb25maWdfc2VxdWVuY2UoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCiB7Ci0JaW50IHJldCA9IDAsIGZvdW5kID0gMDsKKwlpbnQgcmV0ID0gMDsKIAljaGFyICp4ZGdfY29uZmlnID0geGRnX2NvbmZpZ19ob21lKCJjb25maWciKTsKIAljaGFyICp1c2VyX2NvbmZpZyA9IGV4cGFuZF91c2VyX3BhdGgoIn4vLmdpdGNvbmZpZyIpOwogCWNoYXIgKnJlcG9fY29uZmlnID0gZ2l0X3BhdGhkdXAoImNvbmZpZyIpOwogCi0JaWYgKGdpdF9jb25maWdfc3lzdGVtKCkgJiYgIWFjY2Vzc19vcl9kaWUoZ2l0X2V0Y19naXRjb25maWcoKSwgUl9PSywgMCkpIHsKKwljdXJyZW50X3BhcnNpbmdfc2NvcGUgPSBDT05GSUdfU0NPUEVfU1lTVEVNOworCWlmIChnaXRfY29uZmlnX3N5c3RlbSgpICYmICFhY2Nlc3Nfb3JfZGllKGdpdF9ldGNfZ2l0Y29uZmlnKCksIFJfT0ssIDApKQogCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIGdpdF9ldGNfZ2l0Y29uZmlnKCksCiAJCQkJCSAgICBkYXRhKTsKLQkJZm91bmQgKz0gMTsKLQl9CiAKLQlpZiAoeGRnX2NvbmZpZyAmJiAhYWNjZXNzX29yX2RpZSh4ZGdfY29uZmlnLCBSX09LLCBBQ0NFU1NfRUFDQ0VTX09LKSkgeworCWN1cnJlbnRfcGFyc2luZ19zY29wZSA9IENPTkZJR19TQ09QRV9HTE9CQUw7CisJaWYgKHhkZ19jb25maWcgJiYgIWFjY2Vzc19vcl9kaWUoeGRnX2NvbmZpZywgUl9PSywgQUNDRVNTX0VBQ0NFU19PSykpCiAJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgeGRnX2NvbmZpZywgZGF0YSk7Ci0JCWZvdW5kICs9IDE7Ci0JfQogCi0JaWYgKHVzZXJfY29uZmlnICYmICFhY2Nlc3Nfb3JfZGllKHVzZXJfY29uZmlnLCBSX09LLCBBQ0NFU1NfRUFDQ0VTX09LKSkgeworCWlmICh1c2VyX2NvbmZpZyAmJiAhYWNjZXNzX29yX2RpZSh1c2VyX2NvbmZpZywgUl9PSywgQUNDRVNTX0VBQ0NFU19PSykpCiAJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgdXNlcl9jb25maWcsIGRhdGEpOwotCQlmb3VuZCArPSAxOwotCX0KIAotCWlmIChyZXBvX2NvbmZpZyAmJiAhYWNjZXNzX29yX2RpZShyZXBvX2NvbmZpZywgUl9PSywgMCkpIHsKKwljdXJyZW50X3BhcnNpbmdfc2NvcGUgPSBDT05GSUdfU0NPUEVfUkVQTzsKKwlpZiAocmVwb19jb25maWcgJiYgIWFjY2Vzc19vcl9kaWUocmVwb19jb25maWcsIFJfT0ssIDApKQogCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHJlcG9fY29uZmlnLCBkYXRhKTsKLQkJZm91bmQgKz0gMTsKLQl9CiAKLQlzd2l0Y2ggKGdpdF9jb25maWdfZnJvbV9wYXJhbWV0ZXJzKGZuLCBkYXRhKSkgewotCWNhc2UgLTE6IC8qIGVycm9yICovCisJY3VycmVudF9wYXJzaW5nX3Njb3BlID0gQ09ORklHX1NDT1BFX0NNRExJTkU7CisJaWYgKGdpdF9jb25maWdfZnJvbV9wYXJhbWV0ZXJzKGZuLCBkYXRhKSA8IDApCiAJCWRpZShfKCJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIpKTsKLQkJYnJlYWs7Ci0JY2FzZSAwOiAvKiBmb3VuZCBub3RoaW5nICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6IC8qIGZvdW5kIGF0IGxlYXN0IG9uZSBpdGVtICovCi0JCWZvdW5kKys7Ci0JCWJyZWFrOwotCX0KIAorCWN1cnJlbnRfcGFyc2luZ19zY29wZSA9IENPTkZJR19TQ09QRV9VTktOT1dOOwogCWZyZWUoeGRnX2NvbmZpZyk7CiAJZnJlZSh1c2VyX2NvbmZpZyk7CiAJZnJlZShyZXBvX2NvbmZpZyk7Ci0JcmV0dXJuIHJldCA9PSAwID8gZm91bmQgOiByZXQ7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGdpdF9jb25maWdfd2l0aF9vcHRpb25zKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhLApAQCAtMTI3Miw3ICsxMzYyLDcgQEAKIAlpZiAoZ2l0X2NvbmZpZ193aXRoX29wdGlvbnMoZm4sIGRhdGEsIE5VTEwsIDEpIDwgMCkKIAkJLyoKIAkJICogZ2l0X2NvbmZpZ193aXRoX29wdGlvbnMoKSBub3JtYWxseSByZXR1cm5zIG9ubHkKLQkJICogcG9zaXRpdmUgdmFsdWVzLCBhcyBtb3N0IGVycm9ycyBhcmUgZmF0YWwsIGFuZAorCQkgKiB6ZXJvLCBhcyBtb3N0IGVycm9ycyBhcmUgZmF0YWwsIGFuZAogCQkgKiBub24tZmF0YWwgcG90ZW50aWFsIGVycm9ycyBhcmUgZ3VhcmRlZCBieSAiaWYiCiAJCSAqIHN0YXRlbWVudHMgdGhhdCBhcmUgZW50ZXJlZCBvbmx5IHdoZW4gbm8gZXJyb3IgaXMKIAkJICogcG9zc2libGUuCkBAIC0xMjgxLDcgKzEzNzEsNyBAQAogCQkgKiBzb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcgYW5kIHdlIHNob3VsZCBzdG9wCiAJCSAqIGltbWVkaWF0ZWx5LgogCQkgKi8KLQkJZGllKF8oInVua25vd24gZXJyb3Igb2NjdXJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIikpOworCQlkaWUoXygidW5rbm93biBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIikpOwogfQogCiBzdGF0aWMgdm9pZCBjb25maWdzZXRfaXRlcihzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQpAQCAtMTI5MCwxNiArMTM4MCwyMCBAQAogCXN0cnVjdCBzdHJpbmdfbGlzdCAqdmFsdWVzOwogCXN0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgKmVudHJ5OwogCXN0cnVjdCBjb25maWdzZXRfbGlzdCAqbGlzdCA9ICZjcy0+bGlzdDsKLQlzdHJ1Y3Qga2V5X3ZhbHVlX2luZm8gKmt2X2luZm87CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykgewogCQllbnRyeSA9IGxpc3QtPml0ZW1zW2ldLmU7CiAJCXZhbHVlX2luZGV4ID0gbGlzdC0+aXRlbXNbaV0udmFsdWVfaW5kZXg7CiAJCXZhbHVlcyA9ICZlbnRyeS0+dmFsdWVfbGlzdDsKLQkJaWYgKGZuKGVudHJ5LT5rZXksIHZhbHVlcy0+aXRlbXNbdmFsdWVfaW5kZXhdLnN0cmluZywgZGF0YSkgPCAwKSB7Ci0JCQlrdl9pbmZvID0gdmFsdWVzLT5pdGVtc1t2YWx1ZV9pbmRleF0udXRpbDsKLQkJCWdpdF9kaWVfY29uZmlnX2xpbmVucihlbnRyeS0+a2V5LCBrdl9pbmZvLT5maWxlbmFtZSwga3ZfaW5mby0+bGluZW5yKTsKLQkJfQorCisJCWN1cnJlbnRfY29uZmlnX2t2aSA9IHZhbHVlcy0+aXRlbXNbdmFsdWVfaW5kZXhdLnV0aWw7CisKKwkJaWYgKGZuKGVudHJ5LT5rZXksIHZhbHVlcy0+aXRlbXNbdmFsdWVfaW5kZXhdLnN0cmluZywgZGF0YSkgPCAwKQorCQkJZ2l0X2RpZV9jb25maWdfbGluZW5yKGVudHJ5LT5rZXksCisJCQkJCSAgICAgIGN1cnJlbnRfY29uZmlnX2t2aS0+ZmlsZW5hbWUsCisJCQkJCSAgICAgIGN1cnJlbnRfY29uZmlnX2t2aS0+bGluZW5yKTsKKworCQljdXJyZW50X2NvbmZpZ19rdmkgPSBOVUxMOwogCX0KIH0KIApAQCAtMTM1NiwxNCArMTQ1MCwxOSBAQAogCWxfaXRlbS0+ZSA9IGU7CiAJbF9pdGVtLT52YWx1ZV9pbmRleCA9IGUtPnZhbHVlX2xpc3QubnIgLSAxOwogCi0JaWYgKGNmKSB7CisJaWYgKCFjZikKKwkJZGllKCJCVUc6IGNvbmZpZ3NldF9hZGRfdmFsdWUgaGFzIG5vIHNvdXJjZSIpOworCWlmIChjZi0+bmFtZSkgewogCQlrdl9pbmZvLT5maWxlbmFtZSA9IHN0cmludGVybihjZi0+bmFtZSk7CiAJCWt2X2luZm8tPmxpbmVuciA9IGNmLT5saW5lbnI7CisJCWt2X2luZm8tPm9yaWdpbl90eXBlID0gY2YtPm9yaWdpbl90eXBlOwogCX0gZWxzZSB7CiAJCS8qIGZvciB2YWx1ZXMgcmVhZCBmcm9tIGBnaXRfY29uZmlnX2Zyb21fcGFyYW1ldGVycygpYCAqLwogCQlrdl9pbmZvLT5maWxlbmFtZSA9IE5VTEw7CiAJCWt2X2luZm8tPmxpbmVuciA9IC0xOworCQlrdl9pbmZvLT5vcmlnaW5fdHlwZSA9IENPTkZJR19PUklHSU5fQ01ETElORTsKIAl9CisJa3ZfaW5mby0+c2NvcGUgPSBjdXJyZW50X3BhcnNpbmdfc2NvcGU7CiAJc2ktPnV0aWwgPSBrdl9pbmZvOwogCiAJcmV0dXJuIDA7CkBAIC0yNDQyLDEwICsyNTQxLDQ2IEBACiAKIGNvbnN0IGNoYXIgKmN1cnJlbnRfY29uZmlnX29yaWdpbl90eXBlKHZvaWQpCiB7Ci0JcmV0dXJuIGNmICYmIGNmLT5vcmlnaW5fdHlwZSA/IGNmLT5vcmlnaW5fdHlwZSA6ICJjb21tYW5kIGxpbmUiOworCWludCB0eXBlOworCWlmIChjdXJyZW50X2NvbmZpZ19rdmkpCisJCXR5cGUgPSBjdXJyZW50X2NvbmZpZ19rdmktPm9yaWdpbl90eXBlOworCWVsc2UgaWYoY2YpCisJCXR5cGUgPSBjZi0+b3JpZ2luX3R5cGU7CisJZWxzZQorCQlkaWUoIkJVRzogY3VycmVudF9jb25maWdfb3JpZ2luX3R5cGUgY2FsbGVkIG91dHNpZGUgY29uZmlnIGNhbGxiYWNrIik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIENPTkZJR19PUklHSU5fQkxPQjoKKwkJcmV0dXJuICJibG9iIjsKKwljYXNlIENPTkZJR19PUklHSU5fRklMRToKKwkJcmV0dXJuICJmaWxlIjsKKwljYXNlIENPTkZJR19PUklHSU5fU1RESU46CisJCXJldHVybiAic3RhbmRhcmQgaW5wdXQiOworCWNhc2UgQ09ORklHX09SSUdJTl9TVUJNT0RVTEVfQkxPQjoKKwkJcmV0dXJuICJzdWJtb2R1bGUtYmxvYiI7CisJY2FzZSBDT05GSUdfT1JJR0lOX0NNRExJTkU6CisJCXJldHVybiAiY29tbWFuZCBsaW5lIjsKKwlkZWZhdWx0OgorCQlkaWUoIkJVRzogdW5rbm93biBjb25maWcgb3JpZ2luIHR5cGUiKTsKKwl9CiB9CiAKIGNvbnN0IGNoYXIgKmN1cnJlbnRfY29uZmlnX25hbWUodm9pZCkKIHsKLQlyZXR1cm4gY2YgJiYgY2YtPm5hbWUgPyBjZi0+bmFtZSA6ICIiOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaWYgKGN1cnJlbnRfY29uZmlnX2t2aSkKKwkJbmFtZSA9IGN1cnJlbnRfY29uZmlnX2t2aS0+ZmlsZW5hbWU7CisJZWxzZSBpZiAoY2YpCisJCW5hbWUgPSBjZi0+bmFtZTsKKwllbHNlCisJCWRpZSgiQlVHOiBjdXJyZW50X2NvbmZpZ19uYW1lIGNhbGxlZCBvdXRzaWRlIGNvbmZpZyBjYWxsYmFjayIpOworCXJldHVybiBuYW1lID8gbmFtZSA6ICIiOworfQorCitlbnVtIGNvbmZpZ19zY29wZSBjdXJyZW50X2NvbmZpZ19zY29wZSh2b2lkKQoreworCWlmIChjdXJyZW50X2NvbmZpZ19rdmkpCisJCXJldHVybiBjdXJyZW50X2NvbmZpZ19rdmktPnNjb3BlOworCWVsc2UKKwkJcmV0dXJuIGN1cnJlbnRfcGFyc2luZ19zY29wZTsKIH0KZGlmZiAtLWdpdCBhL2NvbmZpZy5tYWsudW5hbWUgYi9jb25maWcubWFrLnVuYW1lCmluZGV4IGE4OGYxMzkuLmIyMzI5MDggMTAwNjQ0Ci0tLSBhL2NvbmZpZy5tYWsudW5hbWUKKysrIGIvY29uZmlnLm1hay51bmFtZQpAQCAtMzYsNiArMzYsOCBAQAogCUhBVkVfREVWX1RUWSA9IFllc1BsZWFzZQogCUhBVkVfQ0xPQ0tfR0VUVElNRSA9IFllc1BsZWFzZQogCUhBVkVfQ0xPQ0tfTU9OT1RPTklDID0gWWVzUGxlYXNlCisJIyAtbHJ0IGlzIG5lZWRlZCBmb3IgY2xvY2tfZ2V0dGltZSBvbiBnbGliYyA8PSAyLjE2CisJTkVFRFNfTElCUlQgPSBZZXNQbGVhc2UKIAlIQVZFX0dFVERFTElNID0gWWVzUGxlYXNlCiAJU0FORV9URVhUX0dSRVA9LWEKIGVuZGlmCkBAIC0yMDMsOSArMjA1LDExIEBACiAJCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQogCWVuZGlmCiAJUFlUSE9OX1BBVEggPSAvdXNyL2xvY2FsL2Jpbi9weXRob24KKwlQRVJMX1BBVEggPSAvdXNyL2xvY2FsL2Jpbi9wZXJsCiAJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCiAJR01USU1FX1VOUkVMSUFCTEVfRVJST1JTID0gVW5mb3J0dW5hdGVseVllcwogCUhBVkVfQlNEX1NZU0NUTCA9IFllc1BsZWFzZQorCVBBR0VSX0VOViA9IExFU1M9RlJYIExWPS1jIE1PUkU9RlJYCiBlbmRpZgogaWZlcSAoJCh1bmFtZV9TKSxPcGVuQlNEKQogCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBjMjc5MDI1Li5hYTljOTFkIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0xMTA4LDE0ICsxMTA4LDE5IEBACiBBQ19ERUZVTihbUFRIUkVBRFRFU1RfU1JDXSwgWwogQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8cHRocmVhZC5oPgorc3RhdGljIHZvaWQgKm5vb3Aodm9pZCAqaWdub3JlKSB7IHJldHVybiBpZ25vcmU7IH0KIF1dLCBbWwogCXB0aHJlYWRfbXV0ZXhfdCB0ZXN0X211dGV4OwogCXB0aHJlYWRfa2V5X3QgdGVzdF9rZXk7CisJcHRocmVhZF90IHRoOwogCWludCByZXRjb2RlID0gMDsKKwl2b2lkICpyZXQgPSAodm9pZCAqKTA7CiAJcmV0Y29kZSB8PSBwdGhyZWFkX2tleV9jcmVhdGUoJnRlc3Rfa2V5LCAodm9pZCAqKTApOwogCXJldGNvZGUgfD0gcHRocmVhZF9tdXRleF9pbml0KCZ0ZXN0X211dGV4LCh2b2lkICopMCk7CiAJcmV0Y29kZSB8PSBwdGhyZWFkX211dGV4X2xvY2soJnRlc3RfbXV0ZXgpOwogCXJldGNvZGUgfD0gcHRocmVhZF9tdXRleF91bmxvY2soJnRlc3RfbXV0ZXgpOworCXJldGNvZGUgfD0gcHRocmVhZF9jcmVhdGUoJnRoLCByZXQsIG5vb3AsIHJldCk7CisJcmV0Y29kZSB8PSBwdGhyZWFkX2pvaW4odGgsICZyZXQpOwogCXJldHVybiByZXRjb2RlOwogXV0pXSkKIApkaWZmIC0tZ2l0IGEvY29ubmVjdC5jIGIvY29ubmVjdC5jCmluZGV4IGM1M2YzZjEuLjcyMmRjM2YgMTAwNjQ0Ci0tLSBhL2Nvbm5lY3QuYworKysgYi9jb25uZWN0LmMKQEAgLTY1OCw2ICs2NTgsMTkgQEAKIAogc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzIG5vX2ZvcmsgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CiAKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfc3NoX2NvbW1hbmQodm9pZCkKK3sKKwljb25zdCBjaGFyICpzc2g7CisKKwlpZiAoKHNzaCA9IGdldGVudigiR0lUX1NTSF9DT01NQU5EIikpKQorCQlyZXR1cm4gc3NoOworCisJaWYgKCFnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoImNvcmUuc3NoY29tbWFuZCIsICZzc2gpKQorCQlyZXR1cm4gc3NoOworCisJcmV0dXJuIE5VTEw7Cit9CisKIC8qCiAgKiBUaGlzIHJldHVybnMgYSBkdW1teSBjaGlsZF9wcm9jZXNzIGlmIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wgZG9lcyBub3QKICAqIG5lZWQgZm9yaygyKSwgb3IgYSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBvYmplY3QgaWYgaXQgZG9lcy4gIE9uY2UgZG9uZSwKQEAgLTc1OCw3ICs3NzEsNyBAQAogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCi0JCQlzc2ggPSBnZXRlbnYoIkdJVF9TU0hfQ09NTUFORCIpOworCQkJc3NoID0gZ2V0X3NzaF9jb21tYW5kKCk7CiAJCQlpZiAoIXNzaCkgewogCQkJCWNvbnN0IGNoYXIgKmJhc2U7CiAJCQkJY2hhciAqc3NoX2R1cDsKZGlmZiAtLWdpdCBhL2Nvbm5lY3RlZC5jIGIvY29ubmVjdGVkLmMKaW5kZXggYmYxYjEyZS4uOGUzZTRiMSAxMDA2NDQKLS0tIGEvY29ubmVjdGVkLmMKKysrIGIvY29ubmVjdGVkLmMKQEAgLTQsMTAgKzQsNiBAQAogI2luY2x1ZGUgImNvbm5lY3RlZC5oIgogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogCi1pbnQgY2hlY2tfZXZlcnl0aGluZ19jb25uZWN0ZWQoc2hhMV9pdGVyYXRlX2ZuIGZuLCBpbnQgcXVpZXQsIHZvaWQgKmNiX2RhdGEpCi17Ci0JcmV0dXJuIGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkX3dpdGhfdHJhbnNwb3J0KGZuLCBxdWlldCwgY2JfZGF0YSwgTlVMTCk7Ci19CiAvKgogICogSWYgd2UgZmVlZCBhbGwgdGhlIGNvbW1pdHMgd2Ugd2FudCB0byB2ZXJpZnkgdG8gdGhpcyBjb21tYW5kCiAgKgpAQCAtMTksMjIgKzE1LDI3IEBACiAgKgogICogUmV0dXJucyAwIGlmIGV2ZXJ5dGhpbmcgaXMgY29ubmVjdGVkLCBub24temVybyBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgY2hlY2tfZXZlcnl0aGluZ19jb25uZWN0ZWRfcmVhbChzaGExX2l0ZXJhdGVfZm4gZm4sCi0JCQkJCSAgIGludCBxdWlldCwKLQkJCQkJICAgdm9pZCAqY2JfZGF0YSwKLQkJCQkJICAgc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAotCQkJCQkgICBjb25zdCBjaGFyICpzaGFsbG93X2ZpbGUpCitpbnQgY2hlY2tfY29ubmVjdGVkKHNoYTFfaXRlcmF0ZV9mbiBmbiwgdm9pZCAqY2JfZGF0YSwKKwkJICAgIHN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyAqb3B0KQogewogCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHJldl9saXN0ID0gQ0hJTERfUFJPQ0VTU19JTklUOwotCWNvbnN0IGNoYXIgKmFyZ3ZbOV07CisJc3RydWN0IGNoZWNrX2Nvbm5lY3RlZF9vcHRpb25zIGRlZmF1bHRzID0gQ0hFQ0tfQ09OTkVDVEVEX0lOSVQ7CiAJY2hhciBjb21taXRbNDFdOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JaW50IGVyciA9IDAsIGFjID0gMDsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgcGFja2VkX2dpdCAqbmV3X3BhY2sgPSBOVUxMOworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydDsKIAlzaXplX3QgYmFzZV9sZW47CiAKLQlpZiAoZm4oY2JfZGF0YSwgc2hhMSkpCisJaWYgKCFvcHQpCisJCW9wdCA9ICZkZWZhdWx0czsKKwl0cmFuc3BvcnQgPSBvcHQtPnRyYW5zcG9ydDsKKworCWlmIChmbihjYl9kYXRhLCBzaGExKSkgeworCQlpZiAob3B0LT5lcnJfZmQpCisJCQljbG9zZShvcHQtPmVycl9mZCk7CiAJCXJldHVybiBlcnI7CisJfQogCiAJaWYgKHRyYW5zcG9ydCAmJiB0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMgJiYKIAkgICAgdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zLT5zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkICYmCkBAIC00NywyNCArNDgsMjggQEAKIAkJc3RyYnVmX3JlbGVhc2UoJmlkeF9maWxlKTsKIAl9CiAKLQlpZiAoc2hhbGxvd19maWxlKSB7Ci0JCWFyZ3ZbYWMrK10gPSAiLS1zaGFsbG93LWZpbGUiOwotCQlhcmd2W2FjKytdID0gc2hhbGxvd19maWxlOworCWlmIChvcHQtPnNoYWxsb3dfZmlsZSkgeworCQlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsICItLXNoYWxsb3ctZmlsZSIpOworCQlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsIG9wdC0+c2hhbGxvd19maWxlKTsKIAl9Ci0JYXJndlthYysrXSA9ICJyZXYtbGlzdCI7Ci0JYXJndlthYysrXSA9ICItLW9iamVjdHMiOwotCWFyZ3ZbYWMrK10gPSAiLS1zdGRpbiI7Ci0JYXJndlthYysrXSA9ICItLW5vdCI7Ci0JYXJndlthYysrXSA9ICItLWFsbCI7Ci0JaWYgKHF1aWV0KQotCQlhcmd2W2FjKytdID0gIi0tcXVpZXQiOwotCWFyZ3ZbYWNdID0gTlVMTDsKKwlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsInJldi1saXN0Iik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1vYmplY3RzIik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1zdGRpbiIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2xpc3QuYXJncywgIi0tbm90Iik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1hbGwiKTsKKwlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsICItLXF1aWV0Iik7CisJaWYgKG9wdC0+cHJvZ3Jlc3MpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJnJldl9saXN0LmFyZ3MsICItLXByb2dyZXNzPSVzIiwKKwkJCQkgXygiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IikpOwogCi0JcmV2X2xpc3QuYXJndiA9IGFyZ3Y7CiAJcmV2X2xpc3QuZ2l0X2NtZCA9IDE7CiAJcmV2X2xpc3QuaW4gPSAtMTsKIAlyZXZfbGlzdC5ub19zdGRvdXQgPSAxOwotCXJldl9saXN0Lm5vX3N0ZGVyciA9IHF1aWV0OworCWlmIChvcHQtPmVycl9mZCkKKwkJcmV2X2xpc3QuZXJyID0gb3B0LT5lcnJfZmQ7CisJZWxzZQorCQlyZXZfbGlzdC5ub19zdGRlcnIgPSBvcHQtPnF1aWV0OworCiAJaWYgKHN0YXJ0X2NvbW1hbmQoJnJldl9saXN0KSkKIAkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciKSk7CiAKQEAgLTk4LDE5ICsxMDMsMyBAQAogCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKIAlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJnJldl9saXN0KSB8fCBlcnI7CiB9Ci0KLWludCBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZF93aXRoX3RyYW5zcG9ydChzaGExX2l0ZXJhdGVfZm4gZm4sCi0JCQkJCSAgICAgIGludCBxdWlldCwKLQkJCQkJICAgICAgdm9pZCAqY2JfZGF0YSwKLQkJCQkJICAgICAgc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQotewotCXJldHVybiBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZF9yZWFsKGZuLCBxdWlldCwgY2JfZGF0YSwKLQkJCQkJICAgICAgIHRyYW5zcG9ydCwgTlVMTCk7Ci19Ci0KLWludCBjaGVja19zaGFsbG93X2Nvbm5lY3RlZChzaGExX2l0ZXJhdGVfZm4gZm4sIGludCBxdWlldCwgdm9pZCAqY2JfZGF0YSwKLQkJCSAgICBjb25zdCBjaGFyICpzaGFsbG93X2ZpbGUpCi17Ci0JcmV0dXJuIGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkX3JlYWwoZm4sIHF1aWV0LCBjYl9kYXRhLAotCQkJCQkgICAgICAgTlVMTCwgc2hhbGxvd19maWxlKTsKLX0KZGlmZiAtLWdpdCBhL2Nvbm5lY3RlZC5oIGIvY29ubmVjdGVkLmgKaW5kZXggMDcxZDQwOC4uYWZhNDhjYyAxMDA2NDQKLS0tIGEvY29ubmVjdGVkLmgKKysrIGIvY29ubmVjdGVkLmgKQEAgLTExLDE3ICsxMSw0MiBAQAogdHlwZWRlZiBpbnQgKCpzaGExX2l0ZXJhdGVfZm4pKHZvaWQgKiwgdW5zaWduZWQgY2hhciBbMjBdKTsKIAogLyoKKyAqIE5hbWVkLWFyZ3VtZW50cyBzdHJ1Y3QgZm9yIGNoZWNrX2Nvbm5lY3RlZC4gQWxsIGFyZ3VtZW50cyBhcmUKKyAqIG9wdGlvbmFsLCBhbmQgY2FuIGJlIGxlZnQgdG8gZGVmYXVsdHMgYXMgc2V0IGJ5IENIRUNLX0NPTk5FQ1RFRF9JTklULgorICovCitzdHJ1Y3QgY2hlY2tfY29ubmVjdGVkX29wdGlvbnMgeworCS8qIEF2b2lkIHByaW50aW5nIGFueSBlcnJvcnMgdG8gc3RkZXJyLiAqLworCWludCBxdWlldDsKKworCS8qIC0tc2hhbGxvdy1maWxlIHRvIHBhc3MgdG8gcmV2LWxpc3Qgc3ViLXByb2Nlc3MgKi8KKwljb25zdCBjaGFyICpzaGFsbG93X2ZpbGU7CisKKwkvKiBUcmFuc3BvcnQgd2hvc2Ugb2JqZWN0cyB3ZSBhcmUgY2hlY2tpbmcsIGlmIGF2YWlsYWJsZS4gKi8KKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisKKwkvKgorCSAqIElmIG5vbi16ZXJvLCBzZW5kIGVycm9yIG1lc3NhZ2VzIHRvIHRoaXMgZGVzY3JpcHRvciByYXRoZXIKKwkgKiB0aGFuIHN0ZGVyci4gVGhlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIGJlZm9yZSBjaGVja19jb25uZWN0ZWQKKwkgKiByZXR1cm5zLgorCSAqLworCWludCBlcnJfZmQ7CisKKwkvKiBJZiBub24temVybywgc2hvdyBwcm9ncmVzcyBhcyB3ZSB0cmF2ZXJzZSB0aGUgb2JqZWN0cy4gKi8KKwlpbnQgcHJvZ3Jlc3M7Cit9OworCisjZGVmaW5lIENIRUNLX0NPTk5FQ1RFRF9JTklUIHsgMCB9CisKKy8qCiAgKiBNYWtlIHN1cmUgdGhhdCBvdXIgb2JqZWN0IHN0b3JlIGhhcyBhbGwgdGhlIGNvbW1pdHMgbmVjZXNzYXJ5IHRvCiAgKiBjb25uZWN0IHRoZSBhbmNlc3RyeSBjaGFpbiB0byBzb21lIG9mIG91ciBleGlzdGluZyByZWZzLCBhbmQgYWxsCiAgKiB0aGUgdHJlZXMgYW5kIGJsb2JzIHRoYXQgdGhlc2UgY29tbWl0cyB1c2UuCiAgKgogICogUmV0dXJuIDAgaWYgT2ssIG5vbiB6ZXJvIG90aGVyd2lzZSAoaS5lLiBzb21lIG1pc3Npbmcgb2JqZWN0cykKKyAqCisgKiBJZiAib3B0IiBpcyBOVUxMLCBiZWhhdmVzIGFzIGlmIENIRUNLX0NPTk5FQ1RFRF9JTklUIHdhcyBwYXNzZWQuCiAgKi8KLWV4dGVybiBpbnQgY2hlY2tfZXZlcnl0aGluZ19jb25uZWN0ZWQoc2hhMV9pdGVyYXRlX2ZuLCBpbnQgcXVpZXQsIHZvaWQgKmNiX2RhdGEpOwotZXh0ZXJuIGludCBjaGVja19zaGFsbG93X2Nvbm5lY3RlZChzaGExX2l0ZXJhdGVfZm4sIGludCBxdWlldCwgdm9pZCAqY2JfZGF0YSwKLQkJCQkgICBjb25zdCBjaGFyICpzaGFsbG93X2ZpbGUpOwotZXh0ZXJuIGludCBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZF93aXRoX3RyYW5zcG9ydChzaGExX2l0ZXJhdGVfZm4sIGludCBxdWlldCwKLQkJCQkJCSAgICAgdm9pZCAqY2JfZGF0YSwKLQkJCQkJCSAgICAgc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKK2ludCBjaGVja19jb25uZWN0ZWQoc2hhMV9pdGVyYXRlX2ZuIGZuLCB2b2lkICpjYl9kYXRhLAorCQkgICAgc3RydWN0IGNoZWNrX2Nvbm5lY3RlZF9vcHRpb25zICpvcHQpOwogCiAjZW5kaWYgLyogQ09OTkVDVEVEX0ggKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9SRUFETUUgYi9jb250cmliL2NvY2NpbmVsbGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMmY4ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvY2NpbmVsbGUvUkVBRE1FCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBkaXJlY3RvcnkgcHJvdmlkZXMgZXhhbXBsZXMgb2YgQ29jY2luZWxsZSAoaHR0cDovL2NvY2NpbmVsbGUubGlwNi5mci8pCitzZW1hbnRpYyBwYXRjaGVzIHRoYXQgbWlnaHQgYmUgdXNlZnVsIHRvIGRldmVsb3BlcnMuCmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvb2JqZWN0X2lkLmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL29iamVjdF9pZC5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2NkYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL29iamVjdF9pZC5jb2NjaQpAQCAtMCwwICsxLDk1IEBACitAQAorZXhwcmVzc2lvbiBFMTsKK0BACistIGlzX251bGxfc2hhMShFMS5oYXNoKQorKyBpc19udWxsX29pZCgmRTEpCisKK0BACitleHByZXNzaW9uIEUxOworQEAKKy0gaXNfbnVsbF9zaGExKEUxLT5oYXNoKQorKyBpc19udWxsX29pZChFMSkKKworQEAKK2V4cHJlc3Npb24gRTE7CitAQAorLSBzaGExX3RvX2hleChFMS5oYXNoKQorKyBvaWRfdG9faGV4KCZFMSkKKworQEAKK2V4cHJlc3Npb24gRTE7CitAQAorLSBzaGExX3RvX2hleChFMS0+aGFzaCkKKysgb2lkX3RvX2hleChFMSkKKworQEAKK2V4cHJlc3Npb24gRTE7CitAQAorLSBzaGExX3RvX2hleF9yKEUxLmhhc2gpCisrIG9pZF90b19oZXhfcigmRTEpCisKK0BACitleHByZXNzaW9uIEUxOworQEAKKy0gc2hhMV90b19oZXhfcihFMS0+aGFzaCkKKysgb2lkX3RvX2hleF9yKEUxKQorCitAQAorZXhwcmVzc2lvbiBFMTsKK0BACistIGhhc2hjbHIoRTEuaGFzaCkKKysgb2lkY2xyKCZFMSkKKworQEAKK2V4cHJlc3Npb24gRTE7CitAQAorLSBoYXNoY2xyKEUxLT5oYXNoKQorKyBvaWRjbHIoRTEpCisKK0BACitleHByZXNzaW9uIEUxLCBFMjsKK0BACistIGhhc2hjbXAoRTEuaGFzaCwgRTIuaGFzaCkKKysgb2lkY21wKCZFMSwgJkUyKQorCitAQAorZXhwcmVzc2lvbiBFMSwgRTI7CitAQAorLSBoYXNoY21wKEUxLT5oYXNoLCBFMi0+aGFzaCkKKysgb2lkY21wKEUxLCBFMikKKworQEAKK2V4cHJlc3Npb24gRTEsIEUyOworQEAKKy0gaGFzaGNtcChFMS0+aGFzaCwgRTIuaGFzaCkKKysgb2lkY21wKEUxLCAmRTIpCisKK0BACitleHByZXNzaW9uIEUxLCBFMjsKK0BACistIGhhc2hjbXAoRTEuaGFzaCwgRTItPmhhc2gpCisrIG9pZGNtcCgmRTEsIEUyKQorCitAQAorZXhwcmVzc2lvbiBFMSwgRTI7CitAQAorLSBoYXNoY3B5KEUxLmhhc2gsIEUyLmhhc2gpCisrIG9pZGNweSgmRTEsICZFMikKKworQEAKK2V4cHJlc3Npb24gRTEsIEUyOworQEAKKy0gaGFzaGNweShFMS0+aGFzaCwgRTItPmhhc2gpCisrIG9pZGNweShFMSwgRTIpCisKK0BACitleHByZXNzaW9uIEUxLCBFMjsKK0BACistIGhhc2hjcHkoRTEtPmhhc2gsIEUyLmhhc2gpCisrIG9pZGNweShFMSwgJkUyKQorCitAQAorZXhwcmVzc2lvbiBFMSwgRTI7CitAQAorLSBoYXNoY3B5KEUxLmhhc2gsIEUyLT5oYXNoKQorKyBvaWRjcHkoJkUxLCBFMikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKaW5kZXggMzQwMjQ3NS4uOWM4ZjczOCAxMDA2NDQKLS0tIGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKQEAgLTgwMyw2ICs4MDMsNTAgQEAKIAlkb25lCiB9CiAKKyMgRWNobyB0aGUgdmFsdWUgb2YgYW4gb3B0aW9uIHNldCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGNvbmZpZworIworIyAkMTogc2hvcnQgb3B0aW9uIG5hbWUKKyMgJDI6IGxvbmcgb3B0aW9uIG5hbWUgaW5jbHVkaW5nID0KKyMgJDM6IGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzCisjICQ0OiBjb25maWcgc3RyaW5nIChvcHRpb25hbCkKKyMKKyMgZXhhbXBsZToKKyMgcmVzdWx0PSIkKF9fZ2l0X2dldF9vcHRpb25fdmFsdWUgIi1kIiAiLS1kby1zb21ldGhpbmc9IiBcCisjICAgICAieWVzIG5vIiAiY29yZS5kb1NvbWV0aGluZyIpIgorIworIyByZXN1bHQgaXMgdGhlbiBlaXRoZXIgZW1wdHkgKG5vIG9wdGlvbiBzZXQpIG9yICJ5ZXMiIG9yICJubyIKKyMKKyMgX19naXRfZ2V0X29wdGlvbl92YWx1ZSByZXF1aXJlcyAzIGFyZ3VtZW50cworX19naXRfZ2V0X29wdGlvbl92YWx1ZSAoKQoreworCWxvY2FsIGMgc2hvcnRfb3B0IGxvbmdfb3B0IHZhbAorCWxvY2FsIHJlc3VsdD0gdmFsdWVzIGNvbmZpZ19rZXkgd29yZAorCisJc2hvcnRfb3B0PSIkMSIKKwlsb25nX29wdD0iJDIiCisJdmFsdWVzPSIkMyIKKwljb25maWdfa2V5PSIkNCIKKworCSgoYyA9ICRjd29yZCAtIDEpKQorCXdoaWxlIFsgJGMgLWdlIDAgXTsgZG8KKwkJd29yZD0iJHt3b3Jkc1tjXX0iCisJCWZvciB2YWwgaW4gJHZhbHVlczsgZG8KKwkJCWlmIFsgIiRzaG9ydF9vcHQkdmFsIiA9ICIkd29yZCIgXSB8fAorCQkJICAgWyAiJGxvbmdfb3B0JHZhbCIgID0gIiR3b3JkIiBdOyB0aGVuCisJCQkJcmVzdWx0PSIkdmFsIgorCQkJCWJyZWFrIDIKKwkJCWZpCisJCWRvbmUKKwkJKChjLS0pKQorCWRvbmUKKworCWlmIFsgLW4gIiRjb25maWdfa2V5IiBdICYmIFsgLXogIiRyZXN1bHQiIF07IHRoZW4KKwkJcmVzdWx0PSIkKGdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBjb25maWcgIiRjb25maWdfa2V5IikiCisJZmkKKworCWVjaG8gIiRyZXN1bHQiCit9CisKIF9fZ2l0X2hhc19kb3VibGVkYXNoICgpCiB7CiAJbG9jYWwgYz0xCkBAIC05NjQsOCArMTAwOCw4IEBACiAJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCiAJCWk9IiR7d29yZHNbY119IgogCQljYXNlICIkaSIgaW4KLQkJLWR8LW0pCW9ubHlfbG9jYWxfcmVmPSJ5IiA7OwotCQktcikJaGFzX3I9InkiIDs7CisJCS1kfC0tZGVsZXRlfC1tfC0tbW92ZSkJb25seV9sb2NhbF9yZWY9InkiIDs7CisJCS1yfC0tcmVtb3RlcykJCWhhc19yPSJ5IiA7OwogCQllc2FjCiAJCSgoYysrKSkKIAlkb25lCkBAIC05NzksNyArMTAyMyw3IEBACiAJCQktLWNvbG9yIC0tbm8tY29sb3IgLS12ZXJib3NlIC0tYWJicmV2PSAtLW5vLWFiYnJldgogCQkJLS10cmFjayAtLW5vLXRyYWNrIC0tY29udGFpbnMgLS1tZXJnZWQgLS1uby1tZXJnZWQKIAkJCS0tc2V0LXVwc3RyZWFtLXRvPSAtLWVkaXQtZGVzY3JpcHRpb24gLS1saXN0Ci0JCQktLXVuc2V0LXVwc3RyZWFtCisJCQktLXVuc2V0LXVwc3RyZWFtIC0tZGVsZXRlIC0tbW92ZSAtLXJlbW90ZXMKIAkJCSIKIAkJOzsKIAkqKQpAQCAtMTA5MiwxMiArMTEzNiwxNSBAQAogCQkJLS1kZXB0aAogCQkJLS1zaW5nbGUtYnJhbmNoCiAJCQktLWJyYW5jaAorCQkJLS1yZWN1cnNlLXN1Ym1vZHVsZXMKIAkJCSIKIAkJcmV0dXJuCiAJCTs7CiAJZXNhYwogfQogCitfX2dpdF91bnRyYWNrZWRfZmlsZV9tb2Rlcz0iYWxsIG5vIG5vcm1hbCIKKwogX2dpdF9jb21taXQgKCkKIHsKIAljYXNlICIkcHJldiIgaW4KQEAgLTExMTksNyArMTE2Niw3IEBACiAJCXJldHVybgogCQk7OwogCS0tdW50cmFja2VkLWZpbGVzPSopCi0JCV9fZ2l0Y29tcCAiYWxsIG5vIG5vcm1hbCIgIiIgIiR7Y3VyIyMtLXVudHJhY2tlZC1maWxlcz19IgorCQlfX2dpdGNvbXAgIiRfX2dpdF91bnRyYWNrZWRfZmlsZV9tb2RlcyIgIiIgIiR7Y3VyIyMtLXVudHJhY2tlZC1maWxlcz19IgogCQlyZXR1cm4KIAkJOzsKIAktLSopCkBAIC0xMTU4LDYgKzEyMDUsOCBAQAogCiBfX2dpdF9kaWZmX2FsZ29yaXRobXM9Im15ZXJzIG1pbmltYWwgcGF0aWVuY2UgaGlzdG9ncmFtIgogCitfX2dpdF9kaWZmX3N1Ym1vZHVsZV9mb3JtYXRzPSJsb2cgc2hvcnQiCisKIF9fZ2l0X2RpZmZfY29tbW9uX29wdGlvbnM9Ii0tc3RhdCAtLW51bXN0YXQgLS1zaG9ydHN0YXQgLS1zdW1tYXJ5CiAJCQktLXBhdGNoLXdpdGgtc3RhdCAtLW5hbWUtb25seSAtLW5hbWUtc3RhdHVzIC0tY29sb3IKIAkJCS0tbm8tY29sb3IgLS1jb2xvci13b3JkcyAtLW5vLXJlbmFtZXMgLS1jaGVjawpAQCAtMTE3Myw2ICsxMjIyLDcgQEAKIAkJCS0tZGlyc3RhdCAtLWRpcnN0YXQ9IC0tZGlyc3RhdC1ieS1maWxlCiAJCQktLWRpcnN0YXQtYnktZmlsZT0gLS1jdW11bGF0aXZlCiAJCQktLWRpZmYtYWxnb3JpdGhtPQorCQkJLS1zdWJtb2R1bGUgLS1zdWJtb2R1bGU9CiAiCiAKIF9naXRfZGlmZiAoKQpAQCAtMTE4NCw2ICsxMjM0LDEwIEBACiAJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfYWxnb3JpdGhtcyIgIiIgIiR7Y3VyIyMtLWRpZmYtYWxnb3JpdGhtPX0iCiAJCXJldHVybgogCQk7OworCS0tc3VibW9kdWxlPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfc3VibW9kdWxlX2Zvcm1hdHMiICIiICIke2N1ciMjLS1zdWJtb2R1bGU9fSIKKwkJcmV0dXJuCisJCTs7CiAJLS0qKQogCQlfX2dpdGNvbXAgIi0tY2FjaGVkIC0tc3RhZ2VkIC0tcGlja2F4ZS1hbGwgLS1waWNrYXhlLXJlZ2V4CiAJCQktLWJhc2UgLS1vdXJzIC0tdGhlaXJzIC0tbm8taW5kZXgKQEAgLTE0NDcsNiArMTUwMSwxNCBAQAogCQlfX2dpdGNvbXAgImZ1bGwgc2hvcnQgbm8iICIiICIke2N1ciMjLS1kZWNvcmF0ZT19IgogCQlyZXR1cm4KIAkJOzsKKwktLWRpZmYtYWxnb3JpdGhtPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfYWxnb3JpdGhtcyIgIiIgIiR7Y3VyIyMtLWRpZmYtYWxnb3JpdGhtPX0iCisJCXJldHVybgorCQk7OworCS0tc3VibW9kdWxlPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfc3VibW9kdWxlX2Zvcm1hdHMiICIiICIke2N1ciMjLS1zdWJtb2R1bGU9fSIKKwkJcmV0dXJuCisJCTs7CiAJLS0qKQogCQlfX2dpdGNvbXAgIgogCQkJJF9fZ2l0X2xvZ19jb21tb25fb3B0aW9ucwpAQCAtMTc4MCw2ICsxODQyLDU2IEBACiAJX2dpdF9hZGQKIH0KIAorX2dpdF9zdGF0dXMgKCkKK3sKKwlsb2NhbCBjb21wbGV0ZV9vcHQKKwlsb2NhbCB1bnRyYWNrZWRfc3RhdGUKKworCWNhc2UgIiRjdXIiIGluCisJLS1pZ25vcmUtc3VibW9kdWxlcz0qKQorCQlfX2dpdGNvbXAgIm5vbmUgdW50cmFja2VkIGRpcnR5IGFsbCIgIiIgIiR7Y3VyIyMtLWlnbm9yZS1zdWJtb2R1bGVzPX0iCisJCXJldHVybgorCQk7OworCS0tdW50cmFja2VkLWZpbGVzPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3VudHJhY2tlZF9maWxlX21vZGVzIiAiIiAiJHtjdXIjIy0tdW50cmFja2VkLWZpbGVzPX0iCisJCXJldHVybgorCQk7OworCS0tY29sdW1uPSopCisJCV9fZ2l0Y29tcCAiCisJCQlhbHdheXMgbmV2ZXIgYXV0byBjb2x1bW4gcm93IHBsYWluIGRlbnNlIG5vZGVuc2UKKwkJCSIgIiIgIiR7Y3VyIyMtLWNvbHVtbj19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLXNob3J0IC0tYnJhbmNoIC0tcG9yY2VsYWluIC0tbG9uZyAtLXZlcmJvc2UKKwkJCS0tdW50cmFja2VkLWZpbGVzPSAtLWlnbm9yZS1zdWJtb2R1bGVzPSAtLWlnbm9yZWQKKwkJCS0tY29sdW1uPSAtLW5vLWNvbHVtbgorCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwl1bnRyYWNrZWRfc3RhdGU9IiQoX19naXRfZ2V0X29wdGlvbl92YWx1ZSAiLXUiICItLXVudHJhY2tlZC1maWxlcz0iIFwKKwkJIiRfX2dpdF91bnRyYWNrZWRfZmlsZV9tb2RlcyIgInN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMiKSIKKworCWNhc2UgIiR1bnRyYWNrZWRfc3RhdGUiIGluCisJbm8pCisJCSMgLS1pZ25vcmVkIG9wdGlvbiBkb2VzIG5vdCBtYXR0ZXIKKwkJY29tcGxldGVfb3B0PQorCQk7OworCWFsbHxub3JtYWx8KikKKwkJY29tcGxldGVfb3B0PSItLWNhY2hlZCAtLWRpcmVjdG9yeSAtLW5vLWVtcHR5LWRpcmVjdG9yeSAtLW90aGVycyIKKworCQlpZiBbIC1uICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiLS1pZ25vcmVkIikiIF07IHRoZW4KKwkJCWNvbXBsZXRlX29wdD0iJGNvbXBsZXRlX29wdCAtLWlnbm9yZWQgLS1leGNsdWRlPSoiCisJCWZpCisJCTs7CisJZXNhYworCisJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiJGNvbXBsZXRlX29wdCIKK30KKwogX19naXRfY29uZmlnX2dldF9zZXRfdmFyaWFibGVzICgpCiB7CiAJbG9jYWwgcHJldndvcmQgd29yZCBjb25maWdfZmlsZT0gYz0kY3dvcmQKQEAgLTIwODUsNiArMjE5Nyw3IEBACiAJCWZvcm1hdC5hdHRhY2gKIAkJZm9ybWF0LmNjCiAJCWZvcm1hdC5jb3ZlckxldHRlcgorCQlmb3JtYXQuZnJvbQogCQlmb3JtYXQuaGVhZGVycwogCQlmb3JtYXQubnVtYmVyZWQKIAkJZm9ybWF0LnByZXR0eQpAQCAtMjM1OSw2ICsyNDcyLDEwIEBACiAJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfYWxnb3JpdGhtcyIgIiIgIiR7Y3VyIyMtLWRpZmYtYWxnb3JpdGhtPX0iCiAJCXJldHVybgogCQk7OworCS0tc3VibW9kdWxlPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfc3VibW9kdWxlX2Zvcm1hdHMiICIiICIke2N1ciMjLS1zdWJtb2R1bGU9fSIKKwkJcmV0dXJuCisJCTs7CiAJLS0qKQogCQlfX2dpdGNvbXAgIi0tcHJldHR5PSAtLWZvcm1hdD0gLS1hYmJyZXYtY29tbWl0IC0tb25lbGluZQogCQkJLS1zaG93LXNpZ25hdHVyZQpAQCAtMjU5NSw2ICsyNzEyLDMyIEBACiAJX2dpdF9sb2cKIH0KIAorX2dpdF93b3JrdHJlZSAoKQoreworCWxvY2FsIHN1YmNvbW1hbmRzPSJhZGQgbGlzdCBsb2NrIHBydW5lIHVubG9jayIKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiCisJaWYgWyAteiAiJHN1YmNvbW1hbmQiIF07IHRoZW4KKwkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJZWxzZQorCQljYXNlICIkc3ViY29tbWFuZCwkY3VyIiBpbgorCQlhZGQsLS0qKQorCQkJX19naXRjb21wICItLWRldGFjaCIKKwkJCTs7CisJCWxpc3QsLS0qKQorCQkJX19naXRjb21wICItLXBvcmNlbGFpbiIKKwkJCTs7CisJCWxvY2ssLS0qKQorCQkJX19naXRjb21wICItLXJlYXNvbiIKKwkJCTs7CisJCXBydW5lLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1kcnktcnVuIC0tZXhwaXJlIC0tdmVyYm9zZSIKKwkJCTs7CisJCSopCisJCQk7OworCQllc2FjCisJZmkKK30KKwogX19naXRfbWFpbiAoKQogewogCWxvY2FsIGkgYz0xIGNvbW1hbmQgX19naXRfZGlyCmRpZmYgLS1naXQgYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LXByb21wdC5zaCBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoCmluZGV4IDY0MjE5ZTYuLjk3ZWFjZDcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoCisrKyBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoCkBAIC0zNTUsOCArMzU1LDggQEAKIAkjIGluY29ycmVjdC4pCiAJIwogCWxvY2FsIHBzMV9leHBhbmRlZD15ZXMKLQlbIC16ICIkWlNIX1ZFUlNJT04iIF0gfHwgW1sgLW8gUFJPTVBUX1NVQlNUIF1dIHx8IHBzMV9leHBhbmRlZD1ubwotCVsgLXogIiRCQVNIX1ZFUlNJT04iIF0gfHwgc2hvcHQgLXEgcHJvbXB0dmFycyB8fCBwczFfZXhwYW5kZWQ9bm8KKwlbIC16ICIke1pTSF9WRVJTSU9OLX0iIF0gfHwgW1sgLW8gUFJPTVBUX1NVQlNUIF1dIHx8IHBzMV9leHBhbmRlZD1ubworCVsgLXogIiR7QkFTSF9WRVJTSU9OLX0iIF0gfHwgc2hvcHQgLXEgcHJvbXB0dmFycyB8fCBwczFfZXhwYW5kZWQ9bm8KIAogCWxvY2FsIHJlcG9faW5mbyByZXZfcGFyc2VfZXhpdF9jb2RlCiAJcmVwb19pbmZvPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyIC0taXMtaW5zaWRlLWdpdC1kaXIgXApAQCAtMzY4LDcgKzM2OCw3IEBACiAJCXJldHVybiAkZXhpdAogCWZpCiAKLQlsb2NhbCBzaG9ydF9zaGEKKwlsb2NhbCBzaG9ydF9zaGE9IiIKIAlpZiBbICIkcmV2X3BhcnNlX2V4aXRfY29kZSIgPSAiMCIgXTsgdGhlbgogCQlzaG9ydF9zaGE9IiR7cmVwb19pbmZvIyMqJCdcbid9IgogCQlyZXBvX2luZm89IiR7cmVwb19pbmZvJSQnXG4nKn0iCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvZ25vbWUta2V5cmluZy9NYWtlZmlsZSBiL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL01ha2VmaWxlCmluZGV4IGMzYzdjOTguLjIyYzE5ZGYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL01ha2VmaWxlCkBAIC00LDEyICs0LDEzIEBACiBDQyA9IGdjYwogUk0gPSBybSAtZgogQ0ZMQUdTID0gLWcgLU8yIC1XYWxsCitQS0dfQ09ORklHID0gcGtnLWNvbmZpZwogCiAtaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KIC1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKIAotSU5DUzo9JChzaGVsbCBwa2ctY29uZmlnIC0tY2ZsYWdzIGdub21lLWtleXJpbmctMSBnbGliLTIuMCkKLUxJQlM6PSQoc2hlbGwgcGtnLWNvbmZpZyAtLWxpYnMgZ25vbWUta2V5cmluZy0xIGdsaWItMi4wKQorSU5DUzo9JChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGdub21lLWtleXJpbmctMSBnbGliLTIuMCkKK0xJQlM6PSQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgZ25vbWUta2V5cmluZy0xIGdsaWItMi4wKQogCiBTUkNTOj0kKE1BSU4pLmMKIE9CSlM6PSQoU1JDUzouYz0ubykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybAppbmRleCA5NTQzOGUxLi5kNjBiNDMxIDEwMDc1NQotLS0gYS9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC10YXJzLnBlcmwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsCkBAIC05NiwxOCArOTYsMjEgQEAKIAkJJG10aW1lID0gb2N0ICRtdGltZTsKIAkJbmV4dCBpZiAkdHlwZWZsYWcgPT0gNTsgIyBkaXJlY3RvcnkKIAotCQlwcmludCBGSSAiYmxvYlxuIiwgIm1hcmsgOiRuZXh0X21hcmtcbiI7Ci0JCWlmICgkdHlwZWZsYWcgPT0gMikgeyAjIHN5bWJvbGljIGxpbmsKLQkJCXByaW50IEZJICJkYXRhICIsIGxlbmd0aCgkbGlua25hbWUpLCAiXG4iLCAkbGlua25hbWU7Ci0JCQkkbW9kZSA9IDAxMjAwMDA7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludCBGSSAiZGF0YSAkc2l6ZVxuIjsKLQkJCXdoaWxlICgkc2l6ZSA+IDAgJiYgcmVhZChJLCAkXywgNTEyKSA9PSA1MTIpIHsKLQkJCQlwcmludCBGSSBzdWJzdHIoJF8sIDAsICRzaXplKTsKLQkJCQkkc2l6ZSAtPSA1MTI7CisJCWlmICgkdHlwZWZsYWcgIT0gMSkgeyAjIGhhbmRsZSBoYXJkIGxpbmtzIGxhdGVyCisJCQlwcmludCBGSSAiYmxvYlxuIiwgIm1hcmsgOiRuZXh0X21hcmtcbiI7CisJCQlpZiAoJHR5cGVmbGFnID09IDIpIHsgIyBzeW1ib2xpYyBsaW5rCisJCQkJcHJpbnQgRkkgImRhdGEgIiwgbGVuZ3RoKCRsaW5rbmFtZSksICJcbiIsCisJCQkJCSRsaW5rbmFtZTsKKwkJCQkkbW9kZSA9IDAxMjAwMDA7CisJCQl9IGVsc2UgeworCQkJCXByaW50IEZJICJkYXRhICRzaXplXG4iOworCQkJCXdoaWxlICgkc2l6ZSA+IDAgJiYgcmVhZChJLCAkXywgNTEyKSA9PSA1MTIpIHsKKwkJCQkJcHJpbnQgRkkgc3Vic3RyKCRfLCAwLCAkc2l6ZSk7CisJCQkJCSRzaXplIC09IDUxMjsKKwkJCQl9CiAJCQl9CisJCQlwcmludCBGSSAiXG4iOwogCQl9Ci0JCXByaW50IEZJICJcbiI7CiAKIAkJbXkgJHBhdGg7CiAJCWlmICgkcHJlZml4KSB7CkBAIC0xMTUsNyArMTE4LDEzIEBACiAJCX0gZWxzZSB7CiAJCQkkcGF0aCA9ICIkbmFtZSI7CiAJCX0KLQkJJGZpbGVzeyRwYXRofSA9IFskbmV4dF9tYXJrKyssICRtb2RlXTsKKworCQlpZiAoJHR5cGVmbGFnID09IDEpIHsgIyBoYXJkIGxpbmsKKwkJCSRsaW5rbmFtZSA9ICIkcHJlZml4LyRsaW5rbmFtZSIgaWYgJHByZWZpeDsKKwkJCSRmaWxlc3skcGF0aH0gPSBbICRmaWxlc3skbGlua25hbWV9LT5bMF0sICRtb2RlIF07CisJCX0gZWxzZSB7CisJCQkkZmlsZXN7JHBhdGh9ID0gWyRuZXh0X21hcmsrKywgJG1vZGVdOworCQl9CiAKIAkJJGF1dGhvcl90aW1lID0gJG10aW1lIGlmICRtdGltZSA+ICRhdXRob3JfdGltZTsKIAkJJHBhdGggPX4gbSxeKFteL10rKS8sOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtanVtcC9SRUFETUUgYi9jb250cmliL2dpdC1qdW1wL1JFQURNRQppbmRleCAxY2ViYzMyLi4yMjVlM2YwIDEwMDY0NAotLS0gYS9jb250cmliL2dpdC1qdW1wL1JFQURNRQorKysgYi9jb250cmliL2dpdC1qdW1wL1JFQURNRQpAQCAtMjksNyArMjksNyBAQAogYGZvby5jYCB5b3Vyc2VsZi4gQnV0IHdoZW4geW91IGhhdmUgbWFueSBjaGFuZ2VzIHNjYXR0ZXJlZCBhY3Jvc3MgYQogcHJvamVjdCwgeW91IGNhbiB1c2UgdGhlIGVkaXRvcidzIHN1cHBvcnQgdG8gImp1bXAiIGZyb20gcG9pbnQgdG8gcG9pbnQuCiAKLUdpdC1qdW1wIGNhbiBnZW5lcmF0ZSB0aHJlZSB0eXBlcyBvZiBpbnRlcmVzdGluZyBsaXN0czoKK0dpdC1qdW1wIGNhbiBnZW5lcmF0ZSBmb3VyIHR5cGVzIG9mIGludGVyZXN0aW5nIGxpc3RzOgogCiAgIDEuIFRoZSBiZWdpbm5pbmcgb2YgYW55IGRpZmYgaHVua3MuCiAKQEAgLTM3LDYgKzM3LDggQEAKIAogICAzLiBBbnkgZ3JlcCBtYXRjaGVzLgogCisgIDQuIEFueSB3aGl0ZXNwYWNlIGVycm9ycyBkZXRlY3RlZCBieSBgZ2l0IGRpZmYgLS1jaGVja2AuCisKIAogVXNpbmcgZ2l0LWp1bXAKIC0tLS0tLS0tLS0tLS0tCkBAIC04Myw3ICs4NSw3IEBACiBMaW1pdGF0aW9ucwogLS0tLS0tLS0tLS0KIAotVGhpcyBzY3JpcHRzIHdhcyB3cml0dGVuIGFuZCB0ZXN0ZWQgd2l0aCB2aW0uIEdpdmVuIHRoYXQgdGhlIHF1aWNrZml4CitUaGlzIHNjcmlwdCB3YXMgd3JpdHRlbiBhbmQgdGVzdGVkIHdpdGggdmltLiBHaXZlbiB0aGF0IHRoZSBxdWlja2ZpeAogZm9ybWF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgZ2NjIHByb2R1Y2VzLCBJIGV4cGVjdCBlbWFjcyB1c2VycyBoYXZlIGEKIHNpbWlsYXIgZmVhdHVyZSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGxpc3QsIGJ1dCBJIGtub3cgbm90aGluZyBhYm91dAogaG93IHRvIGFjdGl2YXRlIGl0LgpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtanVtcC9naXQtanVtcCBiL2NvbnRyaWIvZ2l0LWp1bXAvZ2l0LWp1bXAKaW5kZXggZGM5MGNkNi4uNDI3ZjIwNiAxMDA3NTUKLS0tIGEvY29udHJpYi9naXQtanVtcC9naXQtanVtcAorKysgYi9jb250cmliL2dpdC1qdW1wL2dpdC1qdW1wCkBAIC0xMiw2ICsxMiw4IEBACiBtZXJnZTogZWxlbWVudHMgYXJlIG1lcmdlIGNvbmZsaWN0cy4gQXJndW1lbnRzIGFyZSBpZ25vcmVkLgogCiBncmVwOiBlbGVtZW50cyBhcmUgZ3JlcCBoaXRzLiBBcmd1bWVudHMgYXJlIGdpdmVuIHRvIGdyZXAuCisKK3dzOiBlbGVtZW50cyBhcmUgd2hpdGVzcGFjZSBlcnJvcnMuIEFyZ3VtZW50cyBhcmUgZ2l2ZW4gdG8gZGlmZiAtLWNoZWNrLgogRU9GCiB9CiAKQEAgLTI1LDcgKzI3LDcgQEAKIAlwZXJsIC1uZSAnCiAJaWYgKG17XlwrXCtcKyAoLiopfSkgeyAkZmlsZSA9ICQxOyBuZXh0IH0KIAlkZWZpbmVkKCRmaWxlKSBvciBuZXh0OwotCWlmIChtL15AQCAuKlwrKFxkKykvKSB7ICRsaW5lID0gJDE7IG5leHQgfQorCWlmIChtL15AQCAuKj9cKyhcZCspLykgeyAkbGluZSA9ICQxOyBuZXh0IH0KIAlkZWZpbmVkKCRsaW5lKSBvciBuZXh0OwogCWlmICgvXiAvKSB7ICRsaW5lKys7IG5leHQgfQogCWlmICgvXlstK11ccyooLiopLykgewpAQCAtNTUsNiArNTcsMTAgQEAKIAknCiB9CiAKK21vZGVfd3MoKSB7CisJZ2l0IGRpZmYgLS1jaGVjayAiJEAiCit9CisKIGlmIHRlc3QgJCMgLWx0IDE7IHRoZW4KIAl1c2FnZSA+JjIKIAlleGl0IDEKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRSBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRQppbmRleCAwYzkxZDE5Li4yMmEyM2NkIDEwMDY0NAotLS0gYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUKKysrIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvUkVBRE1FCkBAIC0yOTQsNyArMjk0LDcgQEAKICAgICBsaWtlIGBgPGEgaHJlZj0iZm9vIj5saW5rPC9hPmBgLCB0aGUgcmVhZGVyIHdpbGwgc2VlIHRoZSBIVE1MCiAgICAgc291cmNlIGNvZGUgYW5kIG5vdCBhIHByb3BlciBsaW5rLgogCi0gICAgU2V0IGBgbXVsdGltYWlsaG9vay5odG1sSW5JbnRyb2BgIHRvIHRydWUgdG8gYWxsb3cgd3JpdHRpbmcgSFRNTAorICAgIFNldCBgYG11bHRpbWFpbGhvb2suaHRtbEluSW50cm9gYCB0byB0cnVlIHRvIGFsbG93IHdyaXRpbmcgSFRNTAogICAgIGZvcm1hdHRpbmcgaW4gaW50cm9kdWN0aW9uIHRlbXBsYXRlcy4gU2ltaWxhcmx5LCBzZXQKICAgICBgYG11bHRpbWFpbGhvb2suaHRtbEluRm9vdGVyYGAgZm9yIEhUTUwgaW4gdGhlIGZvb3Rlci4KIApAQCAtNTE2LDcgKzUxNiw3IEBACiAKIG11bHRpbWFpbGhvb2suZGF0ZVN1YnN0aXR1dGUKICAgICBTdHJpbmcgdG8gdXNlIGFzIGEgc3Vic3RpdHV0ZSBmb3IgYGBEYXRlOmBgIGluIHRoZSBvdXRwdXQgb2YgYGBnaXQKLSAgICBsb2dgYCB3aGlsZSBmb3JtYXR0aW5nIGNvbW1pdCBtZXNzYWdlcy4gVGhpcyBpcyB1c2VmdWxsIHRvIGF2b2lkCisgICAgbG9nYGAgd2hpbGUgZm9ybWF0dGluZyBjb21taXQgbWVzc2FnZXMuIFRoaXMgaXMgdXNlZnVsIHRvIGF2b2lkCiAgICAgZW1pdHRpbmcgYSBsaW5lIHRoYXQgY2FuIGJlIGludGVycHJldGVkIGJ5IG1haWxlcnMgYXMgdGhlIHN0YXJ0IG9mCiAgICAgYSBjaXRlZCBtZXNzYWdlIChaaW1icmEgd2VibWFpbCBpbiBwYXJ0aWN1bGFyKS4gRGVmYXVsdHMgdG8KICAgICBgYENvbW1pdERhdGU6YGAuIFNldCB0byBhbiBlbXB0eSBzdHJpbmcgb3IgYGBub25lYGAgdG8gZGVhY3RpdmF0ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvLnBlcmxjcml0aWNyYyBiL2NvbnRyaWIvbXctdG8tZ2l0Ly5wZXJsY3JpdGljcmMKaW5kZXggNWE5OTU1ZC4uMTU4OTU4ZCAxMDA2NDQKLS0tIGEvY29udHJpYi9tdy10by1naXQvLnBlcmxjcml0aWNyYworKysgYi9jb250cmliL213LXRvLWdpdC8ucGVybGNyaXRpY3JjCkBAIC0xOSw3ICsxOSw3IEBACiBbSW5wdXRPdXRwdXQ6OlJlcXVpcmVDaGVja2VkU3lzY2FsbHNdCiBmdW5jdGlvbnMgPSBvcGVuIHNheSBjbG9zZQogCi0jIFRoaXMgcnVsZXMgZGVtYW5kcyB0byBhZGQgYSBkZXBlbmRhbmN5IGZvciB0aGUgUmVhZG9ubHkgbW9kdWxlLiBUaGlzIGlzIG5vdAorIyBUaGlzIHJ1bGUgZGVtYW5kcyB0byBhZGQgYSBkZXBlbmRlbmN5IGZvciB0aGUgUmVhZG9ubHkgbW9kdWxlLiBUaGlzIGlzIG5vdAogIyB3aXNoZWQuCiBbLVZhbHVlc0FuZEV4cHJlc3Npb25zOjpQcm9oaWJpdENvbnN0YW50UHJhZ21hXQogCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsIGIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kucGVybAppbmRleCA4ZGQ3NGE5Li40MWU3NGZiIDEwMDc1NQotLS0gYS9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnBlcmwKQEAgLTk2Myw3ICs5NjMsNyBAQAogCQlwcmludCB7KlNUREVSUn0gIkNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGZpbGUgdXBsb2FkcyBpbiB5b3VyIG1lZGlhd2lraS5cbiI7CiAJCXJldHVybiAkbmV3cmV2aWQ7CiAJfQotCSMgRGVsZXRpbmcgYW5kIHVwbG9hZGluZyBhIGZpbGUgcmVxdWlyZXMgYSBwcml2aWxlZGdlZCB1c2VyCisJIyBEZWxldGluZyBhbmQgdXBsb2FkaW5nIGEgZmlsZSByZXF1aXJlcyBhIHByaXZpbGVnZWQgdXNlcgogCWlmICgkZmlsZV9kZWxldGVkKSB7CiAJCSRtZWRpYXdpa2kgPSBjb25uZWN0X21heWJlKCRtZWRpYXdpa2ksICRyZW1vdGVuYW1lLCAkdXJsKTsKIAkJbXkgJHF1ZXJ5ID0gewpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL01ha2VmaWxlIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL01ha2VmaWxlCmluZGV4IDkyYmFhM2IuLjUyYjg0YmEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9NYWtlZmlsZQorKysgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDcgQEAKICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotQlVJTERfTEFCRUw9JChzaGVsbCBkYXRlICsiJXMiKQorQlVJTERfTEFCRUw9JChzaGVsbCBjdXQgLWQiICIgLWYzIC4uLy4uL0dJVC1WRVJTSU9OLUZJTEUpCiBUQVJfT1VUPSQoc2hlbGwgZ28gZW52IEdPT1MpXyQoc2hlbGwgZ28gZW52IEdPQVJDSCkudGFyLmd6CiAKIGFsbDogZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHkgXApAQCAtMjUsOCArMjUsMTAgQEAKIAlsbiAtZiAtcyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHAKIAogZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzOgorCWNhc2UgJCQoZ28gdmVyc2lvbikgaW4gXAorCSJnbyB2ZXJzaW9uIGdvIjEuWzAtNV0uKikgRVE9IiAiIDs7ICopIEVRPSI9IiA7OyBlc2FjICYmIFwKIAlnbyBidWlsZCAtbyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgXAotCQktbGRmbGFncyAiLVggbWFpbi5fQlVJTERfRU1CRURfTEFCRUwgJChCVUlMRF9MQUJFTCkiCisJCS1sZGZsYWdzICItWCBtYWluLl9CVUlMRF9FTUJFRF9MQUJFTCQke0VRfSQoQlVJTERfTEFCRUwpIgogCiBjbGVhbjoKIAlybSAtZiBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cCogKi50YXIuZ3oKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS5zaCBiL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS5zaAppbmRleCA3YTM5YjMwLi5kZWMwODVhIDEwMDc1NQotLS0gYS9jb250cmliL3N1YnRyZWUvZ2l0LXN1YnRyZWUuc2gKKysrIGIvY29udHJpYi9zdWJ0cmVlL2dpdC1zdWJ0cmVlLnNoCkBAIC00LDggKzQsOSBAQAogIwogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQXZlcnkgUGVubmFydW4gPGFwZW53YXJyQGdtYWlsLmNvbT4KICMKLWlmIFsgJCMgLWVxIDAgXTsgdGhlbgotICAgIHNldCAtLSAtaAoraWYgdGVzdCAkIyAtZXEgMAordGhlbgorCXNldCAtLSAtaAogZmkKIE9QVFNfU1BFQz0iXAogZ2l0IHN1YnRyZWUgYWRkICAgLS1wcmVmaXg9PHByZWZpeD4gPGNvbW1pdD4KQEAgLTQ4LDg5ICs0OSwxNDQgQEAKIG1lc3NhZ2U9CiBwcmVmaXg9CiAKLWRlYnVnKCkKLXsKLQlpZiBbIC1uICIkZGVidWciIF07IHRoZW4KK2RlYnVnICgpIHsKKwlpZiB0ZXN0IC1uICIkZGVidWciCisJdGhlbgogCQlwcmludGYgIiVzXG4iICIkKiIgPiYyCiAJZmkKIH0KIAotc2F5KCkKLXsKLQlpZiBbIC16ICIkcXVpZXQiIF07IHRoZW4KK3NheSAoKSB7CisJaWYgdGVzdCAteiAiJHF1aWV0IgorCXRoZW4KIAkJcHJpbnRmICIlc1xuIiAiJCoiID4mMgogCWZpCiB9CiAKLXByb2dyZXNzKCkKLXsKLQlpZiBbIC16ICIkcXVpZXQiIF07IHRoZW4KK3Byb2dyZXNzICgpIHsKKwlpZiB0ZXN0IC16ICIkcXVpZXQiCisJdGhlbgogCQlwcmludGYgIiVzXHIiICIkKiIgPiYyCiAJZmkKIH0KIAotYXNzZXJ0KCkKLXsKLQlpZiAiJEAiOyB0aGVuCi0JCToKLQllbHNlCithc3NlcnQgKCkgeworCWlmICEgIiRAIgorCXRoZW4KIAkJZGllICJhc3NlcnRpb24gZmFpbGVkOiAiICIkQCIKIAlmaQogfQogCiAKLSNlY2hvICJPcHRpb25zOiAkKiIKLQotd2hpbGUgWyAkIyAtZ3QgMCBdOyBkbword2hpbGUgdGVzdCAkIyAtZ3QgMAorZG8KIAlvcHQ9IiQxIgogCXNoaWZ0CisKIAljYXNlICIkb3B0IiBpbgotCQktcSkgcXVpZXQ9MSA7OwotCQktZCkgZGVidWc9MSA7OwotCQktLWFubm90YXRlKSBhbm5vdGF0ZT0iJDEiOyBzaGlmdCA7OwotCQktLW5vLWFubm90YXRlKSBhbm5vdGF0ZT0gOzsKLQkJLWIpIGJyYW5jaD0iJDEiOyBzaGlmdCA7OwotCQktUCkgcHJlZml4PSIkezElL30iOyBzaGlmdCA7OwotCQktbSkgbWVzc2FnZT0iJDEiOyBzaGlmdCA7OwotCQktLW5vLXByZWZpeCkgcHJlZml4PSA7OwotCQktLW9udG8pIG9udG89IiQxIjsgc2hpZnQgOzsKLQkJLS1uby1vbnRvKSBvbnRvPSA7OwotCQktLXJlam9pbikgcmVqb2luPTEgOzsKLQkJLS1uby1yZWpvaW4pIHJlam9pbj0gOzsKLQkJLS1pZ25vcmUtam9pbnMpIGlnbm9yZV9qb2lucz0xIDs7Ci0JCS0tbm8taWdub3JlLWpvaW5zKSBpZ25vcmVfam9pbnM9IDs7Ci0JCS0tc3F1YXNoKSBzcXVhc2g9MSA7OwotCQktLW5vLXNxdWFzaCkgc3F1YXNoPSA7OwotCQktLSkgYnJlYWsgOzsKLQkJKikgZGllICJVbmV4cGVjdGVkIG9wdGlvbjogJG9wdCIgOzsKKwktcSkKKwkJcXVpZXQ9MQorCQk7OworCS1kKQorCQlkZWJ1Zz0xCisJCTs7CisJLS1hbm5vdGF0ZSkKKwkJYW5ub3RhdGU9IiQxIgorCQlzaGlmdAorCQk7OworCS0tbm8tYW5ub3RhdGUpCisJCWFubm90YXRlPQorCQk7OworCS1iKQorCQlicmFuY2g9IiQxIgorCQlzaGlmdAorCQk7OworCS1QKQorCQlwcmVmaXg9IiR7MSUvfSIKKwkJc2hpZnQKKwkJOzsKKwktbSkKKwkJbWVzc2FnZT0iJDEiCisJCXNoaWZ0CisJCTs7CisJLS1uby1wcmVmaXgpCisJCXByZWZpeD0KKwkJOzsKKwktLW9udG8pCisJCW9udG89IiQxIgorCQlzaGlmdAorCQk7OworCS0tbm8tb250bykKKwkJb250bz0KKwkJOzsKKwktLXJlam9pbikKKwkJcmVqb2luPTEKKwkJOzsKKwktLW5vLXJlam9pbikKKwkJcmVqb2luPQorCQk7OworCS0taWdub3JlLWpvaW5zKQorCQlpZ25vcmVfam9pbnM9MQorCQk7OworCS0tbm8taWdub3JlLWpvaW5zKQorCQlpZ25vcmVfam9pbnM9CisJCTs7CisJLS1zcXVhc2gpCisJCXNxdWFzaD0xCisJCTs7CisJLS1uby1zcXVhc2gpCisJCXNxdWFzaD0KKwkJOzsKKwktLSkKKwkJYnJlYWsKKwkJOzsKKwkqKQorCQlkaWUgIlVuZXhwZWN0ZWQgb3B0aW9uOiAkb3B0IgorCQk7OwogCWVzYWMKIGRvbmUKIAogY29tbWFuZD0iJDEiCiBzaGlmdAorCiBjYXNlICIkY29tbWFuZCIgaW4KLQlhZGR8bWVyZ2V8cHVsbCkgZGVmYXVsdD0gOzsKLQlzcGxpdHxwdXNoKSBkZWZhdWx0PSItLWRlZmF1bHQgSEVBRCIgOzsKLQkqKSBkaWUgIlVua25vd24gY29tbWFuZCAnJGNvbW1hbmQnIiA7OworYWRkfG1lcmdlfHB1bGwpCisJZGVmYXVsdD0KKwk7Oworc3BsaXR8cHVzaCkKKwlkZWZhdWx0PSItLWRlZmF1bHQgSEVBRCIKKwk7OworKikKKwlkaWUgIlVua25vd24gY29tbWFuZCAnJGNvbW1hbmQnIgorCTs7CiBlc2FjCiAKLWlmIFsgLXogIiRwcmVmaXgiIF07IHRoZW4KK2lmIHRlc3QgLXogIiRwcmVmaXgiCit0aGVuCiAJZGllICJZb3UgbXVzdCBwcm92aWRlIHRoZSAtLXByZWZpeCBvcHRpb24uIgogZmkKIAogY2FzZSAiJGNvbW1hbmQiIGluCi0JYWRkKSBbIC1lICIkcHJlZml4IiBdICYmIAotCQlkaWUgInByZWZpeCAnJHByZWZpeCcgYWxyZWFkeSBleGlzdHMuIiA7OwotCSopICAgWyAtZSAiJHByZWZpeCIgXSB8fCAKLQkJZGllICInJHByZWZpeCcgZG9lcyBub3QgZXhpc3Q7IHVzZSAnZ2l0IHN1YnRyZWUgYWRkJyIgOzsKK2FkZCkKKwl0ZXN0IC1lICIkcHJlZml4IiAmJgorCQlkaWUgInByZWZpeCAnJHByZWZpeCcgYWxyZWFkeSBleGlzdHMuIgorCTs7CisqKQorCXRlc3QgLWUgIiRwcmVmaXgiIHx8CisJCWRpZSAiJyRwcmVmaXgnIGRvZXMgbm90IGV4aXN0OyB1c2UgJ2dpdCBzdWJ0cmVlIGFkZCciCisJOzsKIGVzYWMKIAogZGlyPSIkKGRpcm5hbWUgIiRwcmVmaXgvLiIpIgogCi1pZiBbICIkY29tbWFuZCIgIT0gInB1bGwiIC1hICIkY29tbWFuZCIgIT0gImFkZCIgLWEgIiRjb21tYW5kIiAhPSAicHVzaCIgXTsgdGhlbgoraWYgdGVzdCAiJGNvbW1hbmQiICE9ICJwdWxsIiAmJgorCQl0ZXN0ICIkY29tbWFuZCIgIT0gImFkZCIgJiYKKwkJdGVzdCAiJGNvbW1hbmQiICE9ICJwdXNoIgordGhlbgogCXJldnM9JChnaXQgcmV2LXBhcnNlICRkZWZhdWx0IC0tcmV2cy1vbmx5ICIkQCIpIHx8IGV4aXQgJD8KLQlkaXJzPSIkKGdpdCByZXYtcGFyc2UgLS1uby1yZXZzIC0tbm8tZmxhZ3MgIiRAIikiIHx8IGV4aXQgJD8KLQlpZiBbIC1uICIkZGlycyIgXTsgdGhlbgorCWRpcnM9JChnaXQgcmV2LXBhcnNlIC0tbm8tcmV2cyAtLW5vLWZsYWdzICIkQCIpIHx8IGV4aXQgJD8KKwlpZiB0ZXN0IC1uICIkZGlycyIKKwl0aGVuCiAJCWRpZSAiRXJyb3I6IFVzZSAtLXByZWZpeCBpbnN0ZWFkIG9mIGJhcmUgZmlsZW5hbWVzLiIKIAlmaQogZmkKQEAgLTE0Miw3OCArMTk4LDgyIEBACiBkZWJ1ZyAib3B0czogeyQqfSIKIGRlYnVnCiAKLWNhY2hlX3NldHVwKCkKLXsKK2NhY2hlX3NldHVwICgpIHsKIAljYWNoZWRpcj0iJEdJVF9ESVIvc3VidHJlZS1jYWNoZS8kJCIKLQlybSAtcmYgIiRjYWNoZWRpciIgfHwgZGllICJDYW4ndCBkZWxldGUgb2xkIGNhY2hlZGlyOiAkY2FjaGVkaXIiCi0JbWtkaXIgLXAgIiRjYWNoZWRpciIgfHwgZGllICJDYW4ndCBjcmVhdGUgbmV3IGNhY2hlZGlyOiAkY2FjaGVkaXIiCi0JbWtkaXIgLXAgIiRjYWNoZWRpci9ub3RyZWUiIHx8IGRpZSAiQ2FuJ3QgY3JlYXRlIG5ldyBjYWNoZWRpcjogJGNhY2hlZGlyL25vdHJlZSIKKwlybSAtcmYgIiRjYWNoZWRpciIgfHwKKwkJZGllICJDYW4ndCBkZWxldGUgb2xkIGNhY2hlZGlyOiAkY2FjaGVkaXIiCisJbWtkaXIgLXAgIiRjYWNoZWRpciIgfHwKKwkJZGllICJDYW4ndCBjcmVhdGUgbmV3IGNhY2hlZGlyOiAkY2FjaGVkaXIiCisJbWtkaXIgLXAgIiRjYWNoZWRpci9ub3RyZWUiIHx8CisJCWRpZSAiQ2FuJ3QgY3JlYXRlIG5ldyBjYWNoZWRpcjogJGNhY2hlZGlyL25vdHJlZSIKIAlkZWJ1ZyAiVXNpbmcgY2FjaGVkaXI6ICRjYWNoZWRpciIgPiYyCiB9CiAKLWNhY2hlX2dldCgpCi17Ci0JZm9yIG9sZHJldiBpbiAkKjsgZG8KLQkJaWYgWyAtciAiJGNhY2hlZGlyLyRvbGRyZXYiIF07IHRoZW4KK2NhY2hlX2dldCAoKSB7CisJZm9yIG9sZHJldiBpbiAiJEAiCisJZG8KKwkJaWYgdGVzdCAtciAiJGNhY2hlZGlyLyRvbGRyZXYiCisJCXRoZW4KIAkJCXJlYWQgbmV3cmV2IDwiJGNhY2hlZGlyLyRvbGRyZXYiCiAJCQllY2hvICRuZXdyZXYKIAkJZmkKIAlkb25lCiB9CiAKLWNhY2hlX21pc3MoKQotewotCWZvciBvbGRyZXYgaW4gJCo7IGRvCi0JCWlmIFsgISAtciAiJGNhY2hlZGlyLyRvbGRyZXYiIF07IHRoZW4KK2NhY2hlX21pc3MgKCkgeworCWZvciBvbGRyZXYgaW4gIiRAIgorCWRvCisJCWlmICEgdGVzdCAtciAiJGNhY2hlZGlyLyRvbGRyZXYiCisJCXRoZW4KIAkJCWVjaG8gJG9sZHJldgogCQlmaQogCWRvbmUKIH0KIAotY2hlY2tfcGFyZW50cygpCi17Ci0JbWlzc2VkPSQoY2FjaGVfbWlzcyAkKikKLQlmb3IgbWlzcyBpbiAkbWlzc2VkOyBkbwotCQlpZiBbICEgLXIgIiRjYWNoZWRpci9ub3RyZWUvJG1pc3MiIF07IHRoZW4KK2NoZWNrX3BhcmVudHMgKCkgeworCW1pc3NlZD0kKGNhY2hlX21pc3MgIiRAIikKKwlmb3IgbWlzcyBpbiAkbWlzc2VkCisJZG8KKwkJaWYgISB0ZXN0IC1yICIkY2FjaGVkaXIvbm90cmVlLyRtaXNzIgorCQl0aGVuCiAJCQlkZWJ1ZyAiICBpbmNvcnJlY3Qgb3JkZXI6ICRtaXNzIgogCQlmaQogCWRvbmUKIH0KIAotc2V0X25vdHJlZSgpCi17CitzZXRfbm90cmVlICgpIHsKIAllY2hvICIxIiA+ICIkY2FjaGVkaXIvbm90cmVlLyQxIgogfQogCi1jYWNoZV9zZXQoKQoteworY2FjaGVfc2V0ICgpIHsKIAlvbGRyZXY9IiQxIgogCW5ld3Jldj0iJDIiCi0JaWYgWyAiJG9sZHJldiIgIT0gImxhdGVzdF9vbGQiIFwKLQkgICAgIC1hICIkb2xkcmV2IiAhPSAibGF0ZXN0X25ldyIgXAotCSAgICAgLWEgLWUgIiRjYWNoZWRpci8kb2xkcmV2IiBdOyB0aGVuCisJaWYgdGVzdCAiJG9sZHJldiIgIT0gImxhdGVzdF9vbGQiICYmCisJCXRlc3QgIiRvbGRyZXYiICE9ICJsYXRlc3RfbmV3IiAmJgorCQl0ZXN0IC1lICIkY2FjaGVkaXIvJG9sZHJldiIKKwl0aGVuCiAJCWRpZSAiY2FjaGUgZm9yICRvbGRyZXYgYWxyZWFkeSBleGlzdHMhIgogCWZpCiAJZWNobyAiJG5ld3JldiIgPiIkY2FjaGVkaXIvJG9sZHJldiIKIH0KIAotcmV2X2V4aXN0cygpCi17Ci0JaWYgZ2l0IHJldi1wYXJzZSAiJDEiID4vZGV2L251bGwgMj4mMTsgdGhlbgorcmV2X2V4aXN0cyAoKSB7CisJaWYgZ2l0IHJldi1wYXJzZSAiJDEiID4vZGV2L251bGwgMj4mMQorCXRoZW4KIAkJcmV0dXJuIDAKIAllbHNlCiAJCXJldHVybiAxCiAJZmkKIH0KIAotcmV2X2lzX2Rlc2NlbmRhbnRfb2ZfYnJhbmNoKCkKLXsKK3Jldl9pc19kZXNjZW5kYW50X29mX2JyYW5jaCAoKSB7CiAJbmV3cmV2PSIkMSIKIAlicmFuY2g9IiQyIgotCWJyYW5jaF9oYXNoPSQoZ2l0IHJldi1wYXJzZSAkYnJhbmNoKQotCW1hdGNoPSQoZ2l0IHJldi1saXN0IC0xICRicmFuY2hfaGFzaCBeJG5ld3JldikKKwlicmFuY2hfaGFzaD0kKGdpdCByZXYtcGFyc2UgIiRicmFuY2giKQorCW1hdGNoPSQoZ2l0IHJldi1saXN0IC0xICIkYnJhbmNoX2hhc2giICJeJG5ld3JldiIpCiAKLQlpZiBbIC16ICIkbWF0Y2giIF07IHRoZW4KKwlpZiB0ZXN0IC16ICIkbWF0Y2giCisJdGhlbgogCQlyZXR1cm4gMAogCWVsc2UKIAkJcmV0dXJuIDEKQEAgLTIyMywxNSArMjgzLDE0IEBACiAjIGlmIGEgY29tbWl0IGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgdGhpcyBtaWdodCBub3Qgd29yay4gIEJ1dCB3ZSBvbmx5IHdhbnQKICMgdG8gcmVtb3ZlIHRoZSBwYXJlbnQgZnJvbSB0aGUgcmV2LWxpc3QsIGFuZCBzaW5jZSBpdCBkb2Vzbid0IGV4aXN0LCBpdCB3b24ndAogIyBiZSB0aGVyZSBhbnl3YXksIHNvIGRvIG5vdGhpbmcgaW4gdGhhdCBjYXNlLgotdHJ5X3JlbW92ZV9wcmV2aW91cygpCi17Ci0JaWYgcmV2X2V4aXN0cyAiJDFeIjsgdGhlbgordHJ5X3JlbW92ZV9wcmV2aW91cyAoKSB7CisJaWYgcmV2X2V4aXN0cyAiJDFeIgorCXRoZW4KIAkJZWNobyAiXiQxXiIKIAlmaQogfQogCi1maW5kX2xhdGVzdF9zcXVhc2goKQoteworZmluZF9sYXRlc3Rfc3F1YXNoICgpIHsKIAlkZWJ1ZyAiTG9va2luZyBmb3IgbGF0ZXN0IHNxdWFzaCAoJGRpcikuLi4iCiAJZGlyPSIkMSIKIAlzcT0KQEAgLTIzOSwzNyArMjk4LDQzIEBACiAJc3ViPQogCWdpdCBsb2cgLS1ncmVwPSJeZ2l0LXN1YnRyZWUtZGlyOiAkZGlyLypcJCIgXAogCQktLXByZXR0eT1mb3JtYXQ6J1NUQVJUICVIJW4lcyVuJW4lYiVuRU5EJW4nIEhFQUQgfAotCXdoaWxlIHJlYWQgYSBiIGp1bms7IGRvCisJd2hpbGUgcmVhZCBhIGIganVuaworCWRvCiAJCWRlYnVnICIkYSAkYiAkanVuayIKIAkJZGVidWcgInt7JHNxLyRtYWluLyRzdWJ9fSIKIAkJY2FzZSAiJGEiIGluCi0JCQlTVEFSVCkgc3E9IiRiIiA7OwotCQkJZ2l0LXN1YnRyZWUtbWFpbmxpbmU6KSBtYWluPSIkYiIgOzsKLQkJCWdpdC1zdWJ0cmVlLXNwbGl0OikKLQkJCQlzdWI9IiQoZ2l0IHJldi1wYXJzZSAiJGJeMCIpIiB8fAotCQkJCSAgICBkaWUgImNvdWxkIG5vdCByZXYtcGFyc2Ugc3BsaXQgaGFzaCAkYiBmcm9tIGNvbW1pdCAkc3EiCi0JCQkJOzsKLQkJCUVORCkKLQkJCQlpZiBbIC1uICIkc3ViIiBdOyB0aGVuCi0JCQkJCWlmIFsgLW4gIiRtYWluIiBdOyB0aGVuCi0JCQkJCQkjIGEgcmVqb2luIGNvbW1pdD8KLQkJCQkJCSMgUHJldGVuZCBpdHMgc3ViIHdhcyBhIHNxdWFzaC4KLQkJCQkJCXNxPSIkc3ViIgotCQkJCQlmaQotCQkJCQlkZWJ1ZyAiU3F1YXNoIGZvdW5kOiAkc3EgJHN1YiIKLQkJCQkJZWNobyAiJHNxIiAiJHN1YiIKLQkJCQkJYnJlYWsKKwkJU1RBUlQpCisJCQlzcT0iJGIiCisJCQk7OworCQlnaXQtc3VidHJlZS1tYWlubGluZTopCisJCQltYWluPSIkYiIKKwkJCTs7CisJCWdpdC1zdWJ0cmVlLXNwbGl0OikKKwkJCXN1Yj0iJChnaXQgcmV2LXBhcnNlICIkYl4wIikiIHx8CisJCQlkaWUgImNvdWxkIG5vdCByZXYtcGFyc2Ugc3BsaXQgaGFzaCAkYiBmcm9tIGNvbW1pdCAkc3EiCisJCQk7OworCQlFTkQpCisJCQlpZiB0ZXN0IC1uICIkc3ViIgorCQkJdGhlbgorCQkJCWlmIHRlc3QgLW4gIiRtYWluIgorCQkJCXRoZW4KKwkJCQkJIyBhIHJlam9pbiBjb21taXQ/CisJCQkJCSMgUHJldGVuZCBpdHMgc3ViIHdhcyBhIHNxdWFzaC4KKwkJCQkJc3E9IiRzdWIiCiAJCQkJZmkKLQkJCQlzcT0KLQkJCQltYWluPQotCQkJCXN1Yj0KLQkJCQk7OworCQkJCWRlYnVnICJTcXVhc2ggZm91bmQ6ICRzcSAkc3ViIgorCQkJCWVjaG8gIiRzcSIgIiRzdWIiCisJCQkJYnJlYWsKKwkJCWZpCisJCQlzcT0KKwkJCW1haW49CisJCQlzdWI9CisJCQk7OwogCQllc2FjCiAJZG9uZQogfQogCi1maW5kX2V4aXN0aW5nX3NwbGl0cygpCi17CitmaW5kX2V4aXN0aW5nX3NwbGl0cyAoKSB7CiAJZGVidWcgIkxvb2tpbmcgZm9yIHByaW9yIHNwbGl0cy4uLiIKIAlkaXI9IiQxIgogCXJldnM9IiQyIgpAQCAtMjc3LDM3ICszNDIsNDMgQEAKIAlzdWI9CiAJZ2l0IGxvZyAtLWdyZXA9Il5naXQtc3VidHJlZS1kaXI6ICRkaXIvKlwkIiBcCiAJCS0tcHJldHR5PWZvcm1hdDonU1RBUlQgJUglbiVzJW4lbiViJW5FTkQlbicgJHJldnMgfAotCXdoaWxlIHJlYWQgYSBiIGp1bms7IGRvCisJd2hpbGUgcmVhZCBhIGIganVuaworCWRvCiAJCWNhc2UgIiRhIiBpbgotCQkJU1RBUlQpIHNxPSIkYiIgOzsKLQkJCWdpdC1zdWJ0cmVlLW1haW5saW5lOikgbWFpbj0iJGIiIDs7Ci0JCQlnaXQtc3VidHJlZS1zcGxpdDopCi0JCQkJc3ViPSIkKGdpdCByZXYtcGFyc2UgIiRiXjAiKSIgfHwKLQkJCQkgICAgZGllICJjb3VsZCBub3QgcmV2LXBhcnNlIHNwbGl0IGhhc2ggJGIgZnJvbSBjb21taXQgJHNxIgotCQkJCTs7Ci0JCQlFTkQpCi0JCQkJZGVidWcgIiAgTWFpbiBpczogJyRtYWluJyIKLQkJCQlpZiBbIC16ICIkbWFpbiIgLWEgLW4gIiRzdWIiIF07IHRoZW4KLQkJCQkJIyBzcXVhc2ggY29tbWl0cyByZWZlciB0byBhIHN1YnRyZWUKLQkJCQkJZGVidWcgIiAgU3F1YXNoOiAkc3EgZnJvbSAkc3ViIgotCQkJCQljYWNoZV9zZXQgIiRzcSIgIiRzdWIiCi0JCQkJZmkKLQkJCQlpZiBbIC1uICIkbWFpbiIgLWEgLW4gIiRzdWIiIF07IHRoZW4KLQkJCQkJZGVidWcgIiAgUHJpb3I6ICRtYWluIC0+ICRzdWIiCi0JCQkJCWNhY2hlX3NldCAkbWFpbiAkc3ViCi0JCQkJCWNhY2hlX3NldCAkc3ViICRzdWIKLQkJCQkJdHJ5X3JlbW92ZV9wcmV2aW91cyAiJG1haW4iCi0JCQkJCXRyeV9yZW1vdmVfcHJldmlvdXMgIiRzdWIiCi0JCQkJZmkKLQkJCQltYWluPQotCQkJCXN1Yj0KLQkJCQk7OworCQlTVEFSVCkKKwkJCXNxPSIkYiIKKwkJCTs7CisJCWdpdC1zdWJ0cmVlLW1haW5saW5lOikKKwkJCW1haW49IiRiIgorCQkJOzsKKwkJZ2l0LXN1YnRyZWUtc3BsaXQ6KQorCQkJc3ViPSIkKGdpdCByZXYtcGFyc2UgIiRiXjAiKSIgfHwKKwkJCWRpZSAiY291bGQgbm90IHJldi1wYXJzZSBzcGxpdCBoYXNoICRiIGZyb20gY29tbWl0ICRzcSIKKwkJCTs7CisJCUVORCkKKwkJCWRlYnVnICIgIE1haW4gaXM6ICckbWFpbiciCisJCQlpZiB0ZXN0IC16ICIkbWFpbiIgLWEgLW4gIiRzdWIiCisJCQl0aGVuCisJCQkJIyBzcXVhc2ggY29tbWl0cyByZWZlciB0byBhIHN1YnRyZWUKKwkJCQlkZWJ1ZyAiICBTcXVhc2g6ICRzcSBmcm9tICRzdWIiCisJCQkJY2FjaGVfc2V0ICIkc3EiICIkc3ViIgorCQkJZmkKKwkJCWlmIHRlc3QgLW4gIiRtYWluIiAtYSAtbiAiJHN1YiIKKwkJCXRoZW4KKwkJCQlkZWJ1ZyAiICBQcmlvcjogJG1haW4gLT4gJHN1YiIKKwkJCQljYWNoZV9zZXQgJG1haW4gJHN1YgorCQkJCWNhY2hlX3NldCAkc3ViICRzdWIKKwkJCQl0cnlfcmVtb3ZlX3ByZXZpb3VzICIkbWFpbiIKKwkJCQl0cnlfcmVtb3ZlX3ByZXZpb3VzICIkc3ViIgorCQkJZmkKKwkJCW1haW49CisJCQlzdWI9CisJCQk7OwogCQllc2FjCiAJZG9uZQogfQogCi1jb3B5X2NvbW1pdCgpCi17Citjb3B5X2NvbW1pdCAoKSB7CiAJIyBXZSdyZSBnb2luZyB0byBzZXQgc29tZSBlbnZpcm9ubWVudCB2YXJzIGhlcmUsIHNvCiAJIyBkbyBpdCBpbiBhIHN1YnNoZWxsIHRvIGdldCByaWQgb2YgdGhlbSBzYWZlbHkgbGF0ZXIKIAlkZWJ1ZyBjb3B5X2NvbW1pdCAieyQxfSIgInskMn0iICJ7JDN9IgpAQCAtMzI1LDY2ICszOTYsNjkgQEAKIAkJCUdJVF9DT01NSVRURVJfTkFNRSBcCiAJCQlHSVRfQ09NTUlUVEVSX0VNQUlMIFwKIAkJCUdJVF9DT01NSVRURVJfREFURQotCQkocHJpbnRmICIlcyIgIiRhbm5vdGF0ZSI7IGNhdCApIHwKKwkJKAorCQkJcHJpbnRmICIlcyIgIiRhbm5vdGF0ZSIKKwkJCWNhdAorCQkpIHwKIAkJZ2l0IGNvbW1pdC10cmVlICIkMiIgJDMgICMgcmVhZHMgdGhlIHJlc3Qgb2Ygc3RkaW4KIAkpIHx8IGRpZSAiQ2FuJ3QgY29weSBjb21taXQgJDEiCiB9CiAKLWFkZF9tc2coKQoteworYWRkX21zZyAoKSB7CiAJZGlyPSIkMSIKIAlsYXRlc3Rfb2xkPSIkMiIKIAlsYXRlc3RfbmV3PSIkMyIKLQlpZiBbIC1uICIkbWVzc2FnZSIgXTsgdGhlbgorCWlmIHRlc3QgLW4gIiRtZXNzYWdlIgorCXRoZW4KIAkJY29tbWl0X21lc3NhZ2U9IiRtZXNzYWdlIgogCWVsc2UKIAkJY29tbWl0X21lc3NhZ2U9IkFkZCAnJGRpci8nIGZyb20gY29tbWl0ICckbGF0ZXN0X25ldyciCiAJZmkKIAljYXQgPDwtRU9GCiAJCSRjb21taXRfbWVzc2FnZQotCQkKKwogCQlnaXQtc3VidHJlZS1kaXI6ICRkaXIKIAkJZ2l0LXN1YnRyZWUtbWFpbmxpbmU6ICRsYXRlc3Rfb2xkCiAJCWdpdC1zdWJ0cmVlLXNwbGl0OiAkbGF0ZXN0X25ldwogCUVPRgogfQogCi1hZGRfc3F1YXNoZWRfbXNnKCkKLXsKLQlpZiBbIC1uICIkbWVzc2FnZSIgXTsgdGhlbgorYWRkX3NxdWFzaGVkX21zZyAoKSB7CisJaWYgdGVzdCAtbiAiJG1lc3NhZ2UiCisJdGhlbgogCQllY2hvICIkbWVzc2FnZSIKIAllbHNlCiAJCWVjaG8gIk1lcmdlIGNvbW1pdCAnJDEnIGFzICckMiciCiAJZmkKIH0KIAotcmVqb2luX21zZygpCi17CityZWpvaW5fbXNnICgpIHsKIAlkaXI9IiQxIgogCWxhdGVzdF9vbGQ9IiQyIgogCWxhdGVzdF9uZXc9IiQzIgotCWlmIFsgLW4gIiRtZXNzYWdlIiBdOyB0aGVuCisJaWYgdGVzdCAtbiAiJG1lc3NhZ2UiCisJdGhlbgogCQljb21taXRfbWVzc2FnZT0iJG1lc3NhZ2UiCiAJZWxzZQogCQljb21taXRfbWVzc2FnZT0iU3BsaXQgJyRkaXIvJyBpbnRvIGNvbW1pdCAnJGxhdGVzdF9uZXcnIgogCWZpCiAJY2F0IDw8LUVPRgogCQkkY29tbWl0X21lc3NhZ2UKLQkJCisKIAkJZ2l0LXN1YnRyZWUtZGlyOiAkZGlyCiAJCWdpdC1zdWJ0cmVlLW1haW5saW5lOiAkbGF0ZXN0X29sZAogCQlnaXQtc3VidHJlZS1zcGxpdDogJGxhdGVzdF9uZXcKIAlFT0YKIH0KIAotc3F1YXNoX21zZygpCi17CitzcXVhc2hfbXNnICgpIHsKIAlkaXI9IiQxIgogCW9sZHN1Yj0iJDIiCiAJbmV3c3ViPSIkMyIKIAluZXdzdWJfc2hvcnQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRuZXdzdWIiKQotCQotCWlmIFsgLW4gIiRvbGRzdWIiIF07IHRoZW4KKworCWlmIHRlc3QgLW4gIiRvbGRzdWIiCisJdGhlbgogCQlvbGRzdWJfc2hvcnQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRvbGRzdWIiKQogCQllY2hvICJTcXVhc2hlZCAnJGRpci8nIGNoYW5nZXMgZnJvbSAkb2xkc3ViX3Nob3J0Li4kbmV3c3ViX3Nob3J0IgogCQllY2hvCkBAIC0zOTMsNDEgKzQ2Nyw0MSBAQAogCWVsc2UKIAkJZWNobyAiU3F1YXNoZWQgJyRkaXIvJyBjb250ZW50IGZyb20gY29tbWl0ICRuZXdzdWJfc2hvcnQiCiAJZmkKLQkKKwogCWVjaG8KIAllY2hvICJnaXQtc3VidHJlZS1kaXI6ICRkaXIiCiAJZWNobyAiZ2l0LXN1YnRyZWUtc3BsaXQ6ICRuZXdzdWIiCiB9CiAKLXRvcHRyZWVfZm9yX2NvbW1pdCgpCi17Cit0b3B0cmVlX2Zvcl9jb21taXQgKCkgewogCWNvbW1pdD0iJDEiCiAJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JyVUJyAiJGNvbW1pdCIgLS0gfHwgZXhpdCAkPwogfQogCi1zdWJ0cmVlX2Zvcl9jb21taXQoKQoteworc3VidHJlZV9mb3JfY29tbWl0ICgpIHsKIAljb21taXQ9IiQxIgogCWRpcj0iJDIiCiAJZ2l0IGxzLXRyZWUgIiRjb21taXQiIC0tICIkZGlyIiB8Ci0Jd2hpbGUgcmVhZCBtb2RlIHR5cGUgdHJlZSBuYW1lOyBkbwotCQlhc3NlcnQgWyAiJG5hbWUiID0gIiRkaXIiIF0KLQkJYXNzZXJ0IFsgIiR0eXBlIiA9ICJ0cmVlIiAtbyAiJHR5cGUiID0gImNvbW1pdCIgXQotCQlbICIkdHlwZSIgPSAiY29tbWl0IiBdICYmIGNvbnRpbnVlICAjIGlnbm9yZSBzdWJtb2R1bGVzCisJd2hpbGUgcmVhZCBtb2RlIHR5cGUgdHJlZSBuYW1lCisJZG8KKwkJYXNzZXJ0IHRlc3QgIiRuYW1lIiA9ICIkZGlyIgorCQlhc3NlcnQgdGVzdCAiJHR5cGUiID0gInRyZWUiIC1vICIkdHlwZSIgPSAiY29tbWl0IgorCQl0ZXN0ICIkdHlwZSIgPSAiY29tbWl0IiAmJiBjb250aW51ZSAgIyBpZ25vcmUgc3VibW9kdWxlcwogCQllY2hvICR0cmVlCiAJCWJyZWFrCiAJZG9uZQogfQogCi10cmVlX2NoYW5nZWQoKQotewordHJlZV9jaGFuZ2VkICgpIHsKIAl0cmVlPSQxCiAJc2hpZnQKLQlpZiBbICQjIC1uZSAxIF07IHRoZW4KKwlpZiB0ZXN0ICQjIC1uZSAxCisJdGhlbgogCQlyZXR1cm4gMCAgICMgd2VpcmQgcGFyZW50cywgY29uc2lkZXIgaXQgY2hhbmdlZAogCWVsc2UKIAkJcHRyZWU9JCh0b3B0cmVlX2Zvcl9jb21taXQgJDEpCi0JCWlmIFsgIiRwdHJlZSIgIT0gIiR0cmVlIiBdOyB0aGVuCisJCWlmIHRlc3QgIiRwdHJlZSIgIT0gIiR0cmVlIgorCQl0aGVuCiAJCQlyZXR1cm4gMCAgICMgY2hhbmdlZAogCQllbHNlCiAJCQlyZXR1cm4gMSAgICMgbm90IGNoYW5nZWQKQEAgLTQzNSwxMTggKzUwOSwxMjcgQEAKIAlmaQogfQogCi1uZXdfc3F1YXNoX2NvbW1pdCgpCi17CituZXdfc3F1YXNoX2NvbW1pdCAoKSB7CiAJb2xkPSIkMSIKIAlvbGRzdWI9IiQyIgogCW5ld3N1Yj0iJDMiCiAJdHJlZT0kKHRvcHRyZWVfZm9yX2NvbW1pdCAkbmV3c3ViKSB8fCBleGl0ICQ/Ci0JaWYgWyAtbiAiJG9sZCIgXTsgdGhlbgotCQlzcXVhc2hfbXNnICIkZGlyIiAiJG9sZHN1YiIgIiRuZXdzdWIiIHwgCi0JCQlnaXQgY29tbWl0LXRyZWUgIiR0cmVlIiAtcCAiJG9sZCIgfHwgZXhpdCAkPworCWlmIHRlc3QgLW4gIiRvbGQiCisJdGhlbgorCQlzcXVhc2hfbXNnICIkZGlyIiAiJG9sZHN1YiIgIiRuZXdzdWIiIHwKKwkJZ2l0IGNvbW1pdC10cmVlICIkdHJlZSIgLXAgIiRvbGQiIHx8IGV4aXQgJD8KIAllbHNlCiAJCXNxdWFzaF9tc2cgIiRkaXIiICIiICIkbmV3c3ViIiB8Ci0JCQlnaXQgY29tbWl0LXRyZWUgIiR0cmVlIiB8fCBleGl0ICQ/CisJCWdpdCBjb21taXQtdHJlZSAiJHRyZWUiIHx8IGV4aXQgJD8KIAlmaQogfQogCi1jb3B5X29yX3NraXAoKQoteworY29weV9vcl9za2lwICgpIHsKIAlyZXY9IiQxIgogCXRyZWU9IiQyIgogCW5ld3BhcmVudHM9IiQzIgotCWFzc2VydCBbIC1uICIkdHJlZSIgXQorCWFzc2VydCB0ZXN0IC1uICIkdHJlZSIKIAogCWlkZW50aWNhbD0KIAlub25pZGVudGljYWw9CiAJcD0KIAlnb3RwYXJlbnRzPQotCWZvciBwYXJlbnQgaW4gJG5ld3BhcmVudHM7IGRvCisJZm9yIHBhcmVudCBpbiAkbmV3cGFyZW50cworCWRvCiAJCXB0cmVlPSQodG9wdHJlZV9mb3JfY29tbWl0ICRwYXJlbnQpIHx8IGV4aXQgJD8KLQkJWyAteiAiJHB0cmVlIiBdICYmIGNvbnRpbnVlCi0JCWlmIFsgIiRwdHJlZSIgPSAiJHRyZWUiIF07IHRoZW4KKwkJdGVzdCAteiAiJHB0cmVlIiAmJiBjb250aW51ZQorCQlpZiB0ZXN0ICIkcHRyZWUiID0gIiR0cmVlIgorCQl0aGVuCiAJCQkjIGFuIGlkZW50aWNhbCBwYXJlbnQgY291bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGlzIHJldi4KIAkJCWlkZW50aWNhbD0iJHBhcmVudCIKIAkJZWxzZQogCQkJbm9uaWRlbnRpY2FsPSIkcGFyZW50IgogCQlmaQotCQkKKwogCQkjIHNvbWV0aW1lcyBib3RoIG9sZCBwYXJlbnRzIG1hcCB0byB0aGUgc2FtZSBuZXdwYXJlbnQ7CiAJCSMgZWxpbWluYXRlIGR1cGxpY2F0ZXMKIAkJaXNfbmV3PTEKLQkJZm9yIGdwIGluICRnb3RwYXJlbnRzOyBkbwotCQkJaWYgWyAiJGdwIiA9ICIkcGFyZW50IiBdOyB0aGVuCisJCWZvciBncCBpbiAkZ290cGFyZW50cworCQlkbworCQkJaWYgdGVzdCAiJGdwIiA9ICIkcGFyZW50IgorCQkJdGhlbgogCQkJCWlzX25ldz0KIAkJCQlicmVhawogCQkJZmkKIAkJZG9uZQotCQlpZiBbIC1uICIkaXNfbmV3IiBdOyB0aGVuCisJCWlmIHRlc3QgLW4gIiRpc19uZXciCisJCXRoZW4KIAkJCWdvdHBhcmVudHM9IiRnb3RwYXJlbnRzICRwYXJlbnQiCiAJCQlwPSIkcCAtcCAkcGFyZW50IgogCQlmaQogCWRvbmUKIAogCWNvcHljb21taXQ9Ci0JaWYgWyAtbiAiJGlkZW50aWNhbCIgXSAmJiBbIC1uICIkbm9uaWRlbnRpY2FsIiBdOyB0aGVuCisJaWYgdGVzdCAtbiAiJGlkZW50aWNhbCIgJiYgdGVzdCAtbiAiJG5vbmlkZW50aWNhbCIKKwl0aGVuCiAJCWV4dHJhcz0kKGdpdCByZXYtbGlzdCAtLWNvdW50ICRpZGVudGljYWwuLiRub25pZGVudGljYWwpCi0JCWlmIFsgIiRleHRyYXMiIC1uZSAwIF07IHRoZW4KKwkJaWYgdGVzdCAiJGV4dHJhcyIgLW5lIDAKKwkJdGhlbgogCQkJIyB3ZSBuZWVkIHRvIHByZXNlcnZlIGhpc3RvcnkgYWxvbmcgdGhlIG90aGVyIGJyYW5jaAogCQkJY29weWNvbW1pdD0xCiAJCWZpCiAJZmkKLQlpZiBbIC1uICIkaWRlbnRpY2FsIiBdICYmIFsgLXogIiRjb3B5Y29tbWl0IiBdOyB0aGVuCisJaWYgdGVzdCAtbiAiJGlkZW50aWNhbCIgJiYgdGVzdCAteiAiJGNvcHljb21taXQiCisJdGhlbgogCQllY2hvICRpZGVudGljYWwKIAllbHNlCi0JCWNvcHlfY29tbWl0ICRyZXYgJHRyZWUgIiRwIiB8fCBleGl0ICQ/CisJCWNvcHlfY29tbWl0ICIkcmV2IiAiJHRyZWUiICIkcCIgfHwgZXhpdCAkPwogCWZpCiB9CiAKLWVuc3VyZV9jbGVhbigpCi17Ci0JaWYgISBnaXQgZGlmZi1pbmRleCBIRUFEIC0tZXhpdC1jb2RlIC0tcXVpZXQgMj4mMTsgdGhlbgorZW5zdXJlX2NsZWFuICgpIHsKKwlpZiAhIGdpdCBkaWZmLWluZGV4IEhFQUQgLS1leGl0LWNvZGUgLS1xdWlldCAyPiYxCisJdGhlbgogCQlkaWUgIldvcmtpbmcgdHJlZSBoYXMgbW9kaWZpY2F0aW9ucy4gIENhbm5vdCBhZGQuIgogCWZpCi0JaWYgISBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEIC0tZXhpdC1jb2RlIC0tcXVpZXQgMj4mMTsgdGhlbgorCWlmICEgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRCAtLWV4aXQtY29kZSAtLXF1aWV0IDI+JjEKKwl0aGVuCiAJCWRpZSAiSW5kZXggaGFzIG1vZGlmaWNhdGlvbnMuICBDYW5ub3QgYWRkLiIKIAlmaQogfQogCi1lbnN1cmVfdmFsaWRfcmVmX2Zvcm1hdCgpCi17CitlbnN1cmVfdmFsaWRfcmVmX2Zvcm1hdCAoKSB7CiAJZ2l0IGNoZWNrLXJlZi1mb3JtYXQgInJlZnMvaGVhZHMvJDEiIHx8Ci0JICAgIGRpZSAiJyQxJyBkb2VzIG5vdCBsb29rIGxpa2UgYSByZWYiCisJCWRpZSAiJyQxJyBkb2VzIG5vdCBsb29rIGxpa2UgYSByZWYiCiB9CiAKLWNtZF9hZGQoKQotewotCWlmIFsgLWUgIiRkaXIiIF07IHRoZW4KK2NtZF9hZGQgKCkgeworCWlmIHRlc3QgLWUgIiRkaXIiCisJdGhlbgogCQlkaWUgIickZGlyJyBhbHJlYWR5IGV4aXN0cy4gIENhbm5vdCBhZGQuIgogCWZpCiAKIAllbnN1cmVfY2xlYW4KLQkKLQlpZiBbICQjIC1lcSAxIF07IHRoZW4KLQkgICAgZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJDFee2NvbW1pdH0iID4vZGV2L251bGwgfHwKLQkgICAgZGllICInJDEnIGRvZXMgbm90IHJlZmVyIHRvIGEgY29tbWl0IgogCi0JICAgICJjbWRfYWRkX2NvbW1pdCIgIiRAIgotCWVsaWYgWyAkIyAtZXEgMiBdOyB0aGVuCi0JICAgICMgVGVjaG5pY2FsbHkgd2UgY291bGQgYWNjZXB0IGEgcmVmc3BlYyBoZXJlIGJ1dCB3ZSdyZQotCSAgICAjIGp1c3QgZ29pbmcgdG8gdHVybiBhcm91bmQgYW5kIGFkZCBGRVRDSF9IRUFEIHVuZGVyIHRoZQotCSAgICAjIHNwZWNpZmllZCBkaXJlY3RvcnkuICBBbGxvd2luZyBhIHJlZnNwZWMgbWlnaHQgYmUKLQkgICAgIyBtaXNsZWFkaW5nIGJlY2F1c2Ugd2Ugd29uJ3QgZG8gYW55dGhpbmcgd2l0aCBhbnkgb3RoZXIKLQkgICAgIyBicmFuY2hlcyBmZXRjaGVkIHZpYSB0aGUgcmVmc3BlYy4KLQkgICAgZW5zdXJlX3ZhbGlkX3JlZl9mb3JtYXQgIiQyIgorCWlmIHRlc3QgJCMgLWVxIDEKKwl0aGVuCisJCWdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiQxXntjb21taXR9IiA+L2Rldi9udWxsIHx8CisJCQlkaWUgIickMScgZG9lcyBub3QgcmVmZXIgdG8gYSBjb21taXQiCiAKLQkgICAgImNtZF9hZGRfcmVwb3NpdG9yeSIgIiRAIgorCQljbWRfYWRkX2NvbW1pdCAiJEAiCisKKwllbGlmIHRlc3QgJCMgLWVxIDIKKwl0aGVuCisJCSMgVGVjaG5pY2FsbHkgd2UgY291bGQgYWNjZXB0IGEgcmVmc3BlYyBoZXJlIGJ1dCB3ZSdyZQorCQkjIGp1c3QgZ29pbmcgdG8gdHVybiBhcm91bmQgYW5kIGFkZCBGRVRDSF9IRUFEIHVuZGVyIHRoZQorCQkjIHNwZWNpZmllZCBkaXJlY3RvcnkuICBBbGxvd2luZyBhIHJlZnNwZWMgbWlnaHQgYmUKKwkJIyBtaXNsZWFkaW5nIGJlY2F1c2Ugd2Ugd29uJ3QgZG8gYW55dGhpbmcgd2l0aCBhbnkgb3RoZXIKKwkJIyBicmFuY2hlcyBmZXRjaGVkIHZpYSB0aGUgcmVmc3BlYy4KKwkJZW5zdXJlX3ZhbGlkX3JlZl9mb3JtYXQgIiQyIgorCisJCWNtZF9hZGRfcmVwb3NpdG9yeSAiJEAiCiAJZWxzZQotCSAgICBzYXkgImVycm9yOiBwYXJhbWV0ZXJzIHdlcmUgJyRAJyIKLQkgICAgZGllICJQcm92aWRlIGVpdGhlciBhIGNvbW1pdCBvciBhIHJlcG9zaXRvcnkgYW5kIGNvbW1pdC4iCisJCXNheSAiZXJyb3I6IHBhcmFtZXRlcnMgd2VyZSAnJEAnIgorCQlkaWUgIlByb3ZpZGUgZWl0aGVyIGEgY29tbWl0IG9yIGEgcmVwb3NpdG9yeSBhbmQgY29tbWl0LiIKIAlmaQogfQogCi1jbWRfYWRkX3JlcG9zaXRvcnkoKQoteworY21kX2FkZF9yZXBvc2l0b3J5ICgpIHsKIAllY2hvICJnaXQgZmV0Y2giICIkQCIKIAlyZXBvc2l0b3J5PSQxCiAJcmVmc3BlYz0kMgpAQCAtNTU2LDYwICs2MzksNjMgQEAKIAljbWRfYWRkX2NvbW1pdCAiJEAiCiB9CiAKLWNtZF9hZGRfY29tbWl0KCkKLXsKK2NtZF9hZGRfY29tbWl0ICgpIHsKIAlyZXZzPSQoZ2l0IHJldi1wYXJzZSAkZGVmYXVsdCAtLXJldnMtb25seSAiJEAiKSB8fCBleGl0ICQ/CiAJc2V0IC0tICRyZXZzCiAJcmV2PSIkMSIKLQkKKwogCWRlYnVnICJBZGRpbmcgJGRpciBhcyAnJHJldicuLi4iCiAJZ2l0IHJlYWQtdHJlZSAtLXByZWZpeD0iJGRpciIgJHJldiB8fCBleGl0ICQ/CiAJZ2l0IGNoZWNrb3V0IC0tICIkZGlyIiB8fCBleGl0ICQ/CiAJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSB8fCBleGl0ICQ/Ci0JCisKIAloZWFkcmV2PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8fCBleGl0ICQ/Ci0JaWYgWyAtbiAiJGhlYWRyZXYiIC1hICIkaGVhZHJldiIgIT0gIiRyZXYiIF07IHRoZW4KKwlpZiB0ZXN0IC1uICIkaGVhZHJldiIgJiYgdGVzdCAiJGhlYWRyZXYiICE9ICIkcmV2IgorCXRoZW4KIAkJaGVhZHA9Ii1wICRoZWFkcmV2IgogCWVsc2UKIAkJaGVhZHA9CiAJZmkKLQkKLQlpZiBbIC1uICIkc3F1YXNoIiBdOyB0aGVuCisKKwlpZiB0ZXN0IC1uICIkc3F1YXNoIgorCXRoZW4KIAkJcmV2PSQobmV3X3NxdWFzaF9jb21taXQgIiIgIiIgIiRyZXYiKSB8fCBleGl0ICQ/CiAJCWNvbW1pdD0kKGFkZF9zcXVhc2hlZF9tc2cgIiRyZXYiICIkZGlyIiB8Ci0JCQkgZ2l0IGNvbW1pdC10cmVlICR0cmVlICRoZWFkcCAtcCAiJHJldiIpIHx8IGV4aXQgJD8KKwkJCWdpdCBjb21taXQtdHJlZSAiJHRyZWUiICRoZWFkcCAtcCAiJHJldiIpIHx8IGV4aXQgJD8KIAllbHNlCiAJCXJldnA9JChwZWVsX2NvbW1pdHRpc2ggIiRyZXYiKSAmJgotCQljb21taXQ9JChhZGRfbXNnICIkZGlyIiAiJGhlYWRyZXYiICIkcmV2IiB8Ci0JCQkgZ2l0IGNvbW1pdC10cmVlICR0cmVlICRoZWFkcCAtcCAiJHJldnAiKSB8fCBleGl0ICQ/CisJCWNvbW1pdD0kKGFkZF9tc2cgIiRkaXIiICRoZWFkcmV2ICIkcmV2IiB8CisJCQlnaXQgY29tbWl0LXRyZWUgIiR0cmVlIiAkaGVhZHAgLXAgIiRyZXZwIikgfHwgZXhpdCAkPwogCWZpCiAJZ2l0IHJlc2V0ICIkY29tbWl0IiB8fCBleGl0ICQ/Ci0JCisKIAlzYXkgIkFkZGVkIGRpciAnJGRpciciCiB9CiAKLWNtZF9zcGxpdCgpCi17CitjbWRfc3BsaXQgKCkgewogCWRlYnVnICJTcGxpdHRpbmcgJGRpci4uLiIKIAljYWNoZV9zZXR1cCB8fCBleGl0ICQ/Ci0JCi0JaWYgWyAtbiAiJG9udG8iIF07IHRoZW4KKworCWlmIHRlc3QgLW4gIiRvbnRvIgorCXRoZW4KIAkJZGVidWcgIlJlYWRpbmcgaGlzdG9yeSBmb3IgLS1vbnRvPSRvbnRvLi4uIgogCQlnaXQgcmV2LWxpc3QgJG9udG8gfAotCQl3aGlsZSByZWFkIHJldjsgZG8KKwkJd2hpbGUgcmVhZCByZXYKKwkJZG8KIAkJCSMgdGhlICdvbnRvJyBoaXN0b3J5IGlzIGFscmVhZHkganVzdCB0aGUgc3ViZGlyLCBzbwogCQkJIyBhbnkgcGFyZW50IHdlIGZpbmQgdGhlcmUgY2FuIGJlIHVzZWQgdmVyYmF0aW0KIAkJCWRlYnVnICIgIGNhY2hlOiAkcmV2IgotCQkJY2FjaGVfc2V0ICRyZXYgJHJldgorCQkJY2FjaGVfc2V0ICIkcmV2IiAiJHJldiIKIAkJZG9uZQogCWZpCi0JCi0JaWYgWyAtbiAiJGlnbm9yZV9qb2lucyIgXTsgdGhlbgorCisJaWYgdGVzdCAtbiAiJGlnbm9yZV9qb2lucyIKKwl0aGVuCiAJCXVucmV2cz0KIAllbHNlCiAJCXVucmV2cz0iJChmaW5kX2V4aXN0aW5nX3NwbGl0cyAiJGRpciIgIiRyZXZzIikiCiAJZmkKLQkKKwogCSMgV2UgY2FuJ3QgcmVzdHJpY3QgcmV2LWxpc3QgdG8gb25seSAkZGlyIGhlcmUsIGJlY2F1c2Ugc29tZSBvZiBvdXIKIAkjIHBhcmVudHMgaGF2ZSB0aGUgJGRpciBjb250ZW50cyB0aGUgcm9vdCwgYW5kIHRob3NlIHdvbid0IG1hdGNoLgogCSMgKGFuZCByZXYtbGlzdCAtLWZvbGxvdyBkb2Vzbid0IHNlZW0gdG8gc29sdmUgdGhpcykKQEAgLTYxOCwxMiArNzA0LDE0IEBACiAJcmV2Y291bnQ9MAogCWNyZWF0ZWNvdW50PTAKIAlldmFsICIkZ3JsIiB8Ci0Jd2hpbGUgcmVhZCByZXYgcGFyZW50czsgZG8KKwl3aGlsZSByZWFkIHJldiBwYXJlbnRzCisJZG8KIAkJcmV2Y291bnQ9JCgoJHJldmNvdW50ICsgMSkpCiAJCXByb2dyZXNzICIkcmV2Y291bnQvJHJldm1heCAoJGNyZWF0ZWNvdW50KSIKIAkJZGVidWcgIlByb2Nlc3NpbmcgY29tbWl0OiAkcmV2IgotCQlleGlzdHM9JChjYWNoZV9nZXQgJHJldikKLQkJaWYgWyAtbiAiJGV4aXN0cyIgXTsgdGhlbgorCQlleGlzdHM9JChjYWNoZV9nZXQgIiRyZXYiKQorCQlpZiB0ZXN0IC1uICIkZXhpc3RzIgorCQl0aGVuCiAJCQlkZWJ1ZyAiICBwcmlvcjogJGV4aXN0cyIKIAkJCWNvbnRpbnVlCiAJCWZpCkBAIC02MzEsNzYgKzcxOSw4OSBAQAogCQlkZWJ1ZyAiICBwYXJlbnRzOiAkcGFyZW50cyIKIAkJbmV3cGFyZW50cz0kKGNhY2hlX2dldCAkcGFyZW50cykKIAkJZGVidWcgIiAgbmV3cGFyZW50czogJG5ld3BhcmVudHMiCi0JCQotCQl0cmVlPSQoc3VidHJlZV9mb3JfY29tbWl0ICRyZXYgIiRkaXIiKQorCisJCXRyZWU9JChzdWJ0cmVlX2Zvcl9jb21taXQgIiRyZXYiICIkZGlyIikKIAkJZGVidWcgIiAgdHJlZSBpczogJHRyZWUiCiAKIAkJY2hlY2tfcGFyZW50cyAkcGFyZW50cwotCQkKKwogCQkjIHVnbHkuICBpcyB0aGVyZSBubyBiZXR0ZXIgd2F5IHRvIHRlbGwgaWYgdGhpcyBpcyBhIHN1YnRyZWUKIAkJIyB2cy4gYSBtYWlubGluZSBjb21taXQ/ICBEb2VzIGl0IG1hdHRlcj8KLQkJaWYgWyAteiAkdHJlZSBdOyB0aGVuCi0JCQlzZXRfbm90cmVlICRyZXYKLQkJCWlmIFsgLW4gIiRuZXdwYXJlbnRzIiBdOyB0aGVuCi0JCQkJY2FjaGVfc2V0ICRyZXYgJHJldgorCQlpZiB0ZXN0IC16ICIkdHJlZSIKKwkJdGhlbgorCQkJc2V0X25vdHJlZSAiJHJldiIKKwkJCWlmIHRlc3QgLW4gIiRuZXdwYXJlbnRzIgorCQkJdGhlbgorCQkJCWNhY2hlX3NldCAiJHJldiIgIiRyZXYiCiAJCQlmaQogCQkJY29udGludWUKIAkJZmkKIAogCQluZXdyZXY9JChjb3B5X29yX3NraXAgIiRyZXYiICIkdHJlZSIgIiRuZXdwYXJlbnRzIikgfHwgZXhpdCAkPwogCQlkZWJ1ZyAiICBuZXdyZXYgaXM6ICRuZXdyZXYiCi0JCWNhY2hlX3NldCAkcmV2ICRuZXdyZXYKLQkJY2FjaGVfc2V0IGxhdGVzdF9uZXcgJG5ld3JldgotCQljYWNoZV9zZXQgbGF0ZXN0X29sZCAkcmV2CisJCWNhY2hlX3NldCAiJHJldiIgIiRuZXdyZXYiCisJCWNhY2hlX3NldCBsYXRlc3RfbmV3ICIkbmV3cmV2IgorCQljYWNoZV9zZXQgbGF0ZXN0X29sZCAiJHJldiIKIAlkb25lIHx8IGV4aXQgJD8KKwogCWxhdGVzdF9uZXc9JChjYWNoZV9nZXQgbGF0ZXN0X25ldykKLQlpZiBbIC16ICIkbGF0ZXN0X25ldyIgXTsgdGhlbgorCWlmIHRlc3QgLXogIiRsYXRlc3RfbmV3IgorCXRoZW4KIAkJZGllICJObyBuZXcgcmV2aXNpb25zIHdlcmUgZm91bmQiCiAJZmkKLQkKLQlpZiBbIC1uICIkcmVqb2luIiBdOyB0aGVuCisKKwlpZiB0ZXN0IC1uICIkcmVqb2luIgorCXRoZW4KIAkJZGVidWcgIk1lcmdpbmcgc3BsaXQgYnJhbmNoIGludG8gSEVBRC4uLiIKIAkJbGF0ZXN0X29sZD0kKGNhY2hlX2dldCBsYXRlc3Rfb2xkKQogCQlnaXQgbWVyZ2UgLXMgb3VycyBcCi0JCQktbSAiJChyZWpvaW5fbXNnICIkZGlyIiAkbGF0ZXN0X29sZCAkbGF0ZXN0X25ldykiIFwKLQkJCSRsYXRlc3RfbmV3ID4mMiB8fCBleGl0ICQ/CisJCQktLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgXAorCQkJLW0gIiQocmVqb2luX21zZyAiJGRpciIgIiRsYXRlc3Rfb2xkIiAiJGxhdGVzdF9uZXciKSIgXAorCQkJIiRsYXRlc3RfbmV3IiA+JjIgfHwgZXhpdCAkPwogCWZpCi0JaWYgWyAtbiAiJGJyYW5jaCIgXTsgdGhlbgotCQlpZiByZXZfZXhpc3RzICJyZWZzL2hlYWRzLyRicmFuY2giOyB0aGVuCi0JCQlpZiAhIHJldl9pc19kZXNjZW5kYW50X29mX2JyYW5jaCAkbGF0ZXN0X25ldyAkYnJhbmNoOyB0aGVuCisJaWYgdGVzdCAtbiAiJGJyYW5jaCIKKwl0aGVuCisJCWlmIHJldl9leGlzdHMgInJlZnMvaGVhZHMvJGJyYW5jaCIKKwkJdGhlbgorCQkJaWYgISByZXZfaXNfZGVzY2VuZGFudF9vZl9icmFuY2ggIiRsYXRlc3RfbmV3IiAiJGJyYW5jaCIKKwkJCXRoZW4KIAkJCQlkaWUgIkJyYW5jaCAnJGJyYW5jaCcgaXMgbm90IGFuIGFuY2VzdG9yIG9mIGNvbW1pdCAnJGxhdGVzdF9uZXcnLiIKIAkJCWZpCiAJCQlhY3Rpb249J1VwZGF0ZWQnCiAJCWVsc2UKIAkJCWFjdGlvbj0nQ3JlYXRlZCcKIAkJZmkKLQkJZ2l0IHVwZGF0ZS1yZWYgLW0gJ3N1YnRyZWUgc3BsaXQnICJyZWZzL2hlYWRzLyRicmFuY2giICRsYXRlc3RfbmV3IHx8IGV4aXQgJD8KKwkJZ2l0IHVwZGF0ZS1yZWYgLW0gJ3N1YnRyZWUgc3BsaXQnIFwKKwkJCSJyZWZzL2hlYWRzLyRicmFuY2giICIkbGF0ZXN0X25ldyIgfHwgZXhpdCAkPwogCQlzYXkgIiRhY3Rpb24gYnJhbmNoICckYnJhbmNoJyIKIAlmaQotCWVjaG8gJGxhdGVzdF9uZXcKKwllY2hvICIkbGF0ZXN0X25ldyIKIAlleGl0IDAKIH0KIAotY21kX21lcmdlKCkKLXsKK2NtZF9tZXJnZSAoKSB7CiAJcmV2cz0kKGdpdCByZXYtcGFyc2UgJGRlZmF1bHQgLS1yZXZzLW9ubHkgIiRAIikgfHwgZXhpdCAkPwogCWVuc3VyZV9jbGVhbgotCQorCiAJc2V0IC0tICRyZXZzCi0JaWYgWyAkIyAtbmUgMSBdOyB0aGVuCisJaWYgdGVzdCAkIyAtbmUgMQorCXRoZW4KIAkJZGllICJZb3UgbXVzdCBwcm92aWRlIGV4YWN0bHkgb25lIHJldmlzaW9uLiAgR290OiAnJHJldnMnIgogCWZpCiAJcmV2PSIkMSIKLQkKLQlpZiBbIC1uICIkc3F1YXNoIiBdOyB0aGVuCisKKwlpZiB0ZXN0IC1uICIkc3F1YXNoIgorCXRoZW4KIAkJZmlyc3Rfc3BsaXQ9IiQoZmluZF9sYXRlc3Rfc3F1YXNoICIkZGlyIikiCi0JCWlmIFsgLXogIiRmaXJzdF9zcGxpdCIgXTsgdGhlbgorCQlpZiB0ZXN0IC16ICIkZmlyc3Rfc3BsaXQiCisJCXRoZW4KIAkJCWRpZSAiQ2FuJ3Qgc3F1YXNoLW1lcmdlOiAnJGRpcicgd2FzIG5ldmVyIGFkZGVkLiIKIAkJZmkKIAkJc2V0ICRmaXJzdF9zcGxpdAogCQlvbGQ9JDEKIAkJc3ViPSQyCi0JCWlmIFsgIiRzdWIiID0gIiRyZXYiIF07IHRoZW4KKwkJaWYgdGVzdCAiJHN1YiIgPSAiJHJldiIKKwkJdGhlbgogCQkJc2F5ICJTdWJ0cmVlIGlzIGFscmVhZHkgYXQgY29tbWl0ICRyZXYuIgogCQkJZXhpdCAwCiAJCWZpCkBAIC03MTAsMjUgKzgxMSwyOSBAQAogCWZpCiAKIAl2ZXJzaW9uPSQoZ2l0IHZlcnNpb24pCi0JaWYgWyAiJHZlcnNpb24iIFw8ICJnaXQgdmVyc2lvbiAxLjciIF07IHRoZW4KLQkJaWYgWyAtbiAiJG1lc3NhZ2UiIF07IHRoZW4KLQkJCWdpdCBtZXJnZSAtcyBzdWJ0cmVlIC0tbWVzc2FnZT0iJG1lc3NhZ2UiICRyZXYKKwlpZiB0ZXN0ICIkdmVyc2lvbiIgXDwgImdpdCB2ZXJzaW9uIDEuNyIKKwl0aGVuCisJCWlmIHRlc3QgLW4gIiRtZXNzYWdlIgorCQl0aGVuCisJCQlnaXQgbWVyZ2UgLXMgc3VidHJlZSAtLW1lc3NhZ2U9IiRtZXNzYWdlIiAiJHJldiIKIAkJZWxzZQotCQkJZ2l0IG1lcmdlIC1zIHN1YnRyZWUgJHJldgorCQkJZ2l0IG1lcmdlIC1zIHN1YnRyZWUgIiRyZXYiCiAJCWZpCiAJZWxzZQotCQlpZiBbIC1uICIkbWVzc2FnZSIgXTsgdGhlbgotCQkJZ2l0IG1lcmdlIC1Yc3VidHJlZT0iJHByZWZpeCIgLS1tZXNzYWdlPSIkbWVzc2FnZSIgJHJldgorCQlpZiB0ZXN0IC1uICIkbWVzc2FnZSIKKwkJdGhlbgorCQkJZ2l0IG1lcmdlIC1Yc3VidHJlZT0iJHByZWZpeCIgXAorCQkJCS0tbWVzc2FnZT0iJG1lc3NhZ2UiICIkcmV2IgogCQllbHNlCiAJCQlnaXQgbWVyZ2UgLVhzdWJ0cmVlPSIkcHJlZml4IiAkcmV2CiAJCWZpCiAJZmkKIH0KIAotY21kX3B1bGwoKQotewotCWlmIFsgJCMgLW5lIDIgXTsgdGhlbgotCSAgICBkaWUgIllvdSBtdXN0IHByb3ZpZGUgPHJlcG9zaXRvcnk+IDxyZWY+IgorY21kX3B1bGwgKCkgeworCWlmIHRlc3QgJCMgLW5lIDIKKwl0aGVuCisJCWRpZSAiWW91IG11c3QgcHJvdmlkZSA8cmVwb3NpdG9yeT4gPHJlZj4iCiAJZmkKIAllbnN1cmVfY2xlYW4KIAllbnN1cmVfdmFsaWRfcmVmX2Zvcm1hdCAiJDIiCkBAIC03MzgsMjAgKzg0MywyMSBAQAogCWNtZF9tZXJnZSAiJEAiCiB9CiAKLWNtZF9wdXNoKCkKLXsKLQlpZiBbICQjIC1uZSAyIF07IHRoZW4KLQkgICAgZGllICJZb3UgbXVzdCBwcm92aWRlIDxyZXBvc2l0b3J5PiA8cmVmPiIKK2NtZF9wdXNoICgpIHsKKwlpZiB0ZXN0ICQjIC1uZSAyCisJdGhlbgorCQlkaWUgIllvdSBtdXN0IHByb3ZpZGUgPHJlcG9zaXRvcnk+IDxyZWY+IgogCWZpCiAJZW5zdXJlX3ZhbGlkX3JlZl9mb3JtYXQgIiQyIgotCWlmIFsgLWUgIiRkaXIiIF07IHRoZW4KLQkgICAgcmVwb3NpdG9yeT0kMQotCSAgICByZWZzcGVjPSQyCi0JICAgIGVjaG8gImdpdCBwdXNoIHVzaW5nOiAiICRyZXBvc2l0b3J5ICRyZWZzcGVjCi0JICAgIGxvY2FscmV2PSQoZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9IiRwcmVmaXgiKSB8fCBkaWUKLQkgICAgZ2l0IHB1c2ggIiRyZXBvc2l0b3J5IiAkbG9jYWxyZXY6cmVmcy9oZWFkcy8kcmVmc3BlYworCWlmIHRlc3QgLWUgIiRkaXIiCisJdGhlbgorCQlyZXBvc2l0b3J5PSQxCisJCXJlZnNwZWM9JDIKKwkJZWNobyAiZ2l0IHB1c2ggdXNpbmc6ICIgIiRyZXBvc2l0b3J5IiAiJHJlZnNwZWMiCisJCWxvY2FscmV2PSQoZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9IiRwcmVmaXgiKSB8fCBkaWUKKwkJZ2l0IHB1c2ggIiRyZXBvc2l0b3J5IiAiJGxvY2FscmV2IjoicmVmcy9oZWFkcy8kcmVmc3BlYyIKIAllbHNlCi0JICAgIGRpZSAiJyRkaXInIG11c3QgYWxyZWFkeSBleGlzdC4gVHJ5ICdnaXQgc3VidHJlZSBhZGQnLiIKKwkJZGllICInJGRpcicgbXVzdCBhbHJlYWR5IGV4aXN0LiBUcnkgJ2dpdCBzdWJ0cmVlIGFkZCcuIgogCWZpCiB9CiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS90L3Q3OTAwLXN1YnRyZWUuc2ggYi9jb250cmliL3N1YnRyZWUvdC90NzkwMC1zdWJ0cmVlLnNoCmluZGV4IDNiZjk2YTkuLjNjODdlYmEgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvc3VidHJlZS90L3Q3OTAwLXN1YnRyZWUuc2gKKysrIGIvY29udHJpYi9zdWJ0cmVlL3QvdDc5MDAtc3VidHJlZS5zaApAQCAtMTYsMTYgKzE2LDE2IEBACiAKIHN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbygpCiB7Ci0JdGVzdF9jcmVhdGVfcmVwbyAiJDEiCisJdGVzdF9jcmVhdGVfcmVwbyAiJDEiICYmCiAJKAotCQljZCAkMQorCQljZCAiJDEiICYmCiAJCWdpdCBjb25maWcgbG9nLmRhdGUgcmVsYXRpdmUKIAkpCiB9CiAKIGNyZWF0ZSgpCiB7Ci0JZWNobyAiJDEiID4iJDEiCisJZWNobyAiJDEiID4iJDEiICYmCiAJZ2l0IGFkZCAiJDEiCiB9CiAKQEAgLTcxLDEyICs3MSwxMiBAQAogfQogCiB0ZXN0X2NyZWF0ZV9jb21taXQoKSAoCi0JcmVwbz0kMQotCWNvbW1pdD0kMgotCWNkICIkcmVwbyIKLQlta2RpciAtcCAkKGRpcm5hbWUgIiRjb21taXQiKSBcCisJcmVwbz0kMSAmJgorCWNvbW1pdD0kMiAmJgorCWNkICIkcmVwbyIgJiYKKwlta2RpciAtcCAiJChkaXJuYW1lICIkY29tbWl0IikiIFwKIAl8fCBlcnJvciAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yIGNvbW1pdCIKLQllY2hvICIkY29tbWl0IiA+IiRjb21taXQiCisJZWNobyAiJGNvbW1pdCIgPiIkY29tbWl0IiAmJgogCWdpdCBhZGQgIiRjb21taXQiIHx8IGVycm9yICJDb3VsZCBub3QgYWRkIGNvbW1pdCIKIAlnaXQgY29tbWl0IC1tICIkY29tbWl0IiB8fCBlcnJvciAiQ291bGQgbm90IGNvbW1pdCIKICkKQEAgLTM0Nyw2ICszNDcsMjIgQEAKICAnCiAKIG5leHRfdGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgc3ViIGRpci8gd2l0aCAtLXJlam9pbiBmcm9tIHNjcmF0Y2gnICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCW1rZGlyICJzdWIgZGlyIiAmJgorCQllY2hvIGZpbGUgPiJzdWIgZGlyIi9maWxlICYmCisJCWdpdCBhZGQgInN1YiBkaXIvZmlsZSIgJiYKKwkJZ2l0IGNvbW1pdCAtbSJzdWIgZGlyIGZpbGUiICYmCisJCXNwbGl0X2hhc2g9JChnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1yZWpvaW4pICYmCisJCWdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLXJlam9pbiAmJgorCQljaGVja19lcXVhbCAiJChsYXN0X2NvbW1pdF9tZXNzYWdlKSIgIlNwbGl0ICdcJydzdWIgZGlyLydcJycgaW50byBjb21taXQgJ1wnJyRzcGxpdF9oYXNoJ1wnJyIKKwkpCisgJworCituZXh0X3Rlc3QKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0IHN1YiBkaXIvIHdpdGggLS1yZWpvaW4gYW5kIC0tbWVzc2FnZScgJwogCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKIAlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCkBAIC05MzIsNyArOTQ4LDcgQEAKIAogCQkjIGFsc28gdGVzdCB0aGF0IHdlIHN0aWxsIGNhbiBzcGxpdCBvdXQgYW4gZW50aXJlbHkgbmV3IHN1YnRyZWUKIAkJIyBpZiB0aGUgcGFyZW50IG9mIHRoZSBmaXJzdCBjb21taXQgaW4gdGhlIHRyZWUgaXMgbm90IGVtcHR5LAotCQkjIHRoZW4gdGhlIG5ldyBzdWJ0cmVlIGhhcyBhY2NpZGVudGx5IGJlZW4gYXR0YWNoZWQgdG8gc29tZXRoaW5nCisJCSMgdGhlbiB0aGUgbmV3IHN1YnRyZWUgaGFzIGFjY2lkZW50YWxseSBiZWVuIGF0dGFjaGVkIHRvIHNvbWV0aGluZwogCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpcjIiIC0tYnJhbmNoIHN1YnByb2oyLWJyICYmCiAJCWNoZWNrX2VxdWFsICIkKGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVQIC0xIHN1YnByb2oyLWJyKSIgIiIKIAkpCmRpZmYgLS1naXQgYS9jb252ZXJ0LmMgYi9jb252ZXJ0LmMKaW5kZXggYjE2MTRiZi4uNjdkNjliNSAxMDA2NDQKLS0tIGEvY29udmVydC5jCisrKyBiL2NvbnZlcnQuYwpAQCAtMTc2LDcgKzE3Niw5IEBACiAJCXJldHVybiBFT0xfTEY7CiAJY2FzZSBDUkxGX1VOREVGSU5FRDoKIAljYXNlIENSTEZfQVVUT19DUkxGOgorCQlyZXR1cm4gRU9MX0NSTEY7CiAJY2FzZSBDUkxGX0FVVE9fSU5QVVQ6CisJCXJldHVybiBFT0xfTEY7CiAJY2FzZSBDUkxGX1RFWFQ6CiAJY2FzZSBDUkxGX0FVVE86CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwpAQCAtMjU0LDE3ICsyNTYsMTUgQEAKIAlpZiAoY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPIHx8IGNybGZfYWN0aW9uID09IENSTEZfQVVUT19JTlBVVCB8fCBjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE9fQ1JMRikgewogCQlpZiAoY29udmVydF9pc19iaW5hcnkobGVuLCAmc3RhdHMpKQogCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKGNybGZfYWN0aW9uID09IENSTEZfQVVUT19JTlBVVCB8fCBjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE9fQ1JMRikgewotCQkJLyoKLQkJCSAqIElmIHRoZSBmaWxlIGluIHRoZSBpbmRleCBoYXMgYW55IENSIGluIGl0LCBkbyBub3QgY29udmVydC4KLQkJCSAqIFRoaXMgaXMgdGhlIG5ldyBzYWZlciBhdXRvY3JsZiBoYW5kbGluZy4KLQkJCSAqLwotCQkJaWYgKGhhc19jcl9pbl9pbmRleChwYXRoKSkKLQkJCQlyZXR1cm4gMDsKLQkJfQorCQkvKgorCQkgKiBJZiB0aGUgZmlsZSBpbiB0aGUgaW5kZXggaGFzIGFueSBDUiBpbiBpdCwgZG8gbm90IGNvbnZlcnQuCisJCSAqIFRoaXMgaXMgdGhlIG5ldyBzYWZlciBhdXRvY3JsZiBoYW5kbGluZy4KKwkJICovCisJCWlmIChjaGVja3NhZmUgPT0gU0FGRV9DUkxGX1JFTk9STUFMSVpFKQorCQkJY2hlY2tzYWZlID0gU0FGRV9DUkxGX0ZBTFNFOworCQllbHNlIGlmIChoYXNfY3JfaW5faW5kZXgocGF0aCkpCisJCQlyZXR1cm4gMDsKIAl9Ci0KIAljaGVja19zYWZlX2NybGYocGF0aCwgY3JsZl9hY3Rpb24sICZzdGF0cywgY2hlY2tzYWZlKTsKIAogCS8qIE9wdGltaXphdGlvbjogTm8gQ1JMRj8gTm90aGluZyB0byBjb252ZXJ0LCByZWdhcmRsZXNzLiAqLwpAQCAtMzIwLDEyICszMjAsMTAgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPIHx8IGNybGZfYWN0aW9uID09IENSTEZfQVVUT19JTlBVVCB8fCBjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE9fQ1JMRikgewotCQlpZiAoY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPX0lOUFVUIHx8IGNybGZfYWN0aW9uID09IENSTEZfQVVUT19DUkxGKSB7Ci0JCQkvKiBJZiB3ZSBoYXZlIGFueSBDUiBvciBDUkxGIGxpbmUgZW5kaW5ncywgd2UgZG8gbm90IHRvdWNoIGl0ICovCi0JCQkvKiBUaGlzIGlzIHRoZSBuZXcgc2FmZXIgYXV0b2NybGYtaGFuZGxpbmcgKi8KLQkJCWlmIChzdGF0cy5sb25lY3IgfHwgc3RhdHMuY3JsZiApCi0JCQkJcmV0dXJuIDA7Ci0JCX0KKwkJLyogSWYgd2UgaGF2ZSBhbnkgQ1Igb3IgQ1JMRiBsaW5lIGVuZGluZ3MsIHdlIGRvIG5vdCB0b3VjaCBpdCAqLworCQkvKiBUaGlzIGlzIHRoZSBuZXcgc2FmZXIgYXV0b2NybGYtaGFuZGxpbmcgKi8KKwkJaWYgKHN0YXRzLmxvbmVjciB8fCBzdGF0cy5jcmxmICkKKwkJCXJldHVybiAwOwogCiAJCWlmIChjb252ZXJ0X2lzX2JpbmFyeShsZW4sICZzdGF0cykpCiAJCQlyZXR1cm4gMDsKQEAgLTc4Niw3ICs3ODQsMTEgQEAKIAkJY2EtPmRydiA9IGdpdF9wYXRoX2NoZWNrX2NvbnZlcnQoY2NoZWNrICsgMik7CiAJCWlmIChjYS0+Y3JsZl9hY3Rpb24gIT0gQ1JMRl9CSU5BUlkpIHsKIAkJCWVudW0gZW9sIGVvbF9hdHRyID0gZ2l0X3BhdGhfY2hlY2tfZW9sKGNjaGVjayArIDMpOwotCQkJaWYgKGVvbF9hdHRyID09IEVPTF9MRikKKwkJCWlmIChjYS0+Y3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPICYmIGVvbF9hdHRyID09IEVPTF9MRikKKwkJCQljYS0+Y3JsZl9hY3Rpb24gPSBDUkxGX0FVVE9fSU5QVVQ7CisJCQllbHNlIGlmIChjYS0+Y3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPICYmIGVvbF9hdHRyID09IEVPTF9DUkxGKQorCQkJCWNhLT5jcmxmX2FjdGlvbiA9IENSTEZfQVVUT19DUkxGOworCQkJZWxzZSBpZiAoZW9sX2F0dHIgPT0gRU9MX0xGKQogCQkJCWNhLT5jcmxmX2FjdGlvbiA9IENSTEZfVEVYVF9JTlBVVDsKIAkJCWVsc2UgaWYgKGVvbF9hdHRyID09IEVPTF9DUkxGKQogCQkJCWNhLT5jcmxmX2FjdGlvbiA9IENSTEZfVEVYVF9DUkxGOwpAQCAtODQ1LDkgKzg0Nyw5IEBACiAJY2FzZSBDUkxGX0FVVE86CiAJCXJldHVybiAidGV4dD1hdXRvIjsKIAljYXNlIENSTEZfQVVUT19DUkxGOgotCQlyZXR1cm4gInRleHQ9YXV0byBlb2w9Y3JsZiI7IC8qIFRoaXMgaXMgbm90IHN1cHBvcnRlZCB5ZXQgKi8KKwkJcmV0dXJuICJ0ZXh0PWF1dG8gZW9sPWNybGYiOwogCWNhc2UgQ1JMRl9BVVRPX0lOUFVUOgotCQlyZXR1cm4gInRleHQ9YXV0byBlb2w9bGYiOyAvKiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJCXJldHVybiAidGV4dD1hdXRvIGVvbD1sZiI7CiAJfQogCXJldHVybiAiIjsKIH0KQEAgLTk0OSw3ICs5NTEsNyBAQAogCQlzcmMgPSBkc3QtPmJ1ZjsKIAkJbGVuID0gZHN0LT5sZW47CiAJfQotCXJldHVybiByZXQgfCBjb252ZXJ0X3RvX2dpdChwYXRoLCBzcmMsIGxlbiwgZHN0LCBTQUZFX0NSTEZfRkFMU0UpOworCXJldHVybiByZXQgfCBjb252ZXJ0X3RvX2dpdChwYXRoLCBzcmMsIGxlbiwgZHN0LCBTQUZFX0NSTEZfUkVOT1JNQUxJWkUpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2NvbnZlcnQuaCBiL2NvbnZlcnQuaAppbmRleCBjY2Y0MzZiLi44Mjg3MWExIDEwMDY0NAotLS0gYS9jb252ZXJ0LmgKKysrIGIvY29udmVydC5oCkBAIC03LDcgKzcsOCBAQAogZW51bSBzYWZlX2NybGYgewogCVNBRkVfQ1JMRl9GQUxTRSA9IDAsCiAJU0FGRV9DUkxGX0ZBSUwgPSAxLAotCVNBRkVfQ1JMRl9XQVJOID0gMgorCVNBRkVfQ1JMRl9XQVJOID0gMiwKKwlTQUZFX0NSTEZfUkVOT1JNQUxJWkUgPSAzCiB9OwogCiBleHRlcm4gZW51bSBzYWZlX2NybGYgc2FmZV9jcmxmOwpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmMgYi9jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYwppbmRleCAxZjE0ZDU2Li4xZTVmMTZhIDEwMDY0NAotLS0gYS9jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYworKysgYi9jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJZnJlZShwYXRoX2NvcHkpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCWNvbnN0IGNoYXIgKnNvY2tldF9wYXRoOwogCWludCBpZ25vcmVfc2lnaHVwID0gMDsKZGlmZiAtLWdpdCBhL2NyZWRlbnRpYWwtY2FjaGUuYyBiL2NyZWRlbnRpYWwtY2FjaGUuYwppbmRleCA4NmUyMWRlLi5jYzhhNmVlIDEwMDY0NAotLS0gYS9jcmVkZW50aWFsLWNhY2hlLmMKKysrIGIvY3JlZGVudGlhbC1jYWNoZS5jCkBAIC04Myw3ICs4Myw3IEBACiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJY2hhciAqc29ja2V0X3BhdGggPSBOVUxMOwogCWludCB0aW1lb3V0ID0gOTAwOwpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC1zdG9yZS5jIGIvY3JlZGVudGlhbC1zdG9yZS5jCmluZGV4IDU3MTQxNjcuLjU1Y2ExYjEgMTAwNjQ0Ci0tLSBhL2NyZWRlbnRpYWwtc3RvcmUuYworKysgYi9jcmVkZW50aWFsLXN0b3JlLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQkJcmV0dXJuOyAvKiBGb3VuZCBjcmVkZW50aWFsICovCiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlW10gPSB7CiAJCSJnaXQgY3JlZGVudGlhbC1zdG9yZSBbPG9wdGlvbnM+XSA8YWN0aW9uPiIsCmRpZmYgLS1naXQgYS9kYWVtb24uYyBiL2RhZW1vbi5jCmluZGV4IDhkNDVjMzMuLjQyNWFhZDAgMTAwNjQ0Ci0tLSBhL2RhZW1vbi5jCisrKyBiL2RhZW1vbi5jCkBAIC0xLDYgKzEsNSBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAicGt0LWxpbmUuaCIKLSNpbmNsdWRlICJleGVjX2NtZC5oIgogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAjaW5jbHVkZSAic3RyYnVmLmgiCiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKQEAgLTMyLDcgKzMxLDcgQEAKICIgICAgICAgICAgIFs8ZGlyZWN0b3J5Pi4uLl0iOwogCiAvKiBMaXN0IG9mIGFjY2VwdGFibGUgcGF0aG5hbWUgcHJlZml4ZXMgKi8KLXN0YXRpYyBjaGFyICoqb2tfcGF0aHM7CitzdGF0aWMgY29uc3QgY2hhciAqKm9rX3BhdGhzOwogc3RhdGljIGludCBzdHJpY3RfcGF0aHM7CiAKIC8qIElmIHRoaXMgaXMgc2V0LCBnaXQtZGFlbW9uLWV4cG9ydC1vayBpcyBub3QgcmVxdWlyZWQgKi8KQEAgLTI0MCw3ICsyMzksNyBAQAogCX0KIAogCWlmICggb2tfcGF0aHMgJiYgKm9rX3BhdGhzICkgewotCQljaGFyICoqcHA7CisJCWNvbnN0IGNoYXIgKipwcDsKIAkJaW50IHBhdGhsZW4gPSBzdHJsZW4ocGF0aCk7CiAKIAkJLyogVGhlIHZhbGlkYXRpb24gaXMgZG9uZSBvbiB0aGUgcGF0aHMgYWZ0ZXIgZW50ZXJfcmVwbwpAQCAtNjY5LDYgKzY2OCwxNyBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZoaS0+dGNwX3BvcnQpOwogfQogCitzdGF0aWMgdm9pZCBzZXRfa2VlcF9hbGl2ZShpbnQgc29ja2ZkKQoreworCWludCBrYSA9IDE7CisKKwlpZiAoc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwgJmthLCBzaXplb2Yoa2EpKSA8IDApIHsKKwkJaWYgKGVycm5vICE9IEVOT1RTT0NLKQorCQkJbG9nZXJyb3IoInVuYWJsZSB0byBzZXQgU09fS0VFUEFMSVZFIG9uIHNvY2tldDogJXMiLAorCQkJCXN0cmVycm9yKGVycm5vKSk7CisJfQorfQorCiBzdGF0aWMgaW50IGV4ZWN1dGUodm9pZCkKIHsKIAljaGFyICpsaW5lID0gcGFja2V0X2J1ZmZlcjsKQEAgLTY4MSw2ICs2OTEsNyBAQAogCWlmIChhZGRyKQogCQlsb2dpbmZvKCJDb25uZWN0aW9uIGZyb20gJXM6JXMiLCBhZGRyLCBwb3J0KTsKIAorCXNldF9rZWVwX2FsaXZlKDApOwogCWFsYXJtKGluaXRfdGltZW91dCA/IGluaXRfdGltZW91dCA6IHRpbWVvdXQpOwogCXBrdGxlbiA9IHBhY2tldF9yZWFkKDAsIE5VTEwsIE5VTEwsIHBhY2tldF9idWZmZXIsIHNpemVvZihwYWNrZXRfYnVmZmVyKSwgMCk7CiAJYWxhcm0oMCk7CkBAIC05NTEsNiArOTYyLDggQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJc2V0X2tlZXBfYWxpdmUoc29ja2ZkKTsKKwogCQlpZiAoYmluZChzb2NrZmQsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSB7CiAJCQlsb2dlcnJvcigiQ291bGQgbm90IGJpbmQgdG8gJXM6ICVzIiwKIAkJCQkgaXAyc3RyKGFpLT5haV9mYW1pbHksIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiksCkBAIC0xMDEwLDYgKzEwMjMsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlzZXRfa2VlcF9hbGl2ZShzb2NrZmQpOworCiAJaWYgKCBiaW5kKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZiBzaW4pIDwgMCApIHsKIAkJbG9nZXJyb3IoIkNvdWxkIG5vdCBiaW5kIHRvICVzOiAlcyIsCiAJCQkgaXAyc3RyKEFGX0lORVQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc2luKSksCkBAIC0xMTc4LDcgKzExOTMsNyBAQAogCXJldHVybiBzZXJ2aWNlX2xvb3AoJnNvY2tsaXN0KTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlpbnQgbGlzdGVuX3BvcnQgPSAwOwogCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ZW5fYWRkciA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CkBAIC0xMTg4LDEyICsxMjAzLDggQEAKIAlzdHJ1Y3QgY3JlZGVudGlhbHMgKmNyZWQgPSBOVUxMOwogCWludCBpOwogCi0JZ2l0X3NldHVwX2dldHRleHQoKTsKLQotCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7Ci0KIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCWNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CiAJCWNvbnN0IGNoYXIgKnY7CiAKIAkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tbGlzdGVuPSIsICZ2KSkgewpAQCAtMTM2Nyw4ICsxMzc4LDcgQEAKIAlpZiAoZGV0YWNoKSB7CiAJCWlmIChkYWVtb25pemUoKSkKIAkJCWRpZSgiLS1kZXRhY2ggbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7Ci0JfSBlbHNlCi0JCXNhbml0aXplX3N0ZGZkcygpOworCX0KIAogCWlmIChwaWRfZmlsZSkKIAkJd3JpdGVfZmlsZShwaWRfZmlsZSwgIiUiUFJJdU1BWCwgKHVpbnRtYXhfdCkgZ2V0cGlkKCkpOwpkaWZmIC0tZ2l0IGEvZGF0ZS5jIGIvZGF0ZS5jCmluZGV4IDdjOWY3NjkuLmE5OTYzMzEgMTAwNjQ0Ci0tLSBhL2RhdGUuYworKysgYi9kYXRlLmMKQEAgLTc0LDYgKzc0LDggQEAKIAlsb2NhbHRpbWVfcigmdCwgJnRtKTsKIAl0X2xvY2FsID0gdG1fdG9fdGltZV90KCZ0bSk7CiAKKwlpZiAodF9sb2NhbCA9PSAtMSkKKwkJcmV0dXJuIDA7IC8qIGVycm9yOyBqdXN0IHVzZSArMDAwMCAqLwogCWlmICh0X2xvY2FsIDwgdCkgewogCQllYXN0d2VzdCA9IC0xOwogCQlvZmZzZXQgPSB0IC0gdF9sb2NhbDsKQEAgLTE3NSw2ICsxNzcsMTIgQEAKIAlzdHJ1Y3QgdG0gKnRtOwogCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHRpbWVidWYgPSBTVFJCVUZfSU5JVDsKIAorCWlmIChtb2RlLT50eXBlID09IERBVEVfVU5JWCkgeworCQlzdHJidWZfcmVzZXQoJnRpbWVidWYpOworCQlzdHJidWZfYWRkZigmdGltZWJ1ZiwgIiVsdSIsIHRpbWUpOworCQlyZXR1cm4gdGltZWJ1Zi5idWY7CisJfQorCiAJaWYgKG1vZGUtPmxvY2FsKQogCQl0eiA9IGxvY2FsX3R6b2Zmc2V0KHRpbWUpOwogCkBAIC03OTAsNiArNzk4LDggQEAKIAkJcmV0dXJuIERBVEVfTk9STUFMOwogCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJyYXciLCBlbmQpKQogCQlyZXR1cm4gREFURV9SQVc7CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgInVuaXgiLCBlbmQpKQorCQlyZXR1cm4gREFURV9VTklYOwogCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJmb3JtYXQiLCBlbmQpKQogCQlyZXR1cm4gREFURV9TVFJGVElNRTsKIApkaWZmIC0tZ2l0IGEvZGlmZi5jIGIvZGlmZi5jCmluZGV4IGJiODE2ZDkuLjUzNGMxMmUgMTAwNjQ0Ci0tLSBhL2RpZmYuYworKysgYi9kaWZmLmMKQEAgLTE5MzMsOCArMTkzMyw4IEBACiAKIAkJbmFtZSA9IHAtPnR3by0+cGF0aCA/IHAtPnR3by0+cGF0aCA6IHAtPm9uZS0+cGF0aDsKIAotCQlpZiAocC0+b25lLT5zaGExX3ZhbGlkICYmIHAtPnR3by0+c2hhMV92YWxpZCkKLQkJCWNvbnRlbnRfY2hhbmdlZCA9IGhhc2hjbXAocC0+b25lLT5zaGExLCBwLT50d28tPnNoYTEpOworCQlpZiAocC0+b25lLT5vaWRfdmFsaWQgJiYgcC0+dHdvLT5vaWRfdmFsaWQpCisJCQljb250ZW50X2NoYW5nZWQgPSBvaWRjbXAoJnAtPm9uZS0+b2lkLCAmcC0+dHdvLT5vaWQpOwogCQllbHNlCiAJCQljb250ZW50X2NoYW5nZWQgPSAxOwogCkBAIC0yMzA2LDcgKzIzMDYsOCBAQAogCQljb25zdCBjaGFyICphZGQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FVyk7CiAJCXNob3dfc3VibW9kdWxlX3N1bW1hcnkoby0+ZmlsZSwgb25lLT5wYXRoID8gb25lLT5wYXRoIDogdHdvLT5wYXRoLAogCQkJCWxpbmVfcHJlZml4LAotCQkJCW9uZS0+c2hhMSwgdHdvLT5zaGExLCB0d28tPmRpcnR5X3N1Ym1vZHVsZSwKKwkJCQlvbmUtPm9pZC5oYXNoLCB0d28tPm9pZC5oYXNoLAorCQkJCXR3by0+ZGlydHlfc3VibW9kdWxlLAogCQkJCW1ldGEsIGRlbCwgYWRkLCByZXNldCk7CiAJCXJldHVybjsKIAl9CkBAIC0yMzg0LDcgKzIzODUsNyBAQAogCQlpZiAoIW9uZS0+ZGF0YSAmJiAhdHdvLT5kYXRhICYmCiAJCSAgICBTX0lTUkVHKG9uZS0+bW9kZSkgJiYgU19JU1JFRyh0d28tPm1vZGUpICYmCiAJCSAgICAhRElGRl9PUFRfVFNUKG8sIEJJTkFSWSkpIHsKLQkJCWlmICghaGFzaGNtcChvbmUtPnNoYTEsIHR3by0+c2hhMSkpIHsKKwkJCWlmICghb2lkY21wKCZvbmUtPm9pZCwgJnR3by0+b2lkKSkgewogCQkJCWlmIChtdXN0X3Nob3dfaGVhZGVyKQogCQkJCQlmcHJpbnRmKG8tPmZpbGUsICIlcyIsIGhlYWRlci5idWYpOwogCQkJCWdvdG8gZnJlZV9hYl9hbmRfcmV0dXJuOwpAQCAtMjUwNSw3ICsyNTA2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXNhbWVfY29udGVudHMgPSAhaGFzaGNtcChvbmUtPnNoYTEsIHR3by0+c2hhMSk7CisJc2FtZV9jb250ZW50cyA9ICFvaWRjbXAoJm9uZS0+b2lkLCAmdHdvLT5vaWQpOwogCiAJaWYgKGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG9uZSkgfHwgZGlmZl9maWxlc3BlY19pc19iaW5hcnkodHdvKSkgewogCQlkYXRhLT5pc19iaW5hcnkgPSAxOwpAQCAtMjYzOCw4ICsyNjM5LDggQEAKIHsKIAlpZiAobW9kZSkgewogCQlzcGVjLT5tb2RlID0gY2Fub25fbW9kZShtb2RlKTsKLQkJaGFzaGNweShzcGVjLT5zaGExLCBzaGExKTsKLQkJc3BlYy0+c2hhMV92YWxpZCA9IHNoYTFfdmFsaWQ7CisJCWhhc2hjcHkoc3BlYy0+b2lkLmhhc2gsIHNoYTEpOworCQlzcGVjLT5vaWRfdmFsaWQgPSBzaGExX3ZhbGlkOwogCX0KIH0KIApAQCAtMjY4Miw2ICsyNjgzLDEzIEBACiAJaWYgKCFGQVNUX1dPUktJTkdfRElSRUNUT1JZICYmICF3YW50X2ZpbGUgJiYgaGFzX3NoYTFfcGFjayhzaGExKSkKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAqIFNpbWlsYXJseSwgaWYgd2UnZCBoYXZlIHRvIGNvbnZlcnQgdGhlIGZpbGUgY29udGVudHMgYW55d2F5LCB0aGF0CisJICogbWFrZXMgdGhlIG9wdGltaXphdGlvbiBub3Qgd29ydGh3aGlsZS4KKwkgKi8KKwlpZiAoIXdhbnRfZmlsZSAmJiB3b3VsZF9jb252ZXJ0X3RvX2dpdChuYW1lKSkKKwkJcmV0dXJuIDA7CisKIAlsZW4gPSBzdHJsZW4obmFtZSk7CiAJcG9zID0gY2FjaGVfbmFtZV9wb3MobmFtZSwgbGVuKTsKIAlpZiAocG9zIDwgMCkKQEAgLTI3MjEsNyArMjcyOSw4IEBACiAJaWYgKHMtPmRpcnR5X3N1Ym1vZHVsZSkKIAkJZGlydHkgPSAiLWRpcnR5IjsKIAotCXN0cmJ1Zl9hZGRmKCZidWYsICJTdWJwcm9qZWN0IGNvbW1pdCAlcyVzXG4iLCBzaGExX3RvX2hleChzLT5zaGExKSwgZGlydHkpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJTdWJwcm9qZWN0IGNvbW1pdCAlcyVzXG4iLAorCQkgICAgb2lkX3RvX2hleCgmcy0+b2lkKSwgZGlydHkpOwogCXMtPnNpemUgPSBidWYubGVuOwogCWlmIChzaXplX29ubHkpIHsKIAkJcy0+ZGF0YSA9IE5VTEw7CkBAIC0yNzY0LDggKzI3NzMsOCBAQAogCWlmIChTX0lTR0lUTElOSyhzLT5tb2RlKSkKIAkJcmV0dXJuIGRpZmZfcG9wdWxhdGVfZ2l0bGluayhzLCBzaXplX29ubHkpOwogCi0JaWYgKCFzLT5zaGExX3ZhbGlkIHx8Ci0JICAgIHJldXNlX3dvcmt0cmVlX2ZpbGUocy0+cGF0aCwgcy0+c2hhMSwgMCkpIHsKKwlpZiAoIXMtPm9pZF92YWxpZCB8fAorCSAgICByZXVzZV93b3JrdHJlZV9maWxlKHMtPnBhdGgsIHMtPm9pZC5oYXNoLCAwKSkgewogCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCQlzdHJ1Y3Qgc3RhdCBzdDsKIAkJaW50IGZkOwpAQCAtMjgyMiw5ICsyODMxLDEwIEBACiAJZWxzZSB7CiAJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKIAkJaWYgKHNpemVfb25seSB8fCAoZmxhZ3MgJiBDSEVDS19CSU5BUlkpKSB7Ci0JCQl0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzLT5zaGExLCAmcy0+c2l6ZSk7CisJCQl0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzLT5vaWQuaGFzaCwgJnMtPnNpemUpOwogCQkJaWYgKHR5cGUgPCAwKQotCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgJXMiLCBzaGExX3RvX2hleChzLT5zaGExKSk7CisJCQkJZGllKCJ1bmFibGUgdG8gcmVhZCAlcyIsCisJCQkJICAgIG9pZF90b19oZXgoJnMtPm9pZCkpOwogCQkJaWYgKHNpemVfb25seSkKIAkJCQlyZXR1cm4gMDsKIAkJCWlmIChzLT5zaXplID4gYmlnX2ZpbGVfdGhyZXNob2xkICYmIHMtPmlzX2JpbmFyeSA9PSAtMSkgewpAQCAtMjgzMiw5ICsyODQyLDkgQEAKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQotCQlzLT5kYXRhID0gcmVhZF9zaGExX2ZpbGUocy0+c2hhMSwgJnR5cGUsICZzLT5zaXplKTsKKwkJcy0+ZGF0YSA9IHJlYWRfc2hhMV9maWxlKHMtPm9pZC5oYXNoLCAmdHlwZSwgJnMtPnNpemUpOwogCQlpZiAoIXMtPmRhdGEpCi0JCQlkaWUoInVuYWJsZSB0byByZWFkICVzIiwgc2hhMV90b19oZXgocy0+c2hhMSkpOworCQkJZGllKCJ1bmFibGUgdG8gcmVhZCAlcyIsIG9pZF90b19oZXgoJnMtPm9pZCkpOwogCQlzLT5zaG91bGRfZnJlZSA9IDE7CiAJfQogCXJldHVybiAwOwpAQCAtMjg2Myw3ICsyODczLDcgQEAKIHN0YXRpYyB2b2lkIHByZXBfdGVtcF9ibG9iKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBkaWZmX3RlbXBmaWxlICp0ZW1wLAogCQkJICAgdm9pZCAqYmxvYiwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCiAJCQkgICBpbnQgbW9kZSkKIHsKIAlpbnQgZmQ7CkBAIC0yODg4LDcgKzI4OTgsNyBAQAogCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKIAljbG9zZV90ZW1wZmlsZSgmdGVtcC0+dGVtcGZpbGUpOwogCXRlbXAtPm5hbWUgPSBnZXRfdGVtcGZpbGVfcGF0aCgmdGVtcC0+dGVtcGZpbGUpOwotCXNoYTFfdG9faGV4X3IodGVtcC0+aGV4LCBzaGExKTsKKwlvaWRfdG9faGV4X3IodGVtcC0+aGV4LCBvaWQpOwogCXhzbnByaW50Zih0ZW1wLT5tb2RlLCBzaXplb2YodGVtcC0+bW9kZSksICIlMDZvIiwgbW9kZSk7CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJc3RyYnVmX3JlbGVhc2UoJnRlbXBsYXRlKTsKQEAgLTI5MTIsOCArMjkyMiw4IEBACiAJfQogCiAJaWYgKCFTX0lTR0lUTElOSyhvbmUtPm1vZGUpICYmCi0JICAgICghb25lLT5zaGExX3ZhbGlkIHx8Ci0JICAgICByZXVzZV93b3JrdHJlZV9maWxlKG5hbWUsIG9uZS0+c2hhMSwgMSkpKSB7CisJICAgICghb25lLT5vaWRfdmFsaWQgfHwKKwkgICAgIHJldXNlX3dvcmt0cmVlX2ZpbGUobmFtZSwgb25lLT5vaWQuaGFzaCwgMSkpKSB7CiAJCXN0cnVjdCBzdGF0IHN0OwogCQlpZiAobHN0YXQobmFtZSwgJnN0KSA8IDApIHsKIAkJCWlmIChlcnJubyA9PSBFTk9FTlQpCkBAIC0yOTI1LDE5ICsyOTM1LDE5IEBACiAJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZzYiwgbmFtZSwgc3Quc3Rfc2l6ZSkgPCAwKQogCQkJCWRpZV9lcnJubygicmVhZGxpbmsoJXMpIiwgbmFtZSk7CiAJCQlwcmVwX3RlbXBfYmxvYihuYW1lLCB0ZW1wLCBzYi5idWYsIHNiLmxlbiwKLQkJCQkgICAgICAgKG9uZS0+c2hhMV92YWxpZCA/Ci0JCQkJCW9uZS0+c2hhMSA6IG51bGxfc2hhMSksCi0JCQkJICAgICAgIChvbmUtPnNoYTFfdmFsaWQgPworCQkJCSAgICAgICAob25lLT5vaWRfdmFsaWQgPworCQkJCQkmb25lLT5vaWQgOiAmbnVsbF9vaWQpLAorCQkJCSAgICAgICAob25lLT5vaWRfdmFsaWQgPwogCQkJCQlvbmUtPm1vZGUgOiBTX0lGTE5LKSk7CiAJCQlzdHJidWZfcmVsZWFzZSgmc2IpOwogCQl9CiAJCWVsc2UgewogCQkJLyogd2UgY2FuIGJvcnJvdyBmcm9tIHRoZSBmaWxlIGluIHRoZSB3b3JrIHRyZWUgKi8KIAkJCXRlbXAtPm5hbWUgPSBuYW1lOwotCQkJaWYgKCFvbmUtPnNoYTFfdmFsaWQpCisJCQlpZiAoIW9uZS0+b2lkX3ZhbGlkKQogCQkJCXNoYTFfdG9faGV4X3IodGVtcC0+aGV4LCBudWxsX3NoYTEpOwogCQkJZWxzZQotCQkJCXNoYTFfdG9faGV4X3IodGVtcC0+aGV4LCBvbmUtPnNoYTEpOworCQkJCXNoYTFfdG9faGV4X3IodGVtcC0+aGV4LCBvbmUtPm9pZC5oYXNoKTsKIAkJCS8qIEV2ZW4gdGhvdWdoIHdlIG1heSBzb21ldGltZXMgYm9ycm93IHRoZQogCQkJICogY29udGVudHMgZnJvbSB0aGUgd29yayB0cmVlLCB3ZSBhbHdheXMgd2FudAogCQkJICogb25lLT5tb2RlLiAgbW9kZSBpcyB0cnVzdHdvcnRoeSBldmVuIHdoZW4KQEAgLTI5NTIsNyArMjk2Miw3IEBACiAJCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKG9uZSwgMCkpCiAJCQlkaWUoImNhbm5vdCByZWFkIGRhdGEgYmxvYiBmb3IgJXMiLCBvbmUtPnBhdGgpOwogCQlwcmVwX3RlbXBfYmxvYihuYW1lLCB0ZW1wLCBvbmUtPmRhdGEsIG9uZS0+c2l6ZSwKLQkJCSAgICAgICBvbmUtPnNoYTEsIG9uZS0+bW9kZSk7CisJCQkgICAgICAgJm9uZS0+b2lkLCBvbmUtPm1vZGUpOwogCX0KIAlyZXR1cm4gdGVtcDsKIH0KQEAgLTMwNjUsNyArMzA3NSw3IEBACiAJZGVmYXVsdDoKIAkJKm11c3Rfc2hvd19oZWFkZXIgPSAwOwogCX0KLQlpZiAob25lICYmIHR3byAmJiBoYXNoY21wKG9uZS0+c2hhMSwgdHdvLT5zaGExKSkgeworCWlmIChvbmUgJiYgdHdvICYmIG9pZGNtcCgmb25lLT5vaWQsICZ0d28tPm9pZCkpIHsKIAkJaW50IGFiYnJldiA9IERJRkZfT1BUX1RTVChvLCBGVUxMX0lOREVYKSA/IDQwIDogREVGQVVMVF9BQkJSRVY7CiAKIAkJaWYgKERJRkZfT1BUX1RTVChvLCBCSU5BUlkpKSB7CkBAIC0zMDc1LDggKzMwODUsOCBAQAogCQkJCWFiYnJldiA9IDQwOwogCQl9CiAJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzJXNpbmRleCAlcy4uIiwgbGluZV9wcmVmaXgsIHNldCwKLQkJCSAgICBmaW5kX3VuaXF1ZV9hYmJyZXYob25lLT5zaGExLCBhYmJyZXYpKTsKLQkJc3RyYnVmX2FkZHN0cihtc2csIGZpbmRfdW5pcXVlX2FiYnJldih0d28tPnNoYTEsIGFiYnJldikpOworCQkJICAgIGZpbmRfdW5pcXVlX2FiYnJldihvbmUtPm9pZC5oYXNoLCBhYmJyZXYpKTsKKwkJc3RyYnVmX2FkZHN0cihtc2csIGZpbmRfdW5pcXVlX2FiYnJldih0d28tPm9pZC5oYXNoLCBhYmJyZXYpKTsKIAkJaWYgKG9uZS0+bW9kZSA9PSB0d28tPm1vZGUpCiAJCQlzdHJidWZfYWRkZihtc2csICIgJTA2byIsIG9uZS0+bW9kZSk7CiAJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXG4iLCByZXNldCk7CkBAIC0zMTMxLDIwICszMTQxLDIwIEBACiBzdGF0aWMgdm9pZCBkaWZmX2ZpbGxfc2hhMV9pbmZvKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCiB7CiAJaWYgKERJRkZfRklMRV9WQUxJRChvbmUpKSB7Ci0JCWlmICghb25lLT5zaGExX3ZhbGlkKSB7CisJCWlmICghb25lLT5vaWRfdmFsaWQpIHsKIAkJCXN0cnVjdCBzdGF0IHN0OwogCQkJaWYgKG9uZS0+aXNfc3RkaW4pIHsKLQkJCQloYXNoY3B5KG9uZS0+c2hhMSwgbnVsbF9zaGExKTsKKwkJCQlvaWRjbHIoJm9uZS0+b2lkKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlpZiAobHN0YXQob25lLT5wYXRoLCAmc3QpIDwgMCkKIAkJCQlkaWVfZXJybm8oInN0YXQgJyVzJyIsIG9uZS0+cGF0aCk7Ci0JCQlpZiAoaW5kZXhfcGF0aChvbmUtPnNoYTEsIG9uZS0+cGF0aCwgJnN0LCAwKSkKKwkJCWlmIChpbmRleF9wYXRoKG9uZS0+b2lkLmhhc2gsIG9uZS0+cGF0aCwgJnN0LCAwKSkKIAkJCQlkaWUoImNhbm5vdCBoYXNoICVzIiwgb25lLT5wYXRoKTsKIAkJfQogCX0KIAllbHNlCi0JCWhhc2hjbHIob25lLT5zaGExKTsKKwkJb2lkY2xyKCZvbmUtPm9pZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmlwX3ByZWZpeChpbnQgcHJlZml4X2xlbmd0aCwgY29uc3QgY2hhciAqKm5hbWVwLCBjb25zdCBjaGFyICoqb3RoZXJwKQpAQCAtMzk3Nyw2ICszOTg3LDggQEAKIAkJaWYgKCFvcHRpb25zLT5maWxlKQogCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAnJXMnIiwgcGF0aCk7CiAJCW9wdGlvbnMtPmNsb3NlX2ZpbGUgPSAxOworCQlpZiAob3B0aW9ucy0+dXNlX2NvbG9yICE9IEdJVF9DT0xPUl9BTFdBWVMpCisJCQlvcHRpb25zLT51c2VfY29sb3IgPSBHSVRfQ09MT1JfTkVWRVI7CiAJCXJldHVybiBhcmdjb3VudDsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7CkBAIC00MTE4LDggKzQxMzAsOSBAQAogCWZwcmludGYob3B0LT5maWxlLCAiJXMiLCBkaWZmX2xpbmVfcHJlZml4KG9wdCkpOwogCWlmICghKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05BTUVfU1RBVFVTKSkgewogCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIjolMDZvICUwNm8gJXMgIiwgcC0+b25lLT5tb2RlLCBwLT50d28tPm1vZGUsCi0JCQlkaWZmX3VuaXF1ZV9hYmJyZXYocC0+b25lLT5zaGExLCBvcHQtPmFiYnJldikpOwotCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVzICIsIGRpZmZfdW5pcXVlX2FiYnJldihwLT50d28tPnNoYTEsIG9wdC0+YWJicmV2KSk7CisJCQlkaWZmX3VuaXF1ZV9hYmJyZXYocC0+b25lLT5vaWQuaGFzaCwgb3B0LT5hYmJyZXYpKTsKKwkJZnByaW50ZihvcHQtPmZpbGUsICIlcyAiLAorCQkJZGlmZl91bmlxdWVfYWJicmV2KHAtPnR3by0+b2lkLmhhc2gsIG9wdC0+YWJicmV2KSk7CiAJfQogCWlmIChwLT5zY29yZSkgewogCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVjJTAzZCVjIiwgcC0+c3RhdHVzLCBzaW1pbGFyaXR5X2luZGV4KHApLApAQCAtNDE2OCwxMSArNDE4MSwxMSBAQAogCS8qIGJvdGggYXJlIHZhbGlkIGFuZCBwb2ludCBhdCB0aGUgc2FtZSBwYXRoLiAgdGhhdCBpcywgd2UgYXJlCiAJICogZGVhbGluZyB3aXRoIGEgY2hhbmdlLgogCSAqLwotCWlmIChvbmUtPnNoYTFfdmFsaWQgJiYgdHdvLT5zaGExX3ZhbGlkICYmCi0JICAgICFoYXNoY21wKG9uZS0+c2hhMSwgdHdvLT5zaGExKSAmJgorCWlmIChvbmUtPm9pZF92YWxpZCAmJiB0d28tPm9pZF92YWxpZCAmJgorCSAgICAhb2lkY21wKCZvbmUtPm9pZCwgJnR3by0+b2lkKSAmJgogCSAgICAhb25lLT5kaXJ0eV9zdWJtb2R1bGUgJiYgIXR3by0+ZGlydHlfc3VibW9kdWxlKQogCQlyZXR1cm4gMTsgLyogbm8gY2hhbmdlICovCi0JaWYgKCFvbmUtPnNoYTFfdmFsaWQgJiYgIXR3by0+c2hhMV92YWxpZCkKKwlpZiAoIW9uZS0+b2lkX3ZhbGlkICYmICF0d28tPm9pZF92YWxpZCkKIAkJcmV0dXJuIDE7IC8qIGJvdGggbG9vayBhdCB0aGUgc2FtZSBmaWxlIG9uIHRoZSBmaWxlc3lzdGVtLiAqLwogCXJldHVybiAwOwogfQpAQCAtNDIzMyw3ICs0MjQ2LDcgQEAKIAkJcy0+cGF0aCwKIAkJRElGRl9GSUxFX1ZBTElEKHMpID8gInZhbGlkIiA6ICJpbnZhbGlkIiwKIAkJcy0+bW9kZSwKLQkJcy0+c2hhMV92YWxpZCA/IHNoYTFfdG9faGV4KHMtPnNoYTEpIDogIiIpOworCQlzLT5vaWRfdmFsaWQgPyBvaWRfdG9faGV4KCZzLT5vaWQpIDogIiIpOwogCWZwcmludGYoc3RkZXJyLCAicXVldWVbJWRdICVzIHNpemUgJWx1XG4iLAogCQl4LCBvbmUgPyBvbmUgOiAiIiwKIAkJcy0+c2l6ZSk7CkBAIC00MzAzLDExICs0MzE2LDExIEBACiAJCQllbHNlCiAJCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfUkVOQU1FRDsKIAkJfQotCQllbHNlIGlmIChoYXNoY21wKHAtPm9uZS0+c2hhMSwgcC0+dHdvLT5zaGExKSB8fAorCQllbHNlIGlmIChvaWRjbXAoJnAtPm9uZS0+b2lkLCAmcC0+dHdvLT5vaWQpIHx8CiAJCQkgcC0+b25lLT5tb2RlICE9IHAtPnR3by0+bW9kZSB8fAogCQkJIHAtPm9uZS0+ZGlydHlfc3VibW9kdWxlIHx8CiAJCQkgcC0+dHdvLT5kaXJ0eV9zdWJtb2R1bGUgfHwKLQkJCSBpc19udWxsX3NoYTEocC0+b25lLT5zaGExKSkKKwkJCSBpc19udWxsX29pZCgmcC0+b25lLT5vaWQpKQogCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfTU9ESUZJRUQ7CiAJCWVsc2UgewogCQkJLyogVGhpcyBpcyBhICJuby1jaGFuZ2UiIGVudHJ5IGFuZCBzaG91bGQgbm90CkBAIC00NTI3LDggKzQ1NDAsMTAgQEAKIAogCQlpZiAoZGlmZl9maWxlc3BlY19pc19iaW5hcnkocC0+b25lKSB8fAogCQkgICAgZGlmZl9maWxlc3BlY19pc19iaW5hcnkocC0+dHdvKSkgewotCQkJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIHNoYTFfdG9faGV4KHAtPm9uZS0+c2hhMSksIDQwKTsKLQkJCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBzaGExX3RvX2hleChwLT50d28tPnNoYTEpLCA0MCk7CisJCQlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgb2lkX3RvX2hleCgmcC0+b25lLT5vaWQpLAorCQkJCQk0MCk7CisJCQlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgb2lkX3RvX2hleCgmcC0+dHdvLT5vaWQpLAorCQkJCQk0MCk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC00ODIwLDcgKzQ4MzUsNyBAQAogCSAqLwogCWlmICghRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgfHwgLyogKDEpICovCiAJICAgICFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSB8fAotCSAgICAocC0+b25lLT5zaGExX3ZhbGlkICYmIHAtPnR3by0+c2hhMV92YWxpZCkgfHwKKwkgICAgKHAtPm9uZS0+b2lkX3ZhbGlkICYmIHAtPnR3by0+b2lkX3ZhbGlkKSB8fAogCSAgICAocC0+b25lLT5tb2RlICE9IHAtPnR3by0+bW9kZSkgfHwKIAkgICAgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT5vbmUsIENIRUNLX1NJWkVfT05MWSkgfHwKIAkgICAgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT50d28sIENIRUNLX1NJWkVfT05MWSkgfHwKQEAgLTUxMTYsOCArNTEzMSw5IEBACiAJaWYgKCFkcml2ZXItPnRleHRjb252KQogCQlkaWUoIkJVRzogZmlsbF90ZXh0Y29udiBjYWxsZWQgd2l0aCBub24tdGV4dGNvbnYgZHJpdmVyIik7CiAKLQlpZiAoZHJpdmVyLT50ZXh0Y29udl9jYWNoZSAmJiBkZi0+c2hhMV92YWxpZCkgewotCQkqb3V0YnVmID0gbm90ZXNfY2FjaGVfZ2V0KGRyaXZlci0+dGV4dGNvbnZfY2FjaGUsIGRmLT5zaGExLAorCWlmIChkcml2ZXItPnRleHRjb252X2NhY2hlICYmIGRmLT5vaWRfdmFsaWQpIHsKKwkJKm91dGJ1ZiA9IG5vdGVzX2NhY2hlX2dldChkcml2ZXItPnRleHRjb252X2NhY2hlLAorCQkJCQkgIGRmLT5vaWQuaGFzaCwKIAkJCQkJICAmc2l6ZSk7CiAJCWlmICgqb3V0YnVmKQogCQkJcmV0dXJuIHNpemU7CkBAIC01MTI3LDkgKzUxNDMsOSBAQAogCWlmICghKm91dGJ1ZikKIAkJZGllKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CiAKLQlpZiAoZHJpdmVyLT50ZXh0Y29udl9jYWNoZSAmJiBkZi0+c2hhMV92YWxpZCkgeworCWlmIChkcml2ZXItPnRleHRjb252X2NhY2hlICYmIGRmLT5vaWRfdmFsaWQpIHsKIAkJLyogaWdub3JlIGVycm9ycywgYXMgd2UgbWlnaHQgYmUgaW4gYSByZWFkb25seSByZXBvc2l0b3J5ICovCi0JCW5vdGVzX2NhY2hlX3B1dChkcml2ZXItPnRleHRjb252X2NhY2hlLCBkZi0+c2hhMSwgKm91dGJ1ZiwKKwkJbm90ZXNfY2FjaGVfcHV0KGRyaXZlci0+dGV4dGNvbnZfY2FjaGUsIGRmLT5vaWQuaGFzaCwgKm91dGJ1ZiwKIAkJCQlzaXplKTsKIAkJLyoKIAkJICogd2UgY291bGQgc2F2ZSB1cCBjaGFuZ2VzIGFuZCBmbHVzaCB0aGVtIGFsbCBhdCB0aGUgZW5kLApkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtYnJlYWsuYyBiL2RpZmZjb3JlLWJyZWFrLmMKaW5kZXggNTQ3MzQ5My4uODgxYTc0ZiAxMDA2NDQKLS0tIGEvZGlmZmNvcmUtYnJlYWsuYworKysgYi9kaWZmY29yZS1icmVhay5jCkBAIC01Nyw4ICs1Nyw4IEBACiAJCXJldHVybiAxOyAvKiBldmVuIHRoZWlyIHR5cGVzIGFyZSBkaWZmZXJlbnQgKi8KIAl9CiAKLQlpZiAoc3JjLT5zaGExX3ZhbGlkICYmIGRzdC0+c2hhMV92YWxpZCAmJgotCSAgICAhaGFzaGNtcChzcmMtPnNoYTEsIGRzdC0+c2hhMSkpCisJaWYgKHNyYy0+b2lkX3ZhbGlkICYmIGRzdC0+b2lkX3ZhbGlkICYmCisJICAgICFvaWRjbXAoJnNyYy0+b2lkLCAmZHN0LT5vaWQpKQogCQlyZXR1cm4gMDsgLyogdGhleSBhcmUgdGhlIHNhbWUgKi8KIAogCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHNyYywgMCkgfHwgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhkc3QsIDApKQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtcGlja2F4ZS5jIGIvZGlmZmNvcmUtcGlja2F4ZS5jCmluZGV4IDc3MTVjMTMuLjU1MDY3Y2EgMTAwNjQ0Ci0tLSBhL2RpZmZjb3JlLXBpY2theGUuYworKysgYi9kaWZmY29yZS1waWNrYXhlLmMKQEAgLTcsNiArNyw4IEBACiAjaW5jbHVkZSAiZGlmZmNvcmUuaCIKICNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJrd3NldC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCiAKIHR5cGVkZWYgaW50ICgqcGlja2F4ZV9mbikobW1maWxlX3QgKm9uZSwgbW1maWxlX3QgKnR3bywKIAkJCSAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKQEAgLTE5OCw2ICsyMDAsMTggQEAKIAkqcSA9IG91dHE7CiB9CiAKK3N0YXRpYyB2b2lkIHJlZ2NvbXBfb3JfZGllKHJlZ2V4X3QgKnJlZ2V4LCBjb25zdCBjaGFyICpuZWVkbGUsIGludCBjZmxhZ3MpCit7CisJaW50IGVyciA9IHJlZ2NvbXAocmVnZXgsIG5lZWRsZSwgY2ZsYWdzKTsKKwlpZiAoZXJyKSB7CisJCS8qIFRoZSBQT1NJWC4yIHBlb3BsZSBhcmUgc3VyZWx5IHNpY2sgKi8KKwkJY2hhciBlcnJidWZbMTAyNF07CisJCXJlZ2Vycm9yKGVyciwgcmVnZXgsIGVycmJ1ZiwgMTAyNCk7CisJCXJlZ2ZyZWUocmVnZXgpOworCQlkaWUoImludmFsaWQgcmVnZXg6ICVzIiwgZXJyYnVmKTsKKwl9Cit9CisKIHZvaWQgZGlmZmNvcmVfcGlja2F4ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQogewogCWNvbnN0IGNoYXIgKm5lZWRsZSA9IG8tPnBpY2theGU7CkBAIC0yMDYsMTggKzIyMCwxOSBAQAogCWt3c2V0X3Qga3dzID0gTlVMTDsKIAogCWlmIChvcHRzICYgKERJRkZfUElDS0FYRV9SRUdFWCB8IERJRkZfUElDS0FYRV9LSU5EX0cpKSB7Ci0JCWludCBlcnI7CiAJCWludCBjZmxhZ3MgPSBSRUdfRVhURU5ERUQgfCBSRUdfTkVXTElORTsKIAkJaWYgKERJRkZfT1BUX1RTVChvLCBQSUNLQVhFX0lHTk9SRV9DQVNFKSkKIAkJCWNmbGFncyB8PSBSRUdfSUNBU0U7Ci0JCWVyciA9IHJlZ2NvbXAoJnJlZ2V4LCBuZWVkbGUsIGNmbGFncyk7Ci0JCWlmIChlcnIpIHsKLQkJCS8qIFRoZSBQT1NJWC4yIHBlb3BsZSBhcmUgc3VyZWx5IHNpY2sgKi8KLQkJCWNoYXIgZXJyYnVmWzEwMjRdOwotCQkJcmVnZXJyb3IoZXJyLCAmcmVnZXgsIGVycmJ1ZiwgMTAyNCk7Ci0JCQlyZWdmcmVlKCZyZWdleCk7Ci0JCQlkaWUoImludmFsaWQgcmVnZXg6ICVzIiwgZXJyYnVmKTsKLQkJfQorCQlyZWdjb21wX29yX2RpZSgmcmVnZXgsIG5lZWRsZSwgY2ZsYWdzKTsKKwkJcmVnZXhwID0gJnJlZ2V4OworCX0gZWxzZSBpZiAoRElGRl9PUFRfVFNUKG8sIFBJQ0tBWEVfSUdOT1JFX0NBU0UpICYmCisJCSAgIGhhc19ub25fYXNjaWkobmVlZGxlKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCWludCBjZmxhZ3MgPSBSRUdfTkVXTElORSB8IFJFR19JQ0FTRTsKKworCQliYXNpY19yZWdleF9xdW90ZV9idWYoJnNiLCBuZWVkbGUpOworCQlyZWdjb21wX29yX2RpZSgmcmVnZXgsIHNiLmJ1ZiwgY2ZsYWdzKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKIAkJcmVnZXhwID0gJnJlZ2V4OwogCX0gZWxzZSB7CiAJCWt3cyA9IGt3c2FsbG9jKERJRkZfT1BUX1RTVChvLCBQSUNLQVhFX0lHTk9SRV9DQVNFKQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtcmVuYW1lLmMgYi9kaWZmY29yZS1yZW5hbWUuYwppbmRleCA3ZjAzZWI1Li43M2QwMDNhIDEwMDY0NAotLS0gYS9kaWZmY29yZS1yZW5hbWUuYworKysgYi9kaWZmY29yZS1yZW5hbWUuYwpAQCAtNjAsNyArNjAsOCBAQAogCQltZW1tb3ZlKHJlbmFtZV9kc3QgKyBmaXJzdCArIDEsIHJlbmFtZV9kc3QgKyBmaXJzdCwKIAkJCShyZW5hbWVfZHN0X25yIC0gZmlyc3QgLSAxKSAqIHNpemVvZigqcmVuYW1lX2RzdCkpOwogCXJlbmFtZV9kc3RbZmlyc3RdLnR3byA9IGFsbG9jX2ZpbGVzcGVjKHR3by0+cGF0aCk7Ci0JZmlsbF9maWxlc3BlYyhyZW5hbWVfZHN0W2ZpcnN0XS50d28sIHR3by0+c2hhMSwgdHdvLT5zaGExX3ZhbGlkLCB0d28tPm1vZGUpOworCWZpbGxfZmlsZXNwZWMocmVuYW1lX2RzdFtmaXJzdF0udHdvLCB0d28tPm9pZC5oYXNoLCB0d28tPm9pZF92YWxpZCwKKwkJICAgICAgdHdvLT5tb2RlKTsKIAlyZW5hbWVfZHN0W2ZpcnN0XS5wYWlyID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KQEAgLTI2MCwxMiArMjYxLDEzIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZmlsZXNwZWMpCiB7Ci0JaWYgKCFmaWxlc3BlYy0+c2hhMV92YWxpZCkgeworCWlmICghZmlsZXNwZWMtPm9pZF92YWxpZCkgewogCQlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhmaWxlc3BlYywgMCkpCiAJCQlyZXR1cm4gMDsKLQkJaGFzaF9zaGExX2ZpbGUoZmlsZXNwZWMtPmRhdGEsIGZpbGVzcGVjLT5zaXplLCAiYmxvYiIsIGZpbGVzcGVjLT5zaGExKTsKKwkJaGFzaF9zaGExX2ZpbGUoZmlsZXNwZWMtPmRhdGEsIGZpbGVzcGVjLT5zaXplLCAiYmxvYiIsCisJCQkgICAgICAgZmlsZXNwZWMtPm9pZC5oYXNoKTsKIAl9Ci0JcmV0dXJuIHNoYTFoYXNoKGZpbGVzcGVjLT5zaGExKTsKKwlyZXR1cm4gc2hhMWhhc2goZmlsZXNwZWMtPm9pZC5oYXNoKTsKIH0KIAogc3RhdGljIGludCBmaW5kX2lkZW50aWNhbF9maWxlcyhzdHJ1Y3QgaGFzaG1hcCAqc3JjcywKQEAgLTI4Nyw3ICsyODksNyBAQAogCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc291cmNlID0gcC0+ZmlsZXNwZWM7CiAKIAkJLyogRmFsc2UgaGFzaCBjb2xsaXNpb24/ICovCi0JCWlmIChoYXNoY21wKHNvdXJjZS0+c2hhMSwgdGFyZ2V0LT5zaGExKSkKKwkJaWYgKG9pZGNtcCgmc291cmNlLT5vaWQsICZ0YXJnZXQtPm9pZCkpCiAJCQljb250aW51ZTsKIAkJLyogTm9uLXJlZ3VsYXIgZmlsZXM/IElmIHNvLCB0aGUgbW9kZXMgbXVzdCBtYXRjaCEgKi8KIAkJaWYgKCFTX0lTUkVHKHNvdXJjZS0+bW9kZSkgfHwgIVNfSVNSRUcodGFyZ2V0LT5tb2RlKSkgewpAQCAtNDY2LDcgKzQ2OCw3IEBACiAJCQkJIHN0cmNtcChvcHRpb25zLT5zaW5nbGVfZm9sbG93LCBwLT50d28tPnBhdGgpKQogCQkJCWNvbnRpbnVlOyAvKiBub3QgaW50ZXJlc3RlZCAqLwogCQkJZWxzZSBpZiAoIURJRkZfT1BUX1RTVChvcHRpb25zLCBSRU5BTUVfRU1QVFkpICYmCi0JCQkJIGlzX2VtcHR5X2Jsb2Jfc2hhMShwLT50d28tPnNoYTEpKQorCQkJCSBpc19lbXB0eV9ibG9iX3NoYTEocC0+dHdvLT5vaWQuaGFzaCkpCiAJCQkJY29udGludWU7CiAJCQllbHNlIGlmIChhZGRfcmVuYW1lX2RzdChwLT50d28pIDwgMCkgewogCQkJCXdhcm5pbmcoInNraXBwaW5nIHJlbmFtZSBkZXRlY3Rpb24sIGRldGVjdGVkIgpAQCAtNDc2LDcgKzQ3OCw3IEBACiAJCQl9CiAJCX0KIAkJZWxzZSBpZiAoIURJRkZfT1BUX1RTVChvcHRpb25zLCBSRU5BTUVfRU1QVFkpICYmCi0JCQkgaXNfZW1wdHlfYmxvYl9zaGExKHAtPm9uZS0+c2hhMSkpCisJCQkgaXNfZW1wdHlfYmxvYl9zaGExKHAtPm9uZS0+b2lkLmhhc2gpKQogCQkJY29udGludWU7CiAJCWVsc2UgaWYgKCFESUZGX1BBSVJfVU5NRVJHRUQocCkgJiYgIURJRkZfRklMRV9WQUxJRChwLT50d28pKSB7CiAJCQkvKgpAQCAtNTM5LDcgKzU0MSw3IEBACiAJCQkJcmVuYW1lX2RzdF9uciAqIHJlbmFtZV9zcmNfbnIsIDUwLCAxKTsKIAl9CiAKLQlteCA9IHhjYWxsb2Moc3RfbXVsdChudW1fY3JlYXRlLCBOVU1fQ0FORElEQVRFX1BFUl9EU1QpLCBzaXplb2YoKm14KSk7CisJbXggPSB4Y2FsbG9jKHN0X211bHQoTlVNX0NBTkRJREFURV9QRVJfRFNULCBudW1fY3JlYXRlKSwgc2l6ZW9mKCpteCkpOwogCWZvciAoZHN0X2NudCA9IGkgPSAwOyBpIDwgcmVuYW1lX2RzdF9ucjsgaSsrKSB7CiAJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28gPSByZW5hbWVfZHN0W2ldLnR3bzsKIAkJc3RydWN0IGRpZmZfc2NvcmUgKm07CmRpZmYgLS1naXQgYS9kaWZmY29yZS5oIGIvZGlmZmNvcmUuaAppbmRleCAzM2VhMmRlLi5jMTFiODQ2IDEwMDY0NAotLS0gYS9kaWZmY29yZS5oCisrKyBiL2RpZmZjb3JlLmgKQEAgLTI1LDcgKzI1LDcgQEAKIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXI7CiAKIHN0cnVjdCBkaWZmX2ZpbGVzcGVjIHsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogCWNoYXIgKnBhdGg7CiAJdm9pZCAqZGF0YTsKIAl2b2lkICpjbnRfZGF0YTsKQEAgLTMzLDcgKzMzLDcgQEAKIAlpbnQgY291bnQ7ICAgICAgICAgICAgICAgLyogUmVmZXJlbmNlIGNvdW50ICovCiAJaW50IHJlbmFtZV91c2VkOyAgICAgICAgIC8qIENvdW50IG9mIHJlbmFtZSB1c2VycyAqLwogCXVuc2lnbmVkIHNob3J0IG1vZGU7CSAvKiBmaWxlIG1vZGUgKi8KLQl1bnNpZ25lZCBzaGExX3ZhbGlkIDogMTsgLyogaWYgdHJ1ZSwgdXNlIHNoYTEgYW5kIHRydXN0IG1vZGU7CisJdW5zaWduZWQgb2lkX3ZhbGlkIDogMTsgIC8qIGlmIHRydWUsIHVzZSBvaWQgYW5kIHRydXN0IG1vZGU7CiAJCQkJICAqIGlmIGZhbHNlLCB1c2UgdGhlIG5hbWUgYW5kIHJlYWQgZnJvbQogCQkJCSAgKiB0aGUgZmlsZXN5c3RlbS4KIAkJCQkgICovCmRpZmYgLS1naXQgYS9kaXItaXRlcmF0b3IuYyBiL2Rpci1pdGVyYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MTgyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXItaXRlcmF0b3IuYwpAQCAtMCwwICsxLDIwMiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJkaXItaXRlcmF0b3IuaCIKKworc3RydWN0IGRpcl9pdGVyYXRvcl9sZXZlbCB7CisJaW50IGluaXRpYWxpemVkOworCisJRElSICpkaXI7CisKKwkvKgorCSAqIFRoZSBsZW5ndGggb2YgdGhlIGRpcmVjdG9yeSBwYXJ0IG9mIHBhdGggYXQgdGhpcyBsZXZlbAorCSAqIChpbmNsdWRpbmcgYSB0cmFpbGluZyAnLycpOgorCSAqLworCXNpemVfdCBwcmVmaXhfbGVuOworCisJLyoKKwkgKiBUaGUgbGFzdCBhY3Rpb24gdGhhdCBoYXMgYmVlbiB0YWtlbiB3aXRoIHRoZSBjdXJyZW50IGVudHJ5CisJICogKG5lZWRlZCBmb3IgZGlyZWN0b3JpZXMsIHdoaWNoIGhhdmUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlCisJICogaXRlcmF0aW9uIGFuZCBhbHNvIGl0ZXJhdGVkIGludG8pOgorCSAqLworCWVudW0geworCQlESVJfU1RBVEVfSVRFUiwKKwkJRElSX1NUQVRFX1JFQ1VSU0UKKwl9IGRpcl9zdGF0ZTsKK307CisKKy8qCisgKiBUaGUgZnVsbCBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIG1hbmFnZSB0aGUgaW50ZXJuYWwgZGlyZWN0b3J5CisgKiBpdGVyYXRpb24gc3RhdGUuIEl0IGluY2x1ZGVzIG1lbWJlcnMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlCisgKiBwdWJsaWMgaW50ZXJmYWNlLgorICovCitzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCB7CisJc3RydWN0IGRpcl9pdGVyYXRvciBiYXNlOworCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGxldmVscyBjdXJyZW50bHkgb24gdGhlIHN0YWNrLiBUaGlzIGlzIGFsd2F5cworCSAqIGF0IGxlYXN0IDEsIGJlY2F1c2Ugd2hlbiBpdCBiZWNvbWVzIHplcm8gdGhlIGl0ZXJhdGlvbiBpcworCSAqIGVuZGVkIGFuZCB0aGlzIHN0cnVjdCBpcyBmcmVlZC4KKwkgKi8KKwlzaXplX3QgbGV2ZWxzX25yOworCisJLyogVGhlIG51bWJlciBvZiBsZXZlbHMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIG9uIHRoZSBzdGFjayAqLworCXNpemVfdCBsZXZlbHNfYWxsb2M7CisKKwkvKgorCSAqIEEgc3RhY2sgb2YgbGV2ZWxzLiBsZXZlbHNbMF0gaXMgdGhlIHVwcGVybW9zdCBkaXJlY3RvcnkKKwkgKiB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhpcyBpdGVyYXRpb24uCisJICovCisJc3RydWN0IGRpcl9pdGVyYXRvcl9sZXZlbCAqbGV2ZWxzOworfTsKKworaW50IGRpcl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCBkaXJfaXRlcmF0b3IgKmRpcl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCAqaXRlciA9CisJCShzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCAqKWRpcl9pdGVyYXRvcjsKKworCXdoaWxlICgxKSB7CisJCXN0cnVjdCBkaXJfaXRlcmF0b3JfbGV2ZWwgKmxldmVsID0KKwkJCSZpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yIC0gMV07CisJCXN0cnVjdCBkaXJlbnQgKmRlOworCisJCWlmICghbGV2ZWwtPmluaXRpYWxpemVkKSB7CisJCQkvKgorCQkJICogTm90ZTogZGlyX2l0ZXJhdG9yX2JlZ2luKCkgZW5zdXJlcyB0aGF0CisJCQkgKiBwYXRoIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLgorCQkJICovCisJCQlpZiAoIWlzX2Rpcl9zZXAoaXRlci0+YmFzZS5wYXRoLmJ1ZltpdGVyLT5iYXNlLnBhdGgubGVuIC0gMV0pKQorCQkJCXN0cmJ1Zl9hZGRjaCgmaXRlci0+YmFzZS5wYXRoLCAnLycpOworCQkJbGV2ZWwtPnByZWZpeF9sZW4gPSBpdGVyLT5iYXNlLnBhdGgubGVuOworCisJCQlsZXZlbC0+ZGlyID0gb3BlbmRpcihpdGVyLT5iYXNlLnBhdGguYnVmKTsKKwkJCWlmICghbGV2ZWwtPmRpciAmJiBlcnJubyAhPSBFTk9FTlQpIHsKKwkJCQl3YXJuaW5nKCJlcnJvciBvcGVuaW5nIGRpcmVjdG9yeSAlczogJXMiLAorCQkJCQlpdGVyLT5iYXNlLnBhdGguYnVmLCBzdHJlcnJvcihlcnJubykpOworCQkJCS8qIFBvcHBpbmcgdGhlIGxldmVsIGlzIGhhbmRsZWQgYmVsb3cgKi8KKwkJCX0KKworCQkJbGV2ZWwtPmluaXRpYWxpemVkID0gMTsKKwkJfSBlbHNlIGlmIChTX0lTRElSKGl0ZXItPmJhc2Uuc3Quc3RfbW9kZSkpIHsKKwkJCWlmIChsZXZlbC0+ZGlyX3N0YXRlID09IERJUl9TVEFURV9JVEVSKSB7CisJCQkJLyoKKwkJCQkgKiBUaGUgZGlyZWN0b3J5IHdhcyBqdXN0IGl0ZXJhdGVkCisJCQkJICogb3Zlcjsgbm93IHByZXBhcmUgdG8gaXRlcmF0ZSBpbnRvCisJCQkJICogaXQuCisJCQkJICovCisJCQkJbGV2ZWwtPmRpcl9zdGF0ZSA9IERJUl9TVEFURV9SRUNVUlNFOworCQkJCUFMTE9DX0dST1coaXRlci0+bGV2ZWxzLCBpdGVyLT5sZXZlbHNfbnIgKyAxLAorCQkJCQkgICBpdGVyLT5sZXZlbHNfYWxsb2MpOworCQkJCWxldmVsID0gJml0ZXItPmxldmVsc1tpdGVyLT5sZXZlbHNfbnIrK107CisJCQkJbGV2ZWwtPmluaXRpYWxpemVkID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBUaGUgZGlyZWN0b3J5IGhhcyBhbHJlYWR5IGJlZW4KKwkJCQkgKiBpdGVyYXRlZCBvdmVyIGFuZCBpdGVyYXRlZCBpbnRvOworCQkJCSAqIHdlJ3JlIGRvbmUgd2l0aCBpdC4KKwkJCQkgKi8KKwkJCX0KKwkJfQorCisJCWlmICghbGV2ZWwtPmRpcikgeworCQkJLyoKKwkJCSAqIFRoaXMgbGV2ZWwgaXMgZXhoYXVzdGVkIChvciB3YXNuJ3Qgb3BlbmVkCisJCQkgKiBzdWNjZXNzZnVsbHkpOyBwb3AgdXAgYSBsZXZlbC4KKwkJCSAqLworCQkJaWYgKC0taXRlci0+bGV2ZWxzX25yID09IDApCisJCQkJcmV0dXJuIGRpcl9pdGVyYXRvcl9hYm9ydChkaXJfaXRlcmF0b3IpOworCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIExvb3AgdW50aWwgd2UgZmluZCBhbiBlbnRyeSB0aGF0IHdlIGNhbiBnaXZlIGJhY2sKKwkJICogdG8gdGhlIGNhbGxlcjoKKwkJICovCisJCXdoaWxlICgxKSB7CisJCQlzdHJidWZfc2V0bGVuKCZpdGVyLT5iYXNlLnBhdGgsIGxldmVsLT5wcmVmaXhfbGVuKTsKKwkJCWVycm5vID0gMDsKKwkJCWRlID0gcmVhZGRpcihsZXZlbC0+ZGlyKTsKKworCQkJaWYgKCFkZSkgeworCQkJCS8qIFRoaXMgbGV2ZWwgaXMgZXhoYXVzdGVkOyBwb3AgdXAgYSBsZXZlbC4gKi8KKwkJCQlpZiAoZXJybm8pIHsKKwkJCQkJd2FybmluZygiZXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgJXM6ICVzIiwKKwkJCQkJCWl0ZXItPmJhc2UucGF0aC5idWYsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJfSBlbHNlIGlmIChjbG9zZWRpcihsZXZlbC0+ZGlyKSkKKwkJCQkJd2FybmluZygiZXJyb3IgY2xvc2luZyBkaXJlY3RvcnkgJXM6ICVzIiwKKwkJCQkJCWl0ZXItPmJhc2UucGF0aC5idWYsIHN0cmVycm9yKGVycm5vKSk7CisKKwkJCQlsZXZlbC0+ZGlyID0gTlVMTDsKKwkJCQlpZiAoLS1pdGVyLT5sZXZlbHNfbnIgPT0gMCkKKwkJCQkJcmV0dXJuIGRpcl9pdGVyYXRvcl9hYm9ydChkaXJfaXRlcmF0b3IpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKKwkJCQljb250aW51ZTsKKworCQkJc3RyYnVmX2FkZHN0cigmaXRlci0+YmFzZS5wYXRoLCBkZS0+ZF9uYW1lKTsKKwkJCWlmIChsc3RhdChpdGVyLT5iYXNlLnBhdGguYnVmLCAmaXRlci0+YmFzZS5zdCkgPCAwKSB7CisJCQkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCQkJd2FybmluZygiZXJyb3IgcmVhZGluZyBwYXRoICclcyc6ICVzIiwKKwkJCQkJCWl0ZXItPmJhc2UucGF0aC5idWYsCisJCQkJCQlzdHJlcnJvcihlcnJubykpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKgorCQkJICogV2UgaGF2ZSB0byBzZXQgdGhlc2UgZWFjaCB0aW1lIGJlY2F1c2UKKwkJCSAqIHRoZSBwYXRoIHN0cmJ1ZiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvYygpZWQuCisJCQkgKi8KKwkJCWl0ZXItPmJhc2UucmVsYXRpdmVfcGF0aCA9CisJCQkJaXRlci0+YmFzZS5wYXRoLmJ1ZiArIGl0ZXItPmxldmVsc1swXS5wcmVmaXhfbGVuOworCQkJaXRlci0+YmFzZS5iYXNlbmFtZSA9CisJCQkJaXRlci0+YmFzZS5wYXRoLmJ1ZiArIGxldmVsLT5wcmVmaXhfbGVuOworCQkJbGV2ZWwtPmRpcl9zdGF0ZSA9IERJUl9TVEFURV9JVEVSOworCisJCQlyZXR1cm4gSVRFUl9PSzsKKwkJfQorCX0KK30KKworaW50IGRpcl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXJfaXRlcmF0b3IpCit7CisJc3RydWN0IGRpcl9pdGVyYXRvcl9pbnQgKml0ZXIgPSAoc3RydWN0IGRpcl9pdGVyYXRvcl9pbnQgKilkaXJfaXRlcmF0b3I7CisKKwlmb3IgKDsgaXRlci0+bGV2ZWxzX25yOyBpdGVyLT5sZXZlbHNfbnItLSkgeworCQlzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2xldmVsICpsZXZlbCA9CisJCQkmaXRlci0+bGV2ZWxzW2l0ZXItPmxldmVsc19uciAtIDFdOworCisJCWlmIChsZXZlbC0+ZGlyICYmIGNsb3NlZGlyKGxldmVsLT5kaXIpKSB7CisJCQlzdHJidWZfc2V0bGVuKCZpdGVyLT5iYXNlLnBhdGgsIGxldmVsLT5wcmVmaXhfbGVuKTsKKwkJCXdhcm5pbmcoImVycm9yIGNsb3NpbmcgZGlyZWN0b3J5ICVzOiAlcyIsCisJCQkJaXRlci0+YmFzZS5wYXRoLmJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKKwkJfQorCX0KKworCWZyZWUoaXRlci0+bGV2ZWxzKTsKKwlzdHJidWZfcmVsZWFzZSgmaXRlci0+YmFzZS5wYXRoKTsKKwlmcmVlKGl0ZXIpOworCXJldHVybiBJVEVSX0RPTkU7Cit9CisKK3N0cnVjdCBkaXJfaXRlcmF0b3IgKmRpcl9pdGVyYXRvcl9iZWdpbihjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBkaXJfaXRlcmF0b3JfaW50ICppdGVyID0geGNhbGxvYygxLCBzaXplb2YoKml0ZXIpKTsKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXJfaXRlcmF0b3IgPSAmaXRlci0+YmFzZTsKKworCWlmICghcGF0aCB8fCAhKnBhdGgpCisJCWRpZSgiQlVHOiBlbXB0eSBwYXRoIHBhc3NlZCB0byBkaXJfaXRlcmF0b3JfYmVnaW4oKSIpOworCisJc3RyYnVmX2luaXQoJml0ZXItPmJhc2UucGF0aCwgUEFUSF9NQVgpOworCXN0cmJ1Zl9hZGRzdHIoJml0ZXItPmJhc2UucGF0aCwgcGF0aCk7CisKKwlBTExPQ19HUk9XKGl0ZXItPmxldmVscywgMTAsIGl0ZXItPmxldmVsc19hbGxvYyk7CisKKwlpdGVyLT5sZXZlbHNfbnIgPSAxOworCWl0ZXItPmxldmVsc1swXS5pbml0aWFsaXplZCA9IDA7CisKKwlyZXR1cm4gZGlyX2l0ZXJhdG9yOworfQpkaWZmIC0tZ2l0IGEvZGlyLWl0ZXJhdG9yLmggYi9kaXItaXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzczOWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlyLWl0ZXJhdG9yLmgKQEAgLTAsMCArMSw4NyBAQAorI2lmbmRlZiBESVJfSVRFUkFUT1JfSAorI2RlZmluZSBESVJfSVRFUkFUT1JfSAorCisvKgorICogSXRlcmF0ZSBvdmVyIGEgZGlyZWN0b3J5IHRyZWUuCisgKgorICogSXRlcmF0ZSBvdmVyIGEgZGlyZWN0b3J5IHRyZWUsIHJlY3Vyc2l2ZWx5LCBpbmNsdWRpbmcgcGF0aHMgb2YgYWxsCisgKiB0eXBlcyBhbmQgaGlkZGVuIHBhdGhzLiBTa2lwICIuIiBhbmQgIi4uIiBlbnRyaWVzIGFuZCBkb24ndCBmb2xsb3cKKyAqIHN5bWxpbmtzIGV4Y2VwdCBmb3IgdGhlIG9yaWdpbmFsIHBhdGguCisgKgorICogRXZlcnkgdGltZSBkaXJfaXRlcmF0b3JfYWR2YW5jZSgpIGlzIGNhbGxlZCwgdXBkYXRlIHRoZSBtZW1iZXJzIG9mCisgKiB0aGUgZGlyX2l0ZXJhdG9yIHN0cnVjdHVyZSB0byByZWZsZWN0IHRoZSBuZXh0IHBhdGggaW4gdGhlCisgKiBpdGVyYXRpb24uIFRoZSBvcmRlciB0aGF0IHBhdGhzIGFyZSBpdGVyYXRlZCBvdmVyIHdpdGhpbiBhCisgKiBkaXJlY3RvcnkgaXMgdW5kZWZpbmVkLCBidXQgZGlyZWN0b3J5IHBhdGhzIGFyZSBhbHdheXMgaXRlcmF0ZWQKKyAqIG92ZXIgYmVmb3JlIHRoZSBzdWJkaXJlY3RvcnkgY29udGVudHMuCisgKgorICogQSB0eXBpY2FsIGl0ZXJhdGlvbiBsb29rcyBsaWtlIHRoaXM6CisgKgorICogICAgIGludCBvazsKKyAqICAgICBzdHJ1Y3QgaXRlcmF0b3IgKml0ZXIgPSBkaXJfaXRlcmF0b3JfYmVnaW4ocGF0aCk7CisgKgorICogICAgIHdoaWxlICgob2sgPSBkaXJfaXRlcmF0b3JfYWR2YW5jZShpdGVyKSkgPT0gSVRFUl9PSykgeworICogICAgICAgICAgICAgaWYgKHdhbnRfdG9fc3RvcF9pdGVyYXRpb24oKSkgeworICogICAgICAgICAgICAgICAgICAgICBvayA9IGRpcl9pdGVyYXRvcl9hYm9ydChpdGVyKTsKKyAqICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgKiAgICAgICAgICAgICB9CisgKgorICogICAgICAgICAgICAgLy8gQWNjZXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHBhdGg6CisgKiAgICAgICAgICAgICBpZiAoU19JU0RJUihpdGVyLT5zdC5zdF9tb2RlKSkKKyAqICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyBpcyBhIGRpcmVjdG9yeVxuIiwgaXRlci0+cmVsYXRpdmVfcGF0aCk7CisgKiAgICAgfQorICoKKyAqICAgICBpZiAob2sgIT0gSVRFUl9ET05FKQorICogICAgICAgICAgICAgaGFuZGxlX2Vycm9yKCk7CisgKgorICogQ2FsbGVycyBhcmUgYWxsb3dlZCB0byBtb2RpZnkgaXRlci0+cGF0aCB3aGlsZSB0aGV5IGFyZSB3b3JraW5nLAorICogYnV0IHRoZXkgbXVzdCByZXN0b3JlIGl0IHRvIGl0cyBvcmlnaW5hbCBjb250ZW50cyBiZWZvcmUgY2FsbGluZworICogZGlyX2l0ZXJhdG9yX2FkdmFuY2UoKSBhZ2Fpbi4KKyAqLworCitzdHJ1Y3QgZGlyX2l0ZXJhdG9yIHsKKwkvKiBUaGUgY3VycmVudCBwYXRoOiAqLworCXN0cnVjdCBzdHJidWYgcGF0aDsKKworCS8qCisJICogVGhlIGN1cnJlbnQgcGF0aCByZWxhdGl2ZSB0byB0aGUgc3RhcnRpbmcgcGF0aC4gVGhpcyBwYXJ0CisJICogb2YgdGhlIHBhdGggYWx3YXlzIHVzZXMgIi8iIGNoYXJhY3RlcnMgdG8gc2VwYXJhdGUgcGF0aAorCSAqIGNvbXBvbmVudHM6CisJICovCisJY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aDsKKworCS8qIFRoZSBjdXJyZW50IGJhc2VuYW1lOiAqLworCWNvbnN0IGNoYXIgKmJhc2VuYW1lOworCisJLyogVGhlIHJlc3VsdCBvZiBjYWxsaW5nIGxzdGF0KCkgb24gcGF0aDogKi8KKwlzdHJ1Y3Qgc3RhdCBzdDsKK307CisKKy8qCisgKiBTdGFydCBhIGRpcmVjdG9yeSBpdGVyYXRpb24gb3ZlciBwYXRoLiBSZXR1cm4gYSBkaXJfaXRlcmF0b3IgdGhhdAorICogaG9sZHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBpdGVyYXRpb24uCisgKgorICogVGhlIGl0ZXJhdGlvbiBpbmNsdWRlcyBhbGwgcGF0aHMgdW5kZXIgcGF0aCwgbm90IGluY2x1ZGluZyBwYXRoCisgKiBpdHNlbGYgYW5kIG5vdCBpbmNsdWRpbmcgIi4iIG9yICIuLiIgZW50cmllcy4KKyAqCisgKiBwYXRoIGlzIHRoZSBzdGFydGluZyBkaXJlY3RvcnkuIEFuIGludGVybmFsIGNvcHkgd2lsbCBiZSBtYWRlLgorICovCitzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXJfaXRlcmF0b3JfYmVnaW4oY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgZmlyc3Qgb3IgbmV4dCBpdGVtIGFuZCByZXR1cm4gSVRFUl9PSy4KKyAqIElmIHRoZSBpdGVyYXRpb24gaXMgZXhoYXVzdGVkLCBmcmVlIHRoZSBkaXJfaXRlcmF0b3IgYW5kIGFueQorICogcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgcmV0dXJuIElURVJfRE9ORS4gT24gZXJyb3IsIGZyZWUKKyAqIGRpcl9pdGVyYXRvciBhbmQgYXNzb2NpYXRlZCByZXNvdXJjZXMgYW5kIHJldHVybiBJVEVSX0VSUk9SLiBJdCBpcworICogYSBidWcgdG8gdXNlIGl0ZXJhdG9yIG9yIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbiBhZnRlciBpdCBoYXMKKyAqIHJldHVybmVkIElURVJfRE9ORSBvciBJVEVSX0VSUk9SLgorICovCitpbnQgZGlyX2l0ZXJhdG9yX2FkdmFuY2Uoc3RydWN0IGRpcl9pdGVyYXRvciAqaXRlcmF0b3IpOworCisvKgorICogRW5kIHRoZSBpdGVyYXRpb24gYmVmb3JlIGl0IGhhcyBiZWVuIGV4aGF1c3RlZC4gRnJlZSB0aGUKKyAqIGRpcl9pdGVyYXRvciBhbmQgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzIGFuZCByZXR1cm4gSVRFUl9ET05FLiBPbgorICogZXJyb3IsIGZyZWUgdGhlIGRpcl9pdGVyYXRvciBhbmQgcmV0dXJuIElURVJfRVJST1IuCisgKi8KK2ludCBkaXJfaXRlcmF0b3JfYWJvcnQoc3RydWN0IGRpcl9pdGVyYXRvciAqaXRlcmF0b3IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Rpci5jIGIvZGlyLmMKaW5kZXggNjE3MmIzNC4uMGVhMjM1ZiAxMDA2NDQKLS0tIGEvZGlyLmMKKysrIGIvZGlyLmMKQEAgLTIzNjQsNyArMjM2NCw3IEBACiAKIAl2YXJpbnRfbGVuID0gZW5jb2RlX3ZhcmludCh1bnRyYWNrZWQtPmlkZW50LmxlbiwgdmFyYnVmKTsKIAlzdHJidWZfYWRkKG91dCwgdmFyYnVmLCB2YXJpbnRfbGVuKTsKLQlzdHJidWZfYWRkKG91dCwgdW50cmFja2VkLT5pZGVudC5idWYsIHVudHJhY2tlZC0+aWRlbnQubGVuKTsKKwlzdHJidWZfYWRkYnVmKG91dCwgJnVudHJhY2tlZC0+aWRlbnQpOwogCiAJc3RyYnVmX2FkZChvdXQsIG91Yywgb3VjX3NpemUobGVuKSk7CiAJZnJlZShvdWMpOwpkaWZmIC0tZ2l0IGEvZGlyLmggYi9kaXIuaAppbmRleCBiZmRlNjk4Li5kYTFhODU4IDEwMDY0NAotLS0gYS9kaXIuaAorKysgYi9kaXIuaApAQCAtMjYyLDkgKzI2MiwzMiBAQAogCiBleHRlcm4gdm9pZCBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKTsKIAorCisvKiBDb25zdGFudHMgZm9yIHJlbW92ZV9kaXJfcmVjdXJzaXZlbHk6ICovCisKKy8qCisgKiBJZiBhIG5vbi1kaXJlY3RvcnkgaXMgZm91bmQgd2l0aGluIHBhdGgsIHN0b3AgYW5kIHJldHVybiBhbiBlcnJvci4KKyAqIChJbiB0aGlzIGNhc2Ugc29tZSBlbXB0eSBkaXJlY3RvcmllcyBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbgorICogcmVtb3ZlZC4pCisgKi8KICNkZWZpbmUgUkVNT1ZFX0RJUl9FTVBUWV9PTkxZIDAxCisKKy8qCisgKiBJZiBhbnkgR2l0IHdvcmsgdHJlZXMgYXJlIGZvdW5kIHdpdGhpbiBwYXRoLCBza2lwIHRoZW0gd2l0aG91dAorICogY29uc2lkZXJpbmcgaXQgYW4gZXJyb3IuCisgKi8KICNkZWZpbmUgUkVNT1ZFX0RJUl9LRUVQX05FU1RFRF9HSVQgMDIKKworLyogUmVtb3ZlIHRoZSBjb250ZW50cyBvZiBwYXRoLCBidXQgbGVhdmUgcGF0aCBpdHNlbGYuICovCiAjZGVmaW5lIFJFTU9WRV9ESVJfS0VFUF9UT1BMRVZFTCAwNAorCisvKgorICogUmVtb3ZlIHBhdGggYW5kIGl0cyBjb250ZW50cywgcmVjdXJzaXZlbHkuIGZsYWdzIGlzIGEgY29tYmluYXRpb24KKyAqIG9mIHRoZSBhYm92ZSBSRU1PVkVfRElSXyogY29uc3RhbnRzLiBSZXR1cm4gMCBvbiBzdWNjZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyBwYXRoIGFzIHRlbXBvcmFyeSBzY3JhdGNoIHNwYWNlLCBidXQgcmVzdG9yZXMgaXQKKyAqIGJlZm9yZSByZXR1cm5pbmcuCisgKi8KIGV4dGVybiBpbnQgcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgZmxhZyk7CiAKIC8qIHRyaWVzIHRvIHJlbW92ZSB0aGUgcGF0aCB3aXRoIGVtcHR5IGRpcmVjdG9yaWVzIGFsb25nIGl0LCBpZ25vcmVzIEVOT0VOVCAqLwpkaWZmIC0tZ2l0IGEvZmFzdC1pbXBvcnQuYyBiL2Zhc3QtaW1wb3J0LmMKaW5kZXggYzUwNGVmNy4uYmY1M2FjOSAxMDA2NDQKLS0tIGEvZmFzdC1pbXBvcnQuYworKysgYi9mYXN0LWltcG9ydC5jCkBAIC0xNjQsOCArMTY0LDggQEAKICNpbmNsdWRlICJyZWZzLmgiCiAjaW5jbHVkZSAiY3N1bS1maWxlLmgiCiAjaW5jbHVkZSAicXVvdGUuaCIKLSNpbmNsdWRlICJleGVjX2NtZC5oIgogI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAKICNkZWZpbmUgUEFDS19JRF9CSVRTIDE2CiAjZGVmaW5lIE1BWF9QQUNLX0lEICgoMTw8UEFDS19JRF9CSVRTKS0xKQpAQCAtMjgyLDYgKzI4Miw3IEBACiAvKiBDb25maWd1cmVkIGxpbWl0cyBvbiBvdXRwdXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9kZXB0aCA9IDEwOwogc3RhdGljIG9mZl90IG1heF9wYWNrc2l6ZTsKK3N0YXRpYyBpbnQgdW5wYWNrX2xpbWl0ID0gMTAwOwogc3RhdGljIGludCBmb3JjZV91cGRhdGU7CiBzdGF0aWMgaW50IHBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CiBzdGF0aWMgaW50IHBhY2tfY29tcHJlc3Npb25fc2VlbjsKQEAgLTMwMCw3ICszMDEsNyBAQAogc3RhdGljIEZJTEUgKnBhY2tfZWRnZXM7CiBzdGF0aWMgdW5zaWduZWQgaW50IHNob3dfc3RhdHMgPSAxOwogc3RhdGljIGludCBnbG9iYWxfYXJnYzsKLXN0YXRpYyBjaGFyICoqZ2xvYmFsX2FyZ3Y7CitzdGF0aWMgY29uc3QgY2hhciAqKmdsb2JhbF9hcmd2OwogCiAvKiBNZW1vcnkgcG9vbHMgKi8KIHN0YXRpYyBzaXplX3QgbWVtX3Bvb2xfYWxsb2MgPSAyKjEwMjQqMTAyNCAtIHNpemVvZihzdHJ1Y3QgbWVtX3Bvb2wpOwpAQCAtNTk2LDYgKzU5NywzMyBAQAogCXJldHVybiBlOwogfQogCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3BhY2tfaWQodW5zaWduZWQgaW50IGlkKQoreworCXVuc2lnbmVkIGludCBoOworCXVuc2lnbmVkIGxvbmcgbHU7CisJc3RydWN0IHRhZyAqdDsKKworCWZvciAoaCA9IDA7IGggPCBBUlJBWV9TSVpFKG9iamVjdF90YWJsZSk7IGgrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplOworCisJCWZvciAoZSA9IG9iamVjdF90YWJsZVtoXTsgZTsgZSA9IGUtPm5leHQpCisJCQlpZiAoZS0+cGFja19pZCA9PSBpZCkKKwkJCQllLT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJfQorCisJZm9yIChsdSA9IDA7IGx1IDwgYnJhbmNoX3RhYmxlX3N6OyBsdSsrKSB7CisJCXN0cnVjdCBicmFuY2ggKmI7CisKKwkJZm9yIChiID0gYnJhbmNoX3RhYmxlW2x1XTsgYjsgYiA9IGItPnRhYmxlX25leHRfYnJhbmNoKQorCQkJaWYgKGItPnBhY2tfaWQgPT0gaWQpCisJCQkJYi0+cGFja19pZCA9IE1BWF9QQUNLX0lEOworCX0KKworCWZvciAodCA9IGZpcnN0X3RhZzsgdDsgdCA9IHQtPm5leHRfdGFnKQorCQlpZiAodC0+cGFja19pZCA9PSBpZCkKKwkJCXQtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBoY19zdHIoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKIHsKIAl1bnNpZ25lZCBpbnQgciA9IDA7CkBAIC05NTEsNiArOTc5LDIzIEBACiAJfQogfQogCitzdGF0aWMgaW50IGxvb3Nlbl9zbWFsbF9wYWNrKGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHVucGFjayA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCWlmIChsc2VlayhwLT5wYWNrX2ZkLCAwLCBTRUVLX1NFVCkgPCAwKQorCQlkaWVfZXJybm8oIkZhaWxlZCBzZWVraW5nIHRvIHN0YXJ0IG9mICclcyciLCBwLT5wYWNrX25hbWUpOworCisJdW5wYWNrLmluID0gcC0+cGFja19mZDsKKwl1bnBhY2suZ2l0X2NtZCA9IDE7CisJdW5wYWNrLnN0ZG91dF90b19zdGRlcnIgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaCgmdW5wYWNrLmFyZ3MsICJ1bnBhY2stb2JqZWN0cyIpOworCWlmICghc2hvd19zdGF0cykKKwkJYXJndl9hcnJheV9wdXNoKCZ1bnBhY2suYXJncywgIi1xIik7CisKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJnVucGFjayk7Cit9CisKIHN0YXRpYyB2b2lkIGVuZF9wYWNrZmlsZSh2b2lkKQogewogCXN0YXRpYyBpbnQgcnVubmluZzsKQEAgLTk3Myw2ICsxMDE4LDE0IEBACiAJCWZpeHVwX3BhY2tfaGVhZGVyX2Zvb3RlcihwYWNrX2RhdGEtPnBhY2tfZmQsIHBhY2tfZGF0YS0+c2hhMSwKIAkJCQkgICAgcGFja19kYXRhLT5wYWNrX25hbWUsIG9iamVjdF9jb3VudCwKIAkJCQkgICAgY3VyX3BhY2tfc2hhMSwgcGFja19zaXplKTsKKworCQlpZiAob2JqZWN0X2NvdW50IDw9IHVucGFja19saW1pdCkgeworCQkJaWYgKCFsb29zZW5fc21hbGxfcGFjayhwYWNrX2RhdGEpKSB7CisJCQkJaW52YWxpZGF0ZV9wYWNrX2lkKHBhY2tfaWQpOworCQkJCWdvdG8gZGlzY2FyZF9wYWNrOworCQkJfQorCQl9CisKIAkJY2xvc2UocGFja19kYXRhLT5wYWNrX2ZkKTsKIAkJaWR4X25hbWUgPSBrZWVwX3BhY2soY3JlYXRlX2luZGV4KCkpOwogCkBAIC0xMDAzLDYgKzEwNTYsNyBAQAogCQlwYWNrX2lkKys7CiAJfQogCWVsc2UgeworZGlzY2FyZF9wYWNrOgogCQljbG9zZShwYWNrX2RhdGEtPnBhY2tfZmQpOwogCQl1bmxpbmtfb3Jfd2FybihwYWNrX2RhdGEtPnBhY2tfbmFtZSk7CiAJfQpAQCAtMzMyMCw2ICszMzc0LDcgQEAKIHN0YXRpYyB2b2lkIGdpdF9wYWNrX2NvbmZpZyh2b2lkKQogewogCWludCBpbmRleHZlcnNpb25fdmFsdWU7CisJaW50IGxpbWl0OwogCXVuc2lnbmVkIGxvbmcgcGFja3NpemVsaW1pdF92YWx1ZTsKIAogCWlmICghZ2l0X2NvbmZpZ19nZXRfdWxvbmcoInBhY2suZGVwdGgiLCAmbWF4X2RlcHRoKSkgewpAQCAtMzM0NCw2ICszMzk5LDExIEBACiAJaWYgKCFnaXRfY29uZmlnX2dldF91bG9uZygicGFjay5wYWNrc2l6ZWxpbWl0IiwgJnBhY2tzaXplbGltaXRfdmFsdWUpKQogCQltYXhfcGFja3NpemUgPSBwYWNrc2l6ZWxpbWl0X3ZhbHVlOwogCisJaWYgKCFnaXRfY29uZmlnX2dldF9pbnQoImZhc3RpbXBvcnQudW5wYWNrbGltaXQiLCAmbGltaXQpKQorCQl1bnBhY2tfbGltaXQgPSBsaW1pdDsKKwllbHNlIGlmICghZ2l0X2NvbmZpZ19nZXRfaW50KCJ0cmFuc2Zlci51bnBhY2tsaW1pdCIsICZsaW1pdCkpCisJCXVucGFja19saW1pdCA9IGxpbWl0OworCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogfQogCkBAIC0zMzg0LDE0ICszNDQ0LDEwIEBACiAJCXJlYWRfbWFya3MoKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7Ci0KLQlnaXRfc2V0dXBfZ2V0dGV4dCgpOwotCiAJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQogCQl1c2FnZShmYXN0X2ltcG9ydF91c2FnZSk7CiAKZGlmZiAtLWdpdCBhL2ZldGNoLXBhY2suYyBiL2ZldGNoLXBhY2suYwppbmRleCBiNTAxZDVjLi44NWU3N2FmIDEwMDY0NAotLS0gYS9mZXRjaC1wYWNrLmMKKysrIGIvZmV0Y2gtcGFjay5jCkBAIC0yNDMsMTYgKzI0MywyMSBAQAogCiAjZGVmaW5lIElOSVRJQUxfRkxVU0ggMTYKICNkZWZpbmUgUElQRVNBRkVfRkxVU0ggMzIKLSNkZWZpbmUgTEFSR0VfRkxVU0ggMTAyNAorI2RlZmluZSBMQVJHRV9GTFVTSCAxNjM4NAogCiBzdGF0aWMgaW50IG5leHRfZmx1c2goc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywgaW50IGNvdW50KQogewotCWludCBmbHVzaF9saW1pdCA9IGFyZ3MtPnN0YXRlbGVzc19ycGMgPyBMQVJHRV9GTFVTSCA6IFBJUEVTQUZFX0ZMVVNIOwotCi0JaWYgKGNvdW50IDwgZmx1c2hfbGltaXQpCi0JCWNvdW50IDw8PSAxOwotCWVsc2UKLQkJY291bnQgKz0gZmx1c2hfbGltaXQ7CisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpIHsKKwkJaWYgKGNvdW50IDwgTEFSR0VfRkxVU0gpCisJCQljb3VudCA8PD0gMTsKKwkJZWxzZQorCQkJY291bnQgPSBjb3VudCAqIDExIC8gMTA7CisJfSBlbHNlIHsKKwkJaWYgKGNvdW50IDwgUElQRVNBRkVfRkxVU0gpCisJCQljb3VudCA8PD0gMTsKKwkJZWxzZQorCQkJY291bnQgKz0gUElQRVNBRkVfRkxVU0g7CisJfQogCXJldHVybiBjb3VudDsKIH0KIApkaWZmIC0tZ2l0IGEvZnNjay5jIGIvZnNjay5jCmluZGV4IDA1MzE1NDUuLmM5Y2YzZGUgMTAwNjQ0Ci0tLSBhL2ZzY2suYworKysgYi9mc2NrLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAicmVmcy5oIgogI2luY2x1ZGUgInV0ZjguaCIKICNpbmNsdWRlICJzaGExLWFycmF5LmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKIAogI2RlZmluZSBGU0NLX0ZBVEFMIC0xCiAjZGVmaW5lIEZTQ0tfSU5GTyAtMgpAQCAtMjkwLDM1ICsyOTEsODcgQEAKIAogCXZhX3N0YXJ0KGFwLCBmbXQpOwogCXN0cmJ1Zl92YWRkZigmc2IsIGZtdCwgYXApOwotCXJlc3VsdCA9IG9wdGlvbnMtPmVycm9yX2Z1bmMob2JqZWN0LCBtc2dfdHlwZSwgc2IuYnVmKTsKKwlyZXN1bHQgPSBvcHRpb25zLT5lcnJvcl9mdW5jKG9wdGlvbnMsIG9iamVjdCwgbXNnX3R5cGUsIHNiLmJ1Zik7CiAJc3RyYnVmX3JlbGVhc2UoJnNiKTsKIAl2YV9lbmQoYXApOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGNoYXIgKmdldF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJaWYgKCFvcHRpb25zLT5vYmplY3RfbmFtZXMpCisJCXJldHVybiBOVUxMOworCXJldHVybiBsb29rdXBfZGVjb3JhdGlvbihvcHRpb25zLT5vYmplY3RfbmFtZXMsIG9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNoYXIgKmV4aXN0aW5nOworCisJaWYgKCFvcHRpb25zLT5vYmplY3RfbmFtZXMpCisJCXJldHVybjsKKwlleGlzdGluZyA9IGxvb2t1cF9kZWNvcmF0aW9uKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgb2JqKTsKKwlpZiAoZXhpc3RpbmcpCisJCXJldHVybjsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdHJidWZfdmFkZGYoJmJ1ZiwgZm10LCBhcCk7CisJYWRkX2RlY29yYXRpb24ob3B0aW9ucy0+b2JqZWN0X25hbWVzLCBvYmosIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCXZhX2VuZChhcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjcmliZV9vYmplY3Qoc3RydWN0IGZzY2tfb3B0aW9ucyAqbywgc3RydWN0IG9iamVjdCAqb2JqKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNoYXIgKm5hbWU7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZHN0cigmYnVmLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCWlmIChvLT5vYmplY3RfbmFtZXMgJiYgKG5hbWUgPSBsb29rdXBfZGVjb3JhdGlvbihvLT5vYmplY3RfbmFtZXMsIG9iaikpKQorCQlzdHJidWZfYWRkZigmYnVmLCAiICglcykiLCBuYW1lKTsKKworCXJldHVybiBidWYuYnVmOworfQorCiBzdGF0aWMgaW50IGZzY2tfd2Fsa190cmVlKHN0cnVjdCB0cmVlICp0cmVlLCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQogewogCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKIAlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKIAlpbnQgcmVzID0gMDsKKwljb25zdCBjaGFyICpuYW1lOwogCiAJaWYgKHBhcnNlX3RyZWUodHJlZSkpCiAJCXJldHVybiAtMTsKIAorCW5hbWUgPSBnZXRfb2JqZWN0X25hbWUob3B0aW9ucywgJnRyZWUtPm9iamVjdCk7CiAJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CiAJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqOwogCQlpbnQgcmVzdWx0OwogCiAJCWlmIChTX0lTR0lUTElOSyhlbnRyeS5tb2RlKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkKLQkJCXJlc3VsdCA9IG9wdGlvbnMtPndhbGsoJmxvb2t1cF90cmVlKGVudHJ5Lm9pZC0+aGFzaCktPm9iamVjdCwgT0JKX1RSRUUsIGRhdGEsIG9wdGlvbnMpOwotCQllbHNlIGlmIChTX0lTUkVHKGVudHJ5Lm1vZGUpIHx8IFNfSVNMTksoZW50cnkubW9kZSkpCi0JCQlyZXN1bHQgPSBvcHRpb25zLT53YWxrKCZsb29rdXBfYmxvYihlbnRyeS5vaWQtPmhhc2gpLT5vYmplY3QsIE9CSl9CTE9CLCBkYXRhLCBvcHRpb25zKTsKKworCQlpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkgeworCQkJb2JqID0gJmxvb2t1cF90cmVlKGVudHJ5Lm9pZC0+aGFzaCktPm9iamVjdDsKKwkJCWlmIChuYW1lKQorCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlcyVzLyIsIG5hbWUsCisJCQkJCWVudHJ5LnBhdGgpOworCQkJcmVzdWx0ID0gb3B0aW9ucy0+d2FsayhvYmosIE9CSl9UUkVFLCBkYXRhLCBvcHRpb25zKTsKKwkJfQorCQllbHNlIGlmIChTX0lTUkVHKGVudHJ5Lm1vZGUpIHx8IFNfSVNMTksoZW50cnkubW9kZSkpIHsKKwkJCW9iaiA9ICZsb29rdXBfYmxvYihlbnRyeS5vaWQtPmhhc2gpLT5vYmplY3Q7CisJCQlpZiAobmFtZSkKKwkJCQlwdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2JqLCAiJXMlcyIsIG5hbWUsCisJCQkJCWVudHJ5LnBhdGgpOworCQkJcmVzdWx0ID0gb3B0aW9ucy0+d2FsayhvYmosIE9CSl9CTE9CLCBkYXRhLCBvcHRpb25zKTsKKwkJfQogCQllbHNlIHsKIAkJCXJlc3VsdCA9IGVycm9yKCJpbiB0cmVlICVzOiBlbnRyeSAlcyBoYXMgYmFkIG1vZGUgJS42byIsCi0JCQkJCW9pZF90b19oZXgoJnRyZWUtPm9iamVjdC5vaWQpLCBlbnRyeS5wYXRoLCBlbnRyeS5tb2RlKTsKKwkJCQkJZGVzY3JpYmVfb2JqZWN0KG9wdGlvbnMsICZ0cmVlLT5vYmplY3QpLCBlbnRyeS5wYXRoLCBlbnRyeS5tb2RlKTsKIAkJfQogCQlpZiAocmVzdWx0IDwgMCkKIAkJCXJldHVybiByZXN1bHQ7CkBAIC0zMzAsMjAgKzM4Myw1NSBAQAogCiBzdGF0aWMgaW50IGZzY2tfd2Fsa19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQogeworCWludCBjb3VudGVyID0gMCwgZ2VuZXJhdGlvbiA9IDAsIG5hbWVfcHJlZml4X2xlbiA9IDA7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOwogCWludCByZXM7CiAJaW50IHJlc3VsdDsKKwljb25zdCBjaGFyICpuYW1lOwogCiAJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQogCQlyZXR1cm4gLTE7CiAKKwluYW1lID0gZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZjb21taXQtPm9iamVjdCk7CisJaWYgKG5hbWUpCisJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCAmY29tbWl0LT50cmVlLT5vYmplY3QsICIlczoiLCBuYW1lKTsKKwogCXJlc3VsdCA9IG9wdGlvbnMtPndhbGsoKHN0cnVjdCBvYmplY3QgKiljb21taXQtPnRyZWUsIE9CSl9UUkVFLCBkYXRhLCBvcHRpb25zKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJcmV0dXJuIHJlc3VsdDsKIAlyZXMgPSByZXN1bHQ7CiAKIAlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCWlmIChuYW1lICYmIHBhcmVudHMpIHsKKwkJaW50IGxlbiA9IHN0cmxlbihuYW1lKSwgcG93ZXI7CisKKwkJaWYgKGxlbiAmJiBuYW1lW2xlbiAtIDFdID09ICdeJykgeworCQkJZ2VuZXJhdGlvbiA9IDE7CisJCQluYW1lX3ByZWZpeF9sZW4gPSBsZW4gLSAxOworCQl9CisJCWVsc2UgeyAvKiBwYXJzZSB+PGdlbmVyYXRpb24+IHN1ZmZpeCAqLworCQkJZm9yIChnZW5lcmF0aW9uID0gMCwgcG93ZXIgPSAxOworCQkJICAgICBsZW4gJiYgaXNkaWdpdChuYW1lW2xlbiAtIDFdKTsKKwkJCSAgICAgcG93ZXIgKj0gMTApCisJCQkJZ2VuZXJhdGlvbiArPSBwb3dlciAqIChuYW1lWy0tbGVuXSAtICcwJyk7CisJCQlpZiAocG93ZXIgPiAxICYmIGxlbiAmJiBuYW1lW2xlbiAtIDFdID09ICd+JykKKwkJCQluYW1lX3ByZWZpeF9sZW4gPSBsZW4gLSAxOworCQl9CisJfQorCiAJd2hpbGUgKHBhcmVudHMpIHsKKwkJaWYgKG5hbWUpIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZwYXJlbnRzLT5pdGVtLT5vYmplY3Q7CisKKwkJCWlmICgrK2NvdW50ZXIgPiAxKQorCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlc14lZCIsCisJCQkJCW5hbWUsIGNvdW50ZXIpOworCQkJZWxzZSBpZiAoZ2VuZXJhdGlvbiA+IDApCisJCQkJcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsIG9iaiwgIiUuKnN+JWQiLAorCQkJCQluYW1lX3ByZWZpeF9sZW4sIG5hbWUsIGdlbmVyYXRpb24gKyAxKTsKKwkJCWVsc2UKKwkJCQlwdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2JqLCAiJXNeIiwgbmFtZSk7CisJCX0KIAkJcmVzdWx0ID0gb3B0aW9ucy0+d2Fsaygoc3RydWN0IG9iamVjdCAqKXBhcmVudHMtPml0ZW0sIE9CSl9DT01NSVQsIGRhdGEsIG9wdGlvbnMpOwogCQlpZiAocmVzdWx0IDwgMCkKIAkJCXJldHVybiByZXN1bHQ7CkBAIC0zNTYsOCArNDQ0LDEyIEBACiAKIHN0YXRpYyBpbnQgZnNja193YWxrX3RhZyhzdHJ1Y3QgdGFnICp0YWcsIHZvaWQgKmRhdGEsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7CisJY2hhciAqbmFtZSA9IGdldF9vYmplY3RfbmFtZShvcHRpb25zLCAmdGFnLT5vYmplY3QpOworCiAJaWYgKHBhcnNlX3RhZyh0YWcpKQogCQlyZXR1cm4gLTE7CisJaWYgKG5hbWUpCisJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCB0YWctPnRhZ2dlZCwgIiVzIiwgbmFtZSk7CiAJcmV0dXJuIG9wdGlvbnMtPndhbGsodGFnLT50YWdnZWQsIE9CSl9BTlksIGRhdGEsIG9wdGlvbnMpOwogfQogCkBAIC0zNzUsNyArNDY3LDcgQEAKIAljYXNlIE9CSl9UQUc6CiAJCXJldHVybiBmc2NrX3dhbGtfdGFnKChzdHJ1Y3QgdGFnICopb2JqLCBkYXRhLCBvcHRpb25zKTsKIAlkZWZhdWx0OgotCQllcnJvcigiVW5rbm93biBvYmplY3QgdHlwZSBmb3IgJXMiLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCQllcnJvcigiVW5rbm93biBvYmplY3QgdHlwZSBmb3IgJXMiLCBkZXNjcmliZV9vYmplY3Qob3B0aW9ucywgb2JqKSk7CiAJCXJldHVybiAtMTsKIAl9CiB9CkBAIC04MTgsMTIgKzkxMCwxMyBAQAogCQkJICBvYmotPnR5cGUpOwogfQogCi1pbnQgZnNja19lcnJvcl9mdW5jdGlvbihzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKK2ludCBmc2NrX2Vycm9yX2Z1bmN0aW9uKHN0cnVjdCBmc2NrX29wdGlvbnMgKm8sCisJc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgbXNnX3R5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJaWYgKG1zZ190eXBlID09IEZTQ0tfV0FSTikgewotCQl3YXJuaW5nKCJvYmplY3QgJXM6ICVzIiwgb2lkX3RvX2hleCgmb2JqLT5vaWQpLCBtZXNzYWdlKTsKKwkJd2FybmluZygib2JqZWN0ICVzOiAlcyIsIGRlc2NyaWJlX29iamVjdChvLCBvYmopLCBtZXNzYWdlKTsKIAkJcmV0dXJuIDA7CiAJfQotCWVycm9yKCJvYmplY3QgJXM6ICVzIiwgb2lkX3RvX2hleCgmb2JqLT5vaWQpLCBtZXNzYWdlKTsKKwllcnJvcigib2JqZWN0ICVzOiAlcyIsIGRlc2NyaWJlX29iamVjdChvLCBvYmopLCBtZXNzYWdlKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2ZzY2suaCBiL2ZzY2suaAppbmRleCBkZGVkODRiLi4xODkxYzE4IDEwMDY0NAotLS0gYS9mc2NrLmgKKysrIGIvZnNjay5oCkBAIC0yMyw5ICsyMywxMSBAQAogdHlwZWRlZiBpbnQgKCpmc2NrX3dhbGtfZnVuYykoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucyk7CiAKIC8qIGNhbGxiYWNrIGZvciBmc2NrX29iamVjdCwgdHlwZSBpcyBGU0NLX0VSUk9SIG9yIEZTQ0tfV0FSTiAqLwotdHlwZWRlZiBpbnQgKCpmc2NrX2Vycm9yKShzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3R5cGVkZWYgaW50ICgqZnNja19lcnJvcikoc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAotaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitpbnQgZnNja19lcnJvcl9mdW5jdGlvbihzdHJ1Y3QgZnNja19vcHRpb25zICpvLAorCXN0cnVjdCBvYmplY3QgKm9iaiwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiBzdHJ1Y3QgZnNja19vcHRpb25zIHsKIAlmc2NrX3dhbGtfZnVuYyB3YWxrOwpAQCAtMzMsNiArMzUsNyBAQAogCXVuc2lnbmVkIHN0cmljdDoxOwogCWludCAqbXNnX3R5cGU7CiAJc3RydWN0IHNoYTFfYXJyYXkgKnNraXBsaXN0OworCXN0cnVjdCBkZWNvcmF0aW9uICpvYmplY3RfbmFtZXM7CiB9OwogCiAjZGVmaW5lIEZTQ0tfT1BUSU9OU19ERUZBVUxUIHsgTlVMTCwgZnNja19lcnJvcl9mdW5jdGlvbiwgMCwgTlVMTCB9CmRpZmYgLS1naXQgYS9nZXR0ZXh0LmMgYi9nZXR0ZXh0LmMKaW5kZXggYTI2OGEyYy4uZGI3MjdlYSAxMDA2NDQKLS0tIGEvZ2V0dGV4dC5jCisrKyBiL2dldHRleHQuYwpAQCAtMTgsNiArMTgsOCBAQAogIwllbmRpZgogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBjaGFyICpjaGFyc2V0OworCiAvKgogICogR3Vlc3MgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2VzIGZyb20gdGhlIHZhbHVlIGluIExBTkdVQUdFIGVudmlyb25tZW50CiAgKiB2YXJpYWJsZSBhbmQgTENfTUVTU0FHRVMgbG9jYWxlIGNhdGVnb3J5IGlmIE5PX0dFVFRFWFQgaXMgbm90IGRlZmluZWQuCkBAIC02NSw3ICs2Nyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmNoYXJzZXQ7CiBzdGF0aWMgdm9pZCBpbml0X2dldHRleHRfY2hhcnNldChjb25zdCBjaGFyICpkb21haW4pCiB7CiAJLyoKQEAgLTE3Miw4ICsxNzMsMjcgQEAKIHsKIAlzdGF0aWMgaW50IGlzX3V0ZjggPSAtMTsKIAlpZiAoaXNfdXRmOCA9PSAtMSkKLQkJaXNfdXRmOCA9ICFzdHJjbXAoY2hhcnNldCwgIlVURi04Iik7CisJCWlzX3V0ZjggPSBpc191dGY4X2xvY2FsZSgpOwogCiAJcmV0dXJuIGlzX3V0ZjggPyB1dGY4X3N0cndpZHRoKHMpIDogc3RybGVuKHMpOwogfQogI2VuZGlmCisKK2ludCBpc191dGY4X2xvY2FsZSh2b2lkKQoreworI2lmZGVmIE5PX0dFVFRFWFQKKwlpZiAoIWNoYXJzZXQpIHsKKwkJY29uc3QgY2hhciAqZW52ID0gZ2V0ZW52KCJMQ19BTEwiKTsKKwkJaWYgKCFlbnYgfHwgISplbnYpCisJCQllbnYgPSBnZXRlbnYoIkxDX0NUWVBFIik7CisJCWlmICghZW52IHx8ICEqZW52KQorCQkJZW52ID0gZ2V0ZW52KCJMQU5HIik7CisJCWlmICghZW52KQorCQkJZW52ID0gIiI7CisJCWlmIChzdHJjaHIoZW52LCAnLicpKQorCQkJZW52ID0gc3RyY2hyKGVudiwgJy4nKSArIDE7CisJCWNoYXJzZXQgPSB4c3RyZHVwKGVudik7CisJfQorI2VuZGlmCisJcmV0dXJuIGlzX2VuY29kaW5nX3V0ZjgoY2hhcnNldCk7Cit9CmRpZmYgLS1naXQgYS9nZXR0ZXh0LmggYi9nZXR0ZXh0LmgKaW5kZXggMzM2OTZhNC4uN2VlZTY0YSAxMDA2NDQKLS0tIGEvZ2V0dGV4dC5oCisrKyBiL2dldHRleHQuaApAQCAtOTAsNSArOTAsNiBAQAogI2VuZGlmCiAKIGNvbnN0IGNoYXIgKmdldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKHZvaWQpOworZXh0ZXJuIGludCBpc191dGY4X2xvY2FsZSh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAppbmRleCA4MjJmODU3Li42NDJjY2UxIDEwMDc1NQotLS0gYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCisrKyBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKQEAgLTQ1LDYgKzQ1LDcgQEAKIG15ICRub3JtYWxfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yKCIiLCAicmVzZXQiKTsKIAogbXkgJGRpZmZfYWxnb3JpdGhtID0gJHJlcG8tPmNvbmZpZygnZGlmZi5hbGdvcml0aG0nKTsKK215ICRkaWZmX2NvbXBhY3Rpb25faGV1cmlzdGljID0gJHJlcG8tPmNvbmZpZ19ib29sKCdkaWZmLmNvbXBhY3Rpb25oZXVyaXN0aWMnKTsKIG15ICRkaWZmX2ZpbHRlciA9ICRyZXBvLT5jb25maWcoJ2ludGVyYWN0aXZlLmRpZmZmaWx0ZXInKTsKIAogbXkgJHVzZV9yZWFka2V5ID0gMDsKQEAgLTc0OSw2ICs3NTAsOSBAQAogCWlmIChkZWZpbmVkICRkaWZmX2FsZ29yaXRobSkgewogCQlzcGxpY2UgQGRpZmZfY21kLCAxLCAwLCAiLS1kaWZmLWFsZ29yaXRobT0ke2RpZmZfYWxnb3JpdGhtfSI7CiAJfQorCWlmICgkZGlmZl9jb21wYWN0aW9uX2hldXJpc3RpYykgeworCQlzcGxpY2UgQGRpZmZfY21kLCAxLCAwLCAiLS1jb21wYWN0aW9uLWhldXJpc3RpYyI7CisJfQogCWlmIChkZWZpbmVkICRwYXRjaF9tb2RlX3JldmlzaW9uKSB7CiAJCXB1c2ggQGRpZmZfY21kLCBnZXRfZGlmZl9yZWZlcmVuY2UoJHBhdGNoX21vZGVfcmV2aXNpb24pOwogCX0KZGlmZiAtLWdpdCBhL2dpdC1iaXNlY3Quc2ggYi9naXQtYmlzZWN0LnNoCmluZGV4IDVkMWNiMDAuLmFlM2NiMDEgMTAwNzU1Ci0tLSBhL2dpdC1iaXNlY3Quc2gKKysrIGIvZ2l0LWJpc2VjdC5zaApAQCAtMzMsNyArMzMsNiBAQAogCiBPUFRJT05TX1NQRUM9CiAuIGdpdC1zaC1zZXR1cAotLiBnaXQtc2gtaTE4bgogCiBfeDQwPSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJwogX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKQEAgLTI3NSwxMCArMjc0LDExIEBACiAJY2hlY2tfYW5kX3NldF90ZXJtcyAkc3RhdGUKIAljYXNlICIkIywkc3RhdGUiIGluCiAJMCwqKQotCQlkaWUgIiQoZ2V0dGV4dCAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikiIDs7CisJCWRpZSAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIiA7OwogCTEsIiRURVJNX0JBRCJ8MSwiJFRFUk1fR09PRCJ8MSxza2lwKQotCQlyZXY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICQoYmlzZWN0X2hlYWQpKSB8fAotCQkJZGllICIkKGdldHRleHQgIkJhZCByZXYgaW5wdXQ6ICQoYmlzZWN0X2hlYWQpIikiCisJCWJpc2VjdGVkX2hlYWQ9JChiaXNlY3RfaGVhZCkKKwkJcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJGJpc2VjdGVkX2hlYWQiKSB8fAorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQmFkIHJldiBpbnB1dDogXCRiaXNlY3RlZF9oZWFkIikiCiAJCWJpc2VjdF93cml0ZSAiJHN0YXRlIiAiJHJldiIKIAkJY2hlY2tfZXhwZWN0ZWRfcmV2cyAiJHJldiIgOzsKIAkyLCIkVEVSTV9CQUQifCosIiRURVJNX0dPT0QifCosc2tpcCkKZGlmZiAtLWdpdCBhL2dpdC1jb21wYXQtdXRpbC5oIGIvZ2l0LWNvbXBhdC11dGlsLmgKaW5kZXggNDlkNDAyOS4uNTkwYmZkZCAxMDA2NDQKLS0tIGEvZ2l0LWNvbXBhdC11dGlsLmgKKysrIGIvZ2l0LWNvbXBhdC11dGlsLmgKQEAgLTQ3NCw2ICs0NzQsMjMgQEAKIH0KIAogLyoKKyAqIExpa2Ugc2tpcF9wcmVmaXgsIGJ1dCBwcm9taXNlcyBuZXZlciB0byByZWFkIHBhc3QgImxlbiIgYnl0ZXMgb2YgdGhlIGlucHV0CisgKiBidWZmZXIsIGFuZCByZXR1cm5zIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzIGluICJvdXQiIHZpYSAib3V0bGVuIi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2tpcF9wcmVmaXhfbWVtKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgIGNvbnN0IGNoYXIgKipvdXQsIHNpemVfdCAqb3V0bGVuKQoreworCXNpemVfdCBwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7CisJaWYgKHByZWZpeF9sZW4gPD0gbGVuICYmICFtZW1jbXAoYnVmLCBwcmVmaXgsIHByZWZpeF9sZW4pKSB7CisJCSpvdXQgPSBidWYgKyBwcmVmaXhfbGVuOworCQkqb3V0bGVuID0gbGVuIC0gcHJlZml4X2xlbjsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgogICogSWYgYnVmIGVuZHMgd2l0aCBzdWZmaXgsIHJldHVybiAxIGFuZCBzdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mIHRoZSBzdWZmaXgKICAqIGZyb20gKmxlbi4gT3RoZXJ3aXNlLCByZXR1cm4gMCBhbmQgbGVhdmUgKmxlbiB1bnRvdWNoZWQuCiAgKi8KQEAgLTEwNDUsMyArMTA2Miw1IEBACiAjZW5kaWYKIAogI2VuZGlmCisKK2V4dGVybiBpbnQgY21kX21haW4oaW50LCBjb25zdCBjaGFyICoqKTsKZGlmZiAtLWdpdCBhL2dpdC1kaWZmdG9vbC5wZXJsIGIvZ2l0LWRpZmZ0b29sLnBlcmwKaW5kZXggZWJkMTNiYS4uYTU3OTBkMCAxMDA3NTUKLS0tIGEvZ2l0LWRpZmZ0b29sLnBlcmwKKysrIGIvZ2l0LWRpZmZ0b29sLnBlcmwKQEAgLTM3LDE0ICszNyw2IEBACiAJZXhpdCgkZXhpdGNvZGUpOwogfQogCi1zdWIgZmluZF93b3JrdHJlZQotewotCSMgR2l0LT5yZXBvc2l0b3J5LT53Y19wYXRoKCkgZG9lcyBub3QgaG9ub3IgY2hhbmdlcyB0byB0aGUgd29ya2luZwotCSMgdHJlZSBsb2NhdGlvbiBtYWRlIGJ5ICRFTlZ7R0lUX1dPUktfVFJFRX0gb3IgdGhlICdjb3JlLndvcmt0cmVlJwotCSMgY29uZmlnIHZhcmlhYmxlLgotCXJldHVybiBHaXQ6OmNvbW1hbmRfb25lbGluZSgncmV2LXBhcnNlJywgJy0tc2hvdy10b3BsZXZlbCcpOwotfQotCiBzdWIgcHJpbnRfdG9vbF9oZWxwCiB7CiAJIyBTZWUgdGhlIGNvbW1lbnQgYXQgdGhlIGJvdHRvbSBvZiBmaWxlX2RpZmYoKSBmb3IgdGhlIHJlYXNvbiBiZWhpbmQKQEAgLTY3LDE0ICs1OSwxNCBAQAogCiBzdWIgdXNlX3d0X2ZpbGUKIHsKLQlteSAoJHJlcG8sICR3b3JrZGlyLCAkZmlsZSwgJHNoYTEpID0gQF87CisJbXkgKCR3b3JrZGlyLCAkZmlsZSwgJHNoYTEpID0gQF87CiAJbXkgJG51bGxfc2hhMSA9ICcwJyB4IDQwOwogCiAJaWYgKC1sICIkd29ya2Rpci8kZmlsZSIgfHwgISAtZSBfKSB7CiAJCXJldHVybiAoMCwgJG51bGxfc2hhMSk7CiAJfQogCi0JbXkgJHd0X3NoYTEgPSAkcmVwby0+Y29tbWFuZF9vbmVsaW5lKCdoYXNoLW9iamVjdCcsICIkd29ya2Rpci8kZmlsZSIpOworCW15ICR3dF9zaGExID0gR2l0Ojpjb21tYW5kX29uZWxpbmUoJ2hhc2gtb2JqZWN0JywgIiR3b3JrZGlyLyRmaWxlIik7CiAJbXkgJHVzZSA9ICgkc2hhMSBlcSAkbnVsbF9zaGExKSB8fCAoJHNoYTEgZXEgJHd0X3NoYTEpOwogCXJldHVybiAoJHVzZSwgJHd0X3NoYTEpOwogfQpAQCAtODMsMjAgKzc1LDE3IEBACiB7CiAJbXkgKCRyZXBvX3BhdGgsICRpbmRleCwgJHdvcmt0cmVlKSA9IEBfOwogCSRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJGluZGV4OwotCSRFTlZ7R0lUX1dPUktfVFJFRX0gPSAkd29ya3RyZWU7Ci0JbXkgJG11c3RfdW5zZXRfZ2l0X2RpciA9IDA7Ci0JaWYgKG5vdCBkZWZpbmVkKCRFTlZ7R0lUX0RJUn0pKSB7Ci0JCSRtdXN0X3Vuc2V0X2dpdF9kaXIgPSAxOwotCQkkRU5We0dJVF9ESVJ9ID0gJHJlcG9fcGF0aDsKLQl9CiAKLQlteSBAcmVmcmVzaGFyZ3MgPSBxdy91cGRhdGUtaW5kZXggLS1yZWFsbHktcmVmcmVzaCAtcSAtLXVubWVyZ2VkLzsKLQlteSBAZ2l0YXJncyA9IHF3L2RpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLXovOworCW15IEBnaXRhcmdzID0gKCctLWdpdC1kaXInLCAkcmVwb19wYXRoLCAnLS13b3JrLXRyZWUnLCAkd29ya3RyZWUpOworCW15IEByZWZyZXNoYXJncyA9ICgKKwkJQGdpdGFyZ3MsICd1cGRhdGUtaW5kZXgnLAorCQknLS1yZWFsbHktcmVmcmVzaCcsICctcScsICctLXVubWVyZ2VkJyk7CiAJdHJ5IHsKIAkJR2l0Ojpjb21tYW5kX29uZWxpbmUoQHJlZnJlc2hhcmdzKTsKIAl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7fTsKIAotCW15ICRsaW5lID0gR2l0Ojpjb21tYW5kX29uZWxpbmUoQGdpdGFyZ3MpOworCW15IEBkaWZmYXJncyA9IChAZ2l0YXJncywgJ2RpZmYtZmlsZXMnLCAnLS1uYW1lLW9ubHknLCAnLXonKTsKKwlteSAkbGluZSA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKEBkaWZmYXJncyk7CiAJbXkgQGZpbGVzOwogCWlmIChkZWZpbmVkICRsaW5lKSB7CiAJCUBmaWxlcyA9IHNwbGl0KCdcMCcsICRsaW5lKTsKQEAgLTEwNSwyNiArOTQsMTUgQEAKIAl9CiAKIAlkZWxldGUoJEVOVntHSVRfSU5ERVhfRklMRX0pOwotCWRlbGV0ZSgkRU5We0dJVF9XT1JLX1RSRUV9KTsKLQlkZWxldGUoJEVOVntHSVRfRElSfSkgaWYgKCRtdXN0X3Vuc2V0X2dpdF9kaXIpOwogCiAJcmV0dXJuIG1hcCB7ICRfID0+IDEgfSBAZmlsZXM7CiB9CiAKIHN1YiBzZXR1cF9kaXJfZGlmZgogewotCW15ICgkcmVwbywgJHdvcmtkaXIsICRzeW1saW5rcykgPSBAXzsKLQotCSMgUnVuIHRoZSBkaWZmOyBleGl0IGltbWVkaWF0ZWx5IGlmIG5vIGRpZmYgZm91bmQKLQkjICdSZXBvc2l0b3J5JyBhbmQgJ1dvcmtpbmdDb3B5JyBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IHRvIGluc3VyZSB0aGF0Ci0JIyBpZiAkR0lUX0RJUiBhbmQgJEdJVF9XT1JLX1RSRUUgYXJlIHNldCBpbiBFTlYsIHRoZXkgYXJlIGFjdHVhbGx5IHVzZWQKLQkjIGJ5IEdpdC0+cmVwb3NpdG9yeS0+Y29tbWFuZCouCi0JbXkgJHJlcG9fcGF0aCA9ICRyZXBvLT5yZXBvX3BhdGgoKTsKLQlteSAlcmVwb19hcmdzID0gKFJlcG9zaXRvcnkgPT4gJHJlcG9fcGF0aCwgV29ya2luZ0NvcHkgPT4gJHdvcmtkaXIpOwotCW15ICRkaWZmcmVwbyA9IEdpdC0+cmVwb3NpdG9yeSglcmVwb19hcmdzKTsKLQorCW15ICgkd29ya2RpciwgJHN5bWxpbmtzKSA9IEBfOwogCW15IEBnaXRhcmdzID0gKCdkaWZmJywgJy0tcmF3JywgJy0tbm8tYWJicmV2JywgJy16JywgQEFSR1YpOwotCW15ICRkaWZmcnRuID0gJGRpZmZyZXBvLT5jb21tYW5kX29uZWxpbmUoQGdpdGFyZ3MpOworCW15ICRkaWZmcnRuID0gR2l0Ojpjb21tYW5kX29uZWxpbmUoQGdpdGFyZ3MpOwogCWV4aXQoMCkgdW5sZXNzIGRlZmluZWQoJGRpZmZydG4pOwogCiAJIyBCdWlsZCBpbmRleCBpbmZvIGZvciBsZWZ0IGFuZCByaWdodCBzaWRlcyBvZiB0aGUgZGlmZgpAQCAtMTc2LDEyICsxNTQsMTIgQEAKIAogCQlpZiAoJGxtb2RlIGVxICRzeW1saW5rX21vZGUpIHsKIAkJCSRzeW1saW5reyRzcmNfcGF0aH17bGVmdH0gPQotCQkJCSRkaWZmcmVwby0+Y29tbWFuZF9vbmVsaW5lKCdzaG93JywgIiRsc2hhMSIpOworCQkJCUdpdDo6Y29tbWFuZF9vbmVsaW5lKCdzaG93JywgJGxzaGExKTsKIAkJfQogCiAJCWlmICgkcm1vZGUgZXEgJHN5bWxpbmtfbW9kZSkgewogCQkJJHN5bWxpbmt7JGRzdF9wYXRofXtyaWdodH0gPQotCQkJCSRkaWZmcmVwby0+Y29tbWFuZF9vbmVsaW5lKCdzaG93JywgIiRyc2hhMSIpOworCQkJCUdpdDo6Y29tbWFuZF9vbmVsaW5lKCdzaG93JywgJHJzaGExKTsKIAkJfQogCiAJCWlmICgkbG1vZGUgbmUgJG51bGxfbW9kZSBhbmQgJHN0YXR1cyAhfiAvXkMvKSB7CkBAIC0xOTMsOCArMTcxLDggQEAKIAkJCWlmICgkd29ya2luZ190cmVlX2R1cHN7JGRzdF9wYXRofSsrKSB7CiAJCQkJbmV4dDsKIAkJCX0KLQkJCW15ICgkdXNlLCAkd3Rfc2hhMSkgPSB1c2Vfd3RfZmlsZSgkcmVwbywgJHdvcmtkaXIsCi0JCQkJCQkJICAkZHN0X3BhdGgsICRyc2hhMSk7CisJCQlteSAoJHVzZSwgJHd0X3NoYTEpID0KKwkJCQl1c2Vfd3RfZmlsZSgkd29ya2RpciwgJGRzdF9wYXRoLCAkcnNoYTEpOwogCQkJaWYgKCR1c2UpIHsKIAkJCQlwdXNoIEB3b3JraW5nX3RyZWUsICRkc3RfcGF0aDsKIAkJCQkkd3RpbmRleCAuPSAiJHJtb2RlICR3dF9zaGExXHQkZHN0X3BhdGhcMCI7CkBAIC0yMTEsNDQgKzE4OSwzNCBAQAogCW1rcGF0aCgkbGRpcikgb3IgZXhpdF9jbGVhbnVwKCR0bXBkaXIsIDEpOwogCW1rcGF0aCgkcmRpcikgb3IgZXhpdF9jbGVhbnVwKCR0bXBkaXIsIDEpOwogCi0JIyBJZiAkR0lUX0RJUiBpcyBub3Qgc2V0IHByaW9yIHRvIGNhbGxpbmcgJ2dpdCB1cGRhdGUtaW5kZXgnIGFuZAotCSMgJ2dpdCBjaGVja291dC1pbmRleCcsIHRoZW4gdGhvc2UgY29tbWFuZHMgd2lsbCBmYWlsIGlmIGRpZmZ0b29sCi0JIyBpcyBjYWxsZWQgZnJvbSBhIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSByZXBvIHJvb3QuCi0JbXkgJG11c3RfdW5zZXRfZ2l0X2RpciA9IDA7Ci0JaWYgKG5vdCBkZWZpbmVkKCRFTlZ7R0lUX0RJUn0pKSB7Ci0JCSRtdXN0X3Vuc2V0X2dpdF9kaXIgPSAxOwotCQkkRU5We0dJVF9ESVJ9ID0gJHJlcG9fcGF0aDsKLQl9Ci0KIAkjIFBvcHVsYXRlIHRoZSBsZWZ0IGFuZCByaWdodCBkaXJlY3RvcmllcyBiYXNlZCBvbiBlYWNoIGluZGV4IGZpbGUKIAlteSAoJGlucGlwZSwgJGN0eCk7CiAJJEVOVntHSVRfSU5ERVhfRklMRX0gPSAiJHRtcGRpci9saW5kZXgiOwogCSgkaW5waXBlLCAkY3R4KSA9Ci0JCSRyZXBvLT5jb21tYW5kX2lucHV0X3BpcGUocXcodXBkYXRlLWluZGV4IC16IC0taW5kZXgtaW5mbykpOworCQlHaXQ6OmNvbW1hbmRfaW5wdXRfcGlwZSgndXBkYXRlLWluZGV4JywgJy16JywgJy0taW5kZXgtaW5mbycpOwogCXByaW50KCRpbnBpcGUgJGxpbmRleCk7Ci0JJHJlcG8tPmNvbW1hbmRfY2xvc2VfcGlwZSgkaW5waXBlLCAkY3R4KTsKKwlHaXQ6OmNvbW1hbmRfY2xvc2VfcGlwZSgkaW5waXBlLCAkY3R4KTsKIAogCW15ICRyYyA9IHN5c3RlbSgnZ2l0JywgJ2NoZWNrb3V0LWluZGV4JywgJy0tYWxsJywgIi0tcHJlZml4PSRsZGlyLyIpOwogCWV4aXRfY2xlYW51cCgkdG1wZGlyLCAkcmMpIGlmICRyYyAhPSAwOwogCiAJJEVOVntHSVRfSU5ERVhfRklMRX0gPSAiJHRtcGRpci9yaW5kZXgiOwogCSgkaW5waXBlLCAkY3R4KSA9Ci0JCSRyZXBvLT5jb21tYW5kX2lucHV0X3BpcGUocXcodXBkYXRlLWluZGV4IC16IC0taW5kZXgtaW5mbykpOworCQlHaXQ6OmNvbW1hbmRfaW5wdXRfcGlwZSgndXBkYXRlLWluZGV4JywgJy16JywgJy0taW5kZXgtaW5mbycpOwogCXByaW50KCRpbnBpcGUgJHJpbmRleCk7Ci0JJHJlcG8tPmNvbW1hbmRfY2xvc2VfcGlwZSgkaW5waXBlLCAkY3R4KTsKKwlHaXQ6OmNvbW1hbmRfY2xvc2VfcGlwZSgkaW5waXBlLCAkY3R4KTsKIAogCSRyYyA9IHN5c3RlbSgnZ2l0JywgJ2NoZWNrb3V0LWluZGV4JywgJy0tYWxsJywgIi0tcHJlZml4PSRyZGlyLyIpOwogCWV4aXRfY2xlYW51cCgkdG1wZGlyLCAkcmMpIGlmICRyYyAhPSAwOwogCiAJJEVOVntHSVRfSU5ERVhfRklMRX0gPSAiJHRtcGRpci93dGluZGV4IjsKIAkoJGlucGlwZSwgJGN0eCkgPQotCQkkcmVwby0+Y29tbWFuZF9pbnB1dF9waXBlKHF3KHVwZGF0ZS1pbmRleCAtLWluZm8tb25seSAteiAtLWluZGV4LWluZm8pKTsKKwkJR2l0Ojpjb21tYW5kX2lucHV0X3BpcGUoJ3VwZGF0ZS1pbmRleCcsICctLWluZm8tb25seScsICcteicsICctLWluZGV4LWluZm8nKTsKIAlwcmludCgkaW5waXBlICR3dGluZGV4KTsKLQkkcmVwby0+Y29tbWFuZF9jbG9zZV9waXBlKCRpbnBpcGUsICRjdHgpOworCUdpdDo6Y29tbWFuZF9jbG9zZV9waXBlKCRpbnBpcGUsICRjdHgpOwogCiAJIyBJZiAkR0lUX0RJUiB3YXMgZXhwbGljaXRseSBzZXQganVzdCBmb3IgdGhlIHVwZGF0ZS9jaGVja291dAogCSMgY29tbWFuZHMsIHRoZW4gaXQgc2hvdWxkIGJlIHVuc2V0IGJlZm9yZSBjb250aW51aW5nLgotCWRlbGV0ZSgkRU5We0dJVF9ESVJ9KSBpZiAoJG11c3RfdW5zZXRfZ2l0X2Rpcik7CiAJZGVsZXRlKCRFTlZ7R0lUX0lOREVYX0ZJTEV9KTsKIAogCSMgQ2hhbmdlcyBpbiB0aGUgd29ya2luZyB0cmVlIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgc2luY2UgdGhleSBhcmUKQEAgLTQxNSw5ICszODMsOSBAQAogCW15ICRyYzsKIAlteSAkZXJyb3IgPSAwOwogCW15ICRyZXBvID0gR2l0LT5yZXBvc2l0b3J5KCk7Ci0JbXkgJHdvcmtkaXIgPSBmaW5kX3dvcmt0cmVlKCk7Ci0JbXkgKCRhLCAkYiwgJHRtcGRpciwgQHdvcmt0cmVlKSA9Ci0JCXNldHVwX2Rpcl9kaWZmKCRyZXBvLCAkd29ya2RpciwgJHN5bWxpbmtzKTsKKwlteSAkcmVwb19wYXRoID0gJHJlcG8tPnJlcG9fcGF0aCgpOworCW15ICR3b3JrZGlyID0gJHJlcG8tPndjX3BhdGgoKTsKKwlteSAoJGEsICRiLCAkdG1wZGlyLCBAd29ya3RyZWUpID0gc2V0dXBfZGlyX2RpZmYoJHdvcmtkaXIsICRzeW1saW5rcyk7CiAKIAlpZiAoZGVmaW5lZCgkZXh0Y21kKSkgewogCQkkcmMgPSBzeXN0ZW0oJGV4dGNtZCwgJGEsICRiKTsKQEAgLTQ0MywxMCArNDExLDEwIEBACiAJCW5leHQgaWYgISAtZiAiJGIvJGZpbGUiOwogCiAJCWlmICghJGluZGljZXNfbG9hZGVkKSB7Ci0JCQkld3RfbW9kaWZpZWQgPSBjaGFuZ2VkX2ZpbGVzKCRyZXBvLT5yZXBvX3BhdGgoKSwKLQkJCQkiJHRtcGRpci93dGluZGV4IiwgIiR3b3JrZGlyIik7Ci0JCQkldG1wX21vZGlmaWVkID0gY2hhbmdlZF9maWxlcygkcmVwby0+cmVwb19wYXRoKCksCi0JCQkJIiR0bXBkaXIvd3RpbmRleCIsICIkYiIpOworCQkJJXd0X21vZGlmaWVkID0gY2hhbmdlZF9maWxlcygKKwkJCQkkcmVwb19wYXRoLCAiJHRtcGRpci93dGluZGV4IiwgJHdvcmtkaXIpOworCQkJJXRtcF9tb2RpZmllZCA9IGNoYW5nZWRfZmlsZXMoCisJCQkJJHJlcG9fcGF0aCwgIiR0bXBkaXIvd3RpbmRleCIsICRiKTsKIAkJCSRpbmRpY2VzX2xvYWRlZCA9IDE7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLW9jdG9wdXMuc2ggYi9naXQtbWVyZ2Utb2N0b3B1cy5zaAppbmRleCBkYzJmZDFiLi4zMDhlYWZkIDEwMDc1NQotLS0gYS9naXQtbWVyZ2Utb2N0b3B1cy5zaAorKysgYi9naXQtbWVyZ2Utb2N0b3B1cy5zaApAQCAtNSwxNCArNSwxMSBAQAogIyBSZXNvbHZlIHR3byBvciBtb3JlIHRyZWVzLgogIwogCisuIGdpdC1zaC1zZXR1cAorCiBMRj0nCiAnCiAKLWRpZSAoKSB7Ci0gICAgZWNobyA+JjIgIiQqIgotICAgIGV4aXQgMQotfQotCiAjIFRoZSBmaXJzdCBwYXJhbWV0ZXJzIHVwIHRvIC0tIGFyZSBtZXJnZSBiYXNlczsgdGhlIHJlc3QgYXJlIGhlYWRzLgogYmFzZXM9IGhlYWQ9IHJlbW90ZXM9IHNlcF9zZWVuPQogZm9yIGFyZwpAQCAtNDYsNyArNDMsNyBAQAogCiBpZiAhIGdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAtLQogdGhlbgotICAgIGVjaG8gIkVycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZSIKKyAgICBnZXR0ZXh0bG4gIkVycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZSIKICAgICBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtb25seSBIRUFEIC0tIHwgc2VkIC1lICdzL14vICAgIC8nCiAgICAgZXhpdCAyCiBmaQpAQCAtNjEsOCArNTgsOCBAQAogCQkjIFdlIGFsbG93IG9ubHkgbGFzdCBvbmUgdG8gaGF2ZSBhIGhhbmQtcmVzb2x2YWJsZQogCQkjIGNvbmZsaWN0cy4gIExhc3Qgcm91bmQgZmFpbGVkIGFuZCB3ZSBzdGlsbCBoYWQKIAkJIyBhIGhlYWQgdG8gbWVyZ2UuCi0JCWVjaG8gIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgotCQllY2hvICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIE9jdG9wdXMuIgorCQlnZXR0ZXh0bG4gIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgorCQlnZXR0ZXh0bG4gIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gT2N0b3B1cy4iCiAJCWV4aXQgMgogCWVzYWMKIApAQCAtNzMsMTEgKzcwLDExIEBACiAJCWV2YWwgcHJldHR5X25hbWU9XCR7R0lUSEVBRF8kU0hBMV9VUDotJHByZXR0eV9uYW1lfQogCWZpCiAJY29tbW9uPSQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgJFNIQTEgJE1SQykgfHwKLQkJZGllICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggJHByZXR0eV9uYW1lIgorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggXCRwcmV0dHlfbmFtZSIpIgogCiAJY2FzZSAiJExGJGNvbW1vbiRMRiIgaW4KIAkqIiRMRiRTSEExJExGIiopCi0JCWVjaG8gIkFscmVhZHkgdXAtdG8tZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKKwkJZXZhbF9nZXR0ZXh0bG4gIkFscmVhZHkgdXAtdG8tZGF0ZSB3aXRoIFwkcHJldHR5X25hbWUiCiAJCWNvbnRpbnVlCiAJCTs7CiAJZXNhYwpAQCAtODksNyArODYsNyBAQAogCQkjIHRyZWUgYXMgdGhlIGludGVybWVkaWF0ZSByZXN1bHQgb2YgdGhlIG1lcmdlLgogCQkjIFdlIHN0aWxsIG5lZWQgdG8gY291bnQgdGhpcyBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQgc2V0LgogCi0JCWVjaG8gIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorCQlldmFsX2dldHRleHRsbiAiRmFzdC1mb3J3YXJkaW5nIHRvOiBcJHByZXR0eV9uYW1lIgogCQlnaXQgcmVhZC10cmVlIC11IC1tICRoZWFkICRTSEExIHx8IGV4aXQKIAkJTVJDPSRTSEExIE1SVD0kKGdpdCB3cml0ZS10cmVlKQogCQljb250aW51ZQpAQCAtOTcsMTIgKzk0LDEyIEBACiAKIAlOT05fRkZfTUVSR0U9MQogCi0JZWNobyAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKKwlldmFsX2dldHRleHRsbiAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoIFwkcHJldHR5X25hbWUiCiAJZ2l0IHJlYWQtdHJlZSAtdSAtbSAtLWFnZ3Jlc3NpdmUgICRjb21tb24gJE1SVCAkU0hBMSB8fCBleGl0IDIKIAluZXh0PSQoZ2l0IHdyaXRlLXRyZWUgMj4vZGV2L251bGwpCiAJaWYgdGVzdCAkPyAtbmUgMAogCXRoZW4KLQkJZWNobyAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCisJCWdldHRleHRsbiAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCiAJCWdpdC1tZXJnZS1pbmRleCAtbyBnaXQtbWVyZ2Utb25lLWZpbGUgLWEgfHwKIAkJT0NUT1BVU19GQUlMVVJFPTEKIAkJbmV4dD0kKGdpdCB3cml0ZS10cmVlIDI+L2Rldi9udWxsKQpkaWZmIC0tZ2l0IGEvZ2l0LXA0LnB5IGIvZ2l0LXA0LnB5CmluZGV4IGI2NTkzY2YuLmZkNWNhNTIgMTAwNzU1Ci0tLSBhL2dpdC1wNC5weQorKysgYi9naXQtcDQucHkKQEAgLTE5MzQsNyArMTkzNCw3IEBACiAgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYzoKICAgICAgICAgICAgIHNlbGYuY2xpZW50U3BlY0RpcnMgPSBnZXRDbGllbnRTcGVjKCkKIAotICAgICAgICAjIENoZWNrIGZvciB0aGUgZXhpc3RhbmNlIG9mIFA0IGJyYW5jaGVzCisgICAgICAgICMgQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgUDQgYnJhbmNoZXMKICAgICAgICAgYnJhbmNoZXNEZXRlY3RlZCA9IChsZW4ocDRCcmFuY2hlc0luR2l0KCkua2V5cygpKSA+IDEpCiAKICAgICAgICAgaWYgc2VsZi51c2VDbGllbnRTcGVjIGFuZCBub3QgYnJhbmNoZXNEZXRlY3RlZDoKQEAgLTIyNzQsNyArMjI3NCw3IEBACiAgICAgICAgIHNlbGYudXNlQ2xpZW50U3BlY19mcm9tX29wdGlvbnMgPSBGYWxzZQogICAgICAgICBzZWxmLmNsaWVudFNwZWNEaXJzID0gTm9uZQogICAgICAgICBzZWxmLnRlbXBCcmFuY2hlcyA9IFtdCi0gICAgICAgIHNlbGYudGVtcEJyYW5jaExvY2F0aW9uID0gImdpdC1wNC10bXAiCisgICAgICAgIHNlbGYudGVtcEJyYW5jaExvY2F0aW9uID0gInJlZnMvZ2l0LXA0LXRtcCIKICAgICAgICAgc2VsZi5sYXJnZUZpbGVTeXN0ZW0gPSBOb25lCiAKICAgICAgICAgaWYgZ2l0Q29uZmlnKCdnaXQtcDQubGFyZ2VGaWxlU3lzdGVtJyk6CkBAIC0yNjc0LDcgKzI2NzQsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgaGFzUHJlZml4ID0gW3AgZm9yIHAgaW4gc2VsZi5icmFuY2hQcmVmaXhlcwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChwYXRoLCBwKV0KLSAgICAgICAgaWYgaGFzUHJlZml4IGFuZCBzZWxmLnZlcmJvc2U6CisgICAgICAgIGlmIG5vdCBoYXNQcmVmaXggYW5kIHNlbGYudmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCdJZ25vcmluZyBmaWxlIG91dHNpZGUgb2YgcHJlZml4OiB7MH0nLmZvcm1hdChwYXRoKSkKICAgICAgICAgcmV0dXJuIGhhc1ByZWZpeAogCmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1hbS5zaCBiL2dpdC1yZWJhc2UtLWFtLnNoCmluZGV4IDlhZTg5OGIuLjM3NTIzOTMgMTAwNjQ0Ci0tLSBhL2dpdC1yZWJhc2UtLWFtLnNoCisrKyBiL2dpdC1yZWJhc2UtLWFtLnNoCkBAIC05LDggKzksOCBAQAogIyBiZWxvdyB3ZXJlIG5vdCBpbnNpZGUgYW55IGZ1bmN0aW9uLCBhbmQgZXhwZWN0ZWQgdG8gcmV0dXJuCiAjIHRvIHRoZSBmdW5jdGlvbiB0aGF0IGRvdC1zb3VyY2VkIHVzLgogIwotIyBIb3dldmVyLCBGcmVlQlNEIC9iaW4vc2ggbWlzYmVoYXZlcyBvbiBzdWNoIGEgY29uc3RydWN0IGFuZAotIyBjb250aW51ZXMgdG8gcnVuIHRoZSBzdGF0ZW1lbnRzIHRoYXQgZm9sbG93IHN1Y2ggYSAicmV0dXJuIi4KKyMgSG93ZXZlciwgb2xkZXIgKDkueCkgdmVyc2lvbnMgb2YgRnJlZUJTRCAvYmluL3NoIG1pc2JlaGF2ZSBvbiBzdWNoIGEKKyMgY29uc3RydWN0IGFuZCBjb250aW51ZSB0byBydW4gdGhlIHN0YXRlbWVudHMgdGhhdCBmb2xsb3cgc3VjaCBhICJyZXR1cm4iLgogIyBBcyBhIHdvcmstYXJvdW5kLCB3ZSBpbnRyb2R1Y2UgYW4gZXh0cmEgbGF5ZXIgb2YgYSBmdW5jdGlvbgogIyBoZXJlLCBhbmQgaW1tZWRpYXRlbHkgY2FsbCBpdCBhZnRlciBkZWZpbmluZyBpdC4KIGdpdF9yZWJhc2VfX2FtICgpIHsKZGlmZiAtLWdpdCBhL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoIGIvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2gKaW5kZXggNmU5NmFiYy4uZTJkYTUyNCAxMDA2NDQKLS0tIGEvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2gKKysrIGIvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2gKQEAgLTEyMSwxNCArMTIxLDE0IEBACiAJc2VkIC1lIDFxIDwgIiR0b2RvIiA+PiAiJGRvbmUiCiAJc2VkIC1lIDFkIDwgIiR0b2RvIiA+PiAiJHRvZG8iLm5ldwogCW12IC1mICIkdG9kbyIubmV3ICIkdG9kbyIKLQluZXdfY291bnQ9JChnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzIDwiJGRvbmUiIHwgd2MgLWwpCisJbmV3X2NvdW50PSQoKCAkKGdpdCBzdHJpcHNwYWNlIC0tc3RyaXAtY29tbWVudHMgPCIkZG9uZSIgfCB3YyAtbCkgKSkKIAllY2hvICRuZXdfY291bnQgPiIkbXNnbnVtIgogCXRvdGFsPSQoKCRuZXdfY291bnQgKyAkKGdpdCBzdHJpcHNwYWNlIC0tc3RyaXAtY29tbWVudHMgPCIkdG9kbyIgfCB3YyAtbCkpKQogCWVjaG8gJHRvdGFsID4iJGVuZCIKIAlpZiB0ZXN0ICIkbGFzdF9jb3VudCIgIT0gIiRuZXdfY291bnQiCiAJdGhlbgogCQlsYXN0X2NvdW50PSRuZXdfY291bnQKLQkJcHJpbnRmICJSZWJhc2luZyAoJWQvJWQpXHIiICRuZXdfY291bnQgJHRvdGFsCisJCWV2YWxfZ2V0dGV4dCAiUmViYXNpbmcgKFwkbmV3X2NvdW50L1wkdG90YWwpIjsgcHJpbnRmICJcciIKIAkJdGVzdCAteiAiJHZlcmJvc2UiIHx8IGVjaG8KIAlmaQogfQpAQCAtMTQ0LDI5ICsxNDQsMjggQEAKIH0KIAogYXBwZW5kX3RvZG9faGVscCAoKSB7Ci0JZ2l0IHN0cmlwc3BhY2UgLS1jb21tZW50LWxpbmVzID4+IiR0b2RvIiA8PFxFT0YKLQorCWdldHRleHQgIgogQ29tbWFuZHM6CiAgcCwgcGljayA9IHVzZSBjb21taXQKICByLCByZXdvcmQgPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UKICBlLCBlZGl0ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nCiAgcywgc3F1YXNoID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXQKLSBmLCBmaXh1cCA9IGxpa2UgInNxdWFzaCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2UKKyBmLCBmaXh1cCA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZQogIHgsIGV4ZWMgPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsCiAgZCwgZHJvcCA9IHJlbW92ZSBjb21taXQKIAogVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS4KKyIgfCBnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgPj4iJHRvZG8iCiAKLUVPRgogCWlmIHRlc3QgJChnZXRfbWlzc2luZ19jb21taXRfY2hlY2tfbGV2ZWwpID0gZXJyb3IKIAl0aGVuCi0JCWdpdCBzdHJpcHNwYWNlIC0tY29tbWVudC1saW5lcyA+PiIkdG9kbyIgPDxcRU9GCisJCWdldHRleHQgIgogRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC4KLUVPRgorIiB8IGdpdCBzdHJpcHNwYWNlIC0tY29tbWVudC1saW5lcyA+PiIkdG9kbyIKIAllbHNlCi0JCWdpdCBzdHJpcHNwYWNlIC0tY29tbWVudC1saW5lcyA+PiIkdG9kbyIgPDxcRU9GCisJCWdldHRleHQgIgogSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuCi1FT0YKKyIgfCBnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgPj4iJHRvZG8iCiAJZmkKIH0KIApAQCAtMjAwLDE4ICsxOTksMjAgQEAKIAltYWtlX3BhdGNoICQxCiAJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4gIiRhbWVuZCIKIAlncGdfc2lnbl9vcHRfcXVvdGVkPSR7Z3BnX3NpZ25fb3B0OiskKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJGdwZ19zaWduX29wdCIpfQotCXdhcm4gIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGgiCi0Jd2FybgotCXdhcm4gIglnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWQiCi0Jd2FybgotCXdhcm4gIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1biIKLQl3YXJuCi0Jd2FybiAiCWdpdCByZWJhc2UgLS1jb250aW51ZSIKKwl3YXJuICIkKGV2YWxfZ2V0dGV4dCAiXAorWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aAorCisJZ2l0IGNvbW1pdCAtLWFtZW5kIFwkZ3BnX3NpZ25fb3B0X3F1b3RlZAorCitPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW4KKworCWdpdCByZWJhc2UgLS1jb250aW51ZSIpIgogCXdhcm4KIAlleGl0ICQyCiB9CiAKIGRpZV9hYm9ydCAoKSB7CisJYXBwbHlfYXV0b3N0YXNoCiAJcm0gLXJmICIkc3RhdGVfZGlyIgogCWRpZSAiJDEiCiB9CkBAIC0yMjEsMTAgKzIyMiwxMiBAQAogfQogCiBpc19lbXB0eV9jb21taXQoKSB7Ci0JdHJlZT0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiQxIl57dHJlZX0gMj4vZGV2L251bGwgfHwKLQkJZGllICIkMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIpCi0JcHRyZWU9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkMSJeXnt0cmVlfSAyPi9kZXYvbnVsbCB8fAotCQlwdHJlZT00YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0KQorCXRyZWU9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkMSJee3RyZWV9IDI+L2Rldi9udWxsKSB8fCB7CisJCXNoYTE9JDEKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiXCRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIikiCisJfQorCXB0cmVlPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJDEiXl57dHJlZX0gMj4vZGV2L251bGwpIHx8CisJCXB0cmVlPTRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKIAl0ZXN0ICIkdHJlZSIgPSAiJHB0cmVlIgogfQogCkBAIC0yNjAsNyArMjYzLDcgQEAKIAogCWNhc2UgIiQxIiBpbiAtbikgc2hhMT0kMjsgZmY9IDs7ICopIHNoYTE9JDEgOzsgZXNhYwogCWNhc2UgIiRmb3JjZV9yZWJhc2UiIGluICcnKSA7OyA/KikgZmY9IDs7IGVzYWMKLQlvdXRwdXQgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkc2hhMSB8fCBkaWUgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorCW91dHB1dCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRzaGExIHx8IGRpZSAiJChldmFsX2dldHRleHQgIkludmFsaWQgY29tbWl0IG5hbWU6IFwkc2hhMSIpIgogCiAJaWYgaXNfZW1wdHlfY29tbWl0ICIkc2hhMSIKIAl0aGVuCkBAIC0zMDIsNyArMzA1LDcgQEAKIAkJCQlnaXQgcmV2LXBhcnNlIEhFQUQgPiAiJHJld3JpdHRlbiIvJGN1cnJlbnRfY29tbWl0CiAJCQlkb25lIDwiJHN0YXRlX2RpciIvY3VycmVudC1jb21taXQKIAkJCXJtICIkc3RhdGVfZGlyIi9jdXJyZW50LWNvbW1pdCB8fAotCQkJZGllICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorCQkJCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIikiCiAJCWZpCiAJZmkKIApAQCAtMzU0LDkgKzM1Nyw5IEBACiAJZG9uZQogCWNhc2UgJGZhc3RfZm9yd2FyZCBpbgogCXQpCi0JCW91dHB1dCB3YXJuICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCisJCW91dHB1dCB3YXJuICIkKGV2YWxfZ2V0dGV4dCAiRmFzdC1mb3J3YXJkIHRvIFwkc2hhMSIpIgogCQlvdXRwdXQgZ2l0IHJlc2V0IC0taGFyZCAkc2hhMSB8fAotCQkJZGllICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byBcJHNoYTEiKSIKIAkJOzsKIAlmKQogCQlmaXJzdF9wYXJlbnQ9JChleHByICIkbmV3X3BhcmVudHMiIDogJyBcKFteIF0qXCknKQpAQCAtMzY1LDEyICszNjgsMTIgQEAKIAkJdGhlbgogCQkJIyBkZXRhY2ggSEVBRCB0byBjdXJyZW50IHBhcmVudAogCQkJb3V0cHV0IGdpdCBjaGVja291dCAkZmlyc3RfcGFyZW50IDI+IC9kZXYvbnVsbCB8fAotCQkJCWRpZSAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorCQkJCWRpZSAiJChldmFsX2dldHRleHQgIkNhbm5vdCBtb3ZlIEhFQUQgdG8gXCRmaXJzdF9wYXJlbnQiKSIKIAkJZmkKIAogCQljYXNlICIkbmV3X3BhcmVudHMiIGluCiAJCScgJyonICcqKQotCQkJdGVzdCAiYSQxIiA9IGEtbiAmJiBkaWUgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKKwkJCXRlc3QgImEkMSIgPSBhLW4gJiYgZGllICIkKGV2YWxfZ2V0dGV4dCAiUmVmdXNpbmcgdG8gc3F1YXNoIGEgbWVyZ2U6IFwkc2hhMSIpIgogCiAJCQkjIHJlZG8gbWVyZ2UKIAkJCWF1dGhvcl9zY3JpcHRfY29udGVudD0kKGdldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQgJHNoYTEpCkBAIC0zODQsNyArMzg3LDcgQEAKIAkJCQkkbWVyZ2VfYXJncyAkc3RyYXRlZ3lfYXJncyAtbSAiJG1zZ19jb250ZW50IiAkbmV3X3BhcmVudHMnCiAJCQl0aGVuCiAJCQkJcHJpbnRmICIlc1xuIiAiJG1zZ19jb250ZW50IiA+ICIkR0lUX0RJUiIvTUVSR0VfTVNHCi0JCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCisJCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIiQoZXZhbF9nZXR0ZXh0ICJFcnJvciByZWRvaW5nIG1lcmdlIFwkc2hhMSIpIgogCQkJZmkKIAkJCWVjaG8gIiRzaGExICQoZ2l0IHJldi1wYXJzZSBIRUFEXjApIiA+PiAiJHJld3JpdHRlbl9saXN0IgogCQkJOzsKQEAgLTM5MiwxOSArMzk1LDU5IEBACiAJCQlvdXRwdXQgZXZhbCBnaXQgY2hlcnJ5LXBpY2sgXAogCQkJCSR7Z3BnX3NpZ25fb3B0OiskKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJGdwZ19zaWduX29wdCIpfSBcCiAJCQkJIiRzdHJhdGVneV9hcmdzIiAiJEAiIHx8Ci0JCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorCQkJCWRpZV93aXRoX3BhdGNoICRzaGExICIkKGV2YWxfZ2V0dGV4dCAiQ291bGQgbm90IHBpY2sgXCRzaGExIikiCiAJCQk7OwogCQllc2FjCiAJCTs7CiAJZXNhYwogfQogCi1udGhfc3RyaW5nICgpIHsKLQljYXNlICIkMSIgaW4KLQkqMVswLTldfCpbMDQtOV0pIGVjaG8gIiQxInRoOzsKLQkqMSkgZWNobyAiJDEic3Q7OwotCSoyKSBlY2hvICIkMSJuZDs7Ci0JKjMpIGVjaG8gIiQxInJkOzsKK3RoaXNfbnRoX2NvbW1pdF9tZXNzYWdlICgpIHsKKwluPSQxCisJY2FzZSAiJG4iIGluCisJMSkgZ2V0dGV4dCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiI7OworCTIpIGdldHRleHQgIlRoaXMgaXMgdGhlIDJuZCBjb21taXQgbWVzc2FnZToiOzsKKwkzKSBnZXR0ZXh0ICJUaGlzIGlzIHRoZSAzcmQgY29tbWl0IG1lc3NhZ2U6Ijs7CisJNCkgZ2V0dGV4dCAiVGhpcyBpcyB0aGUgNHRoIGNvbW1pdCBtZXNzYWdlOiI7OworCTUpIGdldHRleHQgIlRoaXMgaXMgdGhlIDV0aCBjb21taXQgbWVzc2FnZToiOzsKKwk2KSBnZXR0ZXh0ICJUaGlzIGlzIHRoZSA2dGggY29tbWl0IG1lc3NhZ2U6Ijs7CisJNykgZ2V0dGV4dCAiVGhpcyBpcyB0aGUgN3RoIGNvbW1pdCBtZXNzYWdlOiI7OworCTgpIGdldHRleHQgIlRoaXMgaXMgdGhlIDh0aCBjb21taXQgbWVzc2FnZToiOzsKKwk5KSBnZXR0ZXh0ICJUaGlzIGlzIHRoZSA5dGggY29tbWl0IG1lc3NhZ2U6Ijs7CisJMTApIGdldHRleHQgIlRoaXMgaXMgdGhlIDEwdGggY29tbWl0IG1lc3NhZ2U6Ijs7CisJIyBUUkFOU0xBVE9SUzogaWYgdGhlIGxhbmd1YWdlIHlvdSBhcmUgdHJhbnNsYXRpbmcgaW50bworCSMgZG9lc24ndCBhbGxvdyB5b3UgdG8gY29tcG9zZSBhIHNlbnRlbmNlIGluIHRoaXMgZmFzaGlvbiwKKwkjIGNvbnNpZGVyIHRyYW5zbGF0aW5nIGFzIGlmIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgZmV3IHN0cmluZ3MKKwkjIHdlcmUgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICR7bn06IgorCSoxWzAtOV18KlswNC05XSkgZXZhbF9nZXR0ZXh0ICJUaGlzIGlzIHRoZSBcJHtufXRoIGNvbW1pdCBtZXNzYWdlOiI7OworCSoxKSBldmFsX2dldHRleHQgIlRoaXMgaXMgdGhlIFwke259c3QgY29tbWl0IG1lc3NhZ2U6Ijs7CisJKjIpIGV2YWxfZ2V0dGV4dCAiVGhpcyBpcyB0aGUgXCR7bn1uZCBjb21taXQgbWVzc2FnZToiOzsKKwkqMykgZXZhbF9nZXR0ZXh0ICJUaGlzIGlzIHRoZSBcJHtufXJkIGNvbW1pdCBtZXNzYWdlOiI7OworCSopIGV2YWxfZ2V0dGV4dCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgXCR7bn06Ijs7CisJZXNhYworfQorc2tpcF9udGhfY29tbWl0X21lc3NhZ2UgKCkgeworCW49JDEKKwljYXNlICIkbiIgaW4KKwkxKSBnZXR0ZXh0ICJUaGUgMXN0IGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiOzsKKwkyKSBnZXR0ZXh0ICJUaGUgMm5kIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiOzsKKwkzKSBnZXR0ZXh0ICJUaGUgM3JkIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiOzsKKwk0KSBnZXR0ZXh0ICJUaGUgNHRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiOzsKKwk1KSBnZXR0ZXh0ICJUaGUgNXRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiOzsKKwk2KSBnZXR0ZXh0ICJUaGUgNnRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiOzsKKwk3KSBnZXR0ZXh0ICJUaGUgN3RoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiOzsKKwk4KSBnZXR0ZXh0ICJUaGUgOHRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiOzsKKwk5KSBnZXR0ZXh0ICJUaGUgOXRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiOzsKKwkxMCkgZ2V0dGV4dCAiVGhlIDEwdGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiI7OworCSMgVFJBTlNMQVRPUlM6IGlmIHRoZSBsYW5ndWFnZSB5b3UgYXJlIHRyYW5zbGF0aW5nIGludG8KKwkjIGRvZXNuJ3QgYWxsb3cgeW91IHRvIGNvbXBvc2UgYSBzZW50ZW5jZSBpbiB0aGlzIGZhc2hpb24sCisJIyBjb25zaWRlciB0cmFuc2xhdGluZyBhcyBpZiB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIGZldyBzdHJpbmdzCisJIyB3ZXJlICJUaGUgY29tbWl0IG1lc3NhZ2UgJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorCSoxWzAtOV18KlswNC05XSkgZXZhbF9nZXR0ZXh0ICJUaGUgXCR7bn10aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6Ijs7CisJKjEpIGV2YWxfZ2V0dGV4dCAiVGhlIFwke259c3QgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiI7OworCSoyKSBldmFsX2dldHRleHQgIlRoZSBcJHtufW5kIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiOzsKKwkqMykgZXZhbF9nZXR0ZXh0ICJUaGUgXCR7bn1yZCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6Ijs7CisJKikgZXZhbF9nZXR0ZXh0ICJUaGUgY29tbWl0IG1lc3NhZ2UgXCR7bn0gd2lsbCBiZSBza2lwcGVkOiI7OwogCWVzYWMKIH0KIApAQCAtNDEyLDIwICs0NTUsMjMgQEAKIAlpZiB0ZXN0IC1mICIkc3F1YXNoX21zZyI7IHRoZW4KIAkJbXYgIiRzcXVhc2hfbXNnIiAiJHNxdWFzaF9tc2ciLmJhayB8fCBleGl0CiAJCWNvdW50PSQoKCQoc2VkIC1uIFwKLQkJCS1lICIxcy9eLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgXCguKlwpIGNvbW1pdHNcLi9cMS9wIiBcCisJCQktZSAiMXMvXiRjb21tZW50X2NoYXIuKlwoWzAtOV1bMC05XSpcKS4qL1wxL3AiIFwKIAkJCS1lICJxIiA8ICIkc3F1YXNoX21zZyIuYmFrKSsxKSkKIAkJewotCQkJcHJpbnRmICclc1xuJyAiJGNvbW1lbnRfY2hhciBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuIgorCQkJcHJpbnRmICclc1xuJyAiJGNvbW1lbnRfY2hhciAkKGV2YWxfbmdldHRleHQgXAorCQkJCSJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgXCRjb3VudCBjb21taXQuIiBcCisJCQkJIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiBcJGNvdW50IGNvbW1pdHMuIiBcCisJCQkJJGNvdW50KSIKIAkJCXNlZCAtZSAxZCAtZSAnMiwvXi4vewogCQkJCS9eJC9kCiAJCQl9JyA8IiRzcXVhc2hfbXNnIi5iYWsKIAkJfSA+IiRzcXVhc2hfbXNnIgogCWVsc2UKLQkJY29tbWl0X21lc3NhZ2UgSEVBRCA+ICIkZml4dXBfbXNnIiB8fCBkaWUgIkNhbm5vdCB3cml0ZSAkZml4dXBfbXNnIgorCQljb21taXRfbWVzc2FnZSBIRUFEID4gIiRmaXh1cF9tc2ciIHx8IGRpZSAiJChnZXR0ZXh0ICJDYW5ub3Qgd3JpdGUgXCRmaXh1cF9tc2ciKSIKIAkJY291bnQ9MgogCQl7Ci0JCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgotCQkJcHJpbnRmICclc1xuJyAiJGNvbW1lbnRfY2hhciBUaGUgZmlyc3QgY29tbWl0J3MgbWVzc2FnZSBpczoiCisJCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyICQoZ2V0dGV4dCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iKSIKKwkJCXByaW50ZiAnJXNcbicgIiRjb21tZW50X2NoYXIgJChnZXR0ZXh0ICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IikiCiAJCQllY2hvCiAJCQljYXQgIiRmaXh1cF9tc2ciCiAJCX0gPiIkc3F1YXNoX21zZyIKQEAgLTQzNCwxMyArNDgwLDEzIEBACiAJc3F1YXNoKQogCQlybSAtZiAiJGZpeHVwX21zZyIKIAkJZWNobwotCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyIFRoaXMgaXMgdGhlICQobnRoX3N0cmluZyAkY291bnQpIGNvbW1pdCBtZXNzYWdlOiIKKwkJcHJpbnRmICclc1xuJyAiJGNvbW1lbnRfY2hhciAkKHRoaXNfbnRoX2NvbW1pdF9tZXNzYWdlICRjb3VudCkiCiAJCWVjaG8KIAkJY29tbWl0X21lc3NhZ2UgJDIKIAkJOzsKIAlmaXh1cCkKIAkJZWNobwotCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyIFRoZSAkKG50aF9zdHJpbmcgJGNvdW50KSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyICQoc2tpcF9udGhfY29tbWl0X21lc3NhZ2UgJGNvdW50KSIKIAkJZWNobwogCQkjIENoYW5nZSB0aGUgc3BhY2UgYWZ0ZXIgdGhlIGNvbW1lbnQgY2hhcmFjdGVyIHRvIFRBQjoKIAkJY29tbWl0X21lc3NhZ2UgJDIgfCBnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgfCBzZWQgLWUgJ3MvIC8JLycKQEAgLTQ1OSwxMiArNTA1LDE0IEBACiAjIG1lc3NhZ2VzLCBlZmZlY3RpdmVseSBjYXVzaW5nIHRoZSBjb21iaW5lZCBjb21taXQgdG8gYmUgdXNlZCBhcyB0aGUKICMgbmV3IGJhc2lzIGZvciBhbnkgZnVydGhlciBzcXVhc2gvZml4dXBzLiAgQXJnczogc2hhMSByZXN0CiBkaWVfZmFpbGVkX3NxdWFzaCgpIHsKKwlzaGExPSQxCisJcmVzdD0kMgogCW12ICIkc3F1YXNoX21zZyIgIiRtc2ciIHx8IGV4aXQKIAlybSAtZiAiJGZpeHVwX21zZyIKIAljcCAiJG1zZyIgIiRHSVRfRElSIi9NRVJHRV9NU0cgfHwgZXhpdAogCXdhcm4KLQl3YXJuICJDb3VsZCBub3QgYXBwbHkgJDEuLi4gJDIiCi0JZGllX3dpdGhfcGF0Y2ggJDEgIiIKKwl3YXJuICIkKGV2YWxfZ2V0dGV4dCAiQ291bGQgbm90IGFwcGx5IFwkc2hhMS4uLiBcJHJlc3QiKSIKKwlkaWVfd2l0aF9wYXRjaCAkc2hhMSAiIgogfQogCiBmbHVzaF9yZXdyaXR0ZW5fcGVuZGluZygpIHsKQEAgLTQ4OCw2ICs1MzYsOCBAQAogfQogCiBkb19waWNrICgpIHsKKwlzaGExPSQxCisJcmVzdD0kMgogCWlmIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJHNxdWFzaF9vbnRvIgogCXRoZW4KIAkJIyBTZXQgdGhlIGNvcnJlY3QgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvciBpbmZvIG9uIHRoZQpAQCAtNDk5LDE1ICs1NDksMTUgQEAKIAkJIyByZXNvbHZlIGJlZm9yZSBtYW51YWxseSBydW5uaW5nIGdpdCBjb21taXQgLS1hbWVuZCB0aGVuIGdpdAogCQkjIHJlYmFzZSAtLWNvbnRpbnVlLgogCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC0tYW1lbmQgXAotCQkJICAgLS1uby1wb3N0LXJld3JpdGUgLW4gLXEgLUMgJDEgJiYKLQkJCXBpY2tfb25lIC1uICQxICYmCisJCQkgICAtLW5vLXBvc3QtcmV3cml0ZSAtbiAtcSAtQyAkc2hhMSAmJgorCQkJcGlja19vbmUgLW4gJHNoYTEgJiYKIAkJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgXAotCQkJCSAgIC0tYW1lbmQgLS1uby1wb3N0LXJld3JpdGUgLW4gLXEgLUMgJDEgXAorCQkJCSAgIC0tYW1lbmQgLS1uby1wb3N0LXJld3JpdGUgLW4gLXEgLUMgJHNoYTEgXAogCQkJCSAgICR7Z3BnX3NpZ25fb3B0OisiJGdwZ19zaWduX29wdCJ9IHx8Ci0JCQlkaWVfd2l0aF9wYXRjaCAkMSAiQ291bGQgbm90IGFwcGx5ICQxLi4uICQyIgorCQkJCSAgIGRpZV93aXRoX3BhdGNoICRzaGExICIkKGV2YWxfZ2V0dGV4dCAiQ291bGQgbm90IGFwcGx5IFwkc2hhMS4uLiBcJHJlc3QiKSIKIAllbHNlCi0JCXBpY2tfb25lICQxIHx8Ci0JCQlkaWVfd2l0aF9wYXRjaCAkMSAiQ291bGQgbm90IGFwcGx5ICQxLi4uICQyIgorCQlwaWNrX29uZSAkc2hhMSB8fAorCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIiQoZXZhbF9nZXR0ZXh0ICJDb3VsZCBub3QgYXBwbHkgXCRzaGExLi4uIFwkcmVzdCIpIgogCWZpCiB9CiAKQEAgLTUzNSwxMCArNTg1LDExIEBACiAJCW1hcmtfYWN0aW9uX2RvbmUKIAkJZG9fcGljayAkc2hhMSAiJHJlc3QiCiAJCWdpdCBjb21taXQgLS1hbWVuZCAtLW5vLXBvc3QtcmV3cml0ZSAke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSB8fCB7Ci0JCQl3YXJuICJDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nICRzaGExLi4uICRyZXN0IgotCQkJd2FybiAiVGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gYW4gZW1wdHkgY29tbWl0IG1lc3NhZ2UsIG9yIHRoZSBwcmUtY29tbWl0IGhvb2siCi0JCQl3YXJuICJmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgYmVmb3JlIgotCQkJd2FybiAieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKKwkJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJcCitDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nIFwkc2hhMS4uLiBcJHJlc3QKK1RoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rCitmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgYmVmb3JlCit5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIikiCiAJCQlleGl0X3dpdGhfcGF0Y2ggJHNoYTEgMQogCQl9CiAJCXJlY29yZF9pbl9yZXdyaXR0ZW4gJHNoYTEKQEAgLTU0OSw3ICs2MDAsNyBAQAogCQltYXJrX2FjdGlvbl9kb25lCiAJCWRvX3BpY2sgJHNoYTEgIiRyZXN0IgogCQlzaGExX2FiYnJldj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkc2hhMSkKLQkJd2FybiAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCisJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJTdG9wcGVkIGF0IFwkc2hhMV9hYmJyZXYuLi4gXCRyZXN0IikiCiAJCWV4aXRfd2l0aF9wYXRjaCAkc2hhMSAwCiAJCTs7CiAJc3F1YXNofHN8Zml4dXB8ZikKQEAgLTU2NCw3ICs2MTUsNyBAQAogCQljb21tZW50X2Zvcl9yZWZsb2cgJHNxdWFzaF9zdHlsZQogCiAJCXRlc3QgLWYgIiRkb25lIiAmJiBoYXNfYWN0aW9uICIkZG9uZSIgfHwKLQkJCWRpZSAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ2Fubm90ICdcJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIpIgogCiAJCW1hcmtfYWN0aW9uX2RvbmUKIAkJdXBkYXRlX3NxdWFzaF9tZXNzYWdlcyAkc3F1YXNoX3N0eWxlICRzaGExCkBAIC02MDYsNyArNjU3LDcgQEAKIAl4fCJleGVjIikKIAkJcmVhZCAtciBjb21tYW5kIHJlc3QgPCAiJHRvZG8iCiAJCW1hcmtfYWN0aW9uX2RvbmUKLQkJcHJpbnRmICdFeGVjdXRpbmc6ICVzXG4nICIkcmVzdCIKKwkJZXZhbF9nZXR0ZXh0bG4gIkV4ZWN1dGluZzogXCRyZXN0IgogCQkiJHtTSEVMTDotQFNIRUxMX1BBVEhAfSIgLWMgIiRyZXN0IiAjIEFjdHVhbCBleGVjdXRpb24KIAkJc3RhdHVzPSQ/CiAJCSMgUnVuIGluIHN1YnNoZWxsIGJlY2F1c2UgcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgY2FuIGRpZS4KQEAgLTYxNCwxMyArNjY1LDE0IEBACiAJCShyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSAicmViYXNlIiAyPi9kZXYvbnVsbCkgfHwgZGlydHk9dAogCQlpZiB0ZXN0ICIkc3RhdHVzIiAtbmUgMAogCQl0aGVuCi0JCQl3YXJuICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKKwkJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJFeGVjdXRpb24gZmFpbGVkOiBcJHJlc3QiKSIKIAkJCXRlc3QgIiRkaXJ0eSIgPSBmIHx8Ci0JCQl3YXJuICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZSIKKwkJCQl3YXJuICIkKGdldHRleHQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIikiCiAKLQkJCXdhcm4gIllvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW4iCi0JCQl3YXJuCi0JCQl3YXJuICIJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCQkJd2FybiAiJChnZXR0ZXh0ICJcCitZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuCisKKwlnaXQgcmViYXNlIC0tY29udGludWUiKSIKIAkJCXdhcm4KIAkJCWlmIHRlc3QgJHN0YXR1cyAtZXEgMTI3CQkjIGNvbW1hbmQgbm90IGZvdW5kCiAJCQl0aGVuCkBAIC02MjksMTggKzY4MSwyMCBAQAogCQkJZXhpdCAiJHN0YXR1cyIKIAkJZWxpZiB0ZXN0ICIkZGlydHkiID0gdAogCQl0aGVuCi0JCQl3YXJuICJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdCIKLQkJCXdhcm4gImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgotCQkJd2FybiAiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuIgotCQkJd2FybgotCQkJd2FybiAiCWdpdCByZWJhc2UgLS1jb250aW51ZSIKKwkJCSMgVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKwkJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJcCitFeGVjdXRpb24gc3VjY2VlZGVkOiBcJHJlc3QKK2J1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlCitDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW4KKworCWdpdCByZWJhc2UgLS1jb250aW51ZSIpIgogCQkJd2FybgogCQkJZXhpdCAxCiAJCWZpCiAJCTs7CiAJKikKLQkJd2FybiAiVW5rbm93biBjb21tYW5kOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKLQkJZml4dG9kbz0iUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCisJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJVbmtub3duIGNvbW1hbmQ6IFwkY29tbWFuZCBcJHNoYTEgXCRyZXN0IikiCisJCWZpeHRvZG89IiQoZ2V0dGV4dCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iKSIKIAkJaWYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAiJHNoYTEiID4vZGV2L251bGwKIAkJdGhlbgogCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIiRmaXh0b2RvIgpAQCAtNjc1LDcgKzcyOSw3IEBACiAJCSIkaG9vayIgcmViYXNlIDwgIiRyZXdyaXR0ZW5fbGlzdCIKIAkJdHJ1ZSAjIHdlIGRvbid0IGNhcmUgaWYgdGhpcyBob29rIGZhaWxlZAogCWZpICYmCi0Jd2FybiAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCisJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCBcJGhlYWRfbmFtZS4iKSIKIAogCXJldHVybiAxICMgbm90IGZhaWx1cmU7IGp1c3QgdG8gYnJlYWsgdGhlIGRvX3Jlc3QgbG9vcAogfQpAQCAtNzIyLDcgKzc3Niw3IEBACiAJCXJlY29yZF9pbl9yZXdyaXR0ZW4gIiRvbnRvIgogCQk7OwogCWVzYWMgfHwKLQlkaWUgIkNvdWxkIG5vdCBza2lwIHVubmVjZXNzYXJ5IHBpY2sgY29tbWFuZHMiCisJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIikiCiB9CiAKIHRyYW5zZm9ybV90b2RvX2lkcyAoKSB7CkBAIC04ODAsOSArOTM0LDkgQEAKIAlpZiB0ZXN0ICRiYWRzaGEgLW5lIDAKIAl0aGVuCiAJCWxpbmU9IiQoc2VkIC1uIC1lICIkezJ9cCIgIiQzIikiCi0JCXdhcm4gIldhcm5pbmc6IHRoZSBTSEEtMSBpcyBtaXNzaW5nIG9yIGlzbid0IiBcCi0JCQkiYSBjb21taXQgaW4gdGhlIGZvbGxvd2luZyBsaW5lOiIKLQkJd2FybiAiIC0gJGxpbmUiCisJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJcCitXYXJuaW5nOiB0aGUgU0hBLTEgaXMgbWlzc2luZyBvciBpc24ndCBhIGNvbW1pdCBpbiB0aGUgZm9sbG93aW5nIGxpbmU6CisgLSBcJGxpbmUiKSIKIAkJd2FybgogCWZpCiAKQEAgLTkxMyw5ICs5NjcsOSBAQAogCQkJOzsKIAkJKikKIAkJCWxpbmU9IiQoc2VkIC1uIC1lICIke2xpbmVub31wIiAiJDEiKSIKLQkJCXdhcm4gIldhcm5pbmc6IHRoZSBjb21tYW5kIGlzbid0IHJlY29nbml6ZWQiIFwKLQkJCQkiaW4gdGhlIGZvbGxvd2luZyBsaW5lOiIKLQkJCXdhcm4gIiAtICRsaW5lIgorCQkJd2FybiAiJChldmFsX2dldHRleHQgIlwKK1dhcm5pbmc6IHRoZSBjb21tYW5kIGlzbid0IHJlY29nbml6ZWQgaW4gdGhlIGZvbGxvd2luZyBsaW5lOgorIC0gXCRsaW5lIikiCiAJCQl3YXJuCiAJCQlyZXR2YWw9MQogCQkJOzsKQEAgLTk1Miw3ICsxMDA2LDcgQEAKICMgU3dpdGNoIHRvIHRoZSBicmFuY2ggaW4gJGludG8gYW5kIG5vdGlmeSBpdCBpbiB0aGUgcmVmbG9nCiBjaGVja291dF9vbnRvICgpIHsKIAlHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OOiBjaGVja291dCAkb250b19uYW1lIgotCW91dHB1dCBnaXQgY2hlY2tvdXQgJG9udG8gfHwgZGllX2Fib3J0ICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCisJb3V0cHV0IGdpdCBjaGVja291dCAkb250byB8fCBkaWVfYWJvcnQgIiQoZ2V0dGV4dCAiY291bGQgbm90IGRldGFjaCBIRUFEIikiCiAJZ2l0IHVwZGF0ZS1yZWYgT1JJR19IRUFEICRvcmlnX2hlYWQKIH0KIApAQCAtOTkwLDI4ICsxMDQ0LDI2IEBACiAJCXRoZW4KIAkJCXRlc3QgIiRjaGVja19sZXZlbCIgPSBlcnJvciAmJiByYWlzZV9lcnJvcj10CiAKLQkJCXdhcm4gIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQiIFwKLQkJCQkiYWNjaWRlbnRhbGx5LiIKLQkJCXdhcm4gIkRyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOiIKKwkJCXdhcm4gIiQoZ2V0dGV4dCAiXAorV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuCitEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKToiKSIKIAogCQkJIyBNYWtlIHRoZSBsaXN0IHVzZXItZnJpZW5kbHkgYW5kIGRpc3BsYXkKIAkJCW9wdD0iLS1uby13YWxrPXNvcnRlZCAtLWZvcm1hdD1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtLXN0ZGluIgogCQkJZ2l0IHJldi1saXN0ICRvcHQgPCIkdG9kbyIubWlzcyB8IHdhcm5fbGluZXMKIAotCQkJd2FybiAiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8iIFwKLQkJCQkiZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuIgotCQkJd2FybgotCQkJd2FybiAiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyB0byBjaGFuZ2UiIFwKLQkJCQkidGhlIGxldmVsIG9mIHdhcm5pbmdzLiIKLQkJCXdhcm4gIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci4iCisJCQl3YXJuICIkKGdldHRleHQgIlwKK1RvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LgorCitVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2Ygd2FybmluZ3MuCitUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuIikiCiAJCQl3YXJuCiAJCWZpCiAJCTs7CiAJaWdub3JlKQogCQk7OwogCSopCi0JCXdhcm4gIlVucmVjb2duaXplZCBzZXR0aW5nICRjaGVja19sZXZlbCBmb3Igb3B0aW9uIiBcCi0JCQkicmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yaW5nLiIKKwkJd2FybiAiJChldmFsX2dldHRleHQgIlVucmVjb2duaXplZCBzZXR0aW5nIFwkY2hlY2tfbGV2ZWwgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIikiCiAJCTs7CiAJZXNhYwogCkBAIC0xMDI4LDggKzEwODAsOCBAQAogCQkjIHBsYWNlZCBiZWZvcmUgdGhlIGNvbW1pdCBvZiB0aGUgbmV4dCBhY3Rpb24KIAkJY2hlY2tvdXRfb250bwogCi0JCXdhcm4gIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgotCQlkaWUgIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLiIKKwkJd2FybiAiJChnZXR0ZXh0ICJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIpIgorCQlkaWUgIiQoZ2V0dGV4dCAiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuIikiCiAJZmkKIH0KIApAQCAtMTAzOCw4ICsxMDkwLDggQEAKICMgYmVsb3cgd2VyZSBub3QgaW5zaWRlIGFueSBmdW5jdGlvbiwgYW5kIGV4cGVjdGVkIHRvIHJldHVybgogIyB0byB0aGUgZnVuY3Rpb24gdGhhdCBkb3Qtc291cmNlZCB1cy4KICMKLSMgSG93ZXZlciwgRnJlZUJTRCAvYmluL3NoIG1pc2JlaGF2ZXMgb24gc3VjaCBhIGNvbnN0cnVjdCBhbmQKLSMgY29udGludWVzIHRvIHJ1biB0aGUgc3RhdGVtZW50cyB0aGF0IGZvbGxvdyBzdWNoIGEgInJldHVybiIuCisjIEhvd2V2ZXIsIG9sZGVyICg5LngpIHZlcnNpb25zIG9mIEZyZWVCU0QgL2Jpbi9zaCBtaXNiZWhhdmUgb24gc3VjaCBhCisjIGNvbnN0cnVjdCBhbmQgY29udGludWUgdG8gcnVuIHRoZSBzdGF0ZW1lbnRzIHRoYXQgZm9sbG93IHN1Y2ggYSAicmV0dXJuIi4KICMgQXMgYSB3b3JrLWFyb3VuZCwgd2UgaW50cm9kdWNlIGFuIGV4dHJhIGxheWVyIG9mIGEgZnVuY3Rpb24KICMgaGVyZSwgYW5kIGltbWVkaWF0ZWx5IGNhbGwgaXQgYWZ0ZXIgZGVmaW5pbmcgaXQuCiBnaXRfcmViYXNlX19pbnRlcmFjdGl2ZSAoKSB7CkBAIC0xMDUzLDQxICsxMTA1LDQzIEBACiAKIAkJdGVzdCAhIC1mICIkR0lUX0RJUiIvQ0hFUlJZX1BJQ0tfSEVBRCB8fAogCQlybSAiJEdJVF9ESVIiL0NIRVJSWV9QSUNLX0hFQUQgfHwKLQkJZGllICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCisJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiKSIKIAllbHNlCiAJCWlmICEgdGVzdCAtZiAiJGF1dGhvcl9zY3JpcHQiCiAJCXRoZW4KIAkJCWdwZ19zaWduX29wdF9xdW90ZWQ9JHtncGdfc2lnbl9vcHQ6KyQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkZ3BnX3NpZ25fb3B0Iil9Ci0JCQlkaWUgIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZQorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiXAorWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuCitJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZQogc3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46CiAKLSAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkCisgIGdpdCBjb21taXQgLS1hbWVuZCBcJGdwZ19zaWduX29wdF9xdW90ZWQKIAogSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjoKIAotICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkCisgIGdpdCBjb21taXQgXCRncGdfc2lnbl9vcHRfcXVvdGVkCiAKIEluIGJvdGggY2FzZSwgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDoKIAogICBnaXQgcmViYXNlIC0tY29udGludWUKLSIKKyIpIgogCQlmaQogCQkuICIkYXV0aG9yX3NjcmlwdCIgfHwKLQkJCWRpZSAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCisJCQlkaWUgIiQoZ2V0dGV4dCAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiKSIKIAkJaWYgdGVzdCAtZiAiJGFtZW5kIgogCQl0aGVuCiAJCQljdXJyZW50X2hlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCiAJCQl0ZXN0ICIkY3VycmVudF9oZWFkIiA9ICQoY2F0ICIkYW1lbmQiKSB8fAotCQkJZGllICJcCi1Zb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UsIGNvbW1pdCB0aGVtCi1maXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorCQkJZGllICIkKGdldHRleHQgIlwKK1lvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbQorZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIpIgogCQkJZG9fd2l0aF9hdXRob3IgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tdmVyaWZ5IC1GICIkbXNnIiAtZSBcCiAJCQkJJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gfHwKLQkJCQlkaWUgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorCQkJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIpIgogCQllbHNlCiAJCQlkb193aXRoX2F1dGhvciBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1GICIkbXNnIiAtZSBcCiAJCQkJJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gfHwKLQkJCQlkaWUgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorCQkJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIpIgogCQlmaQogCWZpCiAKQEAgLTExMTEsMTYgKzExNjUsMTUgQEAKIAltdiAtZiAiJHRvZG8iLm5ldyAiJHRvZG8iCiAJY29sbGFwc2VfdG9kb19pZHMKIAlhcHBlbmRfdG9kb19oZWxwCi0JZ2l0IHN0cmlwc3BhY2UgLS1jb21tZW50LWxpbmVzID4+IiR0b2RvIiA8PFxFT0YKLQorCWdldHRleHQgIgogWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuCiBUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOgogICAgIGdpdCByZWJhc2UgLS1jb250aW51ZQogCi1FT0YKKyIgfCBnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgPj4iJHRvZG8iCiAKIAlnaXRfc2VxdWVuY2VfZWRpdG9yICIkdG9kbyIgfHwKLQkJZGllICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiCisJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiKSIKIAlleHBhbmRfdG9kb19pZHMKIAogCWV4aXQKQEAgLTExMjgsNyArMTE4MSw3IEBACiBlc2FjCiAKIGdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+L2Rldi9udWxsIHx8Ci0JZGllICJZb3UgbmVlZCB0byBzZXQgeW91ciBjb21taXR0ZXIgaW5mbyBmaXJzdCIKKwlkaWUgIiQoZ2V0dGV4dCAiWW91IG5lZWQgdG8gc2V0IHlvdXIgY29tbWl0dGVyIGluZm8gZmlyc3QiKSIKIAogY29tbWVudF9mb3JfcmVmbG9nIHN0YXJ0CiAKQEAgLTExMzYsMTUgKzExODksMTUgQEAKIHRoZW4KIAlHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OOiBjaGVja291dCAkc3dpdGNoX3RvIgogCW91dHB1dCBnaXQgY2hlY2tvdXQgIiRzd2l0Y2hfdG8iIC0tIHx8Ci0JZGllICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ291bGQgbm90IGNoZWNrb3V0IFwkc3dpdGNoX3RvIikiCiAKIAljb21tZW50X2Zvcl9yZWZsb2cgc3RhcnQKIGZpCiAKLW9yaWdfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgfHwgZGllICJObyBIRUFEPyIKLW1rZGlyIC1wICIkc3RhdGVfZGlyIiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCitvcmlnX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8IGRpZSAiJChnZXR0ZXh0ICJObyBIRUFEPyIpIgorbWtkaXIgLXAgIiRzdGF0ZV9kaXIiIHx8IGRpZSAiJChldmFsX2dldHRleHQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IFwkc3RhdGVfZGlyIikiCiAKLTogPiAiJHN0YXRlX2RpciIvaW50ZXJhY3RpdmUgfHwgZGllICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKKzogPiAiJHN0YXRlX2RpciIvaW50ZXJhY3RpdmUgfHwgZGllICIkKGdldHRleHQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIikiCiB3cml0ZV9iYXNpY19zdGF0ZQogaWYgdGVzdCB0ID0gIiRwcmVzZXJ2ZV9tZXJnZXMiCiB0aGVuCkBAIC0xMTU0LDEyICsxMjA3LDEyIEBACiAJCWZvciBjIGluICQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgJG9yaWdfaGVhZCAkdXBzdHJlYW0pCiAJCWRvCiAJCQllY2hvICRvbnRvID4gIiRyZXdyaXR0ZW4iLyRjIHx8Ci0JCQkJZGllICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKKwkJCQlkaWUgIiQoZ2V0dGV4dCAiQ291bGQgbm90IGluaXQgcmV3cml0dGVuIGNvbW1pdHMiKSIKIAkJZG9uZQogCWVsc2UKIAkJbWtkaXIgIiRyZXdyaXR0ZW4iICYmCiAJCWVjaG8gJG9udG8gPiAiJHJld3JpdHRlbiIvcm9vdCB8fAotCQkJZGllICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKKwkJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIpIgogCWZpCiAJIyBObyBjaGVycnktcGljayBiZWNhdXNlIG91ciBmaXJzdCBwYXNzIGlzIHRvIGRldGVybWluZQogCSMgcGFyZW50cyB0byByZXdyaXRlIGFuZCBza2lwcGluZyBkcm9wcGVkIGNvbW1pdHMgd291bGQKQEAgLTEyNTgsMTggKzEzMTEsMjAgQEAKIAogY2F0ID4+IiR0b2RvIiA8PEVPRgogCi0kY29tbWVudF9jaGFyIFJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmQocykpCiskY29tbWVudF9jaGFyICQoZXZhbF9uZ2V0dGV4dCBcCisJIlJlYmFzZSBcJHNob3J0cmV2aXNpb25zIG9udG8gXCRzaG9ydG9udG8gKFwkdG9kb2NvdW50IGNvbW1hbmQpIiBcCisJIlJlYmFzZSBcJHNob3J0cmV2aXNpb25zIG9udG8gXCRzaG9ydG9udG8gKFwkdG9kb2NvdW50IGNvbW1hbmRzKSIgXAorCSIkdG9kb2NvdW50IikKIEVPRgogYXBwZW5kX3RvZG9faGVscAotZ2l0IHN0cmlwc3BhY2UgLS1jb21tZW50LWxpbmVzID4+IiR0b2RvIiA8PFxFT0YKLQorZ2V0dGV4dCAiCiBIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLgogCi1FT0YKKyIgfCBnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgPj4iJHRvZG8iCiAKIGlmIHRlc3QgLXogIiRrZWVwX2VtcHR5IgogdGhlbgotCXByaW50ZiAnJXNcbicgIiRjb21tZW50X2NoYXIgTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiID4+IiR0b2RvIgorCXByaW50ZiAnJXNcbicgIiRjb21tZW50X2NoYXIgJChnZXR0ZXh0ICJOb3RlIHRoYXQgZW1wdHkgY29tbWl0cyBhcmUgY29tbWVudGVkIG91dCIpIiA+PiIkdG9kbyIKIGZpCiAKIApAQCAtMTI3OSw3ICsxMzM0LDcgQEAKIGNwICIkdG9kbyIgIiR0b2RvIi5iYWNrdXAKIGNvbGxhcHNlX3RvZG9faWRzCiBnaXRfc2VxdWVuY2VfZWRpdG9yICIkdG9kbyIgfHwKLQlkaWVfYWJvcnQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKKwlkaWVfYWJvcnQgIiQoZ2V0dGV4dCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIikiCiAKIGhhc19hY3Rpb24gIiR0b2RvIiB8fAogCXJldHVybiAyCmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1tZXJnZS5zaCBiL2dpdC1yZWJhc2UtLW1lcmdlLnNoCmluZGV4IDhkNDNkYjkuLjA2YTQ3MjMgMTAwNjQ0Ci0tLSBhL2dpdC1yZWJhc2UtLW1lcmdlLnNoCisrKyBiL2dpdC1yZWJhc2UtLW1lcmdlLnNoCkBAIC0xMDcsOCArMTA3LDggQEAKICMgYmVsb3cgd2VyZSBub3QgaW5zaWRlIGFueSBmdW5jdGlvbiwgYW5kIGV4cGVjdGVkIHRvIHJldHVybgogIyB0byB0aGUgZnVuY3Rpb24gdGhhdCBkb3Qtc291cmNlZCB1cy4KICMKLSMgSG93ZXZlciwgRnJlZUJTRCAvYmluL3NoIG1pc2JlaGF2ZXMgb24gc3VjaCBhIGNvbnN0cnVjdCBhbmQKLSMgY29udGludWVzIHRvIHJ1biB0aGUgc3RhdGVtZW50cyB0aGF0IGZvbGxvdyBzdWNoIGEgInJldHVybiIuCisjIEhvd2V2ZXIsIG9sZGVyICg5LngpIHZlcnNpb25zIG9mIEZyZWVCU0QgL2Jpbi9zaCBtaXNiZWhhdmUgb24gc3VjaCBhCisjIGNvbnN0cnVjdCBhbmQgY29udGludWUgdG8gcnVuIHRoZSBzdGF0ZW1lbnRzIHRoYXQgZm9sbG93IHN1Y2ggYSAicmV0dXJuIi4KICMgQXMgYSB3b3JrLWFyb3VuZCwgd2UgaW50cm9kdWNlIGFuIGV4dHJhIGxheWVyIG9mIGEgZnVuY3Rpb24KICMgaGVyZSwgYW5kIGltbWVkaWF0ZWx5IGNhbGwgaXQgYWZ0ZXIgZGVmaW5pbmcgaXQuCiBnaXRfcmViYXNlX19tZXJnZSAoKSB7CmRpZmYgLS1naXQgYS9naXQtcmViYXNlLnNoIGIvZ2l0LXJlYmFzZS5zaAppbmRleCA0NGVkZTM2Li4wNGY2ZTQ0IDEwMDc1NQotLS0gYS9naXQtcmViYXNlLnNoCisrKyBiL2dpdC1yZWJhc2Uuc2gKQEAgLTQ1LDcgKzQ1LDYgQEAKIGVkaXQtdG9kbyEgICAgICAgICBlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZQogIgogLiBnaXQtc2gtc2V0dXAKLS4gZ2l0LXNoLWkxOG4KIHNldF9yZWZsb2dfYWN0aW9uIHJlYmFzZQogcmVxdWlyZV93b3JrX3RyZWVfZXhpc3RzCiBjZF90b190b3BsZXZlbApAQCAtMTU0LDcgKzE1Myw3IEBACiAJCWdpdCBzeW1ib2xpYy1yZWYgXAogCQkJLW0gInJlYmFzZSBmaW5pc2hlZDogcmV0dXJuaW5nIHRvICRoZWFkX25hbWUiIFwKIAkJCUhFQUQgJGhlYWRfbmFtZSB8fAotCQlkaWUgIiQoZ2V0dGV4dCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIikiCisJCWRpZSAiJChldmFsX2dldHRleHQgIkNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gXCRoZWFkX25hbWUiKSIKIAkJOzsKIAllc2FjCiB9CkBAIC00NDksNyArNDQ4LDcgQEAKIAkJdGhlbgogCQkJLiBnaXQtcGFyc2UtcmVtb3RlCiAJCQllcnJvcl9vbl9taXNzaW5nX2RlZmF1bHRfdXBzdHJlYW0gInJlYmFzZSIgInJlYmFzZSIgXAotCQkJCSJhZ2FpbnN0IiAiZ2l0IHJlYmFzZSA8YnJhbmNoPiIKKwkJCQkiYWdhaW5zdCIgImdpdCByZWJhc2UgJChnZXR0ZXh0ICc8YnJhbmNoPicpIgogCQlmaQogCiAJCXRlc3QgIiRmb3JrX3BvaW50IiA9IGF1dG8gJiYgZm9ya19wb2ludD10CmRpZmYgLS1naXQgYS9naXQtc2VuZC1lbWFpbC5wZXJsIGIvZ2l0LXNlbmQtZW1haWwucGVybAppbmRleCA2OTU4Nzg1Li5kYTgxYmU0IDEwMDc1NQotLS0gYS9naXQtc2VuZC1lbWFpbC5wZXJsCisrKyBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKQEAgLTYyMSw2ICs2MjEsOCBAQAogCXB1c2ggQGZpbGVzLCAkcmVwby0+Y29tbWFuZCgnZm9ybWF0LXBhdGNoJywgJy1vJywgdGVtcGRpcihDTEVBTlVQID0+IDEpLCBAcmV2X2xpc3Rfb3B0cyk7CiB9CiAKK0BmaWxlcyA9IGhhbmRsZV9iYWNrdXBfZmlsZXMoQGZpbGVzKTsKKwogaWYgKCR2YWxpZGF0ZSkgewogCWZvcmVhY2ggbXkgJGYgKEBmaWxlcykgewogCQl1bmxlc3MgKC1wICRmKSB7CkBAIC0xNzI3LDYgKzE3MjksNDQgQEAKIAlyZXR1cm47CiB9CiAKK3N1YiBoYW5kbGVfYmFja3VwIHsKKwlteSAoJGxhc3QsICRsYXN0bGVuLCAkZmlsZSwgJGtub3duX3N1ZmZpeCkgPSBAXzsKKwlteSAoJHN1ZmZpeCwgJHNraXApOworCisJJHNraXAgPSAwOworCWlmIChkZWZpbmVkICRsYXN0ICYmCisJICAgICgkbGFzdGxlbiA8IGxlbmd0aCgkZmlsZSkpICYmCisJICAgIChzdWJzdHIoJGZpbGUsIDAsICRsYXN0bGVuKSBlcSAkbGFzdCkgJiYKKwkgICAgKCRzdWZmaXggPSBzdWJzdHIoJGZpbGUsICRsYXN0bGVuKSkgIX4gL15bYS16MC05XS9pKSB7CisJCWlmIChkZWZpbmVkICRrbm93bl9zdWZmaXggJiYgJHN1ZmZpeCBlcSAka25vd25fc3VmZml4KSB7CisJCQlwcmludCAiU2tpcHBpbmcgJGZpbGUgd2l0aCBiYWNrdXAgc3VmZml4ICcka25vd25fc3VmZml4Jy5cbiI7CisJCQkkc2tpcCA9IDE7CisJCX0gZWxzZSB7CisJCQlteSAkYW5zd2VyID0gYXNrKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAkZmlsZT8gKHl8Tik6ICIsCisJCQkJCSB2YWxpZF9yZSA9PiBxci9eKD86eXxuKS9pLAorCQkJCQkgZGVmYXVsdCA9PiAnbicpOworCQkJJHNraXAgPSAoJGFuc3dlciBuZSAneScpOworCQkJaWYgKCRza2lwKSB7CisJCQkJJGtub3duX3N1ZmZpeCA9ICRzdWZmaXg7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuICgkc2tpcCwgJGtub3duX3N1ZmZpeCk7Cit9CisKK3N1YiBoYW5kbGVfYmFja3VwX2ZpbGVzIHsKKwlteSBAZmlsZSA9IEBfOworCW15ICgkbGFzdCwgJGxhc3RsZW4sICRrbm93bl9zdWZmaXgsICRza2lwLCBAcmVzdWx0KTsKKwlmb3IgbXkgJGZpbGUgKEBmaWxlKSB7CisJCSgkc2tpcCwgJGtub3duX3N1ZmZpeCkgPSBoYW5kbGVfYmFja3VwKCRsYXN0LCAkbGFzdGxlbiwKKwkJCQkJCSAgICAgICAkZmlsZSwgJGtub3duX3N1ZmZpeCk7CisJCXB1c2ggQHJlc3VsdCwgJGZpbGUgdW5sZXNzICRza2lwOworCQkkbGFzdCA9ICRmaWxlOworCQkkbGFzdGxlbiA9IGxlbmd0aCgkZmlsZSk7CisJfQorCXJldHVybiBAcmVzdWx0OworfQorCiBzdWIgZmlsZV9oYXNfbm9uYXNjaWkgewogCW15ICRmbiA9IHNoaWZ0OwogCW9wZW4obXkgJGZoLCAnPCcsICRmbikKZGlmZiAtLWdpdCBhL2dpdC1zaC1pMThuLnNoIGIvZ2l0LXNoLWkxOG4uc2gKaW5kZXggZTZjMzExNi4uMWVmMTg4OSAxMDA2NDQKLS0tIGEvZ2l0LXNoLWkxOG4uc2gKKysrIGIvZ2l0LXNoLWkxOG4uc2gKQEAgLTUzLDYgKzUzLDEzIEBACiAJCQlnaXQgc2gtaTE4bi0tZW52c3Vic3QgIiQxIgogCQkpCiAJfQorCisJZXZhbF9uZ2V0dGV4dCAoKSB7CisJCW5nZXR0ZXh0ICIkMSIgIiQyIiAiJDMiIHwgKAorCQkJZXhwb3J0IFBBVEggJChnaXQgc2gtaTE4bi0tZW52c3Vic3QgLS12YXJpYWJsZXMgIiQyIik7CisJCQlnaXQgc2gtaTE4bi0tZW52c3Vic3QgIiQyIgorCQkpCisJfQogCTs7CiBwb2lzb24pCiAJIyBFbWl0IGdhcmJhZ2Ugc28gdGhhdCB0ZXN0cyB0aGF0IGluY29ycmVjdGx5IHJlbHkgb24gdHJhbnNsYXRhYmxlCkBAIC02NCw2ICs3MSwxMCBAQAogCWV2YWxfZ2V0dGV4dCAoKSB7CiAJCXByaW50ZiAiJXMiICIjIEdFVFRFWFQgUE9JU09OICMiCiAJfQorCisJZXZhbF9uZ2V0dGV4dCAoKSB7CisJCXByaW50ZiAiJXMiICIjIEdFVFRFWFQgUE9JU09OICMiCisJfQogCTs7CiAqKQogCWdldHRleHQgKCkgewpAQCAtNzYsNiArODcsMTMgQEAKIAkJCWdpdCBzaC1pMThuLS1lbnZzdWJzdCAiJDEiCiAJCSkKIAl9CisKKwlldmFsX25nZXR0ZXh0ICgpIHsKKwkJKHRlc3QgIiQzIiA9IDEgJiYgcHJpbnRmICIlcyIgIiQxIiB8fCBwcmludGYgIiVzIiAiJDIiKSB8ICgKKwkJCWV4cG9ydCBQQVRIICQoZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICIkMiIpOworCQkJZ2l0IHNoLWkxOG4tLWVudnN1YnN0ICIkMiIKKwkJKQorCX0KIAk7OwogZXNhYwogCmRpZmYgLS1naXQgYS9naXQtc2gtc2V0dXAuc2ggYi9naXQtc2gtc2V0dXAuc2gKaW5kZXggYzQ4MTM5YS4uYThhNDU3NiAxMDA2NDQKLS0tIGEvZ2l0LXNoLXNldHVwLnNoCisrKyBiL2dpdC1zaC1zZXR1cC5zaApAQCAtMiw2ICsyLDkgQEAKICMgdG8gc2V0IHVwIHNvbWUgdmFyaWFibGVzIHBvaW50aW5nIGF0IHRoZSBub3JtYWwgZ2l0IGRpcmVjdG9yaWVzIGFuZAogIyBhIGZldyBoZWxwZXIgc2hlbGwgZnVuY3Rpb25zLgogCisjIFNvdXJjZSBnaXQtc2gtaTE4biBmb3IgZ2V0dGV4dCBzdXBwb3J0LgorLiBnaXQtc2gtaTE4bgorCiAjIEhhdmluZyB0aGlzIHZhcmlhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQgd291bGQgYnJlYWsgc2NyaXB0cyBiZWNhdXNlCiAjIHlvdSB3b3VsZCBjYXVzZSAiY2QiIHRvIGJlIHRha2VuIHRvIHVuZXhwZWN0ZWQgcGxhY2VzLiAgSWYgeW91CiAjIGxpa2UgQ0RQQVRILCBkZWZpbmUgaXQgZm9yIHlvdXIgaW50ZXJhY3RpdmUgc2hlbGwgc2Vzc2lvbnMgd2l0aG91dApAQCAtODMsMTYgKzg2LDE2IEBACiBlbHNlCiAJZGFzaGxlc3M9JChiYXNlbmFtZSAtLSAiJDAiIHwgc2VkIC1lICdzLy0vIC8nKQogCXVzYWdlKCkgewotCQlkaWUgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJ1c2FnZTogXCRkYXNobGVzcyBcJFVTQUdFIikiCiAJfQogCiAJaWYgWyAteiAiJExPTkdfVVNBR0UiIF0KIAl0aGVuCi0JCUxPTkdfVVNBR0U9InVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorCQlMT05HX1VTQUdFPSIkKGV2YWxfZ2V0dGV4dCAidXNhZ2U6IFwkZGFzaGxlc3MgXCRVU0FHRSIpIgogCWVsc2UKLQkJTE9OR19VU0FHRT0idXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UKKwkJTE9OR19VU0FHRT0iJChldmFsX2dldHRleHQgInVzYWdlOiBcJGRhc2hsZXNzIFwkVVNBR0UKIAotJExPTkdfVVNBR0UiCiskTE9OR19VU0FHRSIpIgogCWZpCiAKIAljYXNlICIkMSIgaW4KQEAgLTE2MCw5ICsxNjMsMTEgQEAKIAllbHNlCiAJCUdJVF9QQUdFUj1jYXQKIAlmaQotCTogJHtMRVNTPS1GUlh9Ci0JOiAke0xWPS1jfQotCWV4cG9ydCBMRVNTIExWCisJZm9yIHZhcmRlZiBpbiBAQFBBR0VSX0VOVkBACisJZG8KKwkJdmFyPSR7dmFyZGVmJSU9Kn0KKwkJZXZhbCAiOiBcIlwkeyR2YXJkZWZ9XCIgJiYgZXhwb3J0ICR2YXIiCisJZG9uZQogCiAJZXZhbCAiJEdJVF9QQUdFUiIgJyIkQCInCiB9CkBAIC0xODIsNyArMTg3LDcgQEAKIGNkX3RvX3RvcGxldmVsICgpIHsKIAljZHVwPSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpICYmCiAJY2QgIiRjZHVwIiB8fCB7Ci0JCWVjaG8gPiYyICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorCQlnZXR0ZXh0bG4gIkNhbm5vdCBjaGRpciB0byBcJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIiA+JjIKIAkJZXhpdCAxCiAJfQogfQpAQCAtMTkwLDEzICsxOTUsMTYgQEAKIHJlcXVpcmVfd29ya190cmVlX2V4aXN0cyAoKSB7CiAJaWYgdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSkiICE9IHpmYWxzZQogCXRoZW4KLQkJZGllICJmYXRhbDogJDAgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCisJCXByb2dyYW1fbmFtZT0kMAorCQlkaWUgIiQoZ2V0dGV4dCAiZmF0YWw6IFwkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIikiCiAJZmkKIH0KIAogcmVxdWlyZV93b3JrX3RyZWUgKCkgewotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUgMj4vZGV2L251bGwpIiA9IHRydWUgfHwKLQlkaWUgImZhdGFsOiAkMCBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlIDI+L2Rldi9udWxsKSIgPSB0cnVlIHx8IHsKKwkJcHJvZ3JhbV9uYW1lPSQwCisJCWRpZSAiJChnZXR0ZXh0ICJmYXRhbDogXCRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iKSIKKwl9CiB9CiAKIHJlcXVpcmVfY2xlYW5fd29ya190cmVlICgpIHsKQEAgLTIwNiwyNCArMjE0LDQ5IEBACiAKIAlpZiAhIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcwogCXRoZW4KLQkJZWNobyA+JjIgIkNhbm5vdCAkMTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCisJCWFjdGlvbj0kMQorCQljYXNlICIkYWN0aW9uIiBpbgorCQlyZWJhc2UpCisJCQlnZXR0ZXh0bG4gIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIiA+JjIKKwkJCTs7CisJCSJyZXdyaXRlIGJyYW5jaGVzIikKKwkJCWdldHRleHRsbiAiQ2Fubm90IHJld3JpdGUgYnJhbmNoZXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIiA+JjIKKwkJCTs7CisJCSJwdWxsIHdpdGggcmViYXNlIikKKwkJCWdldHRleHRsbiAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIiA+JjIKKwkJCTs7CisJCSopCisJCQlldmFsX2dldHRleHRsbiAiQ2Fubm90IFwkYWN0aW9uOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIgPiYyCisJCQk7OworCQllc2FjCiAJCWVycj0xCiAJZmkKIAogCWlmICEgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCAtLWlnbm9yZS1zdWJtb2R1bGVzIEhFQUQgLS0KIAl0aGVuCi0JCWlmIFsgJGVyciA9IDAgXQorCQlpZiB0ZXN0ICRlcnIgPSAwCiAJCXRoZW4KLQkJICAgIGVjaG8gPiYyICJDYW5ub3QgJDE6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCisJCQlhY3Rpb249JDEKKwkJCWNhc2UgIiRhY3Rpb24iIGluCisJCQlyZWJhc2UpCisJCQkJZ2V0dGV4dGxuICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIiA+JjIKKwkJCQk7OworCQkJInB1bGwgd2l0aCByZWJhc2UiKQorCQkJCWdldHRleHRsbiAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iID4mMgorCQkJCTs7CisJCQkqKQorCQkJCWV2YWxfZ2V0dGV4dGxuICJDYW5ub3QgXCRhY3Rpb246IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iID4mMgorCQkJCTs7CisJCQllc2FjCiAJCWVsc2UKLQkJICAgIGVjaG8gPiYyICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCisJCSAgICBnZXR0ZXh0bG4gIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIgPiYyCiAJCWZpCiAJCWVycj0xCiAJZmkKIAotCWlmIFsgJGVyciA9IDEgXQorCWlmIHRlc3QgJGVyciA9IDEKIAl0aGVuCi0JCXRlc3QgLW4gIiQyIiAmJiBlY2hvID4mMiAiJDIiCisJCXRlc3QgLW4gIiQyIiAmJiBlY2hvICIkMiIgPiYyCiAJCWV4aXQgMQogCWZpCiB9CkBAIC0zMzYsMTUgKzM2OSwxNSBAQAogCXRoZW4KIAkJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwKSIgfHwgewogCQkJZXhpdD0kPwotCQkJZWNobyA+JjIgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCisJCQlnZXR0ZXh0bG4gIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iID4mMgogCQkJZXhpdCAkZXhpdAogCQl9CiAJZmkKIAl0ZXN0IC1uICIkR0lUX0RJUiIgJiYgR0lUX0RJUj0kKGNkICIkR0lUX0RJUiIgJiYgcHdkKSB8fCB7Ci0JCWVjaG8gPiYyICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFic29sdXRlIHBhdGggb2YgZ2l0IGRpcmVjdG9yeSIKKwkJZ2V0dGV4dGxuICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFic29sdXRlIHBhdGggb2YgZ2l0IGRpcmVjdG9yeSIgPiYyCiAJCWV4aXQgMQogCX0KLQk6ICR7R0lUX09CSkVDVF9ESVJFQ1RPUlk9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIG9iamVjdHMpIn0KKwk6ICIke0dJVF9PQkpFQ1RfRElSRUNUT1JZPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBvYmplY3RzKSJ9IgogfQogCiBpZiB0ZXN0IC16ICIkTk9OR0lUX09LIgpkaWZmIC0tZ2l0IGEvZ2l0LXN0YXNoLnNoIGIvZ2l0LXN0YXNoLnNoCmluZGV4IGM3NTA5ZTguLjgyNmFmMTggMTAwNzU1Ci0tLSBhL2dpdC1zdGFzaC5zaAorKysgYi9naXQtc3Rhc2guc2gKQEAgLTE1LDcgKzE1LDYgQEAKIE9QVElPTlNfU1BFQz0KIFNUQVJUX0RJUj0kKHB3ZCkKIC4gZ2l0LXNoLXNldHVwCi0uIGdpdC1zaC1pMThuCiByZXF1aXJlX3dvcmtfdHJlZQogY2RfdG9fdG9wbGV2ZWwKIApAQCAtMjY2LDcgKzI2NSw3IEBACiAJY3JlYXRlX3N0YXNoICIkc3Rhc2hfbXNnIiAkdW50cmFja2VkCiAJc3RvcmVfc3Rhc2ggLW0gIiRzdGFzaF9tc2ciIC1xICR3X2NvbW1pdCB8fAogCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiKSIKLQlzYXkgU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICIkc3Rhc2hfbXNnIgorCXNheSAiJChldmFsX2dldHRleHQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSBcJHN0YXNoX21zZyIpIgogCiAJaWYgdGVzdCAteiAiJHBhdGNoX21vZGUiCiAJdGhlbgpAQCAtNTQ5LDcgKzU0OCw3IEBACiAJCWRyb3Bfc3Rhc2ggIiRAIgogCWVsc2UKIAkJc3RhdHVzPSQ/Ci0JCXNheSAiVGhlIHN0YXNoIGlzIGtlcHQgaW4gY2FzZSB5b3UgbmVlZCBpdCBhZ2Fpbi4iCisJCXNheSAiJChnZXR0ZXh0ICJUaGUgc3Rhc2ggaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIpIgogCQlleGl0ICRzdGF0dXMKIAlmaQogfQpkaWZmIC0tZ2l0IGEvZ2l0LXN1Ym1vZHVsZS5zaCBiL2dpdC1zdWJtb2R1bGUuc2gKaW5kZXggN2ZlOGE1MS4uYjU3Zjg3ZCAxMDA3NTUKLS0tIGEvZ2l0LXN1Ym1vZHVsZS5zaAorKysgYi9naXQtc3VibW9kdWxlLnNoCkBAIC05LDE0ICs5LDEzIEBACiAgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBzdGF0dXMgWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KICAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIGluaXQgWy0tXSBbPHBhdGg+Li4uXQogICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gZGVpbml0IFstZnwtLWZvcmNlXSAoLS1hbGx8IFstLV0gPHBhdGg+Li4uKQotICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gdXBkYXRlIFstLWluaXRdIFstLXJlbW90ZV0gWy1OfC0tbm8tZmV0Y2hdIFstZnwtLWZvcmNlXSBbLS1jaGVja291dHwtLW1lcmdlfC0tcmViYXNlXSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIHVwZGF0ZSBbLS1pbml0XSBbLS1yZW1vdGVdIFstTnwtLW5vLWZldGNoXSBbLWZ8LS1mb3JjZV0gWy0tY2hlY2tvdXR8LS1tZXJnZXwtLXJlYmFzZV0gWy0tW25vLV1yZWNvbW1lbmQtc2hhbGxvd10gWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0gWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCiAgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBzdW1tYXJ5IFstLWNhY2hlZHwtLWZpbGVzXSBbLS1zdW1tYXJ5LWxpbWl0IDxuPl0gW2NvbW1pdF0gWy0tXSBbPHBhdGg+Li4uXQogICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gZm9yZWFjaCBbLS1yZWN1cnNpdmVdIDxjb21tYW5kPgogICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc3luYyBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0iCiBPUFRJT05TX1NQRUM9CiBTVUJESVJFQ1RPUllfT0s9WWVzCiAuIGdpdC1zaC1zZXR1cAotLiBnaXQtc2gtaTE4bgogLiBnaXQtcGFyc2UtcmVtb3RlCiByZXF1aXJlX3dvcmtfdHJlZQogd3RfcHJlZml4PSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KQpAQCAtNTAsNyArNDksNyBAQAogewogCWlmIHRlc3QgIiQxIiA9ICIjdW5tYXRjaGVkIgogCXRoZW4KLQkJZXhpdCAxCisJCWV4aXQgJHsyOi0xfQogCWZpCiB9CiAKQEAgLTI0MCwxNCArMjM5LDE1IEBACiAJCXRoZW4KIAkJCWlmIHRlc3QgLXogIiRmb3JjZSIKIAkJCXRoZW4KLQkJCQllY2hvID4mMiAiJChldmFsX2dldHRleHQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJ1wkc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiKSIKKwkJCQlldmFsX2dldHRleHRsbiA+JjIgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJ1wkc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCiAJCQkJR0lUX0RJUj0iLmdpdC9tb2R1bGVzLyRzbV9uYW1lIiBHSVRfV09SS19UUkVFPS4gZ2l0IHJlbW90ZSAtdiB8IGdyZXAgJyhmZXRjaCknIHwgc2VkIC1lIHMsXiwiICAiLCAtZSBzLCcgKGZldGNoKScsLCA+JjIKLQkJCQllY2hvID4mMiAiJChldmFsX2dldHRleHQgIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbSIpIgotCQkJCWVjaG8gPiYyICIgICRyZWFscmVwbyIKLQkJCQllY2hvID4mMiAiJChldmFsX2dldHRleHQgInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0IHJlcG8iKSIKLQkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyBvcHRpb24uIikiCisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dGxuICJcCitJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb20KKyAgXCRyZWFscmVwbwordXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgcmVwbworb3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgb3B0aW9uLiIpIgogCQkJZWxzZQotCQkJCWVjaG8gIiQoZXZhbF9nZXR0ZXh0ICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICdcJHNtX25hbWUnLiIpIgorCQkJCWV2YWxfZ2V0dGV4dGxuICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICdcJHNtX25hbWUnLiIKIAkJCWZpCiAJCWZpCiAJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSAke0dJVF9RVUlFVDorLS1xdWlldH0gLS1wcmVmaXggIiR3dF9wcmVmaXgiIC0tcGF0aCAiJHNtX3BhdGgiIC0tbmFtZSAiJHNtX25hbWUiIC0tdXJsICIkcmVhbHJlcG8iICR7cmVmZXJlbmNlOisiJHJlZmVyZW5jZSJ9ICR7ZGVwdGg6KyIkZGVwdGgifSB8fCBleGl0CkBAIC0zMTIsMTEgKzMxMiwxMSBAQAogCiAJewogCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCAtLXByZWZpeCAiJHd0X3ByZWZpeCIgfHwKLQkJZWNobyAiI3VubWF0Y2hlZCIKKwkJZWNobyAiI3VubWF0Y2hlZCIgJD8KIAl9IHwKIAl3aGlsZSByZWFkIG1vZGUgc2hhMSBzdGFnZSBzbV9wYXRoCiAJZG8KLQkJZGllX2lmX3VubWF0Y2hlZCAiJG1vZGUiCisJCWRpZV9pZl91bm1hdGNoZWQgIiRtb2RlIiAiJHNoYTEiCiAJCWlmIHRlc3QgLWUgIiRzbV9wYXRoIi8uZ2l0CiAJCXRoZW4KIAkJCWRpc3BsYXlwYXRoPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHJlbGF0aXZlLXBhdGggIiRwcmVmaXgkc21fcGF0aCIgIiR3dF9wcmVmaXgiKQpAQCAtMzc5LDggKzM3OSw2IEBACiAjCiAjIFVucmVnaXN0ZXIgc3VibW9kdWxlcyBmcm9tIC5naXQvY29uZmlnIGFuZCByZW1vdmUgdGhlaXIgd29yayB0cmVlCiAjCi0jICRAID0gcmVxdWVzdGVkIHBhdGhzICh1c2UgJy4nIHRvIGRlaW5pdCBhbGwgc3VibW9kdWxlcykKLSMKIGNtZF9kZWluaXQoKQogewogCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gZGVpbml0Ii4KQEAgLTQyMywxMSArNDIxLDExIEBACiAKIAl7CiAJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IC0tcHJlZml4ICIkd3RfcHJlZml4IiAiJEAiIHx8Ci0JCWVjaG8gIiN1bm1hdGNoZWQiCisJCWVjaG8gIiN1bm1hdGNoZWQiICQ/CiAJfSB8CiAJd2hpbGUgcmVhZCBtb2RlIHNoYTEgc3RhZ2Ugc21fcGF0aAogCWRvCi0JCWRpZV9pZl91bm1hdGNoZWQgIiRtb2RlIgorCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIgIiRzaGExIgogCQluYW1lPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgIiRzbV9wYXRoIikgfHwgZXhpdAogCiAJCWRpc3BsYXlwYXRoPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHJlbGF0aXZlLXBhdGggIiRzbV9wYXRoIiAiJHd0X3ByZWZpeCIpCkBAIC00MzgsOCArNDM2LDkgQEAKIAkJCSMgUHJvdGVjdCBzdWJtb2R1bGVzIGNvbnRhaW5pbmcgYSAuZ2l0IGRpcmVjdG9yeQogCQkJaWYgdGVzdCAtZCAiJHNtX3BhdGgvLmdpdCIKIAkJCXRoZW4KLQkJCQllY2hvID4mMiAiJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJ1wkZGlzcGxheXBhdGgnIGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkiKSIKLQkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiKSIKKwkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJcCitTdWJtb2R1bGUgd29yayB0cmVlICdcJGRpc3BsYXlwYXRoJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5CisodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiKSIKIAkJCWZpCiAKIAkJCWlmIHRlc3QgLXogIiRmb3JjZSIKQEAgLTQ4MCw3ICs0NzksOCBAQAogCScnKQogCQlnaXQgZmV0Y2ggOzsKIAkqKQotCQlnaXQgZmV0Y2ggJChnZXRfZGVmYXVsdF9yZW1vdGUpICIkMiIgOzsKKwkJc2hpZnQKKwkJZ2l0IGZldGNoICQoZ2V0X2RlZmF1bHRfcmVtb3RlKSAiJEAiIDs7CiAJZXNhYwogKQogCkBAIC01MzAsNiArNTMwLDEyIEBACiAJCS0tY2hlY2tvdXQpCiAJCQl1cGRhdGU9ImNoZWNrb3V0IgogCQkJOzsKKwkJLS1yZWNvbW1lbmQtc2hhbGxvdykKKwkJCXJlY29tbWVuZF9zaGFsbG93PSItLXJlY29tbWVuZC1zaGFsbG93IgorCQkJOzsKKwkJLS1uby1yZWNvbW1lbmQtc2hhbGxvdykKKwkJCXJlY29tbWVuZF9zaGFsbG93PSItLW5vLXJlY29tbWVuZC1zaGFsbG93IgorCQkJOzsKIAkJLS1kZXB0aCkKIAkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYwogCQkJZGVwdGg9Ii0tZGVwdGg9JDIiCkBAIC01NzIsMTcgKzU3OCwxNyBAQAogCQkke3VwZGF0ZTorLS11cGRhdGUgIiR1cGRhdGUifSBcCiAJCSR7cmVmZXJlbmNlOistLXJlZmVyZW5jZSAiJHJlZmVyZW5jZSJ9IFwKIAkJJHtkZXB0aDorLS1kZXB0aCAiJGRlcHRoIn0gXAorCQkke3JlY29tbWVuZF9zaGFsbG93OisiJHJlY29tbWVuZF9zaGFsbG93In0gXAogCQkke2pvYnM6KyRqb2JzfSBcCi0JCSIkQCIgfHwgZWNobyAiI3VubWF0Y2hlZCIKKwkJIiRAIiB8fCBlY2hvICIjdW5tYXRjaGVkIiAkPwogCX0gfCB7CiAJZXJyPQogCXdoaWxlIHJlYWQgbW9kZSBzaGExIHN0YWdlIGp1c3RfY2xvbmVkIHNtX3BhdGgKIAlkbwotCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIKKwkJZGllX2lmX3VubWF0Y2hlZCAiJG1vZGUiICIkc2hhMSIKIAogCQluYW1lPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgIiRzbV9wYXRoIikgfHwgZXhpdAogCQl1cmw9JChnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCkKLQkJYnJhbmNoPSQoZ2V0X3N1Ym1vZHVsZV9jb25maWcgIiRuYW1lIiBicmFuY2ggbWFzdGVyKQogCQlpZiAhIHRlc3QgLXogIiR1cGRhdGUiCiAJCXRoZW4KIAkJCXVwZGF0ZV9tb2R1bGU9JHVwZGF0ZQpAQCAtNjA4LDE2ICs2MTQsMTcgQEAKIAogCQlpZiB0ZXN0IC1uICIkcmVtb3RlIgogCQl0aGVuCisJCQlicmFuY2g9JChnaXQgc3VibW9kdWxlLS1oZWxwZXIgcmVtb3RlLWJyYW5jaCAiJHNtX3BhdGgiKQogCQkJaWYgdGVzdCAteiAiJG5vZmV0Y2giCiAJCQl0aGVuCiAJCQkJIyBGZXRjaCByZW1vdGUgYmVmb3JlIGRldGVybWluaW5nIHRyYWNraW5nICRzaGExCi0JCQkJKHNhbml0aXplX3N1Ym1vZHVsZV9lbnY7IGNkICIkc21fcGF0aCIgJiYgZ2l0LWZldGNoKSB8fAorCQkJCWZldGNoX2luX3N1Ym1vZHVsZSAiJHNtX3BhdGgiICRkZXB0aCB8fAogCQkJCWRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnXCRzbV9wYXRoJyIpIgogCQkJZmkKIAkJCXJlbW90ZV9uYW1lPSQoc2FuaXRpemVfc3VibW9kdWxlX2VudjsgY2QgIiRzbV9wYXRoIiAmJiBnZXRfZGVmYXVsdF9yZW1vdGUpCiAJCQlzaGExPSQoc2FuaXRpemVfc3VibW9kdWxlX2VudjsgY2QgIiRzbV9wYXRoIiAmJgogCQkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSIpIHx8Ci0JCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gZmluZCBjdXJyZW50ICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnXCRzbV9wYXRoJyIpIgorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCBcJHtyZW1vdGVfbmFtZX0vXCR7YnJhbmNofSByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnXCRzbV9wYXRoJyIpIgogCQlmaQogCiAJCWlmIHRlc3QgIiRzdWJzaGExIiAhPSAiJHNoYTEiIHx8IHRlc3QgLW4gIiRmb3JjZSIKQEAgLTYzNCwxNCArNjQxLDE0IEBACiAJCQkJIyBSdW4gZmV0Y2ggb25seSBpZiAkc2hhMSBpc24ndCBwcmVzZW50IG9yIGl0CiAJCQkJIyBpcyBub3QgcmVhY2hhYmxlIGZyb20gYSByZWYuCiAJCQkJaXNfdGlwX3JlYWNoYWJsZSAiJHNtX3BhdGgiICIkc2hhMSIgfHwKLQkJCQlmZXRjaF9pbl9zdWJtb2R1bGUgIiRzbV9wYXRoIiB8fAorCQkJCWZldGNoX2luX3N1Ym1vZHVsZSAiJHNtX3BhdGgiICRkZXB0aCB8fAogCQkJCWRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCciKSIKIAogCQkJCSMgTm93IHdlIHRyaWVkIHRoZSB1c3VhbCBmZXRjaCwgYnV0ICRzaGExIG1heQogCQkJCSMgbm90IGJlIHJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGUgcmVmcwogCQkJCWlzX3RpcF9yZWFjaGFibGUgIiRzbV9wYXRoIiAiJHNoYTEiIHx8Ci0JCQkJZmV0Y2hfaW5fc3VibW9kdWxlICIkc21fcGF0aCIgIiRzaGExIiB8fAotCQkJCWRpZSAiJChldmFsX2dldHRleHQgIkZldGNoZWQgaW4gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiBEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIpIgorCQkJCWZldGNoX2luX3N1Ym1vZHVsZSAiJHNtX3BhdGgiICRkZXB0aCAiJHNoYTEiIHx8CisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiRmV0Y2hlZCBpbiBzdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gXCRzaGExLiBEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIpIgogCQkJZmkKIAogCQkJbXVzdF9kaWVfb25fZmFpbHVyZT0KQEAgLTY5OCw3ICs3MDUsNyBAQAogCQkJaWYgdGVzdCAkcmVzIC1ndCAwCiAJCQl0aGVuCiAJCQkJZGllX21zZz0iJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCi0JCQkJaWYgdGVzdCAkcmVzIC1lcSAxCisJCQkJaWYgdGVzdCAkcmVzIC1uZSAyCiAJCQkJdGhlbgogCQkJCQllcnI9IiR7ZXJyfTskZGllX21zZyIKIAkJCQkJY29udGludWUKQEAgLTk4NiwxMSArOTkzLDExIEBACiAKIAl7CiAJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IC0tcHJlZml4ICIkd3RfcHJlZml4IiAiJEAiIHx8Ci0JCWVjaG8gIiN1bm1hdGNoZWQiCisJCWVjaG8gIiN1bm1hdGNoZWQiICQ/CiAJfSB8CiAJd2hpbGUgcmVhZCBtb2RlIHNoYTEgc3RhZ2Ugc21fcGF0aAogCWRvCi0JCWRpZV9pZl91bm1hdGNoZWQgIiRtb2RlIgorCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIgIiRzaGExIgogCQluYW1lPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgIiRzbV9wYXRoIikgfHwgZXhpdAogCQl1cmw9JChnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCkKIAkJZGlzcGxheXBhdGg9JChnaXQgc3VibW9kdWxlLS1oZWxwZXIgcmVsYXRpdmUtcGF0aCAiJHByZWZpeCRzbV9wYXRoIiAiJHd0X3ByZWZpeCIpCkBAIC0xMDY3LDExICsxMDc0LDExIEBACiAJY2RfdG9fdG9wbGV2ZWwKIAl7CiAJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IC0tcHJlZml4ICIkd3RfcHJlZml4IiAiJEAiIHx8Ci0JCWVjaG8gIiN1bm1hdGNoZWQiCisJCWVjaG8gIiN1bm1hdGNoZWQiICQ/CiAJfSB8CiAJd2hpbGUgcmVhZCBtb2RlIHNoYTEgc3RhZ2Ugc21fcGF0aAogCWRvCi0JCWRpZV9pZl91bm1hdGNoZWQgIiRtb2RlIgorCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIgIiRzaGExIgogCQluYW1lPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgIiRzbV9wYXRoIikKIAkJdXJsPSQoZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLWdldCBzdWJtb2R1bGUuIiRuYW1lIi51cmwpCiAKZGlmZiAtLWdpdCBhL2dpdC1zdm4ucGVybCBiL2dpdC1zdm4ucGVybAppbmRleCAwNWVjZWQwLi40ZDQxZDIyIDEwMDc1NQotLS0gYS9naXQtc3ZuLnBlcmwKKysrIGIvZ2l0LXN2bi5wZXJsCkBAIC0zMzksNyArMzM5LDcgQEAKIAkJCWRpZSAiZmFpbGVkIHRvIG9wZW4gJEVOVntHSVRfRElSfTogJCFcbiI7CiAJCSRFTlZ7R0lUX0RJUn0gPSAkMSBpZiA8JGZoPiA9fiAvXmdpdGRpcjogKC4rKSQvOwogCX0KLX0gZWxzZSB7Cit9IGVsc2lmICgkY21kKSB7CiAJbXkgKCRnaXRfZGlyLCAkY2R1cCk7CiAJZ2l0X2NtZF90cnkgewogCQkkZ2l0X2RpciA9IGNvbW1hbmRfb25lbGluZShbcXcvcmV2LXBhcnNlIC0tZ2l0LWRpci9dKTsKQEAgLTM1Niw3ICszNTYsNyBAQAogCiBteSAlb3B0cyA9ICV7JGNtZHskY21kfS0+WzJdfSBpZiAoZGVmaW5lZCAkY21kKTsKIAotcmVhZF9naXRfY29uZmlnKFwlb3B0cyk7CityZWFkX2dpdF9jb25maWcoXCVvcHRzKSBpZiAkRU5We0dJVF9ESVJ9OwogaWYgKCRjbWQgJiYgKCRjbWQgZXEgJ2xvZycgfHwgJGNtZCBlcSAnYmxhbWUnKSkgewogCUdldG9wdDo6TG9uZzo6Q29uZmlndXJlKCdwYXNzX3Rocm91Z2gnKTsKIH0KQEAgLTUwNyw3ICs1MDcsMTAgQEAKIAogc3ViIGNtZF9jbG9uZSB7CiAJbXkgKCR1cmwsICRwYXRoKSA9IEBfOwotCWlmICghZGVmaW5lZCAkcGF0aCAmJgorCWlmICghJHVybCkgeworCQlkaWUgIlNWTiByZXBvc2l0b3J5IGxvY2F0aW9uIHJlcXVpcmVkICIsCisJCSAgICAiYXMgYSBjb21tYW5kLWxpbmUgYXJndW1lbnRcbiI7CisJfSBlbHNpZiAoIWRlZmluZWQgJHBhdGggJiYKIAkgICAgKGRlZmluZWQgJF90cnVuayB8fCBAX2JyYW5jaGVzIHx8IEBfdGFncyB8fAogCSAgICAgZGVmaW5lZCAkX3N0ZGxheW91dCkgJiYKIAkgICAgJHVybCAhfiBtI15bYS16XCtdKzovLyMpIHsKZGlmZiAtLWdpdCBhL2dpdC5jIGIvZ2l0LmMKaW5kZXggOTY4YThhNC4uMGYxOTM3ZiAxMDA2NDQKLS0tIGEvZ2l0LmMKKysrIGIvZ2l0LmMKQEAgLTYwOSw0OCArNjA5LDE1IEBACiAJcmV0dXJuIGRvbmVfYWxpYXM7CiB9CiAKLS8qCi0gKiBNYW55IHBhcnRzIG9mIEdpdCBoYXZlIHN1YnByb2dyYW1zIGNvbW11bmljYXRlIHZpYSBwaXBlLCBleHBlY3QgdGhlCi0gKiB1cHN0cmVhbSBvZiBhIHBpcGUgdG8gZGllIHdpdGggU0lHUElQRSB3aGVuIHRoZSBkb3duc3RyZWFtIG9mIGEKLSAqIHBpcGUgZG9lcyBub3QgbmVlZCB0byByZWFkIGFsbCB0aGF0IGlzIHdyaXR0ZW4uICBTb21lIHRoaXJkLXBhcnR5Ci0gKiBwcm9ncmFtcyB0aGF0IGlnbm9yZSBvciBibG9jayBTSUdQSVBFIGZvciB0aGVpciBvd24gcmVhc29uIGZvcmdldAotICogdG8gcmVzdG9yZSBTSUdQSVBFIGhhbmRsaW5nIHRvIHRoZSBkZWZhdWx0IGJlZm9yZSBzcGF3bmluZyBHaXQgYW5kCi0gKiBicmVhayB0aGlzIGNhcmVmdWxseSBvcmNoZXN0cmF0ZWQgbWFjaGluZXJ5LgotICoKLSAqIFJlc3RvcmUgdGhlIHdheSBTSUdQSVBFIGlzIGhhbmRsZWQgdG8gZGVmYXVsdCwgd2hpY2ggaXMgd2hhdCB3ZQotICogZXhwZWN0LgotICovCi1zdGF0aWMgdm9pZCByZXN0b3JlX3NpZ3BpcGVfdG9fZGVmYXVsdCh2b2lkKQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQlzaWdzZXRfdCB1bmJsb2NrOwotCi0Jc2lnZW1wdHlzZXQoJnVuYmxvY2spOwotCXNpZ2FkZHNldCgmdW5ibG9jaywgU0lHUElQRSk7Ci0Jc2lncHJvY21hc2soU0lHX1VOQkxPQ0ssICZ1bmJsb2NrLCBOVUxMKTsKLQlzaWduYWwoU0lHUElQRSwgU0lHX0RGTCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXYpCi17Ci0JY29uc3QgY2hhciAqKmFyZ3YgPSAoY29uc3QgY2hhciAqKikgYXY7CiAJY29uc3QgY2hhciAqY21kOwogCWludCBkb25lX2hlbHAgPSAwOwogCi0JY21kID0gZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKwljbWQgPSBhcmd2WzBdOwogCWlmICghY21kKQogCQljbWQgPSAiZ2l0LWhlbHAiOwogCi0JLyoKLQkgKiBBbHdheXMgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIDAvMS8yIHRvIGF2b2lkIGNsb2JiZXJpbmcgZmlsZXMKLQkgKiBpbiBkaWUoKS4gIEl0IGFsc28gYXZvaWRzIG1lc3NpbmcgdXAgd2hlbiB0aGUgcGlwZXMgYXJlIGR1cCdlZAotCSAqIG9udG8gc3RkaW4vc3Rkb3V0L3N0ZGVyciBpbiB0aGUgY2hpbGQgcHJvY2Vzc2VzIHdlIHNwYXduLgotCSAqLwotCXNhbml0aXplX3N0ZGZkcygpOwotCi0JcmVzdG9yZV9zaWdwaXBlX3RvX2RlZmF1bHQoKTsKLQotCWdpdF9zZXR1cF9nZXR0ZXh0KCk7Ci0KIAl0cmFjZV9jb21tYW5kX3BlcmZvcm1hbmNlKGFyZ3YpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2dpdHdlYi9naXR3ZWIucGVybCBiL2dpdHdlYi9naXR3ZWIucGVybAppbmRleCAyZmRkZjc1Li4zM2Q3MDFkIDEwMDc1NQotLS0gYS9naXR3ZWIvZ2l0d2ViLnBlcmwKKysrIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCkBAIC0yMDkwLDcgKzIwOTAsNyBAQAogCQkJCS1ocmVmID0+IGhyZWYoCiAJCQkJCWFjdGlvbj0+JGRlc3RfYWN0aW9uLAogCQkJCQloYXNoPT4kZGVzdAotCQkJCSl9LCAkbmFtZSk7CisJCQkJKX0sIGVzY19odG1sKCRuYW1lKSk7CiAKIAkJCSRtYXJrZXJzIC49ICIgPHNwYW4gY2xhc3M9XCIiLmVzY19hdHRyKCRjbGFzcykuIlwiIHRpdGxlPVwiIi5lc2NfYXR0cigkcmVmKS4iXCI+IiAuCiAJCQkJJGxpbmsgLiAiPC9zcGFuPiI7CmRpZmYgLS1naXQgYS9ncGctaW50ZXJmYWNlLmMgYi9ncGctaW50ZXJmYWNlLmMKaW5kZXggYzRiMWU4Yy4uMDgzNTZmOSAxMDA2NDQKLS0tIGEvZ3BnLWludGVyZmFjZS5jCisrKyBiL2dwZy1pbnRlcmZhY2UuYwpAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlICJzdHJidWYuaCIKICNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJ0ZW1wZmlsZS5oIgogCiBzdGF0aWMgY2hhciAqY29uZmlndXJlZF9zaWduaW5nX2tleTsKIHN0YXRpYyBjb25zdCBjaGFyICpncGdfcHJvZ3JhbSA9ICJncGciOwpAQCAtMTUwLDQyICsxNTEsMzAgQEAKIGludCBzaWduX2J1ZmZlcihzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSwgY29uc3QgY2hhciAqc2lnbmluZ19rZXkpCiB7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZ3BnID0gQ0hJTERfUFJPQ0VTU19JTklUOwotCWNvbnN0IGNoYXIgKmFyZ3NbNF07Ci0Jc3NpemVfdCBsZW47CisJaW50IHJldDsKIAlzaXplX3QgaSwgaiwgYm90dG9tOworCXN0cnVjdCBzdHJidWYgZ3BnX3N0YXR1cyA9IFNUUkJVRl9JTklUOwogCi0JZ3BnLmFyZ3YgPSBhcmdzOwotCWdwZy5pbiA9IC0xOwotCWdwZy5vdXQgPSAtMTsKLQlhcmdzWzBdID0gZ3BnX3Byb2dyYW07Ci0JYXJnc1sxXSA9ICItYnNhdSI7Ci0JYXJnc1syXSA9IHNpZ25pbmdfa2V5OwotCWFyZ3NbM10gPSBOVUxMOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmdwZy5hcmdzLAorCQkJIGdwZ19wcm9ncmFtLAorCQkJICItLXN0YXR1cy1mZD0yIiwKKwkJCSAiLWJzYXUiLCBzaWduaW5nX2tleSwKKwkJCSBOVUxMKTsKIAotCWlmIChzdGFydF9jb21tYW5kKCZncGcpKQotCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJ1biBncGcuIikpOworCWJvdHRvbSA9IHNpZ25hdHVyZS0+bGVuOwogCiAJLyoKIAkgKiBXaGVuIHRoZSB1c2VybmFtZSBzaWduaW5na2V5IGlzIGJhZCwgcHJvZ3JhbSBjb3VsZCBiZSB0ZXJtaW5hdGVkCiAJICogYmVjYXVzZSBncGcgZXhpdHMgd2l0aG91dCByZWFkaW5nIGFuZCB0aGVuIHdyaXRlIGdldHMgU0lHUElQRS4KIAkgKi8KIAlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOwotCi0JaWYgKHdyaXRlX2luX2Z1bGwoZ3BnLmluLCBidWZmZXItPmJ1ZiwgYnVmZmVyLT5sZW4pICE9IGJ1ZmZlci0+bGVuKSB7Ci0JCWNsb3NlKGdwZy5pbik7Ci0JCWNsb3NlKGdwZy5vdXQpOwotCQlmaW5pc2hfY29tbWFuZCgmZ3BnKTsKLQkJcmV0dXJuIGVycm9yKF8oImdwZyBkaWQgbm90IGFjY2VwdCB0aGUgZGF0YSIpKTsKLQl9Ci0JY2xvc2UoZ3BnLmluKTsKLQotCWJvdHRvbSA9IHNpZ25hdHVyZS0+bGVuOwotCWxlbiA9IHN0cmJ1Zl9yZWFkKHNpZ25hdHVyZSwgZ3BnLm91dCwgMTAyNCk7Ci0JY2xvc2UoZ3BnLm91dCk7Ci0KKwlyZXQgPSBwaXBlX2NvbW1hbmQoJmdwZywgYnVmZmVyLT5idWYsIGJ1ZmZlci0+bGVuLAorCQkJICAgc2lnbmF0dXJlLCAxMDI0LCAmZ3BnX3N0YXR1cywgMCk7CiAJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOwogCi0JaWYgKGZpbmlzaF9jb21tYW5kKCZncGcpIHx8ICFsZW4gfHwgbGVuIDwgMCkKKwlyZXQgfD0gIXN0cnN0cihncGdfc3RhdHVzLmJ1ZiwgIlxuW0dOVVBHOl0gU0lHX0NSRUFURUQgIik7CisJc3RyYnVmX3JlbGVhc2UoJmdwZ19zdGF0dXMpOworCWlmIChyZXQpCiAJCXJldHVybiBlcnJvcihfKCJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiKSk7CiAKIAkvKiBTdHJpcCBDUiBmcm9tIHRoZSBsaW5lIGVuZGluZ3MsIGluIGNhc2Ugd2UgYXJlIG9uIFdpbmRvd3MuICovCkBAIC0yMTAsNTAgKzE5OSwzOCBAQAogCQkJIHN0cnVjdCBzdHJidWYgKmdwZ19vdXRwdXQsIHN0cnVjdCBzdHJidWYgKmdwZ19zdGF0dXMpCiB7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZ3BnID0gQ0hJTERfUFJPQ0VTU19JTklUOwotCWNvbnN0IGNoYXIgKmFyZ3NfZ3BnW10gPSB7TlVMTCwgIi0tc3RhdHVzLWZkPTEiLCAiLS12ZXJpZnkiLCAiRklMRSIsICItIiwgTlVMTH07Ci0JY2hhciBwYXRoW1BBVEhfTUFYXTsKKwlzdGF0aWMgc3RydWN0IHRlbXBmaWxlIHRlbXA7CiAJaW50IGZkLCByZXQ7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKLQlzdHJ1Y3Qgc3RyYnVmICpwYnVmID0gJmJ1ZjsKIAotCWFyZ3NfZ3BnWzBdID0gZ3BnX3Byb2dyYW07Ci0JZmQgPSBnaXRfbWtzdGVtcChwYXRoLCBQQVRIX01BWCwgIi5naXRfdnRhZ190bXBYWFhYWFgiKTsKKwlmZCA9IG1rc190ZW1wZmlsZV90KCZ0ZW1wLCAiLmdpdF92dGFnX3RtcFhYWFhYWCIpOwogCWlmIChmZCA8IDApCi0JCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlICclcyciKSwgcGF0aCk7Ci0JaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHNpZ25hdHVyZSwgc2lnbmF0dXJlX3NpemUpIDwgMCkKLQkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIiksIHBhdGgpOworCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIpKTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgc2lnbmF0dXJlLCBzaWduYXR1cmVfc2l6ZSkgPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIiksCisJCQkgICAgdGVtcC5maWxlbmFtZS5idWYpOworCQlkZWxldGVfdGVtcGZpbGUoJnRlbXApOworCQlyZXR1cm4gLTE7CisJfQogCWNsb3NlKGZkKTsKIAotCWdwZy5hcmd2ID0gYXJnc19ncGc7Ci0JZ3BnLmluID0gLTE7Ci0JZ3BnLm91dCA9IC0xOwotCWlmIChncGdfb3V0cHV0KQotCQlncGcuZXJyID0gLTE7Ci0JYXJnc19ncGdbM10gPSBwYXRoOwotCWlmIChzdGFydF9jb21tYW5kKCZncGcpKSB7Ci0JCXVubGluayhwYXRoKTsKLQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBydW4gZ3BnLiIpKTsKLQl9CisJYXJndl9hcnJheV9wdXNobCgmZ3BnLmFyZ3MsCisJCQkgZ3BnX3Byb2dyYW0sCisJCQkgIi0tc3RhdHVzLWZkPTEiLAorCQkJICItLXZlcmlmeSIsIHRlbXAuZmlsZW5hbWUuYnVmLCAiLSIsCisJCQkgTlVMTCk7CisKKwlpZiAoIWdwZ19zdGF0dXMpCisJCWdwZ19zdGF0dXMgPSAmYnVmOwogCiAJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKLQl3cml0ZV9pbl9mdWxsKGdwZy5pbiwgcGF5bG9hZCwgcGF5bG9hZF9zaXplKTsKLQljbG9zZShncGcuaW4pOwotCi0JaWYgKGdwZ19vdXRwdXQpIHsKLQkJc3RyYnVmX3JlYWQoZ3BnX291dHB1dCwgZ3BnLmVyciwgMCk7Ci0JCWNsb3NlKGdwZy5lcnIpOwotCX0KLQlpZiAoZ3BnX3N0YXR1cykKLQkJcGJ1ZiA9IGdwZ19zdGF0dXM7Ci0Jc3RyYnVmX3JlYWQocGJ1ZiwgZ3BnLm91dCwgMCk7Ci0JY2xvc2UoZ3BnLm91dCk7Ci0KLQlyZXQgPSBmaW5pc2hfY29tbWFuZCgmZ3BnKTsKKwlyZXQgPSBwaXBlX2NvbW1hbmQoJmdwZywgcGF5bG9hZCwgcGF5bG9hZF9zaXplLAorCQkJICAgZ3BnX3N0YXR1cywgMCwgZ3BnX291dHB1dCwgMCk7CiAJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOwogCi0JdW5saW5rX29yX3dhcm4ocGF0aCk7CisJZGVsZXRlX3RlbXBmaWxlKCZ0ZW1wKTsKIAotCXJldCB8PSAhc3Ryc3RyKHBidWYtPmJ1ZiwgIlxuW0dOVVBHOl0gR09PRFNJRyAiKTsKKwlyZXQgfD0gIXN0cnN0cihncGdfc3RhdHVzLT5idWYsICJcbltHTlVQRzpdIEdPT0RTSUcgIik7CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7IC8qIG5vIG1hdHRlciBpdCB3YXMgdXNlZCBvciBub3QgKi8KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9ncmFwaC5jIGIvZ3JhcGguYwppbmRleCAxMzUwYmRkLi5kZDE3MjAxIDEwMDY0NAotLS0gYS9ncmFwaC5jCisrKyBiL2dyYXBoLmMKQEAgLTE3LDggKzE3LDggQEAKIHN0YXRpYyB2b2lkIGdyYXBoX3BhZGRpbmdfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpOwogCiAvKgotICogUHJpbnQgYSBzdHJidWYgdG8gc3Rkb3V0LiAgSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBhbGwgbGluZXMgYnV0IHRoZQotICogZmlyc3Qgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBncmFwaCBvdXRwdXQuCisgKiBQcmludCBhIHN0cmJ1Zi4gIElmIHRoZSBncmFwaCBpcyBub24tTlVMTCwgYWxsIGxpbmVzIGJ1dCB0aGUgZmlyc3Qgd2lsbCBiZQorICogcHJlZml4ZWQgd2l0aCB0aGUgZ3JhcGggb3V0cHV0LgogICoKICAqIElmIHRoZSBzdHJidWYgZW5kcyB3aXRoIGEgbmV3bGluZSwgdGhlIG91dHB1dCB3aWxsIGVuZCBhZnRlciB0aGlzCiAgKiBuZXdsaW5lLiAgQSBuZXcgZ3JhcGggbGluZSB3aWxsIG5vdCBiZSBwcmludGVkIGFmdGVyIHRoZSBmaW5hbCBuZXdsaW5lLgpAQCAtNjY5LDYgKzY2OSwxMyBAQAogCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBncmFwaC0+bnVtX25ld19jb2x1bW5zICogMik7CiB9CiAKKworaW50IGdyYXBoX3dpZHRoKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXJldHVybiBncmFwaC0+d2lkdGg7Cit9CisKKwogc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3NraXBfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCiB7CiAJLyoKQEAgLTExOTMsOSArMTIwMCwxMCBAQAogCiAJd2hpbGUgKCFzaG93bl9jb21taXRfbGluZSAmJiAhZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkgewogCQlzaG93bl9jb21taXRfbGluZSA9IGdyYXBoX25leHRfbGluZShncmFwaCwgJm1zZ2J1Zik7Ci0JCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIHN0ZG91dCk7CisJCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sCisJCQlncmFwaC0+cmV2cy0+ZGlmZm9wdC5maWxlKTsKIAkJaWYgKCFzaG93bl9jb21taXRfbGluZSkKLQkJCXB1dGNoYXIoJ1xuJyk7CisJCQlwdXRjKCdcbicsIGdyYXBoLT5yZXZzLT5kaWZmb3B0LmZpbGUpOwogCQlzdHJidWZfc2V0bGVuKCZtc2didWYsIDApOwogCX0KIApAQCAtMTIxMCw3ICsxMjE4LDcgQEAKIAkJcmV0dXJuOwogCiAJZ3JhcGhfbmV4dF9saW5lKGdyYXBoLCAmbXNnYnVmKTsKLQlmd3JpdGUobXNnYnVmLmJ1Ziwgc2l6ZW9mKGNoYXIpLCBtc2didWYubGVuLCBzdGRvdXQpOworCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIGdyYXBoLT5yZXZzLT5kaWZmb3B0LmZpbGUpOwogCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOwogfQogCkBAIC0xMjIyLDcgKzEyMzAsNyBAQAogCQlyZXR1cm47CiAKIAlncmFwaF9wYWRkaW5nX2xpbmUoZ3JhcGgsICZtc2didWYpOwotCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIHN0ZG91dCk7CisJZndyaXRlKG1zZ2J1Zi5idWYsIHNpemVvZihjaGFyKSwgbXNnYnVmLmxlbiwgZ3JhcGgtPnJldnMtPmRpZmZvcHQuZmlsZSk7CiAJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7CiB9CiAKQEAgLTEyMzksMTIgKzEyNDcsMTMgQEAKIAogCWZvciAoOzspIHsKIAkJZ3JhcGhfbmV4dF9saW5lKGdyYXBoLCAmbXNnYnVmKTsKLQkJZndyaXRlKG1zZ2J1Zi5idWYsIHNpemVvZihjaGFyKSwgbXNnYnVmLmxlbiwgc3Rkb3V0KTsKKwkJZndyaXRlKG1zZ2J1Zi5idWYsIHNpemVvZihjaGFyKSwgbXNnYnVmLmxlbiwKKwkJCWdyYXBoLT5yZXZzLT5kaWZmb3B0LmZpbGUpOwogCQlzdHJidWZfc2V0bGVuKCZtc2didWYsIDApOwogCQlzaG93biA9IDE7CiAKIAkJaWYgKCFncmFwaF9pc19jb21taXRfZmluaXNoZWQoZ3JhcGgpKQotCQkJcHV0Y2hhcignXG4nKTsKKwkJCXB1dGMoJ1xuJywgZ3JhcGgtPnJldnMtPmRpZmZvcHQuZmlsZSk7CiAJCWVsc2UKIAkJCWJyZWFrOwogCX0KQEAgLTEyNTksNyArMTI2OCw4IEBACiAJY2hhciAqcDsKIAogCWlmICghZ3JhcGgpIHsKLQkJZndyaXRlKHNiLT5idWYsIHNpemVvZihjaGFyKSwgc2ItPmxlbiwgc3Rkb3V0KTsKKwkJZndyaXRlKHNiLT5idWYsIHNpemVvZihjaGFyKSwgc2ItPmxlbiwKKwkJCWdyYXBoLT5yZXZzLT5kaWZmb3B0LmZpbGUpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjc3LDcgKzEyODcsNyBAQAogCQl9IGVsc2UgewogCQkJbGVuID0gKHNiLT5idWYgKyBzYi0+bGVuKSAtIHA7CiAJCX0KLQkJZndyaXRlKHAsIHNpemVvZihjaGFyKSwgbGVuLCBzdGRvdXQpOworCQlmd3JpdGUocCwgc2l6ZW9mKGNoYXIpLCBsZW4sIGdyYXBoLT5yZXZzLT5kaWZmb3B0LmZpbGUpOwogCQlpZiAobmV4dF9wICYmICpuZXh0X3AgIT0gJ1wwJykKIAkJCWdyYXBoX3Nob3dfb25lbGluZShncmFwaCk7CiAJCXAgPSBuZXh0X3A7CkBAIC0xMjk3LDcgKzEzMDcsOCBAQAogCQkgKiBDTUlUX0ZNVF9VU0VSRk9STUFUIGFyZSBhbHJlYWR5IG1pc3NpbmcgYSB0ZXJtaW5hdGluZwogCQkgKiBuZXdsaW5lLiAgQWxsIG9mIHRoZSBvdGhlciBmb3JtYXRzIHNob3VsZCBoYXZlIGl0LgogCQkgKi8KLQkJZndyaXRlKHNiLT5idWYsIHNpemVvZihjaGFyKSwgc2ItPmxlbiwgc3Rkb3V0KTsKKwkJZndyaXRlKHNiLT5idWYsIHNpemVvZihjaGFyKSwgc2ItPmxlbiwKKwkJCWdyYXBoLT5yZXZzLT5kaWZmb3B0LmZpbGUpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMzE4LDcgKzEzMjksNyBAQAogCQkgKiBuZXcgbGluZS4KIAkJICovCiAJCWlmICghbmV3bGluZV90ZXJtaW5hdGVkKQotCQkJcHV0Y2hhcignXG4nKTsKKwkJCXB1dGMoJ1xuJywgZ3JhcGgtPnJldnMtPmRpZmZvcHQuZmlsZSk7CiAKIAkJZ3JhcGhfc2hvd19yZW1haW5kZXIoZ3JhcGgpOwogCkBAIC0xMzI2LDYgKzEzMzcsNiBAQAogCQkgKiBJZiBzYiBlbmRzIHdpdGggYSBuZXdsaW5lLCBvdXIgb3V0cHV0IHNob3VsZCB0b28uCiAJCSAqLwogCQlpZiAobmV3bGluZV90ZXJtaW5hdGVkKQotCQkJcHV0Y2hhcignXG4nKTsKKwkJCXB1dGMoJ1xuJywgZ3JhcGgtPnJldnMtPmRpZmZvcHQuZmlsZSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZ3JhcGguaCBiL2dyYXBoLmgKaW5kZXggMGJlNjJiZC4uM2Y0OGMxOSAxMDA2NDQKLS0tIGEvZ3JhcGguaAorKysgYi9ncmFwaC5oCkBAIC02OCw2ICs2OCwxMSBAQAogCiAKIC8qCisgKiBSZXR1cm4gY3VycmVudCB3aWR0aCBvZiB0aGUgZ3JhcGggaW4gb24tc2NyZWVuIGNoYXJhY3RlcnMuCisgKi8KK2ludCBncmFwaF93aWR0aChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCk7CisKKy8qCiAgKiBncmFwaF9zaG93Xyo6IGhlbHBlciBmdW5jdGlvbnMgZm9yIHByaW50aW5nIHRvIHN0ZG91dAogICovCiAKZGlmZiAtLWdpdCBhL2dyZXAuYyBiL2dyZXAuYwppbmRleCBlYzZmN2ZmLi5kN2QwMGI4IDEwMDY0NAotLS0gYS9ncmVwLmMKKysrIGIvZ3JlcC5jCkBAIC00LDYgKzQsOCBAQAogI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgogI2luY2x1ZGUgImRpZmYuaCIKICNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCiAKIHN0YXRpYyBpbnQgZ3JlcF9zb3VyY2VfbG9hZChzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKTsKIHN0YXRpYyBpbnQgZ3JlcF9zb3VyY2VfaXNfYmluYXJ5KHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpOwpAQCAtMTYxLDE3ICsxNjMsNyBAQAogCWNvbG9yX3NldChvcHQtPmNvbG9yX3NlcCwgZGVmLT5jb2xvcl9zZXApOwogfQogCi12b2lkIGdyZXBfY29tbWl0X3BhdHRlcm5fdHlwZShlbnVtIGdyZXBfcGF0dGVybl90eXBlIHBhdHRlcm5fdHlwZSwgc3RydWN0IGdyZXBfb3B0ICpvcHQpCi17Ci0JaWYgKHBhdHRlcm5fdHlwZSAhPSBHUkVQX1BBVFRFUk5fVFlQRV9VTlNQRUNJRklFRCkKLQkJZ3JlcF9zZXRfcGF0dGVybl90eXBlX29wdGlvbihwYXR0ZXJuX3R5cGUsIG9wdCk7Ci0JZWxzZSBpZiAob3B0LT5wYXR0ZXJuX3R5cGVfb3B0aW9uICE9IEdSRVBfUEFUVEVSTl9UWVBFX1VOU1BFQ0lGSUVEKQotCQlncmVwX3NldF9wYXR0ZXJuX3R5cGVfb3B0aW9uKG9wdC0+cGF0dGVybl90eXBlX29wdGlvbiwgb3B0KTsKLQllbHNlIGlmIChvcHQtPmV4dGVuZGVkX3JlZ2V4cF9vcHRpb24pCi0JCWdyZXBfc2V0X3BhdHRlcm5fdHlwZV9vcHRpb24oR1JFUF9QQVRURVJOX1RZUEVfRVJFLCBvcHQpOwotfQotCi12b2lkIGdyZXBfc2V0X3BhdHRlcm5fdHlwZV9vcHRpb24oZW51bSBncmVwX3BhdHRlcm5fdHlwZSBwYXR0ZXJuX3R5cGUsIHN0cnVjdCBncmVwX29wdCAqb3B0KQorc3RhdGljIHZvaWQgZ3JlcF9zZXRfcGF0dGVybl90eXBlX29wdGlvbihlbnVtIGdyZXBfcGF0dGVybl90eXBlIHBhdHRlcm5fdHlwZSwgc3RydWN0IGdyZXBfb3B0ICpvcHQpCiB7CiAJc3dpdGNoIChwYXR0ZXJuX3R5cGUpIHsKIAljYXNlIEdSRVBfUEFUVEVSTl9UWVBFX1VOU1BFQ0lGSUVEOgpAQCAtMjAzLDYgKzE5NSwxNiBAQAogCX0KIH0KIAordm9pZCBncmVwX2NvbW1pdF9wYXR0ZXJuX3R5cGUoZW51bSBncmVwX3BhdHRlcm5fdHlwZSBwYXR0ZXJuX3R5cGUsIHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCWlmIChwYXR0ZXJuX3R5cGUgIT0gR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQpCisJCWdyZXBfc2V0X3BhdHRlcm5fdHlwZV9vcHRpb24ocGF0dGVybl90eXBlLCBvcHQpOworCWVsc2UgaWYgKG9wdC0+cGF0dGVybl90eXBlX29wdGlvbiAhPSBHUkVQX1BBVFRFUk5fVFlQRV9VTlNQRUNJRklFRCkKKwkJZ3JlcF9zZXRfcGF0dGVybl90eXBlX29wdGlvbihvcHQtPnBhdHRlcm5fdHlwZV9vcHRpb24sIG9wdCk7CisJZWxzZSBpZiAob3B0LT5leHRlbmRlZF9yZWdleHBfb3B0aW9uKQorCQlncmVwX3NldF9wYXR0ZXJuX3R5cGVfb3B0aW9uKEdSRVBfUEFUVEVSTl9UWVBFX0VSRSwgb3B0KTsKK30KKwogc3RhdGljIHN0cnVjdCBncmVwX3BhdCAqY3JlYXRlX2dyZXBfcGF0KGNvbnN0IGNoYXIgKnBhdCwgc2l6ZV90IHBhdGxlbiwKIAkJCQkJY29uc3QgY2hhciAqb3JpZ2luLCBpbnQgbm8sCiAJCQkJCWVudW0gZ3JlcF9wYXRfdG9rZW4gdCwKQEAgLTMyMiwxMSArMzI0LDE2IEBACiAJaW50IGVycm9mZnNldDsKIAlpbnQgb3B0aW9ucyA9IFBDUkVfTVVMVElMSU5FOwogCi0JaWYgKG9wdC0+aWdub3JlX2Nhc2UpCisJaWYgKG9wdC0+aWdub3JlX2Nhc2UpIHsKKwkJaWYgKGhhc19ub25fYXNjaWkocC0+cGF0dGVybikpCisJCQlwLT5wY3JlX3RhYmxlcyA9IHBjcmVfbWFrZXRhYmxlcygpOwogCQlvcHRpb25zIHw9IFBDUkVfQ0FTRUxFU1M7CisJfQorCWlmIChpc191dGY4X2xvY2FsZSgpICYmIGhhc19ub25fYXNjaWkocC0+cGF0dGVybikpCisJCW9wdGlvbnMgfD0gUENSRV9VVEY4OwogCiAJcC0+cGNyZV9yZWdleHAgPSBwY3JlX2NvbXBpbGUocC0+cGF0dGVybiwgb3B0aW9ucywgJmVycm9yLCAmZXJyb2Zmc2V0LAotCQkJTlVMTCk7CisJCQkJICAgICAgcC0+cGNyZV90YWJsZXMpOwogCWlmICghcC0+cGNyZV9yZWdleHApCiAJCWNvbXBpbGVfcmVnZXhwX2ZhaWxlZChwLCBlcnJvcik7CiAKQEAgLTM2MCw2ICszNjcsNyBAQAogewogCXBjcmVfZnJlZShwLT5wY3JlX3JlZ2V4cCk7CiAJcGNyZV9mcmVlKHAtPnBjcmVfZXh0cmFfaW5mbyk7CisJcGNyZV9mcmVlKCh2b2lkICopcC0+cGNyZV90YWJsZXMpOwogfQogI2Vsc2UgLyogIVVTRV9MSUJQQ1JFICovCiBzdGF0aWMgdm9pZCBjb21waWxlX3BjcmVfcmVnZXhwKHN0cnVjdCBncmVwX3BhdCAqcCwgY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpCkBAIC0zOTYsMjYgKzQwNCw2OCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCBjb21waWxlX2ZpeGVkX3JlZ2V4cChzdHJ1Y3QgZ3JlcF9wYXQgKnAsIHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZXJyOworCWludCByZWdmbGFnczsKKworCWJhc2ljX3JlZ2V4X3F1b3RlX2J1Zigmc2IsIHAtPnBhdHRlcm4pOworCXJlZ2ZsYWdzID0gb3B0LT5yZWdmbGFncyAmIH5SRUdfRVhURU5ERUQ7CisJaWYgKG9wdC0+aWdub3JlX2Nhc2UpCisJCXJlZ2ZsYWdzIHw9IFJFR19JQ0FTRTsKKwllcnIgPSByZWdjb21wKCZwLT5yZWdleHAsIHNiLmJ1ZiwgcmVnZmxhZ3MpOworCWlmIChvcHQtPmRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgImZpeGVkICVzXG4iLCBzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJaWYgKGVycikgeworCQljaGFyIGVycmJ1ZlsxMDI0XTsKKwkJcmVnZXJyb3IoZXJyLCAmcC0+cmVnZXhwLCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKKwkJcmVnZnJlZSgmcC0+cmVnZXhwKTsKKwkJY29tcGlsZV9yZWdleHBfZmFpbGVkKHAsIGVycmJ1Zik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBjb21waWxlX3JlZ2V4cChzdHJ1Y3QgZ3JlcF9wYXQgKnAsIHN0cnVjdCBncmVwX29wdCAqb3B0KQogeworCWludCBpY2FzZSwgYXNjaWlfb25seTsKIAlpbnQgZXJyOwogCiAJcC0+d29yZF9yZWdleHAgPSBvcHQtPndvcmRfcmVnZXhwOwogCXAtPmlnbm9yZV9jYXNlID0gb3B0LT5pZ25vcmVfY2FzZTsKKwlpY2FzZQkgICAgICAgPSBvcHQtPnJlZ2ZsYWdzICYgUkVHX0lDQVNFIHx8IHAtPmlnbm9yZV9jYXNlOworCWFzY2lpX29ubHkgICAgID0gIWhhc19ub25fYXNjaWkocC0+cGF0dGVybik7CiAKKwkvKgorCSAqIEV2ZW4gd2hlbiAtRiAoZml4ZWQpIGFza3MgdXMgdG8gZG8gYSBub24tcmVnZXhwIHNlYXJjaCwgd2UKKwkgKiBtYXkgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGNhc2UtZm9sZCB3aGVuIC1pCisJICogKGlnbm9yZS1jYXNlKSBpcyBhc2tlZCAoaW4gd2hpY2ggY2FzZSwgd2UnbGwgc3ludGhlc2l6ZSBhCisJICogcmVnZXhwIHRvIG1hdGNoIHRoZSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyByZWdleHAgc3BlY2lhbAorCSAqIGNoYXJhY3RlcnMgbGl0ZXJhbGx5LCB3aGlsZSBpZ25vcmluZyBjYXNlIGRpZmZlcmVuY2VzKS4gIE9uCisJICogdGhlIG90aGVyIGhhbmQsIGV2ZW4gd2l0aG91dCAtRiwgaWYgdGhlIHBhdHRlcm4gZG9lcyBub3QKKwkgKiBoYXZlIGFueSByZWdleHAgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvcgorCSAqIGNhc2UtZm9sZGluZyBzZWFyY2gsIHdlIGNhbiBpbnRlcm5hbGx5IHR1cm4gaXQgaW50byBhCisJICogc2ltcGxlIHN0cmluZyBtYXRjaCB1c2luZyBrd3MuICBwLT5maXhlZCB0ZWxscyB1cyBpZiB3ZQorCSAqIHdhbnQgdG8gdXNlIGt3cy4KKwkgKi8KIAlpZiAob3B0LT5maXhlZCB8fCBpc19maXhlZChwLT5wYXR0ZXJuLCBwLT5wYXR0ZXJubGVuKSkKLQkJcC0+Zml4ZWQgPSAxOworCQlwLT5maXhlZCA9ICFpY2FzZSB8fCBhc2NpaV9vbmx5OwogCWVsc2UKIAkJcC0+Zml4ZWQgPSAwOwogCiAJaWYgKHAtPmZpeGVkKSB7Ci0JCWlmIChvcHQtPnJlZ2ZsYWdzICYgUkVHX0lDQVNFIHx8IHAtPmlnbm9yZV9jYXNlKQotCQkJcC0+a3dzID0ga3dzYWxsb2ModG9sb3dlcl90cmFuc190YmwpOwotCQllbHNlCi0JCQlwLT5rd3MgPSBrd3NhbGxvYyhOVUxMKTsKKwkJcC0+a3dzID0ga3dzYWxsb2MoaWNhc2UgPyB0b2xvd2VyX3RyYW5zX3RibCA6IE5VTEwpOwogCQlrd3NpbmNyKHAtPmt3cywgcC0+cGF0dGVybiwgcC0+cGF0dGVybmxlbik7CiAJCWt3c3ByZXAocC0+a3dzKTsKIAkJcmV0dXJuOworCX0gZWxzZSBpZiAob3B0LT5maXhlZCkgeworCQkvKgorCQkgKiBXZSBjb21lIGhlcmUgd2hlbiB0aGUgcGF0dGVybiBoYXMgdGhlIG5vbi1hc2NpaQorCQkgKiBjaGFyYWN0ZXJzIHdlIGNhbm5vdCBjYXNlLWZvbGQsIGFuZCBhc2tlZCB0bworCQkgKiBpZ25vcmUtY2FzZS4KKwkJICovCisJCWNvbXBpbGVfZml4ZWRfcmVnZXhwKHAsIG9wdCk7CisJCXJldHVybjsKIAl9CiAKIAlpZiAob3B0LT5wY3JlKSB7CkBAIC02NDMsMTAgKzY5MywxMCBAQAogCiAJZm9yIChwID0gb3B0LT5oZWFkZXJfbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKIAkJaWYgKHAtPnRva2VuICE9IEdSRVBfUEFUVEVSTl9IRUFEKQotCQkJZGllKCJidWc6IGEgbm9uLWhlYWRlciBwYXR0ZXJuIGluIGdyZXAgaGVhZGVyIGxpc3QuIik7CisJCQlkaWUoIkJVRzogYSBub24taGVhZGVyIHBhdHRlcm4gaW4gZ3JlcCBoZWFkZXIgbGlzdC4iKTsKIAkJaWYgKHAtPmZpZWxkIDwgR1JFUF9IRUFERVJfRklFTERfTUlOIHx8CiAJCSAgICBHUkVQX0hFQURFUl9GSUVMRF9NQVggPD0gcC0+ZmllbGQpCi0JCQlkaWUoImJ1ZzogdW5rbm93biBoZWFkZXIgZmllbGQgJWQiLCBwLT5maWVsZCk7CisJCQlkaWUoIkJVRzogdW5rbm93biBoZWFkZXIgZmllbGQgJWQiLCBwLT5maWVsZCk7CiAJCWNvbXBpbGVfcmVnZXhwKHAsIG9wdCk7CiAJfQogCkBAIC02NTksNyArNzA5LDcgQEAKIAogCQloID0gY29tcGlsZV9wYXR0ZXJuX2F0b20oJnBwKTsKIAkJaWYgKCFoIHx8IHBwICE9IHAtPm5leHQpCi0JCQlkaWUoImJ1ZzogbWFsZm9ybWVkIGhlYWRlciBleHByIik7CisJCQlkaWUoIkJVRzogbWFsZm9ybWVkIGhlYWRlciBleHByIik7CiAJCWlmICghaGVhZGVyX2dyb3VwW3AtPmZpZWxkXSkgewogCQkJaGVhZGVyX2dyb3VwW3AtPmZpZWxkXSA9IGg7CiAJCQljb250aW51ZTsKQEAgLTEzOTYsOSArMTQ0NiwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGlzX2VtcHR5X2xpbmUoY29uc3QgY2hhciAqYm9sLCBjb25zdCBjaGFyICplb2wpCit7CisJd2hpbGUgKGJvbCA8IGVvbCAmJiBpc3NwYWNlKCpib2wpKQorCQlib2wrKzsKKwlyZXR1cm4gYm9sID09IGVvbDsKK30KKwogc3RhdGljIGludCBncmVwX3NvdXJjZV8xKHN0cnVjdCBncmVwX29wdCAqb3B0LCBzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzLCBpbnQgY29sbGVjdF9oaXRzKQogewogCWNoYXIgKmJvbDsKKwljaGFyICpwZWVrX2JvbCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBsZWZ0OwogCXVuc2lnbmVkIGxubyA9IDE7CiAJdW5zaWduZWQgbGFzdF9oaXQgPSAwOwpAQCAtMTQ1Niw3ICsxNTE0LDcgQEAKIAkJY2FzZSBHUkVQX0JJTkFSWV9URVhUOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlkaWUoImJ1ZzogdW5rbm93biBiaW5hcnkgaGFuZGxpbmcgbW9kZSIpOworCQkJZGllKCJCVUc6IHVua25vd24gYmluYXJ5IGhhbmRsaW5nIG1vZGUiKTsKIAkJfQogCX0KIApAQCAtMTU0Myw4ICsxNjAxLDI0IEBACiAJCQkJc2hvd19mdW5jdGlvbiA9IDE7CiAJCQlnb3RvIG5leHRfbGluZTsKIAkJfQotCQlpZiAoc2hvd19mdW5jdGlvbiAmJiBtYXRjaF9mdW5jbmFtZShvcHQsIGdzLCBib2wsIGVvbCkpCi0JCQlzaG93X2Z1bmN0aW9uID0gMDsKKwkJaWYgKHNob3dfZnVuY3Rpb24gJiYgKCFwZWVrX2JvbCB8fCBwZWVrX2JvbCA8IGJvbCkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgcGVla19sZWZ0ID0gbGVmdDsKKwkJCWNoYXIgKnBlZWtfZW9sID0gZW9sOworCisJCQkvKgorCQkJICogVHJhaWxpbmcgZW1wdHkgbGluZXMgYXJlIG5vdCBpbnRlcmVzdGluZy4KKwkJCSAqIFBlZWsgcGFzdCB0aGVtIHRvIHNlZSBpZiB0aGV5IGJlbG9uZyB0byB0aGUKKwkJCSAqIGJvZHkgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisJCQkgKi8KKwkJCXBlZWtfYm9sID0gYm9sOworCQkJd2hpbGUgKGlzX2VtcHR5X2xpbmUocGVla19ib2wsIHBlZWtfZW9sKSkgeworCQkJCXBlZWtfYm9sID0gcGVla19lb2wgKyAxOworCQkJCXBlZWtfZW9sID0gZW5kX29mX2xpbmUocGVla19ib2wsICZwZWVrX2xlZnQpOworCQkJfQorCisJCQlpZiAobWF0Y2hfZnVuY25hbWUob3B0LCBncywgcGVla19ib2wsIHBlZWtfZW9sKSkKKwkJCQlzaG93X2Z1bmN0aW9uID0gMDsKKwkJfQogCQlpZiAoc2hvd19mdW5jdGlvbiB8fAogCQkgICAgKGxhc3RfaGl0ICYmIGxubyA8PSBsYXN0X2hpdCArIG9wdC0+cG9zdF9jb250ZXh0KSkgewogCQkJLyogSWYgdGhlIGxhc3QgaGl0IGlzIHdpdGhpbiB0aGUgcG9zdCBjb250ZXh0LApkaWZmIC0tZ2l0IGEvZ3JlcC5oIGIvZ3JlcC5oCmluZGV4IDk1ZjE5N2EuLjU4NTZhMjMgMTAwNjQ0Ci0tLSBhL2dyZXAuaAorKysgYi9ncmVwLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKIAlyZWdleF90IHJlZ2V4cDsKIAlwY3JlICpwY3JlX3JlZ2V4cDsKIAlwY3JlX2V4dHJhICpwY3JlX2V4dHJhX2luZm87CisJY29uc3QgdW5zaWduZWQgY2hhciAqcGNyZV90YWJsZXM7CiAJa3dzZXRfdCBrd3M7CiAJdW5zaWduZWQgZml4ZWQ6MTsKIAl1bnNpZ25lZCBpZ25vcmVfY2FzZToxOwpAQCAtMTQ0LDcgKzE0NSw2IEBACiBleHRlcm4gdm9pZCBpbml0X2dyZXBfZGVmYXVsdHModm9pZCk7CiBleHRlcm4gaW50IGdyZXBfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKik7CiBleHRlcm4gdm9pZCBncmVwX2luaXQoc3RydWN0IGdyZXBfb3B0ICosIGNvbnN0IGNoYXIgKnByZWZpeCk7Ci12b2lkIGdyZXBfc2V0X3BhdHRlcm5fdHlwZV9vcHRpb24oZW51bSBncmVwX3BhdHRlcm5fdHlwZSwgc3RydWN0IGdyZXBfb3B0ICpvcHQpOwogdm9pZCBncmVwX2NvbW1pdF9wYXR0ZXJuX3R5cGUoZW51bSBncmVwX3BhdHRlcm5fdHlwZSwgc3RydWN0IGdyZXBfb3B0ICpvcHQpOwogCiBleHRlcm4gdm9pZCBhcHBlbmRfZ3JlcF9wYXQoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKnBhdCwgc2l6ZV90IHBhdGxlbiwgY29uc3QgY2hhciAqb3JpZ2luLCBpbnQgbm8sIGVudW0gZ3JlcF9wYXRfdG9rZW4gdCk7CmRpZmYgLS1naXQgYS9oZWxwLmMgYi9oZWxwLmMKaW5kZXggMTkzMjhlYS4uMmZmM2I1YSAxMDA2NDQKLS0tIGEvaGVscC5jCisrKyBiL2hlbHAuYwpAQCAtNDE5LDYgKzQxOSwxMiBAQAogCSAqIHdpdGggZXh0ZXJuYWwgcHJvamVjdHMgdGhhdCByZWx5IG9uIHRoZSBvdXRwdXQgb2YgImdpdCB2ZXJzaW9uIi4KIAkgKi8KIAlwcmludGYoImdpdCB2ZXJzaW9uICVzXG4iLCBnaXRfdmVyc2lvbl9zdHJpbmcpOworCXdoaWxlICgqKythcmd2KSB7CisJCWlmICghc3RyY21wKCphcmd2LCAiLS1idWlsZC1vcHRpb25zIikpIHsKKwkJCXByaW50Zigic2l6ZW9mLWxvbmc6ICVkXG4iLCAoaW50KXNpemVvZihsb25nKSk7CisJCQkvKiBORUVEU1dPUks6IGFsc28gc2F2ZSBhbmQgb3V0cHV0IEdJVC1CVUlMRF9PUFRJT05TPyAqLworCQl9CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9oZXguYyBiL2hleC5jCmluZGV4IDA1MTlmODUuLjk2MTliNjcgMTAwNjQ0Ci0tLSBhL2hleC5jCisrKyBiL2hleC5jCkBAIC03Nyw2ICs3NywxMSBAQAogCXJldHVybiBidWZmZXI7CiB9CiAKK2NoYXIgKm9pZF90b19oZXhfcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gc2hhMV90b19oZXhfcihidWZmZXIsIG9pZC0+aGFzaCk7Cit9CisKIGNoYXIgKnNoYTFfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RhdGljIGludCBidWZubzsKZGlmZiAtLWdpdCBhL2h0dHAtYmFja2VuZC5jIGIvaHR0cC1iYWNrZW5kLmMKaW5kZXggMjE0ODgxNC4uYWRjOGM4YyAxMDA2NDQKLS0tIGEvaHR0cC1iYWNrZW5kLmMKKysrIGIvaHR0cC1iYWNrZW5kLmMKQEAgLTc1LDU1ICs3NSw1NyBAQAogCXdyaXRlX29yX2RpZShmZCwgYnVmZmVyLCBuKTsKIH0KIAotc3RhdGljIHZvaWQgaHR0cF9zdGF0dXModW5zaWduZWQgY29kZSwgY29uc3QgY2hhciAqbXNnKQorc3RhdGljIHZvaWQgaHR0cF9zdGF0dXMoc3RydWN0IHN0cmJ1ZiAqaGRyLCB1bnNpZ25lZCBjb2RlLCBjb25zdCBjaGFyICptc2cpCiB7Ci0JZm9ybWF0X3dyaXRlKDEsICJTdGF0dXM6ICV1ICVzXHJcbiIsIGNvZGUsIG1zZyk7CisJc3RyYnVmX2FkZGYoaGRyLCAiU3RhdHVzOiAldSAlc1xyXG4iLCBjb2RlLCBtc2cpOwogfQogCi1zdGF0aWMgdm9pZCBoZHJfc3RyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIHZvaWQgaGRyX3N0cihzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQogewotCWZvcm1hdF93cml0ZSgxLCAiJXM6ICVzXHJcbiIsIG5hbWUsIHZhbHVlKTsKKwlzdHJidWZfYWRkZihoZHIsICIlczogJXNcclxuIiwgbmFtZSwgdmFsdWUpOwogfQogCi1zdGF0aWMgdm9pZCBoZHJfaW50KGNvbnN0IGNoYXIgKm5hbWUsIHVpbnRtYXhfdCB2YWx1ZSkKK3N0YXRpYyB2b2lkIGhkcl9pbnQoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjb25zdCBjaGFyICpuYW1lLCB1aW50bWF4X3QgdmFsdWUpCiB7Ci0JZm9ybWF0X3dyaXRlKDEsICIlczogJSIgUFJJdU1BWCAiXHJcbiIsIG5hbWUsIHZhbHVlKTsKKwlzdHJidWZfYWRkZihoZHIsICIlczogJSIgUFJJdU1BWCAiXHJcbiIsIG5hbWUsIHZhbHVlKTsKIH0KIAotc3RhdGljIHZvaWQgaGRyX2RhdGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyB3aGVuKQorc3RhdGljIHZvaWQgaGRyX2RhdGUoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIHdoZW4pCiB7CiAJY29uc3QgY2hhciAqdmFsdWUgPSBzaG93X2RhdGUod2hlbiwgMCwgREFURV9NT0RFKFJGQzI4MjIpKTsKLQloZHJfc3RyKG5hbWUsIHZhbHVlKTsKKwloZHJfc3RyKGhkciwgbmFtZSwgdmFsdWUpOwogfQogCi1zdGF0aWMgdm9pZCBoZHJfbm9jYWNoZSh2b2lkKQorc3RhdGljIHZvaWQgaGRyX25vY2FjaGUoc3RydWN0IHN0cmJ1ZiAqaGRyKQogewotCWhkcl9zdHIoIkV4cGlyZXMiLCAiRnJpLCAwMSBKYW4gMTk4MCAwMDowMDowMCBHTVQiKTsKLQloZHJfc3RyKCJQcmFnbWEiLCAibm8tY2FjaGUiKTsKLQloZHJfc3RyKCJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZSIpOworCWhkcl9zdHIoaGRyLCAiRXhwaXJlcyIsICJGcmksIDAxIEphbiAxOTgwIDAwOjAwOjAwIEdNVCIpOworCWhkcl9zdHIoaGRyLCAiUHJhZ21hIiwgIm5vLWNhY2hlIik7CisJaGRyX3N0cihoZHIsICJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZSIpOwogfQogCi1zdGF0aWMgdm9pZCBoZHJfY2FjaGVfZm9yZXZlcih2b2lkKQorc3RhdGljIHZvaWQgaGRyX2NhY2hlX2ZvcmV2ZXIoc3RydWN0IHN0cmJ1ZiAqaGRyKQogewogCXVuc2lnbmVkIGxvbmcgbm93ID0gdGltZShOVUxMKTsKLQloZHJfZGF0ZSgiRGF0ZSIsIG5vdyk7Ci0JaGRyX2RhdGUoIkV4cGlyZXMiLCBub3cgKyAzMTUzNjAwMCk7Ci0JaGRyX3N0cigiQ2FjaGUtQ29udHJvbCIsICJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAiKTsKKwloZHJfZGF0ZShoZHIsICJEYXRlIiwgbm93KTsKKwloZHJfZGF0ZShoZHIsICJFeHBpcmVzIiwgbm93ICsgMzE1MzYwMDApOworCWhkcl9zdHIoaGRyLCAiQ2FjaGUtQ29udHJvbCIsICJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAiKTsKIH0KIAotc3RhdGljIHZvaWQgZW5kX2hlYWRlcnModm9pZCkKK3N0YXRpYyB2b2lkIGVuZF9oZWFkZXJzKHN0cnVjdCBzdHJidWYgKmhkcikKIHsKLQl3cml0ZV9vcl9kaWUoMSwgIlxyXG4iLCAyKTsKKwlzdHJidWZfYWRkKGhkciwgIlxyXG4iLCAyKTsKKwl3cml0ZV9vcl9kaWUoMSwgaGRyLT5idWYsIGhkci0+bGVuKTsKKwlzdHJidWZfcmVsZWFzZShoZHIpOwogfQogCi1fX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQotc3RhdGljIE5PUkVUVVJOIHZvaWQgbm90X2ZvdW5kKGNvbnN0IGNoYXIgKmVyciwgLi4uKQorX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIG5vdF9mb3VuZChzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IGNoYXIgKmVyciwgLi4uKQogewogCXZhX2xpc3QgcGFyYW1zOwogCi0JaHR0cF9zdGF0dXMoNDA0LCAiTm90IEZvdW5kIik7Ci0JaGRyX25vY2FjaGUoKTsKLQllbmRfaGVhZGVycygpOworCWh0dHBfc3RhdHVzKGhkciwgNDA0LCAiTm90IEZvdW5kIik7CisJaGRyX25vY2FjaGUoaGRyKTsKKwllbmRfaGVhZGVycyhoZHIpOwogCiAJdmFfc3RhcnQocGFyYW1zLCBlcnIpOwogCWlmIChlcnIgJiYgKmVycikKQEAgLTEzMiwxNCArMTM0LDE0IEBACiAJZXhpdCgwKTsKIH0KIAotX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKLXN0YXRpYyBOT1JFVFVSTiB2b2lkIGZvcmJpZGRlbihjb25zdCBjaGFyICplcnIsIC4uLikKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBmb3JiaWRkZW4oc3RydWN0IHN0cmJ1ZiAqaGRyLCBjb25zdCBjaGFyICplcnIsIC4uLikKIHsKIAl2YV9saXN0IHBhcmFtczsKIAotCWh0dHBfc3RhdHVzKDQwMywgIkZvcmJpZGRlbiIpOwotCWhkcl9ub2NhY2hlKCk7Ci0JZW5kX2hlYWRlcnMoKTsKKwlodHRwX3N0YXR1cyhoZHIsIDQwMywgIkZvcmJpZGRlbiIpOworCWhkcl9ub2NhY2hlKGhkcik7CisJZW5kX2hlYWRlcnMoaGRyKTsKIAogCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKIAlpZiAoZXJyICYmICplcnIpCkBAIC0xNDgsMjEgKzE1MCwyMyBAQAogCWV4aXQoMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlbGVjdF9nZXRhbnlmaWxlKHZvaWQpCitzdGF0aWMgdm9pZCBzZWxlY3RfZ2V0YW55ZmlsZShzdHJ1Y3Qgc3RyYnVmICpoZHIpCiB7CiAJaWYgKCFnZXRhbnlmaWxlKQotCQlmb3JiaWRkZW4oIlVuc3VwcG9ydGVkIHNlcnZpY2U6IGdldGFueWZpbGUiKTsKKwkJZm9yYmlkZGVuKGhkciwgIlVuc3VwcG9ydGVkIHNlcnZpY2U6IGdldGFueWZpbGUiKTsKIH0KIAotc3RhdGljIHZvaWQgc2VuZF9zdHJidWYoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IHN0cmJ1ZiAqYnVmKQorc3RhdGljIHZvaWQgc2VuZF9zdHJidWYoc3RydWN0IHN0cmJ1ZiAqaGRyLAorCQkJY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IHN0cmJ1ZiAqYnVmKQogewotCWhkcl9pbnQoY29udGVudF9sZW5ndGgsIGJ1Zi0+bGVuKTsKLQloZHJfc3RyKGNvbnRlbnRfdHlwZSwgdHlwZSk7Ci0JZW5kX2hlYWRlcnMoKTsKKwloZHJfaW50KGhkciwgY29udGVudF9sZW5ndGgsIGJ1Zi0+bGVuKTsKKwloZHJfc3RyKGhkciwgY29udGVudF90eXBlLCB0eXBlKTsKKwllbmRfaGVhZGVycyhoZHIpOwogCXdyaXRlX29yX2RpZSgxLCBidWYtPmJ1ZiwgYnVmLT5sZW4pOwogfQogCi1zdGF0aWMgdm9pZCBzZW5kX2xvY2FsX2ZpbGUoY29uc3QgY2hhciAqdGhlX3R5cGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgdm9pZCBzZW5kX2xvY2FsX2ZpbGUoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjb25zdCBjaGFyICp0aGVfdHlwZSwKKwkJCQljb25zdCBjaGFyICpuYW1lKQogewogCWNoYXIgKnAgPSBnaXRfcGF0aGR1cCgiJXMiLCBuYW1lKTsKIAlzaXplX3QgYnVmX2FsbG9jID0gODE5MjsKQEAgLTE3MiwxNCArMTc2LDE0IEBACiAKIAlmZCA9IG9wZW4ocCwgT19SRE9OTFkpOwogCWlmIChmZCA8IDApCi0JCW5vdF9mb3VuZCgiQ2Fubm90IG9wZW4gJyVzJzogJXMiLCBwLCBzdHJlcnJvcihlcnJubykpOworCQlub3RfZm91bmQoaGRyLCAiQ2Fubm90IG9wZW4gJyVzJzogJXMiLCBwLCBzdHJlcnJvcihlcnJubykpOwogCWlmIChmc3RhdChmZCwgJnNiKSA8IDApCiAJCWRpZV9lcnJubygiQ2Fubm90IHN0YXQgJyVzJyIsIHApOwogCi0JaGRyX2ludChjb250ZW50X2xlbmd0aCwgc2Iuc3Rfc2l6ZSk7Ci0JaGRyX3N0cihjb250ZW50X3R5cGUsIHRoZV90eXBlKTsKLQloZHJfZGF0ZShsYXN0X21vZGlmaWVkLCBzYi5zdF9tdGltZSk7Ci0JZW5kX2hlYWRlcnMoKTsKKwloZHJfaW50KGhkciwgY29udGVudF9sZW5ndGgsIHNiLnN0X3NpemUpOworCWhkcl9zdHIoaGRyLCBjb250ZW50X3R5cGUsIHRoZV90eXBlKTsKKwloZHJfZGF0ZShoZHIsIGxhc3RfbW9kaWZpZWQsIHNiLnN0X210aW1lKTsKKwllbmRfaGVhZGVycyhoZHIpOwogCiAJZm9yICg7OykgewogCQlzc2l6ZV90IG4gPSB4cmVhZChmZCwgYnVmLCBidWZfYWxsb2MpOwpAQCAtMTk0LDMyICsxOTgsMzIgQEAKIAlmcmVlKHApOwogfQogCi1zdGF0aWMgdm9pZCBnZXRfdGV4dF9maWxlKGNoYXIgKm5hbWUpCitzdGF0aWMgdm9pZCBnZXRfdGV4dF9maWxlKHN0cnVjdCBzdHJidWYgKmhkciwgY2hhciAqbmFtZSkKIHsKLQlzZWxlY3RfZ2V0YW55ZmlsZSgpOwotCWhkcl9ub2NhY2hlKCk7Ci0Jc2VuZF9sb2NhbF9maWxlKCJ0ZXh0L3BsYWluIiwgbmFtZSk7CisJc2VsZWN0X2dldGFueWZpbGUoaGRyKTsKKwloZHJfbm9jYWNoZShoZHIpOworCXNlbmRfbG9jYWxfZmlsZShoZHIsICJ0ZXh0L3BsYWluIiwgbmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldF9sb29zZV9vYmplY3QoY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkIGdldF9sb29zZV9vYmplY3Qoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjaGFyICpuYW1lKQogewotCXNlbGVjdF9nZXRhbnlmaWxlKCk7Ci0JaGRyX2NhY2hlX2ZvcmV2ZXIoKTsKLQlzZW5kX2xvY2FsX2ZpbGUoImFwcGxpY2F0aW9uL3gtZ2l0LWxvb3NlLW9iamVjdCIsIG5hbWUpOworCXNlbGVjdF9nZXRhbnlmaWxlKGhkcik7CisJaGRyX2NhY2hlX2ZvcmV2ZXIoaGRyKTsKKwlzZW5kX2xvY2FsX2ZpbGUoaGRyLCAiYXBwbGljYXRpb24veC1naXQtbG9vc2Utb2JqZWN0IiwgbmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldF9wYWNrX2ZpbGUoY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkIGdldF9wYWNrX2ZpbGUoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjaGFyICpuYW1lKQogewotCXNlbGVjdF9nZXRhbnlmaWxlKCk7Ci0JaGRyX2NhY2hlX2ZvcmV2ZXIoKTsKLQlzZW5kX2xvY2FsX2ZpbGUoImFwcGxpY2F0aW9uL3gtZ2l0LXBhY2tlZC1vYmplY3RzIiwgbmFtZSk7CisJc2VsZWN0X2dldGFueWZpbGUoaGRyKTsKKwloZHJfY2FjaGVfZm9yZXZlcihoZHIpOworCXNlbmRfbG9jYWxfZmlsZShoZHIsICJhcHBsaWNhdGlvbi94LWdpdC1wYWNrZWQtb2JqZWN0cyIsIG5hbWUpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRfaWR4X2ZpbGUoY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkIGdldF9pZHhfZmlsZShzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNoYXIgKm5hbWUpCiB7Ci0Jc2VsZWN0X2dldGFueWZpbGUoKTsKLQloZHJfY2FjaGVfZm9yZXZlcigpOwotCXNlbmRfbG9jYWxfZmlsZSgiYXBwbGljYXRpb24veC1naXQtcGFja2VkLW9iamVjdHMtdG9jIiwgbmFtZSk7CisJc2VsZWN0X2dldGFueWZpbGUoaGRyKTsKKwloZHJfY2FjaGVfZm9yZXZlcihoZHIpOworCXNlbmRfbG9jYWxfZmlsZShoZHIsICJhcHBsaWNhdGlvbi94LWdpdC1wYWNrZWQtb2JqZWN0cy10b2MiLCBuYW1lKTsKIH0KIAogc3RhdGljIHZvaWQgaHR0cF9jb25maWcodm9pZCkKQEAgLTI0MSwxNCArMjQ1LDE0IEBACiAJc3RyYnVmX3JlbGVhc2UoJnZhcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnBjX3NlcnZpY2UgKnNlbGVjdF9zZXJ2aWNlKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc3RydWN0IHJwY19zZXJ2aWNlICpzZWxlY3Rfc2VydmljZShzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJY29uc3QgY2hhciAqc3ZjX25hbWU7CiAJc3RydWN0IHJwY19zZXJ2aWNlICpzdmMgPSBOVUxMOwogCWludCBpOwogCiAJaWYgKCFza2lwX3ByZWZpeChuYW1lLCAiZ2l0LSIsICZzdmNfbmFtZSkpCi0JCWZvcmJpZGRlbigiVW5zdXBwb3J0ZWQgc2VydmljZTogJyVzJyIsIG5hbWUpOworCQlmb3JiaWRkZW4oaGRyLCAiVW5zdXBwb3J0ZWQgc2VydmljZTogJyVzJyIsIG5hbWUpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnBjX3NlcnZpY2UpOyBpKyspIHsKIAkJc3RydWN0IHJwY19zZXJ2aWNlICpzID0gJnJwY19zZXJ2aWNlW2ldOwpAQCAtMjU5LDE0ICsyNjMsMTQgQEAKIAl9CiAKIAlpZiAoIXN2YykKLQkJZm9yYmlkZGVuKCJVbnN1cHBvcnRlZCBzZXJ2aWNlOiAnJXMnIiwgbmFtZSk7CisJCWZvcmJpZGRlbihoZHIsICJVbnN1cHBvcnRlZCBzZXJ2aWNlOiAnJXMnIiwgbmFtZSk7CiAKIAlpZiAoc3ZjLT5lbmFibGVkIDwgMCkgewogCQljb25zdCBjaGFyICp1c2VyID0gZ2V0ZW52KCJSRU1PVEVfVVNFUiIpOwogCQlzdmMtPmVuYWJsZWQgPSAodXNlciAmJiAqdXNlcikgPyAxIDogMDsKIAl9CiAJaWYgKCFzdmMtPmVuYWJsZWQpCi0JCWZvcmJpZGRlbigiU2VydmljZSBub3QgZW5hYmxlZDogJyVzJyIsIHN2Yy0+bmFtZSk7CisJCWZvcmJpZGRlbihoZHIsICJTZXJ2aWNlIG5vdCBlbmFibGVkOiAnJXMnIiwgc3ZjLT5uYW1lKTsKIAlyZXR1cm4gc3ZjOwogfQogCkBAIC00NDIsMjMgKzQ0NiwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBnZXRfaW5mb19yZWZzKGNoYXIgKmFyZykKK3N0YXRpYyB2b2lkIGdldF9pbmZvX3JlZnMoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjaGFyICphcmcpCiB7CiAJY29uc3QgY2hhciAqc2VydmljZV9uYW1lID0gZ2V0X3BhcmFtZXRlcigic2VydmljZSIpOwogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAKLQloZHJfbm9jYWNoZSgpOworCWhkcl9ub2NhY2hlKGhkcik7CiAKIAlpZiAoc2VydmljZV9uYW1lKSB7CiAJCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHtOVUxMIC8qIHNlcnZpY2UgbmFtZSAqLywKIAkJCSItLXN0YXRlbGVzcy1ycGMiLCAiLS1hZHZlcnRpc2UtcmVmcyIsCiAJCQkiLiIsIE5VTEx9OwotCQlzdHJ1Y3QgcnBjX3NlcnZpY2UgKnN2YyA9IHNlbGVjdF9zZXJ2aWNlKHNlcnZpY2VfbmFtZSk7CisJCXN0cnVjdCBycGNfc2VydmljZSAqc3ZjID0gc2VsZWN0X3NlcnZpY2UoaGRyLCBzZXJ2aWNlX25hbWUpOwogCiAJCXN0cmJ1Zl9hZGRmKCZidWYsICJhcHBsaWNhdGlvbi94LWdpdC0lcy1hZHZlcnRpc2VtZW50IiwKIAkJCXN2Yy0+bmFtZSk7Ci0JCWhkcl9zdHIoY29udGVudF90eXBlLCBidWYuYnVmKTsKLQkJZW5kX2hlYWRlcnMoKTsKKwkJaGRyX3N0cihoZHIsIGNvbnRlbnRfdHlwZSwgYnVmLmJ1Zik7CisJCWVuZF9oZWFkZXJzKGhkcik7CiAKIAkJcGFja2V0X3dyaXRlKDEsICIjIHNlcnZpY2U9Z2l0LSVzXG4iLCBzdmMtPm5hbWUpOwogCQlwYWNrZXRfZmx1c2goMSk7CkBAIC00NjcsOSArNDcxLDkgQEAKIAkJcnVuX3NlcnZpY2UoYXJndiwgMCk7CiAKIAl9IGVsc2UgewotCQlzZWxlY3RfZ2V0YW55ZmlsZSgpOworCQlzZWxlY3RfZ2V0YW55ZmlsZShoZHIpOwogCQlmb3JfZWFjaF9uYW1lc3BhY2VkX3JlZihzaG93X3RleHRfcmVmLCAmYnVmKTsKLQkJc2VuZF9zdHJidWYoInRleHQvcGxhaW4iLCAmYnVmKTsKKwkJc2VuZF9zdHJidWYoaGRyLCAidGV4dC9wbGFpbiIsICZidWYpOwogCX0KIAlzdHJidWZfcmVsZWFzZSgmYnVmKTsKIH0KQEAgLTQ5NCwyNCArNDk4LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGdldF9oZWFkKGNoYXIgKmFyZykKK3N0YXRpYyB2b2lkIGdldF9oZWFkKHN0cnVjdCBzdHJidWYgKmhkciwgY2hhciAqYXJnKQogewogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAKLQlzZWxlY3RfZ2V0YW55ZmlsZSgpOworCXNlbGVjdF9nZXRhbnlmaWxlKGhkcik7CiAJaGVhZF9yZWZfbmFtZXNwYWNlZChzaG93X2hlYWRfcmVmLCAmYnVmKTsKLQlzZW5kX3N0cmJ1ZigidGV4dC9wbGFpbiIsICZidWYpOworCXNlbmRfc3RyYnVmKGhkciwgInRleHQvcGxhaW4iLCAmYnVmKTsKIAlzdHJidWZfcmVsZWFzZSgmYnVmKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0X2luZm9fcGFja3MoY2hhciAqYXJnKQorc3RhdGljIHZvaWQgZ2V0X2luZm9fcGFja3Moc3RydWN0IHN0cmJ1ZiAqaGRyLCBjaGFyICphcmcpCiB7CiAJc2l6ZV90IG9iamRpcmxlbiA9IHN0cmxlbihnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOwogCXNpemVfdCBjbnQgPSAwOwogCi0Jc2VsZWN0X2dldGFueWZpbGUoKTsKKwlzZWxlY3RfZ2V0YW55ZmlsZShoZHIpOwogCXByZXBhcmVfcGFja2VkX2dpdCgpOwogCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CiAJCWlmIChwLT5wYWNrX2xvY2FsKQpAQCAtNTI1LDEyICs1MjksMTIgQEAKIAl9CiAJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOwogCi0JaGRyX25vY2FjaGUoKTsKLQlzZW5kX3N0cmJ1ZigidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsICZidWYpOworCWhkcl9ub2NhY2hlKGhkcik7CisJc2VuZF9zdHJidWYoaGRyLCAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsICZidWYpOwogCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogfQogCi1zdGF0aWMgdm9pZCBjaGVja19jb250ZW50X3R5cGUoY29uc3QgY2hhciAqYWNjZXB0ZWRfdHlwZSkKK3N0YXRpYyB2b2lkIGNoZWNrX2NvbnRlbnRfdHlwZShzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IGNoYXIgKmFjY2VwdGVkX3R5cGUpCiB7CiAJY29uc3QgY2hhciAqYWN0dWFsX3R5cGUgPSBnZXRlbnYoIkNPTlRFTlRfVFlQRSIpOwogCkBAIC01MzgsOSArNTQyLDkgQEAKIAkJYWN0dWFsX3R5cGUgPSAiIjsKIAogCWlmIChzdHJjbXAoYWN0dWFsX3R5cGUsIGFjY2VwdGVkX3R5cGUpKSB7Ci0JCWh0dHBfc3RhdHVzKDQxNSwgIlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiKTsKLQkJaGRyX25vY2FjaGUoKTsKLQkJZW5kX2hlYWRlcnMoKTsKKwkJaHR0cF9zdGF0dXMoaGRyLCA0MTUsICJVbnN1cHBvcnRlZCBNZWRpYSBUeXBlIik7CisJCWhkcl9ub2NhY2hlKGhkcik7CisJCWVuZF9oZWFkZXJzKGhkcik7CiAJCWZvcm1hdF93cml0ZSgxLAogCQkJIkV4cGVjdGVkIFBPU1Qgd2l0aCBDb250ZW50LVR5cGUgJyVzJywiCiAJCQkiIGJ1dCByZWNlaXZlZCAnJXMnIGluc3RlYWQuXG4iLApAQCAtNTQ5LDIzICs1NTMsMjMgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNlcnZpY2VfcnBjKGNoYXIgKnNlcnZpY2VfbmFtZSkKK3N0YXRpYyB2b2lkIHNlcnZpY2VfcnBjKHN0cnVjdCBzdHJidWYgKmhkciwgY2hhciAqc2VydmljZV9uYW1lKQogewogCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHtOVUxMLCAiLS1zdGF0ZWxlc3MtcnBjIiwgIi4iLCBOVUxMfTsKLQlzdHJ1Y3QgcnBjX3NlcnZpY2UgKnN2YyA9IHNlbGVjdF9zZXJ2aWNlKHNlcnZpY2VfbmFtZSk7CisJc3RydWN0IHJwY19zZXJ2aWNlICpzdmMgPSBzZWxlY3Rfc2VydmljZShoZHIsIHNlcnZpY2VfbmFtZSk7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAogCXN0cmJ1Zl9yZXNldCgmYnVmKTsKIAlzdHJidWZfYWRkZigmYnVmLCAiYXBwbGljYXRpb24veC1naXQtJXMtcmVxdWVzdCIsIHN2Yy0+bmFtZSk7Ci0JY2hlY2tfY29udGVudF90eXBlKGJ1Zi5idWYpOworCWNoZWNrX2NvbnRlbnRfdHlwZShoZHIsIGJ1Zi5idWYpOwogCi0JaGRyX25vY2FjaGUoKTsKKwloZHJfbm9jYWNoZShoZHIpOwogCiAJc3RyYnVmX3Jlc2V0KCZidWYpOwogCXN0cmJ1Zl9hZGRmKCZidWYsICJhcHBsaWNhdGlvbi94LWdpdC0lcy1yZXN1bHQiLCBzdmMtPm5hbWUpOwotCWhkcl9zdHIoY29udGVudF90eXBlLCBidWYuYnVmKTsKKwloZHJfc3RyKGhkciwgY29udGVudF90eXBlLCBidWYuYnVmKTsKIAotCWVuZF9oZWFkZXJzKCk7CisJZW5kX2hlYWRlcnMoaGRyKTsKIAogCWFyZ3ZbMF0gPSBzdmMtPm5hbWU7CiAJcnVuX3NlcnZpY2UoYXJndiwgc3ZjLT5idWZmZXJfaW5wdXQpOwpAQCAtNTc2LDExICs1ODAsMTMgQEAKIHN0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV93ZWJjZ2koY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKIHsKIAlpZiAoZGVhZCA8PSAxKSB7CisJCXN0cnVjdCBzdHJidWYgaGRyID0gU1RSQlVGX0lOSVQ7CisKIAkJdnJlcG9ydGYoImZhdGFsOiAiLCBlcnIsIHBhcmFtcyk7CiAKLQkJaHR0cF9zdGF0dXMoNTAwLCAiSW50ZXJuYWwgU2VydmVyIEVycm9yIik7Ci0JCWhkcl9ub2NhY2hlKCk7Ci0JCWVuZF9oZWFkZXJzKCk7CisJCWh0dHBfc3RhdHVzKCZoZHIsIDUwMCwgIkludGVybmFsIFNlcnZlciBFcnJvciIpOworCQloZHJfbm9jYWNoZSgmaGRyKTsKKwkJZW5kX2hlYWRlcnMoJmhkcik7CiAJfQogCWV4aXQoMCk7IC8qIHdlIHN1Y2Nlc3NmdWxseSByZXBvcnRlZCBhIGZhaWx1cmUgOy0pICovCiB9CkBAIC02MTcsNyArNjIzLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2VydmljZV9jbWQgewogCWNvbnN0IGNoYXIgKm1ldGhvZDsKIAljb25zdCBjaGFyICpwYXR0ZXJuOwotCXZvaWQgKCppbXApKGNoYXIgKik7CisJdm9pZCAoKmltcCkoc3RydWN0IHN0cmJ1ZiAqLCBjaGFyICopOwogfSBzZXJ2aWNlc1tdID0gewogCXsiR0VUIiwgIi9IRUFEJCIsIGdldF9oZWFkfSwKIAl7IkdFVCIsICIvaW5mby9yZWZzJCIsIGdldF9pbmZvX3JlZnN9LApAQCAtNjMyLDE3ICs2MzgsMzAgQEAKIAl7IlBPU1QiLCAiL2dpdC1yZWNlaXZlLXBhY2skIiwgc2VydmljZV9ycGN9CiB9OwogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitzdGF0aWMgaW50IGJhZF9yZXF1ZXN0KHN0cnVjdCBzdHJidWYgKmhkciwgY29uc3Qgc3RydWN0IHNlcnZpY2VfY21kICpjKQoreworCWNvbnN0IGNoYXIgKnByb3RvID0gZ2V0ZW52KCJTRVJWRVJfUFJPVE9DT0wiKTsKKworCWlmIChwcm90byAmJiAhc3RyY21wKHByb3RvLCAiSFRUUC8xLjEiKSkgeworCQlodHRwX3N0YXR1cyhoZHIsIDQwNSwgIk1ldGhvZCBOb3QgQWxsb3dlZCIpOworCQloZHJfc3RyKGhkciwgIkFsbG93IiwKKwkJCSFzdHJjbXAoYy0+bWV0aG9kLCAiR0VUIikgPyAiR0VULCBIRUFEIiA6IGMtPm1ldGhvZCk7CisJfSBlbHNlCisJCWh0dHBfc3RhdHVzKGhkciwgNDAwLCAiQmFkIFJlcXVlc3QiKTsKKwloZHJfbm9jYWNoZShoZHIpOworCWVuZF9oZWFkZXJzKGhkcik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJY2hhciAqbWV0aG9kID0gZ2V0ZW52KCJSRVFVRVNUX01FVEhPRCIpOwogCWNoYXIgKmRpcjsKIAlzdHJ1Y3Qgc2VydmljZV9jbWQgKmNtZCA9IE5VTEw7CiAJY2hhciAqY21kX2FyZyA9IE5VTEw7CiAJaW50IGk7CisJc3RydWN0IHN0cmJ1ZiBoZHIgPSBTVFJCVUZfSU5JVDsKIAotCWdpdF9zZXR1cF9nZXR0ZXh0KCk7Ci0KLQlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOwogCXNldF9kaWVfcm91dGluZShkaWVfd2ViY2dpKTsKIAlzZXRfZGllX2lzX3JlY3Vyc2luZ19yb3V0aW5lKGRpZV93ZWJjZ2lfcmVjdXJzaW5nKTsKIApAQCAtNjYyLDE4ICs2ODEsOCBAQAogCQlpZiAoIXJlZ2V4ZWMoJnJlLCBkaXIsIDEsIG91dCwgMCkpIHsKIAkJCXNpemVfdCBuOwogCi0JCQlpZiAoc3RyY21wKG1ldGhvZCwgYy0+bWV0aG9kKSkgewotCQkJCWNvbnN0IGNoYXIgKnByb3RvID0gZ2V0ZW52KCJTRVJWRVJfUFJPVE9DT0wiKTsKLQkJCQlpZiAocHJvdG8gJiYgIXN0cmNtcChwcm90bywgIkhUVFAvMS4xIikpIHsKLQkJCQkJaHR0cF9zdGF0dXMoNDA1LCAiTWV0aG9kIE5vdCBBbGxvd2VkIik7Ci0JCQkJCWhkcl9zdHIoIkFsbG93IiwgIXN0cmNtcChjLT5tZXRob2QsICJHRVQiKSA/Ci0JCQkJCQkiR0VULCBIRUFEIiA6IGMtPm1ldGhvZCk7Ci0JCQkJfSBlbHNlCi0JCQkJCWh0dHBfc3RhdHVzKDQwMCwgIkJhZCBSZXF1ZXN0Iik7Ci0JCQkJaGRyX25vY2FjaGUoKTsKLQkJCQllbmRfaGVhZGVycygpOwotCQkJCXJldHVybiAwOwotCQkJfQorCQkJaWYgKHN0cmNtcChtZXRob2QsIGMtPm1ldGhvZCkpCisJCQkJcmV0dXJuIGJhZF9yZXF1ZXN0KCZoZHIsIGMpOwogCiAJCQljbWQgPSBjOwogCQkJbiA9IG91dFswXS5ybV9lbyAtIG91dFswXS5ybV9zbzsKQEAgLTY4NSwxOSArNjk0LDE5IEBACiAJfQogCiAJaWYgKCFjbWQpCi0JCW5vdF9mb3VuZCgiUmVxdWVzdCBub3Qgc3VwcG9ydGVkOiAnJXMnIiwgZGlyKTsKKwkJbm90X2ZvdW5kKCZoZHIsICJSZXF1ZXN0IG5vdCBzdXBwb3J0ZWQ6ICclcyciLCBkaXIpOwogCiAJc2V0dXBfcGF0aCgpOwogCWlmICghZW50ZXJfcmVwbyhkaXIsIDApKQotCQlub3RfZm91bmQoIk5vdCBhIGdpdCByZXBvc2l0b3J5OiAnJXMnIiwgZGlyKTsKKwkJbm90X2ZvdW5kKCZoZHIsICJOb3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIsIGRpcik7CiAJaWYgKCFnZXRlbnYoIkdJVF9IVFRQX0VYUE9SVF9BTEwiKSAmJgogCSAgICBhY2Nlc3MoImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgRl9PSykgKQotCQlub3RfZm91bmQoIlJlcG9zaXRvcnkgbm90IGV4cG9ydGVkOiAnJXMnIiwgZGlyKTsKKwkJbm90X2ZvdW5kKCZoZHIsICJSZXBvc2l0b3J5IG5vdCBleHBvcnRlZDogJyVzJyIsIGRpcik7CiAKIAlodHRwX2NvbmZpZygpOwogCW1heF9yZXF1ZXN0X2J1ZmZlciA9IGdpdF9lbnZfdWxvbmcoIkdJVF9IVFRQX01BWF9SRVFVRVNUX0JVRkZFUiIsCiAJCQkJCSAgIG1heF9yZXF1ZXN0X2J1ZmZlcik7CiAKLQljbWQtPmltcChjbWRfYXJnKTsKKwljbWQtPmltcCgmaGRyLCBjbWRfYXJnKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2h0dHAtZmV0Y2guYyBiL2h0dHAtZmV0Y2guYwppbmRleCBiYTNlYTEwLi4zYjU1NmQ2IDEwMDY0NAotLS0gYS9odHRwLWZldGNoLmMKKysrIGIvaHR0cC1mZXRjaC5jCkBAIC02LDcgKzYsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgaHR0cF9mZXRjaF91c2FnZVtdID0gImdpdCBodHRwLWZldGNoICIKICJbLWNdIFstdF0gWy1hXSBbLXZdIFstLXJlY292ZXJdIFstdyByZWZdIFstLXN0ZGluXSBjb21taXQtaWQgdXJsIjsKIAotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CiAJaW50IGNvbW1pdHNfb25fc3RkaW4gPSAwOwpAQCAtMjIsMTAgKzIyLDYgQEAKIAlpbnQgZ2V0X3ZlcmJvc2VseSA9IDA7CiAJaW50IGdldF9yZWNvdmVyID0gMDsKIAotCWdpdF9zZXR1cF9nZXR0ZXh0KCk7Ci0KLQlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOwotCiAJd2hpbGUgKGFyZyA8IGFyZ2MgJiYgYXJndlthcmddWzBdID09ICctJykgewogCQlpZiAoYXJndlthcmddWzFdID09ICd0JykgewogCQkJZ2V0X3RyZWUgPSAxOwpkaWZmIC0tZ2l0IGEvaHR0cC1wdXNoLmMgYi9odHRwLXB1c2guYwppbmRleCBhMDkyZjAyLi43MDRiMWM4IDEwMDY0NAotLS0gYS9odHRwLXB1c2guYworKysgYi9odHRwLXB1c2guYwpAQCAtMTEzNyw3ICsxMTM3LDcgQEAKIAlscy51c2VyRGF0YSA9IHVzZXJEYXRhOwogCWxzLnVzZXJGdW5jID0gdXNlckZ1bmM7CiAKLQlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsIFBST1BGSU5EX0FMTF9SRVFVRVNUKTsKKwlzdHJidWZfYWRkc3RyKCZvdXRfYnVmZmVyLmJ1ZiwgUFJPUEZJTkRfQUxMX1JFUVVFU1QpOwogCiAJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgIkRlcHRoOiAxIik7CiAJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgIkNvbnRlbnQtVHlwZTogdGV4dC94bWwiKTsKQEAgLTE2OTIsMTIgKzE2OTIsMTIgQEAKICNlbmRpZgogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0OwogCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpuZXh0X3JlcXVlc3Q7CiAJaW50IG5yX3JlZnNwZWMgPSAwOwotCWNoYXIgKipyZWZzcGVjID0gTlVMTDsKKwljb25zdCBjaGFyICoqcmVmc3BlYyA9IE5VTEw7CiAJc3RydWN0IHJlbW90ZV9sb2NrICpyZWZfbG9jayA9IE5VTEw7CiAJc3RydWN0IHJlbW90ZV9sb2NrICppbmZvX3JlZl9sb2NrID0gTlVMTDsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKQEAgLTE3MDksMTUgKzE3MDksMTEgQEAKIAlpbnQgbmV3X3JlZnM7CiAJc3RydWN0IHJlZiAqcmVmLCAqbG9jYWxfcmVmczsKIAotCWdpdF9zZXR1cF9nZXR0ZXh0KCk7Ci0KLQlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOwotCiAJcmVwbyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXBvKSk7CiAKIAlhcmd2Kys7CiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKywgYXJndisrKSB7Ci0JCWNoYXIgKmFyZyA9ICphcmd2OworCQljb25zdCBjaGFyICphcmcgPSAqYXJndjsKIAogCQlpZiAoKmFyZyA9PSAnLScpIHsKIAkJCWlmICghc3RyY21wKGFyZywgIi0tYWxsIikpIHsKZGlmZiAtLWdpdCBhL2h0dHAtd2Fsa2VyLmMgYi9odHRwLXdhbGtlci5jCmluZGV4IDJjNzIxZjAuLjBiMjQyNTUgMTAwNjQ0Ci0tLSBhL2h0dHAtd2Fsa2VyLmMKKysrIGIvaHR0cC13YWxrZXIuYwpAQCAtMiw2ICsyLDcgQEAKICNpbmNsdWRlICJjb21taXQuaCIKICNpbmNsdWRlICJ3YWxrZXIuaCIKICNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAibGlzdC5oIgogCiBzdHJ1Y3QgYWx0X2Jhc2UgewogCWNoYXIgKmJhc2U7CkBAIC0yMyw3ICsyNCw3IEBACiAJc3RydWN0IGFsdF9iYXNlICpyZXBvOwogCWVudW0gb2JqZWN0X3JlcXVlc3Rfc3RhdGUgc3RhdGU7CiAJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKnJlcTsKLQlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogfTsKIAogc3RydWN0IGFsdGVybmF0ZXNfcmVxdWVzdCB7CkBAIC00MSw3ICs0Miw3IEBACiAJc3RydWN0IGFsdF9iYXNlICphbHQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmplY3RfcXVldWVfaGVhZDsKK3N0YXRpYyBMSVNUX0hFQUQob2JqZWN0X3F1ZXVlX2hlYWQpOwogCiBzdGF0aWMgdm9pZCBmZXRjaF9hbHRlcm5hdGVzKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgY29uc3QgY2hhciAqYmFzZSk7CiAKQEAgLTExMCwxOSArMTExLDEwIEBACiAKIHN0YXRpYyB2b2lkIHJlbGVhc2Vfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQogewotCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqZW50cnkgPSBvYmplY3RfcXVldWVfaGVhZDsKLQogCWlmIChvYmpfcmVxLT5yZXEgIT1OVUxMICYmIG9ial9yZXEtPnJlcS0+bG9jYWxmaWxlICE9IC0xKQogCQllcnJvcigiZmQgbGVha2FnZSBpbiByZWxlYXNlOiAlZCIsIG9ial9yZXEtPnJlcS0+bG9jYWxmaWxlKTsKLQlpZiAob2JqX3JlcSA9PSBvYmplY3RfcXVldWVfaGVhZCkgewotCQlvYmplY3RfcXVldWVfaGVhZCA9IG9ial9yZXEtPm5leHQ7Ci0JfSBlbHNlIHsKLQkJd2hpbGUgKGVudHJ5LT5uZXh0ICE9IE5VTEwgJiYgZW50cnktPm5leHQgIT0gb2JqX3JlcSkKLQkJCWVudHJ5ID0gZW50cnktPm5leHQ7Ci0JCWlmIChlbnRyeS0+bmV4dCA9PSBvYmpfcmVxKQotCQkJZW50cnktPm5leHQgPSBlbnRyeS0+bmV4dC0+bmV4dDsKLQl9CiAKKwlsaXN0X2RlbCgmb2JqX3JlcS0+bm9kZSk7CiAJZnJlZShvYmpfcmVxKTsKIH0KIApAQCAtMTMwLDggKzEyMiwxMCBAQAogc3RhdGljIGludCBmaWxsX2FjdGl2ZV9zbG90KHN0cnVjdCB3YWxrZXIgKndhbGtlcikKIHsKIAlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXE7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wLCAqaGVhZCA9ICZvYmplY3RfcXVldWVfaGVhZDsKIAotCWZvciAob2JqX3JlcSA9IG9iamVjdF9xdWV1ZV9oZWFkOyBvYmpfcmVxOyBvYmpfcmVxID0gb2JqX3JlcS0+bmV4dCkgeworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgaGVhZCkgeworCQlvYmpfcmVxID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvYmplY3RfcmVxdWVzdCwgbm9kZSk7CiAJCWlmIChvYmpfcmVxLT5zdGF0ZSA9PSBXQUlUSU5HKSB7CiAJCQlpZiAoaGFzX3NoYTFfZmlsZShvYmpfcmVxLT5zaGExKSkKIAkJCQlvYmpfcmVxLT5zdGF0ZSA9IENPTVBMRVRFOwpAQCAtMTQ4LDcgKzE0Miw2IEBACiBzdGF0aWMgdm9pZCBwcmVmZXRjaChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpuZXdyZXE7Ci0Jc3RydWN0IG9iamVjdF9yZXF1ZXN0ICp0YWlsOwogCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKIAogCW5ld3JlcSA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdyZXEpKTsKQEAgLTE1NywxOCArMTUwLDkgQEAKIAluZXdyZXEtPnJlcG8gPSBkYXRhLT5hbHQ7CiAJbmV3cmVxLT5zdGF0ZSA9IFdBSVRJTkc7CiAJbmV3cmVxLT5yZXEgPSBOVUxMOwotCW5ld3JlcS0+bmV4dCA9IE5VTEw7CiAKIAlodHRwX2lzX3ZlcmJvc2UgPSB3YWxrZXItPmdldF92ZXJib3NlbHk7Ci0KLQlpZiAob2JqZWN0X3F1ZXVlX2hlYWQgPT0gTlVMTCkgewotCQlvYmplY3RfcXVldWVfaGVhZCA9IG5ld3JlcTsKLQl9IGVsc2UgewotCQl0YWlsID0gb2JqZWN0X3F1ZXVlX2hlYWQ7Ci0JCXdoaWxlICh0YWlsLT5uZXh0ICE9IE5VTEwpCi0JCQl0YWlsID0gdGFpbC0+bmV4dDsKLQkJdGFpbC0+bmV4dCA9IG5ld3JlcTsKLQl9CisJbGlzdF9hZGRfdGFpbCgmbmV3cmVxLT5ub2RlLCAmb2JqZWN0X3F1ZXVlX2hlYWQpOwogCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKIAlmaWxsX2FjdGl2ZV9zbG90cygpOwpAQCAtNDQ3LDE1ICs0MzEsMTkgQEAKIAlyZWxlYXNlX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOwogfQogCi1zdGF0aWMgaW50IGZldGNoX29iamVjdChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBhbHRfYmFzZSAqcmVwbywgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyBpbnQgZmV0Y2hfb2JqZWN0KHN0cnVjdCB3YWxrZXIgKndhbGtlciwgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAljaGFyICpoZXggPSBzaGExX3RvX2hleChzaGExKTsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEgPSBvYmplY3RfcXVldWVfaGVhZDsKKwlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEgPSBOVUxMOwogCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqaGVhZCA9ICZvYmplY3RfcXVldWVfaGVhZDsKIAotCXdoaWxlIChvYmpfcmVxICE9IE5VTEwgJiYgaGFzaGNtcChvYmpfcmVxLT5zaGExLCBzaGExKSkKLQkJb2JqX3JlcSA9IG9ial9yZXEtPm5leHQ7CisJbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpIHsKKwkJb2JqX3JlcSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QsIG5vZGUpOworCQlpZiAoIWhhc2hjbXAob2JqX3JlcS0+c2hhMSwgc2hhMSkpCisJCQlicmVhazsKKwl9CiAJaWYgKG9ial9yZXEgPT0gTlVMTCkKIAkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBmaW5kIHJlcXVlc3QgZm9yICVzIGluIHRoZSBxdWV1ZSIsIGhleCk7CiAKQEAgLTQ4OCw2ICs0NzYsMTUgQEAKIAkJcmVxLT5sb2NhbGZpbGUgPSAtMTsKIAl9CiAKKwkvKgorCSAqIHdlIHR1cm5lZCBvZmYgQ1VSTE9QVF9GQUlMT05FUlJPUiB0byBhdm9pZCBsb3NpbmcgYQorCSAqIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBhbmQgZ290IENVUkxFX09LLgorCSAqLworCWlmIChyZXEtPmh0dHBfY29kZSA9PSA0MDQgJiYgcmVxLT5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSyAmJgorCQkJKHN0YXJ0c193aXRoKHJlcS0+dXJsLCAiaHR0cDovLyIpIHx8CisJCQkgc3RhcnRzX3dpdGgocmVxLT51cmwsICJodHRwczovLyIpKSkKKwkJcmVxLT5jdXJsX3Jlc3VsdCA9IENVUkxFX0hUVFBfUkVUVVJORURfRVJST1I7CisKIAlpZiAob2JqX3JlcS0+c3RhdGUgPT0gQUJPUlRFRCkgewogCQlyZXQgPSBlcnJvcigiUmVxdWVzdCBmb3IgJXMgYWJvcnRlZCIsIGhleCk7CiAJfSBlbHNlIGlmIChyZXEtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LICYmCkBAIC01MTgsNyArNTE1LDcgQEAKIAlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CiAJc3RydWN0IGFsdF9iYXNlICphbHRiYXNlID0gZGF0YS0+YWx0OwogCi0JaWYgKCFmZXRjaF9vYmplY3Qod2Fsa2VyLCBhbHRiYXNlLCBzaGExKSkKKwlpZiAoIWZldGNoX29iamVjdCh3YWxrZXIsIHNoYTEpKQogCQlyZXR1cm4gMDsKIAl3aGlsZSAoYWx0YmFzZSkgewogCQlpZiAoIWh0dHBfZmV0Y2hfcGFjayh3YWxrZXIsIGFsdGJhc2UsIHNoYTEpKQpkaWZmIC0tZ2l0IGEvaHR0cC5jIGIvaHR0cC5jCmluZGV4IGRmNmRkMDEuLmNkNDBiMDEgMTAwNjQ0Ci0tLSBhL2h0dHAuYworKysgYi9odHRwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlICJnZXR0ZXh0LmgiCiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAKK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX2N1cmwgPSBUUkFDRV9LRVlfSU5JVChDVVJMKTsKICNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwYTA4CiBsb25nIGludCBnaXRfY3VybF9pcHJlc29sdmUgPSBDVVJMX0lQUkVTT0xWRV9XSEFURVZFUjsKICNlbHNlCkBAIC00NzcsNiArNDc4LDEyNSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIHJlZGFjdF9zZW5zaXRpdmVfaGVhZGVyKHN0cnVjdCBzdHJidWYgKmhlYWRlcikKK3sKKwljb25zdCBjaGFyICpzZW5zaXRpdmVfaGVhZGVyOworCisJaWYgKHNraXBfcHJlZml4KGhlYWRlci0+YnVmLCAiQXV0aG9yaXphdGlvbjoiLCAmc2Vuc2l0aXZlX2hlYWRlcikgfHwKKwkgICAgc2tpcF9wcmVmaXgoaGVhZGVyLT5idWYsICJQcm94eS1BdXRob3JpemF0aW9uOiIsICZzZW5zaXRpdmVfaGVhZGVyKSkgeworCQkvKiBUaGUgZmlyc3QgdG9rZW4gaXMgdGhlIHR5cGUsIHdoaWNoIGlzIE9LIHRvIGxvZyAqLworCQl3aGlsZSAoaXNzcGFjZSgqc2Vuc2l0aXZlX2hlYWRlcikpCisJCQlzZW5zaXRpdmVfaGVhZGVyKys7CisJCXdoaWxlICgqc2Vuc2l0aXZlX2hlYWRlciAmJiAhaXNzcGFjZSgqc2Vuc2l0aXZlX2hlYWRlcikpCisJCQlzZW5zaXRpdmVfaGVhZGVyKys7CisJCS8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyBvcGFxdWUgYW5kIHBvc3NpYmx5IHNlbnNpdGl2ZSAqLworCQlzdHJidWZfc2V0bGVuKGhlYWRlciwgIHNlbnNpdGl2ZV9oZWFkZXIgLSBoZWFkZXItPmJ1Zik7CisJCXN0cmJ1Zl9hZGRzdHIoaGVhZGVyLCAiIDxyZWRhY3RlZD4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGN1cmxfZHVtcF9oZWFkZXIoY29uc3QgY2hhciAqdGV4dCwgdW5zaWduZWQgY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IGhpZGVfc2Vuc2l0aXZlX2hlYWRlcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgKipoZWFkZXJzLCAqKmhlYWRlcjsKKworCXN0cmJ1Zl9hZGRmKCZvdXQsICIlcywgJTEwLjEwbGQgYnl0ZXMgKDB4JTguOGx4KVxuIiwKKwkJdGV4dCwgKGxvbmcpc2l6ZSwgKGxvbmcpc2l6ZSk7CisJdHJhY2Vfc3RyYnVmKCZ0cmFjZV9jdXJsLCAmb3V0KTsKKwlzdHJidWZfcmVzZXQoJm91dCk7CisJc3RyYnVmX2FkZCgmb3V0LCBwdHIsIHNpemUpOworCWhlYWRlcnMgPSBzdHJidWZfc3BsaXRfbWF4KCZvdXQsICdcbicsIDApOworCisJZm9yIChoZWFkZXIgPSBoZWFkZXJzOyAqaGVhZGVyOyBoZWFkZXIrKykgeworCQlpZiAoaGlkZV9zZW5zaXRpdmVfaGVhZGVyKQorCQkJcmVkYWN0X3NlbnNpdGl2ZV9oZWFkZXIoKmhlYWRlcik7CisJCXN0cmJ1Zl9pbnNlcnQoKCpoZWFkZXIpLCAwLCB0ZXh0LCBzdHJsZW4odGV4dCkpOworCQlzdHJidWZfaW5zZXJ0KCgqaGVhZGVyKSwgc3RybGVuKHRleHQpLCAiOiAiLCAyKTsKKwkJc3RyYnVmX3J0cmltKCgqaGVhZGVyKSk7CisJCXN0cmJ1Zl9hZGRjaCgoKmhlYWRlciksICdcbicpOworCQl0cmFjZV9zdHJidWYoJnRyYWNlX2N1cmwsICgqaGVhZGVyKSk7CisJfQorCXN0cmJ1Zl9saXN0X2ZyZWUoaGVhZGVycyk7CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGN1cmxfZHVtcF9kYXRhKGNvbnN0IGNoYXIgKnRleHQsIHVuc2lnbmVkIGNoYXIgKnB0ciwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGk7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSA2MDsKKworCXN0cmJ1Zl9hZGRmKCZvdXQsICIlcywgJTEwLjEwbGQgYnl0ZXMgKDB4JTguOGx4KVxuIiwKKwkJdGV4dCwgKGxvbmcpc2l6ZSwgKGxvbmcpc2l6ZSk7CisJdHJhY2Vfc3RyYnVmKCZ0cmFjZV9jdXJsLCAmb3V0KTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IHdpZHRoKSB7CisJCXNpemVfdCB3OworCisJCXN0cmJ1Zl9yZXNldCgmb3V0KTsKKwkJc3RyYnVmX2FkZGYoJm91dCwgIiVzOiAiLCB0ZXh0KTsKKwkJZm9yICh3ID0gMDsgKHcgPCB3aWR0aCkgJiYgKGkgKyB3IDwgc2l6ZSk7IHcrKykgeworCQkJdW5zaWduZWQgY2hhciBjaCA9IHB0cltpICsgd107CisKKwkJCXN0cmJ1Zl9hZGRjaCgmb3V0LAorCQkJCSAgICAgICAoY2ggPj0gMHgyMCkgJiYgKGNoIDwgMHg4MCkKKwkJCQkgICAgICAgPyBjaCA6ICcuJyk7CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZvdXQsICdcbicpOworCQl0cmFjZV9zdHJidWYoJnRyYWNlX2N1cmwsICZvdXQpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKK30KKworc3RhdGljIGludCBjdXJsX3RyYWNlKENVUkwgKmhhbmRsZSwgY3VybF9pbmZvdHlwZSB0eXBlLCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwgdm9pZCAqdXNlcnApCit7CisJY29uc3QgY2hhciAqdGV4dDsKKwllbnVtIHsgTk9fRklMVEVSID0gMCwgRE9fRklMVEVSID0gMSB9OworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBDVVJMSU5GT19URVhUOgorCQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9jdXJsLCAiPT0gSW5mbzogJXMiLCBkYXRhKTsKKwlkZWZhdWx0OgkJLyogd2UgaWdub3JlIHVua25vd24gdHlwZXMgYnkgZGVmYXVsdCAqLworCQlyZXR1cm4gMDsKKworCWNhc2UgQ1VSTElORk9fSEVBREVSX09VVDoKKwkJdGV4dCA9ICI9PiBTZW5kIGhlYWRlciI7CisJCWN1cmxfZHVtcF9oZWFkZXIodGV4dCwgKHVuc2lnbmVkIGNoYXIgKilkYXRhLCBzaXplLCBET19GSUxURVIpOworCQlicmVhazsKKwljYXNlIENVUkxJTkZPX0RBVEFfT1VUOgorCQl0ZXh0ID0gIj0+IFNlbmQgZGF0YSI7CisJCWN1cmxfZHVtcF9kYXRhKHRleHQsICh1bnNpZ25lZCBjaGFyICopZGF0YSwgc2l6ZSk7CisJCWJyZWFrOworCWNhc2UgQ1VSTElORk9fU1NMX0RBVEFfT1VUOgorCQl0ZXh0ID0gIj0+IFNlbmQgU1NMIGRhdGEiOworCQljdXJsX2R1bXBfZGF0YSh0ZXh0LCAodW5zaWduZWQgY2hhciAqKWRhdGEsIHNpemUpOworCQlicmVhazsKKwljYXNlIENVUkxJTkZPX0hFQURFUl9JTjoKKwkJdGV4dCA9ICI8PSBSZWN2IGhlYWRlciI7CisJCWN1cmxfZHVtcF9oZWFkZXIodGV4dCwgKHVuc2lnbmVkIGNoYXIgKilkYXRhLCBzaXplLCBOT19GSUxURVIpOworCQlicmVhazsKKwljYXNlIENVUkxJTkZPX0RBVEFfSU46CisJCXRleHQgPSAiPD0gUmVjdiBkYXRhIjsKKwkJY3VybF9kdW1wX2RhdGEodGV4dCwgKHVuc2lnbmVkIGNoYXIgKilkYXRhLCBzaXplKTsKKwkJYnJlYWs7CisJY2FzZSBDVVJMSU5GT19TU0xfREFUQV9JTjoKKwkJdGV4dCA9ICI8PSBSZWN2IFNTTCBkYXRhIjsKKwkJY3VybF9kdW1wX2RhdGEodGV4dCwgKHVuc2lnbmVkIGNoYXIgKilkYXRhLCBzaXplKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHNldHVwX2N1cmxfdHJhY2UoQ1VSTCAqaGFuZGxlKQoreworCWlmICghdHJhY2Vfd2FudCgmdHJhY2VfY3VybCkpCisJCXJldHVybjsKKwljdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisJY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfREVCVUdGVU5DVElPTiwgY3VybF90cmFjZSk7CisJY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfREVCVUdEQVRBLCBOVUxMKTsKK30KKworCiBzdGF0aWMgQ1VSTCAqZ2V0X2N1cmxfaGFuZGxlKHZvaWQpCiB7CiAJQ1VSTCAqcmVzdWx0ID0gY3VybF9lYXN5X2luaXQoKTsKQEAgLTU3NSw5ICs2OTUsOSBAQAogCQl3YXJuaW5nKCJwcm90b2NvbCByZXN0cmljdGlvbnMgbm90IGFwcGxpZWQgdG8gY3VybCByZWRpcmVjdHMgYmVjYXVzZVxuIgogCQkJInlvdXIgY3VybCB2ZXJzaW9uIGlzIHRvbyBvbGQgKD49IDcuMTkuNCkiKTsKICNlbmRpZgotCiAJaWYgKGdldGVudigiR0lUX0NVUkxfVkVSQk9TRSIpKQotCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9WRVJCT1NFLCAxKTsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCXNldHVwX2N1cmxfdHJhY2UocmVzdWx0KTsKIAogCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1VTRVJBR0VOVCwKIAkJdXNlcl9hZ2VudCA/IHVzZXJfYWdlbnQgOiBnaXRfdXNlcl9hZ2VudCgpKTsKQEAgLTExMDUsNyArMTIyNSw3IEBACiAKIAlzdHJidWZfYWRkZihidWYsICJvYmplY3RzLyUuKnMvIiwgMiwgaGV4KTsKIAlpZiAoIW9ubHlfdHdvX2RpZ2l0X3ByZWZpeCkKLQkJc3RyYnVmX2FkZGYoYnVmLCAiJXMiLCBoZXgrMik7CisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBoZXggKyAyKTsKIH0KIAogY2hhciAqZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGV4LApAQCAtMTg1NSw4ICsxOTc1LDE5IEBACiAJdW5zaWduZWQgY2hhciBleHBuWzQwOTZdOwogCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOwogCWludCBwb3NuID0gMDsKLQlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSA9Ci0JCShzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqKWRhdGE7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEgPSBkYXRhOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90ID0gZnJlcS0+c2xvdDsKKworCWlmIChzbG90KSB7CisJCUNVUkxjb2RlIGMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhzbG90LT5jdXJsLCBDVVJMSU5GT19IVFRQX0NPREUsCisJCQkJCQkmc2xvdC0+aHR0cF9jb2RlKTsKKwkJaWYgKGMgIT0gQ1VSTEVfT0spCisJCQlkaWUoIkJVRzogY3VybF9lYXN5X2dldGluZm8gZm9yIEhUVFAgY29kZSBmYWlsZWQ6ICVzIiwKKwkJCQljdXJsX2Vhc3lfc3RyZXJyb3IoYykpOworCQlpZiAoc2xvdC0+aHR0cF9jb2RlID49IDQwMCkKKwkJCXJldHVybiBzaXplOworCX0KKwogCWRvIHsKIAkJc3NpemVfdCByZXR2YWwgPSB4d3JpdGUoZnJlcS0+bG9jYWxmaWxlLAogCQkJCQkoY2hhciAqKSBwdHIgKyBwb3NuLCBzaXplIC0gcG9zbik7CkBAIC0xOTc3LDYgKzIxMDgsNyBAQAogCWZyZXEtPnNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKIAogCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBmcmVxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfRkFJTE9ORVJST1IsIDApOwogCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfc2hhMV9maWxlKTsKIAljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIGZyZXEtPmVycm9yc3RyKTsKIAljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCBmcmVxLT51cmwpOwpkaWZmIC0tZ2l0IGEvaHR0cC5oIGIvaHR0cC5oCmluZGV4IDM2ZjU1OGIuLjVhYjlkOWMgMTAwNjQ0Ci0tLSBhL2h0dHAuaAorKysgYi9odHRwLmgKQEAgLTIyNSw0ICsyMjUsNiBAQAogZXh0ZXJuIHZvaWQgYWJvcnRfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSk7CiBleHRlcm4gdm9pZCByZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOwogCisvKiBzZXR1cCByb3V0aW5lIGZvciBjdXJsX2Vhc3lfc2V0b3B0IENVUkxPUFRfREVCVUdGVU5DVElPTiAqLwordm9pZCBzZXR1cF9jdXJsX3RyYWNlKENVUkwgKmhhbmRsZSk7CiAjZW5kaWYgLyogSFRUUF9IICovCmRpZmYgLS1naXQgYS9pZGVudC5jIGIvaWRlbnQuYwppbmRleCAxMzljNTI4Li5lMjBhNzcyIDEwMDY0NAotLS0gYS9pZGVudC5jCisrKyBiL2lkZW50LmMKQEAgLTE4NCw2ICsxODQsMTEgQEAKIAlyZXR1cm4gZ2l0X2RlZmF1bHRfZGF0ZS5idWY7CiB9CiAKK3ZvaWQgcmVzZXRfaWRlbnRfZGF0ZSh2b2lkKQoreworCXN0cmJ1Zl9yZXNldCgmZ2l0X2RlZmF1bHRfZGF0ZSk7Cit9CisKIHN0YXRpYyBpbnQgY3J1ZCh1bnNpZ25lZCBjaGFyIGMpCiB7CiAJcmV0dXJuICBjIDw9IDMyICB8fApkaWZmIC0tZ2l0IGEvaW1hcC1zZW5kLmMgYi9pbWFwLXNlbmQuYwppbmRleCA5MzhjNjkxLi4wZjVmNDc2IDEwMDY0NAotLS0gYS9pbWFwLXNlbmQuYworKysgYi9pbWFwLXNlbmQuYwpAQCAtNTExLDcgKzUxMSw3IEBACiAKIAl2YV9zdGFydCh2YSwgZm10KTsKIAlpZiAoYmxlbiA8PSAwIHx8ICh1bnNpZ25lZCkocmV0ID0gdnNucHJpbnRmKGJ1ZiwgYmxlbiwgZm10LCB2YSkpID49ICh1bnNpZ25lZClibGVuKQotCQlkaWUoIkZhdGFsOiBidWZmZXIgdG9vIHNtYWxsLiBQbGVhc2UgcmVwb3J0IGEgYnVnLiIpOworCQlkaWUoIkJVRzogYnVmZmVyIHRvbyBzbWFsbC4gUGxlYXNlIHJlcG9ydCBhIGJ1Zy4iKTsKIAl2YV9lbmQodmEpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNDQzLDYgKzE0NDMsNyBAQAogCiAJaWYgKDAgPCB2ZXJib3NpdHkgfHwgZ2V0ZW52KCJHSVRfQ1VSTF9WRVJCT1NFIikpCiAJCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisJc2V0dXBfY3VybF90cmFjZShjdXJsKTsKIAogCXJldHVybiBjdXJsOwogfQpAQCAtMTQ5NCwxNiArMTQ5NSwxMiBAQAogfQogI2VuZGlmCiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IHN0cmJ1ZiBhbGxfbXNncyA9IFNUUkJVRl9JTklUOwogCWludCB0b3RhbDsKIAlpbnQgbm9uZ2l0X29rOwogCi0JZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKLQotCWdpdF9zZXR1cF9nZXR0ZXh0KCk7Ci0KIAlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0X29rKTsKIAlnaXRfaW1hcF9jb25maWcoKTsKIApkaWZmIC0tZ2l0IGEvaXRlcmF0b3IuaCBiL2l0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2OTAwZQotLS0gL2Rldi9udWxsCisrKyBiL2l0ZXJhdG9yLmgKQEAgLTAsMCArMSw4MSBAQAorI2lmbmRlZiBJVEVSQVRPUl9ICisjZGVmaW5lIElURVJBVE9SX0gKKworLyoKKyAqIEdlbmVyaWMgY29uc3RhbnRzIHJlbGF0ZWQgdG8gaXRlcmF0b3JzLgorICovCisKKy8qCisgKiBUaGUgYXR0ZW1wdCB0byBhZHZhbmNlIHRoZSBpdGVyYXRvciB3YXMgc3VjY2Vzc2Z1bDsgdGhlIGl0ZXJhdG9yCisgKiByZWZsZWN0cyB0aGUgbmV3IGN1cnJlbnQgZW50cnkuCisgKi8KKyNkZWZpbmUgSVRFUl9PSyAwCisKKy8qCisgKiBUaGUgaXRlcmF0b3IgaXMgZXhoYXVzdGVkIGFuZCBoYXMgYmVlbiBmcmVlZC4KKyAqLworI2RlZmluZSBJVEVSX0RPTkUgLTEKKworLyoKKyAqIFRoZSBpdGVyYXRvciBleHBlcmllbmNlZCBhbiBlcnJvci4gVGhlIGl0ZXJhdGlvbiBoYXMgYmVlbiBhYm9ydGVkCisgKiBhbmQgdGhlIGl0ZXJhdG9yIGhhcyBiZWVuIGZyZWVkLgorICovCisjZGVmaW5lIElURVJfRVJST1IgLTIKKworLyoKKyAqIFJldHVybiB2YWx1ZXMgZm9yIHNlbGVjdG9yIGZ1bmN0aW9ucyBmb3IgbWVyZ2UgaXRlcmF0b3JzLiBUaGUKKyAqIG51bWVyaWNhbCB2YWx1ZXMgb2YgdGhlc2UgY29uc3RhbnRzIGFyZSBpbXBvcnRhbnQgYW5kIG11c3QgYmUKKyAqIGNvbXBhdGlibGUgd2l0aCBJVEVSX0RPTkUgYW5kIElURVJfRVJST1IuCisgKi8KK2VudW0gaXRlcmF0b3Jfc2VsZWN0aW9uIHsKKwkvKiBFbmQgdGhlIGl0ZXJhdGlvbiB3aXRob3V0IGFuIGVycm9yOiAqLworCUlURVJfU0VMRUNUX0RPTkUgPSBJVEVSX0RPTkUsCisKKwkvKiBSZXBvcnQgYW4gZXJyb3IgYW5kIGFib3J0IHRoZSBpdGVyYXRpb246ICovCisJSVRFUl9TRUxFQ1RfRVJST1IgPSBJVEVSX0VSUk9SLAorCisJLyoKKwkgKiBUaGUgbmV4dCBncm91cCBvZiBjb25zdGFudHMgYXJlIG1hc2tzIHRoYXQgYXJlIHVzZWZ1bAorCSAqIG1haW5seSBpbnRlcm5hbGx5LgorCSAqLworCisJLyogVGhlIExTQiBzZWxlY3RzIHdoZXRoZXIgaXRlcjAvaXRlcjEgaXMgdGhlICJjdXJyZW50IiBpdGVyYXRvcjogKi8KKwlJVEVSX0NVUlJFTlRfU0VMRUNUSU9OX01BU0sgPSAweDAxLAorCisJLyogaXRlcjAgaXMgdGhlICJjdXJyZW50IiBpdGVyYXRvciB0aGlzIHJvdW5kOiAqLworCUlURVJfQ1VSUkVOVF9TRUxFQ1RJT05fMCA9IDB4MDAsCisKKwkvKiBpdGVyMSBpcyB0aGUgImN1cnJlbnQiIGl0ZXJhdG9yIHRoaXMgcm91bmQ6ICovCisJSVRFUl9DVVJSRU5UX1NFTEVDVElPTl8xID0gMHgwMSwKKworCS8qIFlpZWxkIHRoZSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGl0ZXJhdG9yPyAqLworCUlURVJfWUlFTERfQ1VSUkVOVCA9IDB4MDIsCisKKwkvKiBEaXNjYXJkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWNvbmRhcnkgaXRlcmF0b3I/ICovCisJSVRFUl9TS0lQX1NFQ09OREFSWSA9IDB4MDQsCisKKwkvKgorCSAqIFRoZSBjb25zdGFudHMgdGhhdCBhIHNlbGVjdG9yIGZ1bmN0aW9uIHNob3VsZCB1c3VhbGx5CisJICogcmV0dXJuLgorCSAqLworCisJLyogWWllbGQgdGhlIHZhbHVlIGZyb20gaXRlcjA6ICovCisJSVRFUl9TRUxFQ1RfMCA9IElURVJfQ1VSUkVOVF9TRUxFQ1RJT05fMCB8IElURVJfWUlFTERfQ1VSUkVOVCwKKworCS8qIFlpZWxkIHRoZSB2YWx1ZSBmcm9tIGl0ZXIwIGFuZCBkaXNjYXJkIHRoZSBvbmUgZnJvbSBpdGVyMTogKi8KKwlJVEVSX1NFTEVDVF8wX1NLSVBfMSA9IElURVJfU0VMRUNUXzAgfCBJVEVSX1NLSVBfU0VDT05EQVJZLAorCisJLyogRGlzY2FyZCB0aGUgdmFsdWUgZnJvbSBpdGVyMCB3aXRob3V0IHlpZWxkaW5nIGFueXRoaW5nIHRoaXMgcm91bmQ6ICovCisJSVRFUl9TS0lQXzAgPSBJVEVSX0NVUlJFTlRfU0VMRUNUSU9OXzEgfCBJVEVSX1NLSVBfU0VDT05EQVJZLAorCisJLyogWWllbGQgdGhlIHZhbHVlIGZyb20gaXRlcjE6ICovCisJSVRFUl9TRUxFQ1RfMSA9IElURVJfQ1VSUkVOVF9TRUxFQ1RJT05fMSB8IElURVJfWUlFTERfQ1VSUkVOVCwKKworCS8qIFlpZWxkIHRoZSB2YWx1ZSBmcm9tIGl0ZXIxIGFuZCBkaXNjYXJkIHRoZSBvbmUgZnJvbSBpdGVyMDogKi8KKwlJVEVSX1NFTEVDVF8xX1NLSVBfMCA9IElURVJfU0VMRUNUXzEgfCBJVEVSX1NLSVBfU0VDT05EQVJZLAorCisJLyogRGlzY2FyZCB0aGUgdmFsdWUgZnJvbSBpdGVyMSB3aXRob3V0IHlpZWxkaW5nIGFueXRoaW5nIHRoaXMgcm91bmQ6ICovCisJSVRFUl9TS0lQXzEgPSBJVEVSX0NVUlJFTlRfU0VMRUNUSU9OXzAgfCBJVEVSX1NLSVBfU0VDT05EQVJZCit9OworCisjZW5kaWYgLyogSVRFUkFUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvbGluZS1sb2cuYyBiL2xpbmUtbG9nLmMKaW5kZXggYmJlMzFlZC4uOTE2ZTcyNCAxMDA2NDQKLS0tIGEvbGluZS1sb2cuYworKysgYi9saW5lLWxvZy5jCkBAIC00ODAsOCArNDgwLDcgQEAKIAkJc3RydWN0IG9iamVjdCAqb2JqID0gcmV2cy0+cGVuZGluZy5vYmplY3RzW2ldLml0ZW07CiAJCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykKIAkJCWNvbnRpbnVlOwotCQl3aGlsZSAob2JqLT50eXBlID09IE9CSl9UQUcpCi0JCQlvYmogPSBkZXJlZl90YWcob2JqLCBOVUxMLCAwKTsKKwkJb2JqID0gZGVyZWZfdGFnKG9iaiwgTlVMTCwgMCk7CiAJCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKIAkJCWRpZSgiTm9uIGNvbW1pdCAlcz8iLCByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSk7CiAJCWlmIChjb21taXQpCkBAIC01MjAsNyArNTE5LDcgQEAKIAljaGFyICpkYXRhID0gTlVMTDsKIAogCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHNwZWMsIDApKQotCQlkaWUoIkNhbm5vdCByZWFkIGJsb2IgJXMiLCBzaGExX3RvX2hleChzcGVjLT5zaGExKSk7CisJCWRpZSgiQ2Fubm90IHJlYWQgYmxvYiAlcyIsIG9pZF90b19oZXgoJnNwZWMtPm9pZCkpOwogCiAJQUxMT0NfQVJSQVkoZW5kcywgc2l6ZSk7CiAJZW5kc1tjdXIrK10gPSAwOwpAQCAtODQxLDcgKzg0MCw3IEBACiAKIHN0YXRpYyB2b2lkIHByaW50X2xpbmUoY29uc3QgY2hhciAqcHJlZml4LCBjaGFyIGZpcnN0LAogCQkgICAgICAgbG9uZyBsaW5lLCB1bnNpZ25lZCBsb25nICplbmRzLCB2b2lkICpkYXRhLAotCQkgICAgICAgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKnJlc2V0KQorCQkgICAgICAgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKnJlc2V0LCBGSUxFICpmaWxlKQogewogCWNoYXIgKmJlZ2luID0gZ2V0X250aF9saW5lKGxpbmUsIGVuZHMsIGRhdGEpOwogCWNoYXIgKmVuZCA9IGdldF9udGhfbGluZShsaW5lKzEsIGVuZHMsIGRhdGEpOwpAQCAtODUyLDE0ICs4NTEsMTQgQEAKIAkJaGFkX25sID0gMTsKIAl9CiAKLQlmcHV0cyhwcmVmaXgsIHN0ZG91dCk7Ci0JZnB1dHMoY29sb3IsIHN0ZG91dCk7Ci0JcHV0Y2hhcihmaXJzdCk7Ci0JZndyaXRlKGJlZ2luLCAxLCBlbmQtYmVnaW4sIHN0ZG91dCk7Ci0JZnB1dHMocmVzZXQsIHN0ZG91dCk7Ci0JcHV0Y2hhcignXG4nKTsKKwlmcHV0cyhwcmVmaXgsIGZpbGUpOworCWZwdXRzKGNvbG9yLCBmaWxlKTsKKwlwdXRjKGZpcnN0LCBmaWxlKTsKKwlmd3JpdGUoYmVnaW4sIDEsIGVuZC1iZWdpbiwgZmlsZSk7CisJZnB1dHMocmVzZXQsIGZpbGUpOworCXB1dGMoJ1xuJywgZmlsZSk7CiAJaWYgKCFoYWRfbmwpCi0JCWZwdXRzKCJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iLCBzdGRvdXQpOworCQlmcHV0cygiXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIiwgZmlsZSk7CiB9CiAKIHN0YXRpYyBjaGFyICpvdXRwdXRfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKQEAgLTg5NCwxNiArODkzLDE2IEBACiAJaWYgKCFwYWlyIHx8ICFkaWZmKQogCQlyZXR1cm47CiAKLQlpZiAocGFpci0+b25lLT5zaGExX3ZhbGlkKQorCWlmIChwYWlyLT5vbmUtPm9pZF92YWxpZCkKIAkJZmlsbF9saW5lX2VuZHMocGFpci0+b25lLCAmcF9saW5lcywgJnBfZW5kcyk7CiAJZmlsbF9saW5lX2VuZHMocGFpci0+dHdvLCAmdF9saW5lcywgJnRfZW5kcyk7CiAKLQlwcmludGYoIiVzJXNkaWZmIC0tZ2l0IGEvJXMgYi8lcyVzXG4iLCBwcmVmaXgsIGNfbWV0YSwgcGFpci0+b25lLT5wYXRoLCBwYWlyLT50d28tPnBhdGgsIGNfcmVzZXQpOwotCXByaW50ZigiJXMlcy0tLSAlcyVzJXNcbiIsIHByZWZpeCwgY19tZXRhLAotCSAgICAgICBwYWlyLT5vbmUtPnNoYTFfdmFsaWQgPyAiYS8iIDogIiIsCi0JICAgICAgIHBhaXItPm9uZS0+c2hhMV92YWxpZCA/IHBhaXItPm9uZS0+cGF0aCA6ICIvZGV2L251bGwiLAorCWZwcmludGYob3B0LT5maWxlLCAiJXMlc2RpZmYgLS1naXQgYS8lcyBiLyVzJXNcbiIsIHByZWZpeCwgY19tZXRhLCBwYWlyLT5vbmUtPnBhdGgsIHBhaXItPnR3by0+cGF0aCwgY19yZXNldCk7CisJZnByaW50ZihvcHQtPmZpbGUsICIlcyVzLS0tICVzJXMlc1xuIiwgcHJlZml4LCBjX21ldGEsCisJICAgICAgIHBhaXItPm9uZS0+b2lkX3ZhbGlkID8gImEvIiA6ICIiLAorCSAgICAgICBwYWlyLT5vbmUtPm9pZF92YWxpZCA/IHBhaXItPm9uZS0+cGF0aCA6ICIvZGV2L251bGwiLAogCSAgICAgICBjX3Jlc2V0KTsKLQlwcmludGYoIiVzJXMrKysgYi8lcyVzXG4iLCBwcmVmaXgsIGNfbWV0YSwgcGFpci0+dHdvLT5wYXRoLCBjX3Jlc2V0KTsKKwlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVzJXMrKysgYi8lcyVzXG4iLCBwcmVmaXgsIGNfbWV0YSwgcGFpci0+dHdvLT5wYXRoLCBjX3Jlc2V0KTsKIAlmb3IgKGkgPSAwOyBpIDwgcmFuZ2UtPnJhbmdlcy5ucjsgaSsrKSB7CiAJCWxvbmcgcF9zdGFydCwgcF9lbmQ7CiAJCWxvbmcgdF9zdGFydCA9IHJhbmdlLT5yYW5nZXMucmFuZ2VzW2ldLnN0YXJ0OwpAQCAtOTQ1LDcgKzk0NCw3IEBACiAJCX0KIAogCQkvKiBOb3cgb3V0cHV0IGEgZGlmZiBodW5rIGZvciB0aGlzIHJhbmdlICovCi0JCXByaW50ZigiJXMlc0BAIC0lbGQsJWxkICslbGQsJWxkIEBAJXNcbiIsCisJCWZwcmludGYob3B0LT5maWxlLCAiJXMlc0BAIC0lbGQsJWxkICslbGQsJWxkIEBAJXNcbiIsCiAJCSAgICAgICBwcmVmaXgsIGNfZnJhZywKIAkJICAgICAgIHBfc3RhcnQrMSwgcF9lbmQtcF9zdGFydCwgdF9zdGFydCsxLCB0X2VuZC10X3N0YXJ0LAogCQkgICAgICAgY19yZXNldCk7CkBAIC05NTMsMTggKzk1MiwxOCBAQAogCQkJaW50IGs7CiAJCQlmb3IgKDsgdF9jdXIgPCBkaWZmLT50YXJnZXQucmFuZ2VzW2pdLnN0YXJ0OyB0X2N1cisrKQogCQkJCXByaW50X2xpbmUocHJlZml4LCAnICcsIHRfY3VyLCB0X2VuZHMsIHBhaXItPnR3by0+ZGF0YSwKLQkJCQkJICAgY19jb250ZXh0LCBjX3Jlc2V0KTsKKwkJCQkJICAgY19jb250ZXh0LCBjX3Jlc2V0LCBvcHQtPmZpbGUpOwogCQkJZm9yIChrID0gZGlmZi0+cGFyZW50LnJhbmdlc1tqXS5zdGFydDsgayA8IGRpZmYtPnBhcmVudC5yYW5nZXNbal0uZW5kOyBrKyspCiAJCQkJcHJpbnRfbGluZShwcmVmaXgsICctJywgaywgcF9lbmRzLCBwYWlyLT5vbmUtPmRhdGEsCi0JCQkJCSAgIGNfb2xkLCBjX3Jlc2V0KTsKKwkJCQkJICAgY19vbGQsIGNfcmVzZXQsIG9wdC0+ZmlsZSk7CiAJCQlmb3IgKDsgdF9jdXIgPCBkaWZmLT50YXJnZXQucmFuZ2VzW2pdLmVuZCAmJiB0X2N1ciA8IHRfZW5kOyB0X2N1cisrKQogCQkJCXByaW50X2xpbmUocHJlZml4LCAnKycsIHRfY3VyLCB0X2VuZHMsIHBhaXItPnR3by0+ZGF0YSwKLQkJCQkJICAgY19uZXcsIGNfcmVzZXQpOworCQkJCQkgICBjX25ldywgY19yZXNldCwgb3B0LT5maWxlKTsKIAkJCWorKzsKIAkJfQogCQlmb3IgKDsgdF9jdXIgPCB0X2VuZDsgdF9jdXIrKykKIAkJCXByaW50X2xpbmUocHJlZml4LCAnICcsIHRfY3VyLCB0X2VuZHMsIHBhaXItPnR3by0+ZGF0YSwKLQkJCQkgICBjX2NvbnRleHQsIGNfcmVzZXQpOworCQkJCSAgIGNfY29udGV4dCwgY19yZXNldCwgb3B0LT5maWxlKTsKIAl9CiAKIAlmcmVlKHBfZW5kcyk7CkBAIC05NzcsNyArOTc2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZHVtcF9kaWZmX2hhY2t5KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCiB7Ci0JcHV0cyhvdXRwdXRfcHJlZml4KCZyZXYtPmRpZmZvcHQpKTsKKwlmcHJpbnRmKHJldi0+ZGlmZm9wdC5maWxlLCAiJXNcbiIsIG91dHB1dF9wcmVmaXgoJnJldi0+ZGlmZm9wdCkpOwogCXdoaWxlIChyYW5nZSkgewogCQlkdW1wX2RpZmZfaGFja3lfb25lKHJldiwgcmFuZ2UpOwogCQlyYW5nZSA9IHJhbmdlLT5uZXh0OwpAQCAtMTAxMSwxMiArMTAxMCwxMiBAQAogCWlmIChyZy0+cmFuZ2VzLm5yID09IDApCiAJCXJldHVybiAwOwogCi0JYXNzZXJ0KHBhaXItPnR3by0+c2hhMV92YWxpZCk7CisJYXNzZXJ0KHBhaXItPnR3by0+b2lkX3ZhbGlkKTsKIAlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHBhaXItPnR3bywgMCk7CiAJZmlsZV90YXJnZXQucHRyID0gcGFpci0+dHdvLT5kYXRhOwogCWZpbGVfdGFyZ2V0LnNpemUgPSBwYWlyLT50d28tPnNpemU7CiAKLQlpZiAocGFpci0+b25lLT5zaGExX3ZhbGlkKSB7CisJaWYgKHBhaXItPm9uZS0+b2lkX3ZhbGlkKSB7CiAJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocGFpci0+b25lLCAwKTsKIAkJZmlsZV9wYXJlbnQucHRyID0gcGFpci0+b25lLT5kYXRhOwogCQlmaWxlX3BhcmVudC5zaXplID0gcGFpci0+b25lLT5zaXplOwpkaWZmIC0tZ2l0IGEvbGlzdC5oIGIvbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMjZhODcKLS0tIC9kZXYvbnVsbAorKysgYi9saXN0LmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiAob3JpZ2luYWxseSBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5IGFuZCBVc2Vyc3BhY2UgUkNVKQorICogQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFBpZXJyZS1NYXJjIEZvdXJuaWVyCisgKiBDb252ZXJzaW9uIHRvIFJDVSBsaXN0LgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hdGhpZXUgRGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0BlZmZpY2lvcy5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgTElTVF9ICisjZGVmaW5lIExJU1RfSAkxCisKKy8qCisgKiBUaGUgZGVmaW5pdGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBhZG9wdGVkIGZyb20gdGhvc2Ugd2hpY2ggY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTGludXgga2VybmVsIGhlYWRlcnMgdG8gZW5hYmxlIHBlb3BsZSBmYW1pbGlhciB3aXRoIHRoZQorICogbGF0dGVyIGZpbmQgdGhlaXIgd2F5IGluIHRoZXNlIHNvdXJjZXMgYXMgd2VsbC4KKyAqLworCisvKiBCYXNpYyB0eXBlIGZvciB0aGUgZG91YmxlLWxpbmsgbGlzdC4gKi8KK3N0cnVjdCBsaXN0X2hlYWQgeworCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpwcmV2OworfTsKKworLyogYXZvaWQgY29uZmxpY3RzIHdpdGggQlNELW9ubHkgc3lzL3F1ZXVlLmggKi8KKyN1bmRlZiBMSVNUX0hFQUQKKy8qIERlZmluZSBhIHZhcmlhYmxlIHdpdGggdGhlIGhlYWQgYW5kIHRhaWwgb2YgdGhlIGxpc3QuICovCisjZGVmaW5lIExJU1RfSEVBRChuYW1lKSBcCisJc3RydWN0IGxpc3RfaGVhZCBuYW1lID0geyAmKG5hbWUpLCAmKG5hbWUpIH0KKworLyogSW5pdGlhbGl6ZSBhIG5ldyBsaXN0IGhlYWQuICovCisjZGVmaW5lIElOSVRfTElTVF9IRUFEKHB0cikgXAorCShwdHIpLT5uZXh0ID0gKHB0ciktPnByZXYgPSAocHRyKQorCisjZGVmaW5lIExJU1RfSEVBRF9JTklUKG5hbWUpIHsgJihuYW1lKSwgJihuYW1lKSB9CisKKy8qIEFkZCBuZXcgZWxlbWVudCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXdwLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWhlYWQtPm5leHQtPnByZXYgPSBuZXdwOworCW5ld3AtPm5leHQgPSBoZWFkLT5uZXh0OworCW5ld3AtPnByZXYgPSBoZWFkOworCWhlYWQtPm5leHQgPSBuZXdwOworfQorCisvKiBBZGQgbmV3IGVsZW1lbnQgYXQgdGhlIHRhaWwgb2YgdGhlIGxpc3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpuZXdwLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWhlYWQtPnByZXYtPm5leHQgPSBuZXdwOworCW5ld3AtPm5leHQgPSBoZWFkOworCW5ld3AtPnByZXYgPSBoZWFkLT5wcmV2OworCWhlYWQtPnByZXYgPSBuZXdwOworfQorCisvKiBSZW1vdmUgZWxlbWVudCBmcm9tIGxpc3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQoreworCW5leHQtPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXh0OworfQorCisvKiBSZW1vdmUgZWxlbWVudCBmcm9tIGxpc3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZWxlbSkKK3sKKwlfX2xpc3RfZGVsKGVsZW0tPnByZXYsIGVsZW0tPm5leHQpOworfQorCisvKiBSZW1vdmUgZWxlbWVudCBmcm9tIGxpc3QsIGluaXRpYWxpemluZyB0aGUgZWxlbWVudCdzIGxpc3QgcG9pbnRlcnMuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICplbGVtKQoreworCWxpc3RfZGVsKGVsZW0pOworCUlOSVRfTElTVF9IRUFEKGVsZW0pOworfQorCisvKiBEZWxldGUgZnJvbSBsaXN0LCBhZGQgdG8gYW5vdGhlciBsaXN0IGFzIGhlYWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKmVsZW0sIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2RlbChlbGVtLT5wcmV2LCBlbGVtLT5uZXh0KTsKKwlsaXN0X2FkZChlbGVtLCBoZWFkKTsKK30KKworLyogUmVwbGFjZSBhbiBvbGQgZW50cnkuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9yZXBsYWNlKHN0cnVjdCBsaXN0X2hlYWQgKm9sZCwgc3RydWN0IGxpc3RfaGVhZCAqbmV3cCkKK3sKKwluZXdwLT5uZXh0ID0gb2xkLT5uZXh0OworCW5ld3AtPnByZXYgPSBvbGQtPnByZXY7CisJbmV3cC0+cHJldi0+bmV4dCA9IG5ld3A7CisJbmV3cC0+bmV4dC0+cHJldiA9IG5ld3A7Cit9CisKKy8qIEpvaW4gdHdvIGxpc3RzLiAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3Rfc3BsaWNlKHN0cnVjdCBsaXN0X2hlYWQgKmFkZCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwkvKiBEbyBub3RoaW5nIGlmIHRoZSBsaXN0IHdoaWNoIGdldHMgYWRkZWQgaXMgZW1wdHkuICovCisJaWYgKGFkZCAhPSBhZGQtPm5leHQpIHsKKwkJYWRkLT5uZXh0LT5wcmV2ID0gaGVhZDsKKwkJYWRkLT5wcmV2LT5uZXh0ID0gaGVhZC0+bmV4dDsKKwkJaGVhZC0+bmV4dC0+cHJldiA9IGFkZC0+cHJldjsKKwkJaGVhZC0+bmV4dCA9IGFkZC0+bmV4dDsKKwl9Cit9CisKKy8qIEdldCB0eXBlZCBlbGVtZW50IGZyb20gbGlzdCBhdCBhIGdpdmVuIHBvc2l0aW9uLiAqLworI2RlZmluZSBsaXN0X2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBcCisJKCh0eXBlICopICgoY2hhciAqKSAocHRyKSAtIG9mZnNldG9mKHR5cGUsIG1lbWJlcikpKQorCisvKiBHZXQgZmlyc3QgZW50cnkgZnJvbSBhIGxpc3QuICovCisjZGVmaW5lIGxpc3RfZmlyc3RfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIFwKKwlsaXN0X2VudHJ5KChwdHIpLT5uZXh0LCB0eXBlLCBtZW1iZXIpCisKKy8qIEl0ZXJhdGUgZm9yd2FyZCBvdmVyIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdC4gKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgcG9zICE9IChoZWFkKTsgcG9zID0gcG9zLT5uZXh0KQorCisvKgorICogSXRlcmF0ZSBmb3J3YXJkIG92ZXIgdGhlIGVsZW1lbnRzIGxpc3QuIFRoZSBsaXN0IGVsZW1lbnRzIGNhbiBiZQorICogcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IHdoaWxlIGRvaW5nIHRoaXMuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcCwgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0LCBwID0gcG9zLT5uZXh0OyBcCisJCXBvcyAhPSAoaGVhZCk7IFwKKwkJcG9zID0gcCwgcCA9IHBvcy0+bmV4dCkKKworLyogSXRlcmF0ZSBiYWNrd2FyZCBvdmVyIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdC4gKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9wcmV2KHBvcywgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5wcmV2OyBwb3MgIT0gKGhlYWQpOyBwb3MgPSBwb3MtPnByZXYpCisKKy8qCisgKiBJdGVyYXRlIGJhY2t3YXJkcyBvdmVyIHRoZSBlbGVtZW50cyBsaXN0LiBUaGUgbGlzdCBlbGVtZW50cyBjYW4gYmUKKyAqIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCB3aGlsZSBkb2luZyB0aGlzLgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfcHJldl9zYWZlKHBvcywgcCwgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5wcmV2LCBwID0gcG9zLT5wcmV2OyBcCisJCXBvcyAhPSAoaGVhZCk7IFwKKwkJcG9zID0gcCwgcCA9IHBvcy0+cHJldikKKworc3RhdGljIGlubGluZSBpbnQgbGlzdF9lbXB0eShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXJldHVybiBoZWFkID09IGhlYWQtPm5leHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3JlcGxhY2VfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICpvbGQsCisJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpuZXdwKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBvbGQtPm5leHQ7CisKKwlsaXN0X2RlbChvbGQpOworCWxpc3RfYWRkX3RhaWwobmV3cCwgaGVhZCk7CisJSU5JVF9MSVNUX0hFQUQob2xkKTsKK30KKworI2VuZGlmIC8qIExJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuYyBiL2xvZy10cmVlLmMKaW5kZXggNzhhNTM4MS4uYmZiNzM1YyAxMDA2NDQKLS0tIGEvbG9nLXRyZWUuYworKysgYi9sb2ctdHJlZS5jCkBAIC0xNTksMTIgKzE1OSwxMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2hvd19wYXJlbnRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IGFiYnJldikKK3N0YXRpYyB2b2lkIHNob3dfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBhYmJyZXYsIEZJTEUgKmZpbGUpCiB7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpwOwogCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcCA7IHAgPSBwLT5uZXh0KSB7CiAJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHAtPml0ZW07Ci0JCXByaW50ZigiICVzIiwgZmluZF91bmlxdWVfYWJicmV2KHBhcmVudC0+b2JqZWN0Lm9pZC5oYXNoLCBhYmJyZXYpKTsKKwkJZnByaW50ZihmaWxlLCAiICVzIiwgZmluZF91bmlxdWVfYWJicmV2KHBhcmVudC0+b2JqZWN0Lm9pZC5oYXNoLCBhYmJyZXYpKTsKIAl9CiB9CiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogewogCXN0cnVjdCBjb21taXRfbGlzdCAqcCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZvcHQtPmNoaWxkcmVuLCAmY29tbWl0LT5vYmplY3QpOwogCWZvciAoIDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJcHJpbnRmKCIgJXMiLCBmaW5kX3VuaXF1ZV9hYmJyZXYocC0+aXRlbS0+b2JqZWN0Lm9pZC5oYXNoLCBhYmJyZXYpKTsKKwkJZnByaW50ZihvcHQtPmRpZmZvcHQuZmlsZSwgIiAlcyIsIGZpbmRfdW5pcXVlX2FiYnJldihwLT5pdGVtLT5vYmplY3Qub2lkLmhhc2gsIGFiYnJldikpOwogCX0KIH0KIApAQCAtMjYzLDggKzI2Myw2IEBACiAKIAkJCWlmIChjdXJyZW50X2FuZF9IRUFEICYmCiAJCQkgICAgZGVjb3JhdGlvbi0+dHlwZSA9PSBERUNPUkFUSU9OX1JFRl9IRUFEKSB7Ci0JCQkJc3RyYnVmX2FkZHN0cihzYiwgY29sb3JfcmVzZXQpOwotCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbG9yX2NvbW1pdCk7CiAJCQkJc3RyYnVmX2FkZHN0cihzYiwgIiAtPiAiKTsKIAkJCQlzdHJidWZfYWRkc3RyKHNiLCBjb2xvcl9yZXNldCk7CiAJCQkJc3RyYnVmX2FkZHN0cihzYiwgZGVjb3JhdGVfZ2V0X2NvbG9yKHVzZV9jb2xvciwgY3VycmVudF9hbmRfSEVBRC0+dHlwZSkpOwpAQCAtMjg2LDExICsyODQsMTEgQEAKIAlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CiAKIAlpZiAob3B0LT5zaG93X3NvdXJjZSAmJiBjb21taXQtPnV0aWwpCi0JCXByaW50ZigiXHQlcyIsIChjaGFyICopIGNvbW1pdC0+dXRpbCk7CisJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICJcdCVzIiwgKGNoYXIgKikgY29tbWl0LT51dGlsKTsKIAlpZiAoIW9wdC0+c2hvd19kZWNvcmF0aW9ucykKIAkJcmV0dXJuOwogCWZvcm1hdF9kZWNvcmF0aW9ucygmc2IsIGNvbW1pdCwgb3B0LT5kaWZmb3B0LnVzZV9jb2xvcik7Ci0JZnB1dHMoc2IuYnVmLCBzdGRvdXQpOworCWZwdXRzKHNiLmJ1Ziwgb3B0LT5kaWZmb3B0LmZpbGUpOwogCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiB9CiAKQEAgLTM2NCwxOCArMzYyLDE4IEBACiAJCXN1YmplY3QgPSAiU3ViamVjdDogIjsKIAl9CiAKLQlwcmludGYoIkZyb20gJXMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxXG4iLCBuYW1lKTsKKwlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiRnJvbSAlcyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDFcbiIsIG5hbWUpOwogCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKIAlpZiAob3B0LT5tZXNzYWdlX2lkKSB7Ci0JCXByaW50ZigiTWVzc2FnZS1JZDogPCVzPlxuIiwgb3B0LT5tZXNzYWdlX2lkKTsKKwkJZnByaW50ZihvcHQtPmRpZmZvcHQuZmlsZSwgIk1lc3NhZ2UtSWQ6IDwlcz5cbiIsIG9wdC0+bWVzc2FnZV9pZCk7CiAJCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKIAl9CiAJaWYgKG9wdC0+cmVmX21lc3NhZ2VfaWRzICYmIG9wdC0+cmVmX21lc3NhZ2VfaWRzLT5uciA+IDApIHsKIAkJaW50IGksIG47CiAJCW4gPSBvcHQtPnJlZl9tZXNzYWdlX2lkcy0+bnI7Ci0JCXByaW50ZigiSW4tUmVwbHktVG86IDwlcz5cbiIsIG9wdC0+cmVmX21lc3NhZ2VfaWRzLT5pdGVtc1tuLTFdLnN0cmluZyk7CisJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICJJbi1SZXBseS1UbzogPCVzPlxuIiwgb3B0LT5yZWZfbWVzc2FnZV9pZHMtPml0ZW1zW24tMV0uc3RyaW5nKTsKIAkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKLQkJCXByaW50ZigiJXM8JXM+XG4iLCAoaSA+IDAgPyAiXHQiIDogIlJlZmVyZW5jZXM6ICIpLAorCQkJZnByaW50ZihvcHQtPmRpZmZvcHQuZmlsZSwgIiVzPCVzPlxuIiwgKGkgPiAwID8gIlx0IiA6ICJSZWZlcmVuY2VzOiAiKSwKIAkJCSAgICAgICBvcHQtPnJlZl9tZXNzYWdlX2lkcy0+aXRlbXNbaV0uc3RyaW5nKTsKIAkJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOwogCX0KQEAgLTQzMiw3ICs0MzAsNyBAQAogCXJlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KCZvcHQtPmRpZmZvcHQsIERJRkZfUkVTRVQpOwogCXdoaWxlICgqYm9sKSB7CiAJCWVvbCA9IHN0cmNocm51bChib2wsICdcbicpOwotCQlwcmludGYoIiVzJS4qcyVzJXMiLCBjb2xvciwgKGludCkoZW9sIC0gYm9sKSwgYm9sLCByZXNldCwKKwkJZnByaW50ZihvcHQtPmRpZmZvcHQuZmlsZSwgIiVzJS4qcyVzJXMiLCBjb2xvciwgKGludCkoZW9sIC0gYm9sKSwgYm9sLCByZXNldCwKIAkJICAgICAgICplb2wgPyAiXG4iIDogIiIpOwogCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CiAJCWJvbCA9ICgqZW9sKSA/IChlb2wgKyAxKSA6IGVvbDsKQEAgLTU1MywxNyArNTUxLDE3IEBACiAKIAkJaWYgKCFvcHQtPmdyYXBoKQogCQkJcHV0X3JldmlzaW9uX21hcmsob3B0LCBjb21taXQpOwotCQlmcHV0cyhmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Qub2lkLmhhc2gsIGFiYnJldl9jb21taXQpLCBzdGRvdXQpOworCQlmcHV0cyhmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Qub2lkLmhhc2gsIGFiYnJldl9jb21taXQpLCBvcHQtPmRpZmZvcHQuZmlsZSk7CiAJCWlmIChvcHQtPnByaW50X3BhcmVudHMpCi0JCQlzaG93X3BhcmVudHMoY29tbWl0LCBhYmJyZXZfY29tbWl0KTsKKwkJCXNob3dfcGFyZW50cyhjb21taXQsIGFiYnJldl9jb21taXQsIG9wdC0+ZGlmZm9wdC5maWxlKTsKIAkJaWYgKG9wdC0+Y2hpbGRyZW4ubmFtZSkKIAkJCXNob3dfY2hpbGRyZW4ob3B0LCBjb21taXQsIGFiYnJldl9jb21taXQpOwogCQlzaG93X2RlY29yYXRpb25zKG9wdCwgY29tbWl0KTsKIAkJaWYgKG9wdC0+Z3JhcGggJiYgIWdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChvcHQtPmdyYXBoKSkgewotCQkJcHV0Y2hhcignXG4nKTsKKwkJCXB1dGMoJ1xuJywgb3B0LT5kaWZmb3B0LmZpbGUpOwogCQkJZ3JhcGhfc2hvd19yZW1haW5kZXIob3B0LT5ncmFwaCk7CiAJCX0KLQkJcHV0Y2hhcihvcHQtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7CisJCXB1dGMob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24sIG9wdC0+ZGlmZm9wdC5maWxlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTg5LDcgKzU4Nyw3IEBACiAJCWlmIChvcHQtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbiA9PSAnXG4nICYmCiAJCSAgICAhb3B0LT5taXNzaW5nX25ld2xpbmUpCiAJCQlncmFwaF9zaG93X3BhZGRpbmcob3B0LT5ncmFwaCk7Ci0JCXB1dGNoYXIob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24pOworCQlwdXRjKG9wdC0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uLCBvcHQtPmRpZmZvcHQuZmlsZSk7CiAJfQogCW9wdC0+c2hvd25fb25lID0gMTsKIApAQCAtNjAzLDMyICs2MDEsMzIgQEAKIAkgKiBQcmludCBoZWFkZXIgbGluZSBvZiBoZWFkZXIuLgogCSAqLwogCi0JaWYgKG9wdC0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9FTUFJTCkgeworCWlmIChjbWl0X2ZtdF9pc19tYWlsKG9wdC0+Y29tbWl0X2Zvcm1hdCkpIHsKIAkJbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMob3B0LCBjb21taXQsICZjdHguc3ViamVjdCwgJmV4dHJhX2hlYWRlcnMsCiAJCQkJCSZjdHgubmVlZF84Yml0X2N0ZSk7CiAJfSBlbHNlIGlmIChvcHQtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfVVNFUkZPUk1BVCkgewotCQlmcHV0cyhkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9DT01NSVQpLCBzdGRvdXQpOworCQlmcHV0cyhkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9DT01NSVQpLCBvcHQtPmRpZmZvcHQuZmlsZSk7CiAJCWlmIChvcHQtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkKLQkJCWZwdXRzKCJjb21taXQgIiwgc3Rkb3V0KTsKKwkJCWZwdXRzKCJjb21taXQgIiwgb3B0LT5kaWZmb3B0LmZpbGUpOwogCiAJCWlmICghb3B0LT5ncmFwaCkKIAkJCXB1dF9yZXZpc2lvbl9tYXJrKG9wdCwgY29tbWl0KTsKIAkJZnB1dHMoZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0Lm9pZC5oYXNoLCBhYmJyZXZfY29tbWl0KSwKLQkJICAgICAgc3Rkb3V0KTsKKwkJICAgICAgb3B0LT5kaWZmb3B0LmZpbGUpOwogCQlpZiAob3B0LT5wcmludF9wYXJlbnRzKQotCQkJc2hvd19wYXJlbnRzKGNvbW1pdCwgYWJicmV2X2NvbW1pdCk7CisJCQlzaG93X3BhcmVudHMoY29tbWl0LCBhYmJyZXZfY29tbWl0LCBvcHQtPmRpZmZvcHQuZmlsZSk7CiAJCWlmIChvcHQtPmNoaWxkcmVuLm5hbWUpCiAJCQlzaG93X2NoaWxkcmVuKG9wdCwgY29tbWl0LCBhYmJyZXZfY29tbWl0KTsKIAkJaWYgKHBhcmVudCkKLQkJCXByaW50ZigiIChmcm9tICVzKSIsCisJCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiIChmcm9tICVzKSIsCiAJCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KHBhcmVudC0+b2JqZWN0Lm9pZC5oYXNoLAogCQkJCQkJICBhYmJyZXZfY29tbWl0KSk7Ci0JCWZwdXRzKGRpZmZfZ2V0X2NvbG9yX29wdCgmb3B0LT5kaWZmb3B0LCBESUZGX1JFU0VUKSwgc3Rkb3V0KTsKKwkJZnB1dHMoZGlmZl9nZXRfY29sb3Jfb3B0KCZvcHQtPmRpZmZvcHQsIERJRkZfUkVTRVQpLCBvcHQtPmRpZmZvcHQuZmlsZSk7CiAJCXNob3dfZGVjb3JhdGlvbnMob3B0LCBjb21taXQpOwogCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpIHsKLQkJCXB1dGNoYXIoJyAnKTsKKwkJCXB1dGMoJyAnLCBvcHQtPmRpZmZvcHQuZmlsZSk7CiAJCX0gZWxzZSB7Ci0JCQlwdXRjaGFyKCdcbicpOworCQkJcHV0YygnXG4nLCBvcHQtPmRpZmZvcHQuZmlsZSk7CiAJCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CiAJCX0KIAkJaWYgKG9wdC0+cmVmbG9nX2luZm8pIHsKQEAgLTY4Nyw2ICs2ODUsOCBAQAogCWN0eC5vdXRwdXRfZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOwogCWlmIChvcHQtPmZyb21faWRlbnQubWFpbF9iZWdpbiAmJiBvcHQtPmZyb21faWRlbnQubmFtZV9iZWdpbikKIAkJY3R4LmZyb21faWRlbnQgPSAmb3B0LT5mcm9tX2lkZW50OworCWlmIChvcHQtPmdyYXBoKQorCQljdHguZ3JhcGhfd2lkdGggPSBncmFwaF93aWR0aChvcHQtPmdyYXBoKTsKIAlwcmV0dHlfcHJpbnRfY29tbWl0KCZjdHgsIGNvbW1pdCwgJm1zZ2J1Zik7CiAKIAlpZiAob3B0LT5hZGRfc2lnbm9mZikKQEAgLTY5NCw3ICs2OTQsNyBAQAogCiAJaWYgKChjdHguZm10ICE9IENNSVRfRk1UX1VTRVJGT1JNQVQpICYmCiAJICAgIGN0eC5ub3Rlc19tZXNzYWdlICYmICpjdHgubm90ZXNfbWVzc2FnZSkgewotCQlpZiAoY3R4LmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCkgeworCQlpZiAoY21pdF9mbXRfaXNfbWFpbChjdHguZm10KSkgewogCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiLS0tXG4iKTsKIAkJCW9wdC0+c2hvd25fZGFzaGVzID0gMTsKIAkJfQpAQCAtNzAyLDcgKzcwMiw3IEBACiAJfQogCiAJaWYgKG9wdC0+c2hvd19sb2dfc2l6ZSkgewotCQlwcmludGYoImxvZyBzaXplICVpXG4iLCAoaW50KW1zZ2J1Zi5sZW4pOworCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAibG9nIHNpemUgJWlcbiIsIChpbnQpbXNnYnVmLmxlbik7CiAJCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKIAl9CiAKQEAgLTcxOCwxMSArNzE4LDExIEBACiAJaWYgKG9wdC0+Z3JhcGgpCiAJCWdyYXBoX3Nob3dfY29tbWl0X21zZyhvcHQtPmdyYXBoLCAmbXNnYnVmKTsKIAllbHNlCi0JCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIHN0ZG91dCk7CisJCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIG9wdC0+ZGlmZm9wdC5maWxlKTsKIAlpZiAob3B0LT51c2VfdGVybWluYXRvciAmJiAhY29tbWl0X2Zvcm1hdF9pc19lbXB0eShvcHQtPmNvbW1pdF9mb3JtYXQpKSB7CiAJCWlmICghb3B0LT5taXNzaW5nX25ld2xpbmUpCiAJCQlncmFwaF9zaG93X3BhZGRpbmcob3B0LT5ncmFwaCk7Ci0JCXB1dGNoYXIob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24pOworCQlwdXRjKG9wdC0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uLCBvcHQtPmRpZmZvcHQuZmlsZSk7CiAJfQogCiAJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7CkBAIC03NTksNyArNzU5LDcgQEAKIAkJCQlzdHJ1Y3Qgc3RyYnVmICptc2cgPSBOVUxMOwogCQkJCW1zZyA9IG9wdC0+ZGlmZm9wdC5vdXRwdXRfcHJlZml4KCZvcHQtPmRpZmZvcHQsCiAJCQkJCW9wdC0+ZGlmZm9wdC5vdXRwdXRfcHJlZml4X2RhdGEpOwotCQkJCWZ3cml0ZShtc2ctPmJ1ZiwgbXNnLT5sZW4sIDEsIHN0ZG91dCk7CisJCQkJZndyaXRlKG1zZy0+YnVmLCBtc2ctPmxlbiwgMSwgb3B0LT5kaWZmb3B0LmZpbGUpOwogCQkJfQogCiAJCQkvKgpAQCAtNzc0LDggKzc3NCw4IEBACiAJCQkgKi8KIAkJCWlmICghb3B0LT5zaG93bl9kYXNoZXMgJiYKIAkJCSAgICAocGNoICYgb3B0LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpID09IHBjaCkKLQkJCQlwcmludGYoIi0tLSIpOwotCQkJcHV0Y2hhcignXG4nKTsKKwkJCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiLS0tIik7CisJCQlwdXRjKCdcbicsIG9wdC0+ZGlmZm9wdC5maWxlKTsKIAkJfQogCX0KIAlkaWZmX2ZsdXNoKCZvcHQtPmRpZmZvcHQpOwpAQCAtODYyLDE3ICs4NjIsMTggQEAKIGludCBsb2dfdHJlZV9jb21taXQoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKIAlzdHJ1Y3QgbG9nX2luZm8gbG9nOwotCWludCBzaG93bjsKKwlpbnQgc2hvd24sIGNsb3NlX2ZpbGUgPSBvcHQtPmRpZmZvcHQuY2xvc2VfZmlsZTsKIAogCWxvZy5jb21taXQgPSBjb21taXQ7CiAJbG9nLnBhcmVudCA9IE5VTEw7CiAJb3B0LT5sb2dpbmZvID0gJmxvZzsKKwlvcHQtPmRpZmZvcHQuY2xvc2VfZmlsZSA9IDA7CiAKIAlpZiAob3B0LT5saW5lX2xldmVsX3RyYXZlcnNlKQogCQlyZXR1cm4gbGluZV9sb2dfcHJpbnQob3B0LCBjb21taXQpOwogCiAJaWYgKG9wdC0+dHJhY2tfbGluZWFyICYmICFvcHQtPmxpbmVhciAmJiAhb3B0LT5yZXZlcnNlX291dHB1dF9zdGFnZSkKLQkJcHJpbnRmKCJcbiVzXG4iLCBvcHQtPmJyZWFrX2Jhcik7CisJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICJcbiVzXG4iLCBvcHQtPmJyZWFrX2Jhcik7CiAJc2hvd24gPSBsb2dfdHJlZV9kaWZmKG9wdCwgY29tbWl0LCAmbG9nKTsKIAlpZiAoIXNob3duICYmIG9wdC0+bG9naW5mbyAmJiBvcHQtPmFsd2F5c19zaG93X2hlYWRlcikgewogCQlsb2cucGFyZW50ID0gTlVMTDsKQEAgLTg4MCw4ICs4ODEsMTAgQEAKIAkJc2hvd24gPSAxOwogCX0KIAlpZiAob3B0LT50cmFja19saW5lYXIgJiYgIW9wdC0+bGluZWFyICYmIG9wdC0+cmV2ZXJzZV9vdXRwdXRfc3RhZ2UpCi0JCXByaW50ZigiXG4lc1xuIiwgb3B0LT5icmVha19iYXIpOworCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiXG4lc1xuIiwgb3B0LT5icmVha19iYXIpOwogCW9wdC0+bG9naW5mbyA9IE5VTEw7Ci0JbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgInN0ZG91dCIpOworCW1heWJlX2ZsdXNoX29yX2RpZShvcHQtPmRpZmZvcHQuZmlsZSwgInN0ZG91dCIpOworCWlmIChjbG9zZV9maWxlKQorCQlmY2xvc2Uob3B0LT5kaWZmb3B0LmZpbGUpOwogCXJldHVybiBzaG93bjsKIH0KZGlmZiAtLWdpdCBhL21lcmdlLXJlY3Vyc2l2ZS5jIGIvbWVyZ2UtcmVjdXJzaXZlLmMKaW5kZXggNjVjYjVkNi4uZTUyNDNjMiAxMDA2NDQKLS0tIGEvbWVyZ2UtcmVjdXJzaXZlLmMKKysrIGIvbWVyZ2UtcmVjdXJzaXZlLmMKQEAgLTIzLDYgKzIzLDM3IEBACiAjaW5jbHVkZSAiZGlyLmgiCiAjaW5jbHVkZSAic3VibW9kdWxlLmgiCiAKK3N0YXRpYyB2b2lkIGZsdXNoX291dHB1dChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbykKK3sKKwlpZiAoby0+YnVmZmVyX291dHB1dCA8IDIgJiYgby0+b2J1Zi5sZW4pIHsKKwkJZnB1dHMoby0+b2J1Zi5idWYsIHN0ZG91dCk7CisJCXN0cmJ1Zl9yZXNldCgmby0+b2J1Zik7CisJfQorfQorCitzdGF0aWMgaW50IGVycihzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwlpZiAoby0+YnVmZmVyX291dHB1dCA8IDIpCisJCWZsdXNoX291dHB1dChvKTsKKwllbHNlIHsKKwkJc3RyYnVmX2NvbXBsZXRlKCZvLT5vYnVmLCAnXG4nKTsKKwkJc3RyYnVmX2FkZHN0cigmby0+b2J1ZiwgImVycm9yOiAiKTsKKwl9CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCXN0cmJ1Zl92YWRkZigmby0+b2J1ZiwgZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCWlmIChvLT5idWZmZXJfb3V0cHV0ID4gMSkKKwkJc3RyYnVmX2FkZGNoKCZvLT5vYnVmLCAnXG4nKTsKKwllbHNlIHsKKwkJZXJyb3IoIiVzIiwgby0+b2J1Zi5idWYpOworCQlzdHJidWZfcmVzZXQoJm8tPm9idWYpOworCX0KKworCXJldHVybiAtMTsKK30KKwogc3RhdGljIHN0cnVjdCB0cmVlICpzaGlmdF90cmVlX29iamVjdChzdHJ1Y3QgdHJlZSAqb25lLCBzdHJ1Y3QgdHJlZSAqdHdvLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgKnN1YnRyZWVfc2hpZnQpCiB7CkBAIC01NiwxMSArODcsMTEgQEAKICAqIFNpbmNlIHdlIHVzZSBnZXRfdHJlZV9lbnRyeSgpLCB3aGljaCBkb2VzIG5vdCBwdXQgdGhlIHJlYWQgb2JqZWN0IGludG8KICAqIHRoZSBvYmplY3QgcG9vbCwgd2UgY2Fubm90IHJlbHkgb24gYSA9PSBiLgogICovCi1zdGF0aWMgaW50IHNoYV9lcShjb25zdCB1bnNpZ25lZCBjaGFyICphLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiKQorc3RhdGljIGludCBvaWRfZXEoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYikKIHsKIAlpZiAoIWEgJiYgIWIpCiAJCXJldHVybiAyOwotCXJldHVybiBhICYmIGIgJiYgaGFzaGNtcChhLCBiKSA9PSAwOworCXJldHVybiBhICYmIGIgJiYgb2lkY21wKGEsIGIpID09IDA7CiB9CiAKIGVudW0gcmVuYW1lX3R5cGUgewpAQCAtOTAsNyArMTIxLDcgQEAKIHN0cnVjdCBzdGFnZV9kYXRhIHsKIAlzdHJ1Y3QgewogCQl1bnNpZ25lZCBtb2RlOwotCQl1bnNpZ25lZCBjaGFyIHNoYVsyMF07CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogCX0gc3RhZ2VzWzRdOwogCXN0cnVjdCByZW5hbWVfY29uZmxpY3RfaW5mbyAqcmVuYW1lX2NvbmZsaWN0X2luZm87CiAJdW5zaWduZWQgcHJvY2Vzc2VkOjE7CkBAIC0xMzQsMTEgKzE2NSwxMSBAQAogCQlpbnQgb3N0YWdlMiA9IG9zdGFnZTEgXiAxOwogCiAJCWNpLT5yZW4xX290aGVyLnBhdGggPSBwYWlyMS0+b25lLT5wYXRoOwotCQloYXNoY3B5KGNpLT5yZW4xX290aGVyLnNoYTEsIHNyY19lbnRyeTEtPnN0YWdlc1tvc3RhZ2UxXS5zaGEpOworCQlvaWRjcHkoJmNpLT5yZW4xX290aGVyLm9pZCwgJnNyY19lbnRyeTEtPnN0YWdlc1tvc3RhZ2UxXS5vaWQpOwogCQljaS0+cmVuMV9vdGhlci5tb2RlID0gc3JjX2VudHJ5MS0+c3RhZ2VzW29zdGFnZTFdLm1vZGU7CiAKIAkJY2ktPnJlbjJfb3RoZXIucGF0aCA9IHBhaXIyLT5vbmUtPnBhdGg7Ci0JCWhhc2hjcHkoY2ktPnJlbjJfb3RoZXIuc2hhMSwgc3JjX2VudHJ5Mi0+c3RhZ2VzW29zdGFnZTJdLnNoYSk7CisJCW9pZGNweSgmY2ktPnJlbjJfb3RoZXIub2lkLCAmc3JjX2VudHJ5Mi0+c3RhZ2VzW29zdGFnZTJdLm9pZCk7CiAJCWNpLT5yZW4yX290aGVyLm1vZGUgPSBzcmNfZW50cnkyLT5zdGFnZXNbb3N0YWdlMl0ubW9kZTsKIAl9CiB9CkBAIC0xNDgsMTQgKzE3OSw2IEBACiAJcmV0dXJuICghby0+Y2FsbF9kZXB0aCAmJiBvLT52ZXJib3NpdHkgPj0gdikgfHwgby0+dmVyYm9zaXR5ID49IDU7CiB9CiAKLXN0YXRpYyB2b2lkIGZsdXNoX291dHB1dChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbykKLXsKLQlpZiAoby0+b2J1Zi5sZW4pIHsKLQkJZnB1dHMoby0+b2J1Zi5idWYsIHN0ZG91dCk7Ci0JCXN0cmJ1Zl9yZXNldCgmby0+b2J1Zik7Ci0JfQotfQotCiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQogc3RhdGljIHZvaWQgb3V0cHV0KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLCBpbnQgdiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CkBAIC0xNzcsMzcgKzIwMCw0OCBAQAogCiBzdGF0aWMgdm9pZCBvdXRwdXRfY29tbWl0X3RpdGxlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCiB7Ci0JaW50IGk7Ci0JZmx1c2hfb3V0cHV0KG8pOwotCWZvciAoaSA9IG8tPmNhbGxfZGVwdGg7IGktLTspCi0JCWZwdXRzKCIgICIsIHN0ZG91dCk7CisJc3RyYnVmX2FkZGNoYXJzKCZvLT5vYnVmLCAnICcsIG8tPmNhbGxfZGVwdGggKiAyKTsKIAlpZiAoY29tbWl0LT51dGlsKQotCQlwcmludGYoInZpcnR1YWwgJXNcbiIsIG1lcmdlX3JlbW90ZV91dGlsKGNvbW1pdCktPm5hbWUpOworCQlzdHJidWZfYWRkZigmby0+b2J1ZiwgInZpcnR1YWwgJXNcbiIsCisJCQltZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5uYW1lKTsKIAllbHNlIHsKLQkJcHJpbnRmKCIlcyAiLCBmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Qub2lkLmhhc2gsIERFRkFVTFRfQUJCUkVWKSk7CisJCXN0cmJ1Zl9hZGRmKCZvLT5vYnVmLCAiJXMgIiwKKwkJCWZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5vaWQuaGFzaCwKKwkJCQlERUZBVUxUX0FCQlJFVikpOwogCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkgIT0gMCkKLQkJCXByaW50ZihfKCIoYmFkIGNvbW1pdClcbiIpKTsKKwkJCXN0cmJ1Zl9hZGRmKCZvLT5vYnVmLCBfKCIoYmFkIGNvbW1pdClcbiIpKTsKIAkJZWxzZSB7CiAJCQljb25zdCBjaGFyICp0aXRsZTsKIAkJCWNvbnN0IGNoYXIgKm1zZyA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCk7CiAJCQlpbnQgbGVuID0gZmluZF9jb21taXRfc3ViamVjdChtc2csICZ0aXRsZSk7CiAJCQlpZiAobGVuKQotCQkJCXByaW50ZigiJS4qc1xuIiwgbGVuLCB0aXRsZSk7CisJCQkJc3RyYnVmX2FkZGYoJm8tPm9idWYsICIlLipzXG4iLCBsZW4sIHRpdGxlKTsKIAkJCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBtc2cpOwogCQl9CiAJfQorCWZsdXNoX291dHB1dChvKTsKIH0KIAotc3RhdGljIGludCBhZGRfY2FjaGVpbmZvKHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorc3RhdGljIGludCBhZGRfY2FjaGVpbmZvKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQl1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAogCQljb25zdCBjaGFyICpwYXRoLCBpbnQgc3RhZ2UsIGludCByZWZyZXNoLCBpbnQgb3B0aW9ucykKIHsKIAlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwotCWNlID0gbWFrZV9jYWNoZV9lbnRyeShtb2RlLCBzaGExID8gc2hhMSA6IG51bGxfc2hhMSwgcGF0aCwgc3RhZ2UsCi0JCQkgICAgICAocmVmcmVzaCA/IChDRV9NQVRDSF9SRUZSRVNIIHwKLQkJCQkJICBDRV9NQVRDSF9JR05PUkVfTUlTU0lORykgOiAwICkpOworCWludCByZXQ7CisKKwljZSA9IG1ha2VfY2FjaGVfZW50cnkobW9kZSwgb2lkID8gb2lkLT5oYXNoIDogbnVsbF9zaGExLCBwYXRoLCBzdGFnZSwgMCk7CiAJaWYgKCFjZSkKLQkJcmV0dXJuIGVycm9yKF8oImFkZGluZm9fY2FjaGUgZmFpbGVkIGZvciBwYXRoICclcyciKSwgcGF0aCk7Ci0JcmV0dXJuIGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9ucyk7CisJCXJldHVybiBlcnIobywgXygiYWRkaW5mb19jYWNoZSBmYWlsZWQgZm9yIHBhdGggJyVzJyIpLCBwYXRoKTsKKworCXJldCA9IGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9ucyk7CisJaWYgKHJlZnJlc2gpIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpuY2U7CisKKwkJbmNlID0gcmVmcmVzaF9jYWNoZV9lbnRyeShjZSwgQ0VfTUFUQ0hfUkVGUkVTSCB8IENFX01BVENIX0lHTk9SRV9NSVNTSU5HKTsKKwkJaWYgKG5jZSAhPSBjZSkKKwkJCXJldCA9IGFkZF9jYWNoZV9lbnRyeShuY2UsIG9wdGlvbnMpOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBpbml0X3RyZWVfZGVzY19mcm9tX3RyZWUoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgc3RydWN0IHRyZWUgKnRyZWUpCkBAIC0yNTksMTUgKzI5MywxNyBAQAogCQkJCWZwcmludGYoc3RkZXJyLCAiQlVHOiAlZCAlLipzXG4iLCBjZV9zdGFnZShjZSksCiAJCQkJCShpbnQpY2VfbmFtZWxlbihjZSksIGNlLT5uYW1lKTsKIAkJfQotCQlkaWUoIkJ1ZyBpbiBtZXJnZS1yZWN1cnNpdmUuYyIpOworCQlkaWUoIkJVRzogdW5tZXJnZWQgaW5kZXggZW50cmllcyBpbiBtZXJnZS1yZWN1cnNpdmUuYyIpOwogCX0KIAogCWlmICghYWN0aXZlX2NhY2hlX3RyZWUpCiAJCWFjdGl2ZV9jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOwogCiAJaWYgKCFjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGFjdGl2ZV9jYWNoZV90cmVlKSAmJgotCSAgICBjYWNoZV90cmVlX3VwZGF0ZSgmdGhlX2luZGV4LCAwKSA8IDApCi0JCWRpZShfKCJlcnJvciBidWlsZGluZyB0cmVlcyIpKTsKKwkgICAgY2FjaGVfdHJlZV91cGRhdGUoJnRoZV9pbmRleCwgMCkgPCAwKSB7CisJCWVycihvLCBfKCJlcnJvciBidWlsZGluZyB0cmVlcyIpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCiAJcmVzdWx0ID0gbG9va3VwX3RyZWUoYWN0aXZlX2NhY2hlX3RyZWUtPnNoYTEpOwogCkBAIC0zMTQsMTEgKzM1MCwxMSBAQAogCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOwogCXN0cnVjdCBzdGFnZV9kYXRhICplID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0YWdlX2RhdGEpKTsKIAlnZXRfdHJlZV9lbnRyeShvLT5vYmplY3Qub2lkLmhhc2gsIHBhdGgsCi0JCQllLT5zdGFnZXNbMV0uc2hhLCAmZS0+c3RhZ2VzWzFdLm1vZGUpOworCQkJZS0+c3RhZ2VzWzFdLm9pZC5oYXNoLCAmZS0+c3RhZ2VzWzFdLm1vZGUpOwogCWdldF90cmVlX2VudHJ5KGEtPm9iamVjdC5vaWQuaGFzaCwgcGF0aCwKLQkJCWUtPnN0YWdlc1syXS5zaGEsICZlLT5zdGFnZXNbMl0ubW9kZSk7CisJCQllLT5zdGFnZXNbMl0ub2lkLmhhc2gsICZlLT5zdGFnZXNbMl0ubW9kZSk7CiAJZ2V0X3RyZWVfZW50cnkoYi0+b2JqZWN0Lm9pZC5oYXNoLCBwYXRoLAotCQkJZS0+c3RhZ2VzWzNdLnNoYSwgJmUtPnN0YWdlc1szXS5tb2RlKTsKKwkJCWUtPnN0YWdlc1szXS5vaWQuaGFzaCwgJmUtPnN0YWdlc1szXS5tb2RlKTsKIAlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGVudHJpZXMsIHBhdGgpOwogCWl0ZW0tPnV0aWwgPSBlOwogCXJldHVybiBlOwpAQCAtMzQ5LDcgKzM4NSw3IEBACiAJCX0KIAkJZSA9IGl0ZW0tPnV0aWw7CiAJCWUtPnN0YWdlc1tjZV9zdGFnZShjZSldLm1vZGUgPSBjZS0+Y2VfbW9kZTsKLQkJaGFzaGNweShlLT5zdGFnZXNbY2Vfc3RhZ2UoY2UpXS5zaGEsIGNlLT5zaGExKTsKKwkJaGFzaGNweShlLT5zdGFnZXNbY2Vfc3RhZ2UoY2UpXS5vaWQuaGFzaCwgY2UtPnNoYTEpOwogCX0KIAogCXJldHVybiB1bm1lcmdlZDsKQEAgLTQwMCw3ICs0MzYsNyBAQAogCSAqIGFuZCB0aGUgZmlsZSBuZWVkIHRvIGJlIHByZXNlbnQsIHRoZW4gdGhlIEQvRiBmaWxlIHdpbGwgYmUKIAkgKiByZWluc3RhdGVkIHdpdGggYSBuZXcgdW5pcXVlIG5hbWUgYXQgdGhlIHRpbWUgaXQgaXMgcHJvY2Vzc2VkLgogCSAqLwotCXN0cnVjdCBzdHJpbmdfbGlzdCBkZl9zb3J0ZWRfZW50cmllczsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZGZfc29ydGVkX2VudHJpZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwogCWNvbnN0IGNoYXIgKmxhc3RfZmlsZSA9IE5VTEw7CiAJaW50IGxhc3RfbGVuID0gMDsKIAlpbnQgaTsKQEAgLTQxMyw3ICs0NDksNiBAQAogCQlyZXR1cm47CiAKIAkvKiBFbnN1cmUgRC9GIGNvbmZsaWN0cyBhcmUgYWRqYWNlbnQgaW4gdGhlIGVudHJpZXMgbGlzdC4gKi8KLQltZW1zZXQoJmRmX3NvcnRlZF9lbnRyaWVzLCAwLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CiAJZm9yIChpID0gMDsgaSA8IGVudHJpZXMtPm5yOyBpKyspIHsKIAkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKm5leHQgPSAmZW50cmllcy0+aXRlbXNbaV07CiAJCXN0cmluZ19saXN0X2FwcGVuZCgmZGZfc29ydGVkX2VudHJpZXMsIG5leHQtPnN0cmluZyktPnV0aWwgPQpAQCAtNTMzLDcgKzU2OCw4IEBACiAJcmV0dXJuIHJlbmFtZXM7CiB9CiAKLXN0YXRpYyBpbnQgdXBkYXRlX3N0YWdlcyhjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqbywKK3N0YXRpYyBpbnQgdXBkYXRlX3N0YWdlcyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LCBjb25zdCBjaGFyICpwYXRoLAorCQkJIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvLAogCQkJIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICphLAogCQkJIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpiKQogewpAQCAtNTUyLDEzICs1ODgsMTMgQEAKIAkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkpCiAJCQlyZXR1cm4gLTE7CiAJaWYgKG8pCi0JCWlmIChhZGRfY2FjaGVpbmZvKG8tPm1vZGUsIG8tPnNoYTEsIHBhdGgsIDEsIDAsIG9wdGlvbnMpKQorCQlpZiAoYWRkX2NhY2hlaW5mbyhvcHQsIG8tPm1vZGUsICZvLT5vaWQsIHBhdGgsIDEsIDAsIG9wdGlvbnMpKQogCQkJcmV0dXJuIC0xOwogCWlmIChhKQotCQlpZiAoYWRkX2NhY2hlaW5mbyhhLT5tb2RlLCBhLT5zaGExLCBwYXRoLCAyLCAwLCBvcHRpb25zKSkKKwkJaWYgKGFkZF9jYWNoZWluZm8ob3B0LCBhLT5tb2RlLCAmYS0+b2lkLCBwYXRoLCAyLCAwLCBvcHRpb25zKSkKIAkJCXJldHVybiAtMTsKIAlpZiAoYikKLQkJaWYgKGFkZF9jYWNoZWluZm8oYi0+bW9kZSwgYi0+c2hhMSwgcGF0aCwgMywgMCwgb3B0aW9ucykpCisJCWlmIChhZGRfY2FjaGVpbmZvKG9wdCwgYi0+bW9kZSwgJmItPm9pZCwgcGF0aCwgMywgMCwgb3B0aW9ucykpCiAJCQlyZXR1cm4gLTE7CiAJcmV0dXJuIDA7CiB9CkBAIC01NzIsOSArNjA4LDkgQEAKIAllbnRyeS0+c3RhZ2VzWzFdLm1vZGUgPSBvLT5tb2RlOwogCWVudHJ5LT5zdGFnZXNbMl0ubW9kZSA9IGEtPm1vZGU7CiAJZW50cnktPnN0YWdlc1szXS5tb2RlID0gYi0+bW9kZTsKLQloYXNoY3B5KGVudHJ5LT5zdGFnZXNbMV0uc2hhLCBvLT5zaGExKTsKLQloYXNoY3B5KGVudHJ5LT5zdGFnZXNbMl0uc2hhLCBhLT5zaGExKTsKLQloYXNoY3B5KGVudHJ5LT5zdGFnZXNbM10uc2hhLCBiLT5zaGExKTsKKwlvaWRjcHkoJmVudHJ5LT5zdGFnZXNbMV0ub2lkLCAmby0+b2lkKTsKKwlvaWRjcHkoJmVudHJ5LT5zdGFnZXNbMl0ub2lkLCAmYS0+b2lkKTsKKwlvaWRjcHkoJmVudHJ5LT5zdGFnZXNbM10ub2lkLCAmYi0+b2lkKTsKIH0KIAogc3RhdGljIGludCByZW1vdmVfZmlsZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywgaW50IGNsZWFuLApAQCAtNjU4LDIzICs2OTQsMjEgQEAKIHsKIAlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKIAotCWlmIChwb3MgPCAwKQotCQlwb3MgPSAtMSAtIHBvczsKLQl3aGlsZSAocG9zIDwgYWN0aXZlX25yICYmCi0JICAgICAgICFzdHJjbXAocGF0aCwgYWN0aXZlX2NhY2hlW3Bvc10tPm5hbWUpKSB7Ci0JCS8qCi0JCSAqIElmIHN0YWdlICMwLCBpdCBpcyBkZWZpbml0ZWx5IHRyYWNrZWQuCi0JCSAqIElmIGl0IGhhcyBzdGFnZSAjMiB0aGVuIGl0IHdhcyB0cmFja2VkCi0JCSAqIGJlZm9yZSB0aGlzIG1lcmdlIHN0YXJ0ZWQuICBBbGwgb3RoZXIKLQkJICogY2FzZXMgdGhlIHBhdGggd2FzIG5vdCB0cmFja2VkLgotCQkgKi8KLQkJc3dpdGNoIChjZV9zdGFnZShhY3RpdmVfY2FjaGVbcG9zXSkpIHsKLQkJY2FzZSAwOgotCQljYXNlIDI6CisJaWYgKDAgPD0gcG9zKQorCQkvKiB3ZSBoYXZlIGJlZW4gdHJhY2tpbmcgdGhpcyBwYXRoICovCisJCXJldHVybiAxOworCisJLyoKKwkgKiBMb29rIGZvciBhbiB1bm1lcmdlZCBlbnRyeSBmb3IgdGhlIHBhdGgsCisJICogc3BlY2lmaWNhbGx5IHN0YWdlICMyLCB3aGljaCB3b3VsZCBpbmRpY2F0ZQorCSAqIHRoYXQgIm91ciIgc2lkZSBiZWZvcmUgdGhlIG1lcmdlIHN0YXJ0ZWQKKwkgKiBoYWQgdGhlIHBhdGggdHJhY2tlZCAoYW5kIHJlc3VsdGVkIGluIGEgY29uZmxpY3QpLgorCSAqLworCWZvciAocG9zID0gLTEgLSBwb3M7CisJICAgICBwb3MgPCBhY3RpdmVfbnIgJiYgIXN0cmNtcChwYXRoLCBhY3RpdmVfY2FjaGVbcG9zXS0+bmFtZSk7CisJICAgICBwb3MrKykKKwkJaWYgKGNlX3N0YWdlKGFjdGl2ZV9jYWNoZVtwb3NdKSA9PSAyKQogCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcG9zKys7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC03MDksMTIgKzc0MywxMCBAQAogCS8qIE1ha2Ugc3VyZSBsZWFkaW5nIGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkICovCiAJc3RhdHVzID0gc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChwYXRoKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWlmIChzdGF0dXMgPT0gU0NMRF9FWElTVFMpIHsKKwkJaWYgKHN0YXR1cyA9PSBTQ0xEX0VYSVNUUykKIAkJCS8qIHNvbWV0aGluZyBlbHNlIGV4aXN0cyAqLwotCQkJZXJyb3IobXNnLCBwYXRoLCBfKCI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IikpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWRpZShtc2csIHBhdGgsICIiKTsKKwkJCXJldHVybiBlcnIobywgbXNnLCBwYXRoLCBfKCI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IikpOworCQlyZXR1cm4gZXJyKG8sIG1zZywgcGF0aCwgIiIpOwogCX0KIAogCS8qCkBAIC03MjIsNyArNzU0LDcgQEAKIAkgKiB0cmFja2luZyBpdC4KIAkgKi8KIAlpZiAod291bGRfbG9zZV91bnRyYWNrZWQocGF0aCkpCi0JCXJldHVybiBlcnJvcihfKCJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciKSwKKwkJcmV0dXJuIGVycihvLCBfKCJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciKSwKIAkJCSAgICAgcGF0aCk7CiAKIAkvKiBTdWNjZXNzZnVsIHVubGluayBpcyBnb29kLi4gKi8KQEAgLTczMiwxNiArNzY0LDE4IEBACiAJaWYgKGVycm5vID09IEVOT0VOVCkKIAkJcmV0dXJuIDA7CiAJLyogLi4gYnV0IG5vdCBzb21lIG90aGVyIGVycm9yICh3aG8gcmVhbGx5IGNhcmVzIHdoYXQ/KSAqLwotCXJldHVybiBlcnJvcihtc2csIHBhdGgsIF8oIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iKSk7CisJcmV0dXJuIGVycihvLCBtc2csIHBhdGgsIF8oIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9maWxlX2ZsYWdzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAotCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhLAotCQkJICAgICAgdW5zaWduZWQgbW9kZSwKLQkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCi0JCQkgICAgICBpbnQgdXBkYXRlX2NhY2hlLAotCQkJICAgICAgaW50IHVwZGF0ZV93ZCkKK3N0YXRpYyBpbnQgdXBkYXRlX2ZpbGVfZmxhZ3Moc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgdW5zaWduZWQgbW9kZSwKKwkJCSAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgaW50IHVwZGF0ZV9jYWNoZSwKKwkJCSAgICAgaW50IHVwZGF0ZV93ZCkKIHsKKwlpbnQgcmV0ID0gMDsKKwogCWlmIChvLT5jYWxsX2RlcHRoKQogCQl1cGRhdGVfd2QgPSAwOwogCkBAIC03NjAsMTEgKzc5NCwxMyBAQAogCQkJZ290byB1cGRhdGVfaW5kZXg7CiAJCX0KIAotCQlidWYgPSByZWFkX3NoYTFfZmlsZShzaGEsICZ0eXBlLCAmc2l6ZSk7CisJCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKG9pZC0+aGFzaCwgJnR5cGUsICZzaXplKTsKIAkJaWYgKCFidWYpCi0JCQlkaWUoXygiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciKSwgc2hhMV90b19oZXgoc2hhKSwgcGF0aCk7Ci0JCWlmICh0eXBlICE9IE9CSl9CTE9CKQotCQkJZGllKF8oImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciKSwgc2hhMV90b19oZXgoc2hhKSwgcGF0aCk7CisJCQlyZXR1cm4gZXJyKG8sIF8oImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIiksIG9pZF90b19oZXgob2lkKSwgcGF0aCk7CisJCWlmICh0eXBlICE9IE9CSl9CTE9CKSB7CisJCQlyZXQgPSBlcnIobywgXygiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIpLCBvaWRfdG9faGV4KG9pZCksIHBhdGgpOworCQkJZ290byBmcmVlX2J1ZjsKKwkJfQogCQlpZiAoU19JU1JFRyhtb2RlKSkgewogCQkJc3RydWN0IHN0cmJ1ZiBzdHJidWYgPSBTVFJCVUZfSU5JVDsKIAkJCWlmIChjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShwYXRoLCBidWYsIHNpemUsICZzdHJidWYpKSB7CkBAIC03NzYsOCArODEyLDcgQEAKIAogCQlpZiAobWFrZV9yb29tX2Zvcl9wYXRoKG8sIHBhdGgpIDwgMCkgewogCQkJdXBkYXRlX3dkID0gMDsKLQkJCWZyZWUoYnVmKTsKLQkJCWdvdG8gdXBkYXRlX2luZGV4OworCQkJZ290byBmcmVlX2J1ZjsKIAkJfQogCQlpZiAoU19JU1JFRyhtb2RlKSB8fCAoIWhhc19zeW1saW5rcyAmJiBTX0lTTE5LKG1vZGUpKSkgewogCQkJaW50IGZkOwpAQCAtNzg2LDggKzgyMSwxMSBAQAogCQkJZWxzZQogCQkJCW1vZGUgPSAwNjY2OwogCQkJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19UUlVOQyB8IE9fQ1JFQVQsIG1vZGUpOwotCQkJaWYgKGZkIDwgMCkKLQkJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIG9wZW4gJyVzJyIpLCBwYXRoKTsKKwkJCWlmIChmZCA8IDApIHsKKwkJCQlyZXQgPSBlcnIobywgXygiZmFpbGVkIHRvIG9wZW4gJyVzJzogJXMiKSwKKwkJCQkJICBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQkJCWdvdG8gZnJlZV9idWY7CisJCQl9CiAJCQl3cml0ZV9pbl9mdWxsKGZkLCBidWYsIHNpemUpOwogCQkJY2xvc2UoZmQpOwogCQl9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHsKQEAgLTc5NSwzMSArODMzLDM1IEBACiAJCQlzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHBhdGgpOwogCQkJdW5saW5rKHBhdGgpOwogCQkJaWYgKHN5bWxpbmsobG5rLCBwYXRoKSkKLQkJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJyIpLCBwYXRoKTsKKwkJCQlyZXQgPSBlcnIobywgXygiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiKSwKKwkJCQkJcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKIAkJCWZyZWUobG5rKTsKIAkJfSBlbHNlCi0JCQlkaWUoXygiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIpLAotCQkJICAgIG1vZGUsIHNoYTFfdG9faGV4KHNoYSksIHBhdGgpOworCQkJcmV0ID0gZXJyKG8sCisJCQkJICBfKCJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIiksCisJCQkJICBtb2RlLCBvaWRfdG9faGV4KG9pZCksIHBhdGgpOworIGZyZWVfYnVmOgogCQlmcmVlKGJ1Zik7CiAJfQogIHVwZGF0ZV9pbmRleDoKLQlpZiAodXBkYXRlX2NhY2hlKQotCQlhZGRfY2FjaGVpbmZvKG1vZGUsIHNoYSwgcGF0aCwgMCwgdXBkYXRlX3dkLCBBRERfQ0FDSEVfT0tfVE9fQUREKTsKKwlpZiAoIXJldCAmJiB1cGRhdGVfY2FjaGUpCisJCWFkZF9jYWNoZWluZm8obywgbW9kZSwgb2lkLCBwYXRoLCAwLCB1cGRhdGVfd2QsIEFERF9DQUNIRV9PS19UT19BREQpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9maWxlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAotCQkJaW50IGNsZWFuLAotCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhLAotCQkJdW5zaWduZWQgbW9kZSwKLQkJCWNvbnN0IGNoYXIgKnBhdGgpCitzdGF0aWMgaW50IHVwZGF0ZV9maWxlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkgICAgICAgaW50IGNsZWFuLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICAgdW5zaWduZWQgbW9kZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgpCiB7Ci0JdXBkYXRlX2ZpbGVfZmxhZ3Mobywgc2hhLCBtb2RlLCBwYXRoLCBvLT5jYWxsX2RlcHRoIHx8IGNsZWFuLCAhby0+Y2FsbF9kZXB0aCk7CisJcmV0dXJuIHVwZGF0ZV9maWxlX2ZsYWdzKG8sIG9pZCwgbW9kZSwgcGF0aCwgby0+Y2FsbF9kZXB0aCB8fCBjbGVhbiwgIW8tPmNhbGxfZGVwdGgpOwogfQogCiAvKiBMb3cgbGV2ZWwgZmlsZSBtZXJnaW5nLCB1cGRhdGUgYW5kIHJlbW92YWwgKi8KIAogc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyB7Ci0JdW5zaWduZWQgY2hhciBzaGFbMjBdOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogCXVuc2lnbmVkIG1vZGU7CiAJdW5zaWduZWQgY2xlYW46MSwKIAkJIG1lcmdlOjE7CkBAIC04NzEsOSArOTEzLDkgQEAKIAkJbmFtZTIgPSBta3BhdGhkdXAoIiVzIiwgYnJhbmNoMik7CiAJfQogCi0JcmVhZF9tbWJsb2IoJm9yaWcsIG9uZS0+c2hhMSk7Ci0JcmVhZF9tbWJsb2IoJnNyYzEsIGEtPnNoYTEpOwotCXJlYWRfbW1ibG9iKCZzcmMyLCBiLT5zaGExKTsKKwlyZWFkX21tYmxvYigmb3JpZywgb25lLT5vaWQuaGFzaCk7CisJcmVhZF9tbWJsb2IoJnNyYzEsIGEtPm9pZC5oYXNoKTsKKwlyZWFkX21tYmxvYigmc3JjMiwgYi0+b2lkLmhhc2gpOwogCiAJbWVyZ2Vfc3RhdHVzID0gbGxfbWVyZ2UocmVzdWx0X2J1ZiwgYS0+cGF0aCwgJm9yaWcsIGJhc2VfbmFtZSwKIAkJCQkmc3JjMSwgbmFtZTEsICZzcmMyLCBuYW1lMiwgJmxsX29wdHMpOwpAQCAtODg3LDEzOCArOTI5LDE0NCBAQAogCXJldHVybiBtZXJnZV9zdGF0dXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1lcmdlX2ZpbGVfMShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKK3N0YXRpYyBpbnQgbWVyZ2VfZmlsZV8xKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKIAkJCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIsCiAJCQkJCSAgIGNvbnN0IGNoYXIgKmJyYW5jaDEsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKmJyYW5jaDIpCisJCQkJCSAgIGNvbnN0IGNoYXIgKmJyYW5jaDIsCisJCQkJCSAgIHN0cnVjdCBtZXJnZV9maWxlX2luZm8gKnJlc3VsdCkKIHsKLQlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIHJlc3VsdDsKLQlyZXN1bHQubWVyZ2UgPSAwOwotCXJlc3VsdC5jbGVhbiA9IDE7CisJcmVzdWx0LT5tZXJnZSA9IDA7CisJcmVzdWx0LT5jbGVhbiA9IDE7CiAKIAlpZiAoKFNfSUZNVCAmIGEtPm1vZGUpICE9IChTX0lGTVQgJiBiLT5tb2RlKSkgewotCQlyZXN1bHQuY2xlYW4gPSAwOworCQlyZXN1bHQtPmNsZWFuID0gMDsKIAkJaWYgKFNfSVNSRUcoYS0+bW9kZSkpIHsKLQkJCXJlc3VsdC5tb2RlID0gYS0+bW9kZTsKLQkJCWhhc2hjcHkocmVzdWx0LnNoYSwgYS0+c2hhMSk7CisJCQlyZXN1bHQtPm1vZGUgPSBhLT5tb2RlOworCQkJb2lkY3B5KCZyZXN1bHQtPm9pZCwgJmEtPm9pZCk7CiAJCX0gZWxzZSB7Ci0JCQlyZXN1bHQubW9kZSA9IGItPm1vZGU7Ci0JCQloYXNoY3B5KHJlc3VsdC5zaGEsIGItPnNoYTEpOworCQkJcmVzdWx0LT5tb2RlID0gYi0+bW9kZTsKKwkJCW9pZGNweSgmcmVzdWx0LT5vaWQsICZiLT5vaWQpOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKCFzaGFfZXEoYS0+c2hhMSwgb25lLT5zaGExKSAmJiAhc2hhX2VxKGItPnNoYTEsIG9uZS0+c2hhMSkpCi0JCQlyZXN1bHQubWVyZ2UgPSAxOworCQlpZiAoIW9pZF9lcSgmYS0+b2lkLCAmb25lLT5vaWQpICYmICFvaWRfZXEoJmItPm9pZCwgJm9uZS0+b2lkKSkKKwkJCXJlc3VsdC0+bWVyZ2UgPSAxOwogCiAJCS8qCiAJCSAqIE1lcmdlIG1vZGVzCiAJCSAqLwogCQlpZiAoYS0+bW9kZSA9PSBiLT5tb2RlIHx8IGEtPm1vZGUgPT0gb25lLT5tb2RlKQotCQkJcmVzdWx0Lm1vZGUgPSBiLT5tb2RlOworCQkJcmVzdWx0LT5tb2RlID0gYi0+bW9kZTsKIAkJZWxzZSB7Ci0JCQlyZXN1bHQubW9kZSA9IGEtPm1vZGU7CisJCQlyZXN1bHQtPm1vZGUgPSBhLT5tb2RlOwogCQkJaWYgKGItPm1vZGUgIT0gb25lLT5tb2RlKSB7Ci0JCQkJcmVzdWx0LmNsZWFuID0gMDsKLQkJCQlyZXN1bHQubWVyZ2UgPSAxOworCQkJCXJlc3VsdC0+Y2xlYW4gPSAwOworCQkJCXJlc3VsdC0+bWVyZ2UgPSAxOwogCQkJfQogCQl9CiAKLQkJaWYgKHNoYV9lcShhLT5zaGExLCBiLT5zaGExKSB8fCBzaGFfZXEoYS0+c2hhMSwgb25lLT5zaGExKSkKLQkJCWhhc2hjcHkocmVzdWx0LnNoYSwgYi0+c2hhMSk7Ci0JCWVsc2UgaWYgKHNoYV9lcShiLT5zaGExLCBvbmUtPnNoYTEpKQotCQkJaGFzaGNweShyZXN1bHQuc2hhLCBhLT5zaGExKTsKKwkJaWYgKG9pZF9lcSgmYS0+b2lkLCAmYi0+b2lkKSB8fCBvaWRfZXEoJmEtPm9pZCwgJm9uZS0+b2lkKSkKKwkJCW9pZGNweSgmcmVzdWx0LT5vaWQsICZiLT5vaWQpOworCQllbHNlIGlmIChvaWRfZXEoJmItPm9pZCwgJm9uZS0+b2lkKSkKKwkJCW9pZGNweSgmcmVzdWx0LT5vaWQsICZhLT5vaWQpOwogCQllbHNlIGlmIChTX0lTUkVHKGEtPm1vZGUpKSB7CiAJCQltbWJ1ZmZlcl90IHJlc3VsdF9idWY7Ci0JCQlpbnQgbWVyZ2Vfc3RhdHVzOworCQkJaW50IHJldCA9IDAsIG1lcmdlX3N0YXR1czsKIAogCQkJbWVyZ2Vfc3RhdHVzID0gbWVyZ2VfM3dheShvLCAmcmVzdWx0X2J1Ziwgb25lLCBhLCBiLAogCQkJCQkJICBicmFuY2gxLCBicmFuY2gyKTsKIAogCQkJaWYgKChtZXJnZV9zdGF0dXMgPCAwKSB8fCAhcmVzdWx0X2J1Zi5wdHIpCi0JCQkJZGllKF8oIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIikpOworCQkJCXJldCA9IGVycihvLCBfKCJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIpKTsKIAotCQkJaWYgKHdyaXRlX3NoYTFfZmlsZShyZXN1bHRfYnVmLnB0ciwgcmVzdWx0X2J1Zi5zaXplLAotCQkJCQkgICAgYmxvYl90eXBlLCByZXN1bHQuc2hhKSkKLQkJCQlkaWUoXygiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIpLAotCQkJCSAgICBhLT5wYXRoKTsKKwkJCWlmICghcmV0ICYmIHdyaXRlX3NoYTFfZmlsZShyZXN1bHRfYnVmLnB0ciwgcmVzdWx0X2J1Zi5zaXplLAorCQkJCQkJICAgIGJsb2JfdHlwZSwgcmVzdWx0LT5vaWQuaGFzaCkpCisJCQkJcmV0ID0gZXJyKG8sIF8oIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiKSwKKwkJCQkJICBhLT5wYXRoKTsKIAogCQkJZnJlZShyZXN1bHRfYnVmLnB0cik7Ci0JCQlyZXN1bHQuY2xlYW4gPSAobWVyZ2Vfc3RhdHVzID09IDApOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJcmVzdWx0LT5jbGVhbiA9IChtZXJnZV9zdGF0dXMgPT0gMCk7CiAJCX0gZWxzZSBpZiAoU19JU0dJVExJTksoYS0+bW9kZSkpIHsKLQkJCXJlc3VsdC5jbGVhbiA9IG1lcmdlX3N1Ym1vZHVsZShyZXN1bHQuc2hhLAotCQkJCQkJICAgICAgIG9uZS0+cGF0aCwgb25lLT5zaGExLAotCQkJCQkJICAgICAgIGEtPnNoYTEsIGItPnNoYTEsCisJCQlyZXN1bHQtPmNsZWFuID0gbWVyZ2Vfc3VibW9kdWxlKHJlc3VsdC0+b2lkLmhhc2gsCisJCQkJCQkgICAgICAgb25lLT5wYXRoLAorCQkJCQkJICAgICAgIG9uZS0+b2lkLmhhc2gsCisJCQkJCQkgICAgICAgYS0+b2lkLmhhc2gsCisJCQkJCQkgICAgICAgYi0+b2lkLmhhc2gsCiAJCQkJCQkgICAgICAgIW8tPmNhbGxfZGVwdGgpOwogCQl9IGVsc2UgaWYgKFNfSVNMTksoYS0+bW9kZSkpIHsKLQkJCWhhc2hjcHkocmVzdWx0LnNoYSwgYS0+c2hhMSk7CisJCQlvaWRjcHkoJnJlc3VsdC0+b2lkLCAmYS0+b2lkKTsKIAotCQkJaWYgKCFzaGFfZXEoYS0+c2hhMSwgYi0+c2hhMSkpCi0JCQkJcmVzdWx0LmNsZWFuID0gMDsKLQkJfSBlbHNlIHsKLQkJCWRpZShfKCJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSBpbiB0aGUgdHJlZSIpKTsKLQkJfQorCQkJaWYgKCFvaWRfZXEoJmEtPm9pZCwgJmItPm9pZCkpCisJCQkJcmVzdWx0LT5jbGVhbiA9IDA7CisJCX0gZWxzZQorCQkJZGllKCJCVUc6IHVuc3VwcG9ydGVkIG9iamVjdCB0eXBlIGluIHRoZSB0cmVlIik7CiAJfQogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBtZXJnZV9maWxlX2luZm8KLW1lcmdlX2ZpbGVfc3BlY2lhbF9tYXJrZXJzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorc3RhdGljIGludCBtZXJnZV9maWxlX3NwZWNpYWxfbWFya2VycyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKIAkJCSAgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCiAJCQkgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKIAkJCSAgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpiLAogCQkJICAgY29uc3QgY2hhciAqYnJhbmNoMSwKIAkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwKIAkJCSAgIGNvbnN0IGNoYXIgKmJyYW5jaDIsCi0JCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZTIpCisJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZTIsCisJCQkgICBzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvICptZmkpCiB7CiAJY2hhciAqc2lkZTEgPSBOVUxMOwogCWNoYXIgKnNpZGUyID0gTlVMTDsKLQlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maTsKKwlpbnQgcmV0OwogCiAJaWYgKGZpbGVuYW1lMSkKIAkJc2lkZTEgPSB4c3RyZm10KCIlczolcyIsIGJyYW5jaDEsIGZpbGVuYW1lMSk7CiAJaWYgKGZpbGVuYW1lMikKIAkJc2lkZTIgPSB4c3RyZm10KCIlczolcyIsIGJyYW5jaDIsIGZpbGVuYW1lMik7CiAKLQltZmkgPSBtZXJnZV9maWxlXzEobywgb25lLCBhLCBiLAotCQkJICAgc2lkZTEgPyBzaWRlMSA6IGJyYW5jaDEsIHNpZGUyID8gc2lkZTIgOiBicmFuY2gyKTsKKwlyZXQgPSBtZXJnZV9maWxlXzEobywgb25lLCBhLCBiLAorCQkJICAgc2lkZTEgPyBzaWRlMSA6IGJyYW5jaDEsCisJCQkgICBzaWRlMiA/IHNpZGUyIDogYnJhbmNoMiwgbWZpKTsKIAlmcmVlKHNpZGUxKTsKIAlmcmVlKHNpZGUyKTsKLQlyZXR1cm4gbWZpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1lcmdlX2ZpbGVfb25lKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorc3RhdGljIGludCBtZXJnZV9maWxlX29uZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKIAkJCQkJIGNvbnN0IGNoYXIgKnBhdGgsCi0JCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvX3NoYSwgaW50IG9fbW9kZSwKLQkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFfc2hhLCBpbnQgYV9tb2RlLAotCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYl9zaGEsIGludCBiX21vZGUsCisJCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvX29pZCwgaW50IG9fbW9kZSwKKwkJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmFfb2lkLCBpbnQgYV9tb2RlLAorCQkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYl9vaWQsIGludCBiX21vZGUsCiAJCQkJCSBjb25zdCBjaGFyICpicmFuY2gxLAotCQkJCQkgY29uc3QgY2hhciAqYnJhbmNoMikKKwkJCQkJIGNvbnN0IGNoYXIgKmJyYW5jaDIsCisJCQkJCSBzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvICptZmkpCiB7CiAJc3RydWN0IGRpZmZfZmlsZXNwZWMgb25lLCBhLCBiOwogCiAJb25lLnBhdGggPSBhLnBhdGggPSBiLnBhdGggPSAoY2hhciAqKXBhdGg7Ci0JaGFzaGNweShvbmUuc2hhMSwgb19zaGEpOworCW9pZGNweSgmb25lLm9pZCwgb19vaWQpOwogCW9uZS5tb2RlID0gb19tb2RlOwotCWhhc2hjcHkoYS5zaGExLCBhX3NoYSk7CisJb2lkY3B5KCZhLm9pZCwgYV9vaWQpOwogCWEubW9kZSA9IGFfbW9kZTsKLQloYXNoY3B5KGIuc2hhMSwgYl9zaGEpOworCW9pZGNweSgmYi5vaWQsIGJfb2lkKTsKIAliLm1vZGUgPSBiX21vZGU7Ci0JcmV0dXJuIG1lcmdlX2ZpbGVfMShvLCAmb25lLCAmYSwgJmIsIGJyYW5jaDEsIGJyYW5jaDIpOworCXJldHVybiBtZXJnZV9maWxlXzEobywgJm9uZSwgJmEsICZiLCBicmFuY2gxLCBicmFuY2gyLCBtZmkpOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfY2hhbmdlX2RlbGV0ZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKK3N0YXRpYyBpbnQgaGFuZGxlX2NoYW5nZV9kZWxldGUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCiAJCQkJIGNvbnN0IGNoYXIgKnBhdGgsCi0JCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9fc2hhLCBpbnQgb19tb2RlLAotCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICphX3NoYSwgaW50IGFfbW9kZSwKLQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYl9zaGEsIGludCBiX21vZGUsCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9fb2lkLCBpbnQgb19tb2RlLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICphX29pZCwgaW50IGFfbW9kZSwKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYl9vaWQsIGludCBiX21vZGUsCiAJCQkJIGNvbnN0IGNoYXIgKmNoYW5nZSwgY29uc3QgY2hhciAqY2hhbmdlX3Bhc3QpCiB7CiAJY2hhciAqcmVuYW1lZCA9IE5VTEw7CisJaW50IHJldCA9IDA7CiAJaWYgKGRpcl9pbl93YXkocGF0aCwgIW8tPmNhbGxfZGVwdGgpKSB7Ci0JCXJlbmFtZWQgPSB1bmlxdWVfcGF0aChvLCBwYXRoLCBhX3NoYSA/IG8tPmJyYW5jaDEgOiBvLT5icmFuY2gyKTsKKwkJcmVuYW1lZCA9IHVuaXF1ZV9wYXRoKG8sIHBhdGgsIGFfb2lkID8gby0+YnJhbmNoMSA6IG8tPmJyYW5jaDIpOwogCX0KIAogCWlmIChvLT5jYWxsX2RlcHRoKSB7CkBAIC0xMDI3LDIxICsxMDc1LDIzIEBACiAJCSAqIGNvcnJlY3Q7IHNpbmNlIHRoZXJlIGlzIG5vIHRydWUgIm1pZGRsZSBwb2ludCIgYmV0d2VlbgogCQkgKiB0aGVtLCBzaW1wbHkgcmV1c2UgdGhlIGJhc2UgdmVyc2lvbiBmb3IgdmlydHVhbCBtZXJnZSBiYXNlLgogCQkgKi8KLQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKTsKLQkJdXBkYXRlX2ZpbGUobywgMCwgb19zaGEsIG9fbW9kZSwgcmVuYW1lZCA/IHJlbmFtZWQgOiBwYXRoKTsKLQl9IGVsc2UgaWYgKCFhX3NoYSkgeworCQlyZXQgPSByZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHVwZGF0ZV9maWxlKG8sIDAsIG9fb2lkLCBvX21vZGUsCisJCQkJCSAgcmVuYW1lZCA/IHJlbmFtZWQgOiBwYXRoKTsKKwl9IGVsc2UgaWYgKCFhX29pZCkgewogCQlpZiAoIXJlbmFtZWQpIHsKIAkJCW91dHB1dChvLCAxLCBfKCJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyAiCiAJCQkgICAgICAgImFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0IGluIHRyZWUuIiksCiAJCQkgICAgICAgY2hhbmdlLCBwYXRoLCBvLT5icmFuY2gxLCBjaGFuZ2VfcGFzdCwKIAkJCSAgICAgICBvLT5icmFuY2gyLCBvLT5icmFuY2gyLCBwYXRoKTsKLQkJCXVwZGF0ZV9maWxlKG8sIDAsIGJfc2hhLCBiX21vZGUsIHBhdGgpOworCQkJcmV0ID0gdXBkYXRlX2ZpbGUobywgMCwgYl9vaWQsIGJfbW9kZSwgcGF0aCk7CiAJCX0gZWxzZSB7CiAJCQlvdXRwdXQobywgMSwgXygiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgIgogCQkJICAgICAgICJhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCBpbiB0cmVlIGF0ICVzLiIpLAogCQkJICAgICAgIGNoYW5nZSwgcGF0aCwgby0+YnJhbmNoMSwgY2hhbmdlX3Bhc3QsCiAJCQkgICAgICAgby0+YnJhbmNoMiwgby0+YnJhbmNoMiwgcGF0aCwgcmVuYW1lZCk7Ci0JCQl1cGRhdGVfZmlsZShvLCAwLCBiX3NoYSwgYl9tb2RlLCByZW5hbWVkKTsKKwkJCXJldCA9IHVwZGF0ZV9maWxlKG8sIDAsIGJfb2lkLCBiX21vZGUsIHJlbmFtZWQpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKCFyZW5hbWVkKSB7CkBAIC0xMDU0LDcgKzExMDQsNyBAQAogCQkJICAgICAgICJhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCBpbiB0cmVlIGF0ICVzLiIpLAogCQkJICAgICAgIGNoYW5nZSwgcGF0aCwgby0+YnJhbmNoMiwgY2hhbmdlX3Bhc3QsCiAJCQkgICAgICAgby0+YnJhbmNoMSwgby0+YnJhbmNoMSwgcGF0aCwgcmVuYW1lZCk7Ci0JCQl1cGRhdGVfZmlsZShvLCAwLCBhX3NoYSwgYV9tb2RlLCByZW5hbWVkKTsKKwkJCXJldCA9IHVwZGF0ZV9maWxlKG8sIDAsIGFfb2lkLCBhX21vZGUsIHJlbmFtZWQpOwogCQl9CiAJCS8qCiAJCSAqIE5vIG5lZWQgdG8gY2FsbCB1cGRhdGVfZmlsZSgpIG9uIHBhdGggd2hlbiAhcmVuYW1lZCwgc2luY2UKQEAgLTEwNjQsNTkgKzExMTQsNjAgQEAKIAkJICovCiAJfQogCWZyZWUocmVuYW1lZCk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBjb25mbGljdF9yZW5hbWVfZGVsZXRlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorc3RhdGljIGludCBjb25mbGljdF9yZW5hbWVfZGVsZXRlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAogCQkJCSAgIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyLAogCQkJCSAgIGNvbnN0IGNoYXIgKnJlbmFtZV9icmFuY2gsCiAJCQkJICAgY29uc3QgY2hhciAqb3RoZXJfYnJhbmNoKQogewogCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvcmlnID0gcGFpci0+b25lOwogCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkZXN0ID0gcGFpci0+dHdvOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFfc2hhID0gTlVMTDsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpiX3NoYSA9IE5VTEw7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYV9vaWQgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJfb2lkID0gTlVMTDsKIAlpbnQgYV9tb2RlID0gMDsKIAlpbnQgYl9tb2RlID0gMDsKIAogCWlmIChyZW5hbWVfYnJhbmNoID09IG8tPmJyYW5jaDEpIHsKLQkJYV9zaGEgPSBkZXN0LT5zaGExOworCQlhX29pZCA9ICZkZXN0LT5vaWQ7CiAJCWFfbW9kZSA9IGRlc3QtPm1vZGU7CiAJfSBlbHNlIHsKLQkJYl9zaGEgPSBkZXN0LT5zaGExOworCQliX29pZCA9ICZkZXN0LT5vaWQ7CiAJCWJfbW9kZSA9IGRlc3QtPm1vZGU7CiAJfQogCi0JaGFuZGxlX2NoYW5nZV9kZWxldGUobywKLQkJCSAgICAgby0+Y2FsbF9kZXB0aCA/IG9yaWctPnBhdGggOiBkZXN0LT5wYXRoLAotCQkJICAgICBvcmlnLT5zaGExLCBvcmlnLT5tb2RlLAotCQkJICAgICBhX3NoYSwgYV9tb2RlLAotCQkJICAgICBiX3NoYSwgYl9tb2RlLAotCQkJICAgICBfKCJyZW5hbWUiKSwgXygicmVuYW1lZCIpKTsKKwlpZiAoaGFuZGxlX2NoYW5nZV9kZWxldGUobywKKwkJCQkgby0+Y2FsbF9kZXB0aCA/IG9yaWctPnBhdGggOiBkZXN0LT5wYXRoLAorCQkJCSAmb3JpZy0+b2lkLCBvcmlnLT5tb2RlLAorCQkJCSBhX29pZCwgYV9tb2RlLAorCQkJCSBiX29pZCwgYl9tb2RlLAorCQkJCSBfKCJyZW5hbWUiKSwgXygicmVuYW1lZCIpKSkKKwkJcmV0dXJuIC0xOwogCi0JaWYgKG8tPmNhbGxfZGVwdGgpIHsKLQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShkZXN0LT5wYXRoKTsKLQl9IGVsc2UgewotCQl1cGRhdGVfc3RhZ2VzKGRlc3QtPnBhdGgsIE5VTEwsCi0JCQkgICAgICByZW5hbWVfYnJhbmNoID09IG8tPmJyYW5jaDEgPyBkZXN0IDogTlVMTCwKLQkJCSAgICAgIHJlbmFtZV9icmFuY2ggPT0gby0+YnJhbmNoMSA/IE5VTEwgOiBkZXN0KTsKLQl9Ci0KKwlpZiAoby0+Y2FsbF9kZXB0aCkKKwkJcmV0dXJuIHJlbW92ZV9maWxlX2Zyb21fY2FjaGUoZGVzdC0+cGF0aCk7CisJZWxzZQorCQlyZXR1cm4gdXBkYXRlX3N0YWdlcyhvLCBkZXN0LT5wYXRoLCBOVUxMLAorCQkJCSAgICAgcmVuYW1lX2JyYW5jaCA9PSBvLT5icmFuY2gxID8gZGVzdCA6IE5VTEwsCisJCQkJICAgICByZW5hbWVfYnJhbmNoID09IG8tPmJyYW5jaDEgPyBOVUxMIDogZGVzdCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZmlsZXNwZWNfZnJvbV9lbnRyeShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdGFyZ2V0LAogCQkJCQkJIHN0cnVjdCBzdGFnZV9kYXRhICplbnRyeSwKIAkJCQkJCSBpbnQgc3RhZ2UpCiB7Ci0JdW5zaWduZWQgY2hhciAqc2hhID0gZW50cnktPnN0YWdlc1tzdGFnZV0uc2hhOworCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9ICZlbnRyeS0+c3RhZ2VzW3N0YWdlXS5vaWQ7CiAJdW5zaWduZWQgbW9kZSA9IGVudHJ5LT5zdGFnZXNbc3RhZ2VdLm1vZGU7Ci0JaWYgKG1vZGUgPT0gMCB8fCBpc19udWxsX3NoYTEoc2hhKSkKKwlpZiAobW9kZSA9PSAwIHx8IGlzX251bGxfb2lkKG9pZCkpCiAJCXJldHVybiBOVUxMOwotCWhhc2hjcHkodGFyZ2V0LT5zaGExLCBzaGEpOworCW9pZGNweSgmdGFyZ2V0LT5vaWQsIG9pZCk7CiAJdGFyZ2V0LT5tb2RlID0gbW9kZTsKIAlyZXR1cm4gdGFyZ2V0OwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfZmlsZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKK3N0YXRpYyBpbnQgaGFuZGxlX2ZpbGUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCiAJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcmVuYW1lLAogCQkJaW50IHN0YWdlLAogCQkJc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpjaSkKQEAgLTExMjYsNiArMTE3Nyw3IEBACiAJY29uc3QgY2hhciAqY3VyX2JyYW5jaCwgKm90aGVyX2JyYW5jaDsKIAlzdHJ1Y3QgZGlmZl9maWxlc3BlYyBvdGhlcjsKIAlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYWRkOworCWludCByZXQ7CiAKIAlpZiAoc3RhZ2UgPT0gMikgewogCQlkc3RfZW50cnkgPSBjaS0+ZHN0X2VudHJ5MTsKQEAgLTExNDAsNyArMTE5Miw4IEBACiAJYWRkID0gZmlsZXNwZWNfZnJvbV9lbnRyeSgmb3RoZXIsIGRzdF9lbnRyeSwgc3RhZ2UgXiAxKTsKIAlpZiAoYWRkKSB7CiAJCWNoYXIgKmFkZF9uYW1lID0gdW5pcXVlX3BhdGgobywgcmVuYW1lLT5wYXRoLCBvdGhlcl9icmFuY2gpOwotCQl1cGRhdGVfZmlsZShvLCAwLCBhZGQtPnNoYTEsIGFkZC0+bW9kZSwgYWRkX25hbWUpOworCQlpZiAodXBkYXRlX2ZpbGUobywgMCwgJmFkZC0+b2lkLCBhZGQtPm1vZGUsIGFkZF9uYW1lKSkKKwkJCXJldHVybiAtMTsKIAogCQlyZW1vdmVfZmlsZShvLCAwLCByZW5hbWUtPnBhdGgsIDApOwogCQlkc3RfbmFtZSA9IHVuaXF1ZV9wYXRoKG8sIHJlbmFtZS0+cGF0aCwgY3VyX2JyYW5jaCk7CkBAIC0xMTUxLDE3ICsxMjA0LDIwIEBACiAJCQkgICAgICAgcmVuYW1lLT5wYXRoLCBvdGhlcl9icmFuY2gsIGRzdF9uYW1lKTsKIAkJfQogCX0KLQl1cGRhdGVfZmlsZShvLCAwLCByZW5hbWUtPnNoYTEsIHJlbmFtZS0+bW9kZSwgZHN0X25hbWUpOwotCWlmIChzdGFnZSA9PSAyKQotCQl1cGRhdGVfc3RhZ2VzKHJlbmFtZS0+cGF0aCwgTlVMTCwgcmVuYW1lLCBhZGQpOworCWlmICgocmV0ID0gdXBkYXRlX2ZpbGUobywgMCwgJnJlbmFtZS0+b2lkLCByZW5hbWUtPm1vZGUsIGRzdF9uYW1lKSkpCisJCTsgLyogZmFsbCB0aHJvdWdoLCBkbyBhbGxvdyBkc3RfbmFtZSB0byBiZSByZWxlYXNlZCAqLworCWVsc2UgaWYgKHN0YWdlID09IDIpCisJCXJldCA9IHVwZGF0ZV9zdGFnZXMobywgcmVuYW1lLT5wYXRoLCBOVUxMLCByZW5hbWUsIGFkZCk7CiAJZWxzZQotCQl1cGRhdGVfc3RhZ2VzKHJlbmFtZS0+cGF0aCwgTlVMTCwgYWRkLCByZW5hbWUpOworCQlyZXQgPSB1cGRhdGVfc3RhZ2VzKG8sIHJlbmFtZS0+cGF0aCwgTlVMTCwgYWRkLCByZW5hbWUpOwogCiAJaWYgKGRzdF9uYW1lICE9IHJlbmFtZS0+cGF0aCkKIAkJZnJlZShkc3RfbmFtZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBjb25mbGljdF9yZW5hbWVfcmVuYW1lXzF0bzIoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCitzdGF0aWMgaW50IGNvbmZsaWN0X3JlbmFtZV9yZW5hbWVfMXRvMihzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKIAkJCQkJc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpjaSkKIHsKIAkvKiBPbmUgZmlsZSB3YXMgcmVuYW1lZCBpbiBib3RoIGJyYW5jaGVzLCBidXQgdG8gZGlmZmVyZW50IG5hbWVzLiAqLwpAQCAtMTE3OSwxOCArMTIzNSwyMSBAQAogCQlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maTsKIAkJc3RydWN0IGRpZmZfZmlsZXNwZWMgb3RoZXI7CiAJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICphZGQ7Ci0JCW1maSA9IG1lcmdlX2ZpbGVfb25lKG8sIG9uZS0+cGF0aCwKLQkJCQkgb25lLT5zaGExLCBvbmUtPm1vZGUsCi0JCQkJIGEtPnNoYTEsIGEtPm1vZGUsCi0JCQkJIGItPnNoYTEsIGItPm1vZGUsCi0JCQkJIGNpLT5icmFuY2gxLCBjaS0+YnJhbmNoMik7CisJCWlmIChtZXJnZV9maWxlX29uZShvLCBvbmUtPnBhdGgsCisJCQkJICZvbmUtPm9pZCwgb25lLT5tb2RlLAorCQkJCSAmYS0+b2lkLCBhLT5tb2RlLAorCQkJCSAmYi0+b2lkLCBiLT5tb2RlLAorCQkJCSBjaS0+YnJhbmNoMSwgY2ktPmJyYW5jaDIsICZtZmkpKQorCQkJcmV0dXJuIC0xOworCiAJCS8qCiAJCSAqIEZJWE1FOiBGb3IgcmVuYW1lL2FkZC1zb3VyY2UgY29uZmxpY3RzIChpZiB3ZSBjb3VsZCBkZXRlY3QKIAkJICogc3VjaCksIHRoaXMgaXMgd3JvbmcuICBXZSBzaG91bGQgaW5zdGVhZCBmaW5kIGEgdW5pcXVlCiAJCSAqIHBhdGhuYW1lIGFuZCB0aGVuIGVpdGhlciByZW5hbWUgdGhlIGFkZC1zb3VyY2UgZmlsZSB0byB0aGF0CiAJCSAqIHVuaXF1ZSBwYXRoLCBvciB1c2UgdGhhdCB1bmlxdWUgcGF0aCBpbnN0ZWFkIG9mIHNyYyBoZXJlLgogCQkgKi8KLQkJdXBkYXRlX2ZpbGUobywgMCwgbWZpLnNoYSwgbWZpLm1vZGUsIG9uZS0+cGF0aCk7CisJCWlmICh1cGRhdGVfZmlsZShvLCAwLCAmbWZpLm9pZCwgbWZpLm1vZGUsIG9uZS0+cGF0aCkpCisJCQlyZXR1cm4gLTE7CiAKIAkJLyoKIAkJICogQWJvdmUsIHdlIHB1dCB0aGUgbWVyZ2VkIGNvbnRlbnQgYXQgdGhlIG1lcmdlLWJhc2UncwpAQCAtMTIwMSwyMiArMTI2MCwyNiBAQAogCQkgKiByZXNvbHZpbmcgdGhlIGNvbmZsaWN0IGF0IHRoYXQgcGF0aCBpbiBpdHMgZmF2b3IuCiAJCSAqLwogCQlhZGQgPSBmaWxlc3BlY19mcm9tX2VudHJ5KCZvdGhlciwgY2ktPmRzdF9lbnRyeTEsIDIgXiAxKTsKLQkJaWYgKGFkZCkKLQkJCXVwZGF0ZV9maWxlKG8sIDAsIGFkZC0+c2hhMSwgYWRkLT5tb2RlLCBhLT5wYXRoKTsKKwkJaWYgKGFkZCkgeworCQkJaWYgKHVwZGF0ZV9maWxlKG8sIDAsICZhZGQtPm9pZCwgYWRkLT5tb2RlLCBhLT5wYXRoKSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KIAkJZWxzZQogCQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShhLT5wYXRoKTsKIAkJYWRkID0gZmlsZXNwZWNfZnJvbV9lbnRyeSgmb3RoZXIsIGNpLT5kc3RfZW50cnkyLCAzIF4gMSk7Ci0JCWlmIChhZGQpCi0JCQl1cGRhdGVfZmlsZShvLCAwLCBhZGQtPnNoYTEsIGFkZC0+bW9kZSwgYi0+cGF0aCk7CisJCWlmIChhZGQpIHsKKwkJCWlmICh1cGRhdGVfZmlsZShvLCAwLCAmYWRkLT5vaWQsIGFkZC0+bW9kZSwgYi0+cGF0aCkpCisJCQkJcmV0dXJuIC0xOworCQl9CiAJCWVsc2UKIAkJCXJlbW92ZV9maWxlX2Zyb21fY2FjaGUoYi0+cGF0aCk7Ci0JfSBlbHNlIHsKLQkJaGFuZGxlX2ZpbGUobywgYSwgMiwgY2kpOwotCQloYW5kbGVfZmlsZShvLCBiLCAzLCBjaSk7Ci0JfQorCX0gZWxzZSBpZiAoaGFuZGxlX2ZpbGUobywgYSwgMiwgY2kpIHx8IGhhbmRsZV9maWxlKG8sIGIsIDMsIGNpKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbmZsaWN0X3JlbmFtZV9yZW5hbWVfMnRvMShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKK3N0YXRpYyBpbnQgY29uZmxpY3RfcmVuYW1lX3JlbmFtZV8ydG8xKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAogCQkJCQlzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpKQogewogCS8qIFR3byBmaWxlcywgYSAmIGIsIHdlcmUgcmVuYW1lZCB0byB0aGUgc2FtZSB0aGluZywgYy4gKi8KQEAgLTEyMjcsNiArMTI5MCw3IEBACiAJY2hhciAqcGF0aCA9IGMxLT5wYXRoOyAvKiA9PSBjMi0+cGF0aCAqLwogCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpX2MxOwogCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpX2MyOworCWludCByZXQ7CiAKIAlvdXRwdXQobywgMSwgXygiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiAiCiAJICAgICAgICJSZW5hbWUgJXMtPiVzIGluICVzLiAiCkBAIC0xMjM3LDEyICsxMzAxLDEzIEBACiAJcmVtb3ZlX2ZpbGUobywgMSwgYS0+cGF0aCwgby0+Y2FsbF9kZXB0aCB8fCB3b3VsZF9sb3NlX3VudHJhY2tlZChhLT5wYXRoKSk7CiAJcmVtb3ZlX2ZpbGUobywgMSwgYi0+cGF0aCwgby0+Y2FsbF9kZXB0aCB8fCB3b3VsZF9sb3NlX3VudHJhY2tlZChiLT5wYXRoKSk7CiAKLQltZmlfYzEgPSBtZXJnZV9maWxlX3NwZWNpYWxfbWFya2VycyhvLCBhLCBjMSwgJmNpLT5yZW4xX290aGVyLAotCQkJCQkgICAgby0+YnJhbmNoMSwgYzEtPnBhdGgsCi0JCQkJCSAgICBvLT5icmFuY2gyLCBjaS0+cmVuMV9vdGhlci5wYXRoKTsKLQltZmlfYzIgPSBtZXJnZV9maWxlX3NwZWNpYWxfbWFya2VycyhvLCBiLCAmY2ktPnJlbjJfb3RoZXIsIGMyLAotCQkJCQkgICAgby0+YnJhbmNoMSwgY2ktPnJlbjJfb3RoZXIucGF0aCwKLQkJCQkJICAgIG8tPmJyYW5jaDIsIGMyLT5wYXRoKTsKKwlpZiAobWVyZ2VfZmlsZV9zcGVjaWFsX21hcmtlcnMobywgYSwgYzEsICZjaS0+cmVuMV9vdGhlciwKKwkJCQkgICAgICAgby0+YnJhbmNoMSwgYzEtPnBhdGgsCisJCQkJICAgICAgIG8tPmJyYW5jaDIsIGNpLT5yZW4xX290aGVyLnBhdGgsICZtZmlfYzEpIHx8CisJICAgIG1lcmdlX2ZpbGVfc3BlY2lhbF9tYXJrZXJzKG8sIGIsICZjaS0+cmVuMl9vdGhlciwgYzIsCisJCQkJICAgICAgIG8tPmJyYW5jaDEsIGNpLT5yZW4yX290aGVyLnBhdGgsCisJCQkJICAgICAgIG8tPmJyYW5jaDIsIGMyLT5wYXRoLCAmbWZpX2MyKSkKKwkJcmV0dXJuIC0xOwogCiAJaWYgKG8tPmNhbGxfZGVwdGgpIHsKIAkJLyoKQEAgLTEyNTMsMTkgKzEzMTgsMjUgQEAKIAkJICogYWdhaW4gbGF0ZXIgZm9yIHRoZSBub24tcmVjdXJzaXZlIG1lcmdlLgogCQkgKi8KIAkJcmVtb3ZlX2ZpbGUobywgMCwgcGF0aCwgMCk7Ci0JCXVwZGF0ZV9maWxlKG8sIDAsIG1maV9jMS5zaGEsIG1maV9jMS5tb2RlLCBhLT5wYXRoKTsKLQkJdXBkYXRlX2ZpbGUobywgMCwgbWZpX2MyLnNoYSwgbWZpX2MyLm1vZGUsIGItPnBhdGgpOworCQlyZXQgPSB1cGRhdGVfZmlsZShvLCAwLCAmbWZpX2MxLm9pZCwgbWZpX2MxLm1vZGUsIGEtPnBhdGgpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHVwZGF0ZV9maWxlKG8sIDAsICZtZmlfYzIub2lkLCBtZmlfYzIubW9kZSwKKwkJCQkJICBiLT5wYXRoKTsKIAl9IGVsc2UgewogCQljaGFyICpuZXdfcGF0aDEgPSB1bmlxdWVfcGF0aChvLCBwYXRoLCBjaS0+YnJhbmNoMSk7CiAJCWNoYXIgKm5ld19wYXRoMiA9IHVuaXF1ZV9wYXRoKG8sIHBhdGgsIGNpLT5icmFuY2gyKTsKIAkJb3V0cHV0KG8sIDEsIF8oIlJlbmFtaW5nICVzIHRvICVzIGFuZCAlcyB0byAlcyBpbnN0ZWFkIiksCiAJCSAgICAgICBhLT5wYXRoLCBuZXdfcGF0aDEsIGItPnBhdGgsIG5ld19wYXRoMik7CiAJCXJlbW92ZV9maWxlKG8sIDAsIHBhdGgsIDApOwotCQl1cGRhdGVfZmlsZShvLCAwLCBtZmlfYzEuc2hhLCBtZmlfYzEubW9kZSwgbmV3X3BhdGgxKTsKLQkJdXBkYXRlX2ZpbGUobywgMCwgbWZpX2MyLnNoYSwgbWZpX2MyLm1vZGUsIG5ld19wYXRoMik7CisJCXJldCA9IHVwZGF0ZV9maWxlKG8sIDAsICZtZmlfYzEub2lkLCBtZmlfYzEubW9kZSwgbmV3X3BhdGgxKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSB1cGRhdGVfZmlsZShvLCAwLCAmbWZpX2MyLm9pZCwgbWZpX2MyLm1vZGUsCisJCQkJCSAgbmV3X3BhdGgyKTsKIAkJZnJlZShuZXdfcGF0aDIpOwogCQlmcmVlKG5ld19wYXRoMSk7CiAJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwcm9jZXNzX3JlbmFtZXMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCkBAIC0xMzQzLDcgKzE0MTQsNyBAQAogCQkJY29uc3QgY2hhciAqcmVuMl9kc3QgPSByZW4yLT5wYWlyLT50d28tPnBhdGg7CiAJCQllbnVtIHJlbmFtZV90eXBlIHJlbmFtZV90eXBlOwogCQkJaWYgKHN0cmNtcChyZW4xX3NyYywgcmVuMl9zcmMpICE9IDApCi0JCQkJZGllKCJyZW4xX3NyYyAhPSByZW4yX3NyYyIpOworCQkJCWRpZSgiQlVHOiByZW4xX3NyYyAhPSByZW4yX3NyYyIpOwogCQkJcmVuMi0+ZHN0X2VudHJ5LT5wcm9jZXNzZWQgPSAxOwogCQkJcmVuMi0+cHJvY2Vzc2VkID0gMTsKIAkJCWlmIChzdHJjbXAocmVuMV9kc3QsIHJlbjJfZHN0KSAhPSAwKSB7CkBAIC0xMzc3LDcgKzE0NDgsNyBAQAogCQkJcmVuMiA9IGxvb2t1cC0+dXRpbDsKIAkJCXJlbjJfZHN0ID0gcmVuMi0+cGFpci0+dHdvLT5wYXRoOwogCQkJaWYgKHN0cmNtcChyZW4xX2RzdCwgcmVuMl9kc3QpICE9IDApCi0JCQkJZGllKCJyZW4xX2RzdCAhPSByZW4yX2RzdCIpOworCQkJCWRpZSgiQlVHOiByZW4xX2RzdCAhPSByZW4yX2RzdCIpOwogCiAJCQljbGVhbl9tZXJnZSA9IDA7CiAJCQlyZW4yLT5wcm9jZXNzZWQgPSAxOwpAQCAtMTQyMSwxMyArMTQ5MiwxNSBAQAogCQkJcmVtb3ZlX2ZpbGUobywgMSwgcmVuMV9zcmMsCiAJCQkJICAgIHJlbmFtZWRfc3RhZ2UgPT0gMiB8fCAhd2FzX3RyYWNrZWQocmVuMV9zcmMpKTsKIAotCQkJaGFzaGNweShzcmNfb3RoZXIuc2hhMSwgcmVuMS0+c3JjX2VudHJ5LT5zdGFnZXNbb3RoZXJfc3RhZ2VdLnNoYSk7CisJCQlvaWRjcHkoJnNyY19vdGhlci5vaWQsCisJCQkgICAgICAgJnJlbjEtPnNyY19lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXS5vaWQpOwogCQkJc3JjX290aGVyLm1vZGUgPSByZW4xLT5zcmNfZW50cnktPnN0YWdlc1tvdGhlcl9zdGFnZV0ubW9kZTsKLQkJCWhhc2hjcHkoZHN0X290aGVyLnNoYTEsIHJlbjEtPmRzdF9lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXS5zaGEpOworCQkJb2lkY3B5KCZkc3Rfb3RoZXIub2lkLAorCQkJICAgICAgICZyZW4xLT5kc3RfZW50cnktPnN0YWdlc1tvdGhlcl9zdGFnZV0ub2lkKTsKIAkJCWRzdF9vdGhlci5tb2RlID0gcmVuMS0+ZHN0X2VudHJ5LT5zdGFnZXNbb3RoZXJfc3RhZ2VdLm1vZGU7CiAJCQl0cnlfbWVyZ2UgPSAwOwogCi0JCQlpZiAoc2hhX2VxKHNyY19vdGhlci5zaGExLCBudWxsX3NoYTEpKSB7CisJCQlpZiAob2lkX2VxKCZzcmNfb3RoZXIub2lkLCAmbnVsbF9vaWQpKSB7CiAJCQkJc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8oUkVOQU1FX0RFTEVURSwKIAkJCQkJCQkgICByZW4xLT5wYWlyLAogCQkJCQkJCSAgIE5VTEwsCkBAIC0xNDM5LDcgKzE1MTIsNyBAQAogCQkJCQkJCSAgIE5VTEwsCiAJCQkJCQkJICAgTlVMTCk7CiAJCQl9IGVsc2UgaWYgKChkc3Rfb3RoZXIubW9kZSA9PSByZW4xLT5wYWlyLT50d28tPm1vZGUpICYmCi0JCQkJICAgc2hhX2VxKGRzdF9vdGhlci5zaGExLCByZW4xLT5wYWlyLT50d28tPnNoYTEpKSB7CisJCQkJICAgb2lkX2VxKCZkc3Rfb3RoZXIub2lkLCAmcmVuMS0+cGFpci0+dHdvLT5vaWQpKSB7CiAJCQkJLyoKIAkJCQkgKiBBZGRlZCBmaWxlIG9uIHRoZSBvdGhlciBzaWRlIGlkZW50aWNhbCB0bwogCQkJCSAqIHRoZSBmaWxlIGJlaW5nIHJlbmFtZWQ6IGNsZWFuIG1lcmdlLgpAQCAtMTQ0OCwxMyArMTUyMSwxNCBAQAogCQkJCSAqIHVwZGF0ZV9maWxlX2ZsYWdzKCkgaW5zdGVhZCBvZgogCQkJCSAqIHVwZGF0ZV9maWxlKCkuCiAJCQkJICovCi0JCQkJdXBkYXRlX2ZpbGVfZmxhZ3MobywKLQkJCQkJCSAgcmVuMS0+cGFpci0+dHdvLT5zaGExLAotCQkJCQkJICByZW4xLT5wYWlyLT50d28tPm1vZGUsCi0JCQkJCQkgIHJlbjFfZHN0LAotCQkJCQkJICAxLCAvKiB1cGRhdGVfY2FjaGUgKi8KLQkJCQkJCSAgMCAgLyogdXBkYXRlX3dkICAgICovKTsKLQkJCX0gZWxzZSBpZiAoIXNoYV9lcShkc3Rfb3RoZXIuc2hhMSwgbnVsbF9zaGExKSkgeworCQkJCWlmICh1cGRhdGVfZmlsZV9mbGFncyhvLAorCQkJCQkJICAgICAgJnJlbjEtPnBhaXItPnR3by0+b2lkLAorCQkJCQkJICAgICAgcmVuMS0+cGFpci0+dHdvLT5tb2RlLAorCQkJCQkJICAgICAgcmVuMV9kc3QsCisJCQkJCQkgICAgICAxLCAvKiB1cGRhdGVfY2FjaGUgKi8KKwkJCQkJCSAgICAgIDAgIC8qIHVwZGF0ZV93ZCAgICAqLykpCisJCQkJCWNsZWFuX21lcmdlID0gLTE7CisJCQl9IGVsc2UgaWYgKCFvaWRfZXEoJmRzdF9vdGhlci5vaWQsICZudWxsX29pZCkpIHsKIAkJCQljbGVhbl9tZXJnZSA9IDA7CiAJCQkJdHJ5X21lcmdlID0gMTsKIAkJCQlvdXRwdXQobywgMSwgXygiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAiCkBAIC0xNDYzLDIyICsxNTM3LDMzIEBACiAJCQkJICAgICAgIHJlbjFfZHN0LCBicmFuY2gyKTsKIAkJCQlpZiAoby0+Y2FsbF9kZXB0aCkgewogCQkJCQlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maTsKLQkJCQkJbWZpID0gbWVyZ2VfZmlsZV9vbmUobywgcmVuMV9kc3QsIG51bGxfc2hhMSwgMCwKLQkJCQkJCQkgcmVuMS0+cGFpci0+dHdvLT5zaGExLCByZW4xLT5wYWlyLT50d28tPm1vZGUsCi0JCQkJCQkJIGRzdF9vdGhlci5zaGExLCBkc3Rfb3RoZXIubW9kZSwKLQkJCQkJCQkgYnJhbmNoMSwgYnJhbmNoMik7CisJCQkJCWlmIChtZXJnZV9maWxlX29uZShvLCByZW4xX2RzdCwgJm51bGxfb2lkLCAwLAorCQkJCQkJCSAgICZyZW4xLT5wYWlyLT50d28tPm9pZCwKKwkJCQkJCQkgICByZW4xLT5wYWlyLT50d28tPm1vZGUsCisJCQkJCQkJICAgJmRzdF9vdGhlci5vaWQsCisJCQkJCQkJICAgZHN0X290aGVyLm1vZGUsCisJCQkJCQkJICAgYnJhbmNoMSwgYnJhbmNoMiwgJm1maSkpIHsKKwkJCQkJCWNsZWFuX21lcmdlID0gLTE7CisJCQkJCQlnb3RvIGNsZWFudXBfYW5kX3JldHVybjsKKwkJCQkJfQogCQkJCQlvdXRwdXQobywgMSwgXygiQWRkaW5nIG1lcmdlZCAlcyIpLCByZW4xX2RzdCk7Ci0JCQkJCXVwZGF0ZV9maWxlKG8sIDAsIG1maS5zaGEsIG1maS5tb2RlLCByZW4xX2RzdCk7CisJCQkJCWlmICh1cGRhdGVfZmlsZShvLCAwLCAmbWZpLm9pZCwKKwkJCQkJCQltZmkubW9kZSwgcmVuMV9kc3QpKQorCQkJCQkJY2xlYW5fbWVyZ2UgPSAtMTsKIAkJCQkJdHJ5X21lcmdlID0gMDsKIAkJCQl9IGVsc2UgewogCQkJCQljaGFyICpuZXdfcGF0aCA9IHVuaXF1ZV9wYXRoKG8sIHJlbjFfZHN0LCBicmFuY2gyKTsKIAkJCQkJb3V0cHV0KG8sIDEsIF8oIkFkZGluZyBhcyAlcyBpbnN0ZWFkIiksIG5ld19wYXRoKTsKLQkJCQkJdXBkYXRlX2ZpbGUobywgMCwgZHN0X290aGVyLnNoYTEsIGRzdF9vdGhlci5tb2RlLCBuZXdfcGF0aCk7CisJCQkJCWlmICh1cGRhdGVfZmlsZShvLCAwLCAmZHN0X290aGVyLm9pZCwKKwkJCQkJCQlkc3Rfb3RoZXIubW9kZSwgbmV3X3BhdGgpKQorCQkJCQkJY2xlYW5fbWVyZ2UgPSAtMTsKIAkJCQkJZnJlZShuZXdfcGF0aCk7CiAJCQkJfQogCQkJfSBlbHNlCiAJCQkJdHJ5X21lcmdlID0gMTsKIAorCQkJaWYgKGNsZWFuX21lcmdlIDwgMCkKKwkJCQlnb3RvIGNsZWFudXBfYW5kX3JldHVybjsKIAkJCWlmICh0cnlfbWVyZ2UpIHsKIAkJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqYSwgKmI7CiAJCQkJc3JjX290aGVyLnBhdGggPSAoY2hhciAqKXJlbjFfc3JjOwpAQCAtMTUwNSwzNiArMTU5MCwzOSBAQAogCQkJfQogCQl9CiAJfQorY2xlYW51cF9hbmRfcmV0dXJuOgogCXN0cmluZ19saXN0X2NsZWFyKCZhX2J5X2RzdCwgMCk7CiAJc3RyaW5nX2xpc3RfY2xlYXIoJmJfYnlfZHN0LCAwKTsKIAogCXJldHVybiBjbGVhbl9tZXJnZTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgKnN0YWdlX3NoYShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGEsIHVuc2lnbmVkIG1vZGUpCitzdGF0aWMgc3RydWN0IG9iamVjdF9pZCAqc3RhZ2Vfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdW5zaWduZWQgbW9kZSkKIHsKLQlyZXR1cm4gKGlzX251bGxfc2hhMShzaGEpIHx8IG1vZGUgPT0gMCkgPyBOVUxMOiAodW5zaWduZWQgY2hhciAqKXNoYTsKKwlyZXR1cm4gKGlzX251bGxfb2lkKG9pZCkgfHwgbW9kZSA9PSAwKSA/IE5VTEw6IChzdHJ1Y3Qgb2JqZWN0X2lkICopb2lkOwogfQogCi1zdGF0aWMgaW50IHJlYWRfc2hhMV9zdHJidWYoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHN0cmJ1ZiAqZHN0KQorc3RhdGljIGludCByZWFkX29pZF9zdHJidWYoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgc3RyYnVmICpkc3QpCiB7CiAJdm9pZCAqYnVmOwogCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwlidWYgPSByZWFkX3NoYTFfZmlsZShvaWQtPmhhc2gsICZ0eXBlLCAmc2l6ZSk7CiAJaWYgKCFidWYpCi0JCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVhZCBvYmplY3QgJXMiKSwgc2hhMV90b19oZXgoc2hhMSkpOworCQlyZXR1cm4gZXJyKG8sIF8oImNhbm5vdCByZWFkIG9iamVjdCAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOwogCWlmICh0eXBlICE9IE9CSl9CTE9CKSB7CiAJCWZyZWUoYnVmKTsKLQkJcmV0dXJuIGVycm9yKF8oIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIiksIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJcmV0dXJuIGVycihvLCBfKCJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIpLCBvaWRfdG9faGV4KG9pZCkpOwogCX0KIAlzdHJidWZfYXR0YWNoKGRzdCwgYnVmLCBzaXplLCBzaXplICsgMSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmxvYl91bmNoYW5nZWQoY29uc3QgdW5zaWduZWQgY2hhciAqb19zaGEsCitzdGF0aWMgaW50IGJsb2JfdW5jaGFuZ2VkKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9fb2lkLAogCQkJICB1bnNpZ25lZCBvX21vZGUsCi0JCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFfc2hhLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICphX29pZCwKIAkJCSAgdW5zaWduZWQgYV9tb2RlLAogCQkJICBpbnQgcmVub3JtYWxpemUsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CkBAIC0xNTQ0LDEzICsxNjMyLDEzIEBACiAKIAlpZiAoYV9tb2RlICE9IG9fbW9kZSkKIAkJcmV0dXJuIDA7Ci0JaWYgKHNoYV9lcShvX3NoYSwgYV9zaGEpKQorCWlmIChvaWRfZXEob19vaWQsIGFfb2lkKSkKIAkJcmV0dXJuIDE7CiAJaWYgKCFyZW5vcm1hbGl6ZSkKIAkJcmV0dXJuIDA7CiAKLQlhc3NlcnQob19zaGEgJiYgYV9zaGEpOwotCWlmIChyZWFkX3NoYTFfc3RyYnVmKG9fc2hhLCAmbykgfHwgcmVhZF9zaGExX3N0cmJ1ZihhX3NoYSwgJmEpKQorCWFzc2VydChvX29pZCAmJiBhX29pZCk7CisJaWYgKHJlYWRfb2lkX3N0cmJ1ZihvcHQsIG9fb2lkLCAmbykgfHwgcmVhZF9vaWRfc3RyYnVmKG9wdCwgYV9vaWQsICZhKSkKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJLyoKIAkgKiBOb3RlOiBiaW5hcnkgfCBpcyB1c2VkIHNvIHRoYXQgYm90aCByZW5vcm1hbGl6YXRpb25zIGFyZQpAQCAtMTU2NywyNSArMTY1NSwyNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV9tb2RpZnlfZGVsZXRlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorc3RhdGljIGludCBoYW5kbGVfbW9kaWZ5X2RlbGV0ZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKIAkJCQkgY29uc3QgY2hhciAqcGF0aCwKLQkJCQkgdW5zaWduZWQgY2hhciAqb19zaGEsIGludCBvX21vZGUsCi0JCQkJIHVuc2lnbmVkIGNoYXIgKmFfc2hhLCBpbnQgYV9tb2RlLAotCQkJCSB1bnNpZ25lZCBjaGFyICpiX3NoYSwgaW50IGJfbW9kZSkKKwkJCQkgc3RydWN0IG9iamVjdF9pZCAqb19vaWQsIGludCBvX21vZGUsCisJCQkJIHN0cnVjdCBvYmplY3RfaWQgKmFfb2lkLCBpbnQgYV9tb2RlLAorCQkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICpiX29pZCwgaW50IGJfbW9kZSkKIHsKLQloYW5kbGVfY2hhbmdlX2RlbGV0ZShvLAotCQkJICAgICBwYXRoLAotCQkJICAgICBvX3NoYSwgb19tb2RlLAotCQkJICAgICBhX3NoYSwgYV9tb2RlLAotCQkJICAgICBiX3NoYSwgYl9tb2RlLAotCQkJICAgICBfKCJtb2RpZnkiKSwgXygibW9kaWZpZWQiKSk7CisJcmV0dXJuIGhhbmRsZV9jaGFuZ2VfZGVsZXRlKG8sCisJCQkJICAgIHBhdGgsCisJCQkJICAgIG9fb2lkLCBvX21vZGUsCisJCQkJICAgIGFfb2lkLCBhX21vZGUsCisJCQkJICAgIGJfb2lkLCBiX21vZGUsCisJCQkJICAgIF8oIm1vZGlmeSIpLCBfKCJtb2RpZmllZCIpKTsKIH0KIAogc3RhdGljIGludCBtZXJnZV9jb250ZW50KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAogCQkJIGNvbnN0IGNoYXIgKnBhdGgsCi0JCQkgdW5zaWduZWQgY2hhciAqb19zaGEsIGludCBvX21vZGUsCi0JCQkgdW5zaWduZWQgY2hhciAqYV9zaGEsIGludCBhX21vZGUsCi0JCQkgdW5zaWduZWQgY2hhciAqYl9zaGEsIGludCBiX21vZGUsCisJCQkgc3RydWN0IG9iamVjdF9pZCAqb19vaWQsIGludCBvX21vZGUsCisJCQkgc3RydWN0IG9iamVjdF9pZCAqYV9vaWQsIGludCBhX21vZGUsCisJCQkgc3RydWN0IG9iamVjdF9pZCAqYl9vaWQsIGludCBiX21vZGUsCiAJCQkgc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpyZW5hbWVfY29uZmxpY3RfaW5mbykKIHsKIAljb25zdCBjaGFyICpyZWFzb24gPSBfKCJjb250ZW50Iik7CkBAIC0xNTk0LDE2ICsxNjgyLDE2IEBACiAJc3RydWN0IGRpZmZfZmlsZXNwZWMgb25lLCBhLCBiOwogCXVuc2lnbmVkIGRmX2NvbmZsaWN0X3JlbWFpbnMgPSAwOwogCi0JaWYgKCFvX3NoYSkgeworCWlmICghb19vaWQpIHsKIAkJcmVhc29uID0gXygiYWRkL2FkZCIpOwotCQlvX3NoYSA9ICh1bnNpZ25lZCBjaGFyICopbnVsbF9zaGExOworCQlvX29pZCA9IChzdHJ1Y3Qgb2JqZWN0X2lkICopJm51bGxfb2lkOwogCX0KIAlvbmUucGF0aCA9IGEucGF0aCA9IGIucGF0aCA9IChjaGFyICopcGF0aDsKLQloYXNoY3B5KG9uZS5zaGExLCBvX3NoYSk7CisJb2lkY3B5KCZvbmUub2lkLCBvX29pZCk7CiAJb25lLm1vZGUgPSBvX21vZGU7Ci0JaGFzaGNweShhLnNoYTEsIGFfc2hhKTsKKwlvaWRjcHkoJmEub2lkLCBhX29pZCk7CiAJYS5tb2RlID0gYV9tb2RlOwotCWhhc2hjcHkoYi5zaGExLCBiX3NoYSk7CisJb2lkY3B5KCZiLm9pZCwgYl9vaWQpOwogCWIubW9kZSA9IGJfbW9kZTsKIAogCWlmIChyZW5hbWVfY29uZmxpY3RfaW5mbykgewpAQCAtMTYyMiwxMiArMTcxMCwxMyBAQAogCQlpZiAoZGlyX2luX3dheShwYXRoLCAhby0+Y2FsbF9kZXB0aCkpCiAJCQlkZl9jb25mbGljdF9yZW1haW5zID0gMTsKIAl9Ci0JbWZpID0gbWVyZ2VfZmlsZV9zcGVjaWFsX21hcmtlcnMobywgJm9uZSwgJmEsICZiLAotCQkJCQkgby0+YnJhbmNoMSwgcGF0aDEsCi0JCQkJCSBvLT5icmFuY2gyLCBwYXRoMik7CisJaWYgKG1lcmdlX2ZpbGVfc3BlY2lhbF9tYXJrZXJzKG8sICZvbmUsICZhLCAmYiwKKwkJCQkgICAgICAgby0+YnJhbmNoMSwgcGF0aDEsCisJCQkJICAgICAgIG8tPmJyYW5jaDIsIHBhdGgyLCAmbWZpKSkKKwkJcmV0dXJuIC0xOwogCiAJaWYgKG1maS5jbGVhbiAmJiAhZGZfY29uZmxpY3RfcmVtYWlucyAmJgotCSAgICBzaGFfZXEobWZpLnNoYSwgYV9zaGEpICYmIG1maS5tb2RlID09IGFfbW9kZSkgeworCSAgICBvaWRfZXEoJm1maS5vaWQsIGFfb2lkKSAmJiBtZmkubW9kZSA9PSBhX21vZGUpIHsKIAkJaW50IHBhdGhfcmVuYW1lZF9vdXRzaWRlX0hFQUQ7CiAJCW91dHB1dChvLCAzLCBfKCJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiKSwgcGF0aCk7CiAJCS8qCkBAIC0xNjM4LDcgKzE3MjcsNyBAQAogCQkgKi8KIAkJcGF0aF9yZW5hbWVkX291dHNpZGVfSEVBRCA9ICFwYXRoMiB8fCAhc3RyY21wKHBhdGgsIHBhdGgyKTsKIAkJaWYgKCFwYXRoX3JlbmFtZWRfb3V0c2lkZV9IRUFEKSB7Ci0JCQlhZGRfY2FjaGVpbmZvKG1maS5tb2RlLCBtZmkuc2hhLCBwYXRoLAorCQkJYWRkX2NhY2hlaW5mbyhvLCBtZmkubW9kZSwgJm1maS5vaWQsIHBhdGgsCiAJCQkJICAgICAgMCwgKCFvLT5jYWxsX2RlcHRoKSwgMCk7CiAJCQlyZXR1cm4gbWZpLmNsZWFuOwogCQl9CkBAIC0xNjUxLDcgKzE3NDAsOCBAQAogCQlvdXRwdXQobywgMSwgXygiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiKSwKIAkJCQlyZWFzb24sIHBhdGgpOwogCQlpZiAocmVuYW1lX2NvbmZsaWN0X2luZm8gJiYgIWRmX2NvbmZsaWN0X3JlbWFpbnMpCi0JCQl1cGRhdGVfc3RhZ2VzKHBhdGgsICZvbmUsICZhLCAmYik7CisJCQlpZiAodXBkYXRlX3N0YWdlcyhvLCBwYXRoLCAmb25lLCAmYSwgJmIpKQorCQkJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoZGZfY29uZmxpY3RfcmVtYWlucykgewpAQCAtMTY1OSwzMCArMTc0OSwzMyBAQAogCQlpZiAoby0+Y2FsbF9kZXB0aCkgewogCQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKTsKIAkJfSBlbHNlIHsKLQkJCWlmICghbWZpLmNsZWFuKQotCQkJCXVwZGF0ZV9zdGFnZXMocGF0aCwgJm9uZSwgJmEsICZiKTsKLQkJCWVsc2UgeworCQkJaWYgKCFtZmkuY2xlYW4pIHsKKwkJCQlpZiAodXBkYXRlX3N0YWdlcyhvLCBwYXRoLCAmb25lLCAmYSwgJmIpKQorCQkJCQlyZXR1cm4gLTE7CisJCQl9IGVsc2UgewogCQkJCWludCBmaWxlX2Zyb21fc3RhZ2UyID0gd2FzX3RyYWNrZWQocGF0aCk7CiAJCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgbWVyZ2VkOwotCQkJCWhhc2hjcHkobWVyZ2VkLnNoYTEsIG1maS5zaGEpOworCQkJCW9pZGNweSgmbWVyZ2VkLm9pZCwgJm1maS5vaWQpOwogCQkJCW1lcmdlZC5tb2RlID0gbWZpLm1vZGU7CiAKLQkJCQl1cGRhdGVfc3RhZ2VzKHBhdGgsIE5VTEwsCi0JCQkJCSAgICAgIGZpbGVfZnJvbV9zdGFnZTIgPyAmbWVyZ2VkIDogTlVMTCwKLQkJCQkJICAgICAgZmlsZV9mcm9tX3N0YWdlMiA/IE5VTEwgOiAmbWVyZ2VkKTsKKwkJCQlpZiAodXBkYXRlX3N0YWdlcyhvLCBwYXRoLCBOVUxMLAorCQkJCQkJICBmaWxlX2Zyb21fc3RhZ2UyID8gJm1lcmdlZCA6IE5VTEwsCisJCQkJCQkgIGZpbGVfZnJvbV9zdGFnZTIgPyBOVUxMIDogJm1lcmdlZCkpCisJCQkJCXJldHVybiAtMTsKIAkJCX0KIAogCQl9CiAJCW5ld19wYXRoID0gdW5pcXVlX3BhdGgobywgcGF0aCwgcmVuYW1lX2NvbmZsaWN0X2luZm8tPmJyYW5jaDEpOwogCQlvdXRwdXQobywgMSwgXygiQWRkaW5nIGFzICVzIGluc3RlYWQiKSwgbmV3X3BhdGgpOwotCQl1cGRhdGVfZmlsZShvLCAwLCBtZmkuc2hhLCBtZmkubW9kZSwgbmV3X3BhdGgpOworCQlpZiAodXBkYXRlX2ZpbGUobywgMCwgJm1maS5vaWQsIG1maS5tb2RlLCBuZXdfcGF0aCkpIHsKKwkJCWZyZWUobmV3X3BhdGgpOworCQkJcmV0dXJuIC0xOworCQl9CiAJCWZyZWUobmV3X3BhdGgpOwogCQltZmkuY2xlYW4gPSAwOwotCX0gZWxzZSB7Ci0JCXVwZGF0ZV9maWxlKG8sIG1maS5jbGVhbiwgbWZpLnNoYSwgbWZpLm1vZGUsIHBhdGgpOwotCX0KKwl9IGVsc2UgaWYgKHVwZGF0ZV9maWxlKG8sIG1maS5jbGVhbiwgJm1maS5vaWQsIG1maS5tb2RlLCBwYXRoKSkKKwkJcmV0dXJuIC0xOwogCXJldHVybiBtZmkuY2xlYW47Ci0KIH0KIAogLyogUGVyIGVudHJ5IG1lcmdlIGZ1bmN0aW9uICovCkBAIC0xNjk0LDkgKzE3ODcsOSBAQAogCXVuc2lnbmVkIG9fbW9kZSA9IGVudHJ5LT5zdGFnZXNbMV0ubW9kZTsKIAl1bnNpZ25lZCBhX21vZGUgPSBlbnRyeS0+c3RhZ2VzWzJdLm1vZGU7CiAJdW5zaWduZWQgYl9tb2RlID0gZW50cnktPnN0YWdlc1szXS5tb2RlOwotCXVuc2lnbmVkIGNoYXIgKm9fc2hhID0gc3RhZ2Vfc2hhKGVudHJ5LT5zdGFnZXNbMV0uc2hhLCBvX21vZGUpOwotCXVuc2lnbmVkIGNoYXIgKmFfc2hhID0gc3RhZ2Vfc2hhKGVudHJ5LT5zdGFnZXNbMl0uc2hhLCBhX21vZGUpOwotCXVuc2lnbmVkIGNoYXIgKmJfc2hhID0gc3RhZ2Vfc2hhKGVudHJ5LT5zdGFnZXNbM10uc2hhLCBiX21vZGUpOworCXN0cnVjdCBvYmplY3RfaWQgKm9fb2lkID0gc3RhZ2Vfb2lkKCZlbnRyeS0+c3RhZ2VzWzFdLm9pZCwgb19tb2RlKTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICphX29pZCA9IHN0YWdlX29pZCgmZW50cnktPnN0YWdlc1syXS5vaWQsIGFfbW9kZSk7CisJc3RydWN0IG9iamVjdF9pZCAqYl9vaWQgPSBzdGFnZV9vaWQoJmVudHJ5LT5zdGFnZXNbM10ub2lkLCBiX21vZGUpOwogCiAJZW50cnktPnByb2Nlc3NlZCA9IDE7CiAJaWYgKGVudHJ5LT5yZW5hbWVfY29uZmxpY3RfaW5mbykgewpAQCAtMTcwNSw2NiArMTc5OCw3MSBAQAogCQljYXNlIFJFTkFNRV9OT1JNQUw6CiAJCWNhc2UgUkVOQU1FX09ORV9GSUxFX1RPX09ORToKIAkJCWNsZWFuX21lcmdlID0gbWVyZ2VfY29udGVudChvLCBwYXRoLAotCQkJCQkJICAgIG9fc2hhLCBvX21vZGUsIGFfc2hhLCBhX21vZGUsIGJfc2hhLCBiX21vZGUsCisJCQkJCQkgICAgb19vaWQsIG9fbW9kZSwgYV9vaWQsIGFfbW9kZSwgYl9vaWQsIGJfbW9kZSwKIAkJCQkJCSAgICBjb25mbGljdF9pbmZvKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFTkFNRV9ERUxFVEU6CiAJCQljbGVhbl9tZXJnZSA9IDA7Ci0JCQljb25mbGljdF9yZW5hbWVfZGVsZXRlKG8sIGNvbmZsaWN0X2luZm8tPnBhaXIxLAotCQkJCQkgICAgICAgY29uZmxpY3RfaW5mby0+YnJhbmNoMSwKLQkJCQkJICAgICAgIGNvbmZsaWN0X2luZm8tPmJyYW5jaDIpOworCQkJaWYgKGNvbmZsaWN0X3JlbmFtZV9kZWxldGUobywKKwkJCQkJCSAgIGNvbmZsaWN0X2luZm8tPnBhaXIxLAorCQkJCQkJICAgY29uZmxpY3RfaW5mby0+YnJhbmNoMSwKKwkJCQkJCSAgIGNvbmZsaWN0X2luZm8tPmJyYW5jaDIpKQorCQkJCWNsZWFuX21lcmdlID0gLTE7CiAJCQlicmVhazsKIAkJY2FzZSBSRU5BTUVfT05FX0ZJTEVfVE9fVFdPOgogCQkJY2xlYW5fbWVyZ2UgPSAwOwotCQkJY29uZmxpY3RfcmVuYW1lX3JlbmFtZV8xdG8yKG8sIGNvbmZsaWN0X2luZm8pOworCQkJaWYgKGNvbmZsaWN0X3JlbmFtZV9yZW5hbWVfMXRvMihvLCBjb25mbGljdF9pbmZvKSkKKwkJCQljbGVhbl9tZXJnZSA9IC0xOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVOQU1FX1RXT19GSUxFU19UT19PTkU6CiAJCQljbGVhbl9tZXJnZSA9IDA7Ci0JCQljb25mbGljdF9yZW5hbWVfcmVuYW1lXzJ0bzEobywgY29uZmxpY3RfaW5mbyk7CisJCQlpZiAoY29uZmxpY3RfcmVuYW1lX3JlbmFtZV8ydG8xKG8sIGNvbmZsaWN0X2luZm8pKQorCQkJCWNsZWFuX21lcmdlID0gLTE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVudHJ5LT5wcm9jZXNzZWQgPSAwOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKG9fc2hhICYmICghYV9zaGEgfHwgIWJfc2hhKSkgeworCX0gZWxzZSBpZiAob19vaWQgJiYgKCFhX29pZCB8fCAhYl9vaWQpKSB7CiAJCS8qIENhc2UgQTogRGVsZXRlZCBpbiBvbmUgKi8KLQkJaWYgKCghYV9zaGEgJiYgIWJfc2hhKSB8fAotCQkgICAgKCFiX3NoYSAmJiBibG9iX3VuY2hhbmdlZChvX3NoYSwgb19tb2RlLCBhX3NoYSwgYV9tb2RlLCBub3JtYWxpemUsIHBhdGgpKSB8fAotCQkgICAgKCFhX3NoYSAmJiBibG9iX3VuY2hhbmdlZChvX3NoYSwgb19tb2RlLCBiX3NoYSwgYl9tb2RlLCBub3JtYWxpemUsIHBhdGgpKSkgeworCQlpZiAoKCFhX29pZCAmJiAhYl9vaWQpIHx8CisJCSAgICAoIWJfb2lkICYmIGJsb2JfdW5jaGFuZ2VkKG8sIG9fb2lkLCBvX21vZGUsIGFfb2lkLCBhX21vZGUsIG5vcm1hbGl6ZSwgcGF0aCkpIHx8CisJCSAgICAoIWFfb2lkICYmIGJsb2JfdW5jaGFuZ2VkKG8sIG9fb2lkLCBvX21vZGUsIGJfb2lkLCBiX21vZGUsIG5vcm1hbGl6ZSwgcGF0aCkpKSB7CiAJCQkvKiBEZWxldGVkIGluIGJvdGggb3IgZGVsZXRlZCBpbiBvbmUgYW5kCiAJCQkgKiB1bmNoYW5nZWQgaW4gdGhlIG90aGVyICovCi0JCQlpZiAoYV9zaGEpCisJCQlpZiAoYV9vaWQpCiAJCQkJb3V0cHV0KG8sIDIsIF8oIlJlbW92aW5nICVzIiksIHBhdGgpOwogCQkJLyogZG8gbm90IHRvdWNoIHdvcmtpbmcgZmlsZSBpZiBpdCBkaWQgbm90IGV4aXN0ICovCi0JCQlyZW1vdmVfZmlsZShvLCAxLCBwYXRoLCAhYV9zaGEpOworCQkJcmVtb3ZlX2ZpbGUobywgMSwgcGF0aCwgIWFfb2lkKTsKIAkJfSBlbHNlIHsKIAkJCS8qIE1vZGlmeS9kZWxldGU7IGRlbGV0ZWQgc2lkZSBtYXkgaGF2ZSBwdXQgYSBkaXJlY3RvcnkgaW4gdGhlIHdheSAqLwogCQkJY2xlYW5fbWVyZ2UgPSAwOwotCQkJaGFuZGxlX21vZGlmeV9kZWxldGUobywgcGF0aCwgb19zaGEsIG9fbW9kZSwKLQkJCQkJICAgICBhX3NoYSwgYV9tb2RlLCBiX3NoYSwgYl9tb2RlKTsKKwkJCWlmIChoYW5kbGVfbW9kaWZ5X2RlbGV0ZShvLCBwYXRoLCBvX29pZCwgb19tb2RlLAorCQkJCQkJIGFfb2lkLCBhX21vZGUsIGJfb2lkLCBiX21vZGUpKQorCQkJCWNsZWFuX21lcmdlID0gLTE7CiAJCX0KLQl9IGVsc2UgaWYgKCghb19zaGEgJiYgYV9zaGEgJiYgIWJfc2hhKSB8fAotCQkgICAoIW9fc2hhICYmICFhX3NoYSAmJiBiX3NoYSkpIHsKKwl9IGVsc2UgaWYgKCghb19vaWQgJiYgYV9vaWQgJiYgIWJfb2lkKSB8fAorCQkgICAoIW9fb2lkICYmICFhX29pZCAmJiBiX29pZCkpIHsKIAkJLyogQ2FzZSBCOiBBZGRlZCBpbiBvbmUuICovCiAJCS8qIFtub3RoaW5nfGRpcmVjdG9yeV0gLT4gKFtub3RoaW5nfGRpcmVjdG9yeV0sIGZpbGUpICovCiAKIAkJY29uc3QgY2hhciAqYWRkX2JyYW5jaDsKIAkJY29uc3QgY2hhciAqb3RoZXJfYnJhbmNoOwogCQl1bnNpZ25lZCBtb2RlOwotCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGE7CisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKIAkJY29uc3QgY2hhciAqY29uZjsKIAotCQlpZiAoYV9zaGEpIHsKKwkJaWYgKGFfb2lkKSB7CiAJCQlhZGRfYnJhbmNoID0gby0+YnJhbmNoMTsKIAkJCW90aGVyX2JyYW5jaCA9IG8tPmJyYW5jaDI7CiAJCQltb2RlID0gYV9tb2RlOwotCQkJc2hhID0gYV9zaGE7CisJCQlvaWQgPSBhX29pZDsKIAkJCWNvbmYgPSBfKCJmaWxlL2RpcmVjdG9yeSIpOwogCQl9IGVsc2UgewogCQkJYWRkX2JyYW5jaCA9IG8tPmJyYW5jaDI7CiAJCQlvdGhlcl9icmFuY2ggPSBvLT5icmFuY2gxOwogCQkJbW9kZSA9IGJfbW9kZTsKLQkJCXNoYSA9IGJfc2hhOworCQkJb2lkID0gYl9vaWQ7CiAJCQljb25mID0gXygiZGlyZWN0b3J5L2ZpbGUiKTsKIAkJfQogCQlpZiAoZGlyX2luX3dheShwYXRoLCAhby0+Y2FsbF9kZXB0aCkpIHsKQEAgLTE3NzMsMjkgKzE4NzEsMzEgQEAKIAkJCW91dHB1dChvLCAxLCBfKCJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuICIKIAkJCSAgICAgICAiQWRkaW5nICVzIGFzICVzIiksCiAJCQkgICAgICAgY29uZiwgcGF0aCwgb3RoZXJfYnJhbmNoLCBwYXRoLCBuZXdfcGF0aCk7Ci0JCQl1cGRhdGVfZmlsZShvLCAwLCBzaGEsIG1vZGUsIG5ld19wYXRoKTsKLQkJCWlmIChvLT5jYWxsX2RlcHRoKQorCQkJaWYgKHVwZGF0ZV9maWxlKG8sIDAsIG9pZCwgbW9kZSwgbmV3X3BhdGgpKQorCQkJCWNsZWFuX21lcmdlID0gLTE7CisJCQllbHNlIGlmIChvLT5jYWxsX2RlcHRoKQogCQkJCXJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCk7CiAJCQlmcmVlKG5ld19wYXRoKTsKIAkJfSBlbHNlIHsKIAkJCW91dHB1dChvLCAyLCBfKCJBZGRpbmcgJXMiKSwgcGF0aCk7CiAJCQkvKiBkbyBub3Qgb3ZlcndyaXRlIGZpbGUgaWYgYWxyZWFkeSBwcmVzZW50ICovCi0JCQl1cGRhdGVfZmlsZV9mbGFncyhvLCBzaGEsIG1vZGUsIHBhdGgsIDEsICFhX3NoYSk7CisJCQlpZiAodXBkYXRlX2ZpbGVfZmxhZ3Mobywgb2lkLCBtb2RlLCBwYXRoLCAxLCAhYV9vaWQpKQorCQkJCWNsZWFuX21lcmdlID0gLTE7CiAJCX0KLQl9IGVsc2UgaWYgKGFfc2hhICYmIGJfc2hhKSB7CisJfSBlbHNlIGlmIChhX29pZCAmJiBiX29pZCkgewogCQkvKiBDYXNlIEM6IEFkZGVkIGluIGJvdGggKGNoZWNrIGZvciBzYW1lIHBlcm1pc3Npb25zKSBhbmQgKi8KIAkJLyogY2FzZSBEOiBNb2RpZmllZCBpbiBib3RoLCBidXQgZGlmZmVyZW50bHkuICovCiAJCWNsZWFuX21lcmdlID0gbWVyZ2VfY29udGVudChvLCBwYXRoLAotCQkJCQkgICAgb19zaGEsIG9fbW9kZSwgYV9zaGEsIGFfbW9kZSwgYl9zaGEsIGJfbW9kZSwKKwkJCQkJICAgIG9fb2lkLCBvX21vZGUsIGFfb2lkLCBhX21vZGUsIGJfb2lkLCBiX21vZGUsCiAJCQkJCSAgICBOVUxMKTsKLQl9IGVsc2UgaWYgKCFvX3NoYSAmJiAhYV9zaGEgJiYgIWJfc2hhKSB7CisJfSBlbHNlIGlmICghb19vaWQgJiYgIWFfb2lkICYmICFiX29pZCkgewogCQkvKgogCQkgKiB0aGlzIGVudHJ5IHdhcyBkZWxldGVkIGFsdG9nZXRoZXIuIGFfbW9kZSA9PSAwIG1lYW5zCiAJCSAqIHdlIGhhZCB0aGF0IHBhdGggYW5kIHdhbnQgdG8gYWN0aXZlbHkgcmVtb3ZlIGl0LgogCQkgKi8KIAkJcmVtb3ZlX2ZpbGUobywgMSwgcGF0aCwgIWFfbW9kZSk7CiAJfSBlbHNlCi0JCWRpZShfKCJGYXRhbCBtZXJnZSBmYWlsdXJlLCBzaG91bGRuJ3QgaGFwcGVuLiIpKTsKKwkJZGllKCJCVUc6IGZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIik7CiAKIAlyZXR1cm4gY2xlYW5fbWVyZ2U7CiB9CkBAIC0xODEzLDcgKzE5MTMsNyBAQAogCQljb21tb24gPSBzaGlmdF90cmVlX29iamVjdChoZWFkLCBjb21tb24sIG8tPnN1YnRyZWVfc2hpZnQpOwogCX0KIAotCWlmIChzaGFfZXEoY29tbW9uLT5vYmplY3Qub2lkLmhhc2gsIG1lcmdlLT5vYmplY3Qub2lkLmhhc2gpKSB7CisJaWYgKG9pZF9lcSgmY29tbW9uLT5vYmplY3Qub2lkLCAmbWVyZ2UtPm9iamVjdC5vaWQpKSB7CiAJCW91dHB1dChvLCAwLCBfKCJBbHJlYWR5IHVwLXRvLWRhdGUhIikpOwogCQkqcmVzdWx0ID0gaGVhZDsKIAkJcmV0dXJuIDE7CkBAIC0xODIzLDExICsxOTIzLDEwIEBACiAKIAlpZiAoY29kZSAhPSAwKSB7CiAJCWlmIChzaG93KG8sIDQpIHx8IG8tPmNhbGxfZGVwdGgpCi0JCQlkaWUoXygibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIiksCisJCQllcnIobywgXygibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIiksCiAJCQkgICAgb2lkX3RvX2hleCgmaGVhZC0+b2JqZWN0Lm9pZCksCiAJCQkgICAgb2lkX3RvX2hleCgmbWVyZ2UtPm9iamVjdC5vaWQpKTsKLQkJZWxzZQotCQkJZXhpdCgxMjgpOworCQlyZXR1cm4gLTE7CiAJfQogCiAJaWYgKHVubWVyZ2VkX2NhY2hlKCkpIHsKQEAgLTE4NDMsMTcgKzE5NDIsMjMgQEAKIAkJcmVfaGVhZCAgPSBnZXRfcmVuYW1lcyhvLCBoZWFkLCBjb21tb24sIGhlYWQsIG1lcmdlLCBlbnRyaWVzKTsKIAkJcmVfbWVyZ2UgPSBnZXRfcmVuYW1lcyhvLCBtZXJnZSwgY29tbW9uLCBoZWFkLCBtZXJnZSwgZW50cmllcyk7CiAJCWNsZWFuID0gcHJvY2Vzc19yZW5hbWVzKG8sIHJlX2hlYWQsIHJlX21lcmdlKTsKKwkJaWYgKGNsZWFuIDwgMCkKKwkJCXJldHVybiBjbGVhbjsKIAkJZm9yIChpID0gZW50cmllcy0+bnItMTsgMCA8PSBpOyBpLS0pIHsKIAkJCWNvbnN0IGNoYXIgKnBhdGggPSBlbnRyaWVzLT5pdGVtc1tpXS5zdHJpbmc7CiAJCQlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZSA9IGVudHJpZXMtPml0ZW1zW2ldLnV0aWw7Ci0JCQlpZiAoIWUtPnByb2Nlc3NlZAotCQkJCSYmICFwcm9jZXNzX2VudHJ5KG8sIHBhdGgsIGUpKQotCQkJCWNsZWFuID0gMDsKKwkJCWlmICghZS0+cHJvY2Vzc2VkKSB7CisJCQkJaW50IHJldCA9IHByb2Nlc3NfZW50cnkobywgcGF0aCwgZSk7CisJCQkJaWYgKCFyZXQpCisJCQkJCWNsZWFuID0gMDsKKwkJCQllbHNlIGlmIChyZXQgPCAwKQorCQkJCQlyZXR1cm4gcmV0OworCQkJfQogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLT5ucjsgaSsrKSB7CiAJCQlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZSA9IGVudHJpZXMtPml0ZW1zW2ldLnV0aWw7CiAJCQlpZiAoIWUtPnByb2Nlc3NlZCkKLQkJCQlkaWUoXygiVW5wcm9jZXNzZWQgcGF0aD8/PyAlcyIpLAorCQkJCWRpZSgiQlVHOiB1bnByb2Nlc3NlZCBwYXRoPz8/ICVzIiwKIAkJCQkgICAgZW50cmllcy0+aXRlbXNbaV0uc3RyaW5nKTsKIAkJfQogCkBAIC0xODY4LDggKzE5NzMsOCBAQAogCWVsc2UKIAkJY2xlYW4gPSAxOwogCi0JaWYgKG8tPmNhbGxfZGVwdGgpCi0JCSpyZXN1bHQgPSB3cml0ZV90cmVlX2Zyb21fbWVtb3J5KG8pOworCWlmIChvLT5jYWxsX2RlcHRoICYmICEoKnJlc3VsdCA9IHdyaXRlX3RyZWVfZnJvbV9tZW1vcnkobykpKQorCQlyZXR1cm4gLTE7CiAKIAlyZXR1cm4gY2xlYW47CiB9CkBAIC0xOTM1LDIzICsyMDQwLDI1IEBACiAJCS8qCiAJCSAqIFdoZW4gdGhlIG1lcmdlIGZhaWxzLCB0aGUgcmVzdWx0IGNvbnRhaW5zIGZpbGVzCiAJCSAqIHdpdGggY29uZmxpY3QgbWFya2Vycy4gVGhlIGNsZWFubmVzcyBmbGFnIGlzCi0JCSAqIGlnbm9yZWQsIGl0IHdhcyBuZXZlciBhY3R1YWxseSB1c2VkLCBhcyByZXN1bHQgb2YKLQkJICogbWVyZ2VfdHJlZXMgaGFzIGFsd2F5cyBvdmVyd3JpdHRlbiBpdDogdGhlIGNvbW1pdHRlZAotCQkgKiAiY29uZmxpY3RzIiB3ZXJlIGFscmVhZHkgcmVzb2x2ZWQuCisJCSAqIGlnbm9yZWQgKHVubGVzcyBpbmRpY2F0aW5nIGFuIGVycm9yKSwgaXQgd2FzIG5ldmVyCisJCSAqIGFjdHVhbGx5IHVzZWQsIGFzIHJlc3VsdCBvZiBtZXJnZV90cmVlcyBoYXMgYWx3YXlzCisJCSAqIG92ZXJ3cml0dGVuIGl0OiB0aGUgY29tbWl0dGVkICJjb25mbGljdHMiIHdlcmUKKwkJICogYWxyZWFkeSByZXNvbHZlZC4KIAkJICovCiAJCWRpc2NhcmRfY2FjaGUoKTsKIAkJc2F2ZWRfYjEgPSBvLT5icmFuY2gxOwogCQlzYXZlZF9iMiA9IG8tPmJyYW5jaDI7CiAJCW8tPmJyYW5jaDEgPSAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxIjsKIAkJby0+YnJhbmNoMiA9ICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIiOwotCQltZXJnZV9yZWN1cnNpdmUobywgbWVyZ2VkX2NvbW1vbl9hbmNlc3RvcnMsIGl0ZXItPml0ZW0sCi0JCQkJTlVMTCwgJm1lcmdlZF9jb21tb25fYW5jZXN0b3JzKTsKKwkJaWYgKG1lcmdlX3JlY3Vyc2l2ZShvLCBtZXJnZWRfY29tbW9uX2FuY2VzdG9ycywgaXRlci0+aXRlbSwKKwkJCQkgICAgTlVMTCwgJm1lcmdlZF9jb21tb25fYW5jZXN0b3JzKSA8IDApCisJCQlyZXR1cm4gLTE7CiAJCW8tPmJyYW5jaDEgPSBzYXZlZF9iMTsKIAkJby0+YnJhbmNoMiA9IHNhdmVkX2IyOwogCQlvLT5jYWxsX2RlcHRoLS07CiAKIAkJaWYgKCFtZXJnZWRfY29tbW9uX2FuY2VzdG9ycykKLQkJCWRpZShfKCJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiKSk7CisJCQlyZXR1cm4gZXJyKG8sIF8oIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIpKTsKIAl9CiAKIAlkaXNjYXJkX2NhY2hlKCk7CkBAIC0xOTYxLDYgKzIwNjgsMTAgQEAKIAlvLT5hbmNlc3RvciA9ICJtZXJnZWQgY29tbW9uIGFuY2VzdG9ycyI7CiAJY2xlYW4gPSBtZXJnZV90cmVlcyhvLCBoMS0+dHJlZSwgaDItPnRyZWUsIG1lcmdlZF9jb21tb25fYW5jZXN0b3JzLT50cmVlLAogCQkJICAgICZtcnRyZWUpOworCWlmIChjbGVhbiA8IDApIHsKKwkJZmx1c2hfb3V0cHV0KG8pOworCQlyZXR1cm4gY2xlYW47CisJfQogCiAJaWYgKG8tPmNhbGxfZGVwdGgpIHsKIAkJKnJlc3VsdCA9IG1ha2VfdmlydHVhbF9jb21taXQobXJ0cmVlLCAibWVyZ2VkIHRyZWUiKTsKQEAgLTE5NjgsMTcgKzIwNzksMTkgQEAKIAkJY29tbWl0X2xpc3RfaW5zZXJ0KGgyLCAmKCpyZXN1bHQpLT5wYXJlbnRzLT5uZXh0KTsKIAl9CiAJZmx1c2hfb3V0cHV0KG8pOworCWlmICghby0+Y2FsbF9kZXB0aCAmJiBvLT5idWZmZXJfb3V0cHV0IDwgMikKKwkJc3RyYnVmX3JlbGVhc2UoJm8tPm9idWYpOwogCWlmIChzaG93KG8sIDIpKQogCQlkaWZmX3dhcm5fcmVuYW1lX2xpbWl0KCJtZXJnZS5yZW5hbWVsaW1pdCIsCiAJCQkJICAgICAgIG8tPm5lZWRlZF9yZW5hbWVfbGltaXQsIDApOwogCXJldHVybiBjbGVhbjsKIH0KIAotc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9yZWYoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfcmVmKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CiAKLQlvYmplY3QgPSBkZXJlZl90YWcocGFyc2Vfb2JqZWN0KHNoYTEpLCBuYW1lLCBzdHJsZW4obmFtZSkpOworCW9iamVjdCA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qob2lkLT5oYXNoKSwgbmFtZSwgc3RybGVuKG5hbWUpKTsKIAlpZiAoIW9iamVjdCkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfVFJFRSkKQEAgLTE5OTEsMTAgKzIxMDQsMTAgQEAKIH0KIAogaW50IG1lcmdlX3JlY3Vyc2l2ZV9nZW5lcmljKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAotCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWQsCi0JCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWVyZ2UsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaGVhZCwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICptZXJnZSwKIAkJCSAgICBpbnQgbnVtX2Jhc2VfbGlzdCwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqYmFzZV9saXN0LAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKipiYXNlX2xpc3QsCiAJCQkgICAgc3RydWN0IGNvbW1pdCAqKnJlc3VsdCkKIHsKIAlpbnQgY2xlYW47CkBAIC0yMDA3LDkgKzIxMjAsOSBAQAogCQlpbnQgaTsKIAkJZm9yIChpID0gMDsgaSA8IG51bV9iYXNlX2xpc3Q7ICsraSkgewogCQkJc3RydWN0IGNvbW1pdCAqYmFzZTsKLQkJCWlmICghKGJhc2UgPSBnZXRfcmVmKGJhc2VfbGlzdFtpXSwgc2hhMV90b19oZXgoYmFzZV9saXN0W2ldKSkpKQotCQkJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciKSwKLQkJCQkJc2hhMV90b19oZXgoYmFzZV9saXN0W2ldKSk7CisJCQlpZiAoIShiYXNlID0gZ2V0X3JlZihiYXNlX2xpc3RbaV0sIG9pZF90b19oZXgoYmFzZV9saXN0W2ldKSkpKQorCQkJCXJldHVybiBlcnIobywgXygiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIiksCisJCQkJCW9pZF90b19oZXgoYmFzZV9saXN0W2ldKSk7CiAJCQljb21taXRfbGlzdF9pbnNlcnQoYmFzZSwgJmNhKTsKIAkJfQogCX0KQEAgLTIwMTcsOSArMjEzMCwxMiBAQAogCWhvbGRfbG9ja2VkX2luZGV4KGxvY2ssIDEpOwogCWNsZWFuID0gbWVyZ2VfcmVjdXJzaXZlKG8sIGhlYWRfY29tbWl0LCBuZXh0X2NvbW1pdCwgY2EsCiAJCQlyZXN1bHQpOworCWlmIChjbGVhbiA8IDApCisJCXJldHVybiBjbGVhbjsKKwogCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCAmJgogCSAgICB3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgbG9jaywgQ09NTUlUX0xPQ0spKQotCQlyZXR1cm4gZXJyb3IoXygiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIpKTsKKwkJcmV0dXJuIGVycihvLCBfKCJVbmFibGUgdG8gd3JpdGUgaW5kZXguIikpOwogCiAJcmV0dXJuIGNsZWFuID8gMCA6IDE7CiB9CmRpZmYgLS1naXQgYS9tZXJnZS1yZWN1cnNpdmUuaCBiL21lcmdlLXJlY3Vyc2l2ZS5oCmluZGV4IDUyZjAyMDEuLjczNTM0M2IgMTAwNjQ0Ci0tLSBhL21lcmdlLXJlY3Vyc2l2ZS5oCisrKyBiL21lcmdlLXJlY3Vyc2l2ZS5oCkBAIC0xMyw3ICsxMyw3IEBACiAJCU1FUkdFX1JFQ1VSU0lWRV9USEVJUlMKIAl9IHJlY3Vyc2l2ZV92YXJpYW50OwogCWNvbnN0IGNoYXIgKnN1YnRyZWVfc2hpZnQ7Ci0JdW5zaWduZWQgYnVmZmVyX291dHB1dCA6IDE7CisJdW5zaWduZWQgYnVmZmVyX291dHB1dDsgLyogMTogb3V0cHV0IGF0IGVuZCwgMjoga2VlcCBidWZmZXJlZCAqLwogCXVuc2lnbmVkIHJlbm9ybWFsaXplIDogMTsKIAlsb25nIHhkbF9vcHRzOwogCWludCB2ZXJib3NpdHk7CkBAIC00OSwxMCArNDksMTAgQEAKICAqIHZpcnR1YWwgY29tbWl0cyBhbmQgY2FsbCBtZXJnZV9yZWN1cnNpdmUoKSBwcm9wZXIuCiAgKi8KIGludCBtZXJnZV9yZWN1cnNpdmVfZ2VuZXJpYyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkLAotCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1lcmdlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhlYWQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWVyZ2UsCiAJCQkgICAgaW50IG51bV9jYSwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqY2EsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKmNhLAogCQkJICAgIHN0cnVjdCBjb21taXQgKipyZXN1bHQpOwogCiB2b2lkIGluaXRfbWVyZ2Vfb3B0aW9ucyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbyk7CmRpZmYgLS1naXQgYS9tcnUuYyBiL21ydS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZWRhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tcnUuYwpAQCAtMCwwICsxLDUwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJtcnUuaCIKKwordm9pZCBtcnVfYXBwZW5kKHN0cnVjdCBtcnUgKm1ydSwgdm9pZCAqaXRlbSkKK3sKKwlzdHJ1Y3QgbXJ1X2VudHJ5ICpjdXIgPSB4bWFsbG9jKHNpemVvZigqY3VyKSk7CisJY3VyLT5pdGVtID0gaXRlbTsKKwljdXItPnByZXYgPSBtcnUtPnRhaWw7CisJY3VyLT5uZXh0ID0gTlVMTDsKKworCWlmIChtcnUtPnRhaWwpCisJCW1ydS0+dGFpbC0+bmV4dCA9IGN1cjsKKwllbHNlCisJCW1ydS0+aGVhZCA9IGN1cjsKKwltcnUtPnRhaWwgPSBjdXI7Cit9CisKK3ZvaWQgbXJ1X21hcmsoc3RydWN0IG1ydSAqbXJ1LCBzdHJ1Y3QgbXJ1X2VudHJ5ICplbnRyeSkKK3sKKwkvKiBJZiB3ZSdyZSBhbHJlYWR5IGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdCwgbm90aGluZyB0byBkbyAqLworCWlmIChtcnUtPmhlYWQgPT0gZW50cnkpCisJCXJldHVybjsKKworCS8qIE90aGVyd2lzZSwgcmVtb3ZlIHVzIGZyb20gb3VyIGN1cnJlbnQgc2xvdC4uLiAqLworCWlmIChlbnRyeS0+cHJldikKKwkJZW50cnktPnByZXYtPm5leHQgPSBlbnRyeS0+bmV4dDsKKwlpZiAoZW50cnktPm5leHQpCisJCWVudHJ5LT5uZXh0LT5wcmV2ID0gZW50cnktPnByZXY7CisJZWxzZQorCQltcnUtPnRhaWwgPSBlbnRyeS0+cHJldjsKKworCS8qIEFuZCBpbnNlcnQgdXMgYXQgdGhlIGJlZ2lubmluZy4gKi8KKwllbnRyeS0+cHJldiA9IE5VTEw7CisJZW50cnktPm5leHQgPSBtcnUtPmhlYWQ7CisJaWYgKG1ydS0+aGVhZCkKKwkJbXJ1LT5oZWFkLT5wcmV2ID0gZW50cnk7CisJbXJ1LT5oZWFkID0gZW50cnk7Cit9CisKK3ZvaWQgbXJ1X2NsZWFyKHN0cnVjdCBtcnUgKm1ydSkKK3sKKwlzdHJ1Y3QgbXJ1X2VudHJ5ICpwID0gbXJ1LT5oZWFkOworCisJd2hpbGUgKHApIHsKKwkJc3RydWN0IG1ydV9lbnRyeSAqdG9fZnJlZSA9IHA7CisJCXAgPSBwLT5uZXh0OworCQlmcmVlKHRvX2ZyZWUpOworCX0KKwltcnUtPmhlYWQgPSBtcnUtPnRhaWwgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvbXJ1LmggYi9tcnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmU0YWVhCi0tLSAvZGV2L251bGwKKysrIGIvbXJ1LmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBNUlVfSAorI2RlZmluZSBNUlVfSAorCisvKioKKyAqIEEgc2ltcGxlIG1vc3QtcmVjZW50bHktdXNlZCBjYWNoZSwgYmFja2VkIGJ5IGEgZG91Ymx5LWxpbmtlZCBsaXN0LgorICoKKyAqIFVzYWdlIGlzIHJvdWdobHk6CisgKgorICogICAvLyBDcmVhdGUgYSBsaXN0LiAgWmVyby1pbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZC4KKyAqICAgc3RhdGljIHN0cnVjdCBtcnUgY2FjaGU7CisgKiAgIG1ydV9hcHBlbmQoJmNhY2hlLCBpdGVtKTsKKyAqICAgLi4uCisgKgorICogICAvLyBJdGVyYXRlIGluIE1SVSBvcmRlci4KKyAqICAgc3RydWN0IG1ydV9lbnRyeSAqcDsKKyAqICAgZm9yIChwID0gY2FjaGUuaGVhZDsgcDsgcCA9IHAtPm5leHQpIHsKKyAqCWlmIChtYXRjaGVzKHAtPml0ZW0pKQorICoJCWJyZWFrOworICogICB9CisgKgorICogICAvLyBNYXJrIGFuIGl0ZW0gYXMgdXNlZCwgbW92aW5nIGl0IHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdC4KKyAqICAgbXJ1X21hcmsoJmNhY2hlLCBwKTsKKyAqCisgKiAgIC8vIFJlc2V0IHRoZSBsaXN0IHRvIGVtcHR5LCBjbGVhbmluZyB1cCBhbGwgcmVzb3VyY2VzLgorICogICBtcnVfY2xlYXIoJmNhY2hlKTsKKyAqCisgKiBOb3RlIHRoYXQgeW91IFNIT1VMRCBOT1QgY2FsbCBtcnVfbWFyaygpIGFuZCB0aGVuIGNvbnRpbnVlIHRyYXZlcnNpbmcgdGhlCisgKiBsaXN0OyBpdCByZW9yZGVycyB0aGUgbWFya2VkIGl0ZW0gdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0LCBhbmQgdGhlcmVmb3JlCisgKiB5b3Ugd2lsbCBiZWdpbiB0cmF2ZXJzaW5nIHRoZSB3aG9sZSBsaXN0IGFnYWluLgorICovCisKK3N0cnVjdCBtcnVfZW50cnkgeworCXZvaWQgKml0ZW07CisJc3RydWN0IG1ydV9lbnRyeSAqcHJldiwgKm5leHQ7Cit9OworCitzdHJ1Y3QgbXJ1IHsKKwlzdHJ1Y3QgbXJ1X2VudHJ5ICpoZWFkLCAqdGFpbDsKK307CisKK3ZvaWQgbXJ1X2FwcGVuZChzdHJ1Y3QgbXJ1ICptcnUsIHZvaWQgKml0ZW0pOwordm9pZCBtcnVfbWFyayhzdHJ1Y3QgbXJ1ICptcnUsIHN0cnVjdCBtcnVfZW50cnkgKmVudHJ5KTsKK3ZvaWQgbXJ1X2NsZWFyKHN0cnVjdCBtcnUgKm1ydSk7CisKKyNlbmRpZiAvKiBNUlVfSCAqLwpkaWZmIC0tZ2l0IGEvbm90ZXMtbWVyZ2UuYyBiL25vdGVzLW1lcmdlLmMKaW5kZXggMzRiZmFjMC4uOTdmYzQyZiAxMDA2NDQKLS0tIGEvbm90ZXMtbWVyZ2UuYworKysgYi9ub3Rlcy1tZXJnZS5jCkBAIC00MSwxNCArNDEsMTQgQEAKIAlzd2l0Y2ggKHAtPnN0YXR1cykgewogCWNhc2UgRElGRl9TVEFUVVNfTU9ESUZJRUQ6CiAJCWFzc2VydChwLT5vbmUtPm1vZGUgPT0gcC0+dHdvLT5tb2RlKTsKLQkJYXNzZXJ0KCFpc19udWxsX3NoYTEocC0+b25lLT5zaGExKSk7Ci0JCWFzc2VydCghaXNfbnVsbF9zaGExKHAtPnR3by0+c2hhMSkpOworCQlhc3NlcnQoIWlzX251bGxfb2lkKCZwLT5vbmUtPm9pZCkpOworCQlhc3NlcnQoIWlzX251bGxfb2lkKCZwLT50d28tPm9pZCkpOwogCQlicmVhazsKIAljYXNlIERJRkZfU1RBVFVTX0FEREVEOgotCQlhc3NlcnQoaXNfbnVsbF9zaGExKHAtPm9uZS0+c2hhMSkpOworCQlhc3NlcnQoaXNfbnVsbF9vaWQoJnAtPm9uZS0+b2lkKSk7CiAJCWJyZWFrOwogCWNhc2UgRElGRl9TVEFUVVNfREVMRVRFRDoKLQkJYXNzZXJ0KGlzX251bGxfc2hhMShwLT50d28tPnNoYTEpKTsKKwkJYXNzZXJ0KGlzX251bGxfb2lkKCZwLT50d28tPm9pZCkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CkBAIC0xNDIsMjcgKzE0MiwyNyBAQAogCQlpZiAodmVyaWZ5X25vdGVzX2ZpbGVwYWlyKHAsIG9iaikpIHsKIAkJCXRyYWNlX3ByaW50ZigiXHRcdENhbm5vdCBtZXJnZSBlbnRyeSAnJXMnICglYyk6ICIKIAkJCSAgICAgICAiJS43cyAtPiAlLjdzLiBTa2lwcGluZyFcbiIsIHAtPm9uZS0+cGF0aCwKLQkJCSAgICAgICBwLT5zdGF0dXMsIHNoYTFfdG9faGV4KHAtPm9uZS0+c2hhMSksCi0JCQkgICAgICAgc2hhMV90b19oZXgocC0+dHdvLT5zaGExKSk7CisJCQkgICAgICAgcC0+c3RhdHVzLCBvaWRfdG9faGV4KCZwLT5vbmUtPm9pZCksCisJCQkgICAgICAgb2lkX3RvX2hleCgmcC0+dHdvLT5vaWQpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCW1wID0gZmluZF9ub3Rlc19tZXJnZV9wYWlyX3BvcyhjaGFuZ2VzLCBsZW4sIG9iaiwgMSwgJm9jY3VwaWVkKTsKIAkJaWYgKG9jY3VwaWVkKSB7CiAJCQkvKiBXZSd2ZSBmb3VuZCBhbiBhZGRpdGlvbi9kZWxldGlvbiBwYWlyICovCiAJCQlhc3NlcnQoIWhhc2hjbXAobXAtPm9iaiwgb2JqKSk7Ci0JCQlpZiAoaXNfbnVsbF9zaGExKHAtPm9uZS0+c2hhMSkpIHsgLyogYWRkaXRpb24gKi8KKwkJCWlmIChpc19udWxsX29pZCgmcC0+b25lLT5vaWQpKSB7IC8qIGFkZGl0aW9uICovCiAJCQkJYXNzZXJ0KGlzX251bGxfc2hhMShtcC0+cmVtb3RlKSk7Ci0JCQkJaGFzaGNweShtcC0+cmVtb3RlLCBwLT50d28tPnNoYTEpOwotCQkJfSBlbHNlIGlmIChpc19udWxsX3NoYTEocC0+dHdvLT5zaGExKSkgeyAvKiBkZWxldGlvbiAqLworCQkJCWhhc2hjcHkobXAtPnJlbW90ZSwgcC0+dHdvLT5vaWQuaGFzaCk7CisJCQl9IGVsc2UgaWYgKGlzX251bGxfb2lkKCZwLT50d28tPm9pZCkpIHsgLyogZGVsZXRpb24gKi8KIAkJCQlhc3NlcnQoaXNfbnVsbF9zaGExKG1wLT5iYXNlKSk7Ci0JCQkJaGFzaGNweShtcC0+YmFzZSwgcC0+b25lLT5zaGExKTsKKwkJCQloYXNoY3B5KG1wLT5iYXNlLCBwLT5vbmUtPm9pZC5oYXNoKTsKIAkJCX0gZWxzZQogCQkJCWFzc2VydCghIkludmFsaWQgZXhpc3RpbmcgY2hhbmdlIHJlY29yZGVkIik7CiAJCX0gZWxzZSB7CiAJCQloYXNoY3B5KG1wLT5vYmosIG9iaik7Ci0JCQloYXNoY3B5KG1wLT5iYXNlLCBwLT5vbmUtPnNoYTEpOworCQkJaGFzaGNweShtcC0+YmFzZSwgcC0+b25lLT5vaWQuaGFzaCk7CiAJCQloYXNoY3B5KG1wLT5sb2NhbCwgdW5pbml0aWFsaXplZCk7Ci0JCQloYXNoY3B5KG1wLT5yZW1vdGUsIHAtPnR3by0+c2hhMSk7CisJCQloYXNoY3B5KG1wLT5yZW1vdGUsIHAtPnR3by0+b2lkLmhhc2gpOwogCQkJbGVuKys7CiAJCX0KIAkJdHJhY2VfcHJpbnRmKCJcdFx0U3RvcmVkIHJlbW90ZSBjaGFuZ2UgZm9yICVzOiAlLjdzIC0+ICUuN3NcbiIsCkBAIC0xNzAsNyArMTcwLDcgQEAKIAkJICAgICAgIHNoYTFfdG9faGV4KG1wLT5yZW1vdGUpKTsKIAl9CiAJZGlmZl9mbHVzaCgmb3B0KTsKLQlmcmVlX3BhdGhzcGVjKCZvcHQucGF0aHNwZWMpOworCWNsZWFyX3BhdGhzcGVjKCZvcHQucGF0aHNwZWMpOwogCiAJKm51bV9jaGFuZ2VzID0gbGVuOwogCXJldHVybiBjaGFuZ2VzOwpAQCAtMjAzLDIxICsyMDMsMjEgQEAKIAkJaWYgKHZlcmlmeV9ub3Rlc19maWxlcGFpcihwLCBvYmopKSB7CiAJCQl0cmFjZV9wcmludGYoIlx0XHRDYW5ub3QgbWVyZ2UgZW50cnkgJyVzJyAoJWMpOiAiCiAJCQkgICAgICAgIiUuN3MgLT4gJS43cy4gU2tpcHBpbmchXG4iLCBwLT5vbmUtPnBhdGgsCi0JCQkgICAgICAgcC0+c3RhdHVzLCBzaGExX3RvX2hleChwLT5vbmUtPnNoYTEpLAotCQkJICAgICAgIHNoYTFfdG9faGV4KHAtPnR3by0+c2hhMSkpOworCQkJICAgICAgIHAtPnN0YXR1cywgb2lkX3RvX2hleCgmcC0+b25lLT5vaWQpLAorCQkJICAgICAgIG9pZF90b19oZXgoJnAtPnR3by0+b2lkKSk7CiAJCQljb250aW51ZTsKIAkJfQogCQltcCA9IGZpbmRfbm90ZXNfbWVyZ2VfcGFpcl9wb3MoY2hhbmdlcywgbGVuLCBvYmosIDAsICZtYXRjaCk7CiAJCWlmICghbWF0Y2gpIHsKIAkJCXRyYWNlX3ByaW50ZigiXHRcdElnbm9yaW5nIGxvY2FsLW9ubHkgY2hhbmdlIGZvciAlczogIgogCQkJICAgICAgICIlLjdzIC0+ICUuN3NcbiIsIHNoYTFfdG9faGV4KG9iaiksCi0JCQkgICAgICAgc2hhMV90b19oZXgocC0+b25lLT5zaGExKSwKLQkJCSAgICAgICBzaGExX3RvX2hleChwLT50d28tPnNoYTEpKTsKKwkJCSAgICAgICBvaWRfdG9faGV4KCZwLT5vbmUtPm9pZCksCisJCQkgICAgICAgb2lkX3RvX2hleCgmcC0+dHdvLT5vaWQpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJYXNzZXJ0KCFoYXNoY21wKG1wLT5vYmosIG9iaikpOwotCQlpZiAoaXNfbnVsbF9zaGExKHAtPnR3by0+c2hhMSkpIHsgLyogZGVsZXRpb24gKi8KKwkJaWYgKGlzX251bGxfb2lkKCZwLT50d28tPm9pZCkpIHsgLyogZGVsZXRpb24gKi8KIAkJCS8qCiAJCQkgKiBFaXRoZXIgdGhpcyBpcyBhIHRydWUgZGVsZXRpb24gKDEpLCBvciBpdCBpcyBwYXJ0CiAJCQkgKiBvZiBhbiBBL0QgcGFpciAoMiksIG9yIEQvQSBwYWlyICgzKToKQEAgLTIyOSw3ICsyMjksNyBAQAogCQkJICovCiAJCQlpZiAoIWhhc2hjbXAobXAtPmxvY2FsLCB1bmluaXRpYWxpemVkKSkKIAkJCQloYXNoY2xyKG1wLT5sb2NhbCk7Ci0JCX0gZWxzZSBpZiAoaXNfbnVsbF9zaGExKHAtPm9uZS0+c2hhMSkpIHsgLyogYWRkaXRpb24gKi8KKwkJfSBlbHNlIGlmIChpc19udWxsX29pZCgmcC0+b25lLT5vaWQpKSB7IC8qIGFkZGl0aW9uICovCiAJCQkvKgogCQkJICogRWl0aGVyIHRoaXMgaXMgYSB0cnVlIGFkZGl0aW9uICgxKSwgb3IgaXQgaXMgcGFydAogCQkJICogb2YgYW4gQS9EIHBhaXIgKDIpLCBvciBEL0EgcGFpciAoMyk6CkBAIC0yNDAsMjMgKzI0MCwyMyBAQAogCQkJICovCiAJCQlhc3NlcnQoaXNfbnVsbF9zaGExKG1wLT5sb2NhbCkgfHwKIAkJCSAgICAgICAhaGFzaGNtcChtcC0+bG9jYWwsIHVuaW5pdGlhbGl6ZWQpKTsKLQkJCWhhc2hjcHkobXAtPmxvY2FsLCBwLT50d28tPnNoYTEpOworCQkJaGFzaGNweShtcC0+bG9jYWwsIHAtPnR3by0+b2lkLmhhc2gpOwogCQl9IGVsc2UgeyAvKiBtb2RpZmljYXRpb24gKi8KIAkJCS8qCiAJCQkgKiBUaGlzIGlzIGEgdHJ1ZSBtb2RpZmljYXRpb24uIHAtPm9uZS0+c2hhMSBzaGFsbAogCQkJICogbWF0Y2ggbXAtPmJhc2UsIGFuZCBtcC0+bG9jYWwgc2hhbGwgYmUgdW5pbml0aWFsaXplZC4KIAkJCSAqIFNldCBtcC0+bG9jYWwgdG8gcC0+dHdvLT5zaGExLgogCQkJICovCi0JCQlhc3NlcnQoIWhhc2hjbXAocC0+b25lLT5zaGExLCBtcC0+YmFzZSkpOworCQkJYXNzZXJ0KCFoYXNoY21wKHAtPm9uZS0+b2lkLmhhc2gsIG1wLT5iYXNlKSk7CiAJCQlhc3NlcnQoIWhhc2hjbXAobXAtPmxvY2FsLCB1bmluaXRpYWxpemVkKSk7Ci0JCQloYXNoY3B5KG1wLT5sb2NhbCwgcC0+dHdvLT5zaGExKTsKKwkJCWhhc2hjcHkobXAtPmxvY2FsLCBwLT50d28tPm9pZC5oYXNoKTsKIAkJfQogCQl0cmFjZV9wcmludGYoIlx0XHRTdG9yZWQgbG9jYWwgY2hhbmdlIGZvciAlczogJS43cyAtPiAlLjdzXG4iLAogCQkgICAgICAgc2hhMV90b19oZXgobXAtPm9iaiksIHNoYTFfdG9faGV4KG1wLT5iYXNlKSwKIAkJICAgICAgIHNoYTFfdG9faGV4KG1wLT5sb2NhbCkpOwogCX0KIAlkaWZmX2ZsdXNoKCZvcHQpOwotCWZyZWVfcGF0aHNwZWMoJm9wdC5wYXRoc3BlYyk7CisJY2xlYXJfcGF0aHNwZWMoJm9wdC5wYXRoc3BlYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrX25vdGVzX21lcmdlX3dvcmt0cmVlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKQpAQCAtMjk4LDEyICsyOTgsOCBAQAogCWNoYXIgKnBhdGggPSBnaXRfcGF0aGR1cChOT1RFU19NRVJHRV9XT1JLVFJFRSAiLyVzIiwgc2hhMV90b19oZXgob2JqKSk7CiAJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QocGF0aCkpCiAJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yICclcyciLCBwYXRoKTsKLQlpZiAoZmlsZV9leGlzdHMocGF0aCkpCi0JCWRpZSgiZm91bmQgZXhpc3RpbmcgZmlsZSBhdCAnJXMnIiwgcGF0aCk7CiAKLQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX1RSVU5DIHwgT19DUkVBVCwgMDY2Nik7Ci0JaWYgKGZkIDwgMCkKLQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gb3BlbiAnJXMnIiwgcGF0aCk7CisJZmQgPSB4b3BlbihwYXRoLCBPX1dST05MWSB8IE9fRVhDTCB8IE9fQ1JFQVQsIDA2NjYpOwogCiAJd2hpbGUgKHNpemUgPiAwKSB7CiAJCWxvbmcgcmV0ID0gd3JpdGVfaW5fZnVsbChmZCwgYnVmLCBzaXplKTsKZGlmZiAtLWdpdCBhL25vdGVzLmMgYi9ub3Rlcy5jCmluZGV4IGU0ZTQ4NTQuLmRmNDY2MGYgMTAwNjQ0Ci0tLSBhL25vdGVzLmMKKysrIGIvbm90ZXMuYwpAQCAtNzAsNyArNzAsNyBAQAogCiBzdHJ1Y3Qgbm90ZXNfdHJlZSBkZWZhdWx0X25vdGVzX3RyZWU7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZGlzcGxheV9ub3Rlc19yZWZzOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBkaXNwbGF5X25vdGVzX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOwogc3RhdGljIHN0cnVjdCBub3Rlc190cmVlICoqZGlzcGxheV9ub3Rlc190cmVlczsKIAogc3RhdGljIHZvaWQgbG9hZF9zdWJ0cmVlKHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgbGVhZl9ub2RlICpzdWJ0cmVlLApkaWZmIC0tZ2l0IGEvcGFjay1jaGVjay5jIGIvcGFjay1jaGVjay5jCmluZGV4IDFkYTg5YTQuLmQxMjM4NDYgMTAwNjQ0Ci0tLSBhL3BhY2stY2hlY2suYworKysgYi9wYWNrLWNoZWNrLmMKQEAgLTEwNSw2ICsxMDUsOCBAQAogCQl2b2lkICpkYXRhOwogCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJb2ZmX3QgY3VycG9zOworCQlpbnQgZGF0YV92YWxpZDsKIAogCQlpZiAocC0+aW5kZXhfdmVyc2lvbiA+IDEpIHsKIAkJCW9mZl90IG9mZnNldCA9IGVudHJpZXNbaV0ub2Zmc2V0OwpAQCAtMTE2LDggKzExOCwyNSBAQAogCQkJCQkgICAgc2hhMV90b19oZXgoZW50cmllc1tpXS5zaGExKSwKIAkJCQkJICAgIHAtPnBhY2tfbmFtZSwgKHVpbnRtYXhfdClvZmZzZXQpOwogCQl9Ci0JCWRhdGEgPSB1bnBhY2tfZW50cnkocCwgZW50cmllc1tpXS5vZmZzZXQsICZ0eXBlLCAmc2l6ZSk7Ci0JCWlmICghZGF0YSkKKworCQljdXJwb3MgPSBlbnRyaWVzW2ldLm9mZnNldDsKKwkJdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHAsIHdfY3VycywgJmN1cnBvcywgJnNpemUpOworCQl1bnVzZV9wYWNrKHdfY3Vycyk7CisKKwkJaWYgKHR5cGUgPT0gT0JKX0JMT0IgJiYgYmlnX2ZpbGVfdGhyZXNob2xkIDw9IHNpemUpIHsKKwkJCS8qCisJCQkgKiBMZXQgY2hlY2tfc2hhMV9zaWduYXR1cmUoKSBjaGVjayBpdCB3aXRoCisJCQkgKiB0aGUgc3RyZWFtaW5nIGludGVyZmFjZTsgbm8gcG9pbnQgc2x1cnBpbmcKKwkJCSAqIHRoZSBkYXRhIGluLWNvcmUgb25seSB0byBkaXNjYXJkLgorCQkJICovCisJCQlkYXRhID0gTlVMTDsKKwkJCWRhdGFfdmFsaWQgPSAwOworCQl9IGVsc2UgeworCQkJZGF0YSA9IHVucGFja19lbnRyeShwLCBlbnRyaWVzW2ldLm9mZnNldCwgJnR5cGUsICZzaXplKTsKKwkJCWRhdGFfdmFsaWQgPSAxOworCQl9CisKKwkJaWYgKGRhdGFfdmFsaWQgJiYgIWRhdGEpCiAJCQllcnIgPSBlcnJvcigiY2Fubm90IHVucGFjayAlcyBmcm9tICVzIGF0IG9mZnNldCAlIlBSSXVNQVgiIiwKIAkJCQkgICAgc2hhMV90b19oZXgoZW50cmllc1tpXS5zaGExKSwgcC0+cGFja19uYW1lLAogCQkJCSAgICAodWludG1heF90KWVudHJpZXNbaV0ub2Zmc2V0KTsKZGlmZiAtLWdpdCBhL3BhY2std3JpdGUuYyBiL3BhY2std3JpdGUuYwppbmRleCAzMzI5M2NlLi5lYTBiNzg4IDEwMDY0NAotLS0gYS9wYWNrLXdyaXRlLmMKKysrIGIvcGFjay13cml0ZS5jCkBAIC0zNTQsNyArMzU0LDYgQEAKIAkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWFrZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSByZWFkYWJsZSIpOwogCiAJc3RyYnVmX2FkZGYobmFtZV9idWZmZXIsICIlcy5wYWNrIiwgc2hhMV90b19oZXgoc2hhMSkpOwotCWZyZWVfcGFja19ieV9uYW1lKG5hbWVfYnVmZmVyLT5idWYpOwogCiAJaWYgKHJlbmFtZShwYWNrX3RtcF9uYW1lLCBuYW1lX2J1ZmZlci0+YnVmKSkKIAkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVuYW1lIHRlbXBvcmFyeSBwYWNrIGZpbGUiKTsKZGlmZiAtLWdpdCBhL3BhY2suaCBiL3BhY2suaAppbmRleCAzMjIzZjVhLi4wZTc3NDI5IDEwMDY0NAotLS0gYS9wYWNrLmgKKysrIGIvcGFjay5oCkBAIC03NCw2ICs3NCw3IEBACiAKIAogc3RydWN0IHByb2dyZXNzOworLyogTm90ZSwgdGhlIGRhdGEgYXJndW1lbnQgY291bGQgYmUgTlVMTCBpZiBvYmplY3QgdHlwZSBpcyBibG9iICovCiB0eXBlZGVmIGludCAoKnZlcmlmeV9mbikoY29uc3QgdW5zaWduZWQgY2hhciosIGVudW0gb2JqZWN0X3R5cGUsIHVuc2lnbmVkIGxvbmcsIHZvaWQqLCBpbnQqKTsKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKndyaXRlX2lkeF9maWxlKGNvbnN0IGNoYXIgKmluZGV4X25hbWUsIHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKm9iamVjdHMsIGludCBucl9vYmplY3RzLCBjb25zdCBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwpkaWZmIC0tZ2l0IGEvcGFnZXIuYyBiL3BhZ2VyLmMKaW5kZXggNGJjMDQ4MS4uNjQ3MGI4MSAxMDA2NDQKLS0tIGEvcGFnZXIuYworKysgYi9wYWdlci5jCkBAIC02MywxNCArNjMsMzggQEAKIAlyZXR1cm4gcGFnZXI7CiB9CiAKK3N0YXRpYyB2b2lkIHNldHVwX3BhZ2VyX2VudihzdHJ1Y3QgYXJndl9hcnJheSAqZW52KQoreworCWNvbnN0IGNoYXIgKiphcmd2OworCWludCBpOworCWNoYXIgKnBhZ2VyX2VudiA9IHhzdHJkdXAoUEFHRVJfRU5WKTsKKwlpbnQgbiA9IHNwbGl0X2NtZGxpbmUocGFnZXJfZW52LCAmYXJndik7CisKKwlpZiAobiA8IDApCisJCWRpZSgibWFsZm9ybWVkIGJ1aWxkLXRpbWUgUEFHRVJfRU5WOiAlcyIsCisJCQlzcGxpdF9jbWRsaW5lX3N0cmVycm9yKG4pKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJY2hhciAqY3AgPSBzdHJjaHIoYXJndltpXSwgJz0nKTsKKworCQlpZiAoIWNwKQorCQkJZGllKCJtYWxmb3JtZWQgYnVpbGQtdGltZSBQQUdFUl9FTlYiKTsKKworCQkqY3AgPSAnXDAnOworCQlpZiAoIWdldGVudihhcmd2W2ldKSkgeworCQkJKmNwID0gJz0nOworCQkJYXJndl9hcnJheV9wdXNoKGVudiwgYXJndltpXSk7CisJCX0KKwl9CisJZnJlZShwYWdlcl9lbnYpOworCWZyZWUoYXJndik7Cit9CisKIHZvaWQgcHJlcGFyZV9wYWdlcl9hcmdzKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpwYWdlcl9wcm9jZXNzLCBjb25zdCBjaGFyICpwYWdlcikKIHsKIAlhcmd2X2FycmF5X3B1c2goJnBhZ2VyX3Byb2Nlc3MtPmFyZ3MsIHBhZ2VyKTsKIAlwYWdlcl9wcm9jZXNzLT51c2Vfc2hlbGwgPSAxOwotCWlmICghZ2V0ZW52KCJMRVNTIikpCi0JCWFyZ3ZfYXJyYXlfcHVzaCgmcGFnZXJfcHJvY2Vzcy0+ZW52X2FycmF5LCAiTEVTUz1GUlgiKTsKLQlpZiAoIWdldGVudigiTFYiKSkKLQkJYXJndl9hcnJheV9wdXNoKCZwYWdlcl9wcm9jZXNzLT5lbnZfYXJyYXksICJMVj0tYyIpOworCXNldHVwX3BhZ2VyX2VudigmcGFnZXJfcHJvY2Vzcy0+ZW52X2FycmF5KTsKIH0KIAogdm9pZCBzZXR1cF9wYWdlcih2b2lkKQpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy1jYi5jIGIvcGFyc2Utb3B0aW9ucy1jYi5jCmluZGV4IDIzOTg5OGQuLjk2NjdiYzcgMTAwNjQ0Ci0tLSBhL3BhcnNlLW9wdGlvbnMtY2IuYworKysgYi9wYXJzZS1vcHRpb25zLWNiLmMKQEAgLTExNywxOSArMTE3LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBwYXJzZV9vcHRpb25zX2NvbmNhdChzdHJ1Y3Qgb3B0aW9uICpkc3QsIHNpemVfdCBkc3Rfc2l6ZSwgc3RydWN0IG9wdGlvbiAqc3JjKQorc3RydWN0IG9wdGlvbiAqcGFyc2Vfb3B0aW9uc19jb25jYXQoc3RydWN0IG9wdGlvbiAqYSwgc3RydWN0IG9wdGlvbiAqYikKIHsKLQlpbnQgaSwgajsKKwlzdHJ1Y3Qgb3B0aW9uICpyZXQ7CisJc2l6ZV90IGksIGFfbGVuID0gMCwgYl9sZW4gPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IGRzdF9zaXplOyBpKyspCi0JCWlmIChkc3RbaV0udHlwZSA9PSBPUFRJT05fRU5EKQotCQkJYnJlYWs7Ci0JZm9yIChqID0gMDsgaSA8IGRzdF9zaXplOyBpKyssIGorKykgewotCQlkc3RbaV0gPSBzcmNbal07Ci0JCWlmIChzcmNbal0udHlwZSA9PSBPUFRJT05fRU5EKQotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBhW2ldLnR5cGUgIT0gT1BUSU9OX0VORDsgaSsrKQorCQlhX2xlbisrOworCWZvciAoaSA9IDA7IGJbaV0udHlwZSAhPSBPUFRJT05fRU5EOyBpKyspCisJCWJfbGVuKys7CisKKwlBTExPQ19BUlJBWShyZXQsIHN0X2FkZDMoYV9sZW4sIGJfbGVuLCAxKSk7CisJZm9yIChpID0gMDsgaSA8IGFfbGVuOyBpKyspCisJCXJldFtpXSA9IGFbaV07CisJZm9yIChpID0gMDsgaSA8IGJfbGVuOyBpKyspCisJCXJldFthX2xlbiArIGldID0gYltpXTsKKwlyZXRbYV9sZW4gKyBiX2xlbl0gPSBiW2JfbGVuXTsgLyogZmluYWwgT1BUSU9OX0VORCAqLworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IHBhcnNlX29wdF9zdHJpbmdfbGlzdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQpAQCAtMTQ0LDcgKzE0OSw3IEBACiAJaWYgKCFhcmcpCiAJCXJldHVybiAtMTsKIAotCXN0cmluZ19saXN0X2FwcGVuZCh2LCB4c3RyZHVwKGFyZykpOworCXN0cmluZ19saXN0X2FwcGVuZCh2LCBhcmcpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9wYXJzZS1vcHRpb25zLmggYi9wYXJzZS1vcHRpb25zLmgKaW5kZXggZWE0YWY5Mi4uNzhmODM4NCAxMDA2NDQKLS0tIGEvcGFyc2Utb3B0aW9ucy5oCisrKyBiL3BhcnNlLW9wdGlvbnMuaApAQCAtMjE1LDcgKzIxNSw3IEBACiAKIGV4dGVybiBpbnQgcGFyc2Vfb3B0aW9uc19lbmQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4KTsKIAotZXh0ZXJuIGludCBwYXJzZV9vcHRpb25zX2NvbmNhdChzdHJ1Y3Qgb3B0aW9uICpkc3QsIHNpemVfdCwgc3RydWN0IG9wdGlvbiAqc3JjKTsKK2V4dGVybiBzdHJ1Y3Qgb3B0aW9uICpwYXJzZV9vcHRpb25zX2NvbmNhdChzdHJ1Y3Qgb3B0aW9uICphLCBzdHJ1Y3Qgb3B0aW9uICpiKTsKIAogLyotLS0tLSBzb21lIG9mdGVuIHVzZWQgb3B0aW9ucyAtLS0tLSovCiBleHRlcm4gaW50IHBhcnNlX29wdF9hYmJyZXZfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CmRpZmYgLS1naXQgYS9wYXRoLmMgYi9wYXRoLmMKaW5kZXggMjU5YWVlZC4uMTc1NTFjNCAxMDA2NDQKLS0tIGEvcGF0aC5jCisrKyBiL3BhdGguYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBnaXRfZGlyKTsKIAl9CiAJc3RyYnVmX2FkZGNoKGJ1ZiwgJy8nKTsKLQlzdHJidWZfYWRkc3RyKCZnaXRfc3VibW9kdWxlX2RpciwgYnVmLT5idWYpOworCXN0cmJ1Zl9hZGRidWYoJmdpdF9zdWJtb2R1bGVfZGlyLCBidWYpOwogCiAJc3RyYnVmX3ZhZGRmKGJ1ZiwgZm10LCBhcmdzKTsKIApkaWZmIC0tZ2l0IGEvcGF0aHNwZWMuYyBiL3BhdGhzcGVjLmMKaW5kZXggYzllOWI2Yy4uMjRlMGRkNSAxMDA2NDQKLS0tIGEvcGF0aHNwZWMuYworKysgYi9wYXRoc3BlYy5jCkBAIC00ODksNyArNDg5LDcgQEAKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBwYXRoc3BlY19pdGVtKSAqIGRzdC0+bnIpOwogfQogCi12b2lkIGZyZWVfcGF0aHNwZWMoc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3ZvaWQgY2xlYXJfcGF0aHNwZWMoc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKIHsKIAlmcmVlKHBhdGhzcGVjLT5pdGVtcyk7CiAJcGF0aHNwZWMtPml0ZW1zID0gTlVMTDsKZGlmZiAtLWdpdCBhL3BhdGhzcGVjLmggYi9wYXRoc3BlYy5oCmluZGV4IDBjMTEyNjIuLjRhODBmNmYgMTAwNjQ0Ci0tLSBhL3BhdGhzcGVjLmgKKysrIGIvcGF0aHNwZWMuaApAQCAtMTksNyArMTksNyBAQAogI2RlZmluZSBQQVRIU1BFQ19PTkVTVEFSIDEJLyogdGhlIHBhdGhzcGVjIHBhdHRlcm4gc2F0aXNmaWVzIEdGTk1fT05FU1RBUiAqLwogCiBzdHJ1Y3QgcGF0aHNwZWMgewotCWNvbnN0IGNoYXIgKipfcmF3OyAvKiBnZXRfcGF0aHNwZWMoKSByZXN1bHQsIG5vdCBmcmVlZCBieSBmcmVlX3BhdGhzcGVjKCkgKi8KKwljb25zdCBjaGFyICoqX3JhdzsgLyogZ2V0X3BhdGhzcGVjKCkgcmVzdWx0LCBub3QgZnJlZWQgYnkgY2xlYXJfcGF0aHNwZWMoKSAqLwogCWludCBucjsKIAl1bnNpZ25lZCBpbnQgaGFzX3dpbGRjYXJkOjE7CiAJdW5zaWduZWQgaW50IHJlY3Vyc2l2ZToxOwpAQCAtNzQsNyArNzQsNyBAQAogCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAogCQkJICAgY29uc3QgY2hhciAqKmFyZ3MpOwogZXh0ZXJuIHZvaWQgY29weV9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKmRzdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpzcmMpOwotZXh0ZXJuIHZvaWQgZnJlZV9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKik7CitleHRlcm4gdm9pZCBjbGVhcl9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKik7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHBzX3N0cm5jbXAoY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCiAJCQkgICAgIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCmRpZmYgLS1naXQgYS9wZXJsL0dpdC9TVk4ucG0gYi9wZXJsL0dpdC9TVk4ucG0KaW5kZXggZDk0ZDAxYy4uMDE4YmViOCAxMDA2NDQKLS0tIGEvcGVybC9HaXQvU1ZOLnBtCisrKyBiL3BlcmwvR2l0L1NWTi5wbQpAQCAtOTcsOCArOTcsMTIgQEAKIAkJCQkgICAgImV4aXN0aW5nOiAkZXhpc3RpbmdcbiIsCiAJCQkJICAgICIgZ2xvYmJlZDogJHJlZm5hbWVcbiI7CiAJCQl9Ci0JCQlteSAkdSA9ICg6OmNtdF9tZXRhZGF0YSgiJHJlZm5hbWUiKSlbMF0gb3IgZGllCi0JCQkgICAgIiRyZWZuYW1lOiBubyBhc3NvY2lhdGVkIGNvbW1pdCBtZXRhZGF0YVxuIjsKKwkJCW15ICR1ID0gKDo6Y210X21ldGFkYXRhKCIkcmVmbmFtZSIpKVswXTsKKwkJCWlmICghZGVmaW5lZCgkdSkpIHsKKwkJCQl3YXJuCisiVzogJHJlZm5hbWU6IG5vIGFzc29jaWF0ZWQgY29tbWl0IG1ldGFkYXRhIGZyb20gU1ZOLCBza2lwcGluZ1xuIjsKKwkJCQluZXh0OworCQkJfQogCQkJJHUgPX4gcyFeXFEkdXJsXEUoL3wkKSEhIG9yIGRpZQogCQkJICAiJHJlZm5hbWU6ICckdXJsJyBub3QgZm91bmQgaW4gJyR1J1xuIjsKIAkJCWlmICgkcGF0aG5hbWUgbmUgJHUpIHsKQEAgLTE5MDUsMTUgKzE5MDksMjIgQEAKIAogCW15IEBwYXJlbnRzID0gQCRwYXJlbnRzOwogCW15ICRwcm9wcyA9ICRlZC0+e2Rpcl9wcm9wfXskc2VsZi0+cGF0aH07Ci0JaWYgKCAkcHJvcHMtPnsic3ZrOm1lcmdlIn0gKSB7Ci0JCSRzZWxmLT5maW5kX2V4dHJhX3N2a19wYXJlbnRzKCRwcm9wcy0+eyJzdms6bWVyZ2UifSwgXEBwYXJlbnRzKTsKLQl9Ci0JaWYgKCAkcHJvcHMtPnsic3ZuOm1lcmdlaW5mbyJ9ICkgewotCQlteSAkbWlfY2hhbmdlcyA9ICRzZWxmLT5tZXJnZWluZm9fY2hhbmdlcwotCQkJKCRwYXJlbnRfcGF0aCwgJHBhcmVudF9yZXYsCi0JCQkgJHNlbGYtPnBhdGgsICRyZXYsCi0JCQkgJHByb3BzLT57InN2bjptZXJnZWluZm8ifSk7Ci0JCSRzZWxmLT5maW5kX2V4dHJhX3N2bl9wYXJlbnRzKCRtaV9jaGFuZ2VzLCBcQHBhcmVudHMpOworCWlmICgkc2VsZi0+Zm9sbG93X3BhcmVudCkgeworCQlteSAkdGlja2V0cyA9ICRwcm9wcy0+eyJzdms6bWVyZ2UifTsKKwkJaWYgKCR0aWNrZXRzKSB7CisJCQkkc2VsZi0+ZmluZF9leHRyYV9zdmtfcGFyZW50cygkdGlja2V0cywgXEBwYXJlbnRzKTsKKwkJfQorCisJCW15ICRtZXJnZWluZm9fcHJvcCA9ICRwcm9wcy0+eyJzdm46bWVyZ2VpbmZvIn07CisJCWlmICgkbWVyZ2VpbmZvX3Byb3ApIHsKKwkJCW15ICRtaV9jaGFuZ2VzID0gJHNlbGYtPm1lcmdlaW5mb19jaGFuZ2VzKAorCQkJCQkJJHBhcmVudF9wYXRoLAorCQkJCQkJJHBhcmVudF9yZXYsCisJCQkJCQkkc2VsZi0+cGF0aCwKKwkJCQkJCSRyZXYsCisJCQkJCQkkbWVyZ2VpbmZvX3Byb3ApOworCQkJJHNlbGYtPmZpbmRfZXh0cmFfc3ZuX3BhcmVudHMoJG1pX2NoYW5nZXMsIFxAcGFyZW50cyk7CisJCX0KIAl9CiAKIAlvcGVuIG15ICR1biwgJz4+JywgIiRzZWxmLT57ZGlyfS91bmhhbmRsZWQubG9nIiBvciBjcm9hayAkITsKZGlmZiAtLWdpdCBhL3BvL2lzLnBvIGIvcG8vaXMucG8KaW5kZXggODY5MmE4Yi4uYjhiMzRmZCAxMDA2NDQKLS0tIGEvcG8vaXMucG8KKysrIGIvcG8vaXMucG8KQEAgLTcsMTQgKzcsMTUgQEAKIG1zZ3N0ciAiIgogIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCiAiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDktMjAgMTQ6NDQrMDAwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDYtMDUgMTk6MDYgKzAwMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uIDxhdmFyYWJAZ21haWwuY29tPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE2LTA2LTE3IDE4OjU1KzAwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTA2LTE3IDE5OjE3KzAwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFZhc2NvIEFsbWVpZGEgPHZhc2NvbWFsbWVpZGFAc2Fwby5wdD5cbiIKICJMYW5ndWFnZS1UZWFtOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgogIkxhbmd1YWdlOiBpc1xuIgogIk1JTUUtVmVyc2lvbjogMS4wXG4iCiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS44LjVcbiIKIAogIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCiAjOiB0L3QwMjAwL3Rlc3QuYzo1CkBAIC03MiwyMiArNzMsMzEgQEAKIG1zZ2lkICJURVNUOiBBIFBlcmwgdGVzdCB2YXJpYWJsZSAlcyIKIG1zZ3N0ciAiVElMUkFVTjogUGVybCB0aWxyYXVuYXN0cmVuZ3VyIG1lw7AgYnJleXR1bm5pICVzIgogCi0jLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCi0jLiBleGlzdGluZyIgb3IgIkluaXRpYWxpemVkIGVtcHR5IiwgdGhlIHNlY29uZCAiIHNoYXJlZCIgb3IKLSMuICIiLCBhbmQgdGhlIGxhc3QgJyVzJXMnIGlzIHRoZSB2ZXJiYXRpbSBkaXJlY3RvcnkgbmFtZS4KLSM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NQorIzogYnVpbHRpbi9pbml0LWRiLmM6NDAyCiAjLCBjLWZvcm1hdAotbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgotbXNnc3RyICIlcyVzIEdpdCBsaW5kIMOtICVzJXNcbiIKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkVuZHVyZ2Vyw7BpIEdpdCBsaW5kIMOtICVzJXNcbiIKIAotIzogYnVpbHRpbi9pbml0LWRiLmM6MzU2Ci1tc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyIKLW1zZ3N0ciAiRW5kdXJnZXLDsGkiCisjOiBidWlsdGluL2luaXQtZGIuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkVuZHVyZ2Vyw7BpIEdpdCBsaW5kIMOtICVzJXNcbiIKIAotIzogYnVpbHRpbi9pbml0LWRiLmM6MzU2Ci1tc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCi1tc2dzdHIgIkJqw7MgdGlsIHTDs21hIgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkJqw7MgdGlsIHTDs21hIHNhbWVpZ2lubGVnYSBHaXQgbGluZCDDrSAlcyVzXG4iCiAKLSM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NwotbXNnaWQgIiBzaGFyZWQiCi1tc2dzdHIgIiBzYW1laWdpbmxlZ2EiCisjOiBidWlsdGluL2luaXQtZGIuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJCasOzIHRpbCB0w7NtYSBHaXQgbGluZCDDrSAlcyVzXG4iCisKKyN+IG1zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorI34gbXNnc3RyICJFbmR1cmdlcsOwaSIKKworI34gbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorI34gbXNnc3RyICJCasOzIHRpbCB0w7NtYSIKKworI34gbXNnaWQgIiBzaGFyZWQiCisjfiBtc2dzdHIgIiBzYW1laWdpbmxlZ2EiCmRpZmYgLS1naXQgYS9wcmV0dHkuYyBiL3ByZXR0eS5jCmluZGV4IDg3YzQ0OTcuLjk2MDlhZmIgMTAwNjQ0Ci0tLSBhL3ByZXR0eS5jCisrKyBiL3ByZXR0eS5jCkBAIC05Miw2ICs5Miw3IEBACiAJCXsgIm1lZGl1bSIsCUNNSVRfRk1UX01FRElVTSwJMCwJOCB9LAogCQl7ICJzaG9ydCIsCUNNSVRfRk1UX1NIT1JULAkJMCwJMCB9LAogCQl7ICJlbWFpbCIsCUNNSVRfRk1UX0VNQUlMLAkJMCwJMCB9LAorCQl7ICJtYm94cmQiLAlDTUlUX0ZNVF9NQk9YUkQsCTAsCTAgfSwKIAkJeyAiZnVsbGVyIiwJQ01JVF9GTVRfRlVMTEVSLAkwLAk4IH0sCiAJCXsgImZ1bGwiLAlDTUlUX0ZNVF9GVUxMLAkJMCwJOCB9LAogCQl7ICJvbmVsaW5lIiwJQ01JVF9GTVRfT05FTElORSwJMSwJMCB9CkBAIC00NDQsNyArNDQ1LDcgQEAKIAlpZiAocHAtPm1haWxtYXApCiAJCW1hcF91c2VyKHBwLT5tYWlsbWFwLCAmbWFpbGJ1ZiwgJm1haWxsZW4sICZuYW1lYnVmLCAmbmFtZWxlbik7CiAKLQlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCkgeworCWlmIChjbWl0X2ZtdF9pc19tYWlsKHBwLT5mbXQpKSB7CiAJCWlmIChwcC0+ZnJvbV9pZGVudCAmJiBpZGVudF9jbXAocHAtPmZyb21faWRlbnQsICZpZGVudCkpIHsKIAkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAKQEAgLTQ5NCw2ICs0OTUsNyBAQAogCQkJICAgIHNob3dfaWRlbnRfZGF0ZSgmaWRlbnQsICZwcC0+ZGF0ZV9tb2RlKSk7CiAJCWJyZWFrOwogCWNhc2UgQ01JVF9GTVRfRU1BSUw6CisJY2FzZSBDTUlUX0ZNVF9NQk9YUkQ6CiAJCXN0cmJ1Zl9hZGRmKHNiLCAiRGF0ZTogJXNcbiIsCiAJCQkgICAgc2hvd19pZGVudF9kYXRlKCZpZGVudCwgREFURV9NT0RFKFJGQzI4MjIpKSk7CiAJCWJyZWFrOwpAQCAtNTA3LDcgKzUwOSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGlzX2VtcHR5X2xpbmUoY29uc3QgY2hhciAqbGluZSwgaW50ICpsZW5fcCkKK3N0YXRpYyBpbnQgaXNfYmxhbmtfbGluZShjb25zdCBjaGFyICpsaW5lLCBpbnQgKmxlbl9wKQogewogCWludCBsZW4gPSAqbGVuX3A7CiAJd2hpbGUgKGxlbiAmJiBpc3NwYWNlKGxpbmVbbGVuIC0gMV0pKQpAQCAtNTE2LDE0ICs1MTgsMTQgQEAKIAlyZXR1cm4gIWxlbjsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfZW1wdHlfbGluZXMoY29uc3QgY2hhciAqbXNnKQorY29uc3QgY2hhciAqc2tpcF9ibGFua19saW5lcyhjb25zdCBjaGFyICptc2cpCiB7CiAJZm9yICg7OykgewogCQlpbnQgbGluZWxlbiA9IGdldF9vbmVfbGluZShtc2cpOwogCQlpbnQgbGwgPSBsaW5lbGVuOwogCQlpZiAoIWxpbmVsZW4pCiAJCQlicmVhazsKLQkJaWYgKCFpc19lbXB0eV9saW5lKG1zZywgJmxsKSkKKwkJaWYgKCFpc19ibGFua19saW5lKG1zZywgJmxsKSkKIAkJCWJyZWFrOwogCQltc2cgKz0gbGluZWxlbjsKIAl9CkBAIC01MzUsNyArNTM3LDcgQEAKIHsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsKIAotCWlmICgocHAtPmZtdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKSB8fCAocHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCkgfHwKKwlpZiAoKHBwLT5mbXQgPT0gQ01JVF9GTVRfT05FTElORSkgfHwgKGNtaXRfZm10X2lzX21haWwocHAtPmZtdCkpIHx8CiAJICAgICFwYXJlbnQgfHwgIXBhcmVudC0+bmV4dCkKIAkJcmV0dXJuOwogCkBAIC04NzUsNyArODc3LDcgQEAKIAkJaW50IGxpbmVsZW4gPSBnZXRfb25lX2xpbmUobGluZSk7CiAKIAkJbXNnICs9IGxpbmVsZW47Ci0JCWlmICghbGluZWxlbiB8fCBpc19lbXB0eV9saW5lKGxpbmUsICZsaW5lbGVuKSkKKwkJaWYgKCFsaW5lbGVuIHx8IGlzX2JsYW5rX2xpbmUobGluZSwgJmxpbmVsZW4pKQogCQkJYnJlYWs7CiAKIAkJaWYgKCFzYikKQEAgLTg5NCwxMSArODk2LDExIEBACiAJY29uc3QgY2hhciAqbXNnID0gYy0+bWVzc2FnZSArIGMtPm1lc3NhZ2Vfb2ZmOwogCWNvbnN0IGNoYXIgKnN0YXJ0ID0gYy0+bWVzc2FnZTsKIAotCW1zZyA9IHNraXBfZW1wdHlfbGluZXMobXNnKTsKKwltc2cgPSBza2lwX2JsYW5rX2xpbmVzKG1zZyk7CiAJYy0+c3ViamVjdF9vZmYgPSBtc2cgLSBzdGFydDsKIAogCW1zZyA9IGZvcm1hdF9zdWJqZWN0KE5VTEwsIG1zZywgTlVMTCk7Ci0JbXNnID0gc2tpcF9lbXB0eV9saW5lcyhtc2cpOworCW1zZyA9IHNraXBfYmxhbmtfbGluZXMobXNnKTsKIAljLT5ib2R5X29mZiA9IG1zZyAtIHN0YXJ0OwogCiAJYy0+Y29tbWl0X21lc3NhZ2VfcGFyc2VkID0gMTsKQEAgLTEwMjIsOSArMTAyNCwxNSBAQAogCQlpbnQgd2lkdGg7CiAJCWlmICghZW5kIHx8IGVuZCA9PSBzdGFydCkKIAkJCXJldHVybiAwOwotCQl3aWR0aCA9IHN0cnRvdWwoc3RhcnQsICZuZXh0LCAxMCk7CisJCXdpZHRoID0gc3RydG9sKHN0YXJ0LCAmbmV4dCwgMTApOwogCQlpZiAobmV4dCA9PSBzdGFydCB8fCB3aWR0aCA9PSAwKQogCQkJcmV0dXJuIDA7CisJCWlmICh3aWR0aCA8IDApIHsKKwkJCWlmICh0b19jb2x1bW4pCisJCQkJd2lkdGggKz0gdGVybV9jb2x1bW5zKCk7CisJCQlpZiAod2lkdGggPCAwKQorCQkJCXJldHVybiAwOworCQl9CiAJCWMtPnBhZGRpbmcgPSB0b19jb2x1bW4gPyAtd2lkdGggOiB3aWR0aDsKIAkJYy0+Zmx1c2hfdHlwZSA9IGZsdXNoX3R5cGU7CiAKQEAgLTEwNjMsNyArMTA3MSw3IEBACiAJc3dpdGNoIChwbGFjZWhvbGRlclswXSkgewogCWNhc2UgJ0MnOgogCQlpZiAoc3RhcnRzX3dpdGgocGxhY2Vob2xkZXIgKyAxLCAiKGF1dG8pIikpIHsKLQkJCWMtPmF1dG9fY29sb3IgPSAxOworCQkJYy0+YXV0b19jb2xvciA9IHdhbnRfY29sb3IoYy0+cHJldHR5X2N0eC0+Y29sb3IpOwogCQkJcmV0dXJuIDc7IC8qIGNvbnN1bWVkIDcgYnl0ZXMsICJDKGF1dG8pIiAqLwogCQl9IGVsc2UgewogCQkJaW50IHJldCA9IHBhcnNlX2NvbG9yKHNiLCBwbGFjZWhvbGRlciwgYyk7CkBAIC0xMTM1LDggKzExNDMsOCBAQAogCQkJc3RyYnVmX2FkZHN0cihzYiwgZGlmZl9nZXRfY29sb3IoYy0+YXV0b19jb2xvciwgRElGRl9SRVNFVCkpOwogCQkJcmV0dXJuIDE7CiAJCX0KLQkJc3RyYnVmX2FkZHN0cihzYiwgZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0Lm9pZC5oYXNoLAotCQkJCQkJICAgICBjLT5wcmV0dHlfY3R4LT5hYmJyZXYpKTsKKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHNiLCBjb21taXQtPm9iamVjdC5vaWQuaGFzaCwKKwkJCQkJIGMtPnByZXR0eV9jdHgtPmFiYnJldik7CiAJCXN0cmJ1Zl9hZGRzdHIoc2IsIGRpZmZfZ2V0X2NvbG9yKGMtPmF1dG9fY29sb3IsIERJRkZfUkVTRVQpKTsKIAkJYy0+YWJicmV2X2NvbW1pdF9oYXNoLmxlbiA9IHNiLT5sZW4gLSBjLT5hYmJyZXZfY29tbWl0X2hhc2gub2ZmOwogCQlyZXR1cm4gMTsKQEAgLTExNDYsOCArMTE1NCw4IEBACiAJY2FzZSAndCc6CQkvKiBhYmJyZXZpYXRlZCB0cmVlIGhhc2ggKi8KIAkJaWYgKGFkZF9hZ2FpbihzYiwgJmMtPmFiYnJldl90cmVlX2hhc2gpKQogCQkJcmV0dXJuIDE7Ci0JCXN0cmJ1Zl9hZGRzdHIoc2IsIGZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPnRyZWUtPm9iamVjdC5vaWQuaGFzaCwKLQkJCQkJCSAgICAgYy0+cHJldHR5X2N0eC0+YWJicmV2KSk7CisJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldihzYiwgY29tbWl0LT50cmVlLT5vYmplY3Qub2lkLmhhc2gsCisJCQkJCSBjLT5wcmV0dHlfY3R4LT5hYmJyZXYpOwogCQljLT5hYmJyZXZfdHJlZV9oYXNoLmxlbiA9IHNiLT5sZW4gLSBjLT5hYmJyZXZfdHJlZV9oYXNoLm9mZjsKIAkJcmV0dXJuIDE7CiAJY2FzZSAnUCc6CQkvKiBwYXJlbnQgaGFzaGVzICovCkBAIC0xMTYzLDkgKzExNzEsOCBAQAogCQlmb3IgKHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CiAJCQlpZiAocCAhPSBjb21taXQtPnBhcmVudHMpCiAJCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOwotCQkJc3RyYnVmX2FkZHN0cihzYiwgZmluZF91bmlxdWVfYWJicmV2KAotCQkJCQlwLT5pdGVtLT5vYmplY3Qub2lkLmhhc2gsCi0JCQkJCWMtPnByZXR0eV9jdHgtPmFiYnJldikpOworCQkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHNiLCBwLT5pdGVtLT5vYmplY3Qub2lkLmhhc2gsCisJCQkJCQkgYy0+cHJldHR5X2N0eC0+YWJicmV2KTsKIAkJfQogCQljLT5hYmJyZXZfcGFyZW50X2hhc2hlcy5sZW4gPSBzYi0+bGVuIC0KIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+YWJicmV2X3BhcmVudF9oYXNoZXMub2ZmOwpAQCAtMTI5OSw2ICsxMzA2LDcgQEAKIAkJaWYgKCFzdGFydCkKIAkJCXN0YXJ0ID0gc2ItPmJ1ZjsKIAkJb2NjdXBpZWQgPSB1dGY4X3N0cm53aWR0aChzdGFydCwgLTEsIDEpOworCQlvY2N1cGllZCArPSBjLT5wcmV0dHlfY3R4LT5ncmFwaF93aWR0aDsKIAkJcGFkZGluZyA9ICgtcGFkZGluZykgLSBvY2N1cGllZDsKIAl9CiAJd2hpbGUgKDEpIHsKQEAgLTE2MTQsNyArMTYyMiw3IEBACiAJaWYgKHBwLT5hZnRlcl9zdWJqZWN0KSB7CiAJCXN0cmJ1Zl9hZGRzdHIoc2IsIHBwLT5hZnRlcl9zdWJqZWN0KTsKIAl9Ci0JaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfRU1BSUwpIHsKKwlpZiAoY21pdF9mbXRfaXNfbWFpbChwcC0+Zm10KSkgewogCQlzdHJidWZfYWRkY2goc2IsICdcbicpOwogCX0KIApAQCAtMTY5Nyw2ICsxNzA1LDE2IEBACiAJCXN0cmJ1Zl9hZGQoc2IsIGxpbmUsIGxpbmVsZW4pOwogfQogCitzdGF0aWMgaW50IGlzX21ib3hyZF9mcm9tKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJLyoKKwkgKiBhIGxpbmUgbWF0Y2hpbmcgL15Gcm9tICQvIGhlcmUgd291bGQgb25seSBoYXZlIGxlbiA9PSA0CisJICogYXQgdGhpcyBwb2ludCBiZWNhdXNlIGlzX2VtcHR5X2xpbmUgd291bGQndmUgdHJpbW1lZCBhbGwKKwkgKiB0cmFpbGluZyBzcGFjZQorCSAqLworCXJldHVybiBsZW4gPiA0ICYmIHN0YXJ0c193aXRoKGxpbmUgKyBzdHJzcG4obGluZSwgIj4iKSwgIkZyb20gIik7Cit9CisKIHZvaWQgcHBfcmVtYWluZGVyKHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCiAJCSAgY29uc3QgY2hhciAqKm1zZ19wLAogCQkgIHN0cnVjdCBzdHJidWYgKnNiLApAQCAtMTcxMSw3ICsxNzI5LDcgQEAKIAkJaWYgKCFsaW5lbGVuKQogCQkJYnJlYWs7CiAKLQkJaWYgKGlzX2VtcHR5X2xpbmUobGluZSwgJmxpbmVsZW4pKSB7CisJCWlmIChpc19ibGFua19saW5lKGxpbmUsICZsaW5lbGVuKSkgewogCQkJaWYgKGZpcnN0KQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfU0hPUlQpCkBAIC0xNzI1LDggKzE3NDMsMTMgQEAKIAkJZWxzZSBpZiAocHAtPmV4cGFuZF90YWJzX2luX2xvZykKIAkJCXN0cmJ1Zl9hZGRfdGFiZXhwYW5kKHNiLCBwcC0+ZXhwYW5kX3RhYnNfaW5fbG9nLAogCQkJCQkgICAgIGxpbmUsIGxpbmVsZW4pOwotCQllbHNlCisJCWVsc2UgeworCQkJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfTUJPWFJEICYmCisJCQkJCWlzX21ib3hyZF9mcm9tKGxpbmUsIGxpbmVsZW4pKQorCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJz4nKTsKKwogCQkJc3RyYnVmX2FkZChzYiwgbGluZSwgbGluZWxlbik7CisJCX0KIAkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKIAl9CiB9CkBAIC0xNzUwLDE0ICsxNzczLDE0IEBACiAJZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOwogCW1zZyA9IHJlZW5jb2RlZCA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIE5VTEwsIGVuY29kaW5nKTsKIAotCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX09ORUxJTkUgfHwgcHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCkKKwlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9PTkVMSU5FIHx8IGNtaXRfZm10X2lzX21haWwocHAtPmZtdCkpCiAJCWluZGVudCA9IDA7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gY2hlY2sgYW5kIGVtaXQgQ29udGVudC10eXBlOiB0byBtYXJrIGl0CiAJICogYXMgOC1iaXQgaWYgd2UgaGF2ZW4ndCBkb25lIHNvLgogCSAqLwotCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX0VNQUlMICYmIG5lZWRfOGJpdF9jdGUgPT0gMCkgeworCWlmIChjbWl0X2ZtdF9pc19tYWlsKHBwLT5mbXQpICYmIG5lZWRfOGJpdF9jdGUgPT0gMCkgewogCQlpbnQgaSwgY2gsIGluX2JvZHk7CiAKIAkJZm9yIChpbl9ib2R5ID0gaSA9IDA7IChjaCA9IG1zZ1tpXSk7IGkrKykgewpAQCAtMTc4MiwxMCArMTgwNSwxMCBAQAogCX0KIAogCS8qIFNraXAgZXhjZXNzIGJsYW5rIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYm9keSwgaWYgYW55Li4uICovCi0JbXNnID0gc2tpcF9lbXB0eV9saW5lcyhtc2cpOworCW1zZyA9IHNraXBfYmxhbmtfbGluZXMobXNnKTsKIAogCS8qIFRoZXNlIGZvcm1hdHMgdHJlYXQgdGhlIHRpdGxlIGxpbmUgc3BlY2lhbGx5LiAqLwotCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX09ORUxJTkUgfHwgcHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCkKKwlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9PTkVMSU5FIHx8IGNtaXRfZm10X2lzX21haWwocHAtPmZtdCkpCiAJCXBwX3RpdGxlX2xpbmUocHAsICZtc2csIHNiLCBlbmNvZGluZywgbmVlZF84Yml0X2N0ZSk7CiAKIAliZWdpbm5pbmdfb2ZfYm9keSA9IHNiLT5sZW47CkBAIC0xODAyLDcgKzE4MjUsNyBAQAogCSAqIGZvcm1hdC4gIE1ha2Ugc3VyZSB3ZSBkaWQgbm90IHN0cmlwIHRoZSBibGFuayBsaW5lCiAJICogYmV0d2VlbiB0aGUgaGVhZGVyIGFuZCB0aGUgYm9keS4KIAkgKi8KLQlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCAmJiBzYi0+bGVuIDw9IGJlZ2lubmluZ19vZl9ib2R5KQorCWlmIChjbWl0X2ZtdF9pc19tYWlsKHBwLT5mbXQpICYmIHNiLT5sZW4gPD0gYmVnaW5uaW5nX29mX2JvZHkpCiAJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CiAKIAl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgcmVlbmNvZGVkKTsKZGlmZiAtLWdpdCBhL3F1b3RlLmMgYi9xdW90ZS5jCmluZGV4IGIyODFhOGYuLjUzYjk4YTUgMTAwNjQ0Ci0tLSBhL3F1b3RlLmMKKysrIGIvcXVvdGUuYwpAQCAtNDUzLDMgKzQ1Myw0MCBAQAogCX0KIAlzdHJidWZfYWRkY2goc2IsICciJyk7CiB9CisKK3ZvaWQgYmFzaWNfcmVnZXhfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzcmMpCit7CisJY2hhciBjOworCisJaWYgKCpzcmMgPT0gJ14nKSB7CisJCS8qIG9ubHkgYmVnaW5uaW5nICdeJyBpcyBzcGVjaWFsIGFuZCBuZWVkcyBxdW90aW5nICovCisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xcJyk7CisJCXN0cmJ1Zl9hZGRjaChzYiwgKnNyYysrKTsKKwl9CisJaWYgKCpzcmMgPT0gJyonKQorCQkvKiBiZWdpbm5pbmcgJyonIGlzIG5vdCBzcGVjaWFsLCBubyBxdW90aW5nICovCisJCXN0cmJ1Zl9hZGRjaChzYiwgKnNyYysrKTsKKworCXdoaWxlICgoYyA9ICpzcmMrKykpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ1snOgorCQljYXNlICcuJzoKKwkJY2FzZSAnXFwnOgorCQljYXNlICcqJzoKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xcJyk7CisJCQlzdHJidWZfYWRkY2goc2IsIGMpOworCQkJYnJlYWs7CisKKwkJY2FzZSAnJCc6CisJCQkvKiBvbmx5IHRoZSBlbmQgJyQnIGlzIHNwZWNpYWwgYW5kIG5lZWRzIHF1b3RpbmcgKi8KKwkJCWlmICgqc3JjID09ICdcMCcpCisJCQkJc3RyYnVmX2FkZGNoKHNiLCAnXFwnKTsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgYyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJc3RyYnVmX2FkZGNoKHNiLCBjKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvcXVvdGUuaCBiL3F1b3RlLmgKaW5kZXggNmM1M2EyYy4uNjZmNTY0NCAxMDA2NDQKLS0tIGEvcXVvdGUuaAorKysgYi9xdW90ZS5oCkBAIC03MCw1ICs3MCw2IEBACiBleHRlcm4gdm9pZCBwZXJsX3F1b3RlX2J1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqc3JjKTsKIGV4dGVybiB2b2lkIHB5dGhvbl9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYyk7CiBleHRlcm4gdm9pZCB0Y2xfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzcmMpOworZXh0ZXJuIHZvaWQgYmFzaWNfcmVnZXhfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzcmMpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3JlYWQtY2FjaGUuYyBiL3JlYWQtY2FjaGUuYwppbmRleCBkOWZiNzhiLi40OTFlNTJkIDEwMDY0NAotLS0gYS9yZWFkLWNhY2hlLmMKKysrIGIvcmVhZC1jYWNoZS5jCkBAIC0xOSw5ICsxOSw2IEBACiAjaW5jbHVkZSAic3BsaXQtaW5kZXguaCIKICNpbmNsdWRlICJ1dGY4LmgiCiAKLXN0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlZnJlc2hfY2FjaGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBvcHRpb25zKTsKLQogLyogTWFzayBmb3IgdGhlIG5hbWUgbGVuZ3RoIGluIGNlX2ZsYWdzIGluIHRoZSBvbi1kaXNrIGluZGV4ICovCiAKICNkZWZpbmUgQ0VfTkFNRU1BU0sgICgweDBmZmYpCkBAIC02MzAsNyArNjI3LDcgQEAKIAloYXNoY3B5KGNlLT5zaGExLCBzaGExKTsKIH0KIAotaW50IGFkZF90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKnN0LCBpbnQgZmxhZ3MpCitpbnQgYWRkX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBmbGFncywgaW50IGZvcmNlX21vZGUpCiB7CiAJaW50IHNpemUsIG5hbWVsZW4sIHdhc19zYW1lOwogCW1vZGVfdCBzdF9tb2RlID0gc3QtPnN0X21vZGU7CkBAIC02NTksNyArNjU2LDkgQEAKIAllbHNlCiAJCWNlLT5jZV9mbGFncyB8PSBDRV9JTlRFTlRfVE9fQUREOwogCi0JaWYgKHRydXN0X2V4ZWN1dGFibGVfYml0ICYmIGhhc19zeW1saW5rcykKKwlpZiAoU19JU1JFRyhzdF9tb2RlKSAmJiBmb3JjZV9tb2RlKQorCQljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKGZvcmNlX21vZGUpOworCWVsc2UgaWYgKHRydXN0X2V4ZWN1dGFibGVfYml0ICYmIGhhc19zeW1saW5rcykKIAkJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShzdF9tb2RlKTsKIAllbHNlIHsKIAkJLyogSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgZW50cnksIHBpY2sgdGhlIG1vZGUgYml0cyBhbmQgdHlwZQpAQCAtNzIwLDEyICs3MTksMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGFkZF9maWxlX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MpCitpbnQgYWRkX2ZpbGVfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJaW50IGZsYWdzLCBpbnQgZm9yY2VfbW9kZSkKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlpZiAobHN0YXQocGF0aCwgJnN0KSkKIAkJZGllX2Vycm5vKCJ1bmFibGUgdG8gc3RhdCAnJXMnIiwgcGF0aCk7Ci0JcmV0dXJuIGFkZF90b19pbmRleChpc3RhdGUsIHBhdGgsICZzdCwgZmxhZ3MpOworCXJldHVybiBhZGRfdG9faW5kZXgoaXN0YXRlLCBwYXRoLCAmc3QsIGZsYWdzLCBmb3JjZV9tb2RlKTsKIH0KIAogc3RydWN0IGNhY2hlX2VudHJ5ICptYWtlX2NhY2hlX2VudHJ5KHVuc2lnbmVkIGludCBtb2RlLApAQCAtMTI1NCw3ICsxMjU0LDcgQEAKIAlyZXR1cm4gaGFzX2Vycm9yczsKIH0KIAotc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVmcmVzaF9jYWNoZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgb3B0aW9ucykKIHsKIAlyZXR1cm4gcmVmcmVzaF9jYWNoZV9lbnQoJnRoZV9pbmRleCwgY2UsIG9wdGlvbnMsIE5VTEwsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvcmVmbG9nLXdhbGsuYyBiL3JlZmxvZy13YWxrLmMKaW5kZXggMGViZDFkYS4uYTI0NmFmMiAxMDA2NDQKLS0tIGEvcmVmbG9nLXdhbGsuYworKysgYi9yZWZsb2ctd2Fsay5jCkBAIC0yNDEsNiArMjQxLDEyIEBACiAJCWxvZ29iaiA9IHBhcnNlX29iamVjdChyZWZsb2ctPm9zaGExKTsKIAl9IHdoaWxlIChjb21taXRfcmVmbG9nLT5yZWNubyAmJiAobG9nb2JqICYmIGxvZ29iai0+dHlwZSAhPSBPQkpfQ09NTUlUKSk7CiAKKwlpZiAoIWxvZ29iaiAmJiBjb21taXRfcmVmbG9nLT5yZWNubyA+PSAwICYmIGlzX251bGxfc2hhMShyZWZsb2ctPm9zaGExKSkgeworCQkvKiBhIHJvb3QgY29tbWl0LCBidXQgdGhlcmUgYXJlIHN0aWxsIG1vcmUgZW50cmllcyB0byBzaG93ICovCisJCXJlZmxvZyA9ICZjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5pdGVtc1tjb21taXRfcmVmbG9nLT5yZWNub107CisJCWxvZ29iaiA9IHBhcnNlX29iamVjdChyZWZsb2ctPm5zaGExKTsKKwl9CisKIAlpZiAoIWxvZ29iaiB8fCBsb2dvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkgewogCQljb21taXRfaW5mby0+Y29tbWl0ID0gTlVMTDsKIAkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKZGlmZiAtLWdpdCBhL3JlZnMuYyBiL3JlZnMuYwppbmRleCA4N2RjODJmLi5iNGU3Y2FjIDEwMDY0NAotLS0gYS9yZWZzLmMKKysrIGIvcmVmcy5jCkBAIC0xMjAsMjUgKzEyMCwzMyBAQAogCiBpbnQgcmVmbmFtZV9pc19zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUpCiB7Ci0JaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzLyIpKSB7CisJY29uc3QgY2hhciAqcmVzdDsKKworCWlmIChza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy8iLCAmcmVzdCkpIHsKIAkJY2hhciAqYnVmOwogCQlpbnQgcmVzdWx0OworCQlzaXplX3QgcmVzdGxlbiA9IHN0cmxlbihyZXN0KTsKIAotCQlidWYgPSB4bWFsbG9jeihzdHJsZW4ocmVmbmFtZSkpOworCQkvKiByZXN0IG11c3Qgbm90IGJlIGVtcHR5LCBvciBzdGFydCBvciBlbmQgd2l0aCAiLyIgKi8KKwkJaWYgKCFyZXN0bGVuIHx8ICpyZXN0ID09ICcvJyB8fCByZXN0W3Jlc3RsZW4gLSAxXSA9PSAnLycpCisJCQlyZXR1cm4gMDsKKwogCQkvKgogCQkgKiBEb2VzIHRoZSByZWZuYW1lIHRyeSB0byBlc2NhcGUgcmVmcy8/CiAJCSAqIEZvciBleGFtcGxlOiByZWZzL2Zvby8uLi9iYXIgaXMgc2FmZSBidXQgcmVmcy9mb28vLi4vLi4vYmFyCiAJCSAqIGlzIG5vdC4KIAkJICovCi0JCXJlc3VsdCA9ICFub3JtYWxpemVfcGF0aF9jb3B5KGJ1ZiwgcmVmbmFtZSArIHN0cmxlbigicmVmcy8iKSk7CisJCWJ1ZiA9IHhtYWxsb2N6KHJlc3RsZW4pOworCQlyZXN1bHQgPSAhbm9ybWFsaXplX3BhdGhfY29weShidWYsIHJlc3QpICYmICFzdHJjbXAoYnVmLCByZXN0KTsKIAkJZnJlZShidWYpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KLQl3aGlsZSAoKnJlZm5hbWUpIHsKKworCWRvIHsKIAkJaWYgKCFpc3VwcGVyKCpyZWZuYW1lKSAmJiAqcmVmbmFtZSAhPSAnXycpCiAJCQlyZXR1cm4gMDsKIAkJcmVmbmFtZSsrOwotCX0KKwl9IHdoaWxlICgqcmVmbmFtZSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQ5Niw3ICs1MDQsNyBAQAogCWZpbGVuYW1lID0gZ2l0X3BhdGgoIiVzIiwgcHNldWRvcmVmKTsKIAlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxvY2ssIGZpbGVuYW1lLCBMT0NLX0RJRV9PTl9FUlJPUik7CiAJaWYgKGZkIDwgMCkgewotCQlzdHJidWZfYWRkZihlcnIsICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIsCisJCXN0cmJ1Zl9hZGRmKGVyciwgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIiwKIAkJCSAgICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTUwNywxNCArNTE1LDE0IEBACiAJCWlmIChyZWFkX3JlZihwc2V1ZG9yZWYsIGFjdHVhbF9vbGRfc2hhMSkpCiAJCQlkaWUoImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIiwgcHNldWRvcmVmKTsKIAkJaWYgKGhhc2hjbXAoYWN0dWFsX29sZF9zaGExLCBvbGRfc2hhMSkpIHsKLQkJCXN0cmJ1Zl9hZGRmKGVyciwgIlVuZXhwZWN0ZWQgc2hhMSB3aGVuIHdyaXRpbmcgJXMiLCBwc2V1ZG9yZWYpOworCQkJc3RyYnVmX2FkZGYoZXJyLCAidW5leHBlY3RlZCBzaGExIHdoZW4gd3JpdGluZyAnJXMnIiwgcHNldWRvcmVmKTsKIAkJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAl9CiAKIAlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLmJ1ZiwgYnVmLmxlbikgIT0gYnVmLmxlbikgewotCQlzdHJidWZfYWRkZihlcnIsICJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIsIGZpbGVuYW1lKTsKKwkJc3RyYnVmX2FkZGYoZXJyLCAiY291bGQgbm90IHdyaXRlIHRvICclcyciLCBmaWxlbmFtZSk7CiAJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC03NTgsMTMgKzc2NiwzMyBAQAogCWZyZWUodHJhbnNhY3Rpb24pOwogfQogCi1zdGF0aWMgc3RydWN0IHJlZl91cGRhdGUgKmFkZF91cGRhdGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCi0JCQkJICAgICBjb25zdCBjaGFyICpyZWZuYW1lKQorc3RydWN0IHJlZl91cGRhdGUgKnJlZl90cmFuc2FjdGlvbl9hZGRfdXBkYXRlKAorCQlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJCWNvbnN0IGNoYXIgKm1zZykKIHsKIAlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlOworCisJaWYgKHRyYW5zYWN0aW9uLT5zdGF0ZSAhPSBSRUZfVFJBTlNBQ1RJT05fT1BFTikKKwkJZGllKCJCVUc6IHVwZGF0ZSBjYWxsZWQgZm9yIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IG9wZW4iKTsKKworCWlmICgoZmxhZ3MgJiBSRUZfSVNQUlVOSU5HKSAmJiAhKGZsYWdzICYgUkVGX05PREVSRUYpKQorCQlkaWUoIkJVRzogUkVGX0lTUFJVTklORyBzZXQgd2l0aG91dCBSRUZfTk9ERVJFRiIpOworCiAJRkxFWF9BTExPQ19TVFIodXBkYXRlLCByZWZuYW1lLCByZWZuYW1lKTsKIAlBTExPQ19HUk9XKHRyYW5zYWN0aW9uLT51cGRhdGVzLCB0cmFuc2FjdGlvbi0+bnIgKyAxLCB0cmFuc2FjdGlvbi0+YWxsb2MpOwogCXRyYW5zYWN0aW9uLT51cGRhdGVzW3RyYW5zYWN0aW9uLT5ucisrXSA9IHVwZGF0ZTsKKworCXVwZGF0ZS0+ZmxhZ3MgPSBmbGFnczsKKworCWlmIChmbGFncyAmIFJFRl9IQVZFX05FVykKKwkJaGFzaGNweSh1cGRhdGUtPm5ld19zaGExLCBuZXdfc2hhMSk7CisJaWYgKGZsYWdzICYgUkVGX0hBVkVfT0xEKQorCQloYXNoY3B5KHVwZGF0ZS0+b2xkX3NoYTEsIG9sZF9zaGExKTsKKwlpZiAobXNnKQorCQl1cGRhdGUtPm1zZyA9IHhzdHJkdXAobXNnKTsKIAlyZXR1cm4gdXBkYXRlOwogfQogCkBAIC03NzUsMzIgKzgwMywyMCBAQAogCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICptc2csCiAJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCiB7Ci0Jc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZTsKLQogCWFzc2VydChlcnIpOwogCi0JaWYgKHRyYW5zYWN0aW9uLT5zdGF0ZSAhPSBSRUZfVFJBTlNBQ1RJT05fT1BFTikKLQkJZGllKCJCVUc6IHVwZGF0ZSBjYWxsZWQgZm9yIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IG9wZW4iKTsKLQotCWlmIChuZXdfc2hhMSAmJiAhaXNfbnVsbF9zaGExKG5ld19zaGExKSAmJgotCSAgICBjaGVja19yZWZuYW1lX2Zvcm1hdChyZWZuYW1lLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSkgewotCQlzdHJidWZfYWRkZihlcnIsICJyZWZ1c2luZyB0byB1cGRhdGUgcmVmIHdpdGggYmFkIG5hbWUgJXMiLAorCWlmICgobmV3X3NoYTEgJiYgIWlzX251bGxfc2hhMShuZXdfc2hhMSkpID8KKwkgICAgY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmbmFtZSwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkgOgorCSAgICAhcmVmbmFtZV9pc19zYWZlKHJlZm5hbWUpKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIiwKIAkJCSAgICByZWZuYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXVwZGF0ZSA9IGFkZF91cGRhdGUodHJhbnNhY3Rpb24sIHJlZm5hbWUpOwotCWlmIChuZXdfc2hhMSkgewotCQloYXNoY3B5KHVwZGF0ZS0+bmV3X3NoYTEsIG5ld19zaGExKTsKLQkJZmxhZ3MgfD0gUkVGX0hBVkVfTkVXOwotCX0KLQlpZiAob2xkX3NoYTEpIHsKLQkJaGFzaGNweSh1cGRhdGUtPm9sZF9zaGExLCBvbGRfc2hhMSk7Ci0JCWZsYWdzIHw9IFJFRl9IQVZFX09MRDsKLQl9Ci0JdXBkYXRlLT5mbGFncyA9IGZsYWdzOwotCWlmIChtc2cpCi0JCXVwZGF0ZS0+bXNnID0geHN0cmR1cChtc2cpOworCWZsYWdzIHw9IChuZXdfc2hhMSA/IFJFRl9IQVZFX05FVyA6IDApIHwgKG9sZF9zaGExID8gUkVGX0hBVkVfT0xEIDogMCk7CisKKwlyZWZfdHJhbnNhY3Rpb25fYWRkX3VwZGF0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSwgZmxhZ3MsCisJCQkJICAgbmV3X3NoYTEsIG9sZF9zaGExLCBtc2cpOwogCXJldHVybiAwOwogfQogCkBAIC05MDYsNyArOTIyLDcgQEAKIAkJCS8qIC0yIGZvciBzdHJsZW4oIiUuKnMiKSAtIHN0cmxlbigiJXMiKTsgKzEgZm9yIE5VTCAqLwogCQkJdG90YWxfbGVuICs9IHN0cmxlbihyZWZfcmV2X3BhcnNlX3J1bGVzW25yX3J1bGVzXSkgLSAyICsgMTsKIAotCQlzY2FuZl9mbXRzID0geG1hbGxvYyhzdF9hZGQoc3RfbXVsdChucl9ydWxlcywgc2l6ZW9mKGNoYXIgKikpLCB0b3RhbF9sZW4pKTsKKwkJc2NhbmZfZm10cyA9IHhtYWxsb2Moc3RfYWRkKHN0X211bHQoc2l6ZW9mKGNoYXIgKiksIG5yX3J1bGVzKSwgdG90YWxfbGVuKSk7CiAKIAkJb2Zmc2V0ID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IG5yX3J1bGVzOyBpKyspIHsKQEAgLTExMDQsNiArMTEyMCwyNiBAQAogCXJldHVybiBoZWFkX3JlZl9zdWJtb2R1bGUoTlVMTCwgZm4sIGNiX2RhdGEpOwogfQogCisvKgorICogQ2FsbCBmbiBmb3IgZWFjaCByZWZlcmVuY2UgaW4gdGhlIHNwZWNpZmllZCBzdWJtb2R1bGUgZm9yIHdoaWNoIHRoZQorICogcmVmbmFtZSBiZWdpbnMgd2l0aCBwcmVmaXguIElmIHRyaW0gaXMgbm9uLXplcm8sIHRoZW4gdHJpbSB0aGF0CisgKiBtYW55IGNoYXJhY3RlcnMgb2ZmIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCByZWZuYW1lIGJlZm9yZSBwYXNzaW5nCisgKiB0aGUgcmVmbmFtZSB0byBmbi4gZmxhZ3MgY2FuIGJlIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOIHRvCisgKiBpbmNsdWRlIGJyb2tlbiByZWZlcmVuY2VzIGluIHRoZSBpdGVyYXRpb24uIElmIGZuIGV2ZXIgcmV0dXJucyBhCisgKiBub24temVybyB2YWx1ZSwgc3RvcCB0aGUgaXRlcmF0aW9uIGFuZCByZXR1cm4gdGhhdCB2YWx1ZTsKKyAqIG90aGVyd2lzZSwgcmV0dXJuIDAuCisgKi8KK3N0YXRpYyBpbnQgZG9fZm9yX2VhY2hfcmVmKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgZWFjaF9yZWZfZm4gZm4sIGludCB0cmltLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjsKKworCWl0ZXIgPSBmaWxlc19yZWZfaXRlcmF0b3JfYmVnaW4oc3VibW9kdWxlLCBwcmVmaXgsIGZsYWdzKTsKKwlpdGVyID0gcHJlZml4X3JlZl9pdGVyYXRvcl9iZWdpbihpdGVyLCBwcmVmaXgsIHRyaW0pOworCisJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZl9pdGVyYXRvcihpdGVyLCBmbiwgY2JfZGF0YSk7Cit9CisKIGludCBmb3JfZWFjaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCiB7CiAJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZihOVUxMLCAiIiwgZm4sIDAsIDAsIGNiX2RhdGEpOwpkaWZmIC0tZ2l0IGEvcmVmcy5oIGIvcmVmcy5oCmluZGV4IDkyMzBkNDcuLjFiMDIwNDMgMTAwNjQ0Ci0tLSBhL3JlZnMuaAorKysgYi9yZWZzLmgKQEAgLTUyLDE5ICs1MiwxOSBAQAogI2RlZmluZSBSRVNPTFZFX1JFRl9OT19SRUNVUlNFIDB4MDIKICNkZWZpbmUgUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUUgMHgwNAogCi1leHRlcm4gY29uc3QgY2hhciAqcmVzb2x2ZV9yZWZfdW5zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAotCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCAqZmxhZ3MpOworY29uc3QgY2hhciAqcmVzb2x2ZV9yZWZfdW5zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCAqZmxhZ3MpOwogCi1leHRlcm4gY2hhciAqcmVzb2x2ZV9yZWZkdXAoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHJlc29sdmVfZmxhZ3MsCi0JCQkgICAgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50ICpmbGFncyk7CitjaGFyICpyZXNvbHZlX3JlZmR1cChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgcmVzb2x2ZV9mbGFncywKKwkJICAgICB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgKmZsYWdzKTsKIAotZXh0ZXJuIGludCByZWFkX3JlZl9mdWxsKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAotCQkJIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCAqZmxhZ3MpOwotZXh0ZXJuIGludCByZWFkX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2ludCByZWFkX3JlZl9mdWxsKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAorCQkgIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCAqZmxhZ3MpOworaW50IHJlYWRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogCi1leHRlcm4gaW50IHJlZl9leGlzdHMoY29uc3QgY2hhciAqcmVmbmFtZSk7CitpbnQgcmVmX2V4aXN0cyhjb25zdCBjaGFyICpyZWZuYW1lKTsKIAotZXh0ZXJuIGludCBpc19icmFuY2goY29uc3QgY2hhciAqcmVmbmFtZSk7CitpbnQgaXNfYnJhbmNoKGNvbnN0IGNoYXIgKnJlZm5hbWUpOwogCiAvKgogICogSWYgcmVmbmFtZSBpcyBhIG5vbi1zeW1ib2xpYyByZWZlcmVuY2UgdGhhdCByZWZlcnMgdG8gYSB0YWcgb2JqZWN0LApAQCAtNzQsMjQgKzc0LDI1IEBACiAgKiBTeW1ib2xpYyByZWZlcmVuY2VzIGFyZSBjb25zaWRlcmVkIHVucGVlbGFibGUsIGV2ZW4gaWYgdGhleQogICogdWx0aW1hdGVseSByZXNvbHZlIHRvIGEgcGVlbGFibGUgdGFnLgogICovCi1leHRlcm4gaW50IHBlZWxfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworaW50IHBlZWxfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogCiAvKioKICAqIFJlc29sdmUgcmVmbmFtZSBpbiB0aGUgbmVzdGVkICJnaXRsaW5rIiByZXBvc2l0b3J5IHRoYXQgaXMgbG9jYXRlZAogICogYXQgcGF0aC4gIElmIHRoZSByZXNvbHV0aW9uIGlzIHN1Y2Nlc3NmdWwsIHJldHVybiAwIGFuZCBzZXQgc2hhMSB0bwogICogdGhlIG5hbWUgb2YgdGhlIG9iamVjdDsgb3RoZXJ3aXNlLCByZXR1cm4gYSBub24temVybyB2YWx1ZS4KICAqLwotZXh0ZXJuIGludCByZXNvbHZlX2dpdGxpbmtfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworaW50IHJlc29sdmVfZ2l0bGlua19yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCXVuc2lnbmVkIGNoYXIgKnNoYTEpOwogCiAvKgogICogUmV0dXJuIHRydWUgaWZmIGFiYnJldl9uYW1lIGlzIGEgcG9zc2libGUgYWJicmV2aWF0aW9uIGZvcgogICogZnVsbF9uYW1lIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZGVmaW5lZCBieSByZWZfcmV2X3BhcnNlX3J1bGVzIGluCiAgKiByZWZzLmMuCiAgKi8KLWV4dGVybiBpbnQgcmVmbmFtZV9tYXRjaChjb25zdCBjaGFyICphYmJyZXZfbmFtZSwgY29uc3QgY2hhciAqZnVsbF9uYW1lKTsKK2ludCByZWZuYW1lX21hdGNoKGNvbnN0IGNoYXIgKmFiYnJldl9uYW1lLCBjb25zdCBjaGFyICpmdWxsX25hbWUpOwogCi1leHRlcm4gaW50IGR3aW1fcmVmKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqKnJlZik7Ci1leHRlcm4gaW50IGR3aW1fbG9nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqKnJlZik7CitpbnQgZHdpbV9yZWYoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqcmVmKTsKK2ludCBkd2ltX2xvZyhjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKipyZWYpOwogCiAvKgogICogQSByZWZfdHJhbnNhY3Rpb24gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgcmVmIHVwZGF0ZXMKQEAgLTE0MCw3ICsxNDEsOSBAQAogc3RydWN0IHJlZl90cmFuc2FjdGlvbjsKIAogLyoKLSAqIEJpdCB2YWx1ZXMgc2V0IGluIHRoZSBmbGFncyBhcmd1bWVudCBwYXNzZWQgdG8gZWFjaF9yZWZfZm4oKToKKyAqIEJpdCB2YWx1ZXMgc2V0IGluIHRoZSBmbGFncyBhcmd1bWVudCBwYXNzZWQgdG8gZWFjaF9yZWZfZm4oKSBhbmQKKyAqIHN0b3JlZCBpbiByZWZfaXRlcmF0b3I6OmZsYWdzLiBPdGhlciBiaXRzIGFyZSBmb3IgaW50ZXJuYWwgdXNlCisgKiBvbmx5OgogICovCiAKIC8qIFJlZmVyZW5jZSBpcyBhIHN5bWJvbGljIHJlZmVyZW5jZS4gKi8KQEAgLTE4MiwzOCArMTg1LDQ1IEBACiAgKiBtb2RpZmllcyB0aGUgcmVmZXJlbmNlIGFsc28gcmV0dXJucyBhIG5vbnplcm8gdmFsdWUgdG8gaW1tZWRpYXRlbHkKICAqIHN0b3AgdGhlIGl0ZXJhdGlvbi4KICAqLwotZXh0ZXJuIGludCBoZWFkX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7Ci1leHRlcm4gaW50IGZvcl9lYWNoX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7Ci1leHRlcm4gaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKLWV4dGVybiBpbnQgZm9yX2VhY2hfZnVsbHJlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBpbnQgYnJva2VuKTsKLWV4dGVybiBpbnQgZm9yX2VhY2hfdGFnX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7Ci1leHRlcm4gaW50IGZvcl9lYWNoX2JyYW5jaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwotZXh0ZXJuIGludCBmb3JfZWFjaF9yZW1vdGVfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKLWV4dGVybiBpbnQgZm9yX2VhY2hfcmVwbGFjZV9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwotZXh0ZXJuIGludCBmb3JfZWFjaF9nbG9iX3JlZihlYWNoX3JlZl9mbiBmbiwgY29uc3QgY2hhciAqcGF0dGVybiwgdm9pZCAqY2JfZGF0YSk7Ci1leHRlcm4gaW50IGZvcl9lYWNoX2dsb2JfcmVmX2luKGVhY2hfcmVmX2ZuIGZuLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpwcmVmaXgsIHZvaWQgKmNiX2RhdGEpOworaW50IGhlYWRfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9mdWxscmVmX2luKGNvbnN0IGNoYXIgKnByZWZpeCwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEsCisJCQl1bnNpZ25lZCBpbnQgYnJva2VuKTsKK2ludCBmb3JfZWFjaF90YWdfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9icmFuY2hfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yZW1vdGVfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yZXBsYWNlX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfZ2xvYl9yZWYoZWFjaF9yZWZfZm4gZm4sIGNvbnN0IGNoYXIgKnBhdHRlcm4sIHZvaWQgKmNiX2RhdGEpOworaW50IGZvcl9lYWNoX2dsb2JfcmVmX2luKGVhY2hfcmVmX2ZuIGZuLCBjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgdm9pZCAqY2JfZGF0YSk7CiAKLWV4dGVybiBpbnQgaGVhZF9yZWZfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwotZXh0ZXJuIGludCBmb3JfZWFjaF9yZWZfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwotZXh0ZXJuIGludCBmb3JfZWFjaF9yZWZfaW5fc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgY29uc3QgY2hhciAqcHJlZml4LAoraW50IGhlYWRfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yZWZfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwKKwkJCSAgIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yZWZfaW5fc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgY29uc3QgY2hhciAqcHJlZml4LAogCQllYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7Ci1leHRlcm4gaW50IGZvcl9lYWNoX3RhZ19yZWZfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwotZXh0ZXJuIGludCBmb3JfZWFjaF9icmFuY2hfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKLWV4dGVybiBpbnQgZm9yX2VhY2hfcmVtb3RlX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfdGFnX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLAorCQkJICAgICAgIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9icmFuY2hfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsCisJCQkJICBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfcmVtb3RlX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLAorCQkJCSAgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwogCi1leHRlcm4gaW50IGhlYWRfcmVmX25hbWVzcGFjZWQoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwotZXh0ZXJuIGludCBmb3JfZWFjaF9uYW1lc3BhY2VkX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgaGVhZF9yZWZfbmFtZXNwYWNlZChlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfbmFtZXNwYWNlZF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwogCiAvKiBjYW4gYmUgdXNlZCB0byBsZWFybiBhYm91dCBicm9rZW4gcmVmIGFuZCBzeW1yZWYgKi8KLWV4dGVybiBpbnQgZm9yX2VhY2hfcmF3cmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yYXdyZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOwogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmhhc19nbG9iX3NwZWNpYWxzKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiB7CiAJcmV0dXJuIHN0cnBicmsocGF0dGVybiwgIj8qWyIpOwogfQogCi1leHRlcm4gdm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZihGSUxFICpmcCwgY29uc3QgY2hhciAqbXNnX2ZtdCwgY29uc3QgY2hhciAqcmVmbmFtZSk7Ci1leHRlcm4gdm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZnMoRklMRSAqZnAsIGNvbnN0IGNoYXIgKm1zZ19mbXQsIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMpOwordm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZihGSUxFICpmcCwgY29uc3QgY2hhciAqbXNnX2ZtdCwgY29uc3QgY2hhciAqcmVmbmFtZSk7Cit2b2lkIHdhcm5fZGFuZ2xpbmdfc3ltcmVmcyhGSUxFICpmcCwgY29uc3QgY2hhciAqbXNnX2ZtdCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMpOwogCiAvKgogICogRmxhZ3MgZm9yIGNvbnRyb2xsaW5nIGJlaGF2aW91ciBvZiBwYWNrX3JlZnMoKQpAQCAtMjQ1LDEzICsyNTUsMTMgQEAKIGludCBzYWZlX2NyZWF0ZV9yZWZsb2coY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IGZvcmNlX2NyZWF0ZSwgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKIAogLyoqIFJlYWRzIGxvZyBmb3IgdGhlIHZhbHVlIG9mIHJlZiBkdXJpbmcgYXRfdGltZS4gKiovCi1leHRlcm4gaW50IHJlYWRfcmVmX2F0KGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGludCBmbGFncywKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXRfdGltZSwgaW50IGNudCwKLQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKiptc2csCi0JCSAgICAgICB1bnNpZ25lZCBsb25nICpjdXRvZmZfdGltZSwgaW50ICpjdXRvZmZfdHosIGludCAqY3V0b2ZmX2NudCk7CitpbnQgcmVhZF9yZWZfYXQoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLAorCQl1bnNpZ25lZCBsb25nIGF0X3RpbWUsIGludCBjbnQsCisJCXVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKiptc2csCisJCXVuc2lnbmVkIGxvbmcgKmN1dG9mZl90aW1lLCBpbnQgKmN1dG9mZl90eiwgaW50ICpjdXRvZmZfY250KTsKIAogLyoqIENoZWNrIGlmIGEgcGFydGljdWxhciByZWZsb2cgZXhpc3RzICovCi1leHRlcm4gaW50IHJlZmxvZ19leGlzdHMoY29uc3QgY2hhciAqcmVmbmFtZSk7CitpbnQgcmVmbG9nX2V4aXN0cyhjb25zdCBjaGFyICpyZWZuYW1lKTsKIAogLyoKICAqIERlbGV0ZSB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZS4gSWYgb2xkX3NoYTEgaXMgbm9uLU5VTEwsIHRoZW4KQEAgLTI2MCwyMSArMjcwLDI2IEBACiAgKiBleGlzdHMsIHJlZ2FyZGxlc3Mgb2YgaXRzIG9sZCB2YWx1ZS4gSXQgaXMgYW4gZXJyb3IgZm9yIG9sZF9zaGExIHRvCiAgKiBiZSBOVUxMX1NIQTEuIGZsYWdzIGlzIHBhc3NlZCB0aHJvdWdoIHRvIHJlZl90cmFuc2FjdGlvbl9kZWxldGUoKS4KICAqLwotZXh0ZXJuIGludCBkZWxldGVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAotCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworaW50IGRlbGV0ZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJICAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CiAKIC8qCiAgKiBEZWxldGUgdGhlIHNwZWNpZmllZCByZWZlcmVuY2VzLiBJZiB0aGVyZSBhcmUgYW55IHByb2JsZW1zLCBlbWl0CiAgKiBlcnJvcnMgYnV0IGF0dGVtcHQgdG8ga2VlcCBnb2luZyAoaS5lLiwgdGhlIGRlbGV0ZXMgYXJlIG5vdCBkb25lIGluCi0gKiBhbiBhbGwtb3Itbm90aGluZyB0cmFuc2FjdGlvbikuCisgKiBhbiBhbGwtb3Itbm90aGluZyB0cmFuc2FjdGlvbikuIGZsYWdzIGlzIHBhc3NlZCB0aHJvdWdoIHRvCisgKiByZWZfdHJhbnNhY3Rpb25fZGVsZXRlKCkuCiAgKi8KLWV4dGVybiBpbnQgZGVsZXRlX3JlZnMoc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcyk7CitpbnQgZGVsZXRlX3JlZnMoc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcywgdW5zaWduZWQgaW50IGZsYWdzKTsKIAogLyoqIERlbGV0ZSBhIHJlZmxvZyAqLwotZXh0ZXJuIGludCBkZWxldGVfcmVmbG9nKGNvbnN0IGNoYXIgKnJlZm5hbWUpOworaW50IGRlbGV0ZV9yZWZsb2coY29uc3QgY2hhciAqcmVmbmFtZSk7CiAKIC8qIGl0ZXJhdGUgb3ZlciByZWZsb2cgZW50cmllcyAqLwotdHlwZWRlZiBpbnQgZWFjaF9yZWZsb2dfZW50X2ZuKHVuc2lnbmVkIGNoYXIgKm9zaGExLCB1bnNpZ25lZCBjaGFyICpuc2hhMSwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nLCBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK3R5cGVkZWYgaW50IGVhY2hfcmVmbG9nX2VudF9mbigKKwkJdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAorCQljb25zdCBjaGFyICpjb21taXR0ZXIsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wLAorCQlpbnQgdHosIGNvbnN0IGNoYXIgKm1zZywgdm9pZCAqY2JfZGF0YSk7CisKIGludCBmb3JfZWFjaF9yZWZsb2dfZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CiBpbnQgZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CiAKQEAgLTI4Miw3ICsyOTcsNyBAQAogICogQ2FsbHMgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWZsb2cgZmlsZSB1bnRpbCBpdCByZXR1cm5zIG5vbnplcm8sCiAgKiBhbmQgcmV0dXJucyB0aGUgdmFsdWUKICAqLwotZXh0ZXJuIGludCBmb3JfZWFjaF9yZWZsb2coZWFjaF9yZWZfZm4sIHZvaWQgKik7CitpbnQgZm9yX2VhY2hfcmVmbG9nKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKIAogI2RlZmluZSBSRUZOQU1FX0FMTE9XX09ORUxFVkVMIDEKICNkZWZpbmUgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gMgpAQCAtMjk1LDE2ICszMTAsMTYgQEAKICAqIGFsbG93IGEgc2luZ2xlICIqIiB3aWxkY2FyZCBjaGFyYWN0ZXIgaW4gdGhlIHJlZnNwZWMuIE5vIGxlYWRpbmcgb3IKICAqIHJlcGVhdGVkIHNsYXNoZXMgYXJlIGFjY2VwdGVkLgogICovCi1leHRlcm4gaW50IGNoZWNrX3JlZm5hbWVfZm9ybWF0KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmbGFncyk7CitpbnQgY2hlY2tfcmVmbmFtZV9mb3JtYXQoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IGZsYWdzKTsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKnByZXR0aWZ5X3JlZm5hbWUoY29uc3QgY2hhciAqcmVmbmFtZSk7Citjb25zdCBjaGFyICpwcmV0dGlmeV9yZWZuYW1lKGNvbnN0IGNoYXIgKnJlZm5hbWUpOwogCi1leHRlcm4gY2hhciAqc2hvcnRlbl91bmFtYmlndW91c19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHN0cmljdCk7CitjaGFyICpzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgc3RyaWN0KTsKIAogLyoqIHJlbmFtZSByZWYsIHJldHVybiAwIG9uIHN1Y2Nlc3MgKiovCi1leHRlcm4gaW50IHJlbmFtZV9yZWYoY29uc3QgY2hhciAqb2xkcmVmLCBjb25zdCBjaGFyICpuZXdyZWYsIGNvbnN0IGNoYXIgKmxvZ21zZyk7CitpbnQgcmVuYW1lX3JlZihjb25zdCBjaGFyICpvbGRyZWYsIGNvbnN0IGNoYXIgKm5ld3JlZiwgY29uc3QgY2hhciAqbG9nbXNnKTsKIAotZXh0ZXJuIGludCBjcmVhdGVfc3ltcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IGNoYXIgKnRhcmdldCwgY29uc3QgY2hhciAqbG9nbXNnKTsKK2ludCBjcmVhdGVfc3ltcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IGNoYXIgKnRhcmdldCwgY29uc3QgY2hhciAqbG9nbXNnKTsKIAogLyoKICAqIFVwZGF0ZSBIRUFEIG9mIHRoZSBzcGVjaWZpZWQgZ2l0ZGlyLgpAQCAtMzEzLDcgKzMyOCw3IEBACiAgKiAkR0lUX0RJUiBwb2ludHMgdG8uCiAgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBub24temVybyBvdGhlcndpc2UuCiAgKiAqLwotZXh0ZXJuIGludCBzZXRfd29ya3RyZWVfaGVhZF9zeW1yZWYoY29uc3QgY2hhciAqZ2l0ZGlyLCBjb25zdCBjaGFyICp0YXJnZXQpOworaW50IHNldF93b3JrdHJlZV9oZWFkX3N5bXJlZihjb25zdCBjaGFyICpnaXRkaXIsIGNvbnN0IGNoYXIgKnRhcmdldCk7CiAKIGVudW0gYWN0aW9uX29uX2VyciB7CiAJVVBEQVRFX1JFRlNfTVNHX09OX0VSUiwKQEAgLTM0NSw3ICszNjAsNyBAQAogICogICAgIG1zZyAtLSBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgY2hhbmdlIChmb3IgdGhlIHJlZmxvZykuCiAgKgogICogICAgIGVyciAtLSBhIHN0cmJ1ZiBmb3IgcmVjZWl2aW5nIGEgZGVzY3JpcHRpb24gb2YgYW55IGVycm9yIHRoYXQKLSAqICAgICAgICAgbWlnaHQgaGF2ZSBvY2N1cmVkLgorICogICAgICAgICBtaWdodCBoYXZlIG9jY3VycmVkLgogICoKICAqIFRoZSBmdW5jdGlvbnMgbWFrZSBpbnRlcm5hbCBjb3BpZXMgb2YgcmVmbmFtZSBhbmQgbXNnLCBzbyB0aGUKICAqIGNhbGxlciByZXRhaW5zIG93bmVyc2hpcCBvZiB0aGVzZSBwYXJhbWV0ZXJzLgpAQCAtNDYzLDcgKzQ3OCw3IEBACiAJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKIAkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIGFjdGlvbl9vbl9lcnIgb25lcnIpOwogCi1leHRlcm4gaW50IHBhcnNlX2hpZGVfcmVmc19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgY29uc3QgY2hhciAqKTsKK2ludCBwYXJzZV9oaWRlX3JlZnNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IGNoYXIgKik7CiAKIC8qCiAgKiBDaGVjayB3aGV0aGVyIGEgcmVmIGlzIGhpZGRlbi4gSWYgbm8gbmFtZXNwYWNlIGlzIHNldCwgYm90aCB0aGUgZmlyc3QgYW5kCkBAIC00NzMsNyArNDg4LDcgQEAKICAqIHRoZSByZWYgaXMgb3V0c2lkZSB0aGF0IG5hbWVzcGFjZSwgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBOVUxMLiBUaGUgc2Vjb25kCiAgKiBwYXJhbWV0ZXIgYWx3YXlzIHBvaW50cyB0byB0aGUgZnVsbCByZWYgbmFtZS4KICAqLwotZXh0ZXJuIGludCByZWZfaXNfaGlkZGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludCByZWZfaXNfaGlkZGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIAogZW51bSByZWZfdHlwZSB7CiAJUkVGX1RZUEVfUEVSX1dPUktUUkVFLApAQCAtNTIyLDExICs1MzcsMTEgQEAKICAqIGVudW0gZXhwaXJlX3JlZmxvZ19mbGFncy4gVGhlIHRocmVlIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBkZXNjcmliZWQKICAqIGFib3ZlLiBPbiBzdWNjZXNzLCByZXR1cm4gemVyby4KICAqLwotZXh0ZXJuIGludCByZWZsb2dfZXhwaXJlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzLAotCQkJIHJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbiBwcmVwYXJlX2ZuLAotCQkJIHJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuIHNob3VsZF9wcnVuZV9mbiwKLQkJCSByZWZsb2dfZXhwaXJ5X2NsZWFudXBfZm4gY2xlYW51cF9mbiwKLQkJCSB2b2lkICpwb2xpY3lfY2JfZGF0YSk7CitpbnQgcmVmbG9nX2V4cGlyZShjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgIHVuc2lnbmVkIGludCBmbGFncywKKwkJICByZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4gcHJlcGFyZV9mbiwKKwkJICByZWZsb2dfZXhwaXJ5X3Nob3VsZF9wcnVuZV9mbiBzaG91bGRfcHJ1bmVfZm4sCisJCSAgcmVmbG9nX2V4cGlyeV9jbGVhbnVwX2ZuIGNsZWFudXBfZm4sCisJCSAgdm9pZCAqcG9saWN5X2NiX2RhdGEpOwogCiAjZW5kaWYgLyogUkVGU19IICovCmRpZmYgLS1naXQgYS9yZWZzL2ZpbGVzLWJhY2tlbmQuYyBiL3JlZnMvZmlsZXMtYmFja2VuZC5jCmluZGV4IDFmMzgwNzYuLjEyMjkwZDIgMTAwNjQ0Ci0tLSBhL3JlZnMvZmlsZXMtYmFja2VuZC5jCisrKyBiL3JlZnMvZmlsZXMtYmFja2VuZC5jCkBAIC0xLDEzICsxLDE0IEBACiAjaW5jbHVkZSAiLi4vY2FjaGUuaCIKICNpbmNsdWRlICIuLi9yZWZzLmgiCiAjaW5jbHVkZSAicmVmcy1pbnRlcm5hbC5oIgorI2luY2x1ZGUgIi4uL2l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiLi4vZGlyLWl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiLi4vbG9ja2ZpbGUuaCIKICNpbmNsdWRlICIuLi9vYmplY3QuaCIKICNpbmNsdWRlICIuLi9kaXIuaCIKIAogc3RydWN0IHJlZl9sb2NrIHsKIAljaGFyICpyZWZfbmFtZTsKLQljaGFyICpvcmlnX3JlZl9uYW1lOwogCXN0cnVjdCBsb2NrX2ZpbGUgKmxrOwogCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKIH07CkBAIC01MTQsNjggKzUxNSwzNiBAQAogfQogCiAvKgotICogUmV0dXJuIHRydWUgaWZmIHRoZSByZWZlcmVuY2UgZGVzY3JpYmVkIGJ5IGVudHJ5IGNhbiBiZSByZXNvbHZlZCB0bwotICogYW4gb2JqZWN0IGluIHRoZSBkYXRhYmFzZS4gIEVtaXQgYSB3YXJuaW5nIGlmIHRoZSByZWZlcnJlZC10bwotICogb2JqZWN0IGRvZXMgbm90IGV4aXN0LgorICogUmV0dXJuIHRydWUgaWYgcmVmbmFtZSwgd2hpY2ggaGFzIHRoZSBzcGVjaWZpZWQgb2lkIGFuZCBmbGFncywgY2FuCisgKiBiZSByZXNvbHZlZCB0byBhbiBvYmplY3QgaW4gdGhlIGRhdGFiYXNlLiBJZiB0aGUgcmVmZXJyZWQtdG8gb2JqZWN0CisgKiBkb2VzIG5vdCBleGlzdCwgZW1pdCBhIHdhcm5pbmcgYW5kIHJldHVybiBmYWxzZS4KICAqLwotc3RhdGljIGludCByZWZfcmVzb2x2ZXNfdG9fb2JqZWN0KHN0cnVjdCByZWZfZW50cnkgKmVudHJ5KQorc3RhdGljIGludCByZWZfcmVzb2x2ZXNfdG9fb2JqZWN0KGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JaWYgKGVudHJ5LT5mbGFnICYgUkVGX0lTQlJPS0VOKQorCWlmIChmbGFncyAmIFJFRl9JU0JST0tFTikKIAkJcmV0dXJuIDA7Ci0JaWYgKCFoYXNfc2hhMV9maWxlKGVudHJ5LT51LnZhbHVlLm9pZC5oYXNoKSkgewotCQllcnJvcigiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIiwgZW50cnktPm5hbWUpOworCWlmICghaGFzX3NoYTFfZmlsZShvaWQtPmhhc2gpKSB7CisJCWVycm9yKCIlcyBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIG9iamVjdCEiLCByZWZuYW1lKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwogfQogCiAvKgotICogY3VycmVudF9yZWYgaXMgYSBwZXJmb3JtYW5jZSBoYWNrOiB3aGVuIGl0ZXJhdGluZyBvdmVyIHJlZmVyZW5jZXMKLSAqIHVzaW5nIHRoZSBmb3JfZWFjaF9yZWYqKCkgZnVuY3Rpb25zLCBjdXJyZW50X3JlZiBpcyBzZXQgdG8gdGhlCi0gKiBjdXJyZW50IHJlZmVyZW5jZSdzIGVudHJ5IGJlZm9yZSBjYWxsaW5nIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gIElmCi0gKiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbHMgcGVlbF9yZWYoKSwgdGhlbiBwZWVsX3JlZigpIGZpcnN0Ci0gKiBjaGVja3Mgd2hldGhlciB0aGUgcmVmZXJlbmNlIHRvIGJlIHBlZWxlZCBpcyB0aGUgY3VycmVudCByZWZlcmVuY2UKLSAqIChpdCB1c3VhbGx5IGlzKSBhbmQgaWYgc28sIHJldHVybnMgdGhhdCByZWZlcmVuY2UncyBwZWVsZWQgdmVyc2lvbgotICogaWYgaXQgaXMgYXZhaWxhYmxlLiAgVGhpcyBhdm9pZHMgYSByZWZuYW1lIGxvb2t1cCBpbiBhIGNvbW1vbiBjYXNlLgorICogUmV0dXJuIHRydWUgaWYgdGhlIHJlZmVyZW5jZSBkZXNjcmliZWQgYnkgZW50cnkgY2FuIGJlIHJlc29sdmVkIHRvCisgKiBhbiBvYmplY3QgaW4gdGhlIGRhdGFiYXNlOyBvdGhlcndpc2UsIGVtaXQgYSB3YXJuaW5nIGFuZCByZXR1cm4KKyAqIGZhbHNlLgogICovCi1zdGF0aWMgc3RydWN0IHJlZl9lbnRyeSAqY3VycmVudF9yZWY7CitzdGF0aWMgaW50IGVudHJ5X3Jlc29sdmVzX3RvX29iamVjdChzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSkKK3sKKwlyZXR1cm4gcmVmX3Jlc29sdmVzX3RvX29iamVjdChlbnRyeS0+bmFtZSwKKwkJCQkgICAgICAmZW50cnktPnUudmFsdWUub2lkLCBlbnRyeS0+ZmxhZyk7Cit9CiAKIHR5cGVkZWYgaW50IGVhY2hfcmVmX2VudHJ5X2ZuKHN0cnVjdCByZWZfZW50cnkgKmVudHJ5LCB2b2lkICpjYl9kYXRhKTsKIAotc3RydWN0IHJlZl9lbnRyeV9jYiB7Ci0JY29uc3QgY2hhciAqYmFzZTsKLQlpbnQgdHJpbTsKLQlpbnQgZmxhZ3M7Ci0JZWFjaF9yZWZfZm4gKmZuOwotCXZvaWQgKmNiX2RhdGE7Ci19OwotCi0vKgotICogSGFuZGxlIG9uZSByZWZlcmVuY2UgaW4gYSBkb19mb3JfZWFjaF9yZWYqKCktc3R5bGUgaXRlcmF0aW9uLAotICogY2FsbGluZyBhbiBlYWNoX3JlZl9mbiBmb3IgZWFjaCBlbnRyeS4KLSAqLwotc3RhdGljIGludCBkb19vbmVfcmVmKHN0cnVjdCByZWZfZW50cnkgKmVudHJ5LCB2b2lkICpjYl9kYXRhKQotewotCXN0cnVjdCByZWZfZW50cnlfY2IgKmRhdGEgPSBjYl9kYXRhOwotCXN0cnVjdCByZWZfZW50cnkgKm9sZF9jdXJyZW50X3JlZjsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKCFzdGFydHNfd2l0aChlbnRyeS0+bmFtZSwgZGF0YS0+YmFzZSkpCi0JCXJldHVybiAwOwotCi0JaWYgKCEoZGF0YS0+ZmxhZ3MgJiBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTikgJiYKLQkgICAgICAhcmVmX3Jlc29sdmVzX3RvX29iamVjdChlbnRyeSkpCi0JCXJldHVybiAwOwotCi0JLyogU3RvcmUgdGhlIG9sZCB2YWx1ZSwgaW4gY2FzZSB0aGlzIGlzIGEgcmVjdXJzaXZlIGNhbGw6ICovCi0Jb2xkX2N1cnJlbnRfcmVmID0gY3VycmVudF9yZWY7Ci0JY3VycmVudF9yZWYgPSBlbnRyeTsKLQlyZXR2YWwgPSBkYXRhLT5mbihlbnRyeS0+bmFtZSArIGRhdGEtPnRyaW0sICZlbnRyeS0+dS52YWx1ZS5vaWQsCi0JCQkgIGVudHJ5LT5mbGFnLCBkYXRhLT5jYl9kYXRhKTsKLQljdXJyZW50X3JlZiA9IG9sZF9jdXJyZW50X3JlZjsKLQlyZXR1cm4gcmV0dmFsOwotfQotCiAvKgogICogQ2FsbCBmbiBmb3IgZWFjaCByZWZlcmVuY2UgaW4gZGlyIHRoYXQgaGFzIGluZGV4IGluIHRoZSByYW5nZQogICogb2Zmc2V0IDw9IGluZGV4IDwgZGlyLT5uci4gIFJlY3Vyc2UgaW50byBzdWJkaXJlY3RvcmllcyB0aGF0IGFyZSBpbgpAQCAtNjA1LDc4ICs1NzQsNiBAQAogfQogCiAvKgotICogQ2FsbCBmbiBmb3IgZWFjaCByZWZlcmVuY2UgaW4gdGhlIHVuaW9uIG9mIGRpcjEgYW5kIGRpcjIsIGluIG9yZGVyCi0gKiBieSByZWZuYW1lLiAgUmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzLiAgSWYgYSB2YWx1ZSBlbnRyeSBhcHBlYXJzCi0gKiBpbiBib3RoIGRpcjEgYW5kIGRpcjIsIHRoZW4gb25seSBwcm9jZXNzIHRoZSB2ZXJzaW9uIHRoYXQgaXMgaW4KLSAqIGRpcjIuICBUaGUgaW5wdXQgZGlycyBtdXN0IGFscmVhZHkgYmUgc29ydGVkLCBidXQgc3ViZGlycyB3aWxsIGJlCi0gKiBzb3J0ZWQgYXMgbmVlZGVkLiAgZm4gaXMgY2FsbGVkIGZvciBhbGwgcmVmZXJlbmNlcywgaW5jbHVkaW5nCi0gKiBicm9rZW4gb25lcy4KLSAqLwotc3RhdGljIGludCBkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXJzKHN0cnVjdCByZWZfZGlyICpkaXIxLAotCQkJCSAgICAgc3RydWN0IHJlZl9kaXIgKmRpcjIsCi0JCQkJICAgICBlYWNoX3JlZl9lbnRyeV9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKLXsKLQlpbnQgcmV0dmFsOwotCWludCBpMSA9IDAsIGkyID0gMDsKLQotCWFzc2VydChkaXIxLT5zb3J0ZWQgPT0gZGlyMS0+bnIpOwotCWFzc2VydChkaXIyLT5zb3J0ZWQgPT0gZGlyMi0+bnIpOwotCXdoaWxlICgxKSB7Ci0JCXN0cnVjdCByZWZfZW50cnkgKmUxLCAqZTI7Ci0JCWludCBjbXA7Ci0JCWlmIChpMSA9PSBkaXIxLT5ucikgewotCQkJcmV0dXJuIGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcihkaXIyLCBpMiwgZm4sIGNiX2RhdGEpOwotCQl9Ci0JCWlmIChpMiA9PSBkaXIyLT5ucikgewotCQkJcmV0dXJuIGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcihkaXIxLCBpMSwgZm4sIGNiX2RhdGEpOwotCQl9Ci0JCWUxID0gZGlyMS0+ZW50cmllc1tpMV07Ci0JCWUyID0gZGlyMi0+ZW50cmllc1tpMl07Ci0JCWNtcCA9IHN0cmNtcChlMS0+bmFtZSwgZTItPm5hbWUpOwotCQlpZiAoY21wID09IDApIHsKLQkJCWlmICgoZTEtPmZsYWcgJiBSRUZfRElSKSAmJiAoZTItPmZsYWcgJiBSRUZfRElSKSkgewotCQkJCS8qIEJvdGggYXJlIGRpcmVjdG9yaWVzOyBkZXNjZW5kIHRoZW0gaW4gcGFyYWxsZWwuICovCi0JCQkJc3RydWN0IHJlZl9kaXIgKnN1YmRpcjEgPSBnZXRfcmVmX2RpcihlMSk7Ci0JCQkJc3RydWN0IHJlZl9kaXIgKnN1YmRpcjIgPSBnZXRfcmVmX2RpcihlMik7Ci0JCQkJc29ydF9yZWZfZGlyKHN1YmRpcjEpOwotCQkJCXNvcnRfcmVmX2RpcihzdWJkaXIyKTsKLQkJCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXJzKAotCQkJCQkJc3ViZGlyMSwgc3ViZGlyMiwgZm4sIGNiX2RhdGEpOwotCQkJCWkxKys7Ci0JCQkJaTIrKzsKLQkJCX0gZWxzZSBpZiAoIShlMS0+ZmxhZyAmIFJFRl9ESVIpICYmICEoZTItPmZsYWcgJiBSRUZfRElSKSkgewotCQkJCS8qIEJvdGggYXJlIHJlZmVyZW5jZXM7IGlnbm9yZSB0aGUgb25lIGZyb20gZGlyMS4gKi8KLQkJCQlyZXR2YWwgPSBmbihlMiwgY2JfZGF0YSk7Ci0JCQkJaTErKzsKLQkJCQlpMisrOwotCQkJfSBlbHNlIHsKLQkJCQlkaWUoImNvbmZsaWN0IGJldHdlZW4gcmVmZXJlbmNlIGFuZCBkaXJlY3Rvcnk6ICVzIiwKLQkJCQkgICAgZTEtPm5hbWUpOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3RydWN0IHJlZl9lbnRyeSAqZTsKLQkJCWlmIChjbXAgPCAwKSB7Ci0JCQkJZSA9IGUxOwotCQkJCWkxKys7Ci0JCQl9IGVsc2UgewotCQkJCWUgPSBlMjsKLQkJCQlpMisrOwotCQkJfQotCQkJaWYgKGUtPmZsYWcgJiBSRUZfRElSKSB7Ci0JCQkJc3RydWN0IHJlZl9kaXIgKnN1YmRpciA9IGdldF9yZWZfZGlyKGUpOwotCQkJCXNvcnRfcmVmX2RpcihzdWJkaXIpOwotCQkJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcigKLQkJCQkJCXN1YmRpciwgMCwgZm4sIGNiX2RhdGEpOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR2YWwgPSBmbihlLCBjYl9kYXRhKTsKLQkJCX0KLQkJfQotCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKLQl9Ci19Ci0KLS8qCiAgKiBMb2FkIGFsbCBvZiB0aGUgcmVmcyBmcm9tIHRoZSBkaXIgaW50byBvdXIgaW4tbWVtb3J5IGNhY2hlLiBUaGUgaGFyZCB3b3JrCiAgKiBvZiBsb2FkaW5nIGxvb3NlIHJlZnMgaXMgZG9uZSBieSBnZXRfcmVmX2RpcigpLCBzbyB3ZSBqdXN0IG5lZWQgdG8gcmVjdXJzZQogICogdGhyb3VnaCBhbGwgb2YgdGhlIHN1Yi1kaXJlY3Rvcmllcy4gV2UgZG8gbm90IGV2ZW4gbmVlZCB0byBjYXJlIGFib3V0CkBAIC02OTIsNiArNTg5LDE1MyBAQAogCX0KIH0KIAorLyoKKyAqIEEgbGV2ZWwgaW4gdGhlIHJlZmVyZW5jZSBoaWVyYXJjaHkgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgaXRlcmF0ZWQKKyAqIHRocm91Z2guCisgKi8KK3N0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3JfbGV2ZWwgeworCS8qCisJICogVGhlIHJlZl9kaXIgYmVpbmcgaXRlcmF0ZWQgb3ZlciBhdCB0aGlzIGxldmVsLiBUaGUgcmVmX2RpcgorCSAqIGlzIHNvcnRlZCBiZWZvcmUgYmVpbmcgc3RvcmVkIGhlcmUuCisJICovCisJc3RydWN0IHJlZl9kaXIgKmRpcjsKKworCS8qCisJICogVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGVudHJ5IHdpdGhpbiBkaXIgKHdoaWNoIG1pZ2h0CisJICogaXRzZWxmIGJlIGEgZGlyZWN0b3J5KS4gSWYgaW5kZXggPT0gLTEsIHRoZW4gdGhlIGl0ZXJhdGlvbgorCSAqIGhhc24ndCB5ZXQgYmVndW4uIElmIGluZGV4ID09IGRpci0+bnIsIHRoZW4gdGhlIGl0ZXJhdGlvbgorCSAqIHRocm91Z2ggdGhpcyBsZXZlbCBpcyBvdmVyLgorCSAqLworCWludCBpbmRleDsKK307CisKKy8qCisgKiBSZXByZXNlbnQgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSByZWZfZGlyIGluIHRoZSBtZW1vcnkgY2FjaGUuIFRoZQorICogaXRlcmF0aW9uIHJlY3Vyc2VzIHRocm91Z2ggc3ViZGlyZWN0b3JpZXMuCisgKi8KK3N0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3IgeworCXN0cnVjdCByZWZfaXRlcmF0b3IgYmFzZTsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBsZXZlbHMgY3VycmVudGx5IG9uIHRoZSBzdGFjay4gVGhpcyBpcyBhbHdheXMKKwkgKiBhdCBsZWFzdCAxLCBiZWNhdXNlIHdoZW4gaXQgYmVjb21lcyB6ZXJvIHRoZSBpdGVyYXRpb24gaXMKKwkgKiBlbmRlZCBhbmQgdGhpcyBzdHJ1Y3QgaXMgZnJlZWQuCisJICovCisJc2l6ZV90IGxldmVsc19ucjsKKworCS8qIFRoZSBudW1iZXIgb2YgbGV2ZWxzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgKi8KKwlzaXplX3QgbGV2ZWxzX2FsbG9jOworCisJLyoKKwkgKiBBIHN0YWNrIG9mIGxldmVscy4gbGV2ZWxzWzBdIGlzIHRoZSB1cHBlcm1vc3QgbGV2ZWwgdGhhdCBpcworCSAqIGJlaW5nIGl0ZXJhdGVkIG92ZXIgaW4gdGhpcyBpdGVyYXRpb24uIChUaGlzIGlzIG5vdAorCSAqIG5lY2Vzc2FyeSB0aGUgdG9wIGxldmVsIGluIHRoZSByZWZlcmVuY2VzIGhpZXJhcmNoeS4gSWYgd2UKKwkgKiBhcmUgaXRlcmF0aW5nIHRocm91Z2ggYSBzdWJ0cmVlLCB0aGVuIGxldmVsc1swXSB3aWxsIGhvbGQKKwkgKiB0aGUgcmVmX2RpciBmb3IgdGhhdCBzdWJ0cmVlLCBhbmQgc3Vic2VxdWVudCBsZXZlbHMgd2lsbCBnbworCSAqIG9uIGZyb20gdGhlcmUuKQorCSAqLworCXN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3JfbGV2ZWwgKmxldmVsczsKK307CisKK3N0YXRpYyBpbnQgY2FjaGVfcmVmX2l0ZXJhdG9yX2FkdmFuY2Uoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCXN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IGNhY2hlX3JlZl9pdGVyYXRvciAqKXJlZl9pdGVyYXRvcjsKKworCXdoaWxlICgxKSB7CisJCXN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3JfbGV2ZWwgKmxldmVsID0KKwkJCSZpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yIC0gMV07CisJCXN0cnVjdCByZWZfZGlyICpkaXIgPSBsZXZlbC0+ZGlyOworCQlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeTsKKworCQlpZiAobGV2ZWwtPmluZGV4ID09IC0xKQorCQkJc29ydF9yZWZfZGlyKGRpcik7CisKKwkJaWYgKCsrbGV2ZWwtPmluZGV4ID09IGxldmVsLT5kaXItPm5yKSB7CisJCQkvKiBUaGlzIGxldmVsIGlzIGV4aGF1c3RlZDsgcG9wIHVwIGEgbGV2ZWwgKi8KKwkJCWlmICgtLWl0ZXItPmxldmVsc19uciA9PSAwKQorCQkJCXJldHVybiByZWZfaXRlcmF0b3JfYWJvcnQocmVmX2l0ZXJhdG9yKTsKKworCQkJY29udGludWU7CisJCX0KKworCQllbnRyeSA9IGRpci0+ZW50cmllc1tsZXZlbC0+aW5kZXhdOworCisJCWlmIChlbnRyeS0+ZmxhZyAmIFJFRl9ESVIpIHsKKwkJCS8qIHB1c2ggZG93biBhIGxldmVsICovCisJCQlBTExPQ19HUk9XKGl0ZXItPmxldmVscywgaXRlci0+bGV2ZWxzX25yICsgMSwKKwkJCQkgICBpdGVyLT5sZXZlbHNfYWxsb2MpOworCisJCQlsZXZlbCA9ICZpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yKytdOworCQkJbGV2ZWwtPmRpciA9IGdldF9yZWZfZGlyKGVudHJ5KTsKKwkJCWxldmVsLT5pbmRleCA9IC0xOworCQl9IGVsc2UgeworCQkJaXRlci0+YmFzZS5yZWZuYW1lID0gZW50cnktPm5hbWU7CisJCQlpdGVyLT5iYXNlLm9pZCA9ICZlbnRyeS0+dS52YWx1ZS5vaWQ7CisJCQlpdGVyLT5iYXNlLmZsYWdzID0gZW50cnktPmZsYWc7CisJCQlyZXR1cm4gSVRFUl9PSzsKKwkJfQorCX0KK30KKworc3RhdGljIGVudW0gcGVlbF9zdGF0dXMgcGVlbF9lbnRyeShzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSwgaW50IHJlcGVlbCk7CisKK3N0YXRpYyBpbnQgY2FjaGVfcmVmX2l0ZXJhdG9yX3BlZWwoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yLAorCQkJCSAgIHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCkKK3sKKwlzdHJ1Y3QgY2FjaGVfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJc3RydWN0IGNhY2hlX3JlZl9pdGVyYXRvcl9sZXZlbCAqbGV2ZWw7CisJc3RydWN0IHJlZl9lbnRyeSAqZW50cnk7CisKKwlsZXZlbCA9ICZpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yIC0gMV07CisKKwlpZiAobGV2ZWwtPmluZGV4ID09IC0xKQorCQlkaWUoIkJVRzogcGVlbCBjYWxsZWQgYmVmb3JlIGFkdmFuY2UgZm9yIGNhY2hlIGl0ZXJhdG9yIik7CisKKwllbnRyeSA9IGxldmVsLT5kaXItPmVudHJpZXNbbGV2ZWwtPmluZGV4XTsKKworCWlmIChwZWVsX2VudHJ5KGVudHJ5LCAwKSkKKwkJcmV0dXJuIC0xOworCWhhc2hjcHkocGVlbGVkLT5oYXNoLCBlbnRyeS0+dS52YWx1ZS5wZWVsZWQuaGFzaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FjaGVfcmVmX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgY2FjaGVfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisKKwlmcmVlKGl0ZXItPmxldmVscyk7CisJYmFzZV9yZWZfaXRlcmF0b3JfZnJlZShyZWZfaXRlcmF0b3IpOworCXJldHVybiBJVEVSX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2l0ZXJhdG9yX3Z0YWJsZSBjYWNoZV9yZWZfaXRlcmF0b3JfdnRhYmxlID0geworCWNhY2hlX3JlZl9pdGVyYXRvcl9hZHZhbmNlLAorCWNhY2hlX3JlZl9pdGVyYXRvcl9wZWVsLAorCWNhY2hlX3JlZl9pdGVyYXRvcl9hYm9ydAorfTsKKworc3RhdGljIHN0cnVjdCByZWZfaXRlcmF0b3IgKmNhY2hlX3JlZl9pdGVyYXRvcl9iZWdpbihzdHJ1Y3QgcmVmX2RpciAqZGlyKQoreworCXN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3IgKml0ZXI7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yOworCXN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3JfbGV2ZWwgKmxldmVsOworCisJaXRlciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppdGVyKSk7CisJcmVmX2l0ZXJhdG9yID0gJml0ZXItPmJhc2U7CisJYmFzZV9yZWZfaXRlcmF0b3JfaW5pdChyZWZfaXRlcmF0b3IsICZjYWNoZV9yZWZfaXRlcmF0b3JfdnRhYmxlKTsKKwlBTExPQ19HUk9XKGl0ZXItPmxldmVscywgMTAsIGl0ZXItPmxldmVsc19hbGxvYyk7CisKKwlpdGVyLT5sZXZlbHNfbnIgPSAxOworCWxldmVsID0gJml0ZXItPmxldmVsc1swXTsKKwlsZXZlbC0+aW5kZXggPSAtMTsKKwlsZXZlbC0+ZGlyID0gZGlyOworCisJcmV0dXJuIHJlZl9pdGVyYXRvcjsKK30KKwogc3RydWN0IG5vbm1hdGNoaW5nX3JlZl9kYXRhIHsKIAljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNraXA7CiAJY29uc3QgY2hhciAqY29uZmxpY3RpbmdfcmVmbmFtZTsKQEAgLTk1NSwxNSArOTk5LDI2IEBACiAKIC8qCiAgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgcmVmX2NhY2hlIGZvciB0aGUgc3BlY2lmaWVkIHN1Ym1vZHVsZS4gRm9yCi0gKiB0aGUgbWFpbiByZXBvc2l0b3J5LCB1c2Ugc3VibW9kdWxlPT1OVUxMLiBUaGUgcmV0dXJuZWQgc3RydWN0dXJlCi0gKiB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnV0IG5vdCBuZWNlc3NhcmlseSBwb3B1bGF0ZWQ7IGl0Ci0gKiBzaG91bGQgbm90IGJlIGZyZWVkLgorICogdGhlIG1haW4gcmVwb3NpdG9yeSwgdXNlIHN1Ym1vZHVsZT09TlVMTDsgc3VjaCBhIGNhbGwgY2Fubm90IGZhaWwuCisgKiBGb3IgYSBzdWJtb2R1bGUsIHRoZSBzdWJtb2R1bGUgbXVzdCBleGlzdCBhbmQgYmUgYSBub25iYXJlCisgKiByZXBvc2l0b3J5LCBvdGhlcndpc2UgcmV0dXJuIE5VTEwuCisgKgorICogVGhlIHJldHVybmVkIHN0cnVjdHVyZSB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnV0IG5vdAorICogbmVjZXNzYXJpbHkgcG9wdWxhdGVkOyBpdCBzaG91bGQgbm90IGJlIGZyZWVkLgogICovCiBzdGF0aWMgc3RydWN0IHJlZl9jYWNoZSAqZ2V0X3JlZl9jYWNoZShjb25zdCBjaGFyICpzdWJtb2R1bGUpCiB7CiAJc3RydWN0IHJlZl9jYWNoZSAqcmVmcyA9IGxvb2t1cF9yZWZfY2FjaGUoc3VibW9kdWxlKTsKLQlpZiAoIXJlZnMpCi0JCXJlZnMgPSBjcmVhdGVfcmVmX2NhY2hlKHN1Ym1vZHVsZSk7CisKKwlpZiAoIXJlZnMpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzdWJtb2R1bGVfc2IgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkc3RyKCZzdWJtb2R1bGVfc2IsIHN1Ym1vZHVsZSk7CisJCWlmIChpc19ub25iYXJlX3JlcG9zaXRvcnlfZGlyKCZzdWJtb2R1bGVfc2IpKQorCQkJcmVmcyA9IGNyZWF0ZV9yZWZfY2FjaGUoc3VibW9kdWxlKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZHVsZV9zYik7CisJfQorCiAJcmV0dXJuIHJlZnM7CiB9CiAKQEAgLTEzNDIsMTMgKzEzOTcsMTAgQEAKIAkJcmV0dXJuIC0xOwogCiAJc3RyYnVmX2FkZCgmc3VibW9kdWxlLCBwYXRoLCBsZW4pOwotCXJlZnMgPSBsb29rdXBfcmVmX2NhY2hlKHN1Ym1vZHVsZS5idWYpOworCXJlZnMgPSBnZXRfcmVmX2NhY2hlKHN1Ym1vZHVsZS5idWYpOwogCWlmICghcmVmcykgewotCQlpZiAoIWlzX25vbmJhcmVfcmVwb3NpdG9yeV9kaXIoJnN1Ym1vZHVsZSkpIHsKLQkJCXN0cmJ1Zl9yZWxlYXNlKCZzdWJtb2R1bGUpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCXJlZnMgPSBjcmVhdGVfcmVmX2NhY2hlKHN1Ym1vZHVsZS5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmc3VibW9kdWxlKTsKKwkJcmV0dXJuIC0xOwogCX0KIAlzdHJidWZfcmVsZWFzZSgmc3VibW9kdWxlKTsKIApAQCAtMTM4OCwzOCArMTQ0MCw4IEBACiAJcmV0dXJuIC0xOwogfQogCi0vKgotICogUmVhZCBhIHJhdyByZWYgZnJvbSB0aGUgZmlsZXN5c3RlbSBvciBwYWNrZWQgcmVmcyBmaWxlLgotICoKLSAqIElmIHRoZSByZWYgaXMgYSBzaGExLCBmaWxsIGluIHNoYTEgYW5kIHJldHVybiAwLgotICoKLSAqIElmIHRoZSByZWYgaXMgc3ltYm9saWMsIGZpbGwgaW4gKnN5bXJlZiB3aXRoIHRoZSByZWZlcnJlbnQKLSAqIChlLmcuICJyZWZzL2hlYWRzL21hc3RlciIpIGFuZCByZXR1cm4gMC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUKLSAqIGZvciB2YWxpZGF0aW5nIHRoZSByZWZlcnJlbnQuICBTZXQgUkVGX0lTU1lNUkVGIGluIGZsYWdzLgotICoKLSAqIElmIHRoZSByZWYgZG9lc24ndCBleGlzdCwgc2V0IGVycm5vIHRvIEVOT0VOVCBhbmQgcmV0dXJuIC0xLgotICoKLSAqIElmIHRoZSByZWYgZXhpc3RzIGJ1dCBpcyBuZWl0aGVyIGEgc3ltYm9saWMgcmVmIG5vciBhIHNoYTEsIGl0IGlzCi0gKiBicm9rZW4uIFNldCBSRUZfSVNCUk9LRU4gaW4gZmxhZ3MsIHNldCBlcnJubyB0byBFSU5WQUwsIGFuZCByZXR1cm4KLSAqIC0xLgotICoKLSAqIElmIHRoZXJlIGlzIGFub3RoZXIgZXJyb3IgcmVhZGluZyB0aGUgcmVmLCBzZXQgZXJybm8gYXBwcm9wcmlhdGVseSBhbmQKLSAqIHJldHVybiAtMS4KLSAqCi0gKiBCYWNrZW5kLXNwZWNpZmljIGZsYWdzIG1pZ2h0IGJlIHNldCBpbiBmbGFncyBhcyB3ZWxsLCByZWdhcmRsZXNzIG9mCi0gKiBvdXRjb21lLgotICoKLSAqIHNiX3BhdGggaXMgd29ya3NwYWNlOiB0aGUgY2FsbGVyIHNob3VsZCBhbGxvY2F0ZSBhbmQgZnJlZSBpdC4KLSAqCi0gKiBJdCBpcyBPSyBmb3IgcmVmbmFtZSB0byBwb2ludCBpbnRvIHN5bXJlZi4gSW4gdGhpcyBjYXNlOgotICogLSBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMgd2l0aCBSRUZfSVNTWU1SRUYsIHN5bXJlZiB3aWxsIGJlCi0gKiAgIG92ZXJ3cml0dGVuIGFuZCB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgcmVmbmFtZSBtaWdodCBiZSBjaGFuZ2VkCi0gKiAgIG9yIGV2ZW4gZnJlZWQuCi0gKiAtIGluIGFsbCBvdGhlciBjYXNlcywgc3ltcmVmIHdpbGwgYmUgdW50b3VjaGVkLCBhbmQgdGhlcmVmb3JlCi0gKiAgIHJlZm5hbWUgd2lsbCBzdGlsbCBiZSB2YWxpZCBhbmQgdW5jaGFuZ2VkLgotICovCiBpbnQgcmVhZF9yYXdfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCSBzdHJ1Y3Qgc3RyYnVmICpzeW1yZWYsIHVuc2lnbmVkIGludCAqZmxhZ3MpCisJCSBzdHJ1Y3Qgc3RyYnVmICpyZWZlcmVudCwgdW5zaWduZWQgaW50ICp0eXBlKQogewogCXN0cnVjdCBzdHJidWYgc2JfY29udGVudHMgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3Qgc3RyYnVmIHNiX3BhdGggPSBTVFJCVUZfSU5JVDsKQEAgLTE0MzAsNiArMTQ1Miw3IEBACiAJaW50IHJldCA9IC0xOwogCWludCBzYXZlX2Vycm5vOwogCisJKnR5cGUgPSAwOwogCXN0cmJ1Zl9yZXNldCgmc2JfcGF0aCk7CiAJc3RyYnVmX2dpdF9wYXRoKCZzYl9wYXRoLCAiJXMiLCByZWZuYW1lKTsKIAlwYXRoID0gc2JfcGF0aC5idWY7CkBAIC0xNDQ4LDcgKzE0NzEsNyBAQAogCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkgewogCQlpZiAoZXJybm8gIT0gRU5PRU5UKQogCQkJZ290byBvdXQ7Ci0JCWlmIChyZXNvbHZlX21pc3NpbmdfbG9vc2VfcmVmKHJlZm5hbWUsIHNoYTEsIGZsYWdzKSkgeworCQlpZiAocmVzb2x2ZV9taXNzaW5nX2xvb3NlX3JlZihyZWZuYW1lLCBzaGExLCB0eXBlKSkgewogCQkJZXJybm8gPSBFTk9FTlQ7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTQ2OCw4ICsxNDkxLDggQEAKIAkJfQogCQlpZiAoc3RhcnRzX3dpdGgoc2JfY29udGVudHMuYnVmLCAicmVmcy8iKSAmJgogCQkgICAgIWNoZWNrX3JlZm5hbWVfZm9ybWF0KHNiX2NvbnRlbnRzLmJ1ZiwgMCkpIHsKLQkJCXN0cmJ1Zl9zd2FwKCZzYl9jb250ZW50cywgc3ltcmVmKTsKLQkJCSpmbGFncyB8PSBSRUZfSVNTWU1SRUY7CisJCQlzdHJidWZfc3dhcCgmc2JfY29udGVudHMsIHJlZmVyZW50KTsKKwkJCSp0eXBlIHw9IFJFRl9JU1NZTVJFRjsKIAkJCXJldCA9IDA7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTQ3Nyw3ICsxNTAwLDE2IEBACiAKIAkvKiBJcyBpdCBhIGRpcmVjdG9yeT8gKi8KIAlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewotCQllcnJubyA9IEVJU0RJUjsKKwkJLyoKKwkJICogRXZlbiB0aG91Z2ggdGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGxvb3NlCisJCSAqIHJlZiBpcyBzdXBwb3NlZCB0byBiZSwgdGhlcmUgY291bGQgc3RpbGwgYmUgYQorCQkgKiBwYWNrZWQgcmVmOgorCQkgKi8KKwkJaWYgKHJlc29sdmVfbWlzc2luZ19sb29zZV9yZWYocmVmbmFtZSwgc2hhMSwgdHlwZSkpIHsKKwkJCWVycm5vID0gRUlTRElSOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmV0ID0gMDsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNTA4LDkgKzE1NDAsOSBAQAogCQl3aGlsZSAoaXNzcGFjZSgqYnVmKSkKIAkJCWJ1ZisrOwogCi0JCXN0cmJ1Zl9yZXNldChzeW1yZWYpOwotCQlzdHJidWZfYWRkc3RyKHN5bXJlZiwgYnVmKTsKLQkJKmZsYWdzIHw9IFJFRl9JU1NZTVJFRjsKKwkJc3RyYnVmX3Jlc2V0KHJlZmVyZW50KTsKKwkJc3RyYnVmX2FkZHN0cihyZWZlcmVudCwgYnVmKTsKKwkJKnR5cGUgfD0gUkVGX0lTU1lNUkVGOwogCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNTIxLDcgKzE1NTMsNyBAQAogCSAqLwogCWlmIChnZXRfc2hhMV9oZXgoYnVmLCBzaGExKSB8fAogCSAgICAoYnVmWzQwXSAhPSAnXDAnICYmICFpc3NwYWNlKGJ1Zls0MF0pKSkgewotCQkqZmxhZ3MgfD0gUkVGX0lTQlJPS0VOOworCQkqdHlwZSB8PSBSRUZfSVNCUk9LRU47CiAJCWVycm5vID0gRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNTM2LDYgKzE1NjgsMjQxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgdW5sb2NrX3JlZihzdHJ1Y3QgcmVmX2xvY2sgKmxvY2spCit7CisJLyogRG8gbm90IGZyZWUgbG9jay0+bGsgLS0gYXRleGl0KCkgc3RpbGwgbG9va3MgYXQgdGhlbSAqLworCWlmIChsb2NrLT5saykKKwkJcm9sbGJhY2tfbG9ja19maWxlKGxvY2stPmxrKTsKKwlmcmVlKGxvY2stPnJlZl9uYW1lKTsKKwlmcmVlKGxvY2spOworfQorCisvKgorICogTG9jayByZWZuYW1lLCB3aXRob3V0IGZvbGxvd2luZyBzeW1yZWZzLCBhbmQgc2V0ICpsb2NrX3AgdG8gcG9pbnQKKyAqIGF0IGEgbmV3bHktYWxsb2NhdGVkIGxvY2sgb2JqZWN0LiBGaWxsIGluIGxvY2stPm9sZF9vaWQsIHJlZmVyZW50LAorICogYW5kIHR5cGUgc2ltaWxhcmx5IHRvIHJlYWRfcmF3X3JlZigpLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCB2ZXJpZnkgdGhhdCByZWZuYW1lIGlzIGEgInNhZmUiIHJlZmVyZW5jZSBuYW1lIChpbgorICogdGhlIHNlbnNlIG9mIHJlZm5hbWVfaXNfc2FmZSgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIElmIHRoZSByZWZlcmVuY2UgZG9lc24ndCBhbHJlYWR5IGV4aXN0LCB2ZXJpZnkgdGhhdCByZWZuYW1lIGRvZXNuJ3QKKyAqIGhhdmUgYSBEL0YgY29uZmxpY3Qgd2l0aCBhbnkgZXhpc3RpbmcgcmVmZXJlbmNlcy4gZXh0cmFzIGFuZCBza2lwCisgKiBhcmUgcGFzc2VkIHRvIHZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZV9kaXIoKSBmb3IgdGhpcyBjaGVjay4KKyAqCisgKiBJZiBtdXN0ZXhpc3QgaXMgbm90IHNldCBhbmQgdGhlIHJlZmVyZW5jZSBpcyBub3QgZm91bmQgb3IgaXMKKyAqIGJyb2tlbiwgbG9jayB0aGUgcmVmZXJlbmNlIGFueXdheSBidXQgY2xlYXIgc2hhMS4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlLCB3cml0ZSBhbiBlcnJvciBtZXNzYWdlIHRvIGVyciBhbmQKKyAqIHJldHVybiBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUIG9yIFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1IuCisgKgorICogSW1wbGVtZW50YXRpb24gbm90ZTogVGhpcyBmdW5jdGlvbiBpcyBiYXNpY2FsbHkKKyAqCisgKiAgICAgbG9jayByZWZlcmVuY2UKKyAqICAgICByZWFkX3Jhd19yZWYoKQorICoKKyAqIGJ1dCBpdCBpbmNsdWRlcyBhIGxvdCBtb3JlIGNvZGUgdG8KKyAqIC0gRGVhbCB3aXRoIHBvc3NpYmxlIHJhY2VzIHdpdGggb3RoZXIgcHJvY2Vzc2VzCisgKiAtIEF2b2lkIGNhbGxpbmcgdmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlX2RpcigpIHdoZW4gaXQgY2FuIGJlCisgKiAgIGF2b2lkZWQsIG5hbWVseSBpZiB3ZSB3ZXJlIHN1Y2Nlc3NmdWxseSBhYmxlIHRvIHJlYWQgdGhlIHJlZgorICogLSBHZW5lcmF0ZSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlcyBpbiB0aGUgY2FzZSBvZiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgbG9ja19yYXdfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBtdXN0ZXhpc3QsCisJCQljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4dHJhcywKKwkJCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2tpcCwKKwkJCXN0cnVjdCByZWZfbG9jayAqKmxvY2tfcCwKKwkJCXN0cnVjdCBzdHJidWYgKnJlZmVyZW50LAorCQkJdW5zaWduZWQgaW50ICp0eXBlLAorCQkJc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZl9maWxlID0gU1RSQlVGX0lOSVQ7CisJaW50IGF0dGVtcHRzX3JlbWFpbmluZyA9IDM7CisJaW50IHJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisKKwlhc3NlcnQoZXJyKTsKKwkqdHlwZSA9IDA7CisKKwkvKiBGaXJzdCBsb2NrIHRoZSBmaWxlIHNvIGl0IGNhbid0IGNoYW5nZSBvdXQgZnJvbSB1bmRlciB1cy4gKi8KKworCSpsb2NrX3AgPSBsb2NrID0geGNhbGxvYygxLCBzaXplb2YoKmxvY2spKTsKKworCWxvY2stPnJlZl9uYW1lID0geHN0cmR1cChyZWZuYW1lKTsKKwlzdHJidWZfZ2l0X3BhdGgoJnJlZl9maWxlLCAiJXMiLCByZWZuYW1lKTsKKworcmV0cnk6CisJc3dpdGNoIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHJlZl9maWxlLmJ1ZikpIHsKKwljYXNlIFNDTERfT0s6CisJCWJyZWFrOyAvKiBzdWNjZXNzICovCisJY2FzZSBTQ0xEX0VYSVNUUzoKKwkJLyoKKwkJICogU3VwcG9zZSByZWZuYW1lIGlzICJyZWZzL2Zvby9iYXIiLiBXZSBqdXN0IGZhaWxlZAorCQkgKiB0byBjcmVhdGUgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LCAicmVmcy9mb28iLAorCQkgKiBiZWNhdXNlIHRoZXJlIHdhcyBhIG5vbi1kaXJlY3RvcnkgaW4gdGhlIHdheS4gVGhpcworCQkgKiBpbmRpY2F0ZXMgYSBEL0YgY29uZmxpY3QsIHByb2JhYmx5IGJlY2F1c2Ugb2YKKwkJICogYW5vdGhlciByZWZlcmVuY2Ugc3VjaCBhcyAicmVmcy9mb28iLiBUaGVyZSBpcyBubworCQkgKiByZWFzb24gdG8gZXhwZWN0IHRoaXMgZXJyb3IgdG8gYmUgdHJhbnNpdG9yeS4KKwkJICovCisJCWlmICh2ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUocmVmbmFtZSwgZXh0cmFzLCBza2lwLCBlcnIpKSB7CisJCQlpZiAobXVzdGV4aXN0KSB7CisJCQkJLyoKKwkJCQkgKiBUbyB0aGUgdXNlciB0aGUgcmVsZXZhbnQgZXJyb3IgaXMKKwkJCQkgKiB0aGF0IHRoZSAibXVzdGV4aXN0IiByZWZlcmVuY2UgaXMKKwkJCQkgKiBtaXNzaW5nOgorCQkJCSAqLworCQkJCXN0cmJ1Zl9yZXNldChlcnIpOworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZSAnJXMnIiwKKwkJCQkJICAgIHJlZm5hbWUpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBlcnJvciBtZXNzYWdlIHNldCBieQorCQkJCSAqIHZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZV9kaXIoKSBpcyBPSy4KKwkJCQkgKi8KKwkJCQlyZXQgPSBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoZSBmaWxlIHRoYXQgaXMgaW4gdGhlIHdheSBpc24ndCBhIGxvb3NlCisJCQkgKiByZWZlcmVuY2UuIFJlcG9ydCBpdCBhcyBhIGxvdy1sZXZlbAorCQkJICogZmFpbHVyZS4KKwkJCSAqLworCQkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGNyZWF0ZSBsb2NrIGZpbGUgJXMubG9jazsgIgorCQkJCSAgICAibm9uLWRpcmVjdG9yeSBpbiB0aGUgd2F5IiwKKwkJCQkgICAgcmVmX2ZpbGUuYnVmKTsKKwkJfQorCQlnb3RvIGVycm9yX3JldHVybjsKKwljYXNlIFNDTERfVkFOSVNIRUQ6CisJCS8qIE1heWJlIGFub3RoZXIgcHJvY2VzcyB3YXMgdGlkeWluZyB1cC4gVHJ5IGFnYWluLiAqLworCQlpZiAoLS1hdHRlbXB0c19yZW1haW5pbmcgPiAwKQorCQkJZ290byByZXRyeTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yICVzIiwKKwkJCSAgICByZWZfZmlsZS5idWYpOworCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CisKKwlpZiAoIWxvY2stPmxrKQorCQlsb2NrLT5sayA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKworCWlmIChob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKGxvY2stPmxrLCByZWZfZmlsZS5idWYsIExPQ0tfTk9fREVSRUYpIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UICYmIC0tYXR0ZW1wdHNfcmVtYWluaW5nID4gMCkgeworCQkJLyoKKwkJCSAqIE1heWJlIHNvbWVib2R5IGp1c3QgZGVsZXRlZCBvbmUgb2YgdGhlCisJCQkgKiBkaXJlY3RvcmllcyBsZWFkaW5nIHRvIHJlZl9maWxlLiAgVHJ5CisJCQkgKiBhZ2FpbjoKKwkJCSAqLworCQkJZ290byByZXRyeTsKKwkJfSBlbHNlIHsKKwkJCXVuYWJsZV90b19sb2NrX21lc3NhZ2UocmVmX2ZpbGUuYnVmLCBlcnJubywgZXJyKTsKKwkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQl9CisJfQorCisJLyoKKwkgKiBOb3cgd2UgaG9sZCB0aGUgbG9jayBhbmQgY2FuIHJlYWQgdGhlIHJlZmVyZW5jZSB3aXRob3V0CisJICogZmVhciB0aGF0IGl0cyB2YWx1ZSB3aWxsIGNoYW5nZS4KKwkgKi8KKworCWlmIChyZWFkX3Jhd19yZWYocmVmbmFtZSwgbG9jay0+b2xkX29pZC5oYXNoLCByZWZlcmVudCwgdHlwZSkpIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkgeworCQkJaWYgKG11c3RleGlzdCkgeworCQkJCS8qIEdhcmRlbiB2YXJpZXR5IG1pc3NpbmcgcmVmZXJlbmNlLiAqLworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZSAnJXMnIiwKKwkJCQkJICAgIHJlZm5hbWUpOworCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFJlZmVyZW5jZSBpcyBtaXNzaW5nLCBidXQgdGhhdCdzIE9LLiBXZQorCQkJCSAqIGtub3cgdGhhdCB0aGVyZSBpcyBub3QgYSBjb25mbGljdCB3aXRoCisJCQkJICogYW5vdGhlciBsb29zZSByZWZlcmVuY2UgYmVjYXVzZQorCQkJCSAqIChzdXBwb3NpbmcgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGxvY2sKKwkJCQkgKiByZWZlcmVuY2UgInJlZnMvZm9vL2JhciIpOgorCQkJCSAqCisJCQkJICogLSBXZSB3ZXJlIHN1Y2Nlc3NmdWxseSBhYmxlIHRvIGNyZWF0ZQorCQkJCSAqICAgdGhlIGxvY2tmaWxlIHJlZnMvZm9vL2Jhci5sb2NrLCBzbyB3ZQorCQkJCSAqICAga25vdyB0aGVyZSBjYW5ub3QgYmUgYSBsb29zZSByZWZlcmVuY2UKKwkJCQkgKiAgIG5hbWVkICJyZWZzL2ZvbyIuCisJCQkJICoKKwkJCQkgKiAtIFdlIGdvdCBFTk9FTlQgYW5kIG5vdCBFSVNESVIsIHNvIHdlCisJCQkJICogICBrbm93IHRoYXQgdGhlcmUgY2Fubm90IGJlIGEgbG9vc2UKKwkJCQkgKiAgIHJlZmVyZW5jZSBuYW1lZCAicmVmcy9mb28vYmFyL2JheiIuCisJCQkJICovCisJCQl9CisJCX0gZWxzZSBpZiAoZXJybm8gPT0gRUlTRElSKSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgYSBkaXJlY3RvcnkgaW4gdGhlIHdheS4gSXQgbWlnaHQgaGF2ZQorCQkJICogY29udGFpbmVkIHJlZmVyZW5jZXMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZC4gSWYKKwkJCSAqIHdlIGRvbid0IHJlcXVpcmUgdGhhdCB0aGUgcmVmZXJlbmNlIGFscmVhZHkKKwkJCSAqIGV4aXN0cywgdHJ5IHRvIHJlbW92ZSB0aGUgZGlyZWN0b3J5IHNvIHRoYXQgaXQKKwkJCSAqIGRvZXNuJ3QgY2F1c2UgdHJvdWJsZSB3aGVuIHdlIHdhbnQgdG8gcmVuYW1lIHRoZQorCQkJICogbG9ja2ZpbGUgaW50byBwbGFjZSBsYXRlci4KKwkJCSAqLworCQkJaWYgKG11c3RleGlzdCkgeworCQkJCS8qIEdhcmRlbiB2YXJpZXR5IG1pc3NpbmcgcmVmZXJlbmNlLiAqLworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZSAnJXMnIiwKKwkJCQkJICAgIHJlZm5hbWUpOworCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJfSBlbHNlIGlmIChyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZyZWZfZmlsZSwKKwkJCQkJCQkgIFJFTU9WRV9ESVJfRU1QVFlfT05MWSkpIHsKKwkJCQlpZiAodmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlX2RpcigKKwkJCQkJCSAgICByZWZuYW1lLCBleHRyYXMsIHNraXAsCisJCQkJCQkgICAgZ2V0X2xvb3NlX3JlZnMoJnJlZl9jYWNoZSksCisJCQkJCQkgICAgZXJyKSkgeworCQkJCQkvKgorCQkJCQkgKiBUaGUgZXJyb3IgbWVzc2FnZSBzZXQgYnkKKwkJCQkJICogdmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlKCkgaXMgT0suCisJCQkJCSAqLworCQkJCQlyZXQgPSBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUOworCQkJCQlnb3RvIGVycm9yX3JldHVybjsKKwkJCQl9IGVsc2UgeworCQkJCQkvKgorCQkJCQkgKiBXZSBjYW4ndCBkZWxldGUgdGhlIGRpcmVjdG9yeSwKKwkJCQkJICogYnV0IHdlIGFsc28gZG9uJ3Qga25vdyBvZiBhbnkKKwkJCQkJICogcmVmZXJlbmNlcyB0aGF0IGl0IHNob3VsZAorCQkJCQkgKiBjb250YWluLgorCQkJCQkgKi8KKwkJCQkJc3RyYnVmX2FkZGYoZXJyLCAidGhlcmUgaXMgYSBub24tZW1wdHkgZGlyZWN0b3J5ICclcycgIgorCQkJCQkJICAgICJibG9ja2luZyByZWZlcmVuY2UgJyVzJyIsCisJCQkJCQkgICAgcmVmX2ZpbGUuYnVmLCByZWZuYW1lKTsKKwkJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKGVycm5vID09IEVJTlZBTCAmJiAoKnR5cGUgJiBSRUZfSVNCUk9LRU4pKSB7CisJCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJyVzJzogIgorCQkJCSAgICAicmVmZXJlbmNlIGJyb2tlbiIsIHJlZm5hbWUpOworCQkJZ290byBlcnJvcl9yZXR1cm47CisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJyVzJzogJXMiLAorCQkJCSAgICByZWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJZ290byBlcnJvcl9yZXR1cm47CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGUgcmVmIGRpZCBub3QgZXhpc3QgYW5kIHdlIGFyZSBjcmVhdGluZyBpdCwKKwkJICogbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGV4aXN0aW5nIHBhY2tlZCByZWYgd2hvc2UKKwkJICogbmFtZSBiZWdpbnMgd2l0aCBvdXIgcmVmbmFtZSwgbm9yIGEgcGFja2VkIHJlZgorCQkgKiB3aG9zZSBuYW1lIGlzIGEgcHJvcGVyIHByZWZpeCBvZiBvdXIgcmVmbmFtZS4KKwkJICovCisJCWlmICh2ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGVfZGlyKAorCQkJCSAgICByZWZuYW1lLCBleHRyYXMsIHNraXAsCisJCQkJICAgIGdldF9wYWNrZWRfcmVmcygmcmVmX2NhY2hlKSwKKwkJCQkgICAgZXJyKSkgeworCQkJZ290byBlcnJvcl9yZXR1cm47CisJCX0KKwl9CisKKwlyZXQgPSAwOworCWdvdG8gb3V0OworCitlcnJvcl9yZXR1cm46CisJdW5sb2NrX3JlZihsb2NrKTsKKwkqbG9ja19wID0gTlVMTDsKKworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZyZWZfZmlsZSk7CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIFBlZWwgdGhlIGVudHJ5IChpZiBwb3NzaWJsZSkgYW5kIHJldHVybiBpdHMgbmV3IHBlZWxfc3RhdHVzLiAgSWYKICAqIHJlcGVlbCBpcyB0cnVlLCByZS1wZWVsIHRoZSBlbnRyeSBldmVuIGlmIHRoZXJlIGlzIGFuIG9sZCBwZWVsZWQKQEAgLTE1NzYsMTEgKzE4NDMsMTIgQEAKIAlpbnQgZmxhZzsKIAl1bnNpZ25lZCBjaGFyIGJhc2VbMjBdOwogCi0JaWYgKGN1cnJlbnRfcmVmICYmIChjdXJyZW50X3JlZi0+bmFtZSA9PSByZWZuYW1lCi0JCQkgICAgfHwgIXN0cmNtcChjdXJyZW50X3JlZi0+bmFtZSwgcmVmbmFtZSkpKSB7Ci0JCWlmIChwZWVsX2VudHJ5KGN1cnJlbnRfcmVmLCAwKSkKKwlpZiAoY3VycmVudF9yZWZfaXRlciAmJiBjdXJyZW50X3JlZl9pdGVyLT5yZWZuYW1lID09IHJlZm5hbWUpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisKKwkJaWYgKHJlZl9pdGVyYXRvcl9wZWVsKGN1cnJlbnRfcmVmX2l0ZXIsICZwZWVsZWQpKQogCQkJcmV0dXJuIC0xOwotCQloYXNoY3B5KHNoYTEsIGN1cnJlbnRfcmVmLT51LnZhbHVlLnBlZWxlZC5oYXNoKTsKKwkJaGFzaGNweShzaGExLCBwZWVsZWQuaGFzaCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTYwOCwxMDAgKzE4NzYsMTM3IEBACiAJcmV0dXJuIHBlZWxfb2JqZWN0KGJhc2UsIHNoYTEpOwogfQogCi0vKgotICogQ2FsbCBmbiBmb3IgZWFjaCByZWZlcmVuY2UgaW4gdGhlIHNwZWNpZmllZCByZWZfY2FjaGUsIG9taXR0aW5nCi0gKiByZWZlcmVuY2VzIG5vdCBpbiB0aGUgY29udGFpbmluZ19kaXIgb2YgYmFzZS4gIGZuIGlzIGNhbGxlZCBmb3IgYWxsCi0gKiByZWZlcmVuY2VzLCBpbmNsdWRpbmcgYnJva2VuIG9uZXMuICBJZiBmbiBldmVyIHJldHVybnMgYSBub24temVybwotICogdmFsdWUsIHN0b3AgdGhlIGl0ZXJhdGlvbiBhbmQgcmV0dXJuIHRoYXQgdmFsdWU7IG90aGVyd2lzZSwgcmV0dXJuCi0gKiAwLgotICovCi1zdGF0aWMgaW50IGRvX2Zvcl9lYWNoX2VudHJ5KHN0cnVjdCByZWZfY2FjaGUgKnJlZnMsIGNvbnN0IGNoYXIgKmJhc2UsCi0JCQkgICAgIGVhY2hfcmVmX2VudHJ5X2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoteworc3RydWN0IGZpbGVzX3JlZl9pdGVyYXRvciB7CisJc3RydWN0IHJlZl9pdGVyYXRvciBiYXNlOworCiAJc3RydWN0IHBhY2tlZF9yZWZfY2FjaGUgKnBhY2tlZF9yZWZfY2FjaGU7Ci0Jc3RydWN0IHJlZl9kaXIgKmxvb3NlX2RpcjsKLQlzdHJ1Y3QgcmVmX2RpciAqcGFja2VkX2RpcjsKLQlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OwogCi0JLyoKLQkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IGFsbCBsb29zZSByZWZzIGFyZSByZWFkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlCi0JICogcGFja2VkLXJlZnMgZmlsZTsgdGhpcyBhdm9pZHMgYSByYWNlIGNvbmRpdGlvbiBpbiB3aGljaCBsb29zZSByZWZzCi0JICogYXJlIG1pZ3JhdGVkIHRvIHRoZSBwYWNrZWQtcmVmcyBmaWxlIGJ5IGEgc2ltdWx0YW5lb3VzIHByb2Nlc3MsIGJ1dAotCSAqIG91ciBpbi1tZW1vcnkgdmlldyBpcyBmcm9tIGJlZm9yZSB0aGUgbWlncmF0aW9uLiBnZXRfcGFja2VkX3JlZl9jYWNoZSgpCi0JICogdGFrZXMgY2FyZSBvZiBtYWtpbmcgc3VyZSBvdXIgdmlldyBpcyB1cCB0byBkYXRlIHdpdGggd2hhdCBpcyBvbgotCSAqIGRpc2suCi0JICovCi0JbG9vc2VfZGlyID0gZ2V0X2xvb3NlX3JlZnMocmVmcyk7Ci0JaWYgKGJhc2UgJiYgKmJhc2UpIHsKLQkJbG9vc2VfZGlyID0gZmluZF9jb250YWluaW5nX2Rpcihsb29zZV9kaXIsIGJhc2UsIDApOwotCX0KLQlpZiAobG9vc2VfZGlyKQotCQlwcmltZV9yZWZfZGlyKGxvb3NlX2Rpcik7CitzdGF0aWMgaW50IGZpbGVzX3JlZl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBmaWxlc19yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJaW50IG9rOwogCi0JcGFja2VkX3JlZl9jYWNoZSA9IGdldF9wYWNrZWRfcmVmX2NhY2hlKHJlZnMpOwotCWFjcXVpcmVfcGFja2VkX3JlZl9jYWNoZShwYWNrZWRfcmVmX2NhY2hlKTsKLQlwYWNrZWRfZGlyID0gZ2V0X3BhY2tlZF9yZWZfZGlyKHBhY2tlZF9yZWZfY2FjaGUpOwotCWlmIChiYXNlICYmICpiYXNlKSB7Ci0JCXBhY2tlZF9kaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKHBhY2tlZF9kaXIsIGJhc2UsIDApOworCXdoaWxlICgob2sgPSByZWZfaXRlcmF0b3JfYWR2YW5jZShpdGVyLT5pdGVyMCkpID09IElURVJfT0spIHsKKwkJaWYgKCEoaXRlci0+ZmxhZ3MgJiBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTikgJiYKKwkJICAgICFyZWZfcmVzb2x2ZXNfdG9fb2JqZWN0KGl0ZXItPml0ZXIwLT5yZWZuYW1lLAorCQkJCQkgICAgaXRlci0+aXRlcjAtPm9pZCwKKwkJCQkJICAgIGl0ZXItPml0ZXIwLT5mbGFncykpCisJCQljb250aW51ZTsKKworCQlpdGVyLT5iYXNlLnJlZm5hbWUgPSBpdGVyLT5pdGVyMC0+cmVmbmFtZTsKKwkJaXRlci0+YmFzZS5vaWQgPSBpdGVyLT5pdGVyMC0+b2lkOworCQlpdGVyLT5iYXNlLmZsYWdzID0gaXRlci0+aXRlcjAtPmZsYWdzOworCQlyZXR1cm4gSVRFUl9PSzsKIAl9CiAKLQlpZiAocGFja2VkX2RpciAmJiBsb29zZV9kaXIpIHsKLQkJc29ydF9yZWZfZGlyKHBhY2tlZF9kaXIpOwotCQlzb3J0X3JlZl9kaXIobG9vc2VfZGlyKTsKLQkJcmV0dmFsID0gZG9fZm9yX2VhY2hfZW50cnlfaW5fZGlycygKLQkJCQlwYWNrZWRfZGlyLCBsb29zZV9kaXIsIGZuLCBjYl9kYXRhKTsKLQl9IGVsc2UgaWYgKHBhY2tlZF9kaXIpIHsKLQkJc29ydF9yZWZfZGlyKHBhY2tlZF9kaXIpOwotCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoCi0JCQkJcGFja2VkX2RpciwgMCwgZm4sIGNiX2RhdGEpOwotCX0gZWxzZSBpZiAobG9vc2VfZGlyKSB7Ci0JCXNvcnRfcmVmX2Rpcihsb29zZV9kaXIpOwotCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoCi0JCQkJbG9vc2VfZGlyLCAwLCBmbiwgY2JfZGF0YSk7Ci0JfQorCWl0ZXItPml0ZXIwID0gTlVMTDsKKwlpZiAocmVmX2l0ZXJhdG9yX2Fib3J0KHJlZl9pdGVyYXRvcikgIT0gSVRFUl9ET05FKQorCQlvayA9IElURVJfRVJST1I7CiAKLQlyZWxlYXNlX3BhY2tlZF9yZWZfY2FjaGUocGFja2VkX3JlZl9jYWNoZSk7Ci0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gb2s7CiB9CiAKLS8qCi0gKiBDYWxsIGZuIGZvciBlYWNoIHJlZmVyZW5jZSBpbiB0aGUgc3BlY2lmaWVkIHJlZl9jYWNoZSBmb3Igd2hpY2ggdGhlCi0gKiByZWZuYW1lIGJlZ2lucyB3aXRoIGJhc2UuICBJZiB0cmltIGlzIG5vbi16ZXJvLCB0aGVuIHRyaW0gdGhhdCBtYW55Ci0gKiBjaGFyYWN0ZXJzIG9mZiB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcmVmbmFtZSBiZWZvcmUgcGFzc2luZyB0aGUKLSAqIHJlZm5hbWUgdG8gZm4uICBmbGFncyBjYW4gYmUgRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU4gdG8gaW5jbHVkZQotICogYnJva2VuIHJlZmVyZW5jZXMgaW4gdGhlIGl0ZXJhdGlvbi4gIElmIGZuIGV2ZXIgcmV0dXJucyBhIG5vbi16ZXJvCi0gKiB2YWx1ZSwgc3RvcCB0aGUgaXRlcmF0aW9uIGFuZCByZXR1cm4gdGhhdCB2YWx1ZTsgb3RoZXJ3aXNlLCByZXR1cm4KLSAqIDAuCi0gKi8KLWludCBkb19mb3JfZWFjaF9yZWYoY29uc3QgY2hhciAqc3VibW9kdWxlLCBjb25zdCBjaGFyICpiYXNlLAotCQkgICAgZWFjaF9yZWZfZm4gZm4sIGludCB0cmltLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCitzdGF0aWMgaW50IGZpbGVzX3JlZl9pdGVyYXRvcl9wZWVsKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJCQkgICBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpCiB7Ci0Jc3RydWN0IHJlZl9lbnRyeV9jYiBkYXRhOwotCXN0cnVjdCByZWZfY2FjaGUgKnJlZnM7CisJc3RydWN0IGZpbGVzX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgZmlsZXNfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOwogCi0JcmVmcyA9IGdldF9yZWZfY2FjaGUoc3VibW9kdWxlKTsKLQlkYXRhLmJhc2UgPSBiYXNlOwotCWRhdGEudHJpbSA9IHRyaW07Ci0JZGF0YS5mbGFncyA9IGZsYWdzOwotCWRhdGEuZm4gPSBmbjsKLQlkYXRhLmNiX2RhdGEgPSBjYl9kYXRhOworCXJldHVybiByZWZfaXRlcmF0b3JfcGVlbChpdGVyLT5pdGVyMCwgcGVlbGVkKTsKK30KKworc3RhdGljIGludCBmaWxlc19yZWZfaXRlcmF0b3JfYWJvcnQoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCXN0cnVjdCBmaWxlc19yZWZfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IGZpbGVzX3JlZl9pdGVyYXRvciAqKXJlZl9pdGVyYXRvcjsKKwlpbnQgb2sgPSBJVEVSX0RPTkU7CisKKwlpZiAoaXRlci0+aXRlcjApCisJCW9rID0gcmVmX2l0ZXJhdG9yX2Fib3J0KGl0ZXItPml0ZXIwKTsKKworCXJlbGVhc2VfcGFja2VkX3JlZl9jYWNoZShpdGVyLT5wYWNrZWRfcmVmX2NhY2hlKTsKKwliYXNlX3JlZl9pdGVyYXRvcl9mcmVlKHJlZl9pdGVyYXRvcik7CisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9pdGVyYXRvcl92dGFibGUgZmlsZXNfcmVmX2l0ZXJhdG9yX3Z0YWJsZSA9IHsKKwlmaWxlc19yZWZfaXRlcmF0b3JfYWR2YW5jZSwKKwlmaWxlc19yZWZfaXRlcmF0b3JfcGVlbCwKKwlmaWxlc19yZWZfaXRlcmF0b3JfYWJvcnQKK307CisKK3N0cnVjdCByZWZfaXRlcmF0b3IgKmZpbGVzX3JlZl9pdGVyYXRvcl9iZWdpbigKKwkJY29uc3QgY2hhciAqc3VibW9kdWxlLAorCQljb25zdCBjaGFyICpwcmVmaXgsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzID0gZ2V0X3JlZl9jYWNoZShzdWJtb2R1bGUpOworCXN0cnVjdCByZWZfZGlyICpsb29zZV9kaXIsICpwYWNrZWRfZGlyOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKmxvb3NlX2l0ZXIsICpwYWNrZWRfaXRlcjsKKwlzdHJ1Y3QgZmlsZXNfcmVmX2l0ZXJhdG9yICppdGVyOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcjsKKworCWlmICghcmVmcykKKwkJcmV0dXJuIGVtcHR5X3JlZl9pdGVyYXRvcl9iZWdpbigpOwogCiAJaWYgKHJlZl9wYXJhbm9pYSA8IDApCiAJCXJlZl9wYXJhbm9pYSA9IGdpdF9lbnZfYm9vbCgiR0lUX1JFRl9QQVJBTk9JQSIsIDApOwogCWlmIChyZWZfcGFyYW5vaWEpCi0JCWRhdGEuZmxhZ3MgfD0gRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU47CisJCWZsYWdzIHw9IERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOOwogCi0JcmV0dXJuIGRvX2Zvcl9lYWNoX2VudHJ5KHJlZnMsIGJhc2UsIGRvX29uZV9yZWYsICZkYXRhKTsKLX0KKwlpdGVyID0geGNhbGxvYygxLCBzaXplb2YoKml0ZXIpKTsKKwlyZWZfaXRlcmF0b3IgPSAmaXRlci0+YmFzZTsKKwliYXNlX3JlZl9pdGVyYXRvcl9pbml0KHJlZl9pdGVyYXRvciwgJmZpbGVzX3JlZl9pdGVyYXRvcl92dGFibGUpOwogCi1zdGF0aWMgdm9pZCB1bmxvY2tfcmVmKHN0cnVjdCByZWZfbG9jayAqbG9jaykKLXsKLQkvKiBEbyBub3QgZnJlZSBsb2NrLT5sayAtLSBhdGV4aXQoKSBzdGlsbCBsb29rcyBhdCB0aGVtICovCi0JaWYgKGxvY2stPmxrKQotCQlyb2xsYmFja19sb2NrX2ZpbGUobG9jay0+bGspOwotCWZyZWUobG9jay0+cmVmX25hbWUpOwotCWZyZWUobG9jay0+b3JpZ19yZWZfbmFtZSk7Ci0JZnJlZShsb2NrKTsKKwkvKgorCSAqIFdlIG11c3QgbWFrZSBzdXJlIHRoYXQgYWxsIGxvb3NlIHJlZnMgYXJlIHJlYWQgYmVmb3JlCisJICogYWNjZXNzaW5nIHRoZSBwYWNrZWQtcmVmcyBmaWxlOyB0aGlzIGF2b2lkcyBhIHJhY2UKKwkgKiBjb25kaXRpb24gaWYgbG9vc2UgcmVmcyBhcmUgbWlncmF0ZWQgdG8gdGhlIHBhY2tlZC1yZWZzCisJICogZmlsZSBieSBhIHNpbXVsdGFuZW91cyBwcm9jZXNzLCBidXQgb3VyIGluLW1lbW9yeSB2aWV3IGlzCisJICogZnJvbSBiZWZvcmUgdGhlIG1pZ3JhdGlvbi4gV2UgZW5zdXJlIHRoaXMgYXMgZm9sbG93czoKKwkgKiBGaXJzdCwgd2UgY2FsbCBwcmltZV9yZWZfZGlyKCksIHdoaWNoIHByZS1yZWFkcyB0aGUgbG9vc2UKKwkgKiByZWZlcmVuY2VzIGZvciB0aGUgc3VidHJlZSBpbnRvIHRoZSBjYWNoZS4gKElmIHRoZXkndmUKKwkgKiBhbHJlYWR5IGJlZW4gcmVhZCwgdGhhdCdzIE9LOyB3ZSBvbmx5IG5lZWQgdG8gZ3VhcmFudGVlCisJICogdGhhdCB0aGV5J3JlIHJlYWQgYmVmb3JlIHRoZSBwYWNrZWQgcmVmcywgbm90ICpob3cgbXVjaCoKKwkgKiBiZWZvcmUuKSBBZnRlciB0aGF0LCB3ZSBjYWxsIGdldF9wYWNrZWRfcmVmX2NhY2hlKCksIHdoaWNoCisJICogaW50ZXJuYWxseSBjaGVja3Mgd2hldGhlciB0aGUgcGFja2VkLXJlZiBjYWNoZSBpcyB1cCB0bworCSAqIGRhdGUgd2l0aCB3aGF0IGlzIG9uIGRpc2ssIGFuZCByZS1yZWFkcyBpdCBpZiBub3QuCisJICovCisKKwlsb29zZV9kaXIgPSBnZXRfbG9vc2VfcmVmcyhyZWZzKTsKKworCWlmIChwcmVmaXggJiYgKnByZWZpeCkKKwkJbG9vc2VfZGlyID0gZmluZF9jb250YWluaW5nX2Rpcihsb29zZV9kaXIsIHByZWZpeCwgMCk7CisKKwlpZiAobG9vc2VfZGlyKSB7CisJCXByaW1lX3JlZl9kaXIobG9vc2VfZGlyKTsKKwkJbG9vc2VfaXRlciA9IGNhY2hlX3JlZl9pdGVyYXRvcl9iZWdpbihsb29zZV9kaXIpOworCX0gZWxzZSB7CisJCS8qIFRoZXJlJ3Mgbm90aGluZyB0byBpdGVyYXRlIG92ZXIuICovCisJCWxvb3NlX2l0ZXIgPSBlbXB0eV9yZWZfaXRlcmF0b3JfYmVnaW4oKTsKKwl9CisKKwlpdGVyLT5wYWNrZWRfcmVmX2NhY2hlID0gZ2V0X3BhY2tlZF9yZWZfY2FjaGUocmVmcyk7CisJYWNxdWlyZV9wYWNrZWRfcmVmX2NhY2hlKGl0ZXItPnBhY2tlZF9yZWZfY2FjaGUpOworCXBhY2tlZF9kaXIgPSBnZXRfcGFja2VkX3JlZl9kaXIoaXRlci0+cGFja2VkX3JlZl9jYWNoZSk7CisKKwlpZiAocHJlZml4ICYmICpwcmVmaXgpCisJCXBhY2tlZF9kaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKHBhY2tlZF9kaXIsIHByZWZpeCwgMCk7CisKKwlpZiAocGFja2VkX2RpcikgeworCQlwYWNrZWRfaXRlciA9IGNhY2hlX3JlZl9pdGVyYXRvcl9iZWdpbihwYWNrZWRfZGlyKTsKKwl9IGVsc2UgeworCQkvKiBUaGVyZSdzIG5vdGhpbmcgdG8gaXRlcmF0ZSBvdmVyLiAqLworCQlwYWNrZWRfaXRlciA9IGVtcHR5X3JlZl9pdGVyYXRvcl9iZWdpbigpOworCX0KKworCWl0ZXItPml0ZXIwID0gb3ZlcmxheV9yZWZfaXRlcmF0b3JfYmVnaW4obG9vc2VfaXRlciwgcGFja2VkX2l0ZXIpOworCWl0ZXItPmZsYWdzID0gZmxhZ3M7CisKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yOwogfQogCiAvKgpAQCAtMTcyMSwxOCArMjAyNiwxOCBAQAogCQkJICBsb2NrLT5vbGRfb2lkLmhhc2gsIE5VTEwpKSB7CiAJCWlmIChvbGRfc2hhMSkgewogCQkJaW50IHNhdmVfZXJybm8gPSBlcnJubzsKLQkJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbid0IHZlcmlmeSByZWYgJXMiLCBsb2NrLT5yZWZfbmFtZSk7CisJCQlzdHJidWZfYWRkZihlcnIsICJjYW4ndCB2ZXJpZnkgcmVmICclcyciLCBsb2NrLT5yZWZfbmFtZSk7CiAJCQllcnJubyA9IHNhdmVfZXJybm87CiAJCQlyZXR1cm4gLTE7CiAJCX0gZWxzZSB7Ci0JCQloYXNoY2xyKGxvY2stPm9sZF9vaWQuaGFzaCk7CisJCQlvaWRjbHIoJmxvY2stPm9sZF9vaWQpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAJaWYgKG9sZF9zaGExICYmIGhhc2hjbXAobG9jay0+b2xkX29pZC5oYXNoLCBvbGRfc2hhMSkpIHsKLQkJc3RyYnVmX2FkZGYoZXJyLCAicmVmICVzIGlzIGF0ICVzIGJ1dCBleHBlY3RlZCAlcyIsCisJCXN0cmJ1Zl9hZGRmKGVyciwgInJlZiAnJXMnIGlzIGF0ICVzIGJ1dCBleHBlY3RlZCAlcyIsCiAJCQkgICAgbG9jay0+cmVmX25hbWUsCi0JCQkgICAgc2hhMV90b19oZXgobG9jay0+b2xkX29pZC5oYXNoKSwKKwkJCSAgICBvaWRfdG9faGV4KCZsb2NrLT5vbGRfb2lkKSwKIAkJCSAgICBzaGExX3RvX2hleChvbGRfc2hhMSkpOwogCQllcnJubyA9IEVCVVNZOwogCQlyZXR1cm4gLTE7CkBAIC0xNzU4LDE5ICsyMDYzLDE3IEBACiAJCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZXh0cmFzLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpza2lwLAotCQkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgKnR5cGVfcCwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBmbGFncywgaW50ICp0eXBlLAogCQkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQogewogCXN0cnVjdCBzdHJidWYgcmVmX2ZpbGUgPSBTVFJCVUZfSU5JVDsKLQlzdHJ1Y3Qgc3RyYnVmIG9yaWdfcmVmX2ZpbGUgPSBTVFJCVUZfSU5JVDsKLQljb25zdCBjaGFyICpvcmlnX3JlZm5hbWUgPSByZWZuYW1lOwogCXN0cnVjdCByZWZfbG9jayAqbG9jazsKIAlpbnQgbGFzdF9lcnJubyA9IDA7Ci0JaW50IHR5cGU7Ci0JaW50IGxmbGFncyA9IDA7CisJaW50IGxmbGFncyA9IExPQ0tfTk9fREVSRUY7CiAJaW50IG11c3RleGlzdCA9IChvbGRfc2hhMSAmJiAhaXNfbnVsbF9zaGExKG9sZF9zaGExKSk7Ci0JaW50IHJlc29sdmVfZmxhZ3MgPSAwOworCWludCByZXNvbHZlX2ZsYWdzID0gUkVTT0xWRV9SRUZfTk9fUkVDVVJTRTsKIAlpbnQgYXR0ZW1wdHNfcmVtYWluaW5nID0gMzsKKwlpbnQgcmVzb2x2ZWQ7CiAKIAlhc3NlcnQoZXJyKTsKIApAQCAtMTc4MCw0OCArMjA4MywzOSBAQAogCQlyZXNvbHZlX2ZsYWdzIHw9IFJFU09MVkVfUkVGX1JFQURJTkc7CiAJaWYgKGZsYWdzICYgUkVGX0RFTEVUSU5HKQogCQlyZXNvbHZlX2ZsYWdzIHw9IFJFU09MVkVfUkVGX0FMTE9XX0JBRF9OQU1FOwotCWlmIChmbGFncyAmIFJFRl9OT0RFUkVGKSB7Ci0JCXJlc29sdmVfZmxhZ3MgfD0gUkVTT0xWRV9SRUZfTk9fUkVDVVJTRTsKLQkJbGZsYWdzIHw9IExPQ0tfTk9fREVSRUY7Ci0JfQogCi0JcmVmbmFtZSA9IHJlc29sdmVfcmVmX3Vuc2FmZShyZWZuYW1lLCByZXNvbHZlX2ZsYWdzLAotCQkJCSAgICAgbG9jay0+b2xkX29pZC5oYXNoLCAmdHlwZSk7Ci0JaWYgKCFyZWZuYW1lICYmIGVycm5vID09IEVJU0RJUikgeworCXN0cmJ1Zl9naXRfcGF0aCgmcmVmX2ZpbGUsICIlcyIsIHJlZm5hbWUpOworCXJlc29sdmVkID0gISFyZXNvbHZlX3JlZl91bnNhZmUocmVmbmFtZSwgcmVzb2x2ZV9mbGFncywKKwkJCQkJbG9jay0+b2xkX29pZC5oYXNoLCB0eXBlKTsKKwlpZiAoIXJlc29sdmVkICYmIGVycm5vID09IEVJU0RJUikgewogCQkvKgogCQkgKiB3ZSBhcmUgdHJ5aW5nIHRvIGxvY2sgZm9vIGJ1dCB3ZSB1c2VkIHRvCiAJCSAqIGhhdmUgZm9vL2JhciB3aGljaCBub3cgZG9lcyBub3QgZXhpc3Q7CiAJCSAqIGl0IGlzIG5vcm1hbCBmb3IgdGhlIGVtcHR5IGRpcmVjdG9yeSAnZm9vJwogCQkgKiB0byByZW1haW4uCiAJCSAqLwotCQlzdHJidWZfZ2l0X3BhdGgoJm9yaWdfcmVmX2ZpbGUsICIlcyIsIG9yaWdfcmVmbmFtZSk7Ci0JCWlmIChyZW1vdmVfZW1wdHlfZGlyZWN0b3JpZXMoJm9yaWdfcmVmX2ZpbGUpKSB7CisJCWlmIChyZW1vdmVfZW1wdHlfZGlyZWN0b3JpZXMoJnJlZl9maWxlKSkgewogCQkJbGFzdF9lcnJubyA9IGVycm5vOwotCQkJaWYgKCF2ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGVfZGlyKG9yaWdfcmVmbmFtZSwgZXh0cmFzLCBza2lwLAorCQkJaWYgKCF2ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGVfZGlyKHJlZm5hbWUsIGV4dHJhcywgc2tpcCwKIAkJCQkJCQkgIGdldF9sb29zZV9yZWZzKCZyZWZfY2FjaGUpLCBlcnIpKQogCQkJCXN0cmJ1Zl9hZGRmKGVyciwgInRoZXJlIGFyZSBzdGlsbCByZWZzIHVuZGVyICclcyciLAotCQkJCQkgICAgb3JpZ19yZWZuYW1lKTsKKwkJCQkJICAgIHJlZm5hbWUpOwogCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCX0KLQkJcmVmbmFtZSA9IHJlc29sdmVfcmVmX3Vuc2FmZShvcmlnX3JlZm5hbWUsIHJlc29sdmVfZmxhZ3MsCi0JCQkJCSAgICAgbG9jay0+b2xkX29pZC5oYXNoLCAmdHlwZSk7CisJCXJlc29sdmVkID0gISFyZXNvbHZlX3JlZl91bnNhZmUocmVmbmFtZSwgcmVzb2x2ZV9mbGFncywKKwkJCQkJCWxvY2stPm9sZF9vaWQuaGFzaCwgdHlwZSk7CiAJfQotCWlmICh0eXBlX3ApCi0JICAgICp0eXBlX3AgPSB0eXBlOwotCWlmICghcmVmbmFtZSkgeworCWlmICghcmVzb2x2ZWQpIHsKIAkJbGFzdF9lcnJubyA9IGVycm5vOwogCQlpZiAobGFzdF9lcnJubyAhPSBFTk9URElSIHx8Ci0JCSAgICAhdmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlX2RpcihvcmlnX3JlZm5hbWUsIGV4dHJhcywgc2tpcCwKKwkJICAgICF2ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGVfZGlyKHJlZm5hbWUsIGV4dHJhcywgc2tpcCwKIAkJCQkJCSAgZ2V0X2xvb3NlX3JlZnMoJnJlZl9jYWNoZSksIGVycikpCi0JCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJXM6ICVzIiwKLQkJCQkgICAgb3JpZ19yZWZuYW1lLCBzdHJlcnJvcihsYXN0X2Vycm5vKSk7CisJCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJyVzJzogJXMiLAorCQkJCSAgICByZWZuYW1lLCBzdHJlcnJvcihsYXN0X2Vycm5vKSk7CiAKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJfQogCi0JaWYgKGZsYWdzICYgUkVGX05PREVSRUYpCi0JCXJlZm5hbWUgPSBvcmlnX3JlZm5hbWU7Ci0KIAkvKgogCSAqIElmIHRoZSByZWYgZGlkIG5vdCBleGlzdCBhbmQgd2UgYXJlIGNyZWF0aW5nIGl0LCBtYWtlIHN1cmUKIAkgKiB0aGVyZSBpcyBubyBleGlzdGluZyBwYWNrZWQgcmVmIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggb3VyCkBAIC0xODM4LDggKzIxMzIsNiBAQAogCWxvY2stPmxrID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOwogCiAJbG9jay0+cmVmX25hbWUgPSB4c3RyZHVwKHJlZm5hbWUpOwotCWxvY2stPm9yaWdfcmVmX25hbWUgPSB4c3RyZHVwKG9yaWdfcmVmbmFtZSk7Ci0Jc3RyYnVmX2dpdF9wYXRoKCZyZWZfZmlsZSwgIiVzIiwgcmVmbmFtZSk7CiAKICByZXRyeToKIAlzd2l0Y2ggKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QocmVmX2ZpbGUuYnVmKSkgewpAQCAtMTg1MSw3ICsyMTQzLDcgQEAKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJbGFzdF9lcnJubyA9IGVycm5vOwotCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgJXMiLAorCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIsCiAJCQkgICAgcmVmX2ZpbGUuYnVmKTsKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJfQpAQCAtMTg4Miw3ICsyMTc0LDYgQEAKIAogIG91dDoKIAlzdHJidWZfcmVsZWFzZSgmcmVmX2ZpbGUpOwotCXN0cmJ1Zl9yZWxlYXNlKCZvcmlnX3JlZl9maWxlKTsKIAllcnJubyA9IGxhc3RfZXJybm87CiAJcmV0dXJuIGxvY2s7CiB9CkBAIC0yMDM2LDcgKzIzMjcsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIERvIG5vdCBwYWNrIHN5bWJvbGljIG9yIGJyb2tlbiByZWZzOiAqLwotCWlmICgoZW50cnktPmZsYWcgJiBSRUZfSVNTWU1SRUYpIHx8ICFyZWZfcmVzb2x2ZXNfdG9fb2JqZWN0KGVudHJ5KSkKKwlpZiAoKGVudHJ5LT5mbGFnICYgUkVGX0lTU1lNUkVGKSB8fCAhZW50cnlfcmVzb2x2ZXNfdG9fb2JqZWN0KGVudHJ5KSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBBZGQgYSBwYWNrZWQgcmVmIGNhY2hlIGVudHJ5IGVxdWl2YWxlbnQgdG8gdGhlIGxvb3NlIGVudHJ5LiAqLwpAQCAtMjExMCw3ICsyNDAxLDcgQEAKIAl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKIAlpZiAoIXRyYW5zYWN0aW9uIHx8CiAJICAgIHJlZl90cmFuc2FjdGlvbl9kZWxldGUodHJhbnNhY3Rpb24sIHItPm5hbWUsIHItPnNoYTEsCi0JCQkJICAgUkVGX0lTUFJVTklORywgTlVMTCwgJmVycikgfHwKKwkJCQkgICBSRUZfSVNQUlVOSU5HIHwgUkVGX05PREVSRUYsIE5VTEwsICZlcnIpIHx8CiAJICAgIHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKSB7CiAJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKIAkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CkBAIC0yMjIyLDcgKzI1MTMsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZGVsZXRlX3JlZnMoc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcykKK2ludCBkZWxldGVfcmVmcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZm5hbWVzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKIAlpbnQgaSwgcmVzdWx0ID0gMDsKQEAgLTIyNTEsNyArMjU0Miw3IEBACiAJZm9yIChpID0gMDsgaSA8IHJlZm5hbWVzLT5ucjsgaSsrKSB7CiAJCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSByZWZuYW1lcy0+aXRlbXNbaV0uc3RyaW5nOwogCi0JCWlmIChkZWxldGVfcmVmKHJlZm5hbWUsIE5VTEwsIDApKQorCQlpZiAoZGVsZXRlX3JlZihyZWZuYW1lLCBOVUxMLCBmbGFncykpCiAJCQlyZXN1bHQgfD0gZXJyb3IoXygiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiKSwgcmVmbmFtZSk7CiAJfQogCkBAIC0yMzIyLDggKzI2MTMsOCBAQAogfQogCiBpbnQgdmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlKGNvbnN0IGNoYXIgKm5ld25hbWUsCi0JCQkgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqZXh0cmFzLAotCQkJICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNraXAsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZXh0cmFzLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNraXAsCiAJCQkgICAgIHN0cnVjdCBzdHJidWYgKmVycikKIHsKIAlzdHJ1Y3QgcmVmX2RpciAqcGFja2VkX3JlZnMgPSBnZXRfcGFja2VkX3JlZnMoJnJlZl9jYWNoZSk7CkBAIC0yMzQyLDcgKzI2MzMsNyBAQAogCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOwogc3RhdGljIGludCBjb21taXRfcmVmX3VwZGF0ZShzdHJ1Y3QgcmVmX2xvY2sgKmxvY2ssCiAJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmxvZ21zZywKLQkJCSAgICAgaW50IGZsYWdzLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOwogCiBpbnQgcmVuYW1lX3JlZihjb25zdCBjaGFyICpvbGRyZWZuYW1lLCBjb25zdCBjaGFyICpuZXdyZWZuYW1lLCBjb25zdCBjaGFyICpsb2dtc2cpCiB7CkBAIC0yMzUxLDIwICsyNjQyLDE4IEBACiAJc3RydWN0IHJlZl9sb2NrICpsb2NrOwogCXN0cnVjdCBzdGF0IGxvZ2luZm87CiAJaW50IGxvZyA9ICFsc3RhdChnaXRfcGF0aCgibG9ncy8lcyIsIG9sZHJlZm5hbWUpLCAmbG9naW5mbyk7Ci0JY29uc3QgY2hhciAqc3ltcmVmID0gTlVMTDsKIAlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOwogCiAJaWYgKGxvZyAmJiBTX0lTTE5LKGxvZ2luZm8uc3RfbW9kZSkpCiAJCXJldHVybiBlcnJvcigicmVmbG9nIGZvciAlcyBpcyBhIHN5bWxpbmsiLCBvbGRyZWZuYW1lKTsKIAotCXN5bXJlZiA9IHJlc29sdmVfcmVmX3Vuc2FmZShvbGRyZWZuYW1lLCBSRVNPTFZFX1JFRl9SRUFESU5HLAotCQkJCSAgICBvcmlnX3NoYTEsICZmbGFnKTsKKwlpZiAoIXJlc29sdmVfcmVmX3Vuc2FmZShvbGRyZWZuYW1lLCBSRVNPTFZFX1JFRl9SRUFESU5HIHwgUkVTT0xWRV9SRUZfTk9fUkVDVVJTRSwKKwkJCQlvcmlnX3NoYTEsICZmbGFnKSkKKwkJcmV0dXJuIGVycm9yKCJyZWZuYW1lICVzIG5vdCBmb3VuZCIsIG9sZHJlZm5hbWUpOworCiAJaWYgKGZsYWcgJiBSRUZfSVNTWU1SRUYpCiAJCXJldHVybiBlcnJvcigicmVmbmFtZSAlcyBpcyBhIHN5bWJvbGljIHJlZiwgcmVuYW1pbmcgaXQgaXMgbm90IHN1cHBvcnRlZCIsCiAJCQlvbGRyZWZuYW1lKTsKLQlpZiAoIXN5bXJlZikKLQkJcmV0dXJuIGVycm9yKCJyZWZuYW1lICVzIG5vdCBmb3VuZCIsIG9sZHJlZm5hbWUpOwotCiAJaWYgKCFyZW5hbWVfcmVmX2F2YWlsYWJsZShvbGRyZWZuYW1lLCBuZXdyZWZuYW1lKSkKIAkJcmV0dXJuIDE7CiAKQEAgLTIzNzcsOCArMjY2NiwxNiBAQAogCQlnb3RvIHJvbGxiYWNrOwogCX0KIAotCWlmICghcmVhZF9yZWZfZnVsbChuZXdyZWZuYW1lLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBzaGExLCBOVUxMKSAmJgotCSAgICBkZWxldGVfcmVmKG5ld3JlZm5hbWUsIHNoYTEsIFJFRl9OT0RFUkVGKSkgeworCS8qCisJICogU2luY2Ugd2UgYXJlIGRvaW5nIGEgc2hhbGxvdyBsb29rdXAsIHNoYTEgaXMgbm90IHRoZQorCSAqIGNvcnJlY3QgdmFsdWUgdG8gcGFzcyB0byBkZWxldGVfcmVmIGFzIG9sZF9zaGExLiBCdXQgdGhhdAorCSAqIGRvZXNuJ3QgbWF0dGVyLCBiZWNhdXNlIGFuIG9sZF9zaGExIGNoZWNrIHdvdWxkbid0IGFkZCB0bworCSAqIHRoZSBzYWZldHkgYW55d2F5OyB3ZSB3YW50IHRvIGRlbGV0ZSB0aGUgcmVmZXJlbmNlIHdoYXRldmVyCisJICogaXRzIGN1cnJlbnQgdmFsdWUuCisJICovCisJaWYgKCFyZWFkX3JlZl9mdWxsKG5ld3JlZm5hbWUsIFJFU09MVkVfUkVGX1JFQURJTkcgfCBSRVNPTFZFX1JFRl9OT19SRUNVUlNFLAorCQkJICAgc2hhMSwgTlVMTCkgJiYKKwkgICAgZGVsZXRlX3JlZihuZXdyZWZuYW1lLCBOVUxMLCBSRUZfTk9ERVJFRikpIHsKIAkJaWYgKGVycm5vPT1FSVNESVIpIHsKIAkJCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOwogCQkJaW50IHJlc3VsdDsKQEAgLTI0MDIsNyArMjY5OSw4IEBACiAKIAlsb2dtb3ZlZCA9IGxvZzsKIAotCWxvY2sgPSBsb2NrX3JlZl9zaGExX2Jhc2ljKG5ld3JlZm5hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIDAsIE5VTEwsICZlcnIpOworCWxvY2sgPSBsb2NrX3JlZl9zaGExX2Jhc2ljKG5ld3JlZm5hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIFJFRl9OT0RFUkVGLAorCQkJCSAgIE5VTEwsICZlcnIpOwogCWlmICghbG9jaykgewogCQllcnJvcigidW5hYmxlIHRvIHJlbmFtZSAnJXMnIHRvICclcyc6ICVzIiwgb2xkcmVmbmFtZSwgbmV3cmVmbmFtZSwgZXJyLmJ1Zik7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOwpAQCAtMjQxMSw3ICsyNzA5LDcgQEAKIAloYXNoY3B5KGxvY2stPm9sZF9vaWQuaGFzaCwgb3JpZ19zaGExKTsKIAogCWlmICh3cml0ZV9yZWZfdG9fbG9ja2ZpbGUobG9jaywgb3JpZ19zaGExLCAmZXJyKSB8fAotCSAgICBjb21taXRfcmVmX3VwZGF0ZShsb2NrLCBvcmlnX3NoYTEsIGxvZ21zZywgMCwgJmVycikpIHsKKwkgICAgY29tbWl0X3JlZl91cGRhdGUobG9jaywgb3JpZ19zaGExLCBsb2dtc2csICZlcnIpKSB7CiAJCWVycm9yKCJ1bmFibGUgdG8gd3JpdGUgY3VycmVudCBzaGExIGludG8gJXM6ICVzIiwgbmV3cmVmbmFtZSwgZXJyLmJ1Zik7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOwogCQlnb3RvIHJvbGxiYWNrOwpAQCAtMjQyMCw3ICsyNzE4LDggQEAKIAlyZXR1cm4gMDsKIAogIHJvbGxiYWNrOgotCWxvY2sgPSBsb2NrX3JlZl9zaGExX2Jhc2ljKG9sZHJlZm5hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIDAsIE5VTEwsICZlcnIpOworCWxvY2sgPSBsb2NrX3JlZl9zaGExX2Jhc2ljKG9sZHJlZm5hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIFJFRl9OT0RFUkVGLAorCQkJCSAgIE5VTEwsICZlcnIpOwogCWlmICghbG9jaykgewogCQllcnJvcigidW5hYmxlIHRvIGxvY2sgJXMgZm9yIHJvbGxiYWNrOiAlcyIsIG9sZHJlZm5hbWUsIGVyci5idWYpOwogCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKQEAgLTI0MzAsNyArMjcyOSw3IEBACiAJZmxhZyA9IGxvZ19hbGxfcmVmX3VwZGF0ZXM7CiAJbG9nX2FsbF9yZWZfdXBkYXRlcyA9IDA7CiAJaWYgKHdyaXRlX3JlZl90b19sb2NrZmlsZShsb2NrLCBvcmlnX3NoYTEsICZlcnIpIHx8Ci0JICAgIGNvbW1pdF9yZWZfdXBkYXRlKGxvY2ssIG9yaWdfc2hhMSwgTlVMTCwgMCwgJmVycikpIHsKKwkgICAgY29tbWl0X3JlZl91cGRhdGUobG9jaywgb3JpZ19zaGExLCBOVUxMLCAmZXJyKSkgewogCQllcnJvcigidW5hYmxlIHRvIHdyaXRlIGN1cnJlbnQgc2hhMSBpbnRvICVzOiAlcyIsIG9sZHJlZm5hbWUsIGVyci5idWYpOwogCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKIAl9CkBAIC0yNDU3LDYgKzI3NTYsMzAgQEAKIAogc3RhdGljIGludCBjb21taXRfcmVmKHN0cnVjdCByZWZfbG9jayAqbG9jaykKIHsKKwljaGFyICpwYXRoID0gZ2V0X2xvY2tlZF9maWxlX3BhdGgobG9jay0+bGspOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKCFsc3RhdChwYXRoLCAmc3QpICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJLyoKKwkJICogVGhlcmUgaXMgYSBkaXJlY3RvcnkgYXQgdGhlIHBhdGggd2Ugd2FudCB0byByZW5hbWUKKwkJICogdGhlIGxvY2tmaWxlIHRvLiBIb3BlZnVsbHkgaXQgaXMgZW1wdHk7IHRyeSB0bworCQkgKiBkZWxldGUgaXQuCisJCSAqLworCQlzaXplX3QgbGVuID0gc3RybGVuKHBhdGgpOworCQlzdHJ1Y3Qgc3RyYnVmIHNiX3BhdGggPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYXR0YWNoKCZzYl9wYXRoLCBwYXRoLCBsZW4sIGxlbik7CisKKwkJLyoKKwkJICogSWYgdGhpcyBmYWlscywgY29tbWl0X2xvY2tfZmlsZSgpIHdpbGwgYWxzbyBmYWlsCisJCSAqIGFuZCB3aWxsIHJlcG9ydCB0aGUgcHJvYmxlbS4KKwkJICovCisJCXJlbW92ZV9lbXB0eV9kaXJlY3Rvcmllcygmc2JfcGF0aCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYl9wYXRoKTsKKwl9IGVsc2UgeworCQlmcmVlKHBhdGgpOworCX0KKwogCWlmIChjb21taXRfbG9ja19maWxlKGxvY2stPmxrKSkKIAkJcmV0dXJuIC0xOwogCXJldHVybiAwOwpAQCAtMjQ3NSw3ICsyNzk4LDcgQEAKIAlzdHJidWZfZ2l0X3BhdGgobG9nZmlsZSwgImxvZ3MvJXMiLCByZWZuYW1lKTsKIAlpZiAoZm9yY2VfY3JlYXRlIHx8IHNob3VsZF9hdXRvY3JlYXRlX3JlZmxvZyhyZWZuYW1lKSkgewogCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllcyhsb2dmaWxlLT5idWYpIDwgMCkgewotCQkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yICVzOiAiCisJCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJzogIgogCQkJCSAgICAiJXMiLCBsb2dmaWxlLT5idWYsIHN0cmVycm9yKGVycm5vKSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTI0ODksNyArMjgxMiw3IEBACiAKIAkJaWYgKGVycm5vID09IEVJU0RJUikgewogCQkJaWYgKHJlbW92ZV9lbXB0eV9kaXJlY3Rvcmllcyhsb2dmaWxlKSkgewotCQkJCXN0cmJ1Zl9hZGRmKGVyciwgIlRoZXJlIGFyZSBzdGlsbCBsb2dzIHVuZGVyICIKKwkJCQlzdHJidWZfYWRkZihlcnIsICJ0aGVyZSBhcmUgc3RpbGwgbG9ncyB1bmRlciAiCiAJCQkJCSAgICAiJyVzJyIsIGxvZ2ZpbGUtPmJ1Zik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQpAQCAtMjQ5Nyw3ICsyODIwLDcgQEAKIAkJfQogCiAJCWlmIChsb2dmZCA8IDApIHsKLQkJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byBhcHBlbmQgdG8gJXM6ICVzIiwKKwkJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byBhcHBlbmQgdG8gJyVzJzogJXMiLAogCQkJCSAgICBsb2dmaWxlLT5idWYsIHN0cmVycm9yKGVycm5vKSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTI1NjYsMTMgKzI4ODksMTMgQEAKIAlyZXN1bHQgPSBsb2dfcmVmX3dyaXRlX2ZkKGxvZ2ZkLCBvbGRfc2hhMSwgbmV3X3NoYTEsCiAJCQkJICBnaXRfY29tbWl0dGVyX2luZm8oMCksIG1zZyk7CiAJaWYgKHJlc3VsdCkgewotCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gYXBwZW5kIHRvICVzOiAlcyIsIGxvZ2ZpbGUtPmJ1ZiwKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGFwcGVuZCB0byAnJXMnOiAlcyIsIGxvZ2ZpbGUtPmJ1ZiwKIAkJCSAgICBzdHJlcnJvcihlcnJubykpOwogCQljbG9zZShsb2dmZCk7CiAJCXJldHVybiAtMTsKIAl9CiAJaWYgKGNsb3NlKGxvZ2ZkKSkgewotCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gYXBwZW5kIHRvICVzOiAlcyIsIGxvZ2ZpbGUtPmJ1ZiwKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGFwcGVuZCB0byAnJXMnOiAlcyIsIGxvZ2ZpbGUtPmJ1ZiwKIAkJCSAgICBzdHJlcnJvcihlcnJubykpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjYxMywxNCArMjkzNiwxNCBAQAogCW8gPSBwYXJzZV9vYmplY3Qoc2hhMSk7CiAJaWYgKCFvKSB7CiAJCXN0cmJ1Zl9hZGRmKGVyciwKLQkJCSAgICAiVHJ5aW5nIHRvIHdyaXRlIHJlZiAlcyB3aXRoIG5vbmV4aXN0ZW50IG9iamVjdCAlcyIsCisJCQkgICAgInRyeWluZyB0byB3cml0ZSByZWYgJyVzJyB3aXRoIG5vbmV4aXN0ZW50IG9iamVjdCAlcyIsCiAJCQkgICAgbG9jay0+cmVmX25hbWUsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAkJdW5sb2NrX3JlZihsb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlpZiAoby0+dHlwZSAhPSBPQkpfQ09NTUlUICYmIGlzX2JyYW5jaChsb2NrLT5yZWZfbmFtZSkpIHsKIAkJc3RyYnVmX2FkZGYoZXJyLAotCQkJICAgICJUcnlpbmcgdG8gd3JpdGUgbm9uLWNvbW1pdCBvYmplY3QgJXMgdG8gYnJhbmNoICVzIiwKKwkJCSAgICAidHJ5aW5nIHRvIHdyaXRlIG5vbi1jb21taXQgb2JqZWN0ICVzIHRvIGJyYW5jaCAnJXMnIiwKIAkJCSAgICBzaGExX3RvX2hleChzaGExKSwgbG9jay0+cmVmX25hbWUpOwogCQl1bmxvY2tfcmVmKGxvY2spOwogCQlyZXR1cm4gLTE7CkBAIC0yNjMwLDcgKzI5NTMsNyBAQAogCSAgICB3cml0ZV9pbl9mdWxsKGZkLCAmdGVybSwgMSkgIT0gMSB8fAogCSAgICBjbG9zZV9yZWYobG9jaykgPCAwKSB7CiAJCXN0cmJ1Zl9hZGRmKGVyciwKLQkJCSAgICAiQ291bGRuJ3Qgd3JpdGUgJXMiLCBnZXRfbG9ja19maWxlX3BhdGgobG9jay0+bGspKTsKKwkJCSAgICAiY291bGRuJ3Qgd3JpdGUgJyVzJyIsIGdldF9sb2NrX2ZpbGVfcGF0aChsb2NrLT5saykpOwogCQl1bmxvY2tfcmVmKGxvY2spOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjY0NCwyMCArMjk2NywxOSBAQAogICovCiBzdGF0aWMgaW50IGNvbW1pdF9yZWZfdXBkYXRlKHN0cnVjdCByZWZfbG9jayAqbG9jaywKIAkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqbG9nbXNnLAotCQkJICAgICBpbnQgZmxhZ3MsIHN0cnVjdCBzdHJidWYgKmVycikKKwkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQogewogCWNsZWFyX2xvb3NlX3JlZl9jYWNoZSgmcmVmX2NhY2hlKTsKLQlpZiAobG9nX3JlZl93cml0ZShsb2NrLT5yZWZfbmFtZSwgbG9jay0+b2xkX29pZC5oYXNoLCBzaGExLCBsb2dtc2csIGZsYWdzLCBlcnIpIDwgMCB8fAotCSAgICAoc3RyY21wKGxvY2stPnJlZl9uYW1lLCBsb2NrLT5vcmlnX3JlZl9uYW1lKSAmJgotCSAgICAgbG9nX3JlZl93cml0ZShsb2NrLT5vcmlnX3JlZl9uYW1lLCBsb2NrLT5vbGRfb2lkLmhhc2gsIHNoYTEsIGxvZ21zZywgZmxhZ3MsIGVycikgPCAwKSkgeworCWlmIChsb2dfcmVmX3dyaXRlKGxvY2stPnJlZl9uYW1lLCBsb2NrLT5vbGRfb2lkLmhhc2gsIHNoYTEsIGxvZ21zZywgMCwgZXJyKSkgewogCQljaGFyICpvbGRfbXNnID0gc3RyYnVmX2RldGFjaChlcnIsIE5VTEwpOwotCQlzdHJidWZfYWRkZihlcnIsICJDYW5ub3QgdXBkYXRlIHRoZSByZWYgJyVzJzogJXMiLAorCQlzdHJidWZfYWRkZihlcnIsICJjYW5ub3QgdXBkYXRlIHRoZSByZWYgJyVzJzogJXMiLAogCQkJICAgIGxvY2stPnJlZl9uYW1lLCBvbGRfbXNnKTsKIAkJZnJlZShvbGRfbXNnKTsKIAkJdW5sb2NrX3JlZihsb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlpZiAoc3RyY21wKGxvY2stPm9yaWdfcmVmX25hbWUsICJIRUFEIikgIT0gMCkgeworCisJaWYgKHN0cmNtcChsb2NrLT5yZWZfbmFtZSwgIkhFQUQiKSAhPSAwKSB7CiAJCS8qCiAJCSAqIFNwZWNpYWwgaGFjazogSWYgYSBicmFuY2ggaXMgdXBkYXRlZCBkaXJlY3RseSBhbmQgSEVBRAogCQkgKiBwb2ludHMgdG8gaXQgKG1heSBoYXBwZW4gb24gdGhlIHJlbW90ZSBzaWRlIG9mIGEgcHVzaApAQCAtMjY3Myw2ICsyOTk1LDcgQEAKIAkJdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOwogCQlpbnQgaGVhZF9mbGFnOwogCQljb25zdCBjaGFyICpoZWFkX3JlZjsKKwogCQloZWFkX3JlZiA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsCiAJCQkJCSAgICAgIGhlYWRfc2hhMSwgJmhlYWRfZmxhZyk7CiAJCWlmIChoZWFkX3JlZiAmJiAoaGVhZF9mbGFnICYgUkVGX0lTU1lNUkVGKSAmJgpAQCAtMjY4NSw4ICszMDA4LDkgQEAKIAkJCX0KIAkJfQogCX0KKwogCWlmIChjb21taXRfcmVmKGxvY2spKSB7Ci0JCWVycm9yKCJDb3VsZG4ndCBzZXQgJXMiLCBsb2NrLT5yZWZfbmFtZSk7CisJCXN0cmJ1Zl9hZGRmKGVyciwgImNvdWxkbid0IHNldCAnJXMnIiwgbG9jay0+cmVmX25hbWUpOwogCQl1bmxvY2tfcmVmKGxvY2spOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjc5MCw3ICszMTE0LDYgQEAKIAlsb2NrID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlZl9sb2NrKSk7CiAJbG9jay0+bGsgPSAmaGVhZF9sb2NrOwogCWxvY2stPnJlZl9uYW1lID0geHN0cmR1cChoZWFkX3JlbCk7Ci0JbG9jay0+b3JpZ19yZWZfbmFtZSA9IHhzdHJkdXAoaGVhZF9yZWwpOwogCiAJcmV0ID0gY3JlYXRlX3N5bXJlZl9sb2NrZWQobG9jaywgaGVhZF9yZWwsIHRhcmdldCwgTlVMTCk7CiAKQEAgLTI5NjksNjAgKzMyOTIsODggQEAKIAlzdHJidWZfcmVsZWFzZSgmc2IpOwogCXJldHVybiByZXQ7CiB9Ci0vKgotICogQ2FsbCBmbiBmb3IgZWFjaCByZWZsb2cgaW4gdGhlIG5hbWVzcGFjZSBpbmRpY2F0ZWQgYnkgbmFtZS4gIG5hbWUKLSAqIG11c3QgYmUgZW1wdHkgb3IgZW5kIHdpdGggJy8nLiAgTmFtZSB3aWxsIGJlIHVzZWQgYXMgYSBzY3JhdGNoCi0gKiBzcGFjZSwgYnV0IGl0cyBjb250ZW50cyB3aWxsIGJlIHJlc3RvcmVkIGJlZm9yZSByZXR1cm4uCi0gKi8KLXN0YXRpYyBpbnQgZG9fZm9yX2VhY2hfcmVmbG9nKHN0cnVjdCBzdHJidWYgKm5hbWUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQorCitzdHJ1Y3QgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yIHsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yIGJhc2U7CisKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXJfaXRlcmF0b3I7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7Cit9OworCitzdGF0aWMgaW50IGZpbGVzX3JlZmxvZ19pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKIHsKLQlESVIgKmQgPSBvcGVuZGlyKGdpdF9wYXRoKCJsb2dzLyVzIiwgbmFtZS0+YnVmKSk7Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IGRpcmVudCAqZGU7Ci0JaW50IG9sZGxlbiA9IG5hbWUtPmxlbjsKKwlzdHJ1Y3QgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBmaWxlc19yZWZsb2dfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJc3RydWN0IGRpcl9pdGVyYXRvciAqZGl0ZXIgPSBpdGVyLT5kaXJfaXRlcmF0b3I7CisJaW50IG9rOwogCi0JaWYgKCFkKQotCQlyZXR1cm4gbmFtZS0+bGVuID8gZXJybm8gOiAwOworCXdoaWxlICgob2sgPSBkaXJfaXRlcmF0b3JfYWR2YW5jZShkaXRlcikpID09IElURVJfT0spIHsKKwkJaW50IGZsYWdzOwogCi0Jd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKLQkJc3RydWN0IHN0YXQgc3Q7Ci0KLQkJaWYgKGRlLT5kX25hbWVbMF0gPT0gJy4nKQorCQlpZiAoIVNfSVNSRUcoZGl0ZXItPnN0LnN0X21vZGUpKQogCQkJY29udGludWU7Ci0JCWlmIChlbmRzX3dpdGgoZGUtPmRfbmFtZSwgIi5sb2NrIikpCisJCWlmIChkaXRlci0+YmFzZW5hbWVbMF0gPT0gJy4nKQogCQkJY29udGludWU7Ci0JCXN0cmJ1Zl9hZGRzdHIobmFtZSwgZGUtPmRfbmFtZSk7Ci0JCWlmIChzdGF0KGdpdF9wYXRoKCJsb2dzLyVzIiwgbmFtZS0+YnVmKSwgJnN0KSA8IDApIHsKLQkJCTsgLyogc2lsZW50bHkgaWdub3JlICovCi0JCX0gZWxzZSB7Ci0JCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewotCQkJCXN0cmJ1Zl9hZGRjaChuYW1lLCAnLycpOwotCQkJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX3JlZmxvZyhuYW1lLCBmbiwgY2JfZGF0YSk7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlpZiAoZW5kc193aXRoKGRpdGVyLT5iYXNlbmFtZSwgIi5sb2NrIikpCisJCQljb250aW51ZTsKIAotCQkJCWlmIChyZWFkX3JlZl9mdWxsKG5hbWUtPmJ1ZiwgMCwgb2lkLmhhc2gsIE5VTEwpKQotCQkJCQlyZXR2YWwgPSBlcnJvcigiYmFkIHJlZiBmb3IgJXMiLCBuYW1lLT5idWYpOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gZm4obmFtZS0+YnVmLCAmb2lkLCAwLCBjYl9kYXRhKTsKLQkJCX0KLQkJCWlmIChyZXR2YWwpCi0JCQkJYnJlYWs7CisJCWlmIChyZWFkX3JlZl9mdWxsKGRpdGVyLT5yZWxhdGl2ZV9wYXRoLCAwLAorCQkJCSAgaXRlci0+b2lkLmhhc2gsICZmbGFncykpIHsKKwkJCWVycm9yKCJiYWQgcmVmIGZvciAlcyIsIGRpdGVyLT5wYXRoLmJ1Zik7CisJCQljb250aW51ZTsKIAkJfQotCQlzdHJidWZfc2V0bGVuKG5hbWUsIG9sZGxlbik7CisKKwkJaXRlci0+YmFzZS5yZWZuYW1lID0gZGl0ZXItPnJlbGF0aXZlX3BhdGg7CisJCWl0ZXItPmJhc2Uub2lkID0gJml0ZXItPm9pZDsKKwkJaXRlci0+YmFzZS5mbGFncyA9IGZsYWdzOworCQlyZXR1cm4gSVRFUl9PSzsKIAl9Ci0JY2xvc2VkaXIoZCk7Ci0JcmV0dXJuIHJldHZhbDsKKworCWl0ZXItPmRpcl9pdGVyYXRvciA9IE5VTEw7CisJaWYgKHJlZl9pdGVyYXRvcl9hYm9ydChyZWZfaXRlcmF0b3IpID09IElURVJfRVJST1IpCisJCW9rID0gSVRFUl9FUlJPUjsKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yX3BlZWwoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yLAorCQkJCSAgIHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCkKK3sKKwlkaWUoIkJVRzogcmVmX2l0ZXJhdG9yX3BlZWwoKSBjYWxsZWQgZm9yIHJlZmxvZ19pdGVyYXRvciIpOworfQorCitzdGF0aWMgaW50IGZpbGVzX3JlZmxvZ19pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IGZpbGVzX3JlZmxvZ19pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCWludCBvayA9IElURVJfRE9ORTsKKworCWlmIChpdGVyLT5kaXJfaXRlcmF0b3IpCisJCW9rID0gZGlyX2l0ZXJhdG9yX2Fib3J0KGl0ZXItPmRpcl9pdGVyYXRvcik7CisKKwliYXNlX3JlZl9pdGVyYXRvcl9mcmVlKHJlZl9pdGVyYXRvcik7CisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9pdGVyYXRvcl92dGFibGUgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yX3Z0YWJsZSA9IHsKKwlmaWxlc19yZWZsb2dfaXRlcmF0b3JfYWR2YW5jZSwKKwlmaWxlc19yZWZsb2dfaXRlcmF0b3JfcGVlbCwKKwlmaWxlc19yZWZsb2dfaXRlcmF0b3JfYWJvcnQKK307CisKK3N0cnVjdCByZWZfaXRlcmF0b3IgKmZpbGVzX3JlZmxvZ19pdGVyYXRvcl9iZWdpbih2b2lkKQoreworCXN0cnVjdCBmaWxlc19yZWZsb2dfaXRlcmF0b3IgKml0ZXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXRlcikpOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciA9ICZpdGVyLT5iYXNlOworCisJYmFzZV9yZWZfaXRlcmF0b3JfaW5pdChyZWZfaXRlcmF0b3IsICZmaWxlc19yZWZsb2dfaXRlcmF0b3JfdnRhYmxlKTsKKwlpdGVyLT5kaXJfaXRlcmF0b3IgPSBkaXJfaXRlcmF0b3JfYmVnaW4oZ2l0X3BhdGgoImxvZ3MiKSk7CisJcmV0dXJuIHJlZl9pdGVyYXRvcjsKIH0KIAogaW50IGZvcl9lYWNoX3JlZmxvZyhlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKIHsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCBzdHJidWYgbmFtZTsKLQlzdHJidWZfaW5pdCgmbmFtZSwgUEFUSF9NQVgpOwotCXJldHZhbCA9IGRvX2Zvcl9lYWNoX3JlZmxvZygmbmFtZSwgZm4sIGNiX2RhdGEpOwotCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBkb19mb3JfZWFjaF9yZWZfaXRlcmF0b3IoZmlsZXNfcmVmbG9nX2l0ZXJhdG9yX2JlZ2luKCksCisJCQkJCWZuLCBjYl9kYXRhKTsKIH0KIAogc3RhdGljIGludCByZWZfdXBkYXRlX3JlamVjdF9kdXBsaWNhdGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMsCkBAIC0zMDM1LDM2ICszMzg2LDM1MiBAQAogCWZvciAoaSA9IDE7IGkgPCBuOyBpKyspCiAJCWlmICghc3RyY21wKHJlZm5hbWVzLT5pdGVtc1tpIC0gMV0uc3RyaW5nLCByZWZuYW1lcy0+aXRlbXNbaV0uc3RyaW5nKSkgewogCQkJc3RyYnVmX2FkZGYoZXJyLAotCQkJCSAgICAiTXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQuIiwKKwkJCQkgICAgIm11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnJXMnIG5vdCBhbGxvd2VkLiIsCiAJCQkJICAgIHJlZm5hbWVzLT5pdGVtc1tpXS5zdHJpbmcpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIElmIHVwZGF0ZSBpcyBhIGRpcmVjdCB1cGRhdGUgb2YgaGVhZF9yZWYgKHRoZSByZWZlcmVuY2UgcG9pbnRlZCB0bworICogYnkgSEVBRCksIHRoZW4gYWRkIGFuIGV4dHJhIFJFRl9MT0dfT05MWSB1cGRhdGUgZm9yIEhFQUQuCisgKi8KK3N0YXRpYyBpbnQgc3BsaXRfaGVhZF91cGRhdGUoc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSwKKwkJCSAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICAgIGNvbnN0IGNoYXIgKmhlYWRfcmVmLAorCQkJICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFmZmVjdGVkX3JlZm5hbWVzLAorCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHJlZl91cGRhdGUgKm5ld191cGRhdGU7CisKKwlpZiAoKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfTE9HX09OTFkpIHx8CisJICAgICh1cGRhdGUtPmZsYWdzICYgUkVGX0lTUFJVTklORykgfHwKKwkgICAgKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfVVBEQVRFX1ZJQV9IRUFEKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKHVwZGF0ZS0+cmVmbmFtZSwgaGVhZF9yZWYpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRmlyc3QgbWFrZSBzdXJlIHRoYXQgSEVBRCBpcyBub3QgYWxyZWFkeSBpbiB0aGUKKwkgKiB0cmFuc2FjdGlvbi4gVGhpcyBpbnNlcnRpb24gaXMgTyhOKSBpbiB0aGUgdHJhbnNhY3Rpb24KKwkgKiBzaXplLCBidXQgaXQgaGFwcGVucyBhdCBtb3N0IG9uY2UgcGVyIHRyYW5zYWN0aW9uLgorCSAqLworCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoYWZmZWN0ZWRfcmVmbmFtZXMsICJIRUFEIik7CisJaWYgKGl0ZW0tPnV0aWwpIHsKKwkJLyogQW4gZW50cnkgYWxyZWFkeSBleGlzdGVkICovCisJCXN0cmJ1Zl9hZGRmKGVyciwKKwkJCSAgICAibXVsdGlwbGUgdXBkYXRlcyBmb3IgJ0hFQUQnIChpbmNsdWRpbmcgb25lICIKKwkJCSAgICAidmlhIGl0cyByZWZlcmVudCAnJXMnKSBhcmUgbm90IGFsbG93ZWQiLAorCQkJICAgIHVwZGF0ZS0+cmVmbmFtZSk7CisJCXJldHVybiBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUOworCX0KKworCW5ld191cGRhdGUgPSByZWZfdHJhbnNhY3Rpb25fYWRkX3VwZGF0ZSgKKwkJCXRyYW5zYWN0aW9uLCAiSEVBRCIsCisJCQl1cGRhdGUtPmZsYWdzIHwgUkVGX0xPR19PTkxZIHwgUkVGX05PREVSRUYsCisJCQl1cGRhdGUtPm5ld19zaGExLCB1cGRhdGUtPm9sZF9zaGExLAorCQkJdXBkYXRlLT5tc2cpOworCisJaXRlbS0+dXRpbCA9IG5ld191cGRhdGU7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHVwZGF0ZSBpcyBmb3IgYSBzeW1yZWYgdGhhdCBwb2ludHMgYXQgcmVmZXJlbnQgYW5kIGRvZXNuJ3QgaGF2ZQorICogUkVGX05PREVSRUYgc2V0LiBTcGxpdCBpdCBpbnRvIHR3byB1cGRhdGVzOgorICogLSBUaGUgb3JpZ2luYWwgdXBkYXRlLCBidXQgd2l0aCBSRUZfTE9HX09OTFkgYW5kIFJFRl9OT0RFUkVGIHNldAorICogLSBBIG5ldywgc2VwYXJhdGUgdXBkYXRlIGZvciB0aGUgcmVmZXJlbnQgcmVmZXJlbmNlCisgKiBOb3RlIHRoYXQgdGhlIG5ldyB1cGRhdGUgd2lsbCBpdHNlbGYgYmUgc3ViamVjdCB0byBzcGxpdHRpbmcgd2hlbgorICogdGhlIGl0ZXJhdGlvbiBnZXRzIHRvIGl0LgorICovCitzdGF0aWMgaW50IHNwbGl0X3N5bXJlZl91cGRhdGUoc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpyZWZlcmVudCwKKwkJCSAgICAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFmZmVjdGVkX3JlZm5hbWVzLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgcmVmX3VwZGF0ZSAqbmV3X3VwZGF0ZTsKKwl1bnNpZ25lZCBpbnQgbmV3X2ZsYWdzOworCisJLyoKKwkgKiBGaXJzdCBtYWtlIHN1cmUgdGhhdCByZWZlcmVudCBpcyBub3QgYWxyZWFkeSBpbiB0aGUKKwkgKiB0cmFuc2FjdGlvbi4gVGhpcyBpbnNlcnRpb24gaXMgTyhOKSBpbiB0aGUgdHJhbnNhY3Rpb24KKwkgKiBzaXplLCBidXQgaXQgaGFwcGVucyBhdCBtb3N0IG9uY2UgcGVyIHN5bXJlZiBpbiBhCisJICogdHJhbnNhY3Rpb24uCisJICovCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChhZmZlY3RlZF9yZWZuYW1lcywgcmVmZXJlbnQpOworCWlmIChpdGVtLT51dGlsKSB7CisJCS8qIEFuIGVudHJ5IGFscmVhZHkgZXhpc3RlZCAqLworCQlzdHJidWZfYWRkZihlcnIsCisJCQkgICAgIm11bHRpcGxlIHVwZGF0ZXMgZm9yICclcycgKGluY2x1ZGluZyBvbmUgIgorCQkJICAgICJ2aWEgc3ltcmVmICclcycpIGFyZSBub3QgYWxsb3dlZCIsCisJCQkgICAgcmVmZXJlbnQsIHVwZGF0ZS0+cmVmbmFtZSk7CisJCXJldHVybiBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUOworCX0KKworCW5ld19mbGFncyA9IHVwZGF0ZS0+ZmxhZ3M7CisJaWYgKCFzdHJjbXAodXBkYXRlLT5yZWZuYW1lLCAiSEVBRCIpKSB7CisJCS8qCisJCSAqIFJlY29yZCB0aGF0IHRoZSBuZXcgdXBkYXRlIGNhbWUgdmlhIEhFQUQsIHNvIHRoYXQKKwkJICogd2hlbiB3ZSBwcm9jZXNzIGl0LCBzcGxpdF9oZWFkX3VwZGF0ZSgpIGRvZXNuJ3QgdHJ5CisJCSAqIHRvIGFkZCBhbm90aGVyIHJlZmxvZyB1cGRhdGUgZm9yIEhFQUQuIE5vdGUgdGhhdAorCQkgKiB0aGlzIGJpdCB3aWxsIGJlIHByb3BhZ2F0ZWQgaWYgdGhlIG5ld191cGRhdGUKKwkJICogaXRzZWxmIG5lZWRzIHRvIGJlIHNwbGl0LgorCQkgKi8KKwkJbmV3X2ZsYWdzIHw9IFJFRl9VUERBVEVfVklBX0hFQUQ7CisJfQorCisJbmV3X3VwZGF0ZSA9IHJlZl90cmFuc2FjdGlvbl9hZGRfdXBkYXRlKAorCQkJdHJhbnNhY3Rpb24sIHJlZmVyZW50LCBuZXdfZmxhZ3MsCisJCQl1cGRhdGUtPm5ld19zaGExLCB1cGRhdGUtPm9sZF9zaGExLAorCQkJdXBkYXRlLT5tc2cpOworCisJbmV3X3VwZGF0ZS0+cGFyZW50X3VwZGF0ZSA9IHVwZGF0ZTsKKworCS8qCisJICogQ2hhbmdlIHRoZSBzeW1ib2xpYyByZWYgdXBkYXRlIHRvIGxvZyBvbmx5LiBBbHNvLCBpdAorCSAqIGRvZXNuJ3QgbmVlZCB0byBjaGVjayBpdHMgb2xkIFNIQS0xIHZhbHVlLCBhcyB0aGF0IHdpbGwgYmUKKwkgKiBkb25lIHdoZW4gbmV3X3VwZGF0ZSBpcyBwcm9jZXNzZWQuCisJICovCisJdXBkYXRlLT5mbGFncyB8PSBSRUZfTE9HX09OTFkgfCBSRUZfTk9ERVJFRjsKKwl1cGRhdGUtPmZsYWdzICY9IH5SRUZfSEFWRV9PTEQ7CisKKwlpdGVtLT51dGlsID0gbmV3X3VwZGF0ZTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHRoZSByZWZuYW1lIHVuZGVyIHdoaWNoIHVwZGF0ZSB3YXMgb3JpZ2luYWxseSByZXF1ZXN0ZWQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpvcmlnaW5hbF91cGRhdGVfcmVmbmFtZShzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlKQoreworCXdoaWxlICh1cGRhdGUtPnBhcmVudF91cGRhdGUpCisJCXVwZGF0ZSA9IHVwZGF0ZS0+cGFyZW50X3VwZGF0ZTsKKworCXJldHVybiB1cGRhdGUtPnJlZm5hbWU7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSBSRUZfSEFWRV9PTEQgYW5kIG9sZF9vaWQgdmFsdWVzIHN0b3JlZCBpbiB1cGRhdGUKKyAqIGFyZSBjb25zaXN0ZW50IHdpdGggb2lkLCB3aGljaCBpcyB0aGUgcmVmZXJlbmNlJ3MgY3VycmVudCB2YWx1ZS4gSWYKKyAqIGV2ZXJ5dGhpbmcgaXMgT0ssIHJldHVybiAwOyBvdGhlcndpc2UsIHdyaXRlIGFuIGVycm9yIG1lc3NhZ2UgdG8KKyAqIGVyciBhbmQgcmV0dXJuIC0xLgorICovCitzdGF0aWMgaW50IGNoZWNrX29sZF9vaWQoc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpZiAoISh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfT0xEKSB8fAorCQkgICAhaGFzaGNtcChvaWQtPmhhc2gsIHVwZGF0ZS0+b2xkX3NoYTEpKQorCQlyZXR1cm4gMDsKKworCWlmIChpc19udWxsX3NoYTEodXBkYXRlLT5vbGRfc2hhMSkpCisJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbm5vdCBsb2NrIHJlZiAnJXMnOiAiCisJCQkgICAgInJlZmVyZW5jZSBhbHJlYWR5IGV4aXN0cyIsCisJCQkgICAgb3JpZ2luYWxfdXBkYXRlX3JlZm5hbWUodXBkYXRlKSk7CisJZWxzZSBpZiAoaXNfbnVsbF9vaWQob2lkKSkKKwkJc3RyYnVmX2FkZGYoZXJyLCAiY2Fubm90IGxvY2sgcmVmICclcyc6ICIKKwkJCSAgICAicmVmZXJlbmNlIGlzIG1pc3NpbmcgYnV0IGV4cGVjdGVkICVzIiwKKwkJCSAgICBvcmlnaW5hbF91cGRhdGVfcmVmbmFtZSh1cGRhdGUpLAorCQkJICAgIHNoYTFfdG9faGV4KHVwZGF0ZS0+b2xkX3NoYTEpKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbm5vdCBsb2NrIHJlZiAnJXMnOiAiCisJCQkgICAgImlzIGF0ICVzIGJ1dCBleHBlY3RlZCAlcyIsCisJCQkgICAgb3JpZ2luYWxfdXBkYXRlX3JlZm5hbWUodXBkYXRlKSwKKwkJCSAgICBvaWRfdG9faGV4KG9pZCksCisJCQkgICAgc2hhMV90b19oZXgodXBkYXRlLT5vbGRfc2hhMSkpOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogUHJlcGFyZSBmb3IgY2Fycnlpbmcgb3V0IHVwZGF0ZToKKyAqIC0gTG9jayB0aGUgcmVmZXJlbmNlIHJlZmVycmVkIHRvIGJ5IHVwZGF0ZS4KKyAqIC0gUmVhZCB0aGUgcmVmZXJlbmNlIHVuZGVyIGxvY2suCisgKiAtIENoZWNrIHRoYXQgaXRzIG9sZCBTSEEtMSB2YWx1ZSAoaWYgc3BlY2lmaWVkKSBpcyBjb3JyZWN0LCBhbmQgaW4KKyAqICAgYW55IGNhc2UgcmVjb3JkIGl0IGluIHVwZGF0ZS0+bG9jay0+b2xkX29pZCBmb3IgbGF0ZXIgdXNlIHdoZW4KKyAqICAgd3JpdGluZyB0aGUgcmVmbG9nLgorICogLSBJZiBpdCBpcyBhIHN5bXJlZiB1cGRhdGUgd2l0aG91dCBSRUZfTk9ERVJFRiwgc3BsaXQgaXQgdXAgaW50byBhCisgKiAgIFJFRl9MT0dfT05MWSB1cGRhdGUgb2YgdGhlIHN5bXJlZiBhbmQgYWRkIGEgc2VwYXJhdGUgdXBkYXRlIGZvcgorICogICB0aGUgcmVmZXJlbnQgdG8gdHJhbnNhY3Rpb24uCisgKiAtIElmIGl0IGlzIGFuIHVwZGF0ZSBvZiBoZWFkX3JlZiwgYWRkIGEgY29ycmVzcG9uZGluZyBSRUZfTE9HX09OTFkKKyAqICAgdXBkYXRlIG9mIEhFQUQuCisgKi8KK3N0YXRpYyBpbnQgbG9ja19yZWZfZm9yX3VwZGF0ZShzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlLAorCQkJICAgICAgIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmhlYWRfcmVmLAorCQkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqYWZmZWN0ZWRfcmVmbmFtZXMsCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCBzdHJidWYgcmVmZXJlbnQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgbXVzdGV4aXN0ID0gKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSEFWRV9PTEQpICYmCisJCSFpc19udWxsX3NoYTEodXBkYXRlLT5vbGRfc2hhMSk7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7CisKKwlpZiAoKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSEFWRV9ORVcpICYmIGlzX251bGxfc2hhMSh1cGRhdGUtPm5ld19zaGExKSkKKwkJdXBkYXRlLT5mbGFncyB8PSBSRUZfREVMRVRJTkc7CisKKwlpZiAoaGVhZF9yZWYpIHsKKwkJcmV0ID0gc3BsaXRfaGVhZF91cGRhdGUodXBkYXRlLCB0cmFuc2FjdGlvbiwgaGVhZF9yZWYsCisJCQkJCWFmZmVjdGVkX3JlZm5hbWVzLCBlcnIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBsb2NrX3Jhd19yZWYodXBkYXRlLT5yZWZuYW1lLCBtdXN0ZXhpc3QsCisJCQkgICBhZmZlY3RlZF9yZWZuYW1lcywgTlVMTCwKKwkJCSAgICZ1cGRhdGUtPmxvY2ssICZyZWZlcmVudCwKKwkJCSAgICZ1cGRhdGUtPnR5cGUsIGVycik7CisKKwlpZiAocmV0KSB7CisJCWNoYXIgKnJlYXNvbjsKKworCQlyZWFzb24gPSBzdHJidWZfZGV0YWNoKGVyciwgTlVMTCk7CisJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbm5vdCBsb2NrIHJlZiAnJXMnOiAlcyIsCisJCQkgICAgb3JpZ2luYWxfdXBkYXRlX3JlZm5hbWUodXBkYXRlKSwgcmVhc29uKTsKKwkJZnJlZShyZWFzb24pOworCQlyZXR1cm4gcmV0OworCX0KKworCWxvY2sgPSB1cGRhdGUtPmxvY2s7CisKKwlpZiAodXBkYXRlLT50eXBlICYgUkVGX0lTU1lNUkVGKSB7CisJCWlmICh1cGRhdGUtPmZsYWdzICYgUkVGX05PREVSRUYpIHsKKwkJCS8qCisJCQkgKiBXZSB3b24ndCBiZSByZWFkaW5nIHRoZSByZWZlcmVudCBhcyBwYXJ0IG9mCisJCQkgKiB0aGUgdHJhbnNhY3Rpb24sIHNvIHdlIGhhdmUgdG8gcmVhZCBpdCBoZXJlCisJCQkgKiB0byByZWNvcmQgYW5kIHBvc3NpYmx5IGNoZWNrIG9sZF9zaGExOgorCQkJICovCisJCQlpZiAocmVhZF9yZWZfZnVsbChyZWZlcmVudC5idWYsIDAsCisJCQkJCSAgbG9jay0+b2xkX29pZC5oYXNoLCBOVUxMKSkgeworCQkJCWlmICh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfT0xEKSB7CisJCQkJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbm5vdCBsb2NrIHJlZiAnJXMnOiAiCisJCQkJCQkgICAgImVycm9yIHJlYWRpbmcgcmVmZXJlbmNlIiwKKwkJCQkJCSAgICBvcmlnaW5hbF91cGRhdGVfcmVmbmFtZSh1cGRhdGUpKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoY2hlY2tfb2xkX29pZCh1cGRhdGUsICZsb2NrLT5vbGRfb2lkLCBlcnIpKSB7CisJCQkJcmV0dXJuIFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQ3JlYXRlIGEgbmV3IHVwZGF0ZSBmb3IgdGhlIHJlZmVyZW5jZSB0aGlzCisJCQkgKiBzeW1yZWYgaXMgcG9pbnRpbmcgYXQuIEFsc28sIHdlIHdpbGwgcmVjb3JkCisJCQkgKiBhbmQgdmVyaWZ5IG9sZF9zaGExIGZvciB0aGlzIHVwZGF0ZSBhcyBwYXJ0CisJCQkgKiBvZiBwcm9jZXNzaW5nIHRoZSBzcGxpdC1vZmYgdXBkYXRlLCBzbyB3ZQorCQkJICogZG9uJ3QgaGF2ZSB0byBkbyBpdCBoZXJlLgorCQkJICovCisJCQlyZXQgPSBzcGxpdF9zeW1yZWZfdXBkYXRlKHVwZGF0ZSwgcmVmZXJlbnQuYnVmLCB0cmFuc2FjdGlvbiwKKwkJCQkJCSAgYWZmZWN0ZWRfcmVmbmFtZXMsIGVycik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgcmVmX3VwZGF0ZSAqcGFyZW50X3VwZGF0ZTsKKworCQlpZiAoY2hlY2tfb2xkX29pZCh1cGRhdGUsICZsb2NrLT5vbGRfb2lkLCBlcnIpKQorCQkJcmV0dXJuIFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisKKwkJLyoKKwkJICogSWYgdGhpcyB1cGRhdGUgaXMgaGFwcGVuaW5nIGluZGlyZWN0bHkgYmVjYXVzZSBvZiBhCisJCSAqIHN5bXJlZiB1cGRhdGUsIHJlY29yZCB0aGUgb2xkIFNIQS0xIGluIHRoZSBwYXJlbnQKKwkJICogdXBkYXRlOgorCQkgKi8KKwkJZm9yIChwYXJlbnRfdXBkYXRlID0gdXBkYXRlLT5wYXJlbnRfdXBkYXRlOworCQkgICAgIHBhcmVudF91cGRhdGU7CisJCSAgICAgcGFyZW50X3VwZGF0ZSA9IHBhcmVudF91cGRhdGUtPnBhcmVudF91cGRhdGUpIHsKKwkJCW9pZGNweSgmcGFyZW50X3VwZGF0ZS0+bG9jay0+b2xkX29pZCwgJmxvY2stPm9sZF9vaWQpOworCQl9CisJfQorCisJaWYgKCh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfTkVXKSAmJgorCSAgICAhKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfREVMRVRJTkcpICYmCisJICAgICEodXBkYXRlLT5mbGFncyAmIFJFRl9MT0dfT05MWSkpIHsKKwkJaWYgKCEodXBkYXRlLT50eXBlICYgUkVGX0lTU1lNUkVGKSAmJgorCQkgICAgIWhhc2hjbXAobG9jay0+b2xkX29pZC5oYXNoLCB1cGRhdGUtPm5ld19zaGExKSkgeworCQkJLyoKKwkJCSAqIFRoZSByZWZlcmVuY2UgYWxyZWFkeSBoYXMgdGhlIGRlc2lyZWQKKwkJCSAqIHZhbHVlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdyaXRlIGl0LgorCQkJICovCisJCX0gZWxzZSBpZiAod3JpdGVfcmVmX3RvX2xvY2tmaWxlKGxvY2ssIHVwZGF0ZS0+bmV3X3NoYTEsCisJCQkJCQkgZXJyKSkgeworCQkJY2hhciAqd3JpdGVfZXJyID0gc3RyYnVmX2RldGFjaChlcnIsIE5VTEwpOworCisJCQkvKgorCQkJICogVGhlIGxvY2sgd2FzIGZyZWVkIHVwb24gZmFpbHVyZSBvZgorCQkJICogd3JpdGVfcmVmX3RvX2xvY2tmaWxlKCk6CisJCQkgKi8KKwkJCXVwZGF0ZS0+bG9jayA9IE5VTEw7CisJCQlzdHJidWZfYWRkZihlcnIsCisJCQkJICAgICJjYW5ub3QgdXBkYXRlIHJlZiAnJXMnOiAlcyIsCisJCQkJICAgIHVwZGF0ZS0+cmVmbmFtZSwgd3JpdGVfZXJyKTsKKwkJCWZyZWUod3JpdGVfZXJyKTsKKwkJCXJldHVybiBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQl9IGVsc2UgeworCQkJdXBkYXRlLT5mbGFncyB8PSBSRUZfTkVFRFNfQ09NTUlUOworCQl9CisJfQorCWlmICghKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfTkVFRFNfQ09NTUlUKSkgeworCQkvKgorCQkgKiBXZSBkaWRuJ3QgY2FsbCB3cml0ZV9yZWZfdG9fbG9ja2ZpbGUoKSwgc28KKwkJICogdGhlIGxvY2tmaWxlIGlzIHN0aWxsIG9wZW4uIENsb3NlIGl0IHRvCisJCSAqIGZyZWUgdXAgdGhlIGZpbGUgZGVzY3JpcHRvcjoKKwkJICovCisJCWlmIChjbG9zZV9yZWYobG9jaykpIHsKKwkJCXN0cmJ1Zl9hZGRmKGVyciwgImNvdWxkbid0IGNsb3NlICclcy5sb2NrJyIsCisJCQkJICAgIHVwZGF0ZS0+cmVmbmFtZSk7CisJCQlyZXR1cm4gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IHJlZl90cmFuc2FjdGlvbl9jb21taXQoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCiAJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCiB7CiAJaW50IHJldCA9IDAsIGk7Ci0JaW50IG4gPSB0cmFuc2FjdGlvbi0+bnI7Ci0Jc3RydWN0IHJlZl91cGRhdGUgKip1cGRhdGVzID0gdHJhbnNhY3Rpb24tPnVwZGF0ZXM7CiAJc3RydWN0IHN0cmluZ19saXN0IHJlZnNfdG9fZGVsZXRlID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcmVmX3RvX2RlbGV0ZTsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYWZmZWN0ZWRfcmVmbmFtZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNoYXIgKmhlYWRfcmVmID0gTlVMTDsKKwlpbnQgaGVhZF90eXBlOworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CiAKIAlhc3NlcnQoZXJyKTsKIAogCWlmICh0cmFuc2FjdGlvbi0+c3RhdGUgIT0gUkVGX1RSQU5TQUNUSU9OX09QRU4pCiAJCWRpZSgiQlVHOiBjb21taXQgY2FsbGVkIGZvciB0cmFuc2FjdGlvbiB0aGF0IGlzIG5vdCBvcGVuIik7CiAKLQlpZiAoIW4pIHsKKwlpZiAoIXRyYW5zYWN0aW9uLT5ucikgewogCQl0cmFuc2FjdGlvbi0+c3RhdGUgPSBSRUZfVFJBTlNBQ1RJT05fQ0xPU0VEOwogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBGYWlsIGlmIGEgcmVmbmFtZSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIHRoZSB0cmFuc2FjdGlvbjogKi8KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmFmZmVjdGVkX3JlZm5hbWVzLCB1cGRhdGVzW2ldLT5yZWZuYW1lKTsKKwkvKgorCSAqIEZhaWwgaWYgYSByZWZuYW1lIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gdGhlCisJICogdHJhbnNhY3Rpb24uIChJZiB3ZSBlbmQgdXAgc3BsaXR0aW5nIHVwIGFueSB1cGRhdGVzIHVzaW5nCisJICogc3BsaXRfc3ltcmVmX3VwZGF0ZSgpIG9yIHNwbGl0X2hlYWRfdXBkYXRlKCksIHRob3NlCisJICogZnVuY3Rpb25zIHdpbGwgY2hlY2sgdGhhdCB0aGUgbmV3IHVwZGF0ZXMgZG9uJ3QgaGF2ZSB0aGUKKwkgKiBzYW1lIHJlZm5hbWUgYXMgYW55IGV4aXN0aW5nIG9uZXMuKQorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0cmFuc2FjdGlvbi0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlID0gdHJhbnNhY3Rpb24tPnVwZGF0ZXNbaV07CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0KKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmYWZmZWN0ZWRfcmVmbmFtZXMsIHVwZGF0ZS0+cmVmbmFtZSk7CisKKwkJLyoKKwkJICogV2Ugc3RvcmUgYSBwb2ludGVyIHRvIHVwZGF0ZSBpbiBpdGVtLT51dGlsLCBidXQgYXQKKwkJICogdGhlIG1vbWVudCB3ZSBuZXZlciB1c2UgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQKKwkJICogZXhjZXB0IHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgbm9uLU5VTEwuCisJCSAqLworCQlpdGVtLT51dGlsID0gdXBkYXRlOworCX0KIAlzdHJpbmdfbGlzdF9zb3J0KCZhZmZlY3RlZF9yZWZuYW1lcyk7CiAJaWYgKHJlZl91cGRhdGVfcmVqZWN0X2R1cGxpY2F0ZXMoJmFmZmVjdGVkX3JlZm5hbWVzLCBlcnIpKSB7CiAJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CkBAIC0zMDcyLDEwNSArMzczOSw4NCBAQAogCX0KIAogCS8qCisJICogU3BlY2lhbCBoYWNrOiBJZiBhIGJyYW5jaCBpcyB1cGRhdGVkIGRpcmVjdGx5IGFuZCBIRUFECisJICogcG9pbnRzIHRvIGl0IChtYXkgaGFwcGVuIG9uIHRoZSByZW1vdGUgc2lkZSBvZiBhIHB1c2gKKwkgKiBmb3IgZXhhbXBsZSkgdGhlbiBsb2dpY2FsbHkgdGhlIEhFQUQgcmVmbG9nIHNob3VsZCBiZQorCSAqIHVwZGF0ZWQgdG9vLgorCSAqCisJICogQSBnZW5lcmljIHNvbHV0aW9uIHdvdWxkIHJlcXVpcmUgcmV2ZXJzZSBzeW1yZWYgbG9va3VwcywKKwkgKiBidXQgZmluZGluZyBhbGwgc3ltcmVmcyBwb2ludGluZyB0byBhIGdpdmVuIGJyYW5jaCB3b3VsZCBiZQorCSAqIHJhdGhlciBjb3N0bHkgZm9yIHRoaXMgcmFyZSBldmVudCAodGhlIGRpcmVjdCB1cGRhdGUgb2YgYQorCSAqIGJyYW5jaCkgdG8gYmUgd29ydGggaXQuIFNvIGxldCdzIGNoZWF0IGFuZCBjaGVjayB3aXRoIEhFQUQKKwkgKiBvbmx5LCB3aGljaCBzaG91bGQgY292ZXIgOTklIG9mIGFsbCB1c2FnZSBzY2VuYXJpb3MgKGV2ZW4KKwkgKiAxMDAlIG9mIHRoZSBkZWZhdWx0IG9uZXMpLgorCSAqCisJICogU28gaWYgSEVBRCBpcyBhIHN5bWJvbGljIHJlZmVyZW5jZSwgdGhlbiByZWNvcmQgdGhlIG5hbWUgb2YKKwkgKiB0aGUgcmVmZXJlbmNlIHRoYXQgaXQgcG9pbnRzIHRvLiBJZiB3ZSBzZWUgYW4gdXBkYXRlIG9mCisJICogaGVhZF9yZWYgd2l0aGluIHRoZSB0cmFuc2FjdGlvbiwgdGhlbiBzcGxpdF9oZWFkX3VwZGF0ZSgpCisJICogYXJyYW5nZXMgZm9yIHRoZSByZWZsb2cgb2YgSEVBRCB0byBiZSB1cGRhdGVkLCB0b28uCisJICovCisJaGVhZF9yZWYgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIFJFU09MVkVfUkVGX05PX1JFQ1VSU0UsCisJCQkJICBoZWFkX29pZC5oYXNoLCAmaGVhZF90eXBlKTsKKworCWlmIChoZWFkX3JlZiAmJiAhKGhlYWRfdHlwZSAmIFJFRl9JU1NZTVJFRikpIHsKKwkJZnJlZShoZWFkX3JlZik7CisJCWhlYWRfcmVmID0gTlVMTDsKKwl9CisKKwkvKgogCSAqIEFjcXVpcmUgYWxsIGxvY2tzLCB2ZXJpZnkgb2xkIHZhbHVlcyBpZiBwcm92aWRlZCwgY2hlY2sKIAkgKiB0aGF0IG5ldyB2YWx1ZXMgYXJlIHZhbGlkLCBhbmQgd3JpdGUgbmV3IHZhbHVlcyB0byB0aGUKIAkgKiBsb2NrZmlsZXMsIHJlYWR5IHRvIGJlIGFjdGl2YXRlZC4gT25seSBrZWVwIG9uZSBsb2NrZmlsZQogCSAqIG9wZW4gYXQgYSB0aW1lIHRvIGF2b2lkIHJ1bm5pbmcgb3V0IG9mIGZpbGUgZGVzY3JpcHRvcnMuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlID0gdXBkYXRlc1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldOwogCi0JCWlmICgodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX05FVykgJiYKLQkJICAgIGlzX251bGxfc2hhMSh1cGRhdGUtPm5ld19zaGExKSkKLQkJCXVwZGF0ZS0+ZmxhZ3MgfD0gUkVGX0RFTEVUSU5HOwotCQl1cGRhdGUtPmxvY2sgPSBsb2NrX3JlZl9zaGExX2Jhc2ljKAotCQkJCXVwZGF0ZS0+cmVmbmFtZSwKLQkJCQkoKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSEFWRV9PTEQpID8KLQkJCQkgdXBkYXRlLT5vbGRfc2hhMSA6IE5VTEwpLAotCQkJCSZhZmZlY3RlZF9yZWZuYW1lcywgTlVMTCwKLQkJCQl1cGRhdGUtPmZsYWdzLAotCQkJCSZ1cGRhdGUtPnR5cGUsCi0JCQkJZXJyKTsKLQkJaWYgKCF1cGRhdGUtPmxvY2spIHsKLQkJCWNoYXIgKnJlYXNvbjsKLQotCQkJcmV0ID0gKGVycm5vID09IEVOT1RESVIpCi0JCQkJPyBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUCi0JCQkJOiBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOwotCQkJcmVhc29uID0gc3RyYnVmX2RldGFjaChlcnIsIE5VTEwpOwotCQkJc3RyYnVmX2FkZGYoZXJyLCAiY2Fubm90IGxvY2sgcmVmICclcyc6ICVzIiwKLQkJCQkgICAgdXBkYXRlLT5yZWZuYW1lLCByZWFzb24pOwotCQkJZnJlZShyZWFzb24pOworCQlyZXQgPSBsb2NrX3JlZl9mb3JfdXBkYXRlKHVwZGF0ZSwgdHJhbnNhY3Rpb24sIGhlYWRfcmVmLAorCQkJCQkgICZhZmZlY3RlZF9yZWZuYW1lcywgZXJyKTsKKwkJaWYgKHJldCkKIAkJCWdvdG8gY2xlYW51cDsKLQkJfQotCQlpZiAoKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSEFWRV9ORVcpICYmCi0JCSAgICAhKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfREVMRVRJTkcpKSB7Ci0JCQlpbnQgb3ZlcndyaXRpbmdfc3ltcmVmID0gKCh1cGRhdGUtPnR5cGUgJiBSRUZfSVNTWU1SRUYpICYmCi0JCQkJCQkgICh1cGRhdGUtPmZsYWdzICYgUkVGX05PREVSRUYpKTsKLQotCQkJaWYgKCFvdmVyd3JpdGluZ19zeW1yZWYgJiYKLQkJCSAgICAhaGFzaGNtcCh1cGRhdGUtPmxvY2stPm9sZF9vaWQuaGFzaCwgdXBkYXRlLT5uZXdfc2hhMSkpIHsKLQkJCQkvKgotCQkJCSAqIFRoZSByZWZlcmVuY2UgYWxyZWFkeSBoYXMgdGhlIGRlc2lyZWQKLQkJCQkgKiB2YWx1ZSwgc28gd2UgZG9uJ3QgbmVlZCB0byB3cml0ZSBpdC4KLQkJCQkgKi8KLQkJCX0gZWxzZSBpZiAod3JpdGVfcmVmX3RvX2xvY2tmaWxlKHVwZGF0ZS0+bG9jaywKLQkJCQkJCQkgdXBkYXRlLT5uZXdfc2hhMSwKLQkJCQkJCQkgZXJyKSkgewotCQkJCWNoYXIgKndyaXRlX2VyciA9IHN0cmJ1Zl9kZXRhY2goZXJyLCBOVUxMKTsKLQotCQkJCS8qCi0JCQkJICogVGhlIGxvY2sgd2FzIGZyZWVkIHVwb24gZmFpbHVyZSBvZgotCQkJCSAqIHdyaXRlX3JlZl90b19sb2NrZmlsZSgpOgotCQkJCSAqLwotCQkJCXVwZGF0ZS0+bG9jayA9IE5VTEw7Ci0JCQkJc3RyYnVmX2FkZGYoZXJyLAotCQkJCQkgICAgImNhbm5vdCB1cGRhdGUgdGhlIHJlZiAnJXMnOiAlcyIsCi0JCQkJCSAgICB1cGRhdGUtPnJlZm5hbWUsIHdyaXRlX2Vycik7Ci0JCQkJZnJlZSh3cml0ZV9lcnIpOwotCQkJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7Ci0JCQkJZ290byBjbGVhbnVwOwotCQkJfSBlbHNlIHsKLQkJCQl1cGRhdGUtPmZsYWdzIHw9IFJFRl9ORUVEU19DT01NSVQ7Ci0JCQl9Ci0JCX0KLQkJaWYgKCEodXBkYXRlLT5mbGFncyAmIFJFRl9ORUVEU19DT01NSVQpKSB7Ci0JCQkvKgotCQkJICogV2UgZGlkbid0IGhhdmUgdG8gd3JpdGUgYW55dGhpbmcgdG8gdGhlIGxvY2tmaWxlLgotCQkJICogQ2xvc2UgaXQgdG8gZnJlZSB1cCB0aGUgZmlsZSBkZXNjcmlwdG9yOgotCQkJICovCi0JCQlpZiAoY2xvc2VfcmVmKHVwZGF0ZS0+bG9jaykpIHsKLQkJCQlzdHJidWZfYWRkZihlcnIsICJDb3VsZG4ndCBjbG9zZSAlcy5sb2NrIiwKLQkJCQkJICAgIHVwZGF0ZS0+cmVmbmFtZSk7Ci0JCQkJZ290byBjbGVhbnVwOwotCQkJfQotCQl9CiAJfQogCiAJLyogUGVyZm9ybSB1cGRhdGVzIGZpcnN0IHNvIGxpdmUgY29tbWl0cyByZW1haW4gcmVmZXJlbmNlZCAqLwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHVwZGF0ZXNbaV07CisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKKwkJc3RydWN0IHJlZl9sb2NrICpsb2NrID0gdXBkYXRlLT5sb2NrOwogCi0JCWlmICh1cGRhdGUtPmZsYWdzICYgUkVGX05FRURTX0NPTU1JVCkgewotCQkJaWYgKGNvbW1pdF9yZWZfdXBkYXRlKHVwZGF0ZS0+bG9jaywKLQkJCQkJICAgICAgdXBkYXRlLT5uZXdfc2hhMSwgdXBkYXRlLT5tc2csCi0JCQkJCSAgICAgIHVwZGF0ZS0+ZmxhZ3MsIGVycikpIHsKLQkJCQkvKiBmcmVlZCBieSBjb21taXRfcmVmX3VwZGF0ZSgpOiAqLworCQlpZiAodXBkYXRlLT5mbGFncyAmIFJFRl9ORUVEU19DT01NSVQgfHwKKwkJICAgIHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfTE9HX09OTFkpIHsKKwkJCWlmIChsb2dfcmVmX3dyaXRlKGxvY2stPnJlZl9uYW1lLCBsb2NrLT5vbGRfb2lkLmhhc2gsCisJCQkJCSAgdXBkYXRlLT5uZXdfc2hhMSwKKwkJCQkJICB1cGRhdGUtPm1zZywgdXBkYXRlLT5mbGFncywgZXJyKSkgeworCQkJCWNoYXIgKm9sZF9tc2cgPSBzdHJidWZfZGV0YWNoKGVyciwgTlVMTCk7CisKKwkJCQlzdHJidWZfYWRkZihlcnIsICJjYW5ub3QgdXBkYXRlIHRoZSByZWYgJyVzJzogJXMiLAorCQkJCQkgICAgbG9jay0+cmVmX25hbWUsIG9sZF9tc2cpOworCQkJCWZyZWUob2xkX21zZyk7CisJCQkJdW5sb2NrX3JlZihsb2NrKTsKIAkJCQl1cGRhdGUtPmxvY2sgPSBOVUxMOwogCQkJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CiAJCQkJZ290byBjbGVhbnVwOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBmcmVlZCBieSBjb21taXRfcmVmX3VwZGF0ZSgpOiAqLworCQkJfQorCQl9CisJCWlmICh1cGRhdGUtPmZsYWdzICYgUkVGX05FRURTX0NPTU1JVCkgeworCQkJY2xlYXJfbG9vc2VfcmVmX2NhY2hlKCZyZWZfY2FjaGUpOworCQkJaWYgKGNvbW1pdF9yZWYobG9jaykpIHsKKwkJCQlzdHJidWZfYWRkZihlcnIsICJjb3VsZG4ndCBzZXQgJyVzJyIsIGxvY2stPnJlZl9uYW1lKTsKKwkJCQl1bmxvY2tfcmVmKGxvY2spOwogCQkJCXVwZGF0ZS0+bG9jayA9IE5VTEw7CisJCQkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJCQlnb3RvIGNsZWFudXA7CiAJCQl9CiAJCX0KIAl9Ci0KIAkvKiBQZXJmb3JtIGRlbGV0ZXMgbm93IHRoYXQgdXBkYXRlcyBhcmUgc2FmZWx5IGNvbXBsZXRlZCAqLwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHVwZGF0ZXNbaV07CisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKIAotCQlpZiAodXBkYXRlLT5mbGFncyAmIFJFRl9ERUxFVElORykgeworCQlpZiAodXBkYXRlLT5mbGFncyAmIFJFRl9ERUxFVElORyAmJgorCQkgICAgISh1cGRhdGUtPmZsYWdzICYgUkVGX0xPR19PTkxZKSkgewogCQkJaWYgKGRlbGV0ZV9yZWZfbG9vc2UodXBkYXRlLT5sb2NrLCB1cGRhdGUtPnR5cGUsIGVycikpIHsKIAkJCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOwogCQkJCWdvdG8gY2xlYW51cDsKQEAgLTMxOTMsMTEgKzM4MzksMTMgQEAKIGNsZWFudXA6CiAJdHJhbnNhY3Rpb24tPnN0YXRlID0gUkVGX1RSQU5TQUNUSU9OX0NMT1NFRDsKIAotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCWlmICh1cGRhdGVzW2ldLT5sb2NrKQotCQkJdW5sb2NrX3JlZih1cGRhdGVzW2ldLT5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspCisJCWlmICh0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXS0+bG9jaykKKwkJCXVubG9ja19yZWYodHJhbnNhY3Rpb24tPnVwZGF0ZXNbaV0tPmxvY2spOwogCXN0cmluZ19saXN0X2NsZWFyKCZyZWZzX3RvX2RlbGV0ZSwgMCk7CisJZnJlZShoZWFkX3JlZik7CiAJc3RyaW5nX2xpc3RfY2xlYXIoJmFmZmVjdGVkX3JlZm5hbWVzLCAwKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMyMTMsOCArMzg2MSw2IEBACiAJCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQogewogCWludCByZXQgPSAwLCBpOwotCWludCBuID0gdHJhbnNhY3Rpb24tPm5yOwotCXN0cnVjdCByZWZfdXBkYXRlICoqdXBkYXRlcyA9IHRyYW5zYWN0aW9uLT51cGRhdGVzOwogCXN0cnVjdCBzdHJpbmdfbGlzdCBhZmZlY3RlZF9yZWZuYW1lcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CiAKIAlhc3NlcnQoZXJyKTsKQEAgLTMyMjMsOCArMzg2OSw5IEBACiAJCWRpZSgiQlVHOiBjb21taXQgY2FsbGVkIGZvciB0cmFuc2FjdGlvbiB0aGF0IGlzIG5vdCBvcGVuIik7CiAKIAkvKiBGYWlsIGlmIGEgcmVmbmFtZSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIHRoZSB0cmFuc2FjdGlvbjogKi8KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmFmZmVjdGVkX3JlZm5hbWVzLCB1cGRhdGVzW2ldLT5yZWZuYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspCisJCXN0cmluZ19saXN0X2FwcGVuZCgmYWZmZWN0ZWRfcmVmbmFtZXMsCisJCQkJICAgdHJhbnNhY3Rpb24tPnVwZGF0ZXNbaV0tPnJlZm5hbWUpOwogCXN0cmluZ19saXN0X3NvcnQoJmFmZmVjdGVkX3JlZm5hbWVzKTsKIAlpZiAocmVmX3VwZGF0ZV9yZWplY3RfZHVwbGljYXRlcygmYWZmZWN0ZWRfcmVmbmFtZXMsIGVycikpIHsKIAkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKQEAgLTMyNDYsOCArMzg5Myw4IEBACiAJaWYgKGZvcl9lYWNoX3Jhd3JlZihyZWZfcHJlc2VudCwgJmFmZmVjdGVkX3JlZm5hbWVzKSkKIAkJZGllKCJCVUc6IGluaXRpYWwgcmVmIHRyYW5zYWN0aW9uIGNhbGxlZCB3aXRoIGV4aXN0aW5nIHJlZnMiKTsKIAotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHVwZGF0ZXNbaV07CisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKIAogCQlpZiAoKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSEFWRV9PTEQpICYmCiAJCSAgICAhaXNfbnVsbF9zaGExKHVwZGF0ZS0+b2xkX3NoYTEpKQpAQCAtMzI2Nyw4ICszOTE0LDggQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHVwZGF0ZXNbaV07CisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKIAogCQlpZiAoKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSEFWRV9ORVcpICYmCiAJCSAgICAhaXNfbnVsbF9zaGExKHVwZGF0ZS0+bmV3X3NoYTEpKQpkaWZmIC0tZ2l0IGEvcmVmcy9pdGVyYXRvci5jIGIvcmVmcy9pdGVyYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZTFmMTkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzL2l0ZXJhdG9yLmMKQEAgLTAsMCArMSwzODQgQEAKKy8qCisgKiBHZW5lcmljIHJlZmVyZW5jZSBpdGVyYXRvciBpbmZyYXN0cnVjdHVyZS4gU2VlIHJlZnMtaW50ZXJuYWwuaCBmb3IKKyAqIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGRlc2lnbiBhbmQgdXNlIG9mIHJlZmVyZW5jZSBpdGVyYXRvcnMuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnMvcmVmcy1pbnRlcm5hbC5oIgorI2luY2x1ZGUgIml0ZXJhdG9yLmgiCisKK2ludCByZWZfaXRlcmF0b3JfYWR2YW5jZShzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJcmV0dXJuIHJlZl9pdGVyYXRvci0+dnRhYmxlLT5hZHZhbmNlKHJlZl9pdGVyYXRvcik7Cit9CisKK2ludCByZWZfaXRlcmF0b3JfcGVlbChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IsCisJCSAgICAgIHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCkKK3sKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yLT52dGFibGUtPnBlZWwocmVmX2l0ZXJhdG9yLCBwZWVsZWQpOworfQorCitpbnQgcmVmX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yLT52dGFibGUtPmFib3J0KHJlZl9pdGVyYXRvcik7Cit9CisKK3ZvaWQgYmFzZV9yZWZfaXRlcmF0b3JfaW5pdChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyLAorCQkJICAgIHN0cnVjdCByZWZfaXRlcmF0b3JfdnRhYmxlICp2dGFibGUpCit7CisJaXRlci0+dnRhYmxlID0gdnRhYmxlOworCWl0ZXItPnJlZm5hbWUgPSBOVUxMOworCWl0ZXItPm9pZCA9IE5VTEw7CisJaXRlci0+ZmxhZ3MgPSAwOworfQorCit2b2lkIGJhc2VfcmVmX2l0ZXJhdG9yX2ZyZWUoc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcikKK3sKKwkvKiBIZWxwIG1ha2UgdXNlLWFmdGVyLWZyZWUgYnVncyBmYWlsIHF1aWNrbHk6ICovCisJaXRlci0+dnRhYmxlID0gTlVMTDsKKwlmcmVlKGl0ZXIpOworfQorCitzdHJ1Y3QgZW1wdHlfcmVmX2l0ZXJhdG9yIHsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yIGJhc2U7Cit9OworCitzdGF0aWMgaW50IGVtcHR5X3JlZl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yX2Fib3J0KHJlZl9pdGVyYXRvcik7Cit9CisKK3N0YXRpYyBpbnQgZW1wdHlfcmVmX2l0ZXJhdG9yX3BlZWwoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yLAorCQkJCSAgIHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCkKK3sKKwlkaWUoIkJVRzogcGVlbCBjYWxsZWQgZm9yIGVtcHR5IGl0ZXJhdG9yIik7Cit9CisKK3N0YXRpYyBpbnQgZW1wdHlfcmVmX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwliYXNlX3JlZl9pdGVyYXRvcl9mcmVlKHJlZl9pdGVyYXRvcik7CisJcmV0dXJuIElURVJfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCByZWZfaXRlcmF0b3JfdnRhYmxlIGVtcHR5X3JlZl9pdGVyYXRvcl92dGFibGUgPSB7CisJZW1wdHlfcmVmX2l0ZXJhdG9yX2FkdmFuY2UsCisJZW1wdHlfcmVmX2l0ZXJhdG9yX3BlZWwsCisJZW1wdHlfcmVmX2l0ZXJhdG9yX2Fib3J0Cit9OworCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICplbXB0eV9yZWZfaXRlcmF0b3JfYmVnaW4odm9pZCkKK3sKKwlzdHJ1Y3QgZW1wdHlfcmVmX2l0ZXJhdG9yICppdGVyID0geGNhbGxvYygxLCBzaXplb2YoKml0ZXIpKTsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IgPSAmaXRlci0+YmFzZTsKKworCWJhc2VfcmVmX2l0ZXJhdG9yX2luaXQocmVmX2l0ZXJhdG9yLCAmZW1wdHlfcmVmX2l0ZXJhdG9yX3Z0YWJsZSk7CisJcmV0dXJuIHJlZl9pdGVyYXRvcjsKK30KKworaW50IGlzX2VtcHR5X3JlZl9pdGVyYXRvcihzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJcmV0dXJuIHJlZl9pdGVyYXRvci0+dnRhYmxlID09ICZlbXB0eV9yZWZfaXRlcmF0b3JfdnRhYmxlOworfQorCitzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yIHsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yIGJhc2U7CisKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMCwgKml0ZXIxOworCisJcmVmX2l0ZXJhdG9yX3NlbGVjdF9mbiAqc2VsZWN0OworCXZvaWQgKmNiX2RhdGE7CisKKwkvKgorCSAqIEEgcG9pbnRlciB0byBpdGVyMCBvciBpdGVyMSAod2hpY2hldmVyIGlzIHN1cHBseWluZyB0aGUKKwkgKiBjdXJyZW50IHZhbHVlKSwgb3IgTlVMTCBpZiBhZHZhbmNlIGhhcyBub3QgeWV0IGJlZW4gY2FsbGVkLgorCSAqLworCXN0cnVjdCByZWZfaXRlcmF0b3IgKipjdXJyZW50OworfTsKKworc3RhdGljIGludCBtZXJnZV9yZWZfaXRlcmF0b3JfYWR2YW5jZShzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IG1lcmdlX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCWludCBvazsKKworCWlmICghaXRlci0+Y3VycmVudCkgeworCQkvKiBJbml0aWFsaXplOiBhZHZhbmNlIGJvdGggaXRlcmF0b3JzIHRvIHRoZWlyIGZpcnN0IGVudHJpZXMgKi8KKwkJaWYgKChvayA9IHJlZl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXItPml0ZXIwKSkgIT0gSVRFUl9PSykgeworCQkJaXRlci0+aXRlcjAgPSBOVUxMOworCQkJaWYgKG9rID09IElURVJfRVJST1IpCisJCQkJZ290byBlcnJvcjsKKwkJfQorCQlpZiAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoaXRlci0+aXRlcjEpKSAhPSBJVEVSX09LKSB7CisJCQlpdGVyLT5pdGVyMSA9IE5VTEw7CisJCQlpZiAob2sgPT0gSVRFUl9FUlJPUikKKwkJCQlnb3RvIGVycm9yOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQWR2YW5jZSB0aGUgY3VycmVudCBpdGVyYXRvciBwYXN0IHRoZSBqdXN0LXVzZWQKKwkJICogZW50cnk6CisJCSAqLworCQlpZiAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKml0ZXItPmN1cnJlbnQpKSAhPSBJVEVSX09LKSB7CisJCQkqaXRlci0+Y3VycmVudCA9IE5VTEw7CisJCQlpZiAob2sgPT0gSVRFUl9FUlJPUikKKwkJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJLyogTG9vcCB1bnRpbCB3ZSBmaW5kIGFuIGVudHJ5IHRoYXQgd2UgY2FuIHlpZWxkLiAqLworCXdoaWxlICgxKSB7CisJCXN0cnVjdCByZWZfaXRlcmF0b3IgKipzZWNvbmRhcnk7CisJCWVudW0gaXRlcmF0b3Jfc2VsZWN0aW9uIHNlbGVjdGlvbiA9CisJCQlpdGVyLT5zZWxlY3QoaXRlci0+aXRlcjAsIGl0ZXItPml0ZXIxLCBpdGVyLT5jYl9kYXRhKTsKKworCQlpZiAoc2VsZWN0aW9uID09IElURVJfU0VMRUNUX0RPTkUpIHsKKwkJCXJldHVybiByZWZfaXRlcmF0b3JfYWJvcnQocmVmX2l0ZXJhdG9yKTsKKwkJfSBlbHNlIGlmIChzZWxlY3Rpb24gPT0gSVRFUl9TRUxFQ1RfRVJST1IpIHsKKwkJCXJlZl9pdGVyYXRvcl9hYm9ydChyZWZfaXRlcmF0b3IpOworCQkJcmV0dXJuIElURVJfRVJST1I7CisJCX0KKworCQlpZiAoKHNlbGVjdGlvbiAmIElURVJfQ1VSUkVOVF9TRUxFQ1RJT05fTUFTSykgPT0gMCkgeworCQkJaXRlci0+Y3VycmVudCA9ICZpdGVyLT5pdGVyMDsKKwkJCXNlY29uZGFyeSA9ICZpdGVyLT5pdGVyMTsKKwkJfSBlbHNlIHsKKwkJCWl0ZXItPmN1cnJlbnQgPSAmaXRlci0+aXRlcjE7CisJCQlzZWNvbmRhcnkgPSAmaXRlci0+aXRlcjA7CisJCX0KKworCQlpZiAoc2VsZWN0aW9uICYgSVRFUl9TS0lQX1NFQ09OREFSWSkgeworCQkJaWYgKChvayA9IHJlZl9pdGVyYXRvcl9hZHZhbmNlKCpzZWNvbmRhcnkpKSAhPSBJVEVSX09LKSB7CisJCQkJKnNlY29uZGFyeSA9IE5VTEw7CisJCQkJaWYgKG9rID09IElURVJfRVJST1IpCisJCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKworCQlpZiAoc2VsZWN0aW9uICYgSVRFUl9ZSUVMRF9DVVJSRU5UKSB7CisJCQlpdGVyLT5iYXNlLnJlZm5hbWUgPSAoKml0ZXItPmN1cnJlbnQpLT5yZWZuYW1lOworCQkJaXRlci0+YmFzZS5vaWQgPSAoKml0ZXItPmN1cnJlbnQpLT5vaWQ7CisJCQlpdGVyLT5iYXNlLmZsYWdzID0gKCppdGVyLT5jdXJyZW50KS0+ZmxhZ3M7CisJCQlyZXR1cm4gSVRFUl9PSzsKKwkJfQorCX0KKworZXJyb3I6CisJcmVmX2l0ZXJhdG9yX2Fib3J0KHJlZl9pdGVyYXRvcik7CisJcmV0dXJuIElURVJfRVJST1I7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfcmVmX2l0ZXJhdG9yX3BlZWwoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yLAorCQkJCSAgIHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCkKK3sKKwlzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBtZXJnZV9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisKKwlpZiAoIWl0ZXItPmN1cnJlbnQpIHsKKwkJZGllKCJCVUc6IHBlZWwgY2FsbGVkIGJlZm9yZSBhZHZhbmNlIGZvciBtZXJnZSBpdGVyYXRvciIpOworCX0KKwlyZXR1cm4gcmVmX2l0ZXJhdG9yX3BlZWwoKml0ZXItPmN1cnJlbnQsIHBlZWxlZCk7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfcmVmX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBtZXJnZV9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJaW50IG9rID0gSVRFUl9ET05FOworCisJaWYgKGl0ZXItPml0ZXIwKSB7CisJCWlmIChyZWZfaXRlcmF0b3JfYWJvcnQoaXRlci0+aXRlcjApICE9IElURVJfRE9ORSkKKwkJCW9rID0gSVRFUl9FUlJPUjsKKwl9CisJaWYgKGl0ZXItPml0ZXIxKSB7CisJCWlmIChyZWZfaXRlcmF0b3JfYWJvcnQoaXRlci0+aXRlcjEpICE9IElURVJfRE9ORSkKKwkJCW9rID0gSVRFUl9FUlJPUjsKKwl9CisJYmFzZV9yZWZfaXRlcmF0b3JfZnJlZShyZWZfaXRlcmF0b3IpOworCXJldHVybiBvazsKK30KKworc3RhdGljIHN0cnVjdCByZWZfaXRlcmF0b3JfdnRhYmxlIG1lcmdlX3JlZl9pdGVyYXRvcl92dGFibGUgPSB7CisJbWVyZ2VfcmVmX2l0ZXJhdG9yX2FkdmFuY2UsCisJbWVyZ2VfcmVmX2l0ZXJhdG9yX3BlZWwsCisJbWVyZ2VfcmVmX2l0ZXJhdG9yX2Fib3J0Cit9OworCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICptZXJnZV9yZWZfaXRlcmF0b3JfYmVnaW4oCisJCXN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIwLCBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMSwKKwkJcmVmX2l0ZXJhdG9yX3NlbGVjdF9mbiAqc2VsZWN0LCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBtZXJnZV9yZWZfaXRlcmF0b3IgKml0ZXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXRlcikpOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciA9ICZpdGVyLT5iYXNlOworCisJLyoKKwkgKiBXZSBjYW4ndCBkbyB0aGUgc2FtZSBraW5kIG9mIGlzX2VtcHR5X3JlZl9pdGVyYXRvcigpLXN0eWxlCisJICogb3B0aW1pemF0aW9uIGhlcmUgYXMgb3ZlcmxheV9yZWZfaXRlcmF0b3JfYmVnaW4oKSBkb2VzLAorCSAqIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB0aGUgc2VtYW50aWNzIG9mIHRoZSBzZWxlY3QgZnVuY3Rpb24uCisJICogSXQgbWlnaHQsIGZvciBleGFtcGxlLCBpbXBsZW1lbnQgImludGVyc2VjdCIgYnkgcGFzc2luZworCSAqIHJlZmVyZW5jZXMgdGhyb3VnaCBvbmx5IGlmIHRoZXkgZXhpc3QgaW4gYm90aCBpdGVyYXRvcnMuCisJICovCisKKwliYXNlX3JlZl9pdGVyYXRvcl9pbml0KHJlZl9pdGVyYXRvciwgJm1lcmdlX3JlZl9pdGVyYXRvcl92dGFibGUpOworCWl0ZXItPml0ZXIwID0gaXRlcjA7CisJaXRlci0+aXRlcjEgPSBpdGVyMTsKKwlpdGVyLT5zZWxlY3QgPSBzZWxlY3Q7CisJaXRlci0+Y2JfZGF0YSA9IGNiX2RhdGE7CisJaXRlci0+Y3VycmVudCA9IE5VTEw7CisJcmV0dXJuIHJlZl9pdGVyYXRvcjsKK30KKworLyoKKyAqIEEgcmVmX2l0ZXJhdG9yX3NlbGVjdF9mbiB0aGF0IG92ZXJsYXlzIHRoZSBpdGVtcyBmcm9tIGZyb250IG9uIHRvcAorICogb2YgdGhvc2UgZnJvbSBiYWNrIChsaWtlIGxvb3NlIHJlZnMgb3ZlciBwYWNrZWQgcmVmcykuIFNlZQorICogb3ZlcmxheV9yZWZfaXRlcmF0b3JfYmVnaW4oKS4KKyAqLworc3RhdGljIGVudW0gaXRlcmF0b3Jfc2VsZWN0aW9uIG92ZXJsYXlfaXRlcmF0b3Jfc2VsZWN0KAorCQlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpmcm9udCwgc3RydWN0IHJlZl9pdGVyYXRvciAqYmFjaywKKwkJdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgY21wOworCisJaWYgKCFiYWNrKQorCQlyZXR1cm4gZnJvbnQgPyBJVEVSX1NFTEVDVF8wIDogSVRFUl9TRUxFQ1RfRE9ORTsKKwllbHNlIGlmICghZnJvbnQpCisJCXJldHVybiBJVEVSX1NFTEVDVF8xOworCisJY21wID0gc3RyY21wKGZyb250LT5yZWZuYW1lLCBiYWNrLT5yZWZuYW1lKTsKKworCWlmIChjbXAgPCAwKQorCQlyZXR1cm4gSVRFUl9TRUxFQ1RfMDsKKwllbHNlIGlmIChjbXAgPiAwKQorCQlyZXR1cm4gSVRFUl9TRUxFQ1RfMTsKKwllbHNlCisJCXJldHVybiBJVEVSX1NFTEVDVF8wX1NLSVBfMTsKK30KKworc3RydWN0IHJlZl9pdGVyYXRvciAqb3ZlcmxheV9yZWZfaXRlcmF0b3JfYmVnaW4oCisJCXN0cnVjdCByZWZfaXRlcmF0b3IgKmZyb250LCBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpiYWNrKQoreworCS8qCisJICogT3B0aW1pemF0aW9uOiBpZiBvbmUgb2YgdGhlIGl0ZXJhdG9ycyBpcyBlbXB0eSwgcmV0dXJuIHRoZQorCSAqIG90aGVyIG9uZSByYXRoZXIgdGhhbiBpbmN1cnJpbmcgdGhlIG92ZXJoZWFkIG9mIHdyYXBwaW5nCisJICogdGhlbS4KKwkgKi8KKwlpZiAoaXNfZW1wdHlfcmVmX2l0ZXJhdG9yKGZyb250KSkgeworCQlyZWZfaXRlcmF0b3JfYWJvcnQoZnJvbnQpOworCQlyZXR1cm4gYmFjazsKKwl9IGVsc2UgaWYgKGlzX2VtcHR5X3JlZl9pdGVyYXRvcihiYWNrKSkgeworCQlyZWZfaXRlcmF0b3JfYWJvcnQoYmFjayk7CisJCXJldHVybiBmcm9udDsKKwl9CisKKwlyZXR1cm4gbWVyZ2VfcmVmX2l0ZXJhdG9yX2JlZ2luKGZyb250LCBiYWNrLAorCQkJCQlvdmVybGF5X2l0ZXJhdG9yX3NlbGVjdCwgTlVMTCk7Cit9CisKK3N0cnVjdCBwcmVmaXhfcmVmX2l0ZXJhdG9yIHsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yIGJhc2U7CisKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMDsKKwljaGFyICpwcmVmaXg7CisJaW50IHRyaW07Cit9OworCitzdGF0aWMgaW50IHByZWZpeF9yZWZfaXRlcmF0b3JfYWR2YW5jZShzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJaW50IG9rOworCisJd2hpbGUgKChvayA9IHJlZl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXItPml0ZXIwKSkgPT0gSVRFUl9PSykgeworCQlpZiAoIXN0YXJ0c193aXRoKGl0ZXItPml0ZXIwLT5yZWZuYW1lLCBpdGVyLT5wcmVmaXgpKQorCQkJY29udGludWU7CisKKwkJaXRlci0+YmFzZS5yZWZuYW1lID0gaXRlci0+aXRlcjAtPnJlZm5hbWUgKyBpdGVyLT50cmltOworCQlpdGVyLT5iYXNlLm9pZCA9IGl0ZXItPml0ZXIwLT5vaWQ7CisJCWl0ZXItPmJhc2UuZmxhZ3MgPSBpdGVyLT5pdGVyMC0+ZmxhZ3M7CisJCXJldHVybiBJVEVSX09LOworCX0KKworCWl0ZXItPml0ZXIwID0gTlVMTDsKKwlpZiAocmVmX2l0ZXJhdG9yX2Fib3J0KHJlZl9pdGVyYXRvcikgIT0gSVRFUl9ET05FKQorCQlyZXR1cm4gSVRFUl9FUlJPUjsKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQgcHJlZml4X3JlZl9pdGVyYXRvcl9wZWVsKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJCQkgICAgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkKQoreworCXN0cnVjdCBwcmVmaXhfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBwcmVmaXhfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCisJcmV0dXJuIHJlZl9pdGVyYXRvcl9wZWVsKGl0ZXItPml0ZXIwLCBwZWVsZWQpOworfQorCitzdGF0aWMgaW50IHByZWZpeF9yZWZfaXRlcmF0b3JfYWJvcnQoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCXN0cnVjdCBwcmVmaXhfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBwcmVmaXhfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCWludCBvayA9IElURVJfRE9ORTsKKworCWlmIChpdGVyLT5pdGVyMCkKKwkJb2sgPSByZWZfaXRlcmF0b3JfYWJvcnQoaXRlci0+aXRlcjApOworCWZyZWUoaXRlci0+cHJlZml4KTsKKwliYXNlX3JlZl9pdGVyYXRvcl9mcmVlKHJlZl9pdGVyYXRvcik7CisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9pdGVyYXRvcl92dGFibGUgcHJlZml4X3JlZl9pdGVyYXRvcl92dGFibGUgPSB7CisJcHJlZml4X3JlZl9pdGVyYXRvcl9hZHZhbmNlLAorCXByZWZpeF9yZWZfaXRlcmF0b3JfcGVlbCwKKwlwcmVmaXhfcmVmX2l0ZXJhdG9yX2Fib3J0Cit9OworCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpwcmVmaXhfcmVmX2l0ZXJhdG9yX2JlZ2luKHN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIwLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkgICAgICAgaW50IHRyaW0pCit7CisJc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgKml0ZXI7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yOworCisJaWYgKCEqcHJlZml4ICYmICF0cmltKQorCQlyZXR1cm4gaXRlcjA7IC8qIG9wdGltaXphdGlvbjogbm8gbmVlZCB0byB3cmFwIGl0ZXJhdG9yICovCisKKwlpdGVyID0geGNhbGxvYygxLCBzaXplb2YoKml0ZXIpKTsKKwlyZWZfaXRlcmF0b3IgPSAmaXRlci0+YmFzZTsKKworCWJhc2VfcmVmX2l0ZXJhdG9yX2luaXQocmVmX2l0ZXJhdG9yLCAmcHJlZml4X3JlZl9pdGVyYXRvcl92dGFibGUpOworCisJaXRlci0+aXRlcjAgPSBpdGVyMDsKKwlpdGVyLT5wcmVmaXggPSB4c3RyZHVwKHByZWZpeCk7CisJaXRlci0+dHJpbSA9IHRyaW07CisKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yOworfQorCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpjdXJyZW50X3JlZl9pdGVyID0gTlVMTDsKKworaW50IGRvX2Zvcl9lYWNoX3JlZl9pdGVyYXRvcihzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyLAorCQkJICAgICBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgcmV0dmFsID0gMCwgb2s7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqb2xkX3JlZl9pdGVyID0gY3VycmVudF9yZWZfaXRlcjsKKworCWN1cnJlbnRfcmVmX2l0ZXIgPSBpdGVyOworCXdoaWxlICgob2sgPSByZWZfaXRlcmF0b3JfYWR2YW5jZShpdGVyKSkgPT0gSVRFUl9PSykgeworCQlyZXR2YWwgPSBmbihpdGVyLT5yZWZuYW1lLCBpdGVyLT5vaWQsIGl0ZXItPmZsYWdzLCBjYl9kYXRhKTsKKwkJaWYgKHJldHZhbCkgeworCQkJLyoKKwkJCSAqIElmIHJlZl9pdGVyYXRvcl9hYm9ydCgpIHJldHVybnMgSVRFUl9FUlJPUiwKKwkJCSAqIHdlIGlnbm9yZSB0aGF0IGVycm9yIGluIGRlZmVyZW5jZSB0byB0aGUKKwkJCSAqIGNhbGxiYWNrIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlLgorCQkJICovCisJCQlyZWZfaXRlcmF0b3JfYWJvcnQoaXRlcik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCWN1cnJlbnRfcmVmX2l0ZXIgPSBvbGRfcmVmX2l0ZXI7CisJaWYgKG9rID09IElURVJfRVJST1IpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvcmVmcy9yZWZzLWludGVybmFsLmggYi9yZWZzL3JlZnMtaW50ZXJuYWwuaAppbmRleCAzYTRmNjM0Li5lZmU1ODQ3IDEwMDY0NAotLS0gYS9yZWZzL3JlZnMtaW50ZXJuYWwuaAorKysgYi9yZWZzL3JlZnMtaW50ZXJuYWwuaApAQCAtMTUsNyArMTUsNyBAQAogCiAvKgogICogVXNlZCBhcyBhIGZsYWcgaW4gcmVmX3VwZGF0ZTo6ZmxhZ3Mgd2hlbiBhIGxvb3NlIHJlZiBpcyBiZWluZwotICogcHJ1bmVkLgorICogcHJ1bmVkLiBUaGlzIGZsYWcgbXVzdCBvbmx5IGJlIHVzZWQgd2hlbiBSRUZfTk9ERVJFRiBpcyBzZXQuCiAgKi8KICNkZWZpbmUgUkVGX0lTUFJVTklORwkweDA0CiAKQEAgLTQzLDYgKzQzLDE5IEBACiAgKi8KIAogLyoKKyAqIFVzZWQgYXMgYSBmbGFnIGluIHJlZl91cGRhdGU6OmZsYWdzIHdoZW4gd2Ugd2FudCB0byBsb2cgYSByZWYKKyAqIHVwZGF0ZSBidXQgbm90IGFjdHVhbGx5IHBlcmZvcm0gaXQuICBUaGlzIGlzIHVzZWQgd2hlbiBhIHN5bWJvbGljCisgKiByZWYgdXBkYXRlIGlzIHNwbGl0IHVwLgorICovCisjZGVmaW5lIFJFRl9MT0dfT05MWSAweDgwCisKKy8qCisgKiBJbnRlcm5hbCBmbGFnLCBtZWFuaW5nIHRoYXQgdGhlIGNvbnRhaW5pbmcgcmVmX3VwZGF0ZSB3YXMgdmlhIGFuCisgKiB1cGRhdGUgdG8gSEVBRC4KKyAqLworI2RlZmluZSBSRUZfVVBEQVRFX1ZJQV9IRUFEIDB4MTAwCisKKy8qCiAgKiBSZXR1cm4gdHJ1ZSBpZmYgcmVmbmFtZSBpcyBtaW5pbWFsbHkgc2FmZS4gIlNhZmUiIGhlcmUgbWVhbnMgdGhhdAogICogZGVsZXRpbmcgYSBsb29zZSByZWZlcmVuY2UgYnkgdGhpcyBuYW1lIHdpbGwgbm90IGRvIGFueSBkYW1hZ2UsIGZvcgogICogZXhhbXBsZSBieSBjYXVzaW5nIGEgZmlsZSB0aGF0IGlzIG5vdCBhIHJlZmVyZW5jZSB0byBiZSBkZWxldGVkLgpAQCAtMTA5LDggKzEyMiw4IEBACiAgKiBleHRyYXMgYW5kIHNraXAgbXVzdCBiZSBzb3J0ZWQuCiAgKi8KIGludCB2ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUoY29uc3QgY2hhciAqbmV3bmFtZSwKLQkJCSAgICAgc3RydWN0IHN0cmluZ19saXN0ICpleHRyYXMsCi0JCQkgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqc2tpcCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpleHRyYXMsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2tpcCwKIAkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKIAogLyoKQEAgLTEzMCwyNyArMTQzLDU5IEBACiAgKiBub3QgZXhpc3QgYmVmb3JlIHVwZGF0ZS4KICAqLwogc3RydWN0IHJlZl91cGRhdGUgeworCiAJLyoKIAkgKiBJZiAoZmxhZ3MgJiBSRUZfSEFWRV9ORVcpLCBzZXQgdGhlIHJlZmVyZW5jZSB0byB0aGlzIHZhbHVlOgogCSAqLwogCXVuc2lnbmVkIGNoYXIgbmV3X3NoYTFbMjBdOworCiAJLyoKIAkgKiBJZiAoZmxhZ3MgJiBSRUZfSEFWRV9PTEQpLCBjaGVjayB0aGF0IHRoZSByZWZlcmVuY2UKIAkgKiBwcmV2aW91c2x5IGhhZCB0aGlzIHZhbHVlOgogCSAqLwogCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCiAJLyoKIAkgKiBPbmUgb3IgbW9yZSBvZiBSRUZfSEFWRV9ORVcsIFJFRl9IQVZFX09MRCwgUkVGX05PREVSRUYsCi0JICogUkVGX0RFTEVUSU5HLCBhbmQgUkVGX0lTUFJVTklORzoKKwkgKiBSRUZfREVMRVRJTkcsIFJFRl9JU1BSVU5JTkcsIFJFRl9MT0dfT05MWSwgYW5kCisJICogUkVGX1VQREFURV9WSUFfSEVBRDoKIAkgKi8KIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKIAlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7Ci0JaW50IHR5cGU7CisJdW5zaWduZWQgaW50IHR5cGU7CiAJY2hhciAqbXNnOworCisJLyoKKwkgKiBJZiB0aGlzIHJlZl91cGRhdGUgd2FzIHNwbGl0IG9mZiBvZiBhIHN5bXJlZiB1cGRhdGUgdmlhCisJICogc3BsaXRfc3ltcmVmX3VwZGF0ZSgpLCB0aGVuIHRoaXMgbWVtYmVyIHBvaW50cyBhdCB0aGF0CisJICogdXBkYXRlLiBUaGlzIGlzIHVzZWQgZm9yIHR3byBwdXJwb3NlczoKKwkgKiAxLiBXaGVuIHJlcG9ydGluZyBlcnJvcnMsIHdlIHJlcG9ydCB0aGUgcmVmbmFtZSB1bmRlciB3aGljaAorCSAqICAgIHRoZSB1cGRhdGUgd2FzIG9yaWdpbmFsbHkgcmVxdWVzdGVkLgorCSAqIDIuIFdoZW4gd2UgcmVhZCB0aGUgb2xkIHZhbHVlIG9mIHRoaXMgcmVmZXJlbmNlLCB3ZQorCSAqICAgIHByb3BhZ2F0ZSBpdCBiYWNrIHRvIGl0cyBwYXJlbnQgdXBkYXRlIGZvciByZWNvcmRpbmcgaW4KKwkgKiAgICB0aGUgbGF0dGVyJ3MgcmVmbG9nLgorCSAqLworCXN0cnVjdCByZWZfdXBkYXRlICpwYXJlbnRfdXBkYXRlOworCiAJY29uc3QgY2hhciByZWZuYW1lW0ZMRVhfQVJSQVldOwogfTsKIAogLyoKKyAqIEFkZCBhIHJlZl91cGRhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMgdG8gdHJhbnNhY3Rpb24sIGFuZAorICogcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3IG9iamVjdC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB2ZXJpZnkKKyAqIHRoYXQgcmVmbmFtZSBpcyB3ZWxsLWZvcm1lZC4gbmV3X3NoYTEgYW5kIG9sZF9zaGExIGFyZSBvbmx5CisgKiBkZXJlZmVyZW5jZWQgaWYgdGhlIFJFRl9IQVZFX05FVyBhbmQgUkVGX0hBVkVfT0xEIGJpdHMsCisgKiByZXNwZWN0aXZlbHksIGFyZSBzZXQgaW4gZmxhZ3MuCisgKi8KK3N0cnVjdCByZWZfdXBkYXRlICpyZWZfdHJhbnNhY3Rpb25fYWRkX3VwZGF0ZSgKKwkJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCWNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGludCBmbGFncywKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCQljb25zdCBjaGFyICptc2cpOworCisvKgogICogVHJhbnNhY3Rpb24gc3RhdGVzLgogICogT1BFTjogICBUaGUgdHJhbnNhY3Rpb24gaXMgaW4gYSB2YWxpZCBzdGF0ZSBhbmQgY2FuIGFjY2VwdCBuZXcgdXBkYXRlcy4KICAqICAgICAgICAgQW4gT1BFTiB0cmFuc2FjdGlvbiBjYW4gYmUgY29tbWl0dGVkLgpAQCAtMjA0LDEyICsyNDksMjcwIEBACiAjZGVmaW5lIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOIDB4MDEKIAogLyoKLSAqIFRoZSBjb21tb24gYmFja2VuZCBmb3IgdGhlIGZvcl9lYWNoXypyZWYqIGZ1bmN0aW9ucworICogUmVmZXJlbmNlIGl0ZXJhdG9ycworICoKKyAqIEEgcmVmZXJlbmNlIGl0ZXJhdG9yIGVuY2Fwc3VsYXRlcyB0aGUgc3RhdGUgb2YgYW4gaW4tcHJvZ3Jlc3MKKyAqIGl0ZXJhdGlvbiBvdmVyIHJlZmVyZW5jZXMuIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBgc3RydWN0CisgKiByZWZfaXRlcmF0b3JgIHZpYSBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZS4KKyAqCisgKiBBIGZyZXNobHktY3JlYXRlZCByZWZfaXRlcmF0b3IgZG9lc24ndCB5ZXQgcG9pbnQgYXQgYSByZWZlcmVuY2UuIFRvCisgKiBhZHZhbmNlIHRoZSBpdGVyYXRvciwgY2FsbCByZWZfaXRlcmF0b3JfYWR2YW5jZSgpLiBJZiBzdWNjZXNzZnVsLAorICogdGhpcyBzZXRzIHRoZSBpdGVyYXRvcidzIHJlZm5hbWUsIG9pZCwgYW5kIGZsYWdzIGZpZWxkcyB0byBkZXNjcmliZQorICogdGhlIG5leHQgcmVmZXJlbmNlIGFuZCByZXR1cm5zIElURVJfT0suIFRoZSBkYXRhIHBvaW50ZWQgYXQgYnkKKyAqIHJlZm5hbWUgYW5kIG9pZCBiZWxvbmcgdG8gdGhlIGl0ZXJhdG9yOyBpZiB5b3Ugd2FudCB0byByZXRhaW4gdGhlbQorICogYWZ0ZXIgY2FsbGluZyByZWZfaXRlcmF0b3JfYWR2YW5jZSgpIGFnYWluIG9yIGNhbGxpbmcKKyAqIHJlZl9pdGVyYXRvcl9hYm9ydCgpLCB5b3UgbXVzdCBtYWtlIGEgY29weS4gV2hlbiB0aGUgaXRlcmF0aW9uIGhhcworICogYmVlbiBleGhhdXN0ZWQsIHJlZl9pdGVyYXRvcl9hZHZhbmNlKCkgcmVsZWFzZXMgYW55IHJlc291cmNlcworICogYXNzb2NhdGVkIHdpdGggdGhlIGl0ZXJhdGlvbiwgZnJlZXMgdGhlIHJlZl9pdGVyYXRvciBvYmplY3QsIGFuZAorICogcmV0dXJucyBJVEVSX0RPTkUuIElmIHlvdSB3YW50IHRvIGFib3J0IHRoZSBpdGVyYXRpb24gZWFybHksIGNhbGwKKyAqIHJlZl9pdGVyYXRvcl9hYm9ydCgpLCB3aGljaCBhbHNvIGZyZWVzIHRoZSByZWZfaXRlcmF0b3Igb2JqZWN0IGFuZAorICogYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBJZiB0aGVyZSB3YXMgYW4gaW50ZXJuYWwgZXJyb3IgYWR2YW5jaW5nCisgKiB0byB0aGUgbmV4dCBlbnRyeSwgcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKSBhYm9ydHMgdGhlIGl0ZXJhdGlvbiwKKyAqIGZyZWVzIHRoZSByZWZfaXRlcmF0b3IsIGFuZCByZXR1cm5zIElURVJfRVJST1IuCisgKgorICogVGhlIHJlZmVyZW5jZSBjdXJyZW50bHkgYmVpbmcgbG9va2VkIGF0IGNhbiBiZSBwZWVsZWQgYnkgY2FsbGluZworICogcmVmX2l0ZXJhdG9yX3BlZWwoKS4gVGhpcyBmdW5jdGlvbiBpcyBvZnRlbiBmYXN0ZXIgdGhhbiBwZWVsX3JlZigpLAorICogc28gaXQgc2hvdWxkIGJlIHByZWZlcnJlZCB3aGVuIGl0ZXJhdGluZyBvdmVyIHJlZmVyZW5jZXMuCisgKgorICogUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIsIGEgdHlwaWNhbCBpdGVyYXRpb24gbG9va3MgbGlrZSB0aGlzOgorICoKKyAqICAgICBpbnQgb2s7CisgKiAgICAgc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlciA9IC4uLjsKKyAqCisgKiAgICAgd2hpbGUgKChvayA9IHJlZl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXIpKSA9PSBJVEVSX09LKSB7CisgKiAgICAgICAgICAgICBpZiAod2FudF90b19zdG9wX2l0ZXJhdGlvbigpKSB7CisgKiAgICAgICAgICAgICAgICAgICAgIG9rID0gcmVmX2l0ZXJhdG9yX2Fib3J0KGl0ZXIpOworICogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAqICAgICAgICAgICAgIH0KKyAqCisgKiAgICAgICAgICAgICAvLyBBY2Nlc3MgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcmVmZXJlbmNlOgorICogICAgICAgICAgICAgaWYgKCEoaXRlci0+ZmxhZ3MgJiBSRUZfSVNTWU1SRUYpKQorICogICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzIGlzICVzXG4iLCBpdGVyLT5yZWZuYW1lLCBvaWRfdG9faGV4KCZpdGVyLT5vaWQpKTsKKyAqCisgKiAgICAgICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBwZWVsIHRoZSByZWZlcmVuY2U6CisgKiAgICAgICAgICAgICByZWZfaXRlcmF0b3JfcGVlbChpdGVyLCAmb2lkKTsKKyAqICAgICB9CisgKgorICogICAgIGlmIChvayAhPSBJVEVSX0RPTkUpCisgKiAgICAgICAgICAgICBoYW5kbGVfZXJyb3IoKTsKICAqLwotaW50IGRvX2Zvcl9lYWNoX3JlZihjb25zdCBjaGFyICpzdWJtb2R1bGUsIGNvbnN0IGNoYXIgKmJhc2UsCi0JCSAgICBlYWNoX3JlZl9mbiBmbiwgaW50IHRyaW0sIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSk7CitzdHJ1Y3QgcmVmX2l0ZXJhdG9yIHsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yX3Z0YWJsZSAqdnRhYmxlOworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CiAKKy8qCisgKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgZmlyc3Qgb3IgbmV4dCBpdGVtIGFuZCByZXR1cm4gSVRFUl9PSy4KKyAqIElmIHRoZSBpdGVyYXRpb24gaXMgZXhoYXVzdGVkLCBmcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgcmVmX2l0ZXJhdG9yIGFuZCByZXR1cm4gSVRFUl9ET05FLiBPbiBlcnJvcnMsIGZyZWUgdGhlIGl0ZXJhdG9yCisgKiByZXNvdXJjZXMgYW5kIHJldHVybiBJVEVSX0VSUk9SLiBJdCBpcyBhIGJ1ZyB0byB1c2UgcmVmX2l0ZXJhdG9yIG9yCisgKiBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4gYWZ0ZXIgaXQgaGFzIHJldHVybmVkIElURVJfRE9ORSBvcgorICogSVRFUl9FUlJPUi4KKyAqLworaW50IHJlZl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcik7CisKKy8qCisgKiBJZiBwb3NzaWJsZSwgcGVlbCB0aGUgcmVmZXJlbmNlIGN1cnJlbnRseSBiZWluZyB2aWV3ZWQgYnkgdGhlCisgKiBpdGVyYXRvci4gUmV0dXJuIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IHJlZl9pdGVyYXRvcl9wZWVsKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkKTsKKworLyoKKyAqIEVuZCB0aGUgaXRlcmF0aW9uIGJlZm9yZSBpdCBoYXMgYmVlbiBleGhhdXN0ZWQsIGZyZWVpbmcgdGhlCisgKiByZWZlcmVuY2UgaXRlcmF0b3IgYW5kIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcyBhbmQgcmV0dXJuaW5nCisgKiBJVEVSX0RPTkUuIElmIHRoZSBhYm9ydCBpdHNlbGYgZmFpbGVkLCByZXR1cm4gSVRFUl9FUlJPUi4KKyAqLworaW50IHJlZl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpOworCisvKgorICogQW4gaXRlcmF0b3Igb3ZlciBub3RoaW5nIChpdHMgZmlyc3QgcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKSBjYWxsCisgKiByZXR1cm5zIElURVJfRE9ORSkuCisgKi8KK3N0cnVjdCByZWZfaXRlcmF0b3IgKmVtcHR5X3JlZl9pdGVyYXRvcl9iZWdpbih2b2lkKTsKKworLyoKKyAqIFJldHVybiB0cnVlIGlmZiByZWZfaXRlcmF0b3IgaXMgYW4gZW1wdHlfcmVmX2l0ZXJhdG9yLgorICovCitpbnQgaXNfZW1wdHlfcmVmX2l0ZXJhdG9yKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcik7CisKKy8qCisgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gaW5zdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yIGhvdyB0bworICogaW50ZXJsZWF2ZSB0aGUgZW50cmllcyBmcm9tIGl0ZXIwIGFuZCBpdGVyMS4gVGhlIGZ1bmN0aW9uIHNob3VsZAorICogcmV0dXJuIG9uZSBvZiB0aGUgY29uc3RhbnRzIGRlZmluZWQgaW4gZW51bSBpdGVyYXRvcl9zZWxlY3Rpb24uIEl0CisgKiBtdXN0IG5vdCBhZHZhbmNlIGVpdGhlciBvZiB0aGUgaXRlcmF0b3JzIGl0c2VsZi4KKyAqCisgKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBwcmVwYXJlZCB0byBoYW5kbGUgdGhlIGNhc2UgdGhhdCBpdGVyMCBhbmQvb3IKKyAqIGl0ZXIxIGlzIE5VTEwsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHN1Yi1pdGVyYXRvcgorICogaGFzIGJlZW4gZXhoYXVzdGVkLiBJdHMgcmV0dXJuIHZhbHVlIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIHRoZQorICogY3VycmVudCBzdGF0ZXMgb2YgdGhlIGl0ZXJhdG9yczsgZS5nLiwgaXQgbXVzdCBub3QgcmV0dXJuCisgKiBJVEVSX1NLSVBfMSBpZiBpdGVyMSBoYXMgYWxyZWFkeSBiZWVuIGV4aGF1c3RlZC4KKyAqLwordHlwZWRlZiBlbnVtIGl0ZXJhdG9yX3NlbGVjdGlvbiByZWZfaXRlcmF0b3Jfc2VsZWN0X2ZuKAorCQlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMCwgc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjEsCisJCXZvaWQgKmNiX2RhdGEpOworCisvKgorICogSXRlcmF0ZSBvdmVyIHRoZSBlbnRyaWVzIGZyb20gaXRlcjAgYW5kIGl0ZXIxLCB3aXRoIHRoZSB2YWx1ZXMKKyAqIGludGVybGVhdmVkIGFzIGRpcmVjdGVkIGJ5IHRoZSBzZWxlY3QgZnVuY3Rpb24uIFRoZSBpdGVyYXRvciB0YWtlcworICogb3duZXJzaGlwIG9mIGl0ZXIwIGFuZCBpdGVyMSBhbmQgZnJlZXMgdGhlbSB3aGVuIHRoZSBpdGVyYXRpb24gaXMKKyAqIG92ZXIuCisgKi8KK3N0cnVjdCByZWZfaXRlcmF0b3IgKm1lcmdlX3JlZl9pdGVyYXRvcl9iZWdpbigKKwkJc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjAsIHN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIxLAorCQlyZWZfaXRlcmF0b3Jfc2VsZWN0X2ZuICpzZWxlY3QsIHZvaWQgKmNiX2RhdGEpOworCisvKgorICogQW4gaXRlcmF0b3IgY29uc2lzdGluZyBvZiB0aGUgdW5pb24gb2YgdGhlIGVudHJpZXMgZnJvbSBmcm9udCBhbmQKKyAqIGJhY2suIElmIHRoZXJlIGFyZSBlbnRyaWVzIGNvbW1vbiB0byB0aGUgdHdvIHN1Yi1pdGVyYXRvcnMsIHVzZSB0aGUKKyAqIG9uZSBmcm9tIGZyb250LiBFYWNoIGl0ZXJhdG9yIG11c3QgaXRlcmF0ZSBvdmVyIGl0cyBlbnRyaWVzIGluCisgKiBzdHJjbXAoKSBvcmRlciBieSByZWZuYW1lIGZvciB0aGlzIHRvIHdvcmsuCisgKgorICogVGhlIG5ldyBpdGVyYXRvciB0YWtlcyBvd25lcnNoaXAgb2YgaXRzIGFyZ3VtZW50cyBhbmQgZnJlZXMgdGhlbQorICogd2hlbiB0aGUgaXRlcmF0aW9uIGlzIG92ZXIuIEFzIGEgY29udmVuaWVuY2UgdG8gY2FsbGVycywgaWYgZnJvbnQKKyAqIG9yIGJhY2sgaXMgYW4gZW1wdHlfcmVmX2l0ZXJhdG9yLCB0aGVuIGFib3J0IHRoYXQgb25lIGltbWVkaWF0ZWx5CisgKiBhbmQgcmV0dXJuIHRoZSBvdGhlciBpdGVyYXRvciBkaXJlY3RseSwgd2l0aG91dCB3cmFwcGluZyBpdC4KKyAqLworc3RydWN0IHJlZl9pdGVyYXRvciAqb3ZlcmxheV9yZWZfaXRlcmF0b3JfYmVnaW4oCisJCXN0cnVjdCByZWZfaXRlcmF0b3IgKmZyb250LCBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpiYWNrKTsKKworLyoKKyAqIFdyYXAgaXRlcjAsIG9ubHkgbGV0dGluZyB0aHJvdWdoIHRoZSByZWZlcmVuY2VzIHdob3NlIG5hbWVzIHN0YXJ0CisgKiB3aXRoIHByZWZpeC4gSWYgdHJpbSBpcyBzZXQsIHNldCBpdGVyLT5yZWZuYW1lIHRvIHRoZSBuYW1lIG9mIHRoZQorICogcmVmZXJlbmNlIHdpdGggdGhhdCBtYW55IGNoYXJhY3RlcnMgdHJpbW1lZCBvZmYgdGhlIGZyb250OworICogb3RoZXJ3aXNlIHNldCBpdCB0byB0aGUgZnVsbCByZWZuYW1lLiBUaGUgbmV3IGl0ZXJhdG9yIHRha2VzIG92ZXIKKyAqIG93bmVyc2hpcCBvZiBpdGVyMCBhbmQgZnJlZXMgaXQgd2hlbiBpdGVyYXRpb24gaXMgb3Zlci4gSXQgbWFrZXMKKyAqIGl0cyBvd24gY29weSBvZiBwcmVmaXguCisgKgorICogQXMgYW4gY29udmVuaWVuY2UgdG8gY2FsbGVycywgaWYgcHJlZml4IGlzIHRoZSBlbXB0eSBzdHJpbmcgYW5kCisgKiB0cmltIGlzIHplcm8sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBpdGVyMCBkaXJlY3RseSwgd2l0aG91dAorICogd3JhcHBpbmcgaXQuCisgKi8KK3N0cnVjdCByZWZfaXRlcmF0b3IgKnByZWZpeF9yZWZfaXRlcmF0b3JfYmVnaW4oc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjAsCisJCQkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCSAgICAgICBpbnQgdHJpbSk7CisKKy8qCisgKiBJdGVyYXRlIG92ZXIgdGhlIHBhY2tlZCBhbmQgbG9vc2UgcmVmZXJlbmNlcyBpbiB0aGUgc3BlY2lmaWVkCisgKiBzdWJtb2R1bGUgdGhhdCBhcmUgd2l0aGluIGZpbmRfY29udGFpbmluZ19kaXIocHJlZml4KS4gSWYgcHJlZml4IGlzCisgKiBOVUxMIG9yIHRoZSBlbXB0eSBzdHJpbmcsIGl0ZXJhdGUgb3ZlciBhbGwgcmVmZXJlbmNlcyBpbiB0aGUKKyAqIHN1Ym1vZHVsZS4KKyAqLworc3RydWN0IHJlZl9pdGVyYXRvciAqZmlsZXNfcmVmX2l0ZXJhdG9yX2JlZ2luKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisvKgorICogSXRlcmF0ZSBvdmVyIHRoZSByZWZlcmVuY2VzIGluIHRoZSBtYWluIHJlZl9zdG9yZSB0aGF0IGhhdmUgYQorICogcmVmbG9nLiBUaGUgcGF0aHMgd2l0aGluIGEgZGlyZWN0b3J5IGFyZSBpdGVyYXRlZCBvdmVyIGluIGFyYml0cmFyeQorICogb3JkZXIuCisgKi8KK3N0cnVjdCByZWZfaXRlcmF0b3IgKmZpbGVzX3JlZmxvZ19pdGVyYXRvcl9iZWdpbih2b2lkKTsKKworLyogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgcmVmZXJlbmNlIGl0ZXJhdGlvbjogKi8KKworLyoKKyAqIEJhc2UgY2xhc3MgY29uc3RydWN0b3IgZm9yIHJlZl9pdGVyYXRvcnMuIEluaXRpYWxpemUgdGhlCisgKiByZWZfaXRlcmF0b3IgcGFydCBvZiBpdGVyLCBzZXR0aW5nIGl0cyB2dGFibGUgcG9pbnRlciBhcyBzcGVjaWZpZWQuCisgKiBUaGlzIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBvbmx5IGJ5IHRoZSBpbml0aWFsaXplcnMgb2YgZGVyaXZlZAorICogY2xhc3Nlcy4KKyAqLwordm9pZCBiYXNlX3JlZl9pdGVyYXRvcl9pbml0KHN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIsCisJCQkgICAgc3RydWN0IHJlZl9pdGVyYXRvcl92dGFibGUgKnZ0YWJsZSk7CisKKy8qCisgKiBCYXNlIGNsYXNzIGRlc3RydWN0b3IgZm9yIHJlZl9pdGVyYXRvcnMuIERlc3Ryb3kgdGhlIHJlZl9pdGVyYXRvcgorICogcGFydCBvZiBpdGVyIGFuZCBzaGFsbG93LWZyZWUgdGhlIG9iamVjdC4gVGhpcyBpcyBtZWFudCB0byBiZQorICogY2FsbGVkIG9ubHkgYnkgdGhlIGRlc3RydWN0b3JzIG9mIGRlcml2ZWQgY2xhc3Nlcy4KKyAqLwordm9pZCBiYXNlX3JlZl9pdGVyYXRvcl9mcmVlKHN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIpOworCisvKiBWaXJ0dWFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IgcmVmX2l0ZXJhdG9yczogKi8KKwordHlwZWRlZiBpbnQgcmVmX2l0ZXJhdG9yX2FkdmFuY2VfZm4oc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKTsKKwordHlwZWRlZiBpbnQgcmVmX2l0ZXJhdG9yX3BlZWxfZm4oc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yLAorCQkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpOworCisvKgorICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGZyZWUgYW55IHJlc291cmNlcyBzcGVjaWZpYworICogdG8gdGhlIGRlcml2ZWQgY2xhc3MsIHRoZW4gY2FsbCBiYXNlX3JlZl9pdGVyYXRvcl9mcmVlKCkgdG8gY2xlYW4KKyAqIHVwIGFuZCBmcmVlIHRoZSByZWZfaXRlcmF0b3Igb2JqZWN0LgorICovCit0eXBlZGVmIGludCByZWZfaXRlcmF0b3JfYWJvcnRfZm4oc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKTsKKworc3RydWN0IHJlZl9pdGVyYXRvcl92dGFibGUgeworCXJlZl9pdGVyYXRvcl9hZHZhbmNlX2ZuICphZHZhbmNlOworCXJlZl9pdGVyYXRvcl9wZWVsX2ZuICpwZWVsOworCXJlZl9pdGVyYXRvcl9hYm9ydF9mbiAqYWJvcnQ7Cit9OworCisvKgorICogY3VycmVudF9yZWZfaXRlciBpcyBhIHBlcmZvcm1hbmNlIGhhY2s6IHdoZW4gaXRlcmF0aW5nIG92ZXIKKyAqIHJlZmVyZW5jZXMgdXNpbmcgdGhlIGZvcl9lYWNoX3JlZiooKSBmdW5jdGlvbnMsIGN1cnJlbnRfcmVmX2l0ZXIgaXMKKyAqIHNldCB0byB0aGUgcmVmZXJlbmNlIGl0ZXJhdG9yIGJlZm9yZSBjYWxsaW5nIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKyAqIElmIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYWxscyBwZWVsX3JlZigpLCB0aGVuIHBlZWxfcmVmKCkgZmlyc3QKKyAqIGNoZWNrcyB3aGV0aGVyIHRoZSByZWZlcmVuY2UgdG8gYmUgcGVlbGVkIGlzIHRoZSBvbmUgcmVmZXJyZWQgdG8gYnkKKyAqIHRoZSBpdGVyYXRvciAoaXQgdXN1YWxseSBpcykgYW5kIGlmIHNvLCBhc2tzIHRoZSBpdGVyYXRvciBmb3IgdGhlCisgKiBwZWVsZWQgdmVyc2lvbiBvZiB0aGUgcmVmZXJlbmNlIGlmIGl0IGlzIGF2YWlsYWJsZS4gVGhpcyBhdm9pZHMgYQorICogcmVmbmFtZSBsb29rdXAgaW4gYSBjb21tb24gY2FzZS4gY3VycmVudF9yZWZfaXRlciBpcyBzZXQgdG8gTlVMTAorICogd2hlbiB0aGUgaXRlcmF0aW9uIGlzIG92ZXIuCisgKi8KK2V4dGVybiBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpjdXJyZW50X3JlZl9pdGVyOworCisvKgorICogVGhlIGNvbW1vbiBiYWNrZW5kIGZvciB0aGUgZm9yX2VhY2hfKnJlZiogZnVuY3Rpb25zLiBDYWxsIGZuIGZvcgorICogZWFjaCByZWZlcmVuY2UgaW4gaXRlci4gSWYgdGhlIGl0ZXJhdG9yIGl0c2VsZiBldmVyIHJldHVybnMKKyAqIElURVJfRVJST1IsIHJldHVybiAtMS4gSWYgZm4gZXZlciByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUsIHN0b3AKKyAqIHRoZSBpdGVyYXRpb24gYW5kIHJldHVybiB0aGF0IHZhbHVlLiBPdGhlcndpc2UsIHJldHVybiAwLiBJbiBhbnkKKyAqIGNhc2UsIGZyZWUgdGhlIGl0ZXJhdG9yIHdoZW4gZG9uZS4gVGhpcyBmdW5jdGlvbiBpcyBiYXNpY2FsbHkgYW4KKyAqIGFkYXB0ZXIgYmV0d2VlbiB0aGUgY2FsbGJhY2sgc3R5bGUgb2YgcmVmZXJlbmNlIGl0ZXJhdGlvbiBhbmQgdGhlCisgKiBpdGVyYXRvciBzdHlsZS4KKyAqLworaW50IGRvX2Zvcl9lYWNoX3JlZl9pdGVyYXRvcihzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyLAorCQkJICAgICBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBSZWFkIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIGZyb20gdGhlIGZpbGVzeXN0ZW0gb3IgcGFja2VkIHJlZnMKKyAqIGZpbGUsIG5vbi1yZWN1cnNpdmVseS4gU2V0IHR5cGUgdG8gZGVzY3JpYmUgdGhlIHJlZmVyZW5jZSwgYW5kOgorICoKKyAqIC0gSWYgcmVmbmFtZSBpcyB0aGUgbmFtZSBvZiBhIG5vcm1hbCByZWZlcmVuY2UsIGZpbGwgaW4gc2hhMQorICogICAobGVhdmluZyByZWZlcmVudCB1bmNoYW5nZWQpLgorICoKKyAqIC0gSWYgcmVmbmFtZSBpcyB0aGUgbmFtZSBvZiBhIHN5bWJvbGljIHJlZmVyZW5jZSwgd3JpdGUgdGhlIGZ1bGwKKyAqICAgbmFtZSBvZiB0aGUgcmVmZXJlbmNlIHRvIHdoaWNoIGl0IHJlZmVycyAoZS5nLgorICogICAicmVmcy9oZWFkcy9tYXN0ZXIiKSB0byByZWZlcmVudCBhbmQgc2V0IHRoZSBSRUZfSVNTWU1SRUYgYml0IGluCisgKiAgIHR5cGUgKGxlYXZpbmcgc2hhMSB1bmNoYW5nZWQpLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICogICB2YWxpZGF0aW5nIHRoYXQgcmVmZXJlbnQgaXMgYSB2YWxpZCByZWZlcmVuY2UgbmFtZS4KKyAqCisgKiBXQVJOSU5HOiByZWZuYW1lIG1pZ2h0IGJlIHVzZWQgYXMgcGFydCBvZiBhIGZpbGVuYW1lLCBzbyBpdCBpcworICogaW1wb3J0YW50IGZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50IHRoYXQgaXQgYmUgc2FmZSBpbiB0aGUgc2Vuc2UKKyAqIG9mIHJlZm5hbWVfaXNfc2FmZSgpLiBNb3Jlb3ZlciwgZm9yIHN5bXJlZnMgdGhpcyBmdW5jdGlvbiBzZXRzCisgKiByZWZlcmVudCB0byB3aGF0ZXZlciB0aGUgcmVwb3NpdG9yeSBzYXlzLCB3aGljaCBtaWdodCBub3QgYmUgYQorICogcHJvcGVybHktZm9ybWF0dGVkIG9yIGV2ZW4gc2FmZSByZWZlcmVuY2UgbmFtZS4gTkVJVEhFUiBJTlBVVCBOT1IKKyAqIE9VVFBVVCBSRUZFUkVOQ0UgTkFNRVMgQVJFIFZBTElEQVRFRCBXSVRISU4gVEhJUyBGVU5DVElPTi4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLiBJZiB0aGUgcmVmIGRvZXNuJ3QgZXhpc3QsIHNldCBlcnJubyB0byBFTk9FTlQKKyAqIGFuZCByZXR1cm4gLTEuIElmIHRoZSByZWYgZXhpc3RzIGJ1dCBpcyBuZWl0aGVyIGEgc3ltYm9saWMgcmVmIG5vcgorICogYSBzaGExLCBpdCBpcyBicm9rZW47IHNldCBSRUZfSVNCUk9LRU4gaW4gdHlwZSwgc2V0IGVycm5vIHRvCisgKiBFSU5WQUwsIGFuZCByZXR1cm4gLTEuIElmIHRoZXJlIGlzIGFub3RoZXIgZXJyb3IgcmVhZGluZyB0aGUgcmVmLAorICogc2V0IGVycm5vIGFwcHJvcHJpYXRlbHkgYW5kIHJldHVybiAtMS4KKyAqCisgKiBCYWNrZW5kLXNwZWNpZmljIGZsYWdzIG1pZ2h0IGJlIHNldCBpbiB0eXBlIGFzIHdlbGwsIHJlZ2FyZGxlc3Mgb2YKKyAqIG91dGNvbWUuCisgKgorICogSXQgaXMgT0sgZm9yIHJlZm5hbWUgdG8gcG9pbnQgaW50byByZWZlcmVudC4gSWYgc286CisgKgorICogLSBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMgd2l0aCBSRUZfSVNTWU1SRUYsIHJlZmVyZW50IHdpbGwgYmUKKyAqICAgb3ZlcndyaXR0ZW4gYW5kIHRoZSBtZW1vcnkgZm9ybWVybHkgcG9pbnRlZCB0byBieSBpdCBtaWdodCBiZQorICogICBjaGFuZ2VkIG9yIGV2ZW4gZnJlZWQuCisgKgorICogLSBpbiBhbGwgb3RoZXIgY2FzZXMsIHJlZmVyZW50IHdpbGwgYmUgdW50b3VjaGVkLCBhbmQgdGhlcmVmb3JlCisgKiAgIHJlZm5hbWUgd2lsbCBzdGlsbCBiZSB2YWxpZCBhbmQgdW5jaGFuZ2VkLgorICovCiBpbnQgcmVhZF9yYXdfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCSBzdHJ1Y3Qgc3RyYnVmICpzeW1yZWYsIHVuc2lnbmVkIGludCAqZmxhZ3MpOworCQkgc3RydWN0IHN0cmJ1ZiAqcmVmZXJlbnQsIHVuc2lnbmVkIGludCAqdHlwZSk7CiAKICNlbmRpZiAvKiBSRUZTX1JFRlNfSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvcmVtb3RlLWN1cmwuYyBiL3JlbW90ZS1jdXJsLmMKaW5kZXggNjcyYjM4Mi4uNmI4M2I3NyAxMDA2NDQKLS0tIGEvcmVtb3RlLWN1cmwuYworKysgYi9yZW1vdGUtY3VybC5jCkBAIC05ODQsMTQgKzk4NCwxMSBAQAogCWZyZWUoc3BlY3MpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJaW50IG5vbmdpdDsKIAotCWdpdF9zZXR1cF9nZXR0ZXh0KCk7Ci0KLQlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOwogCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOwogCWlmIChhcmdjIDwgMikgewogCQllcnJvcigicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIpOwpkaWZmIC0tZ2l0IGEvcmVtb3RlLXRlc3Rzdm4uYyBiL3JlbW90ZS10ZXN0c3ZuLmMKaW5kZXggZjA1ZmY0NS4uZjg3YmY4NSAxMDA2NDQKLS0tIGEvcmVtb3RlLXRlc3Rzdm4uYworKysgYi9yZW1vdGUtdGVzdHN2bi5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCB1cmxfc2IgPSBTVFJCVUZfSU5JVCwKIAkJCXByaXZhdGVfcmVmX3NiID0gU1RSQlVGX0lOSVQsIG1hcmtzZmlsZW5hbWVfc2IgPSBTVFJCVUZfSU5JVCwKQEAgLTI5Miw3ICsyOTIsNiBAQAogCXN0YXRpYyBzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CiAJY29uc3QgY2hhciAqdXJsX2luOwogCi0JZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKIAlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAJaWYgKGFyZ2MgPCAyIHx8IGFyZ2MgPiAzKSB7CiAJCXVzYWdlKCJnaXQtcmVtb3RlLXN2biA8cmVtb3RlLW5hbWU+IFs8dXJsPl0iKTsKZGlmZiAtLWdpdCBhL3JlbW90ZS5jIGIvcmVtb3RlLmMKaW5kZXggYTMyNmU0ZS4uZDI5ODUwYSAxMDA2NDQKLS0tIGEvcmVtb3RlLmMKKysrIGIvcmVtb3RlLmMKQEAgLTE1NDQsOCArMTU0NCw3IEBACiAJCSAqIGJyYW5jaC4KIAkJICovCiAJCWlmIChyZWYtPmV4cGVjdF9vbGRfc2hhMSkgewotCQkJaWYgKHJlZi0+ZXhwZWN0X29sZF9ub190cmFja2JhY2sgfHwKLQkJCSAgICBvaWRjbXAoJnJlZi0+b2xkX29pZCwgJnJlZi0+b2xkX29pZF9leHBlY3QpKQorCQkJaWYgKG9pZGNtcCgmcmVmLT5vbGRfb2lkLCAmcmVmLT5vbGRfb2lkX2V4cGVjdCkpCiAJCQkJcmVqZWN0X3JlYXNvbiA9IFJFRl9TVEFUVVNfUkVKRUNUX1NUQUxFOwogCQkJZWxzZQogCQkJCS8qIElmIHRoZSByZWYgaXNuJ3Qgc3RhbGUgdGhlbiBmb3JjZSB0aGUgdXBkYXRlLiAqLwpAQCAtMjI5NCw2ICsyMjkzLDggQEAKIAllbnRyeSA9IGFkZF9jYXNfZW50cnkoY2FzLCBhcmcsIGNvbG9uIC0gYXJnKTsKIAlpZiAoISpjb2xvbikKIAkJZW50cnktPnVzZV90cmFja2luZyA9IDE7CisJZWxzZSBpZiAoIWNvbG9uWzFdKQorCQloYXNoY2xyKGVudHJ5LT5leHBlY3QpOwogCWVsc2UgaWYgKGdldF9zaGExKGNvbG9uICsgMSwgZW50cnktPmV4cGVjdCkpCiAJCXJldHVybiBlcnJvcigiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciLCBjb2xvbiArIDEpOwogCXJldHVybiAwOwpAQCAtMjM0Myw3ICsyMzQ0LDcgQEAKIAkJaWYgKCFlbnRyeS0+dXNlX3RyYWNraW5nKQogCQkJaGFzaGNweShyZWYtPm9sZF9vaWRfZXhwZWN0Lmhhc2gsIGNhcy0+ZW50cnlbaV0uZXhwZWN0KTsKIAkJZWxzZSBpZiAocmVtb3RlX3RyYWNraW5nKHJlbW90ZSwgcmVmLT5uYW1lLCAmcmVmLT5vbGRfb2lkX2V4cGVjdCkpCi0JCQlyZWYtPmV4cGVjdF9vbGRfbm9fdHJhY2tiYWNrID0gMTsKKwkJCW9pZGNscigmcmVmLT5vbGRfb2lkX2V4cGVjdCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIzNTMsNyArMjM1NCw3IEBACiAKIAlyZWYtPmV4cGVjdF9vbGRfc2hhMSA9IDE7CiAJaWYgKHJlbW90ZV90cmFja2luZyhyZW1vdGUsIHJlZi0+bmFtZSwgJnJlZi0+b2xkX29pZF9leHBlY3QpKQotCQlyZWYtPmV4cGVjdF9vbGRfbm9fdHJhY2tiYWNrID0gMTsKKwkJb2lkY2xyKCZyZWYtPm9sZF9vaWRfZXhwZWN0KTsKIH0KIAogdm9pZCBhcHBseV9wdXNoX2NhcyhzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICpjYXMsCmRpZmYgLS1naXQgYS9yZW1vdGUuaCBiL3JlbW90ZS5oCmluZGV4IGMyMWZkMzcuLjkyNDg4MTEgMTAwNjQ0Ci0tLSBhL3JlbW90ZS5oCisrKyBiL3JlbW90ZS5oCkBAIC04OSw3ICs4OSw2IEBACiAJCWZvcmNlOjEsCiAJCWZvcmNlZF91cGRhdGU6MSwKIAkJZXhwZWN0X29sZF9zaGExOjEsCi0JCWV4cGVjdF9vbGRfbm9fdHJhY2tiYWNrOjEsCiAJCWRlbGV0aW9uOjEsCiAJCW1hdGNoZWQ6MTsKIApkaWZmIC0tZ2l0IGEvcmV2aXNpb24uYyBiL3JldmlzaW9uLmMKaW5kZXggMjMzZWM3Mi4uOGEyOWNiMCAxMDA2NDQKLS0tIGEvcmV2aXNpb24uYworKysgYi9yZXZpc2lvbi5jCkBAIC0xNDEzLDcgKzE0MTMsNyBAQAogCQkgICAgICAgY2Vfc2FtZV9uYW1lKGNlLCBhY3RpdmVfY2FjaGVbaSsxXSkpCiAJCQlpKys7CiAJfQotCWZyZWVfcGF0aHNwZWMoJnJldnMtPnBydW5lX2RhdGEpOworCWNsZWFyX3BhdGhzcGVjKCZyZXZzLT5wcnVuZV9kYXRhKTsKIAlwYXJzZV9wYXRoc3BlYygmcmV2cy0+cHJ1bmVfZGF0YSwgUEFUSFNQRUNfQUxMX01BR0lDICYgflBBVEhTUEVDX0xJVEVSQUwsCiAJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCB8IFBBVEhTUEVDX0xJVEVSQUxfUEFUSCwgIiIsIHBydW5lKTsKIAlyZXZzLT5saW1pdGVkID0gMTsKQEAgLTE4NTksNiArMTg1OSw4IEBACiAJCXJldnMtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA9IDE7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1zaWduYXR1cmUiKSkgewogCQlyZXZzLT5zaG93X3NpZ25hdHVyZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tc2hvdy1zaWduYXR1cmUiKSkgeworCQlyZXZzLT5zaG93X3NpZ25hdHVyZSA9IDA7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1saW5lYXItYnJlYWsiKSB8fAogCQkgICBzdGFydHNfd2l0aChhcmcsICItLXNob3ctbGluZWFyLWJyZWFrPSIpKSB7CiAJCWlmIChzdGFydHNfd2l0aChhcmcsICItLXNob3ctbGluZWFyLWJyZWFrPSIpKQpAQCAtMTk1OSwxNiArMTk2MSwxNiBAQAogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWdyZXAtZGVidWciKSkgewogCQlyZXZzLT5ncmVwX2ZpbHRlci5kZWJ1ZyA9IDE7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYmFzaWMtcmVnZXhwIikpIHsKLQkJZ3JlcF9zZXRfcGF0dGVybl90eXBlX29wdGlvbihHUkVQX1BBVFRFUk5fVFlQRV9CUkUsICZyZXZzLT5ncmVwX2ZpbHRlcik7CisJCXJldnMtPmdyZXBfZmlsdGVyLnBhdHRlcm5fdHlwZV9vcHRpb24gPSBHUkVQX1BBVFRFUk5fVFlQRV9CUkU7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZXh0ZW5kZWQtcmVnZXhwIikgfHwgIXN0cmNtcChhcmcsICItRSIpKSB7Ci0JCWdyZXBfc2V0X3BhdHRlcm5fdHlwZV9vcHRpb24oR1JFUF9QQVRURVJOX1RZUEVfRVJFLCAmcmV2cy0+Z3JlcF9maWx0ZXIpOworCQlyZXZzLT5ncmVwX2ZpbHRlci5wYXR0ZXJuX3R5cGVfb3B0aW9uID0gR1JFUF9QQVRURVJOX1RZUEVfRVJFOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlZ2V4cC1pZ25vcmUtY2FzZSIpIHx8ICFzdHJjbXAoYXJnLCAiLWkiKSkgewogCQlyZXZzLT5ncmVwX2ZpbHRlci5yZWdmbGFncyB8PSBSRUdfSUNBU0U7CiAJCURJRkZfT1BUX1NFVCgmcmV2cy0+ZGlmZm9wdCwgUElDS0FYRV9JR05PUkVfQ0FTRSk7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZml4ZWQtc3RyaW5ncyIpIHx8ICFzdHJjbXAoYXJnLCAiLUYiKSkgewotCQlncmVwX3NldF9wYXR0ZXJuX3R5cGVfb3B0aW9uKEdSRVBfUEFUVEVSTl9UWVBFX0ZJWEVELCAmcmV2cy0+Z3JlcF9maWx0ZXIpOworCQlyZXZzLT5ncmVwX2ZpbHRlci5wYXR0ZXJuX3R5cGVfb3B0aW9uID0gR1JFUF9QQVRURVJOX1RZUEVfRklYRUQ7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcGVybC1yZWdleHAiKSkgewotCQlncmVwX3NldF9wYXR0ZXJuX3R5cGVfb3B0aW9uKEdSRVBfUEFUVEVSTl9UWVBFX1BDUkUsICZyZXZzLT5ncmVwX2ZpbHRlcik7CisJCXJldnMtPmdyZXBfZmlsdGVyLnBhdHRlcm5fdHlwZV9vcHRpb24gPSBHUkVQX1BBVFRFUk5fVFlQRV9QQ1JFOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFsbC1tYXRjaCIpKSB7CiAJCXJldnMtPmdyZXBfZmlsdGVyLmFsbF9tYXRjaCA9IDE7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0taW52ZXJ0LWdyZXAiKSkgewpkaWZmIC0tZ2l0IGEvcnVuLWNvbW1hbmQuYyBiL3J1bi1jb21tYW5kLmMKaW5kZXggYWYwYzhhMS4uMzNiYzYzYSAxMDA2NDQKLS0tIGEvcnVuLWNvbW1hbmQuYworKysgYi9ydW4tY29tbWFuZC5jCkBAIC04NjQsMTkgKzg2NCwxNjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgY2FwdHVyZV9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQsIHN0cnVjdCBzdHJidWYgKmJ1Ziwgc2l6ZV90IGhpbnQpCitzdHJ1Y3QgaW9fcHVtcCB7CisJLyogaW5pdGlhbGl6ZWQgYnkgY2FsbGVyICovCisJaW50IGZkOworCWludCB0eXBlOyAvKiBQT0xMT1VUIG9yIFBPTExJTiAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWNvbnN0IGNoYXIgKmJ1ZjsKKwkJCXNpemVfdCBsZW47CisJCX0gb3V0OworCQlzdHJ1Y3QgeworCQkJc3RydWN0IHN0cmJ1ZiAqYnVmOworCQkJc2l6ZV90IGhpbnQ7CisJCX0gaW47CisJfSB1OworCisJLyogcmV0dXJuZWQgYnkgcHVtcF9pbyAqLworCWludCBlcnJvcjsgLyogMCBmb3Igc3VjY2Vzcywgb3RoZXJ3aXNlIGVycm5vICovCisKKwkvKiBpbnRlcm5hbCB1c2UgKi8KKwlzdHJ1Y3QgcG9sbGZkICpwZmQ7Cit9OworCitzdGF0aWMgaW50IHB1bXBfaW9fcm91bmQoc3RydWN0IGlvX3B1bXAgKnNsb3RzLCBpbnQgbnIsIHN0cnVjdCBwb2xsZmQgKnBmZCkKIHsKLQljbWQtPm91dCA9IC0xOworCWludCBwb2xsc2l6ZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlzdHJ1Y3QgaW9fcHVtcCAqaW8gPSAmc2xvdHNbaV07CisJCWlmIChpby0+ZmQgPCAwKQorCQkJY29udGludWU7CisJCXBmZFtwb2xsc2l6ZV0uZmQgPSBpby0+ZmQ7CisJCXBmZFtwb2xsc2l6ZV0uZXZlbnRzID0gaW8tPnR5cGU7CisJCWlvLT5wZmQgPSAmcGZkW3BvbGxzaXplKytdOworCX0KKworCWlmICghcG9sbHNpemUpCisJCXJldHVybiAwOworCisJaWYgKHBvbGwocGZkLCBwb2xsc2l6ZSwgLTEpIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQlyZXR1cm4gMTsKKwkJZGllX2Vycm5vKCJwb2xsIGZhaWxlZCIpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXN0cnVjdCBpb19wdW1wICppbyA9ICZzbG90c1tpXTsKKworCQlpZiAoaW8tPmZkIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghKGlvLT5wZmQtPnJldmVudHMgJiAoUE9MTE9VVHxQT0xMSU58UE9MTEhVUHxQT0xMRVJSfFBPTExOVkFMKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoaW8tPnR5cGUgPT0gUE9MTE9VVCkgeworCQkJc3NpemVfdCBsZW4gPSB4d3JpdGUoaW8tPmZkLAorCQkJCQkgICAgIGlvLT51Lm91dC5idWYsIGlvLT51Lm91dC5sZW4pOworCQkJaWYgKGxlbiA8IDApIHsKKwkJCQlpby0+ZXJyb3IgPSBlcnJubzsKKwkJCQljbG9zZShpby0+ZmQpOworCQkJCWlvLT5mZCA9IC0xOworCQkJfSBlbHNlIHsKKwkJCQlpby0+dS5vdXQuYnVmICs9IGxlbjsKKwkJCQlpby0+dS5vdXQubGVuIC09IGxlbjsKKwkJCQlpZiAoIWlvLT51Lm91dC5sZW4pIHsKKwkJCQkJY2xvc2UoaW8tPmZkKTsKKwkJCQkJaW8tPmZkID0gLTE7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGlvLT50eXBlID09IFBPTExJTikgeworCQkJc3NpemVfdCBsZW4gPSBzdHJidWZfcmVhZF9vbmNlKGlvLT51LmluLmJ1ZiwKKwkJCQkJCSAgICAgICBpby0+ZmQsIGlvLT51LmluLmhpbnQpOworCQkJaWYgKGxlbiA8IDApCisJCQkJaW8tPmVycm9yID0gZXJybm87CisJCQlpZiAobGVuIDw9IDApIHsKKwkJCQljbG9zZShpby0+ZmQpOworCQkJCWlvLT5mZCA9IC0xOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcHVtcF9pbyhzdHJ1Y3QgaW9fcHVtcCAqc2xvdHMsIGludCBucikKK3sKKwlzdHJ1Y3QgcG9sbGZkICpwZmQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJc2xvdHNbaV0uZXJyb3IgPSAwOworCisJQUxMT0NfQVJSQVkocGZkLCBucik7CisJd2hpbGUgKHB1bXBfaW9fcm91bmQoc2xvdHMsIG5yLCBwZmQpKQorCQk7IC8qIG5vdGhpbmcgKi8KKwlmcmVlKHBmZCk7CisKKwkvKiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgZXJybm8gdmFsdWVzLCBzbyBqdXN0IHBpY2sgdGhlIGZpcnN0LiAqLworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCWlmIChzbG90c1tpXS5lcnJvcikgeworCQkJZXJybm8gPSBzbG90c1tpXS5lcnJvcjsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworCitpbnQgcGlwZV9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQsCisJCSBjb25zdCBjaGFyICppbiwgc2l6ZV90IGluX2xlbiwKKwkJIHN0cnVjdCBzdHJidWYgKm91dCwgc2l6ZV90IG91dF9oaW50LAorCQkgc3RydWN0IHN0cmJ1ZiAqZXJyLCBzaXplX3QgZXJyX2hpbnQpCit7CisJc3RydWN0IGlvX3B1bXAgaW9bM107CisJaW50IG5yID0gMDsKKworCWlmIChpbikKKwkJY21kLT5pbiA9IC0xOworCWlmIChvdXQpCisJCWNtZC0+b3V0ID0gLTE7CisJaWYgKGVycikKKwkJY21kLT5lcnIgPSAtMTsKKwogCWlmIChzdGFydF9jb21tYW5kKGNtZCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoc3RyYnVmX3JlYWQoYnVmLCBjbWQtPm91dCwgaGludCkgPCAwKSB7Ci0JCWNsb3NlKGNtZC0+b3V0KTsKKwlpZiAoaW4pIHsKKwkJaW9bbnJdLmZkID0gY21kLT5pbjsKKwkJaW9bbnJdLnR5cGUgPSBQT0xMT1VUOworCQlpb1tucl0udS5vdXQuYnVmID0gaW47CisJCWlvW25yXS51Lm91dC5sZW4gPSBpbl9sZW47CisJCW5yKys7CisJfQorCWlmIChvdXQpIHsKKwkJaW9bbnJdLmZkID0gY21kLT5vdXQ7CisJCWlvW25yXS50eXBlID0gUE9MTElOOworCQlpb1tucl0udS5pbi5idWYgPSBvdXQ7CisJCWlvW25yXS51LmluLmhpbnQgPSBvdXRfaGludDsKKwkJbnIrKzsKKwl9CisJaWYgKGVycikgeworCQlpb1tucl0uZmQgPSBjbWQtPmVycjsKKwkJaW9bbnJdLnR5cGUgPSBQT0xMSU47CisJCWlvW25yXS51LmluLmJ1ZiA9IGVycjsKKwkJaW9bbnJdLnUuaW4uaGludCA9IGVycl9oaW50OworCQlucisrOworCX0KKworCWlmIChwdW1wX2lvKGlvLCBucikgPCAwKSB7CiAJCWZpbmlzaF9jb21tYW5kKGNtZCk7IC8qIHRocm93IGF3YXkgZXhpdCBjb2RlICovCiAJCXJldHVybiAtMTsKIAl9CiAKLQljbG9zZShjbWQtPm91dCk7CiAJcmV0dXJuIGZpbmlzaF9jb21tYW5kKGNtZCk7CiB9CiAKZGlmZiAtLWdpdCBhL3J1bi1jb21tYW5kLmggYi9ydW4tY29tbWFuZC5oCmluZGV4IDExZjc2YjAuLjUwNjY2NDkgMTAwNjQ0Ci0tLSBhL3J1bi1jb21tYW5kLmgKKysrIGIvcnVuLWNvbW1hbmQuaApAQCAtNzksMTcgKzc5LDM0IEBACiBpbnQgcnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52KGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgb3B0LCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpOwogCiAvKioKLSAqIEV4ZWN1dGUgdGhlIGdpdmVuIGNvbW1hbmQsIGNhcHR1cmluZyBpdHMgc3Rkb3V0IGluIHRoZSBnaXZlbiBzdHJidWYuCisgKiBFeGVjdXRlIHRoZSBnaXZlbiBjb21tYW5kLCBzZW5kaW5nICJpbiIgdG8gaXRzIHN0ZGluLCBhbmQgY2FwdHVyaW5nIGl0cworICogc3Rkb3V0IGFuZCBzdGRlcnIgaW4gdGhlICJvdXQiIGFuZCAiZXJyIiBzdHJidWZzLiBBbnkgb2YgdGhlIHRocmVlIG1heQorICogYmUgTlVMTCB0byBza2lwIHByb2Nlc3NpbmcuCisgKgogICogUmV0dXJucyAtMSBpZiBzdGFydGluZyB0aGUgY29tbWFuZCBmYWlscyBvciByZWFkaW5nIGZhaWxzLCBhbmQgb3RoZXJ3aXNlCi0gKiByZXR1cm5zIHRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuIFRoZSBvdXRwdXQgY29sbGVjdGVkIGluIHRoZQotICogYnVmZmVyIGlzIGtlcHQgZXZlbiBpZiB0aGUgY29tbWFuZCByZXR1cm5zIGEgbm9uLXplcm8gZXhpdC4gVGhlIGhpbnQgZmllbGQKLSAqIGdpdmVzIGEgc3RhcnRpbmcgc2l6ZSBmb3IgdGhlIHN0cmJ1ZiBhbGxvY2F0aW9uLgorICogcmV0dXJucyB0aGUgZXhpdCBjb2RlIG9mIHRoZSBjb21tYW5kLiBBbnkgb3V0cHV0IGNvbGxlY3RlZCBpbiB0aGUKKyAqIGJ1ZmZlcnMgaXMga2VwdCBldmVuIGlmIHRoZSBjb21tYW5kIHJldHVybnMgYSBub24temVybyBleGl0LiBUaGUgaGludCBmaWVsZHMKKyAqIGdpdmVzIHN0YXJ0aW5nIHNpemVzIGZvciB0aGUgc3RyYnVmIGFsbG9jYXRpb25zLgogICoKICAqIFRoZSBmaWVsZHMgb2YgImNtZCIgc2hvdWxkIGJlIHNldCB1cCBhcyB0aGV5IHdvdWxkIGZvciBhIG5vcm1hbCBydW5fY29tbWFuZAotICogaW52b2NhdGlvbi4gQnV0IG5vdGUgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIHNldCBjbWQtPm91dDsgdGhlIGZ1bmN0aW9uCi0gKiBzZXRzIGl0IHVwIGZvciB0aGUgY2FsbGVyLgorICogaW52b2NhdGlvbi4gQnV0IG5vdGUgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIHNldCB0aGUgaW4sIG91dCwgb3IgZXJyCisgKiBmaWVsZHM7IHBpcGVfY29tbWFuZCBoYW5kbGVzIHRoYXQgYXV0b21hdGljYWxseS4KICAqLwotaW50IGNhcHR1cmVfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kLCBzdHJ1Y3Qgc3RyYnVmICpidWYsIHNpemVfdCBoaW50KTsKK2ludCBwaXBlX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCwKKwkJIGNvbnN0IGNoYXIgKmluLCBzaXplX3QgaW5fbGVuLAorCQkgc3RydWN0IHN0cmJ1ZiAqb3V0LCBzaXplX3Qgb3V0X2hpbnQsCisJCSBzdHJ1Y3Qgc3RyYnVmICplcnIsIHNpemVfdCBlcnJfaGludCk7CisKKy8qKgorICogQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgcGlwZV9jb21tYW5kIGZvciB0aGUgY29tbW9uIGNhc2UKKyAqIG9mIGNhcHR1cmluZyBvbmx5IHN0ZG91dC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2FwdHVyZV9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQsCisJCQkJICBzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkJICBzaXplX3QgaGludCkKK3sKKwlyZXR1cm4gcGlwZV9jb21tYW5kKGNtZCwgTlVMTCwgMCwgb3V0LCBoaW50LCBOVUxMLCAwKTsKK30KIAogLyoKICAqIFRoZSBwdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGlzIHRvIGZlZWQgYSBwaXBlIGJ5IHJ1bm5pbmcKZGlmZiAtLWdpdCBhL3NlbmQtcGFjay5jIGIvc2VuZC1wYWNrLmMKaW5kZXggMzdlZTA0ZS4uOTBmMmFjNSAxMDA2NDQKLS0tIGEvc2VuZC1wYWNrLmMKKysrIGIvc2VuZC1wYWNrLmMKQEAgLTM2LDE4ICszNiwxNSBAQAogCWRpZSgiYmFkICVzIGFyZ3VtZW50OiAlcyIsIG9wdC0+bG9uZ19uYW1lLCBhcmcpOwogfQogCi1zdGF0aWMgaW50IGZlZWRfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmZCwgaW50IG5lZ2F0aXZlKQorc3RhdGljIHZvaWQgZmVlZF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgRklMRSAqZmgsIGludCBuZWdhdGl2ZSkKIHsKLQljaGFyIGJ1Zls0Ml07Ci0KIAlpZiAobmVnYXRpdmUgJiYgIWhhc19zaGExX2ZpbGUoc2hhMSkpCi0JCXJldHVybiAxOworCQlyZXR1cm47CiAKLQltZW1jcHkoYnVmICsgbmVnYXRpdmUsIHNoYTFfdG9faGV4KHNoYTEpLCA0MCk7CiAJaWYgKG5lZ2F0aXZlKQotCQlidWZbMF0gPSAnXic7Ci0JYnVmWzQwICsgbmVnYXRpdmVdID0gJ1xuJzsKLQlyZXR1cm4gd3JpdGVfb3Jfd2hpbmUoZmQsIGJ1ZiwgNDEgKyBuZWdhdGl2ZSwgInNlbmQtcGFjazogc2VuZCByZWZzIik7CisJCXB1dGMoJ14nLCBmaCk7CisJZnB1dHMoc2hhMV90b19oZXgoc2hhMSksIGZoKTsKKwlwdXRjKCdcbicsIGZoKTsKIH0KIAogLyoKQEAgLTczLDYgKzcwLDcgQEAKIAkJTlVMTCwKIAl9OwogCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHBvID0gQ0hJTERfUFJPQ0VTU19JTklUOworCUZJTEUgKnBvX2luOwogCWludCBpOwogCiAJaSA9IDQ7CkBAIC05NywyMSArOTUsMjIgQEAKIAkgKiBXZSBmZWVkIHRoZSBwYWNrLW9iamVjdHMgd2UganVzdCBzcGF3bmVkIHdpdGggcmV2aXNpb24KIAkgKiBwYXJhbWV0ZXJzIGJ5IHdyaXRpbmcgdG8gdGhlIHBpcGUuCiAJICovCisJcG9faW4gPSB4ZmRvcGVuKHBvLmluLCAidyIpOwogCWZvciAoaSA9IDA7IGkgPCBleHRyYS0+bnI7IGkrKykKLQkJaWYgKCFmZWVkX29iamVjdChleHRyYS0+c2hhMVtpXSwgcG8uaW4sIDEpKQotCQkJYnJlYWs7CisJCWZlZWRfb2JqZWN0KGV4dHJhLT5zaGExW2ldLCBwb19pbiwgMSk7CiAKIAl3aGlsZSAocmVmcykgewotCQlpZiAoIWlzX251bGxfb2lkKCZyZWZzLT5vbGRfb2lkKSAmJgotCQkgICAgIWZlZWRfb2JqZWN0KHJlZnMtPm9sZF9vaWQuaGFzaCwgcG8uaW4sIDEpKQotCQkJYnJlYWs7Ci0JCWlmICghaXNfbnVsbF9vaWQoJnJlZnMtPm5ld19vaWQpICYmCi0JCSAgICAhZmVlZF9vYmplY3QocmVmcy0+bmV3X29pZC5oYXNoLCBwby5pbiwgMCkpCi0JCQlicmVhazsKKwkJaWYgKCFpc19udWxsX29pZCgmcmVmcy0+b2xkX29pZCkpCisJCQlmZWVkX29iamVjdChyZWZzLT5vbGRfb2lkLmhhc2gsIHBvX2luLCAxKTsKKwkJaWYgKCFpc19udWxsX29pZCgmcmVmcy0+bmV3X29pZCkpCisJCQlmZWVkX29iamVjdChyZWZzLT5uZXdfb2lkLmhhc2gsIHBvX2luLCAwKTsKIAkJcmVmcyA9IHJlZnMtPm5leHQ7CiAJfQogCi0JY2xvc2UocG8uaW4pOworCWZmbHVzaChwb19pbik7CisJaWYgKGZlcnJvcihwb19pbikpCisJCWRpZV9lcnJubygiZXJyb3Igd3JpdGluZyB0byBwYWNrLW9iamVjdHMiKTsKKwlmY2xvc2UocG9faW4pOwogCiAJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpIHsKIAkJY2hhciAqYnVmID0geG1hbGxvYyhMQVJHRV9QQUNLRVRfTUFYKTsKQEAgLTI2MSwxMiArMjYwLDEzIEBACiAJCQkgICAgICBjb25zdCBjaGFyICpwdXNoX2NlcnRfbm9uY2UpCiB7CiAJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOwogCWNoYXIgKnNpZ25pbmdfa2V5ID0geHN0cmR1cChnZXRfc2lnbmluZ19rZXkoKSk7CiAJY29uc3QgY2hhciAqY3AsICpucDsKIAlzdHJ1Y3Qgc3RyYnVmIGNlcnQgPSBTVFJCVUZfSU5JVDsKIAlpbnQgdXBkYXRlX3NlZW4gPSAwOwogCi0Jc3RyYnVmX2FkZGYoJmNlcnQsICJjZXJ0aWZpY2F0ZSB2ZXJzaW9uIDAuMVxuIik7CisJc3RyYnVmX2FkZHN0cigmY2VydCwgImNlcnRpZmljYXRlIHZlcnNpb24gMC4xXG4iKTsKIAlzdHJidWZfYWRkZigmY2VydCwgInB1c2hlciAlcyAiLCBzaWduaW5nX2tleSk7CiAJZGF0ZXN0YW1wKCZjZXJ0KTsKIAlzdHJidWZfYWRkY2goJmNlcnQsICdcbicpOwpAQCAtMjc3LDYgKzI3Nyw5IEBACiAJfQogCWlmIChwdXNoX2NlcnRfbm9uY2VbMF0pCiAJCXN0cmJ1Zl9hZGRmKCZjZXJ0LCAibm9uY2UgJXNcbiIsIHB1c2hfY2VydF9ub25jZSk7CisJaWYgKGFyZ3MtPnB1c2hfb3B0aW9ucykKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBhcmdzLT5wdXNoX29wdGlvbnMpCisJCQlzdHJidWZfYWRkZigmY2VydCwgInB1c2gtb3B0aW9uICVzXG4iLCBpdGVtLT5zdHJpbmcpOwogCXN0cmJ1Zl9hZGRzdHIoJmNlcnQsICJcbiIpOwogCiAJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKQEAgLTM3MSw2ICszNzQsOCBAQAogCWludCBhZ2VudF9zdXBwb3J0ZWQgPSAwOwogCWludCB1c2VfYXRvbWljID0gMDsKIAlpbnQgYXRvbWljX3N1cHBvcnRlZCA9IDA7CisJaW50IHVzZV9wdXNoX29wdGlvbnMgPSAwOworCWludCBwdXNoX29wdGlvbnNfc3VwcG9ydGVkID0gMDsKIAl1bnNpZ25lZCBjbWRzX3NlbnQgPSAwOwogCWludCByZXQ7CiAJc3RydWN0IGFzeW5jIGRlbXV4OwpAQCAtMzkzLDYgKzM5OCw4IEBACiAJCWFyZ3MtPnVzZV90aGluX3BhY2sgPSAwOwogCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImF0b21pYyIpKQogCQlhdG9taWNfc3VwcG9ydGVkID0gMTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJwdXNoLW9wdGlvbnMiKSkKKwkJcHVzaF9vcHRpb25zX3N1cHBvcnRlZCA9IDE7CiAKIAlpZiAoYXJncy0+cHVzaF9jZXJ0ICE9IFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVIpIHsKIAkJaW50IGxlbjsKQEAgLTQxOSw2ICs0MjYsMTEgQEAKIAogCXVzZV9hdG9taWMgPSBhdG9taWNfc3VwcG9ydGVkICYmIGFyZ3MtPmF0b21pYzsKIAorCWlmIChhcmdzLT5wdXNoX29wdGlvbnMgJiYgIXB1c2hfb3B0aW9uc19zdXBwb3J0ZWQpCisJCWRpZShfKCJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2ggb3B0aW9ucyIpKTsKKworCXVzZV9wdXNoX29wdGlvbnMgPSBwdXNoX29wdGlvbnNfc3VwcG9ydGVkICYmIGFyZ3MtPnB1c2hfb3B0aW9uczsKKwogCWlmIChzdGF0dXNfcmVwb3J0KQogCQlzdHJidWZfYWRkc3RyKCZjYXBfYnVmLCAiIHJlcG9ydC1zdGF0dXMiKTsKIAlpZiAodXNlX3NpZGViYW5kKQpAQCAtNDI3LDYgKzQzOSw4IEBACiAJCXN0cmJ1Zl9hZGRzdHIoJmNhcF9idWYsICIgcXVpZXQiKTsKIAlpZiAodXNlX2F0b21pYykKIAkJc3RyYnVmX2FkZHN0cigmY2FwX2J1ZiwgIiBhdG9taWMiKTsKKwlpZiAodXNlX3B1c2hfb3B0aW9ucykKKwkJc3RyYnVmX2FkZHN0cigmY2FwX2J1ZiwgIiBwdXNoLW9wdGlvbnMiKTsKIAlpZiAoYWdlbnRfc3VwcG9ydGVkKQogCQlzdHJidWZfYWRkZigmY2FwX2J1ZiwgIiBhZ2VudD0lcyIsIGdpdF91c2VyX2FnZW50X3Nhbml0aXplZCgpKTsKIApAQCAtNTEzLDYgKzUyNywxOCBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZyZXFfYnVmKTsKIAlzdHJidWZfcmVsZWFzZSgmY2FwX2J1Zik7CiAKKwlpZiAodXNlX3B1c2hfb3B0aW9ucykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgYXJncy0+cHVzaF9vcHRpb25zKQorCQkJcGFja2V0X2J1Zl93cml0ZSgmc2IsICIlcyIsIGl0ZW0tPnN0cmluZyk7CisKKwkJd3JpdGVfb3JfZGllKG91dCwgc2IuYnVmLCBzYi5sZW4pOworCQlwYWNrZXRfZmx1c2gob3V0KTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisKIAlpZiAodXNlX3NpZGViYW5kICYmIGNtZHNfc2VudCkgewogCQltZW1zZXQoJmRlbXV4LCAwLCBzaXplb2YoZGVtdXgpKTsKIAkJZGVtdXgucHJvYyA9IHNpZGViYW5kX2RlbXV4OwpkaWZmIC0tZ2l0IGEvc2VuZC1wYWNrLmggYi9zZW5kLXBhY2suaAppbmRleCA1N2YyMjJhLi42N2ZjNDBmIDEwMDY0NAotLS0gYS9zZW5kLXBhY2suaAorKysgYi9zZW5kLXBhY2suaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgU0VORF9QQUNLX0gKICNkZWZpbmUgU0VORF9QQUNLX0gKIAorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKIC8qIFBvc3NpYmxlIHZhbHVlcyBmb3IgcHVzaF9jZXJ0IGZpZWxkIGluIHNlbmRfcGFja19hcmdzLiAqLwogI2RlZmluZSBTRU5EX1BBQ0tfUFVTSF9DRVJUX05FVkVSIDAKICNkZWZpbmUgU0VORF9QQUNLX1BVU0hfQ0VSVF9JRl9BU0tFRCAxCkBAIC0yMSw2ICsyMyw3IEBACiAJCXB1c2hfY2VydDoyLAogCQlzdGF0ZWxlc3NfcnBjOjEsCiAJCWF0b21pYzoxOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHVzaF9vcHRpb25zOwogfTsKIAogc3RydWN0IG9wdGlvbjsKZGlmZiAtLWdpdCBhL3NlcXVlbmNlci5jIGIvc2VxdWVuY2VyLmMKaW5kZXggNDY4N2FkNC4uMmU5YzdkMCAxMDA2NDQKLS0tIGEvc2VxdWVuY2VyLmMKKysrIGIvc2VxdWVuY2VyLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogewogCXN0cnVjdCBzdHJidWYgc2VxX2RpciA9IFNUUkJVRl9JTklUOwogCi0Jc3RyYnVmX2FkZGYoJnNlcV9kaXIsICIlcyIsIGdpdF9wYXRoKFNFUV9ESVIpKTsKKwlzdHJidWZfYWRkc3RyKCZzZXFfZGlyLCBnaXRfcGF0aChTRVFfRElSKSk7CiAJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmc2VxX2RpciwgMCk7CiAJc3RyYnVmX3JlbGVhc2UoJnNlcV9kaXIpOwogfQpAQCAtMTkwLDcgKzE5MCw3IEBACiAJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiKSwgZmlsZW5hbWUpOwogCXN0cmJ1Zl9yZWxlYXNlKG1zZ2J1Zik7CiAJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJm1zZ19maWxlKSA8IDApCi0JCWRpZShfKCJFcnJvciB3cmFwcGluZyB1cCAlcyIpLCBmaWxlbmFtZSk7CisJCWRpZShfKCJFcnJvciB3cmFwcGluZyB1cCAlcy4iKSwgZmlsZW5hbWUpOwogfQogCiBzdGF0aWMgc3RydWN0IHRyZWUgKmVtcHR5X3RyZWUodm9pZCkKQEAgLTIyNSw3ICsyMjUsNyBAQAogCWlmIChjaGVja291dF9mYXN0X2ZvcndhcmQoZnJvbSwgdG8sIDEpKQogCQlleGl0KDEyOCk7IC8qIHRoZSBjYWxsZWUgc2hvdWxkIGhhdmUgY29tcGxhaW5lZCBhbHJlYWR5ICovCiAKLQlzdHJidWZfYWRkZigmc2IsICIlczogZmFzdC1mb3J3YXJkIiwgYWN0aW9uX25hbWUob3B0cykpOworCXN0cmJ1Zl9hZGRmKCZzYiwgXygiJXM6IGZhc3QtZm9yd2FyZCIpLCBhY3Rpb25fbmFtZShvcHRzKSk7CiAKIAl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKIAlpZiAoIXRyYW5zYWN0aW9uIHx8CkBAIC0yOTMsNiArMjkzLDkgQEAKIAljbGVhbiA9IG1lcmdlX3RyZWVzKCZvLAogCQkJICAgIGhlYWRfdHJlZSwKIAkJCSAgICBuZXh0X3RyZWUsIGJhc2VfdHJlZSwgJnJlc3VsdCk7CisJc3RyYnVmX3JlbGVhc2UoJm8ub2J1Zik7CisJaWYgKGNsZWFuIDwgMCkKKwkJcmV0dXJuIGNsZWFuOwogCiAJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkICYmCiAJICAgIHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmaW5kZXhfbG9jaywgQ09NTUlUX0xPQ0spKQpAQCAtNTQ0LDEwICs1NDcsOCBAQAogCQkgKiBpbmZvcm1hdGlvbiBmb2xsb3dlZCBieSAiXG5cbiIuCiAJCSAqLwogCQlwID0gc3Ryc3RyKG1zZy5tZXNzYWdlLCAiXG5cbiIpOwotCQlpZiAocCkgewotCQkJcCArPSAyOwotCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCBwKTsKLQkJfQorCQlpZiAocCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1Ziwgc2tpcF9ibGFua19saW5lcyhwICsgMikpOwogCiAJCWlmIChvcHRzLT5yZWNvcmRfb3JpZ2luKSB7CiAJCQlpZiAoIWhhc19jb25mb3JtaW5nX2Zvb3RlcigmbXNnYnVmLCBOVUxMLCAwKSkKQEAgLTU2MSw2ICs1NjIsOCBAQAogCWlmICghb3B0cy0+c3RyYXRlZ3kgfHwgIXN0cmNtcChvcHRzLT5zdHJhdGVneSwgInJlY3Vyc2l2ZSIpIHx8IG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUKSB7CiAJCXJlcyA9IGRvX3JlY3Vyc2l2ZV9tZXJnZShiYXNlLCBuZXh0LCBiYXNlX2xhYmVsLCBuZXh0X2xhYmVsLAogCQkJCQkgaGVhZCwgJm1zZ2J1Ziwgb3B0cyk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKIAkJd3JpdGVfbWVzc2FnZSgmbXNnYnVmLCBnaXRfcGF0aF9tZXJnZV9tc2coKSk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb24gPSBOVUxMOwpAQCAtNjk3LDkgKzcwMCwxNCBAQAogCSAqIG9wdHM7IHdlIGRvbid0IHN1cHBvcnQgYXJiaXRyYXJ5IGluc3RydWN0aW9ucwogCSAqLwogCWlmIChhY3Rpb24gIT0gb3B0cy0+YWN0aW9uKSB7Ci0JCWNvbnN0IGNoYXIgKmFjdGlvbl9zdHI7Ci0JCWFjdGlvbl9zdHIgPSBhY3Rpb24gPT0gUkVQTEFZX1JFVkVSVCA/ICJyZXZlcnQiIDogImNoZXJyeS1waWNrIjsKLQkJZXJyb3IoXygiQ2Fubm90ICVzIGR1cmluZyBhICVzIiksIGFjdGlvbl9zdHIsIGFjdGlvbl9uYW1lKG9wdHMpKTsKKwkJaWYgKGFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUKQorCQkgICAgICBlcnJvcigob3B0cy0+YWN0aW9uID09IFJFUExBWV9SRVZFUlQpCisJCQkgICAgPyBfKCJDYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGFub3RoZXIgcmV2ZXJ0LiIpCisJCQkgICAgOiBfKCJDYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIpKTsKKwkJZWxzZQorCQkgICAgICBlcnJvcigob3B0cy0+YWN0aW9uID09IFJFUExBWV9SRVZFUlQpCisJCQkgICAgPyBfKCJDYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGEgcmV2ZXJ0LiIpCisJCQkgICAgOiBfKCJDYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGFub3RoZXIgY2hlcnJ5LXBpY2suIikpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTg4OCw2ICs4OTYsMTAgQEAKIAkJCWdpdF9wYXRoX2hlYWRfZmlsZSgpKTsKIAkJZ290byBmYWlsOwogCX0KKwlpZiAoaXNfbnVsbF9zaGExKHNoYTEpKSB7CisJCWVycm9yKF8oImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIikpOworCQlnb3RvIGZhaWw7CisJfQogCWlmIChyZXNldF9mb3Jfcm9sbGJhY2soc2hhMSkpCiAJCWdvdG8gZmFpbDsKIAlyZW1vdmVfc2VxdWVuY2VyX3N0YXRlKCk7CkBAIC0xMDg2LDExICsxMDk4LDggQEAKIAl3YWxrX3JldnNfcG9wdWxhdGVfdG9kbygmdG9kb19saXN0LCBvcHRzKTsKIAlpZiAoY3JlYXRlX3NlcV9kaXIoKSA8IDApCiAJCXJldHVybiAtMTsKLQlpZiAoZ2V0X3NoYTEoIkhFQUQiLCBzaGExKSkgewotCQlpZiAob3B0cy0+YWN0aW9uID09IFJFUExBWV9SRVZFUlQpCi0JCQlyZXR1cm4gZXJyb3IoXygiQ2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IikpOwotCQlyZXR1cm4gZXJyb3IoXygiQ2FuJ3QgY2hlcnJ5LXBpY2sgaW50byBlbXB0eSBoZWFkIikpOwotCX0KKwlpZiAoZ2V0X3NoYTEoIkhFQUQiLCBzaGExKSAmJiAob3B0cy0+YWN0aW9uID09IFJFUExBWV9SRVZFUlQpKQorCQlyZXR1cm4gZXJyb3IoXygiQ2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IikpOwogCXNhdmVfaGVhZChzaGExX3RvX2hleChzaGExKSk7CiAJc2F2ZV9vcHRzKG9wdHMpOwogCXJldHVybiBwaWNrX2NvbW1pdHModG9kb19saXN0LCBvcHRzKTsKZGlmZiAtLWdpdCBhL3NldHVwLmMgYi9zZXR1cC5jCmluZGV4IGM4NmJmNWMuLmZlNTcyYjggMTAwNjQ0Ci0tLSBhL3NldHVwLmMKKysrIGIvc2V0dXAuYwpAQCAtMTU3LDggKzE1Nyw4IEBACiAJCQkJCSBpbnQgZGlhZ25vc2VfbWlzc3BlbHRfcmV2KQogewogCWlmICghZGlhZ25vc2VfbWlzc3BlbHRfcmV2KQotCQlkaWUoIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKLQkJICAgICJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIiwKKwkJZGllKF8oIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKwkJICAgICAgIlVzZSAnZ2l0IDxjb21tYW5kPiAtLSA8cGF0aD4uLi4nIHRvIHNwZWNpZnkgcGF0aHMgdGhhdCBkbyBub3QgZXhpc3QgbG9jYWxseS4iKSwKIAkJICAgIGFyZyk7CiAJLyoKIAkgKiBTYXlpbmcgIicoaWNhc2UpZm9vJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5kZXgiIHdoZW4gdGhlCkBAIC0xNzAsOSArMTcwLDkgQEAKIAkJbWF5YmVfZGllX29uX21pc3NwZWx0X29iamVjdF9uYW1lKGFyZywgcHJlZml4KTsKIAogCS8qIC4uLiBvciBmYWxsIGJhY2sgdGhlIG1vc3QgZ2VuZXJhbCBtZXNzYWdlLiAqLwotCWRpZSgiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKLQkgICAgIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCi0JICAgICInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIiwgYXJnKTsKKwlkaWUoXygiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKwkgICAgICAiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKwkgICAgICAiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIpLCBhcmcpOwogCiB9CiAKQEAgLTIyMCw5ICsyMjAsOSBAQAogCQlyZXR1cm47IC8qIGZsYWcgKi8KIAlpZiAoIWNoZWNrX2ZpbGVuYW1lKHByZWZpeCwgYXJnKSkKIAkJcmV0dXJuOwotCWRpZSgiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCi0JICAgICJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgotCSAgICAiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIsIGFyZyk7CisJZGllKF8oImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorCSAgICAgICJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorCSAgICAgICInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIiksIGFyZyk7CiB9CiAKIGludCBnZXRfY29tbW9uX2RpcihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZ2l0ZGlyKQpAQCAtNzU5LDkgKzc1OSw5IEBACiBzdGF0aWMgY29uc3QgY2hhciAqc2V0dXBfbm9uZ2l0KGNvbnN0IGNoYXIgKmN3ZCwgaW50ICpub25naXRfb2spCiB7CiAJaWYgKCFub25naXRfb2spCi0JCWRpZSgiTm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiLCBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQpOworCQlkaWUoXygiTm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiKSwgREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKTsKIAlpZiAoY2hkaXIoY3dkKSkKLQkJZGllX2Vycm5vKCJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpOworCQlkaWVfZXJybm8oXygiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiKSk7CiAJKm5vbmdpdF9vayA9IDE7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC04NDIsNyArODQyLDcgQEAKIAkJKm5vbmdpdF9vayA9IDA7CiAKIAlpZiAoc3RyYnVmX2dldGN3ZCgmY3dkKSkKLQkJZGllX2Vycm5vKCJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJCWRpZV9lcnJubyhfKCJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IikpOwogCW9mZnNldCA9IGN3ZC5sZW47CiAKIAkvKgpAQCAtOTEyLDE5ICs5MTIsMTkgQEAKIAkJCWlmIChwYXJlbnRfZGV2aWNlICE9IGN1cnJlbnRfZGV2aWNlKSB7CiAJCQkJaWYgKG5vbmdpdF9vaykgewogCQkJCQlpZiAoY2hkaXIoY3dkLmJ1ZikpCi0JCQkJCQlkaWVfZXJybm8oIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIik7CisJCQkJCQlkaWVfZXJybm8oXygiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiKSk7CiAJCQkJCSpub25naXRfb2sgPSAxOwogCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQl9CiAJCQkJc3RyYnVmX3NldGxlbigmY3dkLCBvZmZzZXQpOwotCQkJCWRpZSgiTm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCi0JCQkJIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIiwKKwkJCQlkaWUoXygiTm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisJCQkJIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIiksCiAJCQkJICAgIGN3ZC5idWYpOwogCQkJfQogCQl9CiAJCWlmIChjaGRpcigiLi4iKSkgewogCQkJc3RyYnVmX3NldGxlbigmY3dkLCBvZmZzZXQpOwotCQkJZGllX2Vycm5vKCJDYW5ub3QgY2hhbmdlIHRvICclcy8uLiciLCBjd2QuYnVmKTsKKwkJCWRpZV9lcnJubyhfKCJDYW5ub3QgY2hhbmdlIHRvICclcy8uLiciKSwgY3dkLmJ1Zik7CiAJCX0KIAkJb2Zmc2V0ID0gb2Zmc2V0X3BhcmVudDsKIAl9CkBAIC05ODYsOSArOTg2LDkgQEAKIAkvKiBBIGZpbGVtb2RlIHZhbHVlIHdhcyBnaXZlbjogMHh4eCAqLwogCiAJaWYgKChpICYgMDYwMCkgIT0gMDYwMCkKLQkJZGllKCJQcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICIKKwkJZGllKF8oIlByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgIgogCQkgICAgIigwJS4zbykuXG5UaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSAiCi0JCSAgICAicmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIiwgaSk7CisJCSAgICAicmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIiksIGkpOwogCiAJLyoKIAkgKiBNYXNrIGZpbGVtb2RlIHZhbHVlLiBPdGhlcnMgY2FuIG5vdCBnZXQgd3JpdGUgcGVybWlzc2lvbi4KZGlmZiAtLWdpdCBhL3NoLWkxOG4tLWVudnN1YnN0LmMgYi9zaC1pMThuLS1lbnZzdWJzdC5jCmluZGV4IDI4NDJhMjIuLmUwNmIyYzEgMTAwNjQ0Ci0tLSBhL3NoLWkxOG4tLWVudnN1YnN0LmMKKysrIGIvc2gtaTE4bi0tZW52c3Vic3QuYwpAQCAtNjQsNyArNjQsNyBAQAogc3RhdGljIHZvaWQgc3Vic3RfZnJvbV9zdGRpbiAodm9pZCk7CiAKIGludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2NtZF9tYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogewogICAvKiBEZWZhdWx0IHZhbHVlcyBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnMuICAqLwogICAvKiB1bnNpZ25lZCBzaG9ydCBpbnQgc2hvd192YXJpYWJsZXMgPSAwOyAqLwpkaWZmIC0tZ2l0IGEvc2hhMV9maWxlLmMgYi9zaGExX2ZpbGUuYwppbmRleCBkNWUxMTIxLi4zMDQ1YWVhIDEwMDY0NAotLS0gYS9zaGExX2ZpbGUuYworKysgYi9zaGExX2ZpbGUuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImJ1bGstY2hlY2tpbi5oIgogI2luY2x1ZGUgInN0cmVhbWluZy5oIgogI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgIm1ydS5oIgogCiAjaWZuZGVmIE9fTk9BVElNRQogI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX1BQQ19fKSkKQEAgLTU5LDE0ICs2MCw2IEBACiAJMAogfTsKIAotLyoKLSAqIEEgcG9pbnRlciB0byB0aGUgbGFzdCBwYWNrZWRfZ2l0IGluIHdoaWNoIGFuIG9iamVjdCB3YXMgZm91bmQuCi0gKiBXaGVuIGFuIG9iamVjdCBpcyBzb3VnaHQsIHdlIGxvb2sgaW4gdGhpcyBwYWNrZmlsZSBmaXJzdCwgYmVjYXVzZQotICogb2JqZWN0cyB0aGF0IGFyZSBsb29rZWQgdXAgYXQgc2ltaWxhciB0aW1lcyBhcmUgb2Z0ZW4gaW4gdGhlIHNhbWUKLSAqIHBhY2tmaWxlIGFzIG9uZSBhbm90aGVyLgotICovCi1zdGF0aWMgc3RydWN0IHBhY2tlZF9naXQgKmxhc3RfZm91bmRfcGFjazsKLQogc3RhdGljIHN0cnVjdCBjYWNoZWRfb2JqZWN0ICpmaW5kX2NhY2hlZF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAlpbnQgaTsKQEAgLTUyMiw2ICs1MTUsOSBAQAogc3RhdGljIHNpemVfdCBwYWNrX21hcHBlZDsKIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrZWRfZ2l0OwogCitzdGF0aWMgc3RydWN0IG1ydSBwYWNrZWRfZ2l0X21ydV9zdG9yYWdlOworc3RydWN0IG1ydSAqcGFja2VkX2dpdF9tcnUgPSAmcGFja2VkX2dpdF9tcnVfc3RvcmFnZTsKKwogdm9pZCBwYWNrX3JlcG9ydCh2b2lkKQogewogCWZwcmludGYoc3RkZXJyLApAQCAtNzk1LDcgKzc5MSw3IEBACiAKIAlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkKIAkJaWYgKHAtPmRvX25vdF9jbG9zZSkKLQkJCWRpZSgiQlVHISBXYW50IHRvIGNsb3NlIHBhY2sgbWFya2VkICdkby1ub3QtY2xvc2UnIik7CisJCQlkaWUoIkJVRzogd2FudCB0byBjbG9zZSBwYWNrIG1hcmtlZCAnZG8tbm90LWNsb3NlJyIpOwogCQllbHNlCiAJCQljbG9zZV9wYWNrKHApOwogfQpAQCAtODkxLDM2ICs4ODcsNiBAQAogCX0KIH0KIAotLyoKLSAqIFRoaXMgaXMgdXNlZCBieSBnaXQtcmVwYWNrIGluIGNhc2UgYSBuZXdseSBjcmVhdGVkIHBhY2sgaGFwcGVucyB0bwotICogY29udGFpbiB0aGUgc2FtZSBzZXQgb2Ygb2JqZWN0cyBhcyBhbiBleGlzdGluZyBvbmUuICBJbiB0aGF0IGNhc2UKLSAqIHRoZSByZXN1bHRpbmcgZmlsZSBtaWdodCBiZSBkaWZmZXJlbnQgZXZlbiBpZiBpdHMgbmFtZSB3b3VsZCBiZSB0aGUKLSAqIHNhbWUuICBJdCBpcyBiZXN0IHRvIGNsb3NlIGFueSByZWZlcmVuY2UgdG8gdGhlIG9sZCBwYWNrIGJlZm9yZSBpdCBpcwotICogcmVwbGFjZWQgb24gZGlzay4gIE9mIGNvdXJzZSBubyBpbmRleCBwb2ludGVycyBvciB3aW5kb3dzIGZvciBnaXZlbiBwYWNrCi0gKiBtdXN0IHN1YnNpc3QgYXQgdGhpcyBwb2ludC4gIElmIGV2ZXIgb2JqZWN0cyBmcm9tIHRoaXMgcGFjayBhcmUgcmVxdWVzdGVkCi0gKiBhZ2FpbiwgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSBwYWNrIHdpbGwgYmUgcmVpbml0aWFsaXplZCB0aHJvdWdoCi0gKiByZXByZXBhcmVfcGFja2VkX2dpdCgpLgotICovCi12b2lkIGZyZWVfcGFja19ieV9uYW1lKGNvbnN0IGNoYXIgKnBhY2tfbmFtZSkKLXsKLQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgKipwcCA9ICZwYWNrZWRfZ2l0OwotCi0Jd2hpbGUgKCpwcCkgewotCQlwID0gKnBwOwotCQlpZiAoc3RyY21wKHBhY2tfbmFtZSwgcC0+cGFja19uYW1lKSA9PSAwKSB7Ci0JCQljbGVhcl9kZWx0YV9iYXNlX2NhY2hlKCk7Ci0JCQljbG9zZV9wYWNrKHApOwotCQkJZnJlZShwLT5iYWRfb2JqZWN0X3NoYTEpOwotCQkJKnBwID0gcC0+bmV4dDsKLQkJCWlmIChsYXN0X2ZvdW5kX3BhY2sgPT0gcCkKLQkJCQlsYXN0X2ZvdW5kX3BhY2sgPSBOVUxMOwotCQkJZnJlZShwKTsKLQkJCXJldHVybjsKLQkJfQotCQlwcCA9ICZwLT5uZXh0OwotCX0KLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbWF4X2ZkX2xpbWl0KHZvaWQpCiB7CiAjaWZkZWYgUkxJTUlUX05PRklMRQpAQCAtMTM4NSw2ICsxMzUxLDE1IEBACiAJZnJlZShhcnkpOwogfQogCitzdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2tlZF9naXRfbXJ1KHZvaWQpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwltcnVfY2xlYXIocGFja2VkX2dpdF9tcnUpOworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KQorCQltcnVfYXBwZW5kKHBhY2tlZF9naXRfbXJ1LCBwKTsKK30KKwogc3RhdGljIGludCBwcmVwYXJlX3BhY2tlZF9naXRfcnVuX29uY2UgPSAwOwogdm9pZCBwcmVwYXJlX3BhY2tlZF9naXQodm9pZCkKIHsKQEAgLTE0MDAsNiArMTM3NSw3IEBACiAJCWFsdC0+bmFtZVstMV0gPSAnLyc7CiAJfQogCXJlYXJyYW5nZV9wYWNrZWRfZ2l0KCk7CisJcHJlcGFyZV9wYWNrZWRfZ2l0X21ydSgpOwogCXByZXBhcmVfcGFja2VkX2dpdF9ydW5fb25jZSA9IDE7CiB9CiAKQEAgLTE3MTYsNyArMTY5Miw3IEBACiAJCXN0cmJ1Zl9hZGQob2ktPnR5cGVuYW1lLCB0eXBlX2J1ZiwgdHlwZV9sZW4pOwogCS8qCiAJICogU2V0IHR5cGUgdG8gMCBpZiBpdHMgYW4gdW5rbm93biBvYmplY3QgYW5kCi0JICogd2UncmUgb2J0YWluaW5nIHRoZSB0eXBlIHVzaW5nICctLWFsbG93LXVua293bi10eXBlJworCSAqIHdlJ3JlIG9idGFpbmluZyB0aGUgdHlwZSB1c2luZyAnLS1hbGxvdy11bmtub3duLXR5cGUnCiAJICogb3B0aW9uLgogCSAqLwogCWlmICgoZmxhZ3MgJiBMT09LVVBfVU5LTk9XTl9PQkpFQ1QpICYmICh0eXBlIDwgMCkpCkBAIC0yMjgxLDcgKzIyNTcsNyBAQAogCiAJCWlmIChkb19jaGVja19wYWNrZWRfb2JqZWN0X2NyYyAmJiBwLT5pbmRleF92ZXJzaW9uID4gMSkgewogCQkJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpZHggPSBmaW5kX3BhY2tfcmV2aW5kZXgocCwgb2JqX29mZnNldCk7Ci0JCQl1bnNpZ25lZCBsb25nIGxlbiA9IHJldmlkeFsxXS5vZmZzZXQgLSBvYmpfb2Zmc2V0OworCQkJb2ZmX3QgbGVuID0gcmV2aWR4WzFdLm9mZnNldCAtIG9ial9vZmZzZXQ7CiAJCQlpZiAoY2hlY2tfcGFja19jcmMocCwgJndfY3Vycywgb2JqX29mZnNldCwgbGVuLCByZXZpZHgtPm5yKSkgewogCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEgPQogCQkJCQludGhfcGFja2VkX29iamVjdF9zaGExKHAsIHJldmlkeC0+bnIpOwpAQCAtMjMzMCw3ICsyMzA2LDcgQEAKIAljYXNlIE9CSl9PRlNfREVMVEE6CiAJY2FzZSBPQkpfUkVGX0RFTFRBOgogCQlpZiAoZGF0YSkKLQkJCWRpZSgiQlVHIGluIHVucGFja19lbnRyeTogbGVmdCBsb29wIGF0IGEgdmFsaWQgZGVsdGEiKTsKKwkJCWRpZSgiQlVHOiB1bnBhY2tfZW50cnk6IGxlZnQgbG9vcCBhdCBhIHZhbGlkIGRlbHRhIik7CiAJCWJyZWFrOwogCWNhc2UgT0JKX0NPTU1JVDoKIAljYXNlIE9CSl9UUkVFOgpAQCAtMjYwNCwyMSArMjU4MCwxNSBAQAogICovCiBzdGF0aWMgaW50IGZpbmRfcGFja19lbnRyeShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3QgcGFja19lbnRyeSAqZSkKIHsKLQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlzdHJ1Y3QgbXJ1X2VudHJ5ICpwOwogCiAJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CiAJaWYgKCFwYWNrZWRfZ2l0KQogCQlyZXR1cm4gMDsKIAotCWlmIChsYXN0X2ZvdW5kX3BhY2sgJiYgZmlsbF9wYWNrX2VudHJ5KHNoYTEsIGUsIGxhc3RfZm91bmRfcGFjaykpCi0JCXJldHVybiAxOwotCi0JZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJaWYgKHAgPT0gbGFzdF9mb3VuZF9wYWNrKQotCQkJY29udGludWU7IC8qIHdlIGFscmVhZHkgY2hlY2tlZCB0aGlzIG9uZSAqLwotCi0JCWlmIChmaWxsX3BhY2tfZW50cnkoc2hhMSwgZSwgcCkpIHsKLQkJCWxhc3RfZm91bmRfcGFjayA9IHA7CisJZm9yIChwID0gcGFja2VkX2dpdF9tcnUtPmhlYWQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChmaWxsX3BhY2tfZW50cnkoc2hhMSwgZSwgcC0+aXRlbSkpIHsKKwkJCW1ydV9tYXJrKHBhY2tlZF9naXRfbXJ1LCBwKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc2hhbGxvdy5jIGIvc2hhbGxvdy5jCmluZGV4IDRkNTU0Y2EuLjU0ZTJkYjcgMTAwNjQ0Ci0tLSBhL3NoYWxsb3cuYworKysgYi9zaGFsbG93LmMKQEAgLTM4OSw3ICszODksNyBAQAogCXVuc2lnbmVkIGludCBpLCBucjsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKmhlYWQgPSBOVUxMOwogCWludCBiaXRtYXBfbnIgPSAoaW5mby0+bnJfYml0cyArIDMxKSAvIDMyOwotCXNpemVfdCBiaXRtYXBfc2l6ZSA9IHN0X211bHQoYml0bWFwX25yLCBzaXplb2YodWludDMyX3QpKTsKKwlzaXplX3QgYml0bWFwX3NpemUgPSBzdF9tdWx0KHNpemVvZih1aW50MzJfdCksIGJpdG1hcF9ucik7CiAJdWludDMyX3QgKnRtcCA9IHhtYWxsb2MoYml0bWFwX3NpemUpOyAvKiB0byBiZSBmcmVlZCBiZWZvcmUgcmV0dXJuICovCiAJdWludDMyX3QgKmJpdG1hcCA9IHBhaW50X2FsbG9jKGluZm8pOwogCXN0cnVjdCBjb21taXQgKmMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CmRpZmYgLS1naXQgYS9zaGVsbC5jIGIvc2hlbGwuYwppbmRleCBjNTQzOWE2Li40NjRlZTFhIDEwMDY0NAotLS0gYS9zaGVsbC5jCisrKyBiL3NoZWxsLmMKQEAgLTEzOCwyNCArMTM4LDEzIEBACiAJeyBOVUxMIH0sCiB9OwogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCWNoYXIgKnByb2c7CiAJY29uc3QgY2hhciAqKnVzZXJfYXJndjsKIAlzdHJ1Y3QgY29tbWFuZHMgKmNtZDsKIAlpbnQgY291bnQ7CiAKLQlnaXRfc2V0dXBfZ2V0dGV4dCgpOwotCi0JZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKLQotCS8qCi0JICogQWx3YXlzIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyAwLzEvMiB0byBhdm9pZCBjbG9iYmVyaW5nIGZpbGVzCi0JICogaW4gZGllKCkuICBJdCBhbHNvIGF2b2lkcyBtZXNzaW5nIHVwIHdoZW4gdGhlIHBpcGVzIGFyZSBkdXAnZWQKLQkgKiBvbnRvIHN0ZGluL3N0ZG91dC9zdGRlcnIgaW4gdGhlIGNoaWxkIHByb2Nlc3NlcyB3ZSBzcGF3bi4KLQkgKi8KLQlzYW5pdGl6ZV9zdGRmZHMoKTsKLQogCS8qCiAJICogU3BlY2lhbCBoYWNrIHRvIHByZXRlbmQgdG8gYmUgYSBDVlMgc2VydmVyCiAJICovCmRpZmYgLS1naXQgYS9zaG9ydGxvZy5oIGIvc2hvcnRsb2cuaAppbmRleCBkZTRmODZmLi41YTMyNmM2IDEwMDY0NAotLS0gYS9zaG9ydGxvZy5oCisrKyBiL3Nob3J0bG9nLmgKQEAgLTE3LDYgKzE3LDcgQEAKIAljaGFyICpjb21tb25fcmVwb19wcmVmaXg7CiAJaW50IGVtYWlsOwogCXN0cnVjdCBzdHJpbmdfbGlzdCBtYWlsbWFwOworCUZJTEUgKmZpbGU7CiB9OwogCiB2b2lkIHNob3J0bG9nX2luaXQoc3RydWN0IHNob3J0bG9nICpsb2cpOwpkaWZmIC0tZ2l0IGEvc2hvdy1pbmRleC5jIGIvc2hvdy1pbmRleC5jCmluZGV4IGFjZjhkNTQuLjFlYWQ0MWUgMTAwNjQ0Ci0tLSBhL3Nob3ctaW5kZXguYworKysgYi9zaG93LWluZGV4LmMKQEAgLTQsMTUgKzQsMTMgQEAKIHN0YXRpYyBjb25zdCBjaGFyIHNob3dfaW5kZXhfdXNhZ2VbXSA9CiAiZ2l0IHNob3ctaW5kZXgiOwogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCWludCBpOwogCXVuc2lnbmVkIG5yOwogCXVuc2lnbmVkIGludCB2ZXJzaW9uOwogCXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9wX2luZGV4WzI1Nl07CiAKLQlnaXRfc2V0dXBfZ2V0dGV4dCgpOwotCiAJaWYgKGFyZ2MgIT0gMSkKIAkJdXNhZ2Uoc2hvd19pbmRleF91c2FnZSk7CiAJaWYgKGZyZWFkKHRvcF9pbmRleCwgMiAqIDQsIDEsIHN0ZGluKSAhPSAxKQpkaWZmIC0tZ2l0IGEvc2lkZWJhbmQuYyBiL3NpZGViYW5kLmMKaW5kZXggZmRlOGFkYy4uMWU0ZDY4NCAxMDA2NDQKLS0tIGEvc2lkZWJhbmQuYworKysgYi9zaWRlYmFuZC5jCkBAIC0xMywxMjAgKzEzLDEwMyBAQAogICogdGhlIHJlbW90ZSBkaWVkIHVuZXhwZWN0ZWRseS4gIEEgZmx1c2goKSBjb25jbHVkZXMgdGhlIHN0cmVhbS4KICAqLwogCi0jZGVmaW5lIFBSRUZJWCAicmVtb3RlOiIKKyNkZWZpbmUgUFJFRklYICJyZW1vdGU6ICIKIAogI2RlZmluZSBBTlNJX1NVRkZJWCAiXDAzM1tLIgogI2RlZmluZSBEVU1CX1NVRkZJWCAiICAgICAgICAiCiAKLSNkZWZpbmUgRklYX1NJWkUgMTAgIC8qIGxhcmdlIGVub3VnaCBmb3IgYW55IG9mIHRoZSBhYm92ZSAqLwotCiBpbnQgcmVjdl9zaWRlYmFuZChjb25zdCBjaGFyICptZSwgaW50IGluX3N0cmVhbSwgaW50IG91dCkKIHsKLQl1bnNpZ25lZCBwZiA9IHN0cmxlbihQUkVGSVgpOwotCXVuc2lnbmVkIHNmOwotCWNoYXIgYnVmW0xBUkdFX1BBQ0tFVF9NQVggKyAyKkZJWF9TSVpFXTsKLQljaGFyICpzdWZmaXgsICp0ZXJtOwotCWludCBza2lwX3BmID0gMDsKKwljb25zdCBjaGFyICp0ZXJtLCAqc3VmZml4OworCWNoYXIgYnVmW0xBUkdFX1BBQ0tFVF9NQVggKyAxXTsKKwlzdHJ1Y3Qgc3RyYnVmIG91dGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXR2YWwgPSAwOwogCi0JbWVtY3B5KGJ1ZiwgUFJFRklYLCBwZik7CiAJdGVybSA9IGdldGVudigiVEVSTSIpOwogCWlmIChpc2F0dHkoMikgJiYgdGVybSAmJiBzdHJjbXAodGVybSwgImR1bWIiKSkKIAkJc3VmZml4ID0gQU5TSV9TVUZGSVg7CiAJZWxzZQogCQlzdWZmaXggPSBEVU1CX1NVRkZJWDsKLQlzZiA9IHN0cmxlbihzdWZmaXgpOwogCi0Jd2hpbGUgKDEpIHsKKwl3aGlsZSAoIXJldHZhbCkgeworCQljb25zdCBjaGFyICpiLCAqYnJrOwogCQlpbnQgYmFuZCwgbGVuOwotCQlsZW4gPSBwYWNrZXRfcmVhZChpbl9zdHJlYW0sIE5VTEwsIE5VTEwsIGJ1ZiArIHBmLCBMQVJHRV9QQUNLRVRfTUFYLCAwKTsKKwkJbGVuID0gcGFja2V0X3JlYWQoaW5fc3RyZWFtLCBOVUxMLCBOVUxMLCBidWYsIExBUkdFX1BBQ0tFVF9NQVgsIDApOwogCQlpZiAobGVuID09IDApCiAJCQlicmVhazsKIAkJaWYgKGxlbiA8IDEpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHByb3RvY29sIGVycm9yOiBubyBiYW5kIGRlc2lnbmF0b3JcbiIsIG1lKTsKLQkJCXJldHVybiBTSURFQkFORF9QUk9UT0NPTF9FUlJPUjsKKwkJCXN0cmJ1Zl9hZGRmKCZvdXRidWYsCisJCQkJICAgICIlcyVzOiBwcm90b2NvbCBlcnJvcjogbm8gYmFuZCBkZXNpZ25hdG9yIiwKKwkJCQkgICAgb3V0YnVmLmxlbiA/ICJcbiIgOiAiIiwgbWUpOworCQkJcmV0dmFsID0gU0lERUJBTkRfUFJPVE9DT0xfRVJST1I7CisJCQlicmVhazsKIAkJfQotCQliYW5kID0gYnVmW3BmXSAmIDB4ZmY7CisJCWJhbmQgPSBidWZbMF0gJiAweGZmOworCQlidWZbbGVuXSA9ICdcMCc7CiAJCWxlbi0tOwogCQlzd2l0Y2ggKGJhbmQpIHsKIAkJY2FzZSAzOgotCQkJYnVmW3BmXSA9ICcgJzsKLQkJCWJ1ZltwZisxK2xlbl0gPSAnXDAnOwotCQkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgYnVmKTsKLQkJCXJldHVybiBTSURFQkFORF9SRU1PVEVfRVJST1I7CisJCQlzdHJidWZfYWRkZigmb3V0YnVmLCAiJXMlcyVzIiwgb3V0YnVmLmxlbiA/ICJcbiIgOiAiIiwKKwkJCQkgICAgUFJFRklYLCBidWYgKyAxKTsKKwkJCXJldHZhbCA9IFNJREVCQU5EX1JFTU9URV9FUlJPUjsKKwkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlidWZbcGZdID0gJyAnOwotCQkJZG8gewotCQkJCWNoYXIgKmIgPSBidWY7Ci0JCQkJaW50IGJyayA9IDA7CisJCQliID0gYnVmICsgMTsKIAotCQkJCS8qCi0JCQkJICogSWYgdGhlIGxhc3QgYnVmZmVyIGRpZG4ndCBlbmQgd2l0aCBhIGxpbmUKLQkJCQkgKiBicmVhayB0aGVuIHdlIHNob3VsZCBub3QgcHJpbnQgYSBwcmVmaXgKLQkJCQkgKiB0aGlzIHRpbWUgYXJvdW5kLgotCQkJCSAqLwotCQkJCWlmIChza2lwX3BmKSB7Ci0JCQkJCWIgKz0gcGYrMTsKKwkJCS8qCisJCQkgKiBBcHBlbmQgYSBzdWZmaXggdG8gZWFjaCBub25lbXB0eSBsaW5lIHRvIGNsZWFyIHRoZQorCQkJICogZW5kIG9mIHRoZSBzY3JlZW4gbGluZS4KKwkJCSAqCisJCQkgKiBUaGUgb3V0cHV0IGlzIGFjY3VtdWxhdGVkIGluIGEgYnVmZmVyIGFuZAorCQkJICogZWFjaCBsaW5lIGlzIHByaW50ZWQgdG8gc3RkZXJyIHVzaW5nCisJCQkgKiB3cml0ZSgyKSB0byBlbnN1cmUgaW50ZXItcHJvY2VzcyBhdG9taWNpdHkuCisJCQkgKi8KKwkJCXdoaWxlICgoYnJrID0gc3RycGJyayhiLCAiXG5cciIpKSkgeworCQkJCWludCBsaW5lbGVuID0gYnJrIC0gYjsKKworCQkJCWlmICghb3V0YnVmLmxlbikKKwkJCQkJc3RyYnVmX2FkZHN0cigmb3V0YnVmLCBQUkVGSVgpOworCQkJCWlmIChsaW5lbGVuID4gMCkgeworCQkJCQlzdHJidWZfYWRkZigmb3V0YnVmLCAiJS4qcyVzJWMiLAorCQkJCQkJICAgIGxpbmVsZW4sIGIsIHN1ZmZpeCwgKmJyayk7CiAJCQkJfSBlbHNlIHsKLQkJCQkJbGVuICs9IHBmKzE7Ci0JCQkJCWJyayArPSBwZisxOworCQkJCQlzdHJidWZfYWRkY2goJm91dGJ1ZiwgKmJyayk7CiAJCQkJfQorCQkJCXh3cml0ZSgyLCBvdXRidWYuYnVmLCBvdXRidWYubGVuKTsKKwkJCQlzdHJidWZfcmVzZXQoJm91dGJ1Zik7CiAKLQkJCQkvKiBMb29rIGZvciBhIGxpbmUgYnJlYWsuICovCi0JCQkJZm9yICg7OykgewotCQkJCQlicmsrKzsKLQkJCQkJaWYgKGJyayA+IGxlbikgewotCQkJCQkJYnJrID0gMDsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCWlmIChiW2Jyay0xXSA9PSAnXG4nIHx8Ci0JCQkJCSAgICBiW2Jyay0xXSA9PSAnXHInKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQorCQkJCWIgPSBicmsgKyAxOworCQkJfQogCi0JCQkJLyoKLQkJCQkgKiBMZXQncyBpbnNlcnQgYSBzdWZmaXggdG8gY2xlYXIgdGhlIGVuZAotCQkJCSAqIG9mIHRoZSBzY3JlZW4gbGluZSBpZiBhIGxpbmUgYnJlYWsgd2FzCi0JCQkJICogZm91bmQuICBBbHNvLCBpZiB3ZSBkb24ndCBza2lwIHRoZQotCQkJCSAqIHByZWZpeCwgdGhlbiBhIG5vbi1lbXB0eSBzdHJpbmcgbXVzdCBiZQotCQkJCSAqIHByZXNlbnQgdG9vLgotCQkJCSAqLwotCQkJCWlmIChicmsgPiAoc2tpcF9wZiA/IDAgOiAocGYrMSArIDEpKSkgewotCQkJCQljaGFyIHNhdmVbRklYX1NJWkVdOwotCQkJCQltZW1jcHkoc2F2ZSwgYiArIGJyaywgc2YpOwotCQkJCQliW2JyayArIHNmIC0gMV0gPSBiW2JyayAtIDFdOwotCQkJCQltZW1jcHkoYiArIGJyayAtIDEsIHN1ZmZpeCwgc2YpOwotCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiUuKnMiLCBicmsgKyBzZiwgYik7Ci0JCQkJCW1lbWNweShiICsgYnJrLCBzYXZlLCBzZik7Ci0JCQkJCWxlbiAtPSBicms7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaW50IGwgPSBicmsgPyBicmsgOiBsZW47Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiJS4qcyIsIGwsIGIpOwotCQkJCQlsZW4gLT0gbDsKLQkJCQl9Ci0KLQkJCQlza2lwX3BmID0gIWJyazsKLQkJCQltZW1tb3ZlKGJ1ZiArIHBmKzEsIGIgKyBicmssIGxlbik7Ci0JCQl9IHdoaWxlIChsZW4pOwotCQkJY29udGludWU7CisJCQlpZiAoKmIpCisJCQkJc3RyYnVmX2FkZGYoJm91dGJ1ZiwgIiVzJXMiLAorCQkJCQkgICAgb3V0YnVmLmxlbiA/ICIiIDogUFJFRklYLCBiKTsKKwkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQl3cml0ZV9vcl9kaWUob3V0LCBidWYgKyBwZisxLCBsZW4pOwotCQkJY29udGludWU7CisJCQl3cml0ZV9vcl9kaWUob3V0LCBidWYgKyAxLCBsZW4pOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBwcm90b2NvbCBlcnJvcjogYmFkIGJhbmQgIyVkXG4iLAotCQkJCW1lLCBiYW5kKTsKLQkJCXJldHVybiBTSURFQkFORF9QUk9UT0NPTF9FUlJPUjsKKwkJCXN0cmJ1Zl9hZGRmKCZvdXRidWYsICIlcyVzOiBwcm90b2NvbCBlcnJvcjogYmFkIGJhbmQgIyVkIiwKKwkJCQkgICAgb3V0YnVmLmxlbiA/ICJcbiIgOiAiIiwgbWUsIGJhbmQpOworCQkJcmV0dmFsID0gU0lERUJBTkRfUFJPVE9DT0xfRVJST1I7CisJCQlicmVhazsKIAkJfQogCX0KLQlyZXR1cm4gMDsKKworCWlmIChvdXRidWYubGVuKSB7CisJCXN0cmJ1Zl9hZGRjaCgmb3V0YnVmLCAnXG4nKTsKKwkJeHdyaXRlKDIsIG91dGJ1Zi5idWYsIG91dGJ1Zi5sZW4pOworCX0KKwlzdHJidWZfcmVsZWFzZSgmb3V0YnVmKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAvKgogICogZmQgaXMgY29ubmVjdGVkIHRvIHRoZSByZW1vdGUgc2lkZTsgc2VuZCB0aGUgc2lkZWJhbmQgZGF0YQogICogb3ZlciBtdWx0aXBsZXhlZCBwYWNrZXQgc3RyZWFtLgogICovCi1zc2l6ZV90IHNlbmRfc2lkZWJhbmQoaW50IGZkLCBpbnQgYmFuZCwgY29uc3QgY2hhciAqZGF0YSwgc3NpemVfdCBzeiwgaW50IHBhY2tldF9tYXgpCit2b2lkIHNlbmRfc2lkZWJhbmQoaW50IGZkLCBpbnQgYmFuZCwgY29uc3QgY2hhciAqZGF0YSwgc3NpemVfdCBzeiwgaW50IHBhY2tldF9tYXgpCiB7Ci0Jc3NpemVfdCBzc3ogPSBzejsKIAljb25zdCBjaGFyICpwID0gZGF0YTsKIAogCXdoaWxlIChzeikgewpAQCAtMTQ4LDUgKzEzMSw0IEBACiAJCXAgKz0gbjsKIAkJc3ogLT0gbjsKIAl9Ci0JcmV0dXJuIHNzejsKIH0KZGlmZiAtLWdpdCBhL3NpZGViYW5kLmggYi9zaWRlYmFuZC5oCmluZGV4IGU0NmJlZDAuLjdhODE0NmYgMTAwNjQ0Ci0tLSBhL3NpZGViYW5kLmgKKysrIGIvc2lkZWJhbmQuaApAQCAtNSw2ICs1LDYgQEAKICNkZWZpbmUgU0lERUJBTkRfUkVNT1RFX0VSUk9SIC0xCiAKIGludCByZWN2X3NpZGViYW5kKGNvbnN0IGNoYXIgKm1lLCBpbnQgaW5fc3RyZWFtLCBpbnQgb3V0KTsKLXNzaXplX3Qgc2VuZF9zaWRlYmFuZChpbnQgZmQsIGludCBiYW5kLCBjb25zdCBjaGFyICpkYXRhLCBzc2l6ZV90IHN6LCBpbnQgcGFja2V0X21heCk7Cit2b2lkIHNlbmRfc2lkZWJhbmQoaW50IGZkLCBpbnQgYmFuZCwgY29uc3QgY2hhciAqZGF0YSwgc3NpemVfdCBzeiwgaW50IHBhY2tldF9tYXgpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3N0cmJ1Zi5jIGIvc3RyYnVmLmMKaW5kZXggMWJhNjAwYi4uZjNiZDU3MSAxMDA2NDQKLS0tIGEvc3RyYnVmLmMKKysrIGIvc3RyYnVmLmMKQEAgLTE5Nyw2ICsxOTcsMTMgQEAKIAlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgbGVuKTsKIH0KIAordm9pZCBzdHJidWZfYWRkYnVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYjIpCit7CisJc3RyYnVmX2dyb3coc2IsIHNiMi0+bGVuKTsKKwltZW1jcHkoc2ItPmJ1ZiArIHNiLT5sZW4sIHNiMi0+YnVmLCBzYjItPmxlbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIHNiMi0+bGVuKTsKK30KKwogdm9pZCBzdHJidWZfYWRkZHVwKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLCBzaXplX3QgbGVuKQogewogCXN0cmJ1Zl9ncm93KHNiLCBsZW4pOwpkaWZmIC0tZ2l0IGEvc3RyYnVmLmggYi9zdHJidWYuaAppbmRleCA3OTg3NDA1Li5iYThkNWYxIDEwMDY0NAotLS0gYS9zdHJidWYuaAorKysgYi9zdHJidWYuaApAQCAtMjYzLDExICsyNjMsNyBAQAogLyoqCiAgKiBDb3B5IHRoZSBjb250ZW50cyBvZiBhbm90aGVyIGJ1ZmZlciBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG9uZS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHN0cmJ1Zl9hZGRidWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiMikKLXsKLQlzdHJidWZfZ3JvdyhzYiwgc2IyLT5sZW4pOwotCXN0cmJ1Zl9hZGQoc2IsIHNiMi0+YnVmLCBzYjItPmxlbik7Ci19CitleHRlcm4gdm9pZCBzdHJidWZfYWRkYnVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYjIpOwogCiAvKioKICAqIENvcHkgcGFydCBvZiB0aGUgYnVmZmVyIGZyb20gYSBnaXZlbiBwb3NpdGlvbiB0aWxsIGEgZ2l2ZW4gbGVuZ3RoIHRvIHRoZQpAQCAtMzc3LDYgKzM3Myw4IEBACiAvKioKICAqIFJlYWQgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSwgc3BlY2lmaWVkIGJ5IGl0cyBwYXRoLiBUaGUgdGhpcmQgYXJndW1lbnQKICAqIGNhbiBiZSB1c2VkIHRvIGdpdmUgYSBoaW50IGFib3V0IHRoZSBmaWxlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBvciBhIG5lZ2F0aXZlIHZhbHVlIGlmIHNvbWUgZXJyb3IKKyAqIG9jY3VycmVkIHdoaWxlIG9wZW5pbmcgb3IgcmVhZGluZyB0aGUgZmlsZS4KICAqLwogZXh0ZXJuIHNzaXplX3Qgc3RyYnVmX3JlYWRfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpOwogCmRpZmYgLS1naXQgYS9zdWJtb2R1bGUtY29uZmlnLmMgYi9zdWJtb2R1bGUtY29uZmlnLmMKaW5kZXggZGViYWIyOS4uMDk4MDg1YiAxMDA2NDQKLS0tIGEvc3VibW9kdWxlLWNvbmZpZy5jCisrKyBiL3N1Ym1vZHVsZS1jb25maWcuYwpAQCAtNTksNiArNTksNyBAQAogewogCWZyZWUoKHZvaWQgKikgZW50cnktPmNvbmZpZy0+cGF0aCk7CiAJZnJlZSgodm9pZCAqKSBlbnRyeS0+Y29uZmlnLT5uYW1lKTsKKwlmcmVlKCh2b2lkICopIGVudHJ5LT5jb25maWctPmJyYW5jaCk7CiAJZnJlZSgodm9pZCAqKSBlbnRyeS0+Y29uZmlnLT51cGRhdGVfc3RyYXRlZ3kuY29tbWFuZCk7CiAJZnJlZShlbnRyeS0+Y29uZmlnKTsKIH0KQEAgLTE5OSw2ICsyMDAsOCBAQAogCXN1Ym1vZHVsZS0+dXBkYXRlX3N0cmF0ZWd5LmNvbW1hbmQgPSBOVUxMOwogCXN1Ym1vZHVsZS0+ZmV0Y2hfcmVjdXJzZSA9IFJFQ1VSU0VfU1VCTU9EVUxFU19OT05FOwogCXN1Ym1vZHVsZS0+aWdub3JlID0gTlVMTDsKKwlzdWJtb2R1bGUtPmJyYW5jaCA9IE5VTEw7CisJc3VibW9kdWxlLT5yZWNvbW1lbmRfc2hhbGxvdyA9IC0xOwogCiAJaGFzaGNweShzdWJtb2R1bGUtPmdpdG1vZHVsZXNfc2hhMSwgZ2l0bW9kdWxlc19zaGExKTsKIApAQCAtMzUzLDYgKzM1NiwyMSBAQAogCQllbHNlIGlmIChwYXJzZV9zdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5KHZhbHVlLAogCQkJICZzdWJtb2R1bGUtPnVwZGF0ZV9zdHJhdGVneSkgPCAwKQogCQkJCWRpZShfKCJpbnZhbGlkIHZhbHVlIGZvciAlcyIpLCB2YXIpOworCX0gZWxzZSBpZiAoIXN0cmNtcChpdGVtLmJ1ZiwgInNoYWxsb3ciKSkgeworCQlpZiAoIW1lLT5vdmVyd3JpdGUgJiYgc3VibW9kdWxlLT5yZWNvbW1lbmRfc2hhbGxvdyAhPSAtMSkKKwkJCXdhcm5fbXVsdGlwbGVfY29uZmlnKG1lLT5jb21taXRfc2hhMSwgc3VibW9kdWxlLT5uYW1lLAorCQkJCQkgICAgICJzaGFsbG93Iik7CisJCWVsc2UKKwkJCXN1Ym1vZHVsZS0+cmVjb21tZW5kX3NoYWxsb3cgPQorCQkJCWdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoaXRlbS5idWYsICJicmFuY2giKSkgeworCQlpZiAoIW1lLT5vdmVyd3JpdGUgJiYgc3VibW9kdWxlLT5icmFuY2gpCisJCQl3YXJuX211bHRpcGxlX2NvbmZpZyhtZS0+Y29tbWl0X3NoYTEsIHN1Ym1vZHVsZS0+bmFtZSwKKwkJCQkJICAgICAiYnJhbmNoIik7CisJCWVsc2UgeworCQkJZnJlZSgodm9pZCAqKXN1Ym1vZHVsZS0+YnJhbmNoKTsKKwkJCXN1Ym1vZHVsZS0+YnJhbmNoID0geHN0cmR1cCh2YWx1ZSk7CisJCX0KIAl9CiAKIAlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CkBAIC0zNjIsMjEgKzM4MCwyMCBAQAogfQogCiBzdGF0aWMgaW50IGdpdG1vZHVsZV9zaGExX2Zyb21fY29tbWl0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9zaGExLAotCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmdpdG1vZHVsZXNfc2hhMSkKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpnaXRtb2R1bGVzX3NoYTEsCisJCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqcmV2KQogewotCXN0cnVjdCBzdHJidWYgcmV2ID0gU1RSQlVGX0lOSVQ7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoaXNfbnVsbF9zaGExKGNvbW1pdF9zaGExKSkgewotCQloYXNoY3B5KGdpdG1vZHVsZXNfc2hhMSwgbnVsbF9zaGExKTsKKwkJaGFzaGNscihnaXRtb2R1bGVzX3NoYTEpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlzdHJidWZfYWRkZigmcmV2LCAiJXM6LmdpdG1vZHVsZXMiLCBzaGExX3RvX2hleChjb21taXRfc2hhMSkpOwotCWlmIChnZXRfc2hhMShyZXYuYnVmLCBnaXRtb2R1bGVzX3NoYTEpID49IDApCisJc3RyYnVmX2FkZGYocmV2LCAiJXM6LmdpdG1vZHVsZXMiLCBzaGExX3RvX2hleChjb21taXRfc2hhMSkpOworCWlmIChnZXRfc2hhMShyZXYtPmJ1ZiwgZ2l0bW9kdWxlc19zaGExKSA+PSAwKQogCQlyZXQgPSAxOwogCi0Jc3RyYnVmX3JlbGVhc2UoJnJldik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzkwLDcgKzQwNyw3IEBACiB7CiAJc3RydWN0IHN0cmJ1ZiByZXYgPSBTVFJCVUZfSU5JVDsKIAl1bnNpZ25lZCBsb25nIGNvbmZpZ19zaXplOwotCWNoYXIgKmNvbmZpZzsKKwljaGFyICpjb25maWcgPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZSA9IE5VTEw7CkBAIC00MTEsOCArNDI4LDggQEAKIAkJcmV0dXJuIGVudHJ5LT5jb25maWc7CiAJfQogCi0JaWYgKCFnaXRtb2R1bGVfc2hhMV9mcm9tX2NvbW1pdChjb21taXRfc2hhMSwgc2hhMSkpCi0JCXJldHVybiBOVUxMOworCWlmICghZ2l0bW9kdWxlX3NoYTFfZnJvbV9jb21taXQoY29tbWl0X3NoYTEsIHNoYTEsICZyZXYpKQorCQlnb3RvIG91dDsKIAogCXN3aXRjaCAobG9va3VwX3R5cGUpIHsKIAljYXNlIGxvb2t1cF9uYW1lOgpAQCAtNDIzLDI0ICs0NDAsMjAgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChzdWJtb2R1bGUpCi0JCXJldHVybiBzdWJtb2R1bGU7CisJCWdvdG8gb3V0OwogCiAJY29uZmlnID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZjb25maWdfc2l6ZSk7Ci0JaWYgKCFjb25maWcpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKHR5cGUgIT0gT0JKX0JMT0IpIHsKLQkJZnJlZShjb25maWcpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJaWYgKCFjb25maWcgfHwgdHlwZSAhPSBPQkpfQkxPQikKKwkJZ290byBvdXQ7CiAKIAkvKiBmaWxsIHRoZSBzdWJtb2R1bGUgY29uZmlnIGludG8gdGhlIGNhY2hlICovCiAJcGFyYW1ldGVyLmNhY2hlID0gY2FjaGU7CiAJcGFyYW1ldGVyLmNvbW1pdF9zaGExID0gY29tbWl0X3NoYTE7CiAJcGFyYW1ldGVyLmdpdG1vZHVsZXNfc2hhMSA9IHNoYTE7CiAJcGFyYW1ldGVyLm92ZXJ3cml0ZSA9IDA7Ci0JZ2l0X2NvbmZpZ19mcm9tX21lbShwYXJzZV9jb25maWcsICJzdWJtb2R1bGUtYmxvYiIsIHJldi5idWYsCisJZ2l0X2NvbmZpZ19mcm9tX21lbShwYXJzZV9jb25maWcsIENPTkZJR19PUklHSU5fU1VCTU9EVUxFX0JMT0IsIHJldi5idWYsCiAJCQljb25maWcsIGNvbmZpZ19zaXplLCAmcGFyYW1ldGVyKTsKKwlzdHJidWZfcmVsZWFzZSgmcmV2KTsKIAlmcmVlKGNvbmZpZyk7CiAKIAlzd2l0Y2ggKGxvb2t1cF90eXBlKSB7CkBAIC00NTEsNiArNDY0LDExIEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIE5VTEw7CiAJfQorCitvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnJldik7CisJZnJlZShjb25maWcpOworCXJldHVybiBzdWJtb2R1bGU7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpjb25maWdfZnJvbV9wYXRoKHN0cnVjdCBzdWJtb2R1bGVfY2FjaGUgKmNhY2hlLApkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLWNvbmZpZy5oIGIvc3VibW9kdWxlLWNvbmZpZy5oCmluZGV4IGU0ODU3ZjUuLmQwNWM1NDIgMTAwNjQ0Ci0tLSBhL3N1Ym1vZHVsZS1jb25maWcuaAorKysgYi9zdWJtb2R1bGUtY29uZmlnLmgKQEAgLTE1LDkgKzE1LDExIEBACiAJY29uc3QgY2hhciAqdXJsOwogCWludCBmZXRjaF9yZWN1cnNlOwogCWNvbnN0IGNoYXIgKmlnbm9yZTsKKwljb25zdCBjaGFyICpicmFuY2g7CiAJc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kgdXBkYXRlX3N0cmF0ZWd5OwogCS8qIHRoZSBzaGExIGJsb2IgaWQgb2YgdGhlIHJlc3BvbnNpYmxlIC5naXRtb2R1bGVzIGZpbGUgKi8KIAl1bnNpZ25lZCBjaGFyIGdpdG1vZHVsZXNfc2hhMVsyMF07CisJaW50IHJlY29tbWVuZF9zaGFsbG93OwogfTsKIAogaW50IHBhcnNlX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcoY29uc3QgY2hhciAqb3B0LCBjb25zdCBjaGFyICphcmcpOwpkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLmMgYi9zdWJtb2R1bGUuYwppbmRleCA0NTMyYjExLi4xYjVjZGZiIDEwMDY0NAotLS0gYS9zdWJtb2R1bGUuYworKysgYi9zdWJtb2R1bGUuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBzdGF0aWMgaW50IGNvbmZpZ19mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXMgPSBSRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EOwogc3RhdGljIGludCBwYXJhbGxlbF9qb2JzID0gMTsKLXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgY2hhbmdlZF9zdWJtb2R1bGVfcGF0aHM7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGNoYW5nZWRfc3VibW9kdWxlX3BhdGhzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWRfZmV0Y2hfcmVmX3RpcHM7CiBzdGF0aWMgc3RydWN0IHNoYTFfYXJyYXkgcmVmX3RpcHNfYmVmb3JlX2ZldGNoOwogc3RhdGljIHN0cnVjdCBzaGExX2FycmF5IHJlZl90aXBzX2FmdGVyX2ZldGNoOwpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CiAJCWlmICghU19JU0dJVExJTksocC0+dHdvLT5tb2RlKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoc3VibW9kdWxlX25lZWRzX3B1c2hpbmcocC0+dHdvLT5wYXRoLCBwLT50d28tPnNoYTEpKQorCQlpZiAoc3VibW9kdWxlX25lZWRzX3B1c2hpbmcocC0+dHdvLT5wYXRoLCBwLT50d28tPm9pZC5oYXNoKSkKIAkJCXN0cmluZ19saXN0X2luc2VydChuZWVkc19wdXNoaW5nLCBwLT50d28tPnBhdGgpOwogCX0KIH0KQEAgLTU3Nyw3ICs1NzcsNyBAQAogCQkJICogYmVpbmcgbW92ZWQgYXJvdW5kLiAqLwogCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnBhdGg7CiAJCQlwYXRoID0gdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKCZjaGFuZ2VkX3N1Ym1vZHVsZV9wYXRocywgcC0+dHdvLT5wYXRoKTsKLQkJCWlmICghcGF0aCAmJiAhaXNfc3VibW9kdWxlX2NvbW1pdF9wcmVzZW50KHAtPnR3by0+cGF0aCwgcC0+dHdvLT5zaGExKSkKKwkJCWlmICghcGF0aCAmJiAhaXNfc3VibW9kdWxlX2NvbW1pdF9wcmVzZW50KHAtPnR3by0+cGF0aCwgcC0+dHdvLT5vaWQuaGFzaCkpCiAJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZjaGFuZ2VkX3N1Ym1vZHVsZV9wYXRocywgeHN0cmR1cChwLT50d28tPnBhdGgpKTsKIAkJfSBlbHNlIHsKIAkJCS8qIFN1Ym1vZHVsZSBpcyBuZXcgb3Igd2FzIG1vdmVkIGhlcmUgKi8KZGlmZiAtLWdpdCBhL3QvUkVBRE1FIGIvdC9SRUFETUUKaW5kZXggNzZhMGRhYS4uMGY3NjRjMCAxMDA2NDQKLS0tIGEvdC9SRUFETUUKKysrIGIvdC9SRUFETUUKQEAgLTI2NSw3ICsyNjUsNyBAQAogICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nMS00ICEzJwogCiB3aWxsIHJ1biB0ZXN0cyAxLCAyLCBhbmQgNC4gIEl0ZW1zIHRoYXQgY29tZXMgbGF0ZXIgaGF2ZSBoaWdoZXIKLXByZWNlbmRlbmNlLiAgSXQgbWVhbnMgdGhhdCB0aGlzOgorcHJlY2VkZW5jZS4gIEl0IG1lYW5zIHRoYXQgdGhpczoKIAogICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nITMgMS00JwogCmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWNobXRpbWUuYyBiL3QvaGVscGVyL3Rlc3QtY2htdGltZS5jCmluZGV4IGRmZThhODMuLmU3NjAyNTYgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtY2htdGltZS5jCisrKyBiL3QvaGVscGVyL3Rlc3QtY2htdGltZS5jCkBAIC01Niw3ICs1Niw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCXN0YXRpYyBpbnQgdmVyYm9zZTsKIApkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1jb25maWcuYyBiL3QvaGVscGVyL3Rlc3QtY29uZmlnLmMKaW5kZXggNmE3NzU1Mi4uM2M2ZDA4YyAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1jb25maWcuYworKysgYi90L2hlbHBlci90ZXN0LWNvbmZpZy5jCkBAIC0yNSw2ICsyNSw5IEBACiAgKiAJCQkJYXNjZW5kaW5nIG9yZGVyIG9mIHByaW9yaXR5IGZyb20gYSBjb25maWdfc2V0CiAgKiAJCQkJY29uc3RydWN0ZWQgZnJvbSBmaWxlcyBlbnRlcmVkIGFzIGFyZ3VtZW50cy4KICAqCisgKiBpdGVyYXRlIC0+IGl0ZXJhdGUgb3ZlciBhbGwgdmFsdWVzIHVzaW5nIGdpdF9jb25maWcoKSwgYW5kIHByaW50IHNvbWUKKyAqICAgICAgICAgICAgZGF0YSBmb3IgZWFjaAorICoKICAqIEV4YW1wbGVzOgogICoKICAqIFRvIHByaW50IHRoZSB2YWx1ZSB3aXRoIGhpZ2hlc3QgcHJpb3JpdHkgZm9yIGtleSAiZm9vLmJBciBCYXoucm9jayI6CkBAIC0zMiw4ICszNSwzOCBAQAogICoKICAqLwogCitzdGF0aWMgY29uc3QgY2hhciAqc2NvcGVfbmFtZShlbnVtIGNvbmZpZ19zY29wZSBzY29wZSkKK3sKKwlzd2l0Y2ggKHNjb3BlKSB7CisJY2FzZSBDT05GSUdfU0NPUEVfU1lTVEVNOgorCQlyZXR1cm4gInN5c3RlbSI7CisJY2FzZSBDT05GSUdfU0NPUEVfR0xPQkFMOgorCQlyZXR1cm4gImdsb2JhbCI7CisJY2FzZSBDT05GSUdfU0NPUEVfUkVQTzoKKwkJcmV0dXJuICJyZXBvIjsKKwljYXNlIENPTkZJR19TQ09QRV9DTURMSU5FOgorCQlyZXR1cm4gImNtZGxpbmUiOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biI7CisJfQorfQorc3RhdGljIGludCBpdGVyYXRlX2NiKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJc3RhdGljIGludCBucjsKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorCWlmIChucisrKQorCQlwdXRjaGFyKCdcbicpOworCisJcHJpbnRmKCJrZXk9JXNcbiIsIHZhcik7CisJcHJpbnRmKCJ2YWx1ZT0lc1xuIiwgdmFsdWUgPyB2YWx1ZSA6ICIobnVsbCkiKTsKKwlwcmludGYoIm9yaWdpbj0lc1xuIiwgY3VycmVudF9jb25maWdfb3JpZ2luX3R5cGUoKSk7CisJcHJpbnRmKCJuYW1lPSVzXG4iLCBjdXJyZW50X2NvbmZpZ19uYW1lKCkpOworCXByaW50Zigic2NvcGU9JXNcbiIsIHNjb3BlX25hbWUoY3VycmVudF9jb25maWdfc2NvcGUoKSkpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGksIHZhbDsKIAljb25zdCBjaGFyICp2OwpAQCAtMTM0LDYgKzE2Nyw5IEBACiAJCQlwcmludGYoIlZhbHVlIG5vdCBmb3VuZCBmb3IgXCIlc1wiXG4iLCBhcmd2WzJdKTsKIAkJCWdvdG8gZXhpdDE7CiAJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIml0ZXJhdGUiKSkgeworCQlnaXRfY29uZmlnKGl0ZXJhdGVfY2IsIE5VTEwpOworCQlnb3RvIGV4aXQwOwogCX0KIAogCWRpZSgiJXM6IFBsZWFzZSBjaGVjayB0aGUgc3ludGF4IGFuZCB0aGUgZnVuY3Rpb24gbmFtZSIsIGFyZ3ZbMF0pOwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1jdHlwZS5jIGIvdC9oZWxwZXIvdGVzdC1jdHlwZS5jCmluZGV4IDcwN2E4MjEuLmJiNzJjNDcgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtY3R5cGUuYworKysgYi90L2hlbHBlci90ZXN0LWN0eXBlLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgTE9XRVIgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgogI2RlZmluZSBVUFBFUiAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJVEVTVF9DTEFTUyhpc2RpZ2l0LCBESUdJVCk7CiAJVEVTVF9DTEFTUyhpc3NwYWNlLCAiIFxuXHJcdCIpOwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1kYXRlLmMgYi90L2hlbHBlci90ZXN0LWRhdGUuYwppbmRleCA2M2YzNzM1Li41MDYwNTRiIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LWRhdGUuYworKysgYi90L2hlbHBlci90ZXN0LWRhdGUuYwpAQCAtMSwxMSArMSwxMiBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9tc2cgPSAiXG4iCi0iICB0ZXN0LWRhdGUgc2hvdyBbdGltZV90XS4uLlxuIgorIiAgdGVzdC1kYXRlIHJlbGF0aXZlIFt0aW1lX3RdLi4uXG4iCisiICB0ZXN0LWRhdGUgc2hvdzo8Zm9ybWF0PiBbdGltZV90XS4uLlxuIgogIiAgdGVzdC1kYXRlIHBhcnNlIFtkYXRlXS4uLlxuIgogIiAgdGVzdC1kYXRlIGFwcHJveGlkYXRlIFtkYXRlXS4uLlxuIjsKIAotc3RhdGljIHZvaWQgc2hvd19kYXRlcyhjaGFyICoqYXJndiwgc3RydWN0IHRpbWV2YWwgKm5vdykKK3N0YXRpYyB2b2lkIHNob3dfcmVsYXRpdmVfZGF0ZXMoY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCB0aW1ldmFsICpub3cpCiB7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIApAQCAtMTcsNyArMTgsMzAgQEAKIAlzdHJidWZfcmVsZWFzZSgmYnVmKTsKIH0KIAotc3RhdGljIHZvaWQgcGFyc2VfZGF0ZXMoY2hhciAqKmFyZ3YsIHN0cnVjdCB0aW1ldmFsICpub3cpCitzdGF0aWMgdm9pZCBzaG93X2RhdGVzKGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpmb3JtYXQpCit7CisJc3RydWN0IGRhdGVfbW9kZSBtb2RlOworCisJcGFyc2VfZGF0ZV9mb3JtYXQoZm9ybWF0LCAmbW9kZSk7CisJZm9yICg7ICphcmd2OyBhcmd2KyspIHsKKwkJY2hhciAqYXJnOworCQl0aW1lX3QgdDsKKwkJaW50IHR6OworCisJCS8qCisJCSAqIERvIG5vdCB1c2Ugb3VyIG5vcm1hbCB0aW1lc3RhbXAgcGFyc2luZyBoZXJlLCBhcyB0aGUgcG9pbnQKKwkJICogaXMgdG8gdGVzdCB0aGUgZm9ybWF0dGluZyBjb2RlIGluIGlzb2xhdGlvbi4KKwkJICovCisJCXQgPSBzdHJ0b2woKmFyZ3YsICZhcmcsIDEwKTsKKwkJd2hpbGUgKCphcmcgPT0gJyAnKQorCQkJYXJnKys7CisJCXR6ID0gYXRvaShhcmcpOworCisJCXByaW50ZigiJXMgLT4gJXNcbiIsICphcmd2LCBzaG93X2RhdGUodCwgdHosICZtb2RlKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXJzZV9kYXRlcyhjb25zdCBjaGFyICoqYXJndiwgc3RydWN0IHRpbWV2YWwgKm5vdykKIHsKIAlzdHJ1Y3Qgc3RyYnVmIHJlc3VsdCA9IFNUUkJVRl9JTklUOwogCkBAIC0zNiw3ICs2MCw3IEBACiAJc3RyYnVmX3JlbGVhc2UoJnJlc3VsdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlX2FwcHJveGlkYXRlKGNoYXIgKiphcmd2LCBzdHJ1Y3QgdGltZXZhbCAqbm93KQorc3RhdGljIHZvaWQgcGFyc2VfYXBwcm94aWRhdGUoY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCB0aW1ldmFsICpub3cpCiB7CiAJZm9yICg7ICphcmd2OyBhcmd2KyspIHsKIAkJdGltZV90IHQ7CkBAIC00NSw3ICs2OSw3IEBACiAJfQogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAljb25zdCBjaGFyICp4OwpAQCAtNjEsOCArODUsMTAgQEAKIAlhcmd2Kys7CiAJaWYgKCEqYXJndikKIAkJdXNhZ2UodXNhZ2VfbXNnKTsKLQlpZiAoIXN0cmNtcCgqYXJndiwgInNob3ciKSkKLQkJc2hvd19kYXRlcyhhcmd2KzEsICZub3cpOworCWlmICghc3RyY21wKCphcmd2LCAicmVsYXRpdmUiKSkKKwkJc2hvd19yZWxhdGl2ZV9kYXRlcyhhcmd2KzEsICZub3cpOworCWVsc2UgaWYgKHNraXBfcHJlZml4KCphcmd2LCAic2hvdzoiLCAmeCkpCisJCXNob3dfZGF0ZXMoYXJndisxLCB4KTsKIAllbHNlIGlmICghc3RyY21wKCphcmd2LCAicGFyc2UiKSkKIAkJcGFyc2VfZGF0ZXMoYXJndisxLCAmbm93KTsKIAllbHNlIGlmICghc3RyY21wKCphcmd2LCAiYXBwcm94aWRhdGUiKSkKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZGVsdGEuYyBiL3QvaGVscGVyL3Rlc3QtZGVsdGEuYwppbmRleCA0NTk1Y2Q2Li41OTkzN2RjIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LWRlbHRhLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1kZWx0YS5jCkBAIC0xNSw3ICsxNSw3IEBACiBzdGF0aWMgY29uc3QgY2hhciB1c2FnZV9zdHJbXSA9CiAJInRlc3QtZGVsdGEgKC1kfC1wKSA8ZnJvbV9maWxlPiA8ZGF0YV9maWxlPiA8b3V0X2ZpbGU+IjsKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGZkOwogCXN0cnVjdCBzdGF0IHN0OwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1kdW1wLWNhY2hlLXRyZWUuYyBiL3QvaGVscGVyL3Rlc3QtZHVtcC1jYWNoZS10cmVlLmMKaW5kZXggYmI1M2MwYS4uNDRmMzI5MCAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1kdW1wLWNhY2hlLXRyZWUuYworKysgYi90L2hlbHBlci90ZXN0LWR1bXAtY2FjaGUtdHJlZS5jCkBAIC01NCw3ICs1NCw3IEBACiAJcmV0dXJuIGVycnM7CiB9CiAKLWludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoraW50IGNtZF9tYWluKGludCBhYywgY29uc3QgY2hhciAqKmF2KQogewogCXN0cnVjdCBpbmRleF9zdGF0ZSBpc3RhdGU7CiAJc3RydWN0IGNhY2hlX3RyZWUgKmFub3RoZXIgPSBjYWNoZV90cmVlKCk7CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWR1bXAtc3BsaXQtaW5kZXguYyBiL3QvaGVscGVyL3Rlc3QtZHVtcC1zcGxpdC1pbmRleC5jCmluZGV4IDg2MWQyOGMuLmQxNjg5MjQgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtZHVtcC1zcGxpdC1pbmRleC5jCisrKyBiL3QvaGVscGVyL3Rlc3QtZHVtcC1zcGxpdC1pbmRleC5jCkBAIC03LDcgKzcsNyBAQAogCXByaW50ZigiICVkIiwgKGludClwb3MpOwogfQogCi1pbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK2ludCBjbWRfbWFpbihpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKIHsKIAlzdHJ1Y3Qgc3BsaXRfaW5kZXggKnNpOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZS5jIGIvdC9oZWxwZXIvdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZS5jCmluZGV4IDBhMWMyODUuLjUwMTEyY2MgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUuYworKysgYi90L2hlbHBlci90ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAlzdHJidWZfc2V0bGVuKGJhc2UsIGxlbik7CiB9CiAKLWludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoraW50IGNtZF9tYWluKGludCBhYywgY29uc3QgY2hhciAqKmF2KQogewogCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnVjOwogCXN0cnVjdCBzdHJidWYgYmFzZSA9IFNUUkJVRl9JTklUOwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1mYWtlLXNzaC5jIGIvdC9oZWxwZXIvdGVzdC1mYWtlLXNzaC5jCmluZGV4IDk4MGRlMjEuLjEyYmVlZTkgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtZmFrZS1zc2guYworKysgYi90L2hlbHBlci90ZXN0LWZha2Utc3NoLmMKQEAgLTIsNyArMiw3IEBACiAjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKICNpbmNsdWRlICJzdHJidWYuaCIKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAljb25zdCBjaGFyICp0cmFzaF9kaXJlY3RvcnkgPSBnZXRlbnYoIlRSQVNIX0RJUkVDVE9SWSIpOwogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWdlbnJhbmRvbS5jIGIvdC9oZWxwZXIvdGVzdC1nZW5yYW5kb20uYwppbmRleCA1NDgyNGQwLi44ZDExZDIyIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LWdlbnJhbmRvbS5jCisrKyBiL3QvaGVscGVyL3Rlc3QtZ2VucmFuZG9tLmMKQEAgLTYsNyArNiw3IEBACiAKICNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJdW5zaWduZWQgbG9uZyBjb3VudCwgbmV4dCA9IDA7CiAJdW5zaWduZWQgY2hhciAqYzsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtaGFzaG1hcC5jIGIvdC9oZWxwZXIvdGVzdC1oYXNobWFwLmMKaW5kZXggY2MyODkxZC4uN2FhOTQ0MCAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1oYXNobWFwLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1oYXNobWFwLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogICoKICAqIHBlcmZoYXNobWFwIG1ldGhvZCByb3VuZHMgLT4gdGVzdCBoYXNobWFwLltjaF0gcGVyZm9ybWFuY2UKICAqLwotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJY2hhciBsaW5lWzEwMjRdOwogCXN0cnVjdCBoYXNobWFwIG1hcDsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtaW5kZXgtdmVyc2lvbi5jIGIvdC9oZWxwZXIvdGVzdC1pbmRleC12ZXJzaW9uLmMKaW5kZXggMDVkNDY5OS4uZjU2OWY2YiAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1pbmRleC12ZXJzaW9uLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1pbmRleC12ZXJzaW9uLmMKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgY2FjaGVfaGVhZGVyIGhkcjsKIAlpbnQgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtbGluZS1idWZmZXIuYyBiL3QvaGVscGVyL3Rlc3QtbGluZS1idWZmZXIuYwppbmRleCAxZTU4ZjA0Li44MTU3NWZlIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LWxpbmUtYnVmZmVyLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1saW5lLWJ1ZmZlci5jCkBAIC01MCw3ICs1MCw3IEBACiAJaGFuZGxlX2NvbW1hbmQobGluZSwgYXJnICsgMSwgc3RkaW5fYnVmKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IGxpbmVfYnVmZmVyIHN0ZGluX2J1ZiA9IExJTkVfQlVGRkVSX0lOSVQ7CiAJc3RydWN0IGxpbmVfYnVmZmVyIGZpbGVfYnVmID0gTElORV9CVUZGRVJfSU5JVDsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtbWF0Y2gtdHJlZXMuYyBiL3QvaGVscGVyL3Rlc3QtbWF0Y2gtdHJlZXMuYwppbmRleCBkNDQ2YjhlLi5lOTM5NTAyIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LW1hdGNoLXRyZWVzLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1tYXRjaC10cmVlcy5jCkBAIC0xLDcgKzEsNyBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAidHJlZS5oIgogCi1pbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK2ludCBjbWRfbWFpbihpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKIHsKIAlzdHJ1Y3Qgb2JqZWN0X2lkIGhhc2gxLCBoYXNoMiwgc2hpZnRlZDsKIAlzdHJ1Y3QgdHJlZSAqb25lLCAqdHdvOwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1tZXJnZXNvcnQuYyBiL3QvaGVscGVyL3Rlc3QtbWVyZ2Vzb3J0LmMKaW5kZXggZWEzYjk1OS4uMzM1Y2Y2YiAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1tZXJnZXNvcnQuYworKysgYi90L2hlbHBlci90ZXN0LW1lcmdlc29ydC5jCkBAIC0yMiw3ICsyMiw3IEBACiAJcmV0dXJuIHN0cmNtcCh4LT50ZXh0LCB5LT50ZXh0KTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgbGluZSAqbGluZSwgKnAgPSBOVUxMLCAqbGluZXMgPSBOVUxMOwogCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtbWt0ZW1wLmMgYi90L2hlbHBlci90ZXN0LW1rdGVtcC5jCmluZGV4IGM4YzU0MjEuLjg5ZDliMmYgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtbWt0ZW1wLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1ta3RlbXAuYwpAQCAtMyw3ICszLDcgQEAKICAqLwogI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlpZiAoYXJnYyAhPSAyKQogCQl1c2FnZSgiRXhwZWN0ZWQgMSBwYXJhbWV0ZXIgZGVmaW5pbmcgdGhlIHRlbXBvcmFyeSBmaWxlIHRlbXBsYXRlIik7CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXBhcnNlLW9wdGlvbnMuYyBiL3QvaGVscGVyL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCmluZGV4IDhhMTIzNWQuLmEwMTQzMGMgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCisrKyBiL3QvaGVscGVyL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCkBAIC0xMiw3ICsxMiw3IEBACiBzdGF0aWMgY2hhciAqc3RyaW5nID0gTlVMTDsKIHN0YXRpYyBjaGFyICpmaWxlID0gTlVMTDsKIHN0YXRpYyBpbnQgYW1iaWd1b3VzOwotc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0Oworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKIAogc3RhdGljIHN0cnVjdCB7CiAJaW50IGNhbGxlZDsKQEAgLTk0LDcgKzk0LDcgQEAKIAlzdHJidWZfcmVsZWFzZSgmYnVmKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAljb25zdCBjaGFyICpwcmVmaXggPSAicHJlZml4LyI7CiAJY29uc3QgY2hhciAqdXNhZ2VbXSA9IHsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcGF0aC11dGlscy5jIGIvdC9oZWxwZXIvdGVzdC1wYXRoLXV0aWxzLmMKaW5kZXggYmE4MDViMy4uMWViZTBmNyAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1wYXRoLXV0aWxzLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1wYXRoLXV0aWxzLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCXsgTlVMTCwgICAgICAgICAgICAgIE5VTEwgICAgIH0KIH07CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJaWYgKGFyZ2MgPT0gMyAmJiAhc3RyY21wKGFyZ3ZbMV0sICJub3JtYWxpemVfcGF0aF9jb3B5IikpIHsKIAkJY2hhciAqYnVmID0geG1hbGxvY3ooc3RybGVuKGFyZ3ZbMl0pKTsKQEAgLTIxMyw3ICsyMTMsNyBAQAogCX0KIAogCWlmIChhcmdjID49IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAicHJlZml4X3BhdGgiKSkgewotCQljaGFyICpwcmVmaXggPSBhcmd2WzJdOworCQljb25zdCBjaGFyICpwcmVmaXggPSBhcmd2WzJdOwogCQlpbnQgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOwogCQlpbnQgbm9uZ2l0X29rOwogCQlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0X29rKTsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcHJpby1xdWV1ZS5jIGIvdC9oZWxwZXIvdGVzdC1wcmlvLXF1ZXVlLmMKaW5kZXggN2JlNzJmMC4uYWU1OGZmZiAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1wcmlvLXF1ZXVlLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1wcmlvLXF1ZXVlLmMKQEAgLTE2LDcgKzE2LDcgQEAKIAlmcmVlKHYpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCXN0cnVjdCBwcmlvX3F1ZXVlIHBxID0geyBpbnRjbXAgfTsKIApkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1yZWFkLWNhY2hlLmMgYi90L2hlbHBlci90ZXN0LXJlYWQtY2FjaGUuYwppbmRleCBiMjViY2YxLi4yYTc5OTBlIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LXJlYWQtY2FjaGUuYworKysgYi90L2hlbHBlci90ZXN0LXJlYWQtY2FjaGUuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogCi1pbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlpbnQgaSwgY250ID0gMTsKIAlpZiAoYXJnYyA9PSAyKQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1yZWdleC5jIGIvdC9oZWxwZXIvdGVzdC1yZWdleC5jCmluZGV4IDBkYzU5OGUuLmI1ZWE4YTkgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtcmVnZXguYworKysgYi90L2hlbHBlci90ZXN0LXJlZ2V4LmMKQEAgLTEsNiArMSwyMyBAQAogI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImdldHRleHQuaCIKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorc3RydWN0IHJlZ19mbGFnIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBmbGFnOworfTsKKworc3RhdGljIHN0cnVjdCByZWdfZmxhZyByZWdfZmxhZ3NbXSA9IHsKKwl7ICJFWFRFTkRFRCIsCSBSRUdfRVhURU5ERUQJfSwKKwl7ICJORVdMSU5FIiwJIFJFR19ORVdMSU5FCX0sCisJeyAiSUNBU0UiLAkgUkVHX0lDQVNFCX0sCisJeyAiTk9UQk9MIiwJIFJFR19OT1RCT0wJfSwKKyNpZmRlZiBSRUdfU1RBUlRFTkQKKwl7ICJTVEFSVEVORCIsCSBSRUdfU1RBUlRFTkQJfSwKKyNlbmRpZgorCXsgTlVMTCwgMCB9Cit9OworCitzdGF0aWMgaW50IHRlc3RfcmVnZXhfYnVnKHZvaWQpCiB7CiAJY2hhciAqcGF0ID0gIltePXt9IFx0XSsiOwogCWNoYXIgKnN0ciA9ICI9e31cbmZyZWQiOwpAQCAtMTYsNSArMzMsNDMgQEAKIAlpZiAobVswXS5ybV9zbyA9PSAzKSAvKiBtYXRjaGVzICdcbicgd2hlbiBpdCBzaG91bGQgbm90ICovCiAJCWRpZSgicmVnZXggYnVnIGNvbmZpcm1lZDogcmUtYnVpbGQgZ2l0IHdpdGggTk9fUkVHRVg9MSIpOwogCi0JZXhpdCgwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpwYXQ7CisJY29uc3QgY2hhciAqc3RyOworCWludCBmbGFncyA9IDA7CisJcmVnZXhfdCByOworCXJlZ21hdGNoX3QgbVsxXTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLS1idWciKSkKKwkJcmV0dXJuIHRlc3RfcmVnZXhfYnVnKCk7CisJZWxzZSBpZiAoYXJnYyA8IDMpCisJCXVzYWdlKCJ0ZXN0LXJlZ2V4IC0tYnVnXG4iCisJCSAgICAgICJ0ZXN0LXJlZ2V4IDxwYXR0ZXJuPiA8c3RyaW5nPiBbPG9wdGlvbnM+XSIpOworCisJYXJndisrOworCXBhdCA9ICphcmd2Kys7CisJc3RyID0gKmFyZ3YrKzsKKwl3aGlsZSAoKmFyZ3YpIHsKKwkJc3RydWN0IHJlZ19mbGFnICpyZjsKKwkJZm9yIChyZiA9IHJlZ19mbGFnczsgcmYtPm5hbWU7IHJmKyspCisJCQlpZiAoIXN0cmNtcCgqYXJndiwgcmYtPm5hbWUpKSB7CisJCQkJZmxhZ3MgfD0gcmYtPmZsYWc7CisJCQkJYnJlYWs7CisJCQl9CisJCWlmICghcmYtPm5hbWUpCisJCQlkaWUoImRvIG5vdCByZWNvZ25pemUgJXMiLCAqYXJndik7CisJCWFyZ3YrKzsKKwl9CisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCWlmIChyZWdjb21wKCZyLCBwYXQsIGZsYWdzKSkKKwkJZGllKCJmYWlsZWQgcmVnY29tcCgpIGZvciBwYXR0ZXJuICclcyciLCBwYXQpOworCWlmIChyZWdleGVjKCZyLCBzdHIsIDEsIG0sIDApKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1yZXZpc2lvbi13YWxraW5nLmMgYi90L2hlbHBlci90ZXN0LXJldmlzaW9uLXdhbGtpbmcuYwppbmRleCAzZDAzMTMzLi5iOGU2ZmUxIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LXJldmlzaW9uLXdhbGtpbmcuYworKysgYi90L2hlbHBlci90ZXN0LXJldmlzaW9uLXdhbGtpbmcuYwpAQCAtNDUsNyArNDUsNyBAQAogCXJldHVybiBnb3RfcmV2aXNpb247CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJaWYgKGFyZ2MgPCAyKQogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcnVuLWNvbW1hbmQuYyBiL3QvaGVscGVyL3Rlc3QtcnVuLWNvbW1hbmQuYwppbmRleCAzMGE2NGE5Li5kMjRkMTU3IDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LXJ1bi1jb21tYW5kLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1ydW4tY29tbWFuZC5jCkBAIC0yNiw3ICsyNiw3IEBACiAJCXJldHVybiAwOwogCiAJYXJndl9hcnJheV9wdXNodigmY3AtPmFyZ3MsIGQtPmFyZ3YpOwotCXN0cmJ1Zl9hZGRmKGVyciwgInByZWxvYWRlZCBvdXRwdXQgb2YgYSBjaGlsZFxuIik7CisJc3RyYnVmX2FkZHN0cihlcnIsICJwcmVsb2FkZWQgb3V0cHV0IG9mIGEgY2hpbGRcbiIpOwogCW51bWJlcl9jYWxsYmFja3MrKzsKIAlyZXR1cm4gMTsKIH0KQEAgLTM2LDcgKzM2LDcgQEAKIAkJICB2b2lkICpjYiwKIAkJICB2b2lkICoqdGFza19jYikKIHsKLQlzdHJidWZfYWRkZihlcnIsICJubyBmdXJ0aGVyIGpvYnMgYXZhaWxhYmxlXG4iKTsKKwlzdHJidWZfYWRkc3RyKGVyciwgIm5vIGZ1cnRoZXIgam9icyBhdmFpbGFibGVcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC00NSwxMSArNDUsMTEgQEAKIAkJCSB2b2lkICpwcF9jYiwKIAkJCSB2b2lkICpwcF90YXNrX2NiKQogewotCXN0cmJ1Zl9hZGRmKGVyciwgImFza2luZyBmb3IgYSBxdWljayBzdG9wXG4iKTsKKwlzdHJidWZfYWRkc3RyKGVyciwgImFza2luZyBmb3IgYSBxdWljayBzdG9wXG4iKTsKIAlyZXR1cm4gMTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOwogCWludCBqb2JzOwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zY3JhcC1jYWNoZS10cmVlLmMgYi90L2hlbHBlci90ZXN0LXNjcmFwLWNhY2hlLXRyZWUuYwppbmRleCA2ZWZlZTMxLi41YjJmZDA5IDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LXNjcmFwLWNhY2hlLXRyZWUuYworKysgYi90L2hlbHBlci90ZXN0LXNjcmFwLWNhY2hlLXRyZWUuYwpAQCAtNSw3ICs1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsKIAotaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCitpbnQgY21kX21haW4oaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCiB7CiAJaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDEpOwogCWlmIChyZWFkX2NhY2hlKCkgPCAwKQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zaGExLWFycmF5LmMgYi90L2hlbHBlci90ZXN0LXNoYTEtYXJyYXkuYwppbmRleCA2MGVhMWQ1Li4wOWY3NzkwIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LXNoYTEtYXJyYXkuYworKysgYi90L2hlbHBlci90ZXN0LXNoYTEtYXJyYXkuYwpAQCAtNiw3ICs2LDcgQEAKIAlwdXRzKHNoYTFfdG9faGV4KHNoYTEpKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3Qgc2hhMV9hcnJheSBhcnJheSA9IFNIQTFfQVJSQVlfSU5JVDsKIAlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtc2hhMS5jIGIvdC9oZWxwZXIvdGVzdC1zaGExLmMKaW5kZXggZTU3ZWFlMS4uYTFjMTNmNSAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1zaGExLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1zaGExLmMKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKIAotaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCitpbnQgY21kX21haW4oaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCiB7CiAJZ2l0X1NIQV9DVFggY3R4OwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXNpZ2NoYWluLmMgYi90L2hlbHBlci90ZXN0LXNpZ2NoYWluLmMKaW5kZXggZTQ5OWZjZS4uYjcxZWRiZCAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1zaWdjaGFpbi5jCisrKyBiL3QvaGVscGVyL3Rlc3Qtc2lnY2hhaW4uYwpAQCAtMTMsNyArMTMsNyBAQAogWCh0aHJlZSkKICN1bmRlZiBYCiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikgewogCXNpZ2NoYWluX3B1c2goU0lHVEVSTSwgb25lKTsKIAlzaWdjaGFpbl9wdXNoKFNJR1RFUk0sIHR3byk7CiAJc2lnY2hhaW5fcHVzaChTSUdURVJNLCB0aHJlZSk7CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXN0cmluZy1saXN0LmMgYi90L2hlbHBlci90ZXN0LXN0cmluZy1saXN0LmMKaW5kZXggMTRiZGY5ZC4uNGE2ODk2NyAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1zdHJpbmctbGlzdC5jCisrKyBiL3QvaGVscGVyL3Rlc3Qtc3RyaW5nLWxpc3QuYwpAQCAtNDEsNyArNDEsNyBAQAogCXJldHVybiBzdGFydHNfd2l0aChpdGVtLT5zdHJpbmcsIHByZWZpeCk7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJaWYgKGFyZ2MgPT0gNSAmJiAhc3RyY21wKGFyZ3ZbMV0sICJzcGxpdCIpKSB7CiAJCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXN1Ym1vZHVsZS1jb25maWcuYyBiL3QvaGVscGVyL3Rlc3Qtc3VibW9kdWxlLWNvbmZpZy5jCmluZGV4IGRhYjhjMjcuLjJmMTQ0ZDUgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3Qtc3VibW9kdWxlLWNvbmZpZy5jCisrKyBiL3QvaGVscGVyL3Rlc3Qtc3VibW9kdWxlLWNvbmZpZy5jCkBAIC0yLDcgKzIsNyBAQAogI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKICNpbmNsdWRlICJzdWJtb2R1bGUuaCIKIAotc3RhdGljIHZvaWQgZGllX3VzYWdlKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqbXNnKQorc3RhdGljIHZvaWQgZGllX3VzYWdlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqbXNnKQogewogCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CiAJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgWzxjb21taXQ+IDxzdWJtb2R1bGVwYXRoPl0gLi4uXG4iLCBhcmd2WzBdKTsKQEAgLTE0LDE2ICsxNCwxNiBAQAogCXJldHVybiBwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbih2YXIsIHZhbHVlKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQljaGFyICoqYXJnID0gYXJndjsKKwljb25zdCBjaGFyICoqYXJnID0gYXJndjsKIAlpbnQgbXlfYXJnYyA9IGFyZ2M7CiAJaW50IG91dHB1dF91cmwgPSAwOwogCWludCBsb29rdXBfbmFtZSA9IDA7CiAKIAlhcmcrKzsKIAlteV9hcmdjLS07Ci0Jd2hpbGUgKHN0YXJ0c193aXRoKGFyZ1swXSwgIi0tIikpIHsKKwl3aGlsZSAoYXJnWzBdICYmIHN0YXJ0c193aXRoKGFyZ1swXSwgIi0tIikpIHsKIAkJaWYgKCFzdHJjbXAoYXJnWzBdLCAiLS11cmwiKSkKIAkJCW91dHB1dF91cmwgPSAxOwogCQlpZiAoIXN0cmNtcChhcmdbMF0sICItLW5hbWUiKSkKQEAgLTQ5LDcgKzQ5LDcgQEAKIAkJcGF0aF9vcl9uYW1lID0gYXJnWzFdOwogCiAJCWlmIChjb21taXRbMF0gPT0gJ1wwJykKLQkJCWhhc2hjcHkoY29tbWl0X3NoYTEsIG51bGxfc2hhMSk7CisJCQloYXNoY2xyKGNvbW1pdF9zaGExKTsKIAkJZWxzZSBpZiAoZ2V0X3NoYTEoY29tbWl0LCBjb21taXRfc2hhMSkgPCAwKQogCQkJZGllX3VzYWdlKGFyZ2MsIGFyZ3YsICJDb21taXQgbm90IGZvdW5kLiIpOwogCmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXN1YnByb2Nlc3MuYyBiL3QvaGVscGVyL3Rlc3Qtc3VicHJvY2Vzcy5jCmluZGV4IDU2ODgxYTAuLjMwYzU3NjUgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3Qtc3VicHJvY2Vzcy5jCisrKyBiL3QvaGVscGVyL3Rlc3Qtc3VicHJvY2Vzcy5jCkBAIC0xLDcgKzEsNyBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKIAlpbnQgbm9naXQgPSAwOwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zdm4tZmUuYyBiL3QvaGVscGVyL3Rlc3Qtc3ZuLWZlLmMKaW5kZXggMTIwZWM5Ni4uNzY2N2MwOCAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC1zdm4tZmUuYworKysgYi90L2hlbHBlci90ZXN0LXN2bi1mZS5jCkBAIC0xMSw3ICsxMSw3IEBACiBzdGF0aWMgY29uc3QgY2hhciB0ZXN0X3N2bmZlX3VzYWdlW10gPQogCSJ0ZXN0LXN2bi1mZSAoPGR1bXBmaWxlPiB8IFstZF0gPHByZWltYWdlPiA8ZGVsdGE+IDxsZW4+KSI7CiAKLXN0YXRpYyBpbnQgYXBwbHlfZGVsdGEoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3N0YXRpYyBpbnQgYXBwbHlfZGVsdGEoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCXN0cnVjdCBsaW5lX2J1ZmZlciBwcmVpbWFnZSA9IExJTkVfQlVGRkVSX0lOSVQ7CiAJc3RydWN0IGxpbmVfYnVmZmVyIGRlbHRhID0gTElORV9CVUZGRVJfSU5JVDsKQEAgLTM1LDcgKzM1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJaWYgKGFyZ2MgPT0gMikgewogCQlpZiAoc3ZuZHVtcF9pbml0KGFyZ3ZbMV0pKQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uLmMgYi90L2hlbHBlci90ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24uYwppbmRleCAwOTBiZjIxLi40OWI2ZTgzIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24uYworKysgYi90L2hlbHBlci90ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24uYwpAQCAtMSw3ICsxLDcgQEAKICNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKICNpbmNsdWRlICJ1cmxtYXRjaC5oIgogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCWNvbnN0IGNoYXIgdXNhZ2VbXSA9ICJ0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gWy1wIHwgLWxdIDx1cmwxPiB8IDx1cmwxPiA8dXJsMj4iOwogCWNoYXIgKnVybDEsICp1cmwyOwpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC13aWxkbWF0Y2guYyBiL3QvaGVscGVyL3Rlc3Qtd2lsZG1hdGNoLmMKaW5kZXggNTc4YjE2NC4uNTJiZTg3NiAxMDA2NDQKLS0tIGEvdC9oZWxwZXIvdGVzdC13aWxkbWF0Y2guYworKysgYi90L2hlbHBlci90ZXN0LXdpbGRtYXRjaC5jCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykgewpkaWZmIC0tZ2l0IGEvdC9saWItZ2l0LWRhZW1vbi5zaCBiL3QvbGliLWdpdC1kYWVtb24uc2gKaW5kZXggMzQwNTM0Yy4uZjljYmQ0NyAxMDA2NDQKLS0tIGEvdC9saWItZ2l0LWRhZW1vbi5zaAorKysgYi90L2xpYi1naXQtZGFlbW9uLnNoCkBAIC04Miw4ICs4Miw3IEBACiAJa2lsbCAiJEdJVF9EQUVNT05fUElEIgogCXdhaXQgIiRHSVRfREFFTU9OX1BJRCIgPiYzIDI+JjQKIAlyZXQ9JD8KLQkjIGV4cGVjdCBleGl0IHdpdGggc3RhdHVzIDE0MyA9IDEyOCsxNSBmb3Igc2lnbmFsIFRFUk09MTUKLQlpZiB0ZXN0ICRyZXQgLW5lIDE0MworCWlmIHRlc3RfbWF0Y2hfc2lnbmFsIDE1ICQ/CiAJdGhlbgogCQllcnJvciAiZ2l0IGRhZW1vbiBleGl0ZWQgd2l0aCBzdGF0dXM6ICRyZXQiCiAJZmkKZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1zdm4uc2ggYi90L2xpYi1naXQtc3ZuLnNoCmluZGV4IGZiODgyMzIuLjY4ODMxM2UgMTAwNjQ0Ci0tLSBhL3QvbGliLWdpdC1zdm4uc2gKKysrIGIvdC9saWItZ2l0LXN2bi5zaApAQCAtNjUsODEgKzY1LDIyIEBACiAJc3ZuICIkb3JpZ19zdm5jbWQiIC0tY29uZmlnLWRpciAiJHN2bmNvbmYiICIkQCIKIH0KIAotcHJlcGFyZV9odHRwZCAoKSB7Ci0JZm9yIGQgaW4gXAotCQkiJFNWTl9IVFRQRF9QQVRIIiBcCi0JCS91c3Ivc2Jpbi9hcGFjaGUyIFwKLQkJL3Vzci9zYmluL2h0dHBkIFwKLQk7IGRvCi0JCWlmIHRlc3QgLWYgIiRkIgotCQl0aGVuCi0JCQlTVk5fSFRUUERfUEFUSD0iJGQiCi0JCQlicmVhawotCQlmaQotCWRvbmUKLQlpZiB0ZXN0IC16ICIkU1ZOX0hUVFBEX1BBVEgiCi0JdGhlbgotCQllY2hvID4mMiAnKioqIGVycm9yOiBBcGFjaGUgbm90IGZvdW5kJwotCQlyZXR1cm4gMQotCWZpCi0JZm9yIGQgaW4gXAotCQkiJFNWTl9IVFRQRF9NT0RVTEVfUEFUSCIgXAotCQkvdXNyL2xpYi9hcGFjaGUyL21vZHVsZXMgXAotCQkvdXNyL2xpYmV4ZWMvYXBhY2hlMiBcCi0JOyBkbwotCQlpZiB0ZXN0IC1kICIkZCIKLQkJdGhlbgotCQkJU1ZOX0hUVFBEX01PRFVMRV9QQVRIPSIkZCIKLQkJCWJyZWFrCi0JCWZpCi0JZG9uZQotCWlmIHRlc3QgLXogIiRTVk5fSFRUUERfTU9EVUxFX1BBVEgiCi0JdGhlbgotCQllY2hvID4mMiAnKioqIGVycm9yOiBBcGFjaGUgbW9kdWxlIGRpciBub3QgZm91bmQnCi0JCXJldHVybiAxCi0JZmkKLQlpZiB0ZXN0ICEgLWYgIiRTVk5fSFRUUERfTU9EVUxFX1BBVEgvbW9kX2Rhdl9zdm4uc28iCi0JdGhlbgotCQllY2hvID4mMiAnKioqIGVycm9yOiBBcGFjaGUgbW9kdWxlICJtb2RfZGF2X3N2biIgbm90IGZvdW5kJwotCQlyZXR1cm4gMQotCWZpCittYXliZV9zdGFydF9odHRwZCAoKSB7CisJbG9jPSR7MS1zdm59CiAKLQlyZXBvX2Jhc2VfcGF0aD0iJHsxLXN2bn0iCi0JbWtkaXIgIiRHSVRfRElSIi9sb2dzCi0KLQljYXQgPiAiJEdJVF9ESVIvaHR0cGQuY29uZiIgPDxFT0YKLVNlcnZlck5hbWUgImdpdCBzdm4gdGVzdCIKLVNlcnZlclJvb3QgIiRHSVRfRElSIgotRG9jdW1lbnRSb290ICIkR0lUX0RJUiIKLVBpZEZpbGUgIiRHSVRfRElSL2h0dHBkLnBpZCIKLUxvY2tGaWxlIGxvZ3MvYWNjZXB0LmxvY2sKLUxpc3RlbiAxMjcuMC4wLjE6JFNWTl9IVFRQRF9QT1JUCi1Mb2FkTW9kdWxlIGRhdl9tb2R1bGUgJFNWTl9IVFRQRF9NT0RVTEVfUEFUSC9tb2RfZGF2LnNvCi1Mb2FkTW9kdWxlIGRhdl9zdm5fbW9kdWxlICRTVk5fSFRUUERfTU9EVUxFX1BBVEgvbW9kX2Rhdl9zdm4uc28KLTxMb2NhdGlvbiAvJHJlcG9fYmFzZV9wYXRoPgotCURBViBzdm4KLQlTVk5QYXRoICIkcmF3c3ZucmVwbyIKLTwvTG9jYXRpb24+Ci1FT0YKLX0KLQotc3RhcnRfaHR0cGQgKCkgewotCWlmIHRlc3QgLXogIiRTVk5fSFRUUERfUE9SVCIKLQl0aGVuCi0JCWVjaG8gPiYyICdTVk5fSFRUUERfUE9SVCBpcyBub3QgZGVmaW5lZCEnCi0JCXJldHVybgotCWZpCi0KLQlwcmVwYXJlX2h0dHBkICIkMSIgfHwgcmV0dXJuIDEKLQotCSIkU1ZOX0hUVFBEX1BBVEgiIC1mICIkR0lUX0RJUiIvaHR0cGQuY29uZiAtayBzdGFydAotCXN2bnJlcG89Imh0dHA6Ly8xMjcuMC4wLjE6JFNWTl9IVFRQRF9QT1JULyRyZXBvX2Jhc2VfcGF0aCIKLX0KLQotc3RvcF9odHRwZCAoKSB7Ci0JdGVzdCAteiAiJFNWTl9IVFRQRF9QT1JUIiAmJiByZXR1cm4KLQl0ZXN0ICEgLWYgIiRHSVRfRElSL2h0dHBkLmNvbmYiICYmIHJldHVybgotCSIkU1ZOX0hUVFBEX1BBVEgiIC1mICIkR0lUX0RJUiIvaHR0cGQuY29uZiAtayBzdG9wCisJdGVzdF90cmlzdGF0ZSBHSVRfU1ZOX1RFU1RfSFRUUEQKKwljYXNlICRHSVRfU1ZOX1RFU1RfSFRUUEQgaW4KKwl0cnVlKQorCQkuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorCQlMSUJfSFRUUERfU1ZOPSIkbG9jIgorCQlzdGFydF9odHRwZAorCQk7OworCSopCisJCXN0b3BfaHR0cGQgKCkgeworCQkJOiBub29wCisJCX0KKwkJOzsKKwllc2FjCiB9CiAKIGNvbnZlcnRfdG9fcmV2X2RiICgpIHsKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkLnNoIGIvdC9saWItaHR0cGQuc2gKaW5kZXggZjlmM2U1Zi4uNDM1YTM3NCAxMDA2NDQKLS0tIGEvdC9saWItaHR0cGQuc2gKKysrIGIvdC9saWItaHR0cGQuc2gKQEAgLTI0LDcgKzI0LDcgQEAKICMgICAgTElCX0hUVFBEX01PRFVMRV9QQVRIICAgICAgIHdlYiBzZXJ2ZXIgbW9kdWxlcyBwYXRoCiAjICAgIExJQl9IVFRQRF9QT1JUICAgICAgICAgICAgICBsaXN0ZW5pbmcgcG9ydAogIyAgICBMSUJfSFRUUERfREFWICAgICAgICAgICAgICAgZW5hYmxlIERBVgotIyAgICBMSUJfSFRUUERfU1ZOICAgICAgICAgICAgICAgZW5hYmxlIFNWTgorIyAgICBMSUJfSFRUUERfU1ZOICAgICAgICAgICAgICAgZW5hYmxlIFNWTiBhdCBnaXZlbiBsb2NhdGlvbiAoZS5nLiAic3ZuIikKICMgICAgTElCX0hUVFBEX1NTTCAgICAgICAgICAgICAgIGVuYWJsZSBTU0wKICMKICMgQ29weXJpZ2h0IChjKSAyMDA4IENsZW1lbnMgQnVjaGFjaGVyIDxkcml6emRAYW9uLmF0PgpAQCAtMTYyLDggKzE2MiwxMCBAQAogCQlpZiB0ZXN0IC1uICIkTElCX0hUVFBEX1NWTiIKIAkJdGhlbgogCQkJSFRUUERfUEFSQT0iJEhUVFBEX1BBUkEgLURTVk4iCi0JCQlyYXdzdm5yZXBvPSIkSFRUUERfUk9PVF9QQVRIL3N2bnJlcG8iCi0JCQlzdm5yZXBvPSJodHRwOi8vMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVC9zdm4iCisJCQlMSUJfSFRUUERfU1ZOUEFUSD0iJHJhd3N2bnJlcG8iCisJCQlzdm5yZXBvPSJodHRwOi8vMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVC8iCisJCQlzdm5yZXBvPSIkc3ZucmVwbyRMSUJfSFRUUERfU1ZOIgorCQkJZXhwb3J0IExJQl9IVFRQRF9TVk4gTElCX0hUVFBEX1NWTlBBVEgKIAkJZmkKIAlmaQogfQpAQCAtMTgwLDYgKzE4Miw3IEBACiAJaWYgdGVzdCAkPyAtbmUgMAogCXRoZW4KIAkJdHJhcCAnZGllJyBFWElUCisJCWNhdCAiJEhUVFBEX1JPT1RfUEFUSCIvZXJyb3IubG9nID4mNCAyPi9kZXYvbnVsbAogCQl0ZXN0X3NraXBfb3JfZGllICRHSVRfVEVTVF9IVFRQRCAid2ViIHNlcnZlciBzZXR1cCBmYWlsZWQiCiAJZmkKIH0KZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkL2FwYWNoZS5jb25mIGIvdC9saWItaHR0cGQvYXBhY2hlLmNvbmYKaW5kZXggMDE4YTgzYS4uYzNlNjMxMyAxMDA2NDQKLS0tIGEvdC9saWItaHR0cGQvYXBhY2hlLmNvbmYKKysrIGIvdC9saWItaHR0cGQvYXBhY2hlLmNvbmYKQEAgLTIwOCw4ICsyMDgsOCBAQAogPElmRGVmaW5lIFNWTj4KIAlMb2FkTW9kdWxlIGRhdl9zdm5fbW9kdWxlIG1vZHVsZXMvbW9kX2Rhdl9zdm4uc28KIAotCTxMb2NhdGlvbiAvc3ZuPgorCTxMb2NhdGlvbiAvJHtMSUJfSFRUUERfU1ZOfT4KIAkJREFWIHN2bgotCQlTVk5QYXRoIHN2bnJlcG8KKwkJU1ZOUGF0aCAiJHtMSUJfSFRUUERfU1ZOUEFUSH0iCiAJPC9Mb2NhdGlvbj4KIDwvSWZEZWZpbmU+CmRpZmYgLS1naXQgYS90L2xpYi1yZWJhc2Uuc2ggYi90L2xpYi1yZWJhc2Uuc2gKaW5kZXggOWE5NmUxNS4uMjVhNzdlZSAxMDA2NDQKLS0tIGEvdC9saWItcmViYXNlLnNoCisrKyBiL3QvbGliLXJlYmFzZS5zaApAQCAtMjksNiArMjksNyBAQAogCSovQ09NTUlUX0VESVRNU0cpCiAJCXRlc3QgLXogIiRFWFBFQ1RfSEVBREVSX0NPVU5UIiB8fAogCQkJdGVzdCAiJEVYUEVDVF9IRUFERVJfQ09VTlQiID0gIiQoc2VkIC1uICcxcy9eIyBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgXCguKlwpIGNvbW1pdHNcLi9cMS9wJyA8ICIkMSIpIiB8fAorCQkJdGVzdCAiIyAjIEdFVFRFWFQgUE9JU09OICMiID0gIiQoc2VkIC1uICcxcCcgPCAiJDEiKSIgfHwKIAkJCWV4aXQKIAkJdGVzdCAteiAiJEZBS0VfQ09NTUlUX01FU1NBR0UiIHx8IGVjaG8gIiRGQUtFX0NPTU1JVF9NRVNTQUdFIiA+ICIkMSIKIAkJdGVzdCAteiAiJEZBS0VfQ09NTUlUX0FNRU5EIiB8fCBlY2hvICIkRkFLRV9DT01NSVRfQU1FTkQiID4+ICIkMSIKZGlmZiAtLWdpdCBhL3QvcGVyZi9SRUFETUUgYi90L3BlcmYvUkVBRE1FCmluZGV4IDg4NDhjMTQuLjQ5ZWE0MzQgMTAwNjQ0Ci0tLSBhL3QvcGVyZi9SRUFETUUKKysrIGIvdC9wZXJmL1JFQURNRQpAQCAtMTE1LDggKzExNSwxNiBAQAogCiBBdCBsZWFzdCBvbmUgb2YgdGhlIGZpcnN0IHR3byBpcyByZXF1aXJlZCEKIAotWW91IGNhbiB1c2UgdGVzdF9leHBlY3Rfc3VjY2VzcyBhcyB1c3VhbC4gIEZvciBhY3R1YWwgcGVyZm9ybWFuY2UKLXRlc3RzLCB1c2UKK1lvdSBjYW4gdXNlIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgYXMgdXN1YWwuIEluIGJvdGggdGVzdF9leHBlY3Rfc3VjY2VzcworYW5kIGluIHRlc3RfcGVyZiwgcnVubmluZyAiZ2l0IiBwb2ludHMgdG8gdGhlIHZlcnNpb24gdGhhdCBpcyBiZWluZworcGVyZi10ZXN0ZWQuIFRoZSAkTU9ERVJOX0dJVCB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIGdpdCB3cmFwcGVyIGZvciB0aGUKK2N1cnJlbnRseSBjaGVja2VkLW91dCB2ZXJzaW9uIChpLmUuLCB0aGUgb25lIHRoYXQgbWF0Y2hlcyB0aGUgdC9wZXJmCitzY3JpcHRzIHlvdSBhcmUgcnVubmluZykuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIHNldHVwIHVzZXMgY29tbWFuZHMKK3RoYXQgb25seSB3b3JrIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgZ2l0IHRoYW4gd2hhdCB5b3UgbWlnaHQgd2FudCB0bwordGVzdCAoYnV0IG9idmlvdXNseSB5b3VyIG5ldyBjb21tYW5kcyBtdXN0IHN0aWxsIGNyZWF0ZSBhIHN0YXRlIHRoYXQgY2FuCitiZSB1c2VkIGJ5IHRoZSBvbGRlciB2ZXJzaW9uIG9mIGdpdCB5b3UgYXJlIHRlc3RpbmcpLgorCitGb3IgYWN0dWFsIHBlcmZvcm1hbmNlIHRlc3RzLCB1c2UKIAogCXRlc3RfcGVyZiAnZGVzY3JpcHRpdmUgc3RyaW5nJyAnCiAJCWNvbW1hbmQxICYmCmRpZmYgLS1naXQgYS90L3BlcmYvcDQyMTEtbGluZS1sb2cuc2ggYi90L3BlcmYvcDQyMTEtbGluZS1sb2cuc2gKaW5kZXggM2QwNzRiMC4uYjdmZjY4ZCAxMDA3NTUKLS0tIGEvdC9wZXJmL3A0MjExLWxpbmUtbG9nLnNoCisrKyBiL3QvcGVyZi9wNDIxMS1saW5lLWxvZy5zaApAQCAtMjMsMTEgKzIzLDExIEBACiAJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb2xsb3cgLS0gIiRmaWxlIiA+L2Rldi9udWxsCiAnCiAKLXRlc3RfcGVyZiAnZ2l0IGxvZyAtTCcgJwotCWdpdCBsb2cgLUwgMToiJGZpbGUiID4vZGV2L251bGwKK3Rlc3RfcGVyZiAnZ2l0IGxvZyAtTCAocmVuYW1lcyBvZmYpJyAnCisJZ2l0IGxvZyAtLW5vLXJlbmFtZXMgLUwgMToiJGZpbGUiID4vZGV2L251bGwKICcKIAotdGVzdF9wZXJmICdnaXQgbG9nIC1NIC1MJyAnCit0ZXN0X3BlcmYgJ2dpdCBsb2cgLUwgKHJlbmFtZXMgb24pJyAnCiAJZ2l0IGxvZyAtTSAtTCAxOiIkZmlsZSIgPi9kZXYvbnVsbAogJwogCmRpZmYgLS1naXQgYS90L3BlcmYvcDUzMDMtbWFueS1wYWNrcy5zaCBiL3QvcGVyZi9wNTMwMy1tYW55LXBhY2tzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3Nzk4NTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDUzMDMtbWFueS1wYWNrcy5zaApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVyZm9ybWFuY2Ugd2l0aCBsYXJnZSBudW1iZXJzIG9mIHBhY2tzJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCisKKyMgQSByZWFsIG1hbnktcGFjayBzaXR1YXRpb24gd291bGQgcHJvYmFibHkgY29tZSBmcm9tIGhhdmluZyBhIGxvdCBvZiBwdXNoZXMKKyMgb3ZlciB0aW1lLiBXZSBkb24ndCBrbm93IGhvdyBiaWcgZWFjaCBwdXNoIHdvdWxkIGJlLCBidXQgd2UgY2FuIGZha2UgaXQgYnkKKyMganVzdCB3YWxraW5nIHRoZSBmaXJzdC1wYXJlbnQgY2hhaW4gYW5kIGhhdmluZyBldmVyeSA1IGNvbW1pdHMgYmUgdGhlaXIgb3duCisjICJwdXNoIi4gVGhpcyBpc24ndCBfZW50aXJlbHlfIGFjY3VyYXRlLCBhcyByZWFsIHB1c2hlcyB3b3VsZCBoYXZlIHNvbWUKKyMgZHVwbGljYXRlIG9iamVjdHMgZHVlIHRvIHRoaW4tcGFjayBmaXhpbmcsIGJ1dCBpdCdzIGEgcmVhc29uYWJsZQorIyBhcHByb3hpbWF0aW9uLgorIworIyBBbmQgdGhlbiBhbGwgb2YgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdHMgY2FuIGdvIGluIGEgc2luZ2xlIHBhY2tmaWxlIHRoYXQKKyMgcmVwcmVzZW50cyB0aGUgc3RhdGUgYmVmb3JlIGFueSBvZiB0aG9zZSBwdXNoZXMgKGFjdHVhbGx5LCB3ZSdsbCBnZW5lcmF0ZQorIyB0aGF0IGZpcnN0IGJlY2F1c2UgaW4gc3VjaCBhIHNldHVwIGl0IHdvdWxkIGJlIHRoZSBvbGRlc3QgcGFjaywgYW5kIHdlIHNvcnQKKyMgdGhlIHBhY2tzIGJ5IHJldmVyc2UgbXRpbWUgaW5zaWRlIGdpdCkuCityZXBhY2tfaW50b19uICgpIHsKKwlybSAtcmYgc3RhZ2luZyAmJgorCW1rZGlyIHN0YWdpbmcgJiYKKworCWdpdCByZXYtbGlzdCAtLWZpcnN0LXBhcmVudCBIRUFEIHwKKwlzZWQgLW4gJzF+NXAnIHwKKwloZWFkIC1uICIkMSIgfAorCXBlcmwgLWUgJ3ByaW50IHJldmVyc2UgPD4nIFwKKwk+cHVzaGVzCisKKwkjIGNyZWF0ZSBiYXNlIHBhY2tmaWxlCisJaGVhZCAtbiAxIHB1c2hlcyB8CisJZ2l0IHBhY2stb2JqZWN0cyAtLWRlbHRhLWJhc2Utb2Zmc2V0IC0tcmV2cyBzdGFnaW5nL3BhY2sKKworCSMgYW5kIHRoZW4gaW5jcmVtZW50YWxzIGJldHdlZW4gZWFjaCBwYWlyIG9mIGNvbW1pdHMKKwlsYXN0PSAmJgorCXdoaWxlIHJlYWQgcmV2CisJZG8KKwkJaWYgdGVzdCAtbiAiJGxhc3QiOyB0aGVuCisJCQl7CisJCQkJZWNobyAiJHJldiIgJiYKKwkJCQllY2hvICJeJGxhc3QiCisJCQl9IHwKKwkJCWdpdCBwYWNrLW9iamVjdHMgLS1kZWx0YS1iYXNlLW9mZnNldCAtLXJldnMgXAorCQkJCXN0YWdpbmcvcGFjayB8fCByZXR1cm4gMQorCQlmaQorCQlsYXN0PSRyZXYKKwlkb25lIDxwdXNoZXMgJiYKKworCSMgYW5kIGluc3RhbGwgdGhlIHdob2xlIHRoaW5nCisJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorCW12IHN0YWdpbmcvKiAuZ2l0L29iamVjdHMvcGFjay8KK30KKworIyBQcmV0ZW5kIHdlIGp1c3QgaGF2ZSBhIHNpbmdsZSBicmFuY2ggYW5kIG5vIHJlZmxvZ3MsIGFuZCB0aGF0IGV2ZXJ5dGhpbmcgaXMKKyMgaW4gb2JqZWN0cy9wYWNrOyB0aGF0IG1ha2VzIG91ciBmYWtlIHBhY2stYnVpbGRpbmcgdmlhIHJlcGFja19pbnRvX24oKQorIyBtdWNoIHNpbXBsZXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGlmeSByZWFjaGFiaWxpdHknICcKKwl0aXA9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0ib3B0aW9uIG5vLWRlcmVmJTBhZGVsZXRlICUocmVmbmFtZSkiIHwKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluICYmCisJcm0gLXJmIC5naXQvbG9ncyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICR0aXAgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcmVwYWNrIC1hZAorJworCitmb3IgbnJfcGFja3MgaW4gMSA1MCAxMDAwCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSAkbnJfcGFja3MtcGFjayBzY2VuYXJpbyIgJworCQlyZXBhY2tfaW50b19uICRucl9wYWNrcworCScKKworCXRlc3RfcGVyZiAicmV2LWxpc3QgKCRucl9wYWNrcykiICcKKwkJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCA+L2Rldi9udWxsCisJJworCisJIyBUaGlzIHNpbXVsYXRlcyB0aGUgaW50ZXJlc3RpbmcgcGFydCBvZiB0aGUgcmVwYWNrLCB3aGljaCBpcyB0aGUKKwkjIGFjdHVhbCBwYWNrIGdlbmVyYXRpb24sIHdpdGhvdXQgc211ZGdpbmcgdGhlIG9uLWRpc2sgc2V0dXAKKwkjIGJldHdlZW4gdHJpYWxzLgorCXRlc3RfcGVyZiAicmVwYWNrICgkbnJfcGFja3MpIiAnCisJCWdpdCBwYWNrLW9iamVjdHMgLS1rZWVwLXRydWUtcGFyZW50cyBcCisJCSAgLS1ob25vci1wYWNrLWtlZXAgLS1ub24tZW1wdHkgLS1hbGwgXAorCQkgIC0tcmVmbG9nIC0taW5kZXhlZC1vYmplY3RzIC0tZGVsdGEtYmFzZS1vZmZzZXQgXAorCQkgIC0tc3Rkb3V0IDwvZGV2L251bGwgPi9kZXYvbnVsbAorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcGVyZi1saWIuc2ggYi90L3BlcmYvcGVyZi1saWIuc2gKaW5kZXggMThjMzYzZS4uNDZmMDhlZSAxMDA2NDQKLS0tIGEvdC9wZXJmL3BlcmYtbGliLnNoCisrKyBiL3QvcGVyZi9wZXJmLWxpYi5zaApAQCAtNTIsNiArNTIsOSBAQAogIyBuZWVkIHRvIGV4cG9ydCB0aGVtIGZvciB0ZXN0X3BlcmYgc3Vic2hlbGxzCiBleHBvcnQgVEVTVF9ESVJFQ1RPUlkgVFJBU0hfRElSRUNUT1JZIEdJVF9CVUlMRF9ESVIgR0lUX1RFU1RfQ01QCiAKK01PREVSTl9HSVQ9JEdJVF9CVUlMRF9ESVIvYmluLXdyYXBwZXJzL2dpdAorZXhwb3J0IE1PREVSTl9HSVQKKwogcGVyZl9yZXN1bHRzX2Rpcj0kVEVTVF9PVVRQVVRfRElSRUNUT1JZL3Rlc3QtcmVzdWx0cwogbWtkaXIgLXAgIiRwZXJmX3Jlc3VsdHNfZGlyIgogcm0gLWYgIiRwZXJmX3Jlc3VsdHNfZGlyIi8kKGJhc2VuYW1lICIkMCIgLnNoKS5zdWJ0ZXN0cwpAQCAtODEsNyArODQsNyBAQAogCXJlcG89IiQxIgogCXNvdXJjZT0iJDIiCiAJc291cmNlX2dpdD0iJChnaXQgLUMgIiRzb3VyY2UiIHJldi1wYXJzZSAtLWdpdC1kaXIpIgotCW9iamVjdHNfZGlyPSIkKGdpdCAtQyAiJHNvdXJjZSIgcmV2LXBhcnNlIC0tZ2l0LXBhdGggb2JqZWN0cykiCisJb2JqZWN0c19kaXI9IiQoIiRNT0RFUk5fR0lUIiAtQyAiJHNvdXJjZSIgcmV2LXBhcnNlIC0tZ2l0LXBhdGggb2JqZWN0cykiCiAJbWtkaXIgLXAgIiRyZXBvLy5naXQiCiAJKAogCQljZCAiJHNvdXJjZSIgJiYKQEAgLTEyNywxMSArMTMwLDE1IEBACiAjIFBlcmZvcm1hbmNlIHRlc3RzIHNob3VsZCBuZXZlciBmYWlsLiAgSWYgdGhleSBkbywgc3RvcCBpbW1lZGlhdGVseQogaW1tZWRpYXRlPXQKIAorIyBQZXJmIHRlc3RzIHJlcXVpcmUgR05VIHRpbWUKK2Nhc2UgIiQodW5hbWUgLXMpIiBpbiBEYXJ3aW4pIEdUSU1FPSIke0dUSU1FOi1ndGltZX0iOzsgZXNhYworR1RJTUU9IiR7R1RJTUU6LS91c3IvYmluL3RpbWV9IgorCiB0ZXN0X3J1bl9wZXJmXyAoKSB7CiAJdGVzdF9jbGVhbnVwPToKIAl0ZXN0X2V4cG9ydF89InRlc3RfY2xlYW51cCIKIAlleHBvcnQgdGVzdF9jbGVhbnVwIHRlc3RfZXhwb3J0XwotCS91c3IvYmluL3RpbWUgLWYgIiVFICVVICVTIiAtbyB0ZXN0X3RpbWUuJGkgIiRTSEVMTCIgLWMgJworCSIkR1RJTUUiIC1mICIlRSAlVSAlUyIgLW8gdGVzdF90aW1lLiRpICIkU0hFTEwiIC1jICcKIC4gJyIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtbGliLWZ1bmN0aW9ucy5zaCcKIHRlc3RfZXhwb3J0ICgpIHsKIAlbICQjICE9IDAgXSB8fCByZXR1cm4gMApkaWZmIC0tZ2l0IGEvdC90MDAwMC1iYXNpYy5zaCBiL3QvdDAwMDAtYmFzaWMuc2gKaW5kZXggNjA4MTFhMy4uMWFhNTA5MyAxMDA3NTUKLS0tIGEvdC90MDAwMC1iYXNpYy5zaAorKysgYi90L3QwMDAwLWJhc2ljLnNoCkBAIC04MzQsNyArODM0LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgb2JqZWN0IElEIG9mIGEga25vd24gdHJlZScgJwotCXRlc3QgIiR0cmVlIiA9IDRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKKwl0ZXN0ICIkdHJlZSIgPSAkRU1QVFlfVFJFRQogJwogCiAjIFZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cwpkaWZmIC0tZ2l0IGEvdC90MDAwNS1zaWduYWxzLnNoIGIvdC90MDAwNS1zaWduYWxzLnNoCmluZGV4IGU3ZjI3ZWIuLjQ2MDQyZjEgMTAwNzU1Ci0tLSBhL3QvdDAwMDUtc2lnbmFscy5zaAorKysgYi90L3QwMDA1LXNpZ25hbHMuc2gKQEAgLTExLDEyICsxMSwxMyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdjaGFpbiB3b3JrcycgJwogCXsgdGVzdC1zaWdjaGFpbiA+YWN0dWFsOyByZXQ9JD87IH0gJiYKLQljYXNlICIkcmV0IiBpbgotCTE0MykgdHJ1ZSA7OyAjIFBPU0lYIHcvIFNJR1RFUk09MTUKLQkyNzEpIHRydWUgOzsgIyBrc2ggdy8gU0lHVEVSTT0xNQotCSAgMykgdHJ1ZSA7OyAjIFdpbmRvd3MKLQkgICopIGZhbHNlIDs7Ci0JZXNhYyAmJgorCXsKKwkJIyBTaWduYWwgZGVhdGggYnkgcmFpc2UoKSBvbiBXaW5kb3dzIGFjdHMgbGlrZSBleGl0KDMpLAorCQkjIHJlZ2FyZGxlc3Mgb2YgdGhlIHNpZ25hbCBudW1iZXIuIFNvIHdlIG11c3QgYWxsb3cgdGhhdAorCQkjIGFzIHdlbGwgYXMgdGhlIG5vcm1hbCBzaWduYWwgY2hlY2suCisJCXRlc3RfbWF0Y2hfc2lnbmFsIDE1ICIkcmV0IiB8fAorCQl0ZXN0ICIkcmV0IiA9IDMKKwl9ICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCkBAIC00MSwxMiArNDIsMTIgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2EgY29uc3RpcGF0ZWQgZ2l0IGRpZXMgd2l0aCBTSUdQSVBFJyAnCiAJT1VUPSQoICgobGFyZ2VfZ2l0OyBlY2hvICQ/IDE+JjMpIHwgOikgMz4mMSApICYmCi0JdGVzdCAiJE9VVCIgLWVxIDE0MQorCXRlc3RfbWF0Y2hfc2lnbmFsIDEzICIkT1VUIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnYSBjb25zdGlwYXRlZCBnaXQgZGllcyB3aXRoIFNJR1BJUEUgZXZlbiBpZiBwYXJlbnQgaWdub3JlcyBpdCcgJwogCU9VVD0kKCAoKHRyYXAgIiIgUElQRTsgbGFyZ2VfZ2l0OyBlY2hvICQ/IDE+JjMpIHwgOikgMz4mMSApICYmCi0JdGVzdCAiJE9VVCIgLWVxIDE0MQorCXRlc3RfbWF0Y2hfc2lnbmFsIDEzICIkT1VUIgogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDYtZGF0ZS5zaCBiL3QvdDAwMDYtZGF0ZS5zaAppbmRleCBmYWMwOTg2Li5jMGM5MTA4IDEwMDc1NQotLS0gYS90L3QwMDA2LWRhdGUuc2gKKysrIGIvdC90MDAwNi1kYXRlLnNoCkBAIC02LDI2ICs2LDU1IEBACiAjIGFyYml0cmFyeSByZWZlcmVuY2UgdGltZTogMjAwOS0wOC0zMCAxOToyMDowMAogVEVTVF9EQVRFX05PVz0xMjUxNjYwMDAwOyBleHBvcnQgVEVTVF9EQVRFX05PVwogCi1jaGVja19zaG93KCkgeworY2hlY2tfcmVsYXRpdmUoKSB7CiAJdD0kKCgkVEVTVF9EQVRFX05PVyAtICQxKSkKIAllY2hvICIkdCAtPiAkMiIgPmV4cGVjdAogCXRlc3RfZXhwZWN0XyR7Mzotc3VjY2Vzc30gInJlbGF0aXZlIGRhdGUgKCQyKSIgIgotCXRlc3QtZGF0ZSBzaG93ICR0ID5hY3R1YWwgJiYKKwl0ZXN0LWRhdGUgcmVsYXRpdmUgJHQgPmFjdHVhbCAmJgogCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCiAJIgogfQogCi1jaGVja19zaG93IDUgJzUgc2Vjb25kcyBhZ28nCi1jaGVja19zaG93IDMwMCAnNSBtaW51dGVzIGFnbycKLWNoZWNrX3Nob3cgMTgwMDAgJzUgaG91cnMgYWdvJwotY2hlY2tfc2hvdyA0MzIwMDAgJzUgZGF5cyBhZ28nCi1jaGVja19zaG93IDE3MjgwMDAgJzMgd2Vla3MgYWdvJwotY2hlY2tfc2hvdyAxMzAwMDAwMCAnNSBtb250aHMgYWdvJwotY2hlY2tfc2hvdyAzNzUwMDAwMCAnMSB5ZWFyLCAyIG1vbnRocyBhZ28nCi1jaGVja19zaG93IDU1MTg4MDAwICcxIHllYXIsIDkgbW9udGhzIGFnbycKLWNoZWNrX3Nob3cgNjMwMDAwMDAwICcyMCB5ZWFycyBhZ28nCi1jaGVja19zaG93IDMxNDQ5NjAwICcxMiBtb250aHMgYWdvJwotY2hlY2tfc2hvdyA2Mjk4NTYwMCAnMiB5ZWFycyBhZ28nCitjaGVja19yZWxhdGl2ZSA1ICc1IHNlY29uZHMgYWdvJworY2hlY2tfcmVsYXRpdmUgMzAwICc1IG1pbnV0ZXMgYWdvJworY2hlY2tfcmVsYXRpdmUgMTgwMDAgJzUgaG91cnMgYWdvJworY2hlY2tfcmVsYXRpdmUgNDMyMDAwICc1IGRheXMgYWdvJworY2hlY2tfcmVsYXRpdmUgMTcyODAwMCAnMyB3ZWVrcyBhZ28nCitjaGVja19yZWxhdGl2ZSAxMzAwMDAwMCAnNSBtb250aHMgYWdvJworY2hlY2tfcmVsYXRpdmUgMzc1MDAwMDAgJzEgeWVhciwgMiBtb250aHMgYWdvJworY2hlY2tfcmVsYXRpdmUgNTUxODgwMDAgJzEgeWVhciwgOSBtb250aHMgYWdvJworY2hlY2tfcmVsYXRpdmUgNjMwMDAwMDAwICcyMCB5ZWFycyBhZ28nCitjaGVja19yZWxhdGl2ZSAzMTQ0OTYwMCAnMTIgbW9udGhzIGFnbycKK2NoZWNrX3JlbGF0aXZlIDYyOTg1NjAwICcyIHllYXJzIGFnbycKKworY2hlY2tfc2hvdyAoKSB7CisJZm9ybWF0PSQxCisJdGltZT0kMgorCWV4cGVjdD0kMworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJDQgInNob3cgZGF0ZSAoJGZvcm1hdDokdGltZSkiICcKKwkJZWNobyAiJHRpbWUgLT4gJGV4cGVjdCIgPmV4cGVjdCAmJgorCQl0ZXN0LWRhdGUgc2hvdzokZm9ybWF0ICIkdGltZSIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworfQorCisjIGFyYml0cmFyeSBidXQgc2Vuc2libGUgdGltZSBmb3IgZXhhbXBsZXMKK1RJTUU9JzE0NjYwMDAwMDAgKzAyMDAnCitjaGVja19zaG93IGlzbzg2MDEgIiRUSU1FIiAnMjAxNi0wNi0xNSAxNjoxMzoyMCArMDIwMCcKK2NoZWNrX3Nob3cgaXNvODYwMS1zdHJpY3QgIiRUSU1FIiAnMjAxNi0wNi0xNVQxNjoxMzoyMCswMjowMCcKK2NoZWNrX3Nob3cgcmZjMjgyMiAiJFRJTUUiICdXZWQsIDE1IEp1biAyMDE2IDE2OjEzOjIwICswMjAwJworY2hlY2tfc2hvdyBzaG9ydCAiJFRJTUUiICcyMDE2LTA2LTE1JworY2hlY2tfc2hvdyBkZWZhdWx0ICIkVElNRSIgJ1dlZCBKdW4gMTUgMTY6MTM6MjAgMjAxNiArMDIwMCcKK2NoZWNrX3Nob3cgcmF3ICIkVElNRSIgJzE0NjYwMDAwMDAgKzAyMDAnCitjaGVja19zaG93IHVuaXggIiRUSU1FIiAnMTQ2NjAwMDAwMCcKK2NoZWNrX3Nob3cgaXNvLWxvY2FsICIkVElNRSIgJzIwMTYtMDYtMTUgMTQ6MTM6MjAgKzAwMDAnCitjaGVja19zaG93IHJhdy1sb2NhbCAiJFRJTUUiICcxNDY2MDAwMDAwICswMDAwJworY2hlY2tfc2hvdyB1bml4LWxvY2FsICIkVElNRSIgJzE0NjYwMDAwMDAnCisKKyMgYXJiaXRyYXJ5IHRpbWUgYWJzdXJkbHkgZmFyIGluIHRoZSBmdXR1cmUKK0ZVVFVSRT0iNTc1ODEyMjI5NiAtMDQwMCIKK2NoZWNrX3Nob3cgaXNvICAgICAgICIkRlVUVVJFIiAiMjE1Mi0wNi0xOSAxODoyNDo1NiAtMDQwMCIgTE9OR19JU182NEJJVAorY2hlY2tfc2hvdyBpc28tbG9jYWwgIiRGVVRVUkUiICIyMTUyLTA2LTE5IDIyOjI0OjU2ICswMDAwIiBMT05HX0lTXzY0QklUCiAKIGNoZWNrX3BhcnNlKCkgewogCWVjaG8gIiQxIC0+ICQyIiA+ZXhwZWN0CmRpZmYgLS1naXQgYS90L3QwMDA4LWlnbm9yZXMuc2ggYi90L3QwMDA4LWlnbm9yZXMuc2gKaW5kZXggYjQyNWYzYS4uZDI3ZjQzOCAxMDA3NTUKLS0tIGEvdC90MDAwOC1pZ25vcmVzLnNoCisrKyBiL3QvdDAwMDgtaWdub3Jlcy5zaApAQCAtMzQsNyArMzQsNyBAQAogdGVzdF9zdGRlcnIgKCkgewogCWV4cGVjdGVkPSIkMSIKIAlleHBlY3RfaW4gc3RkZXJyICIkMSIgJiYKLQl0ZXN0X2NtcCAiJEhPTUUvZXhwZWN0ZWQtc3RkZXJyIiAiJEhPTUUvc3RkZXJyIgorCXRlc3RfaTE4bmNtcCAiJEhPTUUvZXhwZWN0ZWQtc3RkZXJyIiAiJEhPTUUvc3RkZXJyIgogfQogCiBicm9rZW5fY191bnF1b3RlICgpIHsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RkZXJyX2NvbnRhaW5zICgpIHsKIAlyZWdleHA9IiQxIgotCWlmIGdyZXAgIiRyZWdleHAiICIkSE9NRS9zdGRlcnIiCisJaWYgdGVzdF9pMThuZ3JlcCAiJHJlZ2V4cCIgIiRIT01FL3N0ZGVyciIKIAl0aGVuCiAJCXJldHVybiAwCiAJZWxzZQpkaWZmIC0tZ2l0IGEvdC90MDAyMS1jb252ZXJzaW9uLnNoIGIvdC90MDAyMS1jb252ZXJzaW9uLnNoCmluZGV4IDdiYWMyYmMuLmU3OTllNTkgMTAwNzU1Ci0tLSBhL3QvdDAwMjEtY29udmVyc2lvbi5zaAorKysgYi90L3QwMDIxLWNvbnZlcnNpb24uc2gKQEAgLTI2OCw0ICsyNjgsMTUgQEAKIAl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgZG9lcyBub3QgcmV1c2Ugd29ya3RyZWUgZmlsZXMgdGhhdCBuZWVkIGNsZWFuaW5nJyAnCisJdGVzdF9jb25maWcgZmlsdGVyLmNvdW50ZXIuY2xlYW4gImVjaG8gLiA+PmNvdW50OyBzZWQgcy9eL2NsZWFuOi8iICYmCisJZWNobyAiZmlsZSBmaWx0ZXI9Y291bnRlciIgPi5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF9jb21taXQgb25lIGZpbGUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gZmlsZSAmJgorCisJPmNvdW50ICYmCisJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBjb3VudAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjUtY3JsZi1hdXRvLnNoIGIvdC90MDAyNS1jcmxmLWF1dG8uc2gKaW5kZXggYzE2NGI0Ni4uZDBiZWUwOCAxMDA3NTUKLS0tIGEvdC90MDAyNS1jcmxmLWF1dG8uc2gKKysrIGIvdC90MDAyNS1jcmxmLWF1dG8uc2gKQEAgLTExNCw3ICsxMTQsNyBAQAogCXRlc3QgLXogIiRMRm9ubHlkaWZmIiAtYSAteiAiJENSTEZvbmx5ZGlmZiIgLWEgLXogIiRMRndpdGhOVUxkaWZmIgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXh0PWF1dG8sIGF1dG9jcmxmPXRydWUgX2RvZXNfIG5vcm1hbGl6ZSBDUkxGIGZpbGVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXh0PWF1dG8sIGF1dG9jcmxmPXRydWUgZG9lcyBub3Qgbm9ybWFsaXplIENSTEYgZmlsZXMnICcKIAogCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBMRm9ubHkgQ1JMRm9ubHkgTEZ3aXRoTlVMICYmCiAJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKQEAgLTEyNiw3ICsxMjYsNyBAQAogCUxGb25seWRpZmY9JChnaXQgZGlmZiBMRm9ubHkpICYmCiAJQ1JMRm9ubHlkaWZmPSQoZ2l0IGRpZmYgQ1JMRm9ubHkpICYmCiAJTEZ3aXRoTlVMZGlmZj0kKGdpdCBkaWZmIExGd2l0aE5VTCkgJiYKLQl0ZXN0IC16ICIkTEZvbmx5ZGlmZiIgLWEgLW4gIiRDUkxGb25seWRpZmYiIC1hIC16ICIkTEZ3aXRoTlVMZGlmZiIKKwl0ZXN0IC16ICIkTEZvbmx5ZGlmZiIgLWEgLXogIiRDUkxGb25seWRpZmYiIC1hIC16ICIkTEZ3aXRoTlVMZGlmZiIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGV4dD1hdXRvLCBhdXRvY3JsZj10cnVlIGRvZXMgbm90IG5vcm1hbGl6ZSBiaW5hcnkgZmlsZXMnICcKZGlmZiAtLWdpdCBhL3QvdDAwMjctYXV0by1jcmxmLnNoIGIvdC90MDAyNy1hdXRvLWNybGYuc2gKaW5kZXggOTM3MjU4OS4uMjg2MGQyZCAxMDA3NTUKLS0tIGEvdC90MDAyNy1hdXRvLWNybGYuc2gKKysrIGIvdC90MDAyNy1hdXRvLWNybGYuc2gKQEAgLTE3NSw4ICsxNzUsOCBAQAogCXRleHQsbGYpICAgZWNobyAidGV4dCBlb2w9bGYiIDs7CiAJdGV4dCxjcmxmKSBlY2hvICJ0ZXh0IGVvbD1jcmxmIiA7OwogCWF1dG8sKSAgICAgZWNobyAidGV4dD1hdXRvIiA7OwotCWF1dG8sbGYpICAgZWNobyAidGV4dCBlb2w9bGYiIDs7Ci0JYXV0byxjcmxmKSBlY2hvICJ0ZXh0IGVvbD1jcmxmIiA7OworCWF1dG8sbGYpICAgZWNobyAidGV4dD1hdXRvIGVvbD1sZiIgOzsKKwlhdXRvLGNybGYpIGVjaG8gInRleHQ9YXV0byBlb2w9Y3JsZiIgOzsKIAlsZiwpICAgICAgIGVjaG8gInRleHQgZW9sPWxmIiA7OwogCWNybGYsKSAgICAgZWNobyAidGV4dCBlb2w9Y3JsZiIgOzsKIAksKSBlY2hvICIiIDs7CkBAIC0zOTcsMTAgKzM5Nyw5IEBACiBjb21taXRfY2hrX3dybk5OTyAiIiAgICAgICIiICAgICAgdHJ1ZSAgICBMRl9DUkxGICAgIiIgICAgICAgICIiICAgICAgICAgICIiICAgICAgICAgICIiCiBjb21taXRfY2hrX3dybk5OTyAiIiAgICAgICIiICAgICAgaW5wdXQgICAiIiAgICAgICAgIiIgICAgICAgICIiICAgICAgICAgICIiICAgICAgICAgICIiCiAKLWNvbW1pdF9jaGtfd3JuTk5PICJhdXRvIiAgIiIgICAgICBmYWxzZSAgICIkV0lMQyIgICAiJFdJQ0wiICAgIiRXQU1JWCIgICAgIiIgICAgICAgICAgIiIKLWNvbW1pdF9jaGtfd3JuTk5PICJhdXRvIiAgIiIgICAgICB0cnVlICAgIExGX0NSTEYgICAiIiAgICAgICAgTEZfQ1JMRiAgICAgIiIgICAgICAgICAgIiIKLWNvbW1pdF9jaGtfd3JuTk5PICJhdXRvIiAgIiIgICAgICBpbnB1dCAgICIiICAgICAgICBDUkxGX0xGICAgQ1JMRl9MRiAgICAgIiIgICAgICAgICAgIiIKLQorY29tbWl0X2Noa193cm5OTk8gImF1dG8iICAiIiAgICAgIGZhbHNlICAgIiRXSUxDIiAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgorY29tbWl0X2Noa193cm5OTk8gImF1dG8iICAiIiAgICAgIHRydWUgICAgTEZfQ1JMRiAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgorY29tbWl0X2Noa193cm5OTk8gImF1dG8iICAiIiAgICAgIGlucHV0ICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgogZm9yIGNybGYgaW4gdHJ1ZSBmYWxzZSBpbnB1dAogZG8KIAljb21taXRfY2hrX3dybk5OTyAtdGV4dCAiIiAgICAgICRjcmxmICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgpAQCAtNDA4LDggKzQwNyw4IEBACiAJY29tbWl0X2Noa193cm5OTk8gLXRleHQgY3JsZiAgICAkY3JsZiAgICIiICAgICAgICAiIiAgICAgICAgIiIgICAgICAgICAgIiIgICAgICAgICAgIiIKIAljb21taXRfY2hrX3dybk5OTyAiIiAgICBsZiAgICAgICRjcmxmICAgIiIgICAgICAgQ1JMRl9MRiAgICBDUkxGX0xGICAgICAgIiIgICAgICAgICBDUkxGX0xGCiAJY29tbWl0X2Noa193cm5OTk8gIiIgICAgY3JsZiAgICAkY3JsZiAgIExGX0NSTEYgICAiIiAgICAgICAgTEZfQ1JMRiAgICAgTEZfQ1JMRiAgICAgIiIKLQljb21taXRfY2hrX3dybk5OTyBhdXRvICBsZiAgICAJJGNybGYgICAiIiAgICAgICBDUkxGX0xGICAgIENSTEZfTEYgICAgICIiICAgICAgICAgIENSTEZfTEYKLQljb21taXRfY2hrX3dybk5OTyBhdXRvICBjcmxmICAJJGNybGYgICBMRl9DUkxGICAgIiIgICAgICAgIExGX0NSTEYgICAgIExGX0NSTEYgICAgICIiCisJY29tbWl0X2Noa193cm5OTk8gYXV0byAgbGYgICAgCSRjcmxmICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgorCWNvbW1pdF9jaGtfd3JuTk5PIGF1dG8gIGNybGYgIAkkY3JsZiAgIExGX0NSTEYgICAiIiAgICAgICAgIiIgICAgICAgICAgIiIgICAgICAgICAgIiIKIAljb21taXRfY2hrX3dybk5OTyB0ZXh0ICBsZiAgICAJJGNybGYgICAiIiAgICAgICBDUkxGX0xGICAgIENSTEZfTEYgICAgICIiICAgICAgICAgIENSTEZfTEYKIAljb21taXRfY2hrX3dybk5OTyB0ZXh0ICBjcmxmICAJJGNybGYgICBMRl9DUkxGICAgIiIgICAgICAgIExGX0NSTEYgICAgIExGX0NSTEYgICAgICIiCiBkb25lCkBAIC00NTQsOSArNDUzLDkgQEAKIAljaGVja19pbl9yZXBvX05OTyAtdGV4dCAiIiAgICAgJGNybGYgICBMRiAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgQ1JMRl9udWwKIAljaGVja19pbl9yZXBvX05OTyAtdGV4dCBsZiAgICAgJGNybGYgICBMRiAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgQ1JMRl9udWwKIAljaGVja19pbl9yZXBvX05OTyAtdGV4dCBjcmxmICAgJGNybGYgICBMRiAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgQ1JMRl9udWwKLQljaGVja19pbl9yZXBvX05OTyBhdXRvICAiIiAgICAgJGNybGYgICBMRiAgTEYgICAgTEYgICAgICAgICAgIExGX21peF9DUiAgQ1JMRl9udWwKLQljaGVja19pbl9yZXBvX05OTyBhdXRvICBsZiAgICAgJGNybGYgICBMRiAgTEYgICAgTEYgICAgICAgICAgIExGX21peF9DUiAgTEZfbnVsCi0JY2hlY2tfaW5fcmVwb19OTk8gYXV0byAgY3JsZiAgICRjcmxmICAgTEYgIExGICAgIExGICAgICAgICAgICBMRl9taXhfQ1IgIExGX251bAorCWNoZWNrX2luX3JlcG9fTk5PIGF1dG8gICIiICAgICAkY3JsZiAgIExGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICBDUkxGX251bAorCWNoZWNrX2luX3JlcG9fTk5PIGF1dG8gIGxmICAgICAkY3JsZiAgIExGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICBDUkxGX251bAorCWNoZWNrX2luX3JlcG9fTk5PIGF1dG8gIGNybGYgICAkY3JsZiAgIExGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICBDUkxGX251bAogCWNoZWNrX2luX3JlcG9fTk5PIHRleHQgICIiICAgICAkY3JsZiAgIExGICBMRiAgICBMRiAgICAgICAgICAgTEZfbWl4X0NSICBMRl9udWwKIAljaGVja19pbl9yZXBvX05OTyB0ZXh0ICBsZiAgICAgJGNybGYgICBMRiAgTEYgICAgTEYgICAgICAgICAgIExGX21peF9DUiAgTEZfbnVsCiAJY2hlY2tfaW5fcmVwb19OTk8gdGV4dCAgY3JsZiAgICRjcmxmICAgTEYgIExGICAgIExGICAgICAgICAgICBMRl9taXhfQ1IgIExGX251bApAQCAtNTA5LDcgKzUwOCw3IEBACiAJCQljaGVja291dF9maWxlcyB0ZXh0ICAiJGlkIiAiY3JsZiIgIiRjcmxmIiAiJGNlb2wiICBDUkxGICBDUkxGICBDUkxGICAgICAgICAgQ1JMRl9taXhfQ1IgIENSTEZfbnVsCiAJCQkjIGN1cnJlbnRseSB0aGUgc2FtZSBhcyB0ZXh0LCBlb2w9WFhYCiAJCQljaGVja291dF9maWxlcyBhdXRvICAiJGlkIiAibGYiICAgIiRjcmxmIiAiJGNlb2wiICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAotCQkJY2hlY2tvdXRfZmlsZXMgYXV0byAgIiRpZCIgImNybGYiICIkY3JsZiIgIiRjZW9sIiAgQ1JMRiAgQ1JMRiAgQ1JMRiAgICAgICAgIENSTEZfbWl4X0NSICBDUkxGX251bAorCQkJY2hlY2tvdXRfZmlsZXMgYXV0byAgIiRpZCIgImNybGYiICIkY3JsZiIgIiRjZW9sIiAgQ1JMRiAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKIAkJZG9uZQogCiAJCSMgY29yZS5hdXRvY3JsZiBmYWxzZSwgZGlmZmVyZW50IGNvcmUuZW9sCkBAIC01MTcsNyArNTE2LDcgQEAKIAkJIyBjb3JlLmF1dG9jcmxmIHRydWUKIAkJY2hlY2tvdXRfZmlsZXMgICAiIiAgICAiJGlkIiAiIiAgICAgdHJ1ZSAgICAiJGNlb2wiICBDUkxGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAogCQkjIHRleHQ6IGNvcmUuYXV0b2NybGYgPSB0cnVlIG92ZXJyaWRlcyBjb3JlLmVvbAotCQljaGVja291dF9maWxlcyAgIGF1dG8gICIkaWQiICIiICAgICB0cnVlICAgICIkY2VvbCIgIENSTEYgIENSTEYgIENSTEYgICAgICAgICBMRl9taXhfQ1IgICAgTEZfbnVsCisJCWNoZWNrb3V0X2ZpbGVzICAgYXV0byAgIiRpZCIgIiIgICAgIHRydWUgICAgIiRjZW9sIiAgQ1JMRiAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKIAkJY2hlY2tvdXRfZmlsZXMgICB0ZXh0ICAiJGlkIiAiIiAgICAgdHJ1ZSAgICAiJGNlb2wiICBDUkxGICBDUkxGICBDUkxGICAgICAgICAgQ1JMRl9taXhfQ1IgIENSTEZfbnVsCiAJCSMgdGV4dDogY29yZS5hdXRvY3JsZiA9IGlucHV0IG92ZXJyaWRlcyBjb3JlLmVvbAogCQljaGVja291dF9maWxlcyAgIHRleHQgICIkaWQiICIiICAgICBpbnB1dCAgICIkY2VvbCIgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCkBAIC01MzEsOCArNTMwLDggQEAKIAljaGVja291dF9maWxlcyAgICAgdGV4dCAgIiRpZCIgIiIgICAgIGZhbHNlICAgIiIgICAgICAgJE5MICAgQ1JMRiAgJE1JWF9DUkxGX0xGICRNSVhfTEZfQ1IgICAkTEZOVUwKIAljaGVja291dF9maWxlcyAgICAgdGV4dCAgIiRpZCIgIiIgICAgIGZhbHNlICAgbmF0aXZlICAgJE5MICAgQ1JMRiAgJE1JWF9DUkxGX0xGICRNSVhfTEZfQ1IgICAkTEZOVUwKIAkjIGF1dG86IGNvcmUuYXV0b2NybGY9ZmFsc2UgYW5kIGNvcmUuZW9sIHVuc2V0KG9yIG5hdGl2ZSkgdXNlcyBuYXRpdmUgZW9sCi0JY2hlY2tvdXRfZmlsZXMgICAgIGF1dG8gICIkaWQiICIiICAgICBmYWxzZSAgICIiICAgICAgICROTCAgIENSTEYgICRNSVhfQ1JMRl9MRiBMRl9taXhfQ1IgICAgTEZfbnVsCi0JY2hlY2tvdXRfZmlsZXMgICAgIGF1dG8gICIkaWQiICIiICAgICBmYWxzZSAgIG5hdGl2ZSAgICROTCAgIENSTEYgICRNSVhfQ1JMRl9MRiBMRl9taXhfQ1IgICAgTEZfbnVsCisJY2hlY2tvdXRfZmlsZXMgICAgIGF1dG8gICIkaWQiICIiICAgICBmYWxzZSAgICIiICAgICAgICROTCAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCisJY2hlY2tvdXRfZmlsZXMgICAgIGF1dG8gICIkaWQiICIiICAgICBmYWxzZSAgIG5hdGl2ZSAgICROTCAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCiBkb25lCiAKICMgU2hvdWxkIGJlIHRoZSBsYXN0IHRlc3QgY2FzZTogcmVtb3ZlIHNvbWUgZmlsZXMgZnJvbSB0aGUgd29ya3RyZWUKZGlmZiAtLWdpdCBhL3QvdDAwNzAtZnVuZGFtZW50YWwuc2ggYi90L3QwMDcwLWZ1bmRhbWVudGFsLnNoCmluZGV4IDVlZDY5YTYuLjk5MWVkMmEgMTAwNzU1Ci0tLSBhL3QvdDAwNzAtZnVuZGFtZW50YWwuc2gKKysrIGIvdC90MDA3MC1mdW5kYW1lbnRhbC5zaApAQCAtMzEsNyArMzEsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmb3IgYSBidWcgaW4gdGhlIHJlZ2V4IHJvdXRpbmVzJyAnCiAJIyBpZiB0aGlzIHRlc3QgZmFpbHMsIHJlLWJ1aWxkIGdpdCB3aXRoIE5PX1JFR0VYPTEKLQl0ZXN0LXJlZ2V4CisJdGVzdC1yZWdleCAtLWJ1ZwogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDYtY2F0LWZpbGUuc2ggYi90L3QxMDA2LWNhdC1maWxlLnNoCmluZGV4IDRmMzgwNzguLmIxOWYzMzIgMTAwNzU1Ci0tLSBhL3QvdDEwMDYtY2F0LWZpbGUuc2gKKysrIGIvdC90MTAwNi1jYXQtZmlsZS5zaApAQCAtMjMxLDcgKzIzMSw3IEBACiAgICAgICAgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCkiCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgZm9yIGFuIGVtdHB5IGxpbmUiICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgZm9yIGFuIGVtcHR5IGxpbmUiICcKICAgICB0ZXN0ICIgbWlzc2luZyIgPSAiJChlY2hvIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2spIgogJwogCmRpZmYgLS1naXQgYS90L3QxMDExLXJlYWQtdHJlZS1zcGFyc2UtY2hlY2tvdXQuc2ggYi90L3QxMDExLXJlYWQtdHJlZS1zcGFyc2UtY2hlY2tvdXQuc2gKaW5kZXggMGM3NGJlZS4uYzE2N2Y2MCAxMDA3NTUKLS0tIGEvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoCisrKyBiL3QvdDEwMTEtcmVhZC10cmVlLXNwYXJzZS1jaGVja291dC5zaApAQCAtMTUsMTEgKzE1LDExIEBACiAuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKLQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogCTEwMDY0NCA3N2YwYmExNzM0ZWQ3OWQxMjg4MWY4MWIzNmVlMTM0ZGU2YTMzMjdiIDAJaW5pdC50Ci0JMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlzdWIvYWRkZWQKLQkxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCXN1Yi9hZGRlZHRvbwotCTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJc3Vic3ViL2FkZGVkCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJc3ViL2FkZGVkCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJc3ViL2FkZGVkdG9vCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJc3Vic3ViL2FkZGVkCiAJRU9GCiAJY2F0ID5leHBlY3RlZC5zd3QgPDwtXEVPRiAmJgogCUggaW5pdC50CkBAIC0yNDQsMTAgKzI0NCwxMCBAQAogZXJyb3I6IFRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDoKIAlzdWIvYWRkZWQKIAlzdWIvYWRkZWR0b28KLVBsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgY2FuIHN3aXRjaCBicmFuY2hlcy4KK1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLgogQWJvcnRpbmcKIEVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aG91dCAtLWlnbm9yZS1za2lwLXdvcmt0cmVlLWJpdHMnICcKZGlmZiAtLWdpdCBhL3QvdDEwNTAtbGFyZ2Uuc2ggYi90L3QxMDUwLWxhcmdlLnNoCmluZGV4IGY5ZjNkMTMuLjA5NmRiZmYgMTAwNzU1Ci0tLSBhL3QvdDEwNTAtbGFyZ2Uuc2gKKysrIGIvdC90MTA1MC1sYXJnZS5zaApAQCAtMTc3LDEwICsxNzcsOSBAQAogCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBIRUFEID4vZGV2L251bGwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjaycgJwotCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+ZXJyICYmCi0Jbj0kKGdyZXAgImVycm9yOiBhdHRlbXB0aW5nIHRvIGFsbG9jYXRlIC4qIG92ZXIgbGltaXQiIGVyciB8IHdjIC1sKSAmJgotCXRlc3QgIiRuIiAtZ3QgMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBsYXJnZSBibG9icycgJworCWdpdCBmc2NrIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDExMDAtY29tbWl0LXRyZWUtb3B0aW9ucy5zaCBiL3QvdDExMDAtY29tbWl0LXRyZWUtb3B0aW9ucy5zaAppbmRleCBiN2U5YjRmYy4uYWU2NmJhNSAxMDA3NTUKLS0tIGEvdC90MTEwMC1jb21taXQtdHJlZS1vcHRpb25zLnNoCisrKyBiL3QvdDExMDAtY29tbWl0LXRyZWUtb3B0aW9ucy5zaApAQCAtMTUsNyArMTUsNyBAQAogLiAuL3Rlc3QtbGliLnNoCiAKIGNhdCA+ZXhwZWN0ZWQgPDxFT0YKLXRyZWUgNGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNAordHJlZSAkRU1QVFlfVFJFRQogYXV0aG9yIEF1dGhvciBOYW1lIDxhdXRob3JAZW1haWw+IDExMTcxNDg0MDAgKzAwMDAKIGNvbW1pdHRlciBDb21taXR0ZXIgTmFtZSA8Y29tbWl0dGVyQGVtYWlsPiAxMTE3MTUwMjAwICswMDAwCiAKZGlmZiAtLWdpdCBhL3QvdDEzMDAtcmVwby1jb25maWcuc2ggYi90L3QxMzAwLXJlcG8tY29uZmlnLnNoCmluZGV4IGQ5MzRhMjQuLjkyM2JmYzUgMTAwNzU1Ci0tLSBhL3QvdDEzMDAtcmVwby1jb25maWcuc2gKKysrIGIvdC90MTMwMC1yZXBvLWNvbmZpZy5zaApAQCAtODg2LDcgKzg4Niw3IEBACiAJCWdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGgubm9ybWFsID4+cmVzdWx0ICYmCiAJCWdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGgudHJhaWxpbmd0aWxkZSA+PnJlc3VsdAogCSkgJiYKLQlncmVwICJbRmZdYWlsZWQgdG8gZXhwYW5kLip+LyIgbXNnICYmCisJdGVzdF9pMThuZ3JlcCAiW0ZmXWFpbGVkIHRvIGV4cGFuZC4qfi8iIG1zZyAmJgogCXRlc3RfY21wIGV4cGVjdCByZXN1bHQKICcKIApAQCAtMTEyNiw3ICsxMTI2LDcgQEAKIAlrZXkgZ2FyYmFnZQogCUVPRgogCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgc2VjdGlvbi5rZXkgPmFjdHVhbCAyPmVycm9yICYmCi0JZ3JlcCAiIGxpbmUgMyAiIGVycm9yCisJdGVzdF9pMThuZ3JlcCAiIGxpbmUgMyAiIGVycm9yCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmYgb24gaW5jb21wbGV0ZSBzZWN0aW9uIGhlYWRlcicgJwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKIAlrZXkgPSB2YWx1ZQogCUVPRgogCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgc2VjdGlvbi5rZXkgPmFjdHVhbCAyPmVycm9yICYmCi0JZ3JlcCAiIGxpbmUgMiAiIGVycm9yCisJdGVzdF9pMThuZ3JlcCAiIGxpbmUgMiAiIGVycm9yCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmYgb24gaW5jb21wbGV0ZSBzdHJpbmcnICcKQEAgLTExNDYsNyArMTE0Niw3IEBACiAJa2V5ID0gInZhbHVlIHN0cmluZwogCUVPRgogCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgc2VjdGlvbi5rZXkgPmFjdHVhbCAyPmVycm9yICYmCi0JZ3JlcCAiIGxpbmUgMyAiIGVycm9yCisJdGVzdF9pMThuZ3JlcCAiIGxpbmUgMyAiIGVycm9yCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybG1hdGNoJyAnCmRpZmYgLS1naXQgYS90L3QxMzA3LWNvbmZpZy1ibG9iLnNoIGIvdC90MTMwNy1jb25maWctYmxvYi5zaAppbmRleCAzYzY3OTFlLi5lZWQzMWZmIDEwMDc1NQotLS0gYS90L3QxMzA3LWNvbmZpZy1ibG9iLnNoCisrKyBiL3QvdDEzMDctY29uZmlnLWJsb2Iuc2gKQEAgLTYxLDEwICs2MSw3IEBACiAJZ2l0IGNvbW1pdCAtbSBicm9rZW4gJiYKIAogCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIHNvbWUudmFsdWUgMj5lcnIgJiYKLQotCSMganVzdCBncmVwIGZvciBvdXIgdG9rZW4gYXMgdGhlIGV4YWN0IGVycm9yIG1lc3NhZ2UgaXMgbGlrZWx5IHRvCi0JIyBjaGFuZ2Ugb3IgYmUgaW50ZXJuYXRpb25hbGl6ZWQKLQlncmVwICJIRUFEOmNvbmZpZyIgZXJyCisJdGVzdF9pMThuZ3JlcCAiSEVBRDpjb25maWciIGVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gcGFyc2UgYmxvYiBlbmRpbmcgd2l0aCBDUicgJwpkaWZmIC0tZ2l0IGEvdC90MTMwOC1jb25maWctc2V0LnNoIGIvdC90MTMwOC1jb25maWctc2V0LnNoCmluZGV4IDAwNWQ2NmQuLjc2NTVjOTQgMTAwNzU1Ci0tLSBhL3QvdDEzMDgtY29uZmlnLXNldC5zaAorKysgYi90L3QxMzA4LWNvbmZpZy1zZXQuc2gKQEAgLTE5NywxNCArMTk3LDE0IEBACiAJZWNobyAiWyIgPj4uZ2l0L2NvbmZpZyAmJgogCWVjaG8gImZhdGFsOiBiYWQgY29uZmlnIGxpbmUgMzQgaW4gZmlsZSAuZ2l0L2NvbmZpZyIgPmV4cGVjdCAmJgogCXRlc3RfZXhwZWN0X2NvZGUgMTI4IHRlc3QtY29uZmlnIGdldF92YWx1ZSBmb28uYmFyIDI+YWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb3BlciBlcnJvciBvbiBlcnJvciBpbiBjdXN0b20gY29uZmlnIGZpbGVzJyAnCiAJZWNobyAiWyIgPj5zeW50YXgtZXJyb3IgJiYKIAllY2hvICJmYXRhbDogYmFkIGNvbmZpZyBsaW5lIDEgaW4gZmlsZSBzeW50YXgtZXJyb3IiID5leHBlY3QgJiYKIAl0ZXN0X2V4cGVjdF9jb2RlIDEyOCB0ZXN0LWNvbmZpZyBjb25maWdzZXRfZ2V0X3ZhbHVlIGZvby5iYXIgc3ludGF4LWVycm9yIDI+YWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGxpbmUgZXJyb3JzIGZvciBtYWxmb3JtZWQgdmFsdWVzJyAnCkBAIC0yMjksNCArMjI5LDM5IEBACiAJKQogJwogCitjbWRsaW5lX2NvbmZpZz0iJ2Zvby5iYXI9ZnJvbS1jbWRsaW5lJyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2l0ZXJhdGlvbiBzaG93cyBjb3JyZWN0IG9yaWdpbnMnICcKKwllY2hvICJbZm9vXWJhciA9IGZyb20tcmVwbyIgPi5naXQvY29uZmlnICYmCisJZWNobyAiW2Zvb11iYXIgPSBmcm9tLWhvbWUiID4uZ2l0Y29uZmlnICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBNSU5HVworCXRoZW4KKwkJIyBVc2UgV2luZG93cyBwYXRoIChpLmUuICpub3QqICRIT01FKQorCQlIT01FX0dJVENPTkZJRz0kKHB3ZCkvLmdpdGNvbmZpZworCWVsc2UKKwkJIyBEbyBub3QgZ2V0IGZvb2xlZCBieSBzeW1ib2xpYyBsaW5rcywgaS5lLiAkSE9NRSAhPSAkKHB3ZCkKKwkJSE9NRV9HSVRDT05GSUc9JEhPTUUvLmdpdGNvbmZpZworCWZpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJa2V5PWZvby5iYXIKKwl2YWx1ZT1mcm9tLWhvbWUKKwlvcmlnaW49ZmlsZQorCW5hbWU9JEhPTUVfR0lUQ09ORklHCisJc2NvcGU9Z2xvYmFsCisKKwlrZXk9Zm9vLmJhcgorCXZhbHVlPWZyb20tcmVwbworCW9yaWdpbj1maWxlCisJbmFtZT0uZ2l0L2NvbmZpZworCXNjb3BlPXJlcG8KKworCWtleT1mb28uYmFyCisJdmFsdWU9ZnJvbS1jbWRsaW5lCisJb3JpZ2luPWNvbW1hbmQgbGluZQorCW5hbWU9CisJc2NvcGU9Y21kbGluZQorCUVPRgorCUdJVF9DT05GSUdfUEFSQU1FVEVSUz0kY21kbGluZV9jb25maWcgdGVzdC1jb25maWcgaXRlcmF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MDAtdXBkYXRlLXJlZi5zaCBiL3QvdDE0MDAtdXBkYXRlLXJlZi5zaAppbmRleCBhZjFiMjBkLi5kNGZiOTc3IDEwMDc1NQotLS0gYS90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKKysrIGIvdC90MTQwMC11cGRhdGUtcmVmLnNoCkBAIC0yMyw3ICsyMyw3IEBACiBtPXJlZnMvaGVhZHMvbWFzdGVyCiBuX2Rpcj1yZWZzL2hlYWRzL2d1CiBuPSRuX2Rpci9maXhlcwotb3V0c2lkZT1mb28KK291dHNpZGU9cmVmcy9mb28KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJImNyZWF0ZSAkbSIgXApAQCAtMzYxLDcgKzM2MSw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy16IGZhaWxzIHdpdGhvdXQgLS1zdGRpbicgJwogCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16ICRtICRtICRtIDI+ZXJyICYmCi0JZ3JlcCAidXNhZ2U6IGdpdCB1cGRhdGUtcmVmIiBlcnIKKwl0ZXN0X2kxOG5ncmVwICJ1c2FnZTogZ2l0IHVwZGF0ZS1yZWYiIGVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB3b3JrcyB3aXRoIG5vIGlucHV0JyAnCkBAIC00NzksNyArNDc5LDcgQEAKIAljcmVhdGUgJGEgJG0KIAlFT0YKIAl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgotCWdyZXAgImZhdGFsOiBNdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyInIickYSciJyInIG5vdCBhbGxvd2VkLiIgZXJyCisJZ3JlcCAiZmF0YWw6IG11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnIiciJyRhJyInIicgbm90IGFsbG93ZWQuIiBlcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gY3JlYXRlIHJlZiB3b3JrcycgJwpAQCAtODgwLDcgKzg4MCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyB3aXRoIGR1cGxpY2F0ZSByZWZzJyAnCiAJcHJpbnRmICRGICJjcmVhdGUgJGEiICIkbSIgImNyZWF0ZSAkYiIgIiRtIiAiY3JlYXRlICRhIiAiJG0iID5zdGRpbiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCi0JZ3JlcCAiZmF0YWw6IE11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnIiciJyRhJyInIicgbm90IGFsbG93ZWQuIiBlcnIKKwlncmVwICJmYXRhbDogbXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICciJyInJGEnIiciJyBub3QgYWxsb3dlZC4iIGVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBjcmVhdGUgcmVmIHdvcmtzJyAnCkBAIC0xMTAyLDYgKzExMDIsNDEgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHdpdGggZHVwbGljYXRlIEhFQUQgdXBkYXRlJyAnCisJZ2l0IGJyYW5jaCB0YXJnZXQxICRBICYmCisJZ2l0IGNoZWNrb3V0IHRhcmdldDEgJiYKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXVwZGF0ZSByZWZzL2hlYWRzL3RhcmdldDEgJEMKKwlvcHRpb24gbm8tZGVyZWYKKwl1cGRhdGUgSEVBRCAkQgorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IG11bHRpcGxlIHVwZGF0ZXMgZm9yICdcJydIRUFEJ1wnJyAoaW5jbHVkaW5nIG9uZSB2aWEgaXRzIHJlZmVyZW50IC5yZWZzL2hlYWRzL3RhcmdldDEuKSBhcmUgbm90IGFsbG93ZWQiIGVyciAmJgorCWVjaG8gInJlZnMvaGVhZHMvdGFyZ2V0MSIgPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gIiRBIiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL3RhcmdldDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aCBkdXBsaWNhdGUgcmVmIHVwZGF0ZSB2aWEgc3ltcmVmJyAnCisJZ2l0IGJyYW5jaCB0YXJnZXQyICRBICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3N5bXJlZjIgcmVmcy9oZWFkcy90YXJnZXQyICYmCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwl1cGRhdGUgcmVmcy9oZWFkcy90YXJnZXQyICRDCisJdXBkYXRlIHJlZnMvaGVhZHMvc3ltcmVmMiAkQgorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IG11bHRpcGxlIHVwZGF0ZXMgZm9yICdcJydyZWZzL2hlYWRzL3RhcmdldDInXCcnIChpbmNsdWRpbmcgb25lIHZpYSBzeW1yZWYgLnJlZnMvaGVhZHMvc3ltcmVmMi4pIGFyZSBub3QgYWxsb3dlZCIgZXJyICYmCisJZWNobyAicmVmcy9oZWFkcy90YXJnZXQyIiA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3N5bXJlZjIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICIkQSIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy90YXJnZXQyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHJ1bl93aXRoX2xpbWl0ZWRfb3Blbl9maWxlcyAoKSB7CiAJKHVsaW1pdCAtbiAzMiAmJiAiJEAiKQogfQpkaWZmIC0tZ2l0IGEvdC90MTQwMS1zeW1ib2xpYy1yZWYuc2ggYi90L3QxNDAxLXN5bWJvbGljLXJlZi5zaAppbmRleCA0MTdlZWNjLi5jYTNmYTQwIDEwMDc1NQotLS0gYS90L3QxNDAxLXN5bWJvbGljLXJlZi5zaAorKysgYi90L3QxNDAxLXN5bWJvbGljLXJlZi5zaApAQCAtMTEwLDcgKzExMCw3IEBACiAJdXBkYXRlCiAJY3JlYXRlCiAJRU9GCi0JZ2l0IGxvZyAtLWZvcm1hdD0lZ3MgLWcgPmFjdHVhbCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JWdzIC1nIC0yID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDE0MDQtdXBkYXRlLXJlZi1kZi1jb25mbGljdHMuc2ggYi90L3QxNDA0LXVwZGF0ZS1yZWYtZGYtY29uZmxpY3RzLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2NmJhZmI1Li4wMDAwMDAwCi0tLSBhL3QvdDE0MDQtdXBkYXRlLXJlZi1kZi1jb25mbGljdHMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotIyEvYmluL3NoCi0KLXRlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHVwZGF0ZS1yZWYgd2l0aCBEL0YgY29uZmxpY3RzJwotLiAuL3Rlc3QtbGliLnNoCi0KLXRlc3RfdXBkYXRlX3JlamVjdGVkICgpIHsKLQlwcmVmaXg9IiQxIiAmJgotCWJlZm9yZT0iJDIiICYmCi0JcGFjaz0iJDMiICYmCi0JY3JlYXRlPSIkNCIgJiYKLQllcnJvcj0iJDUiICYmCi0JcHJpbnRmICJjcmVhdGUgJHByZWZpeC8lcyAkQ1xuIiAkYmVmb3JlIHwKLQlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluICYmCi0JZ2l0IGZvci1lYWNoLXJlZiAkcHJlZml4ID51bmNoYW5nZWQgJiYKLQlpZiAkcGFjawotCXRoZW4KLQkJZ2l0IHBhY2stcmVmcyAtLWFsbAotCWZpICYmCi0JcHJpbnRmICJjcmVhdGUgJHByZWZpeC8lcyAkQ1xuIiAkY3JlYXRlID5pbnB1dCAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPGlucHV0IDI+b3V0cHV0LmVyciAmJgotCWdyZXAgLUYgIiRlcnJvciIgb3V0cHV0LmVyciAmJgotCWdpdCBmb3ItZWFjaC1yZWYgJHByZWZpeCA+YWN0dWFsICYmCi0JdGVzdF9jbXAgdW5jaGFuZ2VkIGFjdHVhbAotfQotCi1RPSInIgotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJwotCi0JZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIEluaXRpYWwgJiYKLQlDPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQotCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIGxvb3NlIHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgbmV3JyAnCi0KLQlwcmVmaXg9cmVmcy8xbCAmJgotCXRlc3RfdXBkYXRlX3JlamVjdGVkICRwcmVmaXggImEgYyBlIiBmYWxzZSAiYiBjL3ggZCIgXAotCQkiJFEkcHJlZml4L2MkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MveCRRIgotCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIHBhY2tlZCByZWYgaXMgYSBzaW1wbGUgcHJlZml4IG9mIG5ldycgJwotCi0JcHJlZml4PXJlZnMvMXAgJiYKLQl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAkcHJlZml4ICJhIGMgZSIgdHJ1ZSAiYiBjL3ggZCIgXAotCQkiJFEkcHJlZml4L2MkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MveCRRIgotCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIGxvb3NlIHJlZiBpcyBhIGRlZXBlciBwcmVmaXggb2YgbmV3JyAnCi0KLQlwcmVmaXg9cmVmcy8ybCAmJgotCXRlc3RfdXBkYXRlX3JlamVjdGVkICRwcmVmaXggImEgYyBlIiBmYWxzZSAiYiBjL3gveSBkIiBcCi0JCSIkUSRwcmVmaXgvYyRRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkUSRwcmVmaXgvYy94L3kkUSIKLQotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGluZyBwYWNrZWQgcmVmIGlzIGEgZGVlcGVyIHByZWZpeCBvZiBuZXcnICcKLQotCXByZWZpeD1yZWZzLzJwICYmCi0JdGVzdF91cGRhdGVfcmVqZWN0ZWQgJHByZWZpeCAiYSBjIGUiIHRydWUgImIgYy94L3kgZCIgXAotCQkiJFEkcHJlZml4L2MkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MveC95JFEiCi0KLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgZXhpc3RpbmcgbG9vc2UnICcKLQotCXByZWZpeD1yZWZzLzNsICYmCi0JdGVzdF91cGRhdGVfcmVqZWN0ZWQgJHByZWZpeCAiYSBjL3ggZSIgZmFsc2UgImIgYyBkIiBcCi0JCSIkUSRwcmVmaXgvYy94JFEgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRRJHByZWZpeC9jJFEiCi0KLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgZXhpc3RpbmcgcGFja2VkJyAnCi0KLQlwcmVmaXg9cmVmcy8zcCAmJgotCXRlc3RfdXBkYXRlX3JlamVjdGVkICRwcmVmaXggImEgYy94IGUiIHRydWUgImIgYyBkIiBcCi0JCSIkUSRwcmVmaXgvYy94JFEgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRRJHByZWZpeC9jJFEiCi0KLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlZiBpcyBhIGRlZXBlciBwcmVmaXggb2YgZXhpc3RpbmcgbG9vc2UnICcKLQotCXByZWZpeD1yZWZzLzRsICYmCi0JdGVzdF91cGRhdGVfcmVqZWN0ZWQgJHByZWZpeCAiYSBjL3gveSBlIiBmYWxzZSAiYiBjIGQiIFwKLQkJIiRRJHByZWZpeC9jL3gveSRRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkUSRwcmVmaXgvYyRRIgotCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyByZWYgaXMgYSBkZWVwZXIgcHJlZml4IG9mIGV4aXN0aW5nIHBhY2tlZCcgJwotCi0JcHJlZml4PXJlZnMvNHAgJiYKLQl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAkcHJlZml4ICJhIGMveC95IGUiIHRydWUgImIgYyBkIiBcCi0JCSIkUSRwcmVmaXgvYy94L3kkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MkUSIKLQotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmUgbmV3IHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgYW5vdGhlcicgJwotCi0JcHJlZml4PXJlZnMvNSAmJgotCXRlc3RfdXBkYXRlX3JlamVjdGVkICRwcmVmaXggImEgZSIgZmFsc2UgImIgYyBjL3ggZCIgXAotCQkiY2Fubm90IHByb2Nlc3MgJFEkcHJlZml4L2MkUSBhbmQgJFEkcHJlZml4L2MveCRRIGF0IHRoZSBzYW1lIHRpbWUiCi0KLScKLQotdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDA0LXVwZGF0ZS1yZWYtZXJyb3JzLnNoIGIvdC90MTQwNC11cGRhdGUtcmVmLWVycm9ycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMzRlY2U0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTQwNC11cGRhdGUtcmVmLWVycm9ycy5zaApAQCAtMCwwICsxLDQwNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHVwZGF0ZS1yZWYgZXJyb3IgaGFuZGxpbmcnCisuIC4vdGVzdC1saWIuc2gKKworIyBDcmVhdGUgc29tZSByZWZlcmVuY2VzLCBwZXJoYXBzIHJ1biBwYWNrLXJlZnMgLS1hbGwsIHRoZW4gdHJ5IHRvCisjIGNyZWF0ZSBzb21lIG1vcmUgcmVmZXJlbmNlcy4gRW5zdXJlIHRoYXQgdGhlIHNlY29uZCBjcmVhdGlvbiBmYWlscworIyB3aXRoIHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2UuCisjIFVzYWdlOiB0ZXN0X3VwZGF0ZV9yZWplY3RlZCA8YmVmb3JlPiA8cGFjaz4gPGNyZWF0ZT4gPGVycm9yPgorIyAgIDxiZWZvcmU+IGlzIGEgd3Mtc2VwYXJhdGVkIGxpc3Qgb2YgcmVmcyB0byBjcmVhdGUgYmVmb3JlIHRoZSB0ZXN0CisjICAgPHBhY2s+ICh0cnVlIG9yIGZhbHNlKSB0ZWxscyB3aGV0aGVyIHRvIHBhY2sgdGhlIHJlZnMgYmVmb3JlIHRoZSB0ZXN0CisjICAgPGNyZWF0ZT4gaXMgYSBsaXN0IG9mIHZhcmlhYmxlcyB0byBhdHRlbXB0IGNyZWF0aW5nCisjICAgPGVycm9yPiBpcyBhIHN0cmluZyB0byBsb29rIGZvciBpbiB0aGUgc3RkZXJyIG9mIHVwZGF0ZS1yZWYuCisjIEFsbCByZWZlcmVuY2VzIGFyZSBjcmVhdGVkIGluIHRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50CisjIHZhbHVlIG9mICRwcmVmaXguCit0ZXN0X3VwZGF0ZV9yZWplY3RlZCAoKSB7CisJYmVmb3JlPSIkMSIgJiYKKwlwYWNrPSIkMiIgJiYKKwljcmVhdGU9IiQzIiAmJgorCWVycm9yPSIkNCIgJiYKKwlwcmludGYgImNyZWF0ZSAkcHJlZml4LyVzICRDXG4iICRiZWZvcmUgfAorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gJiYKKwlnaXQgZm9yLWVhY2gtcmVmICRwcmVmaXggPnVuY2hhbmdlZCAmJgorCWlmICRwYWNrCisJdGhlbgorCQlnaXQgcGFjay1yZWZzIC0tYWxsCisJZmkgJiYKKwlwcmludGYgImNyZWF0ZSAkcHJlZml4LyVzICRDXG4iICRjcmVhdGUgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8aW5wdXQgMj5vdXRwdXQuZXJyICYmCisJZ3JlcCAtRiAiJGVycm9yIiBvdXRwdXQuZXJyICYmCisJZ2l0IGZvci1lYWNoLXJlZiAkcHJlZml4ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB1bmNoYW5nZWQgYWN0dWFsCit9CisKK1E9IiciCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gSW5pdGlhbCAmJgorCUM9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIFNlY29uZCAmJgorCUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIFRoaXJkICYmCisJRT0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3RpbmcgbG9vc2UgcmVmIGlzIGEgc2ltcGxlIHByZWZpeCBvZiBuZXcnICcKKworCXByZWZpeD1yZWZzLzFsICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgImEgYyBlIiBmYWxzZSAiYiBjL3ggZCIgXAorCQkiJFEkcHJlZml4L2MkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MveCRRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIHBhY2tlZCByZWYgaXMgYSBzaW1wbGUgcHJlZml4IG9mIG5ldycgJworCisJcHJlZml4PXJlZnMvMXAgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjIGUiIHRydWUgImIgYy94IGQiIFwKKwkJIiRRJHByZWZpeC9jJFEgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRRJHByZWZpeC9jL3gkUSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGluZyBsb29zZSByZWYgaXMgYSBkZWVwZXIgcHJlZml4IG9mIG5ldycgJworCisJcHJlZml4PXJlZnMvMmwgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjIGUiIGZhbHNlICJiIGMveC95IGQiIFwKKwkJIiRRJHByZWZpeC9jJFEgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRRJHByZWZpeC9jL3gveSRRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIHBhY2tlZCByZWYgaXMgYSBkZWVwZXIgcHJlZml4IG9mIG5ldycgJworCisJcHJlZml4PXJlZnMvMnAgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjIGUiIHRydWUgImIgYy94L3kgZCIgXAorCQkiJFEkcHJlZml4L2MkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MveC95JFEiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgZXhpc3RpbmcgbG9vc2UnICcKKworCXByZWZpeD1yZWZzLzNsICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgImEgYy94IGUiIGZhbHNlICJiIGMgZCIgXAorCQkiJFEkcHJlZml4L2MveCRRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkUSRwcmVmaXgvYyRRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyByZWYgaXMgYSBzaW1wbGUgcHJlZml4IG9mIGV4aXN0aW5nIHBhY2tlZCcgJworCisJcHJlZml4PXJlZnMvM3AgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjL3ggZSIgdHJ1ZSAiYiBjIGQiIFwKKwkJIiRRJHByZWZpeC9jL3gkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MkUSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgcmVmIGlzIGEgZGVlcGVyIHByZWZpeCBvZiBleGlzdGluZyBsb29zZScgJworCisJcHJlZml4PXJlZnMvNGwgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjL3gveSBlIiBmYWxzZSAiYiBjIGQiIFwKKwkJIiRRJHByZWZpeC9jL3gveSRRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkUSRwcmVmaXgvYyRRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyByZWYgaXMgYSBkZWVwZXIgcHJlZml4IG9mIGV4aXN0aW5nIHBhY2tlZCcgJworCisJcHJlZml4PXJlZnMvNHAgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjL3gveSBlIiB0cnVlICJiIGMgZCIgXAorCQkiJFEkcHJlZml4L2MveC95JFEgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRRJHByZWZpeC9jJFEiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25lIG5ldyByZWYgaXMgYSBzaW1wbGUgcHJlZml4IG9mIGFub3RoZXInICcKKworCXByZWZpeD1yZWZzLzUgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBlIiBmYWxzZSAiYiBjIGMveCBkIiBcCisJCSJjYW5ub3QgcHJvY2VzcyAkUSRwcmVmaXgvYyRRIGFuZCAkUSRwcmVmaXgvYy94JFEgYXQgdGhlIHNhbWUgdGltZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBmb29sIHJldi1wYXJzZScgJworCXByZWZpeD1yZWZzL2UtcmV2LXBhcnNlICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6ICYmCisJZWNobyAiJEMiID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgJHByZWZpeC9mb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBmb29sIGZvci1lYWNoLXJlZicgJworCXByZWZpeD1yZWZzL2UtZm9yLWVhY2gtcmVmICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmICRwcmVmaXggPmV4cGVjdGVkICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyL2JheiAmJgorCWdpdCBmb3ItZWFjaC1yZWYgJHByZWZpeCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yeSBzaG91bGQgbm90IGZvb2wgY3JlYXRlJyAnCisJcHJlZml4PXJlZnMvZS1jcmVhdGUgJiYKKwlta2RpciAtcCAuZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXogJiYKKwlwcmludGYgImNyZWF0ZSAlcyAkQ1xuIiAkcHJlZml4L2ZvbyB8CisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBmb29sIHZlcmlmeScgJworCXByZWZpeD1yZWZzL2UtdmVyaWZ5ICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6ICYmCisJcHJpbnRmICJ2ZXJpZnkgJXMgJENcbiIgJHByZWZpeC9mb28gfAorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3J5IHNob3VsZCBub3QgZm9vbCAxLWFyZyB1cGRhdGUnICcKKwlwcmVmaXg9cmVmcy9lLXVwZGF0ZS0xICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6ICYmCisJcHJpbnRmICJ1cGRhdGUgJXMgJERcbiIgJHByZWZpeC9mb28gfAorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3J5IHNob3VsZCBub3QgZm9vbCAyLWFyZyB1cGRhdGUnICcKKwlwcmVmaXg9cmVmcy9lLXVwZGF0ZS0yICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6ICYmCisJcHJpbnRmICJ1cGRhdGUgJXMgJEQgJENcbiIgJHByZWZpeC9mb28gfAorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3J5IHNob3VsZCBub3QgZm9vbCAwLWFyZyBkZWxldGUnICcKKwlwcmVmaXg9cmVmcy9lLWRlbGV0ZS0wICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6ICYmCisJcHJpbnRmICJkZWxldGUgJXNcbiIgJHByZWZpeC9mb28gfAorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3J5IHNob3VsZCBub3QgZm9vbCAxLWFyZyBkZWxldGUnICcKKwlwcmVmaXg9cmVmcy9lLWRlbGV0ZS0xICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6ICYmCisJcHJpbnRmICJkZWxldGUgJXMgJENcbiIgJHByZWZpeC9mb28gfAorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4KKycKKworIyBUZXN0IHZhcmlvdXMgZXJyb3JzIHdoZW4gcmVhZGluZyB0aGUgb2xkIHZhbHVlcyBvZiByZWZlcmVuY2VzLi4uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgb2xkIHZhbHVlIGJsb2NrcyB1cGRhdGUnICcKKwlwcmVmaXg9cmVmcy9taXNzaW5nLXVwZGF0ZSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkUSRwcmVmaXgvZm9vJFE6IHVuYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZSAkUSRwcmVmaXgvZm9vJFEKKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9mb28gJEUgJEQiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IG9sZCB2YWx1ZSBibG9ja3MgdXBkYXRlJyAnCisJcHJlZml4PXJlZnMvaW5jb3JyZWN0LXVwZGF0ZSAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRRJHByZWZpeC9mb28kUTogaXMgYXQgJEMgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvZm9vICRFICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIG9sZCB2YWx1ZSBibG9ja3MgY3JlYXRlJyAnCisJcHJlZml4PXJlZnMvZXhpc3RpbmctY3JlYXRlICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFEkcHJlZml4L2ZvbyRROiByZWZlcmVuY2UgYWxyZWFkeSBleGlzdHMKKwlFT0YKKwlwcmludGYgIiVzXG4iICJjcmVhdGUgJHByZWZpeC9mb28gJEUiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IG9sZCB2YWx1ZSBibG9ja3MgZGVsZXRlJyAnCisJcHJlZml4PXJlZnMvaW5jb3JyZWN0LWRlbGV0ZSAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRRJHByZWZpeC9mb28kUTogaXMgYXQgJEMgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAiZGVsZXRlICRwcmVmaXgvZm9vICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgb2xkIHZhbHVlIGJsb2NrcyBpbmRpcmVjdCB1cGRhdGUnICcKKwlwcmVmaXg9cmVmcy9taXNzaW5nLWluZGlyZWN0LXVwZGF0ZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgJHByZWZpeC9zeW1yZWYgJHByZWZpeC9mb28gJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFEkcHJlZml4L3N5bXJlZiRROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFEkcHJlZml4L2ZvbyRRCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvc3ltcmVmICRFICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBvbGQgdmFsdWUgYmxvY2tzIGluZGlyZWN0IHVwZGF0ZScgJworCXByZWZpeD1yZWZzL2luY29ycmVjdC1pbmRpcmVjdC11cGRhdGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFEkcHJlZml4L3N5bXJlZiRROiBpcyBhdCAkQyBidXQgZXhwZWN0ZWQgJEQKKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEUgJEQiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3Rpbmcgb2xkIHZhbHVlIGJsb2NrcyBpbmRpcmVjdCBjcmVhdGUnICcKKwlwcmVmaXg9cmVmcy9leGlzdGluZy1pbmRpcmVjdC1jcmVhdGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFEkcHJlZml4L3N5bXJlZiRROiByZWZlcmVuY2UgYWxyZWFkeSBleGlzdHMKKwlFT0YKKwlwcmludGYgIiVzXG4iICJjcmVhdGUgJHByZWZpeC9zeW1yZWYgJEUiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3QgZGVsZXRlJyAnCisJcHJlZml4PXJlZnMvaW5jb3JyZWN0LWluZGlyZWN0LWRlbGV0ZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgJHByZWZpeC9zeW1yZWYgJHByZWZpeC9mb28gJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkUSRwcmVmaXgvc3ltcmVmJFE6IGlzIGF0ICRDIGJ1dCBleHBlY3RlZCAkRAorCUVPRgorCXByaW50ZiAiJXNcbiIgImRlbGV0ZSAkcHJlZml4L3N5bXJlZiAkRCIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3Qgbm8tZGVyZWYgdXBkYXRlJyAnCisJcHJlZml4PXJlZnMvbWlzc2luZy1ub2RlcmVmLXVwZGF0ZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgJHByZWZpeC9zeW1yZWYgJHByZWZpeC9mb28gJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFEkcHJlZml4L3N5bXJlZiRROiByZWZlcmVuY2UgaXMgbWlzc2luZyBidXQgZXhwZWN0ZWQgJEQKKwlFT0YKKwlwcmludGYgIiVzXG4iICJvcHRpb24gbm8tZGVyZWYiICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEUgJEQiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3Qgbm8tZGVyZWYgdXBkYXRlJyAnCisJcHJlZml4PXJlZnMvaW5jb3JyZWN0LW5vZGVyZWYtdXBkYXRlICYmCisJZ2l0IHN5bWJvbGljLXJlZiAkcHJlZml4L3N5bXJlZiAkcHJlZml4L2ZvbyAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRRJHByZWZpeC9zeW1yZWYkUTogaXMgYXQgJEMgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAib3B0aW9uIG5vLWRlcmVmIiAidXBkYXRlICRwcmVmaXgvc3ltcmVmICRFICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3Qgbm8tZGVyZWYgY3JlYXRlJyAnCisJcHJlZml4PXJlZnMvZXhpc3Rpbmctbm9kZXJlZi1jcmVhdGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFEkcHJlZml4L3N5bXJlZiRROiByZWZlcmVuY2UgYWxyZWFkeSBleGlzdHMKKwlFT0YKKwlwcmludGYgIiVzXG4iICJvcHRpb24gbm8tZGVyZWYiICJjcmVhdGUgJHByZWZpeC9zeW1yZWYgJEUiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3Qgbm8tZGVyZWYgZGVsZXRlJyAnCisJcHJlZml4PXJlZnMvaW5jb3JyZWN0LW5vZGVyZWYtZGVsZXRlICYmCisJZ2l0IHN5bWJvbGljLXJlZiAkcHJlZml4L3N5bXJlZiAkcHJlZml4L2ZvbyAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRRJHByZWZpeC9zeW1yZWYkUTogaXMgYXQgJEMgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAib3B0aW9uIG5vLWRlcmVmIiAiZGVsZXRlICRwcmVmaXgvc3ltcmVmICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1lbXB0eSBkaXJlY3RvcnkgYmxvY2tzIGNyZWF0ZScgJworCXByZWZpeD1yZWZzL25lLWNyZWF0ZSAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyICYmCisJOiA+LmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6LmxvY2sgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJHByZWZpeC9mb28vYmFyL2Jhei5sb2NrIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkUSRwcmVmaXgvZm9vJFE6IHRoZXJlIGlzIGEgbm9uLWVtcHR5IGRpcmVjdG9yeSAkUS5naXQvJHByZWZpeC9mb28kUSBibG9ja2luZyByZWZlcmVuY2UgJFEkcHJlZml4L2ZvbyRRCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvZm9vICRDIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRRJHByZWZpeC9mb28kUTogdW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICRRJHByZWZpeC9mb28kUQorCUVPRgorCXByaW50ZiAiJXNcbiIgInVwZGF0ZSAkcHJlZml4L2ZvbyAkRCAkQyIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicm9rZW4gcmVmZXJlbmNlIGJsb2NrcyBjcmVhdGUnICcKKwlwcmVmaXg9cmVmcy9icm9rZW4tY3JlYXRlICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4ICYmCisJZWNobyAiZ29iYmxlZGlnb29rIiA+LmdpdC8kcHJlZml4L2ZvbyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kcHJlZml4L2ZvbyIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFEkcHJlZml4L2ZvbyRROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFEkcHJlZml4L2ZvbyRROiByZWZlcmVuY2UgYnJva2VuCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvZm9vICRDIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRRJHByZWZpeC9mb28kUTogdW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICRRJHByZWZpeC9mb28kUTogcmVmZXJlbmNlIGJyb2tlbgorCUVPRgorCXByaW50ZiAiJXNcbiIgInVwZGF0ZSAkcHJlZml4L2ZvbyAkRCAkQyIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZW1wdHkgZGlyZWN0b3J5IGJsb2NrcyBpbmRpcmVjdCBjcmVhdGUnICcKKwlwcmVmaXg9cmVmcy9uZS1pbmRpcmVjdC1jcmVhdGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4L2Zvby9iYXIgJiYKKwk6ID4uZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXoubG9jayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6LmxvY2siICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRRJHByZWZpeC9zeW1yZWYkUTogdGhlcmUgaXMgYSBub24tZW1wdHkgZGlyZWN0b3J5ICRRLmdpdC8kcHJlZml4L2ZvbyRRIGJsb2NraW5nIHJlZmVyZW5jZSAkUSRwcmVmaXgvZm9vJFEKKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEMiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFEkcHJlZml4L3N5bXJlZiRROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFEkcHJlZml4L2ZvbyRRCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvc3ltcmVmICREICRDIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jyb2tlbiByZWZlcmVuY2UgYmxvY2tzIGluZGlyZWN0IGNyZWF0ZScgJworCXByZWZpeD1yZWZzL2Jyb2tlbi1pbmRpcmVjdC1jcmVhdGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJZWNobyAiZ29iYmxlZGlnb29rIiA+LmdpdC8kcHJlZml4L2ZvbyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kcHJlZml4L2ZvbyIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFEkcHJlZml4L3N5bXJlZiRROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFEkcHJlZml4L2ZvbyRROiByZWZlcmVuY2UgYnJva2VuCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvc3ltcmVmICRDIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRRJHByZWZpeC9zeW1yZWYkUTogdW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICRRJHByZWZpeC9mb28kUTogcmVmZXJlbmNlIGJyb2tlbgorCUVPRgorCXByaW50ZiAiJXNcbiIgInVwZGF0ZSAkcHJlZml4L3N5bXJlZiAkRCAkQyIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MTAtcmVmbG9nLnNoIGIvdC90MTQxMC1yZWZsb2cuc2gKaW5kZXggOWNmOTFkYy4uZGQyYmUwNCAxMDA3NTUKLS0tIGEvdC90MTQxMC1yZWZsb2cuc2gKKysrIGIvdC90MTQxMC1yZWZsb2cuc2gKQEAgLTM0OCw0ICszNDgsMjYgQEAKIAlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1hbGwgdGhlX3N5bXJlZgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb250aW51ZSB3YWxraW5nIHBhc3Qgcm9vdCBjb21taXRzJyAnCisJZ2l0IGluaXQgb3JwaGFuYWdlICYmCisJKAorCQljZCBvcnBoYW5hZ2UgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlIRUFEQHswfSBjb21taXQgKGluaXRpYWwpOiBvcnBoYW4yLTEKKwkJSEVBREB7MX0gY29tbWl0OiBvcnBoYW4xLTIKKwkJSEVBREB7Mn0gY29tbWl0IChpbml0aWFsKTogb3JwaGFuMS0xCisJCUhFQURAezN9IGNvbW1pdCAoaW5pdGlhbCk6IGluaXRpYWwKKwkJRU9GCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJZ2l0IHJlZmxvZyAmJgorCQlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gb3JwaGFuMSAmJgorCQl0ZXN0X2NvbW1pdCBvcnBoYW4xLTEgJiYKKwkJdGVzdF9jb21taXQgb3JwaGFuMS0yICYmCisJCWdpdCBjaGVja291dCAtLW9ycGhhbiBvcnBoYW4yICYmCisJCXRlc3RfY29tbWl0IG9ycGhhbjItMSAmJgorCQlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQzMC1iYWQtcmVmLW5hbWUuc2ggYi90L3QxNDMwLWJhZC1yZWYtbmFtZS5zaAppbmRleCAyNWRkYWI0Li44OTM3ZTI1IDEwMDc1NQotLS0gYS90L3QxNDMwLWJhZC1yZWYtbmFtZS5zaAorKysgYi90L3QxNDMwLWJhZC1yZWYtbmFtZS5zaApAQCAtMjg1LDcgKzI4NSw3IEBACiAJZWNobyBwcmVjaW91cyA+ZXhwZWN0ICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLWQgbXktcHJpdmF0ZS1maWxlID5vdXRwdXQgMj5lcnJvciAmJgogCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKLQl0ZXN0X2kxOG5ncmVwIC1lICJjYW5ub3QgbG9jayAuKjogdW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlIiBlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSIgZXJyb3IgJiYKIAl0ZXN0X2NtcCBleHBlY3QgLmdpdC9teS1wcml2YXRlLWZpbGUKICcKIApkaWZmIC0tZ2l0IGEvdC90MTQ1MC1mc2NrLnNoIGIvdC90MTQ1MC1mc2NrLnNoCmluZGV4IDdlZThlYTAuLjhmNTJkYTIgMTAwNzU1Ci0tLSBhL3QvdDE0NTAtZnNjay5zaAorKysgYi90L3QxNDUwLWZzY2suc2gKQEAgLTUyMyw0ICs1MjMsMjYgQEAKIAkpCiAnCiAKK3JlbW92ZV9sb29zZV9vYmplY3QgKCkgeworCXNoYTE9IiQoZ2l0IHJldi1wYXJzZSAiJDEiKSIgJiYKKwlyZW1haW5kZXI9JHtzaGExIz8/fSAmJgorCWZpcnN0dHdvPSR7c2hhMSUkcmVtYWluZGVyfSAmJgorCXJtIC5naXQvb2JqZWN0cy8kZmlyc3R0d28vJHJlbWFpbmRlcgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIC0tbmFtZS1vYmplY3RzJyAnCisJcm0gLXJmIG5hbWUtb2JqZWN0cyAmJgorCWdpdCBpbml0IG5hbWUtb2JqZWN0cyAmJgorCSgKKwkJY2QgbmFtZS1vYmplY3RzICYmCisJCXRlc3RfY29tbWl0IGp1bGl1cyBjYWVzYXIudCAmJgorCQl0ZXN0X2NvbW1pdCBhdWd1c3R1cyAmJgorCQl0ZXN0X2NvbW1pdCBjYWVzYXIgJiYKKwkJcmVtb3ZlX2xvb3NlX29iamVjdCAkKGdpdCByZXYtcGFyc2UganVsaXVzOmNhZXNhci50KSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLW5hbWUtb2JqZWN0cyA+b3V0ICYmCisJCXRyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGp1bGl1czopICYmCisJCWdyZXAgIiR0cmVlIChcKHJlZnMvaGVhZHMvbWFzdGVyXHxIRUFEXClAe1swLTldKn06IiBvdXQKKwkpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwNi1yZXYtcGFyc2UtZGlhZ25vc2lzLnNoIGIvdC90MTUwNi1yZXYtcGFyc2UtZGlhZ25vc2lzLnNoCmluZGV4IDg2YzJmZjIuLjc5YTAyNTEgMTAwNzU1Ci0tLSBhL3QvdDE1MDYtcmV2LXBhcnNlLWRpYWdub3Npcy5zaAorKysgYi90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2gKQEAgLTEwNiw3ICsxMDYsNyBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgZm9vYmFyOmZpbGUudHh0IDI+ZXJyb3IgJiYKIAlncmVwICJJbnZhbGlkIG9iamVjdCBuYW1lICciJyInZm9vYmFyJyInIicuIiBlcnJvciAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgZm9vYmFyIDI+IGVycm9yICYmCi0JZ3JlcCAidW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLiIgZXJyb3IKKwl0ZXN0X2kxOG5ncmVwICJ1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuIiBlcnJvcgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3QgZmlsZSBpbiBzaGExOnBhdGgnICcKZGlmZiAtLWdpdCBhL3QvdDE3MDAtc3BsaXQtaW5kZXguc2ggYi90L3QxNzAwLXNwbGl0LWluZGV4LnNoCmluZGV4IDhhZWY0OWYuLjI5MmEwNzIgMTAwNzU1Ci0tLSBhL3QvdDE3MDAtc3BsaXQtaW5kZXguc2gKKysrIGIvdC90MTcwMC1zcGxpdC1pbmRleC5zaApAQCAtMzMsMTQgKzMzLDE0IEBACiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBvbmUgJiYKIAlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+bHMtZmlsZXMuYWN0dWFsICYmCiAJY2F0ID5scy1maWxlcy5leHBlY3QgPDxFT0YgJiYKLTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJb25lCisxMDA2NDQgJEVNUFRZX0JMT0IgMAlvbmUKIEVPRgogCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5hY3R1YWwgJiYKIAogCXRlc3QtZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgc2VkICIvXm93bi9kIiA+YWN0dWFsICYmCiAJY2F0ID5leHBlY3QgPDxFT0YgJiYKIGJhc2UgJGJhc2UKLTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJb25lCisxMDA2NDQgJEVNUFRZX0JMT0IgMAlvbmUKIHJlcGxhY2VtZW50czoKIGRlbGV0aW9uczoKIEVPRgpAQCAtNTEsNyArNTEsNyBAQAogCWdpdCB1cGRhdGUtaW5kZXggLS1uby1zcGxpdC1pbmRleCAmJgogCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKIAljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PEVPRiAmJgotMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlvbmUKKzEwMDY0NCAkRU1QVFlfQkxPQiAwCW9uZQogRU9GCiAJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgogCkBAIC02Nyw3ICs2Nyw3IEBACiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXNwbGl0LWluZGV4ICYmCiAJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmxzLWZpbGVzLmFjdHVhbCAmJgogCWNhdCA+bHMtZmlsZXMuZXhwZWN0IDw8RU9GICYmCi0xMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCW9uZQorMTAwNjQ0ICRFTVBUWV9CTE9CIDAJb25lCiBFT0YKIAl0ZXN0X2NtcCBscy1maWxlcy5leHBlY3QgbHMtZmlsZXMuYWN0dWFsICYmCiAKQEAgLTEwNSw3ICsxMDUsNyBAQAogCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKIAljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PEVPRiAmJgogMTAwNjQ0IDJlMDk5NjAwMGI3ZTkwMTllYWJjYWQyOTM5MWJmMGY1Yzc3MDJmMGIgMAlvbmUKLTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJdHdvCisxMDA2NDQgJEVNUFRZX0JMT0IgMAl0d28KIEVPRgogCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5hY3R1YWwgJiYKIApAQCAtMTEzLDcgKzExMyw3IEBACiAJcV90b190YWIgPmV4cGVjdCA8PEVPRiAmJgogJEJBU0UKIDEwMDY0NCAyZTA5OTYwMDBiN2U5MDE5ZWFiY2FkMjkzOTFiZjBmNWM3NzAyZjBiIDBRCi0xMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCXR3bworMTAwNjQ0ICRFTVBUWV9CTE9CIDAJdHdvCiByZXBsYWNlbWVudHM6IDAKIGRlbGV0aW9uczoKIEVPRgpAQCAtMTU5LDE0ICsxNTksMTQgQEAKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSAmJgogCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKIAljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PEVPRiAmJgotMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlvbmUKKzEwMDY0NCAkRU1QVFlfQkxPQiAwCW9uZQogRU9GCiAJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgogCiAJdGVzdC1kdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdCA8PEVPRiAmJgogJEJBU0UKLTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJb25lCisxMDA2NDQgJEVNUFRZX0JMT0IgMAlvbmUKIHJlcGxhY2VtZW50czoKIGRlbGV0aW9uczogMAogRU9GCkBAIC0xNzgsOCArMTc4LDggQEAKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHR3byAmJgogCWdpdCBscy1maWxlcyAtLXN0YWdlID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdCA8PEVPRiAmJgotMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlvbmUKLTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJdHdvCisxMDA2NDQgJEVNUFRZX0JMT0IgMAlvbmUKKzEwMDY0NCAkRU1QVFlfQkxPQiAwCXR3bwogRU9GCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtMTg4LDggKzE4OCw4IEBACiAJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXNwbGl0LWluZGV4ICYmCiAJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmxzLWZpbGVzLmFjdHVhbCAmJgogCWNhdCA+bHMtZmlsZXMuZXhwZWN0IDw8RU9GICYmCi0xMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCW9uZQotMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAl0d28KKzEwMDY0NCAkRU1QVFlfQkxPQiAwCW9uZQorMTAwNjQ0ICRFTVBUWV9CTE9CIDAJdHdvCiBFT0YKIAl0ZXN0X2NtcCBscy1maWxlcy5leHBlY3QgbHMtZmlsZXMuYWN0dWFsICYmCiAKZGlmZiAtLWdpdCBhL3QvdDIwMTAtY2hlY2tvdXQtYW1iaWd1b3VzLnNoIGIvdC90MjAxMC1jaGVja291dC1hbWJpZ3VvdXMuc2gKaW5kZXggODdiZGY5Yy4uZTc2ZTg0YSAxMDA3NTUKLS0tIGEvdC90MjAxMC1jaGVja291dC1hbWJpZ3VvdXMuc2gKKysrIGIvdC90MjAxMC1jaGVja291dC1hbWJpZ3VvdXMuc2gKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWNjdXJhdGUgZXJyb3IgbWVzc2FnZSB3aXRoIG1vcmUgdGhhbiBvbmUgcmVmJyAnCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IEhFQUQgbWFzdGVyIC0tIDI+YWN0dWFsICYmCi0JZ3JlcCAyIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgMiBhY3R1YWwgJiYKIAl0ZXN0X2kxOG5ncmVwICJvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAyIGdpdmVuIiBhY3R1YWwKICcKIApkaWZmIC0tZ2l0IGEvdC90MjAxOC1jaGVja291dC1icmFuY2guc2ggYi90L3QyMDE4LWNoZWNrb3V0LWJyYW5jaC5zaAppbmRleCAyNzQxMjYyLi4yMTMxZmIyIDEwMDc1NQotLS0gYS90L3QyMDE4LWNoZWNrb3V0LWJyYW5jaC5zaAorKysgYi90L3QyMDE4LWNoZWNrb3V0LWJyYW5jaC5zaApAQCAtMTI0LDcgKzEyNCw3IEBACiAJZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKIAllY2hvICA+ZXhwZWN0ICJmYXRhbDogQSBicmFuY2ggbmFtZWQgJ1wnJ2JyYW5jaDEnXCcnIGFscmVhZHkgZXhpc3RzLiIgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLWIgQHstMX0gMj5hY3R1YWwgJiYKLQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHJlc2V0cyBicmFuY2ggdG8gSEVBRCcgJwpkaWZmIC0tZ2l0IGEvdC90MjAyNS13b3JrdHJlZS1hZGQuc2ggYi90L3QyMDI1LXdvcmt0cmVlLWFkZC5zaAppbmRleCAzYTIyZmM1Li40YmNjMzM1IDEwMDc1NQotLS0gYS90L3QyMDI1LXdvcmt0cmVlLWFkZC5zaAorKysgYi90L3QyMDI1LXdvcmt0cmVlLWFkZC5zaApAQCAtMjAsNiArMjAsMjIgQEAKIAlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGV4aXN0aW5nX2VtcHR5IG1hc3RlcgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB1c2luZyBzaG9ydGhhbmQgLSBmYWlscyB3aGVuIG5vIHByZXZpb3VzIGJyYW5jaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgZXhpc3Rpbmdfc2hvcnQgLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB1c2luZyAtIHNob3J0aGFuZCcgJworCWdpdCBjaGVja291dCAtYiBuZXdicmFuY2ggJiYKKwllY2hvIGhlbGxvID5teXdvcmxkICYmCisJZ2l0IGFkZCBteXdvcmxkICYmCisJZ2l0IGNvbW1pdCAtbSBteXdvcmxkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCB3b3JrdHJlZSBhZGQgc2hvcnQtaGFuZCAtICYmCisJZWNobyByZWZzL2hlYWRzL25ld2JyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IC1DIHNob3J0LWhhbmQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgcmVmdXNlcyB0byBjaGVja291dCBsb2NrZWQgYnJhbmNoJyAnCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCB6ZXJlIG1hc3RlciAmJgogCSEgdGVzdCAtZCB6ZXJlICYmCmRpZmYgLS1naXQgYS90L3QyMDI4LXdvcmt0cmVlLW1vdmUuc2ggYi90L3QyMDI4LXdvcmt0cmVlLW1vdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODI5OGFhZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMjgtd29ya3RyZWUtbW92ZS5zaApAQCAtMCwwICsxLDYyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgd29ya3RyZWUgbW92ZSwgcmVtb3ZlLCBsb2NrIGFuZCB1bmxvY2snCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXQgJiYKKwlnaXQgd29ya3RyZWUgYWRkIHNvdXJjZSAmJgorCWdpdCB3b3JrdHJlZSBsaXN0IC0tcG9yY2VsYWluIHwgZ3JlcCAiXndvcmt0cmVlIiA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwl3b3JrdHJlZSAkKHB3ZCkKKwl3b3JrdHJlZSAkKHB3ZCkvc291cmNlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2sgbWFpbiB3b3JrdHJlZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBsb2NrIC4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jayBsaW5rZWQgd29ya3RyZWUnICcKKwlnaXQgd29ya3RyZWUgbG9jayAtLXJlYXNvbiBoYWhhaGEgc291cmNlICYmCisJZWNobyBoYWhhaGEgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgLmdpdC93b3JrdHJlZXMvc291cmNlL2xvY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NrIGxpbmtlZCB3b3JrdHJlZSBmcm9tIGFub3RoZXIgd29ya3RyZWUnICcKKwlybSAuZ2l0L3dvcmt0cmVlcy9zb3VyY2UvbG9ja2VkICYmCisJZ2l0IHdvcmt0cmVlIGFkZCBlbHNld2hlcmUgJiYKKwlnaXQgLUMgZWxzZXdoZXJlIHdvcmt0cmVlIGxvY2sgLS1yZWFzb24gaGFoYWhhIC4uL3NvdXJjZSAmJgorCWVjaG8gaGFoYWhhID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIC5naXQvd29ya3RyZWVzL3NvdXJjZS9sb2NrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jayB3b3JrdHJlZSB0d2ljZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBsb2NrIHNvdXJjZSAmJgorCWVjaG8gaGFoYWhhID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIC5naXQvd29ya3RyZWVzL3NvdXJjZS9sb2NrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jayB3b3JrdHJlZSB0d2ljZSAoZnJvbSB0aGUgbG9ja2VkIHdvcmt0cmVlKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzb3VyY2Ugd29ya3RyZWUgbG9jayAuICYmCisJZWNobyBoYWhhaGEgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgLmdpdC93b3JrdHJlZXMvc291cmNlL2xvY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmxvY2sgbWFpbiB3b3JrdHJlZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSB1bmxvY2sgLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmxvY2sgbGlua2VkIHdvcmt0cmVlJyAnCisJZ2l0IHdvcmt0cmVlIHVubG9jayBzb3VyY2UgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3dvcmt0cmVlcy9zb3VyY2UvbG9ja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VubG9jayB3b3JrdHJlZSB0d2ljZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSB1bmxvY2sgc291cmNlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC93b3JrdHJlZXMvc291cmNlL2xvY2tlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDMtYWRkLWludGVudC5zaCBiL3QvdDIyMDMtYWRkLWludGVudC5zaAppbmRleCAyYTRhNzQ5Li44ZjIyYzQzIDEwMDc1NQotLS0gYS90L3QyMjAzLWFkZC1pbnRlbnQuc2gKKysrIGIvdC90MjIwMy1hZGQtaW50ZW50LnNoCkBAIC04Miw1ICs4MiwzNiBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FjaGUtdHJlZSBkb2VzIG5vdCBpZ25vcmUgZGlyIHRoYXQgaGFzIGktdC1hIGVudHJpZXMnICcKKwlnaXQgaW5pdCBpdGEtaW4tZGlyICYmCisJKAorCQljZCBpdGEtaW4tZGlyICYmCisJCW1rZGlyIDIgJiYKKwkJZm9yIGYgaW4gMSAyLzEgMi8yIDMKKwkJZG8KKwkJCWVjaG8gIiRmIiA+IiRmIgorCQlkb25lICYmCisJCWdpdCBhZGQgMSAyLzIgMyAmJgorCQlnaXQgYWRkIC1OIDIvMSAmJgorCQlnaXQgY29tbWl0IC1tIGNvbW1pdHRlZCAmJgorCQlnaXQgbHMtdHJlZSAtciBIRUFEID5hY3R1YWwgJiYKKwkJZ3JlcCAyLzIgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYWNoZS10cmVlIGRvZXMgc2tpcCBkaXIgdGhhdCBiZWNvbWVzIGVtcHR5JyAnCisJcm0gLWZyIGl0YS1pbi1kaXIgJiYKKwlnaXQgaW5pdCBpdGEtaW4tZGlyICYmCisJKAorCQljZCBpdGEtaW4tZGlyICYmCisJCW1rZGlyIC1wIDEvMi8zICYmCisJCWVjaG8gNCA+MS8yLzMvNCAmJgorCQlnaXQgYWRkIC1OIDEvMi8zLzQgJiYKKwkJZ2l0IHdyaXRlLXRyZWUgPmFjdHVhbCAmJgorCQllY2hvICRFTVBUWV9UUkVFID5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKIHRlc3RfZG9uZQogCmRpZmYgLS1naXQgYS90L3QyMzAwLWNkLXRvLXRvcGxldmVsLnNoIGIvdC90MjMwMC1jZC10by10b3BsZXZlbC5zaAppbmRleCBjY2NkN2Q5Li5jOGRlNmQ4IDEwMDc1NQotLS0gYS90L3QyMzAwLWNkLXRvLXRvcGxldmVsLnNoCisrKyBiL3QvdDIzMDAtY2QtdG8tdG9wbGV2ZWwuc2gKQEAgLTQsMTEgKzQsMTkgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKK0VYRUNfUEFUSD0iJChnaXQgLS1leGVjLXBhdGgpIgordGVzdF9oYXZlX3ByZXJlcSAhTUlOR1cgfHwKK2Nhc2UgIiRFWEVDX1BBVEgiIGluCitbQS1aYS16XTovKikKKwlFWEVDX1BBVEg9Ii8ke0VYRUNfUEFUSCUlOip9JHtFWEVDX1BBVEgjPzp9IgorCTs7Citlc2FjCisKIHRlc3RfY2RfdG9fdG9wbGV2ZWwgKCkgewogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJDMgIiQyIiAnCiAJCSgKIAkJCWNkICciJyQxJyInICYmCi0JCQlQQVRIPSIkKGdpdCAtLWV4ZWMtcGF0aCk6JFBBVEgiICYmCisJCQlQQVRIPSIkRVhFQ19QQVRIOiRQQVRIIiAmJgogCQkJLiBnaXQtc2gtc2V0dXAgJiYKIAkJCWNkX3RvX3RvcGxldmVsICYmCiAJCQlbICIkKHB3ZCAtUCkiID0gIiRUT1BMRVZFTCIgXQpkaWZmIC0tZ2l0IGEvdC90MzEwMS1scy10cmVlLWRpcm5hbWUuc2ggYi90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaAppbmRleCA0MjVkODU4Li4zMjdkZWQ0IDEwMDc1NQotLS0gYS90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaAorKysgYi90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaApAQCAtMTYsNyArMTYsNyBAQAogICAgIHBhdGgzLzEudHh0ICAgICAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQogICAgIHBhdGgzLzIudHh0ICAgICAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQogCi1UZXN0IHRoZSBoYW5kbGluZyBvZiBtdWxpdHBsZSBkaXJlY3RvcmllcyB3aGljaCBoYXZlIG1hdGNoaW5nIGZpbGUKK1Rlc3QgdGhlIGhhbmRsaW5nIG9mIG11bHRpcGxlIGRpcmVjdG9yaWVzIHdoaWNoIGhhdmUgbWF0Y2hpbmcgZmlsZQogZW50cmllcy4gIEFsc28gdGVzdCBvZGQgZmlsZW5hbWUgYW5kIG1pc3NpbmcgZW50cmllcyBoYW5kbGluZy4KICcKIC4gLi90ZXN0LWxpYi5zaApkaWZmIC0tZ2l0IGEvdC90MzEwMi1scy10cmVlLXdpbGRjYXJkcy5zaCBiL3QvdDMxMDItbHMtdHJlZS13aWxkY2FyZHMuc2gKaW5kZXggNGQ0YjAyZS4uZTgwNDM3NyAxMDA3NTUKLS0tIGEvdC90MzEwMi1scy10cmVlLXdpbGRjYXJkcy5zaAorKysgYi90L3QzMTAyLWxzLXRyZWUtd2lsZGNhcmRzLnNoCkBAIC0xMiwxNiArMTIsMTYgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBhW2FdIG1hdGNoZXMgbGl0ZXJhbGx5JyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgotCTEwMDY0NCBibG9iIGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEJYVthXS90aHJlZQorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICRFTVBUWV9CTE9CCWFbYV0vdGhyZWUKIAlFT0YKIAlnaXQgbHMtdHJlZSAtciBIRUFEICJhW2FdIiA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIG91dHNpZGUgcHJlZml4JyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgotCTEwMDY0NCBibG9iIGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEJLi4vYVthXS90aHJlZQorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICRFTVBUWV9CTE9CCS4uL2FbYV0vdGhyZWUKIAlFT0YKIAkoIGNkIGFhICYmIGdpdCBscy10cmVlIC1yIEhFQUQgIi4uL2FbYV0iOyApID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCmRpZmYgLS1naXQgYS90L3QzMjAwLWJyYW5jaC5zaCBiL3QvdDMyMDAtYnJhbmNoLnNoCmluZGV4IGYzZTNiNmMuLjhhODMzZjMgMTAwNzU1Ci0tLSBhL3QvdDMyMDAtYnJhbmNoLnNoCisrKyBiL3QvdDMyMDAtYnJhbmNoLnNoCkBAIC03OSw2ICs3OSwxNSBAQAogCXRlc3RfaTE4bmdyZXAgImJyYW5jaCBuYW1lIHJlcXVpcmVkIiBlcnIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBtIGJyb2tlbl9zeW1yZWYgc2hvdWxkIHdvcmsnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgYnJva2VuX3N5bXJlZiIgJiYKKwlnaXQgYnJhbmNoIC1sIG0gJiYKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvYnJva2VuX3N5bXJlZiByZWZzL2hlYWRzL2lfYW1fYnJva2VuICYmCisJZ2l0IGJyYW5jaCAtbSBtIGJyb2tlbl9zeW1yZWYgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2Jyb2tlbl9zeW1yZWYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2lfYW1fYnJva2VuCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gbSBtL20gc2hvdWxkIHdvcmsnICcKIAlnaXQgYnJhbmNoIC1sIG0gJiYKIAlnaXQgYnJhbmNoIC1tIG0gbS9tICYmCkBAIC01NTAsNyArNTU5LDcgQEAKICAgICBnaXQgYnJhbmNoIC1kIG9yaWdpbi9tYXN0ZXIKICAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG9yaWdpbi9tYXN0ZXIKIEVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0gd2l0aCB0d28gYXJncyBvbmx5IHNob3dzIHRoZSBkZXByZWNhdGlvbiBtZXNzYWdlJyAnCkBAIC01NTksNyArNTY4LDcgQEAKIAljYXQgPmV4cGVjdGVkIDw8RU9GICYmCiBUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tdHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG8KIEVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0gd2l0aCBvbmUgYXJnIG9ubHkgc2hvd3MgdGhlIGRlcHJlY2F0aW9uIG1lc3NhZ2UgaWYgdGhlIGJyYW5jaCBleGlzdGVkJyAnCkBAIC01NjgsNyArNTc3LDcgQEAKIAljYXQgPmV4cGVjdGVkIDw8RU9GICYmCiBUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tdHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG8KIEVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0tdG8gbm90aWNlcyBhbiBlcnJvciB0byBzZXQgYnJhbmNoIGFzIG93biB1cHN0cmVhbScgJwpkaWZmIC0tZ2l0IGEvdC90MzIwMS1icmFuY2gtY29udGFpbnMuc2ggYi90L3QzMjAxLWJyYW5jaC1jb250YWlucy5zaAppbmRleCA5MTJhNjYzLi43ZjNlYzQ3IDEwMDc1NQotLS0gYS90L3QzMjAxLWJyYW5jaC1jb250YWlucy5zaAorKysgYi90L3QzMjAxLWJyYW5jaC1jb250YWlucy5zaApAQCAtMTU2LDcgKzE1Niw3IEBACiAJKiB0b3BpYyAgMmM5MzlmNCBbYWhlYWQgMV0gZm9vCiAJICB6enogICAgYzc3YTBhOSBzZWNvbmQgb24gbWFzdGVyCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMxMC1ub3Rlcy1tZXJnZS1tYW51YWwtcmVzb2x2ZS5zaCBiL3QvdDMzMTAtbm90ZXMtbWVyZ2UtbWFudWFsLXJlc29sdmUuc2gKaW5kZXggZDU1NzIxMi4uNjk2NzQzNiAxMDA3NTUKLS0tIGEvdC90MzMxMC1ub3Rlcy1tZXJnZS1tYW51YWwtcmVzb2x2ZS5zaAorKysgYi90L3QzMzEwLW5vdGVzLW1lcmdlLW1hbnVhbC1yZXNvbHZlLnNoCkBAIC0xNzgsNyArMTc4LDcgQEAKIAlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9tICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHogPm91dHB1dCAmJgogCSMgT3V0cHV0IHNob3VsZCBwb2ludCB0byB3aGVyZSB0byByZXNvbHZlIGNvbmZsaWN0cwotCWdyZXAgLXEgIlxcLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKIAkjIEluc3BlY3QgbWVyZ2UgY29uZmxpY3RzCiAJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgogCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgpAQCAtMzgxLDcgKzM4MSw3IEBACiAJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvbSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ID5vdXRwdXQgJiYKIAkjIE91dHB1dCBzaG91bGQgcG9pbnQgdG8gd2hlcmUgdG8gcmVzb2x2ZSBjb25mbGljdHMKLQlncmVwIC1xICJcXC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUiIG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIlxcLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSIgb3V0cHV0ICYmCiAJIyBJbnNwZWN0IG1lcmdlIGNvbmZsaWN0cwogCWxzIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgPm91dHB1dF9jb25mbGljdHMgJiYKIAl0ZXN0X2NtcCBleHBlY3RfY29uZmxpY3RzIG91dHB1dF9jb25mbGljdHMgJiYKQEAgLTQxNSw3ICs0MTUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkbyBtZXJnZSBvZiB6IGludG8gbSAoPT0geSkgd2l0aCBkZWZhdWx0ICgibWFudWFsIikgcmVzb2x2ZXIgPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiA+b3V0cHV0ICYmCiAJIyBPdXRwdXQgc2hvdWxkIHBvaW50IHRvIHdoZXJlIHRvIHJlc29sdmUgY29uZmxpY3RzCi0JZ3JlcCAtcSAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJcXC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUiIG91dHB1dCAmJgogCSMgSW5zcGVjdCBtZXJnZSBjb25mbGljdHMKIAlscyAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFID5vdXRwdXRfY29uZmxpY3RzICYmCiAJdGVzdF9jbXAgZXhwZWN0X2NvbmZsaWN0cyBvdXRwdXRfY29uZmxpY3RzICYmCkBAIC00OTYsNyArNDk2LDcgQEAKIAlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy95ICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHogPm91dHB1dCAmJgogCSMgT3V0cHV0IHNob3VsZCBwb2ludCB0byB3aGVyZSB0byByZXNvbHZlIGNvbmZsaWN0cwotCWdyZXAgLXEgIlxcLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKIAkjIEluc3BlY3QgbWVyZ2UgY29uZmxpY3RzCiAJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgogCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgpkaWZmIC0tZ2l0IGEvdC90MzMyMC1ub3Rlcy1tZXJnZS13b3JrdHJlZXMuc2ggYi90L3QzMzIwLW5vdGVzLW1lcmdlLXdvcmt0cmVlcy5zaAppbmRleCAxZjcxZDU4Li42ZTA1MTE1IDEwMDc1NQotLS0gYS90L3QzMzIwLW5vdGVzLW1lcmdlLXdvcmt0cmVlcy5zaAorKysgYi90L3QzMzIwLW5vdGVzLW1lcmdlLXdvcmt0cmVlcy5zaApAQCAtNTIsNyArNTIsNyBAQAogCQljZCB3b3JrdHJlZSAmJgogCQlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6IDI+ZXJyICYmCi0JCWdyZXAgIkEgbm90ZXMgbWVyZ2UgaW50byByZWZzL25vdGVzL3kgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCIgZXJyCisJCXRlc3RfaTE4bmdyZXAgIkEgbm90ZXMgbWVyZ2UgaW50byByZWZzL25vdGVzL3kgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCIgZXJyCiAJKSAmJgogCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvd29ya3RyZWVzL3dvcmt0cmVlL05PVEVTX01FUkdFX1JFRgogJwpAQCAtNjIsNyArNjIsNyBAQAogCQljZCB3b3JrdHJlZTIgJiYKIAkJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiAyPiYxID5vdXQgJiYKLQkJZ3JlcCAiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZCIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQiIG91dCAmJgogCQlncmVwIC12ICJBIG5vdGVzIG1lcmdlIGludG8gcmVmcy9ub3Rlcy94IGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgaW4iIG91dAogCSkgJiYKIAllY2hvICJyZWY6IHJlZnMvbm90ZXMveCIgPmV4cGVjdCAmJgpkaWZmIC0tZ2l0IGEvdC90MzQwMC1yZWJhc2Uuc2ggYi90L3QzNDAwLXJlYmFzZS5zaAppbmRleCA0N2I1NjgyLi5mNWZkMTVlIDEwMDc1NQotLS0gYS90L3QzNDAwLXJlYmFzZS5zaAorKysgYi90L3QzNDAwLXJlYmFzZS5zaApAQCAtMTM2LDggKzEzNiw4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdTaG93IHZlcmJvc2UgZXJyb3Igd2hlbiBIRUFEIGNvdWxkIG5vdCBiZSBkZXRhY2hlZCcgJwogCT5CICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSB0b3BpYyAyPm91dHB1dC5lcnIgPm91dHB1dC5vdXQgJiYKLQlncmVwICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6IiBvdXRwdXQuZXJyICYmCi0JZ3JlcCBCIG91dHB1dC5lcnIKKwl0ZXN0X2kxOG5ncmVwICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6IiBvdXRwdXQuZXJyICYmCisJdGVzdF9pMThuZ3JlcCBCIG91dHB1dC5lcnIKICcKIHJtIC1mIEIKIApkaWZmIC0tZ2l0IGEvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2ggYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaAppbmRleCA2NjM0OGYxLi4xOTc5MTRiIDEwMDc1NQotLS0gYS90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaApAQCAtNjAsNyArNjAsNyBAQAogCXRlc3RfY29tbWl0IFAgZmlsZVAKICcKIAotIyAiZXhlYyIgY29tbWFuZHMgYXJlIHJhbiB3aXRoIHRoZSB1c2VyIHNoZWxsIGJ5IGRlZmF1bHQsIGJ1dCB0aGlzIG1heQorIyAiZXhlYyIgY29tbWFuZHMgYXJlIHJ1biB3aXRoIHRoZSB1c2VyIHNoZWxsIGJ5IGRlZmF1bHQsIGJ1dCB0aGlzIG1heQogIyBiZSBub24tUE9TSVguIEZvciBleGFtcGxlLCBpZiBTSEVMTD16c2ggdGhlbiAiPmZpbGUiIGRvZXNuJ3Qgd29yawogIyB0byBjcmVhdGUgYSBmaWxlLiBVbnNldHRpbmcgU0hFTEwgYXZvaWRzIHN1Y2ggbm9uLXBvcnRhYmxlIGJlaGF2aW9yCiAjIGluIHRlc3RzLiBJdCBtdXN0IGJlIGV4cG9ydGVkIGZvciBpdCB0byB0YWtlIGVmZmVjdCB3aGVyZSBuZWVkZWQuCkBAIC0yMTksOSArMjE5LDkgQEAKIAlnaXQgY29tbWl0IC1tICJyZW1vdmUgZmlsZSBpbiBiYXNlIiAmJgogCXNldF9mYWtlX2VkaXRvciAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgbWFzdGVyID4gb3V0cHV0IDI+JjEgJiYKLQlncmVwICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6IiBcCisJdGVzdF9pMThuZ3JlcCAiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OiIgXAogCQlvdXRwdXQgJiYKLQlncmVwICJmaWxlMSIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiZmlsZTEiIG91dHB1dCAmJgogCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLW1lcmdlICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgogJwpAQCAtNTQwLDcgKzU0MCw3IEBACiAJZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCiAJZ2l0IGFkZCBmaWxlNyAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAyPmVycm9yICYmCi0JZ3JlcCAiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIiBlcnJvcgorCXRlc3RfaTE4bmdyZXAgIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiIgZXJyb3IKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGEgZGV0YWNoZWQgSEVBRCcgJwpAQCAtMTA2MCw3ICsxMDYwLDcgQEAKIAlFT0YKIAl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9kdW1wLXJhdy5zaCIgJiYKIAlnaXQgcmViYXNlIC1pIEhFQUR+NCA+YWN0dWFsICYmCi0JZ3JlcCAiXiMgUmViYXNlIC4uKiBvbnRvIC4uKiAoWzAtOV0iIGFjdHVhbAorCXRlc3RfaTE4bmdyZXAgIl4jIFJlYmFzZSAuLiogb250byAuLiogKFswLTldIiBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbW1pdHMgdGhhdCBvdmVyd3JpdGUgdW50cmFja2VkIGZpbGVzIChwaWNrKScgJwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIAlGQUtFX0xJTkVTPSIxIDIgMyA0IiBcCiAJCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCiAJdGVzdCBEID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKLQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3QgPDxFT0YKQEAgLTExODEsNyArMTE4MSw3IEBACiAJc2V0X2Zha2VfZWRpdG9yICYmCiAJRkFLRV9MSU5FUz0iMSAyIDMgNCIgXAogCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbCAmJgotCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgogCXRlc3QgRCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCiAnCiAKQEAgLTEyMDUsNyArMTIwNSw3IEBACiAJc2V0X2Zha2VfZWRpdG9yICYmCiAJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiA0IiBcCiAJCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCiAJY3AgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvLmJhY2t1cCBcCiAJCS5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgogCUZBS0VfTElORVM9IjEgMiBkcm9wIDMgNCBkcm9wIDUiIFwKQEAgLTEyMjgsNyArMTIyOCw3IEBACiAJc2V0X2Zha2VfZWRpdG9yICYmCiAJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiAzIGJhZCA0IDUiIFwKIAkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKLQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlGQUtFX0xJTkVTPSIxIDIgMyBkcm9wIDQgNSIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgogCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCkBAIC0xMjYzLDcgKzEyNjMsNyBAQAogCXNldF9mYWtlX2VkaXRvciAmJgogCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIgZWRpdCBmYWtlc2hhIDMgNCA1ICMiIFwKIAkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKLQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlGQUtFX0xJTkVTPSIxIDIgNCA1IDYiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUgJiYKIAl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQpAQCAtMTI4MSw0ICsxMjgxLDEyIEBACiAJKQogJwogCitTUT0iJyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLWdwZy1zaWduPTxrZXktaWQ+JyAnCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIC0tZ3BnLXNpZ249IlwiUyBJIEduZXJcIiIgSEVBRF4gXAorCQk+b3V0IDI+ZXJyICYmCisJZ3JlcCAiJFNRLVNcIlMgSSBHbmVyXCIkU1EiIGVycgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTUtcmViYXNlLWF1dG9zcXVhc2guc2ggYi90L3QzNDE1LXJlYmFzZS1hdXRvc3F1YXNoLnNoCmluZGV4IDhmNTNlNTQuLjQ4MzQ2ZjEgMTAwNzU1Ci0tLSBhL3QvdDM0MTUtcmViYXNlLWF1dG9zcXVhc2guc2gKKysrIGIvdC90MzQxNS1yZWJhc2UtYXV0b3NxdWFzaC5zaApAQCAtMjcxLDQgKzI3MSwzNyBAQAogCXRlc3QgMiA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IGdyZXAgc3F1YXNoIHwgd2MgLWwpCiAnCiAKK3NldF9iYWNrdXBfZWRpdG9yICgpIHsKKwl3cml0ZV9zY3JpcHQgYmFja3VwLWVkaXRvci5zaCA8PC1cRU9GCisJY3AgIiQxIiAuZ2l0L2JhY2t1cC0iJChiYXNlbmFtZSAiJDEiKSIKKwlFT0YKKwl0ZXN0X3NldF9lZGl0b3IgIiRQV0QvYmFja3VwLWVkaXRvci5zaCIKK30KKwordGVzdF9leHBlY3RfZmFpbHVyZSAnYXV0b3NxdWFzaCB3aXRoIG11bHRpcGxlIGVtcHR5IHBhdGNoZXMnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkyIiAmJgorCXRlc3RfdGljayAmJgorCT5maXh1cCAmJgorCWdpdCBhZGQgZml4dXAgJiYKKwlnaXQgY29tbWl0IC0tZml4dXAgSEVBRF5eICYmCisJKAorCQlzZXRfYmFja3VwX2VkaXRvciAmJgorCQlHSVRfVVNFX1JFQkFTRV9IRUxQRVI9ZmFsc2UgXAorCQlnaXQgcmViYXNlIC1pIC0tZm9yY2UtcmViYXNlIC0tYXV0b3NxdWFzaCBIRUFEfjQgJiYKKwkJZ3JlcCBlbXB0eTIgLmdpdC9iYWNrdXAtZ2l0LXJlYmFzZS10b2RvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBzcGFjZXMgYWZ0ZXIgZml4dXAhJyAnCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X2NvbW1pdCB0by1maXh1cCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZml4dXAhICB0by1maXh1cCIgJiYKKwlnaXQgcmViYXNlIC1pIC0tYXV0b3NxdWFzaCAtLWtlZXAtZW1wdHkgSEVBRH4yICYmCisJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0ICRiYXNlID0gJHBhcmVudAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjAtcmViYXNlLWF1dG9zdGFzaC5zaCBiL3QvdDM0MjAtcmViYXNlLWF1dG9zdGFzaC5zaAppbmRleCA5NDQxNTRiLi5hYjhhNjNlIDEwMDc1NQotLS0gYS90L3QzNDIwLXJlYmFzZS1hdXRvc3Rhc2guc2gKKysrIGIvdC90MzQyMC1yZWJhc2UtYXV0b3N0YXNoLnNoCkBAIC0xNzksNyArMTc5LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQgcmViYXNlIC1pIHdpdGggLS1hdXRvc3Rhc2gnICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCi0JZWNobyB1bmNvbW1pdGVkLWNvbnRlbnQgPmZpbGUwICYmCisJZWNobyB1bmNvbW1pdHRlZC1jb250ZW50ID5maWxlMCAmJgogCSgKIAkJd3JpdGVfc2NyaXB0IGFib3J0LWVkaXRvci5zaCA8PC1cRU9GICYmCiAJCQllY2hvID4iJDEiCkBAIC0xODgsNyArMTg4LDM4IEBACiAJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1hdXRvc3Rhc2ggSEVBRF4gJiYKIAkJcm0gLWYgYWJvcnQtZWRpdG9yLnNoCiAJKSAmJgotCWVjaG8gdW5jb21taXRlZC1jb250ZW50ID5leHBlY3RlZCAmJgorCWVjaG8gdW5jb21taXR0ZWQtY29udGVudCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0b3JlIGF1dG9zdGFzaCBvbiBlZGl0b3IgZmFpbHVyZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwllY2hvIHVuY29tbWl0dGVkLWNvbnRlbnQgPmZpbGUwICYmCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgImZhbHNlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tYXV0b3N0YXNoIEhFQUReCisJKSAmJgorCWVjaG8gdW5jb21taXR0ZWQtY29udGVudCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc3Rhc2ggaXMgc2F2ZWQgb24gZWRpdG9yIGZhaWx1cmUgd2l0aCBjb25mbGljdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwllY2hvIHVuY29tbWl0dGVkLWNvbnRlbnQgPmZpbGUwICYmCisJKAorCQl3cml0ZV9zY3JpcHQgYWJvcnQtZWRpdG9yLnNoIDw8LVxFT0YgJiYKKwkJCWVjaG8gY29uZmxpY3RpbmctY29udGVudCA+ZmlsZTAKKwkJCWV4aXQgMQorCQlFT0YKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvYWJvcnQtZWRpdG9yLnNoIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tYXV0b3N0YXNoIEhFQUReICYmCisJCXJtIC1mIGFib3J0LWVkaXRvci5zaAorCSkgJiYKKwllY2hvIGNvbmZsaWN0aW5nLWNvbnRlbnQgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZTAgJiYKKwlnaXQgY2hlY2tvdXQgZmlsZTAgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJZWNobyB1bmNvbW1pdHRlZC1jb250ZW50ID5leHBlY3RlZCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUwCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDM0MjctcmViYXNlLXN1YnRyZWUuc2ggYi90L3QzNDI3LXJlYmFzZS1zdWJ0cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3ODA4NzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDI3LXJlYmFzZS1zdWJ0cmVlLnNoCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSB0ZXN0cyBmb3IgLVhzdWJ0cmVlCisKK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2UgYW5kIHRlc3RzIHRoZSBzdWJ0cmVlIHN0cmF0ZWd5LgorJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKworY29tbWl0X21lc3NhZ2UoKSB7CisJZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JXMgLTEgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IFJFQURNRSAmJgorCW1rZGlyIGZpbGVzICYmCisJKAorCQljZCBmaWxlcyAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBtYXN0ZXIxICYmCisJCXRlc3RfY29tbWl0IG1hc3RlcjIgJiYKKwkJdGVzdF9jb21taXQgbWFzdGVyMworCSkgJiYKKwlnaXQgZmV0Y2ggZmlsZXMgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCBmaWxlcy1tYXN0ZXIgRkVUQ0hfSEVBRCAmJgorCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9ZmlsZXNfc3VidHJlZSBmaWxlcy1tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLS0gZmlsZXNfc3VidHJlZSAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZmlsZXMtbWFzdGVyXjApICYmCisJY29tbWl0PSQoZ2l0IGNvbW1pdC10cmVlIC1wICRoZWFkIC1wICRyZXYgLW0gIkFkZCBzdWJwcm9qZWN0IG1hc3RlciIgJHRyZWUpICYmCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0ICYmCisJKAorCQljZCBmaWxlc19zdWJ0cmVlICYmCisJCXRlc3RfY29tbWl0IG1hc3RlcjQKKwkpICYmCisJdGVzdF9jb21taXQgZmlsZXNfc3VidHJlZS9tYXN0ZXI1CisnCisKKyMgRkFJTFVSRTogRG9lcyBub3QgcHJlc2VydmUgbWFzdGVyNC4KK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ1JlYmFzZSAtWHN1YnRyZWUgLS1wcmVzZXJ2ZS1tZXJnZXMgLS1vbnRvIGNvbW1pdCA0JyAnCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZS1wcmVzZXJ2ZS1tZXJnZXMtNCBtYXN0ZXIgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtLXBydW5lLWVtcHR5IC1mIC0tc3ViZGlyZWN0b3J5LWZpbHRlciBmaWxlc19zdWJ0cmVlICYmCisJZ2l0IGNvbW1pdCAtbSAiRW1wdHkgY29tbWl0IiAtLWFsbG93LWVtcHR5ICYmCisJZ2l0IHJlYmFzZSAtWHN1YnRyZWU9ZmlsZXNfc3VidHJlZSAtLXByZXNlcnZlLW1lcmdlcyAtLW9udG8gZmlsZXMtbWFzdGVyIG1hc3RlciAmJgorCXZlcmJvc2UgdGVzdCAiJChjb21taXRfbWVzc2FnZSBIRUFEfikiID0gImZpbGVzX3N1YnRyZWUvbWFzdGVyNCIKKycKKworIyBGQUlMVVJFOiBEb2VzIG5vdCBwcmVzZXJ2ZSBtYXN0ZXI1LgordGVzdF9leHBlY3RfZmFpbHVyZSAnUmViYXNlIC1Yc3VidHJlZSAtLXByZXNlcnZlLW1lcmdlcyAtLW9udG8gY29tbWl0IDUnICcKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmViYXNlLXByZXNlcnZlLW1lcmdlcy01IG1hc3RlciAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC0tcHJ1bmUtZW1wdHkgLWYgLS1zdWJkaXJlY3RvcnktZmlsdGVyIGZpbGVzX3N1YnRyZWUgJiYKKwlnaXQgY29tbWl0IC1tICJFbXB0eSBjb21taXQiIC0tYWxsb3ctZW1wdHkgJiYKKwlnaXQgcmViYXNlIC1Yc3VidHJlZT1maWxlc19zdWJ0cmVlIC0tcHJlc2VydmUtbWVyZ2VzIC0tb250byBmaWxlcy1tYXN0ZXIgbWFzdGVyICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUQpIiA9ICJmaWxlc19zdWJ0cmVlL21hc3RlcjUiCisnCisKKyMgRkFJTFVSRTogRG9lcyBub3QgcHJlc2VydmUgbWFzdGVyNC4KK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ1JlYmFzZSAtWHN1YnRyZWUgLS1rZWVwLWVtcHR5IC0tcHJlc2VydmUtbWVyZ2VzIC0tb250byBjb21taXQgNCcgJworCXJlc2V0X3JlYmFzZSAmJgorCWdpdCBjaGVja291dCAtYiByZWJhc2Uta2VlcC1lbXB0eS00IG1hc3RlciAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC0tcHJ1bmUtZW1wdHkgLWYgLS1zdWJkaXJlY3RvcnktZmlsdGVyIGZpbGVzX3N1YnRyZWUgJiYKKwlnaXQgY29tbWl0IC1tICJFbXB0eSBjb21taXQiIC0tYWxsb3ctZW1wdHkgJiYKKwlnaXQgcmViYXNlIC1Yc3VidHJlZT1maWxlc19zdWJ0cmVlIC0ta2VlcC1lbXB0eSAtLXByZXNlcnZlLW1lcmdlcyAtLW9udG8gZmlsZXMtbWFzdGVyIG1hc3RlciAmJgorCXZlcmJvc2UgdGVzdCAiJChjb21taXRfbWVzc2FnZSBIRUFEfjIpIiA9ICJmaWxlc19zdWJ0cmVlL21hc3RlcjQiCisnCisKKyMgRkFJTFVSRTogRG9lcyBub3QgcHJlc2VydmUgbWFzdGVyNS4KK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ1JlYmFzZSAtWHN1YnRyZWUgLS1rZWVwLWVtcHR5IC0tcHJlc2VydmUtbWVyZ2VzIC0tb250byBjb21taXQgNScgJworCXJlc2V0X3JlYmFzZSAmJgorCWdpdCBjaGVja291dCAtYiByZWJhc2Uta2VlcC1lbXB0eS01IG1hc3RlciAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC0tcHJ1bmUtZW1wdHkgLWYgLS1zdWJkaXJlY3RvcnktZmlsdGVyIGZpbGVzX3N1YnRyZWUgJiYKKwlnaXQgY29tbWl0IC1tICJFbXB0eSBjb21taXQiIC0tYWxsb3ctZW1wdHkgJiYKKwlnaXQgcmViYXNlIC1Yc3VidHJlZT1maWxlc19zdWJ0cmVlIC0ta2VlcC1lbXB0eSAtLXByZXNlcnZlLW1lcmdlcyAtLW9udG8gZmlsZXMtbWFzdGVyIG1hc3RlciAmJgorCXZlcmJvc2UgdGVzdCAiJChjb21taXRfbWVzc2FnZSBIRUFEfikiID0gImZpbGVzX3N1YnRyZWUvbWFzdGVyNSIKKycKKworIyBGQUlMVVJFOiBEb2VzIG5vdCBwcmVzZXJ2ZSBFbXB0eS4KK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ1JlYmFzZSAtWHN1YnRyZWUgLS1rZWVwLWVtcHR5IC0tcHJlc2VydmUtbWVyZ2VzIC0tb250byBlbXB0eSBjb21taXQnICcKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmViYXNlLWtlZXAtZW1wdHktZW1wdHkgbWFzdGVyICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLS1wcnVuZS1lbXB0eSAtZiAtLXN1YmRpcmVjdG9yeS1maWx0ZXIgZmlsZXNfc3VidHJlZSAmJgorCWdpdCBjb21taXQgLW0gIkVtcHR5IGNvbW1pdCIgLS1hbGxvdy1lbXB0eSAmJgorCWdpdCByZWJhc2UgLVhzdWJ0cmVlPWZpbGVzX3N1YnRyZWUgLS1rZWVwLWVtcHR5IC0tcHJlc2VydmUtbWVyZ2VzIC0tb250byBmaWxlcy1tYXN0ZXIgbWFzdGVyICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUQpIiA9ICJFbXB0eSBjb21taXQiCisnCisKKyMgRkFJTFVSRTogZmF0YWw6IENvdWxkIG5vdCBwYXJzZSBvYmplY3QKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ1JlYmFzZSAtWHN1YnRyZWUgLS1vbnRvIGNvbW1pdCA0JyAnCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZS1vbnRvLTQgbWFzdGVyICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLS1wcnVuZS1lbXB0eSAtZiAtLXN1YmRpcmVjdG9yeS1maWx0ZXIgZmlsZXNfc3VidHJlZSAmJgorCWdpdCBjb21taXQgLW0gIkVtcHR5IGNvbW1pdCIgLS1hbGxvdy1lbXB0eSAmJgorCWdpdCByZWJhc2UgLVhzdWJ0cmVlPWZpbGVzX3N1YnRyZWUgLS1vbnRvIGZpbGVzLW1hc3RlciBtYXN0ZXIgJiYKKwl2ZXJib3NlIHRlc3QgIiQoY29tbWl0X21lc3NhZ2UgSEVBRH4yKSIgPSAiZmlsZXNfc3VidHJlZS9tYXN0ZXI0IgorJworCisjIEZBSUxVUkU6IGZhdGFsOiBDb3VsZCBub3QgcGFyc2Ugb2JqZWN0Cit0ZXN0X2V4cGVjdF9mYWlsdXJlICdSZWJhc2UgLVhzdWJ0cmVlIC0tb250byBjb21taXQgNScgJworCXJlc2V0X3JlYmFzZSAmJgorCWdpdCBjaGVja291dCAtYiByZWJhc2Utb250by01IG1hc3RlciAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC0tcHJ1bmUtZW1wdHkgLWYgLS1zdWJkaXJlY3RvcnktZmlsdGVyIGZpbGVzX3N1YnRyZWUgJiYKKwlnaXQgY29tbWl0IC1tICJFbXB0eSBjb21taXQiIC0tYWxsb3ctZW1wdHkgJiYKKwlnaXQgcmViYXNlIC1Yc3VidHJlZT1maWxlc19zdWJ0cmVlIC0tb250byBmaWxlcy1tYXN0ZXIgbWFzdGVyICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUR+KSIgPSAiZmlsZXNfc3VidHJlZS9tYXN0ZXI1IgorJworIyBGQUlMVVJFOiBmYXRhbDogQ291bGQgbm90IHBhcnNlIG9iamVjdAordGVzdF9leHBlY3RfZmFpbHVyZSAnUmViYXNlIC1Yc3VidHJlZSAtLW9udG8gZW1wdHkgY29tbWl0JyAnCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZS1vbnRvLWVtcHR5IG1hc3RlciAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC0tcHJ1bmUtZW1wdHkgLWYgLS1zdWJkaXJlY3RvcnktZmlsdGVyIGZpbGVzX3N1YnRyZWUgJiYKKwlnaXQgY29tbWl0IC1tICJFbXB0eSBjb21taXQiIC0tYWxsb3ctZW1wdHkgJiYKKwlnaXQgcmViYXNlIC1Yc3VidHJlZT1maWxlc19zdWJ0cmVlIC0tb250byBmaWxlcy1tYXN0ZXIgbWFzdGVyICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUQpIiA9ICJFbXB0eSBjb21taXQiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMC1hZGQuc2ggYi90L3QzNzAwLWFkZC5zaAppbmRleCBmMTRhNjY1Li4yOTc4Y2I5IDEwMDc1NQotLS0gYS90L3QzNzAwLWFkZC5zaAorKysgYi90L3QzNzAwLWFkZC5zaApAQCAtNyw2ICs3LDIwIEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCisjIFRlc3QgdGhlIGZpbGUgbW9kZSAiJDEiIG9mIHRoZSBmaWxlICIkMiIgaW4gdGhlIGluZGV4LgordGVzdF9tb2RlX2luX2luZGV4ICgpIHsKKwljYXNlICIkKGdpdCBscy1maWxlcyAtcyAiJDIiKSIgaW4KKwkiJDEgIioiCSQyIikKKwkJZWNobyBwYXNzCisJCTs7CisJKikKKwkJZWNobyBmYWlsCisJCWdpdCBscy1maWxlcyAtcyAiJDIiCisJCXJldHVybiAxCisJCTs7CisJZXNhYworfQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnVGVzdCBvZiBnaXQgYWRkJyBcCiAgICAgJ3RvdWNoIGZvbyAmJiBnaXQgYWRkIGZvbycKQEAgLTI1LDE4ICszOSwxMiBAQAogCSBlY2hvIGZvbyA+eGZvbzEgJiYKIAkgY2htb2QgNzU1IHhmb28xICYmCiAJIGdpdCBhZGQgeGZvbzEgJiYKLQkgY2FzZSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMSkiIGluCi0JIDEwMDY0NCIgIip4Zm9vMSkgZWNobyBwYXNzOzsKLQkgKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMTsgKGV4aXQgMSk7OwotCSBlc2FjJworCSB0ZXN0X21vZGVfaW5faW5kZXggMTAwNjQ0IHhmb28xJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKIAlybSAtZiB4Zm9vMSAmJgogCXRlc3RfbG5fc19hZGQgZm9vIHhmb28xICYmCi0JY2FzZSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMSkiIGluCi0JMTIwMDAwIiAiKnhmb28xKSBlY2hvIHBhc3M7OwotCSopIGVjaG8gZmFpbDsgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgeGZvbzE7IChleGl0IDEpOzsKLQllc2FjCisJdGVzdF9tb2RlX2luX2luZGV4IDEyMDAwMCB4Zm9vMQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTQ1LDI4ICs1MywxOSBAQAogCSBlY2hvIGZvbyA+eGZvbzIgJiYKIAkgY2htb2QgNzU1IHhmb28yICYmCiAJIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgeGZvbzIgJiYKLQkgY2FzZSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMikiIGluCi0JIDEwMDY0NCIgIip4Zm9vMikgZWNobyBwYXNzOzsKLQkgKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMjsgKGV4aXQgMSk7OwotCSBlc2FjJworCSB0ZXN0X21vZGVfaW5faW5kZXggMTAwNjQ0IHhmb28yJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKIAlybSAtZiB4Zm9vMiAmJgogCXRlc3RfbG5fc19hZGQgZm9vIHhmb28yICYmCi0JY2FzZSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMikiIGluCi0JMTIwMDAwIiAiKnhmb28yKSBlY2hvIHBhc3M7OwotCSopIGVjaG8gZmFpbDsgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgeGZvbzI7IChleGl0IDEpOzsKLQllc2FjCisJdGVzdF9tb2RlX2luX2luZGV4IDEyMDAwMCB4Zm9vMgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZDogVGVzdCB0aGF0IGV4ZWN1dGFibGUgYml0IGlzIG5vdCB1c2VkLi4uJyBcCiAJJ2dpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCiAJIHRlc3RfbG5fc19hZGQgeGZvbzIgeGZvbzMgJiYJIyBydW5zIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQKLQkgY2FzZSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMykiIGluCi0JIDEyMDAwMCIgIip4Zm9vMykgZWNobyBwYXNzOzsKLQkgKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMzsgKGV4aXQgMSk7OwotCSBlc2FjJworCSB0ZXN0X21vZGVfaW5faW5kZXggMTIwMDAwIHhmb28zJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0aWdub3JlIHRlc3Qgc2V0dXAnICcKIAllY2hvICIqLmlnIiA+LmdpdGlnbm9yZSAmJgpAQCAtMzMyLDQgKzMzMSwyMiBAQAogCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWNobW9kPVsrLV14IHN0YWdlcyBjb3JyZWN0bHknICcKKwlybSAtZiBmb28xICYmCisJZWNobyBmb28gPmZvbzEgJiYKKwlnaXQgYWRkIC0tY2htb2Q9K3ggZm9vMSAmJgorCXRlc3RfbW9kZV9pbl9pbmRleCAxMDA3NTUgZm9vMSAmJgorCWdpdCBhZGQgLS1jaG1vZD0teCBmb28xICYmCisJdGVzdF9tb2RlX2luX2luZGV4IDEwMDY0NCBmb28xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNZTUxJTktTICdnaXQgYWRkIC0tY2htb2Q9K3ggd2l0aCBzeW1saW5rcycgJworCWdpdCBjb25maWcgY29yZS5maWxlbW9kZSAxICYmCisJZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIDEgJiYKKwlybSAtZiBmb28yICYmCisJZWNobyBmb28gPmZvbzIgJiYKKwlnaXQgYWRkIC0tY2htb2Q9K3ggZm9vMiAmJgorCXRlc3RfbW9kZV9pbl9pbmRleCAxMDA3NTUgZm9vMgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTAtZGlmZi1wYXRoc3BlYy5zaCBiL3QvdDQwMTAtZGlmZi1wYXRoc3BlYy5zaAppbmRleCA0M2M0ODhiLi4zNWIzNWE4IDEwMDc1NQotLS0gYS90L3Q0MDEwLWRpZmYtcGF0aHNwZWMuc2gKKysrIGIvdC90NDAxMC1kaWZmLXBhdGhzcGVjLnNoCkBAIC03OCw4ICs3OCw2IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAogJwogCi1FTVBUWV9UUkVFPTRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIHdpdGggd2lsZGNhcmQgc2hvd3MgZGlyIGFsc28gbWF0Y2hlcycgJwogCWdpdCBkaWZmLXRyZWUgLS1uYW1lLW9ubHkgJEVNUFRZX1RSRUUgJHRyZWUgLS0gImYqIiA+cmVzdWx0ICYmCiAJZWNobyBmaWxlMCA+ZXhwZWN0ZWQgJiYKZGlmZiAtLWdpdCBhL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKaW5kZXggODA1ZGM5MC4uYjA1NzlkZCAxMDA3NTUKLS0tIGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKKysrIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKQEAgLTIyOSw2ICsyMjksNDYgQEAKIAlncmVwIC1lICJeU3ViamVjdDoiICIkMSIKIH0KIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LmZyb209ZmFsc2UnICcKKworCWdpdCAtYyBmb3JtYXQuZnJvbT1mYWxzZSBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwKKwlzZWQgLWUgIi9eXCQvcSIgPnBhdGNoICYmCisJY2hlY2tfcGF0Y2ggcGF0Y2ggJiYKKwkhIGdyZXAgIl5Gcm9tOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+XCQiIHBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5mcm9tPXRydWUnICcKKworCWdpdCAtYyBmb3JtYXQuZnJvbT10cnVlIGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgfAorCXNlZCAtZSAiL15cJC9xIiA+cGF0Y2ggJiYKKwljaGVja19wYXRjaCBwYXRjaCAmJgorCWdyZXAgIl5Gcm9tOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+XCQiIHBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5mcm9tIHdpdGggYWRkcmVzcycgJworCisJZ2l0IC1jIGZvcm1hdC5mcm9tPSJGIFIgT20gPGZyb21AZXhhbXBsZS5jb20+IiBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwKKwlzZWQgLWUgIi9eXCQvcSIgPnBhdGNoICYmCisJY2hlY2tfcGF0Y2ggcGF0Y2ggJiYKKwlncmVwICJeRnJvbTogRiBSIE9tIDxmcm9tQGV4YW1wbGUuY29tPlwkIiBwYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLWZyb20gb3ZlcnJpZGVzIGZvcm1hdC5mcm9tJyAnCisKKwlnaXQgLWMgZm9ybWF0LmZyb209IkYgUiBPbSA8ZnJvbUBleGFtcGxlLmNvbT4iIGZvcm1hdC1wYXRjaCAtLW5vLWZyb20gLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwKKwlzZWQgLWUgIi9eXCQvcSIgPnBhdGNoICYmCisJY2hlY2tfcGF0Y2ggcGF0Y2ggJiYKKwkhIGdyZXAgIl5Gcm9tOiBGIFIgT20gPGZyb21AZXhhbXBsZS5jb20+XCQiIHBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZnJvbSBvdmVycmlkZXMgZm9ybWF0LmZyb20nICcKKworCWdpdCAtYyBmb3JtYXQuZnJvbT0iRiBSIE9tIDxmcm9tQGV4YW1wbGUuY29tPiIgZm9ybWF0LXBhdGNoIC0tZnJvbSAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgfAorCXNlZCAtZSAiL15cJC9xIiA+cGF0Y2ggJiYKKwljaGVja19wYXRjaCBwYXRjaCAmJgorCSEgZ3JlcCAiXkZyb206IEYgUiBPbSA8ZnJvbUBleGFtcGxlLmNvbT5cJCIgcGF0Y2gKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby10byBvdmVycmlkZXMgY29uZmlnLnRvJyAnCiAKIAlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LnRvIFwKQEAgLTE1NjUsNCArMTYwNSw0NSBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1wcmV0dHk9bWJveHJkJyAnCisJc3A9IiAiICYmCisJY2F0ID5tc2cgPDwtSU5QVVRfRU5EICYmCisJbWJveHJkIHNob3VsZCBlc2NhcGUgdGhlIGJvZHkKKworCUZyb20gY291bGQgdHJpcCB1cCBhIGxvb3NlIG1ib3ggcGFyc2VyCisJPkZyb20gZXh0cmEgZXNjYXBlIGZvciByZXZlcnNpYmlsaXR5CisJPj5Gcm9tIGV4dHJhIGVzY2FwZSBmb3IgcmV2ZXJzaWJpbGl0eSAyCisJZnJvbSBsb3dlciBjYXNlIG5vdCBlc2NhcGVkCisJRnJvbW0gYmFkIHNwZWxpbmcgbm90IGVzY2FwZWQKKwkgRnJvbSB3aXRoIGxlYWRpbmcgc3BhY2Ugbm90IGVzY2FwZWQKKworCUYKKwlGcm9tCisJRnJvbSRzcAorCUZyb20gICAgJHNwCisJRnJvbQkkc3AKKwlJTlBVVF9FTkQKKworCWNhdCA+ZXhwZWN0IDw8LUlOUFVUX0VORCAmJgorCT5Gcm9tIGNvdWxkIHRyaXAgdXAgYSBsb29zZSBtYm94IHBhcnNlcgorCT4+RnJvbSBleHRyYSBlc2NhcGUgZm9yIHJldmVyc2liaWxpdHkKKwk+Pj5Gcm9tIGV4dHJhIGVzY2FwZSBmb3IgcmV2ZXJzaWJpbGl0eSAyCisJZnJvbSBsb3dlciBjYXNlIG5vdCBlc2NhcGVkCisJRnJvbW0gYmFkIHNwZWxpbmcgbm90IGVzY2FwZWQKKwkgRnJvbSB3aXRoIGxlYWRpbmcgc3BhY2Ugbm90IGVzY2FwZWQKKworCUYKKwlGcm9tCisJRnJvbQorCUZyb20KKwlGcm9tCisJSU5QVVRfRU5ECisKKwlDPSQoZ2l0IGNvbW1pdC10cmVlIEhFQUReXnt0cmVlfSAtcCBIRUFEIDxtc2cpICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXByZXR0eT1tYm94cmQgLS1zdGRvdXQgLTEgJEN+MS4uJEMgPnBhdGNoICYmCisJZ2l0IGdyZXAgLWggLS1uby1pbmRleCAtQTExIFwKKwkJIl4+RnJvbSBjb3VsZCB0cmlwIHVwIGEgbG9vc2UgbWJveCBwYXJzZXIiIHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoIGIvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCmluZGV4IDY3MzczZGMuLjE3OTVmZmMgMTAwNzU1Ci0tLSBhL3QvdDQwMTgtZGlmZi1mdW5jbmFtZS5zaAorKysgYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKQEAgLTMwLDYgKzMwLDcgQEAKIAliaWJ0ZXgKIAljcHAKIAljc2hhcnAKKwljc3MKIAlmb3J0cmFuCiAJZm91bnRhaW4KIAlodG1sCmRpZmYgLS1naXQgYS90L3Q0MDE4L2Nzcy1icmFjZS1pbi1jb2wtMSBiL3QvdDQwMTgvY3NzLWJyYWNlLWluLWNvbC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzE1NzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2Nzcy1icmFjZS1pbi1jb2wtMQpAQCAtMCwwICsxLDUgQEAKK1JJR0hUIGxhYmVsLmNvbnRyb2wtbGFiZWwKK3sKKyAgICBtYXJnaW4tdG9wOiAxMHB4IWltcG9ydGFudDsKKyAgICBib3JkZXIgOiAxMHB4IENoYW5nZU1lICNDNkM2QzY7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2Nzcy1jb2xvbi1lb2wgYi90L3Q0MDE4L2Nzcy1jb2xvbi1lb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEzMDU1MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3NzLWNvbG9uLWVvbApAQCAtMCwwICsxLDQgQEAKK1JJR0hUIGgxIHsKK2NvbG9yOgorQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2Nzcy1jb2xvbi1zZWxlY3RvciBiL3QvdDQwMTgvY3NzLWNvbG9uLXNlbGVjdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZDcxZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2Nzcy1jb2xvbi1zZWxlY3RvcgpAQCAtMCwwICsxLDUgQEAKK1JJR0hUIGE6aG92ZXIgeworICAgIG1hcmdpbi10b3A6CisgICAgMTBweCFpbXBvcnRhbnQ7CisgICAgYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3MtY29tbW9uIGIvdC90NDAxOC9jc3MtY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZWQ3NTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2Nzcy1jb21tb24KQEAgLTAsMCArMSw0IEBACitSSUdIVCBsYWJlbC5jb250cm9sLWxhYmVsIHsKKyAgICBtYXJnaW4tdG9wOiAxMHB4IWltcG9ydGFudDsKKyAgICBib3JkZXIgOiAxMHB4IENoYW5nZU1lICNDNkM2QzY7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2Nzcy1sb25nLXNlbGVjdG9yLWxpc3QgYi90L3Q0MDE4L2Nzcy1sb25nLXNlbGVjdG9yLWxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjZDI1ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3NzLWxvbmctc2VsZWN0b3ItbGlzdApAQCAtMCwwICsxLDYgQEAKK3AuaGVhZGVyLAorbGFiZWwuY29udHJvbC1sYWJlbCwKK2RpdiB1bCNSSUdIVCB7CisgICAgbWFyZ2luLXRvcDogMTBweCFpbXBvcnRhbnQ7CisgICAgYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3MtcHJvcC1zYW5zLWluZGVudCBiL3QvdDQwMTgvY3NzLXByb3Atc2Fucy1pbmRlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllM2M4NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3NzLXByb3Atc2Fucy1pbmRlbnQKQEAgLTAsMCArMSw1IEBACitSSUdIVCwgbGFiZWwuY29udHJvbC1sYWJlbCB7CittYXJnaW4tdG9wOiAxMHB4IWltcG9ydGFudDsKK3BhZGRpbmc6IDA7Citib3JkZXIgOiAxMHB4IENoYW5nZU1lICNDNkM2QzY7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2Nzcy1zaG9ydC1zZWxlY3Rvci1saXN0IGIvdC90NDAxOC9jc3Mtc2hvcnQtc2VsZWN0b3ItbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTBiZGVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jc3Mtc2hvcnQtc2VsZWN0b3ItbGlzdApAQCAtMCwwICsxLDQgQEAKK2xhYmVsLmNvbnRyb2wsIGRpdiB1bCNSSUdIVCB7CisgICAgbWFyZ2luLXRvcDogMTBweCFpbXBvcnRhbnQ7CisgICAgYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3MtdHJhaWxpbmctc3BhY2UgYi90L3Q0MDE4L2Nzcy10cmFpbGluZy1zcGFjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmI1NjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jc3MtdHJhaWxpbmctc3BhY2UKQEAgLTAsMCArMSw1IEBACitSSUdIVCBsYWJlbC5jb250cm9sLWxhYmVsIHsKKyAgICBtYXJnaW46MTBweDsgICAKKyAgICBwYWRkaW5nOjEwcHg7CisgICAgYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAyNi1jb2xvci5zaCBiL3QvdDQwMjYtY29sb3Iuc2gKaW5kZXggMmIzMmM0Zi4uZWM3OGM1ZSAxMDA3NTUKLS0tIGEvdC90NDAyNi1jb2xvci5zaAorKysgYi90L3Q0MDI2LWNvbG9yLnNoCkBAIC01MCwxNCArNTAsMTkgQEAKIAljb2xvciAibm9ib2xkIG5vZGltIG5vdWwgbm9ibGluayBub3JldmVyc2UiICJbMjI7MjQ7MjU7MjdtIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibm8tIiB2YXJpYW50IG9mIG5lZ2F0aW9uJyAnCisJY29sb3IgIm5vLWJvbGQgbm8tYmxpbmsiICJbMjI7MjVtIgorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb25nIGNvbG9yIHNwZWNpZmljYXRpb24nICcKIAljb2xvciAiMjU0IDI1NSBib2xkIGRpbSB1bCBibGluayByZXZlcnNlIiAiWzE7Mjs0OzU7NzszODs1OzI1NDs0ODs1OzI1NW0iCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic3VyZGx5IGxvbmcgY29sb3Igc3BlY2lmaWNhdGlvbicgJwogCWNvbG9yIFwKLQkgICIjZmZmZmZmICNmZmZmZmYgYm9sZCBub2JvbGQgZGltIG5vZGltIHVsIG5vdWwgYmxpbmsgbm9ibGluayByZXZlcnNlIG5vcmV2ZXJzZSIgXAotCSAgIlsxOzI7NDs1Ozc7MjI7MjQ7MjU7Mjc7Mzg7MjsyNTU7MjU1OzI1NTs0ODsyOzI1NTsyNTU7MjU1bSIKKwkgICIjZmZmZmZmICNmZmZmZmYgYm9sZCBub2JvbGQgZGltIG5vZGltIGl0YWxpYyBub2l0YWxpYworCSAgIHVsIG5vdWwgYmxpbmsgbm9ibGluayByZXZlcnNlIG5vcmV2ZXJzZSBzdHJpa2Ugbm9zdHJpa2UiIFwKKwkgICJbMTsyOzM7NDs1Ozc7OTsyMjsyMzsyNDsyNTsyNzsyOTszODsyOzI1NTsyNTU7MjU1OzQ4OzI7MjU1OzI1NTsyNTVtIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICcwLTcgYXJlIGFsaWFzZXMgZm9yIGJhc2ljIEFOU0kgY29sb3IgbmFtZXMnICcKZGlmZiAtLWdpdCBhL3QvdDQwMzMtZGlmZi1wYXRpZW5jZS5zaCBiL3QvdDQwMzMtZGlmZi1wYXRpZW5jZS5zaAppbmRleCAzYzk5MzJlLi4xMTMzMDRkIDEwMDc1NQotLS0gYS90L3Q0MDMzLWRpZmYtcGF0aWVuY2Uuc2gKKysrIGIvdC90NDAzMy1kaWZmLXBhdGllbmNlLnNoCkBAIC01LDYgKzUsMTQgQEAKIC4gLi90ZXN0LWxpYi5zaAogLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZGlmZi1hbHRlcm5hdGl2ZS5zaAogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zcGFjZS1hdC1lb2wgd2l0aCBhIHNpbmdsZSBhcHBlbmRlZCBjaGFyYWN0ZXInICcKKwlwcmludGYgImFcbmJcbmNcbiIgPnByZSAmJgorCXByaW50ZiAiYVxuYlhcbmNcbiIgPnBvc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IFwKKwkJLS1wYXRpZW5jZSAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgcHJlIHBvc3QgPmRpZmYgJiYKKwlncmVwICJeKy4qWCIgZGlmZgorJworCiB0ZXN0X2RpZmZfZnJvYm5pdHogInBhdGllbmNlIgogCiB0ZXN0X2RpZmZfdW5pcXVlICJwYXRpZW5jZSIKZGlmZiAtLWdpdCBhL3QvdDQwMzQtZGlmZi13b3Jkcy5zaCBiL3QvdDQwMzQtZGlmZi13b3Jkcy5zaAppbmRleCBmMmY1NWZjLi45MTJkZjkxIDEwMDc1NQotLS0gYS90L3Q0MDM0LWRpZmYtd29yZHMuc2gKKysrIGIvdC90NDAzNC1kaWZmLXdvcmRzLnNoCkBAIC0zMDIsNiArMzAyLDcgQEAKIHRlc3RfbGFuZ3VhZ2VfZHJpdmVyIGJpYnRleAogdGVzdF9sYW5ndWFnZV9kcml2ZXIgY3BwCiB0ZXN0X2xhbmd1YWdlX2RyaXZlciBjc2hhcnAKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIGNzcwogdGVzdF9sYW5ndWFnZV9kcml2ZXIgZm9ydHJhbgogdGVzdF9sYW5ndWFnZV9kcml2ZXIgaHRtbAogdGVzdF9sYW5ndWFnZV9kcml2ZXIgamF2YQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9jc3MvZXhwZWN0IGIvdC90NDAzNC9jc3MvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMTAzOTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2Nzcy9leHBlY3QKQEAgLTAsMCArMSwxNiBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCBiOGFlMGJiLi5mZTUwMGI3IDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxMCArMSwxMCBAQDxSRVNFVD4KKy48UkVEPmNsYXNzLWZvcm08UkVTRVQ+PEdSRUVOPm90aGVyLWZvcm08UkVTRVQ+IGxhYmVsLmNvbnRyb2wtbGFiZWwgeworICAgIG1hcmdpbi10b3A6IDxSRUQ+MTA8UkVTRVQ+PEdSRUVOPjE1PFJFU0VUPnB4IWltcG9ydGFudDsKKyAgICBib3JkZXIgOiAxMHB4IDxSRUQ+ZGFzaGVkPFJFU0VUPjxHUkVFTj5kb3R0ZWQ8UkVTRVQ+ICNDNkM2QzY7Cit9PFJFU0VUPgorPFJFRD4jQ0NDQ0NDPFJFU0VUPjxHUkVFTj4jQ0NDQ0NCPFJFU0VUPgorMTBlbTxSRVNFVD4KKzxSRUQ+cGFkZGluZy1ib3R0b208UkVTRVQ+PEdSRUVOPm1hcmdpbi1sZWZ0PFJFU0VUPgorMTUwPFJFRD5weDxSRVNFVD48R1JFRU4+ZW08UkVTRVQ+CisxMHB4Cis8UkVEPiFpbXBvcnRhbnQ8UkVTRVQ+Cis8UkVEPmRpdjxSRVNFVD48R1JFRU4+bGk8UkVTRVQ+LmNsYXNzI2lkCmRpZmYgLS1naXQgYS90L3Q0MDM0L2Nzcy9wb3N0IGIvdC90NDAzNC9jc3MvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTUwMGI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9jc3MvcG9zdApAQCAtMCwwICsxLDEwIEBACisub3RoZXItZm9ybSBsYWJlbC5jb250cm9sLWxhYmVsIHsKKyAgICBtYXJnaW4tdG9wOiAxNXB4IWltcG9ydGFudDsKKyAgICBib3JkZXIgOiAxMHB4IGRvdHRlZCAjQzZDNkM2OworfQorI0NDQ0NDQgorMTBlbQorbWFyZ2luLWxlZnQKKzE1MGVtCisxMHB4CitsaS5jbGFzcyNpZApkaWZmIC0tZ2l0IGEvdC90NDAzNC9jc3MvcHJlIGIvdC90NDAzNC9jc3MvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YWUwYmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2Nzcy9wcmUKQEAgLTAsMCArMSwxMCBAQAorLmNsYXNzLWZvcm0gbGFiZWwuY29udHJvbC1sYWJlbCB7CisgICAgbWFyZ2luLXRvcDogMTBweCFpbXBvcnRhbnQ7CisgICAgYm9yZGVyIDogMTBweCBkYXNoZWQgI0M2QzZDNjsKK30KKyNDQ0NDQ0MKKzEwZW0KK3BhZGRpbmctYm90dG9tCisxNTBweAorMTBweCFpbXBvcnRhbnQKK2Rpdi5jbGFzcyNpZApkaWZmIC0tZ2l0IGEvdC90NDA1MS1kaWZmLWZ1bmN0aW9uLWNvbnRleHQuc2ggYi90L3Q0MDUxLWRpZmYtZnVuY3Rpb24tY29udGV4dC5zaAppbmRleCAwMDFkNjc4Li5iNzliODc3IDEwMDc1NQotLS0gYS90L3Q0MDUxLWRpZmYtZnVuY3Rpb24tY29udGV4dC5zaAorKysgYi90L3Q0MDUxLWRpZmYtZnVuY3Rpb24tY29udGV4dC5zaApAQCAtMyw5MCArMywxODAgQEAKIHRlc3RfZGVzY3JpcHRpb249J2RpZmYgZnVuY3Rpb24gY29udGV4dCcKIAogLiAuL3Rlc3QtbGliLnNoCi0uICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCiAKK2Rpcj0iJFRFU1RfRElSRUNUT1JZL3Q0MDUxIgogCi1jYXQgPDxcRU9GID5oZWxsby5jCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotc3RhdGljIGludCBhKHZvaWQpCi17Ci0JLyoKLQkgKiBEdW1teS4KLQkgKi8KK2NvbW1pdF9hbmRfdGFnICgpIHsKKwl0YWc9JDEgJiYKKwlzaGlmdCAmJgorCWdpdCBhZGQgIiRAIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIiR0YWciICYmCisJZ2l0IHRhZyAiJHRhZyIKIH0KIAotc3RhdGljIGludCBoZWxsb193b3JsZCh2b2lkKQotewotCS8qIENsYXNzaWMuICovCi0JcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOwotCi0JLyogU3VjY2VzcyEgKi8KLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbnQgYih2b2lkKQotewotCS8qCi0JICogRHVtbXksIHRvby4KLQkgKi8KK2ZpcnN0X2NvbnRleHRfbGluZSAoKSB7CisJYXdrICcKKwkJZm91bmQge3ByaW50OyBleGl0fQorCQkvXkBALyB7Zm91bmQgPSAxfQorCScKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotCWEoKTsKLQliKCk7Ci0JcmV0dXJuIGhlbGxvX3dvcmxkKCk7CitsYXN0X2NvbnRleHRfbGluZSAoKSB7CisJc2VkIC1uZSBcJHAKIH0KLUVPRgorCitjaGVja19kaWZmICgpIHsKKwluYW1lPSQxCisJZGVzYz0kMgorCW9wdGlvbnM9Ii1XICQzIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGRlc2MiICcKKwkJZ2l0IGRpZmYgJG9wdGlvbnMgIiRuYW1lXiIgIiRuYW1lIiA+IiRuYW1lLmRpZmYiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnIGRpZmYgYXBwbGllcycgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJCWdpdCBjaGVja291dCAtLWRldGFjaCAiJG5hbWVeIiAmJgorCQlnaXQgYXBwbHkgLS1pbmRleCAiJG5hbWUuZGlmZiIgJiYKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgIiRuYW1lIgorCScKK30KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKLQlnaXQgYWRkIGhlbGxvLmMgJiYKLQl0ZXN0X3RpY2sgJiYKLQlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwljYXQgIiRkaXIvaW5jbHVkZXMuYyIgIiRkaXIvZHVtbXkuYyIgIiRkaXIvZHVtbXkuYyIgIiRkaXIvaGVsbG8uYyIgXAorCQkiJGRpci9kdW1teS5jIiAiJGRpci9kdW1teS5jIiA+ZmlsZS5jICYmCisJY29tbWl0X2FuZF90YWcgaW5pdGlhbCBmaWxlLmMgJiYKIAotCWdyZXAgLXYgQ2xhc3NpYyA8aGVsbG8uYyA+aGVsbG8uYy5uZXcgJiYKLQltdiBoZWxsby5jLm5ldyBoZWxsby5jCisJZ3JlcCAtdiAiZGVsZXRlIG1lIGZyb20gaGVsbG8iIDxmaWxlLmMgPmZpbGUuYy5uZXcgJiYKKwltdiBmaWxlLmMubmV3IGZpbGUuYyAmJgorCWNvbW1pdF9hbmRfdGFnIGNoYW5nZWRfaGVsbG8gZmlsZS5jICYmCisKKwlncmVwIC12ICJkZWxldGUgbWUgZnJvbSBpbmNsdWRlcyIgPGZpbGUuYyA+ZmlsZS5jLm5ldyAmJgorCW12IGZpbGUuYy5uZXcgZmlsZS5jICYmCisJY29tbWl0X2FuZF90YWcgY2hhbmdlZF9pbmNsdWRlcyBmaWxlLmMgJiYKKworCWNhdCAiJGRpci9hcHBlbmRlZDEuYyIgPj5maWxlLmMgJiYKKwljb21taXRfYW5kX3RhZyBhcHBlbmRlZCBmaWxlLmMgJiYKKworCWNhdCAiJGRpci9hcHBlbmRlZDIuYyIgPj5maWxlLmMgJiYKKwljb21taXRfYW5kX3RhZyBleHRlbmRlZCBmaWxlLmMgJiYKKworCWdyZXAgLXYgIkJlZ2luIG9mIHNlY29uZCBwYXJ0IiA8ZmlsZS5jID5maWxlLmMubmV3ICYmCisJbXYgZmlsZS5jLm5ldyBmaWxlLmMgJiYKKwljb21taXRfYW5kX3RhZyBsb25nX2NvbW1vbl90YWlsIGZpbGUuYyAmJgorCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwlncmVwIC12ICJkZWxldGUgbWUgZnJvbSBoZWxsbyIgPGZpbGUuYyA+ZmlsZS5jLm5ldyAmJgorCW12IGZpbGUuYy5uZXcgZmlsZS5jICYmCisJY2F0ICIkZGlyL2FwcGVuZGVkMS5jIiA+PmZpbGUuYyAmJgorCWNvbW1pdF9hbmRfdGFnIGNoYW5nZWRfaGVsbG9fYXBwZW5kZWQgZmlsZS5jCiAnCiAKLWNhdCA8PFxFT0YgPmV4cGVjdGVkCi1kaWZmIC0tZ2l0IGEvaGVsbG8uYyBiL2hlbGxvLmMKLS0tLSBhL2hlbGxvLmMKLSsrKyBiL2hlbGxvLmMKLUBAIC0xMCw4ICsxMCw3IEBAIHN0YXRpYyBpbnQgYSh2b2lkKQotIHN0YXRpYyBpbnQgaGVsbG9fd29ybGQodm9pZCkKLSB7Ci0tCS8qIENsYXNzaWMuICovCi0gCXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKLSAKLSAJLyogU3VjY2VzcyEgKi8KLSAJcmV0dXJuIDA7Ci0gfQotRU9GCitjaGVja19kaWZmIGNoYW5nZWRfaGVsbG8gJ2NoYW5nZWQgZnVuY3Rpb24nCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLVUwIC1XJyAnCi0JZ2l0IGRpZmYgLVUwIC1XID5hY3R1YWwgJiYKLQljb21wYXJlX2RpZmZfcGF0Y2ggYWN0dWFsIGV4cGVjdGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBiZWdpbicgJworCWdyZXAgIl4gLipCZWdpbiBvZiBoZWxsbyIgY2hhbmdlZF9oZWxsby5kaWZmCiAnCiAKLWNhdCA8PFxFT0YgPmV4cGVjdGVkCi1kaWZmIC0tZ2l0IGEvaGVsbG8uYyBiL2hlbGxvLmMKLS0tLSBhL2hlbGxvLmMKLSsrKyBiL2hlbGxvLmMKLUBAIC05LDkgKzksOCBAQCBzdGF0aWMgaW50IGEodm9pZCkKLSAKLSBzdGF0aWMgaW50IGhlbGxvX3dvcmxkKHZvaWQpCi0gewotLQkvKiBDbGFzc2ljLiAqLwotIAlwcmludGYoIkhlbGxvIHdvcmxkLlxuIik7Ci0gCi0gCS8qIFN1Y2Nlc3MhICovCi0gCXJldHVybiAwOwotIH0KLUVPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgaW5jbHVkZXMgZW5kJyAnCisJZ3JlcCAiXiAuKkVuZCBvZiBoZWxsbyIgY2hhbmdlZF9oZWxsby5kaWZmCisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLVcnICcKLQlnaXQgZGlmZiAtVyA+YWN0dWFsICYmCi0JY29tcGFyZV9kaWZmX3BhdGNoIGFjdHVhbCBleHBlY3RlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSBvdGhlciBmdW5jdGlvbnMnICcKKwl0ZXN0ICQoZ3JlcCAtYyAiXlsgKy1dLipCZWdpbiIgY2hhbmdlZF9oZWxsby5kaWZmKSAtbGUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBkb2VzIG5vdCBpbmNsdWRlIHByZWNlZGluZyBlbXB0eSBsaW5lcycgJworCXRlc3QgIiQoZmlyc3RfY29udGV4dF9saW5lIDxjaGFuZ2VkX2hlbGxvLmRpZmYpIiAhPSAiICIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSB0cmFpbGluZyBlbXB0eSBsaW5lcycgJworCXRlc3QgIiQobGFzdF9jb250ZXh0X2xpbmUgPGNoYW5nZWRfaGVsbG8uZGlmZikiICE9ICIgIgorJworCitjaGVja19kaWZmIGNoYW5nZWRfaW5jbHVkZXMgJ2NoYW5nZWQgaW5jbHVkZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGluY2x1ZGVzIGJlZ2luJyAnCisJZ3JlcCAiXiAuKkJlZ2luLmgiIGNoYW5nZWRfaW5jbHVkZXMuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBlbmQnICcKKwlncmVwICJeIC4qRW5kLmgiIGNoYW5nZWRfaW5jbHVkZXMuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBkb2VzIG5vdCBpbmNsdWRlIG90aGVyIGZ1bmN0aW9ucycgJworCXRlc3QgJChncmVwIC1jICJeWyArLV0uKkJlZ2luIiBjaGFuZ2VkX2luY2x1ZGVzLmRpZmYpIC1sZSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGRvZXMgbm90IGluY2x1ZGUgdHJhaWxpbmcgZW1wdHkgbGluZXMnICcKKwl0ZXN0ICIkKGxhc3RfY29udGV4dF9saW5lIDxjaGFuZ2VkX2luY2x1ZGVzLmRpZmYpIiAhPSAiICIKKycKKworY2hlY2tfZGlmZiBhcHBlbmRlZCAnYXBwZW5kZWQgZnVuY3Rpb24nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGluY2x1ZGVzIGJlZ2luJyAnCisJZ3JlcCAiXlsrXS4qQmVnaW4gb2YgZmlyc3QgcGFydCIgYXBwZW5kZWQuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBlbmQnICcKKwlncmVwICJeWytdLipFbmQgb2YgZmlyc3QgcGFydCIgYXBwZW5kZWQuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBkb2VzIG5vdCBpbmNsdWRlIG90aGVyIGZ1bmN0aW9ucycgJworCXRlc3QgJChncmVwIC1jICJeWyArLV0uKkJlZ2luIiBhcHBlbmRlZC5kaWZmKSAtbGUgMQorJworCitjaGVja19kaWZmIGV4dGVuZGVkICdhcHBlbmRlZCBmdW5jdGlvbiBwYXJ0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBiZWdpbicgJworCWdyZXAgIl4gLipCZWdpbiBvZiBmaXJzdCBwYXJ0IiBleHRlbmRlZC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGluY2x1ZGVzIGVuZCcgJworCWdyZXAgIl5bK10uKkVuZCBvZiBzZWNvbmQgcGFydCIgZXh0ZW5kZWQuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBkb2VzIG5vdCBpbmNsdWRlIG90aGVyIGZ1bmN0aW9ucycgJworCXRlc3QgJChncmVwIC1jICJeWyArLV0uKkJlZ2luIiBleHRlbmRlZC5kaWZmKSAtbGUgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBkb2VzIG5vdCBpbmNsdWRlIHByZWNlZGluZyBlbXB0eSBsaW5lcycgJworCXRlc3QgIiQoZmlyc3RfY29udGV4dF9saW5lIDxleHRlbmRlZC5kaWZmKSIgIT0gIiAiCisnCisKK2NoZWNrX2RpZmYgbG9uZ19jb21tb25fdGFpbCAnY2hhbmdlIHdpdGggbG9uZyBjb21tb24gdGFpbCBhbmQgbm8gY29udGV4dCcgLVUwCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGluY2x1ZGVzIGJlZ2luJyAnCisJZ3JlcCAiXiAuKkJlZ2luIG9mIGZpcnN0IHBhcnQiIGxvbmdfY29tbW9uX3RhaWwuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBlbmQnICcKKwlncmVwICJeIC4qRW5kIG9mIHNlY29uZCBwYXJ0IiBsb25nX2NvbW1vbl90YWlsLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSBvdGhlciBmdW5jdGlvbnMnICcKKwl0ZXN0ICQoZ3JlcCAtYyAiXlsgKy1dLipCZWdpbiIgbG9uZ19jb21tb25fdGFpbC5kaWZmKSAtbGUgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBkb2VzIG5vdCBpbmNsdWRlIHByZWNlZGluZyBlbXB0eSBsaW5lcycgJworCXRlc3QgIiQoZmlyc3RfY29udGV4dF9saW5lIDxsb25nX2NvbW1vbl90YWlsLmRpZmYuZGlmZikiICE9ICIgIgorJworCitjaGVja19kaWZmIGNoYW5nZWRfaGVsbG9fYXBwZW5kZWQgJ2NoYW5nZWQgZnVuY3Rpb24gcGx1cyBhcHBlbmRlZCBmdW5jdGlvbicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgaW5jbHVkZXMgYmVnaW4nICcKKwlncmVwICJeIC4qQmVnaW4gb2YgaGVsbG8iIGNoYW5nZWRfaGVsbG9fYXBwZW5kZWQuZGlmZiAmJgorCWdyZXAgIl5bK10uKkJlZ2luIG9mIGZpcnN0IHBhcnQiIGNoYW5nZWRfaGVsbG9fYXBwZW5kZWQuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBlbmQnICcKKwlncmVwICJeIC4qRW5kIG9mIGhlbGxvIiBjaGFuZ2VkX2hlbGxvX2FwcGVuZGVkLmRpZmYgJiYKKwlncmVwICJeWytdLipFbmQgb2YgZmlyc3QgcGFydCIgY2hhbmdlZF9oZWxsb19hcHBlbmRlZC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGRvZXMgbm90IGluY2x1ZGUgb3RoZXIgZnVuY3Rpb25zJyAnCisJdGVzdCAkKGdyZXAgLWMgIl5bICstXS4qQmVnaW4iIGNoYW5nZWRfaGVsbG9fYXBwZW5kZWQuZGlmZikgLWxlIDIKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDUxL2FwcGVuZGVkMS5jIGIvdC90NDA1MS9hcHBlbmRlZDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY1NmYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1MS9hcHBlbmRlZDEuYwpAQCAtMCwwICsxLDE1IEBACisKK2ludCBhcHBlbmRlZCh2b2lkKSAvLyBCZWdpbiBvZiBmaXJzdCBwYXJ0Cit7CisJaW50IGk7CisJY2hhciAqcyA9ICJhIHN0cmluZyI7CisKKwlwcmludGYoIiVzXG4iLCBzKTsKKworCWZvciAoaSA9IDk5OworCSAgICAgaSA+PSAwOworCSAgICAgaS0tKSB7CisJCXByaW50ZigiJWQgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsXG4iLCBpKTsKKwl9CisKKwlwcmludGYoIkVuZCBvZiBmaXJzdCBwYXJ0XG4iKTsKZGlmZiAtLWdpdCBhL3QvdDQwNTEvYXBwZW5kZWQyLmMgYi90L3Q0MDUxL2FwcGVuZGVkMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NTFmNzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDUxL2FwcGVuZGVkMi5jCkBAIC0wLDAgKzEsMzUgQEAKKwlwcmludGYoIkJlZ2luIG9mIHNlY29uZCBwYXJ0XG4iKTsKKworCS8qCisJICogTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLAorCSAqIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUKKwkgKiBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQKKwkgKiBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QKKwkgKiBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvcgorCSAqIHNpdCBhbWV0LgorCSAqCisJICogTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLAorCSAqIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUKKwkgKiBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQKKwkgKiBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QKKwkgKiBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvcgorCSAqIHNpdCBhbWV0LgorCSAqCisJICogTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLAorCSAqIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUKKwkgKiBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQKKwkgKiBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QKKwkgKiBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvcgorCSAqIHNpdCBhbWV0LgorCSAqCisJICogTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLAorCSAqIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUKKwkgKiBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQKKwkgKiBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QKKwkgKiBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvcgorCSAqIHNpdCBhbWV0LgorCSAqCisJICovCisKKwlyZXR1cm4gMDsKK30JLy8gRW5kIG9mIHNlY29uZCBwYXJ0CmRpZmYgLS1naXQgYS90L3Q0MDUxL2R1bW15LmMgYi90L3Q0MDUxL2R1bW15LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzMDE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTEvZHVtbXkuYwpAQCAtMCwwICsxLDcgQEAKKworc3RhdGljIGludCBkdW1teSh2b2lkKQkvLyBCZWdpbiBvZiBkdW1teQoreworCWludCByYyA9IDA7CisKKwlyZXR1cm4gcmM7Cit9CS8vIEVuZCBvZiBkdW1teQpkaWZmIC0tZ2l0IGEvdC90NDA1MS9oZWxsby5jIGIvdC90NDA1MS9oZWxsby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYjFhMWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDUxL2hlbGxvLmMKQEAgLTAsMCArMSwyMSBAQAorCitzdGF0aWMgdm9pZCBoZWxsbyh2b2lkKQkvLyBCZWdpbiBvZiBoZWxsbworeworCS8qCisJICogQ2xhc3NpYy4KKwkgKi8KKwlwdXRjaGFyKCdIJyk7CisJcHV0Y2hhcignZScpOworCXB1dGNoYXIoJ2wnKTsKKwlwdXRjaGFyKCdsJyk7CisJcHV0Y2hhcignbycpOworCXB1dGNoYXIoJyAnKTsKKwkvKiBkZWxldGUgbWUgZnJvbSBoZWxsbyAqLworCXB1dGNoYXIoJ3cnKTsKKwlwdXRjaGFyKCdvJyk7CisJcHV0Y2hhcigncicpOworCXB1dGNoYXIoJ2wnKTsKKwlwdXRjaGFyKCdkJyk7CisJcHV0Y2hhcignLicpOworCXB1dGNoYXIoJ1xuJyk7Cit9CS8vIEVuZCBvZiBoZWxsbwpkaWZmIC0tZ2l0IGEvdC90NDA1MS9pbmNsdWRlcy5jIGIvdC90NDA1MS9pbmNsdWRlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzY4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDUxL2luY2x1ZGVzLmMKQEAgLTAsMCArMSwyMCBAQAorI2luY2x1ZGUgPEJlZ2luLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisvKiBkZWxldGUgbWUgZnJvbSBpbmNsdWRlcyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHJlZ2V4Lmg+CisjaW5jbHVkZSA8dXRpbWUuaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDxFbmQuaD4KZGlmZiAtLWdpdCBhL3QvdDQwNTQtZGlmZi1ib2d1cy10cmVlLnNoIGIvdC90NDA1NC1kaWZmLWJvZ3VzLXRyZWUuc2gKaW5kZXggMWQ2ZWZhYi4uMThmNDJjNSAxMDA3NTUKLS0tIGEvdC90NDA1NC1kaWZmLWJvZ3VzLXRyZWUuc2gKKysrIGIvdC90NDA1NC1kaWZmLWJvZ3VzLXRyZWUuc2gKQEAgLTMsOCArMyw2IEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRpZmYgd2l0aCBhIGJvZ3VzIHRyZWUgY29udGFpbmluZyB0aGUgbnVsbCBzaGExJwogLiAuL3Rlc3QtbGliLnNoCiAKLWVtcHR5X3RyZWU9NGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNAotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYm9ndXMgdHJlZScgJwogCWJvZ3VzX3RyZWU9JCgKIAkJcHJpbnRmICIxMDA2NDQgZm9vUVFRUVFRUVFRUVFRUVFRUVFRUVFRIiB8CkBAIC0yMiwxMyArMjAsMTMgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3IGRpZmYgc2hvd3MgbnVsbCBzaGExIChhZGRpdGlvbiknICcKIAllY2hvICI6MDAwMDAwIDEwMDY0NCAkX3o0MCAkX3o0MCBBCWZvbyIgPmV4cGVjdCAmJgotCWdpdCBkaWZmLXRyZWUgJGVtcHR5X3RyZWUgJGJvZ3VzX3RyZWUgPmFjdHVhbCAmJgorCWdpdCBkaWZmLXRyZWUgJEVNUFRZX1RSRUUgJGJvZ3VzX3RyZWUgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3IGRpZmYgc2hvd3MgbnVsbCBzaGExIChyZW1vdmFsKScgJwogCWVjaG8gIjoxMDA2NDQgMDAwMDAwICRfejQwICRfejQwIEQJZm9vIiA+ZXhwZWN0ICYmCi0JZ2l0IGRpZmYtdHJlZSAkYm9ndXNfdHJlZSAkZW1wdHlfdHJlZSA+YWN0dWFsICYmCisJZ2l0IGRpZmYtdHJlZSAkYm9ndXNfdHJlZSAkRU1QVFlfVFJFRSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCkBAIC01NywxMSArNTUsMTEgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZmFpbHMgZHVlIHRvIGJvZ3VzIHNoYTEgKGFkZGl0aW9uKScgJwotCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLXRyZWUgLXAgJGVtcHR5X3RyZWUgJGJvZ3VzX3RyZWUKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRFTVBUWV9UUkVFICRib2d1c190cmVlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChyZW1vdmFsKScgJwotCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLXRyZWUgLXAgJGJvZ3VzX3RyZWUgJGVtcHR5X3RyZWUKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRib2d1c190cmVlICRFTVBUWV9UUkVFCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChtb2RpZmljYXRpb24pJyAnCmRpZmYgLS1naXQgYS90L3Q0MTMwLWFwcGx5LWNyaXNzLWNyb3NzLXJlbmFtZS5zaCBiL3QvdDQxMzAtYXBwbHktY3Jpc3MtY3Jvc3MtcmVuYW1lLnNoCmluZGV4IGQxNzNhY2QuLmY4YTMxM2IgMTAwNzU1Ci0tLSBhL3QvdDQxMzAtYXBwbHktY3Jpc3MtY3Jvc3MtcmVuYW1lLnNoCisrKyBiL3QvdDQxMzAtYXBwbHktY3Jpc3MtY3Jvc3MtcmVuYW1lLnNoCkBAIC0xMyw5ICsxMywxMyBAQAogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJwotCWNyZWF0ZV9maWxlIGZpbGUxICJGaWxlMSBjb250ZW50cyIgJiYKLQljcmVhdGVfZmlsZSBmaWxlMiAiRmlsZTIgY29udGVudHMiICYmCi0JY3JlYXRlX2ZpbGUgZmlsZTMgIkZpbGUzIGNvbnRlbnRzIiAmJgorCSMgRW5zdXJlIHRoYXQgZmlsZSBzaXplcyBhcmUgZGlmZmVyZW50LCBiZWNhdXNlIG9uIFdpbmRvd3MKKwkjIGxzdGF0KCkgZG9lcyBub3QgZGlzY292ZXIgaW5vZGUgbnVtYmVycywgYW5kIHdlIG5lZWQKKwkjIG90aGVyIHByb3BlcnRpZXMgdG8gZGlzY292ZXIgc3dhcHBlZCBmaWxlcworCSMgKG10aW1lIGlzIG5vdCBhbHdheXMgZGlmZmVyZW50LCBlaXRoZXIpLgorCWNyZWF0ZV9maWxlIGZpbGUxICJzb21lIGNvbnRlbnQiICYmCisJY3JlYXRlX2ZpbGUgZmlsZTIgInNvbWUgb3RoZXIgY29udGVudCIgJiYKKwljcmVhdGVfZmlsZSBmaWxlMyAiYWdhaW4gc29tZXRoaW5nIGVsc2UiICYmCiAJZ2l0IGFkZCBmaWxlMSBmaWxlMiBmaWxlMyAmJgogCWdpdCBjb21taXQgLW0gMQogJwpkaWZmIC0tZ2l0IGEvdC90NDE1MC1hbS5zaCBiL3QvdDQxNTAtYW0uc2gKaW5kZXggYjQxYmQxNy4uOWNlOTQyNCAxMDA3NTUKLS0tIGEvdC90NDE1MC1hbS5zaAorKysgYi90L3Q0MTUwLWFtLnNoCkBAIC05NTcsNCArOTU3LDI0IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXBhdGNoLWZvcm1hdD1tYm94cmQgaGFuZGxlcyBtYm94cmQnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwllY2hvIG1ib3hyZCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwljYXQgPm1zZyA8PC1cSU5QVVRfRU5EICYmCisJbWJveHJkIHNob3VsZCBlc2NhcGUgdGhlIGJvZHkKKworCUZyb20gY291bGQgdHJpcCB1cCBhIGxvb3NlIG1ib3ggcGFyc2VyCisJPkZyb20gZXh0cmEgZXNjYXBlIGZvciByZXZlcnNpYmlsaXR5CisJSU5QVVRfRU5ECisJZ2l0IGNvbW1pdCAtRiBtc2cgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tcHJldHR5PW1ib3hyZCAtLXN0ZG91dCAtMSA+bWJveHJkMSAmJgorCWdyZXAgIl4+RnJvbSBjb3VsZCB0cmlwIHVwIGEgbG9vc2UgbWJveCBwYXJzZXIiIG1ib3hyZDEgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwlnaXQgYW0gLS1wYXRjaC1mb3JtYXQ9bWJveHJkIG1ib3hyZDEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCB0YWlsIC1uNCA+b3V0ICYmCisJdGVzdF9jbXAgbXNnIG91dAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxNTMtYW0tcmVzdW1lLW92ZXJyaWRlLW9wdHMuc2ggYi90L3Q0MTUzLWFtLXJlc3VtZS1vdmVycmlkZS1vcHRzLnNoCmluZGV4IDdjMDEzZDguLjhlYTIyZDEgMTAwNzU1Ci0tLSBhL3QvdDQxNTMtYW0tcmVzdW1lLW92ZXJyaWRlLW9wdHMuc2gKKysrIGIvdC90NDE1My1hbS1yZXN1bWUtb3ZlcnJpZGUtb3B0cy5zaApAQCAtNTMsNyArNTMsNyBAQAogCSMgQXBwbHlpbmcgc2lkZTEgd2lsbCBiZSBxdWlldC4KIAl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1xdWlldCBzaWRlWzEyM10uZW1sID5vdXQgJiYKIAl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCi0JISB0ZXN0X2kxOG5ncmVwICJeQXBwbHlpbmc6ICIgb3V0ICYmCisJdGVzdF9pMThuZ3JlcCAhICJeQXBwbHlpbmc6ICIgb3V0ICYmCiAJZWNobyBzaWRlMSA+ZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgogCmRpZmYgLS1naXQgYS90L3Q0MjAxLXNob3J0bG9nLnNoIGIvdC90NDIwMS1zaG9ydGxvZy5zaAppbmRleCBhOTc3MzY1Li5hZTA4YjU3IDEwMDc1NQotLS0gYS90L3Q0MjAxLXNob3J0bG9nLnNoCisrKyBiL3QvdDQyMDEtc2hvcnRsb2cuc2gKQEAgLTE4NCw0ICsxODQsMTAgQEAKIAlnaXQgc2hvcnRsb2cgLS1leGNsdWRlPXJlZnMvaGVhZHMvbSogLS1hbGwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgd2l0aCAtLW91dHB1dD08ZmlsZT4nICcKKwlnaXQgc2hvcnRsb2cgLS1vdXRwdXQ9c2hvcnRsb2cgLTEgbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBzaG9ydGxvZworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDItbG9nLnNoIGIvdC90NDIwMi1sb2cuc2gKaW5kZXggMTI4YmE5My4uZTJkYjQ3YzMgMTAwNzU1Ci0tLSBhL3QvdDQyMDItbG9nLnNoCisrKyBiL3QvdDQyMDItbG9nLnNoCkBAIC0yNTUsNiArMjU1LDIwIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgd2l0aCBncmVwLnBhdHRlcm5UeXBlIGNvbmZpZ3VyYXRpb24nICcKKwk+ZXhwZWN0ICYmCisJZ2l0IC1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCWxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiVzIC0tZ3JlcD1zLmMubmQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZSBjb25maWd1cmF0aW9uIGFuZCBjb21tYW5kIGxpbmUnICcKKwllY2hvIHNlY29uZCA+ZXhwZWN0ICYmCisJZ2l0IC1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCWxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiVzIC0tYmFzaWMtcmVnZXhwIC0tZ3JlcD1zLmMubmQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogY2F0ID4gZXhwZWN0IDw8RU9GCiAqIFNlY29uZAogKiBzaXh0aApAQCAtODYwLDEyICs4NzQsMTUgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2V0dXAgc2lnbmVkIGJyYW5jaCcgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgogCWdpdCBjaGVja291dCAtYiBzaWduZWQgbWFzdGVyICYmCiAJZWNobyBmb28gPmZvbyAmJgogCWdpdCBhZGQgZm9vICYmCi0JZ2l0IGNvbW1pdCAtUyAtbSBzaWduZWRfY29tbWl0ICYmCisJZ2l0IGNvbW1pdCAtUyAtbSBzaWduZWRfY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlJyAnCiAJZ2l0IGxvZyAtLWdyYXBoIC0tc2hvdy1zaWduYXR1cmUgLW4xIHNpZ25lZCA+YWN0dWFsICYmCiAJZ3JlcCAiXnwgZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCiAJZ3JlcCAiXnwgZ3BnOiBHb29kIHNpZ25hdHVyZSIgYWN0dWFsCkBAIC04OTAsNiArOTA3LDMxIEBACiAJZ3JlcCAiXnwgfCBncGc6IEdvb2Qgc2lnbmF0dXJlIiBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJy0tbm8tc2hvdy1zaWduYXR1cmUgb3ZlcnJpZGVzIC0tc2hvdy1zaWduYXR1cmUnICcKKwlnaXQgbG9nIC0xIC0tc2hvdy1zaWduYXR1cmUgLS1uby1zaG93LXNpZ25hdHVyZSBzaWduZWQgPmFjdHVhbCAmJgorCSEgZ3JlcCAiXmdwZzoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbG9nLnNob3dzaWduYXR1cmU9dHJ1ZSBiZWhhdmVzIGxpa2UgLS1zaG93LXNpZ25hdHVyZScgJworCXRlc3RfY29uZmlnIGxvZy5zaG93c2lnbmF0dXJlIHRydWUgJiYKKwlnaXQgbG9nIC0xIHNpZ25lZCA+YWN0dWFsICYmCisJZ3JlcCAiZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCisJZ3JlcCAiZ3BnOiBHb29kIHNpZ25hdHVyZSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICctLW5vLXNob3ctc2lnbmF0dXJlIG92ZXJyaWRlcyBsb2cuc2hvd3NpZ25hdHVyZT10cnVlJyAnCisJdGVzdF9jb25maWcgbG9nLnNob3dzaWduYXR1cmUgdHJ1ZSAmJgorCWdpdCBsb2cgLTEgLS1uby1zaG93LXNpZ25hdHVyZSBzaWduZWQgPmFjdHVhbCAmJgorCSEgZ3JlcCAiXmdwZzoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnLS1zaG93LXNpZ25hdHVyZSBvdmVycmlkZXMgbG9nLnNob3dzaWduYXR1cmU9ZmFsc2UnICcKKwl0ZXN0X2NvbmZpZyBsb2cuc2hvd3NpZ25hdHVyZSBmYWxzZSAmJgorCWdpdCBsb2cgLTEgLS1zaG93LXNpZ25hdHVyZSBzaWduZWQgPmFjdHVhbCAmJgorCWdyZXAgImdwZzogU2lnbmF0dXJlIG1hZGUiIGFjdHVhbCAmJgorCWdyZXAgImdwZzogR29vZCBzaWduYXR1cmUiIGFjdHVhbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCAtLW5vLXdhbGsgaXMgZm9yYmlkZGVuJyAnCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtLWdyYXBoIC0tbm8td2FsawogJwpkaWZmIC0tZ2l0IGEvdC90NDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2ggYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaAppbmRleCA3Mzk4NjA1Li5mNTQzNWZkIDEwMDc1NQotLS0gYS90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaAorKysgYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaApAQCAtMTQ1LDI1MyArMTQ1LDMxMCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nJyAnCiAJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCg0MCklcyIgPmFjdHVhbCAmJgotCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiA+ZXhwZWN0ZWQgJiYKLW1lc3NhZ2UgdHdvICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKLW1lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKLWFkZCBiYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKLSQoY29tbWl0X21zZykgICAgICAgICAgICAgICAgICAgIFoKLUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgPmV4cGVjdGVkICYmCisJbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgICAgICAgICAgWgorCW1lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKKwlhZGQgYmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCisJJChjb21taXRfbXNnKSAgICAgICAgICAgICAgICAgICAgWgorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCiAJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDQwKSVzIiA+YWN0dWFsICYmCi0JcXpfdG9fdGFiX3NwYWNlIDw8RU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCi1tZXNzYWdlIHR3byAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCi1tZXNzYWdlIG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCi1hZGQgYmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCi0kKGNvbW1pdF9tc2cpICAgICAgICAgICAgICAgICAgICBaCi1FT0YKKwlxel90b190YWJfc3BhY2UgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgICAgICAgICAgWgorCW1lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKKwlhZGQgYmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCisJJChjb21taXRfbXNnKSAgICAgICAgICAgICAgICAgICAgWgorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uJyAnCiAJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlPHwoNDApJXMiID5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCi0kaGVhZDEgbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgIFoKLSRoZWFkMiBtZXNzYWdlIG9uZSAgICAgICAgICAgICAgICAgICAgWgotJGhlYWQzIGFkZCBiYXIgICAgICAgICAgICAgICAgICAgICAgICBaCi0kaGVhZDQgJChjb21taXRfbXNnKSAgICAgICAgICAgIFoKLUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgPmV4cGVjdGVkICYmCisJJGhlYWQxIG1lc3NhZ2UgdHdvICAgICAgICAgICAgICAgICAgICBaCisJJGhlYWQyIG1lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICBaCisJJGhlYWQzIGFkZCBiYXIgICAgICAgICAgICAgICAgICAgICAgICBaCisJJGhlYWQ0ICQoY29tbWl0X21zZykgICAgICAgICAgICBaCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4nICcKKwlDT0xVTU5TPTUwIGdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJTx8KC0xMCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgPmV4cGVjdGVkICYmCisJJGhlYWQxIG1lc3NhZ2UgdHdvICAgICAgICAgICAgICAgICAgICBaCisJJGhlYWQyIG1lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICBaCisJJGhlYWQzIGFkZCBiYXIgICAgICAgICAgICAgICAgICAgICAgICBaCisJJGhlYWQ0ICQoY29tbWl0X21zZykgICAgICAgICAgICBaCisJRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4uIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKIAlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJTx8KDQwKSVzIiA+YWN0dWFsICYmCi0JcXpfdG9fdGFiX3NwYWNlIDw8RU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCi0kaGVhZDEgbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgIFoKLSRoZWFkMiBtZXNzYWdlIG9uZSAgICAgICAgICAgICAgICAgICAgWgotJGhlYWQzIGFkZCBiYXIgICAgICAgICAgICAgICAgICAgICAgICBaCi0kaGVhZDQgJChjb21taXRfbXNnKSAgICAgICAgICAgIFoKLUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwkkaGVhZDEgbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDIgbWVzc2FnZSBvbmUgICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDMgYWRkIGJhciAgICAgICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDQgJChjb21taXRfbXNnKSAgICAgICAgICAgIFoKKwlFT0YKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcnICcKIAlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEpJXMiID5hY3R1YWwgJiYKLQljYXQgPDxFT0YgPmV4cGVjdGVkICYmCi1tZXNzYWdlIHR3bwotbWVzc2FnZSBvbmUKLWFkZCBiYXIKLSQoY29tbWl0X21zZykKLUVPRgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJbWVzc2FnZSB0d28KKwltZXNzYWdlIG9uZQorCWFkZCBiYXIKKwkkKGNvbW1pdF9tc2cpCisJRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBubyBwYWRkaW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCiAJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEpJXMiID5hY3R1YWwgJiYKLQljYXQgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKLW1lc3NhZ2UgdHdvCi1tZXNzYWdlIG9uZQotYWRkIGJhcgotJChjb21taXRfbXNnKQotRU9GCisJY2F0IDw8LUVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorCW1lc3NhZ2UgdHdvCisJbWVzc2FnZSBvbmUKKwlhZGQgYmFyCisJJChjb21taXRfbXNnKQorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggdHJ1bmMnICcKIAlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLHRydW5jKSVzIiA+YWN0dWFsICYmCi0JcXpfdG9fdGFiX3NwYWNlIDw8RU9GID5leHBlY3RlZCAmJgotbWVzc2FnZSAuLgotbWVzc2FnZSAuLgotYWRkIGJhciAgWgotaW5pdGlhbC4uLgotRU9GCisJcXpfdG9fdGFiX3NwYWNlIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJbWVzc2FnZSAuLgorCW1lc3NhZ2UgLi4KKwlhZGQgYmFyICBaCisJaW5pdGlhbC4uLgorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggdHJ1bmMuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKIAlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsdHJ1bmMpJXMiID5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKLW1lc3NhZ2UgLi4KLW1lc3NhZ2UgLi4KLWFkZCBiYXIgIFoKLWluaXRpYWwuLi4KLUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1cRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJbWVzc2FnZSAuLgorCW1lc3NhZ2UgLi4KKwlhZGQgYmFyICBaCisJaW5pdGlhbC4uLgorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbHRydW5jJyAnCiAJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCxsdHJ1bmMpJXMiID5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCi0uLnNhZ2UgdHdvCi0uLnNhZ2Ugb25lCi1hZGQgYmFyICBaCi0uLiR7c2FtcGxlX3V0ZjhfcGFydH1saWNoCi1FT0YKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCS4uc2FnZSB0d28KKwkuLnNhZ2Ugb25lCisJYWRkIGJhciAgWgorCS4uJHtzYW1wbGVfdXRmOF9wYXJ0fWxpY2gKKwlFT0YKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIGx0cnVuYy4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJwogCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCxsdHJ1bmMpJXMiID5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKLS4uc2FnZSB0d28KLS4uc2FnZSBvbmUKLWFkZCBiYXIgIFoKLS4uJHtzYW1wbGVfdXRmOF9wYXJ0fWxpY2gKLUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwkuLnNhZ2UgdHdvCisJLi5zYWdlIG9uZQorCWFkZCBiYXIgIFoKKwkuLiR7c2FtcGxlX3V0ZjhfcGFydH1saWNoCisJRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBtdHJ1bmMnICcKIAlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLG10cnVuYyklcyIgPmFjdHVhbCAmJgotCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiA+ZXhwZWN0ZWQgJiYKLW1lc3MuLiB0d28KLW1lc3MuLiBvbmUKLWFkZCBiYXIgIFoKLWluaXQuLmxpY2gKLUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1cRU9GID5leHBlY3RlZCAmJgorCW1lc3MuLiB0d28KKwltZXNzLi4gb25lCisJYWRkIGJhciAgWgorCWluaXQuLmxpY2gKKwlFT0YKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG10cnVuYy4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJwogCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCxtdHJ1bmMpJXMiID5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKLW1lc3MuLiB0d28KLW1lc3MuLiBvbmUKLWFkZCBiYXIgIFoKLWluaXQuLmxpY2gKLUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1cRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJbWVzcy4uIHR3bworCW1lc3MuLiBvbmUKKwlhZGQgYmFyICBaCisJaW5pdC4ubGljaAorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZycgJwogCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT4oNDApJXMiID5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCi1aICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgdHdvCi1aICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCi1aICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCi1aICAgICAgICAgICAgICAgICAgICAkKGNvbW1pdF9tc2cpCi1FT0YKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCVogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KKwlaICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCisJWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGJhcgorCVogICAgICAgICAgICAgICAgICAgICQoY29tbWl0X21zZykKKwlFT0YKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKIAlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT4oNDApJXMiID5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKLVogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KLVogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBvbmUKLVogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBiYXIKLVogICAgICAgICAgICAgICAgICAgICQoY29tbWl0X21zZykKLUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwlaICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgdHdvCisJWiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIG9uZQorCVogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBiYXIKKwlaICAgICAgICAgICAgICAgICAgICAkKGNvbW1pdF9tc2cpCisJRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JpZ2h0IGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uJyAnCiAJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlPnwoNDApJXMiID5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCi0kaGVhZDEgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KLSRoZWFkMiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIG9uZQotJGhlYWQzICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCi0kaGVhZDQgICAgICAgICAgICAgICQoY29tbWl0X21zZykKLUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgPmV4cGVjdGVkICYmCisJJGhlYWQxICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgdHdvCisJJGhlYWQyICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCisJJGhlYWQzICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCisJJGhlYWQ0ICAgICAgICAgICAgICAkKGNvbW1pdF9tc2cpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JpZ2h0IGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uJyAnCisJQ09MVU1OUz01MCBnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU+fCgtMTApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCSRoZWFkMSAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIHR3bworCSRoZWFkMiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIG9uZQorCSRoZWFkMyAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGJhcgorCSRoZWFkNCAgICAgICAgICAgICAgJChjb21taXRfbXNnKQorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyBhdCB0aGUgbnRoIGNvbHVtbi4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJwogCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlPnwoNDApJXMiID5hY3R1YWwgJiYKLQlxel90b190YWJfc3BhY2UgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKLSRoZWFkMSAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIHR3bwotJGhlYWQyICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCi0kaGVhZDMgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBiYXIKLSRoZWFkNCAgICAgICAgICAgICAgJChjb21taXRfbXNnKQotRU9GCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorCSRoZWFkMSAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIHR3bworCSRoZWFkMiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIG9uZQorCSRoZWFkMyAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGJhcgorCSRoZWFkNCAgICAgICAgICAgICAgJChjb21taXRfbXNnKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIE5vdGU6IFNwYWNlIGJldHdlZW4gJ21lc3NhZ2UnIGFuZCAndHdvJyBzaG91bGQgYmUgaW4gdGhlIHNhbWUgY29sdW1uCisjIGFzIGluIHByZXZpb3VzIHRlc3QuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyBhdCB0aGUgbnRoIGNvbHVtbiB3aXRoIC0tZ3JhcGguIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1ncmFwaCAtLXByZXR0eT0idGZvcm1hdDolaCAlPnwoNDApJXMiID5hY3R1YWwgJiYKKwlpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJKiAkaGVhZDEgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgdHdvCisJKiAkaGVhZDIgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCisJKiAkaGVhZDMgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCisJKiAkaGVhZDQgICAgICAgICAgICAkKGNvbW1pdF9tc2cpCisJRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JpZ2h0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbm8gcGFkZGluZycgJwogCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT4oMSklcyIgPmFjdHVhbCAmJgotCWNhdCA8PEVPRiA+ZXhwZWN0ZWQgJiYKLW1lc3NhZ2UgdHdvCi1tZXNzYWdlIG9uZQotYWRkIGJhcgotJChjb21taXRfbXNnKQotRU9GCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwltZXNzYWdlIHR3bworCW1lc3NhZ2Ugb25lCisJYWRkIGJhcgorCSQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBubyBwYWRkaW5nIGFuZCB3aXRoIC0tZ3JhcGgnICcKKwlnaXQgbG9nIC0tZ3JhcGggLS1wcmV0dHk9InRmb3JtYXQ6JT4oMSklcyIgPmFjdHVhbCAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJKiBtZXNzYWdlIHR3bworCSogbWVzc2FnZSBvbmUKKwkqIGFkZCBiYXIKKwkqICQoY29tbWl0X21zZykKKwlFT0YKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBubyBwYWRkaW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCiAJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+KDEpJXMiID5hY3R1YWwgJiYKLQljYXQgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKLW1lc3NhZ2UgdHdvCi1tZXNzYWdlIG9uZQotYWRkIGJhcgotJChjb21taXRfbXNnKQotRU9GCisJY2F0IDw8LUVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorCW1lc3NhZ2UgdHdvCisJbWVzc2FnZSBvbmUKKwlhZGQgYmFyCisJJChjb21taXRfbXNnKQorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZW50ZXIgYWxpZ25tZW50IGZvcm1hdHRpbmcnICcKIAlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+PCg0MCklcyIgPmFjdHVhbCAmJgotCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiA+ZXhwZWN0ZWQgJiYKLVogICAgICAgICAgICAgbWVzc2FnZSB0d28gICAgICAgICAgICAgIFoKLVogICAgICAgICAgICAgbWVzc2FnZSBvbmUgICAgICAgICAgICAgIFoKLVogICAgICAgICAgICAgICBhZGQgYmFyICAgICAgICAgICAgICAgIFoKLVogICAgICAgICAkKGNvbW1pdF9tc2cpICAgICAgICAgIFoKLUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgPmV4cGVjdGVkICYmCisJWiAgICAgICAgICAgICBtZXNzYWdlIHR3byAgICAgICAgICAgICAgWgorCVogICAgICAgICAgICAgbWVzc2FnZSBvbmUgICAgICAgICAgICAgIFoKKwlaICAgICAgICAgICAgICAgYWRkIGJhciAgICAgICAgICAgICAgICBaCisJWiAgICAgICAgICQoY29tbWl0X21zZykgICAgICAgICAgWgorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZW50ZXIgYWxpZ25tZW50IGZvcm1hdHRpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKIAlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT48KDQwKSVzIiA+YWN0dWFsICYmCi0JcXpfdG9fdGFiX3NwYWNlIDw8RU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCi1aICAgICAgICAgICAgIG1lc3NhZ2UgdHdvICAgICAgICAgICAgICBaCi1aICAgICAgICAgICAgIG1lc3NhZ2Ugb25lICAgICAgICAgICAgICBaCi1aICAgICAgICAgICAgICAgYWRkIGJhciAgICAgICAgICAgICAgICBaCi1aICAgICAgICAgJChjb21taXRfbXNnKSAgICAgICAgICBaCi1FT0YKKwlxel90b190YWJfc3BhY2UgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJWiAgICAgICAgICAgICBtZXNzYWdlIHR3byAgICAgICAgICAgICAgWgorCVogICAgICAgICAgICAgbWVzc2FnZSBvbmUgICAgICAgICAgICAgIFoKKwlaICAgICAgICAgICAgICAgYWRkIGJhciAgICAgICAgICAgICAgICBaCisJWiAgICAgICAgICQoY29tbWl0X21zZykgICAgICAgICAgWgorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uJyAnCiAJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlPjx8KDQwKSVzIiA+YWN0dWFsICYmCi0JcXpfdG9fdGFiX3NwYWNlIDw8RU9GID5leHBlY3RlZCAmJgotJGhlYWQxICAgICAgICAgICBtZXNzYWdlIHR3byAgICAgICAgICBaCi0kaGVhZDIgICAgICAgICAgIG1lc3NhZ2Ugb25lICAgICAgICAgIFoKLSRoZWFkMyAgICAgICAgICAgICBhZGQgYmFyICAgICAgICAgICAgWgotJGhlYWQ0ICAgICAgICQoY29tbWl0X21zZykgICAgICBaCi1FT0YKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCSRoZWFkMSAgICAgICAgICAgbWVzc2FnZSB0d28gICAgICAgICAgWgorCSRoZWFkMiAgICAgICAgICAgbWVzc2FnZSBvbmUgICAgICAgICAgWgorCSRoZWFkMyAgICAgICAgICAgICBhZGQgYmFyICAgICAgICAgICAgWgorCSRoZWFkNCAgICAgICAkKGNvbW1pdF9tc2cpICAgICAgWgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZW50ZXIgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4nICcKKwlDT0xVTU5TPTcwIGdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJT48fCgtMzApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCSRoZWFkMSAgICAgICAgICAgbWVzc2FnZSB0d28gICAgICAgICAgWgorCSRoZWFkMiAgICAgICAgICAgbWVzc2FnZSBvbmUgICAgICAgICAgWgorCSRoZWFkMyAgICAgICAgICAgICBhZGQgYmFyICAgICAgICAgICAgWgorCSRoZWFkNCAgICAgICAkKGNvbW1pdF9tc2cpICAgICAgWgorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZW50ZXIgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4uIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKIAlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJT48fCg0MCklcyIgPmFjdHVhbCAmJgotCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgotJGhlYWQxICAgICAgICAgICBtZXNzYWdlIHR3byAgICAgICAgICBaCi0kaGVhZDIgICAgICAgICAgIG1lc3NhZ2Ugb25lICAgICAgICAgIFoKLSRoZWFkMyAgICAgICAgICAgICBhZGQgYmFyICAgICAgICAgICAgWgotJGhlYWQ0ICAgICAgICQoY29tbWl0X21zZykgICAgICBaCi1FT0YKKwlxel90b190YWJfc3BhY2UgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJJGhlYWQxICAgICAgICAgICBtZXNzYWdlIHR3byAgICAgICAgICBaCisJJGhlYWQyICAgICAgICAgICBtZXNzYWdlIG9uZSAgICAgICAgICBaCisJJGhlYWQzICAgICAgICAgICAgIGFkZCBiYXIgICAgICAgICAgICBaCisJJGhlYWQ0ICAgICAgICQoY29tbWl0X21zZykgICAgICBaCisJRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NlbnRlciBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcnICcKIAlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+PCgxKSVzIiA+YWN0dWFsICYmCi0JY2F0IDw8RU9GID5leHBlY3RlZCAmJgotbWVzc2FnZSB0d28KLW1lc3NhZ2Ugb25lCi1hZGQgYmFyCi0kKGNvbW1pdF9tc2cpCi1FT0YKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCW1lc3NhZ2UgdHdvCisJbWVzc2FnZSBvbmUKKwlhZGQgYmFyCisJJChjb21taXRfbXNnKQorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCkBAIC00MDAsMzQgKzQ1NywzNCBAQAogb2xkX2hlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEfjApCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZW50ZXIgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBubyBwYWRkaW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCiAJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+PCgxKSVzIiA+YWN0dWFsICYmCi0JY2F0IDw8RU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCi1tZXNzYWdlIHR3bwotbWVzc2FnZSBvbmUKLWFkZCBiYXIKLSQoY29tbWl0X21zZykKLUVPRgorCWNhdCA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwltZXNzYWdlIHR3bworCW1lc3NhZ2Ugb25lCisJYWRkIGJhcgorCSQoY29tbWl0X21zZykKKwlFT0YKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdC9yaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIHN0ZWFsaW5nJyAnCiAJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tIHNob3J0IC0tYXV0aG9yICJsb25nIGxvbmcgbG9uZyA8bG9uZ0BtZS5jb20+IiAmJgogCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsdHJ1bmMpJXMlPj4oMTAsbHRydW5jKSUgYW4iID5hY3R1YWwgJiYKLQljYXQgPDxFT0YgPmV4cGVjdGVkICYmCi1zaG9ydCBsb25nICBsb25nIGxvbmcKLW1lc3NhZ2UgLi4gICBBIFUgVGhvcgotYWRkIGJhciAgICAgIEEgVSBUaG9yCi1pbml0aWFsLi4uICAgQSBVIFRob3IKLUVPRgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCXNob3J0IGxvbmcgIGxvbmcgbG9uZworCW1lc3NhZ2UgLi4gICBBIFUgVGhvcgorCWFkZCBiYXIgICAgICBBIFUgVGhvcgorCWluaXRpYWwuLi4gICBBIFUgVGhvcgorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdC9yaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIHN0ZWFsaW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCiAJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLHRydW5jKSVzJT4+KDEwLGx0cnVuYyklIGFuIiA+YWN0dWFsICYmCi0JY2F0IDw8RU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCi1zaG9ydCBsb25nICBsb25nIGxvbmcKLW1lc3NhZ2UgLi4gICBBIFUgVGhvcgotYWRkIGJhciAgICAgIEEgVSBUaG9yCi1pbml0aWFsLi4uICAgQSBVIFRob3IKLUVPRgorCWNhdCA8PC1cRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJc2hvcnQgbG9uZyAgbG9uZyBsb25nCisJbWVzc2FnZSAuLiAgIEEgVSBUaG9yCisJYWRkIGJhciAgICAgIEEgVSBUaG9yCisJaW5pdGlhbC4uLiAgIEEgVSBUaG9yCisJRU9GCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKQEAgLTQ0Nyw4ICs1MDQsMTAgQEAKICcKIAogIyBnZXQgbmV3IGRpZ2VzdHMgKHdpdGggbm8gYWJicmV2aWF0aW9ucykKLWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEfjApICYmCi1oZWFkMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRH4xKSAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGxvZyBkZWNvcmF0aW9uIHRlc3RzJyAnCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUR+MCkgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRH4xKQorJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZGVjb3JhdGlvbiBwcm9wZXJseSBmb2xsb3dzIHRhZyBjaGFpbicgJwogCWdpdCB0YWcgLWEgdGFnMSAtbSB0YWcxICYmCkBAIC00NTYsMjIgKzUxNSwyMiBAQAogCWdpdCB0YWcgLWQgdGFnMSAmJgogCWdpdCBjb21taXQgLS1hbWVuZCAtbSBzaG9ydGVyICYmCiAJZ2l0IGxvZyAtLW5vLXdhbGsgLS10YWdzIC0tcHJldHR5PSIlSCAlZCIgLS1kZWNvcmF0ZT1mdWxsID5hY3R1YWwgJiYKLQljYXQgPDxFT0YgPmV4cGVjdGVkICYmCi0kaGVhZDEgICh0YWc6IHJlZnMvdGFncy90YWcyKQotJGhlYWQyICAodGFnOiByZWZzL3RhZ3MvbWVzc2FnZS1vbmUpCi0kb2xkX2hlYWQxICAodGFnOiByZWZzL3RhZ3MvbWVzc2FnZS10d28pCi1FT0YKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCSRoZWFkMSAgKHRhZzogcmVmcy90YWdzL3RhZzIpCisJJGhlYWQyICAodGFnOiByZWZzL3RhZ3MvbWVzc2FnZS1vbmUpCisJJG9sZF9oZWFkMSAgKHRhZzogcmVmcy90YWdzL21lc3NhZ2UtdHdvKQorCUVPRgogCXNvcnQgYWN0dWFsID5hY3R1YWwxICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsMQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbiBsb2cgZGVjb3JhdGlvbicgJwogCWdpdCBsb2cgLS1uby13YWxrIC0tdGFncyAtLXByZXR0eT0iJUggJUQiIC0tZGVjb3JhdGU9ZnVsbCA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PEVPRiAmJgotJGhlYWQxIHRhZzogcmVmcy90YWdzL3RhZzIKLSRoZWFkMiB0YWc6IHJlZnMvdGFncy9tZXNzYWdlLW9uZQotJG9sZF9oZWFkMSB0YWc6IHJlZnMvdGFncy9tZXNzYWdlLXR3bwotRU9GCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkkaGVhZDEgdGFnOiByZWZzL3RhZ3MvdGFnMgorCSRoZWFkMiB0YWc6IHJlZnMvdGFncy9tZXNzYWdlLW9uZQorCSRvbGRfaGVhZDEgdGFnOiByZWZzL3RhZ3MvbWVzc2FnZS10d28KKwlFT0YKIAlzb3J0IGFjdHVhbCA+YWN0dWFsMSAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDEKICcKZGlmZiAtLWdpdCBhL3QvdDQyMDctbG9nLWRlY29yYXRpb24tY29sb3JzLnNoIGIvdC90NDIwNy1sb2ctZGVjb3JhdGlvbi1jb2xvcnMuc2gKaW5kZXggZjgwMDhiNi4uYjk3MjI5NiAxMDA3NTUKLS0tIGEvdC90NDIwNy1sb2ctZGVjb3JhdGlvbi1jb2xvcnMuc2gKKysrIGIvdC90NDIwNy1sb2ctZGVjb3JhdGlvbi1jb2xvcnMuc2gKQEAgLTQ0LDcgKzQ0LDcgQEAKICcKIAogY2F0ID5leHBlY3RlZCA8PEVPRgotJHtjX2NvbW1pdH1DT01NSVRfSUQke2NfcmVzZXR9JHtjX2NvbW1pdH0gKCR7Y19yZXNldH0ke2NfSEVBRH1IRUFEJHtjX3Jlc2V0fSR7Y19jb21taXR9IC0+XAorJHtjX2NvbW1pdH1DT01NSVRfSUQke2NfcmVzZXR9JHtjX2NvbW1pdH0gKCR7Y19yZXNldH0ke2NfSEVBRH1IRUFEIC0+XAogICR7Y19yZXNldH0ke2NfYnJhbmNofW1hc3RlciR7Y19yZXNldH0ke2NfY29tbWl0fSxcCiAgJHtjX3Jlc2V0fSR7Y190YWd9dGFnOiB2MS4wJHtjX3Jlc2V0fSR7Y19jb21taXR9LFwKICAke2NfcmVzZXR9JHtjX3RhZ310YWc6IEIke2NfcmVzZXR9JHtjX2NvbW1pdH0pJHtjX3Jlc2V0fSBCCmRpZmYgLS1naXQgYS90L3Q0MjA4LWxvZy1tYWdpYy1wYXRoc3BlYy5zaCBiL3QvdDQyMDgtbG9nLW1hZ2ljLXBhdGhzcGVjLnNoCmluZGV4IGQ4ZjIzZjQuLjAwMTM0M2UgMTAwNzU1Ci0tLSBhL3QvdDQyMDgtbG9nLW1hZ2ljLXBhdGhzcGVjLnNoCisrKyBiL3QvdDQyMDgtbG9nLW1hZ2ljLXBhdGhzcGVjLnNoCkBAIC0xOCw3ICsxOCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6L2EiIHNob3VsZCBiZSBhbWJpZ3VvdXMgKGFwcGxpZWQgYm90aCByZXYgYW5kIHdvcmt0cmVlKScgJwogCTogPmEgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDovYSAyPmVycm9yICYmCi0JZ3JlcCBhbWJpZ3VvdXMgZXJyb3IKKwl0ZXN0X2kxOG5ncmVwIGFtYmlndW91cyBlcnJvcgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6L2EgLS0gIiBzaG91bGQgbm90IGJlIGFtYmlndW91cycgJwpAQCAtMzEsNyArMzEsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6IiBzaG91bGQgYmUgYW1iaWd1b3VzJyAnCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyA6IDI+ZXJyb3IgJiYKLQlncmVwIGFtYmlndW91cyBlcnJvcgorCXRlc3RfaTE4bmdyZXAgYW1iaWd1b3VzIGVycm9yCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS0gOicgJwpkaWZmIC0tZ2l0IGEvdC90NDIxMS1saW5lLWxvZy5zaCBiL3QvdDQyMTEtbGluZS1sb2cuc2gKaW5kZXggNDQ1MTEyNy4uOWQ4Nzc3NyAxMDA3NTUKLS0tIGEvdC90NDIxMS1saW5lLWxvZy5zaAorKysgYi90L3Q0MjExLWxpbmUtbG9nLnNoCkBAIC05OSw0ICs5OSwxMSBAQAogCWdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLUwgMSwxOmIuYwogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCB3aXRoIC0tb3V0cHV0JyAnCisJZ2l0IGNoZWNrb3V0IHBhcmFsbGVsLWNoYW5nZSAmJgorCWdpdCBsb2cgLS1vdXRwdXQ9bG9nIC1MIDptYWluOmIuYyA+b3V0cHV0ICYmCisJdGVzdCAhIC1zIG91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDcwIGxvZworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUwMDAtdGFyLXRyZWUuc2ggYi90L3Q1MDAwLXRhci10cmVlLnNoCmluZGV4IDRiNjhiYmEuLjgwYjIzODcgMTAwNzU1Ci0tLSBhL3QvdDUwMDAtdGFyLXRyZWUuc2gKKysrIGIvdC90NTAwMC10YXItdHJlZS5zaApAQCAtMzE5LDQgKzMxOSw3OCBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCBhcmNoaXZlIC12IEhFQUQgLS0gIiouYWJjIiA+L2Rldi9udWxsCiAnCiAKKyMgUHVsbCB0aGUgc2l6ZSBhbmQgZGF0ZSBvZiBlYWNoIGVudHJ5IGluIGEgdGFyZmlsZSB1c2luZyB0aGUgc3lzdGVtIHRhci4KKyMKKyMgV2UnbGwgcHVsbCBvdXQgb25seSB0aGUgeWVhciBmcm9tIHRoZSBkYXRlOyB0aGF0IGF2b2lkcyBhbnkgcXVlc3Rpb24gb2YKKyMgdGltZXpvbmVzIGltcGFjdGluZyB0aGUgcmVzdWx0IChhcyBsb25nIGFzIHdlIGtlZXAgb3VyIHRlc3QgdGltZXMgYXdheSBmcm9tIGEKKyMgeWVhciBib3VuZGFyeTsgb3VyIHJlZmVyZW5jZSB0aW1lcyBhcmUgYWxsIGluIEF1Z3VzdCkuCisjCisjIFRoZSBvdXRwdXQgb2YgdGFyX2luZm8gaXMgZXhwZWN0ZWQgdG8gYmUgIjxzaXplPiA8eWVhcj4iLCBib3RoIGluIGRlY2ltYWwuIEl0CisjIGlnbm9yZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0YXIuIFdlIGhhdmUgdG8gZG8gdGhpcywgYmVjYXVzZSBzb21lIG9mIG91ciB0ZXN0CisjIGlucHV0IGlzIG9ubHkgcGFydGlhbCAodGhlIHJlYWwgZGF0YSBpcyA2NEdCIGluIHNvbWUgY2FzZXMpLgordGFyX2luZm8gKCkgeworCSIkVEFSIiB0dmYgIiQxIiB8CisJYXdrICd7CisJCXNwbGl0KCQ0LCBkYXRlLCAiLSIpCisJCXByaW50ICQzICIgIiBkYXRlWzFdCisJfScKK30KKworIyBTZWUgaWYgb3VyIHN5c3RlbSB0YXIgY2FuIGhhbmRsZSBhIHRhciBmaWxlIHdpdGggaHVnZSBzaXplcyBhbmQgZGF0ZXMgZmFyIGluCisjIHRoZSBmdXR1cmUsIGFuZCB0aGF0IHdlIGNhbiBhY3R1YWxseSBwYXJzZSBpdHMgb3V0cHV0LgorIworIyBUaGUgcmVmZXJlbmNlIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBHTlUgdGFyLCBhbmQgdGhlIG1hZ2ljIHRpbWUgYW5kIHNpemUgYXJlCisjIGJvdGggb2N0YWwgMDEwMDAwMDAwMDAwMDEsIHdoaWNoIG92ZXJmbG93cyBub3JtYWwgdXN0YXIgZmllbGRzLgordGVzdF9sYXp5X3ByZXJlcSBUQVJfSFVHRSAnCisJZWNobyAiNjg3MTk0NzY3MzcgNDE0NyIgPmV4cGVjdCAmJgorCXRhcl9pbmZvICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDAwL2h1Z2UtYW5kLWZ1dHVyZS50YXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMT05HX0lTXzY0QklUICdzZXQgdXAgcmVwb3NpdG9yeSB3aXRoIGh1Z2UgYmxvYicgJworCW9ial9kPTE5ICYmCisJb2JqX2Y9ZjljODI3M2VjNDVhODkzOGU2OTk5Y2I1OWIzZmY2NjczOTkwMmEgJiYKKwlvYmo9JHtvYmpfZH0ke29ial9mfSAmJgorCW1rZGlyIC1wIC5naXQvb2JqZWN0cy8kb2JqX2QgJiYKKwljcCAiJFRFU1RfRElSRUNUT1JZIi90NTAwMC8kb2JqIC5naXQvb2JqZWN0cy8kb2JqX2QvJG9ial9mICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0LCRvYmosaHVnZSAmJgorCWdpdCBjb21taXQgLW0gaHVnZQorJworCisjIFdlIGV4cGVjdCBnaXQgdG8gZGllIHdpdGggU0lHUElQRSBoZXJlIChvdGhlcndpc2Ugd2UKKyMgd291bGQgZ2VuZXJhdGUgdGhlIHdob2xlIDY0R0IpLgordGVzdF9leHBlY3Rfc3VjY2VzcyBMT05HX0lTXzY0QklUICdnZW5lcmF0ZSB0YXIgd2l0aCBodWdlIHNpemUnICcKKwl7CisJCWdpdCBhcmNoaXZlIEhFQUQKKwkJZWNobyAkPyA+ZXhpdC1jb2RlCisJfSB8IHRlc3RfY29weV9ieXRlcyA0MDk2ID5odWdlLnRhciAmJgorCWVjaG8gMTQxID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVEFSX0hVR0UsTE9OR19JU182NEJJVCAnc3lzdGVtIHRhciBjYW4gcmVhZCBvdXIgaHVnZSBzaXplJyAnCisJZWNobyA2ODcxOTQ3NjczNyA+ZXhwZWN0ICYmCisJdGFyX2luZm8gaHVnZS50YXIgfCBjdXQgLWQiICIgLWYxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTE9OR19JU182NEJJVCAnc2V0IHVwIHJlcG9zaXRvcnkgd2l0aCBmYXItZnV0dXJlIGNvbW1pdCcgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IkA2ODcxOTQ3NjczNyArMDAwMCIgXAorCQlnaXQgY29tbWl0IC1tICJ0ZW1wb3JpIHBhcmVuZHVtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExPTkdfSVNfNjRCSVQgJ2dlbmVyYXRlIHRhciB3aXRoIGZ1dHVyZSBtdGltZScgJworCWdpdCBhcmNoaXZlIEhFQUQgPmZ1dHVyZS50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUQVJfSFVHRSxMT05HX0lTXzY0QklUICdzeXN0ZW0gdGFyIGNhbiByZWFkIG91ciBmdXR1cmUgbXRpbWUnICcKKwllY2hvIDQxNDcgPmV4cGVjdCAmJgorCXRhcl9pbmZvIGZ1dHVyZS50YXIgfCBjdXQgLWQiICIgLWYyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTAwMC8xOWY5YzgyNzNlYzQ1YTg5MzhlNjk5OWNiNTliM2ZmNjY3Mzk5MDJhIGIvdC90NTAwMC8xOWY5YzgyNzNlYzQ1YTg5MzhlNjk5OWNiNTliM2ZmNjY3Mzk5MDJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYmU5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDAwLzE5ZjljODI3M2VjNDVhODkzOGU2OTk5Y2I1OWIzZmY2NjczOTkwMmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90NTAwMC9odWdlLWFuZC1mdXR1cmUudGFyIGIvdC90NTAwMC9odWdlLWFuZC1mdXR1cmUudGFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMTU1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDAwL2h1Z2UtYW5kLWZ1dHVyZS50YXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90NTEwMC1tYWlsaW5mby5zaCBiL3QvdDUxMDAtbWFpbGluZm8uc2gKaW5kZXggODViM2RmNS4uMWE1YTU0NiAxMDA3NTUKLS0tIGEvdC90NTEwMC1tYWlsaW5mby5zaAorKysgYi90L3Q1MTAwLW1haWxpbmZvLnNoCkBAIC0xMTEsNCArMTExLDM1IEBACiAJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvcXVvdGVkLWZyb20uZXhwZWN0IHF1b3RlZC1mcm9tL21zZwogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyB1bmVzY2FwZXMgd2l0aCAtLW1ib3hyZCcgJworCW1rZGlyIG1ib3hyZCAmJgorCWdpdCBtYWlsc3BsaXQgLW9tYm94cmQgLS1tYm94cmQgXAorCQkiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9zYW1wbGUubWJveHJkID5sYXN0ICYmCisJdGVzdCB4IiQoY2F0IGxhc3QpIiA9IHgyICYmCisJZm9yIGkgaW4gMDAwMSAwMDAyCisJZG8KKwkJZ2l0IG1haWxpbmZvIG1ib3hyZC9tc2cgbWJveHJkL3BhdGNoIFwKKwkJICA8bWJveHJkLyRpID5tYm94cmQvb3V0ICYmCisJCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwLyR7aX1tYm94cmQgbWJveHJkL21zZworCWRvbmUgJiYKKwlzcD0iICIgJiYKKwllY2hvICJGcm9tICIgPmV4cGVjdCAmJgorCWVjaG8gIkZyb20gIiA+PmV4cGVjdCAmJgorCWVjaG8gPj4gZXhwZWN0ICYmCisJY2F0ID5zcCA8PC1JTlBVVF9FTkQgJiYKKwlGcm9tIG1ib3hyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKKwlGcm9tOiB0cmFpbGluZyBzcGFjZXIgPHNwQGV4YW1wbGUuY29tPgorCVN1YmplY3Q6IFtQQVRDSF0gYSBjb21taXQgd2l0aCB0cmFpbGluZyBzcGFjZQorCisJRnJvbSRzcAorCT5Gcm9tJHNwCisKKwlJTlBVVF9FTkQKKworCWdpdCBtYWlsc3BsaXQgLWYyIC1vbWJveHJkIC0tbWJveHJkIDxzcCA+bGFzdCAmJgorCXRlc3QgeCIkKGNhdCBsYXN0KSIgPSB4MSAmJgorCWdpdCBtYWlsaW5mbyBtYm94cmQvbXNnIG1ib3hyZC9wYXRjaCA8bWJveHJkLzAwMDMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbWJveHJkL21zZworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUxMDAvMDAwMW1ib3hyZCBiL3QvdDUxMDAvMDAwMW1ib3hyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTRlYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC8wMDAxbWJveHJkCkBAIC0wLDAgKzEsNCBAQAorRnJvbSB0aGUgYmVnaW5uaW5nLCBtYm94IHNob3VsZCBoYXZlIGJlZW4gbWJveHJkCis+RnJvbSBlc2NhcGVkCitGcm9tIG5vdCBtYW5nbGVkIGJ1dCB0aGlzIGxpbmUgc2hvdWxkIGhhdmUgYmVlbiBlc2NhcGVkCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvMDAwMm1ib3hyZCBiL3QvdDUxMDAvMDAwMm1ib3hyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM0M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC8wMDAybWJveHJkCkBAIC0wLDAgKzEsNSBAQAorID5Gcm9tIHVuY2hhbmdlZAorIEZyb20gYWxzbyB1bmNoYW5nZWQKK25vIHRyYWlsaW5nIHNwYWNlLCBubyBlc2NhcGluZyBuZWNlc3NhcnkgYW5kICc+JyB3YXMgaW50ZW5kZWQ6Cis+RnJvbQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3NhbXBsZS5tYm94cmQgYi90L3Q1MTAwL3NhbXBsZS5tYm94cmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhZDVhZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvc2FtcGxlLm1ib3hyZApAQCAtMCwwICsxLDE5IEBACitGcm9tIG1ib3hyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IG1ib3hyZCB3cml0ZXIgPG1ib3hyZEBleGFtcGxlLmNvbT4KK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhIGNvbW1pdCB3aXRoIGVzY2FwZWQgRnJvbSBsaW5lcworCis+RnJvbSB0aGUgYmVnaW5uaW5nLCBtYm94IHNob3VsZCBoYXZlIGJlZW4gbWJveHJkCis+PkZyb20gZXNjYXBlZAorRnJvbSBub3QgbWFuZ2xlZCBidXQgdGhpcyBsaW5lIHNob3VsZCBoYXZlIGJlZW4gZXNjYXBlZAorCitGcm9tIG1ib3hyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IG1ib3hyZCB3cml0ZXIgPG1ib3hyZEBleGFtcGxlLmNvbT4KK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIIDIvMl0gYW5vdGhlciB3aXRoIGZha2UgRnJvbSBsaW5lcworCisgPkZyb20gdW5jaGFuZ2VkCisgRnJvbSBhbHNvIHVuY2hhbmdlZAorbm8gdHJhaWxpbmcgc3BhY2UsIG5vIGVzY2FwaW5nIG5lY2Vzc2FyeSBhbmQgJz4nIHdhcyBpbnRlbmRlZDoKKz5Gcm9tCisKZGlmZiAtLWdpdCBhL3QvdDUzMTAtcGFjay1iaXRtYXBzLnNoIGIvdC90NTMxMC1wYWNrLWJpdG1hcHMuc2gKaW5kZXggZDQ0NjcwNi4uMzg5M2FmZCAxMDA3NTUKLS0tIGEvdC90NTMxMC1wYWNrLWJpdG1hcHMuc2gKKysrIGIvdC90NTMxMC1wYWNrLWJpdG1hcHMuc2gKQEAgLTQ3LDYgKzQ3LDEyIEBACiAJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKIAknCiAKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb3VudGluZyBjb21taXRzIHdpdGggbGltaXQgKCRzdGF0ZSkiICcKKwkJZ2l0IHJldi1saXN0IC0tY291bnQgLW4gMSBIRUFEID5leHBlY3QgJiYKKwkJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IC1uIDEgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb3VudGluZyBub24tbGluZWFyIGhpc3RvcnkgKCRzdGF0ZSkiICcKIAkJZ2l0IHJldi1saXN0IC0tY291bnQgb3RoZXIuLi5tYXN0ZXIgPmV4cGVjdCAmJgogCQlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IC0tY291bnQgb3RoZXIuLi5tYXN0ZXIgPmFjdHVhbCAmJgpkaWZmIC0tZ2l0IGEvdC90NTUwNC1mZXRjaC1yZWNlaXZlLXN0cmljdC5zaCBiL3QvdDU1MDQtZmV0Y2gtcmVjZWl2ZS1zdHJpY3Quc2gKaW5kZXggNDRmM2Q1Zi4uOWIxOWNmZiAxMDA3NTUKLS0tIGEvdC90NTUwNC1mZXRjaC1yZWNlaXZlLXN0cmljdC5zaAorKysgYi90L3Q1NTA0LWZldGNoLXJlY2VpdmUtc3RyaWN0LnNoCkBAIC0xMTUsOCArMTE1LDggQEAKIAl0ZXN0X2NtcCBleHAgYWN0CiAnCiAKLWNhdCA+Ym9ndXMtY29tbWl0IDw8XEVPRgotdHJlZSA0YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CitjYXQgPmJvZ3VzLWNvbW1pdCA8PEVPRgordHJlZSAkRU1QVFlfVFJFRQogYXV0aG9yIEJ1Z3MgQnVubnkgMTIzNDU2Nzg5MCArMDAwMAogY29tbWl0dGVyIEJ1Z3MgQnVubnkgPGJ1Z3NAYnVuLm5pPiAxMjM0NTY3ODkwICswMDAwCiAKZGlmZiAtLWdpdCBhL3QvdDU1MDUtcmVtb3RlLnNoIGIvdC90NTUwNS1yZW1vdGUuc2gKaW5kZXggZGQyZTZjZS4uODE5OGQ4ZSAxMDA3NTUKLS0tIGEvdC90NTUwNS1yZW1vdGUuc2gKKysrIGIvdC90NTUwNS1yZW1vdGUuc2gKQEAgLTExODIsNyArMTE4Miw3IEBACiB0ZXN0X2V4dHJhX2FyZyAoKSB7CiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZXh0cmEgYXJnczogJCoiICIKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSAkKiBib2d1c19leHRyYV9hcmcgMj5hY3R1YWwgJiYKLQkJZ3JlcCAnXnVzYWdlOicgYWN0dWFsCisJCXRlc3RfaTE4bmdyZXAgJ151c2FnZTonIGFjdHVhbAogCSIKIH0KIApkaWZmIC0tZ2l0IGEvdC90NTUxMC1mZXRjaC5zaCBiL3QvdDU1MTAtZmV0Y2guc2gKaW5kZXggNDU0ZDg5Ni4uNjY4YzU0YiAxMDA3NTUKLS0tIGEvdC90NTUxMC1mZXRjaC5zaAorKysgYi90L3Q1NTEwLWZldGNoLnNoCkBAIC02NDQsNyArNjQ0LDcgQEAKIAkJZ2l0IGZldGNoIC0tcHJ1bmUgb3JpZ2luIDI+JjEgfCBoZWFkIC1uMSA+Li4vYWN0dWFsCiAJKSAmJgogCWVjaG8gIkZyb20gJHtEfS8uIiA+ZXhwZWN0ICYmCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaG5hbWUgRC9GIGNvbmZsaWN0IHJlc29sdmVkIGJ5IC0tcHJ1bmUnICcKQEAgLTY4OCw0ICs2ODgsMzQgQEAKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdmZXRjaCBhbGlnbmVkIG91dHB1dCcgJworCWdpdCBjbG9uZSAuIGZ1bGwtb3V0cHV0ICYmCisJdGVzdF9jb21taXQgbG9vb29vb29vb29vb29uZy10YWcgJiYKKwkoCisJCWNkIGZ1bGwtb3V0cHV0ICYmCisJCWdpdCAtYyBmZXRjaC5vdXRwdXQ9ZnVsbCBmZXRjaCBvcmlnaW4gMj4mMSB8IFwKKwkJCWdyZXAgLWUgIi0+IiB8IGN1dCAtYyAyMi0gPi4uL2FjdHVhbAorCSkgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbWFzdGVyICAgICAgICAgICAgICAgLT4gb3JpZ2luL21hc3RlcgorCWxvb29vb29vb29vb29vbmctdGFnIC0+IGxvb29vb29vb29vb29vbmctdGFnCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnZmV0Y2ggY29tcGFjdCBvdXRwdXQnICcKKwlnaXQgY2xvbmUgLiBjb21wYWN0ICYmCisJdGVzdF9jb21taXQgZXh0cmFhYSAmJgorCSgKKwkJY2QgY29tcGFjdCAmJgorCQlnaXQgLWMgZmV0Y2gub3V0cHV0PWNvbXBhY3QgZmV0Y2ggb3JpZ2luIDI+JjEgfCBcCisJCQlncmVwIC1lICItPiIgfCBjdXQgLWMgMjItID4uLi9hY3R1YWwKKwkpICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCW1hc3RlciAgICAgLT4gb3JpZ2luLyoKKwlleHRyYWFhICAgIC0+ICoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyMC1wdWxsLnNoIGIvdC90NTUyMC1wdWxsLnNoCmluZGV4IDczOWMwODkuLjZhZDM3YjUgMTAwNzU1Ci0tLSBhL3QvdDU1MjAtcHVsbC5zaAorKysgYi90L3Q1NTIwLXB1bGwuc2gKQEAgLTIxMSw3ICsyMTEsNyBAQAogCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKIAljcCBmaWxlIGV4cGVjdGVkICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBzZWNvbmQgMj5lcnIgJiYKLQl0ZXN0X2kxOG5ncmVwICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIgZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgogCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKQEAgLTI1NSw2ICsyNTUsMzggQEAKIAl0ZXN0IG5ldyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTIpIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSB3aXRoIGNvbmZsaWN0cyBzaG93cyBhZHZpY2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydDsgZ2l0IGNoZWNrb3V0IC1mIHRvLXJlYmFzZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2VxICYmCisJdGVzdF9zZXEgNSA+c2VxLnR4dCAmJgorCWdpdCBhZGQgc2VxLnR4dCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBzZXEudHh0IiAmJgorCWVjaG8gNiA+PnNlcS50eHQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJBcHBlbmQgdG8gc2VxLnR4dCIgc2VxLnR4dCAmJgorCWdpdCBjaGVja291dCAtYiB3aXRoLWNvbmZsaWN0cyBIRUFEXiAmJgorCWVjaG8gY29uZmxpY3RpbmcgPj5zZXEudHh0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiQ3JlYXRlIGNvbmZsaWN0IiBzZXEudHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1yZWJhc2UgLiBzZXEgMj5lcnIgPm91dCAmJgorCWdyZXAgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIC0tcmViYXNlIHNob3dzIGFkdmljZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0OyBnaXQgY2hlY2tvdXQgLWYgdG8tcmViYXNlIiAmJgorCWdpdCBjaGVja291dCAtYiBkaXZlcmdpbmcgJiYKKwl0ZXN0X2NvbW1pdCBhdHRyaWJ1dGVzIC5naXRhdHRyaWJ1dGVzICIqIHRleHQ9YXV0byIgYXR0cnMgJiYKKwlzaGExPSIkKHByaW50ZiAiMVxcclxcbiIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAwNjQ0ICRzaGExIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHYxLXdpdGgtY3IgJiYKKwkjIGZvcmNlIGNoZWNrb3V0IGJlY2F1c2UgYGdpdCByZXNldCAtLWhhcmRgIHdpbGwgbm90IGxlYXZlIGNsZWFuIGBmaWxlYAorCWdpdCBjaGVja291dCAtZiAtYiBmYWlscy10by1yZWJhc2UgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCB2Mi13aXRob3V0LWNyIGZpbGUgIjIiIGZpbGUyLWxmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1yZWJhc2UgLiBkaXZlcmdpbmcgMj5lcnIgPm91dCAmJgorCWdyZXAgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtIiBvdXQKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2UgZmFpbHMgd2l0aCBtdWx0aXBsZSBicmFuY2hlcycgJwogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlIC4gY29weSBtYXN0ZXIgMj5lcnIgJiYKQEAgLTM0MSw2ICszNzMsMjIgQEAKIAl0ZXN0IG5ldyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTIpIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJwdWxsIC0tcmViYXNlIHdhcm5zIG9uIC0tdmVyaWZ5LXNpZ25hdHVyZXMiICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSAtLXZlcmlmeS1zaWduYXR1cmVzIC4gY29weSAyPmVyciAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiID0gIiQoZ2l0IHJldi1wYXJzZSBjb3B5KSIgJiYKKwl0ZXN0IG5ldyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTIpIiAmJgorCXRlc3RfaTE4bmdyZXAgImlnbm9yaW5nIC0tdmVyaWZ5LXNpZ25hdHVyZXMgZm9yIHJlYmFzZSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInB1bGwgLS1yZWJhc2UgZG9lcyBub3Qgd2FybiBvbiAtLW5vLXZlcmlmeS1zaWduYXR1cmVzIiAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLS1uby12ZXJpZnktc2lnbmF0dXJlcyAuIGNvcHkgMj5lcnIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCisJdGVzdCBuZXcgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUyKSIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgInZlcmlmeS1zaWduYXR1cmVzIiBlcnIKKycKKwogIyBhZGQgYSBmZWF0dXJlIGJyYW5jaCwga2VlcC1tZXJnZSwgdGhhdCBpcyBtZXJnZWQgaW50byBtYXN0ZXIsIHNvIHRoZQogIyB0ZXN0IGNhbiB0cnkgcHJlc2VydmluZyB0aGUgbWVyZ2UgY29tbWl0IChvciBub3QpIHdpdGggdmFyaW91cwogIyAtLXJlYmFzZSBmbGFncy9wdWxsLnJlYmFzZSBzZXR0aW5ncy4KZGlmZiAtLWdpdCBhL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaCBiL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaAppbmRleCAzNjgzZGYxLi5kNjk4MWJhIDEwMDc1NQotLS0gYS90L3Q1NTIzLXB1c2gtdXBzdHJlYW0uc2gKKysrIGIvdC90NTUyMy1wdXNoLXVwc3RyZWFtLnNoCkBAIC03NSw3ICs3NSw3IEBACiAJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCiAKIAl0ZXN0X3Rlcm1pbmFsIGdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlciA+b3V0IDI+ZXJyICYmCi0JZ3JlcCAiV3JpdGluZyBvYmplY3RzIiBlcnIKKwl0ZXN0X2kxOG5ncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBtZXNzYWdlcyBkbyBub3QgZ28gdG8gbm9uLXR0eScgJwpAQCAtODMsNyArODMsNyBAQAogCiAJIyBza2lwIHByb2dyZXNzIG1lc3NhZ2VzLCBzaW5jZSBzdGRlcnIgaXMgbm9uLXR0eQogCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlciA+b3V0IDI+ZXJyICYmCi0JISBncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorCXRlc3RfaTE4bmdyZXAgISAiV3JpdGluZyBvYmplY3RzIiBlcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZ3Jlc3MgbWVzc2FnZXMgZ28gdG8gbm9uLXR0eSAoZm9yY2VkKScgJwpAQCAtOTEsMjIgKzkxLDIyIEBACiAKIAkjIGZvcmNlIHByb2dyZXNzIG1lc3NhZ2VzIHRvIHN0ZGVyciwgZXZlbiB0aG91Z2ggaXQgaXMgbm9uLXR0eQogCWdpdCBwdXNoIC11IC0tcHJvZ3Jlc3MgdXBzdHJlYW0gbWFzdGVyID5vdXQgMj5lcnIgJiYKLQlncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorCXRlc3RfaTE4bmdyZXAgIldyaXRpbmcgb2JqZWN0cyIgZXJyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdwdXNoIC1xIHN1cHByZXNzZXMgcHJvZ3Jlc3MnICcKIAllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKIAogCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLXUgLXEgdXBzdHJlYW0gbWFzdGVyID5vdXQgMj5lcnIgJiYKLQkhIGdyZXAgIldyaXRpbmcgb2JqZWN0cyIgZXJyCisJdGVzdF9pMThuZ3JlcCAhICJXcml0aW5nIG9iamVjdHMiIGVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHVzaCAtLW5vLXByb2dyZXNzIHN1cHByZXNzZXMgcHJvZ3Jlc3MnICcKIAllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKIAogCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLXUgLS1uby1wcm9ncmVzcyB1cHN0cmVhbSBtYXN0ZXIgPm91dCAyPmVyciAmJgotCSEgZ3JlcCAiVW5wYWNraW5nIG9iamVjdHMiIGVyciAmJgotCSEgZ3JlcCAiV3JpdGluZyBvYmplY3RzIiBlcnIKKwl0ZXN0X2kxOG5ncmVwICEgIlVucGFja2luZyBvYmplY3RzIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIldyaXRpbmcgb2JqZWN0cyIgZXJyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdxdWlldCBwdXNoJyAnCmRpZmYgLS1naXQgYS90L3Q1NTMzLXB1c2gtY2FzLnNoIGIvdC90NTUzMy1wdXNoLWNhcy5zaAppbmRleCBjNzMyMDEyLi5hMmM5ZTc0IDEwMDc1NQotLS0gYS90L3Q1NTMzLXB1c2gtY2FzLnNoCisrKyBiL3QvdDU1MzMtcHVzaC1jYXMuc2gKQEAgLTE5MSw0ICsxOTEsNDIgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBicmFuY2ggY292ZXJlZCBieSBmb3JjZS13aXRoLWxlYXNlJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGJyYW5jaCBicmFuY2ggbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1icmFuY2ggb3JpZ2luIGJyYW5jaAorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIGRzdCByZWZzL2hlYWRzL2JyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9icmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IGJyYW5jaCBjb3ZlcmVkIGJ5IGZvcmNlLXdpdGgtbGVhc2UgKGV4cGxpY2l0KScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBicmFuY2ggYnJhbmNoIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2U9YnJhbmNoOiBvcmlnaW4gYnJhbmNoCisJKSAmJgorCWdpdCBscy1yZW1vdGUgZHN0IHJlZnMvaGVhZHMvYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL2JyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgYnJhbmNoIGFscmVhZHkgZXhpc3RzJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCBtYXN0ZXIgJiYKKwkJdGVzdF9jb21taXQgRgorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgYnJhbmNoIGJyYW5jaCBtYXN0ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPWJyYW5jaDogb3JpZ2luIGJyYW5jaAorCSkKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTM2LWZldGNoLWNvbmZsaWN0cy5zaCBiL3QvdDU1MzYtZmV0Y2gtY29uZmxpY3RzLnNoCmluZGV4IDZjNWQzYTQuLjJlNDJjZjMgMTAwNzU1Ci0tLSBhL3QvdDU1MzYtZmV0Y2gtY29uZmxpY3RzLnNoCisrKyBiL3QvdDU1MzYtZmV0Y2gtY29uZmxpY3RzLnNoCkBAIC0yMiw4ICsyMiw4IEBACiAJY2F0ID5leHBlY3RlZCAmJgogCSMgV2UncmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIGVycm9yCiAJIyAiZmF0YWw6IFRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5IjoKLQlncmVwIC1FICdeKGZhdGFsfHdhcm5pbmcpOicgPGVycm9yIHwgZ3JlcCAtdiAnaHVuZyB1cCcgPmFjdHVhbCB8IHNvcnQgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2kxOG5ncmVwIC1FICdeKGZhdGFsfHdhcm5pbmcpOicgPGVycm9yIHwgZ3JlcCAtdiAnaHVuZyB1cCcgPmFjdHVhbCB8IHNvcnQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCiB9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCmRpZmYgLS1naXQgYS90L3Q1NTQxLWh0dHAtcHVzaC1zbWFydC5zaCBiL3QvdDU1NDEtaHR0cC1wdXNoLXNtYXJ0LnNoCmluZGV4IGZkN2QwNmIuLjQ4NDBjNzEgMTAwNzU1Ci0tLSBhL3QvdDU1NDEtaHR0cC1wdXNoLXNtYXJ0LnNoCisrKyBiL3QvdDU1NDEtaHR0cC1wdXNoLXNtYXJ0LnNoCkBAIC0xMTksNyArMTE5LDcgQEAKIAlnaXQgY29tbWl0IC1tIGRldjIgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBvcmlnaW4gZGV2MiAyPmFjdCAmJgogCXNlZCAtZSAiL15yZW1vdGU6IC9zLyAqJC8vIiA8YWN0ID5jbXAgJiYKLQl0ZXN0X2NtcCBleHAgY21wCisJdGVzdF9pMThuY21wIGV4cCBjbXAKICcKIHJtIC1mICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQvaG9va3MvdXBkYXRlIgogCkBAIC0yMTksNyArMjE5LDcgQEAKIAljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCiAJdGVzdF9jb21taXQgbm9pc3kgJiYKIAl0ZXN0X3Rlcm1pbmFsIGdpdCBwdXNoID5vdXRwdXQgMj4mMSAmJgotCWdyZXAgIl5Xcml0aW5nIG9iamVjdHMiIG91dHB1dAorCXRlc3RfaTE4bmdyZXAgIl5Xcml0aW5nIG9iamVjdHMiIG91dHB1dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHVzaCAtLXF1aWV0IHNpbGVuY2VzIHN0YXR1cyBhbmQgcHJvZ3Jlc3MnICcKQEAgLTIzMywxNiArMjMzLDE2IEBACiAJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgogCXRlc3RfY29tbWl0IG5vLXByb2dyZXNzICYmCiAJdGVzdF90ZXJtaW5hbCBnaXQgcHVzaCAtLW5vLXByb2dyZXNzID5vdXRwdXQgMj4mMSAmJgotCWdyZXAgIl5UbyBodHRwIiBvdXRwdXQgJiYKLQkhIGdyZXAgIl5Xcml0aW5nIG9iamVjdHMiCisJdGVzdF9pMThuZ3JlcCAiXlRvIGh0dHAiIG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgISAiXldyaXRpbmcgb2JqZWN0cyIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLXByb2dyZXNzIHNob3dzIHByb2dyZXNzIHRvIG5vbi10dHknICcKIAljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCiAJdGVzdF9jb21taXQgcHJvZ3Jlc3MgJiYKIAlnaXQgcHVzaCAtLXByb2dyZXNzID5vdXRwdXQgMj4mMSAmJgotCWdyZXAgIl5UbyBodHRwIiBvdXRwdXQgJiYKLQlncmVwICJeV3JpdGluZyBvYmplY3RzIiBvdXRwdXQKKwl0ZXN0X2kxOG5ncmVwICJeVG8gaHR0cCIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiXldyaXRpbmcgb2JqZWN0cyIgb3V0cHV0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgcHVzaCBnaXZlcyBzYW5lIGRlZmF1bHRzIHRvIHJlZmxvZycgJwpAQCAtMzY4LDUgKzM2OCwxNCBAQAogCXRlc3RfY21wIGV4cGVjdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9wdXNoLWNlcnQtc3RhdHVzIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHN0YXR1cyBvdXRwdXQgc2NydWJzIHBhc3N3b3JkJyAnCisJY2QgIiRST09UX1BBVEgvdGVzdF9yZXBvX2Nsb25lIiAmJgorCWdpdCBwdXNoIC0tcG9yY2VsYWluIFwKKwkJIiRIVFRQRF9VUkxfVVNFUl9QQVNTL3NtYXJ0L3Rlc3RfcmVwby5naXQiIFwKKwkJK0hFQUQ6c2NydWIgPnN0YXR1cyAmJgorCSMgc2hvdWxkIGhhdmUgYmVlbiBzY3J1YmJlZCBkb3duIHRvIHZhbmlsbGEgVVJMCisJZ3JlcCAiXlRvICRIVFRQRF9VUkwvc21hcnQvdGVzdF9yZXBvLmdpdCIgc3RhdHVzCisnCisKIHN0b3BfaHR0cGQKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU0NC1wYWNrLW9iamVjdHMtaG9vay5zaCBiL3QvdDU1NDQtcGFjay1vYmplY3RzLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDM1N2FmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NDQtcGFjay1vYmplY3RzLWhvb2suc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY3VzdG9tIHNjcmlwdCBpbiBwbGFjZSBvZiBwYWNrLW9iamVjdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHNvbWUgaGlzdG9yeSB0byBmZXRjaCcgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZGVidWdnaW5nIGhvb2sgc2NyaXB0JyAnCisJd3JpdGVfc2NyaXB0IC5naXQvaG9vayA8PC1cRU9GCisJCWVjaG8gPiYyICJob29rIHJ1bm5pbmciCisJCWVjaG8gIiQqIiA+aG9vay5hcmdzCisJCWNhdCA+aG9vay5zdGRpbgorCQkiJEAiIDxob29rLnN0ZGluID5ob29rLnN0ZG91dAorCQljYXQgaG9vay5zdGRvdXQKKwlFT0YKKycKKworY2xlYXJfaG9va19yZXN1bHRzICgpIHsKKwlybSAtcmYgLmdpdC9ob29rLiogZHN0LmdpdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdob29rIHJ1bnMgdmlhIGdsb2JhbCBjb25maWcnICcKKwljbGVhcl9ob29rX3Jlc3VsdHMgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgdXBsb2FkcGFjay5wYWNrT2JqZWN0c0hvb2sgLi9ob29rICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLiBkc3QuZ2l0IDI+c3RkZXJyICYmCisJZ3JlcCAiaG9vayBydW5uaW5nIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9vayBvdXRwdXRzIGFyZSBzYW5lJyAnCisJIyBjaGVjayB0aGF0IHdlIHJlY29yZGVkIGEgdXNhYmxlIHBhY2sKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDwuZ2l0L2hvb2suc3Rkb3V0ICYmCisKKwkjIGNoZWNrIHRoYXQgd2UgcmVjb3JkZWQgYXJncyBhbmQgc3RkaW4uIFdlIGRvIG5vdCBjaGVjaworCSMgdGhlIGZ1bGwgYXJndW1lbnQgbGlzdCBvciB0aGUgZXhhY3QgcGFjayBjb250ZW50cywgYXMgaXQgd291bGQgbWFrZQorCSMgdGhlIHRlc3QgYnJpdHRsZS4gU28ganVzdCBzYW5pdHkgY2hlY2sgdGhhdCB3ZSBjb3VsZCByZXBsYXkKKwkjIHRoZSBwYWNraW5nIHByb2NlZHVyZS4KKwlncmVwICJeZ2l0IiAuZ2l0L2hvb2suYXJncyAmJgorCSQoY2F0IC5naXQvaG9vay5hcmdzKSA8LmdpdC9ob29rLnN0ZGluID5yZXBsYXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9vayBydW5zIGZyb20gLWMgY29uZmlnJyAnCisJY2xlYXJfaG9va19yZXN1bHRzICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgXAorCSAgLXUgImdpdCAtYyB1cGxvYWRwYWNrLnBhY2tPYmplY3RzSG9vaz0uL2hvb2sgdXBsb2FkLXBhY2siIFwKKwkgIC4gZHN0LmdpdCAyPnN0ZGVyciAmJgorCWdyZXAgImhvb2sgcnVubmluZyIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvb2sgZG9lcyBub3QgcnVuIGZyb20gcmVwbyBjb25maWcnICcKKwljbGVhcl9ob29rX3Jlc3VsdHMgJiYKKwl0ZXN0X2NvbmZpZyB1cGxvYWRwYWNrLnBhY2tPYmplY3RzSG9vayAiLi9ob29rIiAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC4gZHN0LmdpdCAyPnN0ZGVyciAmJgorCSEgZ3JlcCAiaG9vayBydW5uaW5nIiBzdGRlcnIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2hvb2suYXJncyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvaG9vay5zdGRpbiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvaG9vay5zdGRvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaCBiL3QvdDU1NDUtcHVzaC1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhODEzYjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaApAQCAtMCwwICsxLDEwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1c2hpbmcgdG8gYSByZXBvc2l0b3J5IHVzaW5nIHB1c2ggb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK21rX3JlcG9fcGFpciAoKSB7CisJcm0gLXJmIHdvcmtiZW5jaCB1cHN0cmVhbSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdXBzdHJlYW0gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHdvcmtiZW5jaCAmJgorCSgKKwkJY2QgdXBzdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4gJiYKKwkJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCQljYXQgPi5naXQvaG9va3MvcHJlLXJlY2VpdmUgPDwtJ0VPRicgJiYKKwkJIyEvYmluL3NoCisJCWlmIHRlc3QgLW4gIiRHSVRfUFVTSF9PUFRJT05fQ09VTlQiOyB0aGVuCisJCQlpPTAKKwkJCT5ob29rcy9wcmUtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKwkJCXdoaWxlIHRlc3QgIiRpIiAtbHQgIiRHSVRfUFVTSF9PUFRJT05fQ09VTlQiOyBkbworCQkJCWV2YWwgInZhbHVlPVwkR0lUX1BVU0hfT1BUSU9OXyRpIgorCQkJCWVjaG8gJHZhbHVlID4+aG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zCisJCQkJaT0kKChpICsgMSkpCisJCQlkb25lCisJCWZpCisJCUVPRgorCQljaG1vZCB1K3ggLmdpdC9ob29rcy9wcmUtcmVjZWl2ZQorCisJCWNhdCA+LmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwtJ0VPRicgJiYKKwkJIyEvYmluL3NoCisJCWlmIHRlc3QgLW4gIiRHSVRfUFVTSF9PUFRJT05fQ09VTlQiOyB0aGVuCisJCQlpPTAKKwkJCT5ob29rcy9wb3N0LXJlY2VpdmUucHVzaF9vcHRpb25zCisJCQl3aGlsZSB0ZXN0ICIkaSIgLWx0ICIkR0lUX1BVU0hfT1BUSU9OX0NPVU5UIjsgZG8KKwkJCQlldmFsICJ2YWx1ZT1cJEdJVF9QVVNIX09QVElPTl8kaSIKKwkJCQllY2hvICR2YWx1ZSA+Pmhvb2tzL3Bvc3QtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKwkJCQlpPSQoKGkgKyAxKSkKKwkJCWRvbmUKKwkJZmkKKwkJRU9GCisJCWNobW9kIHUreCAuZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZQorCSkgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQlnaXQgcmVtb3RlIGFkZCB1cCAuLi91cHN0cmVhbQorCSkKK30KKworIyBDb21wYXJlIHRoZSByZWYgKCQxKSBpbiB1cHN0cmVhbSB3aXRoIGEgcmVmIHZhbHVlIGZyb20gd29ya2JlbmNoICgkMikKKyMgaS5lLiB0ZXN0X3JlZnMgc2Vjb25kIEhFQURAezJ9Cit0ZXN0X3JlZnMgKCkgeworCXRlc3QgJCMgPSAyICYmCisJZ2l0IC1DIHVwc3RyZWFtIHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiID5leHBlY3QgJiYKKwlnaXQgLUMgd29ya2JlbmNoIHJldi1wYXJzZSAtLXZlcmlmeSAiJDIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZSBwdXNoIG9wdGlvbiB3b3JrcyBmb3IgYSBzaW5nbGUgYnJhbmNoJyAnCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zIHRydWUgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCBwdXNoIC0tcHVzaC1vcHRpb249YXNkZiB1cCBtYXN0ZXIKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBtYXN0ZXIgJiYKKwllY2hvICJhc2RmIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcG9zdC1yZWNlaXZlLnB1c2hfb3B0aW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG9wdGlvbiBkZW5pZWQgYnkgcmVtb3RlJyAnCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zIGZhbHNlICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXB1c2gtb3B0aW9uPWFzZGYgdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgSEVBREB7MX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIHB1c2ggb3B0aW9ucyB3b3JrJyAnCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zIHRydWUgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCBwdXNoIC0tcHVzaC1vcHRpb249YXNkZiAtLXB1c2gtb3B0aW9uPSJtb3JlIHN0cnVjdHVyZWQgdGV4dCIgdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyICYmCisJcHJpbnRmICJhc2RmXG5tb3JlIHN0cnVjdHVyZWQgdGV4dFxuIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcG9zdC1yZWNlaXZlLnB1c2hfb3B0aW9ucworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MTQtY2xvbmUtc3VibW9kdWxlcy5zaCBiL3QvdDU2MTQtY2xvbmUtc3VibW9kdWxlcy5zaAppbmRleCA2MjA0NGM1Li5hODdkMzI5IDEwMDc1NQotLS0gYS90L3Q1NjE0LWNsb25lLXN1Ym1vZHVsZXMuc2gKKysrIGIvdC90NTYxNC1jbG9uZS1zdWJtb2R1bGVzLnNoCkBAIC0yNSw0MCArMjUsNzQgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbnNoYWxsb3cgY2xvbmUgaW1wbGllcyBub25zaGFsbG93IHN1Ym1vZHVsZScgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgogCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKLQkoCi0JCWNkIHN1cGVyX2Nsb25lICYmCi0JCWdpdCBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgotCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCi0JKSAmJgotCSgKLQkJY2Qgc3VwZXJfY2xvbmUvc3ViICYmCi0JCWdpdCBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgotCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCi0JKQorCWdpdCAtQyBzdXBlcl9jbG9uZSBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMgJiYKKwlnaXQgLUMgc3VwZXJfY2xvbmUvc3ViIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBsaW5lcwogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGNsb25lIGltcGxpZXMgc2hhbGxvdyBzdWJtb2R1bGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgY2xvbmUgd2l0aCBzaGFsbG93IHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLWRlcHRoIDIgLS1zaGFsbG93LXN1Ym1vZHVsZXMgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJZ2l0IC1DIHN1cGVyX2Nsb25lIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcyAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZS9zdWIgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGxpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgY2xvbmUgZG9lcyBub3QgaW1wbHkgc2hhbGxvdyBzdWJtb2R1bGUnICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKIAlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1kZXB0aCAyICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgotCSgKLQkJY2Qgc3VwZXJfY2xvbmUgJiYKLQkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCi0JCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMKLQkpICYmCi0JKAotCQljZCBzdXBlcl9jbG9uZS9zdWIgJiYKLQkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCi0JCXRlc3RfbGluZV9jb3VudCA9IDEgbGluZXMKLQkpCisJZ2l0IC1DIHN1cGVyX2Nsb25lIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcyAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZS9zdWIgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgY2xvbmUgd2l0aCBub24gc2hhbGxvdyBzdWJtb2R1bGUnICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKIAlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1kZXB0aCAyIC0tbm8tc2hhbGxvdy1zdWJtb2R1bGVzICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZSBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMgJiYKKwlnaXQgLUMgc3VwZXJfY2xvbmUvc3ViIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBsaW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24gc2hhbGxvdyBjbG9uZSB3aXRoIHNoYWxsb3cgc3VibW9kdWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tbm8tbG9jYWwgLS1zaGFsbG93LXN1Ym1vZHVsZXMgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJZ2l0IC1DIHN1cGVyX2Nsb25lIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBsaW5lcyAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZS9zdWIgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGxpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZvbGxvd3Mgc2hhbGxvdyByZWNvbW1lbmRhdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5zaGFsbG93IHRydWUgJiYKKwlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtbSAicmVjb21tZWQgc2hhbGxvdyBmb3Igc3ViIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLW5vLWxvY2FsICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgogCSgKIAkJY2Qgc3VwZXJfY2xvbmUgJiYKIAkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCi0JCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBsaW5lcworCSkgJiYKKwkoCisJCWNkIHN1cGVyX2Nsb25lL3N1YiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHVuc2hhbGxvdyByZWNvbW1lbmRlZCBzaGFsbG93IHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXJfY2xvbmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tbm8tcmVjb21tZW5kLXNoYWxsb3cgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgbGluZXMKIAkpICYmCiAJKAogCQljZCBzdXBlcl9jbG9uZS9zdWIgJiYKQEAgLTY3LDE4ICsxMDEsMjEgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbiBzaGFsbG93IGNsb25lIHdpdGggc2hhbGxvdyBzdWJtb2R1bGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZvbGxvd3Mgbm9uIHNoYWxsb3cgcmVjb21tZW5kYXRpb24nICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKLQlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1uby1sb2NhbCAtLXNoYWxsb3ctc3VibW9kdWxlcyAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIuc2hhbGxvdyBmYWxzZSAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1tICJyZWNvbW1lZCBub24gc2hhbGxvdyBmb3Igc3ViIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLW5vLWxvY2FsICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgogCSgKIAkJY2Qgc3VwZXJfY2xvbmUgJiYKIAkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCi0JCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBsaW5lcwogCSkgJiYKIAkoCiAJCWNkIHN1cGVyX2Nsb25lL3N1YiAmJgogCQlnaXQgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKLQkJdGVzdF9saW5lX2NvdW50ID0gMSBsaW5lcworCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaCBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCmluZGV4IGI3N2Q0YzkuLmExZGNkYjggMTAwNzU1Ci0tLSBhL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCisrKyBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCkBAIC0xODQsMzggKzE4NCwzOCBAQAogG1sxOzMxOzQzbWZvbxtbbQogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8pIGRvZXMgbm90IGVuYWJsZSBjb2xvciBieSBkZWZhdWx0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclQyhhdXRvLC4uLikgZG9lcyBub3QgZW5hYmxlIGNvbG9yIGJ5IGRlZmF1bHQnICcKIAlnaXQgbG9nIC0tZm9ybWF0PSRBVVRPX0NPTE9SIC0xID5hY3R1YWwgJiYKIAloYXNfbm9fY29sb3IgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8pIGVuYWJsZXMgY29sb3JzIGZvciBjb2xvci5kaWZmJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclQyhhdXRvLC4uLikgZW5hYmxlcyBjb2xvcnMgZm9yIGNvbG9yLmRpZmYnICcKIAlnaXQgLWMgY29sb3IuZGlmZj1hbHdheXMgbG9nIC0tZm9ybWF0PSRBVVRPX0NPTE9SIC0xID5hY3R1YWwgJiYKIAloYXNfY29sb3IgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8pIGVuYWJsZXMgY29sb3JzIGZvciBjb2xvci51aScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJUMoYXV0bywuLi4pIGVuYWJsZXMgY29sb3JzIGZvciBjb2xvci51aScgJwogCWdpdCAtYyBjb2xvci51aT1hbHdheXMgbG9nIC0tZm9ybWF0PSRBVVRPX0NPTE9SIC0xID5hY3R1YWwgJiYKIAloYXNfY29sb3IgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8pIHJlc3BlY3RzIC0tY29sb3InICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8sLi4uKSByZXNwZWN0cyAtLWNvbG9yJyAnCiAJZ2l0IGxvZyAtLWZvcm1hdD0kQVVUT19DT0xPUiAtMSAtLWNvbG9yID5hY3R1YWwgJiYKIAloYXNfY29sb3IgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8pIHJlc3BlY3RzIC0tbm8tY29sb3InICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8sLi4uKSByZXNwZWN0cyAtLW5vLWNvbG9yJyAnCiAJZ2l0IC1jIGNvbG9yLnVpPWFsd2F5cyBsb2cgLS1mb3JtYXQ9JEFVVE9fQ09MT1IgLTEgLS1uby1jb2xvciA+YWN0dWFsICYmCiAJaGFzX25vX2NvbG9yIGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnJUMoYXV0bykgcmVzcGVjdHMgLS1jb2xvcj1hdXRvIChzdGRvdXQgaXMgdHR5KScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJyVDKGF1dG8sLi4uKSByZXNwZWN0cyAtLWNvbG9yPWF1dG8gKHN0ZG91dCBpcyB0dHkpJyAnCiAJdGVzdF90ZXJtaW5hbCBlbnYgVEVSTT12dDEwMCBcCiAJCWdpdCBsb2cgLS1mb3JtYXQ9JEFVVE9fQ09MT1IgLTEgLS1jb2xvcj1hdXRvID5hY3R1YWwgJiYKIAloYXNfY29sb3IgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8pIHJlc3BlY3RzIC0tY29sb3I9YXV0byAoc3Rkb3V0IG5vdCB0dHkpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclQyhhdXRvLC4uLikgcmVzcGVjdHMgLS1jb2xvcj1hdXRvIChzdGRvdXQgbm90IHR0eSknICcKIAkoCiAJCVRFUk09dnQxMDAgJiYgZXhwb3J0IFRFUk0gJiYKIAkJZ2l0IGxvZyAtLWZvcm1hdD0kQVVUT19DT0xPUiAtMSAtLWNvbG9yPWF1dG8gPmFjdHVhbCAmJgpAQCAtMjIzLDYgKzIyMywxOCBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnJUMoYXV0bykgcmVzcGVjdHMgLS1jb2xvcicgJworCWdpdCBsb2cgLS1jb2xvciAtLWZvcm1hdD0iJUMoYXV0byklSCIgLTEgPmFjdHVhbCAmJgorCXByaW50ZiAiXFwwMzNbMzNtJXNcXDAzM1ttXFxuIiAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJUMoYXV0bykgcmVzcGVjdHMgLS1uby1jb2xvcicgJworCWdpdCBsb2cgLS1uby1jb2xvciAtLWZvcm1hdD0iJUMoYXV0byklSCIgLTEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+IGNvbW1pdC1tc2cgPDxFT0YKIFRlc3QgcHJpbnRpbmcgb2YgY29tcGxleCBib2RpZXMKIApkaWZmIC0tZ2l0IGEvdC90NjAxOC1yZXYtbGlzdC1nbG9iLnNoIGIvdC90NjAxOC1yZXYtbGlzdC1nbG9iLnNoCmluZGV4IGQwMGY3ZGIuLjM4MWYzNWUgMTAwNzU1Ci0tLSBhL3QvdDYwMTgtcmV2LWxpc3QtZ2xvYi5zaAorKysgYi90L3Q2MDE4LXJldi1saXN0LWdsb2Iuc2gKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCiAKICMgImdpdCByZXYtbGlzdDxFTlRFUj4iIGlzIGxpa2VseSB0byBiZSBhIGJ1ZyBpbiB0aGUgY2FsbGluZyBzY3JpcHQgYW5kIG1heQotIyBkZXNlcnZlIGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBkbyBjYXNlcyB3aGVyZSBzZXQgb2YgcmVmcyBwcm9ncmFtYXRpY2FsbHkKKyMgZGVzZXJ2ZSBhbiBlcnJvciBtZXNzYWdlLCBidXQgZG8gY2FzZXMgd2hlcmUgc2V0IG9mIHJlZnMgcHJvZ3JhbW1hdGljYWxseQogIyBnaXZlbiB1c2luZyBnbG9iYmluZyBhbmQvb3IgLS1zdGRpbiBuZWVkIHRvIGZhaWwgd2l0aCB0aGUgc2FtZSBlcnJvciwgb3IKICMgYXJlIHdlIGJldHRlciBvZmYgcmVwb3J0aW5nIGEgc3VjY2VzcyB3aXRoIG5vIG91dHB1dD8gIFRoZSBmb2xsb3dpbmcgZmV3CiAjIHRlc3RzIGRvY3VtZW50IHRoZSBjdXJyZW50IGJlaGF2aW91ciB0byByZW1pbmQgdXMgdGhhdCB3ZSBtaWdodCB3YW50IHRvCmRpZmYgLS1naXQgYS90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2ggYi90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKaW5kZXggZTc0NjYyYi4uNWU1MzcwZiAxMDA3NTUKLS0tIGEvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoCisrKyBiL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaApAQCAtMzYyLDcgKzM2Miw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZXJyb3JzIG91dCBpZiBiYWQgYW5kIGdvb2QgYXJlIG1pc3Rha2VuJyAnCiAJZ2l0IGJpc2VjdCByZXNldCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0gyICRIQVNINCAyPiByZXZfbGlzdF9lcnJvciAmJgotCWdyZXAgIm1pc3Rvb2sgZ29vZCBhbmQgYmFkIiByZXZfbGlzdF9lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgIm1pc3Rvb2sgZ29vZCBhbmQgYmFkIiByZXZfbGlzdF9lcnJvciAmJgogCWdpdCBiaXNlY3QgcmVzZXQKICcKIApAQCAtNDA0LDcgKzQwNCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvb2QgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKIAlnaXQgYmlzZWN0IHN0YXJ0ICIkSEFTSDciICIkU0lERV9IQVNINyIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgotCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJdGVzdF9pMThuZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKIAlncmVwICRIQVNINCBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdpdCBiaXNlY3QgZ29vZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKQEAgLTQxMyw3ICs0MTMsNyBAQAogJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcHBlZCBtZXJnZSBiYXNlIHdoZW4gZ29vZCBhbmQgYmFkIGFyZSBzaWJsaW5ncycgJwogCWdpdCBiaXNlY3Qgc3RhcnQgIiRTSURFX0hBU0g3IiAiJEhBU0g3IiA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCi0JZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdyZXAgJEhBU0g0IG15X2Jpc2VjdF9sb2cudHh0ICYmCiAJZ2l0IGJpc2VjdCBza2lwID4gbXlfYmlzZWN0X2xvZy50eHQgMj4mMSAmJgogCWdyZXAgIndhcm5pbmciIG15X2Jpc2VjdF9sb2cudHh0ICYmCkBAIC00MjMsMTEgKzQyMywxMSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYWQgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKIAlnaXQgYmlzZWN0IHN0YXJ0ICIkSEFTSDciIEhFQUQgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgotCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJdGVzdF9pMThuZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKIAlncmVwICRIQVNINCBteV9iaXNlY3RfbG9nLnR4dCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgYmFkID4gbXlfYmlzZWN0X2xvZy50eHQgMj4mMSAmJgotCWdyZXAgIm1lcmdlIGJhc2UgJEhBU0g0IGlzIGJhZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKLQlncmVwICJmaXhlZCBiZXR3ZWVuICRIQVNINCBhbmQgXFskU0lERV9IQVNIN1xdIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgJEhBU0g0IGlzIGJhZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwl0ZXN0X2kxOG5ncmVwICJmaXhlZCBiZXR3ZWVuICRIQVNINCBhbmQgXFskU0lERV9IQVNIN1xdIiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdpdCBiaXNlY3QgcmVzZXQKICcKIApAQCAtNDYwLDkgKzQ2MCw5IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvb2QgbWVyZ2UgYmFzZXMgd2hlbiBnb29kIGFuZCBiYWQgYXJlIHNpYmxpbmdzJyAnCiAJZ2l0IGJpc2VjdCBzdGFydCAiJEJfSEFTSCIgIiRBX0hBU0giID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKLQlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCiAJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZzIudHh0ICYmCi0JZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZzIudHh0ICYmCisJdGVzdF9pMThuZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZzIudHh0ICYmCiAJewogCQl7CiAJCQlncmVwICIkU0lERV9IQVNINSIgbXlfYmlzZWN0X2xvZy50eHQgJiYKQEAgLTQ3NywxNCArNDc3LDE0IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGltaXplZCBtZXJnZSBiYXNlIGNoZWNrcycgJwogCWdpdCBiaXNlY3Qgc3RhcnQgIiRIQVNINyIgIiRTSURFX0hBU0g3IiA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCi0JZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdyZXAgIiRIQVNINCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKIAlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nMi50eHQgJiYKIAl0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siICYmCiAJdGVzdCAiJEhBU0g2IiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgogCWdpdCBiaXNlY3QgYmFkID4gbXlfYmlzZWN0X2xvZzMudHh0ICYmCiAJZ2l0IGJpc2VjdCBnb29kICIkQV9IQVNIIiA+IG15X2Jpc2VjdF9sb2c0LnR4dCAmJgotCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2c0LnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2c0LnR4dCAmJgogCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWYgIi5naXQvQklTRUNUX0FOQ0VTVE9SU19PSyIKICcKIApAQCAtNTYyLDcgKzU2Miw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yaW5nIG91dCB3aGVuIHVzaW5nIGJhZCBwYXRoIHBhcmFtZXRlcnMnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICRQQVJBX0hBU0g3ICRIQVNIMSAtLSBmb29iYXIgMj4gZXJyb3IudHh0ICYmCi0JZ3JlcCAiYmFkIHBhdGggcGFyYW1ldGVycyIgZXJyb3IudHh0CisJdGVzdF9pMThuZ3JlcCAiYmFkIHBhdGggcGFyYW1ldGVycyIgZXJyb3IudHh0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYmlzZWN0aW9uIG9uIGJhcmUgcmVwbyAtIC0tbm8tY2hlY2tvdXQgc3BlY2lmaWVkJyAnCkBAIC03MjEsNyArNzIxLDcgQEAKICMgZmlyc3QgYmFkIGNvbW1pdDogWzMyYTU5NGEzZmRhYzJkNTdjZjZkMDI5ODdlMzBlZWM2ODUxMTQ5OGNdIEFkZCA8NDogQ2lhbyBmb3Igbm93PiBpbnRvIDxoZWxsbz4uCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGxvZzogc3VjY2Vzc2Z1bGwgcmVzdWx0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgbG9nOiBzdWNjZXNzZnVsIHJlc3VsdCcgJwogCWdpdCBiaXNlY3QgcmVzZXQgJiYKIAlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDIgJiYKIAlnaXQgYmlzZWN0IGdvb2QgJiYKQEAgLTgwMyw3ICs4MDMsNyBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgdGVybXMgMSAyICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyAyPmFjdHVhbCAmJgogCWVjaG8gIm5vIHRlcm1zIGRlZmluZWQiID5leHBlY3RlZCAmJgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHRlcm1zIHNob3dzIGdvb2QvYmFkIGFmdGVyIHN0YXJ0JyAnCkBAIC04NzUsNyArODc1LDcgQEAKIAlZb3VyIGN1cnJlbnQgdGVybXMgYXJlIHR3byBmb3IgdGhlIG9sZCBzdGF0ZQogCWFuZCBvbmUgZm9yIHRoZSBuZXcgc3RhdGUuCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbCAmJgogCWdpdCBiaXNlY3QgdGVybXMgLS10ZXJtLWJhZCA+YWN0dWFsICYmCiAJZWNobyBvbmUgPmV4cGVjdGVkICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCmRpZmYgLS1naXQgYS90L3Q2MDM4LW1lcmdlLXRleHQtYXV0by5zaCBiL3QvdDYwMzgtbWVyZ2UtdGV4dC1hdXRvLnNoCmluZGV4IDg1YzEwYjAuLjVlOGQ1ZmEgMTAwNzU1Ci0tLSBhL3QvdDYwMzgtbWVyZ2UtdGV4dC1hdXRvLnNoCisrKyBiL3QvdDYwMzgtbWVyZ2UtdGV4dC1hdXRvLnNoCkBAIC0xNiw2ICsxNiwxMyBAQAogCiB0ZXN0X2hhdmVfcHJlcmVxIFNFRF9TVFJJUFNfQ1IgJiYgU0VEX09QVElPTlM9LWIKIAorY29tcGFyZV9maWxlcyAoKSB7CisJdHIgJ1wwMTVcMDAwJyBRTiA8IiQxIiA+IiQxIi5leHBlY3QgJiYKKwl0ciAnXDAxNVwwMDAnIFFOIDwiJDIiID4iJDIiLmFjdHVhbCAmJgorCXRlc3RfY21wICIkMSIuZXhwZWN0ICIkMiIuYWN0dWFsICYmCisJcm0gIiQxIi5leHBlY3QgIiQyIi5hY3R1YWwKK30KKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCiAJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlICYmCiAKQEAgLTMwLDcgKzM3LDcgQEAKIAlnaXQgYnJhbmNoIHNpZGUgJiYKIAogCWVjaG8gIiogdGV4dD1hdXRvIiA+LmdpdGF0dHJpYnV0ZXMgJiYKLQl0b3VjaCBmaWxlICYmCisJZWNobyBmaXJzdCBsaW5lID5maWxlICYmCiAJZ2l0IGFkZCAuZ2l0YXR0cmlidXRlcyBmaWxlICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSAibm9ybWFsaXplIGZpbGUiICYmCkBAIC04MSwzOCArODgsNDkgQEAKIAlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgogCWdpdCByZXNldCAtLWhhcmQgYSAmJgogCWdpdCBtZXJnZSBiICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZQorCWNvbXBhcmVfZmlsZXMgZXhwZWN0ZWQgZmlsZQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdNZXJnZSBhZGRpdGlvbiBvZiB0ZXh0PWF1dG8nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01lcmdlIGFkZGl0aW9uIG9mIHRleHQ9YXV0byBlb2w9TEYnICcKKwlnaXQgY29uZmlnIGNvcmUuZW9sIGxmICYmCiAJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCiAJZmlyc3QgbGluZQogCXNhbWUgbGluZQogCUVPRgogCi0JaWYgdGVzdF9oYXZlX3ByZXJlcSBOQVRJVkVfQ1JMRjsgdGhlbgotCQlhcHBlbmRfY3IgPGV4cGVjdGVkID5leHBlY3RlZC50ZW1wICYmCi0JCW12IGV4cGVjdGVkLnRlbXAgZXhwZWN0ZWQKLQlmaSAmJgogCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgdHJ1ZSAmJgogCWdpdCBybSAtZnIgLiAmJgogCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBiICYmCiAJZ2l0IG1lcmdlIGEgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlCisJY29tcGFyZV9maWxlcyAgZXhwZWN0ZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZXJnZSBhZGRpdGlvbiBvZiB0ZXh0PWF1dG8gZW9sPUNSTEYnICcKKwlnaXQgY29uZmlnIGNvcmUuZW9sIGNybGYgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlmaXJzdCBsaW5lCisJc2FtZSBsaW5lCisJRU9GCisKKwlhcHBlbmRfY3IgPGV4cGVjdGVkID5leHBlY3RlZC50ZW1wICYmCisJbXYgZXhwZWN0ZWQudGVtcCBleHBlY3RlZCAmJgorCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgdHJ1ZSAmJgorCWdpdCBybSAtZnIgLiAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiICYmCisJZWNobyA+JjIgIkFmdGVyIGdpdCByZXNldCAtLWhhcmQgYiIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgLS1lb2wgPiYyICYmCisJZ2l0IG1lcmdlIGEgJiYKKwljb21wYXJlX2ZpbGVzICBleHBlY3RlZCBmaWxlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RldGVjdCBDUkxGL0xGIGNvbmZsaWN0IGFmdGVyIHNldHRpbmcgdGV4dD1hdXRvJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmVvbCBuYXRpdmUgJiYKIAllY2hvICI8PDw8PDw8IiA+ZXhwZWN0ZWQgJiYKLQlpZiB0ZXN0X2hhdmVfcHJlcmVxIE5BVElWRV9DUkxGOyB0aGVuCi0JCWVjaG8gZmlyc3QgbGluZSB8IGFwcGVuZF9jciA+PmV4cGVjdGVkICYmCi0JCWVjaG8gc2FtZSBsaW5lIHwgYXBwZW5kX2NyID4+ZXhwZWN0ZWQgJiYKLQkJZWNobyA9PT09PT09IHwgYXBwZW5kX2NyID4+ZXhwZWN0ZWQKLQllbHNlCi0JCWVjaG8gZmlyc3QgbGluZSA+PmV4cGVjdGVkICYmCi0JCWVjaG8gc2FtZSBsaW5lID4+ZXhwZWN0ZWQgJiYKLQkJZWNobyA9PT09PT09ID4+ZXhwZWN0ZWQKLQlmaSAmJgorCWVjaG8gZmlyc3QgbGluZSA+PmV4cGVjdGVkICYmCisJZWNobyBzYW1lIGxpbmUgPj5leHBlY3RlZCAmJgorCWVjaG8gPT09PT09PSA+PmV4cGVjdGVkICYmCiAJZWNobyBmaXJzdCBsaW5lIHwgYXBwZW5kX2NyID4+ZXhwZWN0ZWQgJiYKIAllY2hvIHNhbWUgbGluZSB8IGFwcGVuZF9jciA+PmV4cGVjdGVkICYmCiAJZWNobyAiPj4+Pj4+PiIgPj5leHBlY3RlZCAmJgpAQCAtMTIxLDI5ICsxMzksMjMgQEAKIAlnaXQgcmVzZXQgLS1oYXJkIGEgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYiAmJgogCWZ1enpfY29uZmxpY3QgZmlsZSA+ZmlsZS5mdXp6eSAmJgotCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUuZnV6enkKKwljb21wYXJlX2ZpbGVzIGV4cGVjdGVkIGZpbGUuZnV6enkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnRGV0ZWN0IExGL0NSTEYgY29uZmxpY3QgZnJvbSBhZGRpdGlvbiBvZiB0ZXh0PWF1dG8nICcKIAllY2hvICI8PDw8PDw8IiA+ZXhwZWN0ZWQgJiYKIAllY2hvIGZpcnN0IGxpbmUgfCBhcHBlbmRfY3IgPj5leHBlY3RlZCAmJgogCWVjaG8gc2FtZSBsaW5lIHwgYXBwZW5kX2NyID4+ZXhwZWN0ZWQgJiYKLQlpZiB0ZXN0X2hhdmVfcHJlcmVxIE5BVElWRV9DUkxGOyB0aGVuCi0JCWVjaG8gPT09PT09PSB8IGFwcGVuZF9jciA+PmV4cGVjdGVkICYmCi0JCWVjaG8gZmlyc3QgbGluZSB8IGFwcGVuZF9jciA+PmV4cGVjdGVkICYmCi0JCWVjaG8gc2FtZSBsaW5lIHwgYXBwZW5kX2NyID4+ZXhwZWN0ZWQKLQllbHNlCi0JCWVjaG8gPT09PT09PSA+PmV4cGVjdGVkICYmCi0JCWVjaG8gZmlyc3QgbGluZSA+PmV4cGVjdGVkICYmCi0JCWVjaG8gc2FtZSBsaW5lID4+ZXhwZWN0ZWQKLQlmaSAmJgorCWVjaG8gPT09PT09PSA+PmV4cGVjdGVkICYmCisJZWNobyBmaXJzdCBsaW5lID4+ZXhwZWN0ZWQgJiYKKwllY2hvIHNhbWUgbGluZSA+PmV4cGVjdGVkICYmCiAJZWNobyAiPj4+Pj4+PiIgPj5leHBlY3RlZCAmJgogCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgZmFsc2UgJiYKIAlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgogCWdpdCByZXNldCAtLWhhcmQgYiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBhICYmCiAJZnV6el9jb25mbGljdCBmaWxlID5maWxlLmZ1enp5ICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZS5mdXp6eQorCWNvbXBhcmVfZmlsZXMgZXhwZWN0ZWQgZmlsZS5mdXp6eQogJwogCiB0ZXN0X2V4cGVjdF9mYWlsdXJlICdjaGVja291dCAtbSBhZnRlciBzZXR0aW5nIHRleHQ9YXV0bycgJwpAQCAtMTU4LDcgKzE3MCw3IEBACiAJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCiAJZ2l0IGNoZWNrb3V0IGEgLS0gLiAmJgogCWdpdCBjaGVja291dCAtbSBiICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZQorCWNvbXBhcmVfZmlsZXMgZXhwZWN0ZWQgZmlsZQogJwogCiB0ZXN0X2V4cGVjdF9mYWlsdXJlICdjaGVja291dCAtbSBhZGRpdGlvbiBvZiB0ZXh0PWF1dG8nICcKQEAgLTE3Myw3ICsxODUsNyBAQAogCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgogCWdpdCBjaGVja291dCBiIC0tIC4gJiYKIAlnaXQgY2hlY2tvdXQgLW0gYSAmJgotCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUKKwljb21wYXJlX2ZpbGVzIGV4cGVjdGVkIGZpbGUKICcKIAogdGVzdF9leHBlY3RfZmFpbHVyZSAnY2hlcnJ5LXBpY2sgcGF0Y2ggZnJvbSBhZnRlciB0ZXh0PWF1dG8gd2FzIGFkZGVkJyAnCkBAIC0xODcsNyArMTk5LDcgQEAKIAlnaXQgcmVzZXQgLS1oYXJkIGIgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYSA+ZXJyIDI+JjEgJiYKIAlncmVwICJbTm5db3RoaW5nIGFkZGVkIiBlcnIgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlCisJY29tcGFyZV9maWxlcyBleHBlY3RlZCBmaWxlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Rlc3QgZGVsZXRlL25vcm1hbGl6ZSBjb25mbGljdCcgJwpkaWZmIC0tZ2l0IGEvdC90NjMwMS1mb3ItZWFjaC1yZWYtZXJyb3JzLnNoIGIvdC90NjMwMS1mb3ItZWFjaC1yZWYtZXJyb3JzLnNoCmluZGV4IGNkYjY3YTAuLmM3MzRjZTIgMTAwNzU1Ci0tLSBhL3QvdDYzMDEtZm9yLWVhY2gtcmVmLWVycm9ycy5zaAorKysgYi90L3Q2MzAxLWZvci1lYWNoLXJlZi1lcnJvcnMuc2gKQEAgLTIwLDggKzIwLDggQEAKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJHIiICYmCiAJZWNobyAid2FybmluZzogaWdub3JpbmcgYnJva2VuIHJlZiAkciIgPmJyb2tlbi1lcnIgJiYKIAlnaXQgZm9yLWVhY2gtcmVmID5vdXQgMj5lcnIgJiYKLQl0ZXN0X2NtcCBmdWxsLWxpc3Qgb3V0ICYmCi0JdGVzdF9jbXAgYnJva2VuLWVyciBlcnIKKwl0ZXN0X2kxOG5jbXAgZnVsbC1saXN0IG91dCAmJgorCXRlc3RfaTE4bmNtcCBicm9rZW4tZXJyIGVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUxMX1NIQTEgcmVmcyBhcmUgcmVwb3J0ZWQgY29ycmVjdGx5JyAnCkBAIC0zMSwxMCArMzEsMTAgQEAKIAllY2hvICJ3YXJuaW5nOiBpZ25vcmluZyBicm9rZW4gcmVmICRyIiA+emVyb3MtZXJyICYmCiAJZ2l0IGZvci1lYWNoLXJlZiA+b3V0IDI+ZXJyICYmCiAJdGVzdF9jbXAgZnVsbC1saXN0IG91dCAmJgotCXRlc3RfY21wIHplcm9zLWVyciBlcnIgJiYKKwl0ZXN0X2kxOG5jbXAgemVyb3MtZXJyIGVyciAmJgogCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUob2JqZWN0bmFtZSkgJShyZWZuYW1lKSIgPmJyaWVmLW91dCAyPmJyaWVmLWVyciAmJgogCXRlc3RfY21wIGJyaWVmLWxpc3QgYnJpZWYtb3V0ICYmCi0JdGVzdF9jbXAgemVyb3MtZXJyIGJyaWVmLWVycgorCXRlc3RfaTE4bmNtcCB6ZXJvcy1lcnIgYnJpZWYtZXJyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01pc3Npbmcgb2JqZWN0cyBhcmUgcmVwb3J0ZWQgY29ycmVjdGx5JyAnCkBAIC00Myw3ICs0Myw3IEBACiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRyIiAmJgogCWVjaG8gImZhdGFsOiBtaXNzaW5nIG9iamVjdCAkTUlTU0lORyBmb3IgJHIiID5taXNzaW5nLWVyciAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgMj5lcnIgJiYKLQl0ZXN0X2NtcCBtaXNzaW5nLWVyciBlcnIgJiYKKwl0ZXN0X2kxOG5jbXAgbWlzc2luZy1lcnIgZXJyICYmCiAJKAogCQljYXQgYnJpZWYtbGlzdCAmJgogCQllY2hvICIkTUlTU0lORyAkciIKZGlmZiAtLWdpdCBhL3QvdDcwMDEtbXYuc2ggYi90L3Q3MDAxLW12LnNoCmluZGV4IDRhMjU3MGUuLmUzNjVkMWYgMTAwNzU1Ci0tLSBhL3QvdDcwMDEtbXYuc2gKKysrIGIvdC90NzAwMS1tdi5zaApAQCAtMjkyLDggKzI5Miw4IEBACiAJZWNobyBjb250ZW50ID5maWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCiAJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3ViIGFuZCBmaWxlIiAmJgotCW1rZGlyIC1wIGRlZXAvZGlyZWN0b3J5L2hpZXJhY2h5ICYmCi0JZ2l0IHN1Ym1vZHVsZSBhZGQgLi8uIGRlZXAvZGlyZWN0b3J5L2hpZXJhY2h5L3N1YiAmJgorCW1rZGlyIC1wIGRlZXAvZGlyZWN0b3J5L2hpZXJhcmNoeSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vLiBkZWVwL2RpcmVjdG9yeS9oaWVyYXJjaHkvc3ViICYmCiAJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgYW5vdGhlciBzdWJtb2R1bGUiICYmCiAJZ2l0IGJyYW5jaCBzdWJtb2R1bGUKICcKQEAgLTQ4NSw4ICs0ODUsOCBAQAogCQkjIGdpdCBzdGF0dXMgd291bGQgZmFpbCBpZiB0aGUgdXBkYXRlIG9mIGxpbmtpbmcgZ2l0IGRpciB0bwogCQkjIHdvcmsgZGlyIG9mIHRoZSBzdWJtb2R1bGUgZmFpbGVkLgogCQlnaXQgc3RhdHVzICYmCi0JCWdpdCBjb25maWcgLWYgLi4vLmdpdG1vZHVsZXMgc3VibW9kdWxlLmRlZXAvZGlyZWN0b3J5L2hpZXJhY2h5L3N1Yi5wYXRoID4uLi9hY3R1YWwgJiYKLQkJZWNobyAiZGlyZWN0b3J5L2hpZXJhY2h5L3N1YiIgPi4uL2V4cGVjdAorCQlnaXQgY29uZmlnIC1mIC4uLy5naXRtb2R1bGVzIHN1Ym1vZHVsZS5kZWVwL2RpcmVjdG9yeS9oaWVyYXJjaHkvc3ViLnBhdGggPi4uL2FjdHVhbCAmJgorCQllY2hvICJkaXJlY3RvcnkvaGllcmFyY2h5L3N1YiIgPi4uL2V4cGVjdAogCSkgJiYKIAl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0CiAnCmRpZmYgLS1naXQgYS90L3Q3MDA0LXRhZy5zaCBiL3QvdDcwMDQtdGFnLnNoCmluZGV4IGY5YjdkNzkuLjhiMGY3MWEgMTAwNzU1Ci0tLSBhL3QvdDcwMDQtdGFnLnNoCisrKyBiL3QvdDcwMDQtdGFnLnNoCkBAIC0xMjAyLDEwICsxMjAyLDE3IEBACiAjIHRyeSB0byBzaWduIHdpdGggYmFkIHVzZXIuc2lnbmluZ2tleQogZ2l0IGNvbmZpZyB1c2VyLnNpZ25pbmdrZXkgQm9iVGhlTW91c2UKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKLQknZ2l0IHRhZyAtcyBmYWlscyBpZiBncGcgaXMgbWlzY29uZmlndXJlZCcgXAorCSdnaXQgdGFnIC1zIGZhaWxzIGlmIGdwZyBpcyBtaXNjb25maWd1cmVkIChiYWQga2V5KScgXAogCSd0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1zIC1tIHRhaWwgdGFnLWdwZy1mYWlsdXJlJwogZ2l0IGNvbmZpZyAtLXVuc2V0IHVzZXIuc2lnbmluZ2tleQogCisjIHRyeSB0byBwcm9kdWNlIGludmFsaWQgc2lnbmF0dXJlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2dpdCB0YWcgLXMgZmFpbHMgaWYgZ3BnIGlzIG1pc2NvbmZpZ3VyZWQgKGJhZCBzaWduYXR1cmUgZm9ybWF0KScgXAorCSd0ZXN0X2NvbmZpZyBncGcucHJvZ3JhbSBlY2hvICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXMgLW0gdGFpbCB0YWctZ3BnLWZhaWx1cmUnCisKKwogIyB0cnkgdG8gdmVyaWZ5IHdpdGhvdXQgZ3BnOgogCiBybSAtcmYgZ3BnaG9tZQpkaWZmIC0tZ2l0IGEvdC90NzAwNi1wYWdlci5zaCBiL3QvdDcwMDYtcGFnZXIuc2gKaW5kZXggZTRmYzVjOC4uYzhkYzY2NSAxMDA3NTUKLS0tIGEvdC90NzAwNi1wYWdlci5zaAorKysgYi90L3Q3MDA2LXBhZ2VyLnNoCkBAIC00OSw2ICs0OSwxOSBAQAogCWdyZXAgXkxWPSBwYWdlci1lbnYub3V0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXLFRUWSAnTEVTUyBhbmQgTFYgZW52dmFycyBzZXQgYnkgZ2l0LXNoLXNldHVwJyAnCisJKAorCQlzYW5lX3Vuc2V0IExFU1MgTFYgJiYKKwkJUEFHRVI9ImVudiA+cGFnZXItZW52Lm91dDsgd2MiICYmCisJCWV4cG9ydCBQQUdFUiAmJgorCQlQQVRIPSIkKGdpdCAtLWV4ZWMtcGF0aCk6JFBBVEgiICYmCisJCWV4cG9ydCBQQVRIICYmCisJCXRlc3RfdGVybWluYWwgc2ggLWMgIi4gZ2l0LXNoLXNldHVwICYmIGdpdF9wYWdlciIKKwkpICYmCisJZ3JlcCBeTEVTUz0gcGFnZXItZW52Lm91dCAmJgorCWdyZXAgXkxWPSBwYWdlci1lbnYub3V0CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdzb21lIGNvbW1hbmRzIGRvIG5vdCB1c2UgYSBwYWdlcicgJwogCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKIAl0ZXN0X3Rlcm1pbmFsIGdpdCByZXYtbGlzdCBIRUFEICYmCmRpZmYgLS1naXQgYS90L3Q3MDExLXNraXAtd29ya3RyZWUtcmVhZGluZy5zaCBiL3QvdDcwMTEtc2tpcC13b3JrdHJlZS1yZWFkaW5nLnNoCmluZGV4IDg4ZDYwYzEuLjg0ZjQxNDUgMTAwNzU1Ci0tLSBhL3QvdDcwMTEtc2tpcC13b3JrdHJlZS1yZWFkaW5nLnNoCisrKyBiL3QvdDcwMTEtc2tpcC13b3JrdHJlZS1yZWFkaW5nLnNoCkBAIC0yMywxNyArMjMsMTUgQEAKIEggc3ViLzIKIEVPRgogCi1OVUxMX1NIQTE9ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQotCiBzZXR1cF9hYnNlbnQoKSB7CiAJdGVzdCAtZiAxICYmIHJtIDEKIAlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKLQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkTlVMTF9TSEExIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkRU1QVFlfQkxPQiAxICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMQogfQogCiB0ZXN0X2Fic2VudCgpIHsKLQllY2hvICIxMDA2NDQgJE5VTExfU0hBMSAwCTEiID4gZXhwZWN0ZWQgJiYKKwllY2hvICIxMDA2NDQgJEVNUFRZX0JMT0IgMAkxIiA+IGV4cGVjdGVkICYmCiAJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgogCXRlc3QgISAtZiAxCkBAIC00MiwxMiArNDAsMTIgQEAKIHNldHVwX2RpcnR5KCkgewogCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgMSAmJgogCWVjaG8gZGlydHkgPiAxICYmCi0JZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJE5VTExfU0hBMSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJEVNUFRZX0JMT0IgMSAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEKIH0KIAogdGVzdF9kaXJ0eSgpIHsKLQllY2hvICIxMDA2NDQgJE5VTExfU0hBMSAwCTEiID4gZXhwZWN0ZWQgJiYKKwllY2hvICIxMDA2NDQgJEVNUFRZX0JMT0IgMAkxIiA+IGV4cGVjdGVkICYmCiAJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgogCWVjaG8gZGlydHkgPiBleHBlY3RlZApAQCAtMTIwLDcgKzExOCw3IEBACiAJdGVzdCAiJChnaXQgZ3JlcCAtLW5vLWV4dC1ncmVwIHRlc3QpIiA9ICIxOnRlc3QiCiAnCiAKLWVjaG8gIjowMDAwMDAgMTAwNjQ0ICRfejQwICROVUxMX1NIQTEgQQkxIiA+IGV4cGVjdGVkCitlY2hvICI6MDAwMDAwIDEwMDY0NCAkX3o0MCAkRU1QVFlfQkxPQiBBCTEiID4gZXhwZWN0ZWQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggZG9lcyBub3QgZXhhbWluZSBza2lwLXdvcmt0cmVlIGFic2VudCBlbnRyaWVzJyAnCiAJc2V0dXBfYWJzZW50ICYmCiAJZ2l0IGRpZmYtaW5kZXggSEVBRCAtLSAxID4gcmVzdWx0ICYmCmRpZmYgLS1naXQgYS90L3Q3MDEyLXNraXAtd29ya3RyZWUtd3JpdGluZy5zaCBiL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoCmluZGV4IDljZWFhNDAuLjlkMWFiZTUgMTAwNzU1Ci0tLSBhL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoCisrKyBiL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoCkBAIC01MywxNyArNTMsMTUgQEAKIAlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZSBhZGRlZAogJwogCi1OVUxMX1NIQTE9ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQotCiBzZXR1cF9hYnNlbnQoKSB7CiAJdGVzdCAtZiAxICYmIHJtIDEKIAlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKLQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkTlVMTF9TSEExIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkRU1QVFlfQkxPQiAxICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMQogfQogCiB0ZXN0X2Fic2VudCgpIHsKLQllY2hvICIxMDA2NDQgJE5VTExfU0hBMSAwCTEiID4gZXhwZWN0ZWQgJiYKKwllY2hvICIxMDA2NDQgJEVNUFRZX0JMT0IgMAkxIiA+IGV4cGVjdGVkICYmCiAJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgogCXRlc3QgISAtZiAxCkBAIC03MiwxMiArNzAsMTIgQEAKIHNldHVwX2RpcnR5KCkgewogCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgMSAmJgogCWVjaG8gZGlydHkgPiAxICYmCi0JZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJE5VTExfU0hBMSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJEVNUFRZX0JMT0IgMSAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEKIH0KIAogdGVzdF9kaXJ0eSgpIHsKLQllY2hvICIxMDA2NDQgJE5VTExfU0hBMSAwCTEiID4gZXhwZWN0ZWQgJiYKKwllY2hvICIxMDA2NDQgJEVNUFRZX0JMT0IgMAkxIiA+IGV4cGVjdGVkICYmCiAJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgogCWVjaG8gZGlydHkgPiBleHBlY3RlZApkaWZmIC0tZ2l0IGEvdC90NzA2MC13dHN0YXR1cy5zaCBiL3QvdDcwNjAtd3RzdGF0dXMuc2gKaW5kZXggNDRiZjFkOC4uNGQxNzM2MyAxMDA3NTUKLS0tIGEvdC90NzA2MC13dHN0YXR1cy5zaAorKysgYi90L3Q3MDYwLXd0c3RhdHVzLnNoCkBAIC0zNCw2ICszNCw3IEBACiBPbiBicmFuY2ggc2lkZQogWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCiAgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorICAodXNlICJnaXQgbWVyZ2UgLS1hYm9ydCIgdG8gYWJvcnQgdGhlIG1lcmdlKQogCiBVbm1lcmdlZCBwYXRoczoKICAgKHVzZSAiZ2l0IGFkZC9ybSA8ZmlsZT4uLi4iIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikKQEAgLTEzOCw2ICsxMzksNyBAQAogT24gYnJhbmNoIG1hc3RlcgogWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCiAgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorICAodXNlICJnaXQgbWVyZ2UgLS1hYm9ydCIgdG8gYWJvcnQgdGhlIG1lcmdlKQogCiBVbm1lcmdlZCBwYXRoczoKICAgKHVzZSAiZ2l0IGFkZC9ybSA8ZmlsZT4uLi4iIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikKQEAgLTE3MSw2ICsxNzMsNyBAQAogT24gYnJhbmNoIGNvbmZsaWN0X3NlY29uZAogWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCiAgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorICAodXNlICJnaXQgbWVyZ2UgLS1hYm9ydCIgdG8gYWJvcnQgdGhlIG1lcmdlKQogCiBVbm1lcmdlZCBwYXRoczoKICAgKHVzZSAiZ2l0IGFkZC9ybSA8ZmlsZT4uLi4iIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikKQEAgLTE5NSw2ICsxOTgsNyBAQAogT24gYnJhbmNoIGNvbmZsaWN0X3NlY29uZAogWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCiAgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorICAodXNlICJnaXQgbWVyZ2UgLS1hYm9ydCIgdG8gYWJvcnQgdGhlIG1lcmdlKQogCiBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKIApkaWZmIC0tZ2l0IGEvdC90NzA2My1zdGF0dXMtdW50cmFja2VkLWNhY2hlLnNoIGIvdC90NzA2My1zdGF0dXMtdW50cmFja2VkLWNhY2hlLnNoCmluZGV4IGE5NzE4ODQuLjA2NjdiZDkgMTAwNzU1Ci0tLSBhL3QvdDcwNjMtc3RhdHVzLXVudHJhY2tlZC1jYWNoZS5zaAorKysgYi90L3Q3MDYzLXN0YXR1cy11bnRyYWNrZWQtY2FjaGUuc2gKQEAgLTQsNiArNCwyMCBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAorIyBPbiBzb21lIGZpbGVzeXN0ZW1zIChlLmcuIEZyZWVCU0QncyBleHQyIGFuZCB1ZnMpIGRpcmVjdG9yeSBtdGltZQorIyBpcyB1cGRhdGVkIGxhemlseSBhZnRlciBjb250ZW50cyBpbiB0aGUgZGlyZWN0b3J5IGNoYW5nZXMsIHdoaWNoCisjIGZvcmNlcyB0aGUgdW50cmFja2VkIGNhY2hlIGNvZGUgdG8gdGFrZSB0aGUgc2xvdyBwYXRoLiAgQSB0ZXN0CisjIHRoYXQgd2FudHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZhc3QgcGF0aCB3b3JrcyBjb3JyZWN0bHkgc2hvdWxkCisjIGNhbGwgdGhpcyBoZWxwZXIgdG8gbWFrZSBtdGltZSBvZiB0aGUgY29udGFpbmluZyBkaXJlY3RvcnkgaW4gc3luYworIyB3aXRoIHRoZSByZWFsaXR5IGJlZm9yZSBjaGVja2luZyB0aGUgZmFzdCBwYXRoIGJlaGF2aW91ci4KKyMKKyMgU2VlIDwyMDE2MDgwMzE3NDUyMi41NTcxLTEtcGNsb3Vkc0BnbWFpbC5jb20+IGlmIHlvdSB3YW50IHRvIGtub3cKKyMgbW9yZS4KKworc3luY19tdGltZSAoKSB7CisJZmluZCAuIC10eXBlIGQgLWxzID4vZGV2L251bGwKK30KKwogYXZvaWRfcmFjeSgpIHsKIAlzbGVlcCAxCiB9CkBAIC01Myw3ICs2Nyw3IEBACiBFT0YKIAogY2F0ID4uLi9kdW1wLmV4cGVjdCA8PEVPRiAmJgotaW5mby9leGNsdWRlIGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKK2luZm8vZXhjbHVkZSAkRU1QVFlfQkxPQgogY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKIGZsYWdzIDAwMDAwMDA2CkBAIC0xMzcsNyArMTUxLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB1bnRyYWNrZWQgY2FjaGUgZHVtcCcgJwogCXRlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgogCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCi1pbmZvL2V4Y2x1ZGUgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQoraW5mby9leGNsdWRlICRFTVBUWV9CTE9CCiBjb3JlLmV4Y2x1ZGVzZmlsZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiBleGNsdWRlX3Blcl9kaXIgLmdpdGlnbm9yZQogZmxhZ3MgMDAwMDAwMDYKQEAgLTE4NCw3ICsxOTgsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHVudHJhY2tlZCBjYWNoZSBkdW1wJyAnCiAJdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCiAJY2F0ID4uLi9leHBlY3QgPDxFT0YgJiYKLWluZm8vZXhjbHVkZSBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCitpbmZvL2V4Y2x1ZGUgJEVNUFRZX0JMT0IKIGNvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKIGV4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCiBmbGFncyAwMDAwMDAwNgpAQCAtNDE2LDcgKzQzMCw4IEBACiAJZWNobyBmb3VyID5kb25lL2ZvdXIgJiYgIyBmb3VyIGlzIGdpdGlnbm9yZWQgYXQgYSBoaWdoZXIgbGV2ZWwKIAllY2hvIGZpdmUgPmRvbmUvZml2ZSAmJiAjIGZpdmUgaXMgbm90IGdpdGlnbm9yZWQKIAllY2hvIHRlc3QgPmJhc2UgJiYgI3dlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJvb3QgZGlyIGlzIHRvdWNoZWQKLQlybSBiYXNlCisJcm0gYmFzZSAmJgorCXN5bmNfbXRpbWUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzcGFyc2Ugc3RhdHVzIHdpdGggdW50cmFja2VkIGNhY2hlJyAnCkBAIC02NDMsNyArNjU4LDcgQEAKIAljcCAtUiBkb25lIGR0aHJlZSBkdHdvIGZvdXIgdGhyZWUgLi4vb3RoZXJfd29ya3RyZWUgJiYKIAlHSVRfV09SS19UUkVFPS4uL290aGVyX3dvcmt0cmVlIGdpdCBzdGF0dXMgMj4uLi9lcnIgJiYKIAllY2hvICJ3YXJuaW5nOiBVbnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24uIiA+Li4vZXhwZWN0ICYmCi0JdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2VycgorCXRlc3RfaTE4bmNtcCAuLi9leHBlY3QgLi4vZXJyCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzEwMi1yZXNldC5zaCBiL3QvdDcxMDItcmVzZXQuc2gKaW5kZXggOThiY2ZlMi4uODZmMjNiZSAxMDA3NTUKLS0tIGEvdC90NzEwMi1yZXNldC5zaAorKysgYi90L3Q3MTAyLXJlc2V0LnNoCkBAIC02NiwxNCArNjYsMTQgQEAKIAloZXg9JChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIpICYmCiAJZ2l0IHJlc2V0IC0taGFyZCA+IC5hY3R1YWwgJiYKIAllY2hvIEhFQUQgaXMgbm93IGF0ICRoZXggJChjb21taXRfbXNnKSA+IC5leHBlY3RlZCAmJgotCXRlc3RfY21wIC5leHBlY3RlZCAuYWN0dWFsCisJdGVzdF9pMThuY21wIC5leHBlY3RlZCAuYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0taGFyZCBtZXNzYWdlIChJU084ODU5LTEgbG9nb3V0cHV0ZW5jb2RpbmcpJyAnCiAJaGV4PSQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWgiKSAmJgogCWdpdCAtYyAiaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyIgcmVzZXQgLS1oYXJkID4gLmFjdHVhbCAmJgogCWVjaG8gSEVBRCBpcyBub3cgYXQgJGhleCAkKGNvbW1pdF9tc2cgJHRlc3RfZW5jb2RpbmcpID4gLmV4cGVjdGVkICYmCi0JdGVzdF9jbXAgLmV4cGVjdGVkIC5hY3R1YWwKKwl0ZXN0X2kxOG5jbXAgLmV4cGVjdGVkIC5hY3R1YWwKICcKIAogPi5kaWZmX2V4cGVjdApkaWZmIC0tZ2l0IGEvdC90NzIwMS1jby5zaCBiL3QvdDcyMDEtY28uc2gKaW5kZXggODg1OTIzNi4uZDRiMjE3YiAxMDA3NTUKLS0tIGEvdC90NzIwMS1jby5zaAorKysgYi90L3Q3MjAxLWNvLnNoCkBAIC0yNTcsNyArMjU3LDcgQEAKIAlnaXQgY2hlY2tvdXQgLWYgcmVuYW1lciAmJiBnaXQgY2xlYW4gLWYgJiYKIAlnaXQgY2hlY2tvdXQgcmVuYW1lcl4gMj5tZXNzYWdlcyAmJgogCXRlc3RfaTE4bmdyZXAgIkhFQUQgaXMgbm93IGF0IDczMjkzODgiIG1lc3NhZ2VzICYmCi0JdGVzdF9saW5lX2NvdW50IC1ndCAxIG1lc3NhZ2VzICYmCisJKHRlc3RfbGluZV9jb3VudCAtZ3QgMSBtZXNzYWdlcyB8fCB0ZXN0IC1uICIkR0VUVEVYVF9QT0lTT04iKSAmJgogCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCiAJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKIAl0ZXN0ICJ6JEgiID0gInokTSIgJiYKZGlmZiAtLWdpdCBhL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoIGIvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKaW5kZXggMzU3MGY3Yi4uYjc3Y2NlOCAxMDA3NTUKLS0tIGEvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKKysrIGIvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKQEAgLTk0Miw3ICs5NDIsNyBAQAogCQljZCBzdWIgJiYKIAkJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLi4vaW5pdCA+Li4vb3V0cHV0CiAJKSAmJgotCWdyZXAgIlxcLlxcLi9pbml0IiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJcXC5cXC4vaW5pdCIgb3V0cHV0ICYmCiAJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIgJiYKIAl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGUyXC4iKSIgJiYKIAl0ZXN0IC1mIGV4YW1wbGUyLy5naXQgJiYKZGlmZiAtLWdpdCBhL3QvdDc0MDMtc3VibW9kdWxlLXN5bmMuc2ggYi90L3Q3NDAzLXN1Ym1vZHVsZS1zeW5jLnNoCmluZGV4IDU1MDNlYzAuLjA3MjY3OTkgMTAwNzU1Ci0tLSBhL3QvdDc0MDMtc3VibW9kdWxlLXN5bmMuc2gKKysrIGIvdC90NzQwMy1zdWJtb2R1bGUtc3luYy5zaApAQCAtMTU3LDcgKzE1Nyw3IEBACiAJCWNkIHN1YiAmJgogCQlnaXQgc3VibW9kdWxlIHN5bmMgPi4uLy4uL291dHB1dAogCSkgJiYKLQlncmVwICJcXC5cXC4vc3VibW9kdWxlIiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJcXC5cXC4vc3VibW9kdWxlIiBvdXRwdXQgJiYKIAl0ZXN0IC1kICIkKAogCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKIAkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybApAQCAtMTg4LDcgKzE4OCw3IEBACiAJCWNkIHN1YiAmJgogCQlnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUgPi4uLy4uL291dHB1dAogCSkgJiYKLQlncmVwICJcXC5cXC4vc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUiIG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIlxcLlxcLi9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSIgb3V0cHV0ICYmCiAJdGVzdCAtZCAiJCgKIAkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCiAJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKZGlmZiAtLWdpdCBhL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaCBiL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaAppbmRleCA1ZjI3ODc5Li42NGYzMjJjIDEwMDc1NQotLS0gYS90L3Q3NDA2LXN1Ym1vZHVsZS11cGRhdGUuc2gKKysrIGIvdC90NzQwNi1zdWJtb2R1bGUtdXBkYXRlLnNoCkBAIC0xMzYsOCArMTM2LDggQEAKIAkgY2QgdG1wICYmCiAJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAuLi9zdXBlciA+Li4vLi4vYWN0dWFsIDI+Li4vLi4vYWN0dWFsMgogCSkgJiYKLQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0MiBhY3R1YWwyCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0MiBhY3R1YWwyCiAnCiAKIGFwb3M9IiciOwpAQCAtMjA5LDkgKzIwOSw0MiBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSBzaG91bGQgZmV0Y2ggdXBzdHJlYW0gY2hhbmdlcyB3aXRoIC4nICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLiJzdWJtb2R1bGUiLmJyYW5jaCAiLiIgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGVzOiB1cGRhdGUgZnJvbSB0aGUgcmVzcGVjdGl2ZSBzdXBlcnByb2plY3QgYnJhbmNoIgorCSkgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQllY2hvIGxpbmU0YSA+PiBmaWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAidXBzdHJlYW0gbGluZTRhIiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdGVzdC1icmFuY2ggJiYKKwkJdGVzdF9jb21taXQgb24tdGVzdC1icmFuY2gKKwkpICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAtLWZvcmNlIHN1Ym1vZHVsZSAmJgorCQlnaXQgLUMgc3VibW9kdWxlIGxvZyAtMSAtLW9uZWxpbmUgPmFjdHVhbAorCQlnaXQgLUMgLi4vc3VibW9kdWxlIGxvZyAtMSAtLW9uZWxpbmUgbWFzdGVyID5leHBlY3QKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdGVzdC1icmFuY2ggJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgLS1mb3JjZSBzdWJtb2R1bGUgJiYKKwkJZ2l0IC1DIHN1Ym1vZHVsZSBsb2cgLTEgLS1vbmVsaW5lID5hY3R1YWwKKwkJZ2l0IC1DIC4uL3N1Ym1vZHVsZSBsb2cgLTEgLS1vbmVsaW5lIHRlc3QtYnJhbmNoID5leHBlY3QKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBicmFuY2ggLWQgdGVzdC1icmFuY2ggJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgY29uZmlnIHNob3VsZCBvdmVycmlkZSAuZ2l0bW9kdWxlcyBicmFuY2gnICcKIAkoY2Qgc3VibW9kdWxlICYmCi0JIGdpdCBjaGVja291dCAtYiB0ZXN0LWJyYW5jaCAmJgorCSBnaXQgY2hlY2tvdXQgdGVzdC1icmFuY2ggJiYKIAkgZWNobyBsaW5lNSA+PiBmaWxlICYmCiAJIGdpdCBhZGQgZmlsZSAmJgogCSB0ZXN0X3RpY2sgJiYKQEAgLTM3MCw3ICs0MDMsNyBAQAogCShjZCBzdXBlciAmJgogCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgMj4uLi9hY3R1YWwKIAkpICYmCi0JdGVzdF9jbXAgYWN0dWFsIGV4cGVjdAorCXRlc3RfaTE4bmNtcCBhY3R1YWwgZXhwZWN0CiAnCiAKIGNhdCA8PCBFT0YgPmV4cGVjdApAQCAtMzg4LDcgKzQyMSw3IEBACiAJIG1rZGlyIHRtcCAmJiBjZCB0bXAgJiYKIAkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLi4vc3VibW9kdWxlIDI+Li4vLi4vYWN0dWFsCiAJKSAmJgotCXRlc3RfY21wIGFjdHVhbCBleHBlY3QKKwl0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdAogJwogCiBjYXQgPDwgRU9GID5leHBlY3QKQEAgLTQwOCw3ICs0NDEsNyBAQAogCSBta2RpciAtcCB0bXAgJiYgY2QgdG1wICYmCiAJIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlIC4uL3N1cGVyIDI+Li4vLi4vYWN0dWFsCiAJKSAmJgotCXRlc3RfY21wIGFjdHVhbCBleHBlY3QKKwl0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaW5pdCBkb2VzIG5vdCBjb3B5IGNvbW1hbmQgaW50byAuZ2l0L2NvbmZpZycgJwpAQCAtODQxLDE2ICs4NzQsMzUgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBjbG9uZSBzaGFsbG93IHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyMyIgJiYKKwlmaXJzdD0kKGdpdCAtQyBjbG9uZWQgc3VibW9kdWxlIHN0YXR1cyBzdWJtb2R1bGUgfGN1dCAtYzItNDEpICYmCisJc2Vjb25kPSQoZ2l0IC1DIHN1Ym1vZHVsZSByZXYtcGFyc2UgSEVBRCkgJiYKKwljb21taXRfY291bnQ9JChnaXQgLUMgc3VibW9kdWxlIHJldi1saXN0IC0tY291bnQgJGZpcnN0Xi4uJHNlY29uZCkgJiYKIAlnaXQgY2xvbmUgY2xvbmVkIHN1cGVyMyAmJgogCXB3ZD0kKHB3ZCkgJiYKLQkoY2Qgc3VwZXIzICYmCi0JIHNlZCAtZSAicyN1cmwgPSAuLi8jdXJsID0gZmlsZTovLyRwd2QvIyIgPC5naXRtb2R1bGVzID4uZ2l0bW9kdWxlcy50bXAgJiYKLQkgbXYgLWYgLmdpdG1vZHVsZXMudG1wIC5naXRtb2R1bGVzICYmCi0JIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLWRlcHRoPTMKLQkgKGNkIHN1Ym1vZHVsZSAmJgotCSAgdGVzdCAxID0gJChnaXQgbG9nIC0tb25lbGluZSB8IHdjIC1sKQotCSApCi0pCisJKAorCQljZCBzdXBlcjMgJiYKKwkJc2VkIC1lICJzI3VybCA9IC4uLyN1cmwgPSBmaWxlOi8vJHB3ZC8jIiA8LmdpdG1vZHVsZXMgPi5naXRtb2R1bGVzLnRtcCAmJgorCQltdiAtZiAuZ2l0bW9kdWxlcy50bXAgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tZGVwdGg9JGNvbW1pdF9jb3VudCAmJgorCQl0ZXN0IDEgPSAkKGdpdCAtQyBzdWJtb2R1bGUgbG9nIC0tb25lbGluZSB8IHdjIC1sKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBjbG9uZSBzaGFsbG93IHN1Ym1vZHVsZSBvdXRzaWRlIG9mIGRlcHRoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXIzIiAmJgorCWdpdCBjbG9uZSBjbG9uZWQgc3VwZXIzICYmCisJcHdkPSQocHdkKSAmJgorCSgKKwkJY2Qgc3VwZXIzICYmCisJCXNlZCAtZSAicyN1cmwgPSAuLi8jdXJsID0gZmlsZTovLyRwd2QvIyIgPC5naXRtb2R1bGVzID4uZ2l0bW9kdWxlcy50bXAgJiYKKwkJbXYgLWYgLmdpdG1vZHVsZXMudG1wIC5naXRtb2R1bGVzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLWRlcHRoPTEgMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iIGFjdHVhbCAmJgorCQlnaXQgLUMgLi4vc3VibW9kdWxlIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93UmVhY2hhYmxlU0hBMUluV2FudCB0cnVlICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLWRlcHRoPTEgPmFjdHVhbCAmJgorCQl0ZXN0IDEgPSAkKGdpdCAtQyBzdWJtb2R1bGUgbG9nIC0tb25lbGluZSB8IHdjIC1sKQorCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSBkcm9wcyBtb2R1bGUgbmFtZSBiZWZvcmUgcmVjdXJzaW5nJyAnCmRpZmYgLS1naXQgYS90L3Q3NDExLXN1Ym1vZHVsZS1jb25maWcuc2ggYi90L3Q3NDExLXN1Ym1vZHVsZS1jb25maWcuc2gKaW5kZXggZmM5N2MzMy4uNDAwZTJiMSAxMDA3NTUKLS0tIGEvdC90NzQxMS1zdWJtb2R1bGUtY29uZmlnLnNoCisrKyBiL3QvdDc0MTEtc3VibW9kdWxlLWNvbmZpZy5zaApAQCAtODIsNiArODIsMTcgQEAKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIG1lc3NhZ2UgY29udGFpbnMgYmxvYiByZWZlcmVuY2UnICcKKwkoY2Qgc3VwZXIgJiYKKwkJc2hhMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdC1zdWJtb2R1bGUtY29uZmlnIFwKKwkJCUhFQUQgYiBcCisJCQlIRUFEIHN1Ym1vZHVsZSBcCisJCQkJMj5hY3R1YWxfZXJyICYmCisJCWdyZXAgInN1Ym1vZHVsZS1ibG9iICRzaGExOi5naXRtb2R1bGVzIiBhY3R1YWxfZXJyID4vZGV2L251bGwKKwkpCisnCisKIGNhdCA+c3VwZXIvZXhwZWN0X3VybCA8PEVPRgogU3VibW9kdWxlIHVybDogJ2dpdEBzb21ld2hlcmUuZWxzZS5uZXQ6YS5naXQnIGZvciBwYXRoICdiJwogU3VibW9kdWxlIHVybDogJ2dpdEBzb21ld2hlcmUuZWxzZS5uZXQ6c3VibW9kdWxlLmdpdCcgZm9yIHBhdGggJ3N1Ym1vZHVsZScKZGlmZiAtLWdpdCBhL3QvdDc1MDgtc3RhdHVzLnNoIGIvdC90NzUwOC1zdGF0dXMuc2gKaW5kZXggYzNlZDdjYi4uZmIwMGU2ZCAxMDA3NTUKLS0tIGEvdC90NzUwOC1zdGF0dXMuc2gKKysrIGIvdC90NzUwOC1zdGF0dXMuc2gKQEAgLTgwMyw3ICs4MDMsNyBAQAogJwogCiBjYXQgPmV4cGVjdCA8PEVPRgotOjEwMDY0NCAxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE0JZGlyMS9tb2RpZmllZAorOjEwMDY0NCAxMDA2NDQgJEVNUFRZX0JMT0IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCWRpcjEvbW9kaWZpZWQKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHJlZnJlc2hlcyB0aGUgaW5kZXgnICcKIAl0b3VjaCBkaXIyL2FkZGVkICYmCkBAIC0xMzc3LDcgKzEzNzcsNyBAQAogCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGFsbCAmJgogCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgogCWdpdCBzdGF0dXMgPiBvdXRwdXQgJiYKLQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKIAlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCiAnCiAKQEAgLTEzODcsNyArMTM4Nyw3IEBACiAJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCiAJZ2l0IHN0YXR1cyA+IG91dHB1dCAmJgotCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgogCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgogCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKICcKZGlmZiAtLWdpdCBhL3QvdDc1MTAtc2lnbmVkLWNvbW1pdC5zaCBiL3QvdDc1MTAtc2lnbmVkLWNvbW1pdC5zaAppbmRleCA0MTc3YTg2Li42ZTgzOWY1IDEwMDc1NQotLS0gYS90L3Q3NTEwLXNpZ25lZC1jb21taXQuc2gKKysrIGIvdC90NzUxMC1zaWduZWQtY29tbWl0LnNoCkBAIC0yMTAsNCArMjEwLDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbG9nLnNob3dzaWduYXR1cmUgYmVoYXZlcyBsaWtlIC0tc2hvdy1zaWduYXR1cmUnICcKKwl0ZXN0X2NvbmZpZyBsb2cuc2hvd3NpZ25hdHVyZSB0cnVlICYmCisJZ2l0IHNob3cgaW5pdGlhbCA+YWN0dWFsICYmCisJZ3JlcCAiZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCisJZ3JlcCAiZ3BnOiBHb29kIHNpZ25hdHVyZSIgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxMi1zdGF0dXMtaGVscC5zaCBiL3QvdDc1MTItc3RhdHVzLWhlbHAuc2gKaW5kZXggNDlkMTlhMy4uNWMzZGI2NSAxMDA3NTUKLS0tIGEvdC90NzUxMi1zdGF0dXMtaGVscC5zaAorKysgYi90L3Q3NTEyLXN0YXR1cy1oZWxwLnNoCkBAIC0yOSw2ICsyOSw3IEBACiBPbiBicmFuY2ggY29uZmxpY3RzCiBZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4KICAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IGNvbW1pdCIpCisgICh1c2UgImdpdCBtZXJnZSAtLWFib3J0IiB0byBhYm9ydCB0aGUgbWVyZ2UpCiAKIFVubWVyZ2VkIHBhdGhzOgogICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQpkaWZmIC0tZ2l0IGEvdC90NzYwNy1tZXJnZS1vdmVyd3JpdGUuc2ggYi90L3Q3NjA3LW1lcmdlLW92ZXJ3cml0ZS5zaAppbmRleCA3NThhNjIzLi45NDQ0ZDZhIDEwMDc1NQotLS0gYS90L3Q3NjA3LW1lcmdlLW92ZXJ3cml0ZS5zaAorKysgYi90L3Q3NjA3LW1lcmdlLW92ZXJ3cml0ZS5zaApAQCAtMTE1LDcgKzExNSw3IEBACiBlcnJvcjogVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOgogCXN1YgogCXN1YjIKLVBsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgY2FuIG1lcmdlLgorUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4KIEFib3J0aW5nCiBFT0YKIApAQCAtMTI1LDcgKzEyNSw3IEBACiAJY3AgaW1wb3J0YW50IHN1YiAmJgogCWNwIGltcG9ydGFudCBzdWIyICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHN1YiAyPm91dCAmJgotCXRlc3RfY21wIG91dCBleHBlY3QgJiYKKwl0ZXN0X2kxOG5jbXAgb3V0IGV4cGVjdCAmJgogCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgogCXRlc3RfY21wIGltcG9ydGFudCBzdWIgJiYKIAl0ZXN0X2NtcCBpbXBvcnRhbnQgc3ViMiAmJgpkaWZmIC0tZ2l0IGEvdC90NzYwOS1tZXJnZS1jby1lcnJvci1tc2dzLnNoIGIvdC90NzYwOS1tZXJnZS1jby1lcnJvci1tc2dzLnNoCmluZGV4IDY3MjljYjMuLmY4MGJkYjggMTAwNzU1Ci0tLSBhL3QvdDc2MDktbWVyZ2UtY28tZXJyb3ItbXNncy5zaAorKysgYi90L3Q3NjA5LW1lcmdlLWNvLWVycm9yLW1zZ3Muc2gKQEAgLTMxLDcgKzMxLDcgQEAKIAlmb3VyCiAJdGhyZWUKIAl0d28KLVBsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgY2FuIG1lcmdlLgorUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4KIEFib3J0aW5nCiBFT0YKIApAQCAtNTMsMTAgKzUzLDEwIEBACiAJZm91cgogCXRocmVlCiAJdHdvCi1QbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgY2FuIG1lcmdlLgorUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IG1lcmdlLgogZXJyb3I6IFRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToKIAlmaXZlCi1QbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IGNhbiBtZXJnZS4KK1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuCiBBYm9ydGluZwogRU9GCiAKQEAgLTcyLDcgKzcyLDcgQEAKIGVycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDoKIAlyZXAvb25lCiAJcmVwL3R3bwotUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IGNhbiBzd2l0Y2ggYnJhbmNoZXMuCitQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLgogQWJvcnRpbmcKIEVPRgogCkBAIC05NCw3ICs5NCw3IEBACiBlcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6CiAJcmVwL29uZQogCXJlcC90d28KLVBsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBjYW4gc3dpdGNoIGJyYW5jaGVzLgorUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4KIEFib3J0aW5nCiBFT0YKIApkaWZmIC0tZ2l0IGEvdC90NzYxMC1tZXJnZXRvb2wuc2ggYi90L3Q3NjEwLW1lcmdldG9vbC5zaAppbmRleCA3NjMwNmNmLi43MjE3ZjM5IDEwMDc1NQotLS0gYS90L3Q3NjEwLW1lcmdldG9vbC5zaAorKysgYi90L3Q3NjEwLW1lcmdldG9vbC5zaApAQCAtNTg5LDcgKzU4OSwxMiBAQAogCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyID4vZGV2L251bGwgMj4mMQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZW1wb3JhcnkgZmlsZW5hbWVzIGFyZSB1c2VkIHdpdGggbWVyZ2V0b29sLndyaXRlVG9UZW1wJyAnCit0ZXN0X2xhenlfcHJlcmVxIE1LVEVNUCAnCisJdGVtcGRpcj0kKG1rdGVtcCAtZCAtdCBmb28uWFhYWFhYKSAmJgorCXRlc3QgLWQgIiR0ZW1wZGlyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1LVEVNUCAndGVtcG9yYXJ5IGZpbGVuYW1lcyBhcmUgdXNlZCB3aXRoIG1lcmdldG9vbC53cml0ZVRvVGVtcCcgJwogCWdpdCBjaGVja291dCAtYiB0ZXN0MTYgYnJhbmNoMSAmJgogCXRlc3RfY29uZmlnIG1lcmdldG9vbC53cml0ZVRvVGVtcCB0cnVlICYmCiAJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15ZWNoby5jbWQgImVjaG8gXCJcJExPQ0FMXCIiICYmCmRpZmYgLS1naXQgYS90L3Q3NzAxLXJlcGFjay11bnBhY2stdW5yZWFjaGFibGUuc2ggYi90L3Q3NzAxLXJlcGFjay11bnBhY2stdW5yZWFjaGFibGUuc2gKaW5kZXggYjY2ZTM4My4uOTg3NTczYyAxMDA3NTUKLS0tIGEvdC90NzcwMS1yZXBhY2stdW5wYWNrLXVucmVhY2hhYmxlLnNoCisrKyBiL3QvdDc3MDEtcmVwYWNrLXVucGFjay11bnJlYWNoYWJsZS5zaApAQCAtMTIyLDQgKzEyMiwzMiBAQAogCWdpdCBjYXQtZmlsZSBibG9iIDpmaWxlCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayAtayBrZWVwcyB1bnJlYWNoYWJsZSBwYWNrZWQgb2JqZWN0cycgJworCSMgY3JlYXRlIHBhY2tlZC1idXQtdW5yZWFjaGFibGUgb2JqZWN0CisJc2hhMT0kKGVjaG8gdW5yZWFjaGFibGUtcGFja2VkIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJcGFjaz0kKGVjaG8gJHNoYTEgfCBnaXQgcGFjay1vYmplY3RzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2spICYmCisJZ2l0IHBydW5lLXBhY2tlZCAmJgorCisJIyAtayBzaG91bGQga2VlcCBpdAorCWdpdCByZXBhY2sgLWFkayAmJgorCWdpdCBjYXQtZmlsZSAtcCAkc2hhMSAmJgorCisJIyBhbmQgZG91YmxlIGNoZWNrIHRoYXQgd2l0aG91dCAtayBpdCB3b3VsZCBoYXZlIGJlZW4gcmVtb3ZlZAorCWdpdCByZXBhY2sgLWFkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC1wICRzaGExCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayAtayBwYWNrcyB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzJyAnCisJIyBjcmVhdGUgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0CisJc2hhMT0kKGVjaG8gd291bGQtYmUtZGVsZXRlZC1sb29zZSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCW9ianBhdGg9LmdpdC9vYmplY3RzLyQoZWNobyAkc2hhMSB8IHNlZCAicywuLiwmLywiKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvYmpwYXRoICYmCisKKwkjIGFuZCBjb25maXJtIHRoYXQgdGhlIGxvb3NlIG9iamVjdCBnb2VzIGF3YXksIGJ1dCB3ZSBjYW4KKwkjIHN0aWxsIGFjY2VzcyBpdCAoZXJnbywgaXQgaXMgcGFja2VkKQorCWdpdCByZXBhY2sgLWFkayAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICRvYmpwYXRoICYmCisJZ2l0IGNhdC1maWxlIC1wICRzaGExCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzgwMC1kaWZmdG9vbC5zaCBiL3QvdDc4MDAtZGlmZnRvb2wuc2gKaW5kZXggN2NlNGNkNy4uMjk3NDkwMCAxMDA3NTUKLS0tIGEvdC90NzgwMC1kaWZmdG9vbC5zaAorKysgYi90L3Q3ODAwLWRpZmZ0b29sLnNoCkBAIC00MTIsNiArNDEyLDIwIEBACiAJKQogJwogCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLS1kaXItZGlmZiBmcm9tIHN1YmRpcmVjdG9yeSB3aXRoIEdJVF9ESVIgc2V0JyAnCisJKAorCQlHSVRfRElSPSQocHdkKS8uZ2l0ICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCUdJVF9XT1JLX1RSRUU9JChwd2QpICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJCWNkIHN1YiAmJgorCQlnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAkc3ltbGlua3MgLS1leHRjbWQgbHMgXAorCQkJYnJhbmNoIC0tIHN1YiA+b3V0cHV0ICYmCisJCWdyZXAgc3ViIG91dHB1dCAmJgorCQkhIGdyZXAgZmlsZSBvdXRwdXQKKwkpCisnCisKIHJ1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIHdoZW4gd29ya3RyZWUgZmlsZSBpcyBtaXNzaW5nJyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgJiYKIAlybSBmaWxlMiAmJgpAQCAtNDQ2LDcgKzQ2MCw3IEBACiBmb3IgZiBpbiBmaWxlIGZpbGUyIHN1Yi9zdWIKIGRvCiAJZWNobyAiJGYiCi0JcmVhZGxpbmsgIiQyLyRmIgorCWxzIC1sZCAiJDIvJGYiIHwgc2VkIC1lICdzLy4qIC0+IC8vJwogZG9uZSA+YWN0dWFsCiBFT0YKIApkaWZmIC0tZ2l0IGEvdC90NzgxMC1ncmVwLnNoIGIvdC90NzgxMC1ncmVwLnNoCmluZGV4IDFlNzI5NzEuLmRlMjQwNWMgMTAwNzU1Ci0tLSBhL3QvdDc4MTAtZ3JlcC5zaAorKysgYi90L3Q3ODEwLWdyZXAuc2gKQEAgLTksNyArOSw5IEBACiAuIC4vdGVzdC1saWIuc2gKIAogY2F0ID5oZWxsby5jIDw8RU9GCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KKwogaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKQEAgLTE3NSw3ICsxNzcsNyBAQAogCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtYyAkTCAobm8gL2Rldi9udWxsKSIgJwogCQkhIGdpdCBncmVwIC1jIHRlc3QgJEggfCBncmVwIC9kZXYvbnVsbAotICAgICAgICAnCisJJwogCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAtMSAkTCIgJwogCQl7CkBAIC0zNTMsNyArMzU1LDcgQEAKIGNhdCA+ZXhwZWN0ZWQgPDxFT0YKIGZpbGU6NQogRU9GCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1sIC1DJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1jIC1DJyAnCiAJZ2l0IGdyZXAgLWMgLUMxIGZvbyA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCkBAIC01NzksNyArNTgxLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDkpJyAnCi0JZ2l0IGxvZyAtZyAtLWdyZXAtcmVmbG9nPSJjb21taXQ6IHRoaXJkIiAtLWF1dGhvcj0ibm9uLWV4aXN0YW50IiAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwlnaXQgbG9nIC1nIC0tZ3JlcC1yZWZsb2c9ImNvbW1pdDogdGhpcmQiIC0tYXV0aG9yPSJub24tZXhpc3RlbnQiIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgogCTogPmV4cGVjdCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTcxNSw2ICs3MTcsNyBAQAogCiBjYXQgPmV4cGVjdGVkIDw8RU9GCiBoZWxsby5jLSNpbmNsdWRlIDxzdGRpby5oPgoraGVsbG8uYy0KIGhlbGxvLmM9aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogaGVsbG8uYy17CiBoZWxsby5jLQlwcmludGYoIkhlbGxvIHdvcmxkLlxuIik7CkBAIC03NDEsNiArNzQ0LDE2IEBACiAnCiAKIGNhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmMtI2luY2x1ZGUgPGFzc2VydC5oPgoraGVsbG8uYzojaW5jbHVkZSA8c3RkaW8uaD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1XIHNob3dzIG5vIHRyYWlsaW5nIGVtcHR5IGxpbmVzJyAnCisJZ2l0IGdyZXAgLVcgc3RkaW8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCiBoZWxsby5jPQlwcmludGYoIkhlbGxvIHdvcmxkLlxuIik7CiBoZWxsby5jOglyZXR1cm4gMDsKIGhlbGxvLmMtCS8qIGNoYXIgPz8gKi8KQEAgLTEyMzIsOCArMTI0NSw4IEBACiAKIGNhdCA+ZXhwZWN0ZWQgPDxFT0YKIDxCT0xEO0dSRUVOPmhlbGxvLmM8UkVTRVQ+Ci0yOmludCBtYWluKGludCBhcmdjLCBjb25zdCA8QkxBQ0s7QllFTExPVz5jaGFyPFJFU0VUPiAqKmFyZ3YpCi02OgkvKiA8QkxBQ0s7QllFTExPVz5jaGFyPFJFU0VUPiA/PyAqLworNDppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgPEJMQUNLO0JZRUxMT1c+Y2hhcjxSRVNFVD4gKiphcmd2KQorODoJLyogPEJMQUNLO0JZRUxMT1c+Y2hhcjxSRVNFVD4gPz8gKi8KIAogPEJPTEQ7R1JFRU4+aGVsbG9fd29ybGQ8UkVTRVQ+CiAzOkhlbDxCTEFDSztCWUVMTE9XPmxvX3c8UkVTRVQ+b3JsZApAQCAtMTM0MCw3ICsxMzUzLDcgQEAKICcKIAogY2F0ID5leHBlY3RlZCA8PEVPRgotaGVsbG8uYy0jaW5jbHVkZSA8c3RkaW8uaD4KK2hlbGxvLmMtCiBoZWxsby5jPWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIGhlbGxvLmMtewogaGVsbG8uYzoJcHI8UkVEPmludDxSRVNFVD5mKCI8UkVEPkhlbGxvPFJFU0VUPiB3b3JsZC5cbiIpOwpAQCAtMTM2NCw0ICsxMzc3LDYyIEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgY2FuIGZpbmQgdGhpbmdzIG9ubHkgaW4gdGhlIHdvcmsgdHJlZScgJworCTogPndvcmstdHJlZS1vbmx5ICYmCisJZ2l0IGFkZCB3b3JrLXRyZWUtb25seSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC1mIHdvcmstdHJlZS1vbmx5IiAmJgorCWVjaG8gImZpbmQgaW4gd29yayB0cmVlIiA+d29yay10cmVlLW9ubHkgJiYKKwlnaXQgZ3JlcCAtLXF1aWV0ICJmaW5kIGluIHdvcmsgdHJlZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtLXF1aWV0IC0tY2FjaGVkICJmaW5kIGluIHdvcmsgdHJlZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtLXF1aWV0ICJmaW5kIGluIHdvcmsgdHJlZSIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGNhbiBmaW5kIHRoaW5ncyBvbmx5IGluIHRoZSB3b3JrIHRyZWUgKGktdC1hKScgJworCWVjaG8gImludGVuZCB0byBhZGQgdGhpcyIgPmludGVuZC10by1hZGQgJiYKKwlnaXQgYWRkIC1OIGludGVuZC10by1hZGQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBybSAtZiBpbnRlbmQtdG8tYWRkIiAmJgorCWdpdCBncmVwIC0tcXVpZXQgImludGVuZCB0byBhZGQgdGhpcyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtLXF1aWV0IC0tY2FjaGVkICJpbnRlbmQgdG8gYWRkIHRoaXMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1xdWlldCAiaW50ZW5kIHRvIGFkZCB0aGlzIiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgZG9lcyBub3Qgc2VhcmNoIHdvcmsgdHJlZSB3aXRoIGFzc3VtZSB1bmNoYW5nZWQnICcKKwllY2hvICJpbnRlbmQgdG8gYWRkIHRoaXMiID5pbnRlbmQtdG8tYWRkICYmCisJZ2l0IGFkZCAtTiBpbnRlbmQtdG8tYWRkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFzc3VtZS11bmNoYW5nZWQgaW50ZW5kLXRvLWFkZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC1mIGludGVuZC10by1hZGQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1xdWlldCAiaW50ZW5kIHRvIGFkZCB0aGlzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC0tcXVpZXQgLS1jYWNoZWQgImludGVuZCB0byBhZGQgdGhpcyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtLXF1aWV0ICJpbnRlbmQgdG8gYWRkIHRoaXMiIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBjYW4gZmluZCB0aGluZ3Mgb25seSBpbiB0aGUgaW5kZXgnICcKKwllY2hvICJvbmx5IGluIHRoZSBpbmRleCIgPmNhY2hlLXRoaXMgJiYKKwlnaXQgYWRkIGNhY2hlLXRoaXMgJiYKKwlybSBjYWNoZS10aGlzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcm0gLS1jYWNoZWQgY2FjaGUtdGhpcyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtLXF1aWV0ICJvbmx5IGluIHRoZSBpbmRleCIgJiYKKwlnaXQgZ3JlcCAtLXF1aWV0IC0tY2FjaGVkICJvbmx5IGluIHRoZSBpbmRleCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtLXF1aWV0ICJvbmx5IGluIHRoZSBpbmRleCIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGRvZXMgbm90IHJlcG9ydCBpLXQtYSB3aXRoIC1MIC0tY2FjaGVkJyAnCisJZWNobyAiaW50ZW5kIHRvIGFkZCB0aGlzIiA+aW50ZW5kLXRvLWFkZCAmJgorCWdpdCBhZGQgLU4gaW50ZW5kLXRvLWFkZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC1mIGludGVuZC10by1hZGQiICYmCisJZ2l0IGxzLWZpbGVzIHwgZ3JlcCAtdiAiXmludGVuZC10by1hZGRcJCIgPmV4cGVjdGVkICYmCisJZ2l0IGdyZXAgLUwgLS1jYWNoZWQgIm5vbmV4aXN0ZW50X3N0cmluZyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGRvZXMgbm90IHJlcG9ydCBpLXQtYSBhbmQgYXNzdW1lIHVuY2hhbmdlZCB3aXRoIC1MJyAnCisJZWNobyAiaW50ZW5kIHRvIGFkZCB0aGlzIiA+aW50ZW5kLXRvLWFkZC1hc3N1bWUtdW5jaGFuZ2VkICYmCisJZ2l0IGFkZCAtTiBpbnRlbmQtdG8tYWRkLWFzc3VtZS11bmNoYW5nZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBybSAtZiBpbnRlbmQtdG8tYWRkLWFzc3VtZS11bmNoYW5nZWQiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFzc3VtZS11bmNoYW5nZWQgaW50ZW5kLXRvLWFkZC1hc3N1bWUtdW5jaGFuZ2VkICYmCisJZ2l0IGxzLWZpbGVzIHwgZ3JlcCAtdiAiXmludGVuZC10by1hZGQtYXNzdW1lLXVuY2hhbmdlZFwkIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtTCAibm9uZXhpc3RlbnRfc3RyaW5nIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzgxMi1ncmVwLWljYXNlLW5vbi1hc2NpaS5zaCBiL3QvdDc4MTItZ3JlcC1pY2FzZS1ub24tYXNjaWkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTY5ZmQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc4MTItZ3JlcC1pY2FzZS1ub24tYXNjaWkuc2gKQEAgLTAsMCArMSw3MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dyZXAgaWNhc2Ugb24gbm9uLUVuZ2xpc2ggbG9jYWxlcycKKworLiAuL2xpYi1nZXR0ZXh0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ3NldHVwJyAnCisJdGVzdF93cml0ZV9saW5lcyAiVElMUkFVTjogSGFsbMOzIEhlaW11ciEiID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJTENfQUxMPSIkaXNfSVNfbG9jYWxlIiAmJgorCWV4cG9ydCBMQ19BTEwKKycKKwordGVzdF9oYXZlX3ByZXJlcSBHRVRURVhUX0xPQ0FMRSAmJgordGVzdC1yZWdleCAiSEFMTMOTIiAiSGFsbMOzIiBJQ0FTRSAmJgordGVzdF9zZXRfcHJlcmVxIFJFR0VYX0xPQ0FMRQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFR0VYX0xPQ0FMRSAnZ3JlcCBsaXRlcmFsIHN0cmluZywgbm8gLUYnICcKKwlnaXQgZ3JlcCAtaSAiVElMUkFVTjogSGFsbMOzIEhlaW11ciEiICYmCisJZ2l0IGdyZXAgLWkgIlRJTFJBVU46IEhBTEzDkyBIRUlNVVIhIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFLExJQlBDUkUgJ2dyZXAgcGNyZSB1dGYtOCBpY2FzZScgJworCWdpdCBncmVwIC0tcGVybC1yZWdleHAgICAgIlRJTFJBVU46IEgubGzDsyBIZWltdXIhIiAmJgorCWdpdCBncmVwIC0tcGVybC1yZWdleHAgLWkgIlRJTFJBVU46IEgubGzDsyBIZWltdXIhIiAmJgorCWdpdCBncmVwIC0tcGVybC1yZWdleHAgLWkgIlRJTFJBVU46IEguTEzDkyBIRUlNVVIhIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFLExJQlBDUkUgJ2dyZXAgcGNyZSB1dGYtOCBzdHJpbmcgd2l0aCAiKyInICcKKwl0ZXN0X3dyaXRlX2xpbmVzICJUSUxSQVVOOiBIYWxsw7PDsyBIZWltdXIhIiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGdyZXAgLWwgLS1wZXJsLXJlZ2V4cCAiVElMUkFVTjogSC5sbMOzKyBIZWltdXIhIiA+YWN0dWFsICYmCisJZWNobyBmaWxlID5leHBlY3RlZCAmJgorCWVjaG8gZmlsZTIgPj5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFR0VYX0xPQ0FMRSAnZ3JlcCBsaXRlcmFsIHN0cmluZywgd2l0aCAtRicgJworCWdpdCBncmVwIC0tZGVidWcgLWkgLUYgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIhIiAgMj4mMSA+L2Rldi9udWxsIHwKKwkJIGdyZXAgZml4ZWQgPmRlYnVnMSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgImZpeGVkIFRJTFJBVU46IEhhbGzDsyBIZWltdXIhIiA+ZXhwZWN0MSAmJgorCXRlc3RfY21wIGV4cGVjdDEgZGVidWcxICYmCisKKwlnaXQgZ3JlcCAtLWRlYnVnIC1pIC1GICJUSUxSQVVOOiBIQUxMw5MgSEVJTVVSISIgIDI+JjEgPi9kZXYvbnVsbCB8CisJCSBncmVwIGZpeGVkID5kZWJ1ZzIgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICJmaXhlZCBUSUxSQVVOOiBIQUxMw5MgSEVJTVVSISIgPmV4cGVjdDIgJiYKKwl0ZXN0X2NtcCBleHBlY3QyIGRlYnVnMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFR0VYX0xPQ0FMRSAnZ3JlcCBzdHJpbmcgd2l0aCByZWdleCwgd2l0aCAtRicgJworCXRlc3Rfd3JpdGVfbGluZXMgIl4qVElMUl5BVU46LiogXFxIYWxsw7MgXCRIZVtdaW11ciFcJCIgPmZpbGUgJiYKKworCWdpdCBncmVwIC0tZGVidWcgLWkgLUYgIl4qVElMUl5BVU46LiogXFxIYWxsw7MgXCRIZVtdaW11ciFcJCIgMj4mMSA+L2Rldi9udWxsIHwKKwkJIGdyZXAgZml4ZWQgPmRlYnVnMSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgImZpeGVkIFxcXipUSUxSXkFVTjpcXC5cXCogXFxcXEhhbGzDsyBcJEhlXFxbXWltdXIhXFxcJCIgPmV4cGVjdDEgJiYKKwl0ZXN0X2NtcCBleHBlY3QxIGRlYnVnMSAmJgorCisJZ2l0IGdyZXAgLS1kZWJ1ZyAtaSAtRiAiXipUSUxSXkFVTjouKiBcXEhBTEzDkyBcJEhFW11JTVVSIVwkIiAgMj4mMSA+L2Rldi9udWxsIHwKKwkJIGdyZXAgZml4ZWQgPmRlYnVnMiAmJgorCXRlc3Rfd3JpdGVfbGluZXMgImZpeGVkIFxcXipUSUxSXkFVTjpcXC5cXCogXFxcXEhBTEzDkyBcJEhFXFxbXUlNVVIhXFxcJCIgPmV4cGVjdDIgJiYKKwl0ZXN0X2NtcCBleHBlY3QyIGRlYnVnMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFR0VYX0xPQ0FMRSAncGlja2F4ZSAtaSBvbiBub24tYXNjaWknICcKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lZiAtaSAtUyJUSUxSQVVOOiBIQUxMw5MgSEVJTVVSISIgPmFjdHVhbCAmJgorCWVjaG8gZmlyc3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzgxMy1ncmVwLWljYXNlLWlzby5zaCBiL3QvdDc4MTMtZ3JlcC1pY2FzZS1pc28uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWZlZjdmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc4MTMtZ3JlcC1pY2FzZS1pc28uc2gKQEAgLTAsMCArMSwxOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dyZXAgaWNhc2Ugb24gbm9uLUVuZ2xpc2ggbG9jYWxlcycKKworLiAuL2xpYi1nZXR0ZXh0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9JU09fTE9DQUxFICdzZXR1cCcgJworCXByaW50ZiAiVElMUkFVTjogSGFsbPMgSGVpbXVyISIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlMQ19BTEw9IiRpc19JU19pc29fbG9jYWxlIiAmJgorCWV4cG9ydCBMQ19BTEwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0lTT19MT0NBTEUsTElCUENSRSAnZ3JlcCBwY3JlIHN0cmluZycgJworCWdpdCBncmVwIC0tcGVybC1yZWdleHAgLWkgIlRJTFJBVU46IEgubGzzIEhlaW11ciEiICYmCisJZ2l0IGdyZXAgLS1wZXJsLXJlZ2V4cCAtaSAiVElMUkFVTjogSC5MTNMgSEVJTVVSISIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDAzLWJsYW1lLWNvcm5lci1jYXNlcy5zaCBiL3QvdDgwMDMtYmxhbWUtY29ybmVyLWNhc2VzLnNoCmluZGV4IGE5YjI2NmYuLmU0ODM3MGQgMTAwNzU1Ci0tLSBhL3QvdDgwMDMtYmxhbWUtY29ybmVyLWNhc2VzLnNoCisrKyBiL3QvdDgwMDMtYmxhbWUtY29ybmVyLWNhc2VzLnNoCkBAIC00MSwxMiArNDEsMTIgQEAKIAl0ZXN0X3RpY2sgJiYKIAlHSVRfQVVUSE9SX05BTUU9Rm91cnRoIGdpdCBjb21taXQgLW0gRm91cnRoICYmCiAKLQl7Ci0JCWVjaG8gQUJDCi0JCWVjaG8gREVGCi0JCWVjaG8gWFhYWAotCQllY2hvIEdISUpLCi0JfSA+Y293ICYmCisJY2F0ID5jb3cgPDwtXEVPRiAmJgorCUFCQworCURFRgorCVhYWFgKKwlHSElKSworCUVPRgogCWdpdCBhZGQgY293ICYmCiAJdGVzdF90aWNrICYmCiAJR0lUX0FVVEhPUl9OQU1FPUZpZnRoIGdpdCBjb21taXQgLW0gRmlmdGgKQEAgLTExNSwxMSArMTE1LDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB3aG9sZXNhbGUgY29weScgJwogCiAJZ2l0IGJsYW1lIC1mIC1DIC1DMSBIRUFEXiAtLSBjb3cgfCBzZWQgLWUgIiRwaWNrX2ZjIiA+Y3VycmVudCAmJgotCXsKLQkJZWNobyBtb3VzZS1Jbml0aWFsCi0JCWVjaG8gbW91c2UtU2Vjb25kCi0JCWVjaG8gbW91c2UtVGhpcmQKLQl9ID5leHBlY3RlZCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCW1vdXNlLUluaXRpYWwKKwltb3VzZS1TZWNvbmQKKwltb3VzZS1UaGlyZAorCUVPRgogCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKIAogJwpAQCAtMTI3LDE2ICsxMjcsNjEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIHdob2xlc2FsZSBjb3B5IGFuZCBtb3JlJyAnCiAKIAlnaXQgYmxhbWUgLWYgLUMgLUMxIEhFQUQgLS0gY293IHwgc2VkIC1lICIkcGlja19mYyIgPmN1cnJlbnQgJiYKLQl7Ci0JCWVjaG8gbW91c2UtSW5pdGlhbAotCQllY2hvIG1vdXNlLVNlY29uZAotCQllY2hvIGNvdy1GaWZ0aAotCQllY2hvIG1vdXNlLVRoaXJkCi0JfSA+ZXhwZWN0ZWQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwltb3VzZS1Jbml0aWFsCisJbW91c2UtU2Vjb25kCisJY293LUZpZnRoCisJbW91c2UtVGhpcmQKKwlFT0YKIAl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgd2hvbGVzYWxlIGNvcHkgYW5kIG1vcmUgaW4gdGhlIGluZGV4JyAnCisKKwljYXQgPmhvcnNlIDw8LVxFT0YgJiYKKwlBQkMKKwlERUYKKwlYWFhYCisJWVlZWQorCUdISUpLCisJRU9GCisJZ2l0IGFkZCBob3JzZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC1mIGhvcnNlIiAmJgorCWdpdCBibGFtZSAtZiAtQyAtQzEgLS0gaG9yc2UgfCBzZWQgLWUgIiRwaWNrX2ZjIiA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCW1vdXNlLUluaXRpYWwKKwltb3VzZS1TZWNvbmQKKwljb3ctRmlmdGgKKwlob3JzZS1Ob3QKKwltb3VzZS1UaGlyZAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBkdXJpbmcgY2hlcnJ5LXBpY2sgd2l0aCBmaWxlIHJlbmFtZSBjb25mbGljdCcgJworCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IEhFQUR+MyAmJgorCWVjaG8gTU9VU0UgPj4gbW91c2UgJiYKKwlnaXQgbXYgbW91c2Ugcm9kZW50ICYmCisJZ2l0IGFkZCByb2RlbnQgJiYKKwlHSVRfQVVUSE9SX05BTUU9Um9kZW50IGdpdCBjb21taXQgLW0gInJvZGVudCIgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggbWFzdGVyICYmCisJKGdpdCBjaGVycnktcGljayBIRUFEQHsxfSB8fCB0ZXN0ICQ/IC1lcSAxKSAmJgorCWdpdCBzaG93IEhFQURAezF9OnJvZGVudCA+IHJvZGVudCAmJgorCWdpdCBhZGQgcm9kZW50ICYmCisJZ2l0IGJsYW1lIC1mIC1DIC1DMSByb2RlbnQgfCBzZWQgLWUgIiRwaWNrX2ZjIiA+Y3VycmVudCAmJgorCWNhdCBjdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJbW91c2UtSW5pdGlhbAorCW1vdXNlLVNlY29uZAorCXJvZGVudC1Ob3QKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIHBhdGggdGhhdCB1c2VkIHRvIGJlIGEgZGlyZWN0b3J5JyAnCiAJbWtkaXIgcGF0aCAmJgogCWVjaG8gQSBBIEEgQSBBID5wYXRoL2ZpbGUgJiYKZGlmZiAtLWdpdCBhL3QvdDgwMDgtYmxhbWUtZm9ybWF0cy5zaCBiL3QvdDgwMDgtYmxhbWUtZm9ybWF0cy5zaAppbmRleCAyOWY4NGE2Li45MmM4ZTc5IDEwMDc1NQotLS0gYS90L3Q4MDA4LWJsYW1lLWZvcm1hdHMuc2gKKysrIGIvdC90ODAwOC1ibGFtZS1mb3JtYXRzLnNoCkBAIC04Nyw0ICs4NywyMSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wb3JjZWxhaW4gZGV0ZWN0cyBmaXJzdCBub24tYmxhbmsgbGluZSBhcyBzdWJqZWN0JyAnCisJKAorCQlHSVRfSU5ERVhfRklMRT0uZ2l0L3RtcC1pbmRleCAmJgorCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkJZWNobyAiVGhpcyBpcyBpdCIgPnNpbmdsZS1maWxlICYmCisJCWdpdCBhZGQgc2luZ2xlLWZpbGUgJiYKKwkJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCQljb21taXQ9JChwcmludGYgIiVzXG4lc1xuJXNcblxuXG4gIFxub25lbGluZVxuXG5ib2R5XG4iIFwKKwkJCSJ0cmVlICR0cmVlIiBcCisJCQkiYXV0aG9yIEEgPGFAYi5jPiAxMjM0NTY3ODkgKzAwMDAiIFwKKwkJCSJjb21taXR0ZXIgQyA8Y0BkLmU+IDEyMzQ1Njc4OSArMDAwMCIgfAorCQlnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IC0tc3RkaW4pICYmCisJCWdpdCBibGFtZSAtLXBvcmNlbGFpbiAkY29tbWl0IC0tIHNpbmdsZS1maWxlID5vdXRwdXQgJiYKKwkJZ3JlcCAiXnN1bW1hcnkgb25lbGluZSQiIG91dHB1dAorCSkKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDAzLWhlbHAtYXV0b2NvcnJlY3Quc2ggYi90L3Q5MDAzLWhlbHAtYXV0b2NvcnJlY3Quc2gKaW5kZXggZGZlOTVjOS4uYjFjNzkxOSAxMDA3NTUKLS0tIGEvdC90OTAwMy1oZWxwLWF1dG9jb3JyZWN0LnNoCisrKyBiL3QvdDkwMDMtaGVscC1hdXRvY29ycmVjdC5zaApAQCAtMzEsMTAgKzMxLDEwIEBACiAJZ2l0IGNvbmZpZyBoZWxwLmF1dG9jb3JyZWN0IDAgJiYKIAogCXRlc3RfbXVzdF9mYWlsIGdpdCBsZmcgMj5hY3R1YWwgJiYKLQlzZWQgLWUgIjEsL15EaWQgeW91IG1lYW4gdGhpcy9kIiBhY3R1YWwgfCBncmVwIGxnZiAmJgorCWdyZXAgIl4JbGdmIiBhY3R1YWwgJiYKIAogCXRlc3RfbXVzdF9mYWlsIGdpdCBkaXN0aW1kaXN0IDI+YWN0dWFsICYmCi0Jc2VkIC1lICIxLC9eRGlkIHlvdSBtZWFuIHRoaXMvZCIgYWN0dWFsIHwgZ3JlcCBkaXN0aW1kaXN0aW0KKwlncmVwICJeCWRpc3RpbWRpc3RpbSIgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9jb3JyZWN0IHJ1bm5pbmcgY29tbWFuZHMnICcKZGlmZiAtLWdpdCBhL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaCBiL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaAppbmRleCAyODA4MmIxLi45MmEzYWE4IDEwMDc1NQotLS0gYS90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2gKKysrIGIvdC90OTEwMC1naXQtc3ZuLWJhc2ljLnNoCkBAIC04LDggKzgsNiBAQAogCiAuIC4vbGliLWdpdC1zdm4uc2gKIAotc2F5ICdkZWZpbmUgTk9fU1ZOX1RFU1RTIHRvIHNraXAgZ2l0IHN2biB0ZXN0cycKLQogY2FzZSAiJEdJVF9TVk5fTENfQUxMIiBpbgogKi5VVEYtOCkKIAl0ZXN0X3NldF9wcmVyZXEgVVRGOApAQCAtMTksNiArMTcsMjcgQEAKIAk7OwogZXNhYwogCitkZWVwZGlyPW5vdGhpbmctYWJvdmUKK2NlaWxpbmc9JFBXRAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIC0tdmVyc2lvbiB3b3JrcyBhbnl3aGVyZScgJworCW1rZGlyIC1wICIkZGVlcGRpciIgJiYgKAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJGNlaWxpbmciICYmCisJCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyAmJgorCQljZCAiJGRlZXBkaXIiICYmCisJCWdpdCBzdm4gLS12ZXJzaW9uCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGhlbHAgd29ya3MgYW55d2hlcmUnICcKKwlta2RpciAtcCAiJGRlZXBkaXIiICYmICgKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRjZWlsaW5nIiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2QgIiRkZWVwZGlyIiAmJgorCQlnaXQgc3ZuIGhlbHAKKwkpCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdpbml0aWFsaXplIGdpdCBzdm4nICcKIAlta2RpciBpbXBvcnQgJiYKZGlmZiAtLWdpdCBhL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2ggYi90L3Q5MTE1LWdpdC1zdm4tZGNvbW1pdC1mdW5reS1yZW5hbWVzLnNoCmluZGV4IGE4N2QzZDMuLjY0YmI0OTUgMTAwNzU1Ci0tLSBhL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2gKKysrIGIvdC90OTExNS1naXQtc3ZuLWRjb21taXQtZnVua3ktcmVuYW1lcy5zaApAQCAtOCw5ICs4LDEwIEBACiAuIC4vbGliLWdpdC1zdm4uc2gKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCByZXBvc2l0b3J5IHdpdGggc3RyYW5nZSBuYW1lcycgJwotCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8ICIkVEVTVF9ESVJFQ1RPUlkiL3Q5MTE1L2Z1bmt5LW5hbWVzLmR1bXAgJiYKLQlzdGFydF9odHRwZCBndGsrCi0JJworCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8IiRURVNUX0RJUkVDVE9SWSIvdDkxMTUvZnVua3ktbmFtZXMuZHVtcAorJworCittYXliZV9zdGFydF9odHRwZCBndGsrCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIHJlcG9zaXRvcnknICcKIAlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgpkaWZmIC0tZ2l0IGEvdC90OTExOC1naXQtc3ZuLWZ1bmt5LWJyYW5jaC1uYW1lcy5zaCBiL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2gKaW5kZXggZWNiMWZlZC4uNDFhMDI2NiAxMDA3NTUKLS0tIGEvdC90OTExOC1naXQtc3ZuLWZ1bmt5LWJyYW5jaC1uYW1lcy5zaAorKysgYi90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoCkBAIC0zMiw3ICszMiw3IEBACiAJCQkiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy90cmFpbGluZ19kb3Rsb2NrLmxvY2siICYmCiAJc3ZuX2NtZCBjcCAtbSAicmVmbG9nIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAogCQkJIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvbm90LWFAezB9cmVmbG9nQCIgJiYKLQlzdGFydF9odHRwZAorCW1heWJlX3N0YXJ0X2h0dHBkCiAJJwogCiAjIFNWTiAxLjcgd2lsbCB0cnVuY2F0ZSAibm90LWElNDB7MF0iIHRvIGp1c3QgIm5vdC1hIi4KZGlmZiAtLWdpdCBhL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaCBiL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaAppbmRleCA1OTQ2NWIxLi5iMjhhMTc0IDEwMDc1NQotLS0gYS90L3Q5MTIwLWdpdC1zdm4tY2xvbmUtd2l0aC1wZXJjZW50LWVzY2FwZXMuc2gKKysrIGIvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoCkBAIC0xNSw3ICsxNSw3IEBACiAJc3ZuX2NtZCBjcCAtbSAidGFnIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAogCSAgIiRzdm5yZXBvL3ByIGplY3QvdGFncy92MSIgJiYKIAlybSAtcmYgcHJvamVjdCAmJgotCXN0YXJ0X2h0dHBkCisJbWF5YmVfc3RhcnRfaHR0cGQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB3aXRoIHBlcmNlbnQgZXNjYXBlcycgJwpkaWZmIC0tZ2l0IGEvdC90OTE0Mi1naXQtc3ZuLXNoYWxsb3ctY2xvbmUuc2ggYi90L3Q5MTQyLWdpdC1zdm4tc2hhbGxvdy1jbG9uZS5zaAppbmRleCBlMjFlZTVmLi45ZWUyM2JlIDEwMDc1NQotLS0gYS90L3Q5MTQyLWdpdC1zdm4tc2hhbGxvdy1jbG9uZS5zaAorKysgYi90L3Q5MTQyLWdpdC1zdm4tc2hhbGxvdy1jbG9uZS5zaApAQCAtMTgsNyArMTgsNyBAQAogCQlzdm5fY21kIGFkZCBmb28gJiYKIAkJc3ZuX2NtZCBjb21taXQgLW0gImFkZCBmb28iCiAJKSAmJgotCXN0YXJ0X2h0dHBkCisJbWF5YmVfc3RhcnRfaHR0cGQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdHJ1bmsgd2l0aCAiLXIgSEVBRCInICcKZGlmZiAtLWdpdCBhL3QvdDkxNTgtZ2l0LXN2bi1tZXJnZWluZm8uc2ggYi90L3Q5MTU4LWdpdC1zdm4tbWVyZ2VpbmZvLnNoCmluZGV4IDEzZjc4ZjIuLmE4NzViNDUgMTAwNzU1Ci0tLSBhL3QvdDkxNTgtZ2l0LXN2bi1tZXJnZWluZm8uc2gKKysrIGIvdC90OTE1OC1naXQtc3ZuLW1lcmdlaW5mby5zaApAQCAtNyw4ICs3LDYgQEAKIAogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXNheSAnZGVmaW5lIE5PX1NWTl9URVNUUyB0byBza2lwIGdpdCBzdm4gdGVzdHMnCi0KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc291cmNlIHN2biByZXBvJyAnCiAJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvdHJ1bmsgJiYKIAlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKZGlmZiAtLWdpdCBhL3QvdDkxNjAtZ2l0LXN2bi1wcmVzZXJ2ZS1lbXB0eS1kaXJzLnNoIGIvdC90OTE2MC1naXQtc3ZuLXByZXNlcnZlLWVtcHR5LWRpcnMuc2gKaW5kZXggYjRhNDQzNC4uMGVkZTNjZiAxMDA3NTUKLS0tIGEvdC90OTE2MC1naXQtc3ZuLXByZXNlcnZlLWVtcHR5LWRpcnMuc2gKKysrIGIvdC90OTE2MC1naXQtc3ZuLXByZXNlcnZlLWVtcHR5LWRpcnMuc2gKQEAgLTExLDcgKzExLDYgQEAKIAogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXNheSAnZGVmaW5lIE5PX1NWTl9URVNUUyB0byBza2lwIGdpdCBzdm4gdGVzdHMnCiBHSVRfUkVQTz1naXQtc3ZuLXJlcG8KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzb3VyY2Ugc3ZuIHJlcG8gY29udGFpbmluZyBlbXB0eSBkaXJzJyAnCmRpZmYgLS1naXQgYS90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoIGIvdC90OTMwMC1mYXN0LWltcG9ydC5zaAppbmRleCA0YmNhMzVjLi4yZTBiYTNlIDEwMDc1NQotLS0gYS90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCisrKyBiL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2gKQEAgLTcsMjMgKzcsNiBAQAogLiAuL3Rlc3QtbGliLnNoCiAuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoIDsjIHRlc3QtbGliIGNoZGlyJ3MgaW50byB0cmFzaAogCi0jIFByaW50ICQxIGJ5dGVzIGZyb20gc3RkaW4gdG8gc3Rkb3V0LgotIwotIyBUaGlzIGNvdWxkIGJlIHdyaXR0ZW4gYXMgImhlYWQgLWMgJDEiLCBidXQgSVJJWCAiaGVhZCIgZG9lcyBub3QKLSMgc3VwcG9ydCB0aGUgLWMgb3B0aW9uLgotaGVhZF9jICgpIHsKLQlwZXJsIC1lICcKLQkJbXkgJGxlbiA9ICRBUkdWWzFdOwotCQl3aGlsZSAoJGxlbiA+IDApIHsKLQkJCW15ICRzOwotCQkJbXkgJG5yZWFkID0gc3lzcmVhZChTVERJTiwgJHMsICRsZW4pOwotCQkJZGllICJjYW5ub3QgcmVhZDogJCEiIHVubGVzcyBkZWZpbmVkKCRucmVhZCk7Ci0JCQlwcmludCAkczsKLQkJCSRsZW4gLT0gJG5yZWFkOwotCQl9Ci0JJyAtICIkMSIKLX0KLQogdmVyaWZ5X3BhY2tzICgpIHsKIAlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2sKIAlkbwpAQCAtNTIsNiArMzUsNyBAQAogIyMjCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHN0cmVhbSBzdWNjZWVkcycgJworCWdpdCBjb25maWcgZmFzdGltcG9ydC51bnBhY2tMaW1pdCAwICYmCiAJZ2l0IGZhc3QtaW1wb3J0IDwvZGV2L251bGwKICcKIApAQCAtMjQ4MCw3ICsyNDY0LDcgQEAKIAogCQlyZWFkIGJsb2JfaWQgdHlwZSBzaXplIDwmMyAmJgogCQllY2hvICIkYmxvYl9pZCAkdHlwZSAkc2l6ZSIgPnJlc3BvbnNlICYmCi0JCWhlYWRfYyAkc2l6ZSA+YmxvYiA8JjMgJiYKKwkJdGVzdF9jb3B5X2J5dGVzICRzaXplID5ibG9iIDwmMyAmJgogCQlyZWFkIG5ld2xpbmUgPCYzICYmCiAKIAkJY2F0IDw8LUVPRiAmJgpAQCAtMjUyMyw3ICsyNTA3LDcgQEAKIAkJRU9GCiAKIAkJcmVhZCBibG9iX2lkIHR5cGUgc2l6ZSA8JjMgJiYKLQkJaGVhZF9jICRzaXplID5hY3R1YWwgPCYzICYmCisJCXRlc3RfY29weV9ieXRlcyAkc2l6ZSA+YWN0dWFsIDwmMyAmJgogCQlyZWFkIG5ld2xpbmUgPCYzICYmCiAKIAkJZWNobwpAQCAtMjU1OCw3ICsyNTQyLDcgQEAKIAkJZWNobyAiY2F0LWJsb2IgJHRvX2dldCIgJiYKIAogCQlyZWFkIGJsb2JfaWQgdHlwZSBzaXplIDwmMyAmJgotCQloZWFkX2MgJHNpemUgPmFjdHVhbCA8JjMgJiYKKwkJdGVzdF9jb3B5X2J5dGVzICRzaXplID5hY3R1YWwgPCYzICYmCiAJCXJlYWQgbmV3bGluZSA8JjMgJiYKIAogCQllY2hvIGRlbGV0ZWFsbApAQCAtMjY5MCw2ICsyNjc0LDcgQEAKIAllY2hvID4+aW5wdXQgJiYKIAogCXRlc3RfY3JlYXRlX3JlcG8gUiAmJgorCWdpdCAtLWdpdC1kaXI9Ui8uZ2l0IGNvbmZpZyBmYXN0aW1wb3J0LnVucGFja0xpbWl0IDAgJiYKIAlnaXQgLS1naXQtZGlyPVIvLmdpdCBmYXN0LWltcG9ydCAtLWJpZy1maWxlLXRocmVzaG9sZD0xIDxpbnB1dAogJwogCmRpZmYgLS1naXQgYS90L3Q5MzAyLWZhc3QtaW1wb3J0LXVucGFjay1saW1pdC5zaCBiL3QvdDkzMDItZmFzdC1pbXBvcnQtdW5wYWNrLWxpbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwNGRlMTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MzAyLWZhc3QtaW1wb3J0LXVucGFjay1saW1pdC5zaApAQCAtMCwwICsxLDEwNSBAQAorIyEvYmluL3NoCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCBmYXN0LWltcG9ydCB1bnBhY2sgbGltaXQnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGxvb3NlIG9iamVjdHMgb24gaW1wb3J0JyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJaW5pdGlhbAorCUNPTU1JVAorCisJZG9uZQorCUlOUFVUX0VORAorCisJZ2l0IC1jIGZhc3RpbXBvcnQudW5wYWNrTGltaXQ9MiBmYXN0LWltcG9ydCAtLWRvbmUgPGlucHV0ICYmCisJZ2l0IGZzY2sgLS1uby1wcm9ncmVzcyAmJgorCXRlc3QgJChmaW5kIC5naXQvb2JqZWN0cy8/PyAtdHlwZSBmIHwgd2MgLWwpIC1lcSAyICYmCisJdGVzdCAkKGZpbmQgLmdpdC9vYmplY3RzL3BhY2sgLXR5cGUgZiB8IHdjIC1sKSAtZXEgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaWdnZXIgcGFja3MgYXJlIHByZXNlcnZlZCcgJworCXRlc3RfdGljayAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWluY3JlbWVudGFsIHNob3VsZCBjcmVhdGUgYSBwYWNrCisJQ09NTUlUCisJZnJvbSByZWZzL2hlYWRzL21hc3Rlcl4wCisKKwljb21taXQgcmVmcy9oZWFkcy9icmFuY2gKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJYnJhbmNoCisJQ09NTUlUCisKKwlkb25lCisJSU5QVVRfRU5ECisKKwlnaXQgLWMgZmFzdGltcG9ydC51bnBhY2tMaW1pdD0yIGZhc3QtaW1wb3J0IC0tZG9uZSA8aW5wdXQgJiYKKwlnaXQgZnNjayAtLW5vLXByb2dyZXNzICYmCisJdGVzdCAkKGZpbmQgLmdpdC9vYmplY3RzLz8/IC10eXBlIGYgfCB3YyAtbCkgLWVxIDIgJiYKKwl0ZXN0ICQoZmluZCAuZ2l0L29iamVjdHMvcGFjayAtdHlwZSBmIHwgd2MgLWwpIC1lcSAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb2t1cHMgYWZ0ZXIgY2hlY2twb2ludCB3b3JrcycgJworCWhlbGxvX2lkPSQoZWNobyBoZWxsbyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC10IGJsb2IpICYmCisJaWQ9IiRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFIiAmJgorCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXJeMCkgJiYKKwkoCisJCWNhdCA8PC1JTlBVVF9FTkQgJiYKKwkJYmxvYgorCQltYXJrIDoxCisJCWRhdGEgNgorCQloZWxsbworCisJCWNvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorCQltYXJrIDoyCisJCWNvbW1pdHRlciAkaWQKKwkJZGF0YSA8PENPTU1JVAorCQljaGVja3BvaW50IGFmdGVyIHRoaXMKKwkJQ09NTUlUCisJCWZyb20gcmVmcy9oZWFkcy9tYXN0ZXJeMAorCQlNIDEwMDY0NCA6MSBoZWxsbworCisJCSMgcHJlLWNoZWNrcG9pbnQKKwkJY2F0LWJsb2IgOjEKKwkJY2F0LWJsb2IgJGhlbGxvX2lkCisJCWNoZWNrcG9pbnQKKwkJIyBwb3N0LWNoZWNrcG9pbnQKKwkJY2F0LWJsb2IgOjEKKwkJY2F0LWJsb2IgJGhlbGxvX2lkCisJCUlOUFVUX0VORAorCisJCW49MCAmJgorCQlmcm9tPSRiZWZvcmUgJiYKKwkJd2hpbGUgdGVzdCB4IiRmcm9tIiA9IHgiJGJlZm9yZSIKKwkJZG8KKwkJCWlmIHRlc3QgJG4gLWd0IDMwCisJCQl0aGVuCisJCQkJZWNobyA+JjIgImNoZWNrcG9pbnQgZGlkIG5vdCB1cGRhdGUgYnJhbmNoIgorCQkJCWV4aXQgMQorCQkJZWxzZQorCQkJCW49JCgoJG4gKyAxKSkKKwkJCWZpICYmCisJCQlzbGVlcCAxICYmCisJCQlmcm9tPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3Rlcl4wKQorCQlkb25lICYmCisJCWNhdCA8PC1JTlBVVF9FTkQgJiYKKwkJY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCisJCWNvbW1pdHRlciAkaWQKKwkJZGF0YSA8PENPTU1JVAorCQltYWtlIHN1cmUgZnJvbSAidW5wYWNrZWQgc2hhMSByZWZlcmVuY2UiIHdvcmtzLCB0b28KKwkJQ09NTUlUCisJCWZyb20gJGZyb20KKwkJSU5QVVRfRU5ECisJCWVjaG8gZG9uZQorCSkgfCBnaXQgLWMgZmFzdGltcG9ydC51bnBhY2tMaW1pdD0xMDAgZmFzdC1pbXBvcnQgLS1kb25lICYmCisJdGVzdCAkKGZpbmQgLmdpdC9vYmplY3RzLz8/IC10eXBlIGYgfCB3YyAtbCkgLWVxIDYgJiYKKwl0ZXN0ICQoZmluZCAuZ2l0L29iamVjdHMvcGFjayAtdHlwZSBmIHwgd2MgLWwpIC1lcSAyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTQwMS1naXQtY3Zzc2VydmVyLWNybGYuc2ggYi90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaAppbmRleCBmMzI0YjlmLi44NDc4N2VlIDEwMDc1NQotLS0gYS90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaAorKysgYi90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaApAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgZWNobyAibW9yZSB0ZXh0IiA+IHNyYy5jICYmCiAgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc3JjLmMgPmN2cy5sb2cgMj4mMSAmJgogICAgIG1hcmtlZF9hcyAuIHNyYy5jICIiICYmCi0gICAgZWNobyAicHN1ZWRvLWJpbmFyeSIgPiB0ZW1wLmJpbgorICAgIGVjaG8gInBzZXVkby1iaW5hcnkiID4gdGVtcC5iaW4KICAgICApICYmCiAgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc3ViZGlyL3RlbXAuYmluID5jdnMubG9nIDI+JjEgJiYKICAgICBtYXJrZWRfYXMgc3ViZGlyIHRlbXAuYmluICIta2IiICYmCmRpZmYgLS1naXQgYS90L3Q5ODAxLWdpdC1wNC1icmFuY2guc2ggYi90L3Q5ODAxLWdpdC1wNC1icmFuY2guc2gKaW5kZXggMGFhZmQwMy4uNmE4NmQ2OSAxMDA3NTUKLS0tIGEvdC90OTgwMS1naXQtcDQtYnJhbmNoLnNoCisrKyBiL3QvdDk4MDEtZ2l0LXA0LWJyYW5jaC5zaApAQCAtMzAwLDcgKzMwMCw3IEBACiAJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCiAJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCiAJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKLQkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9naXQtcDQtdG1wCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL2dpdC1wNC10bXAKIAkpCiAnCiAKQEAgLTM1Miw3ICszNTIsNyBAQAogCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgogCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgogCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCi0JCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvZ2l0LXA0LXRtcAorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9naXQtcDQtdG1wCiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaCBiL3QvdGVzdC1saWItZnVuY3Rpb25zLnNoCmluZGV4IDQ4ODg0ZDUuLjRmN2VhZGIgMTAwNjQ0Ci0tLSBhL3QvdGVzdC1saWItZnVuY3Rpb25zLnNoCisrKyBiL3QvdGVzdC1saWItZnVuY3Rpb25zLnNoCkBAIC02MTIsNyArNjEyLDcgQEAKIAl0aGVuCiAJCWVjaG8gPiYyICJ0ZXN0X211c3RfZmFpbDogY29tbWFuZCBzdWNjZWVkZWQ6ICQqIgogCQlyZXR1cm4gMQotCWVsaWYgdGVzdCAkZXhpdF9jb2RlIC1lcSAxNDEgJiYgbGlzdF9jb250YWlucyAiJF90ZXN0X29rIiBzaWdwaXBlCisJZWxpZiB0ZXN0X21hdGNoX3NpZ25hbCAxMyAkZXhpdF9jb2RlICYmIGxpc3RfY29udGFpbnMgIiRfdGVzdF9vayIgc2lncGlwZQogCXRoZW4KIAkJcmV0dXJuIDAKIAllbGlmIHRlc3QgJGV4aXRfY29kZSAtZ3QgMTI5ICYmIHRlc3QgJGV4aXRfY29kZSAtbGUgMTkyCkBAIC05NjEsMyArOTYxLDMyIEBACiAJCWRvbmUKIAkpCiB9CisKKyMgUmV0dXJucyB0cnVlIGlmIHRoZSBudW1lcmljIGV4aXQgY29kZSBpbiAiJDIiIHJlcHJlc2VudHMgdGhlIGV4cGVjdGVkIHNpZ25hbAorIyBpbiAiJDEiLiBTaWduYWxzIHNob3VsZCBiZSBnaXZlbiBudW1lcmljYWxseS4KK3Rlc3RfbWF0Y2hfc2lnbmFsICgpIHsKKwlpZiB0ZXN0ICIkMiIgPSAiJCgoMTI4ICsgJDEpKSIKKwl0aGVuCisJCSMgUE9TSVgKKwkJcmV0dXJuIDAKKwllbGlmIHRlc3QgIiQyIiA9ICIkKCgyNTYgKyAkMSkpIgorCXRoZW4KKwkJIyBrc2gKKwkJcmV0dXJuIDAKKwlmaQorCXJldHVybiAxCit9CisKKyMgUmVhZCB1cCB0byAiJDEiIGJ5dGVzIChvciB0byBFT0YpIGZyb20gc3RkaW4gYW5kIHdyaXRlIHRoZW0gdG8gc3Rkb3V0LgordGVzdF9jb3B5X2J5dGVzICgpIHsKKwlwZXJsIC1lICcKKwkJbXkgJGxlbiA9ICRBUkdWWzFdOworCQl3aGlsZSAoJGxlbiA+IDApIHsKKwkJCW15ICRzOworCQkJbXkgJG5yZWFkID0gc3lzcmVhZChTVERJTiwgJHMsICRsZW4pOworCQkJZGllICJjYW5ub3QgcmVhZDogJCEiIHVubGVzcyBkZWZpbmVkKCRucmVhZCk7CisJCQlwcmludCAkczsKKwkJCSRsZW4gLT0gJG5yZWFkOworCQl9CisJJyAtICIkMSIKK30KZGlmZiAtLWdpdCBhL3QvdGVzdC1saWIuc2ggYi90L3Rlc3QtbGliLnNoCmluZGV4IDAwNTVlYmIuLmQ3MzFkNjYgMTAwNjQ0Ci0tLSBhL3QvdGVzdC1saWIuc2gKKysrIGIvdC90ZXN0LWxpYi5zaApAQCAtMTYyLDYgKzE2Miw5IEBACiAjIFplcm8gU0hBLTEKIF96NDA9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogCitFTVBUWV9UUkVFPTRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKK0VNUFRZX0JMT0I9ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQorCiAjIExpbmUgZmVlZAogTEY9JwogJwpAQCAtMTcwLDcgKzE3Myw3IEBACiAjIHdoZW4gY2FzZS1mb2xkaW5nIGZpbGVuYW1lcwogdTIwMGM9JChwcmludGYgJ1wzNDJcMjAwXDIxNCcpCiAKLWV4cG9ydCBfeDA1IF94NDAgX3o0MCBMRiB1MjAwYworZXhwb3J0IF94MDUgX3g0MCBfejQwIExGIHUyMDBjIEVNUFRZX1RSRUUgRU1QVFlfQkxPQgogCiAjIEVhY2ggdGVzdCBzaG91bGQgc3RhcnQgd2l0aCBzb21ldGhpbmcgbGlrZSB0aGlzLCBhZnRlciBjb3B5cmlnaHQgbm90aWNlczoKICMKQEAgLTc5OCw3ICs4MDEsNyBAQAogCSMgb3ZlcnJpZGUgYWxsIGdpdCBleGVjdXRhYmxlcyBpbiBURVNUX0RJUkVDVE9SWS8uLgogCUdJVF9WQUxHUklORD0kVEVTVF9ESVJFQ1RPUlkvdmFsZ3JpbmQKIAlta2RpciAtcCAiJEdJVF9WQUxHUklORCIvYmluCi0JZm9yIGZpbGUgaW4gJEdJVF9CVUlMRF9ESVIvZ2l0KiAkR0lUX0JVSUxEX0RJUi90ZXN0LSoKKwlmb3IgZmlsZSBpbiAkR0lUX0JVSUxEX0RJUi9naXQqICRHSVRfQlVJTERfRElSL3QvaGVscGVyL3Rlc3QtKgogCWRvCiAJCW1ha2VfdmFsZ3JpbmRfc3ltbGluayAkZmlsZQogCWRvbmUKQEAgLTExMTEsMyArMTExNCwxMiBAQAogfQogCiB0ZXN0X2xhenlfcHJlcmVxIENNRExJTkVfTElNSVQgJ3J1bl93aXRoX2xpbWl0ZWRfY21kbGluZSB0cnVlJworCitidWlsZF9vcHRpb24gKCkgeworCWdpdCB2ZXJzaW9uIC0tYnVpbGQtb3B0aW9ucyB8CisJc2VkIC1uZSAicy9eJDE6IC8vcCIKK30KKwordGVzdF9sYXp5X3ByZXJlcSBMT05HX0lTXzY0QklUICcKKwl0ZXN0IDggLWxlICIkKGJ1aWxkX29wdGlvbiBzaXplb2YtbG9uZykiCisnCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXByZS1yZWNlaXZlLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLXJlY2VpdmUuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZmQyOWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXByZS1yZWNlaXZlLnNhbXBsZQpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBtYWtlIHVzZSBvZiBwdXNoIG9wdGlvbnMuCisjIFRoZSBleGFtcGxlIHNpbXBseSBlY2hvZXMgYWxsIHB1c2ggb3B0aW9ucyB0aGF0IHN0YXJ0IHdpdGggJ2VjaG9iYWNrPScKKyMgYW5kIHJlamVjdHMgYWxsIHB1c2hlcyB3aGVuIHRoZSAicmVqZWN0IiBwdXNoIG9wdGlvbiBpcyB1c2VkLgorIworIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJwcmUtcmVjZWl2ZSIuCisKK2lmIHRlc3QgLW4gIiRHSVRfUFVTSF9PUFRJT05fQ09VTlQiCit0aGVuCisJaT0wCisJd2hpbGUgdGVzdCAiJGkiIC1sdCAiJEdJVF9QVVNIX09QVElPTl9DT1VOVCIKKwlkbworCQlldmFsICJ2YWx1ZT1cJEdJVF9QVVNIX09QVElPTl8kaSIKKwkJY2FzZSAiJHZhbHVlIiBpbgorCQllY2hvYmFjaz0qKQorCQkJZWNobyAiZWNobyBmcm9tIHRoZSBwcmUtcmVjZWl2ZS1ob29rOiAke3ZhbHVlIyo9fSIgPiYyCisJCQk7OworCQlyZWplY3QpCisJCQlleGl0IDEKKwkJZXNhYworCQlpPSQoKGkgKyAxKSkKKwlkb25lCitmaQpkaWZmIC0tZ2l0IGEvdHJhY2UuYyBiL3RyYWNlLmMKaW5kZXggNGFlZWE2MC4uNzUwOGFlYSAxMDA2NDQKLS0tIGEvdHJhY2UuYworKysgYi90cmFjZS5jCkBAIC0yNSwxNSArMjUsMjUgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgInF1b3RlLmgiCiAKKy8qCisgKiAiTm9ybWFsaXplIiBhIGtleSBhcmd1bWVudCBieSBjb252ZXJ0aW5nIE5VTEwgdG8gb3VyIHRyYWNlX2RlZmF1bHQsCisgKiBhbmQgb3RoZXJ3aXNlIHBhc3NpbmcgdGhyb3VnaCB0aGUgdmFsdWUuIEFsbCBjYWxsZXItZmFjaW5nIGZ1bmN0aW9ucworICogc2hvdWxkIG5vcm1hbGl6ZSB0aGVpciBpbnB1dHMgaW4gdGhpcyB3YXksIHRob3VnaCBtb3N0IGdldCBpdAorICogZm9yIGZyZWUgYnkgY2FsbGluZyBnZXRfdHJhY2VfZmQoKSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuCisgKi8KK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZV90cmFjZV9rZXkoc3RydWN0IHRyYWNlX2tleSAqKmtleSkKK3sKKwlzdGF0aWMgc3RydWN0IHRyYWNlX2tleSB0cmFjZV9kZWZhdWx0ID0geyAiR0lUX1RSQUNFIiB9OworCWlmICghKmtleSkKKwkJKmtleSA9ICZ0cmFjZV9kZWZhdWx0OworfQorCiAvKiBHZXQgYSB0cmFjZSBmaWxlIGRlc2NyaXB0b3IgZnJvbSAia2V5IiBlbnYgdmFyaWFibGUuICovCiBzdGF0aWMgaW50IGdldF90cmFjZV9mZChzdHJ1Y3QgdHJhY2Vfa2V5ICprZXkpCiB7Ci0Jc3RhdGljIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfZGVmYXVsdCA9IHsgIkdJVF9UUkFDRSIgfTsKIAljb25zdCBjaGFyICp0cmFjZTsKIAotCS8qIHVzZSBkZWZhdWx0ICJHSVRfVFJBQ0UiIGlmIE5VTEwgKi8KLQlpZiAoIWtleSkKLQkJa2V5ID0gJnRyYWNlX2RlZmF1bHQ7CisJbm9ybWFsaXplX3RyYWNlX2tleSgma2V5KTsKIAogCS8qIGRvbid0IG9wZW4gdHdpY2UgKi8KIAlpZiAoa2V5LT5pbml0aWFsaXplZCkKQEAgLTUxLDIyICs2MSwxOSBAQAogCWVsc2UgaWYgKGlzX2Fic29sdXRlX3BhdGgodHJhY2UpKSB7CiAJCWludCBmZCA9IG9wZW4odHJhY2UsIE9fV1JPTkxZIHwgT19BUFBFTkQgfCBPX0NSRUFULCAwNjY2KTsKIAkJaWYgKGZkID09IC0xKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiQ291bGQgbm90IG9wZW4gJyVzJyBmb3IgdHJhY2luZzogJXNcbiIKLQkJCQkiRGVmYXVsdGluZyB0byB0cmFjaW5nIG9uIHN0ZGVyci4uLlxuIiwKKwkJCXdhcm5pbmcoImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHRyYWNpbmc6ICVzIiwKIAkJCQl0cmFjZSwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCWtleS0+ZmQgPSBTVERFUlJfRklMRU5POworCQkJdHJhY2VfZGlzYWJsZShrZXkpOwogCQl9IGVsc2UgewogCQkJa2V5LT5mZCA9IGZkOwogCQkJa2V5LT5uZWVkX2Nsb3NlID0gMTsKIAkJfQogCX0gZWxzZSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiV2hhdCBkb2VzICclcycgZm9yICVzIG1lYW4/XG4iCi0JCQkiSWYgeW91IHdhbnQgdG8gdHJhY2UgaW50byBhIGZpbGUsIHRoZW4gcGxlYXNlIHNldCAiCi0JCQkiJXMgdG8gYW4gYWJzb2x1dGUgcGF0aG5hbWUgKHN0YXJ0aW5nIHdpdGggLykuXG4iCi0JCQkiRGVmYXVsdGluZyB0byB0cmFjaW5nIG9uIHN0ZGVyci4uLlxuIiwKLQkJCXRyYWNlLCBrZXktPmtleSwga2V5LT5rZXkpOwotCQlrZXktPmZkID0gU1RERVJSX0ZJTEVOTzsKKwkJd2FybmluZygidW5rbm93biB0cmFjZSB2YWx1ZSBmb3IgJyVzJzogJXNcbiIKKwkJCSIgICAgICAgICBJZiB5b3Ugd2FudCB0byB0cmFjZSBpbnRvIGEgZmlsZSwgdGhlbiBwbGVhc2Ugc2V0ICVzXG4iCisJCQkiICAgICAgICAgdG8gYW4gYWJzb2x1dGUgcGF0aG5hbWUgKHN0YXJ0aW5nIHdpdGggLykiLAorCQkJa2V5LT5rZXksIHRyYWNlLCBrZXktPmtleSk7CisJCXRyYWNlX2Rpc2FibGUoa2V5KTsKIAl9CiAKIAlrZXktPmluaXRpYWxpemVkID0gMTsKQEAgLTc1LDYgKzgyLDggQEAKIAogdm9pZCB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0cmFjZV9rZXkgKmtleSkKIHsKKwlub3JtYWxpemVfdHJhY2Vfa2V5KCZrZXkpOworCiAJaWYgKGtleS0+bmVlZF9jbG9zZSkKIAkJY2xvc2Uoa2V5LT5mZCk7CiAJa2V5LT5mZCA9IDA7CkBAIC04Miw5ICs5MSw2IEBACiAJa2V5LT5uZWVkX2Nsb3NlID0gMDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgZXJyX21zZ1tdID0gIkNvdWxkIG5vdCB0cmFjZSBpbnRvIGZkIGdpdmVuIGJ5ICIKLQkiR0lUX1RSQUNFIGVudmlyb25tZW50IHZhcmlhYmxlIjsKLQogc3RhdGljIGludCBwcmVwYXJlX3RyYWNlX2xpbmUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCiAJCQkgICAgICBzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIHN0cnVjdCBzdHJidWYgKmJ1ZikKIHsKQEAgLTEyMCwxOCArMTI2LDI3IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIHRyYWNlX3dyaXRlKHN0cnVjdCB0cmFjZV9rZXkgKmtleSwgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsZW4pCit7CisJaWYgKHdyaXRlX2luX2Z1bGwoZ2V0X3RyYWNlX2ZkKGtleSksIGJ1ZiwgbGVuKSA8IDApIHsKKwkJbm9ybWFsaXplX3RyYWNlX2tleSgma2V5KTsKKwkJd2FybmluZygidW5hYmxlIHRvIHdyaXRlIHRyYWNlIGZvciAlczogJXMiLAorCQkJa2V5LT5rZXksIHN0cmVycm9yKGVycm5vKSk7CisJCXRyYWNlX2Rpc2FibGUoa2V5KTsKKwl9Cit9CisKIHZvaWQgdHJhY2VfdmVyYmF0aW0oc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxlbikKIHsKIAlpZiAoIXRyYWNlX3dhbnQoa2V5KSkKIAkJcmV0dXJuOwotCXdyaXRlX29yX3doaW5lX3BpcGUoZ2V0X3RyYWNlX2ZkKGtleSksIGJ1ZiwgbGVuLCBlcnJfbXNnKTsKKwl0cmFjZV93cml0ZShrZXksIGJ1ZiwgbGVuKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfdHJhY2VfbGluZShzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIHN0cnVjdCBzdHJidWYgKmJ1ZikKIHsKIAlzdHJidWZfY29tcGxldGVfbGluZShidWYpOwotCi0Jd3JpdGVfb3Jfd2hpbmVfcGlwZShnZXRfdHJhY2VfZmQoa2V5KSwgYnVmLT5idWYsIGJ1Zi0+bGVuLCBlcnJfbXNnKTsKKwl0cmFjZV93cml0ZShrZXksIGJ1Zi0+YnVmLCBidWYtPmxlbik7CiAJc3RyYnVmX3JlbGVhc2UoYnVmKTsKIH0KIApkaWZmIC0tZ2l0IGEvdHJhaWxlci5jIGIvdHJhaWxlci5jCmluZGV4IDhlNDhhNWMuLmM2ZWE5YWMgMTAwNjQ0Ci0tLSBhL3RyYWlsZXIuYworKysgYi90cmFpbGVyLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogCQkJd2FybmluZyhfKCJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIiksIHZhbHVlLCBjb25mX2tleSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRpZSgiaW50ZXJuYWwgYnVnIGluIHRyYWlsZXIuYyIpOworCQlkaWUoIkJVRzogdHJhaWxlci5jOiB1bmhhbmRsZWQgdHlwZSAlZCIsIHR5cGUpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC1oZWxwZXIuYyBiL3RyYW5zcG9ydC1oZWxwZXIuYwppbmRleCBiZDY2NmIyLi5kYjJmOTMwIDEwMDY0NAotLS0gYS90cmFuc3BvcnQtaGVscGVyLmMKKysrIGIvdHJhbnNwb3J0LWhlbHBlci5jCkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogCQkJCSgqdGFpbCktPnN0YXR1cyB8PSBSRUZfU1RBVFVTX1VQVE9EQVRFOwogCQkJCWlmIChyZWFkX3JlZigoKnRhaWwpLT5uYW1lLAogCQkJCQkgICAgICgqdGFpbCktPm9sZF9vaWQuaGFzaCkgPCAwKQotCQkJCQlkaWUoTl8oIkNvdWxkIG5vdCByZWFkIHJlZiAlcyIpLAorCQkJCQlkaWUoXygiQ291bGQgbm90IHJlYWQgcmVmICVzIiksCiAJCQkJCSAgICAoKnRhaWwpLT5uYW1lKTsKIAkJCX0KIAkJfQpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIH0KIAogLyogU3RyZWFtIHN0YXRlOiBNb3JlIGRhdGEgbWF5IGJlIGNvbWluZyBpbiB0aGlzIGRpcmVjdGlvbi4gKi8KLSNkZWZpbmUgU1NUQVRFX1RSQU5TRkVSSU5HIDAKKyNkZWZpbmUgU1NUQVRFX1RSQU5TRkVSUklORyAwCiAvKgogICogU3RyZWFtIHN0YXRlOiBObyBtb3JlIGRhdGEgY29taW5nIGluIHRoaXMgZGlyZWN0aW9uLCBmbHVzaGluZyByZXN0IG9mCiAgKiBkYXRhLgpAQCAtMTExMiw3ICsxMTEyLDcgQEAKIC8qIFN0cmVhbSBzdGF0ZTogVHJhbnNmZXIgaW4gdGhpcyBkaXJlY3Rpb24gZmluaXNoZWQuICovCiAjZGVmaW5lIFNTVEFURV9GSU5JU0hFRCAyCiAKLSNkZWZpbmUgU1RBVEVfTkVFRFNfUkVBRElORyhzdGF0ZSkgKChzdGF0ZSkgPD0gU1NUQVRFX1RSQU5TRkVSSU5HKQorI2RlZmluZSBTVEFURV9ORUVEU19SRUFESU5HKHN0YXRlKSAoKHN0YXRlKSA8PSBTU1RBVEVfVFJBTlNGRVJSSU5HKQogI2RlZmluZSBTVEFURV9ORUVEU19XUklUSU5HKHN0YXRlKSAoKHN0YXRlKSA8PSBTU1RBVEVfRkxVU0hJTkcpCiAjZGVmaW5lIFNUQVRFX05FRURTX0NMT1NJTkcoc3RhdGUpICgoc3RhdGUpID09IFNTVEFURV9GTFVTSElORykKIApAQCAtMTM2OSw3ICsxMzY5LDcgQEAKIAlzdGF0ZS5wdGcuZGVzdCA9IDE7CiAJc3RhdGUucHRnLnNyY19pc19zb2NrID0gKGlucHV0ID09IG91dHB1dCk7CiAJc3RhdGUucHRnLmRlc3RfaXNfc29jayA9IDA7Ci0Jc3RhdGUucHRnLnN0YXRlID0gU1NUQVRFX1RSQU5TRkVSSU5HOworCXN0YXRlLnB0Zy5zdGF0ZSA9IFNTVEFURV9UUkFOU0ZFUlJJTkc7CiAJc3RhdGUucHRnLmJ1ZnVzZSA9IDA7CiAJc3RhdGUucHRnLnNyY19uYW1lID0gInJlbW90ZSBpbnB1dCI7CiAJc3RhdGUucHRnLmRlc3RfbmFtZSA9ICJzdGRvdXQiOwpAQCAtMTM3OCw3ICsxMzc4LDcgQEAKIAlzdGF0ZS5ndHAuZGVzdCA9IG91dHB1dDsKIAlzdGF0ZS5ndHAuc3JjX2lzX3NvY2sgPSAwOwogCXN0YXRlLmd0cC5kZXN0X2lzX3NvY2sgPSAoaW5wdXQgPT0gb3V0cHV0KTsKLQlzdGF0ZS5ndHAuc3RhdGUgPSBTU1RBVEVfVFJBTlNGRVJJTkc7CisJc3RhdGUuZ3RwLnN0YXRlID0gU1NUQVRFX1RSQU5TRkVSUklORzsKIAlzdGF0ZS5ndHAuYnVmdXNlID0gMDsKIAlzdGF0ZS5ndHAuc3JjX25hbWUgPSAic3RkaW4iOwogCXN0YXRlLmd0cC5kZXN0X25hbWUgPSAicmVtb3RlIG91dHB1dCI7CmRpZmYgLS1naXQgYS90cmFuc3BvcnQuYyBiL3RyYW5zcG9ydC5jCmluZGV4IDA5NWU2MWYuLmNmOGRlNmUgMTAwNjQ0Ci0tLSBhL3RyYW5zcG9ydC5jCisrKyBiL3RyYW5zcG9ydC5jCkBAIC01OSw3ICs1OSw3IEBACiAJCQkJbG9jYWxuYW1lICsgMTEsIHRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lLAogCQkJCXJlbW90ZW5hbWUpOwogCQllbHNlCi0JCQlwcmludGYoIldvdWxkIHNldCB1cHN0cmVhbSBvZiAnJXMnIHRvICclcycgb2YgJyVzJ1xuIiwKKwkJCXByaW50ZihfKCJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIpLAogCQkJCWxvY2FsbmFtZSArIDExLCByZW1vdGVuYW1lICsgMTEsCiAJCQkJdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWUpOwogCX0KQEAgLTE0OCw3ICsxNDgsNyBAQAogCQkJY2hhciAqZW5kOwogCQkJb3B0cy0+ZGVwdGggPSBzdHJ0b2wodmFsdWUsICZlbmQsIDApOwogCQkJaWYgKCplbmQpCi0JCQkJZGllKCJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciLCB2YWx1ZSk7CisJCQkJZGllKF8oInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIpLCB2YWx1ZSk7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzIxLDExICszMjEsNiBAQAogCX0KIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKnN0YXR1c19hYmJyZXYodW5zaWduZWQgY2hhciBzaGExWzIwXSkKLXsKLQlyZXR1cm4gZmluZF91bmlxdWVfYWJicmV2KHNoYTEsIERFRkFVTFRfQUJCUkVWKTsKLX0KLQogc3RhdGljIHZvaWQgcHJpbnRfb2tfcmVmX3N0YXR1cyhzdHJ1Y3QgcmVmICpyZWYsIGludCBwb3JjZWxhaW4pCiB7CiAJaWYgKHJlZi0+ZGVsZXRpb24pCkBAIC0zNDAsNyArMzM1LDggQEAKIAkJY2hhciB0eXBlOwogCQljb25zdCBjaGFyICptc2c7CiAKLQkJc3RyYnVmX2FkZHN0cigmcXVpY2tyZWYsIHN0YXR1c19hYmJyZXYocmVmLT5vbGRfb2lkLmhhc2gpKTsKKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KCZxdWlja3JlZiwgcmVmLT5vbGRfb2lkLmhhc2gsCisJCQkJCSBERUZBVUxUX0FCQlJFVik7CiAJCWlmIChyZWYtPmZvcmNlZF91cGRhdGUpIHsKIAkJCXN0cmJ1Zl9hZGRzdHIoJnF1aWNrcmVmLCAiLi4uIik7CiAJCQl0eXBlID0gJysnOwpAQCAtMzUwLDcgKzM0Niw4IEBACiAJCQl0eXBlID0gJyAnOwogCQkJbXNnID0gTlVMTDsKIAkJfQotCQlzdHJidWZfYWRkc3RyKCZxdWlja3JlZiwgc3RhdHVzX2FiYnJldihyZWYtPm5ld19vaWQuaGFzaCkpOworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJnF1aWNrcmVmLCByZWYtPm5ld19vaWQuaGFzaCwKKwkJCQkJIERFRkFVTFRfQUJCUkVWKTsKIAogCQlwcmludF9yZWZfc3RhdHVzKHR5cGUsIHF1aWNrcmVmLmJ1ZiwgcmVmLCByZWYtPnBlZXJfcmVmLCBtc2csIHBvcmNlbGFpbik7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZxdWlja3JlZik7CkBAIC0zNTksOCArMzU2LDExIEBACiAKIHN0YXRpYyBpbnQgcHJpbnRfb25lX3B1c2hfc3RhdHVzKHN0cnVjdCByZWYgKnJlZiwgY29uc3QgY2hhciAqZGVzdCwgaW50IGNvdW50LCBpbnQgcG9yY2VsYWluKQogewotCWlmICghY291bnQpCi0JCWZwcmludGYocG9yY2VsYWluID8gc3Rkb3V0IDogc3RkZXJyLCAiVG8gJXNcbiIsIGRlc3QpOworCWlmICghY291bnQpIHsKKwkJY2hhciAqdXJsID0gdHJhbnNwb3J0X2Fub255bWl6ZV91cmwoZGVzdCk7CisJCWZwcmludGYocG9yY2VsYWluID8gc3Rkb3V0IDogc3RkZXJyLCAiVG8gJXNcbiIsIHVybCk7CisJCWZyZWUodXJsKTsKKwl9CiAKIAlzd2l0Y2gocmVmLT5zdGF0dXMpIHsKIAljYXNlIFJFRl9TVEFUVVNfTk9ORToKQEAgLTUxMCw2ICs1MTAsNyBAQAogCWFyZ3MuZHJ5X3J1biA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTik7CiAJYXJncy5wb3JjZWxhaW4gPSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX1BPUkNFTEFJTik7CiAJYXJncy5hdG9taWMgPSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FUT01JQyk7CisJYXJncy5wdXNoX29wdGlvbnMgPSB0cmFuc3BvcnQtPnB1c2hfb3B0aW9uczsKIAlhcmdzLnVybCA9IHRyYW5zcG9ydC0+dXJsOwogCiAJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfQ0VSVF9BTFdBWVMpCkBAIC01NjMsNyArNTY0LDcgQEAKIAlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhOwogCiAJaWYgKCF0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMpCi0JCWRpZSgiQnVnIGRldGVjdGVkOiBUYWtpbmcgb3ZlciB0cmFuc3BvcnQgcmVxdWlyZXMgbm9uLU5VTEwgIgorCQlkaWUoIkJVRzogdGFraW5nIG92ZXIgdHJhbnNwb3J0IHJlcXVpcmVzIG5vbi1OVUxMICIKIAkJICAgICJzbWFydF9vcHRpb25zIGZpZWxkLiIpOwogCiAJZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CkBAIC03NjcsMTkgKzc2OCwxOSBAQAogewogCWludCBpOwogCi0JZnByaW50ZihzdGRlcnIsICJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKLQkJCSJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIpOworCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKwkJCSJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIpKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmVlZHNfcHVzaGluZy0+bnI7IGkrKykKIAkJcHJpbnRmKCIgICVzXG4iLCBuZWVkc19wdXNoaW5nLT5pdGVtc1tpXS5zdHJpbmcpOwotCWZwcmludGYoc3RkZXJyLCAiXG5QbGVhc2UgdHJ5XG5cbiIKLQkJCSIJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG5cbiIKLQkJCSJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG5cbiIKLQkJCSIJZ2l0IHB1c2hcblxuIgotCQkJInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cblxuIik7CisJZnByaW50ZihzdGRlcnIsIF8oIlxuUGxlYXNlIHRyeVxuXG4iCisJCQkgICIJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG5cbiIKKwkJCSAgIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcblxuIgorCQkJICAiCWdpdCBwdXNoXG5cbiIKKwkJCSAgInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cblxuIikpOwogCiAJc3RyaW5nX2xpc3RfY2xlYXIobmVlZHNfcHVzaGluZywgMCk7CiAKLQlkaWUoIkFib3J0aW5nLiIpOworCWRpZShfKCJBYm9ydGluZy4iKSk7CiB9CiAKIHN0YXRpYyBpbnQgcnVuX3ByZV9wdXNoX2hvb2soc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LApkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LmggYi90cmFuc3BvcnQuaAppbmRleCBjNjgxNDA4Li42ZmUzNDg1IDEwMDY0NAotLS0gYS90cmFuc3BvcnQuaAorKysgYi90cmFuc3BvcnQuaApAQCAtNDgsNiArNDgsMTIgQEAKIAkgKi8KIAl1bnNpZ25lZCBjbG9uaW5nIDogMTsKIAorCS8qCisJICogVGhlc2Ugc3RyaW5ncyB3aWxsIGJlIHBhc3NlZCB0byB0aGUge3ByZSwgcG9zdH0tcmVjZWl2ZSBob29rLAorCSAqIG9uIHRoZSByZW1vdGUgc2lkZSwgaWYgYm90aCBzaWRlcyBzdXBwb3J0IHRoZSBwdXNoIG9wdGlvbnMgY2FwYWJpbGl0eS4KKwkgKi8KKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnB1c2hfb3B0aW9uczsKKwogCS8qKgogCSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBwb3NpdGl2ZSBpZiB0aGUgb3B0aW9uIGlzIG5vdAogCSAqIHJlY29nbml6ZWQgb3IgaXMgaW5hcHBsaWNhYmxlLCBhbmQgbmVnYXRpdmUgaWYgdGhlIG9wdGlvbgpAQCAtMTM0LDYgKzE0MCw3IEBACiAjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX0NFUlRfQUxXQVlTIDIwNDgKICNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfQ0VSVF9JRl9BU0tFRCA0MDk2CiAjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX0FUT01JQyA4MTkyCisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX09QVElPTlMgMTYzODQKIAogI2RlZmluZSBUUkFOU1BPUlRfU1VNTUFSWV9XSURUSCAoMiAqIERFRkFVTFRfQUJCUkVWICsgMykKICNkZWZpbmUgVFJBTlNQT1JUX1NVTU1BUlkoeCkgKGludCkoVFJBTlNQT1JUX1NVTU1BUllfV0lEVEggKyBzdHJsZW4oeCkgLSBnZXR0ZXh0X3dpZHRoKHgpKSwgKHgpCmRpZmYgLS1naXQgYS90cmVlLWRpZmYuYyBiL3RyZWUtZGlmZi5jCmluZGV4IGZmNGUwZDMuLmUxNjRlNTMgMTAwNjQ0Ci0tLSBhL3RyZWUtZGlmZi5jCisrKyBiL3RyZWUtZGlmZi5jCkBAIC0xNCw2ICsxNCwxNiBAQAogICovCiAjZGVmaW5lIFNfSUZYTUlOX05FUQlTX0RJRkZUUkVFX0lGWE1JTl9ORVEKIAorI2RlZmluZSBGQVNUX0FSUkFZX0FMTE9DKHgsIG5yKSBkbyB7IFwKKwlpZiAoKG5yKSA8PSAyKSBcCisJCSh4KSA9IHhhbGxvY2EoKG5yKSAqIHNpemVvZigqKHgpKSk7IFwKKwllbHNlIFwKKwkJQUxMT0NfQVJSQVkoKHgpLCBucik7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgRkFTVF9BUlJBWV9GUkVFKHgsIG5yKSBkbyB7IFwKKwlpZiAoKG5yKSA+IDIpIFwKKwkJZnJlZSgoeCkpOyBcCit9IHdoaWxlKDApCiAKIHN0YXRpYyBzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmxsX2RpZmZfdHJlZV9wYXRocygKIAlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCkBAIC0yNjUsNyArMjc1LDcgQEAKIAlpZiAocmVjdXJzZSkgewogCQljb25zdCB1bnNpZ25lZCBjaGFyICoqcGFyZW50c19zaGExOwogCi0JCXBhcmVudHNfc2hhMSA9IHhhbGxvY2EobnBhcmVudCAqIHNpemVvZihwYXJlbnRzX3NoYTFbMF0pKTsKKwkJRkFTVF9BUlJBWV9BTExPQyhwYXJlbnRzX3NoYTEsIG5wYXJlbnQpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnBhcmVudDsgKytpKSB7CiAJCQkvKiBzYW1lIHJ1bGUgYXMgaW4gZW1pdHRoaXMgKi8KIAkJCWludCB0cGlfdmFsaWQgPSB0cCAmJiAhKHRwW2ldLmVudHJ5Lm1vZGUgJiBTX0lGWE1JTl9ORVEpOwpAQCAtMjc3LDcgKzI4Nyw3IEBACiAJCXN0cmJ1Zl9hZGQoYmFzZSwgcGF0aCwgcGF0aGxlbik7CiAJCXN0cmJ1Zl9hZGRjaChiYXNlLCAnLycpOwogCQlwID0gbGxfZGlmZl90cmVlX3BhdGhzKHAsIHNoYTEsIHBhcmVudHNfc2hhMSwgbnBhcmVudCwgYmFzZSwgb3B0KTsKLQkJeGFsbG9jYV9mcmVlKHBhcmVudHNfc2hhMSk7CisJCUZBU1RfQVJSQVlfRlJFRShwYXJlbnRzX3NoYTEsIG5wYXJlbnQpOwogCX0KIAogCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgb2xkX2Jhc2VsZW4pOwpAQCAtNDAyLDggKzQxMiw4IEBACiAJdm9pZCAqdHRyZWUsICoqdHB0cmVlOwogCWludCBpOwogCi0JdHAgICAgID0geGFsbG9jYShucGFyZW50ICogc2l6ZW9mKHRwWzBdKSk7Ci0JdHB0cmVlID0geGFsbG9jYShucGFyZW50ICogc2l6ZW9mKHRwdHJlZVswXSkpOworCUZBU1RfQVJSQVlfQUxMT0ModHAsIG5wYXJlbnQpOworCUZBU1RfQVJSQVlfQUxMT0ModHB0cmVlLCBucGFyZW50KTsKIAogCS8qCiAJICogbG9hZCBwYXJlbnRzIGZpcnN0LCBhcyB0aGV5IGFyZSBwcm9iYWJseSBhbHJlYWR5IGNhY2hlZC4KQEAgLTUzMSw4ICs1NDEsOCBAQAogCWZyZWUodHRyZWUpOwogCWZvciAoaSA9IG5wYXJlbnQtMTsgaSA+PSAwOyBpLS0pCiAJCWZyZWUodHB0cmVlW2ldKTsKLQl4YWxsb2NhX2ZyZWUodHB0cmVlKTsKLQl4YWxsb2NhX2ZyZWUodHApOworCUZBU1RfQVJSQVlfRlJFRSh0cHRyZWUsIG5wYXJlbnQpOworCUZBU1RfQVJSQVlfRlJFRSh0cCwgbnBhcmVudCk7CiAKIAlyZXR1cm4gcDsKIH0KQEAgLTYwNyw3ICs2MTcsNyBAQAogCWRpZmZfc2V0dXBfZG9uZSgmZGlmZl9vcHRzKTsKIAlsbF9kaWZmX3RyZWVfc2hhMShvbGQsIG5ldywgYmFzZSwgJmRpZmZfb3B0cyk7CiAJZGlmZmNvcmVfc3RkKCZkaWZmX29wdHMpOwotCWZyZWVfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYyk7CisJY2xlYXJfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYyk7CiAKIAkvKiBHbyB0aHJvdWdoIHRoZSBuZXcgc2V0IG9mIGZpbGVwYWlyaW5nLCBhbmQgc2VlIGlmIHdlIGZpbmQgYSBtb3JlIGludGVyZXN0aW5nIG9uZSAqLwogCW9wdC0+Zm91bmRfZm9sbG93ID0gMDsKQEAgLTYzMCw3ICs2NDAsNyBAQAogCQkJLyogVXBkYXRlIHRoZSBwYXRoIHdlIHVzZSBmcm9tIG5vdyBvbi4uICovCiAJCQlwYXRoWzBdID0gcC0+b25lLT5wYXRoOwogCQkJcGF0aFsxXSA9IE5VTEw7Ci0JCQlmcmVlX3BhdGhzcGVjKCZvcHQtPnBhdGhzcGVjKTsKKwkJCWNsZWFyX3BhdGhzcGVjKCZvcHQtPnBhdGhzcGVjKTsKIAkJCXBhcnNlX3BhdGhzcGVjKCZvcHQtPnBhdGhzcGVjLAogCQkJCSAgICAgICBQQVRIU1BFQ19BTExfTUFHSUMgJiB+UEFUSFNQRUNfTElURVJBTCwKIAkJCQkgICAgICAgUEFUSFNQRUNfTElURVJBTF9QQVRILCAiIiwgcGF0aCk7CmRpZmYgLS1naXQgYS91bnBhY2stdHJlZXMuYyBiL3VucGFjay10cmVlcy5jCmluZGV4IDZiYzk1MTIuLjExYzM3ZmIgMTAwNjQ0Ci0tLSBhL3VucGFjay10cmVlcy5jCisrKyBiL3VucGFjay10cmVlcy5jCkBAIC02MiwxNyArNjIsMTcgQEAKIAlpZiAoIXN0cmNtcChjbWQsICJjaGVja291dCIpKQogCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQogCQkgICAgICA/IF8oIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuJSVzIgotCQkJICAiUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IGNhbiBzd2l0Y2ggYnJhbmNoZXMuIikKKwkJCSAgIlBsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIikKIAkJICAgICAgOiBfKCJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiUlcyIpOwogCWVsc2UgaWYgKCFzdHJjbXAoY21kLCAibWVyZ2UiKSkKIAkJbXNnID0gYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UKIAkJICAgICAgPyBfKCJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiUlcyIKLQkJCSAgIlBsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIikKKwkJCSAgIlBsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iKQogCQkgICAgICA6IF8oIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuJSVzIik7CiAJZWxzZQogCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQogCQkgICAgICA/IF8oIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuJSVzIgotCQkJICAiUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IGNhbiAlcy4iKQorCQkJICAiUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIpCiAJCSAgICAgIDogXygiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4lJXMiKTsKIAltc2dzW0VSUk9SX1dPVUxEX09WRVJXUklURV0gPSBtc2dzW0VSUk9SX05PVF9VUFRPREFURV9GSUxFXSA9CiAJCXhzdHJmbXQobXNnLCBjbWQsIGNtZCk7CkBAIC04MywzNCArODMsMzQgQEAKIAlpZiAoIXN0cmNtcChjbWQsICJjaGVja291dCIpKQogCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQogCQkgICAgICA/IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuJSVzIgotCQkJICAiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBjYW4gc3dpdGNoIGJyYW5jaGVzLiIpCisJCQkgICJQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iKQogCQkgICAgICA6IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuJSVzIik7CiAJZWxzZSBpZiAoIXN0cmNtcChjbWQsICJtZXJnZSIpKQogCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQogCQkgICAgICA/IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuJSVzIgotCQkJICAiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIikKKwkJCSAgIlBsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIikKIAkJICAgICAgOiBfKCJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiUlcyIpOwogCWVsc2UKIAkJbXNnID0gYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UKIAkJICAgICAgPyBfKCJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiUlcyIKLQkJCSAgIlBsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgY2FuICVzLiIpCisJCQkgICJQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIpCiAJCSAgICAgIDogXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4lJXMiKTsKIAltc2dzW0VSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX1JFTU9WRURdID0geHN0cmZtdChtc2csIGNtZCwgY21kKTsKIAogCWlmICghc3RyY21wKGNtZCwgImNoZWNrb3V0IikpCiAJCW1zZyA9IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlCiAJCSAgICAgID8gXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuJSVzIgotCQkJICAiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBjYW4gc3dpdGNoIGJyYW5jaGVzLiIpCisJCQkgICJQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iKQogCQkgICAgICA6IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiUlcyIpOwogCWVsc2UgaWYgKCFzdHJjbXAoY21kLCAibWVyZ2UiKSkKIAkJbXNnID0gYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UKIAkJICAgICAgPyBfKCJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4lJXMiCi0JCQkgICJQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IGNhbiBtZXJnZS4iKQorCQkJICAiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iKQogCQkgICAgICA6IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiUlcyIpOwogCWVsc2UKIAkJbXNnID0gYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UKIAkJICAgICAgPyBfKCJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4lJXMiCi0JCQkgICJQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IGNhbiAlcy4iKQorCQkJICAiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iKQogCQkgICAgICA6IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiUlcyIpOwogCW1zZ3NbRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfT1ZFUldSSVRURU5dID0geHN0cmZtdChtc2csIGNtZCwgY21kKTsKIApkaWZmIC0tZ2l0IGEvdXBsb2FkLXBhY2suYyBiL3VwbG9hZC1wYWNrLmMKaW5kZXggZjE5NDQ0ZC4uY2E3Zjk0MSAxMDA2NDQKLS0tIGEvdXBsb2FkLXBhY2suYworKysgYi91cGxvYWQtcGFjay5jCkBAIC0xNCw4ICsxNCwxMiBAQAogI2luY2x1ZGUgInNpZ2NoYWluLmgiCiAjaW5jbHVkZSAidmVyc2lvbi5oIgogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgogCi1zdGF0aWMgY29uc3QgY2hhciB1cGxvYWRfcGFja191c2FnZVtdID0gImdpdCB1cGxvYWQtcGFjayBbLS1zdHJpY3RdIFstLXRpbWVvdXQ9PG4+XSA8ZGlyPiI7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVwbG9hZF9wYWNrX3VzYWdlW10gPSB7CisJTl8oImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIpLAorCU5VTEwKK307CiAKIC8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCiAjZGVmaW5lIFRIRVlfSEFWRQkoMXUgPDwgMTEpCkBAIC01MiwyNiArNTYsMjggQEAKIHN0YXRpYyBpbnQgdXNlX3NpZGViYW5kOwogc3RhdGljIGludCBhZHZlcnRpc2VfcmVmczsKIHN0YXRpYyBpbnQgc3RhdGVsZXNzX3JwYzsKK3N0YXRpYyBjb25zdCBjaGFyICpwYWNrX29iamVjdHNfaG9vazsKIAogc3RhdGljIHZvaWQgcmVzZXRfdGltZW91dCh2b2lkKQogewogCWFsYXJtKHRpbWVvdXQpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZW5kX2NsaWVudF9kYXRhKGludCBmZCwgY29uc3QgY2hhciAqZGF0YSwgc3NpemVfdCBzeikKK3N0YXRpYyB2b2lkIHNlbmRfY2xpZW50X2RhdGEoaW50IGZkLCBjb25zdCBjaGFyICpkYXRhLCBzc2l6ZV90IHN6KQogewotCWlmICh1c2Vfc2lkZWJhbmQpCi0JCXJldHVybiBzZW5kX3NpZGViYW5kKDEsIGZkLCBkYXRhLCBzeiwgdXNlX3NpZGViYW5kKTsKKwlpZiAodXNlX3NpZGViYW5kKSB7CisJCXNlbmRfc2lkZWJhbmQoMSwgZmQsIGRhdGEsIHN6LCB1c2Vfc2lkZWJhbmQpOworCQlyZXR1cm47CisJfQogCWlmIChmZCA9PSAzKQogCQkvKiBlbWVyZ2VuY3kgcXVpdCAqLwogCQlmZCA9IDI7CiAJaWYgKGZkID09IDIpIHsKIAkJLyogWFhYOiBhcmUgd2UgaGFwcHkgdG8gbG9zZSBzdHVmZiBoZXJlPyAqLwogCQl4d3JpdGUoZmQsIGRhdGEsIHN6KTsKLQkJcmV0dXJuIHN6OworCQlyZXR1cm47CiAJfQogCXdyaXRlX29yX2RpZShmZCwgZGF0YSwgc3opOwotCXJldHVybiBzejsKIH0KIAogc3RhdGljIGludCB3cml0ZV9vbmVfc2hhbGxvdyhjb25zdCBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCwgdm9pZCAqY2JfZGF0YSkKQEAgLTkzLDYgKzk5LDE0IEBACiAJaW50IGk7CiAJRklMRSAqcGlwZV9mZDsKIAorCWlmICghcGFja19vYmplY3RzX2hvb2spCisJCXBhY2tfb2JqZWN0cy5naXRfY21kID0gMTsKKwllbHNlIHsKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29iamVjdHMuYXJncywgcGFja19vYmplY3RzX2hvb2spOworCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiZ2l0Iik7CisJCXBhY2tfb2JqZWN0cy51c2Vfc2hlbGwgPSAxOworCX0KKwogCWlmIChzaGFsbG93X25yKSB7CiAJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vYmplY3RzLmFyZ3MsICItLXNoYWxsb3ctZmlsZSIpOwogCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiIik7CkBAIC0xMTUsNyArMTI5LDYgQEAKIAlwYWNrX29iamVjdHMuaW4gPSAtMTsKIAlwYWNrX29iamVjdHMub3V0ID0gLTE7CiAJcGFja19vYmplY3RzLmVyciA9IC0xOwotCXBhY2tfb2JqZWN0cy5naXRfY21kID0gMTsKIAogCWlmIChzdGFydF9jb21tYW5kKCZwYWNrX29iamVjdHMpKQogCQlkaWUoImdpdCB1cGxvYWQtcGFjazogdW5hYmxlIHRvIGZvcmsgZ2l0LXBhY2stb2JqZWN0cyIpOwpAQCAtMjI5LDkgKzI0Miw3IEBACiAJCQl9CiAJCQllbHNlCiAJCQkJYnVmZmVyZWQgPSAtMTsKLQkJCXN6ID0gc2VuZF9jbGllbnRfZGF0YSgxLCBkYXRhLCBzeik7Ci0JCQlpZiAoc3ogPCAwKQotCQkJCWdvdG8gZmFpbDsKKwkJCXNlbmRfY2xpZW50X2RhdGEoMSwgZGF0YSwgc3opOwogCQl9CiAKIAkJLyoKQEAgLTI1OCw5ICsyNjksNyBAQAogCS8qIGZsdXNoIHRoZSBkYXRhICovCiAJaWYgKDAgPD0gYnVmZmVyZWQpIHsKIAkJZGF0YVswXSA9IGJ1ZmZlcmVkOwotCQlzeiA9IHNlbmRfY2xpZW50X2RhdGEoMSwgZGF0YSwgMSk7Ci0JCWlmIChzeiA8IDApCi0JCQlnb3RvIGZhaWw7CisJCXNlbmRfY2xpZW50X2RhdGEoMSwgZGF0YSwgMSk7CiAJCWZwcmludGYoc3RkZXJyLCAiZmx1c2hlZC5cbiIpOwogCX0KIAlpZiAodXNlX3NpZGViYW5kKQpAQCAtODEyLDU2ICs4MjEsNDMgQEAKIAkJa2VlcGFsaXZlID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CiAJCWlmICgha2VlcGFsaXZlKQogCQkJa2VlcGFsaXZlID0gLTE7CisJfSBlbHNlIGlmIChjdXJyZW50X2NvbmZpZ19zY29wZSgpICE9IENPTkZJR19TQ09QRV9SRVBPKSB7CisJCWlmICghc3RyY21wKCJ1cGxvYWRwYWNrLnBhY2tvYmplY3RzaG9vayIsIHZhcikpCisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnBhY2tfb2JqZWN0c19ob29rLCB2YXIsIHZhbHVlKTsKIAl9CiAJcmV0dXJuIHBhcnNlX2hpZGVfcmVmc19jb25maWcodmFyLCB2YWx1ZSwgInVwbG9hZHBhY2siKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQljaGFyICpkaXI7Ci0JaW50IGk7CisJY29uc3QgY2hhciAqZGlyOwogCWludCBzdHJpY3QgPSAwOwotCi0JZ2l0X3NldHVwX2dldHRleHQoKTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgInN0YXRlbGVzcy1ycGMiLCAmc3RhdGVsZXNzX3JwYywKKwkJCSBOXygicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIikpLAorCQlPUFRfQk9PTCgwLCAiYWR2ZXJ0aXNlLXJlZnMiLCAmYWR2ZXJ0aXNlX3JlZnMsCisJCQkgTl8oImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIpKSwKKwkJT1BUX0JPT0woMCwgInN0cmljdCIsICZzdHJpY3QsCisJCQkgTl8oImRvIG5vdCB0cnkgPGRpcmVjdG9yeT4vLmdpdC8gaWYgPGRpcmVjdG9yeT4gaXMgbm8gR2l0IGRpcmVjdG9yeSIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInRpbWVvdXQiLCAmdGltZW91dCwKKwkJCSAgICBOXygiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiKSksCisJCU9QVF9FTkQoKQorCX07CiAKIAlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoInVwbG9hZC1wYWNrIik7Ci0JZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKIAljaGVja19yZXBsYWNlX3JlZnMgPSAwOwogCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQljaGFyICphcmcgPSBhcmd2W2ldOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIHVwbG9hZF9wYWNrX3VzYWdlLCAwKTsKIAotCQlpZiAoYXJnWzBdICE9ICctJykKLQkJCWJyZWFrOwotCQlpZiAoIXN0cmNtcChhcmcsICItLWFkdmVydGlzZS1yZWZzIikpIHsKLQkJCWFkdmVydGlzZV9yZWZzID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tc3RhdGVsZXNzLXJwYyIpKSB7Ci0JCQlzdGF0ZWxlc3NfcnBjID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tc3RyaWN0IikpIHsKLQkJCXN0cmljdCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS10aW1lb3V0PSIpKSB7Ci0JCQl0aW1lb3V0ID0gYXRvaShhcmcrMTApOwotCQkJZGFlbW9uX21vZGUgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgewotCQkJaSsrOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVwbG9hZF9wYWNrX3VzYWdlLCBvcHRpb25zKTsKIAotCWlmIChpICE9IGFyZ2MtMSkKLQkJdXNhZ2UodXBsb2FkX3BhY2tfdXNhZ2UpOworCWlmICh0aW1lb3V0KQorCQlkYWVtb25fbW9kZSA9IDE7CiAKIAlzZXR1cF9wYXRoKCk7CiAKLQlkaXIgPSBhcmd2W2ldOworCWRpciA9IGFyZ3ZbMF07CiAKIAlpZiAoIWVudGVyX3JlcG8oZGlyLCBzdHJpY3QpKQogCQlkaWUoIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnkiLCBkaXIpOwpkaWZmIC0tZ2l0IGEvdXNlcmRpZmYuYyBiL3VzZXJkaWZmLmMKaW5kZXggNmJmMjUwNS4uMjEyNWQ2ZCAxMDA2NDQKLS0tIGEvdXNlcmRpZmYuYworKysgYi91c2VyZGlmZi5jCkBAIC0xNDgsNiArMTQ4LDE4IEBACiAJICJbYS16QS1aX11bYS16QS1aMC05X10qIgogCSAifFstKzAtOS5lXStbZkZsTF0/fDBbeFhiQl0/WzAtOWEtZkEtRl0rW2xMXT8iCiAJICJ8Wy0rKi88PiUmXnw9IV09fC0tfFxcK1xcK3w8PD0/fD4+PT98JiZ8XFx8XFx8fDo6fC0+IiksCitJUEFUVEVSTigiY3NzIiwKKwkgIiFbOjtdW1s6c3BhY2U6XV0qJFxuIgorCSAiXltfYS16MC05XS4qJCIsCisJIC8qIC0tICovCisJIC8qCisJICAqIFRoaXMgcmVnZXggY29tZXMgZnJvbSBXM0MgQ1NTIHNwZWNzLiBTaG91bGQgdGhlb3JldGljYWxseSBhbHNvCisJICAqIGFsbG93IElTTyAxMDY0NiBjaGFyYWN0ZXJzIFUrMDBBMCBhbmQgaGlnaGVyLAorCSAgKiBidXQgdGhleSBhcmUgbm90IGhhbmRsZWQgaW4gdGhpcyByZWdleC4KKwkgICovCisJICItP1tfYS16QS1aXVstX2EtekEtWjAtOV0qIiAvKiBpZGVudGlmaWVycyAqLworCSAifC0/WzAtOV0rfFxcI1swLTlhLWZBLUZdKyIgLyogbnVtYmVycyAqLworKSwKIHsgImRlZmF1bHQiLCBOVUxMLCAtMSwgeyBOVUxMLCAwIH0gfSwKIH07CiAjdW5kZWYgUEFUVEVSTlMKZGlmZiAtLWdpdCBhL3dhbGtlci5jIGIvd2Fsa2VyLmMKaW5kZXggZDk1YjAwNy4uMmM4NmU0MCAxMDA2NDQKLS0tIGEvd2Fsa2VyLmMKKysrIGIvd2Fsa2VyLmMKQEAgLTksMTAgKzksMTQgQEAKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY3VycmVudF9jb21taXRfc2hhMVsyMF07CiAKLXZvaWQgd2Fsa2VyX3NheShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqaGV4KQordm9pZCB3YWxrZXJfc2F5KHN0cnVjdCB3YWxrZXIgKndhbGtlciwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7Ci0JaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKLQkJZnByaW50ZihzdGRlcnIsIGZtdCwgaGV4KTsKKwlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KSB7CisJCXZhX2xpc3QgYXA7CisJCXZhX3N0YXJ0KGFwLCBmbXQpOworCQl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCQl2YV9lbmQoYXApOworCX0KIH0KIAogc3RhdGljIHZvaWQgcmVwb3J0X21pc3NpbmcoY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqKQpkaWZmIC0tZ2l0IGEvd2Fsa2VyLmggYi93YWxrZXIuaAppbmRleCA5NWU1NzY1Li5hODY5MDEzIDEwMDY0NAotLS0gYS93YWxrZXIuaAorKysgYi93YWxrZXIuaApAQCAtMTksNyArMTksOCBAQAogfTsKIAogLyogUmVwb3J0IHdoYXQgd2UgZ290IHVuZGVyIGdldF92ZXJib3NlbHkgKi8KLXZvaWQgd2Fsa2VyX3NheShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCit2b2lkIHdhbGtlcl9zYXkoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKIC8qIExvYWQgcHVsbCB0YXJnZXRzIGZyb20gc3RkaW4gKi8KIGludCB3YWxrZXJfdGFyZ2V0c19zdGRpbihjaGFyICoqKnRhcmdldCwgY29uc3QgY2hhciAqKip3cml0ZV9yZWYpOwpkaWZmIC0tZ2l0IGEvd29ya3RyZWUuYyBiL3dvcmt0cmVlLmMKaW5kZXggMTk5YjFlZi4uNWFjZmU0YyAxMDA2NDQKLS0tIGEvd29ya3RyZWUuYworKysgYi93b3JrdHJlZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAJCWZyZWUod29ya3RyZWVzW2ldLT5wYXRoKTsKIAkJZnJlZSh3b3JrdHJlZXNbaV0tPmlkKTsKIAkJZnJlZSh3b3JrdHJlZXNbaV0tPmhlYWRfcmVmKTsKKwkJZnJlZSh3b3JrdHJlZXNbaV0tPmxvY2tfcmVhc29uKTsKIAkJZnJlZSh3b3JrdHJlZXNbaV0pOwogCX0KIAlmcmVlICh3b3JrdHJlZXMpOwpAQCAtODAsNyArODEsNyBAQAogCWludCBpc19iYXJlID0gMDsKIAlpbnQgaXNfZGV0YWNoZWQgPSAwOwogCi0Jc3RyYnVmX2FkZHN0cigmd29ya3RyZWVfcGF0aCwgYWJzb2x1dGVfcGF0aChnZXRfZ2l0X2NvbW1vbl9kaXIoKSkpOworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmd29ya3RyZWVfcGF0aCwgZ2V0X2dpdF9jb21tb25fZGlyKCkpOwogCWlzX2JhcmUgPSAhc3RyYnVmX3N0cmlwX3N1ZmZpeCgmd29ya3RyZWVfcGF0aCwgIi8uZ2l0Iik7CiAJaWYgKGlzX2JhcmUpCiAJCXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJndvcmt0cmVlX3BhdGgsICIvLiIpOwpAQCAtOTgsNiArOTksOCBAQAogCXdvcmt0cmVlLT5pc19kZXRhY2hlZCA9IGlzX2RldGFjaGVkOwogCXdvcmt0cmVlLT5pc19jdXJyZW50ID0gMDsKIAlhZGRfaGVhZF9pbmZvKCZoZWFkX3JlZiwgd29ya3RyZWUpOworCXdvcmt0cmVlLT5sb2NrX3JlYXNvbiA9IE5VTEw7CisJd29ya3RyZWUtPmxvY2tfcmVhc29uX3ZhbGlkID0gMDsKIAogZG9uZToKIAlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CkBAIC0xMjUsNyArMTI4LDcgQEAKIAlzdHJidWZfcnRyaW0oJndvcmt0cmVlX3BhdGgpOwogCWlmICghc3RyYnVmX3N0cmlwX3N1ZmZpeCgmd29ya3RyZWVfcGF0aCwgIi8uZ2l0IikpIHsKIAkJc3RyYnVmX3Jlc2V0KCZ3b3JrdHJlZV9wYXRoKTsKLQkJc3RyYnVmX2FkZHN0cigmd29ya3RyZWVfcGF0aCwgYWJzb2x1dGVfcGF0aCgiLiIpKTsKKwkJc3RyYnVmX2FkZF9hYnNvbHV0ZV9wYXRoKCZ3b3JrdHJlZV9wYXRoLCAiLiIpOwogCQlzdHJidWZfc3RyaXBfc3VmZml4KCZ3b3JrdHJlZV9wYXRoLCAiLy4iKTsKIAl9CiAKQEAgLTE0Myw2ICsxNDYsOCBAQAogCXdvcmt0cmVlLT5pc19kZXRhY2hlZCA9IGlzX2RldGFjaGVkOwogCXdvcmt0cmVlLT5pc19jdXJyZW50ID0gMDsKIAlhZGRfaGVhZF9pbmZvKCZoZWFkX3JlZiwgd29ya3RyZWUpOworCXdvcmt0cmVlLT5sb2NrX3JlYXNvbiA9IE5VTEw7CisJd29ya3RyZWUtPmxvY2tfcmVhc29uX3ZhbGlkID0gMDsKIAogZG9uZToKIAlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CkBAIC0xNTMsMjEgKzE1OCwxOSBAQAogCiBzdGF0aWMgdm9pZCBtYXJrX2N1cnJlbnRfd29ya3RyZWUoc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzKQogewotCXN0cnVjdCBzdHJidWYgZ2l0X2RpciA9IFNUUkJVRl9JTklUOwotCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCWNoYXIgKmdpdF9kaXIgPSB4c3RyZHVwKGFic29sdXRlX3BhdGgoZ2V0X2dpdF9kaXIoKSkpOwogCWludCBpOwogCi0Jc3RyYnVmX2FkZHN0cigmZ2l0X2RpciwgYWJzb2x1dGVfcGF0aChnZXRfZ2l0X2RpcigpKSk7CiAJZm9yIChpID0gMDsgd29ya3RyZWVzW2ldOyBpKyspIHsKIAkJc3RydWN0IHdvcmt0cmVlICp3dCA9IHdvcmt0cmVlc1tpXTsKLQkJc3RyYnVmX2FkZHN0cigmcGF0aCwgYWJzb2x1dGVfcGF0aChnZXRfd29ya3RyZWVfZ2l0X2Rpcih3dCkpKTsKLQkJd3QtPmlzX2N1cnJlbnQgPSAhZnNwYXRoY21wKGdpdF9kaXIuYnVmLCBwYXRoLmJ1Zik7Ci0JCXN0cmJ1Zl9yZXNldCgmcGF0aCk7Ci0JCWlmICh3dC0+aXNfY3VycmVudCkKKwkJY29uc3QgY2hhciAqd3RfZ2l0X2RpciA9IGdldF93b3JrdHJlZV9naXRfZGlyKHd0KTsKKworCQlpZiAoIWZzcGF0aGNtcChnaXRfZGlyLCBhYnNvbHV0ZV9wYXRoKHd0X2dpdF9kaXIpKSkgeworCQkJd3QtPmlzX2N1cnJlbnQgPSAxOwogCQkJYnJlYWs7CisJCX0KIAl9Ci0Jc3RyYnVmX3JlbGVhc2UoJmdpdF9kaXIpOwotCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlmcmVlKGdpdF9kaXIpOwogfQogCiBzdHJ1Y3Qgd29ya3RyZWUgKipnZXRfd29ya3RyZWVzKHZvaWQpCkBAIC0xODksNyArMTkyLDcgQEAKIAlpZiAoZGlyKSB7CiAJCXdoaWxlICgoZCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgewogCQkJc3RydWN0IHdvcmt0cmVlICpsaW5rZWQgPSBOVUxMOwotCQkJaWYgKCFzdHJjbXAoZC0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZC0+ZF9uYW1lLCAiLi4iKSkKKwkJCWlmIChpc19kb3Rfb3JfZG90ZG90KGQtPmRfbmFtZSkpCiAJCQkJY29udGludWU7CiAKIAkJCWlmICgobGlua2VkID0gZ2V0X2xpbmtlZF93b3JrdHJlZShkLT5kX25hbWUpKSkgewpAQCAtMjE2LDYgKzIxOSw3OCBAQAogCQlyZXR1cm4gZ2l0X2NvbW1vbl9wYXRoKCJ3b3JrdHJlZXMvJXMiLCB3dC0+aWQpOwogfQogCitzdGF0aWMgc3RydWN0IHdvcmt0cmVlICpmaW5kX3dvcmt0cmVlX2J5X3N1ZmZpeChzdHJ1Y3Qgd29ya3RyZWUgKipsaXN0LAorCQkJCQkJY29uc3QgY2hhciAqc3VmZml4KQoreworCXN0cnVjdCB3b3JrdHJlZSAqZm91bmQgPSBOVUxMOworCWludCBucl9mb3VuZCA9IDAsIHN1ZmZpeGxlbjsKKworCXN1ZmZpeGxlbiA9IHN0cmxlbihzdWZmaXgpOworCWlmICghc3VmZml4bGVuKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoOyAqbGlzdCAmJiBucl9mb3VuZCA8IDI7IGxpc3QrKykgeworCQljb25zdCBjaGFyCSpwYXRoCSA9ICgqbGlzdCktPnBhdGg7CisJCWludAkJIHBhdGhsZW4gPSBzdHJsZW4ocGF0aCk7CisJCWludAkJIHN0YXJ0CSA9IHBhdGhsZW4gLSBzdWZmaXhsZW47CisKKwkJLyogc3VmZml4IG11c3Qgc3RhcnQgYXQgZGlyZWN0b3J5IGJvdW5kYXJ5ICovCisJCWlmICgoIXN0YXJ0IHx8IChzdGFydCA+IDAgJiYgaXNfZGlyX3NlcChwYXRoW3N0YXJ0IC0gMV0pKSkgJiYKKwkJICAgICFmc3BhdGhjbXAoc3VmZml4LCBwYXRoICsgc3RhcnQpKSB7CisJCQlmb3VuZCA9ICpsaXN0OworCQkJbnJfZm91bmQrKzsKKwkJfQorCX0KKwlyZXR1cm4gbnJfZm91bmQgPT0gMSA/IGZvdW5kIDogTlVMTDsKK30KKworc3RydWN0IHdvcmt0cmVlICpmaW5kX3dvcmt0cmVlKHN0cnVjdCB3b3JrdHJlZSAqKmxpc3QsCisJCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmFyZykKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKnd0OworCWNoYXIgKnBhdGg7CisKKwlpZiAoKHd0ID0gZmluZF93b3JrdHJlZV9ieV9zdWZmaXgobGlzdCwgYXJnKSkpCisJCXJldHVybiB3dDsKKworCWFyZyA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHN0cmxlbihwcmVmaXgpLCBhcmcpOworCXBhdGggPSB4c3RyZHVwKHJlYWxfcGF0aChhcmcpKTsKKwlmb3IgKDsgKmxpc3Q7IGxpc3QrKykKKwkJaWYgKCFmc3BhdGhjbXAocGF0aCwgcmVhbF9wYXRoKCgqbGlzdCktPnBhdGgpKSkKKwkJCWJyZWFrOworCWZyZWUocGF0aCk7CisJcmV0dXJuICpsaXN0OworfQorCitpbnQgaXNfbWFpbl93b3JrdHJlZShjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0KQoreworCXJldHVybiAhd3QtPmlkOworfQorCitjb25zdCBjaGFyICppc193b3JrdHJlZV9sb2NrZWQoc3RydWN0IHdvcmt0cmVlICp3dCkKK3sKKwlhc3NlcnQoIWlzX21haW5fd29ya3RyZWUod3QpKTsKKworCWlmICghd3QtPmxvY2tfcmVhc29uX3ZhbGlkKSB7CisJCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIHdvcmt0cmVlX2dpdF9wYXRoKHd0LCAibG9ja2VkIikpOworCQlpZiAoZmlsZV9leGlzdHMocGF0aC5idWYpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGxvY2tfcmVhc29uID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmbG9ja19yZWFzb24sIHBhdGguYnVmLCAwKSA8IDApCisJCQkJZGllX2Vycm5vKF8oImZhaWxlZCB0byByZWFkICclcyciKSwgcGF0aC5idWYpOworCQkJc3RyYnVmX3RyaW0oJmxvY2tfcmVhc29uKTsKKwkJCXd0LT5sb2NrX3JlYXNvbiA9IHN0cmJ1Zl9kZXRhY2goJmxvY2tfcmVhc29uLCBOVUxMKTsKKwkJfSBlbHNlCisJCQl3dC0+bG9ja19yZWFzb24gPSBOVUxMOworCQl3dC0+bG9ja19yZWFzb25fdmFsaWQgPSAxOworCQlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJfQorCisJcmV0dXJuIHd0LT5sb2NrX3JlYXNvbjsKK30KKwogaW50IGlzX3dvcmt0cmVlX2JlaW5nX3JlYmFzZWQoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKnRhcmdldCkKIHsKZGlmZiAtLWdpdCBhL3dvcmt0cmVlLmggYi93b3JrdHJlZS5oCmluZGV4IDEzOTQ5MDkuLjkwZTEzMTEgMTAwNjQ0Ci0tLSBhL3dvcmt0cmVlLmgKKysrIGIvd29ya3RyZWUuaApAQCAtNSwxMCArNSwxMiBAQAogCWNoYXIgKnBhdGg7CiAJY2hhciAqaWQ7CiAJY2hhciAqaGVhZF9yZWY7CisJY2hhciAqbG9ja19yZWFzb247CS8qIGludGVybmFsIHVzZSAqLwogCXVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKIAlpbnQgaXNfZGV0YWNoZWQ7CiAJaW50IGlzX2JhcmU7CiAJaW50IGlzX2N1cnJlbnQ7CisJaW50IGxvY2tfcmVhc29uX3ZhbGlkOwogfTsKIAogLyogRnVuY3Rpb25zIGZvciBhY3Rpbmcgb24gdGhlIGluZm9ybWF0aW9uIGFib3V0IHdvcmt0cmVlcy4gKi8KQEAgLTMwLDYgKzMyLDI1IEBACiBleHRlcm4gY29uc3QgY2hhciAqZ2V0X3dvcmt0cmVlX2dpdF9kaXIoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCk7CiAKIC8qCisgKiBTZWFyY2ggYSB3b3JrdHJlZSB0aGF0IGNhbiBiZSB1bmFtYmlndW91c2x5IGlkZW50aWZpZWQgYnkKKyAqICJhcmciLiAicHJlZml4IiBtdXN0IG5vdCBiZSBOVUxMLgorICovCitleHRlcm4gc3RydWN0IHdvcmt0cmVlICpmaW5kX3dvcmt0cmVlKHN0cnVjdCB3b3JrdHJlZSAqKmxpc3QsCisJCQkJICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmFyZyk7CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gd29ya3RyZWUgaXMgdGhlIG1haW4gb25lLgorICovCitleHRlcm4gaW50IGlzX21haW5fd29ya3RyZWUoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCk7CisKKy8qCisgKiBSZXR1cm4gdGhlIHJlYXNvbiBzdHJpbmcgaWYgdGhlIGdpdmVuIHdvcmt0cmVlIGlzIGxvY2tlZCBvciBOVUxMCisgKiBvdGhlcndpc2UuCisgKi8KK2V4dGVybiBjb25zdCBjaGFyICppc193b3JrdHJlZV9sb2NrZWQoc3RydWN0IHdvcmt0cmVlICp3dCk7CisKKy8qCiAgKiBGcmVlIHVwIHRoZSBtZW1vcnkgZm9yIHdvcmt0cmVlKHMpCiAgKi8KIGV4dGVybiB2b2lkIGZyZWVfd29ya3RyZWVzKHN0cnVjdCB3b3JrdHJlZSAqKik7CmRpZmYgLS1naXQgYS93cmFwcGVyLmMgYi93cmFwcGVyLmMKaW5kZXggNWRjNGUxNS4uZTdmMTk3OSAxMDA2NDQKLS0tIGEvd3JhcHBlci5jCisrKyBiL3dyYXBwZXIuYwpAQCAtMjI3LDYgKzIyNywyNCBAQAogCX0KIH0KIAorc3RhdGljIGludCBoYW5kbGVfbm9uYmxvY2soaW50IGZkLCBzaG9ydCBwb2xsX2V2ZW50cywgaW50IGVycikKK3sKKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKKworCWlmIChlcnIgIT0gRUFHQUlOICYmIGVyciAhPSBFV09VTERCTE9DSykKKwkJcmV0dXJuIDA7CisKKwlwZmQuZmQgPSBmZDsKKwlwZmQuZXZlbnRzID0gcG9sbF9ldmVudHM7CisKKwkvKgorCSAqIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGVycm9ycywgaGVyZTsKKwkgKiBhIHN1YnNlcXVlbnQgcmVhZC93cml0ZSB3aWxsIGRldGVjdCB1bnJlY292ZXJhYmxlIGVycm9ycworCSAqLworCXBvbGwoJnBmZCwgMSwgLTEpOworCXJldHVybiAxOworfQorCiAvKgogICogeHJlYWQoKSBpcyB0aGUgc2FtZSBhIHJlYWQoKSwgYnV0IGl0IGF1dG9tYXRpY2FsbHkgcmVzdGFydHMgcmVhZCgpCiAgKiBvcGVyYXRpb25zIHdpdGggYSByZWNvdmVyYWJsZSBlcnJvciAoRUFHQUlOIGFuZCBFSU5UUikuIHhyZWFkKCkKQEAgLTI0MiwyMCArMjYwLDggQEAKIAkJaWYgKG5yIDwgMCkgewogCQkJaWYgKGVycm5vID09IEVJTlRSKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykgewotCQkJCXN0cnVjdCBwb2xsZmQgcGZkOwotCQkJCXBmZC5ldmVudHMgPSBQT0xMSU47Ci0JCQkJcGZkLmZkID0gZmQ7Ci0JCQkJLyoKLQkJCQkgKiBpdCBpcyBPSyBpZiB0aGlzIHBvbGwoKSBmYWlsZWQ7IHdlCi0JCQkJICogd2FudCB0byBsZWF2ZSB0aGlzIGluZmluaXRlIGxvb3AKLQkJCQkgKiBvbmx5IHdoZW4gcmVhZCgpIHJldHVybnMgd2l0aAotCQkJCSAqIHN1Y2Nlc3MsIG9yIGFuIGV4cGVjdGVkIGZhaWx1cmUsCi0JCQkJICogd2hpY2ggd291bGQgYmUgY2hlY2tlZCBieSB0aGUgbmV4dAotCQkJCSAqIGNhbGwgdG8gcmVhZCgyKS4KLQkJCQkgKi8KLQkJCQlwb2xsKCZwZmQsIDEsIC0xKTsKLQkJCX0KKwkJCWlmIChoYW5kbGVfbm9uYmxvY2soZmQsIFBPTExJTiwgZXJybm8pKQorCQkJCWNvbnRpbnVlOwogCQl9CiAJCXJldHVybiBucjsKIAl9CkBAIC0yNzMsOCArMjc5LDEzIEBACiAJICAgIGxlbiA9IE1BWF9JT19TSVpFOwogCXdoaWxlICgxKSB7CiAJCW5yID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTsKLQkJaWYgKChuciA8IDApICYmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpKQotCQkJY29udGludWU7CisJCWlmIChuciA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCQljb250aW51ZTsKKwkJCWlmIChoYW5kbGVfbm9uYmxvY2soZmQsIFBPTExPVVQsIGVycm5vKSkKKwkJCQljb250aW51ZTsKKwkJfQorCiAJCXJldHVybiBucjsKIAl9CiB9CkBAIC02NDAsNTYgKzY1MSwyOCBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfZmlsZV92KGNvbnN0IGNoYXIgKnBhdGgsIGludCBmYXRhbCwKLQkJCWNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBwYXJhbXMpCit2b2lkIHdyaXRlX2ZpbGVfYnVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKKwlpbnQgZmQgPSB4b3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjY2KTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLCBsZW4pICE9IGxlbikKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSB0byAlcyIpLCBwYXRoKTsKKwlpZiAoY2xvc2UoZmQpKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNsb3NlICVzIiksIHBhdGgpOworfQorCit2b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CiAJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOwotCWludCBmZCA9IG9wZW4ocGF0aCwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NjYpOwotCWlmIChmZCA8IDApIHsKLQkJaWYgKGZhdGFsKQotCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nIiksIHBhdGgpOwotCQlyZXR1cm4gLTE7Ci0JfQorCisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOwogCXN0cmJ1Zl92YWRkZigmc2IsIGZtdCwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwogCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKCZzYik7Ci0JaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHNiLmJ1Ziwgc2IubGVuKSAhPSBzYi5sZW4pIHsKLQkJaW50IGVyciA9IGVycm5vOwotCQljbG9zZShmZCk7Ci0JCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Ci0JCWVycm5vID0gZXJyOwotCQlpZiAoZmF0YWwpCi0JCQlkaWVfZXJybm8oXygiY291bGQgbm90IHdyaXRlIHRvICVzIiksIHBhdGgpOwotCQlyZXR1cm4gLTE7Ci0JfQorCisJd3JpdGVfZmlsZV9idWYocGF0aCwgc2IuYnVmLCBzYi5sZW4pOwogCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Ci0JaWYgKGNsb3NlKGZkKSkgewotCQlpZiAoZmF0YWwpCi0JCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNsb3NlICVzIiksIHBhdGgpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgc3RhdHVzOwotCXZhX2xpc3QgcGFyYW1zOwotCi0JdmFfc3RhcnQocGFyYW1zLCBmbXQpOwotCXN0YXR1cyA9IHdyaXRlX2ZpbGVfdihwYXRoLCAxLCBmbXQsIHBhcmFtcyk7Ci0JdmFfZW5kKHBhcmFtcyk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotaW50IHdyaXRlX2ZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCWludCBzdGF0dXM7Ci0JdmFfbGlzdCBwYXJhbXM7Ci0KLQl2YV9zdGFydChwYXJhbXMsIGZtdCk7Ci0Jc3RhdHVzID0gd3JpdGVfZmlsZV92KHBhdGgsIDAsIGZtdCwgcGFyYW1zKTsKLQl2YV9lbmQocGFyYW1zKTsKLQlyZXR1cm4gc3RhdHVzOwogfQogCiB2b2lkIHNsZWVwX21pbGxpc2VjKGludCBtaWxsaXNlYykKZGlmZiAtLWdpdCBhL3dyaXRlX29yX2RpZS5jIGIvd3JpdGVfb3JfZGllLmMKaW5kZXggNDllODBhYS4uMDczNDQzMiAxMDA2NDQKLS0tIGEvd3JpdGVfb3JfZGllLmMKKysrIGIvd3JpdGVfb3JfZGllLmMKQEAgLTgyLDI2ICs4MiwzIEBACiAJCWRpZV9lcnJubygid3JpdGUgZXJyb3IiKTsKIAl9CiB9Ci0KLWludCB3cml0ZV9vcl93aGluZV9waXBlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsIGNvbnN0IGNoYXIgKm1zZykKLXsKLQlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLCBjb3VudCkgPCAwKSB7Ci0JCWNoZWNrX3BpcGUoZXJybm8pOwotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB3cml0ZSBlcnJvciAoJXMpXG4iLAotCQkJbXNnLCBzdHJlcnJvcihlcnJubykpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotaW50IHdyaXRlX29yX3doaW5lKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsIGNvbnN0IGNoYXIgKm1zZykKLXsKLQlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLCBjb3VudCkgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6IHdyaXRlIGVycm9yICglcylcbiIsCi0JCQltc2csIHN0cmVycm9yKGVycm5vKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQpkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmMgYi93dC1zdGF0dXMuYwppbmRleCA0ZjI3YmQ2Li42MjI1YTJkIDEwMDY0NAotLS0gYS93dC1zdGF0dXMuYworKysgYi93dC1zdGF0dXMuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJY2FzZSA3OgogCQlyZXR1cm4gXygiYm90aCBtb2RpZmllZDoiKTsKIAlkZWZhdWx0OgotCQlkaWUoXygiYnVnOiB1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4IiksIHN0YWdlbWFzayk7CisJCWRpZSgiQlVHOiB1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4Iiwgc3RhZ2VtYXNrKTsKIAl9CiB9CiAKQEAgLTM4OCw3ICszODgsNyBAQAogCXN0YXR1c19wcmludGYocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICJcdCIpOwogCXdoYXQgPSB3dF9zdGF0dXNfZGlmZl9zdGF0dXNfc3RyaW5nKHN0YXR1cyk7CiAJaWYgKCF3aGF0KQotCQlkaWUoXygiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiKSwgc3RhdHVzKTsKKwkJZGllKCJCVUc6IHVuaGFuZGxlZCBkaWZmIHN0YXR1cyAlYyIsIHN0YXR1cyk7CiAJbGVuID0gbGFiZWxfd2lkdGggLSB1dGY4X3N0cndpZHRoKHdoYXQpOwogCWFzc2VydChsZW4gPj0gMCk7CiAJaWYgKHN0YXR1cyA9PSBESUZGX1NUQVRVU19DT1BJRUQgfHwgc3RhdHVzID09IERJRkZfU1RBVFVTX1JFTkFNRUQpCkBAIC00MzIsNyArNDMyLDggQEAKIAkJCWQtPndvcmt0cmVlX3N0YXR1cyA9IHAtPnN0YXR1czsKIAkJZC0+ZGlydHlfc3VibW9kdWxlID0gcC0+dHdvLT5kaXJ0eV9zdWJtb2R1bGU7CiAJCWlmIChTX0lTR0lUTElOSyhwLT50d28tPm1vZGUpKQotCQkJZC0+bmV3X3N1Ym1vZHVsZV9jb21taXRzID0gISFoYXNoY21wKHAtPm9uZS0+c2hhMSwgcC0+dHdvLT5zaGExKTsKKwkJCWQtPm5ld19zdWJtb2R1bGVfY29tbWl0cyA9ICEhb2lkY21wKCZwLT5vbmUtPm9pZCwKKwkJCQkJCQkgICAgJnAtPnR3by0+b2lkKTsKIAl9CiB9CiAKQEAgLTk0Nyw5ICs5NDgsMTIgQEAKIHsKIAlpZiAoaGFzX3VubWVyZ2VkKHMpKSB7CiAJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsIF8oIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIpKTsKLQkJaWYgKHMtPmhpbnRzKQorCQlpZiAocy0+aGludHMpIHsKIAkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCi0JCQkJXygiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIpKTsKKwkJCQkJIF8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiKSk7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCQkgXygiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIikpOworCQl9CiAJfSBlbHNlIHsKIAkJcy0+IGNvbW1pdGFibGUgPSAxOwogCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLApAQCAtMTA2Miw3ICsxMDY2LDcgQEAKIAkJCXN0cmJ1Zl9hZGRmKHNwbGl0WzFdLCAiJXMgIiwgYWJicmV2KTsKIAkJCXN0cmJ1Zl9yZXNldChsaW5lKTsKIAkJCWZvciAoaSA9IDA7IHNwbGl0W2ldOyBpKyspCi0JCQkJc3RyYnVmX2FkZGYobGluZSwgIiVzIiwgc3BsaXRbaV0tPmJ1Zik7CisJCQkJc3RyYnVmX2FkZGJ1ZihsaW5lLCBzcGxpdFtpXSk7CiAJCX0KIAl9CiAJc3RyYnVmX2xpc3RfZnJlZShzcGxpdCk7CkBAIC0xNTU0LDcgKzE1NTgsNyBAQAogCQkJZWxzZQogCQkJCXByaW50ZihfKCJub3RoaW5nIHRvIGNvbW1pdFxuIikpOwogCQl9IGVsc2UKLQkJCXByaW50ZihfKCJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyBkaXJlY3RvcnkgY2xlYW5cbiIpKTsKKwkJCXByaW50ZihfKCJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iKSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS94ZGlmZi1pbnRlcmZhY2UuYyBiL3hkaWZmLWludGVyZmFjZS5jCmluZGV4IDU0MjM2ZjIuLmYzNGVhNzYgMTAwNjQ0Ci0tLSBhL3hkaWZmLWludGVyZmFjZS5jCisrKyBiL3hkaWZmLWludGVyZmFjZS5jCkBAIC0xMDAsOSArMTAwLDkgQEAKIAogLyoKICAqIFRyaW0gZG93biBjb21tb24gc3Vic3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcnMsCi0gKiBidXQgbGVhdmUgYXQgbGVhc3QgY3R4IGxpbmVzIGF0IHRoZSBlbmQuCisgKiBidXQgZW5kIG9uIGEgY29tcGxldGUgbGluZS4KICAqLwotc3RhdGljIHZvaWQgdHJpbV9jb21tb25fdGFpbChtbWZpbGVfdCAqYSwgbW1maWxlX3QgKmIsIGxvbmcgY3R4KQorc3RhdGljIHZvaWQgdHJpbV9jb21tb25fdGFpbChtbWZpbGVfdCAqYSwgbW1maWxlX3QgKmIpCiB7CiAJY29uc3QgaW50IGJsayA9IDEwMjQ7CiAJbG9uZyB0cmltbWVkID0gMCwgcmVjb3ZlcmVkID0gMDsKQEAgLTExMCw5ICsxMTAsNiBAQAogCWNoYXIgKmJwID0gYi0+cHRyICsgYi0+c2l6ZTsKIAlsb25nIHNtYWxsZXIgPSAoYS0+c2l6ZSA8IGItPnNpemUpID8gYS0+c2l6ZSA6IGItPnNpemU7CiAKLQlpZiAoY3R4KQotCQlyZXR1cm47Ci0KIAl3aGlsZSAoYmxrICsgdHJpbW1lZCA8PSBzbWFsbGVyICYmICFtZW1jbXAoYXAgLSBibGssIGJwIC0gYmxrLCBibGspKSB7CiAJCXRyaW1tZWQgKz0gYmxrOwogCQlhcCAtPSBibGs7CkBAIC0xMzQsNyArMTMxLDggQEAKIAlpZiAobWYxLT5zaXplID4gTUFYX1hESUZGX1NJWkUgfHwgbWYyLT5zaXplID4gTUFYX1hESUZGX1NJWkUpCiAJCXJldHVybiAtMTsKIAotCXRyaW1fY29tbW9uX3RhaWwoJmEsICZiLCB4ZWNmZy0+Y3R4bGVuKTsKKwlpZiAoIXhlY2ZnLT5jdHhsZW4gJiYgISh4ZWNmZy0+ZmxhZ3MgJiBYRExfRU1JVF9GVU5DQ09OVEVYVCkpCisJCXRyaW1fY29tbW9uX3RhaWwoJmEsICZiKTsKIAogCXJldHVybiB4ZGxfZGlmZigmYSwgJmIsIHhwcCwgeGVjZmcsIHhlY2IpOwogfQpkaWZmIC0tZ2l0IGEveGRpZmYveGVtaXQuYyBiL3hkaWZmL3hlbWl0LmMKaW5kZXggOTkzNzI0Yi4uNDlhYTE2ZiAxMDA2NDQKLS0tIGEveGRpZmYveGVtaXQuYworKysgYi94ZGlmZi94ZW1pdC5jCkBAIC0xMjAsNiArMTIwLDE2IEBACiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgbG9uZyBtYXRjaF9mdW5jX3JlYyh4ZGZpbGVfdCAqeGRmLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLCBsb25nIHJpLAorCQkJICAgY2hhciAqYnVmLCBsb25nIHN6KQoreworCWNvbnN0IGNoYXIgKnJlYzsKKwlsb25nIGxlbiA9IHhkbF9nZXRfcmVjKHhkZiwgcmksICZyZWMpOworCWlmICgheGVjZmctPmZpbmRfZnVuYykKKwkJcmV0dXJuIGRlZl9mZihyZWMsIGxlbiwgYnVmLCBzeiwgeGVjZmctPmZpbmRfZnVuY19wcml2KTsKKwlyZXR1cm4geGVjZmctPmZpbmRfZnVuYyhyZWMsIGxlbiwgYnVmLCBzeiwgeGVjZmctPmZpbmRfZnVuY19wcml2KTsKK30KKwogc3RydWN0IGZ1bmNfbGluZSB7CiAJbG9uZyBsZW47CiAJY2hhciBidWZbODBdOwpAQCAtMTI4LDcgKzEzOCw2IEBACiBzdGF0aWMgbG9uZyBnZXRfZnVuY19saW5lKHhkZmVudl90ICp4ZSwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZywKIAkJCSAgc3RydWN0IGZ1bmNfbGluZSAqZnVuY19saW5lLCBsb25nIHN0YXJ0LCBsb25nIGxpbWl0KQogewotCWZpbmRfZnVuY190IGZmID0geGVjZmctPmZpbmRfZnVuYyA/IHhlY2ZnLT5maW5kX2Z1bmMgOiBkZWZfZmY7CiAJbG9uZyBsLCBzaXplLCBzdGVwID0gKHN0YXJ0ID4gbGltaXQpID8gLTEgOiAxOwogCWNoYXIgKmJ1ZiwgZHVtbXlbMV07CiAKQEAgLTEzNiw5ICsxNDUsNyBAQAogCXNpemUgPSBmdW5jX2xpbmUgPyBzaXplb2YoZnVuY19saW5lLT5idWYpIDogc2l6ZW9mKGR1bW15KTsKIAogCWZvciAobCA9IHN0YXJ0OyBsICE9IGxpbWl0ICYmIDAgPD0gbCAmJiBsIDwgeGUtPnhkZjEubnJlYzsgbCArPSBzdGVwKSB7Ci0JCWNvbnN0IGNoYXIgKnJlYzsKLQkJbG9uZyByZWNsZW4gPSB4ZGxfZ2V0X3JlYygmeGUtPnhkZjEsIGwsICZyZWMpOwotCQlsb25nIGxlbiA9IGZmKHJlYywgcmVjbGVuLCBidWYsIHNpemUsIHhlY2ZnLT5maW5kX2Z1bmNfcHJpdik7CisJCWxvbmcgbGVuID0gbWF0Y2hfZnVuY19yZWMoJnhlLT54ZGYxLCB4ZWNmZywgbCwgYnVmLCBzaXplKTsKIAkJaWYgKGxlbiA+PSAwKSB7CiAJCQlpZiAoZnVuY19saW5lKQogCQkJCWZ1bmNfbGluZS0+bGVuID0gbGVuOwpAQCAtMTQ4LDYgKzE1NSwxOCBAQAogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIGludCBpc19lbXB0eV9yZWMoeGRmaWxlX3QgKnhkZiwgbG9uZyByaSkKK3sKKwljb25zdCBjaGFyICpyZWM7CisJbG9uZyBsZW4gPSB4ZGxfZ2V0X3JlYyh4ZGYsIHJpLCAmcmVjKTsKKworCXdoaWxlIChsZW4gPiAwICYmIFhETF9JU1NQQUNFKCpyZWMpKSB7CisJCXJlYysrOworCQlsZW4tLTsKKwl9CisJcmV0dXJuICFsZW47Cit9CisKIGludCB4ZGxfZW1pdF9kaWZmKHhkZmVudl90ICp4ZSwgeGRjaGFuZ2VfdCAqeHNjciwgeGRlbWl0Y2JfdCAqZWNiLAogCQkgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpIHsKIAlsb25nIHMxLCBzMiwgZTEsIGUyLCBsY3R4OwpAQCAtMTY0LDcgKzE4MywzNCBAQAogCQlzMiA9IFhETF9NQVgoeGNoLT5pMiAtIHhlY2ZnLT5jdHhsZW4sIDApOwogCiAJCWlmICh4ZWNmZy0+ZmxhZ3MgJiBYRExfRU1JVF9GVU5DQ09OVEVYVCkgewotCQkJbG9uZyBmczEgPSBnZXRfZnVuY19saW5lKHhlLCB4ZWNmZywgTlVMTCwgeGNoLT5pMSwgLTEpOworCQkJbG9uZyBmczEsIGkxID0geGNoLT5pMTsKKworCQkJLyogQXBwZW5kZWQgY2h1bms/ICovCisJCQlpZiAoaTEgPj0geGUtPnhkZjEubnJlYykgeworCQkJCWNoYXIgZHVtbXlbMV07CisJCQkJbG9uZyBpMiA9IHhjaC0+aTI7CisKKwkJCQkvKgorCQkJCSAqIFdlIGRvbid0IG5lZWQgYWRkaXRpb25hbCBjb250ZXh0IGlmCisJCQkJICogYSB3aG9sZSBmdW5jdGlvbiB3YXMgYWRkZWQsIHBvc3NpYmx5CisJCQkJICogc3RhcnRpbmcgd2l0aCBlbXB0eSBsaW5lcy4KKwkJCQkgKi8KKwkJCQl3aGlsZSAoaTIgPCB4ZS0+eGRmMi5ucmVjICYmCisJCQkJICAgICAgIGlzX2VtcHR5X3JlYygmeGUtPnhkZjIsIGkyKSkKKwkJCQkJaTIrKzsKKwkJCQlpZiAoaTIgPCB4ZS0+eGRmMi5ucmVjICYmCisJCQkJICAgIG1hdGNoX2Z1bmNfcmVjKCZ4ZS0+eGRmMiwgeGVjZmcsIGkyLAorCQkJCQkJICAgZHVtbXksIHNpemVvZihkdW1teSkpID49IDApCisJCQkJCWdvdG8gcG9zdF9jb250ZXh0X2NhbGN1bGF0aW9uOworCisJCQkJLyoKKwkJCQkgKiBPdGhlcndpc2UgZ2V0IG1vcmUgY29udGV4dCBmcm9tIHRoZQorCQkJCSAqIHByZS1pbWFnZS4KKwkJCQkgKi8KKwkJCQlpMSA9IHhlLT54ZGYxLm5yZWMgLSAxOworCQkJfQorCisJCQlmczEgPSBnZXRfZnVuY19saW5lKHhlLCB4ZWNmZywgTlVMTCwgaTEsIC0xKTsKIAkJCWlmIChmczEgPCAwKQogCQkJCWZzMSA9IDA7CiAJCQlpZiAoZnMxIDwgczEpIHsKQEAgLTE3Myw3ICsyMTksNyBAQAogCQkJfQogCQl9CiAKLSBhZ2FpbjoKKyBwb3N0X2NvbnRleHRfY2FsY3VsYXRpb246CiAJCWxjdHggPSB4ZWNmZy0+Y3R4bGVuOwogCQlsY3R4ID0gWERMX01JTihsY3R4LCB4ZS0+eGRmMS5ucmVjIC0gKHhjaGUtPmkxICsgeGNoZS0+Y2hnMSkpOwogCQlsY3R4ID0gWERMX01JTihsY3R4LCB4ZS0+eGRmMi5ucmVjIC0gKHhjaGUtPmkyICsgeGNoZS0+Y2hnMikpOwpAQCAtMTg1LDYgKzIzMSw4IEBACiAJCQlsb25nIGZlMSA9IGdldF9mdW5jX2xpbmUoeGUsIHhlY2ZnLCBOVUxMLAogCQkJCQkJIHhjaGUtPmkxICsgeGNoZS0+Y2hnMSwKIAkJCQkJCSB4ZS0+eGRmMS5ucmVjKTsKKwkJCXdoaWxlIChmZTEgPiAwICYmIGlzX2VtcHR5X3JlYygmeGUtPnhkZjEsIGZlMSAtIDEpKQorCQkJCWZlMS0tOwogCQkJaWYgKGZlMSA8IDApCiAJCQkJZmUxID0geGUtPnhkZjEubnJlYzsKIAkJCWlmIChmZTEgPiBlMSkgewpAQCAtMTk4LDExICsyNDYsMTIgQEAKIAkJCSAqIGl0cyBuZXcgZW5kLgogCQkJICovCiAJCQlpZiAoeGNoZS0+bmV4dCkgewotCQkJCWxvbmcgbCA9IHhjaGUtPm5leHQtPmkxOworCQkJCWxvbmcgbCA9IFhETF9NSU4oeGNoZS0+bmV4dC0+aTEsCisJCQkJCQkgeGUtPnhkZjEubnJlYyAtIDEpOwogCQkJCWlmIChsIDw9IGUxIHx8CiAJCQkJICAgIGdldF9mdW5jX2xpbmUoeGUsIHhlY2ZnLCBOVUxMLCBsLCBlMSkgPCAwKSB7CiAJCQkJCXhjaGUgPSB4Y2hlLT5uZXh0OwotCQkJCQlnb3RvIGFnYWluOworCQkJCQlnb3RvIHBvc3RfY29udGV4dF9jYWxjdWxhdGlvbjsKIAkJCQl9CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL3hkaWZmL3hwYXRpZW5jZS5jIGIveGRpZmYveHBhdGllbmNlLmMKaW5kZXggMDRlMWExYS4uYTYxM2VmYyAxMDA2NDQKLS0tIGEveGRpZmYveHBhdGllbmNlLmMKKysrIGIveGRpZmYveHBhdGllbmNlLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDkgRGF2aWRlIExpYmVuemksIEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNiBEYXZpZGUgTGliZW56aSwgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEveGRpZmYveHV0aWxzLmMgYi94ZGlmZi94dXRpbHMuYwppbmRleCA2MmNiMjNkLi4wMjcxOTJhIDEwMDY0NAotLS0gYS94ZGlmZi94dXRpbHMuYworKysgYi94ZGlmZi94dXRpbHMuYwpAQCAtMjAwLDggKzIwMCwxMCBAQAogCQkJCXJldHVybiAwOwogCQl9CiAJfSBlbHNlIGlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRV9BVF9FT0wpIHsKLQkJd2hpbGUgKGkxIDwgczEgJiYgaTIgPCBzMiAmJiBsMVtpMSsrXSA9PSBsMltpMisrXSkKLQkJCTsgLyoga2VlcCBnb2luZyAqLworCQl3aGlsZSAoaTEgPCBzMSAmJiBpMiA8IHMyICYmIGwxW2kxXSA9PSBsMltpMl0pIHsKKwkJCWkxKys7CisJCQlpMisrOworCQl9CiAJfQogCiAJLyoK