Re: Decreasing seams in scaled windows
Neil Hodgson <[email protected]> Wed, 17 Jun 2026 13:38:35 +1000
| Newsgroups | gmane.comp.lib.scintilla.devel |
|---|---|
| Message-ID | <CACWkrTgTr0NNNvL-X2TOz2s9EXKN6+O=4Mz9JYsR--op_c2Mmg@mail.gmail.com> |
--00000000000015113306546acc64 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable John Ehresman: > to add *F() variants of methods that take or return pixel values =E2=80= =94 these mimic how Qt works by always working in (possibly fractional) pix= el units. Tagging APIs that take or return pixels is good. Scripts that read Scintilla.iface will need to be updated to understand 'pixels'. Some of these are in Scintilla (ScintillaAPIFacer.py, CheckMentioned.py) and SciTE (IFaceTableGen.py) but some are in external projects. Since this could cause failures in these projects, I'd like to provide some transition support. Perhaps by publishing a script that converts 'int' into 'pixels' in Scintilla.iface where appropriate so projects could update on their own schedule then force the update in a release or two. There will be decisions on how to expose this: does ScintillaTypes.h get a 'using Pixels =3D intptr_t;' with ScintillaCall.h then specifying 'Pixels' in methods? Is the documentation updated or left with 'int'? > The second patch uses full repaints on macOS because I intermittently see= a one pixel of selection color when I select and deselect lines (though I = can trigger it pretty easily). Yes, I have seen this too and do not understand it. It would be more understandable if it happened on line edges where a float to int rounding could cause a gap in painting but the selection remnant can appear well inside a line. If it was just an edge truncation then expanding the rectangle a little up and down would fix it but that doesn't work. For PixelAligned scaling, there is a performance cost to redrawing the whole screen range, so accurate invalidation could be followed by restricting painting to just the necessary area in the future. > The patch also fixes the initial tiny text problem and a scroll by lines = bug. They look good. I have applied QtScale-platform-fixes.patch and attached is a combined patc= h. 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/CACWkrTgTr0NNNvL-X2TOz2s9EXKN6%2BO%3D4Mz9JYsR--op_c2Mmg%40mail.gmai= l.com. --00000000000015113306546acc64 Content-Type: text/plain; charset="US-ASCII"; name="QtScaleI.patch" Content-Disposition: attachment; filename="QtScaleI.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mqhi5y2p0> X-Attachment-Id: f_mqhi5y2p0 ZGlmZiAtciAwMzNjMzQyZTY2NTYgY2FsbC9TY2ludGlsbGFDYWxsLmN4eAotLS0gYS9jYWxsL1Nj aW50aWxsYUNhbGwuY3h4CVNhdCBKdW4gMTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9jYWxs L1NjaW50aWxsYUNhbGwuY3h4CVdlZCBKdW4gMTcgMTE6NDk6MjIgMjAyNiArMTAwMApAQCAtMzU1 OSw2ICszNTU5LDE0IEBACiAJQ2FsbFBvaW50ZXIoTWVzc2FnZTo6U2V0SUxleGVyLCAwLCBpbGV4 ZXIpOwogfQogCit2b2lkIFNjaW50aWxsYUNhbGw6OlNldFNjYWxlVGVjaG5pcXVlKFNjaW50aWxs YTo6U2NhbGVUZWNobmlxdWUgdGVjaG5pcXVlKSB7CisJQ2FsbChNZXNzYWdlOjpTZXRTY2FsZVRl Y2huaXF1ZSwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pih0ZWNobmlxdWUpKTsKK30KKworU2NhbGVU ZWNobmlxdWUgU2NpbnRpbGxhQ2FsbDo6U2NhbGVUZWNobmlxdWUoKSB7CisJcmV0dXJuIHN0YXRp Y19jYXN0PFNjaW50aWxsYTo6U2NhbGVUZWNobmlxdWU+KENhbGwoTWVzc2FnZTo6R2V0U2NhbGVU ZWNobmlxdWUpKTsKK30KKwogQmlkaXJlY3Rpb25hbCBTY2ludGlsbGFDYWxsOjpCaWRpcmVjdGlv bmFsKCkgewogCXJldHVybiBzdGF0aWNfY2FzdDxTY2ludGlsbGE6OkJpZGlyZWN0aW9uYWw+KENh bGwoTWVzc2FnZTo6R2V0QmlkaXJlY3Rpb25hbCkpOwogfQpkaWZmIC1yIDAzM2MzNDJlNjY1NiBk b2MvU2NpbnRpbGxhRG9jLmh0bWwKLS0tIGEvZG9jL1NjaW50aWxsYURvYy5odG1sCVNhdCBKdW4g MTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9kb2MvU2NpbnRpbGxhRG9jLmh0bWwJV2VkIEp1 biAxNyAxMTo0OToyMiAyMDI2ICsxMDAwCkBAIC01MTA2LDYgKzUxMDYsOCBAQAogICAgIDwvY29k 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+CmRpZmYgLXIgMDMzYzM0MmU2NjU2IGlu Y2x1ZGUvU2NpbnRpbGxhLmgKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGEuaAlTYXQgSnVuIDEzIDEx OjAxOjU2IDIwMjYgKzEwMDAKKysrIGIvaW5jbHVkZS9TY2ludGlsbGEuaAlXZWQgSnVuIDE3IDEx OjQ5OjIyIDIwMjYgKzEwMDAKQEAgLTEzMzMsNiArMTMzMywxMCBAQAogI2RlZmluZSBTQ05fTUFS R0lOUklHSFRDTElDSyAyMDMxCiAjZGVmaW5lIFNDTl9BVVRPQ1NFTEVDVElPTkNIQU5HRSAyMDMy CiAjaWZuZGVmIFNDSV9ESVNBQkxFX1BST1ZJU0lPTkFMCisjZGVmaW5lIFNDQUxFX1RFQ0hOSVFV RV9ERUZBVUxUIDAKKyNkZWZpbmUgU0NBTEVfVEVDSE5JUVVFX1BJWEVMX0FMSUdORUQgMQorI2Rl ZmluZSBTQ0lfU0VUU0NBTEVURUNITklRVUUgMjgyMAorI2RlZmluZSBTQ0lfR0VUU0NBTEVURUNI TklRVUUgMjgyMQogI2RlZmluZSBTQ19CSURJUkVDVElPTkFMX0RJU0FCTEVEIDAKICNkZWZpbmUg U0NfQklESVJFQ1RJT05BTF9MMlIgMQogI2RlZmluZSBTQ19CSURJUkVDVElPTkFMX1IyTCAyCmRp ZmYgLXIgMDMzYzM0MmU2NjU2IGluY2x1ZGUvU2NpbnRpbGxhLmlmYWNlCi0tLSBhL2luY2x1ZGUv U2NpbnRpbGxhLmlmYWNlCVNhdCBKdW4gMTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9pbmNs dWRlL1NjaW50aWxsYS5pZmFjZQlXZWQgSnVuIDE3IDExOjQ5OjIyIDIwMjYgKzEwMDAKQEAgLTM1 NDIsNiArMzU0MiwxNiBAQAogCiBjYXQgUHJvdmlzaW9uYWwKIAorZW51IFNjYWxlVGVjaG5pcXVl PVNDQUxFX1RFQ0hOSVFVRV8KK3ZhbCBTQ0FMRV9URUNITklRVUVfREVGQVVMVD0wCit2YWwgU0NB TEVfVEVDSE5JUVVFX1BJWEVMX0FMSUdORUQ9MQorCisjIFNldCB0aGUgc2NhbGUgdGVjaG5pcXVl CitzZXQgdm9pZCBTZXRTY2FsZVRlY2huaXF1ZT0yODIwKFNjYWxlVGVjaG5pcXVlIHRlY2huaXF1 ZSwpCisKKyMgR2V0IHRoZSBzY2FsZSB0ZWNobmlxdWUKK2dldCBTY2FsZVRlY2huaXF1ZSBHZXRT Y2FsZVRlY2huaXF1ZT0yODIxKCwpCisKIGVudSBCaWRpcmVjdGlvbmFsPVNDX0JJRElSRUNUSU9O QUxfCiB2YWwgU0NfQklESVJFQ1RJT05BTF9ESVNBQkxFRD0wCiB2YWwgU0NfQklESVJFQ1RJT05B TF9MMlI9MQpkaWZmIC1yIDAzM2MzNDJlNjY1NiBpbmNsdWRlL1NjaW50aWxsYUNhbGwuaAotLS0g YS9pbmNsdWRlL1NjaW50aWxsYUNhbGwuaAlTYXQgSnVuIDEzIDExOjAxOjU2IDIwMjYgKzEwMDAK KysrIGIvaW5jbHVkZS9TY2ludGlsbGFDYWxsLmgJV2VkIEp1biAxNyAxMTo0OToyMiAyMDI2ICsx MDAwCkBAIC05MzUsNiArOTM1LDggQEAKIAlpbnQgRGVzY3JpcHRpb25PZlN0eWxlKGludCBzdHls ZSwgY2hhciAqZGVzY3JpcHRpb24pOwogCXN0ZDo6c3RyaW5nIERlc2NyaXB0aW9uT2ZTdHlsZShp bnQgc3R5bGUpOwogCXZvaWQgU2V0SUxleGVyKHZvaWQgKmlsZXhlcik7CisJdm9pZCBTZXRTY2Fs ZVRlY2huaXF1ZShTY2ludGlsbGE6OlNjYWxlVGVjaG5pcXVlIHRlY2huaXF1ZSk7CisJU2NpbnRp bGxhOjpTY2FsZVRlY2huaXF1ZSBTY2FsZVRlY2huaXF1ZSgpOwogCVNjaW50aWxsYTo6QmlkaXJl Y3Rpb25hbCBCaWRpcmVjdGlvbmFsKCk7CiAJdm9pZCBTZXRCaWRpcmVjdGlvbmFsKFNjaW50aWxs YTo6QmlkaXJlY3Rpb25hbCBiaWRpcmVjdGlvbmFsKTsKIApkaWZmIC1yIDAzM2MzNDJlNjY1NiBp bmNsdWRlL1NjaW50aWxsYU1lc3NhZ2VzLmgKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGFNZXNzYWdl cy5oCVNhdCBKdW4gMTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9pbmNsdWRlL1NjaW50aWxs YU1lc3NhZ2VzLmgJV2VkIEp1biAxNyAxMTo0OToyMiAyMDI2ICsxMDAwCkBAIC04MzEsNiArODMx LDggQEAKIAlUYWdzT2ZTdHlsZSA9IDQwMzEsCiAJRGVzY3JpcHRpb25PZlN0eWxlID0gNDAzMiwK IAlTZXRJTGV4ZXIgPSA0MDMzLAorCVNldFNjYWxlVGVjaG5pcXVlID0gMjgyMCwKKwlHZXRTY2Fs ZVRlY2huaXF1ZSA9IDI4MjEsCiAJR2V0QmlkaXJlY3Rpb25hbCA9IDI3MDgsCiAJU2V0QmlkaXJl Y3Rpb25hbCA9IDI3MDksCiB9OwpkaWZmIC1yIDAzM2MzNDJlNjY1NiBpbmNsdWRlL1NjaW50aWxs YVR5cGVzLmgKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGFUeXBlcy5oCVNhdCBKdW4gMTMgMTE6MDE6 NTYgMjAyNiArMTAwMAorKysgYi9pbmNsdWRlL1NjaW50aWxsYVR5cGVzLmgJV2VkIEp1biAxNyAx MTo0OToyMiAyMDI2ICsxMDAwCkBAIC02NTcsNiArNjU3LDExIEBACiAJSW1lUmVzdWx0ID0gMiwK IH07CiAKK2VudW0gY2xhc3MgU2NhbGVUZWNobmlxdWUgeworCURlZmF1bHQgPSAwLAorCVBpeGVs QWxpZ25lZCA9IDEsCit9OworCiBlbnVtIGNsYXNzIEJpZGlyZWN0aW9uYWwgewogCURpc2FibGVk ID0gMCwKIAlMMlIgPSAxLApkaWZmIC1yIDAzM2MzNDJlNjY1NiBxdC9TY2ludGlsbGFFZGl0QmFz ZS9QbGF0UXQuY3BwCi0tLSBhL3F0L1NjaW50aWxsYUVkaXRCYXNlL1BsYXRRdC5jcHAJU2F0IEp1 biAxMyAxMTowMTo1NiAyMDI2ICsxMDAwCisrKyBiL3F0L1NjaW50aWxsYUVkaXRCYXNlL1BsYXRR dC5jcHAJV2VkIEp1biAxNyAxMTo0OToyMiAyMDI2ICsxMDAwCkBAIC0xODMsMTMgKzE4MywxNCBA QAogCiBTdXJmYWNlSW1wbDo6U3VyZmFjZUltcGwoKSA9IGRlZmF1bHQ7CiAKLVN1cmZhY2VJbXBs OjpTdXJmYWNlSW1wbChpbnQgd2lkdGgsIGludCBoZWlnaHQsIFN1cmZhY2VNb2RlIG1vZGVfKQor U3VyZmFjZUltcGw6OlN1cmZhY2VJbXBsKGludCB3aWR0aCwgaW50IGhlaWdodCwgU3VyZmFjZU1v ZGUgbW9kZV8sIHFyZWFsIHNjYWxlXykKIHsKIAlpZiAod2lkdGggPCAxKSB3aWR0aCA9IDE7CiAJ aWYgKGhlaWdodCA8IDEpIGhlaWdodCA9IDE7CiAJZGV2aWNlT3duZWQgPSB0cnVlOwogCWRldmlj ZSA9IG5ldyBRUGl4bWFwKHdpZHRoLCBoZWlnaHQpOwogCW1vZGUgPSBtb2RlXzsKKwlzY2FsZSA9 IHNjYWxlXzsKIH0KIAogU3VyZmFjZUltcGw6On5TdXJmYWNlSW1wbCgpCkBAIC0yMTIsMjEgKzIx Myw0NCBAQAogCXBhaW50ZXJPd25lZCA9IGZhbHNlOwogfQogCitkb3VibGUgU2NhbGVPZldpbmRv dyhXaW5kb3dJRCB3aWQpCit7CisJY29uc3QgUVdpZGdldCAqd2lkZ2V0ID0gd2luZG93KHdpZCk7 CisJaWYgKCF3aWRnZXQpIHsKKwkJcmV0dXJuIDEuMDsKKwl9CisJY29uc3QgUVZhcmlhbnQgdmFy aWFudCA9IHdpZGdldC0+cHJvcGVydHkoIlNjaW50aWxsYVNjYWxlIik7CisJcmV0dXJuIHZhcmlh bnQudG9Eb3VibGUoKTsKK30KKworZG91YmxlIFNjYWxlVG9NdWx0aXBseShXaW5kb3dJRCB3aWQp Cit7CisJY29uc3QgcXJlYWwgc2NhbGUgPSBTY2FsZU9mV2luZG93KHdpZCk7CisJcmV0dXJuIHNj YWxlID8gc2NhbGUgOiAxLjA7Cit9CisKIHZvaWQgU3VyZmFjZUltcGw6OkluaXQoV2luZG93SUQg d2lkKQogewogCVJlbGVhc2UoKTsKLQlkZXZpY2UgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0ICo+KHdp ZCk7CisJZGV2aWNlID0gd2luZG93KHdpZCk7CisJc2NhbGUgPSBTY2FsZU9mV2luZG93KHdpZCk7 CiB9CiAKIHZvaWQgU3VyZmFjZUltcGw6OkluaXQoU3VyZmFjZUlEIHNpZCwgV2luZG93SUQgLyp3 aWQqLykKIHsKIAlSZWxlYXNlKCk7CiAJZGV2aWNlID0gc3RhdGljX2Nhc3Q8UVBhaW50RGV2aWNl ICo+KHNpZCk7CisJc2NhbGUgPSAwLjA7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTdXJmYWNlPiBT dXJmYWNlSW1wbDo6QWxsb2NhdGVQaXhNYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotCXJl dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFN1cmZhY2VJbXBsPih3aWR0aCwgaGVpZ2h0LCBtb2RlKTsK KwlyZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTdXJmYWNlSW1wbD4od2lkdGgsIGhlaWdodCwgbW9k ZSwgc2NhbGUpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8U3VyZmFjZT4gU3VyZmFjZUltcGxfQWxs b2NhdGVQaXhNYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBTdXJmYWNlTW9kZSBtb2RlLCBxcmVh bCBzY2FsZSkKK3sKKwlyZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTdXJmYWNlSW1wbD4od2lkdGgs IGhlaWdodCwgbW9kZSwgc2NhbGUpOwogfQogCiB2b2lkIFN1cmZhY2VJbXBsOjpTZXRNb2RlKFN1 cmZhY2VNb2RlIG1vZGVfKQpAQCAtMzA5LDcgKzMzMywxMSBAQAogCiBpbnQgU3VyZmFjZUltcGw6 OkRldmljZUhlaWdodEZvbnQoaW50IHBvaW50cykKIHsKLQlyZXR1cm4gcG9pbnRzOworCWlmIChz Y2FsZSkgeworCQlyZXR1cm4gcG9pbnRzICogc2NhbGU7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHBv aW50czsKKwl9CiB9CiAKIHZvaWQgU3VyZmFjZUltcGw6OkxpbmVEcmF3KFBvaW50IHN0YXJ0LCBQ b2ludCBlbmQsIFN0cm9rZSBzdHJva2UpCkBAIC03OTYsNiArODI0LDEwIEBACiAJCXBhaW50ZXIt PnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OlRleHRBbnRpYWxpYXNpbmcsIHRydWUpOwogCiAJCXBh aW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKwkJ aWYgKHNjYWxlKSB7CisJCQlwYWludGVyLT5zY2FsZSgxLjAgLyBzY2FsZSwgMS4wIC8gc2NhbGUp OworCQl9CiAJfQogCiAJcmV0dXJuIHBhaW50ZXI7CkBAIC04MTEsMTEgKzg0Myw2IEBACiAKIG5h bWVzcGFjZSB7CiAKLVFXaWRnZXQgKndpbmRvdyhXaW5kb3dJRCB3aWQpIG5vZXhjZXB0Ci17Ci0J cmV0dXJuIHN0YXRpY19jYXN0PFFXaWRnZXQgKj4od2lkKTsKLX0KLQogUVJlY3QgU2NyZWVuUmVj dGFuZ2xlRm9yUG9pbnQoUVBvaW50IHBvc0dsb2JhbCkKIHsKICNpZiBRVF9WRVJTSU9OID49IFFU X1ZFUlNJT05fQ0hFQ0soNSwgMTAsIDApCkBAIC04NTQsNiArODgxLDggQEAKIAogdm9pZCBXaW5k b3c6OlNldFBvc2l0aW9uUmVsYXRpdmUoUFJlY3RhbmdsZSByYywgY29uc3QgV2luZG93ICpyZWxh dGl2ZVRvKQogeworCWNvbnN0IHFyZWFsIHNjYWxlID0gU2NhbGVUb011bHRpcGx5KHJlbGF0aXZl VG8tPndpZCk7CisJcmMgPSByYyAvIHNjYWxlOwogCVFQb2ludCBvUG9zID0gd2luZG93KHJlbGF0 aXZlVG8tPndpZCktPm1hcFRvR2xvYmFsKFFQb2ludCgwLDApKTsKIAlpbnQgb3ggPSBvUG9zLngo KTsKIAlpbnQgb3kgPSBvUG9zLnkoKTsKQEAgLTg4NCw3ICs5MTMsOSBAQAogUFJlY3RhbmdsZSBX aW5kb3c6OkdldENsaWVudFBvc2l0aW9uKCkgY29uc3QKIHsKIAkvLyBUaGUgY2xpZW50IHBvc2l0 aW9uIGlzIHRoZSB3aW5kb3cgcG9zaXRpb24KLQlyZXR1cm4gR2V0UG9zaXRpb24oKTsKKwljb25z dCBxcmVhbCBzY2FsZSA9IFNjYWxlVG9NdWx0aXBseSh3aWQpOworCWNvbnN0IFBSZWN0YW5nbGUg cmMgPSBHZXRQb3NpdGlvbigpOworCXJldHVybiByYyAqIHNjYWxlOwogfQogCiB2b2lkIFdpbmRv dzo6U2hvdyhib29sIHNob3cpCkBAIC05MDEsOCArOTMyLDIzIEBACiAKIHZvaWQgV2luZG93OjpJ bnZhbGlkYXRlUmVjdGFuZ2xlKFBSZWN0YW5nbGUgcmMpCiB7Ci0JaWYgKHdpZCkKKwlpZiAod2lk KSB7CisJCWNvbnN0IHFyZWFsIHNjYWxlID0gU2NhbGVPZldpbmRvdyh3aWQpOworCQlpZiAoc2Nh bGUpIHsKKyNpZiAhZGVmaW5lZChRX09TX1dJTikKKwkJCS8vIFVzaW5nIFgxMSwgV2F5bGFuZCwg b3IgbWFjT1MuCisJCQlpZiAoc2NhbGUgIT0gMS4wICYmIHNjYWxlICE9IDIuMCkgeworCQkJCS8v IEZyYWN0aW9uYWwgc2NhbGluZyBsZWF2ZXMgcmVwYWludCBkZWJyaXMsIHNvIHJlZHJhdyBjb21w bGV0ZWx5CisJCQkJd2luZG93KHdpZCktPnVwZGF0ZSgpOworCQkJCXJldHVybjsKKwkJCX0KKyNl bmRpZgorCQkJLy8gVXNlIFFSZWN0Rjo6dG9BbGlnbmVkUmVjdCB0byBnZXQgaW50IHJlY3QgdGhh dCBjb250YWlucyBmbG9hdCByZWN0CisJCQl3aW5kb3cod2lkKS0+dXBkYXRlKFFSZWN0RkZyb21Q UmVjdChyYyAvIHNjYWxlKS50b0FsaWduZWRSZWN0KCkpOworCQkJcmV0dXJuOworCQl9CiAJCXdp bmRvdyh3aWQpLT51cGRhdGUoUVJlY3RGcm9tUFJlY3QocmMpKTsKKwl9CiB9CiAKIHZvaWQgV2lu ZG93OjpTZXRDdXJzb3IoQ3Vyc29yIGN1cnMpCkBAIC05OTksNiArMTA0NSw3IEBACiAJaW50IHZp c2libGVSb3dzezV9OwogCVFNYXA8aW50LFFQaXhtYXA+IGltYWdlczsKIAlmbG9hdCBpbWFnZVNj YWxlezEuMH07CisJUVdpZGdldCAqb3duZXIgPSBudWxscHRyOwogfTsKIExpc3RCb3hJbXBsOjpM aXN0Qm94SW1wbCgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKIApAQCAtMTAxMiw3ICsxMDU5LDEwIEBA CiAJdW5pY29kZU1vZGUgPSB1bmljb2RlTW9kZV87CiAKIAlRV2lkZ2V0ICpxcGFyZW50ID0gc3Rh dGljX2Nhc3Q8UVdpZGdldCAqPihwYXJlbnQuR2V0SUQoKSk7CisJb3duZXIgPSBxcGFyZW50Owog CUxpc3RXaWRnZXQgKmxpc3QgPSBuZXcgTGlzdFdpZGdldChxcGFyZW50KTsKKwljb25zdCBxcmVh bCBzY2FsZSA9IFNjYWxlT2ZXaW5kb3cocGFyZW50LkdldElEKCkpOworCWxpc3QtPnNldFByb3Bl cnR5KCJTY2ludGlsbGFTY2FsZSIsIHNjYWxlKTsKIAogI2lmIGRlZmluZWQoUV9PU19XSU4pCiAJ Ly8gT24gV2luZG93cywgUXQ6OlRvb2xUaXAgY2F1c2VzIGEgY3Jhc2ggd2hlbiB0aGUgbGlzdCBp cyBjbGlja2VkIG9uCkBAIC0xMDU0LDcgKzExMDQsMTQgQEAKIAlMaXN0V2lkZ2V0ICpsaXN0ID0g R2V0V2lkZ2V0KCk7CiAJY29uc3QgRm9udEFuZENoYXJhY3RlclNldCAqcGZhY3MgPSBBc0ZvbnRB bmRDaGFyYWN0ZXJTZXQoZm9udCk7CiAJaWYgKHBmYWNzICYmIHBmYWNzLT5wZm9udCkgewotCQls aXN0LT5zZXRGb250KCoocGZhY3MtPnBmb250KSk7CisJCVFGb250IGZvbnREZVNjYWxlZCA9ICoo cGZhY3MtPnBmb250KTsKKwkJY29uc3QgcXJlYWwgc2NhbGVPd25lciA9IFNjYWxlT2ZXaW5kb3co b3duZXIpOworCQlpZiAoc2NhbGVPd25lcikgeworCQkJY29uc3QgcXJlYWwgc2NhbGUgPSB3aW5k b3cob3duZXIpLT5kZXZpY2VQaXhlbFJhdGlvRigpOworCQkJcXJlYWwgcG9pbnRTaXplID0gZm9u dERlU2NhbGVkLnBvaW50U2l6ZUYoKSAvIHNjYWxlOworCQkJZm9udERlU2NhbGVkLnNldFBvaW50 U2l6ZUYocG9pbnRTaXplKTsKKwkJfQorCQlsaXN0LT5zZXRGb250KGZvbnREZVNjYWxlZCk7CiAJ fQogfQogdm9pZCBMaXN0Qm94SW1wbDo6U2V0QXZlcmFnZUNoYXJXaWR0aChpbnQgLyp3aWR0aCov KSB7fQpAQCAtMTA4MSwxMCArMTEzOCwxMSBAQAogCVFTdHlsZSAqc3R5bGUgPSBRQXBwbGljYXRp b246OnN0eWxlKCk7CiAJaW50IHdpZHRoID0gbGlzdC0+c2l6ZUhpbnRGb3JDb2x1bW4oMCkgKyAo MiAqIGxpc3QtPmZyYW1lV2lkdGgoKSk7CiAJaWYgKExlbmd0aCgpID4gcm93cykgewotCQl3aWR0 aCArPSBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TY3JvbGxCYXJFeHRlbnQpOworCQl3 aWR0aCArPSBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TY3JvbGxCYXJFeHRlbnQpICsg MTsKIAl9CiAKLQlyZXR1cm4gUFJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKwljb25z dCBxcmVhbCBzY2FsZSA9IFNjYWxlT2ZXaW5kb3cod2lkKTsKKwlyZXR1cm4gUFJlY3RhbmdsZSgw LCAwLCB3aWR0aCwgaGVpZ2h0KSAqIChzY2FsZSA/IHNjYWxlIDogMS4wKTsKIH0KIGludCBMaXN0 Qm94SW1wbDo6Q2FyZXRGcm9tRWRnZSgpCiB7CmRpZmYgLXIgMDMzYzM0MmU2NjU2IHF0L1NjaW50 aWxsYUVkaXRCYXNlL1BsYXRRdC5oCi0tLSBhL3F0L1NjaW50aWxsYUVkaXRCYXNlL1BsYXRRdC5o CVNhdCBKdW4gMTMgMTE6MDE6NTYgMjAyNiArMTAwMAorKysgYi9xdC9TY2ludGlsbGFFZGl0QmFz ZS9QbGF0UXQuaAlXZWQgSnVuIDE3IDExOjQ5OjIyIDIwMjYgKzEwMDAKQEAgLTc0LDYgKzc0LDEz IEBACiAJcmV0dXJuIFFQb2ludEYocXAueCwgcXAueSk7CiB9CiAKK2lubGluZSBRV2lkZ2V0ICp3 aW5kb3coV2luZG93SUQgd2lkKSBub2V4Y2VwdAoreworCXJldHVybiBzdGF0aWNfY2FzdDxRV2lk Z2V0ICo+KHdpZCk7Cit9CisKK2RvdWJsZSBTY2FsZU9mV2luZG93KFdpbmRvd0lEIHdpZCk7CisK IGNsYXNzIFN1cmZhY2VJbXBsIDogcHVibGljIFN1cmZhY2UgewogcHJpdmF0ZToKIAlRUGFpbnRE ZXZpY2UgKmRldmljZSA9IG51bGxwdHI7CkBAIC04MSw2ICs4OCw3IEBACiAJYm9vbCBkZXZpY2VP d25lZCA9IGZhbHNlOwogCWJvb2wgcGFpbnRlck93bmVkID0gZmFsc2U7CiAJU3VyZmFjZU1vZGUg bW9kZTsKKwlxcmVhbCBzY2FsZSA9IDAuMDsKIAljb25zdCBjaGFyICpjb2RlY05hbWUgPSBudWxs cHRyOwogCVFUZXh0Q29kZWMgKmNvZGVjID0gbnVsbHB0cjsKIApAQCAtODgsNyArOTYsNyBAQAog CiBwdWJsaWM6CiAJU3VyZmFjZUltcGwoKTsKLQlTdXJmYWNlSW1wbChpbnQgd2lkdGgsIGludCBo ZWlnaHQsIFN1cmZhY2VNb2RlIG1vZGVfKTsKKwlTdXJmYWNlSW1wbChpbnQgd2lkdGgsIGludCBo ZWlnaHQsIFN1cmZhY2VNb2RlIG1vZGVfLCBxcmVhbCBzY2FsZV8pOwogCXZpcnR1YWwgflN1cmZh Y2VJbXBsKCkgb3ZlcnJpZGU7CiAKIAl2b2lkIEluaXQoV2luZG93SUQgd2lkKSBvdmVycmlkZTsK QEAgLTE2NCw2ICsxNzIsOCBAQAogCVFQYWludGVyICpHZXRQYWludGVyKCk7CiB9OwogCitzdGQ6 OnVuaXF1ZV9wdHI8U3VyZmFjZT4gU3VyZmFjZUltcGxfQWxsb2NhdGVQaXhNYXAoaW50IHdpZHRo LCBpbnQgaGVpZ2h0LCBTdXJmYWNlTW9kZSBtb2RlLCBxcmVhbCBzY2FsZSk7CisKIH0KIAogI2Vu ZGlmCmRpZmYgLXIgMDMzYzM0MmU2NjU2IHF0L1NjaW50aWxsYUVkaXRCYXNlL1NjaW50aWxsYUVk aXRCYXNlLmNwcAotLS0gYS9xdC9TY2ludGlsbGFFZGl0QmFzZS9TY2ludGlsbGFFZGl0QmFzZS5j cHAJU2F0IEp1biAxMyAxMTowMTo1NiAyMDI2ICsxMDAwCisrKyBiL3F0L1NjaW50aWxsYUVkaXRC YXNlL1NjaW50aWxsYUVkaXRCYXNlLmNwcAlXZWQgSnVuIDE3IDExOjQ5OjIyIDIwMjYgKzEwMDAK QEAgLTEyNyw2ICsxMjcsMTMgQEAKIAl9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50 OjpIaWRlKSB7CiAJCXNldE1vdXNlVHJhY2tpbmcoZmFsc2UpOwogCQlyZXN1bHQgPSBRQWJzdHJh Y3RTY3JvbGxBcmVhOjpldmVudChldmVudCk7CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9O X0NIRUNLKDYsIDYsIDApCisJfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IFFFdmVudDo6RGV2 aWNlUGl4ZWxSYXRpb0NoYW5nZSkgeworCQkvLyBSZXNldCBjYWNoZWQgZGF0YQorCQlzcXQtPlNl dFNjYWxlUHJvcGVydHkoKTsKKwkJc3F0LT5JbnZhbGlkYXRlU3R5bGVSZWRyYXcoKTsKKwkJcmVz dWx0ID0gUUFic3RyYWN0U2Nyb2xsQXJlYTo6ZXZlbnQoZXZlbnQpOworI2VuZGlmCiAJfSBlbHNl IHsKIAkJcmVzdWx0ID0gUUFic3RyYWN0U2Nyb2xsQXJlYTo6ZXZlbnQoZXZlbnQpOwogCX0KQEAg LTMxOCw3ICszMjUsNyBAQAogCiB2b2lkIFNjaW50aWxsYUVkaXRCYXNlOjptb3VzZVByZXNzRXZl bnQoUU1vdXNlRXZlbnQgKmV2ZW50KQogewotCWNvbnN0IFBvaW50IHBvcyA9IFBvaW50RnJvbVFQ b2ludChldmVudC0+cG9zKCkpOworCWNvbnN0IFBvaW50IHBvcyA9IFBvaW50RnJvbVFQb2ludChl dmVudC0+cG9zKCkpICogKHNxdC0+SXNQaXhlbEFsaWduZWRTY2FsZSgpID8gZGV2aWNlUGl4ZWxS YXRpb0YoKSA6IDEuMCk7CiAKIAllbWl0IGJ1dHRvblByZXNzZWQoZXZlbnQpOwogCkBAIC0zNDcs NyArMzU0LDcgQEAKIAogdm9pZCBTY2ludGlsbGFFZGl0QmFzZTo6bW91c2VSZWxlYXNlRXZlbnQo UU1vdXNlRXZlbnQgKmV2ZW50KQogewotCWNvbnN0IFFQb2ludCBwb2ludCA9IGV2ZW50LT5wb3Mo KTsKKwljb25zdCBRUG9pbnQgcG9pbnQgPSBldmVudC0+cG9zKCkgKiAoc3F0LT5Jc1BpeGVsQWxp Z25lZFNjYWxlKCkgPyBkZXZpY2VQaXhlbFJhdGlvRigpIDogMS4wKTsKIAlpZiAoZXZlbnQtPmJ1 dHRvbigpID09IFF0OjpMZWZ0QnV0dG9uKQogCQlzcXQtPkJ1dHRvblVwV2l0aE1vZGlmaWVycyhQ b2ludEZyb21RUG9pbnQocG9pbnQpLCBUaW1lT2ZFdmVudCh0aW1lKSwgTW9kaWZpZXJzT2ZLZXli b2FyZCgpKTsKIApAQCAtMzY3LDcgKzM3NCw3IEBACiAKIHZvaWQgU2NpbnRpbGxhRWRpdEJhc2U6 Om1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50ICpldmVudCkKIHsKLQljb25zdCBQb2ludCBwb3Mg PSBQb2ludEZyb21RUG9pbnQoZXZlbnQtPnBvcygpKTsKKwljb25zdCBQb2ludCBwb3MgPSBQb2lu dEZyb21RUG9pbnQoZXZlbnQtPnBvcygpKSAgKiAoc3F0LT5Jc1BpeGVsQWxpZ25lZFNjYWxlKCkg PyBkZXZpY2VQaXhlbFJhdGlvRigpIDogMS4wKTsKIAogCWNvbnN0IGJvb2wgc2hpZnQgPSBRQXBw bGljYXRpb246OmtleWJvYXJkTW9kaWZpZXJzKCkgJiBRdDo6U2hpZnRNb2RpZmllcjsKIAljb25z dCBib29sIGN0cmwgID0gUUFwcGxpY2F0aW9uOjprZXlib2FyZE1vZGlmaWVycygpICYgUXQ6OkNv bnRyb2xNb2RpZmllcjsKZGlmZiAtciAwMzNjMzQyZTY2NTYgcXQvU2NpbnRpbGxhRWRpdEJhc2Uv U2NpbnRpbGxhRWRpdEJhc2UucHJvCi0tLSBhL3F0L1NjaW50aWxsYUVkaXRCYXNlL1NjaW50aWxs YUVkaXRCYXNlLnBybwlTYXQgSnVuIDEzIDExOjAxOjU2IDIwMjYgKzEwMDAKKysrIGIvcXQvU2Np bnRpbGxhRWRpdEJhc2UvU2NpbnRpbGxhRWRpdEJhc2UucHJvCVdlZCBKdW4gMTcgMTE6NDk6MjIg MjAyNiArMTAwMApAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgREVGSU5FUyArPSBOREVCVUc9MQog fQogCi1ERVNURElSID0gLi4vLi4vYmluCitERVNURElSID0gJCRfUFJPX0ZJTEVfUFdEXy8uLi8u Li9iaW4KIAogbWFjeCB7CiAJUU1BS0VfTEZMQUdTX1NPTkFNRSA9IC1XbCwtaW5zdGFsbF9uYW1l LEBleGVjdXRhYmxlX3BhdGgvLi4vRnJhbWV3b3Jrcy8KZGlmZiAtciAwMzNjMzQyZTY2NTYgcXQv U2NpbnRpbGxhRWRpdEJhc2UvU2NpbnRpbGxhUXQuY3BwCi0tLSBhL3F0L1NjaW50aWxsYUVkaXRC YXNlL1NjaW50aWxsYVF0LmNwcAlTYXQgSnVuIDEzIDExOjAxOjU2IDIwMjYgKzEwMDAKKysrIGIv cXQvU2NpbnRpbGxhRWRpdEJhc2UvU2NpbnRpbGxhUXQuY3BwCVdlZCBKdW4gMTcgMTE6NDk6MjIg MjAyNiArMTAwMApAQCAtMzMsNiArMzMsNyBAQAogewogCiAJd01haW4gPSBzY3JvbGxBcmVhLT52 aWV3cG9ydCgpOworCXNjcm9sbEFyZWEtPnZpZXdwb3J0KCktPnNldFByb3BlcnR5KCJTY2ludGls bGFTY2FsZSIsIDAuMCk7CiAKIAlpbWVJbnRlcmFjdGlvbiA9IElNRUludGVyYWN0aW9uOjpJbmxp bmU7CiAKQEAgLTI3Niw2ICsyNzcsMTEgQEAKIHZvaWQgU2NpbnRpbGxhUXQ6OlNjcm9sbFRleHQo U2NpOjpMaW5lIGxpbmVzVG9Nb3ZlKQogewogCWludCBkeSA9IHZzLmxpbmVIZWlnaHQgKiAobGlu ZXNUb01vdmUpOworCWlmIChJc1BpeGVsQWxpZ25lZFNjYWxlKCkpIHsKKwkJLy8gbGluZUhlaWdo dCBpcyBpbiBkZXZpY2UgcGl4ZWxzLCB2aWV3cG9ydCgpLT5zY3JvbGwoKSBuZWVkcyBsb2dpY2Fs IHBpeGVscworCQljb25zdCBxcmVhbCBzY2FsZSA9IHdpbmRvdyh3TWFpbi5HZXRJRCgpKS0+ZGV2 aWNlUGl4ZWxSYXRpb0YoKTsKKwkJZHkgPSBxUm91bmQoZHkgLyBzY2FsZSk7CisJfQogCXNjcm9s bEFyZWEtPnZpZXdwb3J0KCktPnNjcm9sbCgwLCBkeSk7CiB9CiAKQEAgLTcxNSw3ICs3MjEsMTMg QEAKIAogCWlmICghY3Qud0NhbGxUaXAuQ3JlYXRlZCgpKSB7CiAJCVFXaWRnZXQgKnBDYWxsVGlw ID0gbmV3IENhbGxUaXBJbXBsKHNjcm9sbEFyZWEtPndpbmRvdygpLT53aW5kb3dIYW5kbGUoKSwg JmN0KTsKKwkJY29uc3QgcXJlYWwgc2NhbGVEZXZpY2UgPSBTY2FsZU9mV2luZG93KHdNYWluLkdl dElEKCkpOworCQlwQ2FsbFRpcC0+c2V0UHJvcGVydHkoIlNjaW50aWxsYVNjYWxlIiwKKwkJCXNj YWxlVGVjaG5pcXVlID09IFNjYWxlVGVjaG5pcXVlOjpQaXhlbEFsaWduZWQgPyBzY2FsZURldmlj ZSA6IDAuMCk7CisKIAkJY3Qud0NhbGxUaXAgPSBwQ2FsbFRpcDsKKwkJaWYgKHNjYWxlRGV2aWNl KQorCQkJcmMgPSByYyAqIHNjYWxlRGV2aWNlOwogCQlwQ2FsbFRpcC0+bW92ZShyYy5sZWZ0LCBy Yy50b3ApOwogCQlwQ2FsbFRpcC0+cmVzaXplKHJjLldpZHRoKCksIHJjLkhlaWdodCgpKTsKIAl9 CkBAIC03NzEsNiArNzgzLDE2IEBACiAJCWNhc2UgTWVzc2FnZTo6R2V0UmVjdGFuZ3VsYXJTZWxl Y3Rpb25Nb2RpZmllcjoKIAkJCXJldHVybiByZWN0YW5ndWxhclNlbGVjdGlvbk1vZGlmaWVyOwog CisJCWNhc2UgTWVzc2FnZTo6U2V0U2NhbGVUZWNobmlxdWU6CisJCQlzY2FsZVRlY2huaXF1ZSA9 IHN0YXRpY19jYXN0PFNjYWxlVGVjaG5pcXVlPih3UGFyYW0pOworCQkJLy8gU2NhbGUgcHJvcGVy dHkgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBJbnZhbGlkYXRlU3R5bGVSZWRyYXcoKQorCQkJU2V0 U2NhbGVQcm9wZXJ0eSgpOworCQkJSW52YWxpZGF0ZVN0eWxlUmVkcmF3KCk7CisJCQlicmVhazsK KworCQljYXNlIE1lc3NhZ2U6OkdldFNjYWxlVGVjaG5pcXVlOgorCQkJcmV0dXJuIHN0YXRpY19j YXN0PHNwdHJfdD4oc2NhbGVUZWNobmlxdWUpOworCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gU2Np bnRpbGxhQmFzZTo6V25kUHJvYyhpTWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogCQl9CkBAIC04 MDUsMjAgKzgyNyw1NSBAQAogCXJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAordm9pZCBTY2ludGls bGFRdDo6U2V0U2NhbGVQcm9wZXJ0eSgpCit7CisJcXJlYWwgc2NhbGUgPSAwLjA7CisJaWYgKHNj YWxlVGVjaG5pcXVlID09IFNjYWxlVGVjaG5pcXVlOjpQaXhlbEFsaWduZWQpIHsKKwkJUVdpZGdl dCAqd2lkZ2V0ID0gd2luZG93KHdNYWluLkdldElEKCkpOworCQlzY2FsZSA9IHdpZGdldC0+ZGV2 aWNlUGl4ZWxSYXRpb0YoKTsKKwl9CisJc2Nyb2xsQXJlYS0+dmlld3BvcnQoKS0+c2V0UHJvcGVy dHkoIlNjaW50aWxsYVNjYWxlIiwgc2NhbGUpOworfQorCiAvLyBBZGRpdGlvbnMgdG8gbWVyZ2Ug aW4gU2NpZW50aWZpYyBUb29sd29ya3Mgd2lkZ2V0IHN0cnVjdHVyZQogCiB2b2lkIFNjaW50aWxs YVF0OjpQYXJ0aWFsUGFpbnQoY29uc3QgUFJlY3RhbmdsZSAmcmVjdCkKIHsKLQlyY1BhaW50ID0g cmVjdDsKKwlTZXRTY2FsZVByb3BlcnR5KCk7CisJaWYgKHNjYWxlVGVjaG5pcXVlID09IFNjYWxl VGVjaG5pcXVlOjpQaXhlbEFsaWduZWQpIHsKKwkJUVdpZGdldCAqd2lkZ2V0ID0gd2luZG93KHdN YWluLkdldElEKCkpOworCQlyY1BhaW50ID0gcmVjdCAqIHdpZGdldC0+ZGV2aWNlUGl4ZWxSYXRp b0YoKTsKKwl9IGVsc2UgeworCQlyY1BhaW50ID0gcmVjdDsKKwl9CiAJcGFpbnRTdGF0ZSA9IFBh aW50U3RhdGU6OnBhaW50aW5nOwogCVBSZWN0YW5nbGUgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0 YW5nbGUoKTsKIAlwYWludGluZ0FsbFRleHQgPSByY1BhaW50LkNvbnRhaW5zKHJjQ2xpZW50KTsK IAogCUF1dG9TdXJmYWNlIHN1cmZhY2VQYWludCh0aGlzKTsKLQlQYWludChzdXJmYWNlUGFpbnQs IHJjUGFpbnQpOworCWlmIChzY2FsZVRlY2huaXF1ZSA9PSBTY2FsZVRlY2huaXF1ZTo6UGl4ZWxB bGlnbmVkKSB7CisJCS8vIENyZWF0ZSBCaXRtYXAgb2YgZXhhY3RseSB3aW5kb3cgc2l6ZSB0aGVu IGJsaXQgYWZ0ZXIgUGFpbnQgY2FsbAorCQlRV2lkZ2V0ICp3aWRnZXQgPSB3aW5kb3cod01haW4u R2V0SUQoKSk7CisJCWNvbnN0IHFyZWFsIHNjYWxlID0gd2lkZ2V0LT5kZXZpY2VQaXhlbFJhdGlv RigpOworCQljb25zdCBRU2l6ZSBzeiA9IHdpZGdldC0+c2l6ZSgpICogc2NhbGU7CisJCWNvbnN0 IGludCB3ID0gc3oud2lkdGgoKTsKKwkJY29uc3QgaW50IGggPSBzei5oZWlnaHQoKTsKKwkJc3Rk Ojp1bmlxdWVfcHRyPFN1cmZhY2U+IHN1cmZQaXggPSBTdXJmYWNlSW1wbF9BbGxvY2F0ZVBpeE1h cCh3LCBoLCBDdXJyZW50U3VyZmFjZU1vZGUoKSwgMC4wKTsKKwkJUFJlY3RhbmdsZSByY1NjYWxl ZCA9IFBSZWN0YW5nbGU6OkZyb21JbnRzKDAsIDAsIHcsIGgpOworCQlQYWludChzdXJmUGl4Lmdl dCgpLCByY1NjYWxlZCk7CisJCXN1cmZhY2VQYWludC0+Q29weShyY1NjYWxlZCwgUG9pbnQoMCww KSwgKnN1cmZQaXgpOworCX0gZWxzZSB7CisJCVBhaW50KHN1cmZhY2VQYWludCwgcmNQYWludCk7 CisJfQogCXN1cmZhY2VQYWludC0+UmVsZWFzZSgpOwogCiAJaWYgKHBhaW50U3RhdGUgPT0gUGFp bnRTdGF0ZTo6YWJhbmRvbmVkKSB7CisJCWlmIChzY2FsZVRlY2huaXF1ZSA9PSBTY2FsZVRlY2hu aXF1ZTo6UGl4ZWxBbGlnbmVkKSB7CisJCQkvLyBTaG91bGQgdHJ5IG1vcmUgcmVwYWlyIGJ1dCBq dXN0IHF1ZXVlIGEgZnVsbCByZXBhaW50LgorCQkJc2Nyb2xsQXJlYS0+dmlld3BvcnQoKS0+dXBk YXRlKCk7CisJCQlwYWludFN0YXRlID0gUGFpbnRTdGF0ZTo6bm90UGFpbnRpbmc7CisJCQlyZXR1 cm47CisJCX0KIAkJLy8gRklYTUU6IEZhaWx1cmUgdG8gcGFpbnQgdGhlIHJlcXVlc3RlZCByZWN0 YW5nbGUgaW4gZWFjaAogCQkvLyBwYWludCBldmVudCBjYXVzZXMgZmxpY2tlciBvbiBzb21lIHBs YXRmb3JtcyAoTWFjPykKIAkJLy8gUGFpbnQgcmVjdCBpbW1lZGlhdGVseS4KZGlmZiAtciAwMzNj MzQyZTY2NTYgcXQvU2NpbnRpbGxhRWRpdEJhc2UvU2NpbnRpbGxhUXQuaAotLS0gYS9xdC9TY2lu dGlsbGFFZGl0QmFzZS9TY2ludGlsbGFRdC5oCVNhdCBKdW4gMTMgMTE6MDE6NTYgMjAyNiArMTAw MAorKysgYi9xdC9TY2ludGlsbGFFZGl0QmFzZS9TY2ludGlsbGFRdC5oCVdlZCBKdW4gMTcgMTE6 NDk6MjIgMjAyNiArMTAwMApAQCAtMTU2LDYgKzE1NiwxMSBAQAogCXN0YXRpYyBzcHRyX3QgRGly ZWN0U3RhdHVzRnVuY3Rpb24oc3B0cl90IHB0ciwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBpTWVz c2FnZSwgdXB0cl90IHdQYXJhbSwgc3B0cl90IGxQYXJhbSwgaW50ICpwU3RhdHVzKTsKIAorCXZv aWQgU2V0U2NhbGVQcm9wZXJ0eSgpOworCWJvb2wgSXNQaXhlbEFsaWduZWRTY2FsZSgpIGNvbnN0 IG5vZXhjZXB0IHsKKwkJcmV0dXJuIHNjYWxlVGVjaG5pcXVlID09IFNjYWxlVGVjaG5pcXVlOjpQ aXhlbEFsaWduZWQ7CisJfQorCiBwcm90ZWN0ZWQ6CiAKIAl2b2lkIFBhcnRpYWxQYWludChjb25z dCBQUmVjdGFuZ2xlICZyZWN0KTsKQEAgLTE3OCw2ICsxODMsOCBAQAogCWJvb2wgZHJhZ1dhc0Ry b3BwZWQ7CiAJaW50IHJlY3Rhbmd1bGFyU2VsZWN0aW9uTW9kaWZpZXI7CiAKKwlTY2FsZVRlY2hu aXF1ZSBzY2FsZVRlY2huaXF1ZSA9IFNjYWxlVGVjaG5pcXVlOjpEZWZhdWx0OworCiAJZnJpZW5k IGNsYXNzIDo6U2NpbnRpbGxhRWRpdEJhc2U7CiB9OwogCmRpZmYgLXIgMDMzYzM0MmU2NjU2IHNy Yy9HZW9tZXRyeS5oCi0tLSBhL3NyYy9HZW9tZXRyeS5oCVNhdCBKdW4gMTMgMTE6MDE6NTYgMjAy NiArMTAwMAorKysgYi9zcmMvR2VvbWV0cnkuaAlXZWQgSnVuIDE3IDExOjQ5OjIyIDIwMjYgKzEw MDAKQEAgLTQ1LDYgKzQ1LDEwIEBACiAJCXJldHVybiBQb2ludCh4IC0gb3RoZXIueCwgeSAtIG90 aGVyLnkpOwogCX0KIAorCWNvbnN0ZXhwciBQb2ludCBvcGVyYXRvciooWFlQT1NJVElPTiBtdWx0 aXBsaWVyKSBjb25zdCBub2V4Y2VwdCB7CisJCXJldHVybiBQb2ludCh4ICogbXVsdGlwbGllciwg eSAqIG11bHRpcGxpZXIpOworCX0KKwogCS8vIE90aGVyIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBt ZXRob2RzIChhc3NpZ25tZW50LCBjb3B5IGNvbnN0cnVjdG9yLCBkZXN0cnVjdG9yKSBhcmUgZmlu ZQogfTsKIApAQCAtMTAxLDYgKzEwNSwxNSBAQAogCQlyZXR1cm4gKHJjLmxlZnQgPT0gbGVmdCkg JiYgKHJjLnJpZ2h0ID09IHJpZ2h0KSAmJgogCQkJKHJjLnRvcCA9PSB0b3ApICYmIChyYy5ib3R0 b20gPT0gYm90dG9tKTsKIAl9CisJCisJY29uc3RleHByIFBSZWN0YW5nbGUgb3BlcmF0b3IqKFhZ UE9TSVRJT04gbXVsdGlwbGllcikgY29uc3Qgbm9leGNlcHQgeworCQlyZXR1cm4gUFJlY3Rhbmds ZShsZWZ0ICogbXVsdGlwbGllciwgdG9wICogbXVsdGlwbGllciwgcmlnaHQgKiBtdWx0aXBsaWVy LCBib3R0b20gKiBtdWx0aXBsaWVyKTsKKwl9CisKKwljb25zdGV4cHIgUFJlY3RhbmdsZSBvcGVy YXRvci8oWFlQT1NJVElPTiBkaXZpc29yKSBjb25zdCBub2V4Y2VwdCB7CisJCXJldHVybiBQUmVj dGFuZ2xlKGxlZnQgLyBkaXZpc29yLCB0b3AgLyBkaXZpc29yLCByaWdodCAvIGRpdmlzb3IsIGJv dHRvbSAvIGRpdmlzb3IpOworCX0KKwogCWNvbnN0ZXhwciBib29sIENvbnRhaW5zKFBvaW50IHB0 KSBjb25zdCBub2V4Y2VwdCB7CiAJCXJldHVybiAocHQueCA+PSBsZWZ0KSAmJiAocHQueCA8PSBy aWdodCkgJiYKIAkJCShwdC55ID49IHRvcCkgJiYgKHB0LnkgPD0gYm90dG9tKTsK --00000000000015113306546acc64--