From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12073 invoked by alias); 2 Oct 2016 19:55:44 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 39542 Received: (qmail 7307 invoked from network); 2 Oct 2016 19:55:44 -0000 X-Qmail-Scanner-Diagnostics: from mail-qk0-f176.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(209.85.220.176):SA:0(0.0/5.0):. Processed in 1.004778 secs); 02 Oct 2016 19:55:44 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,SPF_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: sgniazdowski@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 209.85.220.176 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:cc; bh=4cqRX2yQvrU2Y8ouBC0qp/JibE9zlWI0FpUon0OBrQQ=; b=uMsDVg+ojT6CP+IowDKS8zJPxrJLgERyF1QasZ83St76uteWy/zdIodu/dUNE54XYl I9rxTDDtEdGIYnRwuoP3+/Zx0eCIj3le19N4KoMqlWz4gU+1jifi/0np36assNwIQ3sz 2UVXij8RaZQcyOFndbp8H5lMy4pyJ4+IXEz/AlDr8vYG9Lytr7rnAhyhc5EF5PQmla/C mzfKYnc40JFglJgQxwe0ZA8mK9EGtZJ4KILC0LeYEonZnQRU22t0z1EB/5SzX1/9bKGD zvh9S3hNN5ta412s1XP4+eAlgPipQasHlM1UA5fLAqDszbkUoVpmYtJP5OoFFZBZEpAg eGgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=4cqRX2yQvrU2Y8ouBC0qp/JibE9zlWI0FpUon0OBrQQ=; b=CGK0NsjqePciDVfBZTltZ05G2aHF6YmieS7PR71x2LuPORxh/LIjLCxRaLahRegB5A LIbP9BtjhX1Tus+507y8aldt6vMao/EeeKRfOfuc+sVqYkp6/bOiVblca6bWFMDuhYNW CtugczQqSJ+OH8ojzTZcoQ9rcnOG27dSR6SxQ7Yt4JDt2eJhy0A0OfJml2xDAoKaDH17 SMSnc4v5gYd2vGnvxmXASZSkYorwCs8wa4LLgKB5oPOkOwEsW/cb1uirdfWO5IpVpwiq wLhCbOPgLNjPcot+iTv85QVqZ8pARq5bid1u9Osl/xhRhaTADwGUVLiwbPZFUPp/WbyO LKSw== X-Gm-Message-State: AA6/9RkAGRQjxV/8KhDEzoTkC2EXdc/3GMpNhjptLtv8iudVu6yIIqUviDUn1jMM9tAkJgRR8Z8UkUARqh9o8w== X-Received: by 10.55.190.68 with SMTP id o65mr18213889qkf.92.1475434853206; Sun, 02 Oct 2016 12:00:53 -0700 (PDT) MIME-Version: 1.0 From: Sebastian Gniazdowski Date: Sun, 2 Oct 2016 21:00:32 +0200 Message-ID: Subject: [BUG] queueing_enabled grows infinitely when in .recursive-edit To: Zsh hackers list Cc: Bart Schaefer , Peter Stephenson Content-Type: multipart/mixed; boundary=94eb2c043be251695f053de672ff --94eb2c043be251695f053de672ff Content-Type: text/plain; charset=UTF-8 Hello, below is code from raw_getbyte() / zle_main.c: case ZTM_FUNC: // MY DEBUG _F = fopen("/tmp/recursive.txt", "a+"); fprintf( _F, "queueing_enabled MARK[D] (%d)\n", queueing_enabled ); fclose(_F); while (firstnode(timedfns)) { Timedfn tfdat = (Timedfn)getdata(firstnode(timedfns)); /* * It's possible a previous function took * a long time to run (though it can't * call zle recursively), so recalculate * the time on each iteration. */ time_t now = time(NULL); if (tfdat->when > now) break; tfdat->func(); } // MY DEBUG _F = fopen("/tmp/recursive.txt", "a+"); fprintf( _F, "queueing_enabled MARK[C] (%d)\n", queueing_enabled ); fclose(_F); When not in .recursive-edit, log messages look like: zlecore() - queueing_enabled (1) getkeycmd() - queueing_enabled (1) getkeymapcmd() - queueing_enabled (1) getkeybuf() - queueing_enabled (1) getbyte() - queueing_enabled (1) raw_getbyte() - queueing_enabled (0) ... ... queueing_enabled MARK[2] (0) queueing_enabled MARK[D] (0) queueing_enabled MARK[C] (0) queueing_enabled MARK[B] (0) ... ... Timeout is reached every second (I do sched +1 and reschedule), the logs are produced at that rate. However, when I press Ctrl-C to invoke a .recursive-edit widget, then: recursiveedit() - queueing_enabled (1) zlecore() - queueing_enabled (1) getkeycmd() - queueing_enabled (1) getkeymapcmd() - queueing_enabled (1) getkeybuf() - queueing_enabled (1) getbyte() - queueing_enabled (1) raw_getbyte() - queueing_enabled (0) ... ... queueing_enabled MARK[2] (0) queueing_enabled MARK[D] (0) queueing_enabled MARK[C] (1) queueing_enabled MARK[B] (1) ... ... queueing_enabled MARK[2] (1) queueing_enabled MARK[D] (1) queueing_enabled MARK[C] (2) queueing_enabled MARK[B] (2) ... ... queueing_enabled MARK[2] (2) queueing_enabled MARK[D] (2) queueing_enabled MARK[C] (3) queueing_enabled MARK[B] (3) ... ... This causes Ctrl-C signal to be queued when in .recursive-edit, what results in need of multiple Ctrl-C presses (errflag is set in middle of sequence of checks of it's value and raw_getbytes() executes in weird way). Also, errflag is set at random place after select() in raw_getbyte(), and as Bart says, this prevents scheduled function to execute at all, thus chain of rescheduling breaks. For completeness I attach 10 context lines diff with the debug messages, but the crucial two are pasted above. To see the efect only this has to be ran: wid() { zle .recursive-edit; } zle -N wid bindkey '^T' wid fun() { sched +1 fun; } fun ^T PS. Because of problems with ML (maybe they're over?) I send also to Bart and Peter. Best regards, Sebastian Gniazdowski --94eb2c043be251695f053de672ff Content-Type: text/plain; charset=US-ASCII; name="rec6_edit.6.diff.txt" Content-Disposition: attachment; filename="rec6_edit.6.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_itszktao0 ZGlmZiAtLWdpdCBhL1NyYy9abGUvemxlX2tleW1hcC5jIGIvU3JjL1psZS96bGVfa2V5bWFwLmMK aW5kZXggM2RiNDIwNy4uZTBmZTJkMCAxMDA2NDQKLS0tIGEvU3JjL1psZS96bGVfa2V5bWFwLmMK KysrIGIvU3JjL1psZS96bGVfa2V5bWFwLmMKQEAgLTE1NTAsMjAgKzE1NTAsMjUgQEAgZ2V0cmVz dGNoYXJfa2V5YnVmKHZvaWQpCiB9CiAvKiovCiAjZW5kaWYKIAogLyogcmVhZCBhIHNlcXVlbmNl IG9mIGtleXMgdGhhdCBpcyBib3VuZCB0byBzb21lIGNvbW1hbmQgaW4gYSBrZXltYXAgKi8KIAog LyoqLwogY2hhciAqCiBnZXRrZXltYXBjbWQoS2V5bWFwIGttLCBUaGluZ3kgKmZ1bmNwLCBjaGFy ICoqc3RycCkKIHsKKyAgICAvLyBNWSBERUJVRworICAgIEZJTEUgKl9GID0gZm9wZW4oIi90bXAv cmVjdXJzaXZlLnR4dCIsICJhKyIpOworICAgIGZwcmludGYoIF9GLCAiZ2V0a2V5bWFwY21kKCkg LSBxdWV1ZWluZ19lbmFibGVkICglZClcbiIsIHF1ZXVlaW5nX2VuYWJsZWQgKTsKKyAgICBmY2xv c2UoX0YpOworCiAgICAgVGhpbmd5IGZ1bmMgPSB0X3VuZGVmaW5lZGtleTsKICAgICBjaGFyICpz dHIgPSBOVUxMOwogICAgIGludCBsYXN0bGVuID0gMCwgbGFzdGMgPSBsYXN0Y2hhcjsKICAgICBp bnQgdGltZW91dCA9IDA7CiAKICAgICBrZXlidWZsZW4gPSAwOwogICAgIGtleWJ1ZlswXSA9IDA7 CiAgICAgLyoKICAgICAgKiBnZXRrZXlidWYgcmV0dXJucyBtdWx0aWJ5dGUgc3RyaW5ncywgd2hp Y2ggbWF5IG5vdAogICAgICAqIHlldCBjb3JyZXNwb25kIHRvIGNvbXBsZXRlIHdpZGUgY2hhcmFj dGVycywgcmVnYXJkbGVzcwpAQCAtMTY1MywyMCArMTY1OCwyNSBAQCBhZGRrZXlidWYoaW50IGMp CiAgKiBtaWRkbGUgb2YgYSB3aWRlIGNoYXJhY3Rlci4gIEhvd2V2ZXIsIEkgdGhpbmsgd2UncmUg T0sgc2luY2UKICAqIEVPRiBhbmQgMHhmZiBhcmUgZGlzdGluY3QgYW5kIHdlJ3JlIHJlYWRpbmcg Ynl0ZXMgZnJvbSB0aGUKICAqIGxvd2VyIGxldmVsLCBzbyBFT0YgcmVhbGx5IGRvZXMgbWVhbiBz b21ldGhpbmcgd2VudCB3cm9uZy4gIEV2ZW4gc28sCiAgKiBJJ20gd29ycmllZCBlbm91Z2ggdG8g bGVhdmUgdGhpcyBub3RlIGhlcmUgZm9yIG5vdy4KICAqLwogCiAvKiovCiBzdGF0aWMgaW50CiBn ZXRrZXlidWYoaW50IHcpCiB7CisgICAgLy8gTVkgREVCVUcKKyAgICBGSUxFICpfRiA9IGZvcGVu KCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICBmcHJpbnRmKCBfRiwgImdldGtleWJ1 ZigpIC0gcXVldWVpbmdfZW5hYmxlZCAoJWQpXG4iLCBxdWV1ZWluZ19lbmFibGVkICk7CisgICAg ZmNsb3NlKF9GKTsKKwogICAgIGludCBjID0gZ2V0Ynl0ZSgobG9uZyl3LCBOVUxMKTsKIAogICAg IGlmKGMgPCAwKQogCXJldHVybiBFT0Y7CiAgICAgYWRka2V5YnVmKGMpOwogICAgIHJldHVybiBj OwogfQogCiAvKiBQdXNoIGJhY2sgdGhlIGxhc3QgY29tbWFuZCBzZXF1ZW5jZSByZWFkIGJ5IGdl dGtleW1hcGNtZCgpLiAqCiAgKiBNdXN0IGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25jZSBhZnRlciBl YWNoIGdldGtleW1hcGNtZCgpLiAgICAqLwpAQCAtMTY3NywyMCArMTY4NywyNSBAQCB1bmdldGtl eWNtZCh2b2lkKQogewogICAgIHVuZ2V0Ynl0ZXNfdW5tZXRhKGtleWJ1Ziwga2V5YnVmbGVuKTsK IH0KIAogLyogcmVhZCBhIGNvbW1hbmQgZnJvbSB0aGUgY3VycmVudCBrZXltYXAsIHdpdGggd2lk Z2V0cyAqLwogCiAvKiovCiBtb2RfZXhwb3J0IFRoaW5neQogZ2V0a2V5Y21kKHZvaWQpCiB7Cisg ICAgLy8gTVkgREVCVUcKKyAgICBGSUxFICpfRiA9IGZvcGVuKCIvdG1wL3JlY3Vyc2l2ZS50eHQi LCAiYSsiKTsKKyAgICBmcHJpbnRmKCBfRiwgImdldGtleWNtZCgpIC0gcXVldWVpbmdfZW5hYmxl ZCAoJWQpXG4iLCBxdWV1ZWluZ19lbmFibGVkICk7CisgICAgZmNsb3NlKF9GKTsKKwogICAgIFRo aW5neSBmdW5jOwogICAgIGludCBob3BzID0gMDsKICAgICBjaGFyICpzZXEsICpzdHI7CiAKICAg ICBzZW50c3RyaW5nOgogICAgIHNlcSA9IGdldGtleW1hcGNtZChjdXJrZXltYXAsICZmdW5jLCAm c3RyKTsKICAgICBpZighKnNlcSkKIAlyZXR1cm4gTlVMTDsKICAgICBpZighZnVuYykgewogCWlm ICgrK2hvcHMgPT0gMjApIHsKZGlmZiAtLWdpdCBhL1NyYy9abGUvemxlX21haW4uYyBiL1NyYy9a bGUvemxlX21haW4uYwppbmRleCA5YTgzZDQxLi4wYTc5MzNhIDEwMDY0NAotLS0gYS9TcmMvWmxl L3psZV9tYWluLmMKKysrIGIvU3JjL1psZS96bGVfbWFpbi5jCkBAIC00NTAsNzggKzQ1MCwxMjcg QEAgc3RhdGljIHZvaWQKIGNhbGNfdGltZW91dChzdHJ1Y3QgenRtb3V0ICp0bW91dHAsIGxvbmcg ZG9fa2V5dG1vdXQpCiB7CiAgICAgaWYgKGRvX2tleXRtb3V0ICYmIChrZXl0aW1lb3V0ID4gMCB8 fCBkb19rZXl0bW91dCA8IDApKSB7CiAJaWYgKGRvX2tleXRtb3V0IDwgMCkKIAkgICAgdG1vdXRw LT5leHAxMDB0aHMgPSAodGltZV90KS1kb19rZXl0bW91dDsKIAllbHNlIGlmIChrZXl0aW1lb3V0 ID4gWk1BWFRJTUVPVVQgKiAxMDAgLyogMjQgZGF5cyBmb3IgYSBrZXlwcmVzcz8/Pz8gKi8pCiAJ ICAgIHRtb3V0cC0+ZXhwMTAwdGhzID0gWk1BWFRJTUVPVVQgKiAxMDA7CiAJZWxzZQogCSAgICB0 bW91dHAtPmV4cDEwMHRocyA9IGtleXRpbWVvdXQ7CiAJdG1vdXRwLT50cCA9IFpUTV9LRVk7Ci0g ICAgfSBlbHNlCisgICAgICAgIC8vIE1ZIERFQlVHCisgICAgICAgIEZJTEUgKl9GID0gZm9wZW4o Ii90bXAvcmVjdXJzaXZlLnR4dCIsICJhKyIpOworICAgICAgICBmcHJpbnRmKCBfRiwgIi0tIHRt b3V0cC0+dHAgPC0gWlRNX0tFWSAoJWQpIC8gY2FsY190aW1lb3V0KCkgemxlX21haW4uY1xuIiwg dG1vdXRwLT5leHAxMDB0aHMgKTsKKyAgICAgICAgZmNsb3NlKF9GKTsKKyAgICB9IGVsc2Ugewor ICAgICAgICAvLyBNWSBERUJVRworICAgICAgICBGSUxFICpfRiA9IGZvcGVuKCIvdG1wL3JlY3Vy c2l2ZS50eHQiLCAiYSsiKTsKKyAgICAgICAgZnByaW50ZiggX0YsICItLSB0bW91dHAtPnRwIDwt IFpUTV9OT05FIC8gY2FsY190aW1lb3V0KCBkb19rZXl0bW91dDogJWQgKSwga2V5dGltZW91dDog JWQgLyB6bGVfbWFpbi5jXG4iLCBkb19rZXl0bW91dCwga2V5dGltZW91dCApOworICAgICAgICBm Y2xvc2UoX0YpOworCiAJdG1vdXRwLT50cCA9IFpUTV9OT05FOworICAgIH0KIAogICAgIGlmICh0 aW1lZGZucykgeworICAgICAgICAvLyBNWSBERUJVRworICAgICAgICBGSUxFICpfRiA9IGZvcGVu KCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICAgICAgZnByaW50ZiggX0YsICI9PSBD QUxDX1RJTUVPVVQoKSBvbmUgbW9yZSBjaGFuY2UgKHRpbWVkZm5zIGV4cDEwMHRoczogJWQpXG4i LCB0bW91dHAtPmV4cDEwMHRocyApOworICAgICAgICBmY2xvc2UoX0YpOwogCWZvciAoOzspIHsK IAkgICAgTGlua05vZGUgdGZub2RlID0gZmlyc3Rub2RlKHRpbWVkZm5zKTsKIAkgICAgVGltZWRm biB0ZmRhdDsKIAkgICAgdGltZV90IGRpZmYsIGV4cDEwMHRoczsKIAotCSAgICBpZiAoIXRmbm9k ZSkKKwkgICAgaWYgKCF0Zm5vZGUpIHsKKyAgICAgICAgICAgICAgICAvLyBNWSBERUJVRworICAg ICAgICAgICAgICAgIEZJTEUgKl9GID0gZm9wZW4oIi90bXAvcmVjdXJzaXZlLnR4dCIsICJhKyIp OworICAgICAgICAgICAgICAgIGZwcmludGYoIF9GLCAiLS0gQ0FMQ19USU1FT1VUKCkgIXRmbm9k ZSBicmVha1xuIiApOworICAgICAgICAgICAgICAgIGZjbG9zZShfRik7CiAJCWJyZWFrOworICAg ICAgICAgICAgfQogCiAJICAgIHRmZGF0ID0gKFRpbWVkZm4pZ2V0ZGF0YSh0Zm5vZGUpOwogCSAg ICBkaWZmID0gdGZkYXQtPndoZW4gLSB0aW1lKE5VTEwpOworCiAJICAgIGlmIChkaWZmIDwgMCkg eworICAgICAgICAgICAgICAgIC8vIE1ZIERFQlVHCisgICAgICAgICAgICAgICAgRklMRSAqX0Yg PSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICAgICAgZnBy aW50ZiggX0YsICItLSBDQUxDX1RJTUVPVVQoKSB0Zm5vZGUgVFJVRSBubyBicmVhayBDQUxMSU5H ID4+IERJRkY9JWQgPDxcbiIsIGRpZmYgKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoX0YpOwor CiAJCS8qIEFscmVhZHkgZHVlOyBjYWxsIGl0IGFuZCByZXNjYW4uICovCiAJCXRmZGF0LT5mdW5j KCk7CiAJCWNvbnRpbnVlOwotCSAgICB9CisJICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg Ly8gTVkgREVCVUcKKyAgICAgICAgICAgICAgICBGSUxFICpfRiA9IGZvcGVuKCIvdG1wL3JlY3Vy c2l2ZS50eHQiLCAiYSsiKTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKCBfRiwgIi0tIENBTENf VElNRU9VVCgpIHRmbm9kZSBUUlVFIG5vIGJyZWFrIE5PVCBjYWxsaW5nID4+IERJRkY9JWQgPDxc biIsIGRpZmYgKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoX0YpOworICAgICAgICAgICAgfQog CiAJICAgIGlmIChkaWZmID4gWk1BWFRJTUVPVVQpIHsKKyAgICAgICAgICAgICAgICAvLyBNWSBE RUJVRworICAgICAgICAgICAgICAgIEZJTEUgKl9GID0gZm9wZW4oIi90bXAvcmVjdXJzaXZlLnR4 dCIsICJhKyIpOworICAgICAgICAgICAgICAgIGZwcmludGYoIF9GLCAiLS0gQ0FMQ19USU1FT1VU KCkgJWQgPiAlZCBaVE1fTUFYKCVkKVxuIiwgZGlmZiwgWk1BWFRJTUVPVVQsIFpUTV9NQVggKTsK KyAgICAgICAgICAgICAgICBmY2xvc2UoX0YpOworCiAJCXRtb3V0cC0+ZXhwMTAwdGhzID0gWk1B WFRJTUVPVVQgKiAxMDA7CiAJCXRtb3V0cC0+dHAgPSBaVE1fTUFYOwotCSAgICB9IGVsc2UgaWYg KGRpZmYgPiAwKSB7CisJICAgIH0gZWxzZSBpZiAoZGlmZiA+PSAwKSB7CiAJCWV4cDEwMHRocyA9 IGRpZmYgKiAxMDA7CiAJCWlmICh0bW91dHAtPnRwICE9IFpUTV9LRVkgfHwKLQkJICAgIGV4cDEw MHRocyA8IHRtb3V0cC0+ZXhwMTAwdGhzKSB7CisJCSAgICBleHAxMDB0aHMgPD0gdG1vdXRwLT5l eHAxMDB0aHMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTVkgREVCVUcKKyAgICAgICAgICAg ICAgICAgICAgRklMRSAqX0YgPSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImErIik7Cisg ICAgICAgICAgICAgICAgICAgIGZwcmludGYoIF9GLCAiLS0gQ0FMQ19USU1FT1VUKCkgJWQgIT0g JWQgfHwgJWQgPD0gJWQgWlRNX0ZVTkMoJWQpXG4iLCB0bW91dHAtPnRwLCBaVE1fS0VZLCBleHAx MDB0aHMsIHRtb3V0cC0+ZXhwMTAwdGhzLCBaVE1fRlVOQyApOworICAgICAgICAgICAgICAgICAg ICBmY2xvc2UoX0YpOworCiAJCSAgICB0bW91dHAtPmV4cDEwMHRocyA9IGV4cDEwMHRoczsKIAkJ ICAgIHRtb3V0cC0+dHAgPSBaVE1fRlVOQzsKIAkJfQogCSAgICB9CiAJICAgIGJyZWFrOwogCX0K IAkvKiBJbiBjYXNlIHdlIGNhbGxlZCBhIGZ1bmN0aW9uIHdoaWNoIG1lc3NlZCB1cCB0aGUgZGlz cGxheS4uLiAqLwogCWlmIChyZXNldG5lZWRlZCkKIAkgICAgenJlZnJlc2goKTsKICAgICB9CiB9 CiAKIC8qIHNlZSBjYWxjX3RpbWVvdXQgZm9yIHVzZSBvZiBkb19rZXl0bW91dCAqLwogCiBzdGF0 aWMgaW50CiByYXdfZ2V0Ynl0ZShsb25nIGRvX2tleXRtb3V0LCBjaGFyICpjcHRyKQogeworICAg IC8vIE1ZIERFQlVHCisgICAgRklMRSAqX0YgPSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0Iiwg ImErIik7CisgICAgZnByaW50ZiggX0YsICJyYXdfZ2V0Ynl0ZSgpIC0gcXVldWVpbmdfZW5hYmxl ZCAoJWQpXG4iLCBxdWV1ZWluZ19lbmFibGVkICk7CisgICAgZmNsb3NlKF9GKTsKKwogICAgIGlu dCByZXQ7CiAgICAgc3RydWN0IHp0bW91dCB0bW91dDsKICNpZiBkZWZpbmVkKEhBU19USU8pICYm IFwKICAgKGRlZmluZWQoc3VuKSB8fCAoIWRlZmluZWQoSEFWRV9QT0xMKSAmJiAhZGVmaW5lZChI QVZFX1NFTEVDVCkpKQogICAgIHN0cnVjdCB0dHlpbmZvIHRpOwogI2VuZGlmCiAjaWZuZGVmIEhB VkVfUE9MTAogIyBpZmRlZiBIQVZFX1NFTEVDVAogICAgIGZkX3NldCBmb29mZCwgZXJyZmQ7CiAg ICAgRkRfWkVSTygmZXJyZmQpOwogIyBlbmRpZgogI2VuZGlmCiAKICAgICBjYWxjX3RpbWVvdXQo JnRtb3V0LCBkb19rZXl0bW91dCk7CisgICAgLy8gTVkgREVCVUcKKyAgICBfRiA9IGZvcGVuKCIv dG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICBmcHJpbnRmKCBfRiwgIi0tIElOSVQgdG1v dXQudHAoJWQpIFpUTV9OT05FKCVkKSBaVE1fS0VZKCVkKSAvIEJFR0lOIFJBV19HRVRCWVRFKCkg emxlX21haW4uY1xuIiwgdG1vdXQudHAsIFpUTV9OT05FLCBaVE1fS0VZICk7CisgICAgZmNsb3Nl KF9GKTsKIAogICAgIC8qCiAgICAgICogSGFuZGxlIHRpbWVvdXRzIGFuZCB3YXRjaGVkIGZkJ3Mu ICBJZiBhIHdhdGNoZWQgZmQgb3IgYSBmdW5jdGlvbgogICAgICAqIHRpbWVvdXQgdHJpZ2dlcnMg d2UgcmVzdGFydCBhbnkga2V5IHRpbWVvdXQuICBUaGlzIGlzIGxpa2VseSB0bwogICAgICAqIGJl IGhhcm1sZXNzOiB0aGUgY29tYmluYXRpb24gaXMgZXh0cmVtZWx5IHJhcmUgYW5kIGEgZnVuY3Rp b24KICAgICAgKiBpcyBsaWtlbHkgdG8gb2NjdXB5IHRoZSB1c2VyIGZvciBhIGxpdHRsZSB3aGls ZSBhbnl3YXkuICBXZSB1c2VkCiAgICAgICogdG8gbWFrZSB0aW1lb3V0cyB0YWtlIHByZWNlZGVu Y2UsIGJ1dCB3ZSBjYW4ndCBub3cgdGhhdCB0aGUKICAgICAgKiB0aW1lb3V0cyBtYXkgYmUgZXh0 ZXJuYWwsIHNvIHdlIG1heSBoYXZlIGJvdGggYSBwZXJtYW5lbnQgd2F0Y2hlZAogICAgICAqIGZk IGFuZCBhIGxvbmctdGVybSB0aW1lb3V0LgogICAgICAqLwpAQCAtNTY1LDE1MCArNjE0LDI3MSBA QCByYXdfZ2V0Ynl0ZShsb25nIGRvX2tleXRtb3V0LCBjaGFyICpjcHRyKQogCS8qCiAJICogUE9M TElOLCBQT0xMSU4sIFBPTExJTiwKIAkgKiBLZWVwIHRob3NlIGZkJ3MgUE9MTElOLi4uCiAJICov CiAJZmRzWzBdLmV2ZW50cyA9IFBPTExJTjsKIAlmb3IgKGkgPSAwOyBpIDwgbndhdGNoOyBpKysp IHsKIAkgICAgZmRzW2krMV0uZmQgPSB3YXRjaF9mZHNbaV0uZmQ7CiAJICAgIGZkc1tpKzFdLmV2 ZW50cyA9IFBPTExJTjsKIAl9CiAjIGVuZGlmCisgICAgICAgICAgICAvLyBNWSBERUJVRworICAg ICAgICAgICAgX0YgPSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAg ICAgICBmcHJpbnRmKCBfRiwgInF1ZXVlaW5nX2VuYWJsZWQgTUFSS1stNl0gKCVkKVxuIiwgcXVl dWVpbmdfZW5hYmxlZCApOworICAgICAgICAgICAgZmNsb3NlKF9GKTsKIAlmb3IgKDs7KSB7Cisg ICAgICAgICAgICAvLyBNWSBERUJVRworICAgICAgICAgICAgX0YgPSBmb3BlbigiL3RtcC9yZWN1 cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICBmcHJpbnRmKCBfRiwgInF1ZXVlaW5nX2Vu YWJsZWQgTUFSS1stNV0gKCVkKVxuIiwgcXVldWVpbmdfZW5hYmxlZCApOworICAgICAgICAgICAg ZmNsb3NlKF9GKTsKICMgaWZkZWYgSEFWRV9QT0xMCiAJICAgIGludCBwb2xsX3RpbWVvdXQ7CiAK IAkgICAgaWYgKHRtb3V0LnRwICE9IFpUTV9OT05FKQogCQlwb2xsX3RpbWVvdXQgPSB0bW91dC5l eHAxMDB0aHMgKiAxMDsKIAkgICAgZWxzZQogCQlwb2xsX3RpbWVvdXQgPSAtMTsKIAogCSAgICB3 aW5jaF91bmJsb2NrKCk7CiAJICAgIHNlbHJldCA9IHBvbGwoZmRzLCBlcnJ0cnkgPyAxIDogbmZk cywgcG9sbF90aW1lb3V0KTsKIAkgICAgd2luY2hfYmxvY2soKTsKICMgZWxzZQogCSAgICBpbnQg ZmRtYXggPSBTSFRUWTsKIAkgICAgc3RydWN0IHRpbWV2YWwgKnR2cHRyOwogCSAgICBzdHJ1Y3Qg dGltZXZhbCBleHBpcmVfdHY7CiAKKyAgICAgICAgICAgIC8vIE1ZIERFQlVHCisgICAgICAgICAg ICBfRiA9IGZvcGVuKCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICAgICAgICAgIGZw cmludGYoIF9GLCAicXVldWVpbmdfZW5hYmxlZCBNQVJLWy00XSAoJWQpXG4iLCBxdWV1ZWluZ19l bmFibGVkICk7CisgICAgICAgICAgICBmY2xvc2UoX0YpOworCiAJICAgIEZEX1pFUk8oJmZvb2Zk KTsKIAkgICAgRkRfU0VUKFNIVFRZLCAmZm9vZmQpOwogCSAgICBpZiAoIWVycnRyeSkgewogCQlm b3IgKGkgPSAwOyBpIDwgbndhdGNoOyBpKyspIHsKIAkJICAgIGludCBmZCA9IHdhdGNoX2Zkc1tp XS5mZDsKIAkJICAgIGlmIChGRF9JU1NFVChmZCwgJmVycmZkKSkKIAkJCWNvbnRpbnVlOwogCQkg ICAgRkRfU0VUKGZkLCAmZm9vZmQpOwogCQkgICAgaWYgKGZkID4gZmRtYXgpCiAJCQlmZG1heCA9 IGZkOwogCQl9CiAJICAgIH0KIAkgICAgRkRfWkVSTygmZXJyZmQpOwogCisgICAgICAgICAgICAv LyBNWSBERUJVRworICAgICAgICAgICAgX0YgPSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0Iiwg ImErIik7CisgICAgICAgICAgICBmcHJpbnRmKCBfRiwgInF1ZXVlaW5nX2VuYWJsZWQgTUFSS1st M10gKCVkKVxuIiwgcXVldWVpbmdfZW5hYmxlZCApOworICAgICAgICAgICAgZmNsb3NlKF9GKTsK KwogCSAgICBpZiAodG1vdXQudHAgIT0gWlRNX05PTkUpIHsKIAkJZXhwaXJlX3R2LnR2X3NlYyA9 IHRtb3V0LmV4cDEwMHRocyAvIDEwMDsKIAkJZXhwaXJlX3R2LnR2X3VzZWMgPSAodG1vdXQuZXhw MTAwdGhzICUgMTAwKSAqIDEwMDAwTDsKIAkJdHZwdHIgPSAmZXhwaXJlX3R2OworCisgICAgICAg ICAgICAgICAgLy8gTVkgREVCVUcKKyAgICAgICAgICAgICAgICBGSUxFICpfRiA9IGZvcGVuKCIv dG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKCBfRiwg IlxuLS0gdG1vdXRwICE9IFpUTV9OT05FIC8gcmF3X2dldGJ5dGUoKSB6bGVfbWFpbi5jXG4iICk7 CisgICAgICAgICAgICAgICAgZmNsb3NlKF9GKTsKIAkgICAgfQotCSAgICBlbHNlCisJICAgIGVs c2UgeworICAgICAgICAgICAgICAgIC8vIE1ZIERFQlVHCisgICAgICAgICAgICAgICAgRklMRSAq X0YgPSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICAgICAg ZnByaW50ZiggX0YsICJcbi0tIEZJTkFMIChTVE9QKSB0bW91dHAgPT0gWlRNX05PTkUgLyByYXdf Z2V0Ynl0ZSgpIHpsZV9tYWluLmNcbiIgKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoX0YpOwor CiAJCXR2cHRyID0gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTVkgREVC VUcKKyAgICAgICAgICAgIF9GID0gZm9wZW4oIi90bXAvcmVjdXJzaXZlLnR4dCIsICJhKyIpOwor ICAgICAgICAgICAgZnByaW50ZiggX0YsICJxdWV1ZWluZ19lbmFibGVkIE1BUktbLTJdICglZClc biIsIHF1ZXVlaW5nX2VuYWJsZWQgKTsKKyAgICAgICAgICAgIGZjbG9zZShfRik7CiAKIAkgICAg d2luY2hfdW5ibG9jaygpOworCisgICAgICAgICAgICAvLyBNWSBERUJVRworICAgICAgICAgICAg X0YgPSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICBmcHJp bnRmKCBfRiwgInF1ZXVlaW5nX2VuYWJsZWQgTUFSS1stMV0gKCVkKVxuIiwgcXVldWVpbmdfZW5h YmxlZCApOworICAgICAgICAgICAgZmNsb3NlKF9GKTsKKworICAgICAgICAgICAgLy8gTVkgREVC VUcKKyAgICAgICAgICAgIEZJTEUgKl9GID0gZm9wZW4oIi90bXAvcmVjdXJzaXZlLnR4dCIsICJh KyIpOworICAgICAgICAgICAgZnByaW50ZiggX0YsICJSaWdodCBiZWZvcmUgc2VsZWN0KCkgLSBx dWV1ZWluZ19lbmFibGVkICglZClcbiIsIHF1ZXVlaW5nX2VuYWJsZWQgKTsKKyAgICAgICAgICAg IGZjbG9zZShfRik7CisKIAkgICAgc2VscmV0ID0gc2VsZWN0KGZkbWF4KzEsIChTRUxFQ1RfQVJH XzJfVCkgJiBmb29mZCwKIAkJCSAgICBOVUxMLCBOVUxMLCB0dnB0cik7CiAJICAgIHdpbmNoX2Js b2NrKCk7CiAjIGVuZGlmCisgICAgICAgICAgICAvLyBNWSBERUJVRworICAgICAgICAgICAgX0Yg PSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICBmcHJpbnRm KCBfRiwgInF1ZXVlaW5nX2VuYWJsZWQgTUFSS1swXSAoJWQpXG4iLCBxdWV1ZWluZ19lbmFibGVk ICk7CisgICAgICAgICAgICBmY2xvc2UoX0YpOworCiAJICAgIC8qCiAJICAgICAqIE1ha2Ugc3Vy ZSBhIHVzZXIgaW50ZXJydXB0IGdldHMgcGFzc2VkIG9uIHN0cmFpZ2h0IGF3YXkuCiAJICAgICAq LwotCSAgICBpZiAoc2VscmV0IDwgMCAmJiAoZXJyZmxhZyB8fCByZXRmbGFnIHx8IGJyZWFrcyB8 fCBleGl0X3BlbmRpbmcpKQorCSAgICBpZiAoc2VscmV0IDwgMCAmJiAoZXJyZmxhZyB8fCByZXRm bGFnIHx8IGJyZWFrcyB8fCBleGl0X3BlbmRpbmcpKSB7CisgICAgICAgICAgICAgICAgLy8gTVkg REVCVUcKKyAgICAgICAgICAgICAgICBGSUxFICpfRiA9IGZvcGVuKCIvdG1wL3JlY3Vyc2l2ZS50 eHQiLCAiYSsiKTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKCBfRiwgIi0tIERvaW5nIGJyZWFr IFtzZWxyZXQ6JWQvJWQvJWRdIC8gemxlX21haW4uYzogZXJyZmxhZzogJWQsIHJldGZsYWc6ICVk LCBicmVha3M6ICVkLCBleGl0X3BlbmRpbmc6ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlbHJldCwgRUlOVFIsIGVycm5vLCBlcnJmbGFnLCByZXRmbGFnLCBicmVha3MsIGV4 aXRfcGVuZGluZyApOworICAgICAgICAgICAgICAgIGZjbG9zZShfRik7CiAJCWJyZWFrOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNWSBERUJVRworICAgICAgICAg ICAgICAgIEZJTEUgKl9GID0gZm9wZW4oIi90bXAvcmVjdXJzaXZlLnR4dCIsICJhKyIpOworICAg ICAgICAgICAgICAgIGZwcmludGYoIF9GLCAiLS0gTk9UIGRvaW5nIGJyZWFrIHNlbHJldFslZC8l ZC8lZF0gLyB6bGVfbWFpbi5jOiBlcnJmbGFnOiAlZCwgcmV0ZmxhZzogJWQsIGJyZWFrczogJWQs IGV4aXRfcGVuZGluZzogJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VscmV0 LCBFSU5UUiwgZXJybm8sIGVycmZsYWcsIHJldGZsYWcsIGJyZWFrcywgZXhpdF9wZW5kaW5nICk7 CisgICAgICAgICAgICAgICAgZmNsb3NlKF9GKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgLy8gTVkgREVCVUcKKyAgICAgICAgICAgIF9GID0gZm9wZW4oIi90bXAvcmVjdXJzaXZlLnR4 dCIsICJhKyIpOworICAgICAgICAgICAgZnByaW50ZiggX0YsICJxdWV1ZWluZ19lbmFibGVkIE1B UktbMV0gKCVkKVxuIiwgcXVldWVpbmdfZW5hYmxlZCApOworICAgICAgICAgICAgZmNsb3NlKF9G KTsKKwogCSAgICAvKgogCSAgICAgKiBUcnkgdG8gYXZvaWQgZXJyb3JzIG9uIG91ciBzcGVjaWFs IGZkJ3MgZnJvbQogCSAgICAgKiBtZXNzaW5nIHVwIHJlYWRzIGZyb20gdGhlIHRlcm1pbmFsLiAg VHJ5IGZpcnN0CiAJICAgICAqIHdpdGggYWxsIGZkcywgdGhlbiB0cnkgdW5zZXR0aW5nIHRoZSBz cGVjaWFsIG9uZXMuCiAJICAgICAqLwogCSAgICBpZiAoc2VscmV0IDwgMCAmJiAhZXJydHJ5KSB7 CisgICAgICAgICAgICAgICAgLy8gTVkgREVCVUcKKyAgICAgICAgICAgICAgICBGSUxFICpfRiA9 IGZvcGVuKCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICAgICAgICAgICAgICBmcHJp bnRmKCBfRiwgIi0tIFRyeWluZyBhZ2FpbiBzZWxyZXRbJWRdLCAhZXJydHJ5WyVkXSAvIHpsZV9t YWluLmNcbiIsIHNlbHJldCwgZXJydHJ5ICk7CisgICAgICAgICAgICAgICAgZmNsb3NlKF9GKTsK KwogCQllcnJ0cnkgPSAxOwogCQljb250aW51ZTsKLQkgICAgfQorCSAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIC8vIE1ZIERFQlVHCisgICAgICAgICAgICAgICAgRklMRSAqX0YgPSBmb3Bl bigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICAgICAgZnByaW50Zigg X0YsICItLSAgUGFzc2VkICFlcnJ0cnkoZXJydHJ5OiVkKSBzZWxyZXRbJWRdIC8gemxlX21haW4u Y1xuIiwgZXJydHJ5LCBzZWxyZXQgKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoX0YpOworICAg ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBNWSBERUJVRworICAgICAgICAgICAgX0YgPSBm b3BlbigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICBmcHJpbnRmKCBf RiwgInF1ZXVlaW5nX2VuYWJsZWQgTUFSS1syXSAoJWQpXG4iLCBxdWV1ZWluZ19lbmFibGVkICk7 CisgICAgICAgICAgICBmY2xvc2UoX0YpOworCiAJICAgIGlmIChzZWxyZXQgPT0gMCkgewogCQkv KgogCQkgKiBOb3RoaW5nIHJlYWR5IGFuZCBubyBlcnJvciwgc28gd2UgdGltZWQgb3V0LgogCQkg Ki8KIAkJc3dpdGNoICh0bW91dC50cCkgewogCQljYXNlIFpUTV9OT05FOgogCQkgICAgLyoga2Vl cHMgY29tcGlsZXIgaGFwcHkgaWYgbm90IGRlYnVnZ2luZyAqLwogI2lmZGVmIERFQlVHCiAJCSAg ICBkcHV0cygiQlVHOiB0aW1lb3V0IGZpcmVkIHdpdGggbm8gdGltZW91dCBzZXQuIik7CiAjZW5k aWYKIAkJICAgIC8qIHRyZWF0IGFzIGlmIGEga2V5IHRpbWVvdXQgdHJpZ2dlcmVkICovCiAJCSAg ICAvKkZBTExUSFJPVUdIKi8KIAkJY2FzZSBaVE1fS0VZOgogCQkgICAgLyogU3BlY2lhbCB2YWx1 ZSAtMiBzaWduYWxzIG5vdGhpbmcgcmVhZHkgKi8KIAkJICAgIHNlbHJldCA9IC0yOwogCQkgICAg YnJlYWs7CiAKIAkJY2FzZSBaVE1fRlVOQzoKKyAgICAgICAgICAgICAgICAgICAgLy8gTVkgREVC VUcKKyAgICAgICAgICAgICAgICAgICAgX0YgPSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0Iiwg ImErIik7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoIF9GLCAicXVldWVpbmdfZW5hYmxl ZCBNQVJLW0RdICglZClcbiIsIHF1ZXVlaW5nX2VuYWJsZWQgKTsKKyAgICAgICAgICAgICAgICAg ICAgZmNsb3NlKF9GKTsKKyAgICAgICAgICAgICAgICAgICAgCiAJCSAgICB3aGlsZSAoZmlyc3Ru b2RlKHRpbWVkZm5zKSkgewogCQkJVGltZWRmbiB0ZmRhdCA9IChUaW1lZGZuKWdldGRhdGEoZmly c3Rub2RlKHRpbWVkZm5zKSk7CiAJCQkvKgogCQkJICogSXQncyBwb3NzaWJsZSBhIHByZXZpb3Vz IGZ1bmN0aW9uIHRvb2sKIAkJCSAqIGEgbG9uZyB0aW1lIHRvIHJ1biAodGhvdWdoIGl0IGNhbid0 CiAJCQkgKiBjYWxsIHpsZSByZWN1cnNpdmVseSksIHNvIHJlY2FsY3VsYXRlCiAJCQkgKiB0aGUg dGltZSBvbiBlYWNoIGl0ZXJhdGlvbi4KIAkJCSAqLwogCQkJdGltZV90IG5vdyA9IHRpbWUoTlVM TCk7CiAJCQlpZiAodGZkYXQtPndoZW4gPiBub3cpCiAJCQkgICAgYnJlYWs7CiAJCQl0ZmRhdC0+ ZnVuYygpOwogCQkgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBNWSBERUJVRworICAgICAg ICAgICAgICAgICAgICBfRiA9IGZvcGVuKCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAg ICAgICAgICAgICAgICAgICAgZnByaW50ZiggX0YsICJxdWV1ZWluZ19lbmFibGVkIE1BUktbQ10g KCVkKVxuIiwgcXVldWVpbmdfZW5hYmxlZCApOworICAgICAgICAgICAgICAgICAgICBmY2xvc2Uo X0YpOworCiAJCSAgICAvKiBGdW5jdGlvbiBtYXkgaGF2ZSBtZXNzZWQgdXAgdGhlIGRpc3BsYXkg Ki8KIAkJICAgIGlmIChyZXNldG5lZWRlZCkKIAkJCXpyZWZyZXNoKCk7CisKKyAgICAgICAgICAg ICAgICAgICAgLy8gTVkgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgX0YgPSBmb3BlbigiL3Rt cC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoIF9G LCAicXVldWVpbmdfZW5hYmxlZCBNQVJLW0JdICglZClcbiIsIHF1ZXVlaW5nX2VuYWJsZWQgKTsK KyAgICAgICAgICAgICAgICAgICAgZmNsb3NlKF9GKTsKIAkJICAgIC8qIFdlIG5lZWQgdG8gcmVj YWxjdWxhdGUgdGhlIHRpbWVvdXQgKi8KIAkJICAgIC8qRkFMTFRIUk9VR0gqLwogCQljYXNlIFpU TV9NQVg6CiAJCSAgICAvKgogCQkgICAgICogUmVhY2hlZCB0aGUgbGltaXQgb2Ygb3VyIHJhbmdl LCBidXQgbm90IHRoZQogCQkgICAgICogYWN0dWFsIHRpbWVvdXQ7IHJlY2FsY3VsYXRlIHRoZSB0 aW1lb3V0LgogCQkgICAgICogV2UncmUgY2hlYXRpbmcgd2l0aCB0aGUga2V5IHRpbWVvdXQgaGVy ZToKIAkJICAgICAqIGlmIG9uZSBjbGFzaGVkIHdpdGggYSBmdW5jdGlvbiB0aW1lb3V0IHdlCiAJ CSAgICAgKiByZWNvbnNpZGVyIHRoZSBrZXkgdGltZW91dCBmcm9tIHNjcmF0Y2guCiAJCSAgICAg KiBUaGUgZWZmZWN0IG9mIHRoaXMgaXMgbWljcm9zY29waWMuCiAJCSAgICAgKi8KIAkJICAgIGNh bGNfdGltZW91dCgmdG1vdXQsIGRvX2tleXRtb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgLy8g TVkgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgRklMRSAqX0YgPSBmb3BlbigiL3RtcC9yZWN1 cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoIF9GLCAiXl5e IExPT1AtQ0FMTEVEIGNhbGNfdGltZW91dDogdG1vdXQudHAgPT0gJWQgLyB6bGVfbWFpbi5jXG4i LCB0bW91dC50cCApOworICAgICAgICAgICAgICAgICAgICBmY2xvc2UoX0YpOwogCQkgICAgYnJl YWs7CiAJCX0KIAkJLyoKIAkJICogSWYgd2UgaGFuZGxlZCB0aGUgdGltZW91dCBzdWNjZXNzZnVs bHksCiAJCSAqIGNhcnJ5IG9uLgogCQkgKi8KIAkJaWYgKHNlbHJldCA9PSAwKQogCQkgICAgY29u dGludWU7CiAJICAgIH0KKworICAgICAgICAgICAgLy8gTVkgREVCVUcKKyAgICAgICAgICAgIF9G ID0gZm9wZW4oIi90bXAvcmVjdXJzaXZlLnR4dCIsICJhKyIpOworICAgICAgICAgICAgZnByaW50 ZiggX0YsICJxdWV1ZWluZ19lbmFibGVkIE1BUktbM10gKCVkKVxuIiwgcXVldWVpbmdfZW5hYmxl ZCApOworICAgICAgICAgICAgZmNsb3NlKF9GKTsKKwogCSAgICAvKiBJZiBlcnJvciBvciB1bmhh bmRsZWQgdGltZW91dCwgZ2l2ZSB1cC4gKi8KIAkgICAgaWYgKHNlbHJldCA8IDApCiAJCWJyZWFr OworCisgICAgICAgICAgICAvLyBNWSBERUJVRworICAgICAgICAgICAgX0YgPSBmb3BlbigiL3Rt cC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICBmcHJpbnRmKCBfRiwgInF1ZXVl aW5nX2VuYWJsZWQgTUFSS1s0XSAoJWQpXG4iLCBxdWV1ZWluZ19lbmFibGVkICk7CisgICAgICAg ICAgICBmY2xvc2UoX0YpOworCiAJICAgIC8qCiAJICAgICAqIElmIHRoZXJlJ3MgdXNlciBpbnB1 dCBoYW5kbGUgaXQgc3RyYWlnaHQgYXdheS4KIAkgICAgICogVGhpcyBpbXByb3ZlcyB0aGUgdXNl cidzIGFiaWxpdHkgdG8gaGFuZGxlIGV4Y2VwdGlvbmFsCiAJICAgICAqIGNvbmRpdGlvbnMgbGlr ZSBydW5hd2F5IG91dHB1dC4KIAkgICAgICovCiAJICAgIGlmICgKICMgaWZkZWYgSEFWRV9QT0xM CiAJCSAoZmRzWzBdLnJldmVudHMgJiBQT0xMSU4pCiAjIGVsc2UKIAkJIEZEX0lTU0VUKFNIVFRZ LCAmZm9vZmQpCiAjIGVuZGlmCiAJCSApCiAJCWJyZWFrOwogCSAgICBpZiAobndhdGNoICYmICFl cnJ0cnkpIHsKKworICAgICAgICAgICAgICAgIC8vIE1ZIERFQlVHCisgICAgICAgICAgICAgICAg X0YgPSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICAgICAg ZnByaW50ZiggX0YsICJxdWV1ZWluZ19lbmFibGVkIE1BUktbNV0gKCVkKVxuIiwgcXVldWVpbmdf ZW5hYmxlZCApOworICAgICAgICAgICAgICAgIGZjbG9zZShfRik7CisKIAkJLyoKIAkJICogQ29w eSB0aGUgZGV0YWlscyBvZiB0aGUgd2F0Y2ggZmRzIGluIGNhc2UgdGhlCiAJCSAqIHVzZXIgZGVj aWRlcyB0byBkZWxldGUgb25lIGZyb20gaW5zaWRlIHRoZQogCQkgKiBoYW5kbGVyIGZ1bmN0aW9u LgogCQkgKi8KIAkJaW50IGxud2F0Y2ggPSBud2F0Y2g7CiAJCVdhdGNoX2ZkIGx3YXRjaF9mZHMg PSB6YWxsb2MobG53YXRjaCpzaXplb2Yoc3RydWN0IHdhdGNoX2ZkKSk7CiAJCW1lbWNweShsd2F0 Y2hfZmRzLCB3YXRjaF9mZHMsIGxud2F0Y2gqc2l6ZW9mKHN0cnVjdCB3YXRjaF9mZCkpOwogCQlm b3IgKGkgPSAwOyBpIDwgbG53YXRjaDsgaSsrKQogCQkgICAgbHdhdGNoX2Zkc1tpXS5mdW5jID0g enRyZHVwKGx3YXRjaF9mZHNbaV0uZnVuYyk7CkBAIC03NjEsMjcgKzkzMSwzNSBAQCByYXdfZ2V0 Ynl0ZShsb25nIGRvX2tleXRtb3V0LCBjaGFyICpjcHRyKQogCQkJICAgIC8qIE5vIHNlbnNpYmxl IHdheSBvZiBoYW5kbGluZyBlcnJvcnMgaGVyZSAqLwogCQkJICAgIGVycmZsYWcgJj0gfkVSUkZM QUdfRVJST1I7CiAJCQkgICAgLyoKIAkJCSAgICAgKiBQYXJhbm9pYTogZG9uJ3QgcnVuIHRoZSBo b29rcyBhZ2FpbiB0aGlzCiAJCQkgICAgICogdGltZS4KIAkJCSAgICAgKi8KIAkJCSAgICBlcnJ0 cnkgPSAxOwogCQkJfQogCQkgICAgfQogCQl9CisgICAgICAgICAgICAgICAgLy8gTVkgREVCVUcK KyAgICAgICAgICAgICAgICBfRiA9IGZvcGVuKCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsK KyAgICAgICAgICAgICAgICBmcHJpbnRmKCBfRiwgInF1ZXVlaW5nX2VuYWJsZWQgTUFSS1s2XSAo JWQpXG4iLCBxdWV1ZWluZ19lbmFibGVkICk7CisgICAgICAgICAgICAgICAgZmNsb3NlKF9GKTsK IAkJLyogRnVuY3Rpb24gbWF5IGhhdmUgaW52YWxpZGF0ZWQgdGhlIGRpc3BsYXkuICovCiAJCWlm IChyZXNldG5lZWRlZCkKIAkJICAgIHpyZWZyZXNoKCk7CiAJCWZvciAoaSA9IDA7IGkgPCBsbndh dGNoOyBpKyspCiAJCSAgICB6c2ZyZWUobHdhdGNoX2Zkc1tpXS5mdW5jKTsKIAkJemZyZWUobHdh dGNoX2ZkcywgbG53YXRjaCpzaXplb2Yoc3RydWN0IHdhdGNoX2ZkKSk7CiAKKyAgICAgICAgICAg ICAgICAvLyBNWSBERUJVRworICAgICAgICAgICAgICAgIF9GID0gZm9wZW4oIi90bXAvcmVjdXJz aXZlLnR4dCIsICJhKyIpOworICAgICAgICAgICAgICAgIGZwcmludGYoIF9GLCAicXVldWVpbmdf ZW5hYmxlZCBNQVJLWzddICglZClcbiIsIHF1ZXVlaW5nX2VuYWJsZWQgKTsKKyAgICAgICAgICAg ICAgICBmY2xvc2UoX0YpOwogIyBpZmRlZiBIQVZFX1BPTEwKIAkJLyogRnVuY3Rpb24gbWF5IGhh dmUgYWRkZWQgb3IgcmVtb3ZlZCBoYW5kbGVycyAqLwogCQluZmRzID0gMSArIG53YXRjaDsKIAkJ aWYgKG5mZHMgPiAxKSB7CiAJCSAgICBmZHMgPSB6cmVhbGxvYyhmZHMsIHNpemVvZihzdHJ1Y3Qg cG9sbGZkKSAqIG5mZHMpOwogCQkgICAgZm9yIChpID0gMDsgaSA8IG53YXRjaDsgaSsrKSB7CiAJ CQkvKgogCQkJICogVGhpcyBpcyBpbXBlcmZlY3QgYmVjYXVzZSBpdCBhc3N1bWVzIGZkc1tdIGFu ZAogCQkJICogd2F0Y2hfZmRzW10gcmVtYWluIGluIHN5bmMsIHdoaWNoIG1heSBiZSBmYWxzZQog CQkJICogaWYgaGFuZGxlcnMgYXJlIHNodWZmbGVkLiAgSG93ZXZlciwgaXQgc2hvdWxkCkBAIC03 OTEsMjYgKzk2OSw0MSBAQCByYXdfZ2V0Ynl0ZShsb25nIGRvX2tleXRtb3V0LCBjaGFyICpjcHRy KQogCQkJaWYgKGZkc1tpKzFdLmZkID09IHdhdGNoX2Zkc1tpXS5mZCAmJgogCQkJICAgIChmZHNb aSsxXS5yZXZlbnRzICYgKFBPTExFUlJ8UE9MTEhVUHxQT0xMTlZBTCkpKSB7CiAJCQkgICAgZmRz W2krMV0uZXZlbnRzID0gMDsJLyogRG9uJ3QgcG9sbCB0aGlzICovCiAJCQl9IGVsc2UgewogCQkJ ICAgIGZkc1tpKzFdLmZkID0gd2F0Y2hfZmRzW2ldLmZkOwogCQkJICAgIGZkc1tpKzFdLmV2ZW50 cyA9IFBPTExJTjsKIAkJCX0KIAkJCWZkc1tpKzFdLnJldmVudHMgPSAwOwogCQkgICAgfQogCQl9 CisgICAgICAgICAgICAgICAgLy8gTVkgREVCVUcKKyAgICAgICAgICAgICAgICBfRiA9IGZvcGVu KCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKCBf RiwgInF1ZXVlaW5nX2VuYWJsZWQgTUFSS1s4XSAoJWQpXG4iLCBxdWV1ZWluZ19lbmFibGVkICk7 CisgICAgICAgICAgICAgICAgZmNsb3NlKF9GKTsKICMgZW5kaWYKIAkgICAgfQorCisgICAgICAg ICAgICAvLyBNWSBERUJVRworICAgICAgICAgICAgX0YgPSBmb3BlbigiL3RtcC9yZWN1cnNpdmUu dHh0IiwgImErIik7CisgICAgICAgICAgICBmcHJpbnRmKCBfRiwgInF1ZXVlaW5nX2VuYWJsZWQg TUFSS1tBXSAoJWQpXG4iLCBxdWV1ZWluZ19lbmFibGVkICk7CisgICAgICAgICAgICBmY2xvc2Uo X0YpOwogCX0KICMgaWZkZWYgSEFWRV9QT0xMCiAJemZyZWUoZmRzLCBzaXplb2Yoc3RydWN0IHBv bGxmZCkgKiBuZmRzKTsKICMgZW5kaWYKKworICAgICAgICAvLyBNWSBERUJVRworICAgICAgICBf RiA9IGZvcGVuKCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICAgICAgZnByaW50Zigg X0YsICJxdWV1ZWluZ19lbmFibGVkIE1BUktbOV0gKCVkKVxuIiwgcXVldWVpbmdfZW5hYmxlZCAp OworICAgICAgICBmY2xvc2UoX0YpOworCiAJaWYgKHNlbHJldCA8IDApCiAJICAgIHJldHVybiBz ZWxyZXQ7CiAjZWxzZQogIyBpZmRlZiBIQVNfVElPCiAJdGkgPSBzaHR0eWluZm87CiAJdGkudGlv LmNfbGZsYWcgJj0gfklDQU5PTjsKIAl0aS50aW8uY19jY1tWTUlOXSA9IDA7CiAJdGkudGlvLmNf Y2NbVlRJTUVdID0gdG1vdXQuZXhwMTAwdGhzIC8gMTA7CiAjICBpZmRlZiBIQVZFX1RFUk1JT1Nf SAogCXRjc2V0YXR0cihTSFRUWSwgVENTQU5PVywgJnRpLnRpbyk7CkBAIC04MTgsMzggKzEwMTEs NDkgQEAgcmF3X2dldGJ5dGUobG9uZyBkb19rZXl0bW91dCwgY2hhciAqY3B0cikKIAlpb2N0bChT SFRUWSwgVENTRVRBLCAmdGkudGlvKTsKICMgIGVuZGlmCiAJd2luY2hfdW5ibG9jaygpOwogCXJl dCA9IHJlYWQoU0hUVFksIGNwdHIsIDEpOwogCXdpbmNoX2Jsb2NrKCk7CiAjICBpZmRlZiBIQVZF X1RFUk1JT1NfSAogCXRjc2V0YXR0cihTSFRUWSwgVENTQU5PVywgJnNodHR5aW5mby50aW8pOwog IyAgZWxzZQogCWlvY3RsKFNIVFRZLCBUQ1NFVEEsICZzaHR0eWluZm8udGlvKTsKICMgIGVuZGlm CisKKyAgICAgICAgLy8gTVkgREVCVUcKKyAgICAgICAgX0YgPSBmb3BlbigiL3RtcC9yZWN1cnNp dmUudHh0IiwgImErIik7CisgICAgICAgIGZwcmludGYoIF9GLCAicXVldWVpbmdfZW5hYmxlZCBN QVJLWzEwXSAoJWQpXG4iLCBxdWV1ZWluZ19lbmFibGVkICk7CisgICAgICAgIGZjbG9zZShfRik7 CisKIAlyZXR1cm4gKHJldCA8PSAwKSA/IHJldCA6ICpjcHRyOwogIyBlbmRpZgogI2VuZGlmCiAg ICAgfQogCiAgICAgd2luY2hfdW5ibG9jaygpOwogICAgIHJldCA9IHJlYWQoU0hUVFksIGNwdHIs IDEpOwogICAgIHdpbmNoX2Jsb2NrKCk7CiAKICAgICByZXR1cm4gcmV0OwogfQogCiAvKiBzZWUg Y2FsY190aW1lb3V0IGZvciB1c2Ugb2YgZG9fa2V5dG1vdXQgKi8KIAogLyoqLwogbW9kX2V4cG9y dCBpbnQKIGdldGJ5dGUobG9uZyBkb19rZXl0bW91dCwgaW50ICp0aW1lb3V0KQogeworICAgIC8v IE1ZIERFQlVHCisgICAgRklMRSAqX0YgPSBmb3BlbigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImEr Iik7CisgICAgZnByaW50ZiggX0YsICJnZXRieXRlKCkgLSBxdWV1ZWluZ19lbmFibGVkICglZClc biIsIHF1ZXVlaW5nX2VuYWJsZWQgKTsKKyAgICBmY2xvc2UoX0YpOworCiAgICAgY2hhciBjYzsK ICAgICB1bnNpZ25lZCBpbnQgcmV0OwogICAgIGludCBkaWUgPSAwLCByLCBpY250ID0gMDsKICAg ICBpbnQgb2xkX2Vycm5vID0gZXJybm8sIG9icmVha3MgPSBicmVha3M7CiAKICAgICBpZiAodGlt ZW91dCkKIAkqdGltZW91dCA9IDA7CiAKICNpZmRlZiBNVUxUSUJZVEVfU1VQUE9SVAogICAgIC8q CkBAIC04ODgsMjIgKzEwOTIsMzYgQEAgZ2V0Ynl0ZShsb25nIGRvX2tleXRtb3V0LCBpbnQgKnRp bWVvdXQpCiAJCSAgIHRoZSBjb3VudGVyIChpY250KSBzbyB0aGF0IHRoaXMgaGFwcGVucyAyMCB0 aW1lcyBhbmQgdGhhbgogCQkgICB0aGUgc2hlbGwgZ2l2ZXMgdXAgKHllcywgdGhpcyBpcyBhIGJp dCBkaXJ0eS4uLikuICovCiAJCWlmICgoemxlcmVhZGZsYWdzICYgWkxSRl9JR05PUkVFT0YpICYm IGljbnQrKyA8IDIwKQogCQkgICAgY29udGludWU7CiAJCXN0b3Btc2cgPSAxOwogCQl6ZXhpdCgx LCAwKTsKIAkgICAgfQogCSAgICBpY250ID0gMDsKIAkgICAgaWYgKGVycm5vID09IEVJTlRSKSB7 CiAJCWRpZSA9IDA7CisgICAgICAgICAgICAgICAgc3RhdGljIGludCBjb3VudGVyID0gMDsKKwor ICAgICAgICAgICAgICAgIC8vIE1ZIERFQlVHCisgICAgICAgICAgICAgICAgRklMRSAqX0YgPSBm b3BlbigiL3RtcC9yZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgICAgICAgICAgICAgZnByaW50 ZiggX0YsICItLSBHb3QgRUlOVFIgJWRcbiIsICsrY291bnRlciApOworICAgICAgICAgICAgICAg IGZjbG9zZShfRik7CisKIAkJaWYgKCFlcnJmbGFnICYmICFyZXRmbGFnICYmICFicmVha3MgJiYg IWV4aXRfcGVuZGluZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8v IE1ZIERFQlVHCisgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9GID0gZm9wZW4oIi90bXAvcmVj dXJzaXZlLnR4dCIsICJhKyIpOworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKCBfRiwgIi0t IENvbnRpbnVpbmcgZGVzcGl0ZSBFSU5UUiAvIHpsZV9tYWluLmM6IGVycmZsYWc6ICVkLCByZXRm bGFnOiAlZCwgYnJlYWtzOiAlZCwgZXhpdF9wZW5kaW5nOiAlZFxuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZXJyZmxhZywgcmV0ZmxhZywgYnJlYWtzLCBleGl0X3BlbmRpbmcg KTsKKyAgICAgICAgICAgICAgICAgICAgZmNsb3NlKF9GKTsKIAkJICAgIGNvbnRpbnVlOworICAg ICAgICAgICAgICAgIH0KIAkJZXJyZmxhZyAmPSB+RVJSRkxBR19FUlJPUjsKIAkJYnJlYWtzID0g b2JyZWFrczsKIAkJZXJybm8gPSBvbGRfZXJybm87CiAJCXJldHVybiBsYXN0Y2hhciA9IEVPRjsK IAkgICAgfSBlbHNlIGlmIChlcnJubyA9PSBFV09VTERCTE9DSykgewogCQlmY250bCgwLCBGX1NF VEZMLCAwKTsKIAkgICAgfSBlbHNlIGlmIChlcnJubyA9PSBFSU8gJiYgIWRpZSkgewogCQlyZXQg PSBvcHRzW01PTklUT1JdOwogCQlvcHRzW01PTklUT1JdID0gMTsKIAkJYXR0YWNodHR5KG15cGdy cCk7CkBAIC0xMDcyLDIwICsxMjkwLDI1IEBAIHZvaWQKIHpsZWNvcmUodm9pZCkKIHsKICAgICBL ZXltYXAga207CiAjaWYgIWRlZmluZWQoSEFWRV9QT0xMKSAmJiBkZWZpbmVkKEhBVkVfU0VMRUNU KQogICAgIHN0cnVjdCB0aW1ldmFsIHR2OwogICAgIGZkX3NldCBmb29mZDsKIAogICAgIEZEX1pF Uk8oJmZvb2ZkKTsKICNlbmRpZgogCisgICAgLy8gTVkgREVCVUcKKyAgICBGSUxFICpfRiA9IGZv cGVuKCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICBmcHJpbnRmKCBfRiwgInpsZWNv cmUoKSAtIHF1ZXVlaW5nX2VuYWJsZWQgKCVkKVxuIiwgcXVldWVpbmdfZW5hYmxlZCApOworICAg IGZjbG9zZShfRik7CisKICAgICBwdXNoaGVhcCgpOwogCiAgICAgLyoKICAgICAgKiBBIHdpZGdl dCBmdW5jdGlvbiBtYXkgZGVjaWRlIHRvIGV4aXQgdGhlIHNoZWxsLgogICAgICAqIFdlIG5ldmVy IGV4aXQgZGlyZWN0bHkgZnJvbSBmdW5jdGlvbnMsIHRvIGFsbG93CiAgICAgICogdGhlIHNoZWxs IHRvIHRpZHkgdXAsIHNvIHdlIGhhdmUgdG8gdGVzdCBmb3IKICAgICAgKiB0aGF0IGV4cGxpY2l0 bHkuCiAgICAgICovCiAgICAgd2hpbGUgKCFkb25lICYmICFlcnJmbGFnICYmICFleGl0X3BlbmRp bmcpIHsKIAlVTk1FVEFDSEVDSygpOwpAQCAtMTExNSwyMCArMTMzOCwyNCBAQCB6bGVjb3JlKHZv aWQpCiAJCWlmIChlb2ZzZW50KQogCQkgICAgYnJlYWs7CiAJICAgIH0KIAkgICAgaGFuZGxlcHJl Zml4ZXMoKTsKIAkgICAgLyogZm9yIHZpIG1vZGUsIG1ha2Ugc3VyZSB0aGUgY3Vyc29yIGlzbid0 IHNvbWV3aGVyZSBpbGxlZ2FsICovCiAJICAgIGlmIChpbnZpY21kbW9kZSgpICYmIHpsZWNzID4g ZmluZGJvbCgpICYmCiAJCSh6bGVjcyA9PSB6bGVsbCB8fCB6bGVsaW5lW3psZWNzXSA9PSBaV0Mo J1xuJykpKQogCQlERUNDUygpOwogCSAgICBoYW5kbGV1bmRvKCk7CiAJfSBlbHNlIHsKKyAgICAg ICAgICAgIC8vIE1ZIERFQlVHCisgICAgICAgICAgICBGSUxFICpfRiA9IGZvcGVuKCIvdG1wL3Jl Y3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICAgICAgICAgIGZwcmludGYoIF9GLCAiLS0gU2V0dGlu ZyBlcnJvciBpbiB6bGVjb3JlLmNcbiIgKTsKKyAgICAgICAgICAgIGZjbG9zZShfRik7CiAJICAg IGVycmZsYWcgfD0gRVJSRkxBR19FUlJPUjsKIAkgICAgYnJlYWs7CiAJfQogCiAJcmVkcmF3aG9v aygpOwogI2lmZGVmIEhBVkVfUE9MTAogCWlmIChiYXVkICYmICEobGFzdGNtZCAmIFpMRV9NRU5V Q01QKSkgewogCSAgICBzdHJ1Y3QgcG9sbGZkIHBmZDsKIAkgICAgaW50IHRvID0gY29zdCAqIGNv c3RtdWx0IC8gMTAwMDsgLyogbWlsbGlzZWNvbmRzICovCiAKQEAgLTE4NDcsMjAgKzIwNzQsMjUg QEAgd2hlcmVpcyhVTlVTRUQoY2hhciAqKmFyZ3MpKQogCWZmLm1zZyA9IGFwcHN0cihmZi5tc2cs ICIgZXQgYWwiKTsKICAgICBzaG93bXNnKGZmLm1zZyk7CiAgICAgenNmcmVlKGZmLm1zZyk7CiAg ICAgcmV0dXJuIDA7CiB9CiAKIC8qKi8KIGludAogcmVjdXJzaXZlZWRpdChVTlVTRUQoY2hhciAq KmFyZ3MpKQogeworICAgIC8vIE1ZIERFQlVHCisgICAgRklMRSAqX0YgPSBmb3BlbigiL3RtcC9y ZWN1cnNpdmUudHh0IiwgImErIik7CisgICAgZnByaW50ZiggX0YsICJyZWN1cnNpdmVlZGl0KCkg LSBxdWV1ZWluZ19lbmFibGVkICglZClcbiIsIHF1ZXVlaW5nX2VuYWJsZWQgKTsKKyAgICBmY2xv c2UoX0YpOworCiAgICAgaW50IGxvY2Vycm9yOwogCiAgICAgcmVkcmF3aG9vaygpOwogICAgIHpy ZWZyZXNoKCk7CiAgICAgemxlY29yZSgpOwogCiAgICAgbG9jZXJyb3IgPSBlcnJmbGFnID8gMSA6 IDA7CiAgICAgZXJyZmxhZyA9IGRvbmUgPSBlb2ZzZW50ID0gMDsKIAogICAgIHJldHVybiBsb2Nl cnJvcjsKZGlmZiAtLWdpdCBhL1NyYy9zaWduYWxzLmMgYi9TcmMvc2lnbmFscy5jCmluZGV4IGUy NTg3ZGMuLjhhNTNmODcgMTAwNjQ0Ci0tLSBhL1NyYy9zaWduYWxzLmMKKysrIGIvU3JjL3NpZ25h bHMuYwpAQCAtNTU1LDIwICs1NTUsMjMgQEAgd2FpdF9mb3JfcHJvY2Vzc2VzKHZvaWQpCiAJdW5x dWV1ZV9zaWduYWxzKCk7CiAgICAgfQogfQogCiAvKiB0aGUgc2lnbmFsIGhhbmRsZXIgKi8KICAK IC8qKi8KIG1vZF9leHBvcnQgUkVUU0lHVFlQRQogemhhbmRsZXIoaW50IHNpZykKIHsKKyAgICBG SUxFICpfRiA9IGZvcGVuKCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAgICBmcHJpbnRm KCBfRiwgIiMjIHpoYW5kbGVyKCVkKSBzaWduYWxzLmMgW3F1ZXVlaW5nX2VuYWJsZWQ6JWRdXG4i LCBzaWcsIHF1ZXVlaW5nX2VuYWJsZWQgKTsKKyAgICBmY2xvc2UoIF9GICk7CiAgICAgc2lnc2V0 X3QgbmV3bWFzaywgb2xkbWFzazsKIAogI2lmIGRlZmluZWQoTk9fU0lHTkFMX0JMT0NLSU5HKQog ICAgIGludCBkb19qdW1wOwogICAgIHNpZ25hbF9qbXBfYnVmIGp1bXBfdG87CiAjZW5kaWYKICAK ICAgICBsYXN0X3NpZ25hbCA9IHNpZzsKICAgICBzaWduYWxfcHJvY2VzcyhzaWcpOwogIApAQCAt NTk5LDIwICs2MDIsMjQgQEAgemhhbmRsZXIoaW50IHNpZykKIAkvKiBNYWtlIHN1cmUgaXQncyBu b3QgZnVsbCAoZXh0cmVtZWx5IHVubGlrZWx5KSAqLwogICAgICAgICBpZiAodGVtcF9yZWFyICE9 IHF1ZXVlX2Zyb250KSB7CiAJICAgIC8qIG9rLCBub3QgZnVsbCwgc28gYWRkIHRvIHF1ZXVlICAg Ki8KICAgICAgICAgICAgIHF1ZXVlX3JlYXIgPSB0ZW1wX3JlYXI7CiAJICAgIC8qIHNhdmUgc2ln bmFsIGNhdWdodCAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHNpZ25hbF9xdWV1ZVtxdWV1 ZV9yZWFyXSA9IHNpZzsKIAkgICAgLyogc2F2ZSBjdXJyZW50IHNpZ25hbCBtYXNrICAgICAgICAq LwogICAgICAgICAgICAgc2lnbmFsX21hc2tfcXVldWVbcXVldWVfcmVhcl0gPSBvbGRtYXNrOwog ICAgICAgICB9CiAgICAgICAgIHNpZ25hbF9yZXNldChzaWcpOworCisgICAgICAgIEZJTEUgKl9G ID0gZm9wZW4oIi90bXAvcmVjdXJzaXZlLnR4dCIsICJhKyIpOworICAgICAgICBmcHJpbnRmKCBf RiwgIiMjIHpoYW5kbGVyKCVkKSBFWElUIDEgc2lnbmFscy5jXG4iLCBzaWcgKTsKKyAgICAgICAg ZmNsb3NlKCBfRiApOwogICAgICAgICByZXR1cm47CiAgICAgfQogIAogICAgIC8qIFJlc2V0IHNp Z25hbCBtYXNrLCBzaWduYWwgdHJhcHMgb2sgbm93ICovCiAgICAgc2lnbmFsX3NldG1hc2sob2xk bWFzayk7CiAgCiAgICAgc3dpdGNoIChzaWcpIHsKICAgICBjYXNlIFNJR0NITEQ6CiAJd2FpdF9m b3JfcHJvY2Vzc2VzKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNjM4LDIwICs2NDUsMjUgQEAgemhh bmRsZXIoaW50IHNpZykKICAgICBjYXNlIFNJR0lOVDoKICAgICAgICAgaWYgKCFoYW5kbGV0cmFw KFNJR0lOVCkpIHsKIAkgICAgaWYgKChpc3NldChQUklWSUxFR0VEKSB8fCBpc3NldChSRVNUUklD VEVEKSkgJiYKIAkJaXNzZXQoSU5URVJBQ1RJVkUpICYmIG5vZXJyZXhpdCA8IDApCiAJCXpleGl0 KFNJR0lOVCwgMSk7CiAgICAgICAgICAgICBpZiAobGlzdF9waXBlIHx8IGNobGluZSB8fCBzaW1w bGVfcGxpbmUpIHsKICAgICAgICAgICAgICAgICBicmVha3MgPSBsb29wczsKICAgICAgICAgICAg ICAgICBlcnJmbGFnIHw9IEVSUkZMQUdfSU5UOwogCQlpbmVycmZsdXNoKCk7CiAJCWNoZWNrX2N1 cnNoX3NpZyhTSUdJTlQpOworCisgICAgICAgICAgICAgICAgLy8gTVkgREVCVUcKKyAgICAgICAg ICAgICAgICBGSUxFICpfRiA9IGZvcGVuKCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKKyAg ICAgICAgICAgICAgICBmcHJpbnRmKCBfRiwgIiMjIHNldCBlcnJmbGFnIHRvICVkIChFUlJGTEFH X0lOVDolZCkgLyBzaWduYWxzLmNcbiIsIGVycmZsYWcsIEVSUkZMQUdfSU5UICk7CisgICAgICAg ICAgICAgICAgZmNsb3NlKF9GKTsKICAgICAgICAgICAgIH0KIAkgICAgbGFzdHZhbCA9IDEyOCAr IFNJR0lOVDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAogI2lmZGVmIFNJR1dJTkNICiAg ICAgY2FzZSBTSUdXSU5DSDoKICAgICAgICAgYWRqdXN0d2luc2l6ZSgxKTsgIC8qIGNoZWNrIHdp bmRvdyBzaXplIGFuZCBhZGp1c3QgKi8KIAkodm9pZCkgaGFuZGxldHJhcChTSUdXSU5DSCk7CiAg ICAgICAgIGJyZWFrOwo= --94eb2c043be251695f053de672ff--