Re: Move a window
Steven J Abner <[email protected]> Sat, 31 May 2025 12:04:12 -0400
| Newsgroups | gmane.comp.freedesktop.xcb |
|---|---|
| Message-ID | <[email protected]> |
--=-m7D0Nb36mN//j1JLt8mf Content-Type: text/plain; charset=us-ascii; format=flowed For any attempting to help, God bless and here's version 2. It adds define switches to allow override-redirect (killing of them messing with configure), a per_icccm, and a compiz switch (ability to use EWMH). Other property attempts not included for fear of getting too messy. Using override is close to what wanted, but negates features window managers provide, like graphics, virtual desktop switching (which is great for non-compliant anyways). Objective is after-all to create headerbars, but receive full wm support, like real configure notices. The compiz switch can be tried on other non-gnome type managers, it may work? It's from the EWMH protocols. Steve --=-m7D0Nb36mN//j1JLt8mf Content-Type: text/x-csrc Content-Disposition: attachment; filename=xmove.c Content-Transfer-Encoding: base64 LyoKICogTW92ZSB3aW5kb3cgZGVtbwogKiBTdGV2ZW4gSiBBYm5lciAyMDI1CiAqLwojaW5jbHVk ZSA8eGNiL3hjYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5j bHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5o PgojaW5jbHVkZSA8bGltaXRzLmg+CiNpbmNsdWRlIDxwb2xsLmg+CgojZGVmaW5lIE9WRVJSSURF IDEKI2RlZmluZSBQRVJfSUNDQ00gMAojaWYgUEVSX0lDQ0NNCiAjdW5kZWYgT1ZFUlJJREUKICNk ZWZpbmUgT1ZFUlJJREUgMAojZW5kaWYKCiNkZWZpbmUgVVNJTkdfQ09NUElaIDAKI2lmIFVTSU5H X0NPTVBJWgogI3VuZGVmIE9WRVJSSURFCiAjZGVmaW5lIE9WRVJSSURFIDAKICN1bmRlZiBQRVJf SUNDQ00KICNkZWZpbmUgUEVSX0lDQ0NNIDAKI2VuZGlmCgovKiBnY2MgLWFuc2kgLXBlZGFudGlj IC1XYWxsIC1nIC1vIHhtb3ZlIHhtb3ZlLmMgLWx4Y2IgKi8KCnR5cGVkZWYgc3RydWN0IF9QaHhJ bnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeEludGVyZmFjZTsKdHlwZWRl ZiBzdHJ1Y3QgX1BoeFJlY3RhbmdsZSB7IGludDE2X3QgeCwgeSwgdywgaDsgfSAgICAgUGh4UmVj dGFuZ2xlOwoKeGNiX2Nvbm5lY3Rpb25fdCAgICAgKmNvbm5lY3Rpb24gPSBOVUxMOwp4Y2JfYXRv bV90IFdNX1BST1RPQ09MUzsKeGNiX2F0b21fdCBXTV9ERUxFVEVfV0lORE9XOwppbnQxNl90IHhy b290LCB5cm9vdDsKCnN0cnVjdCBfUGh4SW50ZXJmYWNlIHsKIFBoeFJlY3RhbmdsZSAgbWV0ZV9i b3g7CiB4Y2Jfd2luZG93X3QgIHdpbmRvdzsKfSBpZmFjZTAgPSB7IHswfSwgMCB9OwoKI2lmIChf X1NURENfVkVSU0lPTl9fIDw9IDE5OTkwMUwpCiAjZGVmaW5lIFJFQ1RBTkdMRShhLGIsYyxkLGUp IFwKICBhLnggPSBiLCBhLnkgPSBjLCBhLncgPSBkLCBhLmggPSBlCiNlbHNlCiAjZGVmaW5lIFJF Q1RBTkdMRShhLGIsYyxkLGUpIFwKICBhID0gKFBoeFJlY3RhbmdsZSl7IGIsIGMsIGQsIGUgfQoj ZW5kaWYKCnN0YXRpYyBib29sCmV2ZW50X2tleWJvYXJkKHhjYl9nZW5lcmljX2V2ZW50X3QgKm52 dCkgewoKICB4Y2Jfa2V5X3ByZXNzX2V2ZW50X3QgKmtwID0gKHhjYl9rZXlfcHJlc3NfZXZlbnRf dCopbnZ0OwogIHhjYl9jbGllbnRfbWVzc2FnZV9ldmVudF90ICptZXNzYWdlOwogIG1lc3NhZ2Ug PSBjYWxsb2MoMzIsIDEpOwogIG1lc3NhZ2UtPnJlc3BvbnNlX3R5cGUgID0gWENCX0NMSUVOVF9N RVNTQUdFOwogIG1lc3NhZ2UtPmZvcm1hdCAgICAgICAgID0gMzI7CiAgbWVzc2FnZS0+d2luZG93 ICAgICAgICAgPSBrcC0+ZXZlbnQ7CiAgbWVzc2FnZS0+dHlwZSAgICAgICAgICAgPSBXTV9QUk9U T0NPTFM7CiAgbWVzc2FnZS0+ZGF0YS5kYXRhMzJbMF0gPSBXTV9ERUxFVEVfV0lORE9XOwogIG1l c3NhZ2UtPmRhdGEuZGF0YTMyWzFdID0ga3AtPnRpbWU7CiAgeGNiX3NlbmRfZXZlbnQoY29ubmVj dGlvbiwgZmFsc2UsIG1lc3NhZ2UtPndpbmRvdywKICAgICAgICAgICAgICAgICAgICAgWENCX0VW RU5UX01BU0tfTk9fRVZFTlQsIChjaGFyKiltZXNzYWdlKTsKICB4Y2JfZmx1c2goY29ubmVjdGlv bik7CiAgcmV0dXJuIHRydWU7Cn0KCiNpZiAoIVVTSU5HX0NPTVBJWikKc3RhdGljIGJvb2wKZXZl bnRfbW91c2UoeGNiX2dlbmVyaWNfZXZlbnRfdCAqbnZ0KSB7CgogIGJvb2wgbG9jdXMgPSAoKG52 dC0+cmVzcG9uc2VfdHlwZSAmICh1aW50OF90KX4weDgwKSA9PSBYQ0JfQlVUVE9OX1BSRVNTKTsK ICB4Y2JfYnV0dG9uX3ByZXNzX2V2ZW50X3QgKm1vdXNlCiAgICA9ICh4Y2JfYnV0dG9uX3ByZXNz X2V2ZW50X3QqKW52dDsKCiAgaWYgKGxvY3VzKSB7CiAgICB4Y2JfZ3JhYl9wb2ludGVyX2Nvb2tp ZV90IGMwOwogICAgeGNiX2dyYWJfcG9pbnRlcl9yZXBseV90ICpyMDsKCiAgICB4cm9vdCA9IG1v dXNlLT5yb290X3g7CiAgICB5cm9vdCA9IG1vdXNlLT5yb290X3k7CiAgICBjMCA9IHhjYl9ncmFi X3BvaW50ZXIoY29ubmVjdGlvbiwgMSwgbW91c2UtPmV2ZW50LAogICAgICAgIFhDQl9FVkVOVF9N QVNLX0JVVFRPTl9QUkVTUyB8IFhDQl9FVkVOVF9NQVNLX0JVVFRPTl9SRUxFQVNFCiAgICAgICAg ICAgfCBYQ0JfRVZFTlRfTUFTS19QT0lOVEVSX01PVElPTiwKICAgICAgICBYQ0JfR1JBQl9NT0RF X0FTWU5DLCBYQ0JfR1JBQl9NT0RFX0FTWU5DLAogICAgICAgIFhDQl9OT05FLCBYQ0JfTk9ORSwg bW91c2UtPnRpbWUpOwogICAgcjAgPSB4Y2JfZ3JhYl9wb2ludGVyX3JlcGx5KGNvbm5lY3Rpb24s IGMwLCBOVUxMKTsKICAgIGlmICgocjAgPT0gTlVMTCkgfHwgKHIwLT5zdGF0dXMgIT0gWENCX0dS QUJfU1RBVFVTX1NVQ0NFU1MpKSB7CiAgICAgIHB1dHMoImdyYWIgZmFpbGVkIik7CiAgICAgIHJl dHVybiBmYWxzZTsKICAgIH0KICB9IGVsc2UgewogICAgeGNiX3VuZ3JhYl9wb2ludGVyKGNvbm5l Y3Rpb24sIG1vdXNlLT50aW1lKTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KI2VuZGlmCgpzdGF0aWMg Ym9vbApldmVudF9tb3Rpb24oeGNiX2dlbmVyaWNfZXZlbnRfdCAqbnZ0KSB7CgogIHhjYl9tb3Rp b25fbm90aWZ5X2V2ZW50X3QgKm1vdGlvbgogICAgPSAoeGNiX21vdGlvbl9ub3RpZnlfZXZlbnRf dCopbnZ0OwoKICBpZiAoISEobW90aW9uLT5zdGF0ZSAmIFhDQl9CVVRUT05fTUFTS18xKSkgewoj aWYgVVNJTkdfQ09NUElaCiAgICB4Y2Jfc2NyZWVuX3QgKnNjcmVlbgogICAgICA9IHhjYl9zZXR1 cF9yb290c19pdGVyYXRvcih4Y2JfZ2V0X3NldHVwKGNvbm5lY3Rpb24pKS5kYXRhOwogICAgeGNi X2ludGVybl9hdG9tX2Nvb2tpZV90IGMwOwogICAgeGNiX2ludGVybl9hdG9tX3JlcGx5X3QgKnIw OwogICAgeGNiX2NsaWVudF9tZXNzYWdlX2V2ZW50X3QgKm1lc3NhZ2U7CiAgCiAgICBjMCA9IHhj Yl9pbnRlcm5fYXRvbShjb25uZWN0aW9uLCAxLCAxOCwgIl9ORVRfV01fTU9WRVJFU0laRSIpOwog ICAgcjAgPSB4Y2JfaW50ZXJuX2F0b21fcmVwbHkoY29ubmVjdGlvbiwgYzAsIE5VTEwpOwogIAog ICAgeGNiX3VuZ3JhYl9wb2ludGVyKGNvbm5lY3Rpb24sIG1vdGlvbi0+dGltZSk7CiAgICB4Y2Jf Zmx1c2goY29ubmVjdGlvbik7CiAgCiAgICBtZXNzYWdlID0gY2FsbG9jKDMyLCAxKTsKICAgIG1l c3NhZ2UtPnJlc3BvbnNlX3R5cGUgID0gWENCX0NMSUVOVF9NRVNTQUdFOwogICAgbWVzc2FnZS0+ Zm9ybWF0ICAgICAgICAgPSAzMjsKICAgIG1lc3NhZ2UtPndpbmRvdyAgICAgICAgID0gbW90aW9u LT5ldmVudDsKICAgIG1lc3NhZ2UtPnR5cGUgICAgICAgICAgID0gcjAtPmF0b207CiAgICBtZXNz YWdlLT5kYXRhLmRhdGEzMlswXSA9IG1vdGlvbi0+cm9vdF94OwogICAgbWVzc2FnZS0+ZGF0YS5k YXRhMzJbMV0gPSBtb3Rpb24tPnJvb3RfeTsKICAgIG1lc3NhZ2UtPmRhdGEuZGF0YTMyWzJdID0g ODsgLyogbW92ZW1lbnQgb25seSAqLwogICAgbWVzc2FnZS0+ZGF0YS5kYXRhMzJbM10gPSBYQ0Jf QlVUVE9OX01BU0tfMTsKICAgIG1lc3NhZ2UtPmRhdGEuZGF0YTMyWzRdID0gMTsgLyogc291cmNl IGluZGljYXRpb24gbm9ybWFsIGFwcGxpY2F0aW9uICovCiAgICB4Y2Jfc2VuZF9ldmVudChjb25u ZWN0aW9uLCBmYWxzZSwgc2NyZWVuLT5yb290LAogICAgICAgICAgICAgICAgICAgICAgIFhDQl9F VkVOVF9NQVNLX1NVQlNUUlVDVFVSRV9SRURJUkVDVCB8CiAgICAgICAgICAgICAgICAgICAgICAg WENCX0VWRU5UX01BU0tfU1VCU1RSVUNUVVJFX05PVElGWSwgKGNoYXIqKW1lc3NhZ2UpOwogICAg eGNiX2ZsdXNoKGNvbm5lY3Rpb24pOwogICAgZnJlZShyMCk7CiAgICBwdXRzKCIgc3RhcnRlZCBk cmFnIFhDQl9NT1RJT05fTk9USUZZIik7CiNlbHNlCiAgICBpbnQzMl90IHZhbHVlc1syXTsKICAg IHhjYl9xdWVyeV9wb2ludGVyX2Nvb2tpZV90IGMwCiAgICAgID0geGNiX3F1ZXJ5X3BvaW50ZXIo Y29ubmVjdGlvbiwgaWZhY2UwLndpbmRvdyk7CiAgICB4Y2JfcXVlcnlfcG9pbnRlcl9yZXBseV90 ICpyMAogICAgICA9IHhjYl9xdWVyeV9wb2ludGVyX3JlcGx5KGNvbm5lY3Rpb24sIGMwLCBOVUxM KTsKICAgIHhjYl9mbHVzaChjb25uZWN0aW9uKTsKICAgIHZhbHVlc1swXSA9IChpZmFjZTAubWV0 ZV9ib3gueCArPSAocjAtPnJvb3RfeCAtIHhyb290KSk7CiAgICB2YWx1ZXNbMV0gPSAoaWZhY2Uw Lm1ldGVfYm94LnkgKz0gKHIwLT5yb290X3kgLSB5cm9vdCkpOwogICAgeHJvb3QgPSByMC0+cm9v dF94OwogICAgeXJvb3QgPSByMC0+cm9vdF95OwogICAgZnJlZShyMCk7CiAgI2lmIFBFUl9JQ0ND TQogIHsKICAgIHVpbnQzMl90IHZhbHVlc1sxXSA9IHsgdHJ1ZSB9OwogICAgeGNiX2NoYW5nZV93 aW5kb3dfYXR0cmlidXRlcyhjb25uZWN0aW9uLCBtb3Rpb24tPmV2ZW50LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBYQ0JfQ1dfT1ZFUlJJREVfUkVESVJFQ1QsIHZhbHVlcyk7CiAg fQogICNlbmRpZgogICAgeGNiX2NvbmZpZ3VyZV93aW5kb3coY29ubmVjdGlvbiwgbW90aW9uLT5l dmVudCwKICAgICAgICAgICAgICAgICBYQ0JfQ09ORklHX1dJTkRPV19YIHwgWENCX0NPTkZJR19X SU5ET1dfWSwgdmFsdWVzKTsKICAgIHhjYl9mbHVzaChjb25uZWN0aW9uKTsKICAjaWYgUEVSX0lD Q0NNCiAgewogICAgdWludDMyX3QgdmFsdWVzWzFdID0geyBmYWxzZSB9OwogICAgeGNiX2NoYW5n ZV93aW5kb3dfYXR0cmlidXRlcyhjb25uZWN0aW9uLCBtb3Rpb24tPmV2ZW50LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBYQ0JfQ1dfT1ZFUlJJREVfUkVESVJFQ1QsIHZhbHVlcyk7 CiAgfQogICNlbmRpZgojZW5kaWYKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnN0YXRpYyBpbnQzMl90 CnByb2Nlc3NfdGltZXJzKHZvaWQpIHsKICByZXR1cm4gSU5UX01BWDsKfQoKc3RhdGljIGJvb2wK cHJvY2Vzc19ldmVudCh4Y2JfZ2VuZXJpY19ldmVudF90ICpudnQpIHsKCiAgc3dpdGNoIChudnQt PnJlc3BvbnNlX3R5cGUgJiAodWludDhfdCl+MHg4MCkgewoKICAgIGNhc2UgWENCX0tFWV9QUkVT UzogeyAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMiAqLwogICAgICBldmVudF9rZXlib2FyZChu dnQpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX0tFWV9SRUxFQVNFOiB7ICAgICAg IC8qIHJlc3BvbnNlX3R5cGUgMyAqLwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhDQl9C VVRUT05fUFJFU1M6ICAgICAgICAvKiByZXNwb25zZV90eXBlIDQgKi8KICAgIGNhc2UgWENCX0JV VFRPTl9SRUxFQVNFOiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUgNSAqLwojaWYgKCFVU0lOR19DT01Q SVopCiAgICAgIGV2ZW50X21vdXNlKG52dCk7CiNlbmRpZgogICAgICBicmVhazsKICAgIH0KCiAg ICBjYXNlIFhDQl9NT1RJT05fTk9USUZZOiB7ICAgICAvKiByZXNwb25zZV90eXBlIDYgKi8KICAg ICAgZXZlbnRfbW90aW9uKG52dCk7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0VO VEVSX05PVElGWTogeyAgICAgIC8qIHJlc3BvbnNlX3R5cGUgNyAqLwojaWYgVVNJTkdfQ09NUEla CiAgICAgIHhjYl9lbnRlcl9ub3RpZnlfZXZlbnRfdCAqeGluZwogICAgICAgID0gKHhjYl9lbnRl cl9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBpZiAoeGluZy0+bW9kZSA9PSBYQ0JfTk9USUZZ X01PREVfVU5HUkFCKQogICAgICAgIHB1dHMoIiBmaW5pc2hlZCBkcmFnIFhDQl9FTlRFUl9OT1RJ RlkiKTsKI2VuZGlmCiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0xFQVZFX05PVElG WTogeyAgICAgIC8qIHJlc3BvbnNlX3R5cGUgOCAqLwogICAgICBicmVhazsKICAgIH0KCiAgICBj YXNlIFhDQl9GT0NVU19JTjogeyAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDkgKi8KI2lmICgh T1ZFUlJJREUgfHwgUEVSX0lDQ0NNKQogICAgICB4Y2Jfc2V0X2lucHV0X2ZvY3VzKGNvbm5lY3Rp b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgWENCX0lOUFVUX0ZPQ1VTX1BBUkVOVCwKICAg ICAgICAgICAgICAgICAgICAgICAgICBpZmFjZTAud2luZG93LCBYQ0JfQ1VSUkVOVF9USU1FKTsK I2VuZGlmCiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfRk9DVVNfT1VUOiB7ICAgICAg ICAgLyogcmVzcG9uc2VfdHlwZSAxMCAqLwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhD Ql9FWFBPU0U6IHsgICAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDEyICovCiAgICAgIGJyZWFr OwogICAgfQoKICAgIGNhc2UgWENCX1ZJU0lCSUxJVFlfTk9USUZZOiB7IC8qIHJlc3BvbnNlX3R5 cGUgMTUgKi8KI2lmIChPVkVSUklERSAmJiAoIVBFUl9JQ0NDTSkpCiAgICAgIHhjYl9zZXRfaW5w dXRfZm9jdXMoY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBYQ0JfSU5QVVRf Rk9DVVNfUEFSRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlMC53aW5kb3csIFhD Ql9DVVJSRU5UX1RJTUUpOwojZW5kaWYKICAgICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSBYQ0Jf REVTVFJPWV9OT1RJRlk6IHsgICAgLyogcmVzcG9uc2VfdHlwZSAxNyAqLwogICAgICAgIC8qIGFz c3VtZSBhIGtpbGwsIGRlbGV0ZSBhbGwgd2luZG93cyAoZG8gdGhlaXIgdGhpbmcpCiAgICAgICAg ICAgc2VuZCBmYWxzZSB0byBleGl0IGxvb3AgKi8KICAgICAgZnJlZShudnQpOwogICAgICByZXR1 cm4gZmFsc2U7CiAgICB9CiAgICAgIC8qIHRoZXNlIDQgYmVjYXVzZSBvZiBYQ0JfRVZFTlRfTUFT S19TVFJVQ1RVUkVfTk9USUZZICovCiAgICBjYXNlIFhDQl9VTk1BUF9OT1RJRlk6IHsgICAgICAv KiByZXNwb25zZV90eXBlIDE4ICovCiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfTUFQ X05PVElGWTogeyAgICAgICAgLyogcmVzcG9uc2VfdHlwZSAxOSAqLwogICAgICBicmVhazsKICAg IH0KICAgIGNhc2UgWENCX1JFUEFSRU5UX05PVElGWTogeyAgIC8qIHJlc3BvbnNlX3R5cGUgMjEg Ki8KICAgICAgICAvKiBwb3NpdGlvbiBhZnRlciBtYXAsIHRvIGRlc2lnbiB1c2VyIHJlcXVlc3Rl ZCBvZiB3aW5kb3cKICAgICAgICAgKiBzZXQgb25jZSBhbmQgd2hlbiB3aW5kb3cgbWFuYWdlciBh c2tzIHRvIHJlcGFyZW50CiAgICAgICAgICogZG9udCBuZWVkIGR1cmluZyBpY29uL2RlaWNvbmlm eQogICAgICAgICAqIGRvZXNudCBzdG9wIFdNIGNvbmZpZ3VyZXMsIGJ1dCB3aWxsIGJlIHNlbnQg YWZ0ZXIgbWFwIG5vdGlmeSAqLwogICAgICB1aW50MzJfdCB2YWx1ZXNbMl07CiAgICAgIHZhbHVl c1swXSA9IGlmYWNlMC5tZXRlX2JveC54OwogICAgICB2YWx1ZXNbMV0gPSBpZmFjZTAubWV0ZV9i b3gueTsKICAgICAgeGNiX2NvbmZpZ3VyZV93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UwLndpbmRv dywKICAgICAgICAgICAgICAgICAgIFhDQl9DT05GSUdfV0lORE9XX1ggfCBYQ0JfQ09ORklHX1dJ TkRPV19ZLCB2YWx1ZXMpOwogICAgICBicmVhazsKICAgIH0KIAogICBjYXNlIFhDQl9DT05GSUdV UkVfTk9USUZZOiB7ICAvKiByZXNwb25zZV90eXBlIDIyICovCiAgICAgICBicmVhazsKICAgIH0K CiAgICBjYXNlIFhDQl9QUk9QRVJUWV9OT1RJRlk6IHsgICAvKiByZXNwb25zZV90eXBlIDI4ICov CiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fQ0xFQVI6ICAgICAvKiByZXNwb25zZV90eXBlIDI5ICov CiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fUkVRVUVTVDogICAvKiByZXNwb25zZV90eXBlIDMwICov CiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fTk9USUZZOiAgICAvKiByZXNwb25zZV90eXBlIDMxICov CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0NMSUVOVF9NRVNTQUdFOiB7ICAgIC8q IHJlc3BvbnNlX3R5cGUgMzMgKi8KICAgICAgeGNiX2NsaWVudF9tZXNzYWdlX2V2ZW50X3QgKmNt CiAgICAgICAgPSAoeGNiX2NsaWVudF9tZXNzYWdlX2V2ZW50X3QqKW52dDsKICAgICAgaWYgKGNt LT50eXBlICE9IFdNX1BST1RPQ09MUykgIGdvdG8gcmVwb3J0OwogICAgICB4Y2JfdW5tYXBfd2lu ZG93KGNvbm5lY3Rpb24sIGlmYWNlMC53aW5kb3cpOwogICAgICB4Y2JfZGVzdHJveV93aW5kb3co Y29ubmVjdGlvbiwgaWZhY2UwLndpbmRvdyk7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGRlZmF1 bHQ6CiAgICAgIGlmIChudnQtPnJlc3BvbnNlX3R5cGUgPT0gMCkgewogICAgICAgIHhjYl9nZW5l cmljX2Vycm9yX3QgKmVyciA9ICh4Y2JfZ2VuZXJpY19lcnJvcl90KiludnQ7CiAgICAgICAgcHJp bnRmKCJlcnJvcjogJSJQUkl1OCJcbiIsIGVyci0+ZXJyb3JfY29kZSk7CiAgICAgICAgYnJlYWs7 CiAgICAgIH0KcmVwb3J0OgogICAgICAgIC8qIFVua25vd24gZXZlbnQgdHlwZSwgdXNlIHRvIHRy YWNrIGNvZGluZyBwcm9ibGVtcyAqLwogICAgICBwcmludGYoIlVua25vd24gZXZlbnQ6ICUiUFJJ dTgiXG4iLCBudnQtPnJlc3BvbnNlX3R5cGUpOwogICAgICBicmVhazsKCiAgfSAvKiBlbmQgc3dp dGNoKHJlc3BvbnNlX3R5cGUpICovCiAgICAvKiBudnQgbm8gbG9uZ2VyIG5lZWRlZCAqLwogIGZy ZWUobnZ0KTsKICAgIC8qIGNyaXRpY2FsISBvdGhlcndpc2Ugd29udCBwcm9jZXNzIGFueXRoaW5n IGRvbmUgKi8KICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CiAgcmV0dXJuIHRydWU7Cn0KCnN0YXRp YyB2b2lkCnhjYl9tYWluKHZvaWQpIHsKCiAgICAvKiBzZXQgYWxsIGJlZm9yZSB0aHJvdWdoIHRv IFhzZXJ2ZXIgKi8KICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CgogIGRvIHsKICAgIGludCB0aW1l b3V0OwogICAgeGNiX2dlbmVyaWNfZXZlbnRfdCAqZXZlbnQ7CiAgICB3aGlsZSAoKGV2ZW50ID0g eGNiX3BvbGxfZm9yX2V2ZW50KGNvbm5lY3Rpb24pKSAhPSBOVUxMKQogICAgICAgIC8qIF9wcm9j ZXNzX2V2ZW50KCkgcmV0dXJucyAncnVubmluZycgZm9yIG1haW4gbG9vcC4gKi8KICAgICAgaWYg KHByb2Nlc3NfZXZlbnQoZXZlbnQpID09IGZhbHNlKSAgZ290byBjbGVhbnVwOwogICAgZG8gewog ICAgICAgIC8qIF9wcm9jZXNzX3RpbWVycygpIHJ1bnMgYW55IHRpbWVycyB0aGF0IGFyZSBpbW1l ZGlhdGVseSBwZW5kaW5nLAogICAgICAgICAgIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWls bGlzZWNvbmRzIHVudGlsIHRoZSBuZXh0IHRpbWVyCiAgICAgICAgICAgaW4gdGhlIHF1ZXVlIGlz IHJlYWR5LgogICAgICAgICAgIF9wcm9jZXNzX3RpbWVycygpIHJldHVybnMgSU5UX01BWCBpZiB0 aGVyZSBhcmUgbm8gdGltZXJzLiAqLwogICAgICAgIC8qIF9wcm9jZXNzX3RpbWVycygpIGFsc28g cmVtb3ZlcyBmcm9tIHRpbWVvdXQgaXRzIHJ1biB0aW1lLiAqLwogICAgICB0aW1lb3V0ID0gcHJv Y2Vzc190aW1lcnMoKTsKICAgICAgaWYgKChldmVudCA9IHhjYl9wb2xsX2Zvcl9xdWV1ZWRfZXZl bnQoY29ubmVjdGlvbikpID09IE5VTEwpICBicmVhazsKICAgICAgICBpZiAocHJvY2Vzc19ldmVu dChldmVudCkgPT0gZmFsc2UpICBnb3RvIGNsZWFudXA7CiAgICB9IHdoaWxlICgxKTsKICAgIGlm ICh0aW1lb3V0ID4gNikgewogICAgICBzdHJ1Y3QgcG9sbGZkIHBmZFsxXTsKICAgICAgcGZkLT5m ZCA9IHhjYl9nZXRfZmlsZV9kZXNjcmlwdG9yKGNvbm5lY3Rpb24pOwogICAgICBwZmQtPmV2ZW50 cyA9IFBPTExJTjsKICAgICAgcGZkLT5yZXZlbnRzID0gUE9MTE9VVDsKICAgICAgcG9sbChwZmQs IDEsIHRpbWVvdXQpOwogICAgfQogIH0gd2hpbGUgKDEpOwogICAgLyogcmVjZWl2ZWQgWENCX0RF U1RST1lfTk9USUZZICovCmNsZWFudXA6CiAgcmV0dXJuOwp9Cgp2b2lkCnVpX3dpbmRvd19uYW1l KHhjYl93aW5kb3dfdCB3aW5kb3cpIHsKCiAgeGNiX2ludGVybl9hdG9tX2Nvb2tpZV90IGNvb2tp ZQogICAgPSB4Y2JfaW50ZXJuX2F0b20oY29ubmVjdGlvbiwgMSwgNywgIldNX05BTUUiKTsKICB4 Y2JfaW50ZXJuX2F0b21fcmVwbHlfdCAqcmVwbHkKICAgID0geGNiX2ludGVybl9hdG9tX3JlcGx5 KGNvbm5lY3Rpb24sIGNvb2tpZSwgTlVMTCk7CiAgeGNiX2ludGVybl9hdG9tX2Nvb2tpZV90IGNv b2tpZTIKICAgID0geGNiX2ludGVybl9hdG9tKGNvbm5lY3Rpb24sIDAsIDYsICJTVFJJTkciKTsK ICB4Y2JfaW50ZXJuX2F0b21fcmVwbHlfdCAqcmVwbHkyCiAgICA9IHhjYl9pbnRlcm5fYXRvbV9y ZXBseShjb25uZWN0aW9uLCBjb29raWUyLCBOVUxMKTsKCiAgY2hhciB0aXRsZVsxNl07CiAgc3By aW50Zih0aXRsZSwgIiVkIiwgd2luZG93KTsKICB4Y2JfY2hhbmdlX3Byb3BlcnR5KGNvbm5lY3Rp b24sIFhDQl9QUk9QX01PREVfUkVQTEFDRSwgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAg IHJlcGx5LT5hdG9tLCByZXBseTItPmF0b20sIDgsCiAgICAgICAgICAgICAgICAgICAgICAgc3Ry bGVuKHRpdGxlKSwgdGl0bGUpOwogIGZyZWUocmVwbHkpOwogIGZyZWUocmVwbHkyKTsKfQoKc3Rh dGljIHZvaWQKX3dpbmRvd19ldmVudF9kZWxldGUoeGNiX2Nvbm5lY3Rpb25fdCAqY29ubmVjdGlv biwgeGNiX3dpbmRvd190IHdpbmRvdykgewoKICAgIC8qIGFsbG93IGRlbGV0ZSB3aW5kb3cgc28g Y2FuIHF1aXQgYXBwbGljYXRpb24uIEF2b2lkIF5DLiAqLwogIHhjYl9jaGFuZ2VfcHJvcGVydHko Y29ubmVjdGlvbiwgWENCX1BST1BfTU9ERV9SRVBMQUNFLCB3aW5kb3csCiAgICAgICAgICAgICAg ICAgICAgICBXTV9QUk9UT0NPTFMsIFhDQl9BVE9NX0FUT00sIDMyLCAxLAogICAgICAgICAgICAg ICAgICAgICAgJldNX0RFTEVURV9XSU5ET1cpOwp9CgpzdGF0aWMgeGNiX3dpbmRvd190Cl93aW5k b3dfY3JlYXRlKFBoeFJlY3RhbmdsZSBjb25maWd1cmUpIHsKCiAgeGNiX3NjcmVlbl90ICpzY3Jl ZW47CiAgeGNiX3dpbmRvd190IHdpbmRvdzsKICB1aW50MzJfdCBtYXNrOwogIHVpbnQzMl90IHZh bHVlc1syXTsKCiAgaWYgKGNvbm5lY3Rpb24gPT0gTlVMTCkgewogICAgeGNiX2ludGVybl9hdG9t X2Nvb2tpZV90IGMwLCBjMTsKICAgIHhjYl9pbnRlcm5fYXRvbV9yZXBseV90ICpyMCwgKnIxOwog ICAgY29ubmVjdGlvbiA9IHhjYl9jb25uZWN0KE5VTEwsIE5VTEwpOwogICAgYzAgPSB4Y2JfaW50 ZXJuX2F0b20oY29ubmVjdGlvbiwgMCwgMTIsICJXTV9QUk9UT0NPTFMiKTsKICAgIGMxID0geGNi X2ludGVybl9hdG9tKGNvbm5lY3Rpb24sIDAsIDE2LCAiV01fREVMRVRFX1dJTkRPVyIpOwogICAg cjAgPSB4Y2JfaW50ZXJuX2F0b21fcmVwbHkoY29ubmVjdGlvbiwgYzAsIE5VTEwpOwogICAgcjEg PSB4Y2JfaW50ZXJuX2F0b21fcmVwbHkoY29ubmVjdGlvbiwgYzEsIE5VTEwpOwogICAgV01fUFJP VE9DT0xTICAgICA9IHIwLT5hdG9tOyAgZnJlZSgodm9pZCopcjApOwogICAgV01fREVMRVRFX1dJ TkRPVyA9IHIxLT5hdG9tOyAgZnJlZSgodm9pZCopcjEpOwogIH0KCiAgc2NyZWVuID0geGNiX3Nl dHVwX3Jvb3RzX2l0ZXJhdG9yKHhjYl9nZXRfc2V0dXAoY29ubmVjdGlvbikpLmRhdGE7CiAgICAv KiBDcmVhdGUgdGhlIHdpbmRvdyAqLwogIHdpbmRvdyA9IHhjYl9nZW5lcmF0ZV9pZChjb25uZWN0 aW9uKTsKCiAgbWFzayAgICAgID0gWENCX0NXX0JBQ0tfUElYRUwgfCBYQ0JfQ1dfRVZFTlRfTUFT SzsKICB2YWx1ZXNbMF0gPSBzY3JlZW4tPndoaXRlX3BpeGVsOwogIHZhbHVlc1sxXSA9IFhDQl9F VkVOVF9NQVNLX0VYUE9TVVJFICAgICAgIHwgWENCX0VWRU5UX01BU0tfQlVUVE9OX1BSRVNTICAg fAogICAgICAgICAgICAgIFhDQl9FVkVOVF9NQVNLX0JVVFRPTl9SRUxFQVNFIHwgWENCX0VWRU5U X01BU0tfUE9JTlRFUl9NT1RJT04gfAogICAgICAgICAgICAgIFhDQl9FVkVOVF9NQVNLX0VOVEVS X1dJTkRPVyAgIHwgWENCX0VWRU5UX01BU0tfTEVBVkVfV0lORE9XICAgfAogICAgICAgICAgICAg IFhDQl9FVkVOVF9NQVNLX0tFWV9QUkVTUyAgICAgIHwgWENCX0VWRU5UX01BU0tfS0VZX1JFTEVB U0UgICAgfAogICAgICAgICAgICAgIFhDQl9FVkVOVF9NQVNLX0ZPQ1VTX0NIQU5HRSAgIHwgWENC X0VWRU5UX01BU0tfU1RSVUNUVVJFX05PVElGWSB8CiNpZiBQRVJfSUNDQ00KICAgICAgICAgICAg ICBYQ0JfRVZFTlRfTUFTS19TVUJTVFJVQ1RVUkVfUkVESVJFQ1QgfAogICAgICAgICAgICAgIFhD Ql9FVkVOVF9NQVNLX1JFU0laRV9SRURJUkVDVCB8CiNlbmRpZgogICAgICAgICAgICAgIFhDQl9F VkVOVF9NQVNLX1ZJU0lCSUxJVFlfQ0hBTkdFOwoKICAgIC8qIGlnbm9yZXMgeCwgeSwgYm9yZGVy X3dpZHRoICh2aXJ1cykgKi8KICB4Y2JfY3JlYXRlX3dpbmRvdyhjb25uZWN0aW9uLAogICAgICAg ICAgICAgICAgICAgIHNjcmVlbi0+cm9vdF9kZXB0aCwgICAgICAgICAgICAvKiBkZXB0aCAgICAg ICAgICAqLwogICAgICAgICAgICAgICAgICAgIHdpbmRvdywgICAgICAgICAgICAgICAgICAgICAg ICAvKiBnZW5lcmF0ZWQgaWQgICAqLwogICAgICAgICAgICAgICAgICAgIHNjcmVlbi0+cm9vdCwg ICAgICAgICAgICAgICAgICAvKiBwYXJlbnQgd2luZG93ICAqLwogICAgICAgICAgICAgICAgICAg IGNvbmZpZ3VyZS54LCAgICAgICAgICAgICAgICAgICAvKiB4LCB5ICAgICAgICAgICAqLwogICAg ICAgICAgICAgICAgICAgIGNvbmZpZ3VyZS55LAogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3Vy ZS53LCAgICAgICAgICAgICAgICAgICAvKiB3aWR0aCwgaGVpZ2h0ICAqLwogICAgICAgICAgICAg ICAgICAgIGNvbmZpZ3VyZS5oLAogICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBib3JkZXJfd2lkdGggICAqLwogICAgICAgICAgICAgICAgICAgIFhD Ql9XSU5ET1dfQ0xBU1NfSU5QVVRfT1VUUFVULCAvKiBjbGFzcyAgICAgICAgICAqLwogICAgICAg ICAgICAgICAgICAgIHNjcmVlbi0+cm9vdF92aXN1YWwsICAgICAgICAgICAvKiB2aXN1YWwgICAg ICAgICAqLwogICAgICAgICAgICAgICAgICAgIG1hc2ssIHZhbHVlcyk7ICAgICAgICAgICAgICAg ICAvKiBtYXNrcyAqLwoKewogIHVpbnQzMl90IHZhbHVlX2xpc3Q7CiAgeGNiX2ZvbnRfdCBmb250 OwogIHhjYl9jdXJzb3JfdCBjdXJzb3I7CiAgZm9udCA9IHhjYl9nZW5lcmF0ZV9pZChjb25uZWN0 aW9uKTsKICB4Y2Jfb3Blbl9mb250KGNvbm5lY3Rpb24sIGZvbnQsIHN0cmxlbiAoImN1cnNvciIp LCAiY3Vyc29yIik7CiAgY3Vyc29yID0geGNiX2dlbmVyYXRlX2lkKGNvbm5lY3Rpb24pOwogIHhj Yl9jcmVhdGVfZ2x5cGhfY3Vyc29yKGNvbm5lY3Rpb24sIGN1cnNvciwgZm9udCwgZm9udCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTMyLCAxMzIgKyAxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAwLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKTsKICB2 YWx1ZV9saXN0ID0gY3Vyc29yOwogIHhjYl9jaGFuZ2Vfd2luZG93X2F0dHJpYnV0ZXMoY29ubmVj dGlvbiwgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENCX0NXX0NVUlNP UiwgJnZhbHVlX2xpc3QpOwp9CgojaWYgKE9WRVJSSURFICYmICghUEVSX0lDQ0NNKSkKewogIHZh bHVlc1swXSA9IHRydWU7CiAgeGNiX2NoYW5nZV93aW5kb3dfYXR0cmlidXRlcyhjb25uZWN0aW9u LCB3aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ0JfQ1dfT1ZFUlJJREVf UkVESVJFQ1QsIHZhbHVlcyk7Cn0KI2VuZGlmCgogIF93aW5kb3dfZXZlbnRfZGVsZXRlKGNvbm5l Y3Rpb24sIHdpbmRvdyk7CiAgcmV0dXJuIHdpbmRvdzsKfQoKeGNiX3dpbmRvd190CnVpX3dpbmRv d19jcmVhdGUoUGh4UmVjdGFuZ2xlIGNvbmZpZ3VyZSkgewoKICB4Y2Jfd2luZG93X3Qgd2luZG93 ID0gX3dpbmRvd19jcmVhdGUoY29uZmlndXJlKTsKICBpZiAod2luZG93ID09IDApICByZXR1cm4g MDsKCiAgaWZhY2UwLm1ldGVfYm94ID0gY29uZmlndXJlOwogIGlmYWNlMC53aW5kb3cgPSB3aW5k b3c7CiAgcmV0dXJuIHdpbmRvdzsKfQoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkg ewoKICB4Y2Jfd2luZG93X3Qgd2luZG93OwoKICAgIC8qIHdpbmRvdyBzaXplIGFuZCBwb3NpdGlv biAqLwogIFBoeFJlY3RhbmdsZSBjb25maWd1cmUgPSB7IDgwMCwgMjAwLCAzMDAsIDIwMCB9Owog ICAgLyogQSAndG9wbW9zdCcgZGVjb3JhdGVkIHdpbmRvdyAqLwogIHdpbmRvdyA9IHVpX3dpbmRv d19jcmVhdGUoY29uZmlndXJlKTsKICBpZiAod2luZG93ID09IDApICBleGl0KEVYSVRfRkFJTFVS RSk7CgogIHVpX3dpbmRvd19uYW1lKHdpbmRvdyk7CgogICAgLyogTWFwIHRoZSB3aW5kb3cgb24g dGhlIHNjcmVlbiAqLwogIHhjYl9tYXBfd2luZG93KGNvbm5lY3Rpb24sIHdpbmRvdyk7CgogICAg LyogUnVuIGV2ZW50IGxvb3AgKi8KICB4Y2JfbWFpbigpOwoKICByZXR1cm4gRVhJVF9TVUNDRVNT Owp9Ci== --=-m7D0Nb36mN//j1JLt8mf--