Re: Decreasing seams in scaled windows
Neil Hodgson <[email protected]> Wed, 24 Jun 2026 08:28:14 +1000
| Newsgroups | gmane.comp.lib.scintilla.devel |
|---|---|
| Message-ID | <CACWkrTjzHj5q=xbTxtu2X7O0xb=03oqpCXubsb0+t6Z8rXJugg@mail.gmail.com> |
--0000000000002936a10654f347a4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable John: > I=E2=80=99ve been unable to reproduce, possibly because my Wayland setup = is different than yours. Yes, it could be system, library, or font matching issues. It could also be occurring or not because of minor differences: lucking into an evenly divisible line height or having the top of Scintilla at different scale phases. > I=E2=80=99m using a Ubuntu 24.04 based system and when the system display= magnification is set to 150%, Wayland uses a 2.0 device pixel ratio and th= en scales the 200% to 150%. OK, that is probably what is occurring to me since there is an initial integer devicePixelRatioF then the DevicePixelRatioChange event arrives and it updates to 1.5. > My take now is that Qt scaling is buggy on macOS and Wayland =E2=80=94 th= e listbox and menus show more debris than scintilla does when the highlight= ed item moves. So, should I commit a version (attached) that leaves Wayland with full-window invalidation for non-integer scaling? That would make it easier for people to experiment with this since the bulk of the code is more easily downloaded. Patch includes your SCINTILLA_QT_BACKINGSTORE_FIXED change for macOS. Neil --=20 You received this message because you are subscribed to the Google Groups "= scintilla-interest" group. To unsubscribe from this group and stop receiving emails from it, send an e= mail to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/scintilla-i= nterest/CACWkrTjzHj5q%3DxbTxtu2X7O0xb%3D03oqpCXubsb0%2Bt6Z8rXJugg%40mail.gm= ail.com. --0000000000002936a10654f347a4 Content-Type: application/octet-stream; name="QtScaleK.patch" Content-Disposition: attachment; filename="QtScaleK.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mqr7sgj80> X-Attachment-Id: f_mqr7sgj80 ZGlmZiAtciA1NGQ4MTE4ZTkzOGYgY2FsbC9TY2ludGlsbGFDYWxsLmN4eAotLS0gYS9jYWxsL1Nj aW50aWxsYUNhbGwuY3h4CVRodSBKdW4gMTggMTM6MDQ6NDYgMjAyNiArMTAwMAorKysgYi9jYWxs L1NjaW50aWxsYUNhbGwuY3h4CVNhdCBKdW4gMjAgMDk6MjM6MzcgMjAyNiArMTAwMApAQCAtMzU1 OSw2ICszNTU5LDE0IEBACiAJQ2FsbFBvaW50ZXIoTWVzc2FnZTo6U2V0SUxleGVyLCAwLCBpbGV4 ZXIpOwogfQogCit2b2lkIFNjaW50aWxsYUNhbGw6OlNldFNjYWxlVGVjaG5pcXVlKFNjaW50aWxs YTo6U2NhbGVUZWNobmlxdWUgdGVjaG5pcXVlKSB7CisJQ2FsbChNZXNzYWdlOjpTZXRTY2FsZVRl Y2huaXF1ZSwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pih0ZWNobmlxdWUpKTsKK30KKworU2NhbGVU ZWNobmlxdWUgU2NpbnRpbGxhQ2FsbDo6U2NhbGVUZWNobmlxdWUoKSB7CisJcmV0dXJuIHN0YXRp Y19jYXN0PFNjaW50aWxsYTo6U2NhbGVUZWNobmlxdWU+KENhbGwoTWVzc2FnZTo6R2V0U2NhbGVU ZWNobmlxdWUpKTsKK30KKwogQmlkaXJlY3Rpb25hbCBTY2ludGlsbGFDYWxsOjpCaWRpcmVjdGlv bmFsKCkgewogCXJldHVybiBzdGF0aWNfY2FzdDxTY2ludGlsbGE6OkJpZGlyZWN0aW9uYWw+KENh bGwoTWVzc2FnZTo6R2V0QmlkaXJlY3Rpb25hbCkpOwogfQpkaWZmIC1yIDU0ZDgxMThlOTM4ZiBk b2MvU2NpbnRpbGxhRG9jLmh0bWwKLS0tIGEvZG9jL1NjaW50aWxsYURvYy5odG1sCVRodSBKdW4g MTggMTM6MDQ6NDYgMjAyNiArMTAwMAorKysgYi9kb2MvU2NpbnRpbGxhRG9jLmh0bWwJU2F0IEp1 biAyMCAwOToyMzozNyAyMDI2ICsxMDAwCkBAIC01MTA2LDYgKzUxMDYsOCBAQAogICAgIDwvY29k ZT4KIDxkaXYgIGNsYXNzPSJwcm92aXNpb25hbCI+CiAgICAgPGNvZGU+CisgICAgIDxhIGNsYXNz PSJtZXNzYWdlIiBocmVmPSIjU0NJX1NFVFNDQUxFVEVDSE5JUVVFIj5TQ0lfU0VUU0NBTEVURUNI TklRVUUoaW50IHRlY2huaXF1ZSk8L2E+PGJyIC8+CisgICAgIDxhIGNsYXNzPSJtZXNzYWdlIiBo cmVmPSIjU0NJX0dFVFNDQUxFVEVDSE5JUVVFIj5TQ0lfR0VUU0NBTEVURUNITklRVUUgJnJhcnI7 IGludDwvYT48YnIgLz4KICAgICAgPGEgY2xhc3M9Im1lc3NhZ2UiIGhyZWY9IiNTQ0lfU0VUQklE SVJFQ1RJT05BTCI+PHNwYW4gY2xhc3M9InByb3Zpc2lvbmFsIj5TQ0lfU0VUQklESVJFQ1RJT05B TChpbnQgYmlkaXJlY3Rpb25hbCk8L3NwYW4+PC9hPjxiciAvPgogICAgICA8YSBjbGFzcz0ibWVz c2FnZSIgaHJlZj0iI1NDSV9HRVRCSURJUkVDVElPTkFMIj5TQ0lfR0VUQklESVJFQ1RJT05BTCAm cmFycjsgaW50PC9hPjxiciAvPgogICAgIDwvY29kZT4KQEAgLTUzNTYsNiArNTM1OCwzNSBAQAog ICAgICBub3RpZmljYXRpb24gKHdpdGggPGNvZGUgY2xhc3M9InBhcmFtZXRlciI+Y2hhcmFjdGVy U291cmNlPC9jb2RlPiBzZXQgdG8gPGNvZGU+U0NfQ0hBUkFDVEVSU09VUkNFX1RFTlRBVElWRV9J TlBVVDwvY29kZT4pIGlzIHNlbnQgZm9yIGVhY2ggY2hhcmFjdGVyLjwvcD4KIAogPGRpdiAgY2xh c3M9InByb3Zpc2lvbmFsIj4KKyAgIDxwPjxiIGlkPSJTQ0lfU0VUU0NBTEVURUNITklRVUUiPlND SV9TRVRTQ0FMRVRFQ0hOSVFVRShpbnQgdGVjaG5pcXVlKTwvYj48YnIgLz4KKyAgICAgPGIgaWQ9 IlNDSV9HRVRTQ0FMRVRFQ0hOSVFVRSI+U0NJX0dFVFNDQUxFVEVDSE5JUVVFICZyYXJyOyBpbnQ8 L2I+PGJyIC8+CisgICAgIFRoaXMgc2V0dGluZyBjaGFuZ2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBv ZiBkaXNwbGF5IHNjYWxpbmcgb24gc29tZSBwbGF0Zm9ybXMuPC9wPgorCisgICAgPHRhYmxlIGNs YXNzPSJzdGFuZGFyZCIgc3VtbWFyeT0iVGVjaG5vbG9neSBjaG9pY2UiPgorICAgICAgPHRib2R5 IHZhbGlnbj0idG9wIj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aCBhbGlnbj0ibGVmdCI+ PGNvZGU+U0NBTEVfVEVDSE5JUVVFX0RFRkFVTFQ8L2NvZGU+PC90aD4KKworICAgICAgICAgIDx0 ZD4wPC90ZD4KKworICAgICAgICAgIDx0ZD5EZWZhdWx0IGJlaGF2aW91ciBmb3IgdGhlIHBsYXRm b3JtLjwvdGQ+CisgICAgICAgIDwvdHI+CisKKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aCBh bGlnbj0ibGVmdCI+PGNvZGU+U0NBTEVfVEVDSE5JUVVFX1BJWEVMX0FMSUdORUQ8L2NvZGU+PC90 aD4KKworICAgICAgICAgIDx0ZD4xPC90ZD4KKworICAgICAgICAgIDx0ZD5BbGlnbiB0b3AgYW5k IGJvdHRvbSBvZiBsaW5lcyB0byBwaHlzaWNhbCBwaXhlbHMgYW5kIGF2b2lkICdzZWFtcycgYmV0 d2VlbiBiYWNrZ3JvdW5kIHJlY3RhbmdsZXMgZm9yIGZyYWN0aW9uYWwgc2NhbGluZy4KKwkgIElt cGxlbWVudGVkIG9uIFF0LiBUaGlzIG1vZGUgbWF5IGJlIHNsb3dlciB0aGFuIHRoZSBkZWZhdWx0 LjwvdGQ+CisgICAgICAgIDwvdHI+CisKKyAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzwv ZGl2PgorICAgIDxiciAvPgorCis8ZGl2ICBjbGFzcz0icHJvdmlzaW9uYWwiPgogICAgIDxhIGhy ZWY9IiNQcm92aXNpb25hbE1lc3NhZ2VzIj5UaGVzZSBiaWRpcmVjdGlvbmFsIGZlYXR1cmVzIGFy ZSBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUuPC9hPjxiciAvPgogICAgIDxwPjxiIGlkPSJT Q0lfU0VUQklESVJFQ1RJT05BTCI+U0NJX1NFVEJJRElSRUNUSU9OQUwoaW50IGJpZGlyZWN0aW9u YWwpPC9iPjxiciAvPgogICAgICA8YiBpZD0iU0NJX0dFVEJJRElSRUNUSU9OQUwiPlNDSV9HRVRC SURJUkVDVElPTkFMICZyYXJyOyBpbnQ8L2I+PGJyIC8+CmRpZmYgLXIgNTRkODExOGU5MzhmIGlu Y2x1ZGUvU2NpbnRpbGxhLmgKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGEuaAlUaHUgSnVuIDE4IDEz OjA0OjQ2IDIwMjYgKzEwMDAKKysrIGIvaW5jbHVkZS9TY2ludGlsbGEuaAlTYXQgSnVuIDIwIDA5 OjIzOjM3IDIwMjYgKzEwMDAKQEAgLTEzMzMsNiArMTMzMywxMCBAQAogI2RlZmluZSBTQ05fTUFS R0lOUklHSFRDTElDSyAyMDMxCiAjZGVmaW5lIFNDTl9BVVRPQ1NFTEVDVElPTkNIQU5HRSAyMDMy CiAjaWZuZGVmIFNDSV9ESVNBQkxFX1BST1ZJU0lPTkFMCisjZGVmaW5lIFNDQUxFX1RFQ0hOSVFV RV9ERUZBVUxUIDAKKyNkZWZpbmUgU0NBTEVfVEVDSE5JUVVFX1BJWEVMX0FMSUdORUQgMQorI2Rl ZmluZSBTQ0lfU0VUU0NBTEVURUNITklRVUUgMjgyMAorI2RlZmluZSBTQ0lfR0VUU0NBTEVURUNI TklRVUUgMjgyMQogI2RlZmluZSBTQ19CSURJUkVDVElPTkFMX0RJU0FCTEVEIDAKICNkZWZpbmUg U0NfQklESVJFQ1RJT05BTF9MMlIgMQogI2RlZmluZSBTQ19CSURJUkVDVElPTkFMX1IyTCAyCmRp ZmYgLXIgNTRkODExOGU5MzhmIGluY2x1ZGUvU2NpbnRpbGxhLmlmYWNlCi0tLSBhL2luY2x1ZGUv U2NpbnRpbGxhLmlmYWNlCVRodSBKdW4gMTggMTM6MDQ6NDYgMjAyNiArMTAwMAorKysgYi9pbmNs dWRlL1NjaW50aWxsYS5pZmFjZQlTYXQgSnVuIDIwIDA5OjIzOjM3IDIwMjYgKzEwMDAKQEAgLTM1 NDIsNiArMzU0MiwxNiBAQAogCiBjYXQgUHJvdmlzaW9uYWwKIAorZW51IFNjYWxlVGVjaG5pcXVl PVNDQUxFX1RFQ0hOSVFVRV8KK3ZhbCBTQ0FMRV9URUNITklRVUVfREVGQVVMVD0wCit2YWwgU0NB TEVfVEVDSE5JUVVFX1BJWEVMX0FMSUdORUQ9MQorCisjIFNldCB0aGUgc2NhbGUgdGVjaG5pcXVl CitzZXQgdm9pZCBTZXRTY2FsZVRlY2huaXF1ZT0yODIwKFNjYWxlVGVjaG5pcXVlIHRlY2huaXF1 ZSwpCisKKyMgR2V0IHRoZSBzY2FsZSB0ZWNobmlxdWUKK2dldCBTY2FsZVRlY2huaXF1ZSBHZXRT Y2FsZVRlY2huaXF1ZT0yODIxKCwpCisKIGVudSBCaWRpcmVjdGlvbmFsPVNDX0JJRElSRUNUSU9O QUxfCiB2YWwgU0NfQklESVJFQ1RJT05BTF9ESVNBQkxFRD0wCiB2YWwgU0NfQklESVJFQ1RJT05B TF9MMlI9MQpkaWZmIC1yIDU0ZDgxMThlOTM4ZiBpbmNsdWRlL1NjaW50aWxsYUNhbGwuaAotLS0g YS9pbmNsdWRlL1NjaW50aWxsYUNhbGwuaAlUaHUgSnVuIDE4IDEzOjA0OjQ2IDIwMjYgKzEwMDAK KysrIGIvaW5jbHVkZS9TY2ludGlsbGFDYWxsLmgJU2F0IEp1biAyMCAwOToyMzozNyAyMDI2ICsx MDAwCkBAIC05MzUsNiArOTM1LDggQEAKIAlpbnQgRGVzY3JpcHRpb25PZlN0eWxlKGludCBzdHls ZSwgY2hhciAqZGVzY3JpcHRpb24pOwogCXN0ZDo6c3RyaW5nIERlc2NyaXB0aW9uT2ZTdHlsZShp bnQgc3R5bGUpOwogCXZvaWQgU2V0SUxleGVyKHZvaWQgKmlsZXhlcik7CisJdm9pZCBTZXRTY2Fs ZVRlY2huaXF1ZShTY2ludGlsbGE6OlNjYWxlVGVjaG5pcXVlIHRlY2huaXF1ZSk7CisJU2NpbnRp bGxhOjpTY2FsZVRlY2huaXF1ZSBTY2FsZVRlY2huaXF1ZSgpOwogCVNjaW50aWxsYTo6QmlkaXJl Y3Rpb25hbCBCaWRpcmVjdGlvbmFsKCk7CiAJdm9pZCBTZXRCaWRpcmVjdGlvbmFsKFNjaW50aWxs YTo6QmlkaXJlY3Rpb25hbCBiaWRpcmVjdGlvbmFsKTsKIApkaWZmIC1yIDU0ZDgxMThlOTM4ZiBp bmNsdWRlL1NjaW50aWxsYU1lc3NhZ2VzLmgKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGFNZXNzYWdl cy5oCVRodSBKdW4gMTggMTM6MDQ6NDYgMjAyNiArMTAwMAorKysgYi9pbmNsdWRlL1NjaW50aWxs YU1lc3NhZ2VzLmgJU2F0IEp1biAyMCAwOToyMzozNyAyMDI2ICsxMDAwCkBAIC04MzEsNiArODMx LDggQEAKIAlUYWdzT2ZTdHlsZSA9IDQwMzEsCiAJRGVzY3JpcHRpb25PZlN0eWxlID0gNDAzMiwK IAlTZXRJTGV4ZXIgPSA0MDMzLAorCVNldFNjYWxlVGVjaG5pcXVlID0gMjgyMCwKKwlHZXRTY2Fs ZVRlY2huaXF1ZSA9IDI4MjEsCiAJR2V0QmlkaXJlY3Rpb25hbCA9IDI3MDgsCiAJU2V0QmlkaXJl Y3Rpb25hbCA9IDI3MDksCiB9OwpkaWZmIC1yIDU0ZDgxMThlOTM4ZiBpbmNsdWRlL1NjaW50aWxs YVR5cGVzLmgKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGFUeXBlcy5oCVRodSBKdW4gMTggMTM6MDQ6 NDYgMjAyNiArMTAwMAorKysgYi9pbmNsdWRlL1NjaW50aWxsYVR5cGVzLmgJU2F0IEp1biAyMCAw OToyMzozNyAyMDI2ICsxMDAwCkBAIC02NTcsNiArNjU3LDExIEBACiAJSW1lUmVzdWx0ID0gMiwK IH07CiAKK2VudW0gY2xhc3MgU2NhbGVUZWNobmlxdWUgeworCURlZmF1bHQgPSAwLAorCVBpeGVs QWxpZ25lZCA9IDEsCit9OworCiBlbnVtIGNsYXNzIEJpZGlyZWN0aW9uYWwgewogCURpc2FibGVk ID0gMCwKIAlMMlIgPSAxLApkaWZmIC1yIDU0ZDgxMThlOTM4ZiBxdC9TY2ludGlsbGFFZGl0QmFz ZS9QbGF0UXQuY3BwCi0tLSBhL3F0L1NjaW50aWxsYUVkaXRCYXNlL1BsYXRRdC5jcHAJVGh1IEp1 biAxOCAxMzowNDo0NiAyMDI2ICsxMDAwCisrKyBiL3F0L1NjaW50aWxsYUVkaXRCYXNlL1BsYXRR dC5jcHAJU2F0IEp1biAyMCAwOToyMzozNyAyMDI2ICsxMDAwCkBAIC0xODMsMTMgKzE4MywxNCBA QAogCiBTdXJmYWNlSW1wbDo6U3VyZmFjZUltcGwoKSA9IGRlZmF1bHQ7CiAKLVN1cmZhY2VJbXBs OjpTdXJmYWNlSW1wbChpbnQgd2lkdGgsIGludCBoZWlnaHQsIFN1cmZhY2VNb2RlIG1vZGVfKQor U3VyZmFjZUltcGw6OlN1cmZhY2VJbXBsKGludCB3aWR0aCwgaW50IGhlaWdodCwgU3VyZmFjZU1v ZGUgbW9kZV8sIHFyZWFsIHNjYWxlXykKIHsKIAlpZiAod2lkdGggPCAxKSB3aWR0aCA9IDE7CiAJ aWYgKGhlaWdodCA8IDEpIGhlaWdodCA9IDE7CiAJZGV2aWNlT3duZWQgPSB0cnVlOwogCWRldmlj ZSA9IG5ldyBRUGl4bWFwKHdpZHRoLCBoZWlnaHQpOwogCW1vZGUgPSBtb2RlXzsKKwlzY2FsZSA9 IHNjYWxlXzsKIH0KIAogU3VyZmFjZUltcGw6On5TdXJmYWNlSW1wbCgpCkBAIC0yMTIsMjEgKzIx Myw4OCBAQAogCXBhaW50ZXJPd25lZCA9IGZhbHNlOwogfQogCitkb3VibGUgU2NhbGVPZldpbmRv dyhXaW5kb3dJRCB3aWQpCit7CisJY29uc3QgUVdpZGdldCAqd2lkZ2V0ID0gd2luZG93KHdpZCk7 CisJaWYgKCF3aWRnZXQpIHsKKwkJcmV0dXJuIDEuMDsKKwl9CisJY29uc3QgUVZhcmlhbnQgdmFy aWFudCA9IHdpZGdldC0+cHJvcGVydHkoIlNjaW50aWxsYVNjYWxlIik7CisJcmV0dXJuIHZhcmlh bnQudG9Eb3VibGUoKTsKK30KKworLy8gRGVmaW5lIFNDSU5USUxMQV9RVF9CQUNLSU5HU1RPUkVf RklYRUQgd2hlbiBidWlsZGluZyBhZ2FpbnN0IGEgUXQgd2hvc2UKKy8vIGJhY2tpbmcgc3RvcmUg dHJhY2tzIGRpcnR5IHN0YXRlIGF0IGRldmljZS1waXhlbCByZXNvbHV0aW9uOyB0aGF0IG1ha2Vz IHRoZQorLy8gZnJhY3Rpb25hbC1zY2FsaW5nIHdvcmthcm91bmRzIGJlbG93IGNvbXBpbGUgb3V0 IGVudGlyZWx5LgorCisjaWYgZGVmaW5lZChRX09TX0FQUExFKSAmJiAhZGVmaW5lZChTQ0lOVElM TEFfUVRfQkFDS0lOR1NUT1JFX0ZJWEVEKQorLy8gR3JvdyBhIGxvZ2ljYWwgdXBkYXRlIHJlY3Qg c28gaXRzIGNvb3JkaW5hdGVzIHRyYW5zbGF0ZSBpbnRvIGV2ZW4gZGV2aWNlCisvLyBwaXhlbHMg dy9vIHJvdW5kaW5nLiBUaGUgY29vcmRpbmF0ZXMgbmVlZCB0byBiZSBldmVuIGJlY2F1c2UgdGhl cmUncworLy8gYSBkaXJ0eSBncmlkIHRoYXQncyAxLzIgdGhlIHNpemUgb2YgdGhlIGRldmljZSBw aXhlbCBncmlkIG9uIFJldGluYQorLy8gZGlzcGxheXMuIFRoaXMgbWF5IGdyb3cgdGhlIHJlY3Qg bW9yZSB0aGFuIG5lZWRlZCBvbiBub24tUmV0aW5hIGRpc3BsYXlzCitzdGF0aWMgUVJlY3QgU25h cFRvRGV2aWNlUGl4ZWxHcmlkKFFSZWN0IHVwZCwgcXJlYWwgc2NhbGUsIFFTaXplIHdpZGdldFNp emUpCit7CisJY29uc3QgaW50IGJhY2tpbmcgPSAoc2NhbGUgPj0gMi4wKSA/IDIgOiAxOworCWlm IChiYWNraW5nID09IDEpCisJCXJldHVybiB1cGQ7ICAgLy8gZ3JpZCBpcyBhbHJlYWR5IGRldmlj ZS1waXhlbCByZXNvbHV0aW9uOyBub3RoaW5nIHRvIHNuYXAKKworCS8vIHEgbG9naWNhbCBwaXhl bHMgc3BhbiBxICogKHNjYWxlL2JhY2tpbmcpIGdyaWQgY2VsbHMuICBUaGUgc21hbGxlc3QgcQor CS8vIHRoYXQgbWFrZXMgdGhpcyB3aG9sZSBpcyB0aGUgc25hcCBwZXJpb2Qgd2hvc2UgbXVsdGlw bGVzIHB1dCBsb2dpY2FsCisJLy8gZWRnZXMgb24gdGhlIGRldmljZS1waXhlbCBncmlkLiAgKHNj YWxlL2JhY2tpbmcgaXMgdGhlIGZyYWN0aW9uYWwKKwkvLyBRVF9TQ0FMRV9GQUNUT1IsIGUuZy4g MS41IC0+IHEgPT0gMiwgMS4yNSAtPiBxID09IDQuKQorCWNvbnN0IGRvdWJsZSB6b29tID0gc2Nh bGUgLyBiYWNraW5nOworCWludCBxID0gMDsKKwlmb3IgKGludCBuID0gMTsgbiA8PSA4OyArK24p IHsKKwkJaWYgKHN0ZDo6ZmFicyh6b29tICogbiAtIHN0ZDo6cm91bmQoem9vbSAqIG4pKSA8IDFl LTQpIHsKKwkJCXEgPSBuOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHEgPT0gMCkKKwkJcmV0 dXJuIFFSZWN0KCk7ICAgLy8gbm90IGEgc2ltcGxlIHJhdGlvCisJaWYgKHEgPT0gMSkKKwkJcmV0 dXJuIHVwZDsgICAgICAgLy8gYWxyZWFkeSBvbiB0aGUgZ3JpZAorCisJYXV0byBmbG9vclRvID0g W10oaW50IHYsIGludCBuKSB7IGludCByID0gdiAlIG47IGlmIChyIDwgMCkgciArPSBuOyByZXR1 cm4gdiAtIHI7IH07CisJY29uc3QgaW50IGwgPSBmbG9vclRvKHVwZC5sZWZ0KCksICAgcSk7CisJ Y29uc3QgaW50IHQgPSBmbG9vclRvKHVwZC50b3AoKSwgICAgcSk7CisJY29uc3QgaW50IHIgPSBm bG9vclRvKHVwZC5yaWdodCgpICArIHEsIHEpIC0gMTsgICAvLyBjZWlsIHRoZSBleGNsdXNpdmUg ZWRnZQorCWNvbnN0IGludCBiID0gZmxvb3JUbyh1cGQuYm90dG9tKCkgKyBxLCBxKSAtIDE7CisJ Y29uc3QgUVJlY3Qgc25hcHBlZChRUG9pbnQobCwgdCksIFFQb2ludChyLCBiKSk7CisJaWYgKHNu YXBwZWQud2lkdGgoKSA+PSB3aWRnZXRTaXplLndpZHRoKCkgJiYgc25hcHBlZC5oZWlnaHQoKSA+ PSB3aWRnZXRTaXplLmhlaWdodCgpKQorCQlyZXR1cm4gUVJlY3QoKTsgICAvLyB3b3VsZCBjb3Zl ciB0aGUgd2hvbGUgd2lkZ2V0CisJcmV0dXJuIHNuYXBwZWQ7Cit9CisjZW5kaWYKKworZG91Ymxl IFNjYWxlVG9NdWx0aXBseShXaW5kb3dJRCB3aWQpCit7CisJY29uc3QgcXJlYWwgc2NhbGUgPSBT Y2FsZU9mV2luZG93KHdpZCk7CisJcmV0dXJuIHNjYWxlID8gc2NhbGUgOiAxLjA7Cit9CisKIHZv aWQgU3VyZmFjZUltcGw6OkluaXQoV2luZG93SUQgd2lkKQogewogCVJlbGVhc2UoKTsKLQlkZXZp Y2UgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0ICo+KHdpZCk7CisJZGV2aWNlID0gd2luZG93KHdpZCk7 CisJc2NhbGUgPSBTY2FsZU9mV2luZG93KHdpZCk7CiB9CiAKIHZvaWQgU3VyZmFjZUltcGw6Oklu aXQoU3VyZmFjZUlEIHNpZCwgV2luZG93SUQgLyp3aWQqLykKIHsKIAlSZWxlYXNlKCk7CiAJZGV2 aWNlID0gc3RhdGljX2Nhc3Q8UVBhaW50RGV2aWNlICo+KHNpZCk7CisJc2NhbGUgPSAwLjA7CiB9 CiAKIHN0ZDo6dW5pcXVlX3B0cjxTdXJmYWNlPiBTdXJmYWNlSW1wbDo6QWxsb2NhdGVQaXhNYXAo aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotCXJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFN1cmZh Y2VJbXBsPih3aWR0aCwgaGVpZ2h0LCBtb2RlKTsKKwlyZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxT dXJmYWNlSW1wbD4od2lkdGgsIGhlaWdodCwgbW9kZSwgc2NhbGUpOworfQorCitzdGQ6OnVuaXF1 ZV9wdHI8U3VyZmFjZT4gU3VyZmFjZUltcGxfQWxsb2NhdGVQaXhNYXAoaW50IHdpZHRoLCBpbnQg aGVpZ2h0LCBTdXJmYWNlTW9kZSBtb2RlLCBxcmVhbCBzY2FsZSkKK3sKKwlyZXR1cm4gc3RkOjpt YWtlX3VuaXF1ZTxTdXJmYWNlSW1wbD4od2lkdGgsIGhlaWdodCwgbW9kZSwgc2NhbGUpOwogfQog CiB2b2lkIFN1cmZhY2VJbXBsOjpTZXRNb2RlKFN1cmZhY2VNb2RlIG1vZGVfKQpAQCAtMzA5LDcg KzM3NywxMSBAQAogCiBpbnQgU3VyZmFjZUltcGw6OkRldmljZUhlaWdodEZvbnQoaW50IHBvaW50 cykKIHsKLQlyZXR1cm4gcG9pbnRzOworCWlmIChzY2FsZSkgeworCQlyZXR1cm4gcG9pbnRzICog c2NhbGU7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHBvaW50czsKKwl9CiB9CiAKIHZvaWQgU3VyZmFj ZUltcGw6OkxpbmVEcmF3KFBvaW50IHN0YXJ0LCBQb2ludCBlbmQsIFN0cm9rZSBzdHJva2UpCkBA IC03OTYsNiArODY4LDEwIEBACiAJCXBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OlRl eHRBbnRpYWxpYXNpbmcsIHRydWUpOwogCiAJCXBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50 ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKwkJaWYgKHNjYWxlKSB7CisJCQlwYWludGVyLT5z Y2FsZSgxLjAgLyBzY2FsZSwgMS4wIC8gc2NhbGUpOworCQl9CiAJfQogCiAJcmV0dXJuIHBhaW50 ZXI7CkBAIC04MTEsMTEgKzg4Nyw2IEBACiAKIG5hbWVzcGFjZSB7CiAKLVFXaWRnZXQgKndpbmRv dyhXaW5kb3dJRCB3aWQpIG5vZXhjZXB0Ci17Ci0JcmV0dXJuIHN0YXRpY19jYXN0PFFXaWRnZXQg Kj4od2lkKTsKLX0KLQogUVJlY3QgU2NyZWVuUmVjdGFuZ2xlRm9yUG9pbnQoUVBvaW50IHBvc0ds b2JhbCkKIHsKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMTAsIDApCkBA IC04NTQsNiArOTI1LDggQEAKIAogdm9pZCBXaW5kb3c6OlNldFBvc2l0aW9uUmVsYXRpdmUoUFJl Y3RhbmdsZSByYywgY29uc3QgV2luZG93ICpyZWxhdGl2ZVRvKQogeworCWNvbnN0IHFyZWFsIHNj YWxlID0gU2NhbGVUb011bHRpcGx5KHJlbGF0aXZlVG8tPndpZCk7CisJcmMgPSByYyAvIHNjYWxl OwogCVFQb2ludCBvUG9zID0gd2luZG93KHJlbGF0aXZlVG8tPndpZCktPm1hcFRvR2xvYmFsKFFQ b2ludCgwLDApKTsKIAlpbnQgb3ggPSBvUG9zLngoKTsKIAlpbnQgb3kgPSBvUG9zLnkoKTsKQEAg LTg4NCw3ICs5NTcsOSBAQAogUFJlY3RhbmdsZSBXaW5kb3c6OkdldENsaWVudFBvc2l0aW9uKCkg Y29uc3QKIHsKIAkvLyBUaGUgY2xpZW50IHBvc2l0aW9uIGlzIHRoZSB3aW5kb3cgcG9zaXRpb24K LQlyZXR1cm4gR2V0UG9zaXRpb24oKTsKKwljb25zdCBxcmVhbCBzY2FsZSA9IFNjYWxlVG9NdWx0 aXBseSh3aWQpOworCWNvbnN0IFBSZWN0YW5nbGUgcmMgPSBHZXRQb3NpdGlvbigpOworCXJldHVy biByYyAqIHNjYWxlOwogfQogCiB2b2lkIFdpbmRvdzo6U2hvdyhib29sIHNob3cpCkBAIC05MDEs OCArOTc2LDM2IEBACiAKIHZvaWQgV2luZG93OjpJbnZhbGlkYXRlUmVjdGFuZ2xlKFBSZWN0YW5n bGUgcmMpCiB7Ci0JaWYgKHdpZCkKLQkJd2luZG93KHdpZCktPnVwZGF0ZShRUmVjdEZyb21QUmVj dChyYykpOworCWlmICh3aWQpIHsKKwkJY29uc3QgcXJlYWwgc2NhbGUgPSBTY2FsZU9mV2luZG93 KHdpZCk7CisJCVFSZWN0IHVwZDsKKwkJCisJCWlmICghc2NhbGUpIHsKKwkJCXVwZCA9IFFSZWN0 RnJvbVBSZWN0KHJjKTsKKwkJfQorCQllbHNlIHsKKyNpZiAhZGVmaW5lZChRX09TX1dJTikgJiYg IWRlZmluZWQoUV9PU19BUFBMRSkKKwkJCS8vIFVzaW5nIFgxMSBvciBXYXlsYW5kLCBsaWtlbHkg TGludXggYnV0IG1heSBiZSBhIEJTRCBvciBzaW1pbGFyCisJCQlpZiAoc2NhbGUgIT0gMS4wICYm IHNjYWxlICE9IDIuMCkgeworCQkJCXdpbmRvdyh3aWQpLT51cGRhdGUoKTsKKwkJCQlyZXR1cm47 CisJCQl9CisjZW5kaWYKKwkJCXVwZCA9IFFSZWN0RkZyb21QUmVjdChyYyAvIHNjYWxlKS50b0Fs aWduZWRSZWN0KCk7CisJCX0KKworI2lmIGRlZmluZWQoUV9PU19BUFBMRSkgJiYgIWRlZmluZWQo U0NJTlRJTExBX1FUX0JBQ0tJTkdTVE9SRV9GSVhFRCkKKwkJLy8gbWFjT1M6IHNuYXAgdGhlIHVw ZGF0ZSB0byB0aGUgYmFja2luZyBzdG9yZSdzIGRldmljZS1waXhlbCBncmlkLgorCQljb25zdCBR UmVjdCBzbmFwcGVkID0gU25hcFRvRGV2aWNlUGl4ZWxHcmlkKHVwZCwgc2NhbGUsIHdpbmRvdyh3 aWQpLT5zaXplKCkpOworCQlpZiAoc25hcHBlZC5pc051bGwoKSkgeworCQkJd2luZG93KHdpZCkt PnVwZGF0ZSgpOworCQkJcmV0dXJuOworCQl9CisJCXVwZCA9IHNuYXBwZWQ7CisjZW5kaWYKKwor CQl3aW5kb3cod2lkKS0+dXBkYXRlKHVwZCk7CisJfQogfQogCiB2b2lkIFdpbmRvdzo6U2V0Q3Vy c29yKEN1cnNvciBjdXJzKQpAQCAtOTk5LDYgKzExMDIsNyBAQAogCWludCB2aXNpYmxlUm93c3s1 fTsKIAlRTWFwPGludCxRUGl4bWFwPiBpbWFnZXM7CiAJZmxvYXQgaW1hZ2VTY2FsZXsxLjB9Owor CVFXaWRnZXQgKm93bmVyID0gbnVsbHB0cjsKIH07CiBMaXN0Qm94SW1wbDo6TGlzdEJveEltcGwo KSBub2V4Y2VwdCA9IGRlZmF1bHQ7CiAKQEAgLTEwMTIsNyArMTExNiwxMCBAQAogCXVuaWNvZGVN b2RlID0gdW5pY29kZU1vZGVfOwogCiAJUVdpZGdldCAqcXBhcmVudCA9IHN0YXRpY19jYXN0PFFX aWRnZXQgKj4ocGFyZW50LkdldElEKCkpOworCW93bmVyID0gcXBhcmVudDsKIAlMaXN0V2lkZ2V0 ICpsaXN0ID0gbmV3IExpc3RXaWRnZXQocXBhcmVudCk7CisJY29uc3QgcXJlYWwgc2NhbGUgPSBT Y2FsZU9mV2luZG93KHBhcmVudC5HZXRJRCgpKTsKKwlsaXN0LT5zZXRQcm9wZXJ0eSgiU2NpbnRp bGxhU2NhbGUiLCBzY2FsZSk7CiAKICNpZiBkZWZpbmVkKFFfT1NfV0lOKQogCS8vIE9uIFdpbmRv d3MsIFF0OjpUb29sVGlwIGNhdXNlcyBhIGNyYXNoIHdoZW4gdGhlIGxpc3QgaXMgY2xpY2tlZCBv bgpAQCAtMTA1NCw3ICsxMTYxLDE0IEBACiAJTGlzdFdpZGdldCAqbGlzdCA9IEdldFdpZGdldCgp OwogCWNvbnN0IEZvbnRBbmRDaGFyYWN0ZXJTZXQgKnBmYWNzID0gQXNGb250QW5kQ2hhcmFjdGVy U2V0KGZvbnQpOwogCWlmIChwZmFjcyAmJiBwZmFjcy0+cGZvbnQpIHsKLQkJbGlzdC0+c2V0Rm9u dCgqKHBmYWNzLT5wZm9udCkpOworCQlRRm9udCBmb250RGVTY2FsZWQgPSAqKHBmYWNzLT5wZm9u dCk7CisJCWNvbnN0IHFyZWFsIHNjYWxlT3duZXIgPSBTY2FsZU9mV2luZG93KG93bmVyKTsKKwkJ aWYgKHNjYWxlT3duZXIpIHsKKwkJCWNvbnN0IHFyZWFsIHNjYWxlID0gd2luZG93KG93bmVyKS0+ ZGV2aWNlUGl4ZWxSYXRpb0YoKTsKKwkJCXFyZWFsIHBvaW50U2l6ZSA9IGZvbnREZVNjYWxlZC5w b2ludFNpemVGKCkgLyBzY2FsZTsKKwkJCWZvbnREZVNjYWxlZC5zZXRQb2ludFNpemVGKHBvaW50 U2l6ZSk7CisJCX0KKwkJbGlzdC0+c2V0Rm9udChmb250RGVTY2FsZWQpOwogCX0KIH0KIHZvaWQg TGlzdEJveEltcGw6OlNldEF2ZXJhZ2VDaGFyV2lkdGgoaW50IC8qd2lkdGgqLykge30KQEAgLTEw ODEsMTAgKzExOTUsMTEgQEAKIAlRU3R5bGUgKnN0eWxlID0gUUFwcGxpY2F0aW9uOjpzdHlsZSgp OwogCWludCB3aWR0aCA9IGxpc3QtPnNpemVIaW50Rm9yQ29sdW1uKDApICsgKDIgKiBsaXN0LT5m cmFtZVdpZHRoKCkpOwogCWlmIChMZW5ndGgoKSA+IHJvd3MpIHsKLQkJd2lkdGggKz0gc3R5bGUt PnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2Nyb2xsQmFyRXh0ZW50KTsKKwkJd2lkdGggKz0gc3R5 bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2Nyb2xsQmFyRXh0ZW50KSArIDE7CiAJfQogCi0J cmV0dXJuIFBSZWN0YW5nbGUoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisJY29uc3QgcXJlYWwgc2Nh bGUgPSBTY2FsZU9mV2luZG93KHdpZCk7CisJcmV0dXJuIFBSZWN0YW5nbGUoMCwgMCwgd2lkdGgs IGhlaWdodCkgKiAoc2NhbGUgPyBzY2FsZSA6IDEuMCk7CiB9CiBpbnQgTGlzdEJveEltcGw6OkNh cmV0RnJvbUVkZ2UoKQogewpkaWZmIC1yIDU0ZDgxMThlOTM4ZiBxdC9TY2ludGlsbGFFZGl0QmFz ZS9QbGF0UXQuaAotLS0gYS9xdC9TY2ludGlsbGFFZGl0QmFzZS9QbGF0UXQuaAlUaHUgSnVuIDE4 IDEzOjA0OjQ2IDIwMjYgKzEwMDAKKysrIGIvcXQvU2NpbnRpbGxhRWRpdEJhc2UvUGxhdFF0LmgJ U2F0IEp1biAyMCAwOToyMzozNyAyMDI2ICsxMDAwCkBAIC03NCw2ICs3NCwxMyBAQAogCXJldHVy biBRUG9pbnRGKHFwLngsIHFwLnkpOwogfQogCitpbmxpbmUgUVdpZGdldCAqd2luZG93KFdpbmRv d0lEIHdpZCkgbm9leGNlcHQKK3sKKwlyZXR1cm4gc3RhdGljX2Nhc3Q8UVdpZGdldCAqPih3aWQp OworfQorCitkb3VibGUgU2NhbGVPZldpbmRvdyhXaW5kb3dJRCB3aWQpOworCiBjbGFzcyBTdXJm YWNlSW1wbCA6IHB1YmxpYyBTdXJmYWNlIHsKIHByaXZhdGU6CiAJUVBhaW50RGV2aWNlICpkZXZp Y2UgPSBudWxscHRyOwpAQCAtODEsNiArODgsNyBAQAogCWJvb2wgZGV2aWNlT3duZWQgPSBmYWxz ZTsKIAlib29sIHBhaW50ZXJPd25lZCA9IGZhbHNlOwogCVN1cmZhY2VNb2RlIG1vZGU7CisJcXJl YWwgc2NhbGUgPSAwLjA7CiAJY29uc3QgY2hhciAqY29kZWNOYW1lID0gbnVsbHB0cjsKIAlRVGV4 dENvZGVjICpjb2RlYyA9IG51bGxwdHI7CiAKQEAgLTg4LDcgKzk2LDcgQEAKIAogcHVibGljOgog CVN1cmZhY2VJbXBsKCk7Ci0JU3VyZmFjZUltcGwoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBTdXJm YWNlTW9kZSBtb2RlXyk7CisJU3VyZmFjZUltcGwoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBTdXJm YWNlTW9kZSBtb2RlXywgcXJlYWwgc2NhbGVfKTsKIAl2aXJ0dWFsIH5TdXJmYWNlSW1wbCgpIG92 ZXJyaWRlOwogCiAJdm9pZCBJbml0KFdpbmRvd0lEIHdpZCkgb3ZlcnJpZGU7CkBAIC0xNjQsNiAr MTcyLDggQEAKIAlRUGFpbnRlciAqR2V0UGFpbnRlcigpOwogfTsKIAorc3RkOjp1bmlxdWVfcHRy PFN1cmZhY2U+IFN1cmZhY2VJbXBsX0FsbG9jYXRlUGl4TWFwKGludCB3aWR0aCwgaW50IGhlaWdo dCwgU3VyZmFjZU1vZGUgbW9kZSwgcXJlYWwgc2NhbGUpOworCiB9CiAKICNlbmRpZgpkaWZmIC1y IDU0ZDgxMThlOTM4ZiBxdC9TY2ludGlsbGFFZGl0QmFzZS9TY2ludGlsbGFFZGl0QmFzZS5jcHAK LS0tIGEvcXQvU2NpbnRpbGxhRWRpdEJhc2UvU2NpbnRpbGxhRWRpdEJhc2UuY3BwCVRodSBKdW4g MTggMTM6MDQ6NDYgMjAyNiArMTAwMAorKysgYi9xdC9TY2ludGlsbGFFZGl0QmFzZS9TY2ludGls bGFFZGl0QmFzZS5jcHAJU2F0IEp1biAyMCAwOToyMzozNyAyMDI2ICsxMDAwCkBAIC0xMjcsNiAr MTI3LDEzIEBACiAJfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IFFFdmVudDo6SGlkZSkgewog CQlzZXRNb3VzZVRyYWNraW5nKGZhbHNlKTsKIAkJcmVzdWx0ID0gUUFic3RyYWN0U2Nyb2xsQXJl YTo6ZXZlbnQoZXZlbnQpOworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg2LCA2 LCAwKQorCX0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OkRldmljZVBpeGVsUmF0 aW9DaGFuZ2UpIHsKKwkJLy8gUmVzZXQgY2FjaGVkIGRhdGEKKwkJc3F0LT5TZXRTY2FsZVByb3Bl cnR5KCk7CisJCXNxdC0+SW52YWxpZGF0ZVN0eWxlUmVkcmF3KCk7CisJCXJlc3VsdCA9IFFBYnN0 cmFjdFNjcm9sbEFyZWE6OmV2ZW50KGV2ZW50KTsKKyNlbmRpZgogCX0gZWxzZSB7CiAJCXJlc3Vs dCA9IFFBYnN0cmFjdFNjcm9sbEFyZWE6OmV2ZW50KGV2ZW50KTsKIAl9CkBAIC0zMTgsNyArMzI1 LDcgQEAKIAogdm9pZCBTY2ludGlsbGFFZGl0QmFzZTo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2 ZW50ICpldmVudCkKIHsKLQljb25zdCBQb2ludCBwb3MgPSBQb2ludEZyb21RUG9pbnQoZXZlbnQt PnBvcygpKTsKKwljb25zdCBQb2ludCBwb3MgPSBQb2ludEZyb21RUG9pbnQoZXZlbnQtPnBvcygp KSAqIChzcXQtPklzUGl4ZWxBbGlnbmVkU2NhbGUoKSA/IGRldmljZVBpeGVsUmF0aW9GKCkgOiAx LjApOwogCiAJZW1pdCBidXR0b25QcmVzc2VkKGV2ZW50KTsKIApAQCAtMzQ3LDcgKzM1NCw3IEBA CiAKIHZvaWQgU2NpbnRpbGxhRWRpdEJhc2U6Om1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50 ICpldmVudCkKIHsKLQljb25zdCBRUG9pbnQgcG9pbnQgPSBldmVudC0+cG9zKCk7CisJY29uc3Qg UVBvaW50IHBvaW50ID0gZXZlbnQtPnBvcygpICogKHNxdC0+SXNQaXhlbEFsaWduZWRTY2FsZSgp ID8gZGV2aWNlUGl4ZWxSYXRpb0YoKSA6IDEuMCk7CiAJaWYgKGV2ZW50LT5idXR0b24oKSA9PSBR dDo6TGVmdEJ1dHRvbikKIAkJc3F0LT5CdXR0b25VcFdpdGhNb2RpZmllcnMoUG9pbnRGcm9tUVBv aW50KHBvaW50KSwgVGltZU9mRXZlbnQodGltZSksIE1vZGlmaWVyc09mS2V5Ym9hcmQoKSk7CiAK QEAgLTM2Nyw3ICszNzQsNyBAQAogCiB2b2lkIFNjaW50aWxsYUVkaXRCYXNlOjptb3VzZU1vdmVF dmVudChRTW91c2VFdmVudCAqZXZlbnQpCiB7Ci0JY29uc3QgUG9pbnQgcG9zID0gUG9pbnRGcm9t UVBvaW50KGV2ZW50LT5wb3MoKSk7CisJY29uc3QgUG9pbnQgcG9zID0gUG9pbnRGcm9tUVBvaW50 KGV2ZW50LT5wb3MoKSkgICogKHNxdC0+SXNQaXhlbEFsaWduZWRTY2FsZSgpID8gZGV2aWNlUGl4 ZWxSYXRpb0YoKSA6IDEuMCk7CiAKIAljb25zdCBib29sIHNoaWZ0ID0gUUFwcGxpY2F0aW9uOjpr ZXlib2FyZE1vZGlmaWVycygpICYgUXQ6OlNoaWZ0TW9kaWZpZXI7CiAJY29uc3QgYm9vbCBjdHJs ICA9IFFBcHBsaWNhdGlvbjo6a2V5Ym9hcmRNb2RpZmllcnMoKSAmIFF0OjpDb250cm9sTW9kaWZp ZXI7CmRpZmYgLXIgNTRkODExOGU5MzhmIHF0L1NjaW50aWxsYUVkaXRCYXNlL1NjaW50aWxsYUVk aXRCYXNlLnBybwotLS0gYS9xdC9TY2ludGlsbGFFZGl0QmFzZS9TY2ludGlsbGFFZGl0QmFzZS5w cm8JVGh1IEp1biAxOCAxMzowNDo0NiAyMDI2ICsxMDAwCisrKyBiL3F0L1NjaW50aWxsYUVkaXRC YXNlL1NjaW50aWxsYUVkaXRCYXNlLnBybwlTYXQgSnVuIDIwIDA5OjIzOjM3IDIwMjYgKzEwMDAK QEAgLTEwMCw3ICsxMDAsNyBAQAogICAgIERFRklORVMgKz0gTkRFQlVHPTEKIH0KIAotREVTVERJ UiA9IC4uLy4uL2JpbgorREVTVERJUiA9ICQkX1BST19GSUxFX1BXRF8vLi4vLi4vYmluCiAKIG1h Y3ggewogCVFNQUtFX0xGTEFHU19TT05BTUUgPSAtV2wsLWluc3RhbGxfbmFtZSxAZXhlY3V0YWJs ZV9wYXRoLy4uL0ZyYW1ld29ya3MvCmRpZmYgLXIgNTRkODExOGU5MzhmIHF0L1NjaW50aWxsYUVk aXRCYXNlL1NjaW50aWxsYVF0LmNwcAotLS0gYS9xdC9TY2ludGlsbGFFZGl0QmFzZS9TY2ludGls bGFRdC5jcHAJVGh1IEp1biAxOCAxMzowNDo0NiAyMDI2ICsxMDAwCisrKyBiL3F0L1NjaW50aWxs YUVkaXRCYXNlL1NjaW50aWxsYVF0LmNwcAlTYXQgSnVuIDIwIDA5OjIzOjM3IDIwMjYgKzEwMDAK QEAgLTMzLDYgKzMzLDcgQEAKIHsKIAogCXdNYWluID0gc2Nyb2xsQXJlYS0+dmlld3BvcnQoKTsK KwlzY3JvbGxBcmVhLT52aWV3cG9ydCgpLT5zZXRQcm9wZXJ0eSgiU2NpbnRpbGxhU2NhbGUiLCAw LjApOwogCiAJaW1lSW50ZXJhY3Rpb24gPSBJTUVJbnRlcmFjdGlvbjo6SW5saW5lOwogCkBAIC0y NzYsNiArMjc3LDExIEBACiB2b2lkIFNjaW50aWxsYVF0OjpTY3JvbGxUZXh0KFNjaTo6TGluZSBs aW5lc1RvTW92ZSkKIHsKIAlpbnQgZHkgPSB2cy5saW5lSGVpZ2h0ICogKGxpbmVzVG9Nb3ZlKTsK KwlpZiAoSXNQaXhlbEFsaWduZWRTY2FsZSgpKSB7CisJCS8vIGxpbmVIZWlnaHQgaXMgaW4gZGV2 aWNlIHBpeGVscywgdmlld3BvcnQoKS0+c2Nyb2xsKCkgbmVlZHMgbG9naWNhbCBwaXhlbHMKKwkJ Y29uc3QgcXJlYWwgc2NhbGUgPSB3aW5kb3cod01haW4uR2V0SUQoKSktPmRldmljZVBpeGVsUmF0 aW9GKCk7CisJCWR5ID0gcVJvdW5kKGR5IC8gc2NhbGUpOworCX0KIAlzY3JvbGxBcmVhLT52aWV3 cG9ydCgpLT5zY3JvbGwoMCwgZHkpOwogfQogCkBAIC03MTUsNyArNzIxLDEzIEBACiAKIAlpZiAo IWN0LndDYWxsVGlwLkNyZWF0ZWQoKSkgewogCQlRV2lkZ2V0ICpwQ2FsbFRpcCA9IG5ldyBDYWxs VGlwSW1wbChzY3JvbGxBcmVhLT53aW5kb3coKS0+d2luZG93SGFuZGxlKCksICZjdCk7CisJCWNv bnN0IHFyZWFsIHNjYWxlRGV2aWNlID0gU2NhbGVPZldpbmRvdyh3TWFpbi5HZXRJRCgpKTsKKwkJ cENhbGxUaXAtPnNldFByb3BlcnR5KCJTY2ludGlsbGFTY2FsZSIsCisJCQlzY2FsZVRlY2huaXF1 ZSA9PSBTY2FsZVRlY2huaXF1ZTo6UGl4ZWxBbGlnbmVkID8gc2NhbGVEZXZpY2UgOiAwLjApOwor CiAJCWN0LndDYWxsVGlwID0gcENhbGxUaXA7CisJCWlmIChzY2FsZURldmljZSkKKwkJCXJjID0g cmMgKiBzY2FsZURldmljZTsKIAkJcENhbGxUaXAtPm1vdmUocmMubGVmdCwgcmMudG9wKTsKIAkJ cENhbGxUaXAtPnJlc2l6ZShyYy5XaWR0aCgpLCByYy5IZWlnaHQoKSk7CiAJfQpAQCAtNzcxLDYg Kzc4MywxNiBAQAogCQljYXNlIE1lc3NhZ2U6OkdldFJlY3Rhbmd1bGFyU2VsZWN0aW9uTW9kaWZp ZXI6CiAJCQlyZXR1cm4gcmVjdGFuZ3VsYXJTZWxlY3Rpb25Nb2RpZmllcjsKIAorCQljYXNlIE1l c3NhZ2U6OlNldFNjYWxlVGVjaG5pcXVlOgorCQkJc2NhbGVUZWNobmlxdWUgPSBzdGF0aWNfY2Fz dDxTY2FsZVRlY2huaXF1ZT4od1BhcmFtKTsKKwkJCS8vIFNjYWxlIHByb3BlcnR5IG5lZWRzIHRv IGJlIHNldCBiZWZvcmUgSW52YWxpZGF0ZVN0eWxlUmVkcmF3KCkKKwkJCVNldFNjYWxlUHJvcGVy dHkoKTsKKwkJCUludmFsaWRhdGVTdHlsZVJlZHJhdygpOworCQkJYnJlYWs7CisKKwkJY2FzZSBN ZXNzYWdlOjpHZXRTY2FsZVRlY2huaXF1ZToKKwkJCXJldHVybiBzdGF0aWNfY2FzdDxzcHRyX3Q+ KHNjYWxlVGVjaG5pcXVlKTsKKwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIFNjaW50aWxsYUJhc2U6 OlduZFByb2MoaU1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKIAkJfQpAQCAtODA1LDIwICs4Mjcs NTUgQEAKIAlyZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKK3ZvaWQgU2NpbnRpbGxhUXQ6OlNldFNj YWxlUHJvcGVydHkoKQoreworCXFyZWFsIHNjYWxlID0gMC4wOworCWlmIChzY2FsZVRlY2huaXF1 ZSA9PSBTY2FsZVRlY2huaXF1ZTo6UGl4ZWxBbGlnbmVkKSB7CisJCVFXaWRnZXQgKndpZGdldCA9 IHdpbmRvdyh3TWFpbi5HZXRJRCgpKTsKKwkJc2NhbGUgPSB3aWRnZXQtPmRldmljZVBpeGVsUmF0 aW9GKCk7CisJfQorCXNjcm9sbEFyZWEtPnZpZXdwb3J0KCktPnNldFByb3BlcnR5KCJTY2ludGls bGFTY2FsZSIsIHNjYWxlKTsKK30KKwogLy8gQWRkaXRpb25zIHRvIG1lcmdlIGluIFNjaWVudGlm aWMgVG9vbHdvcmtzIHdpZGdldCBzdHJ1Y3R1cmUKIAogdm9pZCBTY2ludGlsbGFRdDo6UGFydGlh bFBhaW50KGNvbnN0IFBSZWN0YW5nbGUgJnJlY3QpCiB7Ci0JcmNQYWludCA9IHJlY3Q7CisJU2V0 U2NhbGVQcm9wZXJ0eSgpOworCWlmIChzY2FsZVRlY2huaXF1ZSA9PSBTY2FsZVRlY2huaXF1ZTo6 UGl4ZWxBbGlnbmVkKSB7CisJCVFXaWRnZXQgKndpZGdldCA9IHdpbmRvdyh3TWFpbi5HZXRJRCgp KTsKKwkJcmNQYWludCA9IHJlY3QgKiB3aWRnZXQtPmRldmljZVBpeGVsUmF0aW9GKCk7CisJfSBl bHNlIHsKKwkJcmNQYWludCA9IHJlY3Q7CisJfQogCXBhaW50U3RhdGUgPSBQYWludFN0YXRlOjpw YWludGluZzsKIAlQUmVjdGFuZ2xlIHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdGFuZ2xlKCk7CiAJ cGFpbnRpbmdBbGxUZXh0ID0gcmNQYWludC5Db250YWlucyhyY0NsaWVudCk7CiAKIAlBdXRvU3Vy ZmFjZSBzdXJmYWNlUGFpbnQodGhpcyk7Ci0JUGFpbnQoc3VyZmFjZVBhaW50LCByY1BhaW50KTsK KwlpZiAoc2NhbGVUZWNobmlxdWUgPT0gU2NhbGVUZWNobmlxdWU6OlBpeGVsQWxpZ25lZCkgewor CQkvLyBDcmVhdGUgQml0bWFwIG9mIGV4YWN0bHkgd2luZG93IHNpemUgdGhlbiBibGl0IGFmdGVy IFBhaW50IGNhbGwKKwkJUVdpZGdldCAqd2lkZ2V0ID0gd2luZG93KHdNYWluLkdldElEKCkpOwor CQljb25zdCBxcmVhbCBzY2FsZSA9IHdpZGdldC0+ZGV2aWNlUGl4ZWxSYXRpb0YoKTsKKwkJY29u c3QgUVNpemUgc3ogPSB3aWRnZXQtPnNpemUoKSAqIHNjYWxlOworCQljb25zdCBpbnQgdyA9IHN6 LndpZHRoKCk7CisJCWNvbnN0IGludCBoID0gc3ouaGVpZ2h0KCk7CisJCXN0ZDo6dW5pcXVlX3B0 cjxTdXJmYWNlPiBzdXJmUGl4ID0gU3VyZmFjZUltcGxfQWxsb2NhdGVQaXhNYXAodywgaCwgQ3Vy cmVudFN1cmZhY2VNb2RlKCksIDAuMCk7CisJCVBSZWN0YW5nbGUgcmNTY2FsZWQgPSBQUmVjdGFu Z2xlOjpGcm9tSW50cygwLCAwLCB3LCBoKTsKKwkJUGFpbnQoc3VyZlBpeC5nZXQoKSwgcmNTY2Fs ZWQpOworCQlzdXJmYWNlUGFpbnQtPkNvcHkocmNTY2FsZWQsIFBvaW50KDAsMCksICpzdXJmUGl4 KTsKKwl9IGVsc2UgeworCQlQYWludChzdXJmYWNlUGFpbnQsIHJjUGFpbnQpOworCX0KIAlzdXJm YWNlUGFpbnQtPlJlbGVhc2UoKTsKIAogCWlmIChwYWludFN0YXRlID09IFBhaW50U3RhdGU6OmFi YW5kb25lZCkgeworCQlpZiAoc2NhbGVUZWNobmlxdWUgPT0gU2NhbGVUZWNobmlxdWU6OlBpeGVs QWxpZ25lZCkgeworCQkJLy8gU2hvdWxkIHRyeSBtb3JlIHJlcGFpciBidXQganVzdCBxdWV1ZSBh IGZ1bGwgcmVwYWludC4KKwkJCXNjcm9sbEFyZWEtPnZpZXdwb3J0KCktPnVwZGF0ZSgpOworCQkJ cGFpbnRTdGF0ZSA9IFBhaW50U3RhdGU6Om5vdFBhaW50aW5nOworCQkJcmV0dXJuOworCQl9CiAJ CS8vIEZJWE1FOiBGYWlsdXJlIHRvIHBhaW50IHRoZSByZXF1ZXN0ZWQgcmVjdGFuZ2xlIGluIGVh Y2gKIAkJLy8gcGFpbnQgZXZlbnQgY2F1c2VzIGZsaWNrZXIgb24gc29tZSBwbGF0Zm9ybXMgKE1h Yz8pCiAJCS8vIFBhaW50IHJlY3QgaW1tZWRpYXRlbHkuCmRpZmYgLXIgNTRkODExOGU5MzhmIHF0 L1NjaW50aWxsYUVkaXRCYXNlL1NjaW50aWxsYVF0LmgKLS0tIGEvcXQvU2NpbnRpbGxhRWRpdEJh c2UvU2NpbnRpbGxhUXQuaAlUaHUgSnVuIDE4IDEzOjA0OjQ2IDIwMjYgKzEwMDAKKysrIGIvcXQv U2NpbnRpbGxhRWRpdEJhc2UvU2NpbnRpbGxhUXQuaAlTYXQgSnVuIDIwIDA5OjIzOjM3IDIwMjYg KzEwMDAKQEAgLTE1Niw2ICsxNTYsMTEgQEAKIAlzdGF0aWMgc3B0cl90IERpcmVjdFN0YXR1c0Z1 bmN0aW9uKHNwdHJfdCBwdHIsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgaU1lc3NhZ2UsIHVwdHJf dCB3UGFyYW0sIHNwdHJfdCBsUGFyYW0sIGludCAqcFN0YXR1cyk7CiAKKwl2b2lkIFNldFNjYWxl UHJvcGVydHkoKTsKKwlib29sIElzUGl4ZWxBbGlnbmVkU2NhbGUoKSBjb25zdCBub2V4Y2VwdCB7 CisJCXJldHVybiBzY2FsZVRlY2huaXF1ZSA9PSBTY2FsZVRlY2huaXF1ZTo6UGl4ZWxBbGlnbmVk OworCX0KKwogcHJvdGVjdGVkOgogCiAJdm9pZCBQYXJ0aWFsUGFpbnQoY29uc3QgUFJlY3Rhbmds ZSAmcmVjdCk7CkBAIC0xNzgsNiArMTgzLDggQEAKIAlib29sIGRyYWdXYXNEcm9wcGVkOwogCWlu dCByZWN0YW5ndWxhclNlbGVjdGlvbk1vZGlmaWVyOwogCisJU2NhbGVUZWNobmlxdWUgc2NhbGVU ZWNobmlxdWUgPSBTY2FsZVRlY2huaXF1ZTo6RGVmYXVsdDsKKwogCWZyaWVuZCBjbGFzcyA6OlNj aW50aWxsYUVkaXRCYXNlOwogfTsKIApkaWZmIC1yIDU0ZDgxMThlOTM4ZiBzcmMvR2VvbWV0cnku aAotLS0gYS9zcmMvR2VvbWV0cnkuaAlUaHUgSnVuIDE4IDEzOjA0OjQ2IDIwMjYgKzEwMDAKKysr IGIvc3JjL0dlb21ldHJ5LmgJU2F0IEp1biAyMCAwOToyMzozNyAyMDI2ICsxMDAwCkBAIC00NSw2 ICs0NSwxMCBAQAogCQlyZXR1cm4gUG9pbnQoeCAtIG90aGVyLngsIHkgLSBvdGhlci55KTsKIAl9 CiAKKwljb25zdGV4cHIgUG9pbnQgb3BlcmF0b3IqKFhZUE9TSVRJT04gbXVsdGlwbGllcikgY29u c3Qgbm9leGNlcHQgeworCQlyZXR1cm4gUG9pbnQoeCAqIG11bHRpcGxpZXIsIHkgKiBtdWx0aXBs aWVyKTsKKwl9CisKIAkvLyBPdGhlciBhdXRvbWF0aWNhbGx5IGRlZmluZWQgbWV0aG9kcyAoYXNz aWdubWVudCwgY29weSBjb25zdHJ1Y3RvciwgZGVzdHJ1Y3RvcikgYXJlIGZpbmUKIH07CiAKQEAg LTEwMSw2ICsxMDUsMTUgQEAKIAkJcmV0dXJuIChyYy5sZWZ0ID09IGxlZnQpICYmIChyYy5yaWdo dCA9PSByaWdodCkgJiYKIAkJCShyYy50b3AgPT0gdG9wKSAmJiAocmMuYm90dG9tID09IGJvdHRv bSk7CiAJfQorCQorCWNvbnN0ZXhwciBQUmVjdGFuZ2xlIG9wZXJhdG9yKihYWVBPU0lUSU9OIG11 bHRpcGxpZXIpIGNvbnN0IG5vZXhjZXB0IHsKKwkJcmV0dXJuIFBSZWN0YW5nbGUobGVmdCAqIG11 bHRpcGxpZXIsIHRvcCAqIG11bHRpcGxpZXIsIHJpZ2h0ICogbXVsdGlwbGllciwgYm90dG9tICog bXVsdGlwbGllcik7CisJfQorCisJY29uc3RleHByIFBSZWN0YW5nbGUgb3BlcmF0b3IvKFhZUE9T SVRJT04gZGl2aXNvcikgY29uc3Qgbm9leGNlcHQgeworCQlyZXR1cm4gUFJlY3RhbmdsZShsZWZ0 IC8gZGl2aXNvciwgdG9wIC8gZGl2aXNvciwgcmlnaHQgLyBkaXZpc29yLCBib3R0b20gLyBkaXZp c29yKTsKKwl9CisKIAljb25zdGV4cHIgYm9vbCBDb250YWlucyhQb2ludCBwdCkgY29uc3Qgbm9l eGNlcHQgewogCQlyZXR1cm4gKHB0LnggPj0gbGVmdCkgJiYgKHB0LnggPD0gcmlnaHQpICYmCiAJ CQkocHQueSA+PSB0b3ApICYmIChwdC55IDw9IGJvdHRvbSk7Cg== --0000000000002936a10654f347a4--