Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jHdbX-0006gV-GU for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Mar 2020 01:16:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jHdbW-0006X1-0D for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Mar 2020 01:16:10 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1jHdbV-0006Wu-6P for pgsql-hackers@lists.postgresql.org; Fri, 27 Mar 2020 01:16:09 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jHdbP-0008Mf-3k for pgsql-hackers@lists.postgresql.org; Fri, 27 Mar 2020 01:16:07 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 8138A21C49D0 for ; Fri, 27 Mar 2020 04:15:59 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 461F821C22D2 for ; Fri, 27 Mar 2020 04:15:59 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1585271759; bh=oEEYG9sAmlWPakXe3S4Xs0wWZzk9jGXjGsqNaDILQv8=; h=Date:From:To:Subject:In-Reply-To:References; b=kUvSqmJ+aF5AV43ky4sOtv4H91DgKuEofAr8p7+nChZrf5wG+BKzGDoQ4CgwohXt2 L2A6C3+/xXHBa6rw8guei0V5ZlvUwPq8KDZSQZzyVFyB0PFjn2joigB0EDAL+lwt7S 7JxmIKgsfQonZypXdXH75KtDPJPaTT7+Sdc9WCgg= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_46507ca583841f997a5ceaff77991426" Content-Transfer-Encoding: 8bit Date: Fri, 27 Mar 2020 04:15:59 +0300 From: Kartyshov Ivan To: pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: References: <80f267591b373db5588d580fdfb432f0@postgrespro.ru> <20200306.145445.1788163547829857988.horikyota.ntt@gmail.com> <3cc883048264c2e9af022033925ff8db@postgrespro.ru> User-Agent: Roundcube Webmail/1.4.0 Message-ID: X-Sender: i.kartyshov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_46507ca583841f997a5ceaff77991426 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Anna, thank you for your review. On 2020-03-25 21:10, Anna Akenteva wrote: > On 2020-03-21 14:16, Kartyshov Ivan wrote: >> and event is: >> LSN value [options] >> TIMESTAMP value > I would maybe remove WAIT FOR TIMESTAMP. As Robert Haas has pointed > out, it seems a lot like pg_sleep_until(). Besides, it doesn't > necessarily need to be connected to transaction start, which makes it > different from WAIT FOR LSN - so I wouldn't mix them together. I don't mind. But I think we should get one more opinions on this point. > === > This is how WaitUtility() is called - note that time_val will always be > > 0: > +    if (time_val <= 0) > +        time_val = 1; > +... > +    res = WaitUtility(lsn, (int)(time_val * 1000), dest); > > (time_val * 1000) is passed to WaitUtility() as the delay argument. > And inside WaitUtility() we have this: > > +if (delay > 0) > +    latch_events = WL_LATCH_SET | WL_TIMEOUT | WL_POSTMASTER_DEATH; > +else > +    latch_events = WL_LATCH_SET | WL_POSTMASTER_DEATH; > > Since we always pass a delay value greater than 0, we'll never get to > the "else" clause here and we'll never be ready to wait for LSN > forever. Perhaps due to that, the current test outputs this after a > simple WAIT FOR LSN command: > psql::1: NOTICE:  LSN is not reached. I fix it, and Interruptions in last patch. Anna, feel free to work on this patch. -- Ivan Kartyshov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_46507ca583841f997a5ceaff77991426 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=begin_waitfor_v2.patch Content-Disposition: attachment; filename=begin_waitfor_v2.patch; size=38471 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCA4ZDkxZjM1MjllLi44Njk3Zjk4MDdmIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9hbGxmaWxlcy5zZ21sCkBAIC0xODcsNiArMTg3LDcgQEAgQ29tcGxldGUgbGlzdCBvZiB1c2Fi bGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCiA8IUVOVElUWSB1cGRhdGUg ICAgICAgICAgICAgU1lTVEVNICJ1cGRhdGUuc2dtbCI+CiA8IUVOVElUWSB2YWN1dW0gICAgICAg ICAgICAgU1lTVEVNICJ2YWN1dW0uc2dtbCI+CiA8IUVOVElUWSB2YWx1ZXMgICAgICAgICAgICAg U1lTVEVNICJ2YWx1ZXMuc2dtbCI+Cis8IUVOVElUWSB3YWl0ICAgICAgICAgICAgICAgU1lTVEVN ICJ3YWl0LnNnbWwiPgogCiA8IS0tIGFwcGxpY2F0aW9ucyBhbmQgdXRpbGl0aWVzIC0tPgogPCFF TlRJVFkgY2x1c3RlcmRiICAgICAgICAgIFNZU1RFTSAiY2x1c3RlcmRiLnNnbWwiPgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9iZWdpbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9iZWdp bi5zZ21sCmluZGV4IGMyM2JiZmI0ZTcuLjQ1Mjg5YzAxNzMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9yZWYvYmVnaW4uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2JlZ2luLnNnbWwKQEAg LTIxLDEzICsyMSwyNSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZzeW5vcHNp c2Rpdj4KIDxzeW5vcHNpcz4KLUJFR0lOIFsgV09SSyB8IFRSQU5TQUNUSU9OIF0gWyA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGU+IFss IC4uLl0gXQorQkVHSU4gWyBXT1JLIHwgVFJBTlNBQ1RJT04gXSBbIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj50cmFuc2FjdGlvbl9tb2RlPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBdIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X2Zvcl9ldmVudDwvcmVwbGFjZWFibGU+ CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0 aW9uX21vZGU8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CiAKICAgICBJU09MQVRJ T04gTEVWRUwgeyBTRVJJQUxJWkFCTEUgfCBSRVBFQVRBQkxFIFJFQUQgfCBSRUFEIENPTU1JVFRF RCB8IFJFQUQgVU5DT01NSVRURUQgfQogICAgIFJFQUQgV1JJVEUgfCBSRUFEIE9OTFkKICAgICBb IE5PVCBdIERFRkVSUkFCTEUKKworPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRf Zm9yX2V2ZW50PC9yZXBsYWNlYWJsZT4KKyAgICBXQUlUIEZPUiBbQU5ZIHwgQUxMXSA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXZlbnQ8L3JlcGxhY2VhYmxlPiBbLCA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+ZXZlbnQ8L3JlcGxhY2VhYmxlPiAuLi5dCisKKzxwaHJhc2U+ d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4g aXM6PC9waHJhc2U+CisgICAgTFNOIHZhbHVlIFs8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+b3B0aW9uczwvcmVwbGFjZWFibGU+XQorICAgIFRJTUVTVEFNUCB2YWx1ZQorCis8cGhyYXNl PmFuZCB3aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3B0aW9uczwvcmVwbGFj ZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KKyAgICBUSU1FT1VUIGRlbGF5CisgICAgVU5USUwg VElNRVNUQU1QIHRpbWVzdGFtcAorCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNkaXY+CiAK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvc3RhcnRfdHJhbnNhY3Rpb24uc2dtbCBiL2Rv Yy9zcmMvc2dtbC9yZWYvc3RhcnRfdHJhbnNhY3Rpb24uc2dtbAppbmRleCBkNmNkMWQ0MTc3Li4w MWI0MDJlOWNkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3N0YXJ0X3RyYW5zYWN0aW9u LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9zdGFydF90cmFuc2FjdGlvbi5zZ21sCkBAIC0y MSwxMyArMjEsMjQgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmc3lub3BzaXNk aXY+CiA8c3lub3BzaXM+Ci1TVEFSVCBUUkFOU0FDVElPTiBbIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj50cmFuc2FjdGlvbl9tb2RlPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBdCitTVEFS VCBUUkFOU0FDVElPTiBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFuc2FjdGlv bl9tb2RlPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj53YWl0X2Zvcl9ldmVudDwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2VhYmxlPiBp cyBvbmUgb2Y6PC9waHJhc2U+CiAKICAgICBJU09MQVRJT04gTEVWRUwgeyBTRVJJQUxJWkFCTEUg fCBSRVBFQVRBQkxFIFJFQUQgfCBSRUFEIENPTU1JVFRFRCB8IFJFQUQgVU5DT01NSVRURUQgfQog ICAgIFJFQUQgV1JJVEUgfCBSRUFEIE9OTFkKICAgICBbIE5PVCBdIERFRkVSUkFCTEUKKworPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfZm9yX2V2ZW50PC9yZXBsYWNlYWJsZT4K KyAgICBXQUlUIEZPUiBbQU5ZIHwgU09NRSB8IEFMTF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4gWywgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4gLi4uXQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5ldmVudDwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgorICAg IExTTiB2YWx1ZSBbPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbnM8L3JlcGxh Y2VhYmxlPl0KKyAgICBUSU1FU1RBTVAgdmFsdWUKKworPHBocmFzZT5hbmQgd2hlcmUgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6 PC9waHJhc2U+CisgICAgVElNRU9VVCBkZWxheQorICAgIFVOVElMIFRJTUVTVEFNUCB0aW1lc3Rh bXAKIDwvc3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KIApkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3JlZi93YWl0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3dhaXQuc2dtbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iODI0MDg4ZjZjCi0tLSAvZGV2L251bGwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi93YWl0LnNnbWwKQEAgLTAsMCArMSwxNDggQEAKKzwhLS0K K2RvYy9zcmMvc2dtbC9yZWYvd2FpdGxzbi5zZ21sCitQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K Ky0tPgorCis8cmVmZW50cnkgaWQ9InNxbC13YWl0bHNuIj4KKyA8aW5kZXh0ZXJtIHpvbmU9InNx bC13YWl0bHNuIj4KKyAgPHByaW1hcnk+V0FJVCBGT1I8L3ByaW1hcnk+CisgPC9pbmRleHRlcm0+ CisKKyA8cmVmbWV0YT4KKyAgPHJlZmVudHJ5dGl0bGU+V0FJVCBGT1I8L3JlZmVudHJ5dGl0bGU+ CisgIDxtYW52b2xudW0+NzwvbWFudm9sbnVtPgorICA8cmVmbWlzY2luZm8+U1FMIC0gTGFuZ3Vh Z2UgU3RhdGVtZW50czwvcmVmbWlzY2luZm8+CisgPC9yZWZtZXRhPgorCisgPHJlZm5hbWVkaXY+ CisgIDxyZWZuYW1lPldBSVQgRk9SPC9yZWZuYW1lPgorICA8cmVmcHVycG9zZT53YWl0IGZvciB0 aGUgdGFyZ2V0IDxhY3JvbnltPkxTTjwvYWNyb255bT4gdG8gYmUgcmVwbGF5ZWQ8L3JlZnB1cnBv c2U+CisgPC9yZWZuYW1lZGl2PgorCisgPHJlZnN5bm9wc2lzZGl2PgorPHN5bm9wc2lzPgorV0FJ VCBGT1IgW0FOWSB8IEFMTF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV2ZW50PC9y ZXBsYWNlYWJsZT4gWywgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV2ZW50PC9yZXBs YWNlYWJsZT4gLi4uXQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5ldmVudDwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgorICAgIExTTiB2YWx1ZSBbPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbnM8L3JlcGxhY2VhYmxlPl0KKyAgICBU SU1FU1RBTVAgdmFsdWUKKworPHBocmFzZT5hbmQgd2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CisgICAg VElNRU9VVCBkZWxheQorICAgIFVOVElMIFRJTUVTVEFNUCB0aW1lc3RhbXAKKworV0FJVCBGT1Ig TFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFi bGU+JworV0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251 bWJlcjwvcmVwbGFjZWFibGU+JyBUSU1FT1VUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij53YWl0X3RpbWVvdXQ8L3JlcGxhY2VhYmxlPgorV0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JyBVTlRJTCBUSU1FU1RB TVAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZTwvcmVwbGFjZWFibGU+ CitXQUlUIEZPUiBUSU1FU1RBTVAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRf dGltZTwvcmVwbGFjZWFibGU+CitXQUlUIEZPUiBBTEwgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JyBUSU1FT1VUIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWVvdXQ8L3JlcGxhY2VhYmxlPiwgVElNRVNUQU1Q IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWU8L3JlcGxhY2VhYmxlPgor V0FJVCBGT1IgQU5ZIExTTiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxzbl9udW1i ZXI8L3JlcGxhY2VhYmxlPicsIFRJTUVTVEFNUCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+d2FpdF90aW1lPC9yZXBsYWNlYWJsZT4KKzwvc3lub3BzaXM+CisgPC9yZWZzeW5vcHNpc2Rp dj4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICA8cGFy YT4KKyAgIDxjb21tYW5kPldBSVQgRk9SPC9jb21tYW5kPiBwcm92aWRlcyBhIHNpbXBsZQorICAg aW50ZXJwcm9jZXNzIGNvbW11bmljYXRpb24gbWVjaGFuaXNtIHRvIHdhaXQgZm9yIHRpbWVzdGFt cCBvciB0aGUgdGFyZ2V0IGxvZyBzZXF1ZW5jZQorICAgbnVtYmVyICg8YWNyb255bT5MU048L2Fj cm9ueW0+KSBvbiBzdGFuZGJ5IGluIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFt ZT4KKyAgIGRhdGFiYXNlcyB3aXRoIG1hc3Rlci1zdGFuZGJ5IGFzeW5jaHJvbm91cyByZXBsaWNh dGlvbi4gV2hlbiBydW4gd2l0aCB0aGUKKyAgIDxyZXBsYWNlYWJsZT5MU048L3JlcGxhY2VhYmxl PiBvcHRpb24sIHRoZSA8Y29tbWFuZD5XQUlUIEZPUjwvY29tbWFuZD4gY29tbWFuZAorICAgd2Fp dHMgZm9yIHRoZSBzcGVjaWZpZWQgPGFjcm9ueW0+TFNOPC9hY3JvbnltPiB0byBiZSByZXBsYXll ZC4gQnkgZGVmYXVsdCwgd2FpdAorICAgdGltZSBpcyB1bmxpbWl0ZWQuIFdhaXRpbmcgY2FuIGJl IGludGVycnVwdGVkIHVzaW5nIDxsaXRlcmFsPkN0cmwrQzwvbGl0ZXJhbD4sIG9yCisgICBieSBz aHV0dGluZyBkb3duIHRoZSA8bGl0ZXJhbD5wb3N0Z3JlczwvbGl0ZXJhbD4gc2VydmVyLiBZb3Ug Y2FuIGFsc28gbGltaXQgdGhlIHdhaXQKKyAgIHRpbWUgdXNpbmcgdGhlIDxvcHRpb24+VElNRU9V VDwvb3B0aW9uPiBvcHRpb24uCisgIDwvcGFyYT4KKworIDwvcmVmc2VjdDE+CisKKyA8cmVmc2Vj dDE+CisgIDx0aXRsZT5QYXJhbWV0ZXJzPC90aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorICAg PHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ TFNOPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIFNwZWNpZnkgdGhlIHRhcmdldCBsb2cgc2VxdWVuY2UgbnVtYmVyIHRvIHdhaXQgZm9yLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8 dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPlRJTUVPVVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPndhaXRfdGltZW91dDwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4K KyAgICAgPHBhcmE+CisgICAgICBMaW1pdCB0aGUgdGltZSBpbnRlcnZhbCB0byB3YWl0IGZvciB0 aGUgTFNOIHRvIGJlIHJlcGxheWVkLgorICAgICAgVGhlIHNwZWNpZmllZCA8cmVwbGFjZWFibGU+ d2FpdF90aW1lb3V0PC9yZXBsYWNlYWJsZT4gbXVzdCBiZSBhbiBpbnRlZ2VyCisgICAgICBhbmQg aXMgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRl bT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPlVO VElMIFRJTUVTVEFNUCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lPC9y ZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIExp bWl0IHRoZSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBMU04gdG8gYmUgcmVwbGF5ZWQuCisgICAgICBU aGUgc3BlY2lmaWVkIDxyZXBsYWNlYWJsZT53YWl0X3RpbWU8L3JlcGxhY2VhYmxlPiBtdXN0IGJl IHRpbWVzdGFtcC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3Rl bnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgor ICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgUnVuIDxsaXRlcmFsPldB SVQgRk9SPC9saXRlcmFsPiBmcm9tIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4sCisg ICBsaW1pdGluZyB3YWl0IHRpbWUgdG8gMTAwMDAgbWlsbGlzZWNvbmRzOgorCis8c2NyZWVuPgor V0FJVCBGT1IgTFNOICcwLzNGMDdBNkIxJyBUSU1FT1VUIDEwMDAwOworTk9USUNFOiAgTFNOIGlz IG5vdCByZWFjaGVkLiBUcnkgdG8gaW5jcmVhc2Ugd2FpdCB0aW1lLgorTFNOIHJlYWNoZWQKKy0t LS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCisgIDxwYXJh PgorICAgV2FpdCB1bnRpbCB0aGUgc3BlY2lmaWVkIDxhY3JvbnltPkxTTjwvYWNyb255bT4gaXMg cmVwbGF5ZWQ6Cis8c2NyZWVuPgorV0FJVCBGT1IgTFNOICcwLzNGMDdBNjExJzsKK0xTTiByZWFj aGVkCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorPC9zY3JlZW4+CisgIDwvcGFyYT4KKwor ICA8cGFyYT4KKyAgIExpbWl0IDxhY3JvbnltPkxTTjwvYWNyb255bT4gd2FpdCB0aW1lIHRvIDUw MDAwMCBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbmNlbCB0aGUgY29tbWFuZDoKKzxzY3JlZW4+ CitXQUlUIEZPUiBMU04gJzAvM0YwRkY3OTEnIFRJTUVPVVQgNTAwMDAwOworXkNDYW5jZWwgcmVx dWVzdCBzZW50CitOT1RJQ0U6ICBMU04gaXMgbm90IHJlYWNoZWQuIFRyeSB0byBpbmNyZWFzZSB3 YWl0IHRpbWUuCitFUlJPUjogIGNhbmNlbGluZyBzdGF0ZW1lbnQgZHVlIHRvIHVzZXIgcmVxdWVz dAorIExTTiByZWFjaGVkCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorPC9zY3JlZW4+Cis8 L3BhcmE+CisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkNvbXBhdGliaWxp dHk8L3RpdGxlPgorCisgIDxwYXJhPgorICAgVGhlcmUgaXMgbm8gPGNvbW1hbmQ+V0FJVCBGT1I8 L2NvbW1hbmQ+IHN0YXRlbWVudCBpbiB0aGUgU1FMCisgICBzdGFuZGFyZC4KKyAgPC9wYXJhPgor IDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZmVy ZW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sCmluZGV4IGNlZjA5ZGQzOGIu LjU4OGU5NmFhMTQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKQEAgLTIxNSw2ICsyMTUsNyBAQAogICAgJnVw ZGF0ZTsKICAgICZ2YWN1dW07CiAgICAmdmFsdWVzOworICAgJndhaXQ7CiAKICA8L3JlZmVyZW5j ZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDc2MjFmYzA1ZTIuLmE3NTMwNjVl OTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs dWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3Mu aCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv d2FpdC5oIgogI2luY2x1ZGUgImNvbW1vbi9jb250cm9sZGF0YV91dGlscy5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCkBAIC03MzA3LDYgKzczMDgsMTUg QEAgU3RhcnR1cFhMT0codm9pZCkKIAkJCQkJYnJlYWs7CiAJCQkJfQogCisJCQkJLyoKKwkJCQkg KiBJZiBsYXN0UmVwbGF5ZWRFbmRSZWNQdHIgd2FzIHVwZGF0ZWQsCisJCQkJICogc2V0IGxhdGNo ZXMgaW4gU0hNRU0gYXJyYXkuCisJCQkJICovCisJCQkJaWYgKFhMb2dDdGwtPmxhc3RSZXBsYXll ZEVuZFJlY1B0ciA+PSBHZXRNaW5XYWl0KCkpCisJCQkJeworCQkJCQlXYWl0U2V0TGF0Y2goWExv Z0N0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyKTsKKwkJCQl9CisKIAkJCQkvKiBFbHNlLCB0cnkg dG8gZmV0Y2ggdGhlIG5leHQgV0FMIHJlY29yZCAqLwogCQkJCXJlY29yZCA9IFJlYWRSZWNvcmQo eGxvZ3JlYWRlciwgTE9HLCBmYWxzZSk7CiAJCQl9IHdoaWxlIChyZWNvcmQgIT0gTlVMTCk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL01ha2VmaWxlCmluZGV4IGQ0ODE1ZDNjZTYuLjliMzEwOTI2YzEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L01ha2VmaWxlCkBAIC01Nyw2ICs1Nyw3IEBAIE9CSlMgPSBcCiAJdXNlci5vIFwKIAl2YWN1dW0u byBcCiAJdmFyaWFibGUubyBcCi0Jdmlldy5vCisJdmlldy5vIFwKKwl3YWl0Lm8KIAogaW5jbHVk ZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvd2FpdC5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmI4ZmE5ZTQ5MDMKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMKQEAgLTAsMCArMSw0MTMgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHdhaXQuYworICoJICBJbXBsZW1lbnRzIFdBSVQgLSBh IHV0aWxpdHkgY29tbWFuZCB0aGF0IGFsbG93cworICoJICB3YWl0aW5nIGZvciBMU04gdG8gaGF2 ZSBiZWVuIHJlcGxheWVkIG9uIHJlcGxpY2EuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjAsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjAsIFJlZ2VudHMgb2YgUG9zdGdyZXNQcm8KKyAqCisgKiBJ REVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRo Lmg+CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRl ICJmbWdyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3Mv eGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94 bG9nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv d2FpdC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJzdG9yYWdlL2JhY2tlbmRpZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisj aW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisj aW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQuaCIK KyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgor I2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL3NwaS5oIgor I2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKKworLyogQWRkIHRvIC8gZGVsZXRlIGZyb20g c2htZW0gYXJyYXkgKi8KK3N0YXRpYyB2b2lkIEFkZEV2ZW50KFhMb2dSZWNQdHIgdHJnX2xzbik7 CitzdGF0aWMgdm9pZCBEZWxldGVFdmVudCh2b2lkKTsKKworLyogU2hhcmVkIG1lbW9yeSBzdHJ1 Y3R1cmVzICovCit0eXBlZGVmIHN0cnVjdAoreworCVhMb2dSZWNQdHIJdHJnX2xzbjsKKwkvKgor CSAqIExlZnQgc3RydWN0IEJJRFN0YXRlIGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorCSAq IGEgcGxhbm5lZCBmdXR1cmUgcGF0Y2ggdGhhdCB3aWxsIGFsbG93IHdhaXRpbmcgZm9yIFhJRHMu CisJICovCit9IEJJRFN0YXRlOworCit0eXBlZGVmIHN0cnVjdAoreworCWludAkJCWJhY2tlbmRf bWF4aWQ7CisJWExvZ1JlY1B0cgltaW5fbHNuOworCXNsb2NrX3QJCW11dGV4OworCUJJRFN0YXRl CWV2ZW50X2FycltGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBHbG9iU3RhdGU7CisKK3N0YXRp YyB2b2xhdGlsZSBHbG9iU3RhdGUgKnN0YXRlOworCisvKiBBZGQgZXZlbnQgb2YgdGhlIGN1cnJl bnQgYmFja2VuZCB0byBzaG1lbSBhcnJheSAqLworc3RhdGljIHZvaWQKK0FkZEV2ZW50KFhMb2dS ZWNQdHIgdHJnX2xzbikKK3sKKwlTcGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJaWYg KHN0YXRlLT5iYWNrZW5kX21heGlkIDwgTXlCYWNrZW5kSWQpCisJCXN0YXRlLT5iYWNrZW5kX21h eGlkID0gTXlCYWNrZW5kSWQ7CisKKwlzdGF0ZS0+ZXZlbnRfYXJyW015QmFja2VuZElkXS50cmdf bHNuID0gdHJnX2xzbjsKKworCWlmICh0cmdfbHNuIDwgc3RhdGUtPm1pbl9sc24pCisJCXN0YXRl LT5taW5fbHNuID0gdHJnX2xzbjsKKwlTcGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7Cit9 CisKKy8qCisgKiBEZWxldGUgZXZlbnQgb2YgdGhlIGN1cnJlbnQgYmFja2VuZCBmcm9tIHRoZSBz aGFyZWQgYXJyYXkuCisgKgorICogVE9ETzogQ29uc2lkZXIgc3RhdGUgY2xlYW51cCBvbiBiYWNr ZW5kIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitEZWxldGVFdmVudCh2b2lkKQoreworCWlu dCBpOworCVhMb2dSZWNQdHIgdHJnX2xzbiA9IHN0YXRlLT5ldmVudF9hcnJbTXlCYWNrZW5kSWRd LnRyZ19sc247CisKKwlzdGF0ZS0+ZXZlbnRfYXJyW015QmFja2VuZElkXS50cmdfbHNuID0gSW52 YWxpZFhMb2dSZWNQdHI7CisKKwlTcGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJLyog VXBkYXRlIHN0YXRlLT5taW5fbHNuIGlmZiBpdCBpcyBuZXNzZXNhcnkgZm9yIGNob29zaW5nIG5l eHQgbWluX2xzbiAqLworCWlmIChzdGF0ZS0+bWluX2xzbiA9PSB0cmdfbHNuKQorCXsKKwkJc3Rh dGUtPm1pbl9sc24gPSBQR19VSU5UNjRfTUFYOworCQlmb3IgKGkgPSAyOyBpIDw9IHN0YXRlLT5i YWNrZW5kX21heGlkOyBpKyspCisJCQlpZiAoc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuICE9 IEludmFsaWRYTG9nUmVjUHRyICYmCisJCQkJc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuIDwg c3RhdGUtPm1pbl9sc24pCisJCQkJc3RhdGUtPm1pbl9sc24gPSBzdGF0ZS0+ZXZlbnRfYXJyW2ld LnRyZ19sc247CisJfQorCisJaWYgKHN0YXRlLT5iYWNrZW5kX21heGlkID09IE15QmFja2VuZElk KQorCQlmb3IgKGkgPSAoTXlCYWNrZW5kSWQpOyBpID49MjsgaS0tKQorCQkJaWYgKHN0YXRlLT5l dmVudF9hcnJbaV0udHJnX2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0cikKKwkJCXsKKwkJCQlzdGF0 ZS0+YmFja2VuZF9tYXhpZCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisKKwlTcGluTG9ja1JlbGVh c2UoJnN0YXRlLT5tdXRleCk7Cit9CisKKy8qIEdldCBzaXplIG9mIHNoYXJlZCBtZW1vcnkgZm9y IEdsb2JTdGF0ZSAqLworU2l6ZQorV2FpdFNobWVtU2l6ZSh2b2lkKQoreworCXJldHVybiBvZmZz ZXRvZihHbG9iU3RhdGUsIGV2ZW50X2FycikgKyBzaXplb2YoQklEU3RhdGUpICogKE1heEJhY2tl bmRzKzEpOworfQorCisvKiBJbml0IGFycmF5IG9mIGV2ZW50cyBpbiBzaGFyZWQgbWVtb3J5ICov Cit2b2lkCitXYWl0U2htZW1Jbml0KHZvaWQpCit7CisJYm9vbAlmb3VuZDsKKwl1aW50MzIJaTsK KworCXN0YXRlID0gKEdsb2JTdGF0ZSAqKSBTaG1lbUluaXRTdHJ1Y3QoInBnX3dhaXRfbHNuIiwK KwkJCQkJCQkJCQkgIFdhaXRTaG1lbVNpemUoKSwKKwkJCQkJCQkJCQkgICZmb3VuZCk7CisJaWYg KCFmb3VuZCkKKwl7CisJCVNwaW5Mb2NrSW5pdCgmc3RhdGUtPm11dGV4KTsKKworCQlmb3IgKGkg PSAwOyBpIDwgKE1heEJhY2tlbmRzKzEpOyBpKyspCisJCQlzdGF0ZS0+ZXZlbnRfYXJyW2ldLnRy Z19sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKworCQlzdGF0ZS0+YmFja2VuZF9tYXhpZCA9IDA7 CisJCXN0YXRlLT5taW5fbHNuID0gUEdfVUlOVDY0X01BWDsKKwl9Cit9CisKKy8qIFNldCBhbGwg bGF0Y2hlcyBpbiBzaGFyZWQgbWVtb3J5IHRvIHNpZ25hbCB0aGF0IG5ldyBMU04gaGFzIGJlZW4g cmVwbGF5ZWQgKi8KK3ZvaWQKK1dhaXRTZXRMYXRjaChYTG9nUmVjUHRyIGN1cl9sc24pCit7CisJ dWludDMyCQlpOworCWludCAJCWJhY2tlbmRfbWF4aWQ7CisJUEdQUk9DCSAgICpiYWNrZW5kOwor CisJU3BpbkxvY2tBY3F1aXJlKCZzdGF0ZS0+bXV0ZXgpOworCWJhY2tlbmRfbWF4aWQgPSBzdGF0 ZS0+YmFja2VuZF9tYXhpZDsKKwlTcGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7CisKKwlm b3IgKGkgPSAyOyBpIDw9IGJhY2tlbmRfbWF4aWQ7IGkrKykKKwl7CisJCWJhY2tlbmQgPSBCYWNr ZW5kSWRHZXRQcm9jKGkpOworCQlpZiAoc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuICE9IDAp CisJCXsKKwkJCWlmIChzdGF0ZS0+ZXZlbnRfYXJyW2ldLnRyZ19sc24gPD0gY3VyX2xzbikKKwkJ CQlTZXRMYXRjaCgmYmFja2VuZC0+cHJvY0xhdGNoKTsKKwkJfQorCX0KK30KKworLyogR2V0IG1p bmltYWwgTFNOIHRoYXQgd2lsbCBiZSBuZXh0ICovCitYTG9nUmVjUHRyCitHZXRNaW5XYWl0KHZv aWQpCit7CisJcmV0dXJuIHN0YXRlLT5taW5fbHNuOworfQorCisvKgorICogT24gV0FJVCB1c2Ug TXlMYXRjaCB0byB3YWl0IHRpbGwgTFNOIGlzIHJlcGxheWVkLAorICogcG9zdG1hc3RlciBkaWVz IG9yIHRpbWVvdXQgaGFwcGVucy4KKyAqLworaW50CitXYWl0VXRpbGl0eShYTG9nUmVjUHRyIGxz biwgY29uc3QgZmxvYXQ4IHNlY3MsIERlc3RSZWNlaXZlciAqZGVzdCkKK3sKKwlYTG9nUmVjUHRy CQl0cmdfbHNuID0gbHNuOworCVhMb2dSZWNQdHIJCWN1cl9sc24gPSBHZXRYTG9nUmVwbGF5UmVj UHRyKE5VTEwpOworCWludAkJCQlsYXRjaF9ldmVudHM7CisJZmxvYXQ4CQkJZW5kdGltZTsKKwlU dXBPdXRwdXRTdGF0ZSAqdHN0YXRlOworCVR1cGxlRGVzYwkJdHVwZGVzYzsKKwljaGFyCQkgICAq dmFsdWUgPSAiZiI7CisKKwlsYXRjaF9ldmVudHMgPSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VU IHwgV0xfRVhJVF9PTl9QTV9ERUFUSDsKKworCWlmIChsc24pCisJCUFkZEV2ZW50KHRyZ19sc24p OworCisjZGVmaW5lIEdldE5vd0Zsb2F0KCkJKChmbG9hdDgpIEdldEN1cnJlbnRUaW1lc3RhbXAo KSAvIDEwMDAwMDAuMCkKKwllbmR0aW1lID0gR2V0Tm93RmxvYXQoKSArIHNlY3M7CisKKwlmb3Ig KDs7KQorCXsKKwkJaW50CQkJcmM7CisJCWZsb2F0OAkJZGVsYXkgPSAwOworCQlsb25nCQlkZWxh eV9tczsKKworCQlpZiAoc2VjcyA+IDApCisJCQlkZWxheSA9IGVuZHRpbWUgLSBHZXROb3dGbG9h dCgpOworCQllbHNlIGlmIChzZWNzID09IDApIC8qIDEgbWludXRlIHRpbWVvdXQgdG8gY2hlY2sg Zm9yIEludGVydXB0cyAqLworCQkJZGVsYXkgPSAxMDsKKwkJZWxzZQorCQkJZGVsYXkgPSAxOwor CisJCWlmIChkZWxheSA+IDAuMCkKKwkJCWRlbGF5X21zID0gKGxvbmcpIGNlaWwoZGVsYXkgKiAx MDAwLjApOworCQllbHNlCisJCQlicmVhazsKKworCQkvKgorCQkgKiBJZiByZWNlaXZlZCBhbiBp bnRlcnJ1cHRpb24gZnJvbSBDSEVDS19GT1JfSU5URVJSVVBUUywKKwkJICogdGhlbiBkZWxldGUg dGhlIGN1cnJlbnQgZXZlbnQgZnJvbSBhcnJheS4KKwkJICovCisJCWlmIChJbnRlcnJ1cHRQZW5k aW5nKQorCQl7CisJCQlpZiAobHNuKQorCQkJCURlbGV0ZUV2ZW50KCk7CisJCQlQcm9jZXNzSW50 ZXJydXB0cygpOworCQl9CisKKwkJaWYgKGxzbiAmJiByYyAmIFdMX0xBVENIX1NFVCkKKwkJCWN1 cl9sc24gPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCisJCS8qIElmIExTTiBoYXMgYmVl biByZXBsYXllZCAqLworCQlpZiAobHNuICYmIHRyZ19sc24gPD0gY3VyX2xzbikKKwkJCWJyZWFr OworCisJCS8qIElmIHBvc3RtYXN0ZXIgZGllcywgZmluaXNoIGltbWVkaWF0ZWx5ICovCisJCWlm ICghUG9zdG1hc3RlcklzQWxpdmUoKSkKKwkJCWJyZWFrOworCisJCS8qIEEgbGl0dGxlIGhhY2sg c2ltaWxhciB0byBTbmFwc2hvdFJlc2V0WG1pbiB0byB3b3JrIG91dCBvZiBzbmFwc2hvdCAqLwor CQlNeVBnWGFjdC0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCQlyYyA9IFdhaXRMYXRj aChNeUxhdGNoLCBsYXRjaF9ldmVudHMsIGRlbGF5X21zLCAKKwkJCQkJICAgV0FJVF9FVkVOVF9D TElFTlRfUkVBRCk7CisKKwkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQkJUmVzZXRMYXRjaChN eUxhdGNoKTsKKwl9CisKKwlEZWxldGVFdmVudCgpOworCisJaWYgKGxzbiAmJiB0cmdfbHNuID4g Y3VyX2xzbikKKwkJZWxvZyhOT1RJQ0UsIkxTTiBpcyBub3QgcmVhY2hlZC4gVHJ5IHRvIGluY3Jl YXNlIHdhaXQgdGltZS4iKTsKKwllbHNlCisJCXZhbHVlID0gInQiOworCisJLyogTmVlZCBhIHR1 cGxlIGRlc2NyaXB0b3IgcmVwcmVzZW50aW5nIGEgc2luZ2xlIFRFWFQgY29sdW1uICovCisJdHVw ZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOworCVR1cGxlRGVzY0luaXRFbnRyeSh0 dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgIkxTTiByZWFjaGVkIiwgVEVYVE9JRCwgLTEsIDApOwor CS8qIFByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCisJdHN0YXRlID0gYmVnaW5f dHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOwor CisJLyogU2VuZCBpdCAqLworCWRvX3RleHRfb3V0cHV0X29uZWxpbmUodHN0YXRlLCB2YWx1ZSk7 CisJZW5kX3R1cF9vdXRwdXQodHN0YXRlKTsKKwlyZXR1cm4gc3RyY21wKHZhbHVlLCJ0Iik/MTow OworfQorCit2b2lkCitXYWl0VGltZVV0aWxpdHkoZmxvYXQ4IGRlbGF5KQoreworCWludAkJCQls YXRjaF9ldmVudHM7CisKKwlpZiAoZGVsYXkgPCAwKQorCQlyZXR1cm4gOworCisJbGF0Y2hfZXZl bnRzID0gV0xfVElNRU9VVCB8IFdMX1BPU1RNQVNURVJfREVBVEg7CisKKwlNeVBnWGFjdC0+eG1p biA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVdhaXRMYXRjaChNeUxhdGNoLCBsYXRjaF9ldmVu dHMsIChsb25nKSBjZWlsKGRlbGF5ICogMTAwMC4wKSwgV0FJVF9FVkVOVF9DTElFTlRfUkVBRCk7 CisJUmVzZXRMYXRjaChNeUxhdGNoKTsKK30KKworLyogR2V0IHVuaXZlcnNhbCB0aW1lICovCitm bG9hdDgKK1dhaXRUaW1lUmVzb2x2ZShDb25zdCAqdGltZSkKK3sKKwlpbnQJCQlyZXQ7CisJZmxv YXQ4CQl2YWw7CisKKwlPaWQJCXR5cGVzW10gPSB7IHRpbWUtPmNvbnN0dHlwZSB9OworCURhdHVt CXZhbHVlc1tdID0geyB0aW1lLT5jb25zdHZhbHVlIH07CisJY2hhcgludWxsc1tdID0geyAiICIg fTsKKworCURhdHVtIHJlc3VsdDsKKwlib29sIGlzbnVsbDsKKworCVNQSV9jb25uZWN0KCk7CisK KwlpZiAodGltZS0+Y29uc3R0eXBlID09IDEwODMpCisJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhf YXJncygic2VsZWN0IGV4dHJhY3QgKGVwb2NoIGZyb20gKCQxIC0gbm93KCk6OnRpbWUpKSIsCisJ CQkJCQkJCQkxLCB0eXBlcywgdmFsdWVzLCBudWxscywgdHJ1ZSwgMCk7CisJZWxzZSBpZiAodGlt ZS0+Y29uc3R0eXBlID09IDEyNjYpCisJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygic2Vs ZWN0IGV4dHJhY3QgKGVwb2NoIGZyb20gKHRpbWV6b25lKCdVVEMnLCQxKTo6dGltZSAtIHRpbWV6 b25lKCdVVEMnLCBub3coKTo6dGltZXR6KTo6dGltZSkpIiwKKwkJCQkJCQkJCTEsIHR5cGVzLCB2 YWx1ZXMsIG51bGxzLCB0cnVlLCAwKTsKKwllbHNlCisJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhf YXJncygic2VsZWN0IGV4dHJhY3QgKGVwb2NoIGZyb20gKCQxIC0gbm93KCkpKSIsCisJCQkJCQkJ CQkxLCB0eXBlcywgdmFsdWVzLCBudWxscywgdHJ1ZSwgMCk7CisKKwlBc3NlcnQocmV0ID49IDAp OworCXJlc3VsdCA9IFNQSV9nZXRiaW52YWwoU1BJX3R1cHRhYmxlLT52YWxzWzBdLAorCQkJCQkJ ICAgU1BJX3R1cHRhYmxlLT50dXBkZXNjLAorCQkJCQkJICAgMSwgJmlzbnVsbCk7CisKKwlBc3Nl cnQoIWlzbnVsbCk7CisJdmFsID0gRGF0dW1HZXRGbG9hdDgocmVzdWx0KTsKKworCWVsb2coSU5G TywgInRpbWU6ICVmIiwgdmFsKTsKKworCVNQSV9maW5pc2goKTsKKwlyZXR1cm4gdmFsOworfQor CitpbnQKK1dhaXRNYWluKFdhaXRTdG10ICpzdG10LCBEZXN0UmVjZWl2ZXIgKmRlc3QpCit7CisJ aW50CQkJCXJlcyA9IDA7CisJZmxvYXQ4CQkJdmFsID0gMDsKKwlYTG9nUmVjUHRyCQl0cmdfbHNu ID0gSW52YWxpZFhMb2dSZWNQdHI7CisJTGlzdENlbGwJICAgKmV2ZW50czsKKwlmbG9hdDgJCQl0 aW1lX3ZhbCA9IDA7CisJWExvZ1JlY1B0cgkJbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisKKwlp ZiAoc3RtdC0+c3RyYXRlZ3kgPT0gV0FJVF9GT1JfQU5ZKQorCXsKKwkJdGltZV92YWwgPSBEQkxf TUFYOworCQlsc24gPSBQR19VSU5UNjRfTUFYOworCX0KKworCS8qIEV4dHJhY3Qgb3B0aW9ucyBm cm9tIHRoZSBzdGF0ZW1lbnQgbm9kZSB0cmVlICovCisJZm9yZWFjaChldmVudHMsIHN0bXQtPmV2 ZW50cykKKwl7CisJCVdhaXRTdG10CSAgICpldmVudCA9IChXYWl0U3RtdCAqKSBsZmlyc3QoZXZl bnRzKTsKKworCQlpZiAoZXZlbnQtPmxzbikKKwkJeworCQkJaW50MzIJcmVzOworCQkJdHJnX2xz biA9IERhdHVtR2V0TFNOKAorCQkJCQkJRGlyZWN0RnVuY3Rpb25DYWxsMShwZ19sc25faW4sCisJ CQkJCQkJQ1N0cmluZ0dldERhdHVtKGV2ZW50LT5sc24pKSk7CisJCQlyZXMgPSBEYXR1bUdldFVJ bnQzMigKKwkJCQkJCURpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfbHNuX2NtcCwKKwkJCQkJCQlsc24s IHRyZ19sc24pKTsKKworCQkJLyogTmljZSBiZWhhdm91ciBvbiBMU04gZnJvbSBwYXN0ICovCisJ CQlpZiAoc3RtdC0+c3RyYXRlZ3kgPT0gV0FJVF9GT1JfQUxMKQorCQkJeworCQkJCWlmIChyZXMg PD0gMCkKKwkJCQl7CisJCQkJCWxzbiA9IHRyZ19sc247CisJCQkJCWlmIChldmVudC0+ZGVsYXkp CisJCQkJCQl0aW1lX3ZhbCA9IGV2ZW50LT5kZWxheSAvIDEwMDA7CisJCQkJfQorCQkJfQorCQkJ ZWxzZQorCQkJeworCQkJCWlmIChyZXMgPiAwKQorCQkJCXsKKwkJCQkJbHNuID0gdHJnX2xzbjsK KwkJCQkJaWYgKGV2ZW50LT5kZWxheSkKKwkJCQkJCXRpbWVfdmFsID0gZXZlbnQtPmRlbGF5IC8g MTAwMDsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChzdG10LT53YWl0X3R5cGUgPT0gV0FJVF9FVkVO VF9USU1FKQorCQkJCXN0bXQtPndhaXRfdHlwZSA9IFdBSVRfRVZFTlRfTUlYOworCQkJZWxzZSBp ZiAoc3RtdC0+d2FpdF90eXBlID09IFdBSVRfRVZFTlRfTk9ORSkKKwkJCQlzdG10LT53YWl0X3R5 cGUgPSBXQUlUX0VWRU5UX0xTTjsKKworCQl9CisKKwkJaWYgKGV2ZW50LT50aW1lKQorCQl7CisJ CQlDb25zdCAqdGltZSA9IChDb25zdCAqKSBldmVudC0+dGltZTsKKwkJCXZhbCA9IFdhaXRUaW1l UmVzb2x2ZSh0aW1lKTsKKworCQkJaWYgKHN0bXQtPndhaXRfdHlwZSA9PSBXQUlUX0VWRU5UX0xT TikKKwkJCQlzdG10LT53YWl0X3R5cGUgPSBXQUlUX0VWRU5UX01JWDsKKwkJCWVsc2UgaWYgKHN0 bXQtPndhaXRfdHlwZSA9PSBXQUlUX0VWRU5UX05PTkUpCisJCQkJc3RtdC0+d2FpdF90eXBlID0g V0FJVF9FVkVOVF9USU1FOworCisJCQkvKiBpZiB2YWwgPT0gMCA/PyAgKi8KKwkJCWlmIChzdG10 LT5zdHJhdGVneSA9PSBXQUlUX0ZPUl9BTEwpCisJCQl7CisJCQkJaWYgKHRpbWVfdmFsIDw9IHZh bCkKKwkJCQkJdGltZV92YWwgPSB2YWw7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKHRp bWVfdmFsID4gdmFsKQorCQkJCQl0aW1lX3ZhbCA9IHZhbDsKKwkJCX0KKwkJfQorCisJfQorCisJ aWYgKHN0bXQtPndhaXRfdHlwZSA9PSBXQUlUX0VWRU5UX1RJTUUpCisJeworCQlXYWl0VGltZVV0 aWxpdHkodGltZV92YWwgKiAxMDAwKTsKKwkJcmVzID0gMTsKKwl9CisJZWxzZQorCQlyZXMgPSBX YWl0VXRpbGl0eShsc24sIHRpbWVfdmFsLCBkZXN0KTsKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291 dGZ1bmNzLmMKaW5kZXggZTA4NGMzZjA2OS4uY2M4ZDIwYTkxYiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvbm9kZXMvb3V0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5j CkBAIC0yNzYwLDYgKzI3NjAsMTkgQEAgX291dERlZkVsZW0oU3RyaW5nSW5mbyBzdHIsIGNvbnN0 IERlZkVsZW0gKm5vZGUpCiAJV1JJVEVfTE9DQVRJT05fRklFTEQobG9jYXRpb24pOwogfQogCitz dGF0aWMgdm9pZAorX291dFdhaXRTdG10KFN0cmluZ0luZm8gc3RyLCBjb25zdCBXYWl0U3RtdCAq bm9kZSkKK3sKKwlXUklURV9OT0RFX1RZUEUoIldBSVRTVE1UIik7CisKKwlXUklURV9TVFJJTkdf RklFTEQobHNuKTsKKwlXUklURV9JTlRfRklFTEQoZGVsYXkpOworCVdSSVRFX05PREVfRklFTEQo ZXZlbnRzKTsKKwlXUklURV9OT0RFX0ZJRUxEKHRpbWUpOworCVdSSVRFX0VOVU1fRklFTEQod2Fp dF90eXBlLCBXYWl0VHlwZSk7CisJV1JJVEVfRU5VTV9GSUVMRChzdHJhdGVneSwgV2FpdEZvclN0 cmF0ZWd5KTsKK30KKwogc3RhdGljIHZvaWQKIF9vdXRUYWJsZUxpa2VDbGF1c2UoU3RyaW5nSW5m byBzdHIsIGNvbnN0IFRhYmxlTGlrZUNsYXVzZSAqbm9kZSkKIHsKQEAgLTQzMDUsNiArNDMxOCw5 IEBAIG91dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJCWNhc2UgVF9Q YXJ0aXRpb25SYW5nZURhdHVtOgogCQkJCV9vdXRQYXJ0aXRpb25SYW5nZURhdHVtKHN0ciwgb2Jq KTsKIAkJCQlicmVhazsKKwkJCWNhc2UgVF9XYWl0U3RtdDoKKwkJCQlfb3V0V2FpdFN0bXQoc3Ry LCBvYmopOworCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvYW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwppbmRl eCA2Njc2NDEyODQyLi40MTNmYWFkNjVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIv YW5hbHl6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKQEAgLTc4LDYgKzc4 LDcgQEAgc3RhdGljIFF1ZXJ5ICp0cmFuc2Zvcm1DcmVhdGVUYWJsZUFzU3RtdChQYXJzZVN0YXRl ICpwc3RhdGUsCiAJCQkJCQkJCQkJIENyZWF0ZVRhYmxlQXNTdG10ICpzdG10KTsKIHN0YXRpYyBR dWVyeSAqdHJhbnNmb3JtQ2FsbFN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQlDYWxs U3RtdCAqc3RtdCk7CitzdGF0aWMgUXVlcnkgKnRyYW5zZm9ybVdhaXRGb3JTdG10KFBhcnNlU3Rh dGUgKnBzdGF0ZSwgV2FpdFN0bXQgKnN0bXQpOwogc3RhdGljIHZvaWQgdHJhbnNmb3JtTG9ja2lu Z0NsYXVzZShQYXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpxcnksCiAJCQkJCQkJCSAgIExvY2tp bmdDbGF1c2UgKmxjLCBib29sIHB1c2hlZERvd24pOwogI2lmZGVmIFJBV19FWFBSRVNTSU9OX0NP VkVSQUdFX1RFU1QKQEAgLTI3OSw2ICsyODAsMTIgQEAgdHJhbnNmb3JtU3RtdChQYXJzZVN0YXRl ICpwc3RhdGUsIE5vZGUgKnBhcnNlVHJlZSkKIAkJCS8qCiAJCQkgKiBPcHRpbWl6YWJsZSBzdGF0 ZW1lbnRzCiAJCQkgKi8KKwkJY2FzZSBUX1RyYW5zYWN0aW9uU3RtdDoKKwkJCXsKKwkJCQlUcmFu c2FjdGlvblN0bXQgKnN0bXQgPSAoVHJhbnNhY3Rpb25TdG10ICopIHBhcnNlVHJlZTsKKwkJCQly ZXN1bHQgPSB0cmFuc2Zvcm1XYWl0Rm9yU3RtdChwc3RhdGUsIChXYWl0U3RtdCAqKSBzdG10LT53 YWl0KTsKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBUX0luc2VydFN0bXQ6CiAJCQlyZXN1bHQg PSB0cmFuc2Zvcm1JbnNlcnRTdG10KHBzdGF0ZSwgKEluc2VydFN0bXQgKikgcGFyc2VUcmVlKTsK IAkJCWJyZWFrOwpAQCAtMzI2LDYgKzMzMyw5IEBAIHRyYW5zZm9ybVN0bXQoUGFyc2VTdGF0ZSAq cHN0YXRlLCBOb2RlICpwYXJzZVRyZWUpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1DYWxsU3RtdChw c3RhdGUsCiAJCQkJCQkJCQkgICAoQ2FsbFN0bXQgKikgcGFyc2VUcmVlKTsKIAkJCWJyZWFrOwor CQljYXNlIFRfV2FpdFN0bXQ6CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1XYWl0Rm9yU3RtdChwc3Rh dGUsIChXYWl0U3RtdCAqKSBwYXJzZVRyZWUpOworCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIApA QCAtMjk4MSw2ICsyOTkxLDI2IEBAIGFwcGx5TG9ja2luZ0NsYXVzZShRdWVyeSAqcXJ5LCBJbmRl eCBydGluZGV4LAogCXFyeS0+cm93TWFya3MgPSBsYXBwZW5kKHFyeS0+cm93TWFya3MsIHJjKTsK IH0KIAorc3RhdGljIFF1ZXJ5ICoKK3RyYW5zZm9ybVdhaXRGb3JTdG10KFBhcnNlU3RhdGUgKnBz dGF0ZSwgV2FpdFN0bXQgKnN0bXQpCit7CisJUXVlcnkJCSAgICpyZXN1bHQ7CisJTGlzdENlbGwJ ICAgKmV2ZW50czsKKworCWlmIChzdG10KQorCQlmb3JlYWNoKGV2ZW50cywgc3RtdC0+ZXZlbnRz KQorCQl7CisJCQlXYWl0U3RtdAkgICAqZXZlbnQgPSAoV2FpdFN0bXQgKikgbGZpcnN0KGV2ZW50 cyk7CisJCQlldmVudC0+dGltZSA9IHRyYW5zZm9ybUV4cHIocHN0YXRlLCBldmVudC0+dGltZSwg RVhQUl9LSU5EX09USEVSKTsKKwkJfQorCisJcmVzdWx0ID0gbWFrZU5vZGUoUXVlcnkpOworCXJl c3VsdC0+Y29tbWFuZFR5cGUgPSBDTURfVVRJTElUWTsKKwlyZXN1bHQtPnV0aWxpdHlTdG10ID0g KE5vZGUgKikgc3RtdDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIC8qCiAgKiBDb3ZlcmFnZSB0 ZXN0aW5nIGZvciByYXdfZXhwcmVzc2lvbl90cmVlX3dhbGtlcigpLgogICoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55Cmlu ZGV4IDdlMzg0Zjk1NmMuLjAwNTA0YTFmYjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMjc2LDcgKzI3Niw3 IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBM aXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJCVNlY0xhYmVsU3RtdCBTZWxlY3RTdG10IFRy YW5zYWN0aW9uU3RtdCBUcnVuY2F0ZVN0bXQKIAkJVW5saXN0ZW5TdG10IFVwZGF0ZVN0bXQgVmFj dXVtU3RtdAogCQlWYXJpYWJsZVJlc2V0U3RtdCBWYXJpYWJsZVNldFN0bXQgVmFyaWFibGVTaG93 U3RtdAotCQlWaWV3U3RtdCBDaGVja1BvaW50U3RtdCBDcmVhdGVDb252ZXJzaW9uU3RtdAorCQlW aWV3U3RtdCBXYWl0U3RtdCBDaGVja1BvaW50U3RtdCBDcmVhdGVDb252ZXJzaW9uU3RtdAogCQlE ZWFsbG9jYXRlU3RtdCBQcmVwYXJlU3RtdCBFeGVjdXRlU3RtdAogCQlEcm9wT3duZWRTdG10IFJl YXNzaWduT3duZWRTdG10CiAJCUFsdGVyVFNDb25maWd1cmF0aW9uU3RtdCBBbHRlclRTRGljdGlv bmFyeVN0bXQKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZp ZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogJXR5 cGUgPGxpc3Q+CXJvdyBleHBsaWNpdF9yb3cgaW1wbGljaXRfcm93IHR5cGVfbGlzdCBhcnJheV9l eHByX2xpc3QKICV0eXBlIDxub2RlPgljYXNlX2V4cHIgY2FzZV9hcmcgd2hlbl9jbGF1c2UgY2Fz ZV9kZWZhdWx0CiAldHlwZSA8bGlzdD4Jd2hlbl9jbGF1c2VfbGlzdAotJXR5cGUgPGl2YWw+CXN1 Yl90eXBlIG9wdF9tYXRlcmlhbGl6ZWQKKyV0eXBlIDxpdmFsPglzdWJfdHlwZSB3YWl0X3N0cmF0 ZWd5IG9wdF9tYXRlcmlhbGl6ZWQKICV0eXBlIDx2YWx1ZT4JTnVtZXJpY09ubHkKICV0eXBlIDxs aXN0PglOdW1lcmljT25seV9saXN0CiAldHlwZSA8YWxpYXM+CWFsaWFzX2NsYXVzZSBvcHRfYWxp YXNfY2xhdXNlCkBAIC01OTEsNiArNTkxLDggQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVW aWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKICV0 eXBlIDxwYXJ0Ym91bmRzcGVjPiBQYXJ0aXRpb25Cb3VuZFNwZWMKICV0eXBlIDxsaXN0PgkJaGFz aF9wYXJ0Ym91bmQKICV0eXBlIDxkZWZlbHQ+CQloYXNoX3BhcnRib3VuZF9lbGVtCisldHlwZSA8 bGlzdD4JCXdhaXRfbGlzdAorJXR5cGUgPG5vZGU+CQlXYWl0RXZlbnQgd2FpdF9mb3IKIAogLyoK ICAqIE5vbi1rZXl3b3JkIHRva2VuIHR5cGVzLiAgVGhlc2UgYXJlIGhhcmQtd2lyZWQgaW50byB0 aGUgImZsZXgiIGxleGVyLgpAQCAtNjYwLDcgKzY2Miw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAKIAlMQUJFTCBMQU5HVUFHRSBMQVJHRV9QIExBU1RfUCBMQVRFUkFMX1AKIAlMRUFESU5H IExFQUtQUk9PRiBMRUFTVCBMRUZUIExFVkVMIExJS0UgTElNSVQgTElTVEVOIExPQUQgTE9DQUwK LQlMT0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgTE9DQVRJT04gTE9DS19QIExPQ0tFRCBMT0dHRUQK KwlMT0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgTE9DQVRJT04gTE9DS19QIExPQ0tFRCBMT0dHRUQg TFNOCiAKIAlNQVBQSU5HIE1BVENIIE1BVEVSSUFMSVpFRCBNQVhWQUxVRSBNRVRIT0QgTUlOVVRF X1AgTUlOVkFMVUUgTU9ERSBNT05USF9QIE1PVkUKIApAQCAtNjkwLDcgKzY5Miw3IEBAIHN0YXRp YyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlh c2VzLCBOb2RlICpxdWVyeSk7CiAJU1VCU0NSSVBUSU9OIFNVQlNUUklORyBTVVBQT1JUIFNZTU1F VFJJQyBTWVNJRCBTWVNURU1fUAogCiAJVEFCTEUgVEFCTEVTIFRBQkxFU0FNUExFIFRBQkxFU1BB Q0UgVEVNUCBURU1QTEFURSBURU1QT1JBUlkgVEVYVF9QIFRIRU4KLQlUSUVTIFRJTUUgVElNRVNU QU1QIFRPIFRSQUlMSU5HIFRSQU5TQUNUSU9OIFRSQU5TRk9STQorCVRJRVMgVElNRSBUSU1FT1VU IFRJTUVTVEFNUCBUTyBUUkFJTElORyBUUkFOU0FDVElPTiBUUkFOU0ZPUk0KIAlUUkVBVCBUUklH R0VSIFRSSU0gVFJVRV9QCiAJVFJVTkNBVEUgVFJVU1RFRCBUWVBFX1AgVFlQRVNfUAogCkBAIC03 MDAsNyArNzAyLDggQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIg KnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlWQUNVVU0gVkFMSUQgVkFM SURBVEUgVkFMSURBVE9SIFZBTFVFX1AgVkFMVUVTIFZBUkNIQVIgVkFSSUFESUMgVkFSWUlORwog CVZFUkJPU0UgVkVSU0lPTl9QIFZJRVcgVklFV1MgVk9MQVRJTEUKIAotCVdIRU4gV0hFUkUgV0hJ VEVTUEFDRV9QIFdJTkRPVyBXSVRIIFdJVEhJTiBXSVRIT1VUIFdPUksgV1JBUFBFUiBXUklURQor CVdBSVQgV0hFTiBXSEVSRSBXSElURVNQQUNFX1AgV0lORE9XCisJV0lUSCBXSVRISU4gV0lUSE9V VCBXT1JLIFdSQVBQRVIgV1JJVEUKIAogCVhNTF9QIFhNTEFUVFJJQlVURVMgWE1MQ09OQ0FUIFhN TEVMRU1FTlQgWE1MRVhJU1RTIFhNTEZPUkVTVCBYTUxOQU1FU1BBQ0VTCiAJWE1MUEFSU0UgWE1M UEkgWE1MUk9PVCBYTUxTRVJJQUxJWkUgWE1MVEFCTEUKQEAgLTk1NCw2ICs5NTcsNyBAQCBzdG10 IDoKIAkJCXwgVmFyaWFibGVTZXRTdG10CiAJCQl8IFZhcmlhYmxlU2hvd1N0bXQKIAkJCXwgVmll d1N0bXQKKwkJCXwgV2FpdFN0bXQKIAkJCXwgLypFTVBUWSovCiAJCQkJeyAkJCA9IE5VTEw7IH0K IAkJOwpAQCAtOTkzMCwxOCArOTkzNCwyMCBAQCBUcmFuc2FjdGlvblN0bXQ6CiAJCQkJCW4tPmNo YWluID0gJDM7CiAJCQkJCSQkID0gKE5vZGUgKiluOwogCQkJCX0KLQkJCXwgQkVHSU5fUCBvcHRf dHJhbnNhY3Rpb24gdHJhbnNhY3Rpb25fbW9kZV9saXN0X29yX2VtcHR5CisJCQl8IEJFR0lOX1Ag b3B0X3RyYW5zYWN0aW9uIHRyYW5zYWN0aW9uX21vZGVfbGlzdF9vcl9lbXB0eSB3YWl0X2Zvcgog CQkJCXsKIAkJCQkJVHJhbnNhY3Rpb25TdG10ICpuID0gbWFrZU5vZGUoVHJhbnNhY3Rpb25TdG10 KTsKIAkJCQkJbi0+a2luZCA9IFRSQU5TX1NUTVRfQkVHSU47CiAJCQkJCW4tPm9wdGlvbnMgPSAk MzsKKwkJCQkJbi0+d2FpdCA9ICQ0OwogCQkJCQkkJCA9IChOb2RlICopbjsKIAkJCQl9Ci0JCQl8 IFNUQVJUIFRSQU5TQUNUSU9OIHRyYW5zYWN0aW9uX21vZGVfbGlzdF9vcl9lbXB0eQorCQkJfCBT VEFSVCBUUkFOU0FDVElPTiB0cmFuc2FjdGlvbl9tb2RlX2xpc3Rfb3JfZW1wdHkgd2FpdF9mb3IK IAkJCQl7CiAJCQkJCVRyYW5zYWN0aW9uU3RtdCAqbiA9IG1ha2VOb2RlKFRyYW5zYWN0aW9uU3Rt dCk7CiAJCQkJCW4tPmtpbmQgPSBUUkFOU19TVE1UX1NUQVJUOwogCQkJCQluLT5vcHRpb25zID0g JDM7CisJCQkJCW4tPndhaXQgPSAkNDsKIAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJfQogCQkJ fCBDT01NSVQgb3B0X3RyYW5zYWN0aW9uIG9wdF90cmFuc2FjdGlvbl9jaGFpbgpAQCAtMTQxNDcs NiArMTQxNTMsOTIgQEAgeG1sX3Bhc3NpbmdfbWVjaDoKIAkJCXwgQlkgVkFMVUVfUAogCQk7CiAK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCQlRVUVSWToKKyAqCQkJCVdBSVQgRk9SIDxl dmVudD4gWywgPGV2ZW50PiAuLi5dCisgKgkJCQlldmVudCAgW29wdGlvbl06CisgKgkJCQkJTFNO IHZhbHVlCisgKgkJCQkJVElNRU9VVCB2YWx1ZQorICoJCQkJCVRJTUVTVEFNUCB0aW1lc3RhbXAK KyAqCQkJCW9wdGlvbjoKKyAqCQkJCQlUSU1FT1VUIGRlbGF5CisgKgkJCQkJVU5USUwgVElNRVNU QU1QIHRpbWVzdGFtcAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1dhaXRTdG10OgorCQkJ V0FJVCBGT1Igd2FpdF9zdHJhdGVneSB3YWl0X2xpc3QKKwkJCQl7CisJCQkJCVdhaXRTdG10ICpu ID0gbWFrZU5vZGUoV2FpdFN0bXQpOworCQkJCQluLT53YWl0X3R5cGUgPSBXQUlUX0VWRU5UX05P TkU7CisJCQkJCW4tPnN0cmF0ZWd5ID0gJDM7CisJCQkJCW4tPmV2ZW50cyA9ICQ0OworCQkJCQkk JCA9IChOb2RlICopbjsKKwkJCQl9CisJCQk7Cit3YWl0X2ZvcjoKKwkJCVdBSVQgRk9SIHdhaXRf c3RyYXRlZ3kgd2FpdF9saXN0CisJCQl7CisJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0 U3RtdCk7CisJCQkJbi0+d2FpdF90eXBlID0gV0FJVF9FVkVOVF9OT05FOworCQkJCW4tPnN0cmF0 ZWd5ID0gJDM7CisJCQkJbi0+ZXZlbnRzID0gJDQ7CisJCQkJJCQgPSAoTm9kZSAqKW47CisJCQl9 CisJCQl8IC8qIEVNUFRZICovCQl7ICQkID0gTlVMTDsgfTsKKword2FpdF9zdHJhdGVneToKKwkJ CUFMTAkJCQkJeyAkJCA9IFdBSVRfRk9SX0FMTDsgfQorCQkJfCBBTlkJCQkJeyAkJCA9IFdBSVRf Rk9SX0FOWTsgfQorCQkJfCAvKiBFTVBUWSAqLwkJeyAkJCA9IFdBSVRfRk9SX0FMTDsgfQorCQk7 CisKK3dhaXRfbGlzdDoKKwkJCVdhaXRFdmVudAkJCQkJeyAkJCA9IGxpc3RfbWFrZTEoJDEpOyB9 CisJCQl8IHdhaXRfbGlzdCAnLCcgV2FpdEV2ZW50CXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0K KwkJCXwgd2FpdF9saXN0IFdhaXRFdmVudAkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCQk7 CisKK1dhaXRFdmVudDoKKwkJCUxTTiBTY29uc3QKKwkJCQl7CisJCQkJCVdhaXRTdG10ICpuID0g bWFrZU5vZGUoV2FpdFN0bXQpOworCQkJCQluLT53YWl0X3R5cGUgPSBXQUlUX0VWRU5UX0xTTjsK KwkJCQkJbi0+bHNuID0gJDI7CisJCQkJCW4tPmRlbGF5ID0gMDsKKwkJCQkJbi0+dGltZSA9IE5V TEw7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KKworCQkJfCBMU04gU2NvbnN0IFRJTUVP VVQgSWNvbnN0CisJCQkJCXsKKwkJCQkJCVdhaXRTdG10ICpuID0gbWFrZU5vZGUoV2FpdFN0bXQp OworCQkJCQkJbi0+d2FpdF90eXBlID0gV0FJVF9FVkVOVF9NSVg7CisJCQkJCQluLT5sc24gPSAk MjsKKwkJCQkJCW4tPmRlbGF5ID0gJDQ7CisJCQkJCQluLT50aW1lID0gTlVMTDsKKwkJCQkJCSQk ID0gKE5vZGUgKiluOworCQkJCQl9CisJCQl8IExTTiBTY29uc3QgVU5USUwgQ29uc3REYXRldGlt ZSBTY29uc3QKKwkJCQkJeworCQkJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3RtdCk7 CisJCQkJCQluLT53YWl0X3R5cGUgPSBXQUlUX0VWRU5UX01JWDsKKwkJCQkJCW4tPmxzbiA9ICQy OworCQkJCQkJbi0+ZGVsYXkgPSAwOworCQkJCQkJbi0+dGltZSA9IG1ha2VTdHJpbmdDb25zdENh c3QoJDUsIEA1LCAkNCk7CisJCQkJCQkkJCA9IChOb2RlICopbjsKKwkJCQkJfQorCQkJfCBDb25z dERhdGV0aW1lIFNjb25zdAorCQkJCQl7CisJCQkJCQlXYWl0U3RtdCAqbiA9IG1ha2VOb2RlKFdh aXRTdG10KTsKKwkJCQkJCW4tPndhaXRfdHlwZSA9IFdBSVRfRVZFTlRfVElNRTsKKwkJCQkJCW4t PmxzbiA9IE5VTEw7CisJCQkJCQluLT5kZWxheSA9IDA7CisJCQkJCQluLT50aW1lID0gbWFrZVN0 cmluZ0NvbnN0Q2FzdCgkMiwgQDIsICQxKTsKKwkJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCQl9 CisJCQk7CisKIAogLyoKICAqIEFnZ3JlZ2F0ZSBkZWNvcmF0aW9uIGNsYXVzZXMKQEAgLTE1Mjkx LDYgKzE1MzgzLDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBMT0NLX1AKIAkJCXwgTE9D S0VECiAJCQl8IExPR0dFRAorCQkJfCBMU04KIAkJCXwgTUFQUElORwogCQkJfCBNQVRDSAogCQkJ fCBNQVRFUklBTElaRUQKQEAgLTE1NDEzLDYgKzE1NTA2LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3Jk OgogCQkJfCBURU1QT1JBUlkKIAkJCXwgVEVYVF9QCiAJCQl8IFRJRVMKKwkJCXwgVElNRU9VVAog CQkJfCBUUkFOU0FDVElPTgogCQkJfCBUUkFOU0ZPUk0KIAkJCXwgVFJJR0dFUgpAQCAtMTU0Mzks NiArMTU1MzMsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFZJRVcKIAkJCXwgVklFV1MK IAkJCXwgVk9MQVRJTEUKKwkJCXwgV0FJVAogCQkJfCBXSElURVNQQUNFX1AKIAkJCXwgV0lUSElO CiAJCQl8IFdJVEhPVVQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2ku YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCA0MjdiMGQ1OWNkLi44YzNk MTk2YTlhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVk ZSAiYWNjZXNzL3N1YnRyYW5zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNlLmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1h c3Rlci9hdXRvdmFjdXVtLmgiCkBAIC0xNDcsNiArMTQ4LDcgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5 QW5kU2VtYXBob3Jlcyh2b2lkKQogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgQlRyZWVTaG1lbVNp emUoKSk7CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTeW5jU2NhblNobWVtU2l6ZSgpKTsKIAkJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIEFzeW5jU2htZW1TaXplKCkpOworCQlzaXplID0gYWRkX3Np emUoc2l6ZSwgV2FpdFNobWVtU2l6ZSgpKTsKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIAkJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIFNobWVtQmFja2VuZEFycmF5U2l6ZSgpKTsKICNlbmRpZgpAQCAtMjY0 LDYgKzI2NiwxMSBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJU3lu Y1NjYW5TaG1lbUluaXQoKTsKIAlBc3luY1NobWVtSW5pdCgpOwogCisJLyoKKwkgKiBJbml0IGFy cmF5IG9mIExhdGNoZXMgaW4gU0hNRU0gZm9yIFdhaXQKKwkgKi8KKwlXYWl0U2htZW1Jbml0KCk7 CisKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90 Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGIxZjdmNmUy ZDAuLmY5YTI3NmU4NGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisr KyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSA8ZmxvYXQu aD4KIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3Mv cmVsb3B0aW9ucy5oIgpAQCAtNTcsNiArNTgsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3VzZXIu aCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNsdWRlICJjb21tYW5kcy92aWV3 LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgInBhcnNlci9wYXJzZV91dGlsY21kLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9i Z3dyaXRlci5oIgpAQCAtNzAsNiArNzIsOSBAQAogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisj aW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgor I2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgogCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBj b250cm9sIGluIFByb2Nlc3NVdGlsaXR5KCkgKi8KIFByb2Nlc3NVdGlsaXR5X2hvb2tfdHlwZSBQ cm9jZXNzVXRpbGl0eV9ob29rID0gTlVMTDsKQEAgLTI2OCw2ICsyNzMsNyBAQCBDbGFzc2lmeVV0 aWxpdHlDb21tYW5kQXNSZWFkT25seShOb2RlICpwYXJzZXRyZWUpCiAJCWNhc2UgVF9Mb2FkU3Rt dDoKIAkJY2FzZSBUX1ByZXBhcmVTdG10OgogCQljYXNlIFRfVW5saXN0ZW5TdG10OgorCQljYXNl IFRfV2FpdFN0bXQ6CiAJCWNhc2UgVF9WYXJpYWJsZVNldFN0bXQ6CiAJCQl7CiAJCQkJLyoKQEAg LTU5MSw2ICs1OTcsMTMgQEAgc3RhbmRhcmRfUHJvY2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBz dG10LAogCQkJCQljYXNlIFRSQU5TX1NUTVRfU1RBUlQ6CiAJCQkJCQl7CiAJCQkJCQkJTGlzdENl bGwgICAqbGM7CisJCQkJCQkJaW50CQkJcmVzID0gLTE7CisJCQkJCQkJV2FpdFN0bXQgICAqd2Fp dHN0bXQgPSAoV2FpdFN0bXQgKikgc3RtdC0+d2FpdDsKKworCQkJCQkJCWlmIChzdG10LT53YWl0 KQorCQkJCQkJCQlyZXMgPSBXYWl0TWFpbih3YWl0c3RtdCwgZGVzdCk7CisJCQkJCQkJaWYgKHJl cyA9PSAwKQorCQkJCQkJCQlicmVhazsKIAogCQkJCQkJCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygp OwogCQkJCQkJCWZvcmVhY2gobGMsIHN0bXQtPm9wdGlvbnMpCkBAIC0xMDYyLDYgKzEwNzUsMTMg QEAgc3RhbmRhcmRfUHJvY2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10LAogCQkJCWJyZWFr OwogCQkJfQogCisJCWNhc2UgVF9XYWl0U3RtdDoKKwkJCXsKKwkJCQlXYWl0U3RtdCAqc3RtdCA9 IChXYWl0U3RtdCAqKSBwYXJzZXRyZWU7CisJCQkJV2FpdE1haW4oc3RtdCwgZGVzdCk7CisJCQkJ YnJlYWs7CisJCQl9CisKIAkJZGVmYXVsdDoKIAkJCS8qIEFsbCBvdGhlciBzdGF0ZW1lbnQgdHlw ZXMgaGF2ZSBldmVudCB0cmlnZ2VyIHN1cHBvcnQgKi8KIAkJCVByb2Nlc3NVdGlsaXR5U2xvdyhw c3RhdGUsIHBzdG10LCBxdWVyeVN0cmluZywKQEAgLTI3MTgsNiArMjczOCwxMCBAQCBDcmVhdGVD b21tYW5kVGFnKE5vZGUgKnBhcnNldHJlZSkKIAkJCXRhZyA9IENNRFRBR19OT1RJRlk7CiAJCQli cmVhazsKIAorCQljYXNlIFRfV2FpdFN0bXQ6CisJCQl0YWcgPSBDTURUQUdfV0FJVDsKKwkJCWJy ZWFrOworCiAJCWNhc2UgVF9MaXN0ZW5TdG10OgogCQkJdGFnID0gQ01EVEFHX0xJU1RFTjsKIAkJ CWJyZWFrOwpAQCAtMzM1Nyw2ICszMzgxLDEwIEBAIEdldENvbW1hbmRMb2dMZXZlbChOb2RlICpw YXJzZXRyZWUpCiAJCQlsZXYgPSBMT0dTVE1UX0FMTDsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9X YWl0U3RtdDoKKwkJCWxldiA9IExPR1NUTVRfQUxMOworCQkJYnJlYWs7CisKIAkJY2FzZSBUX0xp c3RlblN0bXQ6CiAJCQlsZXYgPSBMT0dTVE1UX0FMTDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjExMTE1YjlkYWIKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgKQEAgLTAsMCArMSwyNyBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogd2FpdC5oCisgKgkgIHByb3RvdHlwZXMgZm9y IGNvbW1hbmRzL3dhaXQuYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE2 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAyMDE2LCBSZWdlbnRzIG9mIFBvc3RncmVzUFJPCisgKgorICogc3JjL2luY2x1ZGUv Y29tbWFuZHMvd2FpdC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgV0FJ VF9ICisjZGVmaW5lIFdBSVRfSAorI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNv cC9kZXN0LmgiCisKK2V4dGVybiBpbnQgV2FpdFV0aWxpdHkoWExvZ1JlY1B0ciBsc24sIGNvbnN0 IGZsb2F0OCBkZWxheSwgRGVzdFJlY2VpdmVyICpkZXN0KTsKK2V4dGVybiB2b2lkIFdhaXRUaW1l VXRpbGl0eShmbG9hdDggZGVsYXkpOworZXh0ZXJuIFNpemUgV2FpdFNobWVtU2l6ZSh2b2lkKTsK K2V4dGVybiB2b2lkIFdhaXRTaG1lbUluaXQodm9pZCk7CitleHRlcm4gdm9pZCBXYWl0U2V0TGF0 Y2goWExvZ1JlY1B0ciBjdXJfbHNuKTsKK2V4dGVybiBYTG9nUmVjUHRyIEdldE1pbldhaXQodm9p ZCk7CitleHRlcm4gZmxvYXQ4IFdhaXRUaW1lUmVzb2x2ZShDb25zdCAqdGltZSk7CitleHRlcm4g aW50IFdhaXRNYWluKFdhaXRTdG10ICpzdG10LCBEZXN0UmVjZWl2ZXIgKmRlc3QpOworCisjZW5k aWYgICAvKiBXQUlUX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IDhhNzZhZmU4Y2MuLjM0OGRlNzZjNWYg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvbm9kZXMuaApAQCAtNDg4LDYgKzQ4OCw3IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJ VF9Ecm9wUmVwbGljYXRpb25TbG90Q21kLAogCVRfU3RhcnRSZXBsaWNhdGlvbkNtZCwKIAlUX1Rp bWVMaW5lSGlzdG9yeUNtZCwKKwlUX1dhaXRTdG10LAogCVRfU1FMQ21kLAogCiAJLyoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaAppbmRleCAyMDM5YjQyNDQ5Li4wNDI5ZWViYjVmIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFy c2Vub2Rlcy5oCkBAIC0zMDU0LDYgKzMwNTQsNyBAQCB0eXBlZGVmIHN0cnVjdCBUcmFuc2FjdGlv blN0bXQKIAljaGFyCSAgICpzYXZlcG9pbnRfbmFtZTsgLyogZm9yIHNhdmVwb2ludCBjb21tYW5k cyAqLwogCWNoYXIJICAgKmdpZDsJCQkvKiBmb3IgdHdvLXBoYXNlLWNvbW1pdCByZWxhdGVkIGNv bW1hbmRzICovCiAJYm9vbAkJY2hhaW47CQkJLyogQU5EIENIQUlOIG9wdGlvbiAqLworCU5vZGUJ CSp3YWl0OwkJCS8qIFdhaXQgZm9yIGV2ZW50IG5vZGUgb3IgTlVMTCAqLwogfSBUcmFuc2FjdGlv blN0bXQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM1NjMsNCArMzU2NCwzNCBA QCB0eXBlZGVmIHN0cnVjdCBEcm9wU3Vic2NyaXB0aW9uU3RtdAogCURyb3BCZWhhdmlvciBiZWhh dmlvcjsJCS8qIFJFU1RSSUNUIG9yIENBU0NBREUgYmVoYXZpb3IgKi8KIH0gRHJvcFN1YnNjcmlw dGlvblN0bXQ7CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlXYWl0IFN0YXRlbWVu dAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3R5cGVkZWYgZW51bSBXYWl0VHlw ZQoreworCVdBSVRfRVZFTlRfTk9ORSA9IDAsCisJV0FJVF9FVkVOVF9MU04sCisJV0FJVF9FVkVO VF9USU1FLAorCVdBSVRfRVZFTlRfTUlYCit9IFdhaXRUeXBlOworCit0eXBlZGVmIGVudW0gV2Fp dEZvclN0cmF0ZWd5Cit7CisJV0FJVF9GT1JfQU5ZID0gMCwKKwlXQUlUX0ZPUl9BTEwKK30gV2Fp dEZvclN0cmF0ZWd5OworCit0eXBlZGVmIHN0cnVjdCBXYWl0U3RtdAoreworCU5vZGVUYWcJCQl0 eXBlOworCVdhaXRUeXBlCQl3YWl0X3R5cGU7CisJV2FpdEZvclN0cmF0ZWd5CXN0cmF0ZWd5Owor CUxpc3QJCSAgICpldmVudHM7CQkvKiBvcHRpb24gKi8KKwljaGFyCQkgICAqbHNuOwkJLyogVGFy Z2V0IExTTiB0byB3YWl0IGZvciAqLworCWludAkJCQlkZWxheTsJCS8qIFRpbWVvdXQgd2hlbiB3 YWl0aW5nIGZvciBMU04sIGluIG1zZWMgKi8KKwlOb2RlCQkgICAqdGltZTsJCS8qIFdhaXQgZm9y IHRpbWVzdGFtcCAqLworfSBXYWl0U3RtdDsKKwogI2VuZGlmCQkJCQkJCS8qIFBBUlNFTk9ERVNf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1 ZGUvcGFyc2VyL2t3bGlzdC5oCmluZGV4IGIxMTg0YzJkMTUuLmRkMjJlMzU4YjkgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIv a3dsaXN0LmgKQEAgLTI0Myw2ICsyNDMsNyBAQCBQR19LRVlXT1JEKCJsb2NhdGlvbiIsIExPQ0FU SU9OLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJsb2NrIiwgTE9DS19QLCBVTlJF U0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJsb2NrZWQiLCBMT0NLRUQsIFVOUkVTRVJWRURf S0VZV09SRCkKIFBHX0tFWVdPUkQoImxvZ2dlZCIsIExPR0dFRCwgVU5SRVNFUlZFRF9LRVlXT1JE KQorUEdfS0VZV09SRCgibHNuIiwgTFNOLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JE KCJtYXBwaW5nIiwgTUFQUElORywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWF0 Y2giLCBNQVRDSCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWF0ZXJpYWxpemVk IiwgTUFURVJJQUxJWkVELCBVTlJFU0VSVkVEX0tFWVdPUkQpCkBAIC00MDQsNiArNDA1LDcgQEAg UEdfS0VZV09SRCgidGV4dCIsIFRFWFRfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09S RCgidGhlbiIsIFRIRU4sIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ0aWVzIiwgVElF UywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidGltZSIsIFRJTUUsIENPTF9OQU1F X0tFWVdPUkQpCitQR19LRVlXT1JEKCJ0aW1lb3V0IiwgVElNRU9VVCwgVU5SRVNFUlZFRF9LRVlX T1JEKQogUEdfS0VZV09SRCgidGltZXN0YW1wIiwgVElNRVNUQU1QLCBDT0xfTkFNRV9LRVlXT1JE KQogUEdfS0VZV09SRCgidG8iLCBUTywgUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRy YWlsaW5nIiwgVFJBSUxJTkcsIFJFU0VSVkVEX0tFWVdPUkQpCkBAIC00NDQsNiArNDQ2LDcgQEAg UEdfS0VZV09SRCgidmVyc2lvbiIsIFZFUlNJT05fUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdf S0VZV09SRCgidmlldyIsIFZJRVcsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZp ZXdzIiwgVklFV1MsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZvbGF0aWxlIiwg Vk9MQVRJTEUsIFVOUkVTRVJWRURfS0VZV09SRCkKK1BHX0tFWVdPUkQoIndhaXQiLCBXQUlULCBV TlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ3aGVuIiwgV0hFTiwgUkVTRVJWRURfS0VZ V09SRCkKIFBHX0tFWVdPUkQoIndoZXJlIiwgV0hFUkUsIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19L RVlXT1JEKCJ3aGl0ZXNwYWNlIiwgV0hJVEVTUEFDRV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQpCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xpc3QuaCBiL3NyYy9pbmNsdWRlL3Rj b3AvY21kdGFnbGlzdC5oCmluZGV4IDhlZjBmNTVlNzQuLjQzMGJiNWM3MTcgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvY21k dGFnbGlzdC5oCkBAIC0yMTYsMyArMjE2LDQgQEAgUEdfQ01EVEFHKENNRFRBR19UUlVOQ0FURV9U QUJMRSwgIlRSVU5DQVRFIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIFBHX0NNRFRBRyhD TURUQUdfVU5MSVNURU4sICJVTkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCiBQR19DTURU QUcoQ01EVEFHX1VQREFURSwgIlVQREFURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKIFBHX0NNRFRB RyhDTURUQUdfVkFDVVVNLCAiVkFDVVVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfV0FJVCwgIldBSVQgRk9SIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE4X3dhaXRmb3IucGwgYi9zcmMvdGVzdC9yZWNvdmVy eS90LzAxOF93YWl0Zm9yLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjY4MTc0MzFlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOF93 YWl0Zm9yLnBsCkBAIC0wLDAgKzEsNjQgQEAKKyMgQ2hlY2tzIFdBSVQgRk9SCit1c2Ugc3RyaWN0 OwordXNlIHdhcm5pbmdzOworCit1c2UgUG9zdGdyZXNOb2RlOwordXNlIFRlc3RMaWI7Cit1c2Ug VGVzdDo6TW9yZSB0ZXN0cyA9PiAxOworCisjIEluaXRpYWxpemUgbWFzdGVyIG5vZGUKK215ICRu b2RlX21hc3RlciA9IGdldF9uZXdfbm9kZSgnbWFzdGVyJyk7Ciskbm9kZV9tYXN0ZXItPmluaXQo YWxsb3dzX3N0cmVhbWluZyA9PiAxKTsKKyRub2RlX21hc3Rlci0+c3RhcnQ7CisKKyMgQW5kIHNv bWUgY29udGVudAorJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFRBQkxFIHRhYl9pbnQgQVMgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgQVMgYSIpOwor CisjIFRha2UgYmFja3VwCitteSAkYmFja3VwX25hbWUgPSAnbXlfYmFja3VwJzsKKyRub2RlX21h c3Rlci0+YmFja3VwKCRiYWNrdXBfbmFtZSk7CisKKyMgQ3JlYXRlIHN0cmVhbWluZyBzdGFuZGJ5 IGZyb20gYmFja3VwCitteSAkbm9kZV9zdGFuZGJ5ID0gZ2V0X25ld19ub2RlKCdzdGFuZGJ5Jyk7 CitteSAkZGVsYXkgICAgICAgID0gNDsKKyRub2RlX3N0YW5kYnktPmluaXRfZnJvbV9iYWNrdXAo JG5vZGVfbWFzdGVyLCAkYmFja3VwX25hbWUsCisJaGFzX3N0cmVhbWluZyA9PiAxKTsKKyRub2Rl X3N0YW5kYnktPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKK3JlY292ZXJ5 X21pbl9hcHBseV9kZWxheSA9ICcke2RlbGF5fXMnCispKTsKKyRub2RlX3N0YW5kYnktPnN0YXJ0 OworCisjIE1ha2UgbmV3IGNvbnRlbnQgb24gbWFzdGVyIGFuZCBjaGVjayBpdHMgcHJlc2VuY2Ug aW4gc3RhbmRieSBkZXBlbmRpbmcKKyMgb24gdGhlIGRlbGF5IGFwcGxpZWQgYWJvdmUuIEJlZm9y ZSBkb2luZyB0aGUgaW5zZXJ0aW9uLCBnZXQgdGhlCisjIGN1cnJlbnQgdGltZXN0YW1wIHRoYXQg d2lsbCBiZSB1c2VkIGFzIGEgY29tcGFyaXNvbiBiYXNlLiBFdmVuIG9uIHNsb3cKKyMgbWFjaGlu ZXMsIHRoaXMgYWxsb3dzIHRvIGhhdmUgYSBwcmVkaWN0YWJsZSBiZWhhdmlvciB3aGVuIGNvbXBh cmluZyB0aGUKKyMgZGVsYXkgYmV0d2VlbiBkYXRhIGluc2VydGlvbiBtb21lbnQgb24gbWFzdGVy IGFuZCByZXBsYXkgdGltZSBvbiBzdGFuZGJ5LgorbXkgJG1hc3Rlcl9pbnNlcnRfdGltZSA9IHRp bWUoKTsKKyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRP IHRhYl9pbnQgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKKworIyBOb3cgd2Fp dCBmb3IgcmVwbGF5IHRvIGNvbXBsZXRlIG9uIHN0YW5kYnkuIFdlJ3JlIGRvbmUgd2FpdGluZyB3 aGVuIHRoZQorIyBzdGFuZGJ5IGhhcyByZXBsYXllZCB1cCB0byB0aGUgcHJldmlvdXNseSBzYXZl ZCBtYXN0ZXIgTFNOLgorbXkgJHVudGlsX2xzbiA9CisgICRub2RlX21hc3Rlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKworJG5vZGVfbWFz dGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFiX2ludCBWQUxVRVMg KGdlbmVyYXRlX3NlcmllcygyMSwgMzApKSIpOworCisjIENoZWNrIHRoYXQgd2FpdGxzbiBpcyBh YmxlIHRvIHNldHVwIGluZmluaXRlIHdhaXRpbmcgbG9vcCBhbmQgZXhpdAorIyBpdCB3aXRob3V0 IHRpbWVvdXRzLgorJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIldB SVQgRk9SIExTTiAnJHVudGlsX2xzbiciLCAndCcpCisgIG9yIGRpZSAic3RhbmRieSBuZXZlciBj YXVnaHQgdXAiOworCisjIENoZWNrIHRoYXQgd2FpdGxzbiBjYW4gcmV0dXJuIHJlc3VsdCBpbW1l ZGlhdGVseSB3aXRoIE5PV0FJVC4KKyRub2RlX3N0YW5kYnktPnBvbGxfcXVlcnlfdW50aWwoJ3Bv c3RncmVzJywKKyAgICAiV0FJVCBGT1IgTFNOICckdW50aWxfbHNuJyBUSU1FT1VUIDEiLCAndCcp CisgIG9yIGRpZSAic3RhbmRieSBuZXZlciBjYXVnaHQgdXAiOworCisjIFRoaXMgdGVzdCBpcyBz dWNjZXNzZnVsIGlmIGFuZCBvbmx5IGlmIHRoZSBMU04gaGFzIGJlZW4gYXBwbGllZCB3aXRoIGF0 IGxlYXN0CisjIHRoZSBjb25maWd1cmVkIGFwcGx5IGRlbGF5LgorbXkgJHRpbWVfd2FpdGVkID0g dGltZSgpIC0gJG1hc3Rlcl9pbnNlcnRfdGltZTsKK29rKCR0aW1lX3dhaXRlZCA+PSAkZGVsYXks InN0YW5kYnkgYXBwbGllcyBXQUwgb25seSBhZnRlciByZXBsaWNhdGlvbiBkZWxheSIpOwo= --=_46507ca583841f997a5ceaff77991426--