This is a multi-part message in MIME format. --------------060200050801010900090907 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit (for review) Add native mode to KFileDialog without affecting its API It is useful for MS Windows (and Mac?) for improving native experience. Users demanding powerful facilities of KDE dialogs can set the following in kdeglobals: [KFileDialog Settings] Native=false The same setting shall be available in the forthcoming "Integration" page of KDE system settings on Windows/Mac. Details: - qtFilter() added for converting filters from KDE format to Qt format - In KDE code, KFileDialog instances are allocated and QDialog::exec() is executed; since we are using static QDialog functions in the native mode, exec() is reimplemented to call them - KFileDialogPrivate::Native member added for storing information for KFileDialog instances so we know what to do when exec() is called; moreoved selectedUrl*() and selectedFile() methods work as expected for native mode too - on the other hand, static functions like KFileDialog::getOpenFileName(), check the "native" setting directly using static bool KFileDialogPrivate::isNative() - setMimeFilter() sets filter for use in Qt dialogs - KFileWidget is instantiated as the code uses its subwidgets but we do not show any widget, it does not seem to be overhead - to add more consistency, KFileDialog::getExistingDirectory*() functions use native dialog only for native mode (before native dialog was always used through #ifdef'd code on Windows) - _qt_filedialog_*_hook hooks are now only used for KDE mode; and similarly to getExistingDirectory*() change, qt_filedialog_existing_directory_hook is set for KDE mode on Windows too; make KFileDialogQtOverride a class since it looks and smells like a class - fix declaration of _qt_filedialog_*_hook functions: Qt exports them using Q_GUI_EXPORT, not C linkage as "extern" word would suggest before -- regards / pozdrawiam, Jaroslaw Staniek Sponsored by OpenOffice Polska (http://www.openoffice.com.pl/en) to work on Kexi & KOffice (http://www.kexi.pl/en, http://www.koffice.org/kexi) KDE Libraries for MS Windows (http://windows.kde.org) --------------060200050801010900090907 Content-Type: text/plain; name="native_kfiledialog.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="native_kfiledialog.patch" SW5kZXg6IGtpby9rZmlsZS9rZmlsZWRpYWxvZy5jcHANCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBr aW8va2ZpbGUva2ZpbGVkaWFsb2cuY3BwCSh3ZXJzamEgODE5Njc1KQ0KKysrIGtpby9rZmls ZS9rZmlsZWRpYWxvZy5jcHAJKGtvcGlhIHJvYm9jemEpDQpAQCAtNSw2ICs1LDcgQEANCiAg ICAgICAgICAgICAgICAgICAxOTk4IERhbmllbCBHcmFuYSA8Z3JhbmFAaWUuaXdpLnVuaWJl LmNoPgogICAgICAgICAgICAgICAgICAgMTk5OSwyMDAwLDIwMDEsMjAwMiwyMDAzIENhcnN0 ZW4gUGZlaWZmZXIgPHBmZWlmZmVyQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDAz IENsYXJlbmNlIERhbmcgPGRhbmdAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDgg SmFyb3NsYXcgU3RhbmllayA8anNAaWlkZWEucGw+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs aWMKQEAgLTIzLDcgKzI0LDYgQEANCiAqLwogCiAjaW5jbHVkZSAia2ZpbGVkaWFsb2cuaCIK LSNpbmNsdWRlICJrYWJzdHJhY3RmaWxld2lkZ2V0LmgiCiAKICNpbmNsdWRlIDxRdEd1aS9R Q2hlY2tCb3g+CiAjaW5jbHVkZSA8UXRHdWkvUUtleUV2ZW50PgpAQCAtMzcsOCArMzcsMTAg QEANCiAjaW5jbHVkZSA8a2ltYWdlZmlsZXByZXZpZXcuaD4KICNpbmNsdWRlIDxrcGx1Z2lu bG9hZGVyLmg+CiAjaW5jbHVkZSA8a3BsdWdpbmZhY3RvcnkuaD4KKyNpbmNsdWRlIDxrZGVi dWcuaD4KKyNpbmNsdWRlICJrYWJzdHJhY3RmaWxld2lkZ2V0LmgiCiAjaW5jbHVkZSAia2Fi c3RyYWN0ZmlsZW1vZHVsZS5oIgotI2luY2x1ZGUgPGtkZWJ1Zy5oPgorI2luY2x1ZGUgImty ZWNlbnRkaXJzLmgiCiAKICNpZmRlZiBRX1dTX1gxMQogI2luY2x1ZGUgPHF4MTFpbmZvX3gx MS5oPgpAQCAtNDYsNiArNDgsNzYgQEANCiAjaW5jbHVkZSA8Zml4eDExaC5oPgogI2VuZGlm CiAKKyNpbmNsdWRlIDxRdEd1aS9RRmlsZURpYWxvZz4KKworLyoqIEByZXR1cm4gRmlsZSBk aWFsb2cgZmlsdGVyIGluIFF0IGZvcm1hdCBmb3IgQGEgZmlsdGVycworICogICAgICAgICAg b3IgIkFsbCBmaWxlcyAoKikiIGZvciBlbXB0eSBsaXN0LgorICovCitzdGF0aWMgUVN0cmlu ZyBxdEZpbHRlcihjb25zdCBRU3RyaW5nTGlzdCYgZmlsdGVycykKK3sKKyAgICBRU3RyaW5n IGNvbnZlcnRlZDsKKyAgICBmb3JlYWNoIChjb25zdCBRU3RyaW5nJiBjdXJyZW50LCBmaWx0 ZXJzKSB7CisgICAgICAgIFFTdHJpbmcgbmV3X2Y7IC8vZmlsdGVyIHBhcnQKKyAgICAgICAg UVN0cmluZyBuZXdfbmFtZTsgLy9maWx0ZXIgbmFtZSBwYXJ0CisgICAgICAgIGludCBwID0g Y3VycmVudC5pbmRleE9mKCd8Jyk7CisgICAgICAgIGlmIChwPT0tMSkgeworICAgICAgICAg ICAgbmV3X2YgPSBjdXJyZW50OworICAgICAgICAgICAgbmV3X25hbWUgPSBjdXJyZW50OyAv LyBub3RoaW5nIGJldHRlciBmb3VuZAorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg ICAgICAgICAgbmV3X2YgPSBjdXJyZW50LmxlZnQocCk7CisgICAgICAgICAgICBuZXdfbmFt ZSA9IGN1cnJlbnQubWlkKHArMSk7CisgICAgICAgIH0KKyAgICAgICAgLy9yZW1vdmUgKC4u Li4uKSBmcm9tIG5hbWUKKyAgICAgICAgcCA9IG5ld19uYW1lLmluZGV4T2YoJygnKTsKKyAg ICAgICAgaW50IHAyID0gbmV3X25hbWUubGFzdEluZGV4T2YoJyknKTsKKyAgICAgICAgUVN0 cmluZyBuZXdfbmFtZTEsIG5ld19uYW1lMjsKKyAgICAgICAgaWYgKHAhPS0xKQorICAgICAg ICAgICAgbmV3X25hbWUxID0gbmV3X25hbWUubGVmdChwKTsKKyAgICAgICAgaWYgKHAyIT0t MSkKKyAgICAgICAgICAgIG5ld19uYW1lMiA9IG5ld19uYW1lLm1pZChwMisxKTsKKyAgICAg ICAgaWYgKCFuZXdfbmFtZTEuaXNFbXB0eSgpIHx8ICFuZXdfbmFtZTIuaXNFbXB0eSgpKQor ICAgICAgICAgICAgbmV3X25hbWUgPSBuZXdfbmFtZTEudHJpbW1lZCgpICsgIiAiICsgbmV3 X25hbWUyLnRyaW1tZWQoKTsKKyAgICAgICAgbmV3X25hbWUucmVwbGFjZSgnKCcsIiIpOwor ICAgICAgICBuZXdfbmFtZS5yZXBsYWNlKCcpJywiIik7CisgICAgICAgIG5ld19uYW1lID0g bmV3X25hbWUudHJpbW1lZCgpOworCisgICAgICAgIC8vIG1ha2UgZmlsdGVycyB1bmlxdWU6 IHJlbW92ZSB1cHBlcmNhc2UgZXh0ZW5zaW9ucyAoY2FzZSBkb2Vzbid0IG1hdHRlciBvbiB3 aW4zMiwgQlRXKQorICAgICAgICBRU3RyaW5nTGlzdCBhbGxmaWx0ZXJzVW5pcXVlOworICAg ICAgICBjb25zdCBRU3RyaW5nTGlzdCBvcmlnTGlzdCggbmV3X2Yuc3BsaXQoJyAnLCBRU3Ry aW5nOjpTa2lwRW1wdHlQYXJ0cykgKTsKKyAgICAgICAgZm9yZWFjaCAoY29uc3QgUVN0cmlu ZyYgb3JpZ0ZpbHRlciwgb3JpZ0xpc3QpIHsKKyAgICAgICAgICAgIGlmIChvcmlnRmlsdGVy ID09IG9yaWdGaWx0ZXIudG9Mb3dlcigpKQorICAgICAgICAgICAgICAgIGFsbGZpbHRlcnNV bmlxdWUgKz0gb3JpZ0ZpbHRlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghY29udmVy dGVkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnZlcnRlZCArPSAiOzsiOworCisgICAg ICAgIGNvbnZlcnRlZCArPSAobmV3X25hbWUgKyAiICgiICsgYWxsZmlsdGVyc1VuaXF1ZS5q b2luKCIgIikgKyAiKSIpOworICAgIH0gLy8gZm9yZWFjaAorCisgICAgLy8gU3RyaXAgZXNj YXBlIGNoYXJhY3RlcnMgZnJvbSBlc2NhcGVkICcvJyBjaGFyYWN0ZXJzLgorICAgIGZvciAo aW50IHBvcyA9IDA7IChwb3MgPSBjb252ZXJ0ZWQuaW5kZXhPZigiXFwvIiwgcG9zKSkgIT0g LTE7ICsrcG9zKQorICAgICAgY29udmVydGVkLnJlbW92ZShwb3MsIDEpOworCisgICAgcmV0 dXJuIGNvbnZlcnRlZDsKK30KKworLyoqIEByZXR1cm4gRmlsZSBkaWFsb2cgZmlsdGVyIGlu IFF0IGZvcm1hdCBmb3IgQGEgZmlsdGVyIGluIEtERSBmb3JtYXQKKyAqICAgICAgICAgIG9y ICJBbGwgZmlsZXMgKCopIiBmb3IgZW1wdHkgZmlsdGVyLgorICovCitzdGF0aWMgUVN0cmlu ZyBxdEZpbHRlcihjb25zdCBRU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgLy8gUXQgZm9ybWF0 OiAic29tZSB0ZXh0ICgqLmZpcnN0ICouc2Vjb25kKSIgb3IgIkFsbCBmaWxlcyAoKikiIHNl cGFyYXRlZCBieSA7OworICAgIC8vIEtERSBmb3JtYXQ6ICIqLmZpcnN0ICouc2Vjb25kfERl c2NyaXB0aW9uIiBvciAiKnxEZXNjcmlwdGlvbiIsIHNlcGFyYXRlZCBieSBcbiAoRGVzY3Jp cHRpb24gaXMgb3B0aW9uYWwpCisgICAgUVN0cmluZ0xpc3QgZmlsdGVyczsKKyAgICBpZiAo ZmlsdGVyLmlzRW1wdHkoKSkKKyAgICAgICAgZmlsdGVycyArPSBpMThuKCIqfEFsbCBmaWxl cyIpOworICAgIGVsc2UKKyAgICAgICAgZmlsdGVycyA9IGZpbHRlci5zcGxpdCgnXG4nLCBR U3RyaW5nOjpTa2lwRW1wdHlQYXJ0cyk7CisgICAgcmV0dXJuIHF0RmlsdGVyKGZpbHRlcnMp OworfQorCiBzdGF0aWMgS0Fic3RyYWN0RmlsZU1vZHVsZSogc19tb2R1bGUgPSAwOwogc3Rh dGljIEtBYnN0cmFjdEZpbGVNb2R1bGUqIGZpbGVNb2R1bGUoKQogewpAQCAtNjgsMTUgKzE0 MCw0OCBAQA0KIGNsYXNzIEtGaWxlRGlhbG9nUHJpdmF0ZQogewogcHVibGljOgotICAgIEtG aWxlRGlhbG9nUHJpdmF0ZSgpIDogdygwKQorICAgIGNsYXNzIE5hdGl2ZSB7CisgICAgcHVi bGljOgorICAgICAgICBOYXRpdmUoKQorICAgICAgICAgIDogbW9kZShLRmlsZTo6RmlsZSks CisgICAgICAgICAgICBvcGVyYXRpb25Nb2RlKEtBYnN0cmFjdEZpbGVXaWRnZXQ6Ok9wZW5p bmcpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgS1VybCBzdGFydERp cjsKKyAgICAgICAgUVN0cmluZyBmaWx0ZXI7CisgICAgICAgIFFTdHJpbmdMaXN0IG1pbWVU eXBlczsKKyAgICAgICAgS1VybDo6TGlzdCBzZWxlY3RlZFVybHM7CisgICAgICAgIEtGaWxl OjpNb2RlcyBtb2RlOworICAgICAgICBLQWJzdHJhY3RGaWxlV2lkZ2V0OjpPcGVyYXRpb25N b2RlIG9wZXJhdGlvbk1vZGU7CisgICAgfTsKKworICAgIEtGaWxlRGlhbG9nUHJpdmF0ZSgp CisgICAgICA6IG5hdGl2ZSgwKSwKKyAgICAgICAgdygwKSwKKyAgICAgICAgY2ZnR3JvdXAo S0dsb2JhbDo6Y29uZmlnKCksIENvbmZpZ0dyb3VwKQogICAgIHsKLSAgICAgICAgY2ZnR3Jv dXAgPSBLQ29uZmlnR3JvdXAoS0dsb2JhbDo6Y29uZmlnKCksIENvbmZpZ0dyb3VwKTsKKyAg ICAgICAgaWYgKGNmZ0dyb3VwLnJlYWRFbnRyeSgiTmF0aXZlIiwgZmFsc2UpKQorICAgICAg ICAgICAgbmF0aXZlID0gbmV3IE5hdGl2ZTsKICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBp c05hdGl2ZSgpCisgICAgeworICAgICAgICBLQ29uZmlnR3JvdXAgY2ZnR3JvdXAoS0dsb2Jh bDo6Y29uZmlnKCksIENvbmZpZ0dyb3VwKTsKKyAgICAgICAgcmV0dXJuIGNmZ0dyb3VwLnJl YWRFbnRyeSgiTmF0aXZlIiwgZmFsc2UpOworICAgIH0KKworICAgIH5LRmlsZURpYWxvZ1By aXZhdGUoKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG5hdGl2ZTsKKyAgICB9CisKKyAgICBO YXRpdmUqIG5hdGl2ZTsKICAgICBLQWJzdHJhY3RGaWxlV2lkZ2V0KiB3OwogICAgIEtDb25m aWdHcm91cCBjZmdHcm91cDsKIH07CiAKK0tVcmwgS0ZpbGVEaWFsb2dQcml2YXRlOjpOYXRp dmU6OnN0YXJ0RGlyOworCiBLRmlsZURpYWxvZzo6S0ZpbGVEaWFsb2coIGNvbnN0IEtVcmwm IHN0YXJ0RGlyLCBjb25zdCBRU3RyaW5nJiBmaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFXaWRnZXQgKnBhcmVudCwgUVdpZGdldCogY3VzdG9tV2lkZ2V0KQogI2lmZGVm IFFfV1NfV0lOCkBAIC04NywxMyArMTkyLDIxIEBADQogICAgICAgZCggbmV3IEtGaWxlRGlh bG9nUHJpdmF0ZSApCiAKIHsKLSAgICBzZXRCdXR0b25zKCBLRGlhbG9nOjpOb25lICk7Ci0g ICAgcmVzdG9yZURpYWxvZ1NpemUoZC0+Y2ZnR3JvdXApOyAvLyBjYWxsIHRoaXMgYmVmb3Jl IHRoZSBmaWxlUVdpZGdldCBpcyBzZXQgYXMgdGhlIG1haW4gd2lkZ2V0LgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBzaXplcyBmb3Ig dGhlIGNvbXBvbmVudHMgYXJlIG5vdCBvYmV5ZWQgKGVyZXNsaWJyZSkKKyAgICBpZiAoIWQt Pm5hdGl2ZSkgeworICAgICAgICBzZXRCdXR0b25zKCBLRGlhbG9nOjpOb25lICk7CisgICAg ICAgIHJlc3RvcmVEaWFsb2dTaXplKGQtPmNmZ0dyb3VwKTsgLy8gY2FsbCB0aGlzIGJlZm9y ZSB0aGUgZmlsZVFXaWRnZXQgaXMgc2V0IGFzIHRoZSBtYWluIHdpZGdldC4KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIHNpemVz IGZvciB0aGUgY29tcG9uZW50cyBhcmUgbm90IG9iZXllZCAoZXJlc2xpYnJlKQorICAgIH0K IAogICAgIC8vIERsb3BlbiB0aGUgZmlsZSB3aWRnZXQgZnJvbSBsaWJrZmlsZW1vZHVsZQog ICAgIFFXaWRnZXQqIGZpbGVRV2lkZ2V0ID0gZmlsZU1vZHVsZSgpLT5jcmVhdGVGaWxlV2lk Z2V0KHN0YXJ0RGlyLCB0aGlzKTsKICAgICBkLT53ID0gOjpxb2JqZWN0X2Nhc3Q8S0Fic3Ry YWN0RmlsZVdpZGdldCAqPihmaWxlUVdpZGdldCk7CisKKyAgICBpZiAoZC0+bmF0aXZlKSB7 CisgICAgICAgIGQtPm5hdGl2ZS0+ZmlsdGVyID0gZmlsdGVyOworICAgICAgICByZXR1cm47 CisgICAgfQorCiAgICAgZC0+dy0+c2V0RmlsdGVyKGZpbHRlcik7CiAgICAgc2V0TWFpbldp ZGdldChmaWxlUVdpZGdldCk7CiAKQEAgLTEzMiwxNiArMjQ1LDI0IEBADQogCiB2b2lkIEtG aWxlRGlhbG9nOjpzZXRMb2NhdGlvbkxhYmVsKGNvbnN0IFFTdHJpbmcmIHRleHQpCiB7Cisg ICAgaWYgKGQtPm5hdGl2ZSkKKyAgICAgICAgcmV0dXJuOyAvLyBub3QgYXZhaWxhYmxlCiAg ICAgZC0+dy0+c2V0TG9jYXRpb25MYWJlbCh0ZXh0KTsKIH0KIAogdm9pZCBLRmlsZURpYWxv Zzo6c2V0RmlsdGVyKGNvbnN0IFFTdHJpbmcmIGZpbHRlcikKIHsKKyAgICBpZiAoZC0+bmF0 aXZlKSB7CisgICAgICAgIGQtPm5hdGl2ZS0+ZmlsdGVyID0gZmlsdGVyOworICAgICAgICBy ZXR1cm47CisgICAgfQogICAgIGQtPnctPnNldEZpbHRlcihmaWx0ZXIpOwogfQogCiBRU3Ry aW5nIEtGaWxlRGlhbG9nOjpjdXJyZW50RmlsdGVyKCkgY29uc3QKIHsKKyAgICBpZiAoZC0+ bmF0aXZlKQorICAgICAgICByZXR1cm4gUVN0cmluZygpOyAvLyBub3QgYXZhaWxhYmxlCiAg ICAgcmV0dXJuIGQtPnctPmN1cnJlbnRGaWx0ZXIoKTsKIH0KIApAQCAtMTQ5LDEwICsyNzAs MjQgQEANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5n JiBkZWZhdWx0VHlwZSApCiB7CiAgICAgZC0+dy0+c2V0TWltZUZpbHRlcihtaW1lVHlwZXMs IGRlZmF1bHRUeXBlKTsKKworICAgIGlmIChkLT5uYXRpdmUpIHsKKyAgICAgICAgUVN0cmlu ZyBrZGVGaWx0ZXI7CisgICAgICAgIGZvcmVhY2goIGNvbnN0IFFTdHJpbmcmIG1pbWVUeXBl LCBtaW1lVHlwZXMgKSB7CisgICAgICAgICAgICBLTWltZVR5cGU6OlB0ciBtaW1lKCBLTWlt ZVR5cGU6Om1pbWVUeXBlKG1pbWVUeXBlKSApOworICAgICAgICAgICAgaWYgKG1pbWUpCisg ICAgICAgICAgICAgICBrZGVGaWx0ZXIgKz0gKG1pbWUtPnBhdHRlcm5zKCkuam9pbigiICIp ICsgInwiICsgbWltZS0+Y29tbWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBkLT5uYXRp dmUtPmZpbHRlciA9IGtkZUZpbHRlcjsKKyAgICB9CiB9CiAKIHZvaWQgS0ZpbGVEaWFsb2c6 OmNsZWFyRmlsdGVyKCkKIHsKKyAgICBpZiAoZC0+bmF0aXZlKSB7CisgICAgICAgIGQtPm5h dGl2ZS0+ZmlsdGVyLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgZC0+ dy0+Y2xlYXJGaWx0ZXIoKTsKIH0KIApAQCAtMTY4LDYgKzMwMyw4IEBADQogCiB2b2lkIEtG aWxlRGlhbG9nOjpzZXRQcmV2aWV3V2lkZ2V0KEtQcmV2aWV3V2lkZ2V0QmFzZSAqdykKIHsK KyAgICBpZiAoZC0+bmF0aXZlKQorICAgICAgcmV0dXJuOwogICAgIGQtPnctPnNldFByZXZp ZXdXaWRnZXQodyk7CiB9CiAKQEAgLTE3OSwxMiArMzE2LDE2IEBADQogLy8gVGhpcyBzbG90 IHN0aWxsIGV4aXN0cyBtb3N0bHkgZm9yIGNvbXBhdCBwdXJwb3NlczsgZm9yIHN1YmNsYXNz ZXMgd2hpY2ggcmVpbXBsZW1lbnQgc2xvdE9rCiB2b2lkIEtGaWxlRGlhbG9nOjpzbG90T2so KQogeworICAgIGlmIChkLT5uYXRpdmUpCisgICAgICAgIHJldHVybjsKICAgICBkLT53LT5z bG90T2soKTsKIH0KIAogLy8gVGhpcyBzbG90IHN0aWxsIGV4aXN0cyBtb3N0bHkgZm9yIGNv bXBhdCBwdXJwb3NlczsgZm9yIHN1YmNsYXNzZXMgd2hpY2ggcmVpbXBsZW1lbnQgYWNjZXB0 CiB2b2lkIEtGaWxlRGlhbG9nOjphY2NlcHQoKQogeworICAgIGlmIChkLT5uYXRpdmUpCisg ICAgICAgIHJldHVybjsKICAgICBzZXRSZXN1bHQoIFFEaWFsb2c6OkFjY2VwdGVkICk7IC8v IGtlZXAgb2xkIGJlaGF2aW9yOyBwcm9iYWJseSBub3QgbmVlZGVkIHRob3VnaAogICAgIGQt PnctPmFjY2VwdCgpOwogICAgIEtDb25maWdHcm91cCBjZmdHcm91cChLR2xvYmFsOjpjb25m aWcoKSwgQ29uZmlnR3JvdXApOwpAQCAtMTk1LDE3ICszMzYsMjUgQEANCiAvLyBUaGlzIHNs b3Qgc3RpbGwgZXhpc3RzIG1vc3RseSBmb3IgY29tcGF0IHB1cnBvc2VzOyBmb3Igc3ViY2xh c3NlcyB3aGljaCByZWltcGxlbWVudCBzbG90Q2FuY2VsCiB2b2lkIEtGaWxlRGlhbG9nOjpz bG90Q2FuY2VsKCkKIHsKKyAgICBpZiAoZC0+bmF0aXZlKQorICAgICAgICByZXR1cm47CiAg ICAgZC0+dy0+c2xvdENhbmNlbCgpOwogICAgIHJlamVjdCgpOwogfQogCiB2b2lkIEtGaWxl RGlhbG9nOjpzZXRVcmwoY29uc3QgS1VybCYgdXJsLCBib29sIGNsZWFyZm9yd2FyZCkKIHsK KyAgICBpZiAoZC0+bmF0aXZlKQorICAgICAgICByZXR1cm47CiAgICAgZC0+dy0+c2V0VXJs KHVybCwgY2xlYXJmb3J3YXJkKTsKIH0KIAogdm9pZCBLRmlsZURpYWxvZzo6c2V0U2VsZWN0 aW9uKGNvbnN0IFFTdHJpbmcmIG5hbWUpCiB7CisgICAgaWYgKGQtPm5hdGl2ZSkgeworLy9U T0RPCisgICAgICAgICByZXR1cm47CisgICAgfQogICAgIGQtPnctPnNldFNlbGVjdGlvbihu YW1lKTsKIH0KIApAQCAtMjEzLDYgKzM2MiwxNCBAQA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBmaWx0ZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqcGFyZW50LCBjb25zdCBRU3RyaW5n JiBjYXB0aW9uKQogeworICAgIGlmIChLRmlsZURpYWxvZ1ByaXZhdGU6OmlzTmF0aXZlKCkg JiYgKCFzdGFydERpci5pc1ZhbGlkKCkgfHwgc3RhcnREaXIuaXNMb2NhbEZpbGUoKSkpIHsK KyAgICAgICAgcmV0dXJuIFFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5hbWUoIAorICAgICAg ICAgICAgcGFyZW50LAorICAgICAgICAgICAgY2FwdGlvbi5pc0VtcHR5KCkgPyBpMThuKCJP cGVuIikgOiBjYXB0aW9uLAorICAgICAgICAgICAgc3RhcnREaXIucGF0aCgpLAorICAgICAg ICAgICAgcXRGaWx0ZXIoZmlsdGVyKSApOworLy9UT0RPICAgICAgUVN0cmluZyAqIHNlbGVj dGVkRmlsdGVyID0gMCwgT3B0aW9ucyBvcHRpb25zID0gMAorICAgIH0KICAgICBLRmlsZURp YWxvZyBkbGcoc3RhcnREaXIsIGZpbHRlciwgcGFyZW50KTsKICAgICBkbGcuc2V0T3BlcmF0 aW9uTW9kZSggT3BlbmluZyApOwogCkBAIC0yMjksNiArMzg2LDggQEANCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgZmlsdGVyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJZCBwYXJlbnRfaWQs IGNvbnN0IFFTdHJpbmcmIGNhcHRpb24pCiB7CisgICAgaWYgKEtGaWxlRGlhbG9nUHJpdmF0 ZTo6aXNOYXRpdmUoKSAmJiAoIXN0YXJ0RGlyLmlzVmFsaWQoKSB8fCBzdGFydERpci5pc0xv Y2FsRmlsZSgpKSkKKyAgICAgICAgcmV0dXJuIEtGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5h bWUoc3RhcnREaXIsIGZpbHRlciwgMCwgY2FwdGlvbik7IC8vIGV2ZXJ5dGhpbmcgd2UgY2Fu IGRvLi4uCiAgICAgUVdpZGdldCogcGFyZW50ID0gUVdpZGdldDo6ZmluZCggcGFyZW50X2lk ICk7CiAgICAgS0ZpbGVEaWFsb2cgZGxnKHN0YXJ0RGlyLCBmaWx0ZXIsIHBhcmVudCk7CiAj aWZkZWYgUV9XU19YMTEKQEAgLTI1NCw2ICs0MTMsMTQgQEANCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRV2lkZ2V0ICpwYXJlbnQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBjYXB0aW9u KQogeworICAgIGlmIChLRmlsZURpYWxvZ1ByaXZhdGU6OmlzTmF0aXZlKCkgJiYgKCFzdGFy dERpci5pc1ZhbGlkKCkgfHwgc3RhcnREaXIuaXNMb2NhbEZpbGUoKSkpIHsKKyAgICAgICAg cmV0dXJuIFFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5hbWVzKAorICAgICAgICAgICAgcGFy ZW50LAorICAgICAgICAgICAgY2FwdGlvbi5pc0VtcHR5KCkgPyBpMThuKCJPcGVuIikgOiBj YXB0aW9uLAorICAgICAgICAgICAgc3RhcnREaXIucGF0aCgpLAorICAgICAgICAgICAgcXRG aWx0ZXIoZmlsdGVyKSApOworLy9UT0RPICAgICAgLy9RU3RyaW5nICogc2VsZWN0ZWRGaWx0 ZXIgPSAwLCBPcHRpb25zIG9wdGlvbnMgPSAwCisgICAgfQogICAgIEtGaWxlRGlhbG9nIGRs ZyhzdGFydERpciwgZmlsdGVyLCBwYXJlbnQpOwogICAgIGRsZy5zZXRPcGVyYXRpb25Nb2Rl KCBPcGVuaW5nICk7CiAKQEAgLTI2OCw2ICs0MzUsMTEgQEANCiBLVXJsIEtGaWxlRGlhbG9n OjpnZXRPcGVuVXJsKGNvbnN0IEtVcmwmIHN0YXJ0RGlyLCBjb25zdCBRU3RyaW5nJiBmaWx0 ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFXaWRnZXQgKnBhcmVudCwg Y29uc3QgUVN0cmluZyYgY2FwdGlvbikKIHsKKyAgICBpZiAoS0ZpbGVEaWFsb2dQcml2YXRl Ojppc05hdGl2ZSgpICYmICghc3RhcnREaXIuaXNWYWxpZCgpIHx8IHN0YXJ0RGlyLmlzTG9j YWxGaWxlKCkpKSB7CisgICAgICAgIGNvbnN0IFFTdHJpbmcgZmlsZU5hbWUoIEtGaWxlRGlh bG9nOjpnZXRPcGVuRmlsZU5hbWUoCisgICAgICAgICAgICBzdGFydERpciwgZmlsdGVyLCBw YXJlbnQsIGNhcHRpb24pICk7CisgICAgICAgIHJldHVybiBmaWxlTmFtZS5pc0VtcHR5KCkg PyBLVXJsKCkgOiBLVXJsOjpmcm9tUGF0aChmaWxlTmFtZSk7CisgICAgfQogICAgIEtGaWxl RGlhbG9nIGRsZyhzdGFydERpciwgZmlsdGVyLCBwYXJlbnQpOwogICAgIGRsZy5zZXRPcGVy YXRpb25Nb2RlKCBPcGVuaW5nICk7CiAKQEAgLTI4NCw2ICs0NTYsMTEgQEANCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRV2lkZ2V0ICpwYXJlbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5n JiBjYXB0aW9uKQogeworICAgIGlmIChLRmlsZURpYWxvZ1ByaXZhdGU6OmlzTmF0aXZlKCkg JiYgKCFzdGFydERpci5pc1ZhbGlkKCkgfHwgc3RhcnREaXIuaXNMb2NhbEZpbGUoKSkpIHsK KyAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgZmlsZU5hbWVzKCBLRmlsZURpYWxvZzo6Z2V0 T3BlbkZpbGVOYW1lcygKKyAgICAgICAgICAgIHN0YXJ0RGlyLCBmaWx0ZXIsIHBhcmVudCwg Y2FwdGlvbikgKTsKKyAgICAgICAgcmV0dXJuIEtVcmw6Okxpc3QoZmlsZU5hbWVzKTsKKyAg ICB9CiAgICAgS0ZpbGVEaWFsb2cgZGxnKHN0YXJ0RGlyLCBmaWx0ZXIsIHBhcmVudCk7CiAg ICAgZGxnLnNldE9wZXJhdGlvbk1vZGUoIE9wZW5pbmcgKTsKIApAQCAtMjk5LDYgKzQ3Niwx MSBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFXaWRn ZXQgKnBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFFTdHJpbmcmIGNhcHRpb24pCiB7CisgICAgaWYgKEtGaWxlRGlhbG9nUHJpdmF0 ZTo6aXNOYXRpdmUoKSAmJiAoIXN0YXJ0RGlyLmlzVmFsaWQoKSB8fCBzdGFydERpci5pc0xv Y2FsRmlsZSgpKSkgeworICAgICAgICBRU3RyaW5nIHJlc3VsdCggUUZpbGVEaWFsb2c6Omdl dEV4aXN0aW5nRGlyZWN0b3J5KHBhcmVudCwgY2FwdGlvbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydERpci5wYXRoKCks IFFGaWxlRGlhbG9nOjpTaG93RGlyc09ubHkpICk7CisgICAgICAgIHJldHVybiByZXN1bHQu aXNFbXB0eSgpID8gS1VybCgpIDogS1VybDo6ZnJvbVBhdGgocmVzdWx0KTsKKyAgICB9CiAg ICAgcmV0dXJuIGZpbGVNb2R1bGUoKS0+c2VsZWN0RGlyZWN0b3J5KHN0YXJ0RGlyLCBmYWxz ZSwgcGFyZW50LCBjYXB0aW9uKTsKIH0KIApAQCAtMzA2LDIwICs0ODgsMjMgQEANCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRV2lkZ2V0ICpwYXJlbnQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3Ry aW5nJiBjYXB0aW9uKQogewotI2lmZGVmIFFfV1NfV0lOCi0gICAgcmV0dXJuIFFGaWxlRGlh bG9nOjpnZXRFeGlzdGluZ0RpcmVjdG9yeShwYXJlbnQsIGNhcHRpb24sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydERpci5wYXRoKCksIFFG aWxlRGlhbG9nOjpTaG93RGlyc09ubHkpOwotI2Vsc2UKKyAgICBpZiAoS0ZpbGVEaWFsb2dQ cml2YXRlOjppc05hdGl2ZSgpICYmICghc3RhcnREaXIuaXNWYWxpZCgpIHx8IHN0YXJ0RGly LmlzTG9jYWxGaWxlKCkpKSB7CisgICAgICAgIHJldHVybiBRRmlsZURpYWxvZzo6Z2V0RXhp c3RpbmdEaXJlY3RvcnkocGFyZW50LCBjYXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydERpci5wYXRoKCksIFFGaWxlRGlhbG9n OjpTaG93RGlyc09ubHkpOworICAgIH0KICAgICBLVXJsIHVybCA9IGZpbGVNb2R1bGUoKS0+ c2VsZWN0RGlyZWN0b3J5KHN0YXJ0RGlyLCB0cnVlLCBwYXJlbnQsIGNhcHRpb24pOwogICAg IGlmICggdXJsLmlzVmFsaWQoKSApCiAgICAgICAgIHJldHVybiB1cmwucGF0aCgpOwogICAg IHJldHVybiBRU3RyaW5nKCk7Ci0jZW5kaWYKIH0KIAogS1VybCBLRmlsZURpYWxvZzo6Z2V0 SW1hZ2VPcGVuVXJsKCBjb25zdCBLVXJsJiBzdGFydERpciwgUVdpZGdldCAqcGFyZW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBjYXB0 aW9uKQogeworICAgIGlmIChLRmlsZURpYWxvZ1ByaXZhdGU6OmlzTmF0aXZlKCkgJiYgKCFz dGFydERpci5pc1ZhbGlkKCkgfHwgc3RhcnREaXIuaXNMb2NhbEZpbGUoKSkpIHsgLy8gZXZl cnl0aGluZyB3ZSBjYW4gZG8uLi4KKyAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgbWltZXR5 cGVzKCBLSW1hZ2VJTzo6bWltZVR5cGVzKCBLSW1hZ2VJTzo6UmVhZGluZyApICk7CisgICAg ICAgIHJldHVybiBLRmlsZURpYWxvZzo6Z2V0T3BlblVybChzdGFydERpciwgbWltZXR5cGVz LmpvaW4oIiAiKSwgcGFyZW50LCBjYXB0aW9uKTsKKyAgICB9CiAgICAgUVN0cmluZ0xpc3Qg bWltZXR5cGVzID0gS0ltYWdlSU86Om1pbWVUeXBlcyggS0ltYWdlSU86OlJlYWRpbmcgKTsK ICAgICBLRmlsZURpYWxvZyBkbGcoc3RhcnREaXIsCiAgICAgICAgICAgICAgICAgICAgIG1p bWV0eXBlcy5qb2luKCIgIiksCkBAIC0zMzcsMjYgKzUyMiwzNiBAQA0KIAogS1VybCBLRmls ZURpYWxvZzo6c2VsZWN0ZWRVcmwoKSBjb25zdAogeworICAgIGlmIChkLT5uYXRpdmUpCisg ICAgICAgIHJldHVybiBkLT5uYXRpdmUtPnNlbGVjdGVkVXJscy5pc0VtcHR5KCkgPyBLVXJs KCkgOiBkLT5uYXRpdmUtPnNlbGVjdGVkVXJscy5maXJzdCgpOwogICAgIHJldHVybiBkLT53 LT5zZWxlY3RlZFVybCgpOwogfQogCiBLVXJsOjpMaXN0IEtGaWxlRGlhbG9nOjpzZWxlY3Rl ZFVybHMoKSBjb25zdAogeworICAgIGlmIChkLT5uYXRpdmUpCisgICAgICAgIHJldHVybiBk LT5uYXRpdmUtPnNlbGVjdGVkVXJsczsKICAgICByZXR1cm4gZC0+dy0+c2VsZWN0ZWRVcmxz KCk7CiB9CiAKIFFTdHJpbmcgS0ZpbGVEaWFsb2c6OnNlbGVjdGVkRmlsZSgpIGNvbnN0CiB7 CisgICAgaWYgKGQtPm5hdGl2ZSkKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkVXJsKCkucGF0 aCgpOwogICAgIHJldHVybiBkLT53LT5zZWxlY3RlZEZpbGUoKTsKIH0KIAogUVN0cmluZ0xp c3QgS0ZpbGVEaWFsb2c6OnNlbGVjdGVkRmlsZXMoKSBjb25zdAogeworICAgIGlmIChkLT5u YXRpdmUpCisgICAgICAgIHJldHVybiBzZWxlY3RlZFVybHMoKS50b1N0cmluZ0xpc3QoKTsK ICAgICByZXR1cm4gZC0+dy0+c2VsZWN0ZWRGaWxlcygpOwogfQogCiBLVXJsIEtGaWxlRGlh bG9nOjpiYXNlVXJsKCkgY29uc3QKIHsKKyAgICBpZiAoZC0+bmF0aXZlKQorICAgICAgICBy ZXR1cm4gc2VsZWN0ZWRVcmwoKS5pc0VtcHR5KCkgPyBLVXJsKCkgOiBLVXJsOjpmcm9tUGF0 aChzZWxlY3RlZFVybCgpLnBhdGgoKSk7CiAgICAgcmV0dXJuIGQtPnctPmJhc2VVcmwoKTsK IH0KIApAQCAtMzY0LDYgKzU1OSwzMyBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRV2lkZ2V0ICpwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgY2FwdGlvbikKIHsKKyAgICBpZiAoS0ZpbGVE aWFsb2dQcml2YXRlOjppc05hdGl2ZSgpKSB7CisgICAgICAgIGJvb2wgZGVmYXVsdERpciA9 IGRpci5pc0VtcHR5KCk7CisgICAgICAgIGJvb2wgc3BlY2lhbERpciA9ICFkZWZhdWx0RGly ICYmIGRpci5wcm90b2NvbCgpID09ICJrZmlsZWRpYWxvZyI7CisgICAgICAgIFFTdHJpbmcg c3RhcnREaXI7CisgICAgICAgIFFTdHJpbmcgcmVjZW50RGlyQ2xhc3M7CisgICAgICAgIGlm IChzcGVjaWFsRGlyKSB7CisgICAgICAgICAgc3RhcnREaXIgPSBLRmlsZURpYWxvZzo6Z2V0 U3RhcnRVcmwoZGlyLCByZWNlbnREaXJDbGFzcykucGF0aCgpOworICAgICAgICB9CisgICAg ICAgIGVsc2UgaWYgKCAhc3BlY2lhbERpciAmJiAhZGVmYXVsdERpciApIHsKKyAgICAgICAg ICBpZiAoIWRpci5pc0xvY2FsRmlsZSgpKQorICAgICAgICAgICAgICBrV2FybmluZygpIDw8 ICJub24tbG9jYWwgc3RhcnQgZGlyICIgPDwgZGlyOworICAgICAgICAgIHN0YXJ0RGlyID0g ZGlyLnBhdGgoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFFTdHJpbmcgcmVzdWx0 ID0gUUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSgKKyAgICAgICAgICAgIHBhcmVudCwK KyAgICAgICAgICAgIGNhcHRpb24uaXNFbXB0eSgpID8gaTE4bigiU2F2ZSBBcyIpIDogY2Fw dGlvbiwKKyAgICAgICAgICAgIGRpci5wYXRoKCksCisgICAgICAgICAgICBxdEZpbHRlcihm aWx0ZXIpICk7CisvL1RPRE8gICAgICBRU3RyaW5nICogc2VsZWN0ZWRGaWx0ZXIgPSAwLCBP cHRpb25zIG9wdGlvbnMgPSAwCisgICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkgewor ICAgICAgICAgICAgaWYgKCFyZWNlbnREaXJDbGFzcy5pc0VtcHR5KCkpCisgICAgICAgICAg ICAgICAgS1JlY2VudERpcnM6OmFkZChyZWNlbnREaXJDbGFzcywgS1VybDo6ZnJvbVBhdGgo cmVzdWx0KS51cmwoKSk7CisgICAgICAgICAgICBLUmVjZW50RG9jdW1lbnQ6OmFkZChyZXN1 bHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIGJv b2wgZGVmYXVsdERpciA9IGRpci5pc0VtcHR5KCk7CiAgICAgYm9vbCBzcGVjaWFsRGlyID0g IWRlZmF1bHREaXIgJiYgZGlyLnByb3RvY29sKCkgPT0gImtmaWxlZGlhbG9nIjsKICAgICBL RmlsZURpYWxvZyBkbGcoIHNwZWNpYWxEaXIgPyBkaXIgOiBLVXJsKCksIGZpbHRlciwgcGFy ZW50KTsKQEAgLTM5MCw2ICs2MTIsOSBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBXSWQgcGFyZW50X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGNhcHRpb24pCiB7CisgICAgaWYgKEtGaWxlRGlh bG9nUHJpdmF0ZTo6aXNOYXRpdmUoKSkgeworICAgICAgICByZXR1cm4gS0ZpbGVEaWFsb2c6 OmdldFNhdmVGaWxlTmFtZShkaXIsIGZpbHRlciwgMCwgY2FwdGlvbik7IC8vIGV2ZXJ5dGhp bmcgd2UgY2FuIGRvLi4uCisgICAgfQogICAgIGJvb2wgZGVmYXVsdERpciA9IGRpci5pc0Vt cHR5KCk7CiAgICAgYm9vbCBzcGVjaWFsRGlyID0gIWRlZmF1bHREaXIgJiYgZGlyLnByb3Rv Y29sKCkgPT0gImtmaWxlZGlhbG9nIjsKICAgICBRV2lkZ2V0KiBwYXJlbnQgPSBRV2lkZ2V0 OjpmaW5kKCBwYXJlbnRfaWQgKTsKQEAgLTQyMyw2ICs2NDgsMTEgQEANCiBLVXJsIEtGaWxl RGlhbG9nOjpnZXRTYXZlVXJsKGNvbnN0IEtVcmwmIGRpciwgY29uc3QgUVN0cmluZyYgZmls dGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRV2lkZ2V0ICpwYXJlbnQsIGNv bnN0IFFTdHJpbmcmIGNhcHRpb24pCiB7CisgICAgaWYgKEtGaWxlRGlhbG9nUHJpdmF0ZTo6 aXNOYXRpdmUoKSAmJiAoIWRpci5pc1ZhbGlkKCkgfHwgZGlyLmlzTG9jYWxGaWxlKCkpKSB7 CisgICAgICAgIGNvbnN0IFFTdHJpbmcgZmlsZU5hbWUoIEtGaWxlRGlhbG9nOjpnZXRTYXZl RmlsZU5hbWUoCisgICAgICAgICAgICBkaXIucGF0aCgpLCBmaWx0ZXIsIHBhcmVudCwgY2Fw dGlvbikgKTsKKyAgICAgICAgcmV0dXJuIGZpbGVOYW1lLmlzRW1wdHkoKSA/IEtVcmwoKSA6 IEtVcmw6OmZyb21QYXRoKGZpbGVOYW1lKTsKKyAgICB9CiAgICAgYm9vbCBkZWZhdWx0RGly ID0gZGlyLmlzRW1wdHkoKTsKICAgICBib29sIHNwZWNpYWxEaXIgPSAhZGVmYXVsdERpciAm JiBkaXIucHJvdG9jb2woKSA9PSAia2ZpbGVkaWFsb2ciOwogICAgIEtGaWxlRGlhbG9nIGRs ZyhzcGVjaWFsRGlyID8gZGlyIDogS1VybCgpLCBmaWx0ZXIsIHBhcmVudCk7CkBAIC00NDQs MTEgKzY3NCwxNiBAQA0KIAogdm9pZCBLRmlsZURpYWxvZzo6c2V0TW9kZSggS0ZpbGU6Ok1v ZGVzIG0gKQogewotICAgIGQtPnctPnNldE1vZGUobSk7CisgICAgaWYgKGQtPm5hdGl2ZSkK KyAgICAgICAgZC0+bmF0aXZlLT5tb2RlID0gbTsKKyAgICBlbHNlCisgICAgICAgIGQtPnct PnNldE1vZGUobSk7CiB9CiAKIEtGaWxlOjpNb2RlcyBLRmlsZURpYWxvZzo6bW9kZSgpIGNv bnN0CiB7CisgICAgaWYgKGQtPm5hdGl2ZSkKKyAgICAgICAgcmV0dXJuIGQtPm5hdGl2ZS0+ bW9kZTsKICAgICByZXR1cm4gZC0+dy0+bW9kZSgpOwogfQogCkBAIC00NzksMjYgKzcxNCwz OCBAQA0KIAogdm9pZCBLRmlsZURpYWxvZzo6c2V0S2VlcExvY2F0aW9uKCBib29sIGtlZXAg KQogeworICAgIGlmIChkLT5uYXRpdmUpCisgICAgICAgIHJldHVybjsKICAgICBkLT53LT5z ZXRLZWVwTG9jYXRpb24oa2VlcCk7CiB9CiAKIGJvb2wgS0ZpbGVEaWFsb2c6OmtlZXBzTG9j YXRpb24oKSBjb25zdAogeworICAgIGlmIChkLT5uYXRpdmUpCisgICAgICAgIHJldHVybiBm YWxzZTsKICAgICByZXR1cm4gZC0+dy0+a2VlcHNMb2NhdGlvbigpOwogfQogCiB2b2lkIEtG aWxlRGlhbG9nOjpzZXRPcGVyYXRpb25Nb2RlKCBPcGVyYXRpb25Nb2RlIG1vZGUgKQogewot ICAgIGQtPnctPnNldE9wZXJhdGlvbk1vZGUoc3RhdGljX2Nhc3Q8S0Fic3RyYWN0RmlsZVdp ZGdldDo6T3BlcmF0aW9uTW9kZT4obW9kZSkpOworICAgIGlmIChkLT5uYXRpdmUpCisgICAg ICAgIGQtPm5hdGl2ZS0+b3BlcmF0aW9uTW9kZSA9IHN0YXRpY19jYXN0PEtBYnN0cmFjdEZp bGVXaWRnZXQ6Ok9wZXJhdGlvbk1vZGU+KG1vZGUpOworICAgIGVsc2UKKyAgICAgICAgZC0+ dy0+c2V0T3BlcmF0aW9uTW9kZShzdGF0aWNfY2FzdDxLQWJzdHJhY3RGaWxlV2lkZ2V0OjpP cGVyYXRpb25Nb2RlPihtb2RlKSk7CiB9CiAKIEtGaWxlRGlhbG9nOjpPcGVyYXRpb25Nb2Rl IEtGaWxlRGlhbG9nOjpvcGVyYXRpb25Nb2RlKCkgY29uc3QKIHsKKyAgICBpZiAoZC0+bmF0 aXZlKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8S0ZpbGVEaWFsb2c6Ok9wZXJhdGlv bk1vZGU+KGQtPm5hdGl2ZS0+b3BlcmF0aW9uTW9kZSk7CiAgICAgcmV0dXJuIHN0YXRpY19j YXN0PEtGaWxlRGlhbG9nOjpPcGVyYXRpb25Nb2RlPihkLT53LT5vcGVyYXRpb25Nb2RlKCkp OwogfQogCiB2b2lkIEtGaWxlRGlhbG9nOjprZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKmUg KQogeworICAgIGlmIChkLT5uYXRpdmUpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICgg ZS0+a2V5KCkgPT0gUXQ6OktleV9Fc2NhcGUgKQogICAgIHsKICAgICAgICAgZS0+YWNjZXB0 KCk7CkBAIC01MTAsNiArNzU3LDkgQEANCiAKIHZvaWQgS0ZpbGVEaWFsb2c6OmhpZGVFdmVu dCggUUhpZGVFdmVudCAqZSApCiB7CisgICAgaWYgKGQtPm5hdGl2ZSkKKyAgICAgICAgcmV0 dXJuOworCiAgICAgc2F2ZURpYWxvZ1NpemUoZC0+Y2ZnR3JvdXAsIEtDb25maWdCYXNlOjpQ ZXJzaXN0ZW50KTsKIAogICAgIEtEaWFsb2c6OmhpZGVFdmVudCggZSApOwpAQCAtNTI0LDYg Kzc3NCw4IEBADQogCiB2b2lkIEtGaWxlRGlhbG9nOjpzZXRTdGFydERpciggY29uc3QgS1Vy bCYgZGlyZWN0b3J5ICkKIHsKKyAgICBpZiAoS0ZpbGVEaWFsb2dQcml2YXRlOjppc05hdGl2 ZSgpKQorICAgICAgICBLRmlsZURpYWxvZ1ByaXZhdGU6Ok5hdGl2ZTo6c3RhcnREaXIgPSBk aXJlY3Rvcnk7CiAgICAgZmlsZU1vZHVsZSgpLT5zZXRTdGFydERpcihkaXJlY3RvcnkpOwog fQogCkBAIC01MzcsNDUgKzc4OSwxMDIgQEANCiAgICAgcmV0dXJuIGQtPnc7CiB9CiAKLSNp Zm5kZWYgUV9XU19XSU4KKyNpZmRlZiBRX1dTX1dJTgoraW50IEtGaWxlRGlhbG9nOjpleGVj KCkKK3sKKyAgICBpZiAoIWQtPm5hdGl2ZSkKKyAgICAgIHJldHVybiBRRGlhbG9nOjpleGVj KCk7CisKKyAgICBkLT5uYXRpdmUtPnNlbGVjdGVkVXJscy5jbGVhcigpOworICAgIHN3aXRj aCAoZC0+bmF0aXZlLT5vcGVyYXRpb25Nb2RlKSB7CisgICAgY2FzZSBLQWJzdHJhY3RGaWxl V2lkZ2V0OjpPcGVuaW5nOgorICAgIGNhc2UgS0Fic3RyYWN0RmlsZVdpZGdldDo6T3RoZXI6 CisgICAgICAgIGlmIChkLT5uYXRpdmUtPm1vZGUgJiBLRmlsZTo6RmlsZSkgeworICAgICAg ICAgICAgS1VybCB1cmwoIEtGaWxlRGlhbG9nOjpnZXRPcGVuVXJsKAorICAgICAgICAgICAg ICAgS0ZpbGVEaWFsb2dQcml2YXRlOjpOYXRpdmU6OnN0YXJ0RGlyLCBkLT5uYXRpdmUtPmZp bHRlciwgcGFyZW50V2lkZ2V0KCksIHdpbmRvd1RpdGxlKCkpICk7CisgICAgICAgICAgICBp ZiAodXJsLmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gUURpYWxvZzo6UmVqZWN0ZWQ7CisgICAgICAgICAgICBkLT5uYXRpdmUtPnNlbGVj dGVkVXJscy5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgIHJldHVybiBRRGlhbG9nOjpBY2Nl cHRlZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkLT5uYXRpdmUtPm1vZGUgJiBL RmlsZTo6RmlsZXMpIHsKKyAgICAgICAgICAgIEtVcmw6Okxpc3QgdXJscyggS0ZpbGVEaWFs b2c6OmdldE9wZW5VcmxzKAorICAgICAgICAgICAgICAgIEtGaWxlRGlhbG9nUHJpdmF0ZTo6 TmF0aXZlOjpzdGFydERpciwgZC0+bmF0aXZlLT5maWx0ZXIsIHBhcmVudFdpZGdldCgpLCB3 aW5kb3dUaXRsZSgpKSApOworICAgICAgICAgICAgaWYgKHVybHMuaXNFbXB0eSgpKQorICAg ICAgICAgICAgICAgIHJldHVybiBRRGlhbG9nOjpSZWplY3RlZDsKKyAgICAgICAgICAgIGQt Pm5hdGl2ZS0+c2VsZWN0ZWRVcmxzID0gdXJsczsKKyAgICAgICAgICAgIHJldHVybiBRRGlh bG9nOjpBY2NlcHRlZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkLT5uYXRpdmUt Pm1vZGUgJiBLRmlsZTo6RGlyZWN0b3J5KSB7CisgICAgICAgICAgICBLVXJsIHVybCggS0Zp bGVEaWFsb2c6OmdldEV4aXN0aW5nRGlyZWN0b3J5VXJsKAorICAgICAgICAgICAgICAgIEtG aWxlRGlhbG9nUHJpdmF0ZTo6TmF0aXZlOjpzdGFydERpciwgcGFyZW50V2lkZ2V0KCksIHdp bmRvd1RpdGxlKCkpICk7CisgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCAhdXJs LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUURpYWxvZzo6UmVqZWN0ZWQ7 CisgICAgICAgICAgICBkLT5uYXRpdmUtPnNlbGVjdGVkVXJscy5hcHBlbmQodXJsKTsKKyAg ICAgICAgICAgIHJldHVybiBRRGlhbG9nOjpBY2NlcHRlZDsKKyAgICAgICAgfQorICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtBYnN0cmFjdEZpbGVXaWRnZXQ6OlNhdmluZzoKKyAgICAg ICAgaWYgKGQtPm5hdGl2ZS0+bW9kZSAmIEtGaWxlOjpGaWxlKSB7CisgICAgICAgICAgICBL VXJsIHVybCggS0ZpbGVEaWFsb2c6OmdldFNhdmVVcmwoCisgICAgICAgICAgICAgICAgS0Zp bGVEaWFsb2dQcml2YXRlOjpOYXRpdmU6OnN0YXJ0RGlyLCBkLT5uYXRpdmUtPmZpbHRlciwg cGFyZW50V2lkZ2V0KCksIHdpbmRvd1RpdGxlKCkpICk7CisgICAgICAgICAgICBpZiAodXJs LmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g UURpYWxvZzo6UmVqZWN0ZWQ7CisgICAgICAgICAgICBkLT5uYXRpdmUtPnNlbGVjdGVkVXJs cy5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgIHJldHVybiBRRGlhbG9nOjpBY2NlcHRlZDsK KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkLT5uYXRpdmUtPm1vZGUgJiBLRmlsZTo6 RGlyZWN0b3J5KSB7CisgICAgICAgICAgICBLVXJsIHVybCggS0ZpbGVEaWFsb2c6OmdldEV4 aXN0aW5nRGlyZWN0b3J5VXJsKAorICAgICAgICAgICAgICAgIEtGaWxlRGlhbG9nUHJpdmF0 ZTo6TmF0aXZlOjpzdGFydERpciwgcGFyZW50V2lkZ2V0KCksIHdpbmRvd1RpdGxlKCkpICk7 CisgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkKKyAg ICAgICAgICAgICAgICByZXR1cm4gUURpYWxvZzo6UmVqZWN0ZWQ7CisgICAgICAgICAgICBk LT5uYXRpdmUtPnNlbGVjdGVkVXJscy5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgIHJldHVy biBRRGlhbG9nOjpBY2NlcHRlZDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBk ZWZhdWx0OjsKKyAgICB9CisgICAgcmV0dXJuIFFEaWFsb2c6OlJlamVjdGVkOworfQorI2Vu ZGlmIC8vIFFfV1NfV0lOCisKIHR5cGVkZWYgUVN0cmluZyAoKl9xdF9maWxlZGlhbG9nX2V4 aXN0aW5nX2RpcmVjdG9yeV9ob29rKShRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcg JmNhcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmZGlyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFGaWxlRGlhbG9nOjpP cHRpb25zIG9wdGlvbnMpOwotZXh0ZXJuIF9xdF9maWxlZGlhbG9nX2V4aXN0aW5nX2RpcmVj dG9yeV9ob29rIHF0X2ZpbGVkaWFsb2dfZXhpc3RpbmdfZGlyZWN0b3J5X2hvb2s7Ci0jZW5k aWYKK1FfR1VJX0VYUE9SVCBfcXRfZmlsZWRpYWxvZ19leGlzdGluZ19kaXJlY3RvcnlfaG9v ayBxdF9maWxlZGlhbG9nX2V4aXN0aW5nX2RpcmVjdG9yeV9ob29rOwogCiB0eXBlZGVmIFFT dHJpbmcgKCpfcXRfZmlsZWRpYWxvZ19vcGVuX2ZpbGVuYW1lX2hvb2spKFFXaWRnZXQgKiBw YXJlbnQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJmRpciwgY29u c3QgUVN0cmluZyAmZmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRU3RyaW5nICpzZWxlY3RlZEZpbHRlciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUZpbGVEaWFs b2c6Ok9wdGlvbnMgb3B0aW9ucyk7Ci1leHRlcm4gX3F0X2ZpbGVkaWFsb2dfb3Blbl9maWxl bmFtZV9ob29rIHF0X2ZpbGVkaWFsb2dfb3Blbl9maWxlbmFtZV9ob29rOworUV9HVUlfRVhQ T1JUIF9xdF9maWxlZGlhbG9nX29wZW5fZmlsZW5hbWVfaG9vayBxdF9maWxlZGlhbG9nX29w ZW5fZmlsZW5hbWVfaG9vazsKIAogdHlwZWRlZiBRU3RyaW5nTGlzdCAoKl9xdF9maWxlZGlh bG9nX29wZW5fZmlsZW5hbWVzX2hvb2spKFFXaWRnZXQgKiBwYXJlbnQsIGNvbnN0IFFTdHJp bmcgJmNhcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmZGlyLCBjb25zdCBRU3RyaW5nICZm aWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVN0cmluZyAqc2VsZWN0ZWRGaWx0ZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUZpbGVEaWFsb2c6 Ok9wdGlvbnMgb3B0aW9ucyk7Ci1leHRlcm4gX3F0X2ZpbGVkaWFsb2dfb3Blbl9maWxlbmFt ZXNfaG9vayBxdF9maWxlZGlhbG9nX29wZW5fZmlsZW5hbWVzX2hvb2s7CitRX0dVSV9FWFBP UlQgX3F0X2ZpbGVkaWFsb2dfb3Blbl9maWxlbmFtZXNfaG9vayBxdF9maWxlZGlhbG9nX29w ZW5fZmlsZW5hbWVzX2hvb2s7CiAKIHR5cGVkZWYgUVN0cmluZyAoKl9xdF9maWxlZGlhbG9n X3NhdmVfZmlsZW5hbWVfaG9vaykoUVdpZGdldCAqIHBhcmVudCwgY29uc3QgUVN0cmluZyAm Y2FwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgUVN0cmluZyAmZGlyLCBjb25zdCBRU3RyaW5nICZmaWx0ZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFT dHJpbmcgKnNlbGVjdGVkRmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRRmlsZURpYWxvZzo6T3B0aW9ucyBvcHRpb25zKTsK LWV4dGVybiBfcXRfZmlsZWRpYWxvZ19zYXZlX2ZpbGVuYW1lX2hvb2sgcXRfZmlsZWRpYWxv Z19zYXZlX2ZpbGVuYW1lX2hvb2s7CitRX0dVSV9FWFBPUlQgX3F0X2ZpbGVkaWFsb2dfc2F2 ZV9maWxlbmFtZV9ob29rIHF0X2ZpbGVkaWFsb2dfc2F2ZV9maWxlbmFtZV9ob29rOwogCiAv KgogICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIG92ZXJyaWRlIFF0J3MgUUZpbGVEaWFsb2cg Y2FsbHMgd2l0aCBLRmlsZURpYWxvZyBvbmVzLgogICogVGhpcyBpcyBuZWNlc3NhcnkgYmVj YXVzZSBRUHJpbnREaWFsb2cgY2FsbHMgUUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSgp IGZvcgogICogdGhlIHByaW50IHRvIGZpbGUgZnVuY3Rpb24uCiAgKi8KLQotc3RydWN0IEtG aWxlRGlhbG9nUXRPdmVycmlkZQorY2xhc3MgS0ZpbGVEaWFsb2dRdE92ZXJyaWRlCiB7Citw dWJsaWM6CiAgICAgS0ZpbGVEaWFsb2dRdE92ZXJyaWRlKCkKICAgICB7Ci0jaWZuZGVmIFFf V1NfV0lOCisgICAgICAgIGlmIChLRmlsZURpYWxvZ1ByaXZhdGU6OmlzTmF0aXZlKCkpCisg ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmKCFxdF9maWxlZGlhbG9nX2V4aXN0aW5n X2RpcmVjdG9yeV9ob29rKQogICAgICAgICAgICAgcXRfZmlsZWRpYWxvZ19leGlzdGluZ19k aXJlY3RvcnlfaG9vaz0mZ2V0RXhpc3RpbmdEaXJlY3Rvcnk7Ci0jZW5kaWYKICAgICAgICAg aWYoIXF0X2ZpbGVkaWFsb2dfb3Blbl9maWxlbmFtZV9ob29rKQogICAgICAgICAgICAgcXRf ZmlsZWRpYWxvZ19vcGVuX2ZpbGVuYW1lX2hvb2s9JmdldE9wZW5GaWxlTmFtZTsKICAgICAg ICAgaWYoIXF0X2ZpbGVkaWFsb2dfb3Blbl9maWxlbmFtZXNfaG9vaykKQEAgLTYzOCw3ICs5 NDcsNiBAQA0KICAgICAgICAgfQogICAgIH0KIAotI2lmbmRlZiBRX1dTX1dJTgogICAgIHN0 YXRpYyBRU3RyaW5nIGdldEV4aXN0aW5nRGlyZWN0b3J5KFFXaWRnZXQgKnBhcmVudCwgY29u c3QgUVN0cmluZyAmY2FwdGlvbiwgY29uc3QgUVN0cmluZyAmZGlyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFGaWxlRGlhbG9nOjpPcHRpb25zKQogICAg IHsKQEAgLTY0OSw3ICs5NTcsNiBAQA0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0 dXJuIFFTdHJpbmcoKTsKICAgICB9Ci0jZW5kaWYKIAogICAgIHN0YXRpYyBRU3RyaW5nIGdl dE9wZW5GaWxlTmFtZShRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24s IGNvbnN0IFFTdHJpbmcgJmRpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgUVN0cmluZyAmZmlsdGVyLCBRU3RyaW5nICpzZWxlY3RlZEZpbHRlciwKSW5k ZXg6IGtpby9rZmlsZS9rZmlsZWRpYWxvZy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0ga2lvL2tm aWxlL2tmaWxlZGlhbG9nLmgJKHdlcnNqYSA4MTk2NzUpDQorKysga2lvL2tmaWxlL2tmaWxl ZGlhbG9nLmgJKGtvcGlhIHJvYm9jemEpDQpAQCAtNjkxLDYgKzY5MSwxMSBAQA0KICAgICAg Ki8KICAgICBzdGF0aWMgdm9pZCBzZXRTdGFydERpciggY29uc3QgS1VybCYgZGlyZWN0b3J5 ICk7CiAKKyNpZmRlZiBRX1dTX1dJTgorcHVibGljIFFfU0xPVFM6CisgICAgaW50IGV4ZWMo KTsKKyNlbmRpZgorCiBRX1NJR05BTFM6CiAgICAgLyoqCiAgICAgICAqIEVtaXR0ZWQgd2hl biB0aGUgdXNlciBzZWxlY3RzIGEgZmlsZS4gSXQgaXMgb25seSBlbWl0dGVkIGluIHNpbmds ZS0K --------------060200050801010900090907--