From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Jan Kratochvil To: git-commits@fedoraproject.org Subject: [rpms/gdb] gdb-17.2-rebase-f44: Fix performance regression when inferior opens many libraries (Gary Benson). Date: Sat, 27 Jun 2026 23:56:13 GMT Message-ID: <178260457374.1.4425314948985246139.rpms-gdb-6d620330a43c@fedoraproject.org> List-ID: X-Git-Repo: rpms/gdb X-Git-Branch: gdb-17.2-rebase-f44 X-Git-Rev: 6d620330a43ca2fbe902365bf3456e4a705d7299 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvZ2RiCkJyYW5jaCA6 IGdkYi0xNy4yLXJlYmFzZS1mNDQKQ29tbWl0IDogNmQ2MjAzMzBhNDNjYTJmYmU5MDIzNjViZjM0 NTZlNGE3MDVkNzI5OQpBdXRob3IgOiBKYW4gS3JhdG9jaHZpbCA8amFuLmtyYXRvY2h2aWxAcmVk aGF0LmNvbT4KRGF0ZSAgIDogMjAxMy0wNS0xOVQxODo0NDowNSswMjowMApTdGF0cyAgOiArMjU5 Mi8tMjYwNSBpbiAxMyBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qu b3JnL3JwbXMvZ2RiL2MvNmQ2MjAzMzBhNDNjYTJmYmU5MDIzNjViZjM0NTZlNGE3MDVkNzI5OT9i cmFuY2g9Z2RiLTE3LjItcmViYXNlLWY0NAoKTG9nOgpGaXggcGVyZm9ybWFuY2UgcmVncmVzc2lv biB3aGVuIGluZmVyaW9yIG9wZW5zIG1hbnkgbGlicmFyaWVzIChHYXJ5IEJlbnNvbikuCgotLS0K ZGlmZiAtLWdpdCBhL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS0xb2Y3LnBhdGNoIGIvZ2RiLWRsb3Bl bi1zdGFwLXByb2JlLTFvZjcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uY2I3NDgwMgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS0xb2Y3 LnBhdGNoCkBAIC0wLDAgKzEsMTE5IEBACitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvZ2RiLXBh dGNoZXMvMjAxMy0wNS9tc2cwMDYyNS5odG1sCitTdWJqZWN0OiBbUkZBIDEvN10gUHJvYmVzIEFQ SSBjb252ZW5pZW5jZSBwYXRjaAorCisKKy0tdXVLVnpBbUIrYyt6UWxodQorQ29udGVudC1UeXBl OiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxp bmUKKworVGhpcyBwYXRjaCBleHBvc2VzIHBhcnQgb2YgdGhlIHByb2JlcyBBUEkgaW4gYSBtb3Jl IGNvbnZlbmllbnQKK3dheS4gIEkndmUgaW5jbHVkZWQgaXQgZm9yIGNvbXBsZXRlbmVzcywgYnV0 IGl0IGhhcyBwcmV2aW91c2x5CitiZWVuIGFwcHJvdmVkOgorCisgIGh0dHA6Ly93d3cuY3lnd2lu LmNvbS9tbC9nZGItcGF0Y2hlcy8yMDEyLTA3L21zZzAwMzQwLmh0bWwKKworLS11dUtWekFtQitj K3pRbGh1CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRl bnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJydGxkLXByb2Jlcy0xLWNvbnZl bmllbmNlLnBhdGNoIgorCisyMDEzLTA1LTE2ICBHYXJ5IEJlbnNvbiAgPGdiZW5zb25AcmVkaGF0 LmNvbT4KKworCSogcHJvYmUuaCAoZ2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50KTogTmV3IGRlY2xh cmF0aW9uLgorCShldmFsdWF0ZV9wcm9iZV9hcmd1bWVudCk6IExpa2V3aXNlLgorCSogcHJvYmUu YyAoZ2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50KTogTmV3IGZ1bmN0aW9uLgorCShldmFsdWF0ZV9w cm9iZV9hcmd1bWVudCk6IExpa2V3aXNlLgorCShwcm9iZV9zYWZlX2V2YWx1YXRlX2F0X3BjKTog VXNlIHRoZSBhYm92ZSBuZXcgZnVuY3Rpb25zLgorCitkaWZmIC0tZ2l0IGEvZ2RiL3Byb2JlLmgg Yi9nZGIvcHJvYmUuaAoraW5kZXggOGQ0NGNhMi4uMWQyOWI4NyAxMDA2NDQKKy0tLSBhL2dkYi9w cm9iZS5oCisrKysgYi9nZGIvcHJvYmUuaAorQEAgLTIxNCw2ICsyMTQsMTYgQEAgZXh0ZXJuIHZv aWQgaW5mb19wcm9iZXNfZm9yX29wcyAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHksCisgCisgZXh0 ZXJuIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICoqaW5mb19wcm9iZXNfY21kbGlzdF9nZXQgKHZv aWQpOworIAorKy8qIFJldHVybiB0aGUgYXJndW1lbnQgY291bnQgb2YgdGhlIHNwZWNpZmllZCBw cm9iZS4gICovCisrCisrZXh0ZXJuIHVuc2lnbmVkIGdldF9wcm9iZV9hcmd1bWVudF9jb3VudCAo c3RydWN0IHByb2JlICpwcm9iZSk7CisrCisrLyogRXZhbHVhdGUgYXJndW1lbnQgTiBvZiB0aGUg c3BlY2lmaWVkIHByb2JlLiAgTiBtdXN0IGJlIGJldHdlZW4gMAorKyAgIGluY2x1c2l2ZSBhbmQg Z2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50IGV4Y2x1c2l2ZS4gICovCisrCisrZXh0ZXJuIHN0cnVj dCB2YWx1ZSAqZXZhbHVhdGVfcHJvYmVfYXJndW1lbnQgKHN0cnVjdCBwcm9iZSAqcHJvYmUsCisr CQkJCQkgICAgICB1bnNpZ25lZCBuKTsKKysKKyAvKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRo YXQgZmluZHMgYSBwcm9iZSBhdCB0aGUgUEMgaW4gRlJBTUUgYW5kCisgICAgZXZhbHVhdGVzIGFy Z3VtZW50IE4sIHdpdGggMCA8PSBOIDwgbnVtYmVyX29mX2FyZ3MuICBJZiB0aGVyZSBpcyBubwor ICAgIHByb2JlIGF0IHRoYXQgbG9jYXRpb24sIG9yIGlmIHRoZSBwcm9iZSBkb2VzIG5vdCBoYXZl IGVub3VnaCBhcmd1bWVudHMsCitkaWZmIC0tZ2l0IGEvZ2RiL3Byb2JlLmMgYi9nZGIvcHJvYmUu YworaW5kZXggNzdmM2IxMy4uYTYxZjRlYSAxMDA2NDQKKy0tLSBhL2dkYi9wcm9iZS5jCisrKysg Yi9nZGIvcHJvYmUuYworQEAgLTYwOCwyOCArNjA4LDU1IEBAIGluZm9fcHJvYmVzX2NvbW1hbmQg KGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQorIAorIC8qIFNlZSBjb21tZW50cyBpbiBwcm9iZS5o LiAgKi8KKyAKKyt1bnNpZ25lZAorK2dldF9wcm9iZV9hcmd1bWVudF9jb3VudCAoc3RydWN0IHBy b2JlICpwcm9iZSkKKyt7CisrICBjb25zdCBzdHJ1Y3Qgc3ltX3Byb2JlX2ZucyAqcHJvYmVfZm5z OworKworKyAgZ2RiX2Fzc2VydCAocHJvYmUtPm9iamZpbGUgIT0gTlVMTCk7CisrICBnZGJfYXNz ZXJ0IChwcm9iZS0+b2JqZmlsZS0+c2YgIT0gTlVMTCk7CisrCisrICBwcm9iZV9mbnMgPSBwcm9i ZS0+b2JqZmlsZS0+c2YtPnN5bV9wcm9iZV9mbnM7CisrCisrICBnZGJfYXNzZXJ0IChwcm9iZV9m bnMgIT0gTlVMTCk7CisrCisrICByZXR1cm4gcHJvYmVfZm5zLT5zeW1fZ2V0X3Byb2JlX2FyZ3Vt ZW50X2NvdW50IChwcm9iZSk7CisrfQorKworKy8qIFNlZSBjb21tZW50cyBpbiBwcm9iZS5oLiAg Ki8KKysKKytzdHJ1Y3QgdmFsdWUgKgorK2V2YWx1YXRlX3Byb2JlX2FyZ3VtZW50IChzdHJ1Y3Qg cHJvYmUgKnByb2JlLCB1bnNpZ25lZCBuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBzeW1fcHJvYmVf Zm5zICpwcm9iZV9mbnM7CisrCisrICBnZGJfYXNzZXJ0IChwcm9iZS0+b2JqZmlsZSAhPSBOVUxM KTsKKysgIGdkYl9hc3NlcnQgKHByb2JlLT5vYmpmaWxlLT5zZiAhPSBOVUxMKTsKKysKKysgIHBy b2JlX2ZucyA9IHByb2JlLT5vYmpmaWxlLT5zZi0+c3ltX3Byb2JlX2ZuczsKKysKKysgIGdkYl9h c3NlcnQgKHByb2JlX2ZucyAhPSBOVUxMKTsKKysKKysgIHJldHVybiBwcm9iZV9mbnMtPnN5bV9l dmFsdWF0ZV9wcm9iZV9hcmd1bWVudCAocHJvYmUsIG4pOworK30KKysKKysvKiBTZWUgY29tbWVu dHMgaW4gcHJvYmUuaC4gICovCisrCisgc3RydWN0IHZhbHVlICoKKyBwcm9iZV9zYWZlX2V2YWx1 YXRlX2F0X3BjIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIHVuc2lnbmVkIG4pCisgeworICAg c3RydWN0IHByb2JlICpwcm9iZTsKKy0gIGNvbnN0IHN0cnVjdCBzeW1fcHJvYmVfZm5zICpwcm9i ZV9mbnM7CisgICB1bnNpZ25lZCBuX2FyZ3M7CisgCisgICBwcm9iZSA9IGZpbmRfcHJvYmVfYnlf cGMgKGdldF9mcmFtZV9wYyAoZnJhbWUpKTsKKyAgIGlmICghcHJvYmUpCisgICAgIHJldHVybiBO VUxMOworIAorLSAgZ2RiX2Fzc2VydCAocHJvYmUtPm9iamZpbGUgIT0gTlVMTCk7CistICBnZGJf YXNzZXJ0IChwcm9iZS0+b2JqZmlsZS0+c2YgIT0gTlVMTCk7CistICBnZGJfYXNzZXJ0IChwcm9i ZS0+b2JqZmlsZS0+c2YtPnN5bV9wcm9iZV9mbnMgIT0gTlVMTCk7CistCistICBwcm9iZV9mbnMg PSBwcm9iZS0+b2JqZmlsZS0+c2YtPnN5bV9wcm9iZV9mbnM7CistICBuX2FyZ3MgPSBwcm9iZV9m bnMtPnN5bV9nZXRfcHJvYmVfYXJndW1lbnRfY291bnQgKHByb2JlKTsKKy0KKysgIG5fYXJncyA9 IGdldF9wcm9iZV9hcmd1bWVudF9jb3VudCAocHJvYmUpOworICAgaWYgKG4gPj0gbl9hcmdzKQor ICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIHJldHVybiBwcm9iZV9mbnMtPnN5bV9ldmFsdWF0ZV9w cm9iZV9hcmd1bWVudCAocHJvYmUsIG4pOworKyAgcmV0dXJuIGV2YWx1YXRlX3Byb2JlX2FyZ3Vt ZW50IChwcm9iZSwgbik7CisgfQorIAorIC8qIFNlZSBjb21tZW50IGluIHByb2JlLmguICAqLwor CistLXV1S1Z6QW1CK2MrelFsaHUtLQorCgpkaWZmIC0tZ2l0IGEvZ2RiLWRsb3Blbi1zdGFwLXBy b2JlLTJvZjcucGF0Y2ggYi9nZGItZGxvcGVuLXN0YXAtcHJvYmUtMm9mNy5wYXRjaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjA2Y2VjCi0tLSAvZGV2L251bGwKKysrIGIv Z2RiLWRsb3Blbi1zdGFwLXByb2JlLTJvZjcucGF0Y2gKQEAgLTAsMCArMSwxOTggQEAKK2h0dHA6 Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGItcGF0Y2hlcy8yMDEzLTA1L21zZzAwNjI3Lmh0bWwKK1N1 YmplY3Q6IFtSRkEgMi83XSBBUEkgZm9yIGluaGliaXRpbmcgc2VjdGlvbiBtYXAgdXBkYXRlcwor CisKKy0tYlBnOU5kcE05RUVUeHZxdAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0 PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKKworVGhpcyBwYXRjaCBhZGRz IGEgY291cGxlIG9mIGZ1bmN0aW9ucyB0byBhbGxvdyBzZWN0aW9uIG1hcCB1cGRhdGVzCit0byBi ZSB0ZW1wb3JhcmlseSBpbmhpYml0ZWQuICBXaXRob3V0IHRoaXMgYWJpbGl0eSwgdGhlIGNhbGxz IHRvCitldmFsdWF0ZV9wcm9iZV9hcmd1bWVudCBpbiBzdnI0X2hhbmRsZV9zb2xpYl9ldmVudCB0 cmlnZ2VyIGEgc2VjdGlvbgorbWFwIHVwZGF0ZSBldmVyeSB0aW1lIGEgZ3JvdXAgb2Ygc2hhcmVk IG9iamVjdHMgYXJlIG1hcHBlZCwgd2hpY2gKK3NpZ25pZmljYW50bHkgYWZmZWN0cyBwZXJmb3Jt YW5jZS4gIFRoZSB1cGRhdGVzIGFyZSB1bm5lY2Vzc2FyeSBpbgordGhpcyBjYXNlIGFzIHRoZSBz ZWN0aW9ucyBpbiBxdWVzdGlvbiBhcmUgaW4gdGhlIHJ1bnRpbWUgbGlua2VyIGFuZAorc28gYWxy ZWFkeSBpbiB0aGUgc2VjdGlvbiBtYXAuCisKKy0tYlBnOU5kcE05RUVUeHZxdAorQ29udGVudC1U eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBh dHRhY2htZW50OyBmaWxlbmFtZT0icnRsZC1wcm9iZXMtMi1pbmhpYml0LXNtLXVwZGF0ZXMucGF0 Y2giCisKKzIwMTMtMDUtMTYgIEdhcnkgQmVuc29uICA8Z2JlbnNvbkByZWRoYXQuY29tPgorCisJ KiBvYmpmaWxlcy5oIChpbmhpYml0X3NlY3Rpb25fbWFwX3VwZGF0ZXMpOiBOZXcgZnVuY3Rpb24K KwlkZWNsYXJhdGlvbi4KKwkocmVzdW1lX3NlY3Rpb25fbWFwX3VwZGF0ZXMpOiBMaWtld2lzZS4K KwkocmVzdW1lX3NlY3Rpb25fbWFwX3VwZGF0ZXNfY2xlYW51cCk6IExpa2V3aXNlLgorCSogb2Jq ZmlsZXMuYyAob2JqZmlsZV9wc3BhY2VfaW5mbyk6IFJlbW92ZWQgZmllbGQKKwkib2JqZmlsZXNf Y2hhbmdlZF9wIi4gIE5ldyBmaWVsZHMgIm5ld19vYmpmaWxlc19hdmFpbGFibGUiLAorCSJzZWN0 aW9uX21hcF9kaXJ0eSIgYW5kICJpbmhpYml0X3VwZGF0ZXMiLgorCShhbGxvY2F0ZV9vYmpmaWxl KTogU2V0IG5ld19vYmpmaWxlc19hdmFpbGFibGUuCisJKGZyZWVfb2JqZmlsZSk6IFNldCBzZWN0 aW9uX21hcF9kaXJ0eS4KKwkob2JqZmlsZV9yZWxvY2F0ZTEpOiBMaWtld2lzZS4KKwkoaW5fcGx0 X3NlY3Rpb24pOiBMaWtld2lzZS4KKwkoZmluZF9wY19zZWN0aW9uKTogVXBkYXRlIHRoZSBjb25k aXRpb25zIHVuZGVyIHdoaWNoIHRoZQorCXNlY3Rpb24gbWFwIHdpbGwgYmUgdXBkYXRlZC4KKwko aW5oaWJpdF9zZWN0aW9uX21hcF91cGRhdGVzKTogTmV3IGZ1bmN0aW9uLgorCShyZXN1bWVfc2Vj dGlvbl9tYXBfdXBkYXRlcyk6IExpa2V3aXNlLgorCShyZXN1bWVfc2VjdGlvbl9tYXBfdXBkYXRl c19jbGVhbnVwKTogTGlrZXdpc2UuCisKK2RpZmYgLS1naXQgYS9nZGIvb2JqZmlsZXMuaCBiL2dk Yi9vYmpmaWxlcy5oCitpbmRleCA5MzE0OWUyLi4wYjdlZWE5IDEwMDY0NAorLS0tIGEvZ2RiL29i amZpbGVzLmgKKysrKyBiL2dkYi9vYmpmaWxlcy5oCitAQCAtNTAxLDYgKzUwMSwyMiBAQCBleHRl cm4gaW50IGluX3BsdF9zZWN0aW9uIChDT1JFX0FERFIsIGNoYXIgKik7CisgICAgbW9kdWxlcy4g ICovCisgREVDTEFSRV9SRUdJU1RSWShvYmpmaWxlKTsKKyAKKysvKiBJbiBub3JtYWwgdXNlLCB0 aGUgc2VjdGlvbiBtYXAgd2lsbCBiZSByZWJ1aWx0IGJ5IEZJTkRfUENfU0VDVElPTgorKyAgIGlm IG9iamZpbGVzIGhhdmUgYmVlbiBhZGRlZCwgcmVtb3ZlZCBvciByZWxvY2F0ZWQgc2luY2UgaXQg d2FzIGxhc3QKKysgICBjYWxsZWQuICBDYWxsaW5nIElOSElCSVRfU0VDVElPTl9NQVBfVVBEQVRF UyB3aWxsIGluaGliaXQgdGhpcworKyAgIGJlaGF2aW9yIHVudGlsIFJFU1VNRV9TRUNUSU9OX01B UF9VUERBVEVTIGlzIGNhbGxlZC4gIElmIHlvdSBjYWxsCisrICAgSU5ISUJJVF9TRUNUSU9OX01B UF9VUERBVEVTIHlvdSBtdXN0IGVuc3VyZSB0aGF0IGV2ZXJ5IGNhbGwgdG8KKysgICBGSU5EX1BD X1NFQ1RJT04gaW4gdGhlIGluaGliaXRlZCByZWdpb24gcmVsYXRlcyB0byBhIHNlY3Rpb24gdGhh dAorKyAgIGlzIGFscmVhZHkgaW4gdGhlIHNlY3Rpb24gbWFwIGFuZCBoYXMgbm90IHNpbmNlIGJl ZW4gcmVtb3ZlZCBvcgorKyAgIHJlbG9jYXRlZC4gICovCisrZXh0ZXJuIHZvaWQgaW5oaWJpdF9z ZWN0aW9uX21hcF91cGRhdGVzICh2b2lkKTsKKysKKysvKiBSZXN1bWUgYXV0b21hdGljYWxseSBy ZWJ1aWxkaW5nIHRoZSBzZWN0aW9uIG1hcCBhcyByZXF1aXJlZC4gICovCisrZXh0ZXJuIHZvaWQg cmVzdW1lX3NlY3Rpb25fbWFwX3VwZGF0ZXMgKHZvaWQpOworKworKy8qIFZlcnNpb24gb2YgdGhl IGFib3ZlIHN1aXRhYmxlIGZvciB1c2UgYXMgYSBjbGVhbnVwLiAgKi8KKytleHRlcm4gdm9pZCBy ZXN1bWVfc2VjdGlvbl9tYXBfdXBkYXRlc19jbGVhbnVwICh2b2lkICphcmcpOworKworIGV4dGVy biB2b2lkIGRlZmF1bHRfaXRlcmF0ZV9vdmVyX29iamZpbGVzX2luX3NlYXJjaF9vcmRlcgorICAg KHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorICAgIGl0ZXJhdGVfb3Zlcl9vYmpmaWxlc19pbl9z ZWFyY2hfb3JkZXJfY2JfZnR5cGUgKmNiLAorZGlmZiAtLWdpdCBhL2dkYi9vYmpmaWxlcy5jIGIv Z2RiL29iamZpbGVzLmMKK2luZGV4IDNlNDllYTIuLjNhZjEwNjQgMTAwNjQ0CistLS0gYS9nZGIv b2JqZmlsZXMuYworKysrIGIvZ2RiL29iamZpbGVzLmMKK0BAIC02Nyw5ICs2NywxOCBAQCBzdHJ1 Y3Qgb2JqZmlsZSAqcnRfY29tbW9uX29iamZpbGU7CS8qIEZvciBydW50aW1lIGNvbW1vbiBzeW1i b2xzICovCisgCisgc3RydWN0IG9iamZpbGVfcHNwYWNlX2luZm8KKyB7CistICBpbnQgb2JqZmls ZXNfY2hhbmdlZF9wOworICAgc3RydWN0IG9ial9zZWN0aW9uICoqc2VjdGlvbnM7CisgICBpbnQg bnVtX3NlY3Rpb25zOworKworKyAgLyogTm9uemVybyBpZiBvYmplY3QgZmlsZXMgaGF2ZSBiZWVu IGFkZGVkIHNpbmNlIHRoZSBzZWN0aW9uIG1hcAorKyAgICAgd2FzIGxhc3QgdXBkYXRlZC4gICov CisrICBpbnQgbmV3X29iamZpbGVzX2F2YWlsYWJsZTsKKysKKysgIC8qIE5vbnplcm8gaWYgdGhl IHNlY3Rpb24gbWFwIE1VU1QgYmUgdXBkYXRlZCBiZWZvcmUgdXNlLiAgKi8KKysgIGludCBzZWN0 aW9uX21hcF9kaXJ0eTsKKysKKysgIC8qIE5vbnplcm8gaWYgc2VjdGlvbiBtYXAgdXBkYXRlcyBz aG91bGQgYmUgaW5oaWJpdGVkIGlmIHBvc3NpYmxlLiAgKi8KKysgIGludCBpbmhpYml0X3VwZGF0 ZXM7CisgfTsKKyAKKyAvKiBQZXItcHJvZ3JhbS1zcGFjZSBkYXRhIGtleS4gICovCitAQCAtMzE3 LDcgKzMyNiw3IEBAIGFsbG9jYXRlX29iamZpbGUgKGJmZCAqYWJmZCwgaW50IGZsYWdzKQorICAg b2JqZmlsZS0+ZmxhZ3MgfD0gZmxhZ3M7CisgCisgICAvKiBSZWJ1aWxkIHNlY3Rpb24gbWFwIG5l eHQgdGltZSB3ZSBuZWVkIGl0LiAgKi8KKy0gIGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChvYmpm aWxlLT5wc3BhY2UpLT5vYmpmaWxlc19jaGFuZ2VkX3AgPSAxOworKyAgZ2V0X29iamZpbGVfcHNw YWNlX2RhdGEgKG9iamZpbGUtPnBzcGFjZSktPm5ld19vYmpmaWxlc19hdmFpbGFibGUgPSAxOwor IAorICAgcmV0dXJuIG9iamZpbGU7CisgfQorQEAgLTY0Niw3ICs2NTUsNyBAQCBmcmVlX29iamZp bGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQorICAgb2JzdGFja19mcmVlICgmb2JqZmlsZS0+ b2JqZmlsZV9vYnN0YWNrLCAwKTsKKyAKKyAgIC8qIFJlYnVpbGQgc2VjdGlvbiBtYXAgbmV4dCB0 aW1lIHdlIG5lZWQgaXQuICAqLworLSAgZ2V0X29iamZpbGVfcHNwYWNlX2RhdGEgKG9iamZpbGUt PnBzcGFjZSktPm9iamZpbGVzX2NoYW5nZWRfcCA9IDE7CisrICBnZXRfb2JqZmlsZV9wc3BhY2Vf ZGF0YSAob2JqZmlsZS0+cHNwYWNlKS0+c2VjdGlvbl9tYXBfZGlydHkgPSAxOworIAorICAgeGZy ZWUgKG9iamZpbGUpOworIH0KK0BAIC04MjYsNyArODM1LDcgQEAgb2JqZmlsZV9yZWxvY2F0ZTEg KHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLAorICAgfQorIAorICAgLyogUmVidWlsZCBzZWN0aW9u IG1hcCBuZXh0IHRpbWUgd2UgbmVlZCBpdC4gICovCistICBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0 YSAob2JqZmlsZS0+cHNwYWNlKS0+b2JqZmlsZXNfY2hhbmdlZF9wID0gMTsKKysgIGdldF9vYmpm aWxlX3BzcGFjZV9kYXRhIChvYmpmaWxlLT5wc3BhY2UpLT5zZWN0aW9uX21hcF9kaXJ0eSA9IDE7 CisgCisgICAvKiBVcGRhdGUgdGhlIHRhYmxlIGluIGV4ZWNfb3BzLCB1c2VkIHRvIHJlYWQgbWVt b3J5LiAgKi8KKyAgIEFMTF9PQkpGSUxFX09TRUNUSU9OUyAob2JqZmlsZSwgcykKK0BAIC0xMjkx LDExICsxMzAwLDE0IEBAIHN0YXRpYyB2b2lkCisgdXBkYXRlX3NlY3Rpb25fbWFwIChzdHJ1Y3Qg cHJvZ3JhbV9zcGFjZSAqcHNwYWNlLAorIAkJICAgIHN0cnVjdCBvYmpfc2VjdGlvbiAqKipwbWFw LCBpbnQgKnBtYXBfc2l6ZSkKKyB7CisrICBzdHJ1Y3Qgb2JqZmlsZV9wc3BhY2VfaW5mbyAqcHNw YWNlX2luZm87CisgICBpbnQgYWxsb2Nfc2l6ZSwgbWFwX3NpemUsIGk7CisgICBzdHJ1Y3Qgb2Jq X3NlY3Rpb24gKnMsICoqbWFwOworICAgc3RydWN0IG9iamZpbGUgKm9iamZpbGU7CisgCistICBn ZGJfYXNzZXJ0IChnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAocHNwYWNlKS0+b2JqZmlsZXNfY2hh bmdlZF9wICE9IDApOworKyAgcHNwYWNlX2luZm8gPSBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAo Y3VycmVudF9wcm9ncmFtX3NwYWNlKTsKKysgIGdkYl9hc3NlcnQgKHBzcGFjZV9pbmZvLT5zZWN0 aW9uX21hcF9kaXJ0eSAhPSAwCisrCSAgICAgIHx8IHBzcGFjZV9pbmZvLT5uZXdfb2JqZmlsZXNf YXZhaWxhYmxlICE9IDApOworIAorICAgbWFwID0gKnBtYXA7CisgICB4ZnJlZSAobWFwKTsKK0BA IC0xMzY1LDcgKzEzNzcsOSBAQCBmaW5kX3BjX3NlY3Rpb24gKENPUkVfQUREUiBwYykKKyAgICAg cmV0dXJuIHM7CisgCisgICBwc3BhY2VfaW5mbyA9IGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChj dXJyZW50X3Byb2dyYW1fc3BhY2UpOworLSAgaWYgKHBzcGFjZV9pbmZvLT5vYmpmaWxlc19jaGFu Z2VkX3AgIT0gMCkKKysgIGlmIChwc3BhY2VfaW5mby0+c2VjdGlvbl9tYXBfZGlydHkKKysgICAg ICB8fCAocHNwYWNlX2luZm8tPm5ld19vYmpmaWxlc19hdmFpbGFibGUKKysJICAmJiAhcHNwYWNl X2luZm8tPmluaGliaXRfdXBkYXRlcykpCisgICAgIHsKKyAgICAgICB1cGRhdGVfc2VjdGlvbl9t YXAgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSwKKyAJCQkgICZwc3BhY2VfaW5mby0+c2VjdGlvbnMs CitAQCAtMTM3Myw3ICsxMzg3LDggQEAgZmluZF9wY19zZWN0aW9uIChDT1JFX0FERFIgcGMpCisg CisgICAgICAgLyogRG9uJ3QgbmVlZCB1cGRhdGVzIHRvIHNlY3Rpb24gbWFwIHVudGlsIG9iamZp bGVzIGFyZSBhZGRlZCwKKyAgICAgICAgICByZW1vdmVkIG9yIHJlbG9jYXRlZC4gICovCistICAg ICAgcHNwYWNlX2luZm8tPm9iamZpbGVzX2NoYW5nZWRfcCA9IDA7CisrICAgICAgcHNwYWNlX2lu Zm8tPm5ld19vYmpmaWxlc19hdmFpbGFibGUgPSAwOworKyAgICAgIHBzcGFjZV9pbmZvLT5zZWN0 aW9uX21hcF9kaXJ0eSA9IDA7CisgICAgIH0KKyAKKyAgIC8qIFRoZSBDIHN0YW5kYXJkIChJU08v SUVDIDk4OTk6VEMyKSByZXF1aXJlcyB0aGUgQkFTRSBhcmd1bWVudCB0bworQEAgLTE0MTQsMTQg KzE0MjksMzggQEAgaW5fcGx0X3NlY3Rpb24gKENPUkVfQUREUiBwYywgY2hhciAqbmFtZSkKKyB9 CisgDAorIAorLS8qIFNldCBvYmpmaWxlc19jaGFuZ2VkX3Agc28gc2VjdGlvbiBtYXAgd2lsbCBi ZSByZWJ1aWx0IG5leHQgdGltZSBpdAorKy8qIFNldCBzZWN0aW9uX21hcF9kaXJ0eSBzbyBzZWN0 aW9uIG1hcCB3aWxsIGJlIHJlYnVpbHQgbmV4dCB0aW1lIGl0CisgICAgaXMgdXNlZC4gIENhbGxl ZCBieSByZXJlYWRfc3ltYm9scy4gICovCisgCisgdm9pZAorIG9iamZpbGVzX2NoYW5nZWQgKHZv aWQpCisgeworICAgLyogUmVidWlsZCBzZWN0aW9uIG1hcCBuZXh0IHRpbWUgd2UgbmVlZCBpdC4g ICovCistICBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9ncmFtX3NwYWNlKS0+ b2JqZmlsZXNfY2hhbmdlZF9wID0gMTsKKysgIGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJy ZW50X3Byb2dyYW1fc3BhY2UpLT5zZWN0aW9uX21hcF9kaXJ0eSA9IDE7CisrfQorKworKy8qIFNl ZSBjb21tZW50cyBpbiBvYmpmaWxlcy5oLiAgKi8KKysKKyt2b2lkCisraW5oaWJpdF9zZWN0aW9u X21hcF91cGRhdGVzICh2b2lkKQorK3sKKysgIGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJy ZW50X3Byb2dyYW1fc3BhY2UpLT5pbmhpYml0X3VwZGF0ZXMgPSAxOworK30KKysKKysvKiBTZWUg Y29tbWVudHMgaW4gb2JqZmlsZXMuaC4gICovCisrCisrdm9pZAorK3Jlc3VtZV9zZWN0aW9uX21h cF91cGRhdGVzICh2b2lkKQorK3sKKysgIGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJyZW50 X3Byb2dyYW1fc3BhY2UpLT5pbmhpYml0X3VwZGF0ZXMgPSAwOworK30KKysKKysvKiBTZWUgY29t bWVudHMgaW4gb2JqZmlsZXMuaC4gICovCisrCisrdm9pZAorK3Jlc3VtZV9zZWN0aW9uX21hcF91 cGRhdGVzX2NsZWFudXAgKHZvaWQgKmFyZykKKyt7CisrICByZXN1bWVfc2VjdGlvbl9tYXBfdXBk YXRlcyAoKTsKKyB9CisgCisgLyogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHRoZSAi aXRlcmF0ZV9vdmVyX29iamZpbGVzX2luX3NlYXJjaF9vcmRlciIKKworLS1iUGc5TmRwTTlFRVR4 dnF0LS0KKwoKZGlmZiAtLWdpdCBhL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS0zb2Y3LnBhdGNoIGIv Z2RiLWRsb3Blbi1zdGFwLXByb2JlLTNvZjcucGF0Y2gKaW5kZXggMjMzN2RlZC4uOTMyNTFjYSAx MDA2NDQKLS0tIGEvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTNvZjcucGF0Y2gKKysrIGIvZ2RiLWRs b3Blbi1zdGFwLXByb2JlLTNvZjcucGF0Y2gKQEAgLTEsOTggKzEsMzE0IEBACi0yMDEyLTA3LTE5 ICBHYXJ5IEJlbnNvbiAgPGdiZW5zb25AcmVkaGF0LmNvbT4KK2h0dHA6Ly9zb3VyY2V3YXJlLm9y Zy9tbC9nZGItcGF0Y2hlcy8yMDEzLTA1L21zZzAwNjI2Lmh0bWwKK1N1YmplY3Q6IFtSRkEgMy83 XSBOZXcgZ2Ric2VydmVyIGZ1bmN0aW9uYWxpdHkKIAotCSogcHJvYmUuaCAoZ2V0X3Byb2JlX2Fy Z3VtZW50X2NvdW50KTogTmV3IGRlY2xhcmF0aW9uLgotCShldmFsdWF0ZV9wcm9iZV9hcmd1bWVu dCk6IExpa2V3aXNlLgotCSogcHJvYmUuYyAoZ2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50KTogTmV3 IGZ1bmN0aW9uLgotCShldmFsdWF0ZV9wcm9iZV9hcmd1bWVudCk6IExpa2V3aXNlLgotCShwcm9i ZV9zYWZlX2V2YWx1YXRlX2F0X3BjKTogVXNlIHRoZSBhYm92ZSBuZXcgZnVuY3Rpb25zLgogCi1k aWZmIC0tZ2l0IGEvZ2RiL3Byb2JlLmggYi9nZGIvcHJvYmUuaAotaW5kZXggOGQ0NGNhMi4uMWQy OWI4NyAxMDA2NDQKLS0tLSBhL2dkYi9wcm9iZS5oCi0rKysgYi9nZGIvcHJvYmUuaAotQEAgLTIx NCw2ICsyMTQsMTYgQEAgZXh0ZXJuIHZvaWQgaW5mb19wcm9iZXNfZm9yX29wcyAoY2hhciAqYXJn LCBpbnQgZnJvbV90dHksCistLUtjOUhOanB6T1hWYzdGRlUKK0NvbnRlbnQtVHlwZTogdGV4dC9w bGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCisKK1Ro aXMgcGF0Y2ggdXBkYXRlcyBnZGJzZXJ2ZXIgdG8gYWxsb3cgYXJndW1lbnRzIHRvIGJlIHBhc3Nl ZCBpbiB0aGUKK2FubmV4IG9mIHFYZmVyOmxpYnJhcmllcy1zdnI0OnJlYWQgdG8gYWxsb3cgdGhh dCBmdW5jdGlvbiB0byB0cmFuc2ZlcgorcGFydGlhbCBsaXN0cyBvZiBsaWJyYXJpZXMuICBUaGUg YWJpbGl0eSBvZiBnZGJzZXJ2ZXIgdG8gc3VwcG9ydAordGhlc2UgYXJndW1lbnRzIGlzIGluZGlj YXRlZCBieSBhIHFTdXBwb3J0ZWQgcmVzcG9uc2UgY29udGFpbmluZworImF1Z21lbnRlZC1saWJy YXJpZXMtc3ZyNC1yZWFkKyIuCisKKy0tS2M5SE5qcHpPWFZjN0ZGVQorQ29udGVudC1UeXBlOiB0 ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2ht ZW50OyBmaWxlbmFtZT0icnRsZC1wcm9iZXMtMy1nZGJzZXJ2ZXIucGF0Y2giCisKKzIwMTMtMDUt MTYgIEdhcnkgQmVuc29uICA8Z2JlbnNvbkByZWRoYXQuY29tPgorCisJKiBzZXJ2ZXIuYyAoaGFu ZGxlX3F1ZXJ5KTogQWRkICJhdWdtZW50ZWQtbGlicmFyaWVzLXN2cjQtcmVhZCsiCisJdG8gcVN1 cHBvcnRlZCByZXNwb25zZSB3aGVuIGFwcHJvcHJpYXRlLgorCShoYW5kbGVfcXhmZXJfbGlicmFy aWVzX3N2cjQpOiBBbGxvdyBxWGZlcjpsaWJyYXJpZXMtc3ZyNDpyZWFkCisJd2l0aCBub256ZXJv LWxlbmd0aCBhbm5leC4KKwkqIGxpbnV4LWxvdy5jIChsaW51eF9xeGZlcl9saWJyYXJpZXNfc3Zy NCk6IFBhcnNlIGFuZCBoYW5kbGUKKwlhcmd1bWVudHMgc3VwcGxpZWQgaW4gYW5uZXguCisKK2Rp ZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL3NlcnZlci5jIGIvZ2RiL2dkYnNlcnZlci9zZXJ2ZXIu YworaW5kZXggNmJiMzZkOC4uMGE4ZjY4YiAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvc2Vy dmVyLmMKKysrKyBiL2dkYi9nZGJzZXJ2ZXIvc2VydmVyLmMKK0BAIC0xMTE1LDggKzExMTUsNyBA QCBoYW5kbGVfcXhmZXJfbGlicmFyaWVzX3N2cjQgKGNvbnN0IGNoYXIgKmFubmV4LAorICAgaWYg KHdyaXRlYnVmICE9IE5VTEwpCisgICAgIHJldHVybiAtMjsKICAKLSBleHRlcm4gc3RydWN0IGNt ZF9saXN0X2VsZW1lbnQgKippbmZvX3Byb2Jlc19jbWRsaXN0X2dldCAodm9pZCk7CistICBpZiAo YW5uZXhbMF0gIT0gJ1wwJyB8fCAhdGFyZ2V0X3J1bm5pbmcgKCkKKy0gICAgICB8fCB0aGVfdGFy Z2V0LT5xeGZlcl9saWJyYXJpZXNfc3ZyNCA9PSBOVUxMKQorKyAgaWYgKCF0YXJnZXRfcnVubmlu ZyAoKSB8fCB0aGVfdGFyZ2V0LT5xeGZlcl9saWJyYXJpZXNfc3ZyNCA9PSBOVUxMKQorICAgICBy ZXR1cm4gLTE7CiAgCi0rLyogUmV0dXJuIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0aGUgc3BlY2lm aWVkIHByb2JlLiAgKi8KLSsKLStleHRlcm4gdW5zaWduZWQgZ2V0X3Byb2JlX2FyZ3VtZW50X2Nv dW50IChzdHJ1Y3QgcHJvYmUgKnByb2JlKTsKLSsKLSsvKiBFdmFsdWF0ZSBhcmd1bWVudCBOIG9m IHRoZSBzcGVjaWZpZWQgcHJvYmUuICBOIG11c3QgYmUgYmV0d2VlbiAwCi0rICAgaW5jbHVzaXZl IGFuZCBnZXRfcHJvYmVfYXJndW1lbnRfY291bnQgZXhjbHVzaXZlLiAgKi8KLSsKLStleHRlcm4g c3RydWN0IHZhbHVlICpldmFsdWF0ZV9wcm9iZV9hcmd1bWVudCAoc3RydWN0IHByb2JlICpwcm9i ZSwKLSsJCQkJCSAgICAgIHVuc2lnbmVkIG4pOwotKwotIC8qIEEgY29udmVuaWVuY2UgZnVuY3Rp b24gdGhhdCBmaW5kcyBhIHByb2JlIGF0IHRoZSBQQyBpbiBGUkFNRSBhbmQKLSAgICBldmFsdWF0 ZXMgYXJndW1lbnQgTiwgd2l0aCAwIDw9IE4gPCBudW1iZXJfb2ZfYXJncy4gIElmIHRoZXJlIGlz IG5vCi0gICAgcHJvYmUgYXQgdGhhdCBsb2NhdGlvbiwgb3IgaWYgdGhlIHByb2JlIGRvZXMgbm90 IGhhdmUgZW5vdWdoIGFyZ3VtZW50cywKLWRpZmYgLS1naXQgYS9nZGIvcHJvYmUuYyBiL2dkYi9w cm9iZS5jCi1pbmRleCA3N2YzYjEzLi5hNjFmNGVhIDEwMDY0NAotLS0tIGEvZ2RiL3Byb2JlLmMK LSsrKyBiL2dkYi9wcm9iZS5jCi1AQCAtNjMyLDI4ICs2MzIsNTUgQEAgaW5mb19wcm9iZXNfY29t bWFuZCAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHkpCisgICByZXR1cm4gdGhlX3RhcmdldC0+cXhm ZXJfbGlicmFyaWVzX3N2cjQgKGFubmV4LCByZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4p OworQEAgLTE3NDMsNyArMTc0Miw4IEBAIGhhbmRsZV9xdWVyeSAoY2hhciAqb3duX2J1ZiwgaW50 IHBhY2tldF9sZW4sIGludCAqbmV3X3BhY2tldF9sZW5fcCkKKyAJICAgICAgIFBCVUZTSVogLSAx KTsKICAKLSAvKiBTZWUgY29tbWVudHMgaW4gcHJvYmUuaC4gICovCisgICAgICAgaWYgKHRoZV90 YXJnZXQtPnF4ZmVyX2xpYnJhcmllc19zdnI0ICE9IE5VTEwpCistCXN0cmNhdCAob3duX2J1Ziwg IjtxWGZlcjpsaWJyYXJpZXMtc3ZyNDpyZWFkKyIpOworKwlzdHJjYXQgKG93bl9idWYsICI7cVhm ZXI6bGlicmFyaWVzLXN2cjQ6cmVhZCsiCisrCQkiO2F1Z21lbnRlZC1saWJyYXJpZXMtc3ZyNC1y ZWFkKyIpOworICAgICAgIGVsc2UKKyAJeworIAkgIC8qIFdlIGRvIG5vdCBoYXZlIGFueSBob29r IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIG5vbi1TVlI0IHRhcmdldAorZGlmZiAtLWdpdCBhL2dk Yi9nZGJzZXJ2ZXIvbGludXgtbG93LmMgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LWxvdy5jCitpbmRl eCA3MmM1MWUwLi5iZWIzYjhmIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cu YworKysrIGIvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cuYworQEAgLTU2NzcsNiArNTY3NywxMiBA QCBsaW51eF9xeGZlcl9saWJyYXJpZXNfc3ZyNCAoY29uc3QgY2hhciAqYW5uZXgsIHVuc2lnbmVk IGNoYXIgKnJlYWRidWYsCisgICAgIH07CisgICBjb25zdCBzdHJ1Y3QgbGlua19tYXBfb2Zmc2V0 cyAqbG1vOworICAgdW5zaWduZWQgaW50IG1hY2hpbmU7CisrICBpbnQgcHRyX3NpemU7CisrICBD T1JFX0FERFIgbG1fYWRkciA9IDAsIGxtX3ByZXYgPSAwOworKyAgaW50IGFsbG9jYXRlZCA9IDEw MjQ7CisrICBjaGFyICpwOworKyAgQ09SRV9BRERSIGxfbmFtZSwgbF9hZGRyLCBsX2xkLCBsX25l eHQsIGxfcHJldjsKKysgIGludCBoZWFkZXJfZG9uZSA9IDA7CiAgCi0rdW5zaWduZWQKLStnZXRf cHJvYmVfYXJndW1lbnRfY291bnQgKHN0cnVjdCBwcm9iZSAqcHJvYmUpCi0rewotKyAgY29uc3Qg c3RydWN0IHN5bV9wcm9iZV9mbnMgKnByb2JlX2ZuczsKLSsKLSsgIGdkYl9hc3NlcnQgKHByb2Jl LT5vYmpmaWxlICE9IE5VTEwpOwotKyAgZ2RiX2Fzc2VydCAocHJvYmUtPm9iamZpbGUtPnNmICE9 IE5VTEwpOwotKwotKyAgcHJvYmVfZm5zID0gcHJvYmUtPm9iamZpbGUtPnNmLT5zeW1fcHJvYmVf Zm5zOwotKwotKyAgZ2RiX2Fzc2VydCAocHJvYmVfZm5zICE9IE5VTEwpOwotKwotKyAgcmV0dXJu IHByb2JlX2Zucy0+c3ltX2dldF9wcm9iZV9hcmd1bWVudF9jb3VudCAocHJvYmUpOwotK30KLSsK LSsvKiBTZWUgY29tbWVudHMgaW4gcHJvYmUuaC4gICovCi0rCi0rc3RydWN0IHZhbHVlICoKLStl dmFsdWF0ZV9wcm9iZV9hcmd1bWVudCAoc3RydWN0IHByb2JlICpwcm9iZSwgdW5zaWduZWQgbikK LSt7Ci0rICBjb25zdCBzdHJ1Y3Qgc3ltX3Byb2JlX2ZucyAqcHJvYmVfZm5zOworICAgaWYgKHdy aXRlYnVmICE9IE5VTEwpCisgICAgIHJldHVybiAtMjsKK0BAIC01Njg3LDEyOCArNTY5MywxNDYg QEAgbGludXhfcXhmZXJfbGlicmFyaWVzX3N2cjQgKGNvbnN0IGNoYXIgKmFubmV4LCB1bnNpZ25l ZCBjaGFyICpyZWFkYnVmLAorICAgeHNucHJpbnRmIChmaWxlbmFtZSwgc2l6ZW9mIGZpbGVuYW1l LCAiL3Byb2MvJWQvZXhlIiwgcGlkKTsKKyAgIGlzX2VsZjY0ID0gZWxmXzY0X2ZpbGVfcCAoZmls ZW5hbWUsICZtYWNoaW5lKTsKKyAgIGxtbyA9IGlzX2VsZjY0ID8gJmxtb182NGJpdF9vZmZzZXRz IDogJmxtb18zMmJpdF9vZmZzZXRzOworKyAgcHRyX3NpemUgPSBpc19lbGY2NCA/IDggOiA0Owor IAorLSAgaWYgKHByaXYtPnJfZGVidWcgPT0gMCkKKy0gICAgcHJpdi0+cl9kZWJ1ZyA9IGdldF9y X2RlYnVnIChwaWQsIGlzX2VsZjY0KTsKKysgIGlmIChhbm5leFswXSA9PSAnXDAnKQorKyAgICB7 CisrICAgICAgaW50IHJfdmVyc2lvbiA9IDA7CisgCistICAvKiBXZSBmYWlsZWQgdG8gZmluZCBE VF9ERUJVRy4gIFN1Y2ggc2l0dWF0aW9uIHdpbGwgbm90IGNoYW5nZSBmb3IgdGhpcworLSAgICAg aW5mZXJpb3IgLSBkbyBub3QgcmV0cnkgaXQuICBSZXBvcnQgaXQgdG8gR0RCIGFzIEUwMSwgc2Vl IGZvciB0aGUgcmVhc29ucworLSAgICAgYXQgdGhlIEdEQiBzb2xpYi1zdnI0LmMgc2lkZS4gICov CistICBpZiAocHJpdi0+cl9kZWJ1ZyA9PSAoQ09SRV9BRERSKSAtMSkKKy0gICAgcmV0dXJuIC0x OworKyAgICAgIGlmIChwcml2LT5yX2RlYnVnID09IDApCisrCXByaXYtPnJfZGVidWcgPSBnZXRf cl9kZWJ1ZyAocGlkLCBpc19lbGY2NCk7CisgCistICBpZiAocHJpdi0+cl9kZWJ1ZyA9PSAwKQor LSAgICB7CistICAgICAgZG9jdW1lbnQgPSB4c3RyZHVwICgiPGxpYnJhcnktbGlzdC1zdnI0IHZl cnNpb249XCIxLjBcIi8+XG4iKTsKKysgICAgICAvKiBXZSBmYWlsZWQgdG8gZmluZCBEVF9ERUJV Ry4gIFN1Y2ggc2l0dWF0aW9uIHdpbGwgbm90IGNoYW5nZQorKwkgZm9yIHRoaXMgaW5mZXJpb3Ig LSBkbyBub3QgcmV0cnkgaXQuICBSZXBvcnQgaXQgdG8gR0RCIGFzCisrCSBFMDEsIHNlZSBmb3Ig dGhlIHJlYXNvbnMgYXQgdGhlIEdEQiBzb2xpYi1zdnI0LmMgc2lkZS4gICovCisrICAgICAgaWYg KHByaXYtPnJfZGVidWcgPT0gKENPUkVfQUREUikgLTEpCisrCXJldHVybiAtMTsKICsKLSsgIGdk Yl9hc3NlcnQgKHByb2JlLT5vYmpmaWxlICE9IE5VTEwpOwotKyAgZ2RiX2Fzc2VydCAocHJvYmUt Pm9iamZpbGUtPnNmICE9IE5VTEwpOworKyAgICAgIGlmIChwcml2LT5yX2RlYnVnICE9IDApCisr CXsKKysJICBpZiAobGludXhfcmVhZF9tZW1vcnkgKHByaXYtPnJfZGVidWcgKyBsbW8tPnJfdmVy c2lvbl9vZmZzZXQsCisrCQkJCSAodW5zaWduZWQgY2hhciAqKSAmcl92ZXJzaW9uLAorKwkJCQkg c2l6ZW9mIChyX3ZlcnNpb24pKSAhPSAwCisrCSAgICAgIHx8IHJfdmVyc2lvbiAhPSAxKQorKwkg ICAgeworKwkgICAgICB3YXJuaW5nICgidW5leHBlY3RlZCByX2RlYnVnIHZlcnNpb24gJWQiLCBy X3ZlcnNpb24pOworKwkgICAgfQorKwkgIGVsc2UgaWYgKHJlYWRfb25lX3B0ciAocHJpdi0+cl9k ZWJ1ZyArIGxtby0+cl9tYXBfb2Zmc2V0LAorKwkJCQkgJmxtX2FkZHIsIHB0cl9zaXplKSAhPSAw KQorKwkgICAgeworKwkgICAgICB3YXJuaW5nICgidW5hYmxlIHRvIHJlYWQgcl9tYXAgZnJvbSAw eCVseCIsCisrCQkgICAgICAgKGxvbmcpIHByaXYtPnJfZGVidWcgKyBsbW8tPnJfbWFwX29mZnNl dCk7CisrCSAgICB9CisrCX0KKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgaW50IGFs bG9jYXRlZCA9IDEwMjQ7CistICAgICAgY2hhciAqcDsKKy0gICAgICBjb25zdCBpbnQgcHRyX3Np emUgPSBpc19lbGY2NCA/IDggOiA0OworLSAgICAgIENPUkVfQUREUiBsbV9hZGRyLCBsbV9wcmV2 LCBsX25hbWUsIGxfYWRkciwgbF9sZCwgbF9uZXh0LCBsX3ByZXY7CistICAgICAgaW50IHJfdmVy c2lvbiwgaGVhZGVyX2RvbmUgPSAwOworLQorLSAgICAgIGRvY3VtZW50ID0geG1hbGxvYyAoYWxs b2NhdGVkKTsKKy0gICAgICBzdHJjcHkgKGRvY3VtZW50LCAiPGxpYnJhcnktbGlzdC1zdnI0IHZl cnNpb249XCIxLjBcIiIpOworLSAgICAgIHAgPSBkb2N1bWVudCArIHN0cmxlbiAoZG9jdW1lbnQp OworLQorLSAgICAgIHJfdmVyc2lvbiA9IDA7CistICAgICAgaWYgKGxpbnV4X3JlYWRfbWVtb3J5 IChwcml2LT5yX2RlYnVnICsgbG1vLT5yX3ZlcnNpb25fb2Zmc2V0LAorLQkJCSAgICAgKHVuc2ln bmVkIGNoYXIgKikgJnJfdmVyc2lvbiwKKy0JCQkgICAgIHNpemVvZiAocl92ZXJzaW9uKSkgIT0g MAorLQkgIHx8IHJfdmVyc2lvbiAhPSAxKQorKyAgICAgIHdoaWxlIChhbm5leFswXSAhPSAnXDAn KQorIAl7CistCSAgd2FybmluZyAoInVuZXhwZWN0ZWQgcl9kZWJ1ZyB2ZXJzaW9uICVkIiwgcl92 ZXJzaW9uKTsKKy0JICBnb3RvIGRvbmU7CisrCSAgY29uc3QgY2hhciAqc2VwOworKwkgIENPUkVf QUREUiAqYWRkcnA7CisrCSAgaW50IGxlbjsKICsKLSsgIHByb2JlX2ZucyA9IHByb2JlLT5vYmpm aWxlLT5zZi0+c3ltX3Byb2JlX2ZuczsKKysJICBzZXAgPSBzdHJjaHIgKGFubmV4LCAnPScpOwor KwkgIGlmICghc2VwKQorKwkgICAgYnJlYWs7CiArCi0rICBnZGJfYXNzZXJ0IChwcm9iZV9mbnMg IT0gTlVMTCk7CisrCSAgbGVuID0gc2VwIC0gYW5uZXg7CisrCSAgaWYgKGxlbiA9PSA1ICYmICFz dHJuY21wIChhbm5leCwgInN0YXJ0IiwgNSkpCisrCSAgICBhZGRycCA9ICZsbV9hZGRyOworKwkg IGVsc2UgaWYgKGxlbiA9PSA0ICYmICFzdHJuY21wIChhbm5leCwgInByZXYiLCA0KSkKKysJICAg IGFkZHJwID0gJmxtX3ByZXY7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBhbm5leCA9IHN0 cmNociAoc2VwLCAnOycpOworKwkgICAgICBpZiAoIWFubmV4KQorKwkJYnJlYWs7CisrCSAgICAg IGFubmV4Kys7CisrCSAgICAgIGNvbnRpbnVlOworKwkgICAgfQogKwotKyAgcmV0dXJuIHByb2Jl X2Zucy0+c3ltX2V2YWx1YXRlX3Byb2JlX2FyZ3VtZW50IChwcm9iZSwgbik7Ci0rfQorKwkgIGFu bmV4ID0gZGVjb2RlX2FkZHJlc3NfdG9fc2VtaWNvbG9uIChhZGRycCwgc2VwICsgMSk7CisgCX0K KysgICAgfQorIAorLSAgICAgIGlmIChyZWFkX29uZV9wdHIgKHByaXYtPnJfZGVidWcgKyBsbW8t PnJfbWFwX29mZnNldCwKKy0JCQkmbG1fYWRkciwgcHRyX3NpemUpICE9IDApCisrICBkb2N1bWVu dCA9IHhtYWxsb2MgKGFsbG9jYXRlZCk7CisrICBzdHJjcHkgKGRvY3VtZW50LCAiPGxpYnJhcnkt bGlzdC1zdnI0IHZlcnNpb249XCIxLjBcIiIpOworKyAgcCA9IGRvY3VtZW50ICsgc3RybGVuIChk b2N1bWVudCk7CiArCi0rLyogU2VlIGNvbW1lbnRzIGluIHByb2JlLmguICAqLworKyAgd2hpbGUg KGxtX2FkZHIKKysJICYmIHJlYWRfb25lX3B0ciAobG1fYWRkciArIGxtby0+bF9uYW1lX29mZnNl dCwKKysJCQkgICZsX25hbWUsIHB0cl9zaXplKSA9PSAwCisrCSAmJiByZWFkX29uZV9wdHIgKGxt X2FkZHIgKyBsbW8tPmxfYWRkcl9vZmZzZXQsCisrCQkJICAmbF9hZGRyLCBwdHJfc2l6ZSkgPT0g MAorKwkgJiYgcmVhZF9vbmVfcHRyIChsbV9hZGRyICsgbG1vLT5sX2xkX29mZnNldCwKKysJCQkg ICZsX2xkLCBwdHJfc2l6ZSkgPT0gMAorKwkgJiYgcmVhZF9vbmVfcHRyIChsbV9hZGRyICsgbG1v LT5sX3ByZXZfb2Zmc2V0LAorKwkJCSAgJmxfcHJldiwgcHRyX3NpemUpID09IDAKKysJICYmIHJl YWRfb25lX3B0ciAobG1fYWRkciArIGxtby0+bF9uZXh0X29mZnNldCwKKysJCQkgICZsX25leHQs IHB0cl9zaXplKSA9PSAwKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgY2hhciBsaWJuYW1lW1BB VEhfTUFYXTsKICsKLSBzdHJ1Y3QgdmFsdWUgKgotIHByb2JlX3NhZmVfZXZhbHVhdGVfYXRfcGMg KHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwgdW5zaWduZWQgbikKLSB7Ci0gICBzdHJ1Y3QgcHJv YmUgKnByb2JlOwotLSAgY29uc3Qgc3RydWN0IHN5bV9wcm9iZV9mbnMgKnByb2JlX2ZuczsKLSAg IHVuc2lnbmVkIG5fYXJnczsKKysgICAgICBpZiAobG1fcHJldiAhPSBsX3ByZXYpCisgCXsKKy0J ICB3YXJuaW5nICgidW5hYmxlIHRvIHJlYWQgcl9tYXAgZnJvbSAweCVseCIsCistCQkgICAobG9u ZykgcHJpdi0+cl9kZWJ1ZyArIGxtby0+cl9tYXBfb2Zmc2V0KTsKKy0JICBnb3RvIGRvbmU7Cisr CSAgd2FybmluZyAoIkNvcnJ1cHRlZCBzaGFyZWQgbGlicmFyeSBsaXN0OiAweCVseCAhPSAweCVs eCIsCisrCQkgICAobG9uZykgbG1fcHJldiwgKGxvbmcpIGxfcHJldik7CisrCSAgYnJlYWs7Cisg CX0KKyAKKy0gICAgICBsbV9wcmV2ID0gMDsKKy0gICAgICB3aGlsZSAocmVhZF9vbmVfcHRyIChs bV9hZGRyICsgbG1vLT5sX25hbWVfb2Zmc2V0LAorLQkJCSAgICZsX25hbWUsIHB0cl9zaXplKSA9 PSAwCistCSAgICAgJiYgcmVhZF9vbmVfcHRyIChsbV9hZGRyICsgbG1vLT5sX2FkZHJfb2Zmc2V0 LAorLQkJCSAgICAgICZsX2FkZHIsIHB0cl9zaXplKSA9PSAwCistCSAgICAgJiYgcmVhZF9vbmVf cHRyIChsbV9hZGRyICsgbG1vLT5sX2xkX29mZnNldCwKKy0JCQkgICAgICAmbF9sZCwgcHRyX3Np emUpID09IDAKKy0JICAgICAmJiByZWFkX29uZV9wdHIgKGxtX2FkZHIgKyBsbW8tPmxfcHJldl9v ZmZzZXQsCistCQkJICAgICAgJmxfcHJldiwgcHRyX3NpemUpID09IDAKKy0JICAgICAmJiByZWFk X29uZV9wdHIgKGxtX2FkZHIgKyBsbW8tPmxfbmV4dF9vZmZzZXQsCistCQkJICAgICAgJmxfbmV4 dCwgcHRyX3NpemUpID09IDApCisrICAgICAgLyogTm90IGNoZWNraW5nIGZvciBlcnJvciBiZWNh dXNlIHJlYWRpbmcgbWF5IHN0b3AgYmVmb3JlCisrCSB3ZSd2ZSBnb3QgUEFUSF9NQVggd29ydGgg b2YgY2hhcmFjdGVycy4gICovCisrICAgICAgbGlibmFtZVswXSA9ICdcMCc7CisrICAgICAgbGlu dXhfcmVhZF9tZW1vcnkgKGxfbmFtZSwgbGlibmFtZSwgc2l6ZW9mIChsaWJuYW1lKSAtIDEpOwor KyAgICAgIGxpYm5hbWVbc2l6ZW9mIChsaWJuYW1lKSAtIDFdID0gJ1wwJzsKKysgICAgICBpZiAo bGlibmFtZVswXSAhPSAnXDAnKQorIAl7CistCSAgdW5zaWduZWQgY2hhciBsaWJuYW1lW1BBVEhf TUFYXTsKKysJICAvKiA2eCB0aGUgc2l6ZSBmb3IgeG1sX2VzY2FwZV90ZXh0IGJlbG93LiAgKi8K KysJICBzaXplX3QgbGVuID0gNiAqIHN0cmxlbiAoKGNoYXIgKikgbGlibmFtZSk7CisrCSAgY2hh ciAqbmFtZTsKICAKLSAgIHByb2JlID0gZmluZF9wcm9iZV9ieV9wYyAoZ2V0X2ZyYW1lX3BjIChm cmFtZSkpOwotICAgaWYgKCFwcm9iZSkKLSAgICAgcmV0dXJuIE5VTEw7CistCSAgaWYgKGxtX3By ZXYgIT0gbF9wcmV2KQorKwkgIGlmICghaGVhZGVyX2RvbmUpCisgCSAgICB7CistCSAgICAgIHdh cm5pbmcgKCJDb3JydXB0ZWQgc2hhcmVkIGxpYnJhcnkgbGlzdDogMHglbHggIT0gMHglbHgiLAor LQkJICAgICAgIChsb25nKSBsbV9wcmV2LCAobG9uZykgbF9wcmV2KTsKKy0JICAgICAgYnJlYWs7 CisrCSAgICAgIC8qIFRlcm1pbmF0ZSBgPGxpYnJhcnktbGlzdC1zdnI0Jy4gICovCisrCSAgICAg ICpwKysgPSAnPic7CisrCSAgICAgIGhlYWRlcl9kb25lID0gMTsKKyAJICAgIH0KICAKLS0gIGdk Yl9hc3NlcnQgKHByb2JlLT5vYmpmaWxlICE9IE5VTEwpOwotLSAgZ2RiX2Fzc2VydCAocHJvYmUt Pm9iamZpbGUtPnNmICE9IE5VTEwpOwotLSAgZ2RiX2Fzc2VydCAocHJvYmUtPm9iamZpbGUtPnNm LT5zeW1fcHJvYmVfZm5zICE9IE5VTEwpOworLQkgIC8qIE5vdCBjaGVja2luZyBmb3IgZXJyb3Ig YmVjYXVzZSByZWFkaW5nIG1heSBzdG9wIGJlZm9yZQorLQkgICAgIHdlJ3ZlIGdvdCBQQVRIX01B WCB3b3J0aCBvZiBjaGFyYWN0ZXJzLiAgKi8KKy0JICBsaWJuYW1lWzBdID0gJ1wwJzsKKy0JICBs aW51eF9yZWFkX21lbW9yeSAobF9uYW1lLCBsaWJuYW1lLCBzaXplb2YgKGxpYm5hbWUpIC0gMSk7 CistCSAgbGlibmFtZVtzaXplb2YgKGxpYm5hbWUpIC0gMV0gPSAnXDAnOworLQkgIGlmIChsaWJu YW1lWzBdICE9ICdcMCcpCisrCSAgd2hpbGUgKGFsbG9jYXRlZCA8IHAgLSBkb2N1bWVudCArIGxl biArIDIwMCkKKyAJICAgIHsKKy0JICAgICAgLyogNnggdGhlIHNpemUgZm9yIHhtbF9lc2NhcGVf dGV4dCBiZWxvdy4gICovCistCSAgICAgIHNpemVfdCBsZW4gPSA2ICogc3RybGVuICgoY2hhciAq KSBsaWJuYW1lKTsKKy0JICAgICAgY2hhciAqbmFtZTsKIC0KLS0gIHByb2JlX2ZucyA9IHByb2Jl LT5vYmpmaWxlLT5zZi0+c3ltX3Byb2JlX2ZuczsKLS0gIG5fYXJncyA9IHByb2JlX2Zucy0+c3lt X2dldF9wcm9iZV9hcmd1bWVudF9jb3VudCAocHJvYmUpOworLQkgICAgICBpZiAoIWhlYWRlcl9k b25lKQorLQkJeworLQkJICAvKiBUZXJtaW5hdGUgYDxsaWJyYXJ5LWxpc3Qtc3ZyNCcuICAqLwor LQkJICAqcCsrID0gJz4nOworLQkJICBoZWFkZXJfZG9uZSA9IDE7CistCQl9CiAtCi0rICBuX2Fy Z3MgPSBnZXRfcHJvYmVfYXJndW1lbnRfY291bnQgKHByb2JlKTsKLSAgIGlmIChuID49IG5fYXJn cykKLSAgICAgcmV0dXJuIE5VTEw7CistCSAgICAgIHdoaWxlIChhbGxvY2F0ZWQgPCBwIC0gZG9j dW1lbnQgKyBsZW4gKyAyMDApCistCQl7CistCQkgIC8qIEV4cGFuZCB0byBndWFyYW50ZWUgc3Vm ZmljaWVudCBzdG9yYWdlLiAgKi8KKy0JCSAgdWludHB0cl90IGRvY3VtZW50X2xlbiA9IHAgLSBk b2N1bWVudDsKKy0KKy0JCSAgZG9jdW1lbnQgPSB4cmVhbGxvYyAoZG9jdW1lbnQsIDIgKiBhbGxv Y2F0ZWQpOworLQkJICBhbGxvY2F0ZWQgKj0gMjsKKy0JCSAgcCA9IGRvY3VtZW50ICsgZG9jdW1l bnRfbGVuOworLQkJfQorKwkgICAgICAvKiBFeHBhbmQgdG8gZ3VhcmFudGVlIHN1ZmZpY2llbnQg c3RvcmFnZS4gICovCisrCSAgICAgIHVpbnRwdHJfdCBkb2N1bWVudF9sZW4gPSBwIC0gZG9jdW1l bnQ7CisgCistCSAgICAgIG5hbWUgPSB4bWxfZXNjYXBlX3RleHQgKChjaGFyICopIGxpYm5hbWUp OworLQkgICAgICBwICs9IHNwcmludGYgKHAsICI8bGlicmFyeSBuYW1lPVwiJXNcIiBsbT1cIjB4 JWx4XCIgIgorLQkJCSAgICAgICAibF9hZGRyPVwiMHglbHhcIiBsX2xkPVwiMHglbHhcIi8+IiwK Ky0JCQkgICAgbmFtZSwgKHVuc2lnbmVkIGxvbmcpIGxtX2FkZHIsCistCQkJICAgICh1bnNpZ25l ZCBsb25nKSBsX2FkZHIsICh1bnNpZ25lZCBsb25nKSBsX2xkKTsKKy0JICAgICAgZnJlZSAobmFt ZSk7CistCSAgICB9CistCSAgZWxzZSBpZiAobG1fcHJldiA9PSAwKQorLQkgICAgeworLQkgICAg ICBzcHJpbnRmIChwLCAiIG1haW4tbG09XCIweCVseFwiIiwgKHVuc2lnbmVkIGxvbmcpIGxtX2Fk ZHIpOworLQkgICAgICBwID0gcCArIHN0cmxlbiAocCk7CisrCSAgICAgIGRvY3VtZW50ID0geHJl YWxsb2MgKGRvY3VtZW50LCAyICogYWxsb2NhdGVkKTsKKysJICAgICAgYWxsb2NhdGVkICo9IDI7 CisrCSAgICAgIHAgPSBkb2N1bWVudCArIGRvY3VtZW50X2xlbjsKKyAJICAgIH0KICAKLS0gIHJl dHVybiBwcm9iZV9mbnMtPnN5bV9ldmFsdWF0ZV9wcm9iZV9hcmd1bWVudCAocHJvYmUsIG4pOwot KyAgcmV0dXJuIGV2YWx1YXRlX3Byb2JlX2FyZ3VtZW50IChwcm9iZSwgbik7Ci0gfQorLQkgIGlm IChsX25leHQgPT0gMCkKKy0JICAgIGJyZWFrOworLQorLQkgIGxtX3ByZXYgPSBsbV9hZGRyOwor LQkgIGxtX2FkZHIgPSBsX25leHQ7CisrCSAgbmFtZSA9IHhtbF9lc2NhcGVfdGV4dCAoKGNoYXIg KikgbGlibmFtZSk7CisrCSAgcCArPSBzcHJpbnRmIChwLCAiPGxpYnJhcnkgbmFtZT1cIiVzXCIg bG09XCIweCVseFwiICIKKysJCQkibF9hZGRyPVwiMHglbHhcIiBsX2xkPVwiMHglbHhcIi8+IiwK KysJCQluYW1lLCAodW5zaWduZWQgbG9uZykgbG1fYWRkciwKKysJCQkodW5zaWduZWQgbG9uZykg bF9hZGRyLCAodW5zaWduZWQgbG9uZykgbF9sZCk7CisrCSAgZnJlZSAobmFtZSk7CisgCX0KKy0g ICAgZG9uZToKKy0gICAgICBpZiAoIWhlYWRlcl9kb25lKQorKyAgICAgIGVsc2UgaWYgKGxtX3By ZXYgPT0gMCkKKyAJeworLQkgIC8qIEVtcHR5IGxpc3Q7IHRlcm1pbmF0ZSBgPGxpYnJhcnktbGlz dC1zdnI0Jy4gICovCistCSAgc3RyY3B5IChwLCAiLz4iKTsKKysJICBzcHJpbnRmIChwLCAiIG1h aW4tbG09XCIweCVseFwiIiwgKHVuc2lnbmVkIGxvbmcpIGxtX2FkZHIpOworKwkgIHAgPSBwICsg c3RybGVuIChwKTsKKyAJfQorLSAgICAgIGVsc2UKKy0Jc3RyY3B5IChwLCAiPC9saWJyYXJ5LWxp c3Qtc3ZyND4iKTsKKysKKysgICAgICBsbV9wcmV2ID0gbG1fYWRkcjsKKysgICAgICBsbV9hZGRy ID0gbF9uZXh0OworICAgICB9CiAgCi0gLyogU2VlIGNvbW1lbnQgaW4gcHJvYmUuaC4gICovCisr ICBpZiAoIWhlYWRlcl9kb25lKQorKyAgICB7CisrICAgICAgLyogRW1wdHkgbGlzdDsgdGVybWlu YXRlIGA8bGlicmFyeS1saXN0LXN2cjQnLiAgKi8KKysgICAgICBzdHJjcHkgKHAsICIvPiIpOwor KyAgICB9CisrICBlbHNlCisrICAgIHN0cmNweSAocCwgIjwvbGlicmFyeS1saXN0LXN2cjQ+Iik7 CisrCisgICBkb2N1bWVudF9sZW4gPSBzdHJsZW4gKGRvY3VtZW50KTsKKyAgIGlmIChvZmZzZXQg PCBkb2N1bWVudF9sZW4pCisgICAgIGRvY3VtZW50X2xlbiAtPSBvZmZzZXQ7CisKKy0tS2M5SE5q cHpPWFZjN0ZGVS0tCisKCmRpZmYgLS1naXQgYS9nZGItZGxvcGVuLXN0YXAtcHJvYmUtNG9mNy5w YXRjaCBiL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS00b2Y3LnBhdGNoCmluZGV4IDI5OTkzMWEuLjIy NGMzNjYgMTAwNjQ0Ci0tLSBhL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS00b2Y3LnBhdGNoCisrKyBi L2dkYi1kbG9wZW4tc3RhcC1wcm9iZS00b2Y3LnBhdGNoCkBAIC0xLDEzMSArMSwxNDYgQEAKLTIw MTItMDctMTkgIEdhcnkgQmVuc29uICA8Z2JlbnNvbkByZWRoYXQuY29tPgoraHR0cDovL3NvdXJj ZXdhcmUub3JnL21sL2dkYi1wYXRjaGVzLzIwMTMtMDUvbXNnMDA2MjguaHRtbAorU3ViamVjdDog W1JGQSA0LzddIEdEQiBzdXBwb3J0IGZvciBuZXcgZ2Ric2VydmVyIGZ1bmN0aW9uYWxpdHkKIAot CSogc29saWItc3ZyNC5jIChzdnI0X2luZm8pOiBNb3ZlIGVhcmxpZXIuCi0JKHNvbGliX3N2cjRf cHNwYWNlX2RhdGEpOiBMaWtld2lzZS4KLQkoc3ZyNF9wc3BhY2VfZGF0YV9jbGVhbnVwKTogTGlr ZXdpc2UuCi0JKGdldF9zdnI0X2luZm8pOiBMaWtld2lzZS4KIAotZGlmZiAtLWdpdCBhL2dkYi9z b2xpYi1zdnI0LmMgYi9nZGIvc29saWItc3ZyNC5jCi1pbmRleCAzMDdlNDgzLi5jODhiOWNiIDEw MDY0NAotLS0tIGEvZ2RiL3NvbGliLXN2cjQuYwotKysrIGIvZ2RiL3NvbGliLXN2cjQuYwotQEAg LTEwNiw2ICsxMDYsNTkgQEAgc3RhdGljIGNvbnN0ICBjaGFyICogY29uc3QgbWFpbl9uYW1lX2xp c3RbXSA9Ci0gICBOVUxMCi0gfTsKKy0tQ2FQS2doM1hIcHEzckVVVgorQ29udGVudC1UeXBlOiB0 ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUK KworVGhpcyBwYXRjaCBhZGRzIGNsaWVudCBzdXBwb3J0IGZvciB0aGUgbmV3IGdkYnNlcnZlciBm dW5jdGlvbmFsaXR5Citwcm92aWRlZCBieSBwYXRjaCAzIG9mIHRoaXMgc2VyaWVzLgorCistLUNh UEtnaDNYSHBxM3JFVVYKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2Np aQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9InJ0bGQtcHJvYmVz LTQtcmVtb3RlLnBhdGNoIgorCisyMDEzLTA1LTE2ICBHYXJ5IEJlbnNvbiAgPGdiZW5zb25AcmVk aGF0LmNvbT4KKworCSogdGFyZ2V0LmggKHRhcmdldF9vcHMpOiBOZXcgZmllbGQKKwkidG9fYXVn bWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQiLgorCSh0YXJnZXRfYXVnbWVudGVkX2xpYnJhcmll c19zdnI0X3JlYWQpOiBOZXcgbWFjcm8uCisJKiB0YXJnZXQuYyAodXBkYXRlX2N1cnJlbnRfdGFy Z2V0KTogSGFuZGxlCisJdG9fYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQuCisJKiByZW1v dGUuYyAocmVtb3RlX3N0YXRlKTogTmV3IGZpZWxkCisJImF1Z21lbnRlZF9saWJyYXJpZXNfc3Zy NF9yZWFkIi4KKwkocmVtb3RlX2F1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFkX2ZlYXR1cmUp OiBOZXcgZnVuY3Rpb24uCisJKHJlbW90ZV9wcm90b2NvbF9mZWF0dXJlcyk6IEFkZCBlbnRyeSBm b3IKKwkiYXVnbWVudGVkLWxpYnJhcmllcy1zdnI0LXJlYWQiLgorCShyZW1vdGVfYXVnbWVudGVk X2xpYnJhcmllc19zdnI0X3JlYWQpOiBOZXcgZnVuY3Rpb24uCisJKGluaXRfcmVtb3RlX29wcyk6 IEluaXRpYWxpemUKKwlyZW1vdGVfb3BzLnRvX2F1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFk LgorCitkaWZmIC0tZ2l0IGEvZ2RiL3RhcmdldC5oIGIvZ2RiL3RhcmdldC5oCitpbmRleCBlOTM3 ZDM5Li5hODU4N2U4IDEwMDY0NAorLS0tIGEvZ2RiL3RhcmdldC5oCisrKysgYi9nZGIvdGFyZ2V0 LmgKK0BAIC05NDEsNiArOTQxLDEwIEBAIHN0cnVjdCB0YXJnZXRfb3BzCisgICAgICAgIChpbmNs dXNpdmUpIHRvIGZ1bmN0aW9uIEVORCAoZXhjbHVzaXZlKS4gICovCisgICAgIHZvaWQgKCp0b19j YWxsX2hpc3RvcnlfcmFuZ2UpIChVTE9OR0VTVCBiZWdpbiwgVUxPTkdFU1QgZW5kLCBpbnQgZmxh Z3MpOwogIAotKy8qIFBlciBwc3BhY2UgU1ZSNCBzcGVjaWZpYyBkYXRhLiAgKi8KLSsKLStzdHJ1 Y3Qgc3ZyNF9pbmZvCi0rewotKyAgQ09SRV9BRERSIGRlYnVnX2Jhc2U7CS8qIEJhc2Ugb2YgZHlu YW1pYyBsaW5rZXIgc3RydWN0dXJlcy4gICovCisrICAgIC8qIE5vbnplcm8gaWYgVEFSR0VUX09C SkVDVF9MSUJSQVJJRVNfU1ZSNCBtYXkgYmUgcmVhZCB3aXRoIGEKKysgICAgICAgbm9uLWVtcHR5 IGFubmV4LiAgKi8KKysgICAgaW50ICgqdG9fYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQp ICh2b2lkKTsKICsKLSsgIC8qIFZhbGlkaXR5IGZsYWcgZm9yIGRlYnVnX2xvYWRlcl9vZmZzZXQu ICAqLwotKyAgaW50IGRlYnVnX2xvYWRlcl9vZmZzZXRfcDsKLSsKLSsgIC8qIExvYWQgYWRkcmVz cyBmb3IgdGhlIGR5bmFtaWMgbGlua2VyLCBpbmZlcnJlZC4gICovCi0rICBDT1JFX0FERFIgZGVi dWdfbG9hZGVyX29mZnNldDsKLSsKLSsgIC8qIE5hbWUgb2YgdGhlIGR5bmFtaWMgbGlua2VyLCB2 YWxpZCBpZiBkZWJ1Z19sb2FkZXJfb2Zmc2V0X3AuICAqLwotKyAgY2hhciAqZGVidWdfbG9hZGVy X25hbWU7Ci0rCi0rICAvKiBMb2FkIG1hcCBhZGRyZXNzIGZvciB0aGUgbWFpbiBleGVjdXRhYmxl LiAgKi8KLSsgIENPUkVfQUREUiBtYWluX2xtX2FkZHI7Ci0rCi0rICBDT1JFX0FERFIgaW50ZXJw X3RleHRfc2VjdF9sb3c7Ci0rICBDT1JFX0FERFIgaW50ZXJwX3RleHRfc2VjdF9oaWdoOwotKyAg Q09SRV9BRERSIGludGVycF9wbHRfc2VjdF9sb3c7Ci0rICBDT1JFX0FERFIgaW50ZXJwX3BsdF9z ZWN0X2hpZ2g7Ci0rfTsKKyAgICAgaW50IHRvX21hZ2ljOworICAgICAvKiBOZWVkIHN1Yi1zdHJ1 Y3R1cmUgZm9yIHRhcmdldCBtYWNoaW5lIHJlbGF0ZWQgcmF0aGVyIHRoYW4gY29tbSByZWxhdGVk PworICAgICAgKi8KK0BAIC0xODA5LDYgKzE4MTMsOSBAQCBleHRlcm4gY2hhciAqdGFyZ2V0X2Zp bGVpb19yZWFkX3N0cmFsbG9jIChjb25zdCBjaGFyICpmaWxlbmFtZSk7CisgI2RlZmluZSB0YXJn ZXRfY2FuX3VzZV9hZ2VudCgpIFwKKyAgICgqY3VycmVudF90YXJnZXQudG9fY2FuX3VzZV9hZ2Vu dCkgKCkKKyAKKysjZGVmaW5lIHRhcmdldF9hdWdtZW50ZWRfbGlicmFyaWVzX3N2cjRfcmVhZCgp IFwKKysgICgqY3VycmVudF90YXJnZXQudG9fYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQp ICgpCiArCi0rLyogUGVyLXByb2dyYW0tc3BhY2UgZGF0YSBrZXkuICAqLwotK3N0YXRpYyBjb25z dCBzdHJ1Y3QgcHJvZ3JhbV9zcGFjZV9kYXRhICpzb2xpYl9zdnI0X3BzcGFjZV9kYXRhOworIC8q IENvbW1hbmQgbG9nZ2luZyBmYWNpbGl0eS4gICovCisgCisgI2RlZmluZSB0YXJnZXRfbG9nX2Nv bW1hbmQocCkJCQkJCQlcCitkaWZmIC0tZ2l0IGEvZ2RiL3RhcmdldC5jIGIvZ2RiL3RhcmdldC5j CitpbmRleCA4NjUzZGFjLi41MTliOTdmIDEwMDY0NAorLS0tIGEvZ2RiL3RhcmdldC5jCisrKysg Yi9nZGIvdGFyZ2V0LmMKK0BAIC03MzEsNiArNzMxLDcgQEAgdXBkYXRlX2N1cnJlbnRfdGFyZ2V0 ICh2b2lkKQorICAgICAgIElOSEVSSVQgKHRvX3RyYWNlZnJhbWVfaW5mbywgdCk7CisgICAgICAg SU5IRVJJVCAodG9fdXNlX2FnZW50LCB0KTsKKyAgICAgICBJTkhFUklUICh0b19jYW5fdXNlX2Fn ZW50LCB0KTsKKysgICAgICBJTkhFUklUICh0b19hdWdtZW50ZWRfbGlicmFyaWVzX3N2cjRfcmVh ZCwgdCk7CisgICAgICAgSU5IRVJJVCAodG9fbWFnaWMsIHQpOworICAgICAgIElOSEVSSVQgKHRv X3N1cHBvcnRzX2V2YWx1YXRpb25fb2ZfYnJlYWtwb2ludF9jb25kaXRpb25zLCB0KTsKKyAgICAg ICBJTkhFUklUICh0b19jYW5fcnVuX2JyZWFrcG9pbnRfY29tbWFuZHMsIHQpOworQEAgLTk3NSw2 ICs5NzYsOSBAQCB1cGRhdGVfY3VycmVudF90YXJnZXQgKHZvaWQpCisgICBkZV9mYXVsdCAodG9f Y2FuX3VzZV9hZ2VudCwKKyAJICAgIChpbnQgKCopICh2b2lkKSkKKyAJICAgIHJldHVybl96ZXJv KTsKKysgIGRlX2ZhdWx0ICh0b19hdWdtZW50ZWRfbGlicmFyaWVzX3N2cjRfcmVhZCwKKysJICAg IChpbnQgKCopICh2b2lkKSkKKysJICAgIHJldHVybl96ZXJvKTsKKyAgIGRlX2ZhdWx0ICh0b19l eGVjdXRpb25fZGlyZWN0aW9uLCBkZWZhdWx0X2V4ZWN1dGlvbl9kaXJlY3Rpb24pOworIAorICN1 bmRlZiBkZV9mYXVsdAorZGlmZiAtLWdpdCBhL2dkYi9yZW1vdGUuYyBiL2dkYi9yZW1vdGUuYwor aW5kZXggNTFiZjAyNS4uZTFjZjhhNCAxMDA2NDQKKy0tLSBhL2dkYi9yZW1vdGUuYworKysrIGIv Z2RiL3JlbW90ZS5jCitAQCAtMzQzLDYgKzM0MywxMCBAQCBzdHJ1Y3QgcmVtb3RlX3N0YXRlCisg ICAvKiBUcnVlIGlmIHRoZSBzdHViIGNhbiBjb2xsZWN0IHN0cmluZ3MgdXNpbmcgdHJhY2VueiBi eXRlY29kZS4gICovCisgICBpbnQgc3RyaW5nX3RyYWNpbmc7CisgCisrICAvKiBUcnVlIGlmIHRo ZSBzdHViIHN1cHBvcnRzIHFYZmVyOmxpYnJhcmllcy1zdnI0OnJlYWQgd2l0aCBhCisrICAgICBu b24tZW1wdHkgYW5uZXguICAqLworKyAgaW50IGF1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFk OwogKworICAgLyogTm9uemVybyBpZiB0aGUgdXNlciBoYXMgcHJlc3NlZCBDdHJsLUMsIGJ1dCB0 aGUgdGFyZ2V0IGhhc24ndAorICAgICAgcmVzcG9uZGVkIHRvIHRoYXQuICAqLworICAgaW50IGN0 cmxjX3BlbmRpbmdfcDsKK0BAIC0zOTMxLDYgKzM5MzUsMTYgQEAgcmVtb3RlX3N0cmluZ190cmFj aW5nX2ZlYXR1cmUgKGNvbnN0IHN0cnVjdCBwcm90b2NvbF9mZWF0dXJlICpmZWF0dXJlLAorICAg cnMtPnN0cmluZ190cmFjaW5nID0gKHN1cHBvcnQgPT0gUEFDS0VUX0VOQUJMRSk7CisgfQorIAog K3N0YXRpYyB2b2lkCi0rc3ZyNF9wc3BhY2VfZGF0YV9jbGVhbnVwIChzdHJ1Y3QgcHJvZ3JhbV9z cGFjZSAqcHNwYWNlLCB2b2lkICphcmcpCisrcmVtb3RlX2F1Z21lbnRlZF9saWJyYXJpZXNfc3Zy NF9yZWFkX2ZlYXR1cmUKKysgIChjb25zdCBzdHJ1Y3QgcHJvdG9jb2xfZmVhdHVyZSAqZmVhdHVy ZSwKKysgICBlbnVtIHBhY2tldF9zdXBwb3J0IHN1cHBvcnQsIGNvbnN0IGNoYXIgKnZhbHVlKQog K3sKLSsgIHN0cnVjdCBzdnI0X2luZm8gKmluZm87CisrICBzdHJ1Y3QgcmVtb3RlX3N0YXRlICpy cyA9IGdldF9yZW1vdGVfc3RhdGUgKCk7CiArCi0rICBpbmZvID0gcHJvZ3JhbV9zcGFjZV9kYXRh IChwc3BhY2UsIHNvbGliX3N2cjRfcHNwYWNlX2RhdGEpOwotKyAgeGZyZWUgKGluZm8pOworKyAg cnMtPmF1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFkID0gKHN1cHBvcnQgPT0gUEFDS0VUX0VO QUJMRSk7CiArfQogKwotKy8qIEdldCB0aGUgY3VycmVudCBzdnI0IGRhdGEuICBJZiBub25lIGlz IGZvdW5kIHlldCwgYWRkIGl0IG5vdy4gIFRoaXMKLSsgICBmdW5jdGlvbiBhbHdheXMgcmV0dXJu cyBhIHZhbGlkIG9iamVjdC4gICovCi0rCi0rc3RhdGljIHN0cnVjdCBzdnI0X2luZm8gKgotK2dl dF9zdnI0X2luZm8gKHZvaWQpCisgc3RhdGljIHN0cnVjdCBwcm90b2NvbF9mZWF0dXJlIHJlbW90 ZV9wcm90b2NvbF9mZWF0dXJlc1tdID0geworICAgeyAiUGFja2V0U2l6ZSIsIFBBQ0tFVF9ESVNB QkxFLCByZW1vdGVfcGFja2V0X3NpemUsIC0xIH0sCisgICB7ICJxWGZlcjphdXh2OnJlYWQiLCBQ QUNLRVRfRElTQUJMRSwgcmVtb3RlX3N1cHBvcnRlZF9wYWNrZXQsCitAQCAtMzk0MSw2ICszOTU1 LDggQEAgc3RhdGljIHN0cnVjdCBwcm90b2NvbF9mZWF0dXJlIHJlbW90ZV9wcm90b2NvbF9mZWF0 dXJlc1tdID0geworICAgICBQQUNLRVRfcVhmZXJfbGlicmFyaWVzIH0sCisgICB7ICJxWGZlcjps aWJyYXJpZXMtc3ZyNDpyZWFkIiwgUEFDS0VUX0RJU0FCTEUsIHJlbW90ZV9zdXBwb3J0ZWRfcGFj a2V0LAorICAgICBQQUNLRVRfcVhmZXJfbGlicmFyaWVzX3N2cjQgfSwKKysgIHsgImF1Z21lbnRl ZC1saWJyYXJpZXMtc3ZyNC1yZWFkIiwgUEFDS0VUX0RJU0FCTEUsCisrICAgIHJlbW90ZV9hdWdt ZW50ZWRfbGlicmFyaWVzX3N2cjRfcmVhZF9mZWF0dXJlLCAtMSB9LAorICAgeyAicVhmZXI6bWVt b3J5LW1hcDpyZWFkIiwgUEFDS0VUX0RJU0FCTEUsIHJlbW90ZV9zdXBwb3J0ZWRfcGFja2V0LAor ICAgICBQQUNLRVRfcVhmZXJfbWVtb3J5X21hcCB9LAorICAgeyAicVhmZXI6c3B1OnJlYWQiLCBQ QUNLRVRfRElTQUJMRSwgcmVtb3RlX3N1cHBvcnRlZF9wYWNrZXQsCitAQCAtMTEzNDMsNiArMTEz NTksMTQgQEAgcmVtb3RlX3JlYWRfYnRyYWNlIChzdHJ1Y3QgYnRyYWNlX3RhcmdldF9pbmZvICp0 aW5mbywKKyAgIHJldHVybiBidHJhY2U7CisgfQorIAorK3N0YXRpYyBpbnQKKytyZW1vdGVfYXVn bWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQgKHZvaWQpCiArewotKyAgc3RydWN0IHN2cjRfaW5m byAqaW5mbzsKLSsKLSsgIGluZm8gPSBwcm9ncmFtX3NwYWNlX2RhdGEgKGN1cnJlbnRfcHJvZ3Jh bV9zcGFjZSwgc29saWJfc3ZyNF9wc3BhY2VfZGF0YSk7Ci0rICBpZiAoaW5mbyAhPSBOVUxMKQot KyAgICByZXR1cm4gaW5mbzsKKysgIHN0cnVjdCByZW1vdGVfc3RhdGUgKnJzID0gZ2V0X3JlbW90 ZV9zdGF0ZSAoKTsKICsKLSsgIGluZm8gPSBYWkFMTE9DIChzdHJ1Y3Qgc3ZyNF9pbmZvKTsKLSsg IHNldF9wcm9ncmFtX3NwYWNlX2RhdGEgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSwgc29saWJfc3Zy NF9wc3BhY2VfZGF0YSwgaW5mbyk7Ci0rICByZXR1cm4gaW5mbzsKKysgIHJldHVybiBycy0+YXVn bWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQ7CiArfQogKwotIC8qIFJldHVybiBub24temVybyBp ZiBHREJfU09fTkFNRSBhbmQgSU5GRVJJT1JfU09fTkFNRSByZXByZXNlbnQKLSAgICB0aGUgc2Ft ZSBzaGFyZWQgbGlicmFyeS4gICovCi0gCi1AQCAtMjkxLDU5ICszNDQsNiBAQCBsbV9hZGRyX2No ZWNrIChzdHJ1Y3Qgc29fbGlzdCAqc28sIGJmZCAqYWJmZCkKLSAgIHJldHVybiBzby0+bG1faW5m by0+bF9hZGRyOworIHN0YXRpYyB2b2lkCisgaW5pdF9yZW1vdGVfb3BzICh2b2lkKQorIHsKK0BA IC0xMTQ2NSw2ICsxMTQ4OSw4IEBAIFNwZWNpZnkgdGhlIHNlcmlhbCBkZXZpY2UgaXQgaXMgY29u bmVjdGVkIHRvXG5cCisgICByZW1vdGVfb3BzLnRvX2Rpc2FibGVfYnRyYWNlID0gcmVtb3RlX2Rp c2FibGVfYnRyYWNlOworICAgcmVtb3RlX29wcy50b190ZWFyZG93bl9idHJhY2UgPSByZW1vdGVf dGVhcmRvd25fYnRyYWNlOworICAgcmVtb3RlX29wcy50b19yZWFkX2J0cmFjZSA9IHJlbW90ZV9y ZWFkX2J0cmFjZTsKKysgIHJlbW90ZV9vcHMudG9fYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3Jl YWQgPQorKyAgICByZW1vdGVfYXVnbWVudGVkX2xpYnJhcmllc19zdnI0X3JlYWQ7CiAgfQogIAot LS8qIFBlciBwc3BhY2UgU1ZSNCBzcGVjaWZpYyBkYXRhLiAgKi8KLS0KLS1zdHJ1Y3Qgc3ZyNF9p bmZvCi0tewotLSAgQ09SRV9BRERSIGRlYnVnX2Jhc2U7CS8qIEJhc2Ugb2YgZHluYW1pYyBsaW5r ZXIgc3RydWN0dXJlcy4gICovCi0tCi0tICAvKiBWYWxpZGl0eSBmbGFnIGZvciBkZWJ1Z19sb2Fk ZXJfb2Zmc2V0LiAgKi8KLS0gIGludCBkZWJ1Z19sb2FkZXJfb2Zmc2V0X3A7Ci0tCi0tICAvKiBM b2FkIGFkZHJlc3MgZm9yIHRoZSBkeW5hbWljIGxpbmtlciwgaW5mZXJyZWQuICAqLwotLSAgQ09S RV9BRERSIGRlYnVnX2xvYWRlcl9vZmZzZXQ7Ci0tCi0tICAvKiBOYW1lIG9mIHRoZSBkeW5hbWlj IGxpbmtlciwgdmFsaWQgaWYgZGVidWdfbG9hZGVyX29mZnNldF9wLiAgKi8KLS0gIGNoYXIgKmRl YnVnX2xvYWRlcl9uYW1lOwotLQotLSAgLyogTG9hZCBtYXAgYWRkcmVzcyBmb3IgdGhlIG1haW4g ZXhlY3V0YWJsZS4gICovCi0tICBDT1JFX0FERFIgbWFpbl9sbV9hZGRyOwotLQotLSAgQ09SRV9B RERSIGludGVycF90ZXh0X3NlY3RfbG93OwotLSAgQ09SRV9BRERSIGludGVycF90ZXh0X3NlY3Rf aGlnaDsKLS0gIENPUkVfQUREUiBpbnRlcnBfcGx0X3NlY3RfbG93OwotLSAgQ09SRV9BRERSIGlu dGVycF9wbHRfc2VjdF9oaWdoOwotLX07Ci0tCi0tLyogUGVyLXByb2dyYW0tc3BhY2UgZGF0YSBr ZXkuICAqLwotLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvZ3JhbV9zcGFjZV9kYXRhICpzb2xpYl9z dnI0X3BzcGFjZV9kYXRhOwotLQotLXN0YXRpYyB2b2lkCi0tc3ZyNF9wc3BhY2VfZGF0YV9jbGVh bnVwIChzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLCB2b2lkICphcmcpCi0tewotLSAgc3Ry dWN0IHN2cjRfaW5mbyAqaW5mbzsKLS0KLS0gIGluZm8gPSBwcm9ncmFtX3NwYWNlX2RhdGEgKHBz cGFjZSwgc29saWJfc3ZyNF9wc3BhY2VfZGF0YSk7Ci0tICB4ZnJlZSAoaW5mbyk7Ci0tfQotLQot LS8qIEdldCB0aGUgY3VycmVudCBzdnI0IGRhdGEuICBJZiBub25lIGlzIGZvdW5kIHlldCwgYWRk IGl0IG5vdy4gIFRoaXMKLS0gICBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhIHZhbGlkIG9iamVj dC4gICovCi0tCi0tc3RhdGljIHN0cnVjdCBzdnI0X2luZm8gKgotLWdldF9zdnI0X2luZm8gKHZv aWQpCi0tewotLSAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbzsKLS0KLS0gIGluZm8gPSBwcm9ncmFt X3NwYWNlX2RhdGEgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSwgc29saWJfc3ZyNF9wc3BhY2VfZGF0 YSk7Ci0tICBpZiAoaW5mbyAhPSBOVUxMKQotLSAgICByZXR1cm4gaW5mbzsKLS0KLS0gIGluZm8g PSBYWkFMTE9DIChzdHJ1Y3Qgc3ZyNF9pbmZvKTsKLS0gIHNldF9wcm9ncmFtX3NwYWNlX2RhdGEg KGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSwgc29saWJfc3ZyNF9wc3BhY2VfZGF0YSwgaW5mbyk7Ci0t ICByZXR1cm4gaW5mbzsKLS19Ci0tCi0gLyogTG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwot IAotIHN0YXRpYyBpbnQgbWF0Y2hfbWFpbiAoY29uc3QgY2hhciAqKTsKKyAvKiBTZXQgdXAgdGhl IGV4dGVuZGVkIHJlbW90ZSB2ZWN0b3IgYnkgbWFraW5nIGEgY29weSBvZiB0aGUgc3RhbmRhcmQK KworLS1DYVBLZ2gzWEhwcTNyRVVWLS0KKwoKZGlmZiAtLWdpdCBhL2dkYi1kbG9wZW4tc3RhcC1w cm9iZS01b2Y3LnBhdGNoIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTVvZjcucGF0Y2gKaW5kZXgg Y2IxOGNkNi4uMmVhODczZCAxMDA2NDQKLS0tIGEvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTVvZjcu cGF0Y2gKKysrIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTVvZjcucGF0Y2gKQEAgLTEsMTcgKzEs MTA4OSBAQAotMjAxMi0wNy0xOSAgR2FyeSBCZW5zb24gIDxnYmVuc29uQHJlZGhhdC5jb20+Cito dHRwOi8vc291cmNld2FyZS5vcmcvbWwvZ2RiLXBhdGNoZXMvMjAxMy0wNS9tc2cwMDYzMi5odG1s CitTdWJqZWN0OiBbUkZBIDUvN10gSW1wcm92ZWQgbGlua2VyLWRlYnVnZ2VyIGludGVyZmFjZQog Ci0JKiBzb2xpYi1zdnI0LmMgKHN2cjRfaW5mbyk6IE1hZGUgZGVidWdfbG9hZGVyX29mZnNldF9w IGEgYml0ZmllbGQuCiAKLWRpZmYgLS1naXQgYS9nZGIvc29saWItc3ZyNC5jIGIvZ2RiL3NvbGli LXN2cjQuYwotaW5kZXggYzg4YjljYi4uOGU0MWYxOSAxMDA2NDQKLS0tLSBhL2dkYi9zb2xpYi1z dnI0LmMKLSsrKyBiL2dkYi9zb2xpYi1zdnI0LmMKLUBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0 IHN2cjRfaW5mbwotICAgQ09SRV9BRERSIGRlYnVnX2Jhc2U7CS8qIEJhc2Ugb2YgZHluYW1pYyBs aW5rZXIgc3RydWN0dXJlcy4gICovCistLXFzZStXQkg0Z3Vlc2lwWisKK0NvbnRlbnQtVHlwZTog dGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5l CisKK1RoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgcHJvYmVzLWJhc2VkIHJ1bnRpbWUgbGlua2Vy IGludGVyZmFjZS4KK0l0IHdvcmtzIGFzIGZvbGxvd3M6CisKKyAtIE9uIGluZmVyaW9yIHN0YXJ0 dXAsIEdEQiBzZWFyY2hlcyB0aGUgZHluYW1pYyBsaW5rZXIgZm9yIGEKKyAgIG51bWJlciBvZiBu YW1lZCBwcm9iZXMuCisKKyAtIElmIGFsbCBwcm9iZXMgYXJlIGZvdW5kLCBHREIgc2V0cyBhIGJy ZWFrcG9pbnQgb24gZWFjaCBvbmUuCisgICBPdGhlcndpc2UsIHRoZSBzdGFuZGFyZCBmdW5jdGlv biBfZGxfZGVidWdfc3RhdGUgaXMgdXNlZC4KKworIC0gV2hlbiB1c2luZyBwcm9iZXMsIGEgcGVy LXBzcGFjZSBsaXN0IGlzIG1haW50YWluZWQgb2YgYWxsCisgICBsaWJyYXJpZXMgY3VycmVudGx5 IGxvYWRlZCBieSB0aGUgaW5mZXJpb3IuICBJdCdzIHVwZGF0ZWQKKyAgIGFzIG5lY2Vzc2FyeSBl dmVyeSB0aW1lIGEgc29saWIgZXZlbnQgc3RvcCBvY2N1cnMuCisKKyAtIFdoZW4gdXNpbmcgcHJv YmVzLCBzdnI0X2N1cnJlbnRfc29zIHdpbGwgcmV0dXJuIGEgY29weSBvZgorICAgdGhlIGNhY2hl ZCBsaXN0LiAgV2hlbiBub3QgdXNpbmcgcHJvYmVzIHRoZSBlbnRpcmUgbGlzdAorICAgd2lsbCBi ZSBmZXRjaGVkIGZyb20gdGhlIGluZmVyaW9yIGFzIGJlZm9yZS4KKworIC0gSWYgYW55IGVycm9y IG9jY3VycywgR0RCIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGFuZCByZXZlcnQgdG8KKyAgIHRoZSBz dGFuZGFyZCBpbnRlcmZhY2UuCisKKy0tcXNlK1dCSDRndWVzaXBaKworQ29udGVudC1UeXBlOiB0 ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2ht ZW50OyBmaWxlbmFtZT0icnRsZC1wcm9iZXMtNS1tYWluLWNoYW5nZXMucGF0Y2giCisKKzIwMTMt MDUtMTYgIEdhcnkgQmVuc29uICA8Z2JlbnNvbkByZWRoYXQuY29tPgorCisJKiBicmVha3BvaW50 LmggKGhhbmRsZV9zb2xpYl9ldmVudCk6IE1vdmVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCisJdG8g c29saWIuaC4KKwkqIGJyZWFrcG9pbnQuYyAoaGFuZGxlX3NvbGliX2V2ZW50KTogTW92ZWQgZnVu Y3Rpb24gdG8gc29saWIuYy4KKwkoYnBzdGF0X3N0b3Bfc3RhdHVzKTogUGFzcyBuZXcgYXJndW1l bnQgdG8gaGFuZGxlX3NvbGliX2V2ZW50LgorCSogc29saWIuaCAodXBkYXRlX3NvbGliX2JyZWFr cG9pbnRzKTogTmV3IGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorCShoYW5kbGVfc29saWJfZXZlbnQp OiBNb3ZlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBmcm9tCisJYnJlYWtwb2ludC5oLgorCSogc29s aWIuYyAodXBkYXRlX3NvbGliX2JyZWFrcG9pbnRzKTogTmV3IGZ1bmN0aW9uLgorCShoYW5kbGVf c29saWJfZXZlbnQpOiBNb3ZlZCBmdW5jdGlvbiBmcm9tIGJyZWFrcG9pbnQuYy4KKwlVcGRhdGVk IHRvIGNhbGwgc29saWJfb3BzLT5oYW5kbGVfZXZlbnQgaWYgbm90IE5VTEwuCisJKiBzb2xpc3Qu aCAodGFyZ2V0X3NvX29wcyk6IE5ldyBmaWVsZHMgInVwZGF0ZV9icmVha3BvaW50cyIgYW5kCisJ ImhhbmRsZV9ldmVudCIuCisJKiBpbmZydW4uYyAoc2V0X3N0b3Bfb25fc29saWJfZXZlbnRzKTog TmV3IGZ1bmN0aW9uLgorCShfaW5pdGlhbGl6ZV9pbmZydW4pOiBVc2UgdGhlIGFib3ZlIGZvciAi c2V0CisJc3RvcC1vbi1zb2xpYi1ldmVudHMiLgorCShoYW5kbGVfaW5mZXJpb3JfZXZlbnQpOiBQ YXNzIG5ldyBhcmd1bWVudCB0byBoYW5kbGVfc29saWJfZXZlbnQuCisJKiBzb2xpYi1zdnI0LmMg KHByb2JlLmgpOiBOZXcgaW5jbHVkZS4KKwkoc3ZyNF9mcmVlX2xpYnJhcnlfbGlzdCk6IE5ldyBm b3J3YXJkIGRlY2xhcmF0aW9uLgorCShwcm9iZV9hY3Rpb24pOiBOZXcgZW51bS4KKwkocHJvYmVf aW5mbyk6IE5ldyBzdHJ1Y3QuCisJKHByb2JlX2luZm8pOiBOZXcgc3RhdGljIHZhcmlhYmxlLgor CShOVU1fUFJPQkVTKTogTmV3IGRlZmluaXRpb24uCisJKHN2cjRfaW5mbyk6IE5ldyBmaWVsZHMg InVzaW5nX3hmZXIiLCAicHJvYmVzX3RhYmxlIiBhbmQKKwkic29saWJfbGlzdCIuCisJKGZyZWVf cHJvYmVzX3RhYmxlKTogTmV3IGZ1bmN0aW9uLgorCShmcmVlX3NvbGliX2xpc3QpOiBOZXcgZnVu Y3Rpb24uCisJKHN2cjRfcHNwYWNlX2RhdGFfY2xlYW51cCk6IEZyZWUgcHJvYmVzIHRhYmxlIGFu ZCBzb2xpYiBsaXN0LgorCShzdnI0X2NvcHlfbGlicmFyeV9saXN0KTogTmV3IGZ1bmN0aW9uLgor CShzdnI0X2N1cnJlbnRfc29zX3ZpYV94ZmVyX2xpYnJhcmllcyk6IE5ldyBwYXJhbWV0ZXIgImFu bmV4Ii4KKwkoc3ZyNF9yZWFkX3NvX2xpc3QpOiBOZXcgcGFyYW1ldGVyICJwcmV2X2xtIi4KKwko c3ZyNF9jdXJyZW50X3Nvc19kaXJlY3QpOiBSZW5hbWVkIGZyb20gInN2cjRfY3VycmVudF9zb3Mi LgorCShzdnI0X2N1cnJlbnRfc29zKTogTmV3IGZ1bmN0aW9uLgorCShwcm9iZV9hbmRfYWN0aW9u KTogTmV3IHN0cnVjdC4KKwkoaGFzaF9wcm9iZV9hbmRfYWN0aW9uKTogTmV3IGZ1bmN0aW9uLgor CShlcXVhbF9wcm9iZV9hbmRfYWN0aW9uKTogTGlrZXdpc2UuCisJKHJlZ2lzdGVyX3NvbGliX2V2 ZW50X3Byb2JlKTogTGlrZXdpc2UuCisJKHNvbGliX2V2ZW50X3Byb2JlX2F0KTogTGlrZXdpc2Uu CisJKHNvbGliX2V2ZW50X3Byb2JlX2FjdGlvbik6IExpa2V3aXNlLgorCShzb2xpc3RfdXBkYXRl X2Z1bGwpOiBMaWtld2lzZS4KKwkoc29saXN0X3VwZGF0ZV9pbmNyZW1lbnRhbCk6IExpa2V3aXNl LgorCShkaXNhYmxlX3Byb2Jlc19pbnRlcmZhY2VfY2xlYW51cCk6IExpa2V3aXNlLgorCShzdnI0 X2hhbmRsZV9zb2xpYl9ldmVudCk6IExpa2V3aXNlLgorCShzdnI0X3VwZGF0ZV9zb2xpYl9ldmVu dF9icmVha3BvaW50KTogTGlrZXdpc2UuCisJKHN2cjRfdXBkYXRlX3NvbGliX2V2ZW50X2JyZWFr cG9pbnRzKTogTGlrZXdpc2UuCisJKHN2cjRfY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRz KTogTGlrZXdpc2UuCisJKGVuYWJsZV9icmVhayk6IEZyZWUgcHJvYmVzIHRhYmxlIGJlZm9yZSBj cmVhdGluZyBicmVha3BvaW50cy4KKwlVc2Ugc3ZyNF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtw b2ludHMgdG8gY3JlYXRlIGJyZWFrcG9pbnRzLgorCShzdnI0X3NvbGliX2NyZWF0ZV9pbmZlcmlv cl9ob29rKTogRnJlZSB0aGUgc29saWIgbGlzdC4KKwkoX2luaXRpYWxpemVfc3ZyNF9zb2xpYik6 IEluaXRpYWxpc2UKKwlzdnI0X3NvX29wcy5oYW5kbGVfc29saWJfZXZlbnQgYW5kIHN2cjRfc29f b3BzLnVwZGF0ZV9icmVha3BvaW50cy4KKworSW5kZXg6IGdkYi03LjYvZ2RiL2JyZWFrcG9pbnQu aAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorLS0tIGdkYi03LjYub3JpZy9nZGIvYnJlYWtwb2ludC5oCTIwMTMtMDUt MTkgMTY6MTY6MjAuNTUxMDg3MjcwICswMjAwCisrKysgZ2RiLTcuNi9nZGIvYnJlYWtwb2ludC5o CTIwMTMtMDUtMTkgMTY6MTY6MjAuODM3MDg2OTQ4ICswMjAwCitAQCAtMTU1Miw4ICsxNTUyLDYg QEAgZXh0ZXJuIGludCB1c2VyX2JyZWFrcG9pbnRfcCAoc3RydWN0IGJyZQorIC8qIEF0dGVtcHQg dG8gZGV0ZXJtaW5lIGFyY2hpdGVjdHVyZSBvZiBsb2NhdGlvbiBpZGVudGlmaWVkIGJ5IFNBTC4g ICovCisgZXh0ZXJuIHN0cnVjdCBnZGJhcmNoICpnZXRfc2FsX2FyY2ggKHN0cnVjdCBzeW10YWJf YW5kX2xpbmUgc2FsKTsKKyAKKy1leHRlcm4gdm9pZCBoYW5kbGVfc29saWJfZXZlbnQgKHZvaWQp OworLQorIGV4dGVybiB2b2lkIGJyZWFrcG9pbnRfZnJlZV9vYmpmaWxlIChzdHJ1Y3Qgb2JqZmls ZSAqb2JqZmlsZSk7CisgCisgZXh0ZXJuIHZvaWQgYnJlYWtwb2ludHNfcmVsb2NhdGUgKHN0cnVj dCBvYmpmaWxlICpvYmpmaWxlLAorSW5kZXg6IGdkYi03LjYvZ2RiL3NvbGliLmgKKz09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tLSBnZGItNy42Lm9yaWcvZ2RiL3NvbGliLmgJMjAxMy0wMS0wMSAwNzozMjo1MS4wMDAw MDAwMDAgKzAxMDAKKysrKyBnZGItNy42L2dkYi9zb2xpYi5oCTIwMTMtMDUtMTkgMTY6MTY6MjAu ODM4MDg2OTQ2ICswMjAwCitAQCAtOTAsNCArOTAsMTIgQEAgZXh0ZXJuIENPUkVfQUREUiBnZGJf YmZkX2xvb2t1cF9zeW1ib2xfZgorIAkJCQkJCQkJICAgICAgdm9pZCAqKSwKKyAJCQkJCQkgICAg dm9pZCAqZGF0YSk7CisgCisrLyogRW5hYmxlIG9yIGRpc2FibGUgb3B0aW9uYWwgc29saWIgZXZl bnQgYnJlYWtwb2ludHMgYXMgYXBwcm9wcmlhdGUuICAqLworKworK2V4dGVybiB2b2lkIHVwZGF0 ZV9zb2xpYl9icmVha3BvaW50cyAodm9pZCk7CisrCisrLyogSGFuZGxlIGFuIHNvbGliIGV2ZW50 IGJ5IGNhbGxpbmcgc29saWJfYWRkLiAgKi8KKysKKytleHRlcm4gdm9pZCBoYW5kbGVfc29saWJf ZXZlbnQgKHZvaWQpOworKworICNlbmRpZiAvKiBTT0xJQl9IICovCitJbmRleDogZ2RiLTcuNi9n ZGIvc29saWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdkYi03LjYub3JpZy9nZGIvc29saWIuYwkyMDEz LTA1LTE5IDE2OjE2OjIwLjQ2ODA4NzM2MyArMDIwMAorKysrIGdkYi03LjYvZ2RiL3NvbGliLmMJ MjAxMy0wNS0xOSAxNjoxNjoyMC44MzgwODY5NDYgKzAyMDAKK0BAIC0xMjIxLDYgKzEyMjEsMzgg QEAgbm9fc2hhcmVkX2xpYnJhcmllcyAoY2hhciAqaWdub3JlZCwgaW50CisgICBvYmpmaWxlX3B1 cmdlX3NvbGlicyAoKTsKKyB9CisgCisrLyogU2VlIHNvbGliLmguICAqLworKworK3ZvaWQKKyt1 cGRhdGVfc29saWJfYnJlYWtwb2ludHMgKHZvaWQpCisreworKyAgc3RydWN0IHRhcmdldF9zb19v cHMgKm9wcyA9IHNvbGliX29wcyAodGFyZ2V0X2dkYmFyY2ggKCkpOworKworKyAgaWYgKG9wcy0+ dXBkYXRlX2JyZWFrcG9pbnRzICE9IE5VTEwpCisrICAgIG9wcy0+dXBkYXRlX2JyZWFrcG9pbnRz ICgpOworK30KKysKKysvKiBTZWUgc29saWIuaC4gICovCisrCisrdm9pZAorK2hhbmRsZV9zb2xp Yl9ldmVudCAodm9pZCkKKyt7CisrICBzdHJ1Y3QgdGFyZ2V0X3NvX29wcyAqb3BzID0gc29saWJf b3BzICh0YXJnZXRfZ2RiYXJjaCAoKSk7CisrCisrICBpZiAob3BzLT5oYW5kbGVfZXZlbnQgIT0g TlVMTCkKKysgICAgb3BzLT5oYW5kbGVfZXZlbnQgKCk7CisrCisrICBjbGVhcl9wcm9ncmFtX3Nw YWNlX3NvbGliX2NhY2hlIChjdXJyZW50X2luZmVyaW9yICgpLT5wc3BhY2UpOworKworKyAgLyog Q2hlY2sgZm9yIGFueSBuZXdseSBhZGRlZCBzaGFyZWQgbGlicmFyaWVzIGlmIHdlJ3JlIHN1cHBv c2VkIHRvCisrICAgICBiZSBhZGRpbmcgdGhlbSBhdXRvbWF0aWNhbGx5LiAgU3dpdGNoIHRlcm1p bmFsIGZvciBhbnkgbWVzc2FnZXMKKysgICAgIHByb2R1Y2VkIGJ5IGJyZWFrcG9pbnRfcmVfc2V0 LiAgKi8KKysgIHRhcmdldF90ZXJtaW5hbF9vdXJzX2Zvcl9vdXRwdXQgKCk7CisrICBzb2xpYl9h ZGQgKE5VTEwsIDAsICZjdXJyZW50X3RhcmdldCwgYXV0b19zb2xpYl9hZGQpOworKyAgdGFyZ2V0 X3Rlcm1pbmFsX2luZmVyaW9yICgpOworK30KKysKKysKKyAvKiBSZWxvYWQgc2hhcmVkIGxpYnJh cmllcywgYnV0IGF2b2lkIHJlbG9hZGluZyB0aGUgc2FtZSBzeW1ib2wgZmlsZQorICAgIHdlIGFs cmVhZHkgaGF2ZSBsb2FkZWQuICAqLworIAorSW5kZXg6IGdkYi03LjYvZ2RiL3NvbGlzdC5oCis9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9zb2xpc3QuaAkyMDEzLTAxLTAxIDA3OjMy OjUxLjAwMDAwMDAwMCArMDEwMAorKysrIGdkYi03LjYvZ2RiL3NvbGlzdC5oCTIwMTMtMDUtMTkg MTY6MTY6MjAuODM4MDg2OTQ2ICswMjAwCitAQCAtMTQ4LDYgKzE0OCwxOSBAQCBzdHJ1Y3QgdGFy Z2V0X3NvX29wcworICAgICAgICBjb3JlIGZpbGUgKGluIHBhcnRpY3VsYXIsIGZvciByZWFkb25s eSBzZWN0aW9ucykuICAqLworICAgICBpbnQgKCprZWVwX2RhdGFfaW5fY29yZSkgKENPUkVfQURE UiB2YWRkciwKKyAJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpOworKworKyAgICAvKiBFbmFi bGUgb3IgZGlzYWJsZSBvcHRpb25hbCBzb2xpYiBldmVudCBicmVha3BvaW50cyBhcworKyAgICAg ICBhcHByb3ByaWF0ZS4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlcgorKyAgICAgICBz dG9wX29uX3NvbGliX2V2ZW50cyBpcyBjaGFuZ2VkLiAgVGhpcyBwb2ludGVyIGNhbiBiZQorKyAg ICAgICBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpcyBuZWNl c3NhcnkKKysgICAgICAgZm9yIHRoaXMgdGFyZ2V0LiAgKi8KKysgICAgdm9pZCAoKnVwZGF0ZV9i cmVha3BvaW50cykgKHZvaWQpOworKworKyAgICAvKiBUYXJnZXQtc3BlY2lmaWMgcHJvY2Vzc2lu ZyBvZiBzb2xpYiBldmVudHMgdGhhdCB3aWxsIGJlCisrICAgICAgIHBlcmZvcm1lZCBiZWZvcmUg c29saWJfYWRkIGlzIGNhbGxlZC4gIFRoaXMgcG9pbnRlciBjYW4gYmUKKysgICAgICAgTlVMTCwg aW4gd2hpY2ggY2FzZSBubyBzcGVjaWZpYyBwcmVwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeQorKyAg ICAgICBmb3IgdGhpcyB0YXJnZXQuICAqLworKyAgICB2b2lkICgqaGFuZGxlX2V2ZW50KSAodm9p ZCk7CisgICB9OworIAorIC8qIEZyZWUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSAoc29f bGlzdCAqKS4gICovCitJbmRleDogZ2RiLTcuNi9nZGIvaW5mcnVuLmMKKz09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t LSBnZGItNy42Lm9yaWcvZ2RiL2luZnJ1bi5jCTIwMTMtMDUtMTkgMTY6MTY6MjAuNTA4MDg3MzE4 ICswMjAwCisrKysgZ2RiLTcuNi9nZGIvaW5mcnVuLmMJMjAxMy0wNS0xOSAxNjoxNjoyMC44NDAw ODY5NDQgKzAyMDAKK0BAIC0zNzAsNiArMzcwLDE2IEBAIHN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpz dGVwX3N0YXJ0X2Z1bmN0aW8KKyAvKiBOb256ZXJvIGlmIHdlIHdhbnQgdG8gZ2l2ZSBjb250cm9s IHRvIHRoZSB1c2VyIHdoZW4gd2UncmUgbm90aWZpZWQKKyAgICBvZiBzaGFyZWQgbGlicmFyeSBl dmVudHMgYnkgdGhlIGR5bmFtaWMgbGlua2VyLiAgKi8KKyBpbnQgc3RvcF9vbl9zb2xpYl9ldmVu dHM7CisrCisrLyogRW5hYmxlIG9yIGRpc2FibGUgb3B0aW9uYWwgc2hhcmVkIGxpYnJhcnkgZXZl bnQgYnJlYWtwb2ludHMKKysgICBhcyBhcHByb3ByaWF0ZSB3aGVuIHRoZSBhYm92ZSBmbGFnIGlz IGNoYW5nZWQuICAqLworKworK3N0YXRpYyB2b2lkCisrc2V0X3N0b3Bfb25fc29saWJfZXZlbnRz IChjaGFyICphcmdzLCBpbnQgZnJvbV90dHksIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjKQor K3sKKysgIHVwZGF0ZV9zb2xpYl9icmVha3BvaW50cyAoKTsKKyt9CisrCisgc3RhdGljIHZvaWQK KyBzaG93X3N0b3Bfb25fc29saWJfZXZlbnRzIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZy b21fdHR5LAorIAkJCSAgIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjLCBjb25zdCBjaGFyICp2 YWx1ZSkKK0BAIC03MzM1LDcgKzczNDUsNyBAQCBTaG93IHN0b3BwaW5nIGZvciBzaGFyZWQgbGli cmFyeSBldmVudHMuCisgSWYgbm9uemVybywgZ2RiIHdpbGwgZ2l2ZSBjb250cm9sIHRvIHRoZSB1 c2VyIHdoZW4gdGhlIGR5bmFtaWMgbGlua2VyXG5cCisgbm90aWZpZXMgZ2RiIG9mIHNoYXJlZCBs aWJyYXJ5IGV2ZW50cy4gIFRoZSBtb3N0IGNvbW1vbiBldmVudCBvZiBpbnRlcmVzdFxuXAorIHRv IHRoZSB1c2VyIHdvdWxkIGJlIGxvYWRpbmcvdW5sb2FkaW5nIG9mIGEgbmV3IGxpYnJhcnkuIiks CistCQkJICAgIE5VTEwsCisrCQkJICAgIHNldF9zdG9wX29uX3NvbGliX2V2ZW50cywKKyAJCQkg ICAgc2hvd19zdG9wX29uX3NvbGliX2V2ZW50cywKKyAJCQkgICAgJnNldGxpc3QsICZzaG93bGlz dCk7CisgCitJbmRleDogZ2RiLTcuNi9nZGIvc29saWItc3ZyNC5jCis9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0g Z2RiLTcuNi5vcmlnL2dkYi9zb2xpYi1zdnI0LmMJMjAxMy0wNS0xOSAxNjoxNjoyMC40NjgwODcz NjMgKzAyMDAKKysrKyBnZGItNy42L2dkYi9zb2xpYi1zdnI0LmMJMjAxMy0wNS0xOSAxNjoyMTo0 MC4yODU4MTYwODQgKzAyMDAKK0BAIC00Nyw5ICs0NywxMiBAQAorICNpbmNsdWRlICJleGNlcHRp b25zLmgiCisgI2luY2x1ZGUgImdkYl9iZmQuaCIKKyAKKysjaW5jbHVkZSAicHJvYmUuaCIKKysK KyBzdGF0aWMgc3RydWN0IGxpbmtfbWFwX29mZnNldHMgKnN2cjRfZmV0Y2hfbGlua19tYXBfb2Zm c2V0cyAodm9pZCk7Cisgc3RhdGljIGludCBzdnI0X2hhdmVfbGlua19tYXBfb2Zmc2V0cyAodm9p ZCk7Cisgc3RhdGljIHZvaWQgc3ZyNF9yZWxvY2F0ZV9tYWluX2V4ZWN1dGFibGUgKHZvaWQpOwor K3N0YXRpYyB2b2lkIHN2cjRfZnJlZV9saWJyYXJ5X2xpc3QgKHZvaWQgKnBfbGlzdCk7CisgCisg LyogTGluayBtYXAgaW5mbyB0byBpbmNsdWRlIGluIGFuIGFsbG9jYXRlZCBzb19saXN0IGVudHJ5 LiAgKi8KKyAKK0BAIC0xMDYsNiArMTA5LDU1IEBAIHN0YXRpYyBjb25zdCAgY2hhciAqIGNvbnN0 IG1haW5fbmFtZV9saXMKKyAgIE5VTEwKKyB9OworIAorKy8qIFdoYXQgdG8gZG8gd2hlbiBhIHBy b2JlIHN0b3Agb2NjdXJzLiAgKi8KKysKKytlbnVtIHByb2JlX2FjdGlvbgorKyAgeworKyAgICAv KiBTb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3JvbmcuICBTdG9wIHVzaW5nIHByb2JlcyBhbmQK KysgICAgICAgcmV2ZXJ0IHRvIHVzaW5nIHRoZSBvbGRlciBpbnRlcmZhY2UuICAqLworKyAgICBQ Uk9CRVNfSU5URVJGQUNFX0ZBSUxFRCwKKysKKysgICAgLyogTm8gYWN0aW9uIGlzIHJlcXVpcmVk LiAgVGhlIHNoYXJlZCBvYmplY3QgbGlzdCBpcyBzdGlsbAorKyAgICAgICB2YWxpZC4gICovCisr ICAgIERPX05PVEhJTkcsCisrCisrICAgIC8qIFRoZSBzaGFyZWQgb2JqZWN0IGxpc3Qgc2hvdWxk IGJlIHJlbG9hZGVkIGVudGlyZWx5LiAgKi8KKysgICAgRlVMTF9SRUxPQUQsCisrCisrICAgIC8q IEF0dGVtcHQgdG8gaW5jcmVtZW50YWxseSB1cGRhdGUgdGhlIHNoYXJlZCBvYmplY3QgbGlzdC4g SWYKKysgICAgICAgdGhlIHVwZGF0ZSBmYWlscyBvciBpcyBub3QgcG9zc2libGUsIGZhbGwgYmFj ayB0byByZWxvYWRpbmcKKysgICAgICAgdGhlIGxpc3QgaW4gZnVsbC4gICovCisrICAgIFVQREFU RV9PUl9SRUxPQUQsCisrICB9OworKworKy8qIEEgcHJvYmUncyBuYW1lIGFuZCBpdHMgYXNzb2Np YXRlZCBhY3Rpb24uICAqLworKworK3N0cnVjdCBwcm9iZV9pbmZvCisreworKyAgLyogVGhlIG5h bWUgb2YgdGhlIHByb2JlLiAgKi8KKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrCisrICAvKiBXaGF0 IHRvIGRvIHdoZW4gYSBwcm9iZSBzdG9wIG9jY3Vycy4gICovCisrICBlbnVtIHByb2JlX2FjdGlv biBhY3Rpb247CisrfTsKKysKKysvKiBBIGxpc3Qgb2YgbmFtZWQgcHJvYmVzIGFuZCB0aGVpciBh c3NvY2lhdGVkIGFjdGlvbnMuICBJZiBhbGwKKysgICBwcm9iZXMgYXJlIHByZXNlbnQgaW4gdGhl IGR5bmFtaWMgbGlua2VyIHRoZW4gdGhlIHByb2Jlcy1iYXNlZAorKyAgIGludGVyZmFjZSB3aWxs IGJlIHVzZWQuICAqLworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvYmVfaW5mbyBwcm9iZV9p bmZvW10gPQorK3sKKysgIHsgImluaXRfc3RhcnQiLCBET19OT1RISU5HIH0sCisrICB7ICJpbml0 X2NvbXBsZXRlIiwgRlVMTF9SRUxPQUQgfSwKKysgIHsgIm1hcF9zdGFydCIsIERPX05PVEhJTkcg fSwKKysgIHsgIm1hcF9mYWlsZWQiLCBET19OT1RISU5HIH0sCisrICB7ICJyZWxvY19jb21wbGV0 ZSIsIFVQREFURV9PUl9SRUxPQUQgfSwKKysgIHsgInVubWFwX3N0YXJ0IiwgRE9fTk9USElORyB9 LAorKyAgeyAidW5tYXBfY29tcGxldGUiLCBGVUxMX1JFTE9BRCB9LAorK307CisrCisrI2RlZmlu ZSBOVU1fUFJPQkVTIEFSUkFZX1NJWkUgKHByb2JlX2luZm8pCisrCisgLyogUmV0dXJuIG5vbi16 ZXJvIGlmIEdEQl9TT19OQU1FIGFuZCBJTkZFUklPUl9TT19OQU1FIHJlcHJlc2VudAorICAgIHRo ZSBzYW1lIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKyAKK0BAIC0zMTMsMTcgKzM2NSw1NiBAQCBzdHJ1 Y3Qgc3ZyNF9pbmZvCisgICBDT1JFX0FERFIgaW50ZXJwX3RleHRfc2VjdF9oaWdoOworICAgQ09S RV9BRERSIGludGVycF9wbHRfc2VjdF9sb3c7CisgICBDT1JFX0FERFIgaW50ZXJwX3BsdF9zZWN0 X2hpZ2g7CisrCisrICAvKiBOb256ZXJvIGlmIHRoZSBsaXN0IG9mIG9iamVjdHMgd2FzIGxhc3Qg b2J0YWluZWQgZnJvbSB0aGUgdGFyZ2V0CisrICAgICB2aWEgcVhmZXI6bGlicmFyaWVzLXN2cjQ6 cmVhZC4gICovCisrICBpbnQgdXNpbmdfeGZlcjsKKysKKysgIC8qIFRhYmxlIG1hcHBpbmcgYnJl YWtwb2ludCBhZGRyZXNzZXMgdG8gcHJvYmVzIGFuZCBhY3Rpb25zLCB1c2VkCisrICAgICBieSB0 aGUgcHJvYmVzLWJhc2VkIGludGVyZmFjZS4gICovCisrICBodGFiX3QgcHJvYmVzX3RhYmxlOwor KworKyAgLyogTGlzdCBvZiBvYmplY3RzIGxvYWRlZCBpbnRvIHRoZSBpbmZlcmlvciwgdXNlZCBi eSB0aGUgcHJvYmVzLQorKyAgICAgYmFzZWQgaW50ZXJmYWNlLiAgKi8KKysgIHN0cnVjdCBzb19s aXN0ICpzb2xpYl9saXN0OworIH07CisgCisgLyogUGVyLXByb2dyYW0tc3BhY2UgZGF0YSBrZXku ICAqLworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvZ3JhbV9zcGFjZV9kYXRhICpzb2xpYl9zdnI0 X3BzcGFjZV9kYXRhOworIAorKy8qIEZyZWUgdGhlIHByb2JlcyB0YWJsZS4gICovCisrCisrc3Rh dGljIHZvaWQKKytmcmVlX3Byb2Jlc190YWJsZSAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbykKKyt7 CisrICBpZiAoaW5mby0+cHJvYmVzX3RhYmxlID09IE5VTEwpCisrICAgIHJldHVybjsKKysKKysg IGh0YWJfZGVsZXRlIChpbmZvLT5wcm9iZXNfdGFibGUpOworKyAgaW5mby0+cHJvYmVzX3RhYmxl ID0gTlVMTDsKKyt9CisrCisrLyogRnJlZSB0aGUgc29saWIgbGlzdC4gICovCisrCisrc3RhdGlj IHZvaWQKKytmcmVlX3NvbGliX2xpc3QgKHN0cnVjdCBzdnI0X2luZm8gKmluZm8pCisreworKyAg c3ZyNF9mcmVlX2xpYnJhcnlfbGlzdCAoJmluZm8tPnNvbGliX2xpc3QpOworKyAgaW5mby0+c29s aWJfbGlzdCA9IE5VTEw7CisrfQorKworIHN0YXRpYyB2b2lkCisgc3ZyNF9wc3BhY2VfZGF0YV9j bGVhbnVwIChzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLCB2b2lkICphcmcpCisgeworICAg c3RydWN0IHN2cjRfaW5mbyAqaW5mbzsKKyAKKyAgIGluZm8gPSBwcm9ncmFtX3NwYWNlX2RhdGEg KHBzcGFjZSwgc29saWJfc3ZyNF9wc3BhY2VfZGF0YSk7CisrICBpZiAoaW5mbyA9PSBOVUxMKQor KyAgICByZXR1cm47CisrCisrICBmcmVlX3Byb2Jlc190YWJsZSAoaW5mbyk7CisrICBmcmVlX3Nv bGliX2xpc3QgKGluZm8pOworKworICAgeGZyZWUgKGluZm8pOworIH0KKyAKK0BAIC05ODIsNiAr MTA3MywzNiBAQCBzdnI0X2ZyZWVfbGlicmFyeV9saXN0ICh2b2lkICpwX2xpc3QpCisgICAgIH0K KyB9CisgCisrLyogQ29weSBsaWJyYXJ5IGxpc3QuICAqLworKworK3N0YXRpYyBzdHJ1Y3Qgc29f bGlzdCAqCisrc3ZyNF9jb3B5X2xpYnJhcnlfbGlzdCAoc3RydWN0IHNvX2xpc3QgKnNyYykKKyt7 CisrICBzdHJ1Y3QgbGlua19tYXBfb2Zmc2V0cyAqbG1vID0gc3ZyNF9mZXRjaF9saW5rX21hcF9v ZmZzZXRzICgpOworKyAgc3RydWN0IHNvX2xpc3QgKmRzdCA9IE5VTEw7CisrICBzdHJ1Y3Qgc29f bGlzdCAqKmxpbmsgPSAmZHN0OworKworKyAgd2hpbGUgKHNyYyAhPSBOVUxMKQorKyAgICB7Cisr ICAgICAgc3RydWN0IHNvX2xpc3QgKm5ldzsKKysKKysgICAgICBuZXcgPSBYWkFMTE9DIChzdHJ1 Y3Qgc29fbGlzdCk7CisrCisrICAgICAgbWVtY3B5IChuZXcsIHNyYywgc2l6ZW9mIChzdHJ1Y3Qg c29fbGlzdCkpOworKworKyAgICAgIG5ldy0+bG1faW5mbyA9IHhtYWxsb2MgKGxtby0+bGlua19t YXBfc2l6ZSk7CisrICAgICAgbWVtY3B5IChuZXctPmxtX2luZm8sIHNyYy0+bG1faW5mbywgbG1v LT5saW5rX21hcF9zaXplKTsKKysKKysgICAgICBuZXctPm5leHQgPSBOVUxMOworKyAgICAgICps aW5rID0gbmV3OworKyAgICAgIGxpbmsgPSAmbmV3LT5uZXh0OworKworKyAgICAgIHNyYyA9IHNy Yy0+bmV4dDsKKysgICAgfQorKworKyAgcmV0dXJuIGRzdDsKKyt9CisrCisgI2lmZGVmIEhBVkVf TElCRVhQQVQKKyAKKyAjaW5jbHVkZSAieG1sLXN1cHBvcnQuaCIKK0BAIC0xMDk3LDE0ICsxMjE4 LDE5IEBAIHN2cjRfcGFyc2VfbGlicmFyaWVzIChjb25zdCBjaGFyICpkb2N1bWUKKyAgIHJldHVy biAwOworIH0KKyAKKy0vKiBBdHRlbXB0IHRvIGdldCBzb19saXN0IGZyb20gdGFyZ2V0IHZpYSBx WGZlcjpsaWJyYXJpZXM6cmVhZCBwYWNrZXQuCisrLyogQXR0ZW1wdCB0byBnZXQgc29fbGlzdCBm cm9tIHRhcmdldCB2aWEgcVhmZXI6bGlicmFyaWVzLXN2cjQ6cmVhZCBwYWNrZXQuCisgCisgICAg UmV0dXJuIDAgaWYgcGFja2V0IG5vdCBzdXBwb3J0ZWQsICpTT19MSVNUX1JFVFVSTiBpcyBub3Qg bW9kaWZpZWQgaW4gc3VjaAorICAgIGNhc2UuICBSZXR1cm4gMSBpZiAqU09fTElTVF9SRVRVUk4g Y29udGFpbnMgdGhlIGxpYnJhcnkgbGlzdCwgaXQgbWF5IGJlCistICAgZW1wdHksIGNhbGxlciBp cyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBhbGwgaXRzIGVudHJpZXMuICAqLworKyAgIGVtcHR5 LCBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYWxsIGl0cyBlbnRyaWVzLgorKwor KyAgIE5vdGUgdGhhdCBBTk5FWCBtdXN0IGJlIE5VTEwgaWYgdGhlIHJlbW90ZSBkb2VzIG5vdCBl eHBsaWNpdGx5IGFsbG93CisrICAgcVhmZXI6bGlicmFyaWVzLXN2cjQ6cmVhZCBwYWNrZXRzIHdp dGggbm9uLWVtcHR5IGFubmV4ZXMuICBTdXBwb3J0IGZvcgorKyAgIHRoaXMgY2FuIGJlIGNoZWNr ZWQgdXNpbmcgdGFyZ2V0X2F1Z21lbnRlZF9saWJyYXJpZXNfc3ZyNF9yZWFkICgpLiAgKi8KKyAK KyBzdGF0aWMgaW50Cistc3ZyNF9jdXJyZW50X3Nvc192aWFfeGZlcl9saWJyYXJpZXMgKHN0cnVj dCBzdnI0X2xpYnJhcnlfbGlzdCAqbGlzdCkKKytzdnI0X2N1cnJlbnRfc29zX3ZpYV94ZmVyX2xp YnJhcmllcyAoc3RydWN0IHN2cjRfbGlicmFyeV9saXN0ICpsaXN0LAorKwkJCQkgICAgIGNvbnN0 IGNoYXIgKmFubmV4KQorIHsKKyAgIGNoYXIgKnN2cjRfbGlicmFyeV9kb2N1bWVudDsKKyAgIGlu dCByZXN1bHQ7CitAQCAtMTExMyw3ICsxMjM5LDcgQEAgc3ZyNF9jdXJyZW50X3Nvc192aWFfeGZl cl9saWJyYXJpZXMgKHN0cgorICAgLyogRmV0Y2ggdGhlIGxpc3Qgb2Ygc2hhcmVkIGxpYnJhcmll cy4gICovCisgICBzdnI0X2xpYnJhcnlfZG9jdW1lbnQgPSB0YXJnZXRfcmVhZF9zdHJhbGxvYyAo JmN1cnJlbnRfdGFyZ2V0LAorIAkJCQkJCVRBUkdFVF9PQkpFQ1RfTElCUkFSSUVTX1NWUjQsCist CQkJCQkJTlVMTCk7CisrCQkJCQkJYW5uZXgpOworICAgaWYgKHN2cjRfbGlicmFyeV9kb2N1bWVu dCA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKK0BAIC0xMTI3LDcgKzEyNTMsOCBAQCBzdnI0 X2N1cnJlbnRfc29zX3ZpYV94ZmVyX2xpYnJhcmllcyAoc3RyCisgI2Vsc2UKKyAKKyBzdGF0aWMg aW50Cistc3ZyNF9jdXJyZW50X3Nvc192aWFfeGZlcl9saWJyYXJpZXMgKHN0cnVjdCBzdnI0X2xp YnJhcnlfbGlzdCAqbGlzdCkKKytzdnI0X2N1cnJlbnRfc29zX3ZpYV94ZmVyX2xpYnJhcmllcyAo c3RydWN0IHN2cjRfbGlicmFyeV9saXN0ICpsaXN0LAorKwkJCQkgICAgIGNvbnN0IGNoYXIgKmFu bmV4KQorIHsKKyAgIHJldHVybiAwOworIH0KK0BAIC0xMTYxLDE1ICsxMjg4LDE3IEBAIHN2cjRf ZGVmYXVsdF9zb3MgKHZvaWQpCisgICByZXR1cm4gbmV3OworIH0KKyAKKy0vKiBSZWFkIHRoZSB3 aG9sZSBpbmZlcmlvciBsaWJyYXJpZXMgY2hhaW4gc3RhcnRpbmcgYXQgYWRkcmVzcyBMTS4gIEFk ZCB0aGUKKy0gICBlbnRyaWVzIHRvIHRoZSB0YWlsIHJlZmVyZW5jZWQgYnkgTElOS19QVFJfUFRS LiAgSWdub3JlIHRoZSBmaXJzdCBlbnRyeSBpZgorLSAgIElHTk9SRV9GSVJTVCBhbmQgc2V0IGds b2JhbCBNQUlOX0xNX0FERFIgYWNjb3JkaW5nIHRvIGl0LiAgKi8KKysvKiBSZWFkIHRoZSB3aG9s ZSBpbmZlcmlvciBsaWJyYXJpZXMgY2hhaW4gc3RhcnRpbmcgYXQgYWRkcmVzcyBMTS4KKysgICBF eHBlY3QgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBjaGFpbidzIHByZXZpb3VzIGVudHJ5IHRvIGJl IFBSRVZfTE0uCisrICAgQWRkIHRoZSBlbnRyaWVzIHRvIHRoZSB0YWlsIHJlZmVyZW5jZWQgYnkg TElOS19QVFJfUFRSLiAgSWdub3JlIHRoZQorKyAgIGZpcnN0IGVudHJ5IGlmIElHTk9SRV9GSVJT VCBhbmQgc2V0IGdsb2JhbCBNQUlOX0xNX0FERFIgYWNjb3JkaW5nCisrICAgdG8gaXQuICBSZXR1 cm5zIG5vbnplcm8gdXBvbiBzdWNjZXNzLiAgKi8KKyAKKy1zdGF0aWMgdm9pZAorLXN2cjRfcmVh ZF9zb19saXN0IChDT1JFX0FERFIgbG0sIHN0cnVjdCBzb19saXN0ICoqKmxpbmtfcHRyX3B0ciwK Ky0JCSAgIGludCBpZ25vcmVfZmlyc3QpCisrc3RhdGljIGludAorK3N2cjRfcmVhZF9zb19saXN0 IChDT1JFX0FERFIgbG0sIENPUkVfQUREUiBwcmV2X2xtLAorKwkJICAgc3RydWN0IHNvX2xpc3Qg KioqbGlua19wdHJfcHRyLCBpbnQgaWdub3JlX2ZpcnN0KQorIHsKKy0gIENPUkVfQUREUiBwcmV2 X2xtID0gMCwgbmV4dF9sbTsKKysgIENPUkVfQUREUiBuZXh0X2xtOworIAorICAgZm9yICg7IGxt ICE9IDA7IHByZXZfbG0gPSBsbSwgbG0gPSBuZXh0X2xtKQorICAgICB7CitAQCAtMTE4NSw3ICsx MzE0LDcgQEAgc3ZyNF9yZWFkX3NvX2xpc3QgKENPUkVfQUREUiBsbSwgc3RydWN0CisgICAgICAg aWYgKG5ldy0+bG1faW5mbyA9PSBOVUxMKQorIAl7CisgCSAgZG9fY2xlYW51cHMgKG9sZF9jaGFp bik7CistCSAgYnJlYWs7CisrCSAgcmV0dXJuIDA7CisgCX0KKyAKKyAgICAgICBuZXh0X2xtID0g bmV3LT5sbV9pbmZvLT5sX25leHQ7CitAQCAtMTE5Niw3ICsxMzI1LDcgQEAgc3ZyNF9yZWFkX3Nv X2xpc3QgKENPUkVfQUREUiBsbSwgc3RydWN0CisgCQkgICBwYWRkcmVzcyAodGFyZ2V0X2dkYmFy Y2ggKCksIHByZXZfbG0pLAorIAkJICAgcGFkZHJlc3MgKHRhcmdldF9nZGJhcmNoICgpLCBuZXct PmxtX2luZm8tPmxfcHJldikpOworIAkgIGRvX2NsZWFudXBzIChvbGRfY2hhaW4pOworLQkgIGJy ZWFrOworKwkgIHJldHVybiAwOworIAl9CisgCisgICAgICAgLyogRm9yIFNWUjQgdmVyc2lvbnMs IHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbGluayBtYXAgaXMgZm9yIHRoZQorQEAgLTEyOTEsMTcg KzE0MjAsMTkgQEAgc3ZyNF9yZWFkX3NvX2xpc3QgKENPUkVfQUREUiBsbSwgc3RydWN0CisgICAg ICAgKipsaW5rX3B0cl9wdHIgPSBuZXc7CisgICAgICAgKmxpbmtfcHRyX3B0ciA9ICZuZXctPm5l eHQ7CisgICAgIH0KKysKKysgIHJldHVybiAxOworIH0KKyAKKy0vKiBJbXBsZW1lbnQgdGhlICJj dXJyZW50X3NvcyIgdGFyZ2V0X3NvX29wcyBtZXRob2QuICAqLworKy8qIFJlYWQgdGhlIGZ1bGwg bGlzdCBvZiBjdXJyZW50bHkgbG9hZGVkIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20KKysg ICB0aGUgaW5mZXJpb3IuICAqLworIAorIHN0YXRpYyBzdHJ1Y3Qgc29fbGlzdCAqCistc3ZyNF9j dXJyZW50X3NvcyAodm9pZCkKKytzdnI0X2N1cnJlbnRfc29zX2RpcmVjdCAoc3RydWN0IHN2cjRf aW5mbyAqaW5mbykKKyB7CisgICBDT1JFX0FERFIgbG07CisgICBzdHJ1Y3Qgc29fbGlzdCAqaGVh ZCA9IE5VTEw7CisgICBzdHJ1Y3Qgc29fbGlzdCAqKmxpbmtfcHRyID0gJmhlYWQ7CistICBzdHJ1 Y3Qgc3ZyNF9pbmZvICppbmZvOworICAgc3RydWN0IGNsZWFudXAgKmJhY2tfdG87CisgICBpbnQg aWdub3JlX2ZpcnN0OworICAgc3RydWN0IHN2cjRfbGlicmFyeV9saXN0IGxpYnJhcnlfbGlzdDsK K0BAIC0xMzE0LDE5ICsxNDQ1LDE2IEBAIHN2cjRfY3VycmVudF9zb3MgKHZvaWQpCisgICAgICBV bmZvcnR1bmF0ZWx5IHN0YXRpY2FsbHkgbGlua2VkIGluZmVyaW9ycyB3aWxsIGFsc28gZmFsbCBi YWNrIHRocm91Z2ggdGhpcworICAgICAgc3Vib3B0aW1hbCBjb2RlIHBhdGguICAqLworIAorLSAg aWYgKHN2cjRfY3VycmVudF9zb3NfdmlhX3hmZXJfbGlicmFyaWVzICgmbGlicmFyeV9saXN0KSkK KysgIGluZm8tPnVzaW5nX3hmZXIgPSBzdnI0X2N1cnJlbnRfc29zX3ZpYV94ZmVyX2xpYnJhcmll cyAoJmxpYnJhcnlfbGlzdCwKKysJCQkJCQkJICBOVUxMKTsKKysgIGlmIChpbmZvLT51c2luZ194 ZmVyKQorICAgICB7CisgICAgICAgaWYgKGxpYnJhcnlfbGlzdC5tYWluX2xtKQorLQl7CistCSAg aW5mbyA9IGdldF9zdnI0X2luZm8gKCk7CistCSAgaW5mby0+bWFpbl9sbV9hZGRyID0gbGlicmFy eV9saXN0Lm1haW5fbG07CistCX0KKysJaW5mby0+bWFpbl9sbV9hZGRyID0gbGlicmFyeV9saXN0 Lm1haW5fbG07CisgCisgICAgICAgcmV0dXJuIGxpYnJhcnlfbGlzdC5oZWFkID8gbGlicmFyeV9s aXN0LmhlYWQgOiBzdnI0X2RlZmF1bHRfc29zICgpOworICAgICB9CisgCistICBpbmZvID0gZ2V0 X3N2cjRfaW5mbyAoKTsKKy0KKyAgIC8qIEFsd2F5cyBsb2NhdGUgdGhlIGRlYnVnIHN0cnVjdCwg aW4gY2FzZSBpdCBoYXMgbW92ZWQuICAqLworICAgaW5mby0+ZGVidWdfYmFzZSA9IDA7CisgICBs b2NhdGVfYmFzZSAoaW5mbyk7CitAQCAtMTM0OSw3ICsxNDc3LDcgQEAgc3ZyNF9jdXJyZW50X3Nv cyAodm9pZCkKKyAgICAgIGBzdHJ1Y3Qgc29fbGlzdCcgbm9kZXMuICAqLworICAgbG0gPSBzb2xp Yl9zdnI0X3JfbWFwIChpbmZvKTsKKyAgIGlmIChsbSkKKy0gICAgc3ZyNF9yZWFkX3NvX2xpc3Qg KGxtLCAmbGlua19wdHIsIGlnbm9yZV9maXJzdCk7CisrICAgIHN2cjRfcmVhZF9zb19saXN0IChs bSwgMCwgJmxpbmtfcHRyLCBpZ25vcmVfZmlyc3QpOworIAorICAgLyogT24gU29sYXJpcywgdGhl IGR5bmFtaWMgbGlua2VyIGlzIG5vdCBpbiB0aGUgbm9ybWFsIGxpc3Qgb2YKKyAgICAgIHNoYXJl ZCBvYmplY3RzLCBzbyBtYWtlIHN1cmUgd2UgcGljayBpdCB1cCB0b28uICBIYXZpbmcKK0BAIC0x MzU3LDcgKzE0ODUsNyBAQCBzdnI0X2N1cnJlbnRfc29zICh2b2lkKQorICAgICAgZm9yIHNraXBw aW5nIGR5bmFtaWMgbGlua2VyIHJlc29sdmVyIGNvZGUuICAqLworICAgbG0gPSBzb2xpYl9zdnI0 X3JfbGRzb21hcCAoaW5mbyk7CisgICBpZiAobG0pCistICAgIHN2cjRfcmVhZF9zb19saXN0IChs bSwgJmxpbmtfcHRyLCAwKTsKKysgICAgc3ZyNF9yZWFkX3NvX2xpc3QgKGxtLCAwLCAmbGlua19w dHIsIDApOworIAorICAgZGlzY2FyZF9jbGVhbnVwcyAoYmFja190byk7CisgCitAQCAtMTM2Nyw2 ICsxNDk1LDIyIEBAIHN2cjRfY3VycmVudF9zb3MgKHZvaWQpCisgICByZXR1cm4gaGVhZDsKKyB9 CisgCisrLyogSW1wbGVtZW50IHRoZSAiY3VycmVudF9zb3MiIHRhcmdldF9zb19vcHMgbWV0aG9k LiAgKi8KKysKKytzdGF0aWMgc3RydWN0IHNvX2xpc3QgKgorK3N2cjRfY3VycmVudF9zb3MgKHZv aWQpCisreworKyAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbyA9IGdldF9zdnI0X2luZm8gKCk7Cisr CisrICAvKiBJZiB3ZSBhcmUgdXNpbmcgdGhlIHByb2JlcyBpbnRlcmZhY2UgYW5kIHRoZSBzb2xp YiBsaXN0IGhhcworKyAgICAgYmVlbiBjYWNoZWQgdGhlbiB3ZSBzaW1wbHkgcmV0dXJuIHRoYXQu ICAqLworKyAgaWYgKGluZm8tPnNvbGliX2xpc3QgIT0gTlVMTCkKKysgICAgcmV0dXJuIHN2cjRf Y29weV9saWJyYXJ5X2xpc3QgKGluZm8tPnNvbGliX2xpc3QpOworKworKyAgLyogT3RoZXJ3aXNl IG9idGFpbiB0aGUgc29saWIgbGlzdCBkaXJlY3RseSBmcm9tIHRoZSBpbmZlcmlvci4gICovCisr ICByZXR1cm4gc3ZyNF9jdXJyZW50X3Nvc19kaXJlY3QgKGluZm8pOworK30KKysKKyAvKiBHZXQg dGhlIGFkZHJlc3Mgb2YgdGhlIGxpbmtfbWFwIGZvciBhIGdpdmVuIE9CSkZJTEUuICAqLworIAor IENPUkVfQUREUgorQEAgLTE0NDksNiArMTU5Myw0MzQgQEAgZXhlY19lbnRyeV9wb2ludCAoc3Ry dWN0IGJmZCAqYWJmZCwgc3RydQorICAgcmV0dXJuIGdkYmFyY2hfYWRkcl9iaXRzX3JlbW92ZSAo dGFyZ2V0X2dkYmFyY2ggKCksIGFkZHIpOworIH0KKyAKKysvKiBBIHByb2JlIGFuZCBpdHMgYXNz b2NpYXRlZCBhY3Rpb24uICAqLworKworK3N0cnVjdCBwcm9iZV9hbmRfYWN0aW9uCisreworKyAg LyogVGhlIHByb2JlLiAgKi8KKysgIHN0cnVjdCBwcm9iZSAqcHJvYmU7CisrCisrICAvKiBUaGUg YWN0aW9uLiAgKi8KKysgIGVudW0gcHJvYmVfYWN0aW9uIGFjdGlvbjsKKyt9OworKworKy8qIFJl dHVybnMgYSBoYXNoIGNvZGUgZm9yIHRoZSBwcm9iZV9hbmRfYWN0aW9uIHJlZmVyZW5jZWQgYnkg cC4gICovCisrCisrc3RhdGljIGhhc2h2YWxfdAorK2hhc2hfcHJvYmVfYW5kX2FjdGlvbiAoY29u c3Qgdm9pZCAqcCkKKyt7CisrICBjb25zdCBzdHJ1Y3QgcHJvYmVfYW5kX2FjdGlvbiAqcGEgPSBw OworKworKyAgcmV0dXJuIChoYXNodmFsX3QpIHBhLT5wcm9iZS0+YWRkcmVzczsKKyt9CisrCisr LyogUmV0dXJucyBub24temVybyBpZiB0aGUgcHJvYmVfYW5kX2FjdGlvbnMgcmVmZXJlbmNlZCBi eSBwMSBhbmQgcDIKKysgICBhcmUgZXF1YWwuICAqLworKworK3N0YXRpYyBpbnQKKytlcXVhbF9w cm9iZV9hbmRfYWN0aW9uIChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCisreworKyAg Y29uc3Qgc3RydWN0IHByb2JlX2FuZF9hY3Rpb24gKnBhMSA9IHAxOworKyAgY29uc3Qgc3RydWN0 IHByb2JlX2FuZF9hY3Rpb24gKnBhMiA9IHAyOworKworKyAgcmV0dXJuIHBhMS0+cHJvYmUtPmFk ZHJlc3MgPT0gcGEyLT5wcm9iZS0+YWRkcmVzczsKKyt9CisrCisrLyogUmVnaXN0ZXIgYSBzb2xp YiBldmVudCBwcm9iZSBhbmQgaXRzIGFzc29jaWF0ZWQgYWN0aW9uIGluIHRoZQorKyAgIHByb2Jl cyB0YWJsZS4gICovCisrCisrc3RhdGljIHZvaWQKKytyZWdpc3Rlcl9zb2xpYl9ldmVudF9wcm9i ZSAoc3RydWN0IHByb2JlICpwcm9iZSwgZW51bSBwcm9iZV9hY3Rpb24gYWN0aW9uKQorK3sKKysg IHN0cnVjdCBzdnI0X2luZm8gKmluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOworKyAgc3RydWN0IHBy b2JlX2FuZF9hY3Rpb24gbG9va3VwLCAqcGE7CisrICB2b2lkICoqc2xvdDsKKysKKysgIC8qIENy ZWF0ZSB0aGUgcHJvYmVzIHRhYmxlLCBpZiBuZWNlc3NhcnkuICAqLworKyAgaWYgKGluZm8tPnBy b2Jlc190YWJsZSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgaW5mby0+cHJvYmVzX3RhYmxlID0g aHRhYl9jcmVhdGVfYWxsb2MgKDEsIGhhc2hfcHJvYmVfYW5kX2FjdGlvbiwKKysJCQkJCSAgICAg IGVxdWFsX3Byb2JlX2FuZF9hY3Rpb24sCisrCQkJCQkgICAgICB4ZnJlZSwgeGNhbGxvYywgeGZy ZWUpOworKyAgICB9CisrCisrICBsb29rdXAucHJvYmUgPSBwcm9iZTsKKysgIHNsb3QgPSBodGFi X2ZpbmRfc2xvdCAoaW5mby0+cHJvYmVzX3RhYmxlLCAmbG9va3VwLCBJTlNFUlQpOworKyAgZ2Ri X2Fzc2VydCAoKnNsb3QgPT0gSFRBQl9FTVBUWV9FTlRSWSk7CisrCisrICBwYSA9IFhDTkVXIChz dHJ1Y3QgcHJvYmVfYW5kX2FjdGlvbik7CisrICBwYS0+cHJvYmUgPSBwcm9iZTsKKysgIHBhLT5h Y3Rpb24gPSBhY3Rpb247CisrCisrICAqc2xvdCA9IHBhOworK30KKysKKysvKiBHZXQgdGhlIHNv bGliIGV2ZW50IHByb2JlIGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24sIGFuZCB0aGUKKysgICBh Y3Rpb24gYXNzb2NpYXRlZCB3aXRoIGl0LiAgUmV0dXJucyBOVUxMIGlmIG5vIHNvbGliIGV2ZW50 IHByb2JlCisrICAgd2FzIGZvdW5kLiAgKi8KKysKKytzdGF0aWMgc3RydWN0IHByb2JlX2FuZF9h Y3Rpb24gKgorK3NvbGliX2V2ZW50X3Byb2JlX2F0IChzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvLCBD T1JFX0FERFIgYWRkcmVzcykKKyt7CisrICBzdHJ1Y3QgcHJvYmUgbG9va3VwX3Byb2JlOworKyAg c3RydWN0IHByb2JlX2FuZF9hY3Rpb24gbG9va3VwOworKyAgdm9pZCAqKnNsb3Q7CisrCisrICBs b29rdXBfcHJvYmUuYWRkcmVzcyA9IGFkZHJlc3M7CisrICBsb29rdXAucHJvYmUgPSAmbG9va3Vw X3Byb2JlOworKyAgc2xvdCA9IGh0YWJfZmluZF9zbG90IChpbmZvLT5wcm9iZXNfdGFibGUsICZs b29rdXAsIE5PX0lOU0VSVCk7CisrCisrICBpZiAoc2xvdCA9PSBOVUxMKQorKyAgICByZXR1cm4g TlVMTDsKKysKKysgIHJldHVybiAoc3RydWN0IHByb2JlX2FuZF9hY3Rpb24gKikgKnNsb3Q7Cisr fQorKworKy8qIERlY2lkZSB3aGF0IGFjdGlvbiB0byB0YWtlIHdoZW4gdGhlIHNwZWNpZmllZCBz b2xpYiBldmVudCBwcm9iZSBpcworKyAgIGhpdC4gICovCisrCisrc3RhdGljIGVudW0gcHJvYmVf YWN0aW9uCisrc29saWJfZXZlbnRfcHJvYmVfYWN0aW9uIChzdHJ1Y3QgcHJvYmVfYW5kX2FjdGlv biAqcGEpCisreworKyAgZW51bSBwcm9iZV9hY3Rpb24gYWN0aW9uOworKyAgdW5zaWduZWQgcHJv YmVfYXJnYzsKKysKKysgIGFjdGlvbiA9IHBhLT5hY3Rpb247CisrICBpZiAoYWN0aW9uID09IERP X05PVEhJTkcgfHwgYWN0aW9uID09IFBST0JFU19JTlRFUkZBQ0VfRkFJTEVEKQorKyAgICByZXR1 cm4gYWN0aW9uOworKworKyAgZ2RiX2Fzc2VydCAoYWN0aW9uID09IEZVTExfUkVMT0FEIHx8IGFj dGlvbiA9PSBVUERBVEVfT1JfUkVMT0FEKTsKKysKKysgIC8qIENoZWNrIHRoYXQgYW4gYXBwcm9w cmlhdGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzdXBwbGllZC4KKysgICAgIFdlIGV4 cGVjdDoKKysgICAgICAgYXJnMDogTG1pZF90IGxtaWQgKG1hbmRhdG9yeSkKKysgICAgICAgYXJn MTogc3RydWN0IHJfZGVidWcgKmRlYnVnX2Jhc2UgKG1hbmRhdG9yeSkKKysgICAgICAgYXJnMjog c3RydWN0IGxpbmtfbWFwICpuZXcgKG9wdGlvbmFsLCBmb3IgaW5jcmVtZW50YWwgdXBkYXRlcykg ICovCisrICBwcm9iZV9hcmdjID0gZ2V0X3Byb2JlX2FyZ3VtZW50X2NvdW50IChwYS0+cHJvYmUp OworKyAgaWYgKHByb2JlX2FyZ2MgPT0gMikKKysgICAgYWN0aW9uID0gRlVMTF9SRUxPQUQ7Cisr ICBlbHNlIGlmIChwcm9iZV9hcmdjIDwgMikKKysgICAgYWN0aW9uID0gUFJPQkVTX0lOVEVSRkFD RV9GQUlMRUQ7CisrCisrICByZXR1cm4gYWN0aW9uOworK30KKysKKysvKiBQb3B1bGF0ZSB0aGUg c2hhcmVkIG9iamVjdCBsaXN0IGJ5IHJlYWRpbmcgdGhlIGVudGlyZSBsaXN0IG9mCisrICAgc2hh cmVkIG9iamVjdHMgZnJvbSB0aGUgaW5mZXJpb3IuICBSZXR1cm5zIG5vbnplcm8gb24gc3VjY2Vz cy4gICovCisrCisrc3RhdGljIGludAorK3NvbGlzdF91cGRhdGVfZnVsbCAoc3RydWN0IHN2cjRf aW5mbyAqaW5mbykKKyt7CisrICBzdnI0X2ZyZWVfbGlicmFyeV9saXN0ICgmaW5mby0+c29saWJf bGlzdCk7CisrICBpbmZvLT5zb2xpYl9saXN0ID0gc3ZyNF9jdXJyZW50X3Nvc19kaXJlY3QgKGlu Zm8pOworKworKyAgcmV0dXJuIDE7CisrfQorKworKy8qIFVwZGF0ZSB0aGUgc2hhcmVkIG9iamVj dCBsaXN0IHN0YXJ0aW5nIGZyb20gdGhlIGxpbmstbWFwIGVudHJ5CisrICAgcGFzc2VkIGJ5IHRo ZSBsaW5rZXIgaW4gdGhlIHByb2JlJ3MgdGhpcmQgYXJndW1lbnQuICBSZXR1cm5zCisrICAgbm9u emVybyBpZiB0aGUgbGlzdCB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQsIG9yIHplcm8gdG8gaW5k aWNhdGUKKysgICBmYWlsdXJlLiAgKi8KKysKKytzdGF0aWMgaW50Cisrc29saXN0X3VwZGF0ZV9p bmNyZW1lbnRhbCAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbywgQ09SRV9BRERSIGxtKQorK3sKKysg IHN0cnVjdCBzb19saXN0ICp0YWlsOworKyAgQ09SRV9BRERSIHByZXZfbG07CisrCisrICAvKiBG YWxsIGJhY2sgdG8gYSBmdWxsIHVwZGF0ZSBpZiB3ZSBoYXZlbid0IHJlYWQgYW55dGhpbmcgeWV0 LiAgKi8KKysgIGlmIChpbmZvLT5zb2xpYl9saXN0ID09IE5VTEwpCisrICAgIHJldHVybiAwOwor KworKyAgLyogRmFsbCBiYWNrIHRvIGEgZnVsbCB1cGRhdGUgaWYgd2UgYXJlIHVzaW5nIGEgcmVt b3RlIHRhcmdldAorKyAgICAgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IGluY3JlbWVudGFsIHRyYW5z ZmVycy4gICovCisrICBpZiAoaW5mby0+dXNpbmdfeGZlciAmJiAhdGFyZ2V0X2F1Z21lbnRlZF9s aWJyYXJpZXNfc3ZyNF9yZWFkKCkpCisrICAgIHJldHVybiAwOworKworKyAgLyogV2FsayB0byB0 aGUgZW5kIG9mIHRoZSBsaXN0LiAgKi8KKysgIGZvciAodGFpbCA9IGluZm8tPnNvbGliX2xpc3Q7 IHRhaWwtPm5leHQ7IHRhaWwgPSB0YWlsLT5uZXh0KTsKKysgIHByZXZfbG0gPSB0YWlsLT5sbV9p bmZvLT5sbV9hZGRyOworKworKyAgLyogUmVhZCB0aGUgbmV3IG9iamVjdHMuICAqLworKyAgaWYg KGluZm8tPnVzaW5nX3hmZXIpCisrICAgIHsKKysgICAgICBzdHJ1Y3Qgc3ZyNF9saWJyYXJ5X2xp c3QgbGlicmFyeV9saXN0OworKyAgICAgIGNoYXIgYW5uZXhbNjRdOworKworKyAgICAgIHhzbnBy aW50ZiAoYW5uZXgsIHNpemVvZiAoYW5uZXgpLCAic3RhcnQ9JWx4O3ByZXY9JWx4IiwgbG0sIHBy ZXZfbG0pOworKyAgICAgIGlmICghc3ZyNF9jdXJyZW50X3Nvc192aWFfeGZlcl9saWJyYXJpZXMg KCZsaWJyYXJ5X2xpc3QsIGFubmV4KSkKKysJcmV0dXJuIDA7CisrCisrICAgICAgdGFpbC0+bmV4 dCA9IGxpYnJhcnlfbGlzdC5oZWFkOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBz dHJ1Y3Qgc29fbGlzdCAqKmxpbmsgPSAmdGFpbC0+bmV4dDsKKysKKysgICAgICBpZiAoIXN2cjRf cmVhZF9zb19saXN0IChsbSwgcHJldl9sbSwgJmxpbmssIDApKQorKwlyZXR1cm4gMDsKKysgICAg fQorKworKyAgcmV0dXJuIDE7CisrfQorKworKy8qIERpc2FibGUgdGhlIHByb2Jlcy1iYXNlZCBs aW5rZXIgaW50ZXJmYWNlIGFuZCByZXZlcnQgdG8gdGhlCisrICAgb3JpZ2luYWwgaW50ZXJmYWNl LiAgV2UgZG9uJ3QgcmVzZXQgdGhlIGJyZWFrcG9pbnRzIGFzIHRoZQorKyAgIG9uZXMgc2V0IHVw IGZvciB0aGUgcHJvYmVzLWJhc2VkIGludGVyZmFjZSBhcmUgYWRlcXVhdGUuICAqLworKworK3N0 YXRpYyB2b2lkCisrZGlzYWJsZV9wcm9iZXNfaW50ZXJmYWNlX2NsZWFudXAgKHZvaWQgKmFyZykK Kyt7CisrICBzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvID0gZ2V0X3N2cjRfaW5mbyAoKTsKKysKKysg IHdhcm5pbmcgKF8oIlByb2Jlcy1iYXNlZCBkeW5hbWljIGxpbmtlciBpbnRlcmZhY2UgZmFpbGVk LlxuIgorKwkgICAgICJSZXZlcnRpbmcgdG8gb3JpZ2luYWwgaW50ZXJmYWNlLlxuIikpOworKwor KyAgZnJlZV9wcm9iZXNfdGFibGUgKGluZm8pOworKyAgZnJlZV9zb2xpYl9saXN0IChpbmZvKTsK Kyt9CisrCisrLyogVXBkYXRlIHRoZSBzb2xpYiBsaXN0IGFzIGFwcHJvcHJpYXRlIHdoZW4gdXNp bmcgdGhlCisrICAgcHJvYmVzLWJhc2VkIGxpbmtlciBpbnRlcmZhY2UuICBEbyBub3RoaW5nIGlm IHVzaW5nIHRoZQorKyAgIHN0YW5kYXJkIGludGVyZmFjZS4gICovCisrCisrc3RhdGljIHZvaWQK KytzdnI0X2hhbmRsZV9zb2xpYl9ldmVudCAodm9pZCkKKyt7CisrICBzdHJ1Y3Qgc3ZyNF9pbmZv ICppbmZvID0gZ2V0X3N2cjRfaW5mbyAoKTsKKysgIHN0cnVjdCBwcm9iZV9hbmRfYWN0aW9uICpw YTsKKysgIGVudW0gcHJvYmVfYWN0aW9uIGFjdGlvbjsKKysgIHN0cnVjdCBjbGVhbnVwICpvbGRf Y2hhaW4sICp1c21fY2hhaW47CisrICBzdHJ1Y3QgdmFsdWUgKnZhbDsKKysgIENPUkVfQUREUiBw YywgZGVidWdfYmFzZSwgbG0gPSAwOworKyAgaW50IGlzX2luaXRpYWxfbnM7CisrCisrICAvKiBE byBub3RoaW5nIGlmIG5vdCB1c2luZyB0aGUgcHJvYmVzIGludGVyZmFjZS4gICovCisrICBpZiAo aW5mby0+cHJvYmVzX3RhYmxlID09IE5VTEwpCisrICAgIHJldHVybjsKKysKKysgIC8qIElmIGFu eXRoaW5nIGdvZXMgd3Jvbmcgd2UgcmV2ZXJ0IHRvIHRoZSBvcmlnaW5hbCBsaW5rZXIKKysgICAg IGludGVyZmFjZS4gICovCisrICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAgKGRpc2FibGVfcHJv YmVzX2ludGVyZmFjZV9jbGVhbnVwLCBOVUxMKTsKKysKKysgIHBjID0gcmVnY2FjaGVfcmVhZF9w YyAoZ2V0X2N1cnJlbnRfcmVnY2FjaGUgKCkpOworKyAgcGEgPSBzb2xpYl9ldmVudF9wcm9iZV9h dCAoaW5mbywgcGMpOworKyAgaWYgKHBhID09IE5VTEwpCisrICAgIGdvdG8gZXJyb3I7CisrCisr ICBhY3Rpb24gPSBzb2xpYl9ldmVudF9wcm9iZV9hY3Rpb24gKHBhKTsKKysgIGlmIChhY3Rpb24g PT0gUFJPQkVTX0lOVEVSRkFDRV9GQUlMRUQpCisrICAgIGdvdG8gZXJyb3I7CisrCisrICBpZiAo YWN0aW9uID09IERPX05PVEhJTkcpCisrICAgIHJldHVybjsKKysKKysgIC8qIEVWQUxVQVRFX1BS T0JFX0FSR1VNRU5UIGxvb2tzIHVwIHN5bWJvbHMgaW4gdGhlIGR5bmFtaWMgbGlua2VyCisrICAg ICB1c2luZyBGSU5EX1BDX1NFQ1RJT04uICBGSU5EX1BDX1NFQ1RJT04gaXMgYWNjZWxlcmF0ZWQg YnkgYSBjYWNoZQorKyAgICAgY2FsbGVkIHRoZSBzZWN0aW9uIG1hcC4gIFRoZSBzZWN0aW9uIG1h cCBpcyBpbnZhbGlkYXRlZCBldmVyeQorKyAgICAgdGltZSBhIHNoYXJlZCBsaWJyYXJ5IGlzIGxv YWRlZCBvciB1bmxvYWRlZCwgYW5kIGlmIHRoZSBpbmZlcmlvcgorKyAgICAgaXMgZ2VuZXJhdGlu ZyBhIGxvdCBvZiBzaGFyZWQgbGlicmFyeSBldmVudHMgdGhlbiB0aGUgc2VjdGlvbiBtYXAKKysg ICAgIHdpbGwgYmUgdXBkYXRlZCBldmVyeSB0aW1lIFNWUjRfSEFORExFX1NPTElCX0VWRU5UIGlz IGNhbGxlZC4KKysgICAgIFdlIGNhbGxlZCBGSU5EX1BDX1NFQ1RJT04gaW4gU1ZSNF9DUkVBVEVf U09MSUJfRVZFTlRfQlJFQUtQT0lOVFMsCisrICAgICBzbyB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQg dGhlIGR5bmFtaWMgbGlua2VyJ3Mgc2VjdGlvbnMgYXJlIGluIHRoZQorKyAgICAgc2VjdGlvbiBt YXAuICBXZSBjYW4gdGhlcmVmb3JlIGluaGliaXQgc2VjdGlvbiBtYXAgdXBkYXRlcyBhY3Jvc3MK KysgICAgIHRoZXNlIGNhbGxzIHRvIEVWQUxVQVRFX1BST0JFX0FSR1VNRU5UIGFuZCBzYXZlIGEg bG90IG9mIHRpbWUuICAqLworKyAgaW5oaWJpdF9zZWN0aW9uX21hcF91cGRhdGVzICgpOworKyAg dXNtX2NoYWluID0gbWFrZV9jbGVhbnVwIChyZXN1bWVfc2VjdGlvbl9tYXBfdXBkYXRlc19jbGVh bnVwLCBOVUxMKTsKKysKKysgIHZhbCA9IGV2YWx1YXRlX3Byb2JlX2FyZ3VtZW50IChwYS0+cHJv YmUsIDEpOworKyAgaWYgKHZhbCA9PSBOVUxMKQorKyAgICBnb3RvIGVycm9yOworKworKyAgZGVi dWdfYmFzZSA9IHZhbHVlX2FzX2FkZHJlc3MgKHZhbCk7CisrICBpZiAoZGVidWdfYmFzZSA9PSAw KQorKyAgICBnb3RvIGVycm9yOworKworKyAgLyogQWx3YXlzIGxvY2F0ZSB0aGUgZGVidWcgc3Ry dWN0LCBpbiBjYXNlIGl0IG1vdmVkLiAgKi8KKysgIGluZm8tPmRlYnVnX2Jhc2UgPSAwOworKyAg aWYgKGxvY2F0ZV9iYXNlIChpbmZvKSA9PSAwKQorKyAgICBnb3RvIGVycm9yOworKworKyAgLyog RG8gbm90IHByb2Nlc3MgbmFtZXNwYWNlcyBvdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZS4gICov CisrICBpZiAoZGVidWdfYmFzZSAhPSBpbmZvLT5kZWJ1Z19iYXNlKQorKyAgICBhY3Rpb24gPSBE T19OT1RISU5HOworKworKyAgaWYgKGFjdGlvbiA9PSBVUERBVEVfT1JfUkVMT0FEKQorKyAgICB7 CisrICAgICAgdmFsID0gZXZhbHVhdGVfcHJvYmVfYXJndW1lbnQgKHBhLT5wcm9iZSwgMik7Cisr ICAgICAgaWYgKHZhbCAhPSBOVUxMKQorKwlsbSA9IHZhbHVlX2FzX2FkZHJlc3MgKHZhbCk7Cisr CisrICAgICAgaWYgKGxtID09IDApCisrCWFjdGlvbiA9IEZVTExfUkVMT0FEOworKyAgICB9Cisr CisrICAvKiBSZXN1bWUgc2VjdGlvbiBtYXAgdXBkYXRlcy4gICovCisrICBkb19jbGVhbnVwcyAo dXNtX2NoYWluKTsKKysKKysgIGlmIChhY3Rpb24gPT0gVVBEQVRFX09SX1JFTE9BRCkKKysgICAg eworKyAgICAgIGlmICghc29saXN0X3VwZGF0ZV9pbmNyZW1lbnRhbCAoaW5mbywgbG0pKQorKwlh Y3Rpb24gPSBGVUxMX1JFTE9BRDsKKysgICAgfQorKworKyAgaWYgKGFjdGlvbiA9PSBGVUxMX1JF TE9BRCkKKysgICAgeworKyAgICAgIGlmICghc29saXN0X3VwZGF0ZV9mdWxsIChpbmZvKSkKKysJ Z290byBlcnJvcjsKKysgICAgfQorKworKyAgZGlzY2FyZF9jbGVhbnVwcyAob2xkX2NoYWluKTsK KysgIHJldHVybjsKKysKKysgZXJyb3I6CisrICAvKiBXZSBzaG91bGQgbmV2ZXIgcmVhY2ggaGVy ZSwgYnV0IGlmIHdlIGRvIHdlIGRpc2FibGUgdGhlCisrICAgICBwcm9iZXMgaW50ZXJmYWNlIGFu ZCByZXZlcnQgdG8gdGhlIG9yaWdpbmFsIGludGVyZmFjZS4gICovCisrCisrICBkb19jbGVhbnVw cyAob2xkX2NoYWluKTsKKyt9CisrCisrLyogSGVscGVyIGZ1bmN0aW9uIGZvciBzdnI0X3VwZGF0 ZV9zb2xpYl9ldmVudF9icmVha3BvaW50cy4gICovCisrCisrc3RhdGljIGludAorK3N2cjRfdXBk YXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnQgKHN0cnVjdCBicmVha3BvaW50ICpiLCB2b2lkICph cmcpCisreworKyAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbyA9IGdldF9zdnI0X2luZm8gKCk7Cisr ICBzdHJ1Y3QgYnBfbG9jYXRpb24gKmxvYzsKKysKKysgIGlmIChiLT50eXBlICE9IGJwX3NobGli X2V2ZW50KQorKyAgICByZXR1cm4gMDsgLyogQ29udGludWUgaXRlcmF0aW5nLiAgKi8KKysKKysg IGZvciAobG9jID0gYi0+bG9jOyBsb2M7IGxvYyA9IGxvYy0+bmV4dCkKKysgICAgeworKyAgICAg IHN0cnVjdCBwcm9iZV9hbmRfYWN0aW9uICpwYSA9IHNvbGliX2V2ZW50X3Byb2JlX2F0IChpbmZv LCBsb2MtPmFkZHJlc3MpOworKworKyAgICAgIGlmIChwYSAhPSBOVUxMKQorKwl7CisrCSAgaWYg KHBhLT5hY3Rpb24gPT0gRE9fTk9USElORykKKysJICAgIGItPmVuYWJsZV9zdGF0ZSA9IChzdG9w X29uX3NvbGliX2V2ZW50cworKwkJCSAgICAgICA/IGJwX2VuYWJsZWQgOiBicF9kaXNhYmxlZCk7 CisrCisrCSAgcmV0dXJuIDA7IC8qIENvbnRpbnVlIGl0ZXJhdGluZy4gICovCisrCX0KKysgICAg fQorKworKyAgcmV0dXJuIDA7IC8qIENvbnRpbnVlIGl0ZXJhdGluZy4gICovCisrfQorKworKy8q IEVuYWJsZSBvciBkaXNhYmxlIG9wdGlvbmFsIHNvbGliIGV2ZW50IGJyZWFrcG9pbnRzIGFzIGFw cHJvcHJpYXRlLgorKyAgIENhbGxlZCB3aGVuZXZlciBzdG9wX29uX3NvbGliX2V2ZW50cyBpcyBj aGFuZ2VkLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK3N2cjRfdXBkYXRlX3NvbGliX2V2ZW50X2Jy ZWFrcG9pbnRzICh2b2lkKQorK3sKKysgIHN0cnVjdCBzdnI0X2luZm8gKmluZm8gPSBnZXRfc3Zy NF9pbmZvICgpOworKworKyAgaWYgKGluZm8tPnByb2Jlc190YWJsZSkKKysgICAgaXRlcmF0ZV9v dmVyX2JyZWFrcG9pbnRzIChzdnI0X3VwZGF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50LCBOVUxM KTsKKyt9CisrCisrLyogQ3JlYXRlIGFuZCByZWdpc3RlciBzb2xpYiBldmVudCBicmVha3BvaW50 cy4gICovCisrCisrc3RhdGljIHZvaWQKKytzdnI0X2NyZWF0ZV9wcm9iZV9icmVha3BvaW50cyAo c3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisrCQkJICAgICAgIFZFQyAocHJvYmVfcCkgKipwcm9i ZXMpCisreworKyAgaW50IGk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgTlVNX1BST0JFUzsgaSsr KQorKyAgICB7CisrICAgICAgZW51bSBwcm9iZV9hY3Rpb24gYWN0aW9uID0gcHJvYmVfaW5mb1tp XS5hY3Rpb247CisrICAgICAgc3RydWN0IHByb2JlICpwcm9iZTsKKysgICAgICBpbnQgaXg7Cisr CisrICAgICAgZm9yIChpeCA9IDA7CisrCSAgIFZFQ19pdGVyYXRlIChwcm9iZV9wLCBwcm9iZXNb aV0sIGl4LCBwcm9iZSk7CisrCSAgICsraXgpCisrCXsKKysJICBjcmVhdGVfc29saWJfZXZlbnRf YnJlYWtwb2ludCAoZ2RiYXJjaCwgcHJvYmUtPmFkZHJlc3MpOworKwkgIHJlZ2lzdGVyX3NvbGli X2V2ZW50X3Byb2JlIChwcm9iZSwgYWN0aW9uKTsKKysJfQorKyAgICB9CisrCisrICBzdnI0X3Vw ZGF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50cyAoKTsKKyt9CisrCisrLyogQm90aCB0aGUgU3Vu T1MgYW5kIHRoZSBTVlI0IGR5bmFtaWMgbGlua2VycyBjYWxsIGEgbWFya2VyIGZ1bmN0aW9uCisr ICAgYmVmb3JlIGFuZCBhZnRlciBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgc2hhcmVkIGxpYnJhcmll cy4gIFRoZSBzb2xlCisrICAgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBhbGxvdyBkZWJ1 Z2dlcnMgdG8gc2V0IGEgYnJlYWtwb2ludCBzbworKyAgIHRoZXkgY2FuIHRyYWNrIHRoZXNlIGNo YW5nZXMuCisrCisrICAgU29tZSB2ZXJzaW9ucyBvZiB0aGUgZ2xpYmMgZHluYW1pYyBsaW5rZXIg Y29udGFpbiBuYW1lZCBwcm9iZXMKKysgICB0byBhbGxvdyBtb3JlIGZpbmUgZ3JhaW5lZCBzdG9w cGluZy4gIEdpdmVuIHRoZSBhZGRyZXNzIG9mIHRoZQorKyAgIG9yaWdpbmFsIG1hcmtlciBmdW5j dGlvbiwgdGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBmaW5kIHRoZXNlCisrICAgcHJvYmVzLCBh bmQgaWYgZm91bmQsIHNldHMgYnJlYWtwb2ludHMgb24gdGhvc2UgaW5zdGVhZC4gIElmIHRoZQor KyAgIHByb2JlcyBhcmVuJ3QgZm91bmQsIGEgc2luZ2xlIGJyZWFrcG9pbnQgaXMgc2V0IG9uIHRo ZSBvcmlnaW5hbAorKyAgIG1hcmtlciBmdW5jdGlvbi4gICovCisrCisrc3RhdGljIHZvaWQKKytz dnI0X2NyZWF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50cyAoc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2gsCisrCQkJCSAgICAgQ09SRV9BRERSIGFkZHJlc3MpCisreworKyAgc3RydWN0IHN2cjRfaW5m byAqaW5mbyA9IGdldF9zdnI0X2luZm8gKCk7CisrICBzdHJ1Y3Qgb2JqX3NlY3Rpb24gKm9zOwor KworKyAgb3MgPSBmaW5kX3BjX3NlY3Rpb24gKGFkZHJlc3MpOworKyAgaWYgKG9zICE9IE5VTEwp CisrICAgIHsKKysgICAgICBpbnQgd2l0aF9wcmVmaXg7CisrCisrICAgICAgZm9yICh3aXRoX3By ZWZpeCA9IDA7IHdpdGhfcHJlZml4IDw9IDE7IHdpdGhfcHJlZml4KyspCisrCXsKKysJICBWRUMg KHByb2JlX3ApICpwcm9iZXNbTlVNX1BST0JFU107CisrCSAgaW50IGFsbF9wcm9iZXNfZm91bmQg PSAxOworKwkgIGludCBpOworKworKwkgIG1lbXNldCAocHJvYmVzLCAwLCBzaXplb2YgKHByb2Jl cykpOworKwkgIGZvciAoaSA9IDA7IGkgPCBOVU1fUFJPQkVTOyBpKyspCisrCSAgICB7CisrCSAg ICAgIGNoYXIgbmFtZVszMl0gPSB7ICdcMCcgfTsKKysKKysJICAgICAgLyogRmVkb3JhIDE3LCBS SEVMIDYuMiwgYW5kIFJIRUwgNi4zIHNoaXBwZWQgd2l0aCBhbgorKwkJIGVhcmx5IHZlcnNpb24g b2YgdGhlIHByb2JlcyBjb2RlIGluIHdoaWNoIHRoZSBwcm9iZXMnCisrCQkgbmFtZXMgd2VyZSBw cmVmaXhlZCB3aXRoICJydGxkXyIgYW5kIHRoZSAibWFwX2ZhaWxlZCIKKysJCSBwcm9iZSBkaWQg bm90IGV4aXN0LiAgVGhlIGxvY2F0aW9ucyBvZiB0aGUgcHJvYmVzIGFyZQorKwkJIG90aGVyd2lz ZSB0aGUgc2FtZSwgc28gd2UgY2hlY2sgZm9yIHByb2JlcyB3aXRoCisrCQkgcHJlZml4ZWQgbmFt ZXMgaWYgcHJvYmVzIHdpdGggdW5wcmVmaXhlZCBuYW1lcyBhcmUKKysJCSBub3QgcHJlc2VudC4g ICovCisrCisrCSAgICAgIGlmICh3aXRoX3ByZWZpeCkKKysJCXN0cm5jYXQgKG5hbWUsICJydGxk XyIsIHNpemVvZiAobmFtZSkgLSBzdHJsZW4gKG5hbWUpIC0gMSk7CisrCisrCSAgICAgIHN0cm5j YXQgKG5hbWUsIHByb2JlX2luZm9baV0ubmFtZSwKKysJCSAgICAgICBzaXplb2YgKG5hbWUpIC0g c3RybGVuIChuYW1lKSAtIDEpOworKworKwkgICAgICBwcm9iZXNbaV0gPSBmaW5kX3Byb2Jlc19p bl9vYmpmaWxlIChvcy0+b2JqZmlsZSwgInJ0bGQiLCBuYW1lKTsKKysKKysJICAgICAgaWYgKCFz dHJjbXAgKG5hbWUsICJydGxkX21hcF9mYWlsZWQiKSkKKysJCWNvbnRpbnVlOworKworKwkgICAg ICBpZiAoIVZFQ19sZW5ndGggKHByb2JlX3AsIHByb2Jlc1tpXSkpCisrCQl7CisrCQkgIGFsbF9w cm9iZXNfZm91bmQgPSAwOworKwkJICBicmVhazsKKysJCX0KKysJICAgIH0KKysKKysJICBpZiAo YWxsX3Byb2Jlc19mb3VuZCkKKysJICAgIHN2cjRfY3JlYXRlX3Byb2JlX2JyZWFrcG9pbnRzIChn ZGJhcmNoLCBwcm9iZXMpOworKworKwkgIGZvciAoaSA9IDA7IGkgPCBOVU1fUFJPQkVTOyBpKysp CisrCSAgICBWRUNfZnJlZSAocHJvYmVfcCwgcHJvYmVzW2ldKTsKKysKKysJICBpZiAoYWxsX3By b2Jlc19mb3VuZCkKKysJICAgIHJldHVybjsKKysJfQorKyAgICB9CisrCisrICBjcmVhdGVfc29s aWJfZXZlbnRfYnJlYWtwb2ludCAoZ2RiYXJjaCwgYWRkcmVzcyk7CisrfQorKworIC8qIEhlbHBl ciBmdW5jdGlvbiBmb3IgZ2RiX2JmZF9sb29rdXBfc3ltYm9sLiAgKi8KKyAKKyBzdGF0aWMgaW50 CitAQCAtMTUwMSw2ICsyMDczLDggQEAgZW5hYmxlX2JyZWFrIChzdHJ1Y3Qgc3ZyNF9pbmZvICpp bmZvLCBpbgorICAgaW5mby0+aW50ZXJwX3RleHRfc2VjdF9sb3cgPSBpbmZvLT5pbnRlcnBfdGV4 dF9zZWN0X2hpZ2ggPSAwOworICAgaW5mby0+aW50ZXJwX3BsdF9zZWN0X2xvdyA9IGluZm8tPmlu dGVycF9wbHRfc2VjdF9oaWdoID0gMDsKKyAKKysgIGZyZWVfcHJvYmVzX3RhYmxlIChpbmZvKTsK KysKKyAgIC8qIElmIHdlIGFscmVhZHkgaGF2ZSBhIHNoYXJlZCBsaWJyYXJ5IGxpc3QgaW4gdGhl IHRhcmdldCwgYW5kCisgICAgICByX2RlYnVnIGNvbnRhaW5zIHJfYnJrLCBzZXQgdGhlIGJyZWFr cG9pbnQgdGhlcmUgLSB0aGlzIHNob3VsZAorICAgICAgbWVhbiByX2JyayBoYXMgYWxyZWFkeSBi ZWVuIHJlbG9jYXRlZC4gIEFzc3VtZSB0aGUgZHluYW1pYyBsaW5rZXIKK0BAIC0xNTMyLDcgKzIx MDYsNyBAQCBlbmFibGVfYnJlYWsgKHN0cnVjdCBzdnI0X2luZm8gKmluZm8sIGluCisgCSBUaGF0 IGtub3dsZWRnZSBpcyBlbmNvZGVkIGluIHRoZSBhZGRyZXNzLCBpZiBpdCdzIFRodW1iIHRoZSBs b3cgYml0CisgCSBpcyAxLiAgSG93ZXZlciwgd2UndmUgc3RyaXBwZWQgdGhhdCBpbmZvIGFib3Zl IGFuZCBpdCdzIG5vdCBjbGVhcgorIAkgd2hhdCBhbGwgdGhlIGNvbnNlcXVlbmNlcyBhcmUgb2Yg cGFzc2luZyBhIG5vbi1hZGRyX2JpdHNfcmVtb3ZlJ2QKKy0JIGFkZHJlc3MgdG8gY3JlYXRlX3Nv bGliX2V2ZW50X2JyZWFrcG9pbnQuICBUaGUgY2FsbCB0bworKwkgYWRkcmVzcyB0byBzdnI0X2Ny ZWF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50cy4gIFRoZSBjYWxsIHRvCisgCSBmaW5kX3BjX3Nl Y3Rpb24gdmVyaWZpZXMgd2Uga25vdyBhYm91dCB0aGUgYWRkcmVzcyBhbmQgaGF2ZSBzb21lCisg CSBob3BlIG9mIGNvbXB1dGluZyB0aGUgcmlnaHQga2luZCBvZiBicmVha3BvaW50IHRvIHVzZSAo dmlhCisgCSBzeW1ib2wgaW5mbykuICBJdCBkb2VzIG1lYW4gdGhhdCBHREIgbmVlZHMgdG8gYmUg cG9pbnRlZCBhdCBhCitAQCAtMTU3MCw3ICsyMTQ0LDcgQEAgZW5hYmxlX2JyZWFrIChzdHJ1Y3Qg c3ZyNF9pbmZvICppbmZvLCBpbgorIAkJKyBiZmRfc2VjdGlvbl9zaXplICh0bXBfYmZkLCBpbnRl cnBfc2VjdCk7CisgCSAgICB9CisgCistCSAgY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnQg KHRhcmdldF9nZGJhcmNoICgpLCBzeW1fYWRkcik7CisrCSAgc3ZyNF9jcmVhdGVfc29saWJfZXZl bnRfYnJlYWtwb2ludHMgKHRhcmdldF9nZGJhcmNoICgpLCBzeW1fYWRkcik7CisgCSAgcmV0dXJu IDE7CisgCX0KKyAgICAgfQorQEAgLTE3MjgsNyArMjMwMiw4IEBAIGVuYWJsZV9icmVhayAoc3Ry dWN0IHN2cjRfaW5mbyAqaW5mbywgaW4KKyAKKyAgICAgICBpZiAoc3ltX2FkZHIgIT0gMCkKKyAJ eworLQkgIGNyZWF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwg bG9hZF9hZGRyICsgc3ltX2FkZHIpOworKwkgIHN2cjRfY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFr cG9pbnRzICh0YXJnZXRfZ2RiYXJjaCAoKSwKKysJCQkJCSAgICAgICBsb2FkX2FkZHIgKyBzeW1f YWRkcik7CisgCSAgeGZyZWUgKGludGVycF9uYW1lKTsKKyAJICByZXR1cm4gMTsKKyAJfQorQEAg LTE3NTQsNyArMjMyOSw3IEBAIGVuYWJsZV9icmVhayAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbywg aW4KKyAJICBzeW1fYWRkciA9IGdkYmFyY2hfY29udmVydF9mcm9tX2Z1bmNfcHRyX2FkZHIgKHRh cmdldF9nZGJhcmNoICgpLAorIAkJCQkJCQkgc3ltX2FkZHIsCisgCQkJCQkJCSAmY3VycmVudF90 YXJnZXQpOworLQkgIGNyZWF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50ICh0YXJnZXRfZ2RiYXJj aCAoKSwgc3ltX2FkZHIpOworKwkgIHN2cjRfY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRz ICh0YXJnZXRfZ2RiYXJjaCAoKSwgc3ltX2FkZHIpOworIAkgIHJldHVybiAxOworIAl9CisgICAg IH0KK0BAIC0xNzcwLDcgKzIzNDUsNyBAQCBlbmFibGVfYnJlYWsgKHN0cnVjdCBzdnI0X2luZm8g KmluZm8sIGluCisgCSAgICAgIHN5bV9hZGRyID0gZ2RiYXJjaF9jb252ZXJ0X2Zyb21fZnVuY19w dHJfYWRkciAodGFyZ2V0X2dkYmFyY2ggKCksCisgCQkJCQkJCSAgICAgc3ltX2FkZHIsCisgCQkJ CQkJCSAgICAgJmN1cnJlbnRfdGFyZ2V0KTsKKy0JICAgICAgY3JlYXRlX3NvbGliX2V2ZW50X2Jy ZWFrcG9pbnQgKHRhcmdldF9nZGJhcmNoICgpLCBzeW1fYWRkcik7CisrCSAgICAgIHN2cjRfY3Jl YXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzICh0YXJnZXRfZ2RiYXJjaCAoKSwgc3ltX2FkZHIp OworIAkgICAgICByZXR1cm4gMTsKKyAJICAgIH0KKyAJfQorQEAgLTIyNjYsNiArMjg0MSw5IEBA IHN2cjRfc29saWJfY3JlYXRlX2luZmVyaW9yX2hvb2sgKGludCBmcm8KKyAKKyAgIGluZm8gPSBn ZXRfc3ZyNF9pbmZvICgpOworIAorKyAgLyogRnJlZSB0aGUgcHJvYmVzLWJhc2VkIGludGVyZmFj ZSdzIHNvbGliIGxpc3QuICAqLworKyAgZnJlZV9zb2xpYl9saXN0IChpbmZvKTsKKysKKyAgIC8q IFJlbG9jYXRlIHRoZSBtYWluIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5LiAgKi8KKyAgIHN2cjRf cmVsb2NhdGVfbWFpbl9leGVjdXRhYmxlICgpOworIAorQEAgLTI1MDcsNCArMzA4NSw2IEBAIF9p bml0aWFsaXplX3N2cjRfc29saWIgKHZvaWQpCisgICBzdnI0X3NvX29wcy5sb29rdXBfbGliX2ds b2JhbF9zeW1ib2wgPSBlbGZfbG9va3VwX2xpYl9zeW1ib2w7CisgICBzdnI0X3NvX29wcy5zYW1l ID0gc3ZyNF9zYW1lOworICAgc3ZyNF9zb19vcHMua2VlcF9kYXRhX2luX2NvcmUgPSBzdnI0X2tl ZXBfZGF0YV9pbl9jb3JlOworKyAgc3ZyNF9zb19vcHMudXBkYXRlX2JyZWFrcG9pbnRzID0gc3Zy NF91cGRhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludHM7CisrICBzdnI0X3NvX29wcy5oYW5kbGVf ZXZlbnQgPSBzdnI0X2hhbmRsZV9zb2xpYl9ldmVudDsKKyB9CitJbmRleDogZ2RiLTcuNi9nZGIv YnJlYWtwb2ludC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9icmVha3BvaW50 LmMJMjAxMy0wNS0xOSAxNjoxNjoyMC42MDYwODcyMDggKzAyMDAKKysrKyBnZGItNy42L2dkYi9i cmVha3BvaW50LmMJMjAxMy0wNS0xOSAxNjoyMTo1NS4yODg4MDUyNjkgKzAyMDAKK0BAIC01MzYx LDI1ICs1MzYxLDYgQEAgaGFuZGxlX2ppdF9ldmVudCAodm9pZCkKKyAgIHRhcmdldF90ZXJtaW5h bF9pbmZlcmlvciAoKTsKKyB9CiAgCi0gICAvKiBWYWxpZGl0eSBmbGFnIGZvciBkZWJ1Z19sb2Fk ZXJfb2Zmc2V0LiAgKi8KLS0gIGludCBkZWJ1Z19sb2FkZXJfb2Zmc2V0X3A7Ci0rICB1bnNpZ25l ZCBpbnQgZGVidWdfbG9hZGVyX29mZnNldF9wIDogMTsKKy0vKiBIYW5kbGUgYW4gc29saWIgZXZl bnQgYnkgY2FsbGluZyBzb2xpYl9hZGQuICAqLworLQorLXZvaWQKKy1oYW5kbGVfc29saWJfZXZl bnQgKHZvaWQpCisteworLSAgY2xlYXJfcHJvZ3JhbV9zcGFjZV9zb2xpYl9jYWNoZSAoY3VycmVu dF9pbmZlcmlvciAoKS0+cHNwYWNlKTsKKy0KKy0gIC8qIENoZWNrIGZvciBhbnkgbmV3bHkgYWRk ZWQgc2hhcmVkIGxpYnJhcmllcyBpZiB3ZSdyZSBzdXBwb3NlZCB0bworLSAgICAgYmUgYWRkaW5n IHRoZW0gYXV0b21hdGljYWxseS4gIFN3aXRjaCB0ZXJtaW5hbCBmb3IgYW55IG1lc3NhZ2VzCist ICAgICBwcm9kdWNlZCBieSBicmVha3BvaW50X3JlX3NldC4gICovCistICB0YXJnZXRfdGVybWlu YWxfb3Vyc19mb3Jfb3V0cHV0ICgpOworLSNpZmRlZiBTT0xJQl9BREQKKy0gIFNPTElCX0FERCAo TlVMTCwgMCwgJmN1cnJlbnRfdGFyZ2V0LCBhdXRvX3NvbGliX2FkZCk7CistI2Vsc2UKKy0gIHNv bGliX2FkZCAoTlVMTCwgMCwgJmN1cnJlbnRfdGFyZ2V0LCBhdXRvX3NvbGliX2FkZCk7CistI2Vu ZGlmCistICB0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CistfQorLQorIC8qIFByZXBhcmUg V0hBVCBmaW5hbCBkZWNpc2lvbiBmb3IgaW5mcnVuLiAgKi8KICAKLSAgIC8qIExvYWQgYWRkcmVz cyBmb3IgdGhlIGR5bmFtaWMgbGlua2VyLCBpbmZlcnJlZC4gICovCi0gICBDT1JFX0FERFIgZGVi dWdfbG9hZGVyX29mZnNldDsKKyAvKiBEZWNpZGUgd2hhdCBpbmZydW4gbmVlZHMgdG8gZG8gd2l0 aCB0aGlzIGJwc3RhdC4gICovCgpkaWZmIC0tZ2l0IGEvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTZv ZjcucGF0Y2ggYi9nZGItZGxvcGVuLXN0YXAtcHJvYmUtNm9mNy5wYXRjaAppbmRleCBhY2E0YmZk Li41MDBhYjM0IDEwMDY0NAotLS0gYS9nZGItZGxvcGVuLXN0YXAtcHJvYmUtNm9mNy5wYXRjaAor KysgYi9nZGItZGxvcGVuLXN0YXAtcHJvYmUtNm9mNy5wYXRjaApAQCAtMSwxNTAxICsxLDE2NSBA QAotZ2RiLwotMjAxMi0wNy0zMCAgR2FyeSBCZW5zb24gIDxnYmVuc29uQHJlZGhhdC5jb20+Cito dHRwOi8vc291cmNld2FyZS5vcmcvbWwvZ2RiLXBhdGNoZXMvMjAxMy0wNS9tc2cwMDYzMS5odG1s CitTdWJqZWN0OiBbUkZBIDYvN10gTGlua2VyLWRlYnVnZ2VyIGludGVyZmFjZSB0ZXN0cyBieSBK YW4KIAotCSogYnJlYWtwb2ludC5oIChoYW5kbGVfc29saWJfZXZlbnQpOiBNb3ZlZCBmdW5jdGlv biBkZWZpbml0aW9uCi0JdG8gc29saWIuaCwgYW5kIGFkZGVkIGEgbmV3IHBhcmFtZXRlci4KLQkq IGJyZWFrcG9pbnQuYyAoaGFuZGxlX3NvbGliX2V2ZW50KTogTW92ZWQgZnVuY3Rpb24gdG8gc29s aWIuYwotCWFuZCBhZGRlZCBhIG5ldyBwYXJhbWV0ZXIuCi0JKGJwc3RhdF9zdG9wX3N0YXR1cyk6 IFBhc3MgbmV3IGFyZ3VtZW50IHRvIGhhbmRsZV9zb2xpYl9ldmVudC4KLQkqIHNvbGliLmggKGJy ZWFrcG9pbnQuaCk6IE5ldyBpbmNsdWRlLgotCShoYW5kbGVfc29saWJfZXZlbnQpOiBNb3ZlZCBm dW5jdGlvbiBkZWZpbml0aW9uIGZyb20gYnJlYWtwb2ludC5oCi0JYW5kIGFkZGVkIGEgbmV3IHBh cmFtZXRlci4KLQkodXBkYXRlX3NvbGliX2JyZWFrcG9pbnRzKTogTmV3IGZ1bmN0aW9uIGRlZmlu aXRpb24uCi0JKiBzb2xpYi5jIChoYW5kbGVfc29saWJfZXZlbnQpOiBNb3ZlZCBmdW5jdGlvbiBm cm9tIGJyZWFrcG9pbnQuYwotCWFuZCBhZGRlZCBhIG5ldyBwYXJhbWV0ZXIuCi0JKHVwZGF0ZV9z b2xpYl9icmVha3BvaW50cyk6IE5ldyBmdW5jdGlvbi4KLQkqIHNvbGlzdC5oIChicmVha3BvaW50 LmgpOiBOZXcgaW5jbHVkZS4KLQkodGFyZ2V0X3NvX29wcyk6IE5ldyBmaWVsZHMgImhhbmRsZV9z b2xpYl9ldmVudCIgYW5kCi0JInVwZGF0ZV9icmVha3BvaW50cyIuCi0JKiBpbmZydW4uYyAoc2V0 X3N0b3Bfb25fc29saWJfZXZlbnRzKTogTmV3IGZ1bmN0aW9uLgotCShfaW5pdGlhbGl6ZV9pbmZy dW4pOiBVc2UgdGhlIGFib3ZlIGZvciAic2V0IHN0b3Atb24tc29saWItZXZlbnRzIi4KLQkoaGFu ZGxlX2luZmVyaW9yX2V2ZW50KTogUGFzcyBuZXcgYXJndW1lbnQgdG8gaGFuZGxlX3NvbGliX2V2 ZW50LgotCSogc29saWItc3ZyNC5jIChwcm9iZS5oKTogTmV3IGluY2x1ZGUuCi0JKG5hbWVzcGFj ZV90YWJsZV9mbGF0dGVuKTogTmV3IGZvcndhcmQgZGVjbGFyYXRpb24uCi0JKGxtX2luZm8pOiBO ZXcgZmllbGRzICJsbWlkIiBhbmQgImluX2luaXRpYWxfbnMiLgotCShwcm9iZV9hY3Rpb24pOiBO ZXcgZW51bS4KLQkocHJvYmVfaW5mbyk6IE5ldyBzdHJ1Y3QuCi0JKHByb2JlX2luZm8pOiBOZXcg c3RhdGljIHZhcmlhYmxlLgotCShOVU1fUFJPQkVTKTogTmV3IGRlZmluaXRpb24uCi0JKHN2cjRf aW5mbyk6IE5ldyBmaWVsZHMgICJ1c2luZ19wcm9iZXMiLCAicHJvYmVzIiBhbmQKLQkibmFtZXNw YWNlX3RhYmxlIi4KLQkoZnJlZV9wcm9iZXMpOiBOZXcgZnVuY3Rpb24uCi0JKGZyZWVfbmFtZXNw YWNlX3RhYmxlKTogTGlrZXdpc2UuCi0JKHN2cjRfcHNwYWNlX2RhdGFfY2xlYW51cCk6IEZyZWUg cHJvYmVzIGFuZCBuYW1lc3BhY2UgdGFibGUuCi0JKHN2cjRfc2FtZSk6IEFsc28gY29tcGFyZSBu YW1lc3BhY2VzIGlmIHVzaW5nIHByb2Jlcy4KLQkobG1fYWRkcl9jaGVjayk6IE9ubHkgcHJpbnQg LmR5bmFtaWMgc2VjdGlvbiBhdCB3cm9uZyBhZGRyZXNzCi0Jd2FybmluZyBmb3IgaW5pdGlhbCBu YW1lc3BhY2UgaWYgdXNpbmcgcHJvYmVzLgotCShyX21hcF9mcm9tX2RlYnVnX2Jhc2UpOiBOZXcg ZnVuY3Rpb24uCi0JKHNvbGliX3N2cjRfcl9tYXApOiBDYWxsIHRoZSBhYm92ZS4KLQkoc3ZyNF9y ZWFkX3NvX2xpc3QpOiBOZXcgcGFyYW1ldGVyICJwcmV2X2xtIi4KLQlDaGFuZ2VkCXJldHVybiB0 eXBlIGZyb20gdm9pZCB0byBpbnQuCi0JUmV0dXJuIG5vbnplcm8gb24gc3VjY2VzcywgemVybyBv biBlcnJvci4KLQkoc3ZyNF9jdXJyZW50X3Nvc19mcm9tX2RlYnVnX2Jhc2UpOiBOZXcgZnVuY3Rp b24uCi0JKHN2cjRfY3VycmVudF9zb3MpOiBDcmVhdGUgcmVzdWx0IGZyb20gbmFtZXNwYWNlIHRh YmxlIGlmIGF2YWlsYWJsZS4KLQlVc2Ugc3ZyNF9jdXJyZW50X3Nvc19mcm9tX2RlYnVnX2Jhc2Ug dG8gZ2VuZXJhdGUgbGlzdCBvdGhlcndpc2UuCi0JKHByb2JlX2FuZF9pbmZvKTogTmV3IHN0cnVj dC4KLQkoc29saWJfZXZlbnRfcHJvYmVfYXQpOiBOZXcgZnVuY3Rpb24uCi0JKHNvbGliX2V2ZW50 X3Byb2JlX2FjdGlvbik6IExpa2V3aXNlLgotCShuYW1lc3BhY2UpOiBOZXcgc3RydWN0LgotCSho YXNoX25hbWVzcGFjZSk6IE5ldyBmdW5jdGlvbi4KLQkoZXF1YWxfbmFtZXNwYWNlKTogTGlrZXdp c2UuCi0JKGZyZWVfbmFtZXNwYWNlKTogTGlrZXdpc2UuCi0JKG5hbWVzcGFjZV91cGRhdGVfZnVs bCk6IExpa2V3aXNlLgotCShuYW1lc3BhY2VfdXBkYXRlX2luY3JlbWVudGFsKTogTGlrZXdpc2Uu Ci0JKHN2cjRfaGFuZGxlX3NvbGliX2V2ZW50KTogTGlrZXdpc2UuCi0JKG5hbWVzcGFjZV90YWJs ZV9mbGF0dGVuX2hlbHBlcik6IExpa2V3aXNlLgotCShuYW1lc3BhY2VfdGFibGVfZmxhdHRlbik6 IExpa2V3aXNlLgotCShzdnI0X3VwZGF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50KTogTGlrZXdp c2UuCi0JKHN2cjRfdXBkYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzKTogTGlrZXdpc2UuCi0J KHN2cjRfY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzKTogTGlrZXdpc2UuCi0JKGVuYWJs ZV9icmVhayk6IEZyZWUgcHJvYmVzIGJlZm9yZSBjcmVhdGluZyBicmVha3BvaW50cy4KLQlVc2Ug c3ZyNF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludHMgdG8gY3JlYXRlIGJyZWFrcG9pbnRz LgotCShzdnI0X3NvbGliX2NyZWF0ZV9pbmZlcmlvcl9ob29rKTogRnJlZSB0aGUgbmFtZXNwYWNl IHRhYmxlLgotCShfaW5pdGlhbGl6ZV9zdnI0X3NvbGliKTogSW5pdGlhbGlzZSBzdnI0X3NvX29w cy5oYW5kbGVfc29saWJfZXZlbnQKLQlhbmQgc3ZyNF9zb19vcHMudXBkYXRlX2JyZWFrcG9pbnRz LgogCi1nZGIvdGVzdHN1aXRlCi0yMDEyLTA3LTMwICBHYXJ5IEJlbnNvbiAgPGdiZW5zb25AcmVk aGF0LmNvbT4KKy0tSVlWOWNScjJ1NnJqY1A0QgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBj aGFyc2V0PXVzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKIAotCSogZ2RiLmJh c2UvYnJlYWstaW50ZXJwLmV4cCAoc29saWJfYnApOiBOZXcgY29uc3RhbnQuCi0JKHJlYWNoXzEp OiBVc2UgdGhlIGFib3ZlIGluc3RlYWQgb2YgIl9kbF9kZWJ1Z19zdGF0ZSIuCi0JKHRlc3RfYXR0 YWNoKTogTGlrZXdpc2UuCi0JKHRlc3RfbGQpOiBMaWtld2lzZS4KLQkqIGdkYi5iYXNlL2JyZWFr LXByb2Jlcy5leHA6IE5ldyBmaWxlLgotCSogZ2RiLmJhc2UvYnJlYWstcHJvYmVzLmM6IExpa2V3 aXNlLgotCSogZ2RiLmJhc2UvYnJlYWstcHJvYmVzLXNvbGliLmM6IExpa2V3aXNlLgotCSogZ2Ri LmJhc2UvaW5mby1zaGFyZWQuZXhwOiBOZXcgZmlsZS4KLQkqIGdkYi5iYXNlL2luZm8tc2hhcmVk LmM6IExpa2V3aXNlLgotCSogZ2RiLmJhc2UvaW5mby1zaGFyZWQtc29saWIxLmM6IExpa2V3aXNl LgotCSogZ2RiLmJhc2UvaW5mby1zaGFyZWQtc29saWIyLmM6IExpa2V3aXNlLgotCSogZ2RiLmJh c2UvYnJlYWstZGxtb3Blbi5leHA6IExpa2V3aXNlLgotCSogZ2RiLmJhc2UvYnJlYWstZGxtb3Bl bi5jOiBMaWtld2lzZS4KLQkqIGdkYi5iYXNlL2JyZWFrLWRsbW9wZW4tc29saWIuYzogTGlrZXdp c2UuCi0KLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi9icmVha3BvaW50LmgKLT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tLSBnZGItNy41LjUwLjIwMTMwMjE1Lm9yaWcvZ2RiL2JyZWFrcG9pbnQuaAkyMDEz LTAyLTE1IDIyOjM3OjE5LjAwMDAwMDAwMCArMDEwMAotKysrIGdkYi03LjUuNTAuMjAxMzAyMTUv Z2RiL2JyZWFrcG9pbnQuaAkyMDEzLTAyLTE1IDIyOjM3OjQ3LjE4NTQzMjI5NiArMDEwMAotQEAg LTE1NTIsOCArMTU1Miw2IEBAIGV4dGVybiBpbnQgdXNlcl9icmVha3BvaW50X3AgKHN0cnVjdCBi cmUKLSAvKiBBdHRlbXB0IHRvIGRldGVybWluZSBhcmNoaXRlY3R1cmUgb2YgbG9jYXRpb24gaWRl bnRpZmllZCBieSBTQUwuICAqLwotIGV4dGVybiBzdHJ1Y3QgZ2RiYXJjaCAqZ2V0X3NhbF9hcmNo IChzdHJ1Y3Qgc3ltdGFiX2FuZF9saW5lIHNhbCk7Ci0gCi0tZXh0ZXJuIHZvaWQgaGFuZGxlX3Nv bGliX2V2ZW50ICh2b2lkKTsKLS0KLSBleHRlcm4gdm9pZCBicmVha3BvaW50X2ZyZWVfb2JqZmls ZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpOwotIAotIGV4dGVybiB2b2lkIGJyZWFrcG9pbnRz X3JlbG9jYXRlIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwKLUluZGV4OiBnZGItNy41LjUwLjIw MTMwMjE1L2dkYi9icmVha3BvaW50LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnZGItNy41LjUwLjIwMTMw MjE1Lm9yaWcvZ2RiL2JyZWFrcG9pbnQuYwkyMDEzLTAyLTE1IDIyOjM3OjMwLjAwMDAwMDAwMCAr MDEwMAotKysrIGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL2JyZWFrcG9pbnQuYwkyMDEzLTAyLTE1 IDIyOjM3OjM1Ljc1NTQxNzU4NCArMDEwMAotQEAgLTUyNTAsNyArNTI1MCw3IEBAIGJwc3RhdF9z dG9wX3N0YXR1cyAoc3RydWN0IGFkZHJlc3Nfc3BhY2UKLSAgICAgewotICAgICAgIGlmIChicy0+ YnJlYWtwb2ludF9hdCAmJiBicy0+YnJlYWtwb2ludF9hdC0+dHlwZSA9PSBicF9zaGxpYl9ldmVu dCkKLSAJewotLQkgIGhhbmRsZV9zb2xpYl9ldmVudCAoKTsKLSsJICBoYW5kbGVfc29saWJfZXZl bnQgKGJzKTsKLSAJICBicmVhazsKLSAJfQotICAgICB9Ci1AQCAtNTM0NiwyNSArNTM0Niw2IEBA IGhhbmRsZV9qaXRfZXZlbnQgKHZvaWQpCi0gICB0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7 Ci0gfQotIAotLS8qIEhhbmRsZSBhbiBzb2xpYiBldmVudCBieSBjYWxsaW5nIHNvbGliX2FkZC4g ICovCi0tCi0tdm9pZAotLWhhbmRsZV9zb2xpYl9ldmVudCAodm9pZCkKLS17Ci0tICBjbGVhcl9w cm9ncmFtX3NwYWNlX3NvbGliX2NhY2hlIChjdXJyZW50X2luZmVyaW9yICgpLT5wc3BhY2UpOwot LQotLSAgLyogQ2hlY2sgZm9yIGFueSBuZXdseSBhZGRlZCBzaGFyZWQgbGlicmFyaWVzIGlmIHdl J3JlIHN1cHBvc2VkIHRvCi0tICAgICBiZSBhZGRpbmcgdGhlbSBhdXRvbWF0aWNhbGx5LiAgU3dp dGNoIHRlcm1pbmFsIGZvciBhbnkgbWVzc2FnZXMKLS0gICAgIHByb2R1Y2VkIGJ5IGJyZWFrcG9p bnRfcmVfc2V0LiAgKi8KLS0gIHRhcmdldF90ZXJtaW5hbF9vdXJzX2Zvcl9vdXRwdXQgKCk7Ci0t I2lmZGVmIFNPTElCX0FERAotLSAgU09MSUJfQUREIChOVUxMLCAwLCAmY3VycmVudF90YXJnZXQs IGF1dG9fc29saWJfYWRkKTsKLS0jZWxzZQotLSAgc29saWJfYWRkIChOVUxMLCAwLCAmY3VycmVu dF90YXJnZXQsIGF1dG9fc29saWJfYWRkKTsKLS0jZW5kaWYKLS0gIHRhcmdldF90ZXJtaW5hbF9p bmZlcmlvciAoKTsKLS19Ci0tCi0gLyogUHJlcGFyZSBXSEFUIGZpbmFsIGRlY2lzaW9uIGZvciBp bmZydW4uICAqLwotIAotIC8qIERlY2lkZSB3aGF0IGluZnJ1biBuZWVkcyB0byBkbyB3aXRoIHRo aXMgYnBzdGF0LiAgKi8KLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi9zb2xpYi5oCi09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLS0gZ2RiLTcuNS41MC4yMDEzMDIxNS5vcmlnL2dkYi9zb2xpYi5oCTIwMTMt MDEtMDEgMDc6MzI6NTEuMDAwMDAwMDAwICswMTAwCi0rKysgZ2RiLTcuNS41MC4yMDEzMDIxNS9n ZGIvc29saWIuaAkyMDEzLTAyLTE1IDIyOjM3OjM1Ljc1NzQxNzU4OCArMDEwMAotQEAgLTIwLDYg KzIwLDkgQEAKLSAjaWZuZGVmIFNPTElCX0gKLSAjZGVmaW5lIFNPTElCX0gKLSAKLSsvKiBGb3Ig YnBzdGF0LiAgKi8KLSsjaW5jbHVkZSAiYnJlYWtwb2ludC5oIgotKwotIC8qIEZvcndhcmQgZGVj bCdzIGZvciBwcm90b3R5cGVzICovCi0gc3RydWN0IHNvX2xpc3Q7Ci0gc3RydWN0IHRhcmdldF9v cHM7Ci1AQCAtOTAsNCArOTMsMTUgQEAgZXh0ZXJuIENPUkVfQUREUiBnZGJfYmZkX2xvb2t1cF9z eW1ib2xfZgotIAkJCQkJCQkJICAgICAgdm9pZCAqKSwKLSAJCQkJCQkgICAgdm9pZCAqZGF0YSk7 Ci0gCi0rLyogSGFuZGxlIGFuIHNvbGliIGV2ZW50IGJ5IGNhbGxpbmcgc29saWJfYWRkLiAgVGFy Z2V0cyB3aGljaCBoYW5kbGUKLSsgICBzb2xpYiBldmVudHMgdXNpbmcgYnJlYWtwb2ludHMgbXVz dCBwYXNzIGEgdmFsaWQgYnBzdGF0LiAgVGFyZ2V0cwotKyAgIHdoaWNoIGhhbmRsZSBzb2xpYiBl dmVudHMgdXNpbmcgc29tZSBvdGhlciBtZWNoYW5pc20gc2hvdWxkIHBhc3MKLSsgICBOVUxMLiAg Ki8KLSsKLStleHRlcm4gdm9pZCBoYW5kbGVfc29saWJfZXZlbnQgKGJwc3RhdCBicyk7Ci0rCi0r LyogRW5hYmxlIG9yIGRpc2FibGUgb3B0aW9uYWwgc29saWIgZXZlbnQgYnJlYWtwb2ludHMgYXMg YXBwcm9wcmlhdGUuICAqLwotKwotK2V4dGVybiB2b2lkIHVwZGF0ZV9zb2xpYl9icmVha3BvaW50 cyAodm9pZCk7Ci0rCi0gI2VuZGlmIC8qIFNPTElCX0ggKi8KLUluZGV4OiBnZGItNy41LjUwLjIw MTMwMjE1L2dkYi9zb2xpYi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2RiLTcuNS41MC4yMDEzMDIxNS5v cmlnL2dkYi9zb2xpYi5jCTIwMTMtMDItMTUgMjI6Mzc6MDQuMDAwMDAwMDAwICswMTAwCi0rKysg Z2RiLTcuNS41MC4yMDEzMDIxNS9nZGIvc29saWIuYwkyMDEzLTAyLTE1IDIyOjM3OjM1Ljc1NzQx NzU4OCArMDEwMAotQEAgLTEyMjEsNiArMTIyMSw0MiBAQCBub19zaGFyZWRfbGlicmFyaWVzIChj aGFyICppZ25vcmVkLCBpbnQKLSAgIG9iamZpbGVfcHVyZ2Vfc29saWJzICgpOwotIH0KLSAKLSsv KiBTZWUgc29saWIuaC4gICovCi0rCi0rdm9pZAotK2hhbmRsZV9zb2xpYl9ldmVudCAoYnBzdGF0 IGJzKQotK3sKLSsgIHN0cnVjdCB0YXJnZXRfc29fb3BzICpvcHMgPSBzb2xpYl9vcHMgKHRhcmdl dF9nZGJhcmNoICgpKTsKLSsKLSsgIGlmIChvcHMtPmhhbmRsZV9zb2xpYl9ldmVudCAhPSBOVUxM KQotKyAgICBvcHMtPmhhbmRsZV9zb2xpYl9ldmVudCAoYnMpOwotKwotKyAgY2xlYXJfcHJvZ3Jh bV9zcGFjZV9zb2xpYl9jYWNoZSAoY3VycmVudF9pbmZlcmlvciAoKS0+cHNwYWNlKTsKLSsKLSsg IC8qIENoZWNrIGZvciBhbnkgbmV3bHkgYWRkZWQgc2hhcmVkIGxpYnJhcmllcyBpZiB3ZSdyZSBz dXBwb3NlZCB0bwotKyAgICAgYmUgYWRkaW5nIHRoZW0gYXV0b21hdGljYWxseS4gIFN3aXRjaCB0 ZXJtaW5hbCBmb3IgYW55IG1lc3NhZ2VzCi0rICAgICBwcm9kdWNlZCBieSBicmVha3BvaW50X3Jl X3NldC4gICovCi0rICB0YXJnZXRfdGVybWluYWxfb3Vyc19mb3Jfb3V0cHV0ICgpOwotKyNpZmRl ZiBTT0xJQl9BREQKLSsgIFNPTElCX0FERCAoTlVMTCwgMCwgJmN1cnJlbnRfdGFyZ2V0LCBhdXRv X3NvbGliX2FkZCk7Ci0rI2Vsc2UKLSsgIHNvbGliX2FkZCAoTlVMTCwgMCwgJmN1cnJlbnRfdGFy Z2V0LCBhdXRvX3NvbGliX2FkZCk7Ci0rI2VuZGlmCi0rICB0YXJnZXRfdGVybWluYWxfaW5mZXJp b3IgKCk7Ci0rfQotKwotKy8qIFNlZSBzb2xpYi5oLiAgKi8KLSsKLSt2b2lkCi0rdXBkYXRlX3Nv bGliX2JyZWFrcG9pbnRzICh2b2lkKQotK3sKLSsgIHN0cnVjdCB0YXJnZXRfc29fb3BzICpvcHMg PSBzb2xpYl9vcHMgKHRhcmdldF9nZGJhcmNoICgpKTsKLSsKLSsgIGlmIChvcHMtPnVwZGF0ZV9i cmVha3BvaW50cyAhPSBOVUxMKQotKyAgICBvcHMtPnVwZGF0ZV9icmVha3BvaW50cyAoKTsKLSt9 Ci0rCi0rCi0gLyogUmVsb2FkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBhdm9pZCByZWxvYWRpbmcg dGhlIHNhbWUgc3ltYm9sIGZpbGUKLSAgICB3ZSBhbHJlYWR5IGhhdmUgbG9hZGVkLiAgKi8KLSAK LUluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi9zb2xpc3QuaAotPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0t IGdkYi03LjUuNTAuMjAxMzAyMTUub3JpZy9nZGIvc29saXN0LmgJMjAxMy0wMS0wMSAwNzozMjo1 MS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi9zb2xpc3QuaAky MDEzLTAyLTE1IDIyOjM3OjM1Ljc1ODQxNzU5MCArMDEwMAotQEAgLTIyLDYgKzIyLDggQEAKLSAj ZGVmaW5lIFNPX05BTUVfTUFYX1BBVEhfU0laRSA1MTIJLyogRklYTUU6IFNob3VsZCBiZSBkeW5h bWljICovCi0gLyogRm9yIGRvbWFpbl9lbnVtIGRvbWFpbi4gICovCi0gI2luY2x1ZGUgInN5bXRh Yi5oIgotKy8qIEZvciBicHN0YXQuICAqLwotKyNpbmNsdWRlICJicmVha3BvaW50LmgiCi0gCi0g LyogRm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgdGFyZ2V0IHNwZWNpZmljIGxpbmsgbWFwIGluZm9y bWF0aW9uLiAgVGhpcwotICAgIHN0cnVjdCBpcyBvcGFxdWUgdG8gYWxsIGJ1dCB0aGUgdGFyZ2V0 IHNwZWNpZmljIGZpbGUuICAqLwotQEAgLTE0OCw2ICsxNTAsMjAgQEAgc3RydWN0IHRhcmdldF9z b19vcHMKLSAgICAgICAgY29yZSBmaWxlIChpbiBwYXJ0aWN1bGFyLCBmb3IgcmVhZG9ubHkgc2Vj dGlvbnMpLiAgKi8KLSAgICAgaW50ICgqa2VlcF9kYXRhX2luX2NvcmUpIChDT1JFX0FERFIgdmFk ZHIsCi0gCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKTsKLSsKLSsgICAgLyogVGFyZ2V0LXNw ZWNpZmljIGhhbmRsaW5nIG9mIHNvbGliIGV2ZW50cy4gIEZvciB0YXJnZXRzIHdoaWNoCi0rICAg ICAgIGhhbmRsZSBzb2xpYiBldmVudHMgdXNpbmcgYnJlYWtwb2ludHMgYSB2YWxpZCBicHN0YXQg bXVzdCBiZQotKyAgICAgICBwYXNzZWQuICBUYXJnZXRzIHdoaWNoIGhhbmRsZSBzb2xpYiBldmVu dHMgdXNpbmcgc29tZSBvdGhlcgotKyAgICAgICBtZWNoYW5pc20gc2hvdWxkIHBhc3MgTlVMTC4g IFRoaXMgcG9pbnRlciBjYW4gYmUgTlVMTCwgaW4gd2hpY2gKLSsgICAgICAgY2FzZSBubyBzcGVj aWZpYyBoYW5kbGluZyBpcyBuZWNlc3NhcnkgZm9yIHRoaXMgdGFyZ2V0LiAgKi8KLSsgICAgdm9p ZCAoKmhhbmRsZV9zb2xpYl9ldmVudCkgKGJwc3RhdCBicyk7Ci0rCi0rICAgIC8qIEVuYWJsZSBv ciBkaXNhYmxlIG9wdGlvbmFsIHNvbGliIGV2ZW50IGJyZWFrcG9pbnRzIGFzCi0rICAgICAgIGFw cHJvcHJpYXRlLiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyCi0rICAgICAgIHN0b3Bf b25fc29saWJfZXZlbnRzIGlzIGNoYW5nZWQuICBUaGlzIHBvaW50ZXIgY2FuIGJlCi0rICAgICAg IE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGlzIG5lY2Vzc2Fy eQotKyAgICAgICBmb3IgdGhpcyB0YXJnZXQuICAqLwotKyAgICB2b2lkICgqdXBkYXRlX2JyZWFr cG9pbnRzKSAodm9pZCk7Ci0gICB9OwotIAotIC8qIEZyZWUgdGhlIG1lbW9yeSBhc3NvY2lhdGVk IHdpdGggYSAoc29fbGlzdCAqKS4gICovCi1JbmRleDogZ2RiLTcuNS41MC4yMDEzMDIxNS9nZGIv aW5mcnVuLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnZGItNy41LjUwLjIwMTMwMjE1Lm9yaWcvZ2RiL2lu ZnJ1bi5jCTIwMTMtMDItMTUgMjI6Mzc6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgZ2RiLTcuNS41 MC4yMDEzMDIxNS9nZGIvaW5mcnVuLmMJMjAxMy0wMi0xNSAyMjozNzozNS43NjA0MTc1OTQgKzAx MDAKLUBAIC0zNjksNiArMzY5LDE2IEBAIHN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzdGVwX3N0YXJ0 X2Z1bmN0aW8KLSAvKiBOb256ZXJvIGlmIHdlIHdhbnQgdG8gZ2l2ZSBjb250cm9sIHRvIHRoZSB1 c2VyIHdoZW4gd2UncmUgbm90aWZpZWQKLSAgICBvZiBzaGFyZWQgbGlicmFyeSBldmVudHMgYnkg dGhlIGR5bmFtaWMgbGlua2VyLiAgKi8KLSBpbnQgc3RvcF9vbl9zb2xpYl9ldmVudHM7Ci0rCi0r LyogRW5hYmxlIG9yIGRpc2FibGUgb3B0aW9uYWwgc2hhcmVkIGxpYnJhcnkgZXZlbnQgYnJlYWtw b2ludHMKLSsgICBhcyBhcHByb3ByaWF0ZSB3aGVuIHRoZSBhYm92ZSBmbGFnIGlzIGNoYW5nZWQu ICAqLwotKwotK3N0YXRpYyB2b2lkCi0rc2V0X3N0b3Bfb25fc29saWJfZXZlbnRzIChjaGFyICph cmdzLCBpbnQgZnJvbV90dHksIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjKQotK3sKLSsgIHVw ZGF0ZV9zb2xpYl9icmVha3BvaW50cyAoKTsKLSt9Ci0rCi0gc3RhdGljIHZvaWQKLSBzaG93X3N0 b3Bfb25fc29saWJfZXZlbnRzIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAot IAkJCSAgIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjLCBjb25zdCBjaGFyICp2YWx1ZSkKLUBA IC0zMzQ2LDcgKzMzNTYsNyBAQCBoYW5kbGVfaW5mZXJpb3JfZXZlbnQgKHN0cnVjdCBleGVjdXRp b25fCi0gCSAgICBjb250ZXh0X3N3aXRjaCAoZWNzLT5wdGlkKTsKLSAJICByZWdjYWNoZSA9IGdl dF90aHJlYWRfcmVnY2FjaGUgKGVjcy0+cHRpZCk7Ci0gCi0tCSAgaGFuZGxlX3NvbGliX2V2ZW50 ICgpOwotKwkgIGhhbmRsZV9zb2xpYl9ldmVudCAoTlVMTCk7Ci0gCi0gCSAgZWNzLT5ldmVudF90 aHJlYWQtPmNvbnRyb2wuc3RvcF9icHN0YXQKLSAJICAgID0gYnBzdGF0X3N0b3Bfc3RhdHVzIChn ZXRfcmVnY2FjaGVfYXNwYWNlIChyZWdjYWNoZSksCi1AQCAtNzMzNCw3ICs3MzQ0LDcgQEAgU2hv dyBzdG9wcGluZyBmb3Igc2hhcmVkIGxpYnJhcnkgZXZlbnRzLgotIElmIG5vbnplcm8sIGdkYiB3 aWxsIGdpdmUgY29udHJvbCB0byB0aGUgdXNlciB3aGVuIHRoZSBkeW5hbWljIGxpbmtlclxuXAot IG5vdGlmaWVzIGdkYiBvZiBzaGFyZWQgbGlicmFyeSBldmVudHMuICBUaGUgbW9zdCBjb21tb24g ZXZlbnQgb2YgaW50ZXJlc3RcblwKLSB0byB0aGUgdXNlciB3b3VsZCBiZSBsb2FkaW5nL3VubG9h ZGluZyBvZiBhIG5ldyBsaWJyYXJ5LiIpLAotLQkJCSAgICBOVUxMLAotKwkJCSAgICBzZXRfc3Rv cF9vbl9zb2xpYl9ldmVudHMsCi0gCQkJICAgIHNob3dfc3RvcF9vbl9zb2xpYl9ldmVudHMsCi0g CQkJICAgICZzZXRsaXN0LCAmc2hvd2xpc3QpOwotIAotSW5kZXg6IGdkYi03LjUuNTAuMjAxMzAy MTUvZ2RiL3NvbGliLXN2cjQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdkYi03LjUuNTAuMjAxMzAyMTUu b3JpZy9nZGIvc29saWItc3ZyNC5jCTIwMTMtMDItMTUgMjI6Mzc6MzAuMDAwMDAwMDAwICswMTAw Ci0rKysgZ2RiLTcuNS41MC4yMDEzMDIxNS9nZGIvc29saWItc3ZyNC5jCTIwMTMtMDItMTUgMjI6 Mzc6MzUuNzYxNDE3NTk2ICswMTAwCi1AQCAtNDYsMTAgKzQ2LDEyIEBACi0gI2luY2x1ZGUgImF1 eHYuaCIKLSAjaW5jbHVkZSAiZXhjZXB0aW9ucy5oIgotICNpbmNsdWRlICJnZGJfYmZkLmgiCi0r I2luY2x1ZGUgInByb2JlLmgiCi0gCi0gc3RhdGljIHN0cnVjdCBsaW5rX21hcF9vZmZzZXRzICpz dnI0X2ZldGNoX2xpbmtfbWFwX29mZnNldHMgKHZvaWQpOwotIHN0YXRpYyBpbnQgc3ZyNF9oYXZl X2xpbmtfbWFwX29mZnNldHMgKHZvaWQpOwotIHN0YXRpYyB2b2lkIHN2cjRfcmVsb2NhdGVfbWFp bl9leGVjdXRhYmxlICh2b2lkKTsKLStzdGF0aWMgc3RydWN0IHNvX2xpc3QgKm5hbWVzcGFjZV90 YWJsZV9mbGF0dGVuIChodGFiX3QgbmFtZXNwYWNlX3RhYmxlKTsKLSAKLSAvKiBMaW5rIG1hcCBp bmZvIHRvIGluY2x1ZGUgaW4gYW4gYWxsb2NhdGVkIHNvX2xpc3QgZW50cnkuICAqLwotIAotQEAg LTcwLDYgKzcyLDE2IEBAIHN0cnVjdCBsbV9pbmZvCi0gCi0gICAgIC8qIFZhbHVlcyByZWFkIGlu IGZyb20gaW5mZXJpb3IncyBmaWVsZHMgb2YgdGhlIHNhbWUgbmFtZS4gICovCi0gICAgIENPUkVf QUREUiBsX2xkLCBsX25leHQsIGxfcHJldiwgbF9uYW1lOwotKwotKyAgICAvKiBOdW1lcmljIGxp bmstbWFwIElEIG9mIHRoZSBuYW1lc3BhY2UgdGhpcyBvYmplY3QgaXMgbG9hZGVkCi0rICAgICAg IGludG8uICBUaGlzIHZhbHVlIGlzIG9ubHkgdmFsaWQgd2hlbiB1c2luZyB0aGUgcHJvYmVzLWJh c2VkCi0rICAgICAgIGludGVyZmFjZS4gICovCi0rICAgIExPTkdFU1QgbG1pZDsKLSsKLSsgICAg LyogTm9uemVybyBpZiB0aGUgbmFtZXNwYWNlIGxpc3QgdGhpcyBvYmplY3QgaXMgbG9hZGVkIGlu dG8gaXMgdGhlCi0rICAgICAgIGFwcGxpY2F0aW9uJ3MgaW5pdGlhbCBuYW1lc3BhY2UgKExNX0lE X0JBU0UpLiAgVGhpcyB2YWx1ZSBpcwotKyAgICAgICBvbmx5IHZhbGlkIHdoZW4gdXNpbmcgdGhl IHByb2Jlcy1iYXNlZCBpbnRlcmZhY2UuICAqLwotKyAgICB1bnNpZ25lZCBpbnQgaW5faW5pdGlh bF9ucyA6IDE7Ci0gICB9OwotIAotIC8qIE9uIFNWUjQgc3lzdGVtcywgYSBsaXN0IG9mIHN5bWJv bHMgaW4gdGhlIGR5bmFtaWMgbGlua2VyIHdoZXJlCi1AQCAtMTA2LDYgKzExOCw1MyBAQCBzdGF0 aWMgY29uc3QgIGNoYXIgKiBjb25zdCBtYWluX25hbWVfbGlzCi0gICBOVUxMCi0gfTsKLSAKLSsv KiBXaGF0IHRvIGRvIHdpdGggdGhlIG5hbWVzcGFjZSB0YWJsZSB3aGVuIGEgcHJvYmUgc3RvcCBv Y2N1cnMuICAqLwotKwotK2VudW0gcHJvYmVfYWN0aW9uCi0rICB7Ci0rICAgIC8qIFNvbWV0aGlu ZyB3ZW50IHNlcmlvdXNseSB3cm9uZy4gIFN0b3AgdXNpbmcgcHJvYmVzIGFuZAotKyAgICAgICBy ZXZlcnQgdG8gdXNpbmcgdGhlIG9sZGVyIGludGVyZmFjZS4gICovCi0rICAgIE5BTUVTUEFDRV9U QUJMRV9JTlZBTElEQVRFLAotKwotKyAgICAvKiBObyBhY3Rpb24gaXMgcmVxdWlyZWQuICBUaGlz IG5hbWVzcGFjZSBpcyBzdGlsbCB2YWxpZC4gICovCi0rICAgIE5BTUVTUEFDRV9OT19BQ1RJT04s Ci0rCi0rICAgIC8qIFRoaXMgbmFtZXNwYWNlIHNob3VsZCBiZSByZWxvYWRlZCBlbnRpcmVseS4g ICovCi0rICAgIE5BTUVTUEFDRV9SRUxPQUQsCi0rCi0rICAgIC8qIEF0dGVtcHQgdG8gaW5jcmVt ZW50YWxseSB1cGRhdGUgdGhpcyBuYW1lc3BhY2UuIElmIHRoZQotKyAgICAgICB1cGRhdGUgZmFp bHMgb3IgaXMgbm90IHBvc3NpYmxlLCBmYWxsIGJhY2sgdG8gcmVsb2FkaW5nCi0rICAgICAgIHRo ZSBuYW1lc3BhY2UgaW4gZnVsbC4gICovCi0rICAgIE5BTUVTUEFDRV9VUERBVEVfT1JfUkVMT0FE LAotKyAgfTsKLSsKLSsvKiBBIHByb2JlJ3MgbmFtZSBhbmQgaXRzIGFzc29jaWF0ZWQgYWN0aW9u LiAgKi8KLSsKLStzdHJ1Y3QgcHJvYmVfaW5mbwotK3sKLSsgIC8qIFRoZSBuYW1lIG9mIHRoZSBw cm9iZS4gICovCi0rICBjb25zdCBjaGFyICpuYW1lOwotKwotKyAgLyogV2hhdCB0byBkbyB3aXRo IHRoZSBuYW1lc3BhY2UgdGFibGUgd2hlbiBhIHByb2JlIHN0b3Agb2NjdXJzLiAgKi8KLSsgIGVu dW0gcHJvYmVfYWN0aW9uIGFjdGlvbjsKLSt9OwotKwotKy8qIEEgbGlzdCBvZiBuYW1lZCBwcm9i ZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgYWN0aW9ucy4gIElmIGFsbAotKyAgIHByb2JlcyBhcmUg cHJlc2VudCBpbiB0aGUgZHluYW1pYyBsaW5rZXIgdGhlbiB0aGUgcHJvYmVzLWJhc2VkCi0rICAg aW50ZXJmYWNlIHdpbGwgYmUgdXNlZC4gICovCi0rCi0rc3RhdGljIGNvbnN0IHN0cnVjdCBwcm9i ZV9pbmZvIHByb2JlX2luZm9bXSA9Ci0rewotKyAgeyAiaW5pdF9zdGFydCIsIE5BTUVTUEFDRV9O T19BQ1RJT04gfSwKLSsgIHsgImluaXRfY29tcGxldGUiLCBOQU1FU1BBQ0VfUkVMT0FEIH0sCi0r ICB7ICJtYXBfc3RhcnQiLCBOQU1FU1BBQ0VfTk9fQUNUSU9OIH0sCi0rICB7ICJyZWxvY19jb21w bGV0ZSIsIE5BTUVTUEFDRV9VUERBVEVfT1JfUkVMT0FEIH0sCi0rICB7ICJ1bm1hcF9zdGFydCIs IE5BTUVTUEFDRV9OT19BQ1RJT04gfSwKLSsgIHsgInVubWFwX2NvbXBsZXRlIiwgTkFNRVNQQUNF X1JFTE9BRCB9LAotK307Ci0rCi0rI2RlZmluZSBOVU1fUFJPQkVTIEFSUkFZX1NJWkUgKHByb2Jl X2luZm8pCi0rCi0gLyogUGVyIHBzcGFjZSBTVlI0IHNwZWNpZmljIGRhdGEuICAqLwotIAotIHN0 cnVjdCBzdnI0X2luZm8KLUBAIC0xMjgsMTcgKzE4Nyw1OCBAQCBzdHJ1Y3Qgc3ZyNF9pbmZvCi0g ICBDT1JFX0FERFIgaW50ZXJwX3RleHRfc2VjdF9oaWdoOwotICAgQ09SRV9BRERSIGludGVycF9w bHRfc2VjdF9sb3c7Ci0gICBDT1JFX0FERFIgaW50ZXJwX3BsdF9zZWN0X2hpZ2g7Ci0rCi0rICAv KiBOb256ZXJvIGlmIHdlIGFyZSB1c2luZyB0aGUgcHJvYmVzLWJhc2VkIGludGVyZmFjZS4gICov Ci0rICB1bnNpZ25lZCBpbnQgdXNpbmdfcHJvYmVzIDogMTsKLSsKLSsgIC8qIE5hbWVkIHByb2Jl cyBpbiB0aGUgZHluYW1pYyBsaW5rZXIuICAqLwotKyAgVkVDIChwcm9iZV9wKSAqcHJvYmVzW05V TV9QUk9CRVNdOwotKwotKyAgLyogVGFibGUgb2YgZHluYW1pYyBsaW5rZXIgbmFtZXNwYWNlcywg dXNlZCBieSB0aGUgcHJvYmVzLWJhc2VkCi0rICAgICBpbnRlcmZhY2UuICAqLwotKyAgaHRhYl90 IG5hbWVzcGFjZV90YWJsZTsKLSB9OwotIAotIC8qIFBlci1wcm9ncmFtLXNwYWNlIGRhdGEga2V5 LiAgKi8KLSBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2dyYW1fc3BhY2VfZGF0YSAqc29saWJfc3Zy NF9wc3BhY2VfZGF0YTsKLSAKLSsvKiBGcmVlIGFueSBhbGxvY2F0ZWQgcHJvYmUgdmVjdG9ycy4g ICovCi0rCi0rc3RhdGljIHZvaWQKLStmcmVlX3Byb2JlcyAoc3RydWN0IHN2cjRfaW5mbyAqaW5m bykKLSt7Ci0rICBpbnQgaTsKLSsKLSsgIGZvciAoaSA9IDA7IGkgPCBOVU1fUFJPQkVTOyBpKysp Ci0rICAgIFZFQ19mcmVlIChwcm9iZV9wLCBpbmZvLT5wcm9iZXNbaV0pOwotKwotKyAgbWVtc2V0 IChpbmZvLT5wcm9iZXMsIDAsIHNpemVvZiAoaW5mby0+cHJvYmVzKSk7Ci0rfQotKwotKy8qIEZy ZWUgdGhlIG5hbWVzcGFjZSB0YWJsZS4gICovCi0rCi0rc3RhdGljIHZvaWQKLStmcmVlX25hbWVz cGFjZV90YWJsZSAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbykKLSt7Ci0rICBpZiAoaW5mby0+bmFt ZXNwYWNlX3RhYmxlID09IE5VTEwpCi0rICAgIHJldHVybjsKLSsKLSsgIGh0YWJfZGVsZXRlIChp bmZvLT5uYW1lc3BhY2VfdGFibGUpOwotKyAgaW5mby0+bmFtZXNwYWNlX3RhYmxlID0gTlVMTDsK LSt9Ci0rCi0gc3RhdGljIHZvaWQKLSBzdnI0X3BzcGFjZV9kYXRhX2NsZWFudXAgKHN0cnVjdCBw cm9ncmFtX3NwYWNlICpwc3BhY2UsIHZvaWQgKmFyZykKLSB7Ci0gICBzdHJ1Y3Qgc3ZyNF9pbmZv ICppbmZvOwotIAotICAgaW5mbyA9IHByb2dyYW1fc3BhY2VfZGF0YSAocHNwYWNlLCBzb2xpYl9z dnI0X3BzcGFjZV9kYXRhKTsKLSsgIGlmIChpbmZvID09IE5VTEwpCi0rICAgIHJldHVybjsKLSsK LSsgIGZyZWVfcHJvYmVzIChpbmZvKTsKLSsgIGZyZWVfbmFtZXNwYWNlX3RhYmxlIChpbmZvKTsK LSsKLSAgIHhmcmVlIChpbmZvKTsKLSB9Ci0gCi1AQCAtMTg3LDEwICsyODcsMjEgQEAgc3ZyNF9z YW1lXzEgKGNvbnN0IGNoYXIgKmdkYl9zb19uYW1lLCBjbwotICAgcmV0dXJuIDA7Ci0gfQotIAot Ky8qIFJldHVybiBub24temVybyBpZiBHREIgYW5kIElORkVSSU9SIHJlcHJlc2VudCB0aGUgc2Ft ZSBzaGFyZWQKLSsgICBsaWJyYXJ5LiAgKi8KLSsKLSBzdGF0aWMgaW50Ci0gc3ZyNF9zYW1lIChz dHJ1Y3Qgc29fbGlzdCAqZ2RiLCBzdHJ1Y3Qgc29fbGlzdCAqaW5mZXJpb3IpCi0gewotLSAgcmV0 dXJuIChzdnI0X3NhbWVfMSAoZ2RiLT5zb19vcmlnaW5hbF9uYW1lLCBpbmZlcmlvci0+c29fb3Jp Z2luYWxfbmFtZSkpOwotKyAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbyA9IGdldF9zdnI0X2luZm8g KCk7Ci0rCi0rICBpZiAoaW5mby0+dXNpbmdfcHJvYmVzKQotKyAgICB7Ci0rICAgICAgaWYgKGdk Yi0+bG1faW5mby0+bG1pZCAhPSBpbmZlcmlvci0+bG1faW5mby0+bG1pZCkKLSsJcmV0dXJuIDA7 Ci0rICAgIH0KLSsKLSsgIHJldHVybiBzdnI0X3NhbWVfMSAoZ2RiLT5zb19vcmlnaW5hbF9uYW1l LCBpbmZlcmlvci0+c29fb3JpZ2luYWxfbmFtZSk7Ci0gfQotIAotIHN0YXRpYyBzdHJ1Y3QgbG1f aW5mbyAqCi1AQCAtMzIxLDE4ICs0MzIsMjYgQEAgbG1fYWRkcl9jaGVjayAoc3RydWN0IHNvX2xp c3QgKnNvLCBiZmQgKgotIAkgICAgfQotIAkgIGVsc2UKLSAJICAgIHsKLS0JICAgICAgLyogVGhl cmUgaXMgbm8gd2F5IHRvIHZlcmlmeSB0aGUgbGlicmFyeSBmaWxlIG1hdGNoZXMuICBwcmVsaW5r Ci0tCQkgY2FuIGR1cmluZyBwcmVsaW5raW5nIG9mIGFuIHVucHJlbGlua2VkIGZpbGUgKG9yIHVu cHJlbGlua2luZwotLQkJIG9mIGEgcHJlbGlua2VkIGZpbGUpIHNoaWZ0IHRoZSBEWU5BTUlDIHNl Z21lbnQgYnkgYXJiaXRyYXJ5Ci0tCQkgb2Zmc2V0IHdpdGhvdXQgYW55IHBhZ2Ugc2l6ZSBhbGln bm1lbnQuICBUaGVyZSBpcyBubyB3YXkgdG8KLS0JCSBmaW5kIG91dCB0aGUgRUxGIGhlYWRlciBh bmQvb3IgUHJvZ3JhbSBIZWFkZXJzIGZvciBhIGxpbWl0ZWQKLS0JCSB2ZXJpZmljYXRpb24gaWYg aXQgdGhleSBtYXRjaC4gIE9uZSBjb3VsZCBkbyBhIHZlcmlmaWNhdGlvbgotLQkJIG9mIHRoZSBE WU5BTUlDIHNlZ21lbnQuICBTdGlsbCB0aGUgZm91bmQgYWRkcmVzcyBpcyB0aGUgYmVzdAotLQkJ IG9uZSBHREIgY291bGQgZmluZC4gICovCi0tCi0tCSAgICAgIHdhcm5pbmcgKF8oIi5keW5hbWlj IHNlY3Rpb24gZm9yIFwiJXNcIiAiCi0tCQkJICJpcyBub3QgYXQgdGhlIGV4cGVjdGVkIGFkZHJl c3MgIgotLQkJCSAiKHdyb25nIGxpYnJhcnkgb3IgdmVyc2lvbiBtaXNtYXRjaD8pIiksIHNvLT5z b19uYW1lKTsKLSsJICAgICAgc3RydWN0IHN2cjRfaW5mbyAqaW5mbyA9IGdldF9zdnI0X2luZm8g KCk7Ci0rCi0rCSAgICAgIGlmICghaW5mby0+dXNpbmdfcHJvYmVzIHx8IHNvLT5sbV9pbmZvLT5p bl9pbml0aWFsX25zKQotKwkJewotKwkJICAvKiBUaGVyZSBpcyBubyB3YXkgdG8gdmVyaWZ5IHRo ZSBsaWJyYXJ5IGZpbGUKLSsJCSAgICAgbWF0Y2hlcy4gIHByZWxpbmsgY2FuIGR1cmluZyBwcmVs aW5raW5nIG9mIGFuCi0rCQkgICAgIHVucHJlbGlua2VkIGZpbGUgKG9yIHVucHJlbGlua2luZyBv ZiBhIHByZWxpbmtlZAotKwkJICAgICBmaWxlKSBzaGlmdCB0aGUgRFlOQU1JQyBzZWdtZW50IGJ5 IGFyYml0cmFyeQotKwkJICAgICBvZmZzZXQgd2l0aG91dCBhbnkgcGFnZSBzaXplIGFsaWdubWVu dC4gIFRoZXJlIGlzCi0rCQkgICAgIG5vIHdheSB0byBmaW5kIG91dCB0aGUgRUxGIGhlYWRlciBh bmQvb3IgUHJvZ3JhbQotKwkJICAgICBIZWFkZXJzIGZvciBhIGxpbWl0ZWQgdmVyaWZpY2F0aW9u IGlmIGl0IHRoZXkKLSsJCSAgICAgbWF0Y2guICBPbmUgY291bGQgZG8gYSB2ZXJpZmljYXRpb24g b2YgdGhlCi0rCQkgICAgIERZTkFNSUMgc2VnbWVudC4gIFN0aWxsIHRoZSBmb3VuZCBhZGRyZXNz IGlzIHRoZQotKwkJICAgICBiZXN0IG9uZSBHREIgY291bGQgZmluZC4gICovCi0rCi0rCQkgIHdh cm5pbmcgKF8oIi5keW5hbWljIHNlY3Rpb24gZm9yIFwiJXNcIiAiCi0rCQkJICAgICAiaXMgbm90 IGF0IHRoZSBleHBlY3RlZCBhZGRyZXNzICIKLSsJCQkgICAgICIod3JvbmcgbGlicmFyeSBvciB2 ZXJzaW9uIG1pc21hdGNoPykiKSwKLSsJCQkgICBzby0+c29fbmFtZSk7Ci0rCQl9Ci0gCSAgICB9 Ci0gCX0KLSAKLUBAIC03NzQsMTYgKzg5MywxMCBAQCBsb2NhdGVfYmFzZSAoc3RydWN0IHN2cjRf aW5mbyAqaW5mbykKLSAgIHJldHVybiBpbmZvLT5kZWJ1Z19iYXNlOwotIH0KLSAKLS0vKiBGaW5k IHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBpbmZlcmlvcidzIGR5bmFtaWMgbGluayBtYXAsIGFu ZAotLSAgIHJldHVybiBpdHMgYWRkcmVzcyBpbiB0aGUgaW5mZXJpb3IuICBSZXR1cm4gemVybyBp ZiB0aGUgYWRkcmVzcwotLSAgIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLgotLQotLSAgIEZJWE1F OiBQZXJoYXBzIHdlIHNob3VsZCB2YWxpZGF0ZSB0aGUgaW5mbyBzb21laG93LCBwZXJoYXBzIGJ5 Ci0tICAgY2hlY2tpbmcgcl92ZXJzaW9uIGZvciBhIGtub3duIHZlcnNpb24gbnVtYmVyLCBvciBy X3N0YXRlIGZvcgotLSAgIFJUX0NPTlNJU1RFTlQuICAqLwotKy8qIFJlYWQgdGhlIHJfbWFwIGZp ZWxkIGZyb20gdGhlIHN1cHBsaWVkIHJfZGVidWcgc3RydWN0dXJlLiAgKi8KLSAKLSBzdGF0aWMg Q09SRV9BRERSCi0tc29saWJfc3ZyNF9yX21hcCAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbykKLSty X21hcF9mcm9tX2RlYnVnX2Jhc2UgKENPUkVfQUREUiBkZWJ1Z19iYXNlKQotIHsKLSAgIHN0cnVj dCBsaW5rX21hcF9vZmZzZXRzICpsbW8gPSBzdnI0X2ZldGNoX2xpbmtfbWFwX29mZnNldHMgKCk7 Ci0gICBzdHJ1Y3QgdHlwZSAqcHRyX3R5cGUgPSBidWlsdGluX3R5cGUgKHRhcmdldF9nZGJhcmNo ICgpKS0+YnVpbHRpbl9kYXRhX3B0cjsKLUBAIC03OTIsMTMgKzkwNSwyNyBAQCBzb2xpYl9zdnI0 X3JfbWFwIChzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvCi0gCi0gICBUUllfQ0FUQ0ggKGV4LCBSRVRV Uk5fTUFTS19FUlJPUikKLSAgICAgewotLSAgICAgIGFkZHIgPSByZWFkX21lbW9yeV90eXBlZF9h ZGRyZXNzIChpbmZvLT5kZWJ1Z19iYXNlICsgbG1vLT5yX21hcF9vZmZzZXQsCi0rICAgICAgYWRk ciA9IHJlYWRfbWVtb3J5X3R5cGVkX2FkZHJlc3MgKGRlYnVnX2Jhc2UgKyBsbW8tPnJfbWFwX29m ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyX3R5cGUp OwotICAgICB9Ci0gICBleGNlcHRpb25fcHJpbnQgKGdkYl9zdGRlcnIsIGV4KTsKLSAgIHJldHVy biBhZGRyOwotIH0KLSAKLSsvKiBGaW5kIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBpbmZlcmlv cidzIGR5bmFtaWMgbGluayBtYXAsIGFuZAotKyAgIHJldHVybiBpdHMgYWRkcmVzcyBpbiB0aGUg aW5mZXJpb3IuICBSZXR1cm4gemVybyBpZiB0aGUgYWRkcmVzcwotKyAgIGNvdWxkIG5vdCBiZSBk ZXRlcm1pbmVkLgotKwotKyAgIEZJWE1FOiBQZXJoYXBzIHdlIHNob3VsZCB2YWxpZGF0ZSB0aGUg aW5mbyBzb21laG93LCBwZXJoYXBzIGJ5Ci0rICAgY2hlY2tpbmcgcl92ZXJzaW9uIGZvciBhIGtu b3duIHZlcnNpb24gbnVtYmVyLCBvciByX3N0YXRlIGZvcgotKyAgIFJUX0NPTlNJU1RFTlQuICAq LwotKwotK3N0YXRpYyBDT1JFX0FERFIKLStzb2xpYl9zdnI0X3JfbWFwIChzdHJ1Y3Qgc3ZyNF9p bmZvICppbmZvKQotK3sKLSsgIHJldHVybiByX21hcF9mcm9tX2RlYnVnX2Jhc2UgKGluZm8tPmRl YnVnX2Jhc2UpOwotK30KLSsKLSAvKiBGaW5kIHJfYnJrIGZyb20gdGhlIGluZmVyaW9yJ3MgZGVi dWcgYmFzZS4gICovCi0gCi0gc3RhdGljIENPUkVfQUREUgotQEAgLTExNjEsMTUgKzEyODgsMTcg QEAgc3ZyNF9kZWZhdWx0X3NvcyAodm9pZCkKLSAgIHJldHVybiBuZXc7Ci0gfQotIAotLS8qIFJl YWQgdGhlIHdob2xlIGluZmVyaW9yIGxpYnJhcmllcyBjaGFpbiBzdGFydGluZyBhdCBhZGRyZXNz IExNLiAgQWRkIHRoZQotLSAgIGVudHJpZXMgdG8gdGhlIHRhaWwgcmVmZXJlbmNlZCBieSBMSU5L X1BUUl9QVFIuICBJZ25vcmUgdGhlIGZpcnN0IGVudHJ5IGlmCi0tICAgSUdOT1JFX0ZJUlNUIGFu ZCBzZXQgZ2xvYmFsIE1BSU5fTE1fQUREUiBhY2NvcmRpbmcgdG8gaXQuICAqLwotKy8qIFJlYWQg dGhlIHdob2xlIGluZmVyaW9yIGxpYnJhcmllcyBjaGFpbiBzdGFydGluZyBhdCBhZGRyZXNzIExN LgotKyAgIEV4cGVjdCB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIGNoYWluJ3MgcHJldmlvdXMgZW50 cnkgdG8gYmUgUFJFVl9MTS4KLSsgICBBZGQgdGhlIGVudHJpZXMgdG8gdGhlIHRhaWwgcmVmZXJl bmNlZCBieSBMSU5LX1BUUl9QVFIuICBJZ25vcmUgdGhlCi0rICAgZmlyc3QgZW50cnkgaWYgSUdO T1JFX0ZJUlNUIGFuZCBzZXQgZ2xvYmFsIE1BSU5fTE1fQUREUiBhY2NvcmRpbmcKLSsgICB0byBp dC4gIFJldHVybnMgbm9uemVybyB1cG9uIHN1Y2Nlc3MuICAqLwotIAotLXN0YXRpYyB2b2lkCi0t c3ZyNF9yZWFkX3NvX2xpc3QgKENPUkVfQUREUiBsbSwgc3RydWN0IHNvX2xpc3QgKioqbGlua19w dHJfcHRyLAotLQkJICAgaW50IGlnbm9yZV9maXJzdCkKLStzdGF0aWMgaW50Ci0rc3ZyNF9yZWFk X3NvX2xpc3QgKENPUkVfQUREUiBsbSwgQ09SRV9BRERSIHByZXZfbG0sCi0rCQkgICBzdHJ1Y3Qg c29fbGlzdCAqKipsaW5rX3B0cl9wdHIsIGludCBpZ25vcmVfZmlyc3QpCi0gewotLSAgQ09SRV9B RERSIHByZXZfbG0gPSAwLCBuZXh0X2xtOwotKyAgQ09SRV9BRERSIG5leHRfbG07Ci0gCi0gICBm b3IgKDsgbG0gIT0gMDsgcHJldl9sbSA9IGxtLCBsbSA9IG5leHRfbG0pCi0gICAgIHsKLUBAIC0x MTg1LDcgKzEzMTQsNyBAQCBzdnI0X3JlYWRfc29fbGlzdCAoQ09SRV9BRERSIGxtLCBzdHJ1Y3QK LSAgICAgICBpZiAobmV3LT5sbV9pbmZvID09IE5VTEwpCi0gCXsKLSAJICBkb19jbGVhbnVwcyAo b2xkX2NoYWluKTsKLS0JICBicmVhazsKLSsJICByZXR1cm4gMDsKLSAJfQotIAotICAgICAgIG5l eHRfbG0gPSBuZXctPmxtX2luZm8tPmxfbmV4dDsKLUBAIC0xMTk2LDcgKzEzMjUsNyBAQCBzdnI0 X3JlYWRfc29fbGlzdCAoQ09SRV9BRERSIGxtLCBzdHJ1Y3QKLSAJCSAgIHBhZGRyZXNzICh0YXJn ZXRfZ2RiYXJjaCAoKSwgcHJldl9sbSksCi0gCQkgICBwYWRkcmVzcyAodGFyZ2V0X2dkYmFyY2gg KCksIG5ldy0+bG1faW5mby0+bF9wcmV2KSk7Ci0gCSAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7 Ci0tCSAgYnJlYWs7Ci0rCSAgcmV0dXJuIDA7Ci0gCX0KLSAKLSAgICAgICAvKiBGb3IgU1ZSNCB2 ZXJzaW9ucywgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBsaW5rIG1hcCBpcyBmb3IgdGhlCi1AQCAt MTI5MSwyMCArMTQyMCw2MSBAQCBzdnI0X3JlYWRfc29fbGlzdCAoQ09SRV9BRERSIGxtLCBzdHJ1 Y3QKLSAgICAgICAqKmxpbmtfcHRyX3B0ciA9IG5ldzsKLSAgICAgICAqbGlua19wdHJfcHRyID0g Jm5ldy0+bmV4dDsKLSAgICAgfQotKwotKyAgcmV0dXJuIDE7Ci0gfQotIAotLS8qIEltcGxlbWVu dCB0aGUgImN1cnJlbnRfc29zIiB0YXJnZXRfc29fb3BzIG1ldGhvZC4gICovCi0rLyogUmVhZCB0 aGUgbGlzdCBvZiBsb2FkZWQgbGlicmFyaWVzIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyJ3MgYmFz ZQotKyAgIHN0cnVjdHVyZS4gICovCi0gCi0gc3RhdGljIHN0cnVjdCBzb19saXN0ICoKLS1zdnI0 X2N1cnJlbnRfc29zICh2b2lkKQotK3N2cjRfY3VycmVudF9zb3NfZnJvbV9kZWJ1Z19iYXNlICh2 b2lkKQotIHsKLSsgIHN0cnVjdCBzdnI0X2luZm8gKmluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOwot ICAgQ09SRV9BRERSIGxtOwotICAgc3RydWN0IHNvX2xpc3QgKmhlYWQgPSBOVUxMOwotICAgc3Ry dWN0IHNvX2xpc3QgKipsaW5rX3B0ciA9ICZoZWFkOwotLSAgc3RydWN0IHN2cjRfaW5mbyAqaW5m bzsKLSAgIHN0cnVjdCBjbGVhbnVwICpiYWNrX3RvOwotICAgaW50IGlnbm9yZV9maXJzdDsKLSsK LSsgIGdkYl9hc3NlcnQgKGluZm8tPmRlYnVnX2Jhc2UpOwotKwotKyAgLyogQXNzdW1lIHRoYXQg ZXZlcnl0aGluZyBpcyBhIGxpYnJhcnkgaWYgdGhlIGR5bmFtaWMgbG9hZGVyIHdhcyBsb2FkZWQK LSsgICAgIGxhdGUgYnkgYSBzdGF0aWMgZXhlY3V0YWJsZS4gICovCi0rICBpZiAoZXhlY19iZmQg JiYgYmZkX2dldF9zZWN0aW9uX2J5X25hbWUgKGV4ZWNfYmZkLCAiLmR5bmFtaWMiKSA9PSBOVUxM KQotKyAgICBpZ25vcmVfZmlyc3QgPSAwOwotKyAgZWxzZQotKyAgICBpZ25vcmVfZmlyc3QgPSAx OwotKwotKyAgYmFja190byA9IG1ha2VfY2xlYW51cCAoc3ZyNF9mcmVlX2xpYnJhcnlfbGlzdCwg JmhlYWQpOwotKwotKyAgLyogV2FsayB0aGUgaW5mZXJpb3IncyBsaW5rIG1hcCBsaXN0LCBhbmQg YnVpbGQgb3VyIGxpc3Qgb2YKLSsgICAgIGBzdHJ1Y3Qgc29fbGlzdCcgbm9kZXMuICAqLwotKyAg bG0gPSBzb2xpYl9zdnI0X3JfbWFwIChpbmZvKTsKLSsgIGlmIChsbSkKLSsgICAgc3ZyNF9yZWFk X3NvX2xpc3QgKGxtLCAwLCAmbGlua19wdHIsIGlnbm9yZV9maXJzdCk7Ci0rCi0rICAvKiBPbiBT b2xhcmlzLCB0aGUgZHluYW1pYyBsaW5rZXIgaXMgbm90IGluIHRoZSBub3JtYWwgbGlzdCBvZgot KyAgICAgc2hhcmVkIG9iamVjdHMsIHNvIG1ha2Ugc3VyZSB3ZSBwaWNrIGl0IHVwIHRvby4gIEhh dmluZwotKyAgICAgc3ltYm9sIGluZm9ybWF0aW9uIGZvciB0aGUgZHluYW1pYyBsaW5rZXIgaXMg cXVpdGUgY3J1Y2lhbAotKyAgICAgZm9yIHNraXBwaW5nIGR5bmFtaWMgbGlua2VyIHJlc29sdmVy IGNvZGUuICAqLwotKyAgbG0gPSBzb2xpYl9zdnI0X3JfbGRzb21hcCAoaW5mbyk7Ci0rICBpZiAo bG0pCi0rICAgIHN2cjRfcmVhZF9zb19saXN0IChsbSwgMCwgJmxpbmtfcHRyLCAwKTsKLSsKLSsg IGRpc2NhcmRfY2xlYW51cHMgKGJhY2tfdG8pOwotKwotKyAgcmV0dXJuIGhlYWQ7Ci0rfQotKwot Ky8qIEltcGxlbWVudCB0aGUgImN1cnJlbnRfc29zIiB0YXJnZXRfc29fb3BzIG1ldGhvZC4gICov Ci0rCi0rc3RhdGljIHN0cnVjdCBzb19saXN0ICoKLStzdnI0X2N1cnJlbnRfc29zICh2b2lkKQot K3sKLSsgIHN0cnVjdCBzdnI0X2luZm8gKmluZm87Ci0gICBzdHJ1Y3Qgc3ZyNF9saWJyYXJ5X2xp c3QgbGlicmFyeV9saXN0OwotKyAgc3RydWN0IHNvX2xpc3QgKnJlc3VsdDsKLSAKLSAgIC8qIEZh bGwgYmFjayB0byBtYW51YWwgZXhhbWluYXRpb24gb2YgdGhlIHRhcmdldCBpZiB0aGUgcGFja2V0 IGlzIG5vdAotICAgICAgc3VwcG9ydGVkIG9yIGdkYnNlcnZlciBmYWlsZWQgdG8gZmluZCBEVF9E RUJVRy4gIGdkYi5zZXJ2ZXIvc29saWItbGlzdC5leHAKLUBAIC0xMzI3LDYgKzE0OTcsMTAgQEAg c3ZyNF9jdXJyZW50X3NvcyAodm9pZCkKLSAKLSAgIGluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOwot IAotKyAgLyogSWYgd2UgaGF2ZSBhIG5hbWVzcGFjZSB0YWJsZSB0aGVuIHJldHVybiBhIGZsYXR0 ZW5lZCBjb3B5LiAgKi8KLSsgIGlmIChpbmZvLT5uYW1lc3BhY2VfdGFibGUgIT0gTlVMTCkKLSsg ICAgcmV0dXJuIG5hbWVzcGFjZV90YWJsZV9mbGF0dGVuIChpbmZvLT5uYW1lc3BhY2VfdGFibGUp OwotKwotICAgLyogQWx3YXlzIGxvY2F0ZSB0aGUgZGVidWcgc3RydWN0LCBpbiBjYXNlIGl0IGhh cyBtb3ZlZC4gICovCi0gICBpbmZvLT5kZWJ1Z19iYXNlID0gMDsKLSAgIGxvY2F0ZV9iYXNlIChp bmZvKTsKLUBAIC0xMzM2LDM1ICsxNTEwLDEyIEBAIHN2cjRfY3VycmVudF9zb3MgKHZvaWQpCi0g ICBpZiAoISBpbmZvLT5kZWJ1Z19iYXNlKQotICAgICByZXR1cm4gc3ZyNF9kZWZhdWx0X3NvcyAo KTsKLSAKLS0gIC8qIEFzc3VtZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgYSBsaWJyYXJ5IGlmIHRoZSBk eW5hbWljIGxvYWRlciB3YXMgbG9hZGVkCi0tICAgICBsYXRlIGJ5IGEgc3RhdGljIGV4ZWN1dGFi bGUuICAqLwotLSAgaWYgKGV4ZWNfYmZkICYmIGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChleGVj X2JmZCwgIi5keW5hbWljIikgPT0gTlVMTCkKLS0gICAgaWdub3JlX2ZpcnN0ID0gMDsKLS0gIGVs c2UKLS0gICAgaWdub3JlX2ZpcnN0ID0gMTsKLS0KLS0gIGJhY2tfdG8gPSBtYWtlX2NsZWFudXAg KHN2cjRfZnJlZV9saWJyYXJ5X2xpc3QsICZoZWFkKTsKLS0KLS0gIC8qIFdhbGsgdGhlIGluZmVy aW9yJ3MgbGluayBtYXAgbGlzdCwgYW5kIGJ1aWxkIG91ciBsaXN0IG9mCi0tICAgICBgc3RydWN0 IHNvX2xpc3QnIG5vZGVzLiAgKi8KLS0gIGxtID0gc29saWJfc3ZyNF9yX21hcCAoaW5mbyk7Ci0t ICBpZiAobG0pCi0tICAgIHN2cjRfcmVhZF9zb19saXN0IChsbSwgJmxpbmtfcHRyLCBpZ25vcmVf Zmlyc3QpOwotLQotLSAgLyogT24gU29sYXJpcywgdGhlIGR5bmFtaWMgbGlua2VyIGlzIG5vdCBp biB0aGUgbm9ybWFsIGxpc3Qgb2YKLS0gICAgIHNoYXJlZCBvYmplY3RzLCBzbyBtYWtlIHN1cmUg d2UgcGljayBpdCB1cCB0b28uICBIYXZpbmcKLS0gICAgIHN5bWJvbCBpbmZvcm1hdGlvbiBmb3Ig dGhlIGR5bmFtaWMgbGlua2VyIGlzIHF1aXRlIGNydWNpYWwKLS0gICAgIGZvciBza2lwcGluZyBk eW5hbWljIGxpbmtlciByZXNvbHZlciBjb2RlLiAgKi8KLS0gIGxtID0gc29saWJfc3ZyNF9yX2xk c29tYXAgKGluZm8pOwotLSAgaWYgKGxtKQotLSAgICBzdnI0X3JlYWRfc29fbGlzdCAobG0sICZs aW5rX3B0ciwgMCk7Ci0tCi0tICBkaXNjYXJkX2NsZWFudXBzIChiYWNrX3RvKTsKLSsgIHJlc3Vs dCA9IHN2cjRfY3VycmVudF9zb3NfZnJvbV9kZWJ1Z19iYXNlICgpOwotIAotLSAgaWYgKGhlYWQg PT0gTlVMTCkKLSsgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgcmV0dXJuIHN2cjRfZGVmYXVs dF9zb3MgKCk7Ci0gCi0tICByZXR1cm4gaGVhZDsKLSsgIHJldHVybiByZXN1bHQ7Ci0gfQotIAot IC8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgbGlua19tYXAgZm9yIGEgZ2l2ZW4gT0JKRklMRS4g ICovCi1AQCAtMTQ0OSw2ICsxNjAwLDQ5OCBAQCBleGVjX2VudHJ5X3BvaW50IChzdHJ1Y3QgYmZk ICphYmZkLCBzdHJ1Ci0gICByZXR1cm4gZ2RiYXJjaF9hZGRyX2JpdHNfcmVtb3ZlICh0YXJnZXRf Z2RiYXJjaCAoKSwgYWRkcik7Ci0gfQotIAotKy8qIEEgcHJvYmUgYW5kIGl0cyBhc3NvY2lhdGVk IGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gICovCi0rCi0rc3RydWN0IHByb2JlX2FuZF9pbmZvCi0r ewotKyAgLyogVGhlIHByb2JlLiAgKi8KLSsgIHN0cnVjdCBwcm9iZSAqcHJvYmU7Ci0rCi0rICAv KiBUaGUgcHJvYmVfaW5mbyBmcm9tIHdoaWNoIHRoZSBwcm9iZSB3YXMgY3JlYXRlZC4gICovCi0r ICBjb25zdCBzdHJ1Y3QgcHJvYmVfaW5mbyAqaW5mbzsKLSt9OwotKwotKy8qIEdldCB0aGUgc29s aWIgZXZlbnQgcHJvYmUgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiwgYW5kIHRoZQotKyAgIHBy b2JlX2luZm8gdGhlIHByb2JlIHdhcyBjcmVhdGVkIHdpdGguICBGaWxscyBpbiBSRVNVTFQgYW5k Ci0rICAgcmV0dXJucyBub256ZXJvIGlmIGEgc29saWIgZXZlbnQgcHJvYmUgd2FzIGZvdW5kIGF0 IHRoZQotKyAgIHNwZWNpZmllZCBsb2NhdGlvbi4gIFJldHVybnMgemVybyBpZiBubyBzb2xpYiBl dmVudCBwcm9iZQotKyAgIHdhcyBmb3VuZC4gICovCi0rCi0rc3RhdGljIGludAotK3NvbGliX2V2 ZW50X3Byb2JlX2F0IChzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvLCBzdHJ1Y3QgYnBfbG9jYXRpb24g KmxvYywKLSsJCSAgICAgIHN0cnVjdCBwcm9iZV9hbmRfaW5mbyAqcmVzdWx0KQotK3sKLSsgIGlu dCBpOwotKwotKyAgZm9yIChpID0gMDsgaSA8IE5VTV9QUk9CRVM7IGkrKykKLSsgICAgewotKyAg ICAgIHN0cnVjdCBwcm9iZSAqcHJvYmU7Ci0rICAgICAgaW50IGl4OwotKwotKyAgICAgIGZvciAo aXggPSAwOyBWRUNfaXRlcmF0ZSAocHJvYmVfcCwgaW5mby0+cHJvYmVzW2ldLCBpeCwgcHJvYmUp OyArK2l4KQotKwl7Ci0rCSAgaWYgKGxvYy0+cHNwYWNlID09IGN1cnJlbnRfcHJvZ3JhbV9zcGFj ZQotKwkgICAgICAmJiBsb2MtPmFkZHJlc3MgPT0gcHJvYmUtPmFkZHJlc3MpCi0rCSAgICB7Ci0r CSAgICAgIHJlc3VsdC0+aW5mbyA9ICZwcm9iZV9pbmZvW2ldOwotKwkgICAgICByZXN1bHQtPnBy b2JlID0gcHJvYmU7Ci0rCi0rCSAgICAgIHJldHVybiAxOwotKwkgICAgfQotKwl9Ci0rICAgIH0K LSsKLSsgIHJldHVybiAwOwotK30KLSsKLSsvKiBEZWNpZGUgd2hhdCBhY3Rpb24gdG8gdGFrZSB3 aGVuIHRoZSBzcGVjaWZpZWQgc29saWIgZXZlbnQgcHJvYmUgaXMKLSsgICBoaXQuICAqLwotKwot K3N0YXRpYyBlbnVtIHByb2JlX2FjdGlvbgotK3NvbGliX2V2ZW50X3Byb2JlX2FjdGlvbiAoc3Ry dWN0IHByb2JlX2FuZF9pbmZvICpwaSkKLSt7Ci0rICBlbnVtIHByb2JlX2FjdGlvbiBhY3Rpb247 Ci0rICB1bnNpZ25lZCBwcm9iZV9hcmdjOwotKwotKyAgYWN0aW9uID0gcGktPmluZm8tPmFjdGlv bjsKLSsgIGlmIChhY3Rpb24gPT0gTkFNRVNQQUNFX05PX0FDVElPTiB8fCBhY3Rpb24gPT0gTkFN RVNQQUNFX1RBQkxFX0lOVkFMSURBVEUpCi0rICAgIHJldHVybiBhY3Rpb247Ci0rCi0rICBnZGJf YXNzZXJ0IChhY3Rpb24gPT0gTkFNRVNQQUNFX1JFTE9BRAotKwkgICAgICB8fCBhY3Rpb24gPT0g TkFNRVNQQUNFX1VQREFURV9PUl9SRUxPQUQpOwotKwotKyAgLyogQ2hlY2sgdGhhdCBhbiBhcHBy b3ByaWF0ZSBudW1iZXIgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHN1cHBsaWVkLgotKyAgICAgV2Ug ZXhwZWN0OgotKyAgICAgICBhcmcwOiBMbWlkX3QgbG1pZCAobWFuZGF0b3J5KQotKyAgICAgICBh cmcxOiBzdHJ1Y3Qgcl9kZWJ1ZyAqZGVidWdfYmFzZSAobWFuZGF0b3J5KQotKyAgICAgICBhcmcy OiBzdHJ1Y3QgbGlua19tYXAgKm5ldyAob3B0aW9uYWwsIGZvciBpbmNyZW1lbnRhbCB1cGRhdGVz KSAgKi8KLSsgIHByb2JlX2FyZ2MgPSBnZXRfcHJvYmVfYXJndW1lbnRfY291bnQgKHBpLT5wcm9i ZSk7Ci0rICBpZiAocHJvYmVfYXJnYyA9PSAyKQotKyAgICBhY3Rpb24gPSBOQU1FU1BBQ0VfUkVM T0FEOwotKyAgZWxzZSBpZiAocHJvYmVfYXJnYyA8IDIpCi0rICAgIGFjdGlvbiA9IE5BTUVTUEFD RV9UQUJMRV9JTlZBTElEQVRFOwotKwotKyAgcmV0dXJuIGFjdGlvbjsKLSt9Ci0rCi0rLyogQSBu YW1lc3BhY2UgaW4gdGhlIGR5bmFtaWMgbGlua2VyLiAgKi8KLSsKLStzdHJ1Y3QgbmFtZXNwYWNl Ci0rewotKyAgLyogTnVtZXJpYyBsaW5rLW1hcCBJRCBvZiB0aGUgbmFtZXNwYWNlLiAgKi8KLSsg IExPTkdFU1QgbG1pZDsKLSsKLSsgIC8qIExpc3Qgb2Ygb2JqZWN0cyBsb2FkZWQgaW50byB0aGUg bmFtZXNwYWNlLiAgKi8KLSsgIHN0cnVjdCBzb19saXN0ICpzb2xpc3Q7Ci0rfTsKLSsKLSsvKiBS ZXR1cm5zIGEgaGFzaCBjb2RlIGZvciB0aGUgbmFtZXNwYWNlIHJlZmVyZW5jZWQgYnkgcC4gICov Ci0rCi0rc3RhdGljIGhhc2h2YWxfdAotK2hhc2hfbmFtZXNwYWNlIChjb25zdCB2b2lkICpwKQot K3sKLSsgIGNvbnN0IHN0cnVjdCBuYW1lc3BhY2UgKm5zID0gcDsKLSsKLSsgIHJldHVybiAoaGFz aHZhbF90KSBucy0+bG1pZDsKLSt9Ci0rCi0rLyogUmV0dXJucyBub24temVybyBpZiB0aGUgbmFt ZXNwYWNlcyByZWZlcmVuY2VkIGJ5IHAxIGFuZCBwMgotKyAgIGFyZSBlcXVhbC4gICovCi0rCi0r c3RhdGljIGludAotK2VxdWFsX25hbWVzcGFjZSAoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQg KnAyKQotK3sKLSsgIGNvbnN0IHN0cnVjdCBuYW1lc3BhY2UgKm5zMSA9IHAxOwotKyAgY29uc3Qg c3RydWN0IG5hbWVzcGFjZSAqbnMyID0gcDI7Ci0rCi0rICByZXR1cm4gbnMxLT5sbWlkID09IG5z Mi0+bG1pZDsKLSt9Ci0rCi0rLyogRnJlZSBhIG5hbWVzcGFjZS4gICovCi0rCi0rc3RhdGljIHZv aWQKLStmcmVlX25hbWVzcGFjZSAodm9pZCAqcCkKLSt7Ci0rICBzdHJ1Y3QgbmFtZXNwYWNlICpu cyA9IHA7Ci0rCi0rICBzdnI0X2ZyZWVfbGlicmFyeV9saXN0IChucy0+c29saXN0KTsKLSsgIHhm cmVlIChucyk7Ci0rfQotKwotKy8qIFBvcHVsYXRlIHRoaXMgbmFtZXNwYWNlIGJ5IHJlYWRpbmcg dGhlIGVudGlyZSBsaXN0IG9mIHNoYXJlZAotKyAgIG9iamVjdHMgZnJvbSB0aGUgaW5mZXJpb3Iu ICBSZXR1cm5zIG5vbnplcm8gb24gc3VjY2Vzcy4gICovCi0rCi0rc3RhdGljIGludAotK25hbWVz cGFjZV91cGRhdGVfZnVsbCAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbywgTE9OR0VTVCBsbWlkLAot KwkJICAgICAgIENPUkVfQUREUiBkZWJ1Z19iYXNlLCBpbnQgaXNfaW5pdGlhbF9ucykKLSt7Ci0r ICBzdHJ1Y3Qgc29fbGlzdCAqcmVzdWx0ID0gTlVMTCwgKnNvOwotKyAgc3RydWN0IG5hbWVzcGFj ZSBsb29rdXAsICpuczsKLSsgIHZvaWQgKipzbG90OwotKwotKyAgLyogUmVhZCB0aGUgbGlzdCBv ZiBzaGFyZWQgb2JqZWN0cyBmcm9tIHRoZSBpbmZlcmlvci4gIFRoZQotKyAgICAgaW5pdGlhbCBu YW1lc3BhY2UgcmVxdWlyZXMgZXh0cmEgcHJvY2Vzc2luZyBhbmQgaXMgaGFuZGxlZAotKyAgICAg c2VwYXJhdGVseS4gICovCi0rICBpZiAoaXNfaW5pdGlhbF9ucykKLSsgICAgewotKyAgICAgIHJl c3VsdCA9IHN2cjRfY3VycmVudF9zb3NfZnJvbV9kZWJ1Z19iYXNlICgpOwotKyAgICB9Ci0rICBl bHNlCi0rICAgIHsKLSsgICAgICBDT1JFX0FERFIgbG0gPSByX21hcF9mcm9tX2RlYnVnX2Jhc2Ug KGRlYnVnX2Jhc2UpOwotKyAgICAgIHN0cnVjdCBzb19saXN0ICoqbGlua19wdHIgPSAmcmVzdWx0 OwotKwotKyAgICAgIGlmICghc3ZyNF9yZWFkX3NvX2xpc3QgKGxtLCAwLCAmbGlua19wdHIsIDAp KQotKwlyZXR1cm4gMDsKLSsgICAgfQotKwotKyAgLyogSWYgdGhlIG5hbWVzcGFjZSBpcyBlbXB0 eSB0aGVuIGRlbGV0ZSBpdCBmcm9tIHRoZSB0YWJsZS4gICovCi0rICBpZiAocmVzdWx0ID09IE5V TEwpCi0rICAgIHsKLSsgICAgICBpZiAoaW5mby0+bmFtZXNwYWNlX3RhYmxlICE9IE5VTEwpCi0r CXsKLSsJICBsb29rdXAubG1pZCA9IGxtaWQ7Ci0rCSAgaHRhYl9yZW1vdmVfZWx0IChpbmZvLT5u YW1lc3BhY2VfdGFibGUsICZsb29rdXApOwotKwl9Ci0rCi0rICAgICAgcmV0dXJuIDE7Ci0rICAg IH0KLSsKLSsgIC8qIEZpbGwgaW4gdGhlIGxpbmstbWFwIElEcyBhbmQgaW5pdGlhbCBuYW1lc3Bh Y2UgZmxhZ3MuICAqLwotKyAgZm9yIChzbyA9IHJlc3VsdDsgc287IHNvID0gc28tPm5leHQpCi0r ICAgIHsKLSsgICAgICBzby0+bG1faW5mby0+bG1pZCA9IGxtaWQ7Ci0rICAgICAgc28tPmxtX2lu Zm8tPmluX2luaXRpYWxfbnMgPSBpc19pbml0aWFsX25zOwotKyAgICB9Ci0rCi0rICAvKiBDcmVh dGUgdGhlIG5hbWVzcGFjZSB0YWJsZSwgaWYgbmVjZXNzYXJ5LiAgKi8KLSsgIGlmIChpbmZvLT5u YW1lc3BhY2VfdGFibGUgPT0gTlVMTCkKLSsgICAgewotKyAgICAgIGluZm8tPm5hbWVzcGFjZV90 YWJsZSA9IGh0YWJfY3JlYXRlX2FsbG9jICgxLCBoYXNoX25hbWVzcGFjZSwKLSsJCQkJCQkgZXF1 YWxfbmFtZXNwYWNlLAotKwkJCQkJCSBmcmVlX25hbWVzcGFjZSwKLSsJCQkJCQkgeGNhbGxvYywg eGZyZWUpOwotKyAgICB9Ci0rCi0rICAvKiBVcGRhdGUgdGhlIG5hbWVzcGFjZSB0YWJsZSB3aXRo IG91ciBuZXcgbGlzdC4gICovCi0rICBsb29rdXAubG1pZCA9IGxtaWQ7Ci0rICBzbG90ID0gaHRh Yl9maW5kX3Nsb3QgKGluZm8tPm5hbWVzcGFjZV90YWJsZSwgJmxvb2t1cCwgSU5TRVJUKTsKLSsg IGlmICgqc2xvdCA9PSBIVEFCX0VNUFRZX0VOVFJZKQotKyAgICB7Ci0rICAgICAgbnMgPSBYQ05F VyAoc3RydWN0IG5hbWVzcGFjZSk7Ci0rICAgICAgbnMtPmxtaWQgPSBsbWlkOwotKyAgICAgICpz bG90ID0gbnM7Ci0rICAgIH0KLSsgIGVsc2UKLSsgICAgewotKyAgICAgIG5zID0gKnNsb3Q7Ci0r ICAgICAgc3ZyNF9mcmVlX2xpYnJhcnlfbGlzdCAobnMtPnNvbGlzdCk7Ci0rICAgIH0KLSsgIG5z LT5zb2xpc3QgPSByZXN1bHQ7Ci0rCi0rICByZXR1cm4gMTsKLSt9Ci0rCi0rLyogVXBkYXRlIHRo aXMgbmFtZXNwYWNlIHN0YXJ0aW5nIGZyb20gdGhlIGxpbmstbWFwIGVudHJ5IHBhc3NlZCBieQot KyAgIHRoZSBsaW5rZXIgaW4gdGhlIHByb2JlJ3MgdGhpcmQgYXJndW1lbnQuICBSZXR1cm5zIG5v bnplcm8gaWYgdGhlCi0rICAgbGlzdCB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQsIG9yIHplcm8g dG8gaW5kaWNhdGUgZmFpbHVyZS4gICovCi0rCi0rc3RhdGljIGludAotK25hbWVzcGFjZV91cGRh dGVfaW5jcmVtZW50YWwgKHN0cnVjdCBzdnI0X2luZm8gKmluZm8sIExPTkdFU1QgbG1pZCwKLSsJ CQkgICAgICBDT1JFX0FERFIgbG0sIGludCBpc19pbml0aWFsX25zKQotK3sKLSsgIHN0cnVjdCBu YW1lc3BhY2UgbG9va3VwLCAqbnM7Ci0rICBzdHJ1Y3Qgc29fbGlzdCAqdGFpbCwgKipsaW5rLCAq c287Ci0rICBzdHJ1Y3QgdmFsdWUgKnZhbDsKLSsKLSsgIC8qIEZpbmQgb3VyIG5hbWVzcGFjZSBp biB0aGUgdGFibGUuICAqLwotKyAgaWYgKGluZm8tPm5hbWVzcGFjZV90YWJsZSA9PSBOVUxMKQot KyAgICByZXR1cm4gMDsKLSsKLSsgIGxvb2t1cC5sbWlkID0gbG1pZDsKLSsgIG5zID0gaHRhYl9m aW5kIChpbmZvLT5uYW1lc3BhY2VfdGFibGUsICZsb29rdXApOwotKyAgaWYgKG5zID09IE5VTEwp Ci0rICAgIHJldHVybiAwOwotKwotKyAgLyogV2FsayB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiAg Ki8KLSsgIHRhaWwgPSBucy0+c29saXN0OwotKyAgaWYgKHRhaWwgPT0gTlVMTCkKLSsgICAgcmV0 dXJuIDA7Ci0rCi0rICB3aGlsZSAodGFpbC0+bmV4dCkKLSsgICAgdGFpbCA9IHRhaWwtPm5leHQ7 Ci0rICBsaW5rID0gJnRhaWwtPm5leHQ7Ci0rCi0rICAvKiBSZWFkIHRoZSBuZXcgb2JqZWN0cy4g ICovCi0rICBpZiAoIXN2cjRfcmVhZF9zb19saXN0IChsbSwgdGFpbC0+bG1faW5mby0+bG1fYWRk ciwgJmxpbmssIDApKQotKyAgICByZXR1cm4gMDsKLSsKLSsgIC8qIEZpbGwgaW4gdGhlIGxpbmst bWFwIElEcyBhbmQgaW5pdGlhbCBuYW1lc3BhY2UgZmxhZ3MuICAqLwotKyAgZm9yIChzbyA9IHRh aWw7IHNvOyBzbyA9IHNvLT5uZXh0KQotKyAgICB7Ci0rICAgICAgc28tPmxtX2luZm8tPmxtaWQg PSBsbWlkOwotKyAgICAgIHNvLT5sbV9pbmZvLT5pbl9pbml0aWFsX25zID0gaXNfaW5pdGlhbF9u czsKLSsgICAgfQotKwotKyAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIFVwZGF0ZSB0aGUgbmFtZXNw YWNlIHRhYmxlIGFzIGFwcHJvcHJpYXRlIHdoZW4gdXNpbmcgdGhlCi0rICAgcHJvYmVzLWJhc2Vk IGxpbmtlciBpbnRlcmZhY2UuICBEbyBub3RoaW5nIGlmIHVzaW5nIHRoZQotKyAgIHN0YW5kYXJk IGludGVyZmFjZS4gICovCi0rCi0rc3RhdGljIHZvaWQKLStzdnI0X2hhbmRsZV9zb2xpYl9ldmVu dCAoYnBzdGF0IGJzKQotK3sKLSsgIHN0cnVjdCBzdnI0X2luZm8gKmluZm8gPSBnZXRfc3ZyNF9p bmZvICgpOwotKyAgc3RydWN0IHByb2JlX2FuZF9pbmZvIGJ1ZiwgKnBpID0gJmJ1ZjsKLSsgIGVu dW0gcHJvYmVfYWN0aW9uIGFjdGlvbjsKLSsgIHN0cnVjdCB2YWx1ZSAqdmFsOwotKyAgTE9OR0VT VCBsbWlkOwotKyAgQ09SRV9BRERSIGRlYnVnX2Jhc2UsIGxtID0gMDsKLSsgIGludCBpc19pbml0 aWFsX25zOwotKwotKyAgLyogSXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwg YmUgY2FsbGVkIGluY29ycmVjdGx5Ci0rICAgICBieSB0aGUgaGFuZGxlX3NvbGliX2V2ZW50IGlu IGhhbmRsZV9pbmZlcmlvcl9ldmVudCBpZiBHREIgZ29lcwotKyAgICAgZnVsbHkgbXVsdGktdGFy Z2V0LiAgKi8KLSsgIGdkYl9hc3NlcnQgKGJzICE9IE5VTEwpOwotKwotKyAgaWYgKCFpbmZvLT51 c2luZ19wcm9iZXMpCi0rICAgIHJldHVybjsKLSsKLSsgIGlmICghc29saWJfZXZlbnRfcHJvYmVf YXQgKGluZm8sIGJzLT5icF9sb2NhdGlvbl9hdCwgcGkpKQotKyAgICBnb3RvIGVycm9yOwotKwot KyAgYWN0aW9uID0gc29saWJfZXZlbnRfcHJvYmVfYWN0aW9uIChwaSk7Ci0rICBpZiAoYWN0aW9u ID09IE5BTUVTUEFDRV9UQUJMRV9JTlZBTElEQVRFKQotKyAgICBnb3RvIGVycm9yOwotKwotKyAg aWYgKGFjdGlvbiA9PSBOQU1FU1BBQ0VfTk9fQUNUSU9OKQotKyAgICByZXR1cm47Ci0rCi0rICB2 YWwgPSBldmFsdWF0ZV9wcm9iZV9hcmd1bWVudCAocGktPnByb2JlLCAwKTsKLSsgIGlmICh2YWwg PT0gTlVMTCkKLSsgICAgZ290byBlcnJvcjsKLSsKLSsgIGxtaWQgPSB2YWx1ZV9hc19sb25nICh2 YWwpOwotKwotKyAgdmFsID0gZXZhbHVhdGVfcHJvYmVfYXJndW1lbnQgKHBpLT5wcm9iZSwgMSk7 Ci0rICBpZiAodmFsID09IE5VTEwpCi0rICAgIGdvdG8gZXJyb3I7Ci0rCi0rICBkZWJ1Z19iYXNl ID0gdmFsdWVfYXNfYWRkcmVzcyAodmFsKTsKLSsgIGlmIChkZWJ1Z19iYXNlID09IDApCi0rICAg IGdvdG8gZXJyb3I7Ci0rCi0rICAvKiBBbHdheXMgbG9jYXRlIHRoZSBkZWJ1ZyBzdHJ1Y3QsIGlu IGNhc2UgaXQgbW92ZWQuICAqLwotKyAgaW5mby0+ZGVidWdfYmFzZSA9IDA7Ci0rICBpZiAobG9j YXRlX2Jhc2UgKGluZm8pID09IDApCi0rICAgIGdvdG8gZXJyb3I7Ci0rCi0rICBpc19pbml0aWFs X25zID0gKGRlYnVnX2Jhc2UgPT0gaW5mby0+ZGVidWdfYmFzZSk7Ci0rCi0rICBpZiAoYWN0aW9u ID09IE5BTUVTUEFDRV9VUERBVEVfT1JfUkVMT0FEKQotKyAgICB7Ci0rICAgICAgdmFsID0gZXZh bHVhdGVfcHJvYmVfYXJndW1lbnQgKHBpLT5wcm9iZSwgMik7Ci0rICAgICAgaWYgKHZhbCAhPSBO VUxMKQotKwlsbSA9IHZhbHVlX2FzX2FkZHJlc3MgKHZhbCk7Ci0rCi0rICAgICAgaWYgKGxtID09 IDApCi0rCWFjdGlvbiA9IE5BTUVTUEFDRV9SRUxPQUQ7Ci0rICAgIH0KLSsKLSsgIGlmIChhY3Rp b24gPT0gTkFNRVNQQUNFX1VQREFURV9PUl9SRUxPQUQpCi0rICAgIHsKLSsgICAgICBpZiAobmFt ZXNwYWNlX3VwZGF0ZV9pbmNyZW1lbnRhbCAoaW5mbywgbG1pZCwgbG0sIGlzX2luaXRpYWxfbnMp KQotKwlyZXR1cm47Ci0rCi0rICAgICAgYWN0aW9uID0gTkFNRVNQQUNFX1JFTE9BRDsKLSsgICAg fQotKwotKyAgZ2RiX2Fzc2VydCAoYWN0aW9uID09IE5BTUVTUEFDRV9SRUxPQUQpOwotKwotKyAg aWYgKG5hbWVzcGFjZV91cGRhdGVfZnVsbCAoaW5mbywgbG1pZCwgZGVidWdfYmFzZSwgaXNfaW5p dGlhbF9ucykpCi0rICAgIHJldHVybjsKLSsKLSsgZXJyb3I6Ci0rCi0rICAvKiBXZSBzaG91bGQg bmV2ZXIgcmVhY2ggaGVyZSwgYnV0IGlmIHdlIGRvIHdlIGRpc2FibGUgdGhlCi0rICAgICBwcm9i ZXMgaW50ZXJmYWNlIGFuZCByZXZlcnQgdG8gdGhlIG9yaWdpbmFsIGludGVyZmFjZS4KLSsgICAg IFdlIGRvbid0IHJlc2V0IHRoZSBicmVha3BvaW50cyBhcyB0aGUgb25lcyB3ZSd2ZSBzZXQgdXAK LSsgICAgIGFyZSBhZGVxdWF0ZS4gICovCi0rICB3YXJuaW5nIChfKCJQcm9iZXMtYmFzZWQgZHlu YW1pYyBsaW5rZXIgaW50ZXJmYWNlIGZhaWxlZC5cbiIKLSsJICAgICAiUmV2ZXJ0aW5nIHRvIG9y aWdpbmFsIGludGVyZmFjZS5cbiIpKTsKLSsKLSsgIGZyZWVfbmFtZXNwYWNlX3RhYmxlIChpbmZv KTsKLSsgIGZyZWVfcHJvYmVzIChpbmZvKTsKLSsgIGluZm8tPnVzaW5nX3Byb2JlcyA9IDA7Ci0r fQotKwotKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgbmFtZXNwYWNlX3RhYmxlX2ZsYXR0ZW4uICAq LwotKwotK3N0YXRpYyBpbnQKLStuYW1lc3BhY2VfdGFibGVfZmxhdHRlbl9oZWxwZXIgKHZvaWQg KipzbG90LCB2b2lkICphcmcpCi0rewotKyAgc3RydWN0IG5hbWVzcGFjZSAqbnMgPSAoc3RydWN0 IG5hbWVzcGFjZSAqKSAqc2xvdDsKLSsgIHN0cnVjdCBzb19saXN0ICpzcmMgPSBucy0+c29saXN0 OwotKyAgc3RydWN0IHNvX2xpc3QgKipsaW5rID0gKHN0cnVjdCBzb19saXN0ICoqKSBhcmc7Ci0r Ci0rICB3aGlsZSAoKmxpbmspCi0rICAgIGxpbmsgPSAmKCpsaW5rKS0+bmV4dDsKLSsKLSsgIHdo aWxlIChzcmMgIT0gTlVMTCkKLSsgICAgewotKyAgICAgIHN0cnVjdCBzb19saXN0ICpkc3Q7Ci0r Ci0rICAgICAgZHN0ID0geG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3Qgc29fbGlzdCkpOwotKyAgICAg IG1lbWNweSAoZHN0LCBzcmMsIHNpemVvZiAoc3RydWN0IHNvX2xpc3QpKTsKLSsKLSsgICAgICBk c3QtPmxtX2luZm8gPSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBsbV9pbmZvKSk7Ci0rICAgICAg bWVtY3B5IChkc3QtPmxtX2luZm8sIHNyYy0+bG1faW5mbywgc2l6ZW9mIChzdHJ1Y3QgbG1faW5m bykpOwotKwotKyAgICAgICpsaW5rID0gZHN0OwotKyAgICAgIGxpbmsgPSAmZHN0LT5uZXh0Owot KwotKyAgICAgIHNyYyA9IHNyYy0+bmV4dDsKLSsgICAgfQotKwotKyAgKmxpbmsgPSBOVUxMOwot KwotKyAgcmV0dXJuIDE7IC8qIENvbnRpbnVlIHRyYXZlcnNhbC4gICovCi0rfQotKwotKy8qIEZs YXR0ZW4gdGhlIG5hbWVzcGFjZSB0YWJsZSBpbnRvIGEgc2luZ2xlIGxpc3QuICAqLwotKwotK3N0 YXRpYyBzdHJ1Y3Qgc29fbGlzdCAqCi0rbmFtZXNwYWNlX3RhYmxlX2ZsYXR0ZW4gKGh0YWJfdCBu YW1lc3BhY2VfdGFibGUpCi0rewotKyAgc3RydWN0IHNvX2xpc3QgKmRzdCA9IE5VTEw7Ci0rCi0r ICBodGFiX3RyYXZlcnNlIChuYW1lc3BhY2VfdGFibGUsIG5hbWVzcGFjZV90YWJsZV9mbGF0dGVu X2hlbHBlciwgJmRzdCk7Ci0rCi0rICByZXR1cm4gZHN0OwotK30KLSsKLSsvKiBIZWxwZXIgZnVu Y3Rpb24gZm9yIHN2cjRfdXBkYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzLiAgKi8KLSsKLStz dGF0aWMgaW50Ci0rc3ZyNF91cGRhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludCAoc3RydWN0IGJy ZWFrcG9pbnQgKmIsIHZvaWQgKmFyZykKLSt7Ci0rICBzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvID0g Z2V0X3N2cjRfaW5mbyAoKTsKLSsgIHN0cnVjdCBicF9sb2NhdGlvbiAqbG9jOwotKwotKyAgaWYg KGItPnR5cGUgIT0gYnBfc2hsaWJfZXZlbnQpCi0rICAgIHJldHVybiAwOyAvKiBDb250aW51ZSBp dGVyYXRpbmcuICAqLwotKwotKyAgZm9yIChsb2MgPSBiLT5sb2M7IGxvYzsgbG9jID0gbG9jLT5u ZXh0KQotKyAgICB7Ci0rICAgICAgc3RydWN0IHByb2JlX2FuZF9pbmZvIGJ1ZiwgKnBpID0gJmJ1 ZjsKLSsKLSsgICAgICBpZiAoc29saWJfZXZlbnRfcHJvYmVfYXQgKGluZm8sIGxvYywgcGkpKQot Kwl7Ci0rCSAgaWYgKHBpLT5pbmZvLT5hY3Rpb24gPT0gTkFNRVNQQUNFX05PX0FDVElPTikKLSsJ ICAgIGItPmVuYWJsZV9zdGF0ZSA9IChzdG9wX29uX3NvbGliX2V2ZW50cwotKwkJCSAgICAgICA/ IGJwX2VuYWJsZWQgOiBicF9kaXNhYmxlZCk7Ci0rCi0rCSAgcmV0dXJuIDA7IC8qIENvbnRpbnVl IGl0ZXJhdGluZy4gICovCi0rCX0KLSsgICAgfQotKwotKyAgcmV0dXJuIDA7IC8qIENvbnRpbnVl IGl0ZXJhdGluZy4gICovCi0rfQotKwotKy8qIEVuYWJsZSBvciBkaXNhYmxlIG9wdGlvbmFsIHNv bGliIGV2ZW50IGJyZWFrcG9pbnRzIGFzIGFwcHJvcHJpYXRlLgotKyAgIENhbGxlZCB3aGVuZXZl ciBzdG9wX29uX3NvbGliX2V2ZW50cyBpcyBjaGFuZ2VkLiAgKi8KLSsKLStzdGF0aWMgdm9pZAot K3N2cjRfdXBkYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzICh2b2lkKQotK3sKLSsgIHN0cnVj dCBzdnI0X2luZm8gKmluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOwotKwotKyAgaWYgKGluZm8tPnVz aW5nX3Byb2JlcykKLSsgICAgaXRlcmF0ZV9vdmVyX2JyZWFrcG9pbnRzIChzdnI0X3VwZGF0ZV9z b2xpYl9ldmVudF9icmVha3BvaW50LCBOVUxMKTsKLSt9Ci0rCi0rLyogQm90aCB0aGUgU3VuT1Mg YW5kIHRoZSBTVlI0IGR5bmFtaWMgbGlua2VycyBjYWxsIGEgbWFya2VyIGZ1bmN0aW9uCi0rICAg YmVmb3JlIGFuZCBhZnRlciBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgc2hhcmVkIGxpYnJhcmllcy4g IFRoZSBzb2xlCi0rICAgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBhbGxvdyBkZWJ1Z2dl cnMgdG8gc2V0IGEgYnJlYWtwb2ludCBzbwotKyAgIHRoZXkgY2FuIHRyYWNrIHRoZXNlIGNoYW5n ZXMuCi0rCi0rICAgU29tZSB2ZXJzaW9ucyBvZiB0aGUgZ2xpYmMgZHluYW1pYyBsaW5rZXIgY29u dGFpbiBuYW1lZCBwcm9iZXMKLSsgICB0byBhbGxvdyBtb3JlIGZpbmUgZ3JhaW5lZCBzdG9wcGlu Zy4gIEdpdmVuIHRoZSBhZGRyZXNzIG9mIHRoZQotKyAgIG9yaWdpbmFsIG1hcmtlciBmdW5jdGlv biwgdGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBmaW5kIHRoZXNlCi0rICAgcHJvYmVzLCBhbmQg aWYgZm91bmQsIHNldHMgYnJlYWtwb2ludHMgb24gdGhvc2UgaW5zdGVhZC4gIElmIHRoZQotKyAg IHByb2JlcyBhcmVuJ3QgZm91bmQsIGEgc2luZ2xlIGJyZWFrcG9pbnQgaXMgc2V0IG9uIHRoZSBv cmlnaW5hbAotKyAgIG1hcmtlciBmdW5jdGlvbi4gICovCi0rCi0rc3RhdGljIHZvaWQKLStzdnI0 X2NyZWF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50cyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gs Ci0rCQkJCSAgICAgQ09SRV9BRERSIGFkZHJlc3MpCi0rewotKyAgc3RydWN0IHN2cjRfaW5mbyAq aW5mbyA9IGdldF9zdnI0X2luZm8gKCk7Ci0rICBzdHJ1Y3Qgb2JqX3NlY3Rpb24gKm9zOwotKwot KyAgb3MgPSBmaW5kX3BjX3NlY3Rpb24gKGFkZHJlc3MpOwotKyAgaWYgKG9zICE9IE5VTEwpCi0r ICAgIHsKLSsgICAgICBpbnQgd2l0aF9wcmVmaXg7Ci0rCi0rICAgICAgZm9yICh3aXRoX3ByZWZp eCA9IDA7IHdpdGhfcHJlZml4IDw9IDE7IHdpdGhfcHJlZml4KyspCi0rCXsKLSsJICBpbnQgYWxs X3Byb2Jlc19mb3VuZCA9IDE7Ci0rCSAgaW50IGk7Ci0rCi0rCSAgZm9yIChpID0gMDsgaSA8IE5V TV9QUk9CRVM7IGkrKykKLSsJICAgIHsKLSsJICAgICAgY2hhciBuYW1lWzMyXSA9IHsgJ1wwJyB9 OwotKwotKwkgICAgICAvKiBGZWRvcmEgMTcsIFJIRUwgNi4yLCBhbmQgUkhFTCA2LjMgc2hpcHBl ZCB3aXRoIGFuCi0rCQkgZWFybHkgdmVyc2lvbiBvZiB0aGUgcHJvYmVzIGNvZGUgaW4gd2hpY2gg dGhlIHByb2JlcycKLSsJCSBuYW1lcyB3ZXJlIHByZWZpeGVkIHdpdGggInJ0bGRfIi4gIFRoZSBs b2NhdGlvbnMgYW5kCi0rCQkgYXJndW1lbnRzIG9mIHRoZSBwcm9iZXMgYXJlIG90aGVyd2lzZSB0 aGUgc2FtZSwgc28gd2UKLSsJCSBjaGVjayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24gaWYgdGhl IHVucHJlZml4ZWQKLSsJCSBwcm9iZXMgYXJlIG5vdCBmb3VuZC4gICovCi0rCi0rCSAgICAgIGlm ICh3aXRoX3ByZWZpeCkKLSsJCXN0cm5jYXQgKG5hbWUsICJydGxkXyIsIHNpemVvZiAobmFtZSkp OwotKwotKwkgICAgICBzdHJuY2F0IChuYW1lLCBwcm9iZV9pbmZvW2ldLm5hbWUsIHNpemVvZiAo bmFtZSkgLSBzaXplb2YgKCJydGxkXyIpKTsKLSsKLSsJICAgICAgaW5mby0+cHJvYmVzW2ldID0g ZmluZF9wcm9iZXNfaW5fb2JqZmlsZSAob3MtPm9iamZpbGUsICJydGxkIiwKLSsJCQkJCQkJbmFt ZSk7Ci0rCi0rCSAgICAgIGlmICghVkVDX2xlbmd0aCAocHJvYmVfcCwgaW5mby0+cHJvYmVzW2ld KSkKLSsJCXsKLSsJCSAgZnJlZV9wcm9iZXMgKGluZm8pOwotKwkJICBhbGxfcHJvYmVzX2ZvdW5k ID0gMDsKLSsJCSAgYnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCi0rCSAgaWYgKGFsbF9wcm9iZXNf Zm91bmQpCi0rCSAgICB7Ci0rCSAgICAgIGluZm8tPnVzaW5nX3Byb2JlcyA9IDE7Ci0rCi0rCSAg ICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fUFJPQkVTOyBpKyspCi0rCQl7Ci0rCQkgIHN0cnVjdCBw cm9iZSAqcHJvYmU7Ci0rCQkgIGludCBpeDsKLSsKLSsJCSAgZm9yIChpeCA9IDA7Ci0rCQkgICAg ICAgVkVDX2l0ZXJhdGUgKHByb2JlX3AsIGluZm8tPnByb2Jlc1tpXSwgaXgsIHByb2JlKTsKLSsJ CSAgICAgICArK2l4KQotKwkJICAgIGNyZWF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50IChnZGJh cmNoLCBwcm9iZS0+YWRkcmVzcyk7Ci0rCQl9Ci0rCi0rCSAgICAgIHN2cjRfdXBkYXRlX3NvbGli X2V2ZW50X2JyZWFrcG9pbnRzICgpOwotKwkgICAgICByZXR1cm47Ci0rCSAgICB9Ci0rCX0KLSsg ICAgfQotKwotKyAgY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnQgKGdkYmFyY2gsIGFkZHJl c3MpOwotK30KLSsKLSAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGdkYl9iZmRfbG9va3VwX3N5bWJv bC4gICovCi0gCi0gc3RhdGljIGludAotQEAgLTE1MDEsNiArMjE0NCw5IEBAIGVuYWJsZV9icmVh ayAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbywgaW4KLSAgIGluZm8tPmludGVycF90ZXh0X3NlY3Rf bG93ID0gaW5mby0+aW50ZXJwX3RleHRfc2VjdF9oaWdoID0gMDsKLSAgIGluZm8tPmludGVycF9w bHRfc2VjdF9sb3cgPSBpbmZvLT5pbnRlcnBfcGx0X3NlY3RfaGlnaCA9IDA7Ci0gCi0rICBmcmVl X3Byb2JlcyAoaW5mbyk7Ci0rICBpbmZvLT51c2luZ19wcm9iZXMgPSAwOwotKwotICAgLyogSWYg d2UgYWxyZWFkeSBoYXZlIGEgc2hhcmVkIGxpYnJhcnkgbGlzdCBpbiB0aGUgdGFyZ2V0LCBhbmQK LSAgICAgIHJfZGVidWcgY29udGFpbnMgcl9icmssIHNldCB0aGUgYnJlYWtwb2ludCB0aGVyZSAt IHRoaXMgc2hvdWxkCi0gICAgICBtZWFuIHJfYnJrIGhhcyBhbHJlYWR5IGJlZW4gcmVsb2NhdGVk LiAgQXNzdW1lIHRoZSBkeW5hbWljIGxpbmtlcgotQEAgLTE1MzIsNyArMjE3OCw3IEBAIGVuYWJs ZV9icmVhayAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbywgaW4KLSAJIFRoYXQga25vd2xlZGdlIGlz IGVuY29kZWQgaW4gdGhlIGFkZHJlc3MsIGlmIGl0J3MgVGh1bWIgdGhlIGxvdyBiaXQKLSAJIGlz IDEuICBIb3dldmVyLCB3ZSd2ZSBzdHJpcHBlZCB0aGF0IGluZm8gYWJvdmUgYW5kIGl0J3Mgbm90 IGNsZWFyCi0gCSB3aGF0IGFsbCB0aGUgY29uc2VxdWVuY2VzIGFyZSBvZiBwYXNzaW5nIGEgbm9u LWFkZHJfYml0c19yZW1vdmUnZAotLQkgYWRkcmVzcyB0byBjcmVhdGVfc29saWJfZXZlbnRfYnJl YWtwb2ludC4gIFRoZSBjYWxsIHRvCi0rCSBhZGRyZXNzIHRvIHN2cjRfY3JlYXRlX3NvbGliX2V2 ZW50X2JyZWFrcG9pbnRzLiAgVGhlIGNhbGwgdG8KLSAJIGZpbmRfcGNfc2VjdGlvbiB2ZXJpZmll cyB3ZSBrbm93IGFib3V0IHRoZSBhZGRyZXNzIGFuZCBoYXZlIHNvbWUKLSAJIGhvcGUgb2YgY29t cHV0aW5nIHRoZSByaWdodCBraW5kIG9mIGJyZWFrcG9pbnQgdG8gdXNlICh2aWEKLSAJIHN5bWJv bCBpbmZvKS4gIEl0IGRvZXMgbWVhbiB0aGF0IEdEQiBuZWVkcyB0byBiZSBwb2ludGVkIGF0IGEK LUBAIC0xNTcwLDcgKzIyMTYsNyBAQCBlbmFibGVfYnJlYWsgKHN0cnVjdCBzdnI0X2luZm8gKmlu Zm8sIGluCi0gCQkrIGJmZF9zZWN0aW9uX3NpemUgKHRtcF9iZmQsIGludGVycF9zZWN0KTsKLSAJ ICAgIH0KLSAKLS0JICBjcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludCAodGFyZ2V0X2dkYmFy Y2ggKCksIHN5bV9hZGRyKTsKLSsJICBzdnI0X2NyZWF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50 cyAodGFyZ2V0X2dkYmFyY2ggKCksIHN5bV9hZGRyKTsKLSAJICByZXR1cm4gMTsKLSAJfQotICAg ICB9Ci1AQCAtMTcyOCw3ICsyMzc0LDggQEAgZW5hYmxlX2JyZWFrIChzdHJ1Y3Qgc3ZyNF9pbmZv ICppbmZvLCBpbgotIAotICAgICAgIGlmIChzeW1fYWRkciAhPSAwKQotIAl7Ci0tCSAgY3JlYXRl X3NvbGliX2V2ZW50X2JyZWFrcG9pbnQgKHRhcmdldF9nZGJhcmNoICgpLCBsb2FkX2FkZHIgKyBz eW1fYWRkcik7Ci0rCSAgc3ZyNF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludHMgKHRhcmdl dF9nZGJhcmNoICgpLAotKwkJCQkJICAgICAgIGxvYWRfYWRkciArIHN5bV9hZGRyKTsKLSAJICB4 ZnJlZSAoaW50ZXJwX25hbWUpOwotIAkgIHJldHVybiAxOwotIAl9Ci1AQCAtMTc1NCw3ICsyNDAx LDcgQEAgZW5hYmxlX2JyZWFrIChzdHJ1Y3Qgc3ZyNF9pbmZvICppbmZvLCBpbgotIAkgIHN5bV9h ZGRyID0gZ2RiYXJjaF9jb252ZXJ0X2Zyb21fZnVuY19wdHJfYWRkciAodGFyZ2V0X2dkYmFyY2gg KCksCi0gCQkJCQkJCSBzeW1fYWRkciwKLSAJCQkJCQkJICZjdXJyZW50X3RhcmdldCk7Ci0tCSAg Y3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnQgKHRhcmdldF9nZGJhcmNoICgpLCBzeW1fYWRk cik7Ci0rCSAgc3ZyNF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludHMgKHRhcmdldF9nZGJh cmNoICgpLCBzeW1fYWRkcik7Ci0gCSAgcmV0dXJuIDE7Ci0gCX0KLSAgICAgfQotQEAgLTE3NzAs NyArMjQxNyw3IEBAIGVuYWJsZV9icmVhayAoc3RydWN0IHN2cjRfaW5mbyAqaW5mbywgaW4KLSAJ ICAgICAgc3ltX2FkZHIgPSBnZGJhcmNoX2NvbnZlcnRfZnJvbV9mdW5jX3B0cl9hZGRyICh0YXJn ZXRfZ2RiYXJjaCAoKSwKLSAJCQkJCQkJICAgICBzeW1fYWRkciwKLSAJCQkJCQkJICAgICAmY3Vy cmVudF90YXJnZXQpOwotLQkgICAgICBjcmVhdGVfc29saWJfZXZlbnRfYnJlYWtwb2ludCAodGFy Z2V0X2dkYmFyY2ggKCksIHN5bV9hZGRyKTsKLSsJICAgICAgc3ZyNF9jcmVhdGVfc29saWJfZXZl bnRfYnJlYWtwb2ludHMgKHRhcmdldF9nZGJhcmNoICgpLCBzeW1fYWRkcik7Ci0gCSAgICAgIHJl dHVybiAxOwotIAkgICAgfQotIAl9Ci1AQCAtMjI2Niw2ICsyOTEzLDkgQEAgc3ZyNF9zb2xpYl9j cmVhdGVfaW5mZXJpb3JfaG9vayAoaW50IGZybwotIAotICAgaW5mbyA9IGdldF9zdnI0X2luZm8g KCk7Ci0gCi0rICAvKiBGcmVlIHRoZSBwcm9iZXMtYmFzZWQgaW50ZXJmYWNlJ3MgbmFtZXNwYWNl IHRhYmxlLiAgKi8KLSsgIGZyZWVfbmFtZXNwYWNlX3RhYmxlIChpbmZvKTsKLSsKLSAgIC8qIFJl bG9jYXRlIHRoZSBtYWluIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5LiAgKi8KLSAgIHN2cjRfcmVs b2NhdGVfbWFpbl9leGVjdXRhYmxlICgpOwotIAotQEAgLTI1MDcsNCArMzE1Nyw2IEBAIF9pbml0 aWFsaXplX3N2cjRfc29saWIgKHZvaWQpCi0gICBzdnI0X3NvX29wcy5sb29rdXBfbGliX2dsb2Jh bF9zeW1ib2wgPSBlbGZfbG9va3VwX2xpYl9zeW1ib2w7Ci0gICBzdnI0X3NvX29wcy5zYW1lID0g c3ZyNF9zYW1lOwotICAgc3ZyNF9zb19vcHMua2VlcF9kYXRhX2luX2NvcmUgPSBzdnI0X2tlZXBf ZGF0YV9pbl9jb3JlOwotKyAgc3ZyNF9zb19vcHMuaGFuZGxlX3NvbGliX2V2ZW50ID0gc3ZyNF9o YW5kbGVfc29saWJfZXZlbnQ7Ci0rICBzdnI0X3NvX29wcy51cGRhdGVfYnJlYWtwb2ludHMgPSBz dnI0X3VwZGF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50czsKLSB9Ci1JbmRleDogZ2RiLTcuNS41 MC4yMDEzMDIxNS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2JyZWFrLWRsbW9wZW4tc29saWIuYwot PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCAr MDAwMAotKysrIGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVh ay1kbG1vcGVuLXNvbGliLmMJMjAxMy0wMi0xNSAyMjozNzozNS43NjE0MTc1OTYgKzAxMDAKLUBA IC0wLDAgKzEsMjQgQEAKLSsvKiBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0r Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50Ci0rZm9vIChpbnQgbikKLSt7Ci0rICBwcmlu dGYgKCJmb28gJWRcbiIsIG4pOwotKwotKyAgcmV0dXJuIDA7Ci0rfQotSW5kZXg6IGdkYi03LjUu NTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1kbG1vcGVuLmMKLT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAK LSsrKyBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstZGxt b3Blbi5jCTIwMTMtMDItMTUgMjI6Mzc6MzUuNzYyNDE3NTk4ICswMTAwCi1AQCAtMCwwICsxLDU4 IEBACi0rLyogQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0r Ci0rICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgotKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKLSsgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKyNkZWZpbmUg X0dOVV9TT1VSQ0UKLSsjaW5jbHVkZSA8ZGxmY24uaD4KLSsKLSt2b2lkCi0rc3RvcCAoKQotK3sK LSt9Ci0rCi0raW50Ci0rbWFpbiAoKQotK3sKLSsgIHZvaWQgKmhhbmRsZTEsICpoYW5kbGUyLCAq aGFuZGxlMzsKLSsgIHZvaWQgKCpmdW5jKShpbnQpOwotKwotKyAgaGFuZGxlMSA9IGRsbW9wZW4g KExNX0lEX05FV0xNLCBTSExJQl9OQU1FLCBSVExEX0xBWlkpOwotKyAgc3RvcCAoKTsKLSsKLSsg IGZ1bmMgPSAodm9pZCAoKikoaW50KSkgZGxzeW0gKGhhbmRsZTEsICJmb28iKTsKLSsgIGZ1bmMg KDEpOwotKwotKyAgaGFuZGxlMiA9IGRsbW9wZW4gKExNX0lEX05FV0xNLCBTSExJQl9OQU1FLCBS VExEX0xBWlkpOwotKyAgc3RvcCAoKTsKLSsKLSsgIGZ1bmMgPSAodm9pZCAoKikoaW50KSkgZGxz eW0gKGhhbmRsZTIsICJmb28iKTsKLSsgIGZ1bmMgKDIpOwotKwotKyAgaGFuZGxlMyA9IGRsb3Bl biAoU0hMSUJfTkFNRSwgUlRMRF9MQVpZKTsKLSsgIHN0b3AgKCk7Ci0rCi0rICBmdW5jID0gKHZv aWQgKCopKGludCkpIGRsc3ltIChoYW5kbGUzLCAiZm9vIik7Ci0rICBmdW5jICgzKTsKLSsKLSsg IGRsY2xvc2UgKGhhbmRsZTEpOwotKyAgc3RvcCAoKTsKLSsKLSsgIGRsY2xvc2UgKGhhbmRsZTIp OwotKyAgc3RvcCAoKTsKLSsKLSsgIGRsY2xvc2UgKGhhbmRsZTMpOwotKyAgc3RvcCAoKTsKLSsK LSsgIHJldHVybiAwOwotK30KLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2UvYnJlYWstZGxtb3Blbi5leHAKK1RoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgdGVz dHN1aXRlIHRvIGNvcGUgd2l0aCBzb21lIGNoYW5nZXMgcmVzdWx0aW5nCitmcm9tIHRoZSBwcm9i ZXMtYmFzZWQgaW50ZXJmYWNlLCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiAgVGhpcyBwYXRjaCBpcwor cHJpbmNpcGFsbHkgdGhlIHdvcmsgb2YgSmFuIEtyYXRvY2h2aWwuCisKKy0tSVlWOWNScjJ1NnJq Y1A0QgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50 LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0icnRsZC1wcm9iZXMtNi10ZXN0cy1q ay5wYXRjaCIKKworMjAxMy0wNS0xNiAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEBy ZWRoYXQuY29tPgorCSAgICBHYXJ5IEJlbnNvbiAgPGdiZW5zb25AcmVkaGF0LmNvbT4KKworCSog bGliL2dkYi5leHAgKGJ1aWxkX2V4ZWN1dGFibGVfZnJvbV9zcGVjcyk6IFVzZSBnZGJfY29tcGls ZV9wdGhyZWFkLAorCWdkYl9jb21waWxlX3NobGliIG9yIGdkYl9jb21waWxlX3NobGliX3B0aHJl YWRzIHdoZXJlIGFwcHJvcHJpYXRlLgorCSogbGliL3ByZWxpbmstc3VwcG9ydC5leHAgKGJ1aWxk X2V4ZWN1dGFibGVfb3duX2xpYnMpOiBBbGxvdyBJTlRFUlAKKwl0byBiZSBzZXQgdG8gIm5vIiB0 byBpbmRpY2F0ZSB0aGF0IG5vIGxkLnNvIGNvcHkgc2hvdWxkIGJlIG1hZGUuCisJKiBnZGIuYmFz ZS9icmVhay1pbnRlcnAuZXhwIChzb2xpYl9icCk6IE5ldyBjb25zdGFudC4KKwkocmVhY2hfMSk6 IFVzZSB0aGUgYWJvdmUgaW5zdGVhZCBvZiAiX2RsX2RlYnVnX3N0YXRlIi4KKwkodGVzdF9hdHRh Y2gpOiBMaWtld2lzZS4KKwkodGVzdF9sZCk6IExpa2V3aXNlLgorCSogZ2RiLnRocmVhZHMvZGxv cGVuLWxpYnB0aHJlYWQuZXhwOiBOZXcgZmlsZS4KKwkqIGdkYi50aHJlYWRzL2Rsb3Blbi1saWJw dGhyZWFkLmM6IExpa2V3aXNlLgorCSogZ2RiLnRocmVhZHMvZGxvcGVuLWxpYnB0aHJlYWQtbGli LmM6IExpa2V3aXNlLgorCSogZ2RiLmJhc2Uvc29saWItY29ycnVwdGVkLmV4cDogRGlzYWJsZSB0 ZXN0IGlmIEdEQiBpcyB1c2luZyBwcm9iZXMuCisKK0luZGV4OiBnZGItNy42L2dkYi90ZXN0c3Vp dGUvbGliL2dkYi5leHAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDow MDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2UvYnJlYWstZGxtb3Blbi5leHAJMjAxMy0wMi0xNSAyMjozNzozNS43NjI0MTc1 OTggKzAxMDAKLUBAIC0wLDAgKzEsMTI1IEBACi0rIyBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rIyBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQot KyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKLSsjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rIwot KyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0rIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgotKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KLSsjCi0rIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyMgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0r Ci0raWYgeyBbc2tpcF9zaGxpYl90ZXN0c10gfHwgW2lzX3JlbW90ZSB0YXJnZXRdIH0gewotKyAg ICByZXR1cm4gMAotK30KLSsKLStzdGFuZGFyZF90ZXN0ZmlsZQotKwotK3NldCBsaWJuYW1lICR0 ZXN0ZmlsZS1zb2xpYgotK3NldCBzcmNmaWxlX2xpYiAkc3JjZGlyLyRzdWJkaXIvJGxpYm5hbWUu YwotK3NldCBiaW5maWxlX2xpYiBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJGxpYm5hbWUuc29dCi0r Ci0rc2V0IG5vcm1hbF9icCAiX2RsX2RlYnVnX3N0YXRlIgotK3NldCBwcm9iZXNfYnAgImRsX21h aW4iCi0rCi0raWYgeyBbZ2RiX2NvbXBpbGVfc2hsaWIgJHNyY2ZpbGVfbGliICRiaW5maWxlX2xp YiBcCi0rCSAgW2xpc3QgYWRkaXRpb25hbF9mbGFncz0tZlBJQ11dICE9ICIiIH0gewotKyAgICB1 bnRlc3RlZCAiQ291bGQgbm90IGNvbXBpbGUgJGJpbmZpbGVfbGliLiIKLSsgICAgcmV0dXJuIC0x Ci0rfQotKwotK2lmIHsgW3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHRlc3RmaWxlLmV4cCAkdGVzdGZp bGUgJHNyY2ZpbGUgXAotKwkgIFtsaXN0IGFkZGl0aW9uYWxfZmxhZ3M9LURTSExJQl9OQU1FXD1c IiRiaW5maWxlX2xpYlwiIGxpYnM9LWxkbF1dIH0gewotKyAgICByZXR1cm4gLTEKLSt9CistLS0g Z2RiLTcuNi5vcmlnL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAJMjAxMy0wNS0xOSAxNjowNToz Ny44ODE4NDA2NDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAJ MjAxMy0wNS0xOSAxNjowNjoxMC40MzY4MjI5NjQgKzAyMDAKK0BAIC00MDExLDIyICs0MDExLDYg QEAgcHJvYyBidWlsZF9leGVjdXRhYmxlX2Zyb21fc3BlY3Mge3Rlc3RuYQorIAorICAgICBzZXQg YmluZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJGV4ZWN1dGFibGVdCisgCistICAgIHNldCBv YmplY3RzIHt9CistICAgIHNldCBpIDAKKy0gICAgZm9yZWFjaCB7cyBsb2NhbF9vcHRpb25zfSAk YXJncyB7CistICAgICAgICBpZiAgeyBbZ2RiX2NvbXBpbGUgIiR7c3JjZGlyfS8ke3N1YmRpcn0v JHtzfSIgIiR7YmluZmlsZX0ke2l9Lm8iIG9iamVjdCAkbG9jYWxfb3B0aW9uc10gIT0gIiIgfSB7 CistICAgICAgICAgICAgdW50ZXN0ZWQgJHRlc3RuYW1lCistICAgICAgICAgICAgcmV0dXJuIC0x CistICAgICAgICB9CistICAgICAgICBsYXBwZW5kIG9iamVjdHMgIiR7YmluZmlsZX0ke2l9Lm8i CistCWluY3IgaQorLSAgICB9CistICAgIAorLSAgICBpZiAgeyBbZ2RiX2NvbXBpbGUgJG9iamVj dHMgIiR7YmluZmlsZX0iIGV4ZWN1dGFibGUgJG9wdGlvbnNdICE9ICIiIH0geworLSAgICAgICAg dW50ZXN0ZWQgJHRlc3RuYW1lCistICAgICAgICByZXR1cm4gLTEKKy0gICAgfQorLQorICAgICBz ZXQgaW5mb19vcHRpb25zICIiCisgICAgIGlmIHsgW2xzZWFyY2ggLWV4YWN0ICRvcHRpb25zICJj KysiXSA+PSAwIH0geworIAlzZXQgaW5mb19vcHRpb25zICJjKysiCitAQCAtNDAzNCw2ICs0MDE4 LDQyIEBAIHByb2MgYnVpbGRfZXhlY3V0YWJsZV9mcm9tX3NwZWNzIHt0ZXN0bmEKKyAgICAgaWYg W2dldF9jb21waWxlcl9pbmZvICR7aW5mb19vcHRpb25zfV0geworICAgICAgICAgcmV0dXJuIC0x CisgICAgIH0KICsKLSsjIFJ1biAiaW5mbyBzaGFyZWRsaWJyYXJ5IiBhbmQgY2hlY2sgb3VyIGxp YnJhcnkgaXMgc2hvd24gdGhlIGV4cGVjdGVkCi0rIyBudW1iZXIgb2YgdGltZXMuCi0rcHJvYyBj aGVja19pbmZvX3NoYXJlZCB7IHRlc3QgZXhwZWN0IH0gewotKyAgICBnbG9iYWwgbGlibmFtZQot KyAgICBnbG9iYWwgZ2RiX3Byb21wdAorKyAgICBzZXQgYmluZmlsZSBbc3RhbmRhcmRfb3V0cHV0 X2ZpbGUgJGV4ZWN1dGFibGVdCiArCi0rICAgIHNldCBhY3R1YWwgMAorKyAgICBzZXQgZnVuYyBn ZGJfY29tcGlsZQorKyAgICBzZXQgZnVuY19pbmRleCBbbHNlYXJjaCAtcmVnZXhwICRvcHRpb25z IHteKHB0aHJlYWRzfHNobGlifHNobGliX3B0aHJlYWRzKSR9XQorKyAgICBpZiB7JGZ1bmNfaW5k ZXggIT0gLTF9IHsKKysJc2V0IGZ1bmMgIiR7ZnVuY31fW2xpbmRleCAkb3B0aW9ucyAkZnVuY19p bmRleF0iCisrICAgIH0KICsKLSsgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgImluZm8gc2hhcmVkbGli cmFyeSIgJHRlc3QgewotKwktcmUgJGxpYm5hbWUgewotKwkgICAgaW5jciBhY3R1YWwgMQotKwkg ICAgZXhwX2NvbnRpbnVlCisrICAgICMgZ2RiX2NvbXBpbGVfc2hsaWIgYW5kIGdkYl9jb21waWxl X3NobGliX3B0aHJlYWRzIGRvIG5vdCB1c2UgdGhlIDNyZAorKyAgICAjIHBhcmFtZXRlci4gIFRo ZXkgYWxzbyByZXF1aXJlcyAkc291cmNlcyB3aGlsZSBnZGJfY29tcGlsZSBhbmQKKysgICAgIyBn ZGJfY29tcGlsZV9wdGhyZWFkcyByZXF1aXJlICRvYmplY3RzLiAgTW9yZW92ZXIgdGhleSBpZ25v cmUgYW55IG9wdGlvbnMuCisrICAgIGlmIFtzdHJpbmcgbWF0Y2ggZ2RiX2NvbXBpbGVfc2hsaWIq ICRmdW5jXSB7CisrCXNldCBzb3VyY2VzX3BhdGgge30KKysJZm9yZWFjaCB7cyBsb2NhbF9vcHRp b25zfSAkYXJncyB7CisrCSAgICBsYXBwZW5kIHNvdXJjZXNfcGF0aCAiJHtzcmNkaXJ9LyR7c3Vi ZGlyfS8ke3N9IgogKwl9Ci0rCS1yZSAiXHJcbiRnZGJfcHJvbXB0ICQiIHsKLSsJICAgIGlmIHsg JGFjdHVhbCA9PSAkZXhwZWN0IH0gewotKwkJcGFzcyAkdGVzdAotKwkgICAgfSBlbHNlIHsKLSsJ CWZhaWwgJHRlc3QKKysJc2V0IHJldCBbJGZ1bmMgJHNvdXJjZXNfcGF0aCAiJHtiaW5maWxlfSIg JG9wdGlvbnNdCisrICAgIH0gZWxzZSB7CisrCXNldCBvYmplY3RzIHt9CisrCXNldCBpIDAKKysJ Zm9yZWFjaCB7cyBsb2NhbF9vcHRpb25zfSAkYXJncyB7CisrCSAgICBpZiAgeyBbZ2RiX2NvbXBp bGUgIiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzfSIgIiR7YmluZmlsZX0ke2l9Lm8iIG9iamVjdCAk bG9jYWxfb3B0aW9uc10gIT0gIiIgfSB7CisrCQl1bnRlc3RlZCAkdGVzdG5hbWUKKysJCXJldHVy biAtMQogKwkgICAgfQorKwkgICAgbGFwcGVuZCBvYmplY3RzICIke2JpbmZpbGV9JHtpfS5vIgor KwkgICAgaW5jciBpCiArCX0KKysJc2V0IHJldCBbJGZ1bmMgJG9iamVjdHMgIiR7YmluZmlsZX0i IGV4ZWN1dGFibGUgJG9wdGlvbnNdCisrICAgIH0KKysgICAgaWYgIHsgJHJldCAhPSAiIiB9IHsK KysgICAgICAgIHVudGVzdGVkICR0ZXN0bmFtZQorKyAgICAgICAgcmV0dXJuIC0xCiArICAgIH0K LSt9Ci0rCi0rIyBFbmFibGUgc3RvcC1vbi1zb2xpYi1ldmVudHMKLStnZGJfdGVzdF9ub19vdXRw dXQgInNldCBzdG9wLW9uLXNvbGliLWV2ZW50cyAxIgotKwotKyMgUnVuIHRvIHRoZSBmaXJzdCBz dG9wCi0rZ2RiX3Rlc3QgInJ1biIgIi4qU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZl bnQuKiIKICsKLSsjIFhGQUlMIGlmIHdlIGFyZSBub3QgdXNpbmcgcHJvYmVzCi0rc2V0IHRlc3Qg ImVuc3VyZSB1c2luZyBwcm9iZXMiCi0rc2V0IHVzaW5nX3Byb2JlcyAwCi0rZ2RiX3Rlc3RfbXVs dGlwbGUgImJ0IiAkdGVzdCB7Ci0rICAgIC1yZSAiIzAgK1xbXlxyXG5cXSpcXG0oX19HSV8pPyRu b3JtYWxfYnBcXE0uKiRnZGJfcHJvbXB0ICQiIHsKLSsJeGZhaWwgJHRlc3QKKyAgICAgcmV0dXJu IDAKKyB9CisgCitJbmRleDogZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2xpYi9wcmVsaW5rLXN1cHBv cnQuZXhwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi90ZXN0c3VpdGUvbGliL3By ZWxpbmstc3VwcG9ydC5leHAJMjAxMy0wNS0xOSAxNjowNTozNy44ODE4NDA2NDYgKzAyMDAKKysr KyBnZGItNy42L2dkYi90ZXN0c3VpdGUvbGliL3ByZWxpbmstc3VwcG9ydC5leHAJMjAxMy0wNS0x OSAxNjowNTozOS4xMDA4Mzk5ODAgKzAyMDAKK0BAIC05NSw4ICs5NSw5IEBAIHByb2MgZmlsZV9j b3B5IHtzcmMgZGVzdH0geworICMgV3JhcCBmdW5jdGlvbiBidWlsZF9leGVjdXRhYmxlIHNvIHRo YXQgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGlzIGZ1bGx5CisgIyBzZWxmLXN1ZmZpY2llbnQg KHdpdGhvdXQgZGVwZW5kZW5jaWVzIG9uIHN5c3RlbSBsaWJyYXJpZXMpLiAgUGFyYW1ldGVyCisg IyBJTlRFUlAgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxvYWRlciAobGQuc28pIHRvIGJlIHVz ZWQgdGhhdCBpcworLSMgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQgc3lzdGVtIG9uZS4gIExp YnJhcmllcyBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZQorLSMgZGVwZW5kcyBhcmUgY29waWVkIGlu dG8gZGlyZWN0b3J5IERJUi4gIERlZmF1bHQgRElSIHZhbHVlIHRvCisrIyBkaWZmZXJlbnQgZnJv bSB0aGUgZGVmYXVsdCBzeXN0ZW0gb25lLiAgSU5URVJQIGNhbiBiZSBzZXQgdG8gIm5vIiBpZiBu byBsZC5zbworKyMgY29weSBzaG91bGQgYmUgbWFkZS4gIExpYnJhcmllcyBvbiB3aGljaCB0aGUg ZXhlY3V0YWJsZSBkZXBlbmRzIGFyZSBjb3BpZWQKKysjIGludG8gZGlyZWN0b3J5IERJUi4gIERl ZmF1bHQgRElSIHZhbHVlIHRvCisgIyBgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke0VYRUNVVEFCTEV9 LmQnLgorICMKKyAjIEluIGNhc2Ugb2Ygc3VjY2VzcywgcmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5p bmcgdGhlIGFyZ3VtZW50cyB0byBiZSB1c2VkCitAQCAtMTUxLDggKzE1MiwxNSBAQCBwcm9jIGJ1 aWxkX2V4ZWN1dGFibGVfb3duX2xpYnMge3Rlc3RuYW1lCisgCisgICAgIGlmIHskaW50ZXJwID09 ICIifSB7CisgCXNldCBpbnRlcnBfc3lzdGVtIFtzZWN0aW9uX2dldCAkYmluZmlsZSAuaW50ZXJw XQorLQlzZXQgaW50ZXJwICR7ZGlyfS9bZmlsZSB0YWlsICRpbnRlcnBfc3lzdGVtXQorLQlmaWxl X2NvcHkgJGludGVycF9zeXN0ZW0gJGludGVycAorKwlpZiB7JGludGVycF9zeXN0ZW0gPT0gIiJ9 IHsKKysJICAgIGZhaWwgIiR0ZXN0IGNvdWxkIG5vdCBmaW5kIC5pbnRlcnAiCisrCX0gZWxzZSB7 CisrCSAgICBzZXQgaW50ZXJwICR7ZGlyfS9bZmlsZSB0YWlsICRpbnRlcnBfc3lzdGVtXQorKwkg ICAgZmlsZV9jb3B5ICRpbnRlcnBfc3lzdGVtICRpbnRlcnAKKysJfQogKyAgICB9Ci0rICAgIC1y ZSAiIzAgK1xbXlxyXG5cXSpcXG0oX19HSV8pPyRwcm9iZXNfYnBcXE0uKiRnZGJfcHJvbXB0ICQi IHsKLSsJcGFzcyAkdGVzdAotKwlzZXQgdXNpbmdfcHJvYmVzIDEKKysgICAgaWYgeyRpbnRlcnAg PT0gIm5vIn0geworKwlzZXQgaW50ZXJwICIiCisgICAgIH0KKyAKKyAgICAgc2V0IGRlc3RzIHt9 CitAQCAtMTY0LDEzICsxNzIsMTkgQEAgcHJvYyBidWlsZF9leGVjdXRhYmxlX293bl9saWJzIHt0 ZXN0bmFtZQorIAorICAgICAjIERvIG5vdCBsYXBwZW5kIGl0IHNvIHRoYXQgIi1ycGF0aCAkZGly IiBvdmVycmlkZXMgYW55IHBvc3NpYmxlICItcnBhdGgicworICAgICAjIHNwZWNpZmllZCBieSB0 aGUgY2FsbGVyIHRvIGJlIGFibGUgdG8gbGluayBpdCBmb3IgbGRkIiBhYm92ZS4KKy0gICAgc2V0 IG9wdGlvbnMgW2xpbnNlcnQgJG9wdGlvbnMgMCAibGRmbGFncz0tV2wsLS1keW5hbWljLWxpbmtl ciwkaW50ZXJwLC1ycGF0aCwkZGlyIl0KKysgICAgc2V0IG9wdGlvbnMgW2xpbnNlcnQgJG9wdGlv bnMgMCAibGRmbGFncz0tV2wsLXJwYXRoLCRkaXIiXQorKyAgICBpZiB7JGludGVycCAhPSAiIn0g eworKwlzZXQgb3B0aW9ucyBbbGluc2VydCAkb3B0aW9ucyAwICJsZGZsYWdzPS1XbCwtLWR5bmFt aWMtbGlua2VyLCRpbnRlcnAiXQogKyAgICB9Ci0rfQotKwotK2lmIHsgJHVzaW5nX3Byb2JlcyB9 IHsKLSsgICAgIyBTZXQgdXAgYnJlYWtwb2ludHMuCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAi c2V0IHN0b3Atb24tc29saWItZXZlbnRzIDAiCi0rICAgIGdkYl90ZXN0ICJicmVhayBzdG9wIiB7 QnJlYWtwb2ludCBbMC05XSsgYXQgLip9Ci0rICAgIGdkYl90ZXN0X25vX291dHB1dCAic2V0IGJy ZWFrcG9pbnQgcGVuZGluZyBvbiIKLSsgICAgZ2RiX3Rlc3QgImJyZWFrIGZvbyIge0JyZWFrcG9p bnQgWzAtOV0rIFwoZm9vXCkgcGVuZGluZ1wufQotKwotKyAgICAjIENoZWNrIG91ciBsaWJyYXJ5 IGlzbid0IGxvYWRlZC4KLSsgICAgY2hlY2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFy eSAjMSIgMAotKwotKyAgICAjIFJ1biB0byB0aGUgZmlyc3Qgc3RvcCBhbmQgY2hlY2sgb3VyIGxp YnJhcnkgbG9hZGVkLgotKyAgICBnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBp biBzdG9wIFwoXCl9Ci0rICAgIGNoZWNrX2luZm9fc2hhcmVkICJpbmZvIHNoYXJlZGxpYnJhcnkg IzIiIDEKLSsKLSsgICAgIyBUaGUgbmV4dCBzdG9wIHNob3VsZCBiZSB0aGUgZnVuY3Rpb24gaW4g dGhlIGxpYnJhcnkuCi0rICAgIGdkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4qIGlu IGZvbyBcKFwpIGZyb20gLip9Ci0rCi0rICAgICMgUnVuIHRvIHRoZSBuZXh0IHN0b3AgYW5kIGNo ZWNrIG91ciBsaWJyYXJ5IGlzIG5vdyBsb2FkZWQgdHdpY2UuCi0rICAgIGdkYl90ZXN0ICJjIiB7 QnJlYWtwb2ludCBbMC05XSssIC4qIGluIHN0b3AgXChcKX0KLSsgICAgY2hlY2tfaW5mb19zaGFy ZWQgImluZm8gc2hhcmVkbGlicmFyeSAjMyIgMgotKwotKyAgICAjIFRoZSBuZXh0IHN0b3Agc2hv dWxkIGJlIHRoZSBmdW5jdGlvbiBpbiB0aGUgbGlicmFyeS4KLSsgICAgZ2RiX3Rlc3QgImMiIHtC cmVha3BvaW50IFswLTldKywgLiogaW4gZm9vIFwoXCkgZnJvbSAuKn0KLSsKLSsgICAgIyBSdW4g dG8gdGhlIG5leHQgc3RvcCBhbmQgY2hlY2sgb3VyIGxpYnJhcnkgaXMgbm93IGxvYWRlZCB0aHJl ZQotKyAgICAjIHRpbWVzLgotKyAgICBnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAu KiBpbiBzdG9wIFwoXCl9Ci0rICAgIGNoZWNrX2luZm9fc2hhcmVkICJpbmZvIHNoYXJlZGxpYnJh cnkgIzQiIDMKLSsKLSsgICAgIyBUaGUgbmV4dCBzdG9wIHNob3VsZCBiZSB0aGUgZnVuY3Rpb24g aW4gdGhlIGxpYnJhcnkuCi0rICAgIGdkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4q IGluIGZvbyBcKFwpIGZyb20gLip9Ci0rCi0rICAgICMgUnVuIHRvIHRoZSBuZXh0IHN0b3AgYW5k IGNoZWNrIG91ciBsaWJyYXJ5IGlzIG5vdyBsb2FkZWQgdHdpY2UuCi0rICAgIGdkYl90ZXN0ICJj IiB7QnJlYWtwb2ludCBbMC05XSssIC4qIGluIHN0b3AgXChcKX0KLSsgICAgY2hlY2tfaW5mb19z aGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjNSIgMgotKwotKyAgICAjIFJ1biB0byB0aGUgbmV4 dCBzdG9wIGFuZCBjaGVjayBvdXIgbGlicmFyeSBpcyBub3cgbG9hZGVkIG9uY2UuCi0rICAgIGdk Yl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4qIGluIHN0b3AgXChcKX0KLSsgICAgY2hl Y2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjNiIgMQotKwotKyAgICAjIFJ1biB0 byB0aGUgbmV4dCBzdG9wIGFuZCBjaGVjayBvdXIgbGlicmFyeSBpcyBub3QgbG9hZGVkLgotKyAg ICBnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9wIFwoXCl9Ci0rICAg IGNoZWNrX2luZm9fc2hhcmVkICJpbmZvIHNoYXJlZGxpYnJhcnkgIzciIDAKLSt9Ci1JbmRleDog Z2RiLTcuNS41MC4yMDEzMDIxNS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2JyZWFrLWludGVycC5l eHAKKyAKKyAgICAgaWYge1tidWlsZF9leGVjdXRhYmxlICR0ZXN0bmFtZSAkZXhlY3V0YWJsZSAk c291cmNlcyAkb3B0aW9uc10gPT0gLTF9IHsKKyAJcmV0dXJuICIiCisgICAgIH0KKyAKKy0gICAg c2V0IHByZWxpbmtfYXJncyAiLS1keW5hbWljLWxpbmtlcj0kaW50ZXJwIC0tbGQtbGlicmFyeS1w YXRoPSRkaXIgJGJpbmZpbGUgJGludGVycCBbY29uY2F0ICRkZXN0c10iCisrICAgIHNldCBwcmVs aW5rX2FyZ3MgIi0tbGQtbGlicmFyeS1wYXRoPSRkaXIgJGJpbmZpbGUgW2NvbmNhdCAkZGVzdHNd IgorKyAgICBpZiB7JGludGVycCAhPSAiIn0geworKwlzZXQgcHJlbGlua19hcmdzICItLWR5bmFt aWMtbGlua2VyPSRpbnRlcnAgJHByZWxpbmtfYXJncyAkaW50ZXJwIgorKyAgICB9CisgICAgIHJl dHVybiAkcHJlbGlua19hcmdzCisgfQorIAorSW5kZXg6IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9n ZGIuYmFzZS9icmVhay1pbnRlcnAuZXhwCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2RiLTcuNS41MC4yMDEz MDIxNS5vcmlnL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstaW50ZXJwLmV4cAkyMDEzLTAx LTAxIDA3OjMzOjI1LjAwMDAwMDAwMCArMDEwMAotKysrIGdkYi03LjUuNTAuMjAxMzAyMTUvZ2Ri L3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1pbnRlcnAuZXhwCTIwMTMtMDItMTUgMjI6Mzc6MzUu NzYyNDE3NTk4ICswMTAwCistLS0gZ2RiLTcuNi5vcmlnL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uv YnJlYWstaW50ZXJwLmV4cAkyMDEzLTA1LTE5IDE2OjA1OjM3Ljg4Mjg0MDY0NiArMDIwMAorKysr IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1pbnRlcnAuZXhwCTIwMTMtMDUt MTkgMTY6MDU6MzkuMTAxODM5OTc5ICswMjAwCiBAQCAtMTA5LDEyICsxMDksMTkgQEAgcHJvYyBz dHJpcF9kZWJ1ZyB7ZGVzdH0gewogICAgICB9CiAgfQpAQCAtMTU5MSw3MyArMjU1LDEzIEBAIElu ZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstaW50 ZXJwLmV4cAogIAogIAkgICAgIyBVc2UgdHdvIHNlcGFyYXRlIGdkYl90ZXN0X211bHRpcGxlIHN0 YXRlbWVudHMgdG8gYXZvaWQgdGltZW91dHMgZHVlCiAgCSAgICAjIHRvIHNsb3cgcHJvY2Vzc2lu ZyBvZiB3aWxkY2FyZCBjYXB0dXJpbmcgbG9uZyBvdXRwdXQKLUluZGV4OiBnZGItNy41LjUwLjIw MTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLXNvbGliLmMKLT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAK LSsrKyBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJv YmVzLXNvbGliLmMJMjAxMy0wMi0xNSAyMjozNzozNS43NjI0MTc1OTggKzAxMDAKLUBAIC0wLDAg KzEsMjQgQEAKLSsvKiBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rI2lu Y2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50Ci0rZm9vIChpbnQgbikKLSt7Ci0rICBwcmludGYgKCJm b28gJWRcbiIsIG4pOwotKwotKyAgcmV0dXJuIDA7Ci0rfQotSW5kZXg6IGdkYi03LjUuNTAuMjAx MzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1wcm9iZXMuYwotPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAotKysrIGdk Yi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1wcm9iZXMuYwky MDEzLTAyLTE1IDIyOjM3OjM1Ljc2MzQxNzYwMCArMDEwMAotQEAgLTAsMCArMSwyNiBAQAotKy8q IENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotKyAgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0rICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyAgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0rICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsK LSsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQotKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSsKLSsjaW5jbHVkZSA8ZGxmY24u aD4KLSsKLStpbnQKLSttYWluICgpCi0rewotKyAgdm9pZCAqaGFuZGxlID0gZGxvcGVuIChTSExJ Ql9OQU1FLCBSVExEX0xBWlkpOwotKwotKyAgZGxjbG9zZSAoaGFuZGxlKTsKLSsKLSsgIHJldHVy biAwOwotK30KLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJh c2UvYnJlYWstcHJvYmVzLmV4cAorSW5kZXg6IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhy ZWFkcy9kbG9wZW4tbGlicHRocmVhZC5leHAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSAvZGV2L251bGwJMTk3 MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy41LjUwLjIwMTMwMjE1 L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLmV4cAkyMDEzLTAyLTE1IDIyOjM3 OjM1Ljc2MzQxNzYwMCArMDEwMAotQEAgLTAsMCArMSw3NiBAQAotKyMgQ29weXJpZ2h0IDIwMTIg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCisrKysgZ2RiLTcuNi9nZGIvdGVzdHN1 aXRlL2dkYi50aHJlYWRzL2Rsb3Blbi1saWJwdGhyZWFkLmV4cAkyMDEzLTA1LTE5IDE2OjA1OjM5 LjEwMTgzOTk3OSArMDIwMAorQEAgLTAsMCArMSw3NCBAQAorKyMgQ29weXJpZ2h0IDIwMTEgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIwogKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICsjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CiArIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMTY3MSw3MyArMjc1LDczIEBAIEluZGV4OiBnZGItNy41 LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLmV4cAogKyMg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKICsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogKwotK2lmIHsgW3NraXBfc2hsaWJfdGVzdHNdIHx8 IFtpc19yZW1vdGUgdGFyZ2V0XSB9IHsKKytpZiB7IVtpc3RhcmdldCAqLWxpbnV4Kl0gfHwgW3Nr aXBfc2hsaWJfdGVzdHNdfSB7CiArICAgIHJldHVybiAwCiArfQogKwotK3N0YW5kYXJkX3Rlc3Rm aWxlCisrbG9hZF9saWIgcHJlbGluay1zdXBwb3J0LmV4cAogKwotK3NldCBsaWJuYW1lICR0ZXN0 ZmlsZS1zb2xpYgotK3NldCBzcmNmaWxlX2xpYiAkc3JjZGlyLyRzdWJkaXIvJGxpYm5hbWUuYwot K3NldCBiaW5maWxlX2xpYiBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJGxpYm5hbWUuc29dCisrc2V0 IHRlc3RmaWxlICJkbG9wZW4tbGlicHRocmVhZCIKKytzZXQgc3JjbWFpbmZpbGUgJHt0ZXN0Zmls ZX0uYworK3NldCBzcmNsaWJmaWxlICR7dGVzdGZpbGV9LWxpYi5jCisrc2V0IGV4ZWN1dGFibGUg JHt0ZXN0ZmlsZX0KKytzZXQgYmluZmlsZV9saWIgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke2V4ZWN1 dGFibGV9LnNvCisrc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke2V4ZWN1dGFibGV9 Cisrc2V0IGxpYl9kbG9wZW4gW3NobGliX3RhcmdldF9maWxlICR7ZXhlY3V0YWJsZX0uc29dCiAr Ci0rc2V0IG5vcm1hbF9icCAiX2RsX2RlYnVnX3N0YXRlIgotK3NldCBwcm9iZXNfYnAgImRsX21h aW4iCisrIyBVc2UgYnVpbGRfZXhlY3V0YWJsZV9vd25fbGlicyBhcyBwcmVsaW5rZWQgbGlicHRo cmVhZC5zbyBjYW4gcHJvZHVjZSBmYWxzZQorKyMgUEFTUyAtIGl0IGlzIE9LIGlmIEdEQiBwcm9j ZXNzZXMgaXQgc3RpbGwgYmVmb3JlIHJlbG9jYXRpb24uCiArCi0raWYgeyBbZ2RiX2NvbXBpbGVf c2hsaWIgJHNyY2ZpbGVfbGliICRiaW5maWxlX2xpYiBcCi0rCSAgW2xpc3QgYWRkaXRpb25hbF9m bGFncz0tZlBJQ11dICE9ICIiIH0gewotKyAgICB1bnRlc3RlZCAiQ291bGQgbm90IGNvbXBpbGUg JGJpbmZpbGVfbGliLiIKKytzZXQgcmVsaW5rX2FyZ3MgW2J1aWxkX2V4ZWN1dGFibGVfb3duX2xp YnMgJHt0ZXN0ZmlsZX0uZXhwICR7ZXhlY3V0YWJsZX0uc28gJHNyY2xpYmZpbGUge2RlYnVnIHNo bGliX3B0aHJlYWRzfSBub10KKytpZiB7JHJlbGlua19hcmdzID09ICIiIHx8ICFbcHJlbGlua19u byAkcmVsaW5rX2FyZ3NdCisrICAgIHx8IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9 LmV4cCAke2V4ZWN1dGFibGV9ICR7c3JjbWFpbmZpbGV9IHtkZWJ1ZyBzaGxpYl9sb2FkfV0gfSB7 CiArICAgIHJldHVybiAtMQogK30KKytnZGJfbG9hZF9zaGxpYnMgJGJpbmZpbGVfbGliCiArCi0r aWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAkdGVzdGZpbGUuZXhwICR0ZXN0ZmlsZSAkc3JjZmls ZSBcCi0rCSAgW2xpc3QgYWRkaXRpb25hbF9mbGFncz0tRFNITElCX05BTUVcPVwiJGJpbmZpbGVf bGliXCIgbGlicz0tbGRsXV0gfSB7CisraWYgeyAhW3J1bnRvX21haW5dIH0gewogKyAgICByZXR1 cm4gLTEKICt9CiArCi0rIyBFbmFibGUgc3RvcC1vbi1zb2xpYi1ldmVudHMKLStnZGJfdGVzdF9u b19vdXRwdXQgInNldCBzdG9wLW9uLXNvbGliLWV2ZW50cyAxIgotKwotKyMgUnVuIHRvIHRoZSBm aXJzdCBzdG9wCi0rZ2RiX3Rlc3QgInJ1biIgIi4qU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJh cnkgZXZlbnQuKiIKLSsKLSsjIFhGQUlMIGlmIHdlIGFyZSBub3QgdXNpbmcgcHJvYmVzCi0rc2V0 IHRlc3QgImVuc3VyZSB1c2luZyBwcm9iZXMiCi0rc2V0IHVzaW5nX3Byb2JlcyAwCi0rZ2RiX3Rl c3RfbXVsdGlwbGUgImJ0IiAkdGVzdCB7Ci0rICAgIC1yZSAiIzAgK1xbXlxyXG5cXSpcXG0oX19H SV8pPyRub3JtYWxfYnBcXE0uKiRnZGJfcHJvbXB0ICQiIHsKKytzZXQgdGVzdCAiaW5mbyBwcm9i ZXMgYWxsIHJ0bGQgcnRsZF9tYXBfY29tcGxldGUiCisrZ2RiX3Rlc3RfbXVsdGlwbGUgJHRlc3Qg JHRlc3QgeworKyAgICAtcmUgIlxbIFx0XF1ydGxkX21hcF9jb21wbGV0ZVxbIFx0XF0rMHhcWzAt OWEtZlxdKy4qXHJcbiRnZGJfcHJvbXB0ICQiIHsKKysJcGFzcyAkdGVzdAorKyAgICB9CisrICAg IC1yZSAiTm8gcHJvYmVzIG1hdGNoZWRcXC5cclxuJGdkYl9wcm9tcHQgJCIgewogKwl4ZmFpbCAk dGVzdAorKwl1bnRlc3RlZCAke3Rlc3RmaWxlfS5leHAKKysJcmV0dXJuCiArICAgIH0KLSsgICAg LXJlICIjMCArXFteXHJcblxdKlxcbShfX0dJXyk/JHByb2Jlc19icFxcTS4qJGdkYl9wcm9tcHQg JCIgeworK30KKysKKytzZXQgdGVzdCAibGlicHRocmVhZC5zbyBub3QgZm91bmQiCisrZ2RiX3Rl c3RfbXVsdGlwbGUgImluZm8gc2hhcmVkbGlicmFyeSIgJHRlc3QgeworKyAgICAtcmUgIi9saWJw dGhyZWFkXFwuc28uKlxyXG4kZ2RiX3Byb21wdCAkIiB7CisrCWZhaWwgJHRlc3QKKysgICAgfQor KyAgICAtcmUgIi9saWJjXFwuc28uKlxyXG4kZ2RiX3Byb21wdCAkIiB7CiArCXBhc3MgJHRlc3QK LSsJc2V0IHVzaW5nX3Byb2JlcyAxCiArICAgIH0KICt9CiArCi0raWYgeyAkdXNpbmdfcHJvYmVz IH0gewotKyAgICAjIFJ1biB0aWwgaXQgbG9hZHMgb3VyIGxpYnJhcnkKLSsgICAgc2V0IHRlc3Qg InJ1biB0aWwgb3VyIGxpYnJhcnkgbG9hZHMiCi0rICAgIHNldCBsb2FkZWRfbGlicmFyeSAwCi0r ICAgIHdoaWxlIHsgISRsb2FkZWRfbGlicmFyeSB9IHsKLSsJZ2RiX3Rlc3RfbXVsdGlwbGUgImMi ICR0ZXN0IHsKLSsJICAgIC1yZSAiSW5mZXJpb3IgbG9hZGVkICRiaW5maWxlX2xpYlxcTS4qJGdk Yl9wcm9tcHQgJCIgewotKwkJcGFzcyAkdGVzdAotKwkJc2V0IGxvYWRlZF9saWJyYXJ5IDEKLSsJ ICAgIH0KLSsJICAgIC1yZSAiU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZlbnRcXE0u KiRnZGJfcHJvbXB0ICQiIHsKLSsJICAgIH0KLSsJfQotKyAgICB9CisrZ2RiX3Rlc3QgInNldCB2 YXJpYWJsZSBmaWxlbmFtZT1cIiRsaWJfZGxvcGVuXCIiCiArCi0rICAgICMgQ2FsbCBzb21ldGhp bmcgdG8gZW5zdXJlIHRoYXQgcmVsb2NhdGlvbiBvY2N1cnJlZAotKyAgICBnZGJfdGVzdCAiY2Fs bCBmb28oMjMpIiAiZm9vIDIzLipcXFwkLiogPSAuKiIKLSt9Ci1JbmRleDogZ2RiLTcuNS41MC4y MDEzMDIxNS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLXNvbGliMS5jCisrZ2Ri X2JyZWFrcG9pbnQgIm5vdGlmeSIKKysKKysjIFRoZSBlcnJvciB3YXM6CisrIyBDYW5ub3QgZmlu ZCBuZXcgdGhyZWFkczogZ2VuZXJpYyBlcnJvcgorK2dkYl9jb250aW51ZV90b19icmVha3BvaW50 ICJub3RpZnkiICIuKiBub3RpZnktaGVyZSAuKiIKKysKKytnZGJfdGVzdCAiaW5mbyBzaGFyZWRs aWJyYXJ5IiB7L2xpYnB0aHJlYWRcLnNvLip9ICJsaWJwdGhyZWFkLnNvIGZvdW5kIgorSW5kZXg6 IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy9kbG9wZW4tbGlicHRocmVhZC5jCiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CiAtLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICsw MDAwCi0rKysgZ2RiLTcuNS41MC4yMDEzMDIxNS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8t c2hhcmVkLXNvbGliMS5jCTIwMTMtMDItMTUgMjI6Mzc6MzUuNzYzNDE3NjAwICswMTAwCi1AQCAt MCwwICsxLDI0IEBACi0rLyogQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisrKysgZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL2Rsb3Blbi1saWJw dGhyZWFkLmMJMjAxMy0wNS0xOSAxNjowNTozOS4xMDE4Mzk5NzkgKzAyMDAKK0BAIC0wLDAgKzEs NDYgQEAKKysvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2Vy LgorKworKyAgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgog KwogKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CiArICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE3NTIsNTAgKzM1Niw0MyBA QCBJbmRleDogZ2RiLTcuNS41MC4yMDEzMDIxNS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8t c2hhcmVkLXNvbGliMS5jCiArICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiArCi0r I2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGRsZmNuLmg+CisrI2luY2x1ZGUgPHN0ZGRl Zi5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KICsKLStpbnQKLStmb28gKGludCBuKQotK3sKLSsg IHByaW50ZiAoImZvbyAlZFxuIiwgbik7Cisrc3RhdGljIGNvbnN0IGNoYXIgKnZvbGF0aWxlIGZp bGVuYW1lOwogKwotKyAgcmV0dXJuIDA7Cisrc3RhdGljIHZvaWQKKytub3RpZnkgKHZvaWQpCisr eworKyAgZmlsZW5hbWUgPSBOVUxMOyAvKiBub3RpZnktaGVyZSAqLwogK30KLUluZGV4OiBnZGIt Ny41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvaW5mby1zaGFyZWQtc29saWIy LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAw MDAgKzAwMDAKLSsrKyBnZGItNy41LjUwLjIwMTMwMjE1L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uv aW5mby1zaGFyZWQtc29saWIyLmMJMjAxMy0wMi0xNSAyMjozNzozNS43NjM0MTc2MDAgKzAxMDAK LUBAIC0wLDAgKzEsMjQgQEAKLSsvKiBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKwotKyAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisraW50CisrbWFpbiAodm9pZCkKKyt7CisrICB2b2lkICpoOwor KyAgdm9pZCAoKmZwKSAodm9pZCAoKikgKHZvaWQpKTsKICsKLSsgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKysgIGFzc2VydCAoZmlsZW5hbWUgIT0gTlVMTCk7CisrICBoID0gZGxv cGVuIChmaWxlbmFtZSwgUlRMRF9MQVpZKTsKKysgIGFzc2VydCAoaCAhPSBOVUxMKTsKICsKLSsj aW5jbHVkZSA8c3RkaW8uaD4KKysgIGZwID0gZGxzeW0gKGgsICJmIik7CisrICBhc3NlcnQgKGZw ICE9IE5VTEwpOwogKwotK2ludAotK2JhciAoaW50IG4pCi0rewotKyAgcHJpbnRmICgiYmFyICVk XG4iLCBuKTsKKysgIGZwIChub3RpZnkpOwogKwogKyAgcmV0dXJuIDA7CiArfQotSW5kZXg6IGdk Yi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9pbmZvLXNoYXJlZC5jCitJ bmRleDogZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL2Rsb3Blbi1saWJwdGhyZWFk LWxpYi5jCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CiAtLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAw MDAwMDAwICswMDAwCi0rKysgZ2RiLTcuNS41MC4yMDEzMDIxNS9nZGIvdGVzdHN1aXRlL2dkYi5i YXNlL2luZm8tc2hhcmVkLmMJMjAxMy0wMi0xNSAyMjozNzozNS43NjM0MTc2MDAgKzAxMDAKLUBA IC0wLDAgKzEsNDggQEAKLSsvKiBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKysrKyBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvZGxvcGVuLWxp YnB0aHJlYWQtbGliLmMJMjAxMy0wNS0xOSAxNjowNTozOS4xMDE4Mzk5NzkgKzAyMDAKK0BAIC0w LDAgKzEsNDAgQEAKKysvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRl YnVnZ2VyLgorKworKyAgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgogKwogKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiArICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE4MTAsMTgwICs0 MDcsNjQgQEAgSW5kZXg6IGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFz ZS9pbmZvLXNoYXJlZC5jCiArICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiArCi0r I2luY2x1ZGUgPGRsZmNuLmg+CisrI2luY2x1ZGUgPHB0aHJlYWQuaD4KKysjaW5jbHVkZSA8YXNz ZXJ0Lmg+CiArCi0rdm9pZAotK3N0b3AgKCkKKytzdGF0aWMgdm9pZCAqCisrdGZ1bmMgKHZvaWQg KmFyZykKICt7CisrICB2b2lkICgqbm90aWZ5cCkgKHZvaWQpID0gYXJnOworKworKyAgbm90aWZ5 cCAoKTsKICt9CiArCi0raW50Ci0rbWFpbiAoKQorK3ZvaWQKKytmICh2b2lkICgqbm90aWZ5cCkg KHZvaWQpKQogK3sKLSsgIHZvaWQgKmhhbmRsZTEsICpoYW5kbGUyOwotKyAgdm9pZCAoKmZ1bmMp KGludCk7Ci0rCi0rICBoYW5kbGUxID0gZGxvcGVuIChTSExJQjFfTkFNRSwgUlRMRF9MQVpZKTsK LSsgIHN0b3AgKCk7Ci0rCi0rICBoYW5kbGUyID0gZGxvcGVuIChTSExJQjJfTkFNRSwgUlRMRF9M QVpZKTsKLSsgIHN0b3AgKCk7Ci0rCi0rICBmdW5jID0gKHZvaWQgKCopKGludCkpIGRsc3ltICho YW5kbGUxLCAiZm9vIik7Ci0rICBmdW5jICgxKTsKLSsKLSsgIGZ1bmMgPSAodm9pZCAoKikoaW50 KSkgZGxzeW0gKGhhbmRsZTIsICJiYXIiKTsKLSsgIGZ1bmMgKDIpOwotKwotKyAgZGxjbG9zZSAo aGFuZGxlMSk7Ci0rICBzdG9wICgpOworKyAgcHRocmVhZF90IHQ7CisrICBpbnQgaTsKICsKLSsg IGRsY2xvc2UgKGhhbmRsZTIpOwotKyAgc3RvcCAoKTsKKysgIGkgPSBwdGhyZWFkX2NyZWF0ZSAo JnQsIE5VTEwsIHRmdW5jLCBub3RpZnlwKTsKKysgIGFzc2VydCAoaSA9PSAwKTsKICsKLSsgIHJl dHVybiAwOworKyAgaSA9IHB0aHJlYWRfam9pbiAodCwgTlVMTCk7CisrICBhc3NlcnQgKGkgPT0g MCk7CiArfQotSW5kZXg6IGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFz ZS9pbmZvLXNoYXJlZC5leHAKK0luZGV4OiBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uv c29saWItY29ycnVwdGVkLmV4cAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAx IDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAotKysrIGdkYi03LjUuNTAuMjAxMzAyMTUvZ2RiL3Rl c3RzdWl0ZS9nZGIuYmFzZS9pbmZvLXNoYXJlZC5leHAJMjAxMy0wMi0xNSAyMjozNzozNS43NjQ0 MTc2MDIgKzAxMDAKLUBAIC0wLDAgKzEsMTM5IEBACi0rIyBDb3B5cmlnaHQgMjAxMiBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rIyBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQotKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKLSsjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0r IwotKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0rIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyMgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsjCi0rIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyMgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u Ci0rCi0raWYgeyBbc2tpcF9zaGxpYl90ZXN0c10gfHwgW2lzX3JlbW90ZSB0YXJnZXRdIH0gewot KyAgICByZXR1cm4gMAotK30KLSsKLStzdGFuZGFyZF90ZXN0ZmlsZQotKwotK3NldCBsaWIxbmFt ZSAkdGVzdGZpbGUtc29saWIxCi0rc2V0IHNyY2ZpbGVfbGliMSAkc3JjZGlyLyRzdWJkaXIvJGxp YjFuYW1lLmMKLStzZXQgYmluZmlsZV9saWIxIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAkbGliMW5h bWUuc29dCi0rc2V0IGRlZmluZTEgLURTSExJQjFfTkFNRVw9XCIkYmluZmlsZV9saWIxXCIKLSsK LStzZXQgbGliMm5hbWUgJHRlc3RmaWxlLXNvbGliMgotK3NldCBzcmNmaWxlX2xpYjIgJHNyY2Rp ci8kc3ViZGlyLyRsaWIybmFtZS5jCi0rc2V0IGJpbmZpbGVfbGliMiBbc3RhbmRhcmRfb3V0cHV0 X2ZpbGUgJGxpYjJuYW1lLnNvXQotK3NldCBkZWZpbmUyIC1EU0hMSUIyX05BTUVcPVwiJGJpbmZp bGVfbGliMlwiCi0rCi0raWYgeyBbZ2RiX2NvbXBpbGVfc2hsaWIgJHNyY2ZpbGVfbGliMSAkYmlu ZmlsZV9saWIxIFwKLSsJICBbbGlzdCBhZGRpdGlvbmFsX2ZsYWdzPS1mUElDXV0gIT0gIiIgfSB7 Ci0rICAgIHVudGVzdGVkICJDb3VsZCBub3QgY29tcGlsZSAkYmluZmlsZV9saWIxLiIKLSsgICAg cmV0dXJuIC0xCi0rfQotKwotK2lmIHsgW2dkYl9jb21waWxlX3NobGliICRzcmNmaWxlX2xpYjIg JGJpbmZpbGVfbGliMiBcCi0rCSAgW2xpc3QgYWRkaXRpb25hbF9mbGFncz0tZlBJQ11dICE9ICIi IH0gewotKyAgICB1bnRlc3RlZCAiQ291bGQgbm90IGNvbXBpbGUgJGJpbmZpbGVfbGliMi4iCi0r ICAgIHJldHVybiAtMQotK30KLSsKLStzZXQgY2ZsYWdzICIkZGVmaW5lMSAkZGVmaW5lMiIKLStp ZiB7IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICR0ZXN0ZmlsZS5leHAgJHRlc3RmaWxlICRzcmNmaWxl IFwKLSsJICBbbGlzdCBhZGRpdGlvbmFsX2ZsYWdzPSRjZmxhZ3MgbGlicz0tbGRsXV0gfSB7Ci0r ICAgIHJldHVybiAtMQotK30KLSsKLSsjIFJ1biAiaW5mbyBzaGFyZWRsaWJyYXJ5IiBhbmQgY2hl Y2sgZm9yIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mCi0rIyBvdXIgbGlicmFyaWVzLgotK3By b2MgY2hlY2tfaW5mb19zaGFyZWQgeyB0ZXN0IGV4cGVjdDEgZXhwZWN0MiB9IHsKLSsgICAgZ2xv YmFsIGxpYjFuYW1lCi0rICAgIGdsb2JhbCBsaWIybmFtZQotKyAgICBnbG9iYWwgZ2RiX3Byb21w dAotKwotKyAgICBzZXQgYWN0dWFsMSAwCi0rICAgIHNldCBhY3R1YWwyIDAKLSsKLSsgICAgZ2Ri X3Rlc3RfbXVsdGlwbGUgImluZm8gc2hhcmVkbGlicmFyeSIgJHRlc3QgewotKwktcmUgJGxpYjFu YW1lIHsKLSsJICAgIHNldCBhY3R1YWwxIDEKLSsJICAgIGV4cF9jb250aW51ZQotKwl9Ci0rCS1y ZSAkbGliMm5hbWUgewotKwkgICAgc2V0IGFjdHVhbDIgMQotKwkgICAgZXhwX2NvbnRpbnVlCi0r CX0KLSsJLXJlICJcclxuJGdkYl9wcm9tcHQgJCIgewotKwkgICAgaWYgeyAkYWN0dWFsMSA9PSAk ZXhwZWN0MSAmJiAkYWN0dWFsMiA9PSAkZXhwZWN0MiB9IHsKLSsJCXBhc3MgJHRlc3QKLSsJICAg IH0gZWxzZSB7Ci0rCQlmYWlsICR0ZXN0Ci0rCSAgICB9CistLS0gZ2RiLTcuNi5vcmlnL2dkYi90 ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItY29ycnVwdGVkLmV4cAkyMDEzLTA1LTE5IDE2OjA1OjM3 Ljg4Mzg0MDY0NSArMDIwMAorKysrIGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zb2xp Yi1jb3JydXB0ZWQuZXhwCTIwMTMtMDUtMTkgMTY6MDU6MzkuMTAyODM5OTc4ICswMjAwCitAQCAt MzYsNiArMzYsMzMgQEAgaWYgIVtydW50b19tYWluXSB7CisgICAgIHJldHVybgorIH0KKyAKKysj IFdpdGggcHJvYmVzIGludGVyZmFjZSBHREIgbm8gbG9uZ2VyIHNjYW5zIHRoZSBpbmZlcmlvciBs aWJyYXJ5IGxpc3Qgc28gaXRzCisrIyBjb3JydXB0aW9uIGNhbm5vdCBiZSB0ZXN0ZWQuICBUaGVy ZSBpcyBubyB3YXkgdG8gZGlzYWJsZSB0aGUgcHJvYmVzCisrIyBpbnRlcmZhY2UuCisrCisrc2V0 IHByb2JlcyB7IGluaXRfc3RhcnQgaW5pdF9jb21wbGV0ZSBtYXBfc3RhcnQgcmVsb2NfY29tcGxl dGUgdW5tYXBfc3RhcnQKKysJICAgICB1bm1hcF9jb21wbGV0ZSB9Cisrc2V0IHRlc3QgImluZm8g cHJvYmVzIgorK2dkYl90ZXN0X211bHRpcGxlICR0ZXN0ICR0ZXN0IHsKKysgICAgLXJlICJecnRs ZFxbIFx0XF0rKD86cnRsZF8pPyhcW2Etel9cXSspXFsgXHRcXSIgeworKwlzZXQgaWR4IFtsc2Vh cmNoIC1leGFjdCAkcHJvYmVzICRleHBlY3Rfb3V0KDEsc3RyaW5nKV0KKysJaWYgeyAkaWR4ID49 IDAgfSB7CisrCSAgICBzZXQgcHJvYmVzIFtscmVwbGFjZSAkcHJvYmVzICRpZHggJGlkeF0KICsJ fQotKyAgICB9Ci0rfQotKwotKyMgU2V0IHVwIGJyZWFrcG9pbnRzLgotK2dkYl90ZXN0ICJicmVh ayBzdG9wIiB7QnJlYWtwb2ludCBbMC05XSsgYXQgLip9Ci0rZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJz ZXQgYnJlYWtwb2ludCBwZW5kaW5nIG9uIgotK2dkYl90ZXN0ICJicmVhayBmb28iIHtCcmVha3Bv aW50IFswLTldKyBcKGZvb1wpIHBlbmRpbmdcLn0KLStnZGJfdGVzdCAiYnJlYWsgYmFyIiB7QnJl YWtwb2ludCBbMC05XSsgXChiYXJcKSBwZW5kaW5nXC59Ci0rCi0rIyBDaGVjayBuZWl0aGVyIG9m IHRoZSBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCB0aGUgc3RhcnQuCi0rZ2RiX3Rlc3QgInN0YXJ0 IiB7VGVtcG9yYXJ5IGJyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBtYWluIFwoXCl9Ci0rY2hlY2tf aW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjMSIgMCAwCi0rCi0rIyBSdW4gdG8gdGhl IGZpcnN0IHN0b3AgYW5kIGNoZWNrIHRoYXQgb25seSB0aGUgZmlyc3QgbGlicmFyeSBpcyBsb2Fk ZWQuCi0rZ2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFswLTldKywgLiogaW4gc3RvcCBcKFwpfQot K2NoZWNrX2luZm9fc2hhcmVkICJpbmZvIHNoYXJlZGxpYnJhcnkgIzIiIDEgMAotKwotKyMgUnVu IHRvIHRoZSBzZWNvbmQgc3RvcCBhbmQgY2hlY2sgdGhhdCBib3RoIGxpYnJhcmllcyBhcmUgbG9h ZGVkLgotK2dkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4qIGluIHN0b3AgXChcKX0K LStjaGVja19pbmZvX3NoYXJlZCAiaW5mbyBzaGFyZWRsaWJyYXJ5ICMzIiAxIDEKLSsKLSsjIENo ZWNrIHRoYXQgdGhlIG5leHQgc3RvcCBpcyBpbiBmb28uCi0rZ2RiX3Rlc3QgImMiIHtCcmVha3Bv aW50IFswLTldKywgLiogaW4gZm9vIFwoXCkgZnJvbSAuKn0KLSsKLSsjIENoZWNrIHRoYXQgdGhl IG5leHQgc3RvcCBpcyBpbiBiYXIuCi0rZ2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFswLTldKywg LiogaW4gYmFyIFwoXCkgZnJvbSAuKn0KLSsKLSsjIFJlc3RhcnQgdGhlIGluZmVyaW9yIGFuZCBt YWtlIHN1cmUgdGhlcmUgYXJlIG5vIGJyZWFrcG9pbnQgcmVzZXQKLSsjIGVycm9ycy4gIFRoZXNl IGNhbiBoYXBwZW4gd2l0aCB0aGUgcHJvYmVzLWJhc2VkIHJ1bnRpbWUgbGlua2VyCi0rIyBpbnRl cmZhY2UgaWYgdGhlIGNhY2hlIGlzIG5vdCBjbGVhcmVkIGNvcnJlY3RseS4KLStzZXQgdGVzdCAi cmVzdGFydCIKLStnZGJfdGVzdF9tdWx0aXBsZSAicnVuIiAkdGVzdCB7Ci0rICAgIC1yZSB7U3Rh cnQgaXQgZnJvbSB0aGUgYmVnaW5uaW5nXD8gXCh5IG9yIG5cKSB9IHsKLSsJc2VuZF9nZGIgInlc biIKICsJZXhwX2NvbnRpbnVlCiArICAgIH0KLSsgICAgLXJlIHtFcnJvciBpbiByZS1zZXR0aW5n IGJyZWFrcG9pbnR9IHsKLSsJZmFpbCAkdGVzdAorKyAgICAtcmUgIl5cW15cclxuXF0qXHJcbiIg eworKwlleHBfY29udGludWUKICsgICAgfQotKyAgICAtcmUgIlxyXG4kZ2RiX3Byb21wdCAkIiB7 Ci0rCXBhc3MgJHRlc3QKKysgICAgLXJlICJeJGdkYl9wcm9tcHQgJCIgewogKyAgICB9CiArfQor K2lmIHsgW2xsZW5ndGggJHByb2Jlc10gPT0gMCB9IHsKKysgICAgeGZhaWwgJHRlc3QKKysgICAg dW50ZXN0ZWQgIkdEQiBpcyB1c2luZyBwcm9iZXMiCisrICAgIHJldHVybgorK30KICsKLSsjIFdl J3JlIGF0IHRoZSBmaXJzdCBzdG9wLiAgQ2hlY2sgdGhhdCBvbmx5IHRoZSBmaXJzdCBsaWJyYXJ5 IGlzIGxvYWRlZC4KLStjaGVja19pbmZvX3NoYXJlZCAiaW5mbyBzaGFyZWRsaWJyYXJ5ICM0IiAx IDAKLSsKLSsjIFJ1biB0byB0aGUgc2Vjb25kIHN0b3AgYW5kIGNoZWNrIHRoYXQgYm90aCBsaWJy YXJpZXMgYXJlIGxvYWRlZC4KLStnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBp biBzdG9wIFwoXCl9Ci0rY2hlY2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjNSIg MSAxCi0rCi0rIyBDaGVjayB0aGF0IHRoZSBuZXh0IHN0b3AgaXMgaW4gZm9vLgotK2dkYl90ZXN0 ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4qIGluIGZvbyBcKFwpIGZyb20gLip9Ci0rCi0rIyBD aGVjayB0aGF0IHRoZSBuZXh0IHN0b3AgaXMgaW4gYmFyLgotK2dkYl90ZXN0ICJjIiB7QnJlYWtw b2ludCBbMC05XSssIC4qIGluIGJhciBcKFwpIGZyb20gLip9Ci0rCi0rIyBSdW4gdG8gdGhlIG5l eHQgc3RvcCBhbmQgY2hlY2sgdGhhdCB0aGUgZmlyc3QgbGlicmFyeSBoYXMgYmVlbiB1bmxvYWRl ZC4KLStnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9wIFwoXCl9Ci0r Y2hlY2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjNiIgMCAxCi0rCi0rIyBSdW4g dG8gdGhlIGxhc3Qgc3RvcCBhbmQgY2hlY2sgdGhhdCBib3RoIGxpYnJhcmllcyBhcmUgZ29uZS4K LStnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9wIFwoXCl9Ci0rY2hl Y2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjNyIgMCAwCisgZ2RiX3Rlc3QgImlu Zm8gc2hhcmVkbGlicmFyeSIgIkZyb20gKiBUbyAuKiIgIm5vcm1hbCBsaXN0IgorIAorICMgR0RC IGNoZWNrcyB0aGVyZSBmb3IgbWF0Y2hpbmcgTF9QUkVWLgoKZGlmZiAtLWdpdCBhL2dkYi1kbG9w ZW4tc3RhcC1wcm9iZS03b2Y3LnBhdGNoIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTdvZjcucGF0 Y2gKaW5kZXggOGYyYjQxOS4uMzAzNTdlOSAxMDA2NDQKLS0tIGEvZ2RiLWRsb3Blbi1zdGFwLXBy b2JlLTdvZjcucGF0Y2gKKysrIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTdvZjcucGF0Y2gKQEAg LTEsMTQ3ICsxLDQzNSBAQAotMjAxMi0wNy0zMCAgR2FyeSBCZW5zb24gIDxnYmVuc29uQHJlZGhh dC5jb20+CitodHRwOi8vc291cmNld2FyZS5vcmcvbWwvZ2RiLXBhdGNoZXMvMjAxMy0wNS9tc2cw MDYzMC5odG1sCitTdWJqZWN0OiBbUkZBIDcvN10gTGlua2VyLWRlYnVnZ2VyIGludGVyZmFjZSB0 ZXN0cwogCi0JKiBvYmpmaWxlcy5oIChpbmhpYml0X3NlY3Rpb25fbWFwX3VwZGF0ZXMpOiBOZXcg ZnVuY3Rpb24KLQlkZWNsYXJhdGlvbi4KLQkocmVzdW1lX3NlY3Rpb25fbWFwX3VwZGF0ZXMpOiBM aWtld2lzZS4KLQkocmVzdW1lX3NlY3Rpb25fbWFwX3VwZGF0ZXNfY2xlYW51cCk6IExpa2V3aXNl LgotCSogb2JqZmlsZXMuYyAob2JqZmlsZV9wc3BhY2VfaW5mbyk6IE5ldyBmaWVsZCAiaW5oaWJp dF91cGRhdGVzIi4KLQkoZmluZF9wY19zZWN0aW9uKTogRG8gbm90IHVwZGF0ZSB0aGUgc2VjdGlv biBtYXAgaWYKLQlpbmhpYml0X3VwZGF0ZXMgaXMgc2V0LgotCShpbmhpYml0X3NlY3Rpb25fbWFw X3VwZGF0ZXMpOiBOZXcgZnVuY3Rpb24uCi0JKHJlc3VtZV9zZWN0aW9uX21hcF91cGRhdGVzKTog TGlrZXdpc2UuCi0JKHJlc3VtZV9zZWN0aW9uX21hcF91cGRhdGVzX2NsZWFudXApOiBMaWtld2lz ZS4KLQkqIHNvbGliLXN2cjQuYyAoc3ZyNF9oYW5kbGVfc29saWJfZXZlbnQpOiBJbmhpYml0IHNl Y3Rpb24gbWFwCi0JdXBkYXRlcyBmb3IgY2FsbHMgdG8gZXZhbHVhdGVfcHJvYmVfYXJndW1lbnQu CiAKLUluZGV4OiBnZGItNy41LjUwLjIwMTMwMTE4L2dkYi9vYmpmaWxlcy5oCi09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLS0gZ2RiLTcuNS41MC4yMDEzMDExOC5vcmlnL2dkYi9vYmpmaWxlcy5oCTIwMTMtMDEtMTgg MjM6MTg6MTYuODYyMzE1NjczICswMTAwCi0rKysgZ2RiLTcuNS41MC4yMDEzMDExOC9nZGIvb2Jq ZmlsZXMuaAkyMDEzLTAxLTE4IDIzOjE4OjM2LjcwMjM0MzQ4MiArMDEwMAotQEAgLTUwOCw2ICs1 MDgsMjIgQEAgZXh0ZXJuIGludCBpbl9wbHRfc2VjdGlvbiAoQ09SRV9BRERSLCBjaAotICAgIG1v ZHVsZXMuICAqLwotIERFQ0xBUkVfUkVHSVNUUlkob2JqZmlsZSk7Ci0gCi0rLyogSW4gbm9ybWFs IHVzZSwgdGhlIHNlY3Rpb24gbWFwIHdpbGwgYmUgcmVidWlsdCBieSBGSU5EX1BDX1NFQ1RJT04K LSsgICBpZiBvYmpmaWxlcyBoYXZlIGJlZW4gYWRkZWQsIHJlbW92ZWQgb3IgcmVsb2NhdGVkIHNp bmNlIGl0IHdhcyBsYXN0Ci0rICAgY2FsbGVkLiAgQ2FsbGluZyBJTkhJQklUX1NFQ1RJT05fTUFQ X1VQREFURVMgd2lsbCBpbmhpYml0IHRoaXMKLSsgICBiZWhhdmlvciB1bnRpbCBSRVNVTUVfU0VD VElPTl9NQVBfVVBEQVRFUyBpcyBjYWxsZWQuICBJZiB5b3UgY2FsbAotKyAgIElOSElCSVRfU0VD VElPTl9NQVBfVVBEQVRFUyB5b3UgbXVzdCBlbnN1cmUgdGhhdCBldmVyeSBjYWxsIHRvCi0rICAg RklORF9QQ19TRUNUSU9OIGluIHRoZSBpbmhpYml0ZWQgcmVnaW9uIHJlbGF0ZXMgdG8gYSBzZWN0 aW9uIHRoYXQKLSsgICBpcyBhbHJlYWR5IGluIHRoZSBzZWN0aW9uIG1hcCBhbmQgaGFzIG5vdCBz aW5jZSBiZWVuIHJlbW92ZWQgb3IKLSsgICByZWxvY2F0ZWQuICAqLwotK2V4dGVybiB2b2lkIGlu aGliaXRfc2VjdGlvbl9tYXBfdXBkYXRlcyAodm9pZCk7Ci0rCi0rLyogUmVzdW1lIGF1dG9tYXRp Y2FsbHkgcmVidWlsZGluZyB0aGUgc2VjdGlvbiBtYXAgYXMgcmVxdWlyZWQuICAqLwotK2V4dGVy biB2b2lkIHJlc3VtZV9zZWN0aW9uX21hcF91cGRhdGVzICh2b2lkKTsKLSsKLSsvKiBWZXJzaW9u IG9mIHRoZSBhYm92ZSBzdWl0YWJsZSBmb3IgdXNlIGFzIGEgY2xlYW51cC4gICovCi0rZXh0ZXJu IHZvaWQgcmVzdW1lX3NlY3Rpb25fbWFwX3VwZGF0ZXNfY2xlYW51cCAodm9pZCAqYXJnKTsKLSsK LSBleHRlcm4gdm9pZCBkZWZhdWx0X2l0ZXJhdGVfb3Zlcl9vYmpmaWxlc19pbl9zZWFyY2hfb3Jk ZXIKLSAgIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLSAgICBpdGVyYXRlX292ZXJfb2JqZmls ZXNfaW5fc2VhcmNoX29yZGVyX2NiX2Z0eXBlICpjYiwKLUluZGV4OiBnZGItNy41LjUwLjIwMTMw MTE4L2dkYi9vYmpmaWxlcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2RiLTcuNS41MC4yMDEzMDExOC5v cmlnL2dkYi9vYmpmaWxlcy5jCTIwMTMtMDEtMTggMjM6MTg6MTMuNjQ3MzExMDA2ICswMTAwCi0r KysgZ2RiLTcuNS41MC4yMDEzMDExOC9nZGIvb2JqZmlsZXMuYwkyMDEzLTAxLTE4IDIzOjE4OjE2 Ljg2MjMxNTY3MyArMDEwMAotQEAgLTY5LDYgKzY5LDkgQEAgc3RydWN0IG9iamZpbGVfcHNwYWNl X2luZm8KLSAgIGludCBvYmpmaWxlc19jaGFuZ2VkX3A7Ci0gICBzdHJ1Y3Qgb2JqX3NlY3Rpb24g KipzZWN0aW9uczsKLSAgIGludCBudW1fc2VjdGlvbnM7Ci0rCi0rICAvKiBOb256ZXJvIGlmIHNl Y3Rpb24gbWFwIHVwZGF0ZXMgc2hvdWxkIGJlIGluaGliaXRlZC4gICovCi0rICBpbnQgaW5oaWJp dF91cGRhdGVzOwotIH07Ci0gCi0gLyogUGVyLXByb2dyYW0tc3BhY2UgZGF0YSBrZXkuICAqLwot QEAgLTEzNTYsNyArMTM1OSw3IEBAIGZpbmRfcGNfc2VjdGlvbiAoQ09SRV9BRERSIHBjKQotICAg ICByZXR1cm4gczsKLSAKLSAgIHBzcGFjZV9pbmZvID0gZ2V0X29iamZpbGVfcHNwYWNlX2RhdGEg KGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSk7Ci0tICBpZiAocHNwYWNlX2luZm8tPm9iamZpbGVzX2No YW5nZWRfcCAhPSAwKQotKyAgaWYgKHBzcGFjZV9pbmZvLT5vYmpmaWxlc19jaGFuZ2VkX3AgJiYg IXBzcGFjZV9pbmZvLT5pbmhpYml0X3VwZGF0ZXMpCi0gICAgIHsKLSAgICAgICB1cGRhdGVfc2Vj dGlvbl9tYXAgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSwKLSAJCQkgICZwc3BhY2VfaW5mby0+c2Vj dGlvbnMsCi1AQCAtMTQxNSw2ICsxNDE4LDMwIEBAIG9iamZpbGVzX2NoYW5nZWQgKHZvaWQpCi0g ICBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9ncmFtX3NwYWNlKS0+b2JqZmls ZXNfY2hhbmdlZF9wID0gMTsKLSB9Ci0gCi0rLyogU2VlIGNvbW1lbnRzIGluIG9iamZpbGVzLmgu ICAqLworLS1EQ0EvQzlXU25EdGw1MHp1CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJz ZXQ9dXMtYXNjaWkKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorCitUaGlzIHBhdGNoIGFk ZHMgc29tZSB0ZXN0Y2FzZXMgZm9yIHRoZSBsaW5rZXItZGVidWdnZXIgaW50ZXJmYWNlLgorCist LURDQS9DOVdTbkR0bDUwenUKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1h c2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9InJ0bGQtcHJv YmVzLTctdGVzdHMtZ2IucGF0Y2giCisKKzIwMTMtMDUtMTYgIEdhcnkgQmVuc29uICA8Z2JlbnNv bkByZWRoYXQuY29tPgorCisJKiBnZGIuYmFzZS9icmVhay1wcm9iZXMuZXhwOiBOZXcgZmlsZS4K KwkqIGdkYi5iYXNlL2JyZWFrLXByb2Jlcy5jOiBMaWtld2lzZS4KKwkqIGdkYi5iYXNlL2JyZWFr LXByb2Jlcy1zb2xpYi5jOiBMaWtld2lzZS4KKwkqIGdkYi5iYXNlL2luZm8tc2hhcmVkLmV4cDog TmV3IGZpbGUuCisJKiBnZGIuYmFzZS9pbmZvLXNoYXJlZC5jOiBMaWtld2lzZS4KKwkqIGdkYi5i YXNlL2luZm8tc2hhcmVkLXNvbGliMS5jOiBMaWtld2lzZS4KKwkqIGdkYi5iYXNlL2luZm8tc2hh cmVkLXNvbGliMi5jOiBMaWtld2lzZS4KKworZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2Ri LmJhc2UvYnJlYWstcHJvYmVzLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJv YmVzLmV4cAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjgzNzI2MzYKKy0t LSAvZGV2L251bGwKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLmV4 cAorQEAgLTAsMCArMSw3NyBAQAorKyMgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCiArCi0rdm9pZAotK2luaGliaXRfc2VjdGlvbl9tYXBfdXBkYXRlcyAodm9p ZCkKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor KyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisraWYgeyBbc2tpcF9zaGxpYl90 ZXN0c10gfSB7CisrICAgIHJldHVybiAwCisrfQorKworK3N0YW5kYXJkX3Rlc3RmaWxlCisrCisr c2V0IGxpYm5hbWUgJHRlc3RmaWxlLXNvbGliCisrc2V0IHNyY2ZpbGVfbGliICRzcmNkaXIvJHN1 YmRpci8kbGlibmFtZS5jCisrc2V0IGJpbmZpbGVfbGliIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAk bGlibmFtZS5zb10KKysKKytzZXQgbm9ybWFsX2JwICJfZGxfZGVidWdfc3RhdGUiCisrc2V0IHBy b2Jlc19icCAiZGxfbWFpbiIKKysKKytpZiB7IFtnZGJfY29tcGlsZV9zaGxpYiAkc3JjZmlsZV9s aWIgJGJpbmZpbGVfbGliIFwKKysJICBbbGlzdCBhZGRpdGlvbmFsX2ZsYWdzPS1mUElDXV0gIT0g IiIgfSB7CisrICAgIHVudGVzdGVkICJDb3VsZCBub3QgY29tcGlsZSAkYmluZmlsZV9saWIuIgor KyAgICByZXR1cm4gLTEKKyt9CisrCisraWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAkdGVzdGZp bGUuZXhwICR0ZXN0ZmlsZSAkc3JjZmlsZSBcCisrCSAgW2xpc3QgYWRkaXRpb25hbF9mbGFncz0t RFNITElCX05BTUVcPVwiJGJpbmZpbGVfbGliXCIgbGlicz0tbGRsXV0gfSB7CisrICAgIHJldHVy biAtMQorK30KKysKKysjIEVuYWJsZSBzdG9wLW9uLXNvbGliLWV2ZW50cworK2dkYl90ZXN0X25v X291dHB1dCAic2V0IHN0b3Atb24tc29saWItZXZlbnRzIDEiCisrCisrIyBTdGFydCB0aGUgaW5m ZXJpb3IgYW5kIHJ1biB0byB0aGUgZmlyc3Qgc3RvcAorK2dkYl9ydW5fY21kCisrZ2RiX3Rlc3Qg IiIgIi4qU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZlbnQuKiIKKysKKysjIFhGQUlM IGlmIHdlIGFyZSBub3QgdXNpbmcgcHJvYmVzCisrc2V0IHRlc3QgImVuc3VyZSB1c2luZyBwcm9i ZXMiCisrc2V0IHVzaW5nX3Byb2JlcyAwCisrZ2RiX3Rlc3RfbXVsdGlwbGUgImJ0IiAkdGVzdCB7 CisrICAgIC1yZSAiIzAgK1xbXlxyXG5cXSpcXG0oX19HSV8pPyRub3JtYWxfYnBcXE0uKiRnZGJf cHJvbXB0ICQiIHsKKysJeGZhaWwgJHRlc3QKKysgICAgfQorKyAgICAtcmUgIiMwICtcW15cclxu XF0qXFxtKF9fR0lfKT8kcHJvYmVzX2JwXFxNLiokZ2RiX3Byb21wdCAkIiB7CisrCXBhc3MgJHRl c3QKKysJc2V0IHVzaW5nX3Byb2JlcyAxCisrICAgIH0KKyt9CisrCisraWYgeyAkdXNpbmdfcHJv YmVzIH0geworKyAgICAjIFJ1biB0aWwgaXQgbG9hZHMgb3VyIGxpYnJhcnkKKysgICAgc2V0IHRl c3QgInJ1biB0aWwgb3VyIGxpYnJhcnkgbG9hZHMiCisrICAgIHNldCBsb2FkZWRfbGlicmFyeSAw CisrICAgIHdoaWxlIHsgISRsb2FkZWRfbGlicmFyeSB9IHsKKysJZ2RiX3Rlc3RfbXVsdGlwbGUg ImMiICR0ZXN0IHsKKysJICAgIC1yZSAiSW5mZXJpb3IgbG9hZGVkICRiaW5maWxlX2xpYlxcTS4q JGdkYl9wcm9tcHQgJCIgeworKwkJcGFzcyAkdGVzdAorKwkJc2V0IGxvYWRlZF9saWJyYXJ5IDEK KysJICAgIH0KKysJICAgIC1yZSAiU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZlbnRc XE0uKiRnZGJfcHJvbXB0ICQiIHsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICAgICMgQ2Fs bCBzb21ldGhpbmcgdG8gZW5zdXJlIHRoYXQgcmVsb2NhdGlvbiBvY2N1cnJlZAorKyAgICBnZGJf dGVzdCAiY2FsbCBmb28oMjMpIiAiXFxcJC4qID0gMzEuKlxcXE0uKiIKKyt9CitkaWZmIC0tZ2l0 IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1wcm9iZXMuYyBiL2dkYi90ZXN0c3VpdGUv Z2RiLmJhc2UvYnJlYWstcHJvYmVzLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAw MDAwLi5hNzc4MDk5CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNl L2JyZWFrLXByb2Jlcy5jCitAQCAtMCwwICsxLDI2IEBACisrLyogQ29weXJpZ2h0IDIwMTMgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworKworKyNpbmNsdWRlIDxkbGZjbi5oPgorKworK2ludAorK21haW4g KCkKICt7Ci0rICBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9ncmFtX3NwYWNl KS0+aW5oaWJpdF91cGRhdGVzID0gMTsKKysgIHZvaWQgKmhhbmRsZSA9IGRsb3BlbiAoU0hMSUJf TkFNRSwgUlRMRF9MQVpZKTsKKysKKysgIGRsY2xvc2UgKGhhbmRsZSk7CisrCisrICByZXR1cm4g MDsKICt9CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1wcm9iZXMt c29saWIuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJvYmVzLXNvbGliLmMKK25l dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iZGRlMmRiCistLS0gL2Rldi9udWxs CisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2JyZWFrLXByb2Jlcy1zb2xpYi5jCitAQCAt MCwwICsxLDIyIEBACisrLyogQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCiArCi0rLyogU2VlIGNvbW1lbnRzIGluIG9iamZpbGVzLmguICAqLworKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCiArCi0rdm9pZAotK3Jlc3VtZV9zZWN0aW9uX21hcF91cGRh dGVzICh2b2lkKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysg ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4gICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50CisrZm9v IChpbnQgbikKICt7Ci0rICBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9ncmFt X3NwYWNlKS0+aW5oaWJpdF91cGRhdGVzID0gMDsKKysgIHJldHVybiBuICogbiAvIDE3OworK30K K2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLmV4cCBiL2dk Yi90ZXN0c3VpdGUvZ2RiLmJhc2UvaW5mby1zaGFyZWQuZXhwCituZXcgZmlsZSBtb2RlIDEwMDY0 NAoraW5kZXggMDAwMDAwMC4uMWRhYmI5ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9pbmZvLXNoYXJlZC5leHAKK0BAIC0wLDAgKzEsMTQ1IEBACisrIyBDb3B5 cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisrCisraWYgeyBbc2tpcF9zaGxpYl90ZXN0c10gfSB7CisrICAg IHJldHVybiAwCisrfQorKworK3N0YW5kYXJkX3Rlc3RmaWxlCisrCisrc2V0IGxpYjFuYW1lICR0 ZXN0ZmlsZS1zb2xpYjEKKytzZXQgc3JjZmlsZV9saWIxICRzcmNkaXIvJHN1YmRpci8kbGliMW5h bWUuYworK3NldCBiaW5maWxlX2xpYjEgW3N0YW5kYXJkX291dHB1dF9maWxlICRsaWIxbmFtZS5z b10KKytzZXQgZGVmaW5lMSAtRFNITElCMV9OQU1FXD1cIiRiaW5maWxlX2xpYjFcIgorKworK3Nl dCBsaWIybmFtZSAkdGVzdGZpbGUtc29saWIyCisrc2V0IHNyY2ZpbGVfbGliMiAkc3JjZGlyLyRz dWJkaXIvJGxpYjJuYW1lLmMKKytzZXQgYmluZmlsZV9saWIyIFtzdGFuZGFyZF9vdXRwdXRfZmls ZSAkbGliMm5hbWUuc29dCisrc2V0IGRlZmluZTIgLURTSExJQjJfTkFNRVw9XCIkYmluZmlsZV9s aWIyXCIKKysKKytpZiB7IFtnZGJfY29tcGlsZV9zaGxpYiAkc3JjZmlsZV9saWIxICRiaW5maWxl X2xpYjEgXAorKwkgIFtsaXN0IGFkZGl0aW9uYWxfZmxhZ3M9LWZQSUNdXSAhPSAiIiB9IHsKKysg ICAgdW50ZXN0ZWQgIkNvdWxkIG5vdCBjb21waWxlICRiaW5maWxlX2xpYjEuIgorKyAgICByZXR1 cm4gLTEKKyt9CisrCisraWYgeyBbZ2RiX2NvbXBpbGVfc2hsaWIgJHNyY2ZpbGVfbGliMiAkYmlu ZmlsZV9saWIyIFwKKysJICBbbGlzdCBhZGRpdGlvbmFsX2ZsYWdzPS1mUElDXV0gIT0gIiIgfSB7 CisrICAgIHVudGVzdGVkICJDb3VsZCBub3QgY29tcGlsZSAkYmluZmlsZV9saWIyLiIKKysgICAg cmV0dXJuIC0xCisrfQorKworK3NldCBjZmxhZ3MgIiRkZWZpbmUxICRkZWZpbmUyIgorK2lmIHsg W3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHRlc3RmaWxlLmV4cCAkdGVzdGZpbGUgJHNyY2ZpbGUgXAor KwkgIFtsaXN0IGFkZGl0aW9uYWxfZmxhZ3M9JGNmbGFncyBsaWJzPS1sZGxdXSB9IHsKKysgICAg cmV0dXJuIC0xCisrfQorKworKyMgUnVuICJpbmZvIHNoYXJlZGxpYnJhcnkiIGFuZCBjaGVjayBm b3IgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YKKysjIG91ciBsaWJyYXJpZXMuCisrcHJvYyBj aGVja19pbmZvX3NoYXJlZCB7IHRlc3QgZXhwZWN0MSBleHBlY3QyIH0geworKyAgICBnbG9iYWwg bGliMW5hbWUKKysgICAgZ2xvYmFsIGxpYjJuYW1lCisrICAgIGdsb2JhbCBnZGJfcHJvbXB0Cisr CisrICAgIHNldCBhY3R1YWwxIDAKKysgICAgc2V0IGFjdHVhbDIgMAorKworKyAgICBnZGJfdGVz dF9tdWx0aXBsZSAiaW5mbyBzaGFyZWRsaWJyYXJ5IiAkdGVzdCB7CisrCS1yZSAkbGliMW5hbWUg eworKwkgICAgc2V0IGFjdHVhbDEgMQorKwkgICAgZXhwX2NvbnRpbnVlCisrCX0KKysJLXJlICRs aWIybmFtZSB7CisrCSAgICBzZXQgYWN0dWFsMiAxCisrCSAgICBleHBfY29udGludWUKKysJfQor KwktcmUgIlxyXG4kZ2RiX3Byb21wdCAkIiB7CisrCSAgICBpZiB7ICRhY3R1YWwxID09ICRleHBl Y3QxICYmICRhY3R1YWwyID09ICRleHBlY3QyIH0geworKwkJcGFzcyAkdGVzdAorKwkgICAgfSBl bHNlIHsKKysJCWZhaWwgJHRlc3QKKysJICAgIH0KKysJfQorKyAgICB9CisrfQorKworKyMgU3Rh cnQgdGhlIGluZmVyaW9yLCBhbmQgY2hlY2sgbmVpdGhlciBvZiB0aGUgbGlicmFyaWVzIGFyZSBs b2FkZWQgYXQKKysjIHRoZSBzdGFydC4KKytydW50b19tYWluCisrY2hlY2tfaW5mb19zaGFyZWQg ImluZm8gc2hhcmVkbGlicmFyeSAjMSIgMCAwCisrCisrIyBTZXQgdXAgYnJlYWtwb2ludHMuCisr Z2RiX3Rlc3QgImJyZWFrIHN0b3AiIHtCcmVha3BvaW50IFswLTldKyBhdCAuKn0KKytnZGJfdGVz dF9ub19vdXRwdXQgInNldCBicmVha3BvaW50IHBlbmRpbmcgb24iCisrZ2RiX3Rlc3QgImJyZWFr IGZvbyIge0JyZWFrcG9pbnQgWzAtOV0rIFwoZm9vXCkgcGVuZGluZ1wufQorK2dkYl90ZXN0ICJi cmVhayBiYXIiIHtCcmVha3BvaW50IFswLTldKyBcKGJhclwpIHBlbmRpbmdcLn0KKysKKysjIFJ1 biB0byB0aGUgZmlyc3Qgc3RvcCBhbmQgY2hlY2sgdGhhdCBvbmx5IHRoZSBmaXJzdCBsaWJyYXJ5 IGlzIGxvYWRlZC4KKytnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBzdG9w IFwoXCl9CisrY2hlY2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVkbGlicmFyeSAjMiIgMSAwCisr CisrIyBSdW4gdG8gdGhlIHNlY29uZCBzdG9wIGFuZCBjaGVjayB0aGF0IGJvdGggbGlicmFyaWVz IGFyZSBsb2FkZWQuCisrZ2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFswLTldKywgLiogaW4gc3Rv cCBcKFwpfQorK2NoZWNrX2luZm9fc2hhcmVkICJpbmZvIHNoYXJlZGxpYnJhcnkgIzMiIDEgMQor KworKyMgQ2hlY2sgdGhhdCB0aGUgbmV4dCBzdG9wIGlzIGluIGZvby4KKytnZGJfdGVzdCAiYyIg e0JyZWFrcG9pbnQgWzAtOV0rLCAuKiBpbiBmb28gXChcKSBmcm9tIC4qfQorKworKyMgQ2hlY2sg dGhhdCB0aGUgbmV4dCBzdG9wIGlzIGluIGJhci4KKytnZGJfdGVzdCAiYyIge0JyZWFrcG9pbnQg WzAtOV0rLCAuKiBpbiBiYXIgXChcKSBmcm9tIC4qfQorKworKyMgUmVzdGFydCB0aGUgaW5mZXJp b3IgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gYnJlYWtwb2ludCByZXNldAorKyMgZXJyb3Jz LiAgVGhlc2UgY2FuIGhhcHBlbiB3aXRoIHRoZSBwcm9iZXMtYmFzZWQgcnVudGltZSBsaW5rZXIK KysjIGludGVyZmFjZSBpZiB0aGUgY2FjaGUgaXMgbm90IGNsZWFyZWQgY29ycmVjdGx5LgorK3Nl dCB0ZXN0ICJyZXN0YXJ0IgorK2dkYl9ydW5fY21kCisrZ2RiX3Rlc3RfbXVsdGlwbGUgIiIgJHRl c3QgeworKyAgICAtcmUge1N0YXJ0IGl0IGZyb20gdGhlIGJlZ2lubmluZ1w/IFwoeSBvciBuXCkg fSB7CisrCXNlbmRfZ2RiICJ5XG4iCisrCWV4cF9jb250aW51ZQorKyAgICB9CisrICAgIC1yZSB7 RXJyb3IgaW4gcmUtc2V0dGluZyBicmVha3BvaW50fSB7CisrCWZhaWwgJHRlc3QKKysgICAgfQor KyAgICAtcmUgIlxyXG4kZ2RiX3Byb21wdCAkIiB7CisrCXBhc3MgJHRlc3QKKysgICAgfQogK30K ICsKLSsvKiBTZWUgY29tbWVudHMgaW4gb2JqZmlsZXMuaC4gICovCisrIyBDaGVjayB0aGF0IG5l aXRoZXIgbGlicmFyeSBpcyBsb2FkZWQuCisrY2hlY2tfaW5mb19zaGFyZWQgImluZm8gc2hhcmVk bGlicmFyeSAjNCIgMCAwCisrCisrIyBSdW4gdG8gdGhlIGZpcnN0IHN0b3AgYW5kIGNoZWNrIHRo YXQgb25seSB0aGUgZmlyc3QgbGlicmFyeSBpcyBsb2FkZWQuCisrZ2RiX3Rlc3QgImMiIHtCcmVh a3BvaW50IFswLTldKywgLiogaW4gc3RvcCBcKFwpfQorK2NoZWNrX2luZm9fc2hhcmVkICJpbmZv IHNoYXJlZGxpYnJhcnkgIzUiIDEgMAorKworKyMgUnVuIHRvIHRoZSBzZWNvbmQgc3RvcCBhbmQg Y2hlY2sgdGhhdCBib3RoIGxpYnJhcmllcyBhcmUgbG9hZGVkLgorK2dkYl90ZXN0ICJjIiB7QnJl YWtwb2ludCBbMC05XSssIC4qIGluIHN0b3AgXChcKX0KKytjaGVja19pbmZvX3NoYXJlZCAiaW5m byBzaGFyZWRsaWJyYXJ5ICM2IiAxIDEKKysKKysjIENoZWNrIHRoYXQgdGhlIG5leHQgc3RvcCBp cyBpbiBmb28uCisrZ2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFswLTldKywgLiogaW4gZm9vIFwo XCkgZnJvbSAuKn0KKysKKysjIENoZWNrIHRoYXQgdGhlIG5leHQgc3RvcCBpcyBpbiBiYXIuCisr Z2RiX3Rlc3QgImMiIHtCcmVha3BvaW50IFswLTldKywgLiogaW4gYmFyIFwoXCkgZnJvbSAuKn0K KysKKysjIFJ1biB0byB0aGUgbmV4dCBzdG9wIGFuZCBjaGVjayB0aGF0IHRoZSBmaXJzdCBsaWJy YXJ5IGhhcyBiZWVuIHVubG9hZGVkLgorK2dkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSss IC4qIGluIHN0b3AgXChcKX0KKytjaGVja19pbmZvX3NoYXJlZCAiaW5mbyBzaGFyZWRsaWJyYXJ5 ICM3IiAwIDEKKysKKysjIFJ1biB0byB0aGUgbGFzdCBzdG9wIGFuZCBjaGVjayB0aGF0IGJvdGgg bGlicmFyaWVzIGFyZSBnb25lLgorK2dkYl90ZXN0ICJjIiB7QnJlYWtwb2ludCBbMC05XSssIC4q IGluIHN0b3AgXChcKX0KKytjaGVja19pbmZvX3NoYXJlZCAiaW5mbyBzaGFyZWRsaWJyYXJ5ICM4 IiAwIDAKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLmMg Yi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLmMKK25ldyBmaWxlIG1vZGUgMTAw NjQ0CitpbmRleCAwMDAwMDAwLi5kNjk5YTExCistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVz dHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLmMKK0BAIC0wLDAgKzEsNDggQEAKKysvKiBDb3B5 cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrI2luY2x1ZGUgPGRsZmNuLmg+CiAr CiArdm9pZAotK3Jlc3VtZV9zZWN0aW9uX21hcF91cGRhdGVzX2NsZWFudXAgKHZvaWQgKmFyZykK KytzdG9wICgpCisreworK30KKysKKytpbnQKKyttYWluICgpCisreworKyAgdm9pZCAqaGFuZGxl MSwgKmhhbmRsZTI7CisrICB2b2lkICgqZnVuYykoaW50KTsKKysKKysgIGhhbmRsZTEgPSBkbG9w ZW4gKFNITElCMV9OQU1FLCBSVExEX0xBWlkpOworKyAgc3RvcCAoKTsKKysKKysgIGhhbmRsZTIg PSBkbG9wZW4gKFNITElCMl9OQU1FLCBSVExEX0xBWlkpOworKyAgc3RvcCAoKTsKKysKKysgIGZ1 bmMgPSAodm9pZCAoKikoaW50KSkgZGxzeW0gKGhhbmRsZTEsICJmb28iKTsKKysgIGZ1bmMgKDEp OworKworKyAgZnVuYyA9ICh2b2lkICgqKShpbnQpKSBkbHN5bSAoaGFuZGxlMiwgImJhciIpOwor KyAgZnVuYyAoMik7CisrCisrICBkbGNsb3NlIChoYW5kbGUxKTsKKysgIHN0b3AgKCk7CisrCisr ICBkbGNsb3NlIChoYW5kbGUyKTsKKysgIHN0b3AgKCk7CisrCisrICByZXR1cm4gMDsKKyt9Citk aWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9pbmZvLXNoYXJlZC1zb2xpYjEuYyBi L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvaW5mby1zaGFyZWQtc29saWIxLmMKK25ldyBmaWxlIG1v ZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45OTc5ZWU3CistLS0gL2Rldi9udWxsCisrKysgYi9n ZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tc2hhcmVkLXNvbGliMS5jCitAQCAtMCwwICsxLDI0 IEBACisrLyogQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisr CisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKyNpbmNsdWRl IDxzdGRpby5oPgorKworK2ludAorK2ZvbyAoaW50IG4pCiArewotKyAgcmVzdW1lX3NlY3Rpb25f bWFwX3VwZGF0ZXMgKCk7Ci0rfQotKwotIC8qIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZv ciB0aGUgIml0ZXJhdGVfb3Zlcl9vYmpmaWxlc19pbl9zZWFyY2hfb3JkZXIiCi0gICAgZ2RiYXJj aCBtZXRob2QuICBJdCBpcyBlcXVpdmFsZW50IHRvIHVzZSB0aGUgQUxMX09CSkZJTEVTIG1hY3Jv LAotICAgIHNlYXJjaGluZyB0aGUgb2JqZmlsZXMgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHN0b3Jl ZCBpbnRlcm5hbGx5LAotSW5kZXg6IGdkYi03LjUuNTAuMjAxMzAxMTgvZ2RiL3NvbGliLXN2cjQu YwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0tIGdkYi03LjUuNTAuMjAxMzAxMTgub3JpZy9nZGIvc29saWItc3Zy NC5jCTIwMTMtMDEtMTggMjM6MTg6MTMuNjQ5MzExMDEwICswMTAwCi0rKysgZ2RiLTcuNS41MC4y MDEzMDExOC9nZGIvc29saWItc3ZyNC5jCTIwMTMtMDEtMTggMjM6MTg6MTYuODYzMzE1Njc1ICsw MTAwCi1AQCAtMTg0OSw2ICsxODQ5LDcgQEAgc3ZyNF9oYW5kbGVfc29saWJfZXZlbnQgKGJwc3Rh dCBicykKLSAgIHN0cnVjdCBzdnI0X2luZm8gKmluZm8gPSBnZXRfc3ZyNF9pbmZvICgpOwotICAg c3RydWN0IHByb2JlX2FuZF9pbmZvIGJ1ZiwgKnBpID0gJmJ1ZjsKLSAgIGVudW0gcHJvYmVfYWN0 aW9uIGFjdGlvbjsKLSsgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwcyA9IE5VTEw7Ci0gICBzdHJ1 Y3QgdmFsdWUgKnZhbDsKLSAgIExPTkdFU1QgbG1pZDsKLSAgIENPUkVfQUREUiBkZWJ1Z19iYXNl LCBsbSA9IDA7Ci1AQCAtMTg3Miw2ICsxODczLDE5IEBAIHN2cjRfaGFuZGxlX3NvbGliX2V2ZW50 IChicHN0YXQgYnMpCi0gICBpZiAoYWN0aW9uID09IE5BTUVTUEFDRV9OT19BQ1RJT04pCi0gICAg IHJldHVybjsKLSAKLSsgIC8qIEVWQUxVQVRFX1BST0JFX0FSR1VNRU5UIGxvb2tzIHVwIHN5bWJv bHMgaW4gdGhlIGR5bmFtaWMgbGlua2VyCi0rICAgICB1c2luZyBGSU5EX1BDX1NFQ1RJT04uICBG SU5EX1BDX1NFQ1RJT04gaXMgYWNjZWxlcmF0ZWQgYnkgYSBjYWNoZQotKyAgICAgY2FsbGVkIHRo ZSBzZWN0aW9uIG1hcC4gIFRoZSBzZWN0aW9uIG1hcCBpcyBpbnZhbGlkYXRlZCBldmVyeQotKyAg ICAgdGltZSBhIHNoYXJlZCBsaWJyYXJ5IGlzIGxvYWRlZCBvciB1bmxvYWRlZCwgYW5kIGlmIHRo ZSBpbmZlcmlvcgotKyAgICAgaXMgZ2VuZXJhdGluZyBhIGxvdCBvZiBzaGFyZWQgbGlicmFyeSBl dmVudHMgdGhlbiB0aGUgc2VjdGlvbiBtYXAKLSsgICAgIHdpbGwgYmUgdXBkYXRlZCBldmVyeSB0 aW1lIFNWUjRfSEFORExFX1NPTElCX0VWRU5UIGlzIGNhbGxlZC4KLSsgICAgIFdlIGNhbGxlZCBG SU5EX1BDX1NFQ1RJT04gaW4gU1ZSNF9DUkVBVEVfU09MSUJfRVZFTlRfQlJFQUtQT0lOVFMsCi0r ICAgICBzbyB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyJ3Mgc2VjdGlv bnMgYXJlIGluIHRoZQotKyAgICAgc2VjdGlvbiBtYXAuICBXZSBjYW4gdGhlcmVmb3JlIGluaGli aXQgc2VjdGlvbiBtYXAgdXBkYXRlcyBhY3Jvc3MKLSsgICAgIHRoZXNlIGNhbGxzIHRvIEVWQUxV QVRFX1BST0JFX0FSR1VNRU5UIGFuZCBzYXZlIGEgbG90IG9mIHRpbWUuICAqLwotKyAgaW5oaWJp dF9zZWN0aW9uX21hcF91cGRhdGVzICgpOwotKyAgY2xlYW51cHMgPSBtYWtlX2NsZWFudXAgKHJl c3VtZV9zZWN0aW9uX21hcF91cGRhdGVzX2NsZWFudXAsIE5VTEwpOwotKwotICAgdmFsID0gZXZh bHVhdGVfcHJvYmVfYXJndW1lbnQgKHBpLT5wcm9iZSwgMCk7Ci0gICBpZiAodmFsID09IE5VTEwp Ci0gICAgIGdvdG8gZXJyb3I7Ci1AQCAtMTkwMyw2ICsxOTE3LDkgQEAgc3ZyNF9oYW5kbGVfc29s aWJfZXZlbnQgKGJwc3RhdCBicykKLSAJYWN0aW9uID0gTkFNRVNQQUNFX1JFTE9BRDsKLSAgICAg fQotIAotKyAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKLSsgIGNsZWFudXBzID0gTlVMTDsKLSsK LSAgIGlmIChhY3Rpb24gPT0gTkFNRVNQQUNFX1VQREFURV9PUl9SRUxPQUQpCi0gICAgIHsKLSAg ICAgICBpZiAobmFtZXNwYWNlX3VwZGF0ZV9pbmNyZW1lbnRhbCAoaW5mbywgbG1pZCwgbG0sIGlz X2luaXRpYWxfbnMpKQotQEAgLTE5MjUsNiArMTk0Miw4IEBAIHN2cjRfaGFuZGxlX3NvbGliX2V2 ZW50IChicHN0YXQgYnMpCi0gICB3YXJuaW5nIChfKCJQcm9iZXMtYmFzZWQgZHluYW1pYyBsaW5r ZXIgaW50ZXJmYWNlIGZhaWxlZC5cbiIKLSAJICAgICAiUmV2ZXJ0aW5nIHRvIG9yaWdpbmFsIGlu dGVyZmFjZS5cbiIpKTsKLSAKLSsgIGlmIChjbGVhbnVwcyAhPSBOVUxMKQotKyAgICBkb19jbGVh bnVwcyAoY2xlYW51cHMpOwotICAgZnJlZV9uYW1lc3BhY2VfdGFibGUgKGluZm8pOwotICAgZnJl ZV9wcm9iZXMgKGluZm8pOwotICAgaW5mby0+dXNpbmdfcHJvYmVzID0gMDsKKysgIHByaW50ZiAo ImZvbyAlZFxuIiwgbik7CisrCisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL3Rl c3RzdWl0ZS9nZGIuYmFzZS9pbmZvLXNoYXJlZC1zb2xpYjIuYyBiL2dkYi90ZXN0c3VpdGUvZ2Ri LmJhc2UvaW5mby1zaGFyZWQtc29saWIyLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw MDAwMDAwLi5kNGVkMWU2CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5i YXNlL2luZm8tc2hhcmVkLXNvbGliMi5jCitAQCAtMCwwICsxLDI0IEBACisrLyogQ29weXJpZ2h0 IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2lu dAorK2JhciAoaW50IG4pCisreworKyAgcHJpbnRmICgiYmFyICVkXG4iLCBuKTsKKysKKysgIHJl dHVybiAwOworK30KKworLS1EQ0EvQzlXU25EdGw1MHp1LS0KKwoKZGlmZiAtLWdpdCBhL2dkYi1k bG9wZW4tc3RhcC1wcm9iZS1maXh1cC5wYXRjaCBiL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS1maXh1 cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGUxOGMxCi0tLSAv ZGV2L251bGwKKysrIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLWZpeHVwLnBhdGNoCkBAIC0wLDAg KzEsNjIgQEAKKy0tLSBnZGItNy42LXgvZ2RiL3NvbGliLXN2cjQuYwkyMDEzLTA1LTE5IDE2OjA0 OjM2LjgzODg3NDU5NSArMDIwMAorKysrIGdkYi03LjYvZ2RiL3NvbGliLXN2cjQuYwkyMDEzLTA1 LTE5IDE2OjEyOjM1LjExMjUxNDk3OCArMDIwMAorQEAgLTEwNzgsNyArMTA3OCw2IEBAIHN2cjRf ZnJlZV9saWJyYXJ5X2xpc3QgKHZvaWQgKnBfbGlzdCkKKyBzdGF0aWMgc3RydWN0IHNvX2xpc3Qg KgorIHN2cjRfY29weV9saWJyYXJ5X2xpc3QgKHN0cnVjdCBzb19saXN0ICpzcmMpCisgeworLSAg c3RydWN0IGxpbmtfbWFwX29mZnNldHMgKmxtbyA9IHN2cjRfZmV0Y2hfbGlua19tYXBfb2Zmc2V0 cyAoKTsKKyAgIHN0cnVjdCBzb19saXN0ICpkc3QgPSBOVUxMOworICAgc3RydWN0IHNvX2xpc3Qg KipsaW5rID0gJmRzdDsKKyAKK0BAIC0xMDkwLDggKzEwODksOCBAQCBzdnI0X2NvcHlfbGlicmFy eV9saXN0IChzdHJ1Y3Qgc29fbGlzdCAqCisgCisgICAgICAgbWVtY3B5IChuZXcsIHNyYywgc2l6 ZW9mIChzdHJ1Y3Qgc29fbGlzdCkpOworIAorLSAgICAgIG5ldy0+bG1faW5mbyA9IHhtYWxsb2Mg KGxtby0+bGlua19tYXBfc2l6ZSk7CistICAgICAgbWVtY3B5IChuZXctPmxtX2luZm8sIHNyYy0+ bG1faW5mbywgbG1vLT5saW5rX21hcF9zaXplKTsKKysgICAgICBuZXctPmxtX2luZm8gPSB4bWFs bG9jIChzaXplb2YgKCpuZXctPmxtX2luZm8pKTsKKysgICAgICBtZW1jcHkgKG5ldy0+bG1faW5m bywgc3JjLT5sbV9pbmZvLCBzaXplb2YgKCpuZXctPmxtX2luZm8pKTsKKyAKKyAgICAgICBuZXct Pm5leHQgPSBOVUxMOworICAgICAgICpsaW5rID0gbmV3OworQEAgLTE3NDcsNyArMTc0Niw3IEBA IHNvbGlzdF91cGRhdGVfaW5jcmVtZW50YWwgKHN0cnVjdCBzdnI0X2kKKyAgICAgICBzdHJ1Y3Qg c3ZyNF9saWJyYXJ5X2xpc3QgbGlicmFyeV9saXN0OworICAgICAgIGNoYXIgYW5uZXhbNjRdOwor IAorLSAgICAgIHhzbnByaW50ZiAoYW5uZXgsIHNpemVvZiAoYW5uZXgpLCAic3RhcnQ9JWx4O3By ZXY9JWx4IiwgbG0sIHByZXZfbG0pOworKyAgICAgIHhzbnByaW50ZiAoYW5uZXgsIHNpemVvZiAo YW5uZXgpLCAic3RhcnQ9JWx4O3ByZXY9JWx4IiwgKHVuc2lnbmVkIGxvbmcpIGxtLCAodW5zaWdu ZWQgbG9uZykgcHJldl9sbSk7CisgICAgICAgaWYgKCFzdnI0X2N1cnJlbnRfc29zX3ZpYV94ZmVy X2xpYnJhcmllcyAoJmxpYnJhcnlfbGlzdCwgYW5uZXgpKQorIAlyZXR1cm4gMDsKKyAKK0BAIC0x ODEzLDcgKzE4MTIsMTAgQEAgc3ZyNF9oYW5kbGVfc29saWJfZXZlbnQgKHZvaWQpCisgICAgIGdv dG8gZXJyb3I7CisgCisgICBpZiAoYWN0aW9uID09IERPX05PVEhJTkcpCisreworK2RvX2NsZWFu dXBzIChvbGRfY2hhaW4pOworICAgICByZXR1cm47CisrfQorIAorICAgLyogRVZBTFVBVEVfUFJP QkVfQVJHVU1FTlQgbG9va3MgdXAgc3ltYm9scyBpbiB0aGUgZHluYW1pYyBsaW5rZXIKKyAgICAg IHVzaW5nIEZJTkRfUENfU0VDVElPTi4gIEZJTkRfUENfU0VDVElPTiBpcyBhY2NlbGVyYXRlZCBi eSBhIGNhY2hlCistLS0gZ2RiLTcuNi14L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnJlYWstcHJv YmVzLmV4cAkyMDEzLTA1LTE5IDE2OjA2OjE5LjQ1MjgxODA5MCArMDIwMAorKysrIGdkYi03LjYv Z2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9icmVhay1wcm9iZXMuZXhwCTIwMTMtMDUtMTkgMTY6MDc6 NDkuNzMwNzcwMTM1ICswMjAwCitAQCAtNjAsMTQgKzYwLDE1IEBAIGdkYl90ZXN0X211bHRpcGxl ICJidCIgJHRlc3QgeworIGlmIHsgJHVzaW5nX3Byb2JlcyB9IHsKKyAgICAgIyBSdW4gdGlsIGl0 IGxvYWRzIG91ciBsaWJyYXJ5CisgICAgIHNldCB0ZXN0ICJydW4gdGlsIG91ciBsaWJyYXJ5IGxv YWRzIgorLSAgICBzZXQgbG9hZGVkX2xpYnJhcnkgMAorLSAgICB3aGlsZSB7ICEkbG9hZGVkX2xp YnJhcnkgfSB7CisrICAgIHNldCBub3RfbG9hZGVkX2xpYnJhcnkgMQorKyAgICB3aGlsZSB7ICRu b3RfbG9hZGVkX2xpYnJhcnkgfSB7CisrCXNldCBub3RfbG9hZGVkX2xpYnJhcnkgMAorIAlnZGJf dGVzdF9tdWx0aXBsZSAiYyIgJHRlc3QgeworIAkgICAgLXJlICJJbmZlcmlvciBsb2FkZWQgJGJp bmZpbGVfbGliXFxNLiokZ2RiX3Byb21wdCAkIiB7CisgCQlwYXNzICR0ZXN0CistCQlzZXQgbG9h ZGVkX2xpYnJhcnkgMQorIAkgICAgfQorIAkgICAgLXJlICJTdG9wcGVkIGR1ZSB0byBzaGFyZWQg bGlicmFyeSBldmVudFxcTS4qJGdkYl9wcm9tcHQgJCIgeworKwkJc2V0IG5vdF9sb2FkZWRfbGli cmFyeSAxCisgCSAgICB9CisgCX0KKyAgICAgfQoKZGlmZiAtLWdpdCBhL2dkYi1kbG9wZW4tc3Rh cC1wcm9iZS1pbmhpYml0LnBhdGNoIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLWluaGliaXQucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNDE3ZWMuLjAwMDAwMDAKLS0tIGEv Z2RiLWRsb3Blbi1zdGFwLXByb2JlLWluaGliaXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2 MCArMCwwIEBACi1odHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTkx MTcxMgotCi0tLS0gLi9nZGIvb2JqZmlsZXMuYy1vcmlnCTIwMTMtMDMtMjEgMTg6NTE6MDAuMTQx OTU3MzMxICswMTAwCi0rKysgLi9nZGIvb2JqZmlsZXMuYwkyMDEzLTAzLTIxIDE5OjIwOjI1LjYx NTUxOTc0OCArMDEwMAotQEAgLTYxNSw2ICs2MTUsNyBAQCBmcmVlX29iamZpbGUgKHN0cnVjdCBv YmpmaWxlICpvYmpmaWxlKQotICAgb2JzdGFja19mcmVlICgmb2JqZmlsZS0+b2JqZmlsZV9vYnN0 YWNrLCAwKTsKLSAKLSAgIC8qIFJlYnVpbGQgc2VjdGlvbiBtYXAgbmV4dCB0aW1lIHdlIG5lZWQg aXQuICAqLwotKyAgZ2RiX2Fzc2VydCAoIWdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChvYmpmaWxl LT5wc3BhY2UpLT5pbmhpYml0X3VwZGF0ZXMpOwotICAgZ2V0X29iamZpbGVfcHNwYWNlX2RhdGEg KG9iamZpbGUtPnBzcGFjZSktPm9iamZpbGVzX2NoYW5nZWRfcCA9IDE7Ci0gCi0gICB4ZnJlZSAo b2JqZmlsZSk7Ci1AQCAtMTI4NCw2ICsxMjg1LDIxIEBAIGJzZWFyY2hfY21wIChjb25zdCB2b2lk ICprZXksIGNvbnN0IHZvaWQKLSAgIHJldHVybiAxOwotIH0KLSAKLStzdGF0aWMgdm9pZAotK3Vw ZGF0ZV9zcGFjZV9pbmZvX3NlY3Rpb25zIChzdHJ1Y3Qgb2JqZmlsZV9wc3BhY2VfaW5mbyAqcHNw YWNlX2luZm8pCi0rewotKyAgaWYgKHBzcGFjZV9pbmZvLT5vYmpmaWxlc19jaGFuZ2VkX3AgJiYg IXBzcGFjZV9pbmZvLT5pbmhpYml0X3VwZGF0ZXMpCi0rICAgIHsKLSsgICAgICB1cGRhdGVfc2Vj dGlvbl9tYXAgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSwKLSsJCQkgICZwc3BhY2VfaW5mby0+c2Vj dGlvbnMsCi0rCQkJICAmcHNwYWNlX2luZm8tPm51bV9zZWN0aW9ucyk7Ci0rCi0rICAgICAgLyog RG9uJ3QgbmVlZCB1cGRhdGVzIHRvIHNlY3Rpb24gbWFwIHVudGlsIG9iamZpbGVzIGFyZSBhZGRl ZCwKLSsgICAgICAgICByZW1vdmVkIG9yIHJlbG9jYXRlZC4gICovCi0rICAgICAgcHNwYWNlX2lu Zm8tPm9iamZpbGVzX2NoYW5nZWRfcCA9IDA7Ci0rICAgIH0KLSt9Ci0rCi0gLyogUmV0dXJucyBh IHNlY3Rpb24gd2hvc2UgcmFuZ2UgaW5jbHVkZXMgUEMgb3IgTlVMTCBpZiBub25lIGZvdW5kLiAg ICovCi0gCi0gc3RydWN0IG9ial9zZWN0aW9uICoKLUBAIC0xMjk4LDE2ICsxMzE0LDcgQEAgZmlu ZF9wY19zZWN0aW9uIChDT1JFX0FERFIgcGMpCi0gICAgIHJldHVybiBzOwotIAotICAgcHNwYWNl X2luZm8gPSBnZXRfb2JqZmlsZV9wc3BhY2VfZGF0YSAoY3VycmVudF9wcm9ncmFtX3NwYWNlKTsK LS0gIGlmIChwc3BhY2VfaW5mby0+b2JqZmlsZXNfY2hhbmdlZF9wICYmICFwc3BhY2VfaW5mby0+ aW5oaWJpdF91cGRhdGVzKQotLSAgICB7Ci0tICAgICAgdXBkYXRlX3NlY3Rpb25fbWFwIChjdXJy ZW50X3Byb2dyYW1fc3BhY2UsCi0tCQkJICAmcHNwYWNlX2luZm8tPnNlY3Rpb25zLAotLQkJCSAg JnBzcGFjZV9pbmZvLT5udW1fc2VjdGlvbnMpOwotLQotLSAgICAgIC8qIERvbid0IG5lZWQgdXBk YXRlcyB0byBzZWN0aW9uIG1hcCB1bnRpbCBvYmpmaWxlcyBhcmUgYWRkZWQsCi0tICAgICAgICAg cmVtb3ZlZCBvciByZWxvY2F0ZWQuICAqLwotLSAgICAgIHBzcGFjZV9pbmZvLT5vYmpmaWxlc19j aGFuZ2VkX3AgPSAwOwotLSAgICB9Ci0rICB1cGRhdGVfc3BhY2VfaW5mb19zZWN0aW9ucyAocHNw YWNlX2luZm8pOwotIAotICAgLyogVGhlIEMgc3RhbmRhcmQgKElTTy9JRUMgOTg5OTpUQzIpIHJl cXVpcmVzIHRoZSBCQVNFIGFyZ3VtZW50IHRvCi0gICAgICBic2VhcmNoIGJlIG5vbi1OVUxMLiAg Ki8KLUBAIC0xNDcxLDYgKzE0NzgsNyBAQCBvYmpmaWxlc19jaGFuZ2VkICh2b2lkKQotIHZvaWQK LSBpbmhpYml0X3NlY3Rpb25fbWFwX3VwZGF0ZXMgKHZvaWQpCi0gewotKyAgdXBkYXRlX3NwYWNl X2luZm9fc2VjdGlvbnMgKGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJyZW50X3Byb2dyYW1f c3BhY2UpKTsKLSAgIGdldF9vYmpmaWxlX3BzcGFjZV9kYXRhIChjdXJyZW50X3Byb2dyYW1fc3Bh Y2UpLT5pbmhpYml0X3VwZGF0ZXMgPSAxOwotIH0KLSAKCmRpZmYgLS1naXQgYS9nZGItZGxvcGVu LXN0YXAtcHJvYmUtbWFwZmFpbGVkLnBhdGNoIGIvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLW1hcGZh aWxlZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAzMGY0Yi4uMDAwMDAw MAotLS0gYS9nZGItZGxvcGVuLXN0YXAtcHJvYmUtbWFwZmFpbGVkLnBhdGNoCisrKyAvZGV2L251 bGwKQEAgLTEsMzAgKzAsMCBAQAotY29tbWl0IDIxZmQwODBkMThmMjgwYzE5ZmRjNTQ4OTcyNmRj ZDZjNjZlYjVmYmYKLUF1dGhvcjogR2FyeSBCZW5zb24gPGdiZW5zb25AcmVkaGF0LmNvbT4KLURh dGU6ICAgVHVlIEphbiA4IDEyOjEyOjE0IDIwMTMgKzAwMDAKLQotICAgIEFsc28gc3RvcCBvbiAi bWFwX2ZhaWxlZCIgd2hlcmUgYXBwcm9wcmlhdGUKLQotUmVtb3ZlZCBhIGNvbW1lbnQgcGF0Y2gg aHVuay4KLQotZGlmZiAtLWdpdCBhL2dkYi9zb2xpYi1zdnI0LmMgYi9nZGIvc29saWItc3ZyNC5j Ci1pbmRleCA1ZWI4NGJhLi5hNDZmZDc0IDEwMDY0NAotLS0tIGEvZ2RiL3NvbGliLXN2cjQuYwot KysrIGIvZ2RiL3NvbGliLXN2cjQuYwotQEAgLTE2MCw2ICsxNjAsNyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IHByb2JlX2luZm8gcHJvYmVfaW5mb1tdID0KLSAgIHsgImluaXRfc3RhcnQiLCBOQU1F U1BBQ0VfTk9fQUNUSU9OIH0sCi0gICB7ICJpbml0X2NvbXBsZXRlIiwgTkFNRVNQQUNFX1JFTE9B RCB9LAotICAgeyAibWFwX3N0YXJ0IiwgTkFNRVNQQUNFX05PX0FDVElPTiB9LAotKyAgeyAibWFw X2ZhaWxlZCIsIE5BTUVTUEFDRV9OT19BQ1RJT04gfSwKLSAgIHsgInJlbG9jX2NvbXBsZXRlIiwg TkFNRVNQQUNFX1VQREFURV9PUl9SRUxPQUQgfSwKLSAgIHsgInVubWFwX3N0YXJ0IiwgTkFNRVNQ QUNFX05PX0FDVElPTiB9LAotICAgeyAidW5tYXBfY29tcGxldGUiLCBOQU1FU1BBQ0VfUkVMT0FE IH0sCi1AQCAtMjA1Niw2ICsyMDU4LDkgQEAgc3ZyNF9jcmVhdGVfc29saWJfZXZlbnRfYnJlYWtw b2ludHMgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAotIAkgICAgICBpbmZvLT5wcm9iZXNbaV0g PSBmaW5kX3Byb2Jlc19pbl9vYmpmaWxlIChvcy0+b2JqZmlsZSwgInJ0bGQiLAotIAkJCQkJCQlu YW1lKTsKLSAKLSsJICAgICAgaWYgKCFzdHJjbXAgKG5hbWUsICJydGxkX21hcF9mYWlsZWQiKSkK LSsJCWNvbnRpbnVlOwotKwotIAkgICAgICBpZiAoIVZFQ19sZW5ndGggKHByb2JlX3AsIGluZm8t PnByb2Jlc1tpXSkpCi0gCQl7Ci0gCQkgIGZyZWVfcHJvYmVzIChpbmZvKTsKCmRpZmYgLS1naXQg YS9nZGItZGxvcGVuLXN0YXAtcHJvYmUtdGVzdC5wYXRjaCBiL2dkYi1kbG9wZW4tc3RhcC1wcm9i ZS10ZXN0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjJlYmQxLi4wMDAw MDAwCi0tLSBhL2dkYi1kbG9wZW4tc3RhcC1wcm9iZS10ZXN0LnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsMzA3ICswLDAgQEAKLWNvbW1pdCA1YmZkYzMyY2QzYmYzNzNjM2IwMmUxZmQ4NjRlZDhj ZWFiMDI5MmIyCi1BdXRob3I6IEphbiBLcmF0b2NodmlsIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQu Y29tPgotRGF0ZTogICBNb24gQXVnIDggMTI6MDg6NTMgMjAxMSArMDIwMAotCi0gICAgK3Rlc3Rj YXNlCi0KLUluZGV4OiBnZGItNy40LjUwLjIwMTIwNzE0L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVh ZHMvZGxvcGVuLWxpYnB0aHJlYWQtbGliLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwJMTk3 MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy40LjUwLjIwMTIwNzE0 L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvZGxvcGVuLWxpYnB0aHJlYWQtbGliLmMJMjAxMi0w Ny0xNSAwODo1MTozOC4yMzg3MDEyODIgKzAyMDAKLUBAIC0wLDAgKzEsNDAgQEAKLSsvKiBUaGlz IHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgotKwotKyAgIENvcHly aWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotKyAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5Ci0rICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rICAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0r ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQotKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSsKLSsjaW5jbHVkZSA8cHRocmVhZC5oPgot KyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsKLStzdGF0aWMgdm9pZCAqCi0rdGZ1bmMgKHZvaWQgKmFy ZykKLSt7Ci0rICB2b2lkICgqbm90aWZ5cCkgKHZvaWQpID0gYXJnOwotKwotKyAgbm90aWZ5cCAo KTsKLSt9Ci0rCi0rdm9pZAotK2YgKHZvaWQgKCpub3RpZnlwKSAodm9pZCkpCi0rewotKyAgcHRo cmVhZF90IHQ7Ci0rICBpbnQgaTsKLSsKLSsgIGkgPSBwdGhyZWFkX2NyZWF0ZSAoJnQsIE5VTEws IHRmdW5jLCBub3RpZnlwKTsKLSsgIGFzc2VydCAoaSA9PSAwKTsKLSsKLSsgIGkgPSBwdGhyZWFk X2pvaW4gKHQsIE5VTEwpOwotKyAgYXNzZXJ0IChpID09IDApOwotK30KLUluZGV4OiBnZGItNy40 LjUwLjIwMTIwNzE0L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvZGxvcGVuLWxpYnB0aHJlYWQu YwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAw MCArMDAwMAotKysrIGdkYi03LjQuNTAuMjAxMjA3MTQvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFk cy9kbG9wZW4tbGlicHRocmVhZC5jCTIwMTItMDctMTUgMDg6NTE6MzguMjM5NzAxMjc3ICswMjAw Ci1AQCAtMCwwICsxLDQ2IEBACi0rLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhl IEdOVSBkZWJ1Z2dlci4KLSsKLSsgICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov Ci0rCi0rI2luY2x1ZGUgPGRsZmNuLmg+Ci0rI2luY2x1ZGUgPHN0ZGRlZi5oPgotKyNpbmNsdWRl IDxhc3NlcnQuaD4KLSsKLStzdGF0aWMgY29uc3QgY2hhciAqdm9sYXRpbGUgZmlsZW5hbWU7Ci0r Ci0rc3RhdGljIHZvaWQKLStub3RpZnkgKHZvaWQpCi0rewotKyAgZmlsZW5hbWUgPSBOVUxMOyAv KiBub3RpZnktaGVyZSAqLwotK30KLSsKLStpbnQKLSttYWluICh2b2lkKQotK3sKLSsgIHZvaWQg Kmg7Ci0rICB2b2lkICgqZnApICh2b2lkICgqKSAodm9pZCkpOwotKwotKyAgYXNzZXJ0IChmaWxl bmFtZSAhPSBOVUxMKTsKLSsgIGggPSBkbG9wZW4gKGZpbGVuYW1lLCBSVExEX0xBWlkpOwotKyAg YXNzZXJ0IChoICE9IE5VTEwpOwotKwotKyAgZnAgPSBkbHN5bSAoaCwgImYiKTsKLSsgIGFzc2Vy dCAoZnAgIT0gTlVMTCk7Ci0rCi0rICBmcCAobm90aWZ5KTsKLSsKLSsgIHJldHVybiAwOwotK30K LUluZGV4OiBnZGItNy40LjUwLjIwMTIwNzE0L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvZGxv cGVuLWxpYnB0aHJlYWQuZXhwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEg MDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCi0rKysgZ2RiLTcuNC41MC4yMDEyMDcxNC9nZGIvdGVz dHN1aXRlL2dkYi50aHJlYWRzL2Rsb3Blbi1saWJwdGhyZWFkLmV4cAkyMDEyLTA3LTE1IDA5OjA4 OjAxLjc2MDI1ODU4OCArMDIwMAotQEAgLTAsMCArMSw3NCBAQAotKyMgQ29weXJpZ2h0IDIwMTEg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KLSsKLStpZiB7IVtpc3RhcmdldCAqLWxpbnV4Kl0gfHwgW3NraXBfc2hsaWJfdGVz dHNdfSB7Ci0rICAgIHJldHVybiAwCi0rfQotKwotK2xvYWRfbGliIHByZWxpbmstc3VwcG9ydC5l eHAKLSsKLStzZXQgdGVzdGZpbGUgImRsb3Blbi1saWJwdGhyZWFkIgotK3NldCBzcmNtYWluZmls ZSAke3Rlc3RmaWxlfS5jCi0rc2V0IHNyY2xpYmZpbGUgJHt0ZXN0ZmlsZX0tbGliLmMKLStzZXQg ZXhlY3V0YWJsZSAke3Rlc3RmaWxlfQotK3NldCBiaW5maWxlX2xpYiAke29iamRpcn0vJHtzdWJk aXJ9LyR7ZXhlY3V0YWJsZX0uc28KLStzZXQgYmluZmlsZSAke29iamRpcn0vJHtzdWJkaXJ9LyR7 ZXhlY3V0YWJsZX0KLStzZXQgbGliX2Rsb3BlbiBbc2hsaWJfdGFyZ2V0X2ZpbGUgJHtleGVjdXRh YmxlfS5zb10KLSsKLSsjIFVzZSBidWlsZF9leGVjdXRhYmxlX293bl9saWJzIGFzIHByZWxpbmtl ZCBsaWJwdGhyZWFkLnNvIGNhbiBwcm9kdWNlIGZhbHNlCi0rIyBQQVNTIC0gaXQgaXMgT0sgaWYg R0RCIHByb2Nlc3NlcyBpdCBzdGlsbCBiZWZvcmUgcmVsb2NhdGlvbi4KLSsKLStzZXQgcmVsaW5r X2FyZ3MgW2J1aWxkX2V4ZWN1dGFibGVfb3duX2xpYnMgJHt0ZXN0ZmlsZX0uZXhwICR7ZXhlY3V0 YWJsZX0uc28gJHNyY2xpYmZpbGUge2RlYnVnIHNobGliX3B0aHJlYWRzfSBub10KLStpZiB7JHJl bGlua19hcmdzID09ICIiIHx8ICFbcHJlbGlua19ubyAkcmVsaW5rX2FyZ3NdCi0rICAgIHx8IFtw cmVwYXJlX2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke2V4ZWN1dGFibGV9ICR7c3JjbWFp bmZpbGV9IHtkZWJ1ZyBzaGxpYl9sb2FkfV0gfSB7Ci0rICAgIHJldHVybiAtMQotK30KLStnZGJf bG9hZF9zaGxpYnMgJGJpbmZpbGVfbGliCi0rCi0raWYgeyAhW3J1bnRvX21haW5dIH0gewotKyAg ICByZXR1cm4gLTEKLSt9Ci0rCi0rc2V0IHRlc3QgImluZm8gcHJvYmVzIGFsbCBydGxkIHJ0bGRf bWFwX2NvbXBsZXRlIgotK2dkYl90ZXN0X211bHRpcGxlICR0ZXN0ICR0ZXN0IHsKLSsgICAgLXJl ICJcWyBcdFxdcnRsZF9tYXBfY29tcGxldGVcWyBcdFxdKzB4XFswLTlhLWZcXSsuKlxyXG4kZ2Ri X3Byb21wdCAkIiB7Ci0rCXBhc3MgJHRlc3QKLSsgICAgfQotKyAgICAtcmUgIk5vIHByb2JlcyBt YXRjaGVkXFwuXHJcbiRnZGJfcHJvbXB0ICQiIHsKLSsJeGZhaWwgJHRlc3QKLSsJdW50ZXN0ZWQg JHt0ZXN0ZmlsZX0uZXhwCi0rCXJldHVybgotKyAgICB9Ci0rfQotKwotK3NldCB0ZXN0ICJsaWJw dGhyZWFkLnNvIG5vdCBmb3VuZCIKLStnZGJfdGVzdF9tdWx0aXBsZSAiaW5mbyBzaGFyZWRsaWJy YXJ5IiAkdGVzdCB7Ci0rICAgIC1yZSAiL2xpYnB0aHJlYWRcXC5zby4qXHJcbiRnZGJfcHJvbXB0 ICQiIHsKLSsJZmFpbCAkdGVzdAotKyAgICB9Ci0rICAgIC1yZSAiL2xpYmNcXC5zby4qXHJcbiRn ZGJfcHJvbXB0ICQiIHsKLSsJcGFzcyAkdGVzdAotKyAgICB9Ci0rfQotKwotK2dkYl90ZXN0ICJz ZXQgdmFyaWFibGUgZmlsZW5hbWU9XCIkbGliX2Rsb3BlblwiIgotKwotK2dkYl9icmVha3BvaW50 ICJub3RpZnkiCi0rCi0rIyBUaGUgZXJyb3Igd2FzOgotKyMgQ2Fubm90IGZpbmQgbmV3IHRocmVh ZHM6IGdlbmVyaWMgZXJyb3IKLStnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAibm90aWZ5IiAi Liogbm90aWZ5LWhlcmUgLioiCi0rCi0rZ2RiX3Rlc3QgImluZm8gc2hhcmVkbGlicmFyeSIgey9s aWJwdGhyZWFkXC5zby4qfSAibGlicHRocmVhZC5zbyBmb3VuZCIKLUluZGV4OiBnZGItNy40LjUw LjIwMTIwNzE0L2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAKLT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnZGIt Ny40LjUwLjIwMTIwNzE0Lm9yaWcvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAkyMDEyLTA3LTE1 IDA4OjUxOjM2LjgwMzcwOTIyMiArMDIwMAotKysrIGdkYi03LjQuNTAuMjAxMjA3MTQvZ2RiL3Rl c3RzdWl0ZS9saWIvZ2RiLmV4cAkyMDEyLTA3LTE1IDA5OjAyOjQxLjk4MzAyODE5NyArMDIwMAot QEAgLTM3NzQsMjIgKzM3NzQsNiBAQCBwcm9jIGJ1aWxkX2V4ZWN1dGFibGVfZnJvbV9zcGVjcyB7 dGVzdG5hCi0gCi0gICAgIHNldCBiaW5maWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAkZXhlY3V0 YWJsZV0KLSAKLS0gICAgc2V0IG9iamVjdHMge30KLS0gICAgc2V0IGkgMAotLSAgICBmb3JlYWNo IHtzIGxvY2FsX29wdGlvbnN9ICRhcmdzIHsKLS0gICAgICAgIGlmICB7IFtnZGJfY29tcGlsZSAi JHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3N9IiAiJHtiaW5maWxlfSR7aX0ubyIgb2JqZWN0ICRsb2Nh bF9vcHRpb25zXSAhPSAiIiB9IHsKLS0gICAgICAgICAgICB1bnRlc3RlZCAkdGVzdG5hbWUKLS0g ICAgICAgICAgICByZXR1cm4gLTEKLS0gICAgICAgIH0KLS0gICAgICAgIGxhcHBlbmQgb2JqZWN0 cyAiJHtiaW5maWxlfSR7aX0ubyIKLS0JaW5jciBpCi0tICAgIH0KLS0gICAgCi0tICAgIGlmICB7 IFtnZGJfY29tcGlsZSAkb2JqZWN0cyAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSAkb3B0aW9uc10g IT0gIiIgfSB7Ci0tICAgICAgICB1bnRlc3RlZCAkdGVzdG5hbWUKLS0gICAgICAgIHJldHVybiAt MQotLSAgICB9Ci0tCi0gICAgIHNldCBpbmZvX29wdGlvbnMgIiIKLSAgICAgaWYgeyBbbHNlYXJj aCAtZXhhY3QgJG9wdGlvbnMgImMrKyJdID49IDAgfSB7Ci0gCXNldCBpbmZvX29wdGlvbnMgImMr KyIKLUBAIC0zNzk3LDYgKzM3ODEsNDIgQEAgcHJvYyBidWlsZF9leGVjdXRhYmxlX2Zyb21fc3Bl Y3Mge3Rlc3RuYQotICAgICBpZiBbZ2V0X2NvbXBpbGVyX2luZm8gJHtpbmZvX29wdGlvbnN9XSB7 Ci0gICAgICAgICByZXR1cm4gLTEKLSAgICAgfQotKwotKyAgICBzZXQgYmluZmlsZSBbc3RhbmRh cmRfb3V0cHV0X2ZpbGUgJGV4ZWN1dGFibGVdCi0rCi0rICAgIHNldCBmdW5jIGdkYl9jb21waWxl Ci0rICAgIHNldCBmdW5jX2luZGV4IFtsc2VhcmNoIC1yZWdleHAgJG9wdGlvbnMge14ocHRocmVh ZHN8c2hsaWJ8c2hsaWJfcHRocmVhZHMpJH1dCi0rICAgIGlmIHskZnVuY19pbmRleCAhPSAtMX0g ewotKwlzZXQgZnVuYyAiJHtmdW5jfV9bbGluZGV4ICRvcHRpb25zICRmdW5jX2luZGV4XSIKLSsg ICAgfQotKwotKyAgICAjIGdkYl9jb21waWxlX3NobGliIGFuZCBnZGJfY29tcGlsZV9zaGxpYl9w dGhyZWFkcyBkbyBub3QgdXNlIHRoZSAzcmQKLSsgICAgIyBwYXJhbWV0ZXIuICBUaGV5IGFsc28g cmVxdWlyZXMgJHNvdXJjZXMgd2hpbGUgZ2RiX2NvbXBpbGUgYW5kCi0rICAgICMgZ2RiX2NvbXBp bGVfcHRocmVhZHMgcmVxdWlyZSAkb2JqZWN0cy4gIE1vcmVvdmVyIHRoZXkgaWdub3JlIGFueSBv cHRpb25zLgotKyAgICBpZiBbc3RyaW5nIG1hdGNoIGdkYl9jb21waWxlX3NobGliKiAkZnVuY10g ewotKwlzZXQgc291cmNlc19wYXRoIHt9Ci0rCWZvcmVhY2gge3MgbG9jYWxfb3B0aW9uc30gJGFy Z3MgewotKwkgICAgbGFwcGVuZCBzb3VyY2VzX3BhdGggIiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtz fSIKLSsJfQotKwlzZXQgcmV0IFskZnVuYyAkc291cmNlc19wYXRoICIke2JpbmZpbGV9IiAkb3B0 aW9uc10KLSsgICAgfSBlbHNlIHsKLSsJc2V0IG9iamVjdHMge30KLSsJc2V0IGkgMAotKwlmb3Jl YWNoIHtzIGxvY2FsX29wdGlvbnN9ICRhcmdzIHsKLSsJICAgIGlmICB7IFtnZGJfY29tcGlsZSAi JHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3N9IiAiJHtiaW5maWxlfSR7aX0ubyIgb2JqZWN0ICRsb2Nh bF9vcHRpb25zXSAhPSAiIiB9IHsKLSsJCXVudGVzdGVkICR0ZXN0bmFtZQotKwkJcmV0dXJuIC0x Ci0rCSAgICB9Ci0rCSAgICBsYXBwZW5kIG9iamVjdHMgIiR7YmluZmlsZX0ke2l9Lm8iCi0rCSAg ICBpbmNyIGkKLSsJfQotKwlzZXQgcmV0IFskZnVuYyAkb2JqZWN0cyAiJHtiaW5maWxlfSIgZXhl Y3V0YWJsZSAkb3B0aW9uc10KLSsgICAgfQotKyAgICBpZiAgeyAkcmV0ICE9ICIiIH0gewotKyAg ICAgICAgdW50ZXN0ZWQgJHRlc3RuYW1lCi0rICAgICAgICByZXR1cm4gLTEKLSsgICAgfQotKwot ICAgICByZXR1cm4gMAotIH0KLSAKLUluZGV4OiBnZGItNy40LjUwLjIwMTIwNzE0L2dkYi90ZXN0 c3VpdGUvbGliL3ByZWxpbmstc3VwcG9ydC5leHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnZGItNy40LjUw LjIwMTIwNzE0Lm9yaWcvZ2RiL3Rlc3RzdWl0ZS9saWIvcHJlbGluay1zdXBwb3J0LmV4cAkyMDEy LTAxLTA0IDA5OjI3OjU2LjAwMDAwMDAwMCArMDEwMAotKysrIGdkYi03LjQuNTAuMjAxMjA3MTQv Z2RiL3Rlc3RzdWl0ZS9saWIvcHJlbGluay1zdXBwb3J0LmV4cAkyMDEyLTA3LTE1IDA4OjUxOjM4 LjI0MzcwMTI1NCArMDIwMAotQEAgLTk1LDggKzk1LDkgQEAgcHJvYyBmaWxlX2NvcHkge3NyYyBk ZXN0fSB7Ci0gIyBXcmFwIGZ1bmN0aW9uIGJ1aWxkX2V4ZWN1dGFibGUgc28gdGhhdCB0aGUgcmVz dWx0aW5nIGV4ZWN1dGFibGUgaXMgZnVsbHkKLSAjIHNlbGYtc3VmZmljaWVudCAod2l0aG91dCBk ZXBlbmRlbmNpZXMgb24gc3lzdGVtIGxpYnJhcmllcykuICBQYXJhbWV0ZXIKLSAjIElOVEVSUCBt YXkgYmUgdXNlZCB0byBzcGVjaWZ5IGEgbG9hZGVyIChsZC5zbykgdG8gYmUgdXNlZCB0aGF0IGlz Ci0tIyBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCBzeXN0ZW0gb25lLiAgTGlicmFyaWVzIG9u IHdoaWNoIHRoZSBleGVjdXRhYmxlCi0tIyBkZXBlbmRzIGFyZSBjb3BpZWQgaW50byBkaXJlY3Rv cnkgRElSLiAgRGVmYXVsdCBESVIgdmFsdWUgdG8KLSsjIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZh dWx0IHN5c3RlbSBvbmUuICBJTlRFUlAgY2FuIGJlIHNldCB0byAibm8iIGlmIG5vIGxkLnNvCi0r IyBjb3B5IHNob3VsZCBiZSBtYWRlLiAgTGlicmFyaWVzIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxl IGRlcGVuZHMgYXJlIGNvcGllZAotKyMgaW50byBkaXJlY3RvcnkgRElSLiAgRGVmYXVsdCBESVIg dmFsdWUgdG8KLSAjIGAke29iamRpcn0vJHtzdWJkaXJ9LyR7RVhFQ1VUQUJMRX0uZCcuCi0gIwot ICMgSW4gY2FzZSBvZiBzdWNjZXNzLCByZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYXJn dW1lbnRzIHRvIGJlIHVzZWQKLUBAIC0xNTEsOCArMTUyLDE1IEBAIHByb2MgYnVpbGRfZXhlY3V0 YWJsZV9vd25fbGlicyB7dGVzdG5hbWUKLSAKLSAgICAgaWYgeyRpbnRlcnAgPT0gIiJ9IHsKLSAJ c2V0IGludGVycF9zeXN0ZW0gW3NlY3Rpb25fZ2V0ICRiaW5maWxlIC5pbnRlcnBdCi0tCXNldCBp bnRlcnAgJHtkaXJ9L1tmaWxlIHRhaWwgJGludGVycF9zeXN0ZW1dCi0tCWZpbGVfY29weSAkaW50 ZXJwX3N5c3RlbSAkaW50ZXJwCi0rCWlmIHskaW50ZXJwX3N5c3RlbSA9PSAiIn0gewotKwkgICAg ZmFpbCAiJHRlc3QgY291bGQgbm90IGZpbmQgLmludGVycCIKLSsJfSBlbHNlIHsKLSsJICAgIHNl dCBpbnRlcnAgJHtkaXJ9L1tmaWxlIHRhaWwgJGludGVycF9zeXN0ZW1dCi0rCSAgICBmaWxlX2Nv cHkgJGludGVycF9zeXN0ZW0gJGludGVycAotKwl9Ci0rICAgIH0KLSsgICAgaWYgeyRpbnRlcnAg PT0gIm5vIn0gewotKwlzZXQgaW50ZXJwICIiCi0gICAgIH0KLSAKLSAgICAgc2V0IGRlc3RzIHt9 Ci1AQCAtMTY0LDEzICsxNzIsMTkgQEAgcHJvYyBidWlsZF9leGVjdXRhYmxlX293bl9saWJzIHt0 ZXN0bmFtZQotIAotICAgICAjIERvIG5vdCBsYXBwZW5kIGl0IHNvIHRoYXQgIi1ycGF0aCAkZGly IiBvdmVycmlkZXMgYW55IHBvc3NpYmxlICItcnBhdGgicwotICAgICAjIHNwZWNpZmllZCBieSB0 aGUgY2FsbGVyIHRvIGJlIGFibGUgdG8gbGluayBpdCBmb3IgbGRkIiBhYm92ZS4KLS0gICAgc2V0 IG9wdGlvbnMgW2xpbnNlcnQgJG9wdGlvbnMgMCAibGRmbGFncz0tV2wsLS1keW5hbWljLWxpbmtl ciwkaW50ZXJwLC1ycGF0aCwkZGlyIl0KLSsgICAgc2V0IG9wdGlvbnMgW2xpbnNlcnQgJG9wdGlv bnMgMCAibGRmbGFncz0tV2wsLXJwYXRoLCRkaXIiXQotKyAgICBpZiB7JGludGVycCAhPSAiIn0g ewotKwlzZXQgb3B0aW9ucyBbbGluc2VydCAkb3B0aW9ucyAwICJsZGZsYWdzPS1XbCwtLWR5bmFt aWMtbGlua2VyLCRpbnRlcnAiXQotKyAgICB9Ci0gCi0gICAgIGlmIHtbYnVpbGRfZXhlY3V0YWJs ZSAkdGVzdG5hbWUgJGV4ZWN1dGFibGUgJHNvdXJjZXMgJG9wdGlvbnNdID09IC0xfSB7Ci0gCXJl dHVybiAiIgotICAgICB9Ci0gCi0tICAgIHNldCBwcmVsaW5rX2FyZ3MgIi0tZHluYW1pYy1saW5r ZXI9JGludGVycCAtLWxkLWxpYnJhcnktcGF0aD0kZGlyICRiaW5maWxlICRpbnRlcnAgW2NvbmNh dCAkZGVzdHNdIgotKyAgICBzZXQgcHJlbGlua19hcmdzICItLWxkLWxpYnJhcnktcGF0aD0kZGly ICRiaW5maWxlIFtjb25jYXQgJGRlc3RzXSIKLSsgICAgaWYgeyRpbnRlcnAgIT0gIiJ9IHsKLSsJ c2V0IHByZWxpbmtfYXJncyAiLS1keW5hbWljLWxpbmtlcj0kaW50ZXJwICRwcmVsaW5rX2FyZ3Mg JGludGVycCIKLSsgICAgfQotICAgICByZXR1cm4gJHByZWxpbmtfYXJncwotIH0KLSAKCmRpZmYg LS1naXQgYS9nZGItZGxvcGVuLXN0YXAtcHJvYmUtdGVzdDIucGF0Y2ggYi9nZGItZGxvcGVuLXN0 YXAtcHJvYmUtdGVzdDIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYTRm NmIuLjAwMDAwMDAKLS0tIGEvZ2RiLWRsb3Blbi1zdGFwLXByb2JlLXRlc3QyLnBhdGNoCisrKyAv ZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2dkYi1w YXRjaGVzLzIwMTItMDgvbXNnMDA1MDAuaHRtbAotU3ViamVjdDogW3BhdGNoXSB0ZXN0c3VpdGU6 IE1ha2Ugc29saWItY29ycnVwdGVkLmV4cCB1bnRlc3RlZCBmb3IgcHJvYmVzICBbUmU6IFtSRkEg MC80IHRha2UgMl0gSW1wcm92ZWQgbGlua2VyLWRlYnVnZ2VyIGludGVyZmFjZV0KLQotT24gRnJp LCAxNyBBdWcgMjAxMiAyMjo1Mzo1MyArMDIwMCwgSmFuIEtyYXRvY2h2aWwgd3JvdGU6Ci0+IEl0 IHJlZ3Jlc3NlcyB3aXRoIGdsaWJjLWRlYnVnaW5mbyBpbnN0YWxsZWQ6Ci0+IAotPiBpbmZvIHNo YXJlZGxpYnJhcnleTQotPiBGcm9tICAgICAgICAgICAgICAgIFRvICAgICAgICAgICAgICAgICAg U3ltcyBSZWFkICAgU2hhcmVkIE9iamVjdCBMaWJyYXJ5Xk0KLT4gMHgwMDAwN2ZmZmY3ZGRjYjIw ICAweDAwMDA3ZmZmZjdkZjYzZDkgIFllcyAgICAgICAgIC9saWI2NC9sZC1saW51eC14ODYtNjQu c28uMl5NCi0+IDB4MDAwMDdmZmZmN2FlMDViMCAgMHgwMDAwN2ZmZmY3YjRhZDc4ICBZZXMgICAg ICAgICAvbGliNjQvbGlibS5zby42Xk0KLT4gMHgwMDAwN2ZmZmY3NzQzMWEwICAweDAwMDA3ZmZm Zjc4ODNjZjAgIFllcyAgICAgICAgIC9saWI2NC9saWJjLnNvLjZeTQotPiAoZ2RiKSBGQUlMOiBn ZGIuYmFzZS9zb2xpYi1jb3JydXB0ZWQuZXhwOiBjb3JydXB0ZWQgbGlzdAotPiAKLT4gQnV0IEkg Z3Vlc3MgdGhlcmUgaXMgbm8gbG9uZ2VyIGEgd2F5IHRvIHRlc3QgaXQgd2l0aCBwcm9iZXMgc28g aXQgc2hvdWxkIGp1c3QKLT4gcnVuIHNvbWUgJ2luZm8gcHJvYmVzJyBhbmQgbWFrZSB0aGlzIHRl c3QgVU5URVNURUQgaWYgcnRsZCBwcm9iZXMgYXJlCi0+IGF2YWlsYWJsZS4KLQotSSBoYWQgdG8g aW1wbGVtZW50IGl0IGZvciBGZWRvcmEgYWxyZWFkeSBhbnl3YXkuCi0KLQotUmVnYXJkcywKLUph bgotCi0KLWdkYi90ZXN0c3VpdGUvCi0yMDEyLTA4LTE4ICBKYW4gS3JhdG9jaHZpbCAgPGphbi5r cmF0b2NodmlsQHJlZGhhdC5jb20+Ci0KLQkqIGdkYi5iYXNlL3NvbGliLWNvcnJ1cHRlZC5leHA6 IE5ldyB2YXJpYWJsZSBwcm9iZXMuCi0JKGluZm8gcHJvYmVzKTogTmV3IHRlc3QuCi0KLWRpZmYg LS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWNvcnJ1cHRlZC5leHAgYi9nZGIv dGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWNvcnJ1cHRlZC5leHAKLWluZGV4IDg0YjNiMGMuLmM5 ZjU1ZDYgMTAwNjQ0Ci0tLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLWNvcnJ1cHRl ZC5leHAKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItY29ycnVwdGVkLmV4cAot QEAgLTM2LDYgKzM2LDMzIEBAIGlmICFbcnVudG9fbWFpbl0gewotICAgICByZXR1cm4KLSB9Ci0g Ci0rIyBXaXRoIHByb2JlcyBpbnRlcmZhY2UgR0RCIG5vIGxvbmdlciBzY2FucyB0aGUgaW5mZXJp b3IgbGlicmFyeSBsaXN0IHNvIGl0cwotKyMgY29ycnVwdGlvbiBjYW5ub3QgYmUgdGVzdGVkLiAg VGhlcmUgaXMgbm8gd2F5IHRvIGRpc2FibGUgdGhlIHByb2JlcwotKyMgaW50ZXJmYWNlLgotKwot K3NldCBwcm9iZXMgeyBpbml0X3N0YXJ0IGluaXRfY29tcGxldGUgbWFwX3N0YXJ0IHJlbG9jX2Nv bXBsZXRlIHVubWFwX3N0YXJ0Ci0rCSAgICAgdW5tYXBfY29tcGxldGUgfQotK3NldCB0ZXN0ICJp bmZvIHByb2JlcyIKLStnZGJfdGVzdF9tdWx0aXBsZSAkdGVzdCAkdGVzdCB7Ci0rICAgIC1yZSAi XnJ0bGRcWyBcdFxdKyg/OnJ0bGRfKT8oXFthLXpfXF0rKVxbIFx0XF0iIHsKLSsJc2V0IGlkeCBb bHNlYXJjaCAtZXhhY3QgJHByb2JlcyAkZXhwZWN0X291dCgxLHN0cmluZyldCi0rCWlmIHsgJGlk eCA+PSAwIH0gewotKwkgICAgc2V0IHByb2JlcyBbbHJlcGxhY2UgJHByb2JlcyAkaWR4ICRpZHhd Ci0rCX0KLSsJZXhwX2NvbnRpbnVlCi0rICAgIH0KLSsgICAgLXJlICJeXFteXHJcblxdKlxyXG4i IHsKLSsJZXhwX2NvbnRpbnVlCi0rICAgIH0KLSsgICAgLXJlICJeJGdkYl9wcm9tcHQgJCIgewot KyAgICB9Ci0rfQotK2lmIHsgW2xsZW5ndGggJHByb2Jlc10gPT0gMCB9IHsKLSsgICAgeGZhaWwg JHRlc3QKLSsgICAgdW50ZXN0ZWQgIkdEQiBpcyB1c2luZyBwcm9iZXMiCi0rICAgIHJldHVybgot K30KLSsKLSBnZGJfdGVzdCAiaW5mbyBzaGFyZWRsaWJyYXJ5IiAiRnJvbSAqIFRvIC4qIiAibm9y bWFsIGxpc3QiCi0gCi0gIyBHREIgY2hlY2tzIHRoZXJlIGZvciBtYXRjaGluZyBMX1BSRVYuCi0K CmRpZmYgLS1naXQgYS9nZGIuc3BlYyBiL2dkYi5zcGVjCmluZGV4IDg5YzJkODMuLjE2YmMzZjAg MTAwNjQ0Ci0tLSBhL2dkYi5zcGVjCisrKyBiL2dkYi5zcGVjCkBAIC0zNiw3ICszNiw3IEBAIFZl cnNpb246IDcuNgogCiAjIFRoZSByZWxlYXNlIGFsd2F5cyBjb250YWlucyBhIGxlYWRpbmcgcmVz ZXJ2ZWQgbnVtYmVyLCBzdGFydCBpdCBhdCAxLgogIyBgdXBzdHJlYW0nIGlzIG5vdCBhIHBhcnQg b2YgYG5hbWUnIHRvIHN0YXkgZnVsbHkgcnBtIGRlcGVuZGVuY2llcyBjb21wYXRpYmxlIGZvciB0 aGUgdGVzdGluZy4KLVJlbGVhc2U6IDI4JXs/ZGlzdH0KK1JlbGVhc2U6IDI5JXs/ZGlzdH0KIAog TGljZW5zZTogR1BMdjMrIGFuZCBHUEx2Mysgd2l0aCBleGNlcHRpb25zIGFuZCBHUEx2MisgYW5k IEdQTHYyKyB3aXRoIGV4Y2VwdGlvbnMgYW5kIEdQTCsgYW5kIExHUEx2MisgYW5kIEJTRCBhbmQg UHVibGljIERvbWFpbgogR3JvdXA6IERldmVsb3BtZW50L0RlYnVnZ2VycwpAQCAtNTA0LDE2ICs1 MDQsMTYgQEAgUGF0Y2g1Nzk6IGdkYi03LjIuNTAtc3BhcmMtYWRkLXdvcmthcm91bmQtdG8tYnJv a2VuLWRlYnVnLWZpbGVzLnBhdGNoCiAKICMgRml4IGRsb3BlbiBvZiBsaWJwdGhyZWFkLnNvLCBw YXRjaGVkIGdsaWJjIHJlcXVpcmVkIChHYXJ5IEJlbnNvbiwgQlogNjY5NDMyKS4KICMgRml4IGNy YXNoIHJlZ3Jlc3Npb24gZnJvbSB0aGUgZGxvcGVuIG9mIGxpYnB0aHJlYWQuc28gZml4IChCWiA5 MTE3MTIpLgorIyBGaXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aGVuIGluZmVyaW9yIG9wZW5z IG1hbnkgbGlicmFyaWVzIChHYXJ5IEJlbnNvbikuCiAjPXB1c2gKLVBhdGNoNzE4OiBnZGItZGxv cGVuLXN0YXAtcHJvYmUtM29mNy5wYXRjaAotUGF0Y2g3MTk6IGdkYi1kbG9wZW4tc3RhcC1wcm9i ZS00b2Y3LnBhdGNoCi1QYXRjaDcyMDogZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTVvZjcucGF0Y2gK LVBhdGNoNzIxOiBnZGItZGxvcGVuLXN0YXAtcHJvYmUtNm9mNy5wYXRjaAotUGF0Y2g3MjI6IGdk Yi1kbG9wZW4tc3RhcC1wcm9iZS03b2Y3LnBhdGNoCi1QYXRjaDYxOTogZ2RiLWRsb3Blbi1zdGFw LXByb2JlLXRlc3QucGF0Y2gKLVBhdGNoNzIzOiBnZGItZGxvcGVuLXN0YXAtcHJvYmUtdGVzdDIu cGF0Y2gKLVBhdGNoODIyOiBnZGItZGxvcGVuLXN0YXAtcHJvYmUtbWFwZmFpbGVkLnBhdGNoCi1Q YXRjaDgyNzogZ2RiLWRsb3Blbi1zdGFwLXByb2JlLWluaGliaXQucGF0Y2gKK1BhdGNoNzE4OiBn ZGItZGxvcGVuLXN0YXAtcHJvYmUtMW9mNy5wYXRjaAorUGF0Y2g3MTk6IGdkYi1kbG9wZW4tc3Rh cC1wcm9iZS0yb2Y3LnBhdGNoCitQYXRjaDcyMDogZ2RiLWRsb3Blbi1zdGFwLXByb2JlLTNvZjcu cGF0Y2gKK1BhdGNoNzIxOiBnZGItZGxvcGVuLXN0YXAtcHJvYmUtNG9mNy5wYXRjaAorUGF0Y2g3 MjI6IGdkYi1kbG9wZW4tc3RhcC1wcm9iZS01b2Y3LnBhdGNoCitQYXRjaDcyMzogZ2RiLWRsb3Bl bi1zdGFwLXByb2JlLTZvZjcucGF0Y2gKK1BhdGNoODIyOiBnZGItZGxvcGVuLXN0YXAtcHJvYmUt N29mNy5wYXRjaAorUGF0Y2g4Mjc6IGdkYi1kbG9wZW4tc3RhcC1wcm9iZS1maXh1cC5wYXRjaAog CiAjIFdvcmsgYXJvdW5kIFBSIGxpYmMvMTMwOTcgImxpbnV4LXZkc28uc28uMSIgd2FybmluZyBt ZXNzYWdlLgogIz1wdXNoCkBAIC04NzYsNyArODc2LDYgQEAgZmluZCAtbmFtZSAiKi5pbmZvKiJ8 eGFyZ3Mgcm0gLWYKICVwYXRjaDcyMyAtcDEKICVwYXRjaDgyMiAtcDEKICVwYXRjaDgyNyAtcDEK LSVwYXRjaDYxOSAtcDEKICVwYXRjaDYyNyAtcDEKICVwYXRjaDYzNCAtcDEKICVwYXRjaDY1MyAt cDEKQEAgLTEzOTgsNiArMTM5Nyw5IEBAIGZpCiAlZW5kaWYgIyAwJXshP2VsNToxfSB8fCAiJXtf dGFyZ2V0X2NwdX0iID09ICJub2FyY2giCiAKICVjaGFuZ2Vsb2cKKyogU3VuIE1heSAxOSAyMDEz IEphbiBLcmF0b2NodmlsIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPiAtIDcuNi0yOS5mYzE5 CistIEZpeCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdoZW4gaW5mZXJpb3Igb3BlbnMgbWFueSBs aWJyYXJpZXMgKEdhcnkgQmVuc29uKS4KKwogKiBUaHUgTWF5ICA5IDIwMTMgSmFuIEtyYXRvY2h2 aWwgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+IC0gNy42LTI4LmZjMTkKIC0gRml4IG5lZWRs ZXNzIGV4cGFuc2lvbiBvZiBub24tZ2RiaW5kZXggc3ltdGFicyAoRG91ZyBFdmFucykuCiAK