From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17774 invoked by alias); 29 Jun 2009 19:01:18 -0000 Received: (qmail 16130 invoked by uid 22791); 29 Jun 2009 19:01:10 -0000 X-SWARE-Spam-Status: No, hits=2.1 required=5.0 tests=BAYES_50,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 29 Jun 2009 19:01:00 +0000 Received: from zps76.corp.google.com (zps76.corp.google.com [172.25.146.76]) by smtp-out.google.com with ESMTP id n5TJ0weI004008 for ; Mon, 29 Jun 2009 12:00:58 -0700 Received: from ey-out-2122.google.com (eyd9.prod.google.com [10.208.4.9]) by zps76.corp.google.com with ESMTP id n5TJ0shu024286 for ; Mon, 29 Jun 2009 12:00:55 -0700 Received: by ey-out-2122.google.com with SMTP id 9so329204eyd.11 for ; Mon, 29 Jun 2009 12:00:54 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.30.81 with SMTP id j59mr2149020wea.50.1246302054341; Mon, 29 Jun 2009 12:00:54 -0700 (PDT) Date: Mon, 29 Jun 2009 19:01:00 -0000 Message-ID: <7e6c8d660906291200r164b3c7l95376866122e86fb@mail.gmail.com> Subject: [RFA] Rewrite data cache and use for stack access. From: Jacob Potter To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0016e6dd89f53b5dc1046d814fa7 X-System-Of-Record: true Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-06/txt/msg00842.txt.bz2 --0016e6dd89f53b5dc1046d814fa7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 5046 Hi - Here's a patch to clean up the data cache code and add an option to use it for all stack accesses. It's in two parts, first the rewrite of the cache itself, and then the changes to other code to use it. The first part of the patch makes the cache set-associative and write-through. As originally implemented, the cache had writeback capability; data could be written to the cache and marked as not having been written to the target yet. However, all the code paths through the cache actually wrote to the target immediately after each write command to the cache, so there was no performance advantage and significant complexity to deal with writeback. Making the cache set-associative rather than fully-associative allows the size to be increased significantly without performance penalties. Previously, a cache lookup cost O(n) as the size of the cache. Figuring out when to cache is tough.There are plenty of situations where it's clearly not OK to cache data on GDB's end, most importantly memory mapped I/O. However, we know that if a given access is known to be on the stack, it's not going to lie in I/O or otherwise special memory and it's somewhat less likely to even be shared among threads. Building a backtrace requires a lot of small accesses all referring to the stack, so caching them accelerates remote debugging significantly without affecting correctness. The old "remotecache" flag didn't actually do anything. Caching was enabled by adding a cacheable memory region. This patch leaves that functionality unchanged, but makes the remotecache option explicitly deprecated and nonfunctional. It's still left around to avoid breaking scripts, though. There's a new "stackcache" flag which enables the cache for memory accesses known to be for the stack. It currently defaults to off, but can always be safely set to on; hopefully the default can be changed over at some point in the future. - Jacob 2009-06-26=A0 Jacob Potter=A0 =A0=A0=A0=A0=A0=A0=A0 * dcache.c (DCACHE_SET_SIZE, DCACHE_SET_SIZE_POWER, D= CACHE_ASSOC, =A0=A0=A0=A0=A0=A0=A0 BLOCKNUM): Define. =A0=A0=A0=A0=A0=A0=A0 (DCACHE_SIZE, ENTRY_INVALID, ENTRY_VALID, ENTRY_DIRTY= ): Delete. =A0=A0=A0=A0=A0=A0=A0 (struct dcache_block): Clean up; remove "anydirty" fi= eld =A0=A0=A0=A0=A0=A0=A0 (struct dcache_set): New struct. =A0=A0=A0=A0=A0=A0=A0 (struct dcache_struct): Redefine as a set (array) of = blocks, rather =A0=A0=A0=A0=A0=A0=A0 than a linked list. =A0=A0=A0=A0=A0=A0=A0 (dcache_writeback): Remove declaration. =A0=A0=A0=A0=A0=A0=A0 (dcache_enabled_p): Delete; replaced by the two flags= below. =A0=A0=A0=A0=A0=A0=A0 (dcache_stack_enabled_p, remotecache_enabled_p): New = flags. =A0=A0=A0=A0=A0=A0=A0 (show_dcache_enabled_p): Clarify status message. =A0=A0=A0=A0=A0=A0=A0 (show_remotecache_enabled_p): New function. =A0=A0=A0=A0=A0=A0=A0 (dcache_invalidate, dcache_hit): Rewrite for new cach= e structure. =A0=A0=A0=A0=A0=A0=A0 (dcache_write_line): Delete. =A0=A0=A0=A0=A0=A0=A0 (dcache_read_line, dcache_alloc): Rewrite for new cac= he structure. =A0=A0=A0=A0=A0=A0=A0 (dcache_write_line): Delete. =A0=A0=A0=A0=A0=A0=A0 (dcache_peek_byte): Clean up; remove "invalid" state = check. =A0=A0=A0=A0=A0=A0=A0 (dcache_poke_byte): Rewrite for new cache structure; = clarify comment. =A0=A0=A0=A0=A0=A0=A0 (dcache_init, dcache_free): Rewrite for new cache str= ucture. =A0=A0=A0=A0=A0=A0=A0 (dcache_xfer_memory): Rewrite for new write-through c= ache structure. =A0=A0=A0=A0=A0=A0=A0 (dcache_update, dcache_print_line): New functions. =A0=A0=A0=A0=A0=A0=A0 (dcache_info): Rewrite for new cache structure. =A0=A0=A0=A0=A0=A0=A0 (_initialize_dcache): Rewrite for new cache structure. =A0=A0=A0=A0=A0=A0=A0 * dcache.h (dcache_xfer_memory): Update definition. =A0=A0=A0=A0=A0=A0=A0 (dcache_update, dcache_stack_enabled_p): Declare. =A0=A0=A0=A0=A0=A0=A0 * target.c (memory_xfer_partial): Update calls to dca= che_xfer_memory. =A0=A0=A0=A0=A0=A0=A0 * corefile.c, gdbcore.h (read_stack): New helper for = stack reads. =A0=A0=A0=A0=A0=A0=A0 * dwarf2loc.c (dwarf2_evaluate_loc_desc): Mark value = as stack. =A0=A0=A0=A0=A0=A0=A0 * frame-unwind.c (frame_unwind_got_memory): Mark valu= e as stack. =A0=A0=A0=A0=A0=A0=A0 * target.c, target.h: Add new value to enum target_ob= ject, =A0=A0=A0=A0=A0=A0=A0 TARGET_OBJECT_STACK_MEMORY, for stack memory accesses= ; pass a =A0=A0=A0=A0=A0=A0=A0 target_object to memory_xfer_partial(). Handle stack = accesses via =A0=A0=A0=A0=A0=A0=A0 dcache_xfer_memory(). =A0=A0=A0=A0=A0=A0=A0 (target_read_stack): New helper for stack reads. =A0=A0=A0=A0=A0=A0=A0 * valops.c (get_value_at): Refactor common code from = value_at() and =A0=A0=A0=A0=A0=A0=A0 value_at_lazy() into new helper function; add value_a= t_lazy_stack(). =A0=A0=A0=A0=A0=A0=A0 * value.c, value.h (struct value): Add new field "sta= ck" to mark values on =A0=A0=A0=A0=A0=A0=A0 the stack. =A0=A0=A0=A0=A0=A0=A0 (value_fetch_lazy): Correctly fetch values marked as = stack. =A0=A0=A0=A0=A0=A0=A0 (value_stack, set_value_stack): New accessors. --0016e6dd89f53b5dc1046d814fa7 Content-Type: text/plain; charset=US-ASCII; name="part1-dcache-rewrite.patch.txt" Content-Disposition: attachment; filename="part1-dcache-rewrite.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fwjjn2hw0 Content-length: 34974 ZGlmZiAtLWdpdCBhL2dkYi9kY2FjaGUuYyBiL2dkYi9kY2FjaGUuYwppbmRl eCBhZTVhNDc5Li4zOTY5ZmEzIDEwMDY0NAotLS0gYS9nZGIvZGNhY2hlLmMK KysrIGIvZ2RiL2RjYWNoZS5jCkBAIC0zNCw0NyArMzQsMjUgQEAKICAgIGNv bWVzIGZyb20gdGhlIGFjdHVhbCBjYWNoaW5nIG1lY2hhbmlzbSwgYnV0IHRo ZSBtYWpvciBnYWluIGlzIGluCiAgICB0aGUgcmVkdWN0aW9uIG9mIHRoZSBy ZW1vdGUgcHJvdG9jb2wgb3ZlcmhlYWQ7IGluc3RlYWQgb2YgcmVhZGluZwog ICAgb3Igd3JpdGluZyBhIGxhcmdlIGFyZWEgb2YgbWVtb3J5IGluIDQgYnl0 ZSByZXF1ZXN0cywgdGhlIGNhY2hlCi0gICBidW5kbGVzIHVwIHRoZSByZXF1 ZXN0cyBpbnRvIDMyIGJ5dGUgKGFjdHVhbGx5IExJTkVfU0laRSkgY2h1bmtz LgotICAgUmVkdWNpbmcgdGhlIG92ZXJoZWFkIHRvIGFuIGVpZ2h0aCBvZiB3 aGF0IGl0IHdhcy4gIFRoaXMgaXMgdmVyeQotICAgb2J2aW91cyB3aGVuIGRp c3BsYXlpbmcgYSBsYXJnZSBhbW91bnQgb2YgZGF0YSwKLQotICAgZWcsIHgv MjAweCAwIAotCi0gICBjYWNoaW5nICAgICB8ICAgbm8gICAgeWVzIAotICAg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgIGZpcnN0IHRpbWUg IHwgICA0IHNlYyAgMiBzZWMgaW1wcm92ZW1lbnQgZHVlIHRvIGNodW5raW5n IAotICAgc2Vjb25kIHRpbWUgfCAgIDQgc2VjICAwIHNlYyBpbXByb3ZlbWVu dCBkdWUgdG8gY2FjaGluZwotCi0gICBUaGUgY2FjaGUgc3RydWN0dXJlIGlz IHVudXN1YWwsIHdlIGtlZXAgYSBudW1iZXIgb2YgY2FjaGUgYmxvY2tzCi0g ICAoRENBQ0hFX1NJWkUpIGFuZCBlYWNoIG9uZSBjYWNoZXMgYSBMSU5FX1NJ WkVlZCBhcmVhIG9mIG1lbW9yeS4KLSAgIFdpdGhpbiBlYWNoIGxpbmUgd2Ug cmVtZW1iZXIgdGhlIGFkZHJlc3Mgb2YgdGhlIGxpbmUgKGFsd2F5cyBhCi0g ICBtdWx0aXBsZSBvZiB0aGUgTElORV9TSVpFKSBhbmQgYSB2ZWN0b3Igb2Yg Ynl0ZXMgb3ZlciB0aGUgcmFuZ2UuCi0gICBUaGVyZSdzIGFub3RoZXIgdmVj dG9yIHdoaWNoIGNvbnRhaW5zIHRoZSBzdGF0ZSBvZiB0aGUgYnl0ZXMuCi0K LSAgIEVOVFJZX0lOVkFMSUQgbWVhbnMgdGhhdCB0aGUgYnl0ZSBpcyBqdXN0 IHBsYWluIHdyb25nLCBhbmQgaGFzIG5vCi0gICBjb3JyZXNwb25kZW5jZSB3 aXRoIGFueXRoaW5nIGVsc2UgKGFzIGl0IHdvdWxkIHdoZW4gdGhlIGNhY2hl IGlzCi0gICB0dXJuZWQgb24sIGJ1dCBub3RoaW5nIGhhcyBiZWVuIGRvbmUg dG8gaXQpLgotCi0gICBFTlRSWV9ESVJUWSBtZWFucyB0aGF0IHRoZSBieXRl IGhhcyBzb21lIGRhdGEgaW4gaXQgd2hpY2ggc2hvdWxkIGJlCi0gICB3cml0 dGVuIG91dCB0byB0aGUgcmVtb3RlIHRhcmdldCBvbmUgZGF5LCBidXQgY29u dGFpbnMgY29ycmVjdAotICAgZGF0YS4KLQotICAgRU5UUllfVkFMSUQgbWVh bnMgdGhhdCB0aGUgZGF0YSBpcyB0aGUgc2FtZSBpbiB0aGUgY2FjaGUgYXMg aXQgaXMgaW4KLSAgIHJlbW90ZSBtZW1vcnkuCi0KLQotICAgVGhlIEVOVFJZ X0RJUlRZIHN0YXRlIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIEdEQiBsaWtlcyB0 byB3cml0ZSBsYXJnZQotICAgbHVtcHMgb2YgbWVtb3J5IGluIHNtYWxsIGJp dHMuICBJZiB0aGUgY2FjaGluZyBtZWNoYW5pc20gZGlkbid0Ci0gICBtYWlu dGFpbiB0aGUgRElSVFkgaW5mb3JtYXRpb24sIHRoZW4gc29tZXRoaW5nIGxp a2UgYSB0d28gYnl0ZQotICAgd3JpdGUgd291bGQgbWVhbiB0aGF0IHRoZSBl bnRpcmUgY2FjaGUgbGluZSB3b3VsZCBoYXZlIHRvIGJlIHJlYWQsCi0gICB0 aGUgdHdvIGJ5dGVzIG1vZGlmaWVkIGFuZCB0aGVuIHdyaXR0ZW4gb3V0IGFn YWluLiAgVGhlIGFsdGVybmF0aXZlCi0gICB3b3VsZCBiZSB0byBub3QgcmVh ZCBpbiB0aGUgY2FjaGUgbGluZSBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCBq dXN0Ci0gICB3cml0ZSB0aGUgdHdvIGJ5dGVzIGRpcmVjdGx5IGludG8gdGFy Z2V0IG1lbW9yeS4gIFRoZSB0cm91YmxlIHdpdGgKLSAgIHRoYXQgaXMgdGhh dCBpdCByZWFsbHkgbmFpbHMgcGVyZm9ybWFuY2UsIGJlY2F1c2Ugb2YgdGhl IHJlbW90ZQotICAgcHJvdG9jb2wgb3ZlcmhlYWQuICBUaGlzIHdheSwgYWxs IHRob3NlIGxpdHRsZSB3cml0ZXMgYXJlIGJ1bmRsZWQKLSAgIHVwIGludG8g YW4gZW50aXJlIGNhY2hlIGxpbmUgd3JpdGUgaW4gb25lIGdvLCB3aXRob3V0 IGhhdmluZyB0bwotICAgcmVhZCB0aGUgY2FjaGUgbGluZSBpbiB0aGUgZmly c3QgcGxhY2UuCi0gKi8KKyAgIGJ1bmRsZXMgdXAgdGhlIHJlcXVlc3RzIGlu dG8gTElORV9TSVpFIGNodW5rcywgcmVkdWNpbmcgb3ZlcmhlYWQKKyAgIHNp Z25pZmljYW50bHkuICBUaGlzIGlzIG1vc3QgdXNlZnVsIHdoZW4gYWNjZXNz aW5nIGEgbGFyZ2UgYW1vdW50CisgICBvZiBkYXRhLCBzdWNoIGFzIHdoZW4g cGVyZm9ybWluZyBhIGJhY2t0cmFjZS4KKworICAgVGhlIGNhY2hlIGlzIGVz c2VudGlhbGx5IGEgRENBQ0hFX0FTU09DLXdheSBzZXQtYXNzb2NpYXRpdmUg Y2FjaGUuICBFYWNoCisgICBlYWNoIGJsb2NrIGNhY2hlcyBhIExJTkVfU0la RSBhcmVhIG9mIG1lbW9yeS4gIFd0aWhpbiBlYWNoIGxpbmUgd2UgcmVtZW1i ZXIKKyAgIHRoZSBhZGRyZXNzIG9mIHRoZSBsaW5lICh3aGljaCBtdXN0IGJl IGEgbXVsdGlwbGUgb2YgTElORV9TSVpFKSBhbmQgdGhlCisgICBhY3R1YWwg ZGF0YSBibG9jay4KKworICAgTGluZXMgYXJlIG9ubHkgYWxsb2NhdGVkIGFz IG5lZWRlZCwgc28gRENBQ0hFX0FTU09DIHJlYWxseSBzdG9yZXMgdGhlCisg ICAqbWF4aW11bSogbnVtYmVyIG9mIGxpbmVzIGFzc29jaWF0ZWQgd2l0aCBh IGdpdmVuIGFkZHJlc3MuICBUaGlzIGluY3JlYXNlcworICAgYWxsb2NhdGlv biBjb3VudCBhbmQgQ1BVIHVzZSBzbGlnaHRseSwgZm9yIHRoZSBzYWtlIG9m IG5vdCBhbGxvY2F0aW5nCisgICB0aGUgbWF4aW11bSBjYWNoZSBzaXplIHVu bGVzcyBuZWNlc3NhcnkuCisKKyAgIEF0IHByZXNlbnQsIHRoZSBjYWNoZSBp cyB3cml0ZS10aHJvdWdoIHJhdGhlciB0aGFuIHdyaXRlYmFjazogYXMgc29v bgorICAgYXMgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBjYWNoZSwgaXQgaXMg YWxzbyBpbW1lZGlhdGVseSB3cml0dGVuIHRvCisgICB0aGUgdGFyZ2V0LiAg VGhlcmVmb3JlLCBjYWNoZSBsaW5lcyBhcmUgbmV2ZXIgImRpcnR5Ii4gIFdo ZXRoZXIgYSBnaXZlbgorICAgbGluZSBpcyB2YWxpZCBvciBub3QgZGVwZW5k cyBvbiB3aGVyZSBpdCBpcyBzdG9yZWQgaW4gdGhlIGRjYWNoZV9zdHJ1Y3Q7 CisgICB0aGVyZSBpcyBubyBwZXItYmxvY2sgdmFsaWQgZmxhZy4gICovCiAK IC8qIE5PVEU6IEludGVyYWN0aW9uIG9mIGRjYWNoZSBhbmQgbWVtb3J5IHJl Z2lvbiBhdHRyaWJ1dGVzCiAKQEAgLTg5LDIyICs2NywyMyBAQAogICAgdGhl IGxhc3QgYml0IG9mIHRoZSAudGV4dCBzZWdtZW50IGFuZCB0aGUgZmlyc3Qg Yml0IG9mIHRoZSAuZGF0YQogICAgc2VnbWVudCBmYWxsIHdpdGhpbiB0aGUg c2FtZSBkY2FjaGUgcGFnZSB3aXRoIGEgcm8vY2FjaGVhYmxlIG1lbW9yeQog ICAgcmVnaW9uIGRlZmluZWQgZm9yIHRoZSAudGV4dCBzZWdtZW50IGFuZCBh IHJ3L25vbi1jYWNoZWFibGUgbWVtb3J5Ci0gICByZWdpb24gZGVmaW5lZCBm b3IgdGhlIC5kYXRhIHNlZ21lbnQuICovCisgICByZWdpb24gZGVmaW5lZCBm b3IgdGhlIC5kYXRhIHNlZ21lbnQuICAqLwogCi0vKiBUaGlzIHZhbHVlIHJl Z3VsYXRlcyB0aGUgbnVtYmVyIG9mIGNhY2hlIGJsb2NrcyBzdG9yZWQuCi0g ICBTbWFsbGVyIHZhbHVlcyByZWR1Y2UgdGhlIHRpbWUgc3BlbnQgc2VhcmNo aW5nIGZvciBhIGNhY2hlCi0gICBsaW5lLCBhbmQgcmVkdWNlIG1lbW9yeSBy ZXF1aXJlbWVudHMsIGJ1dCBpbmNyZWFzZSB0aGUgcmlzawotICAgb2YgYSBs aW5lIG5vdCBiZWluZyBpbiBtZW1vcnkgKi8KKy8qIFRoZSBudW1iZXIgb2Yg Y2FjaGUgYmxvY2tzIHN0b3JlZCBwZXIgc2V0LiAgVGhlIHRvdGFsIHNpemUK KyAgIG9mIHRoZSBjYWNoZSBpcyBlcXVhbCB0byBEQ0FDSEVfU0VUX1NJWkUg KiBEQ0FDSEVfQVNTT0MgKiBMSU5FX1NJWkUuICAqLworI2RlZmluZSBEQ0FD SEVfU0VUX1NJWkVfUE9XRVIgNgorI2RlZmluZSBEQ0FDSEVfU0VUX1NJWkUg KDEgPDwgRENBQ0hFX1NFVF9TSVpFX1BPV0VSKQogCi0jZGVmaW5lIERDQUNI RV9TSVpFIDY0Ci0KLS8qIFRoaXMgdmFsdWUgcmVndWxhdGVzIHRoZSBzaXpl IG9mIGEgY2FjaGUgbGluZS4gIFNtYWxsZXIgdmFsdWVzCi0gICByZWR1Y2Ug dGhlIHRpbWUgdGFrZW4gdG8gcmVhZCBhIHNpbmdsZSBieXRlLCBidXQgcmVk dWNlIG92ZXJhbGwKLSAgIHRocm91Z2hwdXQuICAqLwotCi0jZGVmaW5lIExJ TkVfU0laRV9QT1dFUiAoNSkKKy8qIFRoZSBzaXplIG9mIGEgY2FjaGUgbGlu ZS4gIFNtYWxsZXIgdmFsdWVzIHJlZHVjZSB0aGUgdGltZSB0YWtlbiB0bwor ICAgcmVhZCBhIHNpbmdsZSBieXRlIGFuZCBtYWtlIHRoZSBjYWNoZSBtb3Jl IGdyYW51bGFyLCBidXQgaW5jcmVhc2UKKyAgIG92ZXJoZWFkIGFuZCByZWR1 Y2UgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgdGhlIGNhY2hlIGFzIGEgcHJlZmV0 Y2hlci4gICovCisjZGVmaW5lIExJTkVfU0laRV9QT1dFUiA2CiAjZGVmaW5l IExJTkVfU0laRSAoMSA8PCBMSU5FX1NJWkVfUE9XRVIpCiAKKy8qIFRoZSBh c3NvY2lhdGl2aXR5IG9mIHRoZSBjYWNoZTogaG93IG1hbnkgcGxhY2VzIGEg Z2l2ZW4gYWRkcmVzcworICAgY291bGQgYmUgc3RvcmVkIGluLiAgKi8KKyNk ZWZpbmUgRENBQ0hFX0FTU09DIDQKKwogLyogRWFjaCBjYWNoZSBibG9jayBo b2xkcyBMSU5FX1NJWkUgYnl0ZXMgb2YgZGF0YQogICAgc3RhcnRpbmcgYXQg YSBtdWx0aXBsZS1vZi1MSU5FX1NJWkUgYWRkcmVzcy4gICovCiAKQEAgLTEx Miw1OSArOTEsNDEgQEAKICNkZWZpbmUgWEZPUk0oeCkgCSgoeCkgJiBMSU5F X1NJWkVfTUFTSykKICNkZWZpbmUgTUFTSyh4KSAgICAgICAgICgoeCkgJiB+ TElORV9TSVpFX01BU0spCiAKLQotI2RlZmluZSBFTlRSWV9JTlZBTElEIDAg LyogZGF0YSBhdCB0aGlzIGJ5dGUgaXMgd3JvbmcgKi8KLSNkZWZpbmUgRU5U UllfRElSVFkgICAxIC8qIGRhdGEgYXQgdGhpcyBieXRlIG5lZWRzIHRvIGJl IHdyaXR0ZW4gYmFjayAqLwotI2RlZmluZSBFTlRSWV9WQUxJRCAgIDIgLyog ZGF0YSBhdCB0aGlzIGJ5dGUgaXMgc2FtZSBhcyBpbiBtZW1vcnkgKi8KLQot LyogRm9yIGNhY2hlIHN0YXRlIGRpc3BsYXkgYnkgImluZm8gZGNhY2hlIi4K LSAgIFRoZSBsZXR0ZXJzIEksRCxWIG1hcCB0bwotICAgSSA9IEVOVFJZX0lO VkFMSUQKLSAgIEQgPSBFTlRSWV9ESVJUWQotICAgViA9IEVOVFJZX1ZBTElE ICAqLwotc3RhdGljIGNvbnN0IGNoYXIgc3RhdGVfY2hhcnNbM10gPSB7ICdJ JywgJ0QnLCAnVicgfTsKKyNkZWZpbmUgQkxPQ0tOVU0oeCkJKCgoeCkgPj4g TElORV9TSVpFX1BPV0VSKSAmIChEQ0FDSEVfU0VUX1NJWkUgLSAxKSkKIAog c3RydWN0IGRjYWNoZV9ibG9jawotICB7Ci0gICAgc3RydWN0IGRjYWNoZV9i bG9jayAqcDsJLyogbmV4dCBpbiBsaXN0ICovCi0gICAgQ09SRV9BRERSIGFk ZHI7CQkvKiBBZGRyZXNzIGZvciB3aGljaCBkYXRhIGlzIHJlY29yZGVkLiAg Ki8KLSAgICBnZGJfYnl0ZSBkYXRhW0xJTkVfU0laRV07CS8qIGJ5dGVzIGF0 IGdpdmVuIGFkZHJlc3MgKi8KLSAgICB1bnNpZ25lZCBjaGFyIHN0YXRlW0xJ TkVfU0laRV07CS8qIHdoYXQgc3RhdGUgdGhlIGRhdGEgaXMgaW4gKi8KK3sK KyAgc3RydWN0IGRjYWNoZV9ibG9jayAqbmV4dDsJLyogbmV4dCBpbiBsaXN0 ICovCisgIENPUkVfQUREUiBhZGRyOwkJLyogYWRkcmVzcyBvZiBkYXRhICov CisgIGdkYl9ieXRlIGRhdGFbTElORV9TSVpFXTsJLyogYnl0ZXMgYXQgZ2l2 ZW4gYWRkcmVzcyAqLwogCi0gICAgLyogd2hldGhlciBhbnl0aGluZyBpbiBz dGF0ZSBpcyBkaXJ0eSAtIHVzZWQgdG8gc3BlZWQgdXAgdGhlIAotICAgICAg IGRpcnR5IHNjYW4uICovCi0gICAgaW50IGFueWRpcnR5OworICBpbnQgcmVm czsKK307CiAKLSAgICBpbnQgcmVmczsKLSAgfTsKIAorLyogVGhlIGNhY2hl IGlzIHN0b3JlZCBhcyBEQ0FDSEVfU0VUX1NJWkUgc2VwYXJhdGUgbGlua2Vk IGxpc3RzIG9mIGNhY2hlCisgICBibG9ja3M7IGVhY2ggbGlzdCBpcyBubyBs b25nZXIgdGhhbiBEQ0FDSEVfQVNTT0MuICBUaHVzLCBvbmx5CisgICBEQ0FD SEVfQVNTT0MgYmxvY2tzIG5lZWQgdG8gYmUgc2VhcmNoZWQgdG8gZmluZCB0 aGUgY29ycmVjdCBvbmUuCiAKLS8qIEZJWE1FOiBkY2FjaGVfc3RydWN0IHVz ZWQgdG8gaGF2ZSBhIGNhY2hlX2hhc19zdHVmZiBmaWVsZCB0aGF0IHdhcwot ICAgdXNlZCB0byByZWNvcmQgd2hldGhlciB0aGUgY2FjaGUgaGFkIGJlZW4g YWNjZXNzZWQuICBUaGlzIHdhcyB1c2VkCi0gICB0byBpbnZhbGlkYXRlIHRo ZSBjYWNoZSB3aGVuZXZlciBjYWNoaW5nIHdhcyAocmUtKWVuYWJsZWQgKGlm IHRoZQotICAgY2FjaGUgd2FzIGRpc2FibGVkIGFuZCBsYXRlciByZS1lbmFi bGVkLCBpdCBjb3VsZCBjb250YWluIHN0YWxlCi0gICBkYXRhKS4gIFRoaXMg d2FzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgY2FjaGUgaXMgd3JpdGUgdGhy b3VnaCBhbmQKLSAgIHRoZSBjb2RlIHRoYXQgZW5hYmxlcywgZGlzYWJsZXMs IGFuZCBkZWxldGVzIG1lbW9yeSByZWdpb24gYWxsCi0gICBpbnZhbGlkYXRl IHRoZSBjYWNoZS4KKyAgIEludmFsaWRhdGVkIGJsb2NrcyBhcmUgbmV2ZXIg YWN0dWFsbHkgZnJlZSgpZCBleGNlcHQgYnkgZGNhY2hlX2ZyZWUoKTsKKyAg IHRoZXkgYXJlIGtlcHQgYXJvdW5kIGluIHRoZSBmcmVlIGxpc3QgZm9yIHJl dXNlLiAgKi8KIAotICAgVGhpcyBpcyBvdmVya2lsbCwgc2luY2UgaXQgYWxz byBpbnZhbGlkYXRlcyBjYWNoZSBsaW5lcyBmcm9tCi0gICB1bnJlbGF0ZWQg cmVnaW9ucy4gIE9uZSB3YXkgdGhpcyBjb3VsZCBiZSBhZGRyZXNzZWQgYnkg YWRkaW5nIGEKLSAgIG5ldyBmdW5jdGlvbiB0aGF0IHRha2VzIGFuIGFkZHJl c3MgYW5kIGEgbGVuZ3RoIGFuZCBpbnZhbGlkYXRlcwotICAgb25seSB0aG9z ZSBjYWNoZSBsaW5lcyB0aGF0IG1hdGNoLiAqLworc3RydWN0IGRjYWNoZV9z ZXQKK3sKKyAgc3RydWN0IGRjYWNoZV9ibG9jayAqaGVhZDsKKyAgc3RydWN0 IGRjYWNoZV9ibG9jayAqdGFpbDsKKyAgaW50IG51bTsJCQkvKiBOdW1iZXIg b2YgbGluZXMgY3VycmVudGx5IHN0b3JlZC4gICovCit9OwogCiBzdHJ1Y3Qg ZGNhY2hlX3N0cnVjdAotICB7Ci0gICAgLyogZnJlZSBsaXN0ICovCi0gICAg c3RydWN0IGRjYWNoZV9ibG9jayAqZnJlZV9oZWFkOwotICAgIHN0cnVjdCBk Y2FjaGVfYmxvY2sgKmZyZWVfdGFpbDsKLQotICAgIC8qIGluIHVzZSBsaXN0 ICovCi0gICAgc3RydWN0IGRjYWNoZV9ibG9jayAqdmFsaWRfaGVhZDsKLSAg ICBzdHJ1Y3QgZGNhY2hlX2Jsb2NrICp2YWxpZF90YWlsOworeworICAvKiBi bG9ja3MgKi8KKyAgc3RydWN0IGRjYWNoZV9zZXQgYmxvY2tzW0RDQUNIRV9T RVRfU0laRV07CiAKLSAgICAvKiBUaGUgY2FjaGUgaXRzZWxmLiAqLwotICAg IHN0cnVjdCBkY2FjaGVfYmxvY2sgKnRoZV9jYWNoZTsKLSAgfTsKKyAgLyog ZnJlZSBsaXN0ICovCisgIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmZyZWVfaGVh ZDsKKyAgc3RydWN0IGRjYWNoZV9ibG9jayAqZnJlZV90YWlsOworfTsKIAog c3RhdGljIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRjYWNoZV9oaXQgKERDQUNI RSAqZGNhY2hlLCBDT1JFX0FERFIgYWRkcik7CiAKQEAgLTE3NCwyMSArMTM1 LDI3IEBAIHN0YXRpYyBpbnQgZGNhY2hlX3JlYWRfbGluZSAoRENBQ0hFICpk Y2FjaGUsIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRiKTsKIAogc3RhdGljIHN0 cnVjdCBkY2FjaGVfYmxvY2sgKmRjYWNoZV9hbGxvYyAoRENBQ0hFICpkY2Fj aGUsIENPUkVfQUREUiBhZGRyKTsKIAotc3RhdGljIGludCBkY2FjaGVfd3Jp dGViYWNrIChEQ0FDSEUgKmRjYWNoZSk7Ci0KIHN0YXRpYyB2b2lkIGRjYWNo ZV9pbmZvIChjaGFyICpleHAsIGludCB0dHkpOwogCiB2b2lkIF9pbml0aWFs aXplX2RjYWNoZSAodm9pZCk7CiAKLXN0YXRpYyBpbnQgZGNhY2hlX2VuYWJs ZWRfcCA9IDA7CitpbnQgZGNhY2hlX3N0YWNrX2VuYWJsZWRfcCA9IDA7CisK K2ludCByZW1vdGVjYWNoZV9lbmFibGVkX3AgPSAwOwkJLyogT0JTT0xFVEUg Ki8KIAogc3RhdGljIHZvaWQKIHNob3dfZGNhY2hlX2VuYWJsZWRfcCAoc3Ry dWN0IHVpX2ZpbGUgKmZpbGUsIGludCBmcm9tX3R0eSwKIAkJICAgICAgIHN0 cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjLCBjb25zdCBjaGFyICp2YWx1ZSkK IHsKLSAgZnByaW50Zl9maWx0ZXJlZCAoZmlsZSwgXygiQ2FjaGUgdXNlIGZv ciByZW1vdGUgdGFyZ2V0cyBpcyAlcy5cbiIpLCB2YWx1ZSk7CisgIGZwcmlu dGZfZmlsdGVyZWQgKGZpbGUsIF8oIkNhY2hlIHVzZSBmb3Igc3RhY2sgYWNj ZXNzZXMgaXMgJXMuXG4iKSwgdmFsdWUpOwogfQogCitzdGF0aWMgdm9pZAor c2hvd19yZW1vdGVjYWNoZV9lbmFibGVkX3AgKHN0cnVjdCB1aV9maWxlICpm aWxlLCBpbnQgZnJvbV90dHksCisJCSAgICAgICBzdHJ1Y3QgY21kX2xpc3Rf ZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGZwcmludGZf ZmlsdGVyZWQgKGZpbGUsIF8oIkRlcHJlY2F0ZWQgcmVtb3RlY2FjaGUgZmxh ZyBpcyAlcy5cbiIpLCB2YWx1ZSk7Cit9CiAKIERDQUNIRSAqbGFzdF9jYWNo ZTsJCS8qIFVzZWQgYnkgaW5mbyBkY2FjaGUgKi8KIApAQCAtMTk5LDM3ICsx NjYsNDUgQEAgdm9pZAogZGNhY2hlX2ludmFsaWRhdGUgKERDQUNIRSAqZGNh Y2hlKQogewogICBpbnQgaTsKLSAgZGNhY2hlLT52YWxpZF9oZWFkID0gMDsK LSAgZGNhY2hlLT52YWxpZF90YWlsID0gMDsKKyAgc3RydWN0IGRjYWNoZV9z ZXQgKnNldDsKIAotICBkY2FjaGUtPmZyZWVfaGVhZCA9IDA7Ci0gIGRjYWNo ZS0+ZnJlZV90YWlsID0gMDsKLQotICBmb3IgKGkgPSAwOyBpIDwgRENBQ0hF X1NJWkU7IGkrKykKKyAgZm9yIChpID0gMDsgaSA8IERDQUNIRV9TRVRfU0la RTsgaSsrKQogICAgIHsKLSAgICAgIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRi ID0gZGNhY2hlLT50aGVfY2FjaGUgKyBpOworICAgICAgc2V0ID0gJmRjYWNo ZS0+YmxvY2tzW2ldOwogCi0gICAgICBpZiAoIWRjYWNoZS0+ZnJlZV9oZWFk KQotCWRjYWNoZS0+ZnJlZV9oZWFkID0gZGI7Ci0gICAgICBlbHNlCi0JZGNh Y2hlLT5mcmVlX3RhaWwtPnAgPSBkYjsKLSAgICAgIGRjYWNoZS0+ZnJlZV90 YWlsID0gZGI7Ci0gICAgICBkYi0+cCA9IDA7CisgICAgICAvKiBTaHVmZmxl IGFsbCBibG9ja3Mgb3V0IG9mIGVhY2ggc2V0IGFuZCBpbnRvIHRoZSBmcmVl IGxpc3QuICAqLworICAgICAgd2hpbGUgKHNldC0+aGVhZCkKKwl7CisJICBz dHJ1Y3QgZGNhY2hlX2Jsb2NrICpkYiA9IHNldC0+aGVhZDsKKworCSAgc2V0 LT5oZWFkID0gZGItPm5leHQ7CisKKwkgIGlmICghZGNhY2hlLT5mcmVlX2hl YWQpCisJICAgIGRjYWNoZS0+ZnJlZV9oZWFkID0gZGI7CisJICBlbHNlCisJ ICAgIGRjYWNoZS0+ZnJlZV90YWlsLT5uZXh0ID0gZGI7CisKKwkgIGRjYWNo ZS0+ZnJlZV90YWlsID0gZGI7CisJICBkYi0+bmV4dCA9IE5VTEw7CisJfQor CisgICAgICBzZXQtPnRhaWwgPSBOVUxMOworICAgICAgc2V0LT5udW0gPSAw OwogICAgIH0KIAogICByZXR1cm47CiB9CiAKIC8qIElmIGFkZHIgaXMgcHJl c2VudCBpbiB0aGUgZGNhY2hlLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhl IGJsb2NrCi0gICBjb250YWluaW5nIGl0LiAqLworICAgY29udGFpbmluZyBp dC4gICovCiAKIHN0YXRpYyBzdHJ1Y3QgZGNhY2hlX2Jsb2NrICoKIGRjYWNo ZV9oaXQgKERDQUNIRSAqZGNhY2hlLCBDT1JFX0FERFIgYWRkcikKIHsKICAg c3RydWN0IGRjYWNoZV9ibG9jayAqZGI7CiAKLSAgLyogU2VhcmNoIGFsbCBj YWNoZSBibG9ja3MgZm9yIG9uZSB0aGF0IGlzIGF0IHRoaXMgYWRkcmVzcy4g ICovCi0gIGRiID0gZGNhY2hlLT52YWxpZF9oZWFkOworICAvKiBTZWFyY2gg Y2FjaGUgYmxvY2tzIGZvciBvbmUgdGhhdCBpcyBhdCB0aGlzIGFkZHJlc3Mu ICAqLworICBkYiA9IGRjYWNoZS0+YmxvY2tzW0JMT0NLTlVNKGFkZHIpXS5o ZWFkOwogCiAgIHdoaWxlIChkYikKICAgICB7CkBAIC0yMzgsOTIgKzIxMywx NCBAQCBkY2FjaGVfaGl0IChEQ0FDSEUgKmRjYWNoZSwgQ09SRV9BRERSIGFk ZHIpCiAJICBkYi0+cmVmcysrOwogCSAgcmV0dXJuIGRiOwogCX0KLSAgICAg IGRiID0gZGItPnA7CisgICAgICBkYiA9IGRiLT5uZXh0OwogICAgIH0KIAog ICByZXR1cm4gTlVMTDsKIH0KIAotLyogTWFrZSBzdXJlIHRoYXQgYW55dGhp bmcgaW4gdGhpcyBsaW5lIHdoaWNoIG5lZWRzIHRvCi0gICBiZSB3cml0dGVu IGlzLiAqLwotCi1zdGF0aWMgaW50Ci1kY2FjaGVfd3JpdGVfbGluZSAoRENB Q0hFICpkY2FjaGUsIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRiKQotewotICBD T1JFX0FERFIgbWVtYWRkcjsKLSAgZ2RiX2J5dGUgKm15YWRkcjsKLSAgaW50 IGxlbjsKLSAgaW50IHJlczsKLSAgaW50IHJlZ19sZW47Ci0gIHN0cnVjdCBt ZW1fcmVnaW9uICpyZWdpb247Ci0KLSAgaWYgKCFkYi0+YW55ZGlydHkpCi0g ICAgcmV0dXJuIDE7Ci0KLSAgbGVuID0gTElORV9TSVpFOwotICBtZW1hZGRy ID0gZGItPmFkZHI7Ci0gIG15YWRkciAgPSBkYi0+ZGF0YTsKLQotICB3aGls ZSAobGVuID4gMCkKLSAgICB7Ci0gICAgICBpbnQgczsKLSAgICAgIGludCBl OwotICAgICAgaW50IGRpcnR5X2xlbjsKLSAgICAgIAotICAgICAgcmVnaW9u ID0gbG9va3VwX21lbV9yZWdpb24obWVtYWRkcik7Ci0gICAgICBpZiAobWVt YWRkciArIGxlbiA8IHJlZ2lvbi0+aGkpCi0JcmVnX2xlbiA9IGxlbjsKLSAg ICAgIGVsc2UKLQlyZWdfbGVuID0gcmVnaW9uLT5oaSAtIG1lbWFkZHI7CiAK LSAgICAgIGlmICghcmVnaW9uLT5hdHRyaWIuY2FjaGUgfHwgcmVnaW9uLT5h dHRyaWIubW9kZSA9PSBNRU1fUk8pCi0JewotCSAgbWVtYWRkciArPSByZWdf bGVuOwotCSAgbXlhZGRyICArPSByZWdfbGVuOwotCSAgbGVuICAgICAtPSBy ZWdfbGVuOwotCSAgY29udGludWU7Ci0JfQotCi0gICAgICB3aGlsZSAocmVn X2xlbiA+IDApCi0JewotCSAgcyA9IFhGT1JNKG1lbWFkZHIpOwotCSAgd2hp bGUgKHJlZ19sZW4gPiAwKSB7Ci0JICAgIGlmIChkYi0+c3RhdGVbc10gPT0g RU5UUllfRElSVFkpCi0JICAgICAgYnJlYWs7Ci0JICAgIHMrKzsKLQkgICAg cmVnX2xlbi0tOwotCi0JICAgIG1lbWFkZHIrKzsKLQkgICAgbXlhZGRyKys7 Ci0JICAgIGxlbi0tOwotCSAgfQotCi0JICBlID0gczsKLQkgIHdoaWxlIChy ZWdfbGVuID4gMCkgewotCSAgICBpZiAoZGItPnN0YXRlW2VdICE9IEVOVFJZ X0RJUlRZKQotCSAgICAgIGJyZWFrOwotCSAgICBlKys7Ci0JICAgIHJlZ19s ZW4tLTsKLQkgIH0KLQotCSAgZGlydHlfbGVuID0gZSAtIHM7Ci0JICByZXMg PSB0YXJnZXRfd3JpdGUgKCZjdXJyZW50X3RhcmdldCwgVEFSR0VUX09CSkVD VF9SQVdfTUVNT1JZLAotCQkJICAgICAgTlVMTCwgbXlhZGRyLCBtZW1hZGRy LCBkaXJ0eV9sZW4pOwotCSAgaWYgKHJlcyA8IGRpcnR5X2xlbikKLQkgICAg cmV0dXJuIDA7Ci0KLQkgIG1lbXNldCAoJmRiLT5zdGF0ZVtYRk9STShtZW1h ZGRyKV0sIEVOVFJZX1ZBTElELCByZXMpOwotCSAgbWVtYWRkciArPSByZXM7 Ci0JICBteWFkZHIgKz0gcmVzOwotCSAgbGVuIC09IHJlczsKLQl9Ci0gICAg fQotCi0gIGRiLT5hbnlkaXJ0eSA9IDA7Ci0gIHJldHVybiAxOwotfQotCi0v KiBSZWFkIGNhY2hlIGxpbmUgKi8KKy8qIEZpbGwgYSBjYWNoZSBsaW5lIGZy b20gdGFyZ2V0IG1lbW9yeS4gICovCiBzdGF0aWMgaW50CiBkY2FjaGVfcmVh ZF9saW5lIChEQ0FDSEUgKmRjYWNoZSwgc3RydWN0IGRjYWNoZV9ibG9jayAq ZGIpCiB7CkBAIC0zMzQsMjcgKzIzMSwyMiBAQCBkY2FjaGVfcmVhZF9saW5l IChEQ0FDSEUgKmRjYWNoZSwgc3RydWN0IGRjYWNoZV9ibG9jayAqZGIpCiAg IGludCByZWdfbGVuOwogICBzdHJ1Y3QgbWVtX3JlZ2lvbiAqcmVnaW9uOwog Ci0gIC8qIElmIHRoZXJlIGFyZSBhbnkgZGlydHkgYnl0ZXMgaW4gdGhlIGxp bmUsIGl0IG11c3QgYmUgd3JpdHRlbgotICAgICBiZWZvcmUgYSBuZXcgbGlu ZSBjYW4gYmUgcmVhZCAqLwotICBpZiAoZGItPmFueWRpcnR5KQotICAgIHsK LSAgICAgIGlmICghZGNhY2hlX3dyaXRlX2xpbmUgKGRjYWNoZSwgZGIpKQot CXJldHVybiAwOwotICAgIH0KLSAgCiAgIGxlbiA9IExJTkVfU0laRTsKICAg bWVtYWRkciA9IGRiLT5hZGRyOwogICBteWFkZHIgID0gZGItPmRhdGE7CiAK ICAgd2hpbGUgKGxlbiA+IDApCiAgICAgewotICAgICAgcmVnaW9uID0gbG9v a3VwX21lbV9yZWdpb24obWVtYWRkcik7Ci0gICAgICBpZiAobWVtYWRkciAr IGxlbiA8IHJlZ2lvbi0+aGkpCisgICAgICAvKiBEb24ndCBvdmVycnVuIGlm IHRoaXMgYmxvY2sgaXMgcmlnaHQgYXQgdGhlIGVuZCBvZiB0aGUgcmVnaW9u LiAgKi8KKyAgICAgIHJlZ2lvbiA9IGxvb2t1cF9tZW1fcmVnaW9uIChtZW1h ZGRyKTsKKyAgICAgIGlmIChyZWdpb24tPmhpID09IDAgfHwgbWVtYWRkciAr IGxlbiA8IHJlZ2lvbi0+aGkpCiAJcmVnX2xlbiA9IGxlbjsKICAgICAgIGVs c2UKIAlyZWdfbGVuID0gcmVnaW9uLT5oaSAtIG1lbWFkZHI7CiAKLSAgICAg IGlmICghcmVnaW9uLT5hdHRyaWIuY2FjaGUgfHwgcmVnaW9uLT5hdHRyaWIu bW9kZSA9PSBNRU1fV08pCisgICAgICAvKiBTa2lwIG5vbi1yZWFkYWJsZSBy ZWdpb25zLiAgVGhlIGNhY2hlIGF0dHJpYnV0ZSBjYW4gYmUgaWdub3JlZCwK KyAgICAgICAgIHNpbmNlIHdlIG1heSBiZSBsb2FkaW5nIHRoaXMgZm9yIGEg c3RhY2sgYWNjZXNzLiAgKi8KKyAgICAgIGlmIChyZWdpb24tPmF0dHJpYi5t b2RlID09IE1FTV9XTykKIAl7CiAJICBtZW1hZGRyICs9IHJlZ19sZW47CiAJ ICBteWFkZHIgICs9IHJlZ19sZW47CkBAIC0zNzIsOSArMjY0LDYgQEAgZGNh Y2hlX3JlYWRfbGluZSAoRENBQ0hFICpkY2FjaGUsIHN0cnVjdCBkY2FjaGVf YmxvY2sgKmRiKQogICAgICAgbGVuIC09IHJlczsKICAgICB9CiAKLSAgbWVt c2V0IChkYi0+c3RhdGUsIEVOVFJZX1ZBTElELCBzaXplb2YgKGRiLT5kYXRh KSk7Ci0gIGRiLT5hbnlkaXJ0eSA9IDA7Ci0gIAogICByZXR1cm4gMTsKIH0K IApAQCAtMzg1LDYyICsyNzQsNDcgQEAgc3RhdGljIHN0cnVjdCBkY2FjaGVf YmxvY2sgKgogZGNhY2hlX2FsbG9jIChEQ0FDSEUgKmRjYWNoZSwgQ09SRV9B RERSIGFkZHIpCiB7CiAgIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRiOworICBz dHJ1Y3QgZGNhY2hlX3NldCAqc2V0OwogCi0gIC8qIFRha2Ugc29tZXRoaW5n IGZyb20gdGhlIGZyZWUgbGlzdCAqLwotICBkYiA9IGRjYWNoZS0+ZnJlZV9o ZWFkOwotICBpZiAoZGIpCisgIHNldCA9ICZkY2FjaGUtPmJsb2Nrc1tCTE9D S05VTShhZGRyKV07CisKKyAgaWYgKHNldC0+bnVtIDwgRENBQ0hFX0FTU09D KQogICAgIHsKLSAgICAgIGRjYWNoZS0+ZnJlZV9oZWFkID0gZGItPnA7Cisg ICAgICAvKiBUYWtlIHNvbWV0aGluZyBmcm9tIHRoZSBmcmVlIGxpc3QgaWYg cG9zc2libGUuICAqLworICAgICAgZGIgPSBkY2FjaGUtPmZyZWVfaGVhZDsK KyAgICAgIGlmIChkYikKKwlkY2FjaGUtPmZyZWVfaGVhZCA9IGRiLT5uZXh0 OworICAgICAgZWxzZQorCWRiID0geG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3Qg ZGNhY2hlX2Jsb2NrKSk7CisKKyAgICAgIHNldC0+bnVtKys7CiAgICAgfQog ICBlbHNlCiAgICAgewotICAgICAgLyogTm90aGluZyBsZWZ0IG9uIGZyZWUg bGlzdCwgc28gZ3JhYiBvbmUgZnJvbSB0aGUgdmFsaWQgbGlzdCAqLwotICAg ICAgZGIgPSBkY2FjaGUtPnZhbGlkX2hlYWQ7Ci0KLSAgICAgIGlmICghZGNh Y2hlX3dyaXRlX2xpbmUgKGRjYWNoZSwgZGIpKQotCXJldHVybiBOVUxMOwot ICAgICAgCi0gICAgICBkY2FjaGUtPnZhbGlkX2hlYWQgPSBkYi0+cDsKKyAg ICAgIC8qIEV2aWN0IHRoZSBvbGRlc3QgbGluZSBmaXJzdC4gIExSVSB3b3Vs ZCBiZSBwcmVmZXJhYmxlLCBidXQgdGhpcyBpcworCSBmaW5lIGZvciBub3cu ICAqLworICAgICAgZGIgPSBzZXQtPmhlYWQ7CisgICAgICBzZXQtPmhlYWQg PSBkYi0+bmV4dDsKICAgICB9CiAKICAgZGItPmFkZHIgPSBNQVNLKGFkZHIp OwogICBkYi0+cmVmcyA9IDA7Ci0gIGRiLT5hbnlkaXJ0eSA9IDA7Ci0gIG1l bXNldCAoZGItPnN0YXRlLCBFTlRSWV9JTlZBTElELCBzaXplb2YgKGRiLT5k YXRhKSk7CiAKLSAgLyogYXBwZW5kIHRoaXMgbGluZSB0byBlbmQgb2YgdmFs aWQgbGlzdCAqLwotICBpZiAoIWRjYWNoZS0+dmFsaWRfaGVhZCkKLSAgICBk Y2FjaGUtPnZhbGlkX2hlYWQgPSBkYjsKKyAgaWYgKCFzZXQtPmhlYWQpCisg ICAgc2V0LT5oZWFkID0gZGI7CiAgIGVsc2UKLSAgICBkY2FjaGUtPnZhbGlk X3RhaWwtPnAgPSBkYjsKLSAgZGNhY2hlLT52YWxpZF90YWlsID0gZGI7Ci0g IGRiLT5wID0gMDsKKyAgICBzZXQtPnRhaWwtPm5leHQgPSBkYjsKKyAgc2V0 LT50YWlsID0gZGI7CisgIGRiLT5uZXh0ID0gTlVMTDsKIAogICByZXR1cm4g ZGI7CiB9CiAKLS8qIFdyaXRlYmFjayBhbnkgZGlydHkgbGluZXMuICovCi1z dGF0aWMgaW50Ci1kY2FjaGVfd3JpdGViYWNrIChEQ0FDSEUgKmRjYWNoZSkK LXsKLSAgc3RydWN0IGRjYWNoZV9ibG9jayAqZGI7Ci0KLSAgZGIgPSBkY2Fj aGUtPnZhbGlkX2hlYWQ7Ci0KLSAgd2hpbGUgKGRiKQotICAgIHsKLSAgICAg IGlmICghZGNhY2hlX3dyaXRlX2xpbmUgKGRjYWNoZSwgZGIpKQotCXJldHVy biAwOwotICAgICAgZGIgPSBkYi0+cDsKLSAgICB9Ci0gIHJldHVybiAxOwot fQotCiAKIC8qIFVzaW5nIHRoZSBkYXRhIGNhY2hlIERDQUNIRSByZXR1cm4g dGhlIGNvbnRlbnRzIG9mIHRoZSBieXRlIGF0CiAgICBhZGRyZXNzIEFERFIg aW4gdGhlIHJlbW90ZSBtYWNoaW5lLiAgCiAKLSAgIFJldHVybnMgMCBvbiBl cnJvci4gKi8KKyAgIFJldHVybnMgMCBvbiBlcnJvci4gICovCiAKIHN0YXRp YyBpbnQKIGRjYWNoZV9wZWVrX2J5dGUgKERDQUNIRSAqZGNhY2hlLCBDT1JF X0FERFIgYWRkciwgZ2RiX2J5dGUgKnB0cikKQEAgLTQ1MCwxMyArMzI0LDgg QEAgZGNhY2hlX3BlZWtfYnl0ZSAoRENBQ0hFICpkY2FjaGUsIENPUkVfQURE UiBhZGRyLCBnZGJfYnl0ZSAqcHRyKQogICBpZiAoIWRiKQogICAgIHsKICAg ICAgIGRiID0gZGNhY2hlX2FsbG9jIChkY2FjaGUsIGFkZHIpOwotICAgICAg aWYgKCFkYikKLQlyZXR1cm4gMDsKLSAgICB9Ci0gIAotICBpZiAoZGItPnN0 YXRlW1hGT1JNIChhZGRyKV0gPT0gRU5UUllfSU5WQUxJRCkKLSAgICB7Ci0g ICAgICBpZiAoIWRjYWNoZV9yZWFkX2xpbmUoZGNhY2hlLCBkYikpCisKKyAg ICAgIGlmICghZGNhY2hlX3JlYWRfbGluZSAoZGNhY2hlLCBkYikpCiAgICAg ICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTQ2NiwyNCArMzM1LDI0IEBA IGRjYWNoZV9wZWVrX2J5dGUgKERDQUNIRSAqZGNhY2hlLCBDT1JFX0FERFIg YWRkciwgZ2RiX2J5dGUgKnB0cikKIAogCiAvKiBXcml0ZSB0aGUgYnl0ZSBh dCBQVFIgaW50byBBRERSIGluIHRoZSBkYXRhIGNhY2hlLgotICAgUmV0dXJu IHplcm8gb24gd3JpdGUgZXJyb3IuCi0gKi8KKworICAgVGhlIGNhbGxlciBp cyByZXNwb25zaWJsZSBmb3IgYWxzbyBwcm9tcHRseSB3cml0aW5nIHRoZSBk YXRhCisgICB0aHJvdWdoIHRvIHRhcmdldCBtZW1vcnkuCisKKyAgIElmIGFk ZHIgaXMgbm90IGluIGNhY2hlLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGlu Zzsgd3JpdGluZyB0bworICAgYW4gYXJlYSBvZiBtZW1vcnkgd2hpY2ggd2Fz bid0IHByZXNlbnQgaW4gdGhlIGNhY2hlIGRvZXNuJ3QgY2F1c2UKKyAgIGl0 IHRvIGJlIGxvYWRlZCBpbi4KKworICAgQWx3YXlzIHJldHVybiAxIHRvIHNp bXBsaWZ5IGRjYWNoZV94ZmVyX21lbW9yeS4gICovCiAKIHN0YXRpYyBpbnQK IGRjYWNoZV9wb2tlX2J5dGUgKERDQUNIRSAqZGNhY2hlLCBDT1JFX0FERFIg YWRkciwgZ2RiX2J5dGUgKnB0cikKIHsKICAgc3RydWN0IGRjYWNoZV9ibG9j ayAqZGIgPSBkY2FjaGVfaGl0IChkY2FjaGUsIGFkZHIpOwogCi0gIGlmICgh ZGIpCi0gICAgewotICAgICAgZGIgPSBkY2FjaGVfYWxsb2MgKGRjYWNoZSwg YWRkcik7Ci0gICAgICBpZiAoIWRiKQotCXJldHVybiAwOwotICAgIH0KKyAg aWYgKGRiKQorICAgIGRiLT5kYXRhW1hGT1JNIChhZGRyKV0gPSAqcHRyOwog Ci0gIGRiLT5kYXRhW1hGT1JNIChhZGRyKV0gPSAqcHRyOwotICBkYi0+c3Rh dGVbWEZPUk0gKGFkZHIpXSA9IEVOVFJZX0RJUlRZOwotICBkYi0+YW55ZGly dHkgPSAxOwogICByZXR1cm4gMTsKIH0KIApAQCAtNDkxLDI4ICszNjAsMzAg QEAgZGNhY2hlX3Bva2VfYnl0ZSAoRENBQ0hFICpkY2FjaGUsIENPUkVfQURE UiBhZGRyLCBnZGJfYnl0ZSAqcHRyKQogRENBQ0hFICoKIGRjYWNoZV9pbml0 ICh2b2lkKQogewotICBpbnQgY3NpemUgPSBzaXplb2YgKHN0cnVjdCBkY2Fj aGVfYmxvY2spICogRENBQ0hFX1NJWkU7CiAgIERDQUNIRSAqZGNhY2hlOwor ICBpbnQgaTsKIAogICBkY2FjaGUgPSAoRENBQ0hFICopIHhtYWxsb2MgKHNp emVvZiAoKmRjYWNoZSkpOwogCi0gIGRjYWNoZS0+dGhlX2NhY2hlID0gKHN0 cnVjdCBkY2FjaGVfYmxvY2sgKikgeG1hbGxvYyAoY3NpemUpOwotICBtZW1z ZXQgKGRjYWNoZS0+dGhlX2NhY2hlLCAwLCBjc2l6ZSk7CisgIGZvciAoaSA9 IDA7IGkgPCBEQ0FDSEVfU0VUX1NJWkU7IGkrKykKKyAgICBkY2FjaGUtPmJs b2Nrc1tpXS5oZWFkID0gTlVMTDsKIAogICBkY2FjaGVfaW52YWxpZGF0ZSAo ZGNhY2hlKTsKIAorICBkY2FjaGUtPmZyZWVfaGVhZCA9IE5VTEw7CisgIGRj YWNoZS0+ZnJlZV90YWlsID0gTlVMTDsKKwogICBsYXN0X2NhY2hlID0gZGNh Y2hlOwogICByZXR1cm4gZGNhY2hlOwogfQogCi0vKiBGcmVlIGEgZGF0YSBj YWNoZSAqLworLyogRnJlZSBhIGRhdGEgY2FjaGUuICAqLwogdm9pZAogZGNh Y2hlX2ZyZWUgKERDQUNIRSAqZGNhY2hlKQogewogICBpZiAobGFzdF9jYWNo ZSA9PSBkY2FjaGUpCiAgICAgbGFzdF9jYWNoZSA9IE5VTEw7CiAKLSAgeGZy ZWUgKGRjYWNoZS0+dGhlX2NhY2hlKTsKICAgeGZyZWUgKGRjYWNoZSk7CiB9 CiAKQEAgLTUyMCw4OSArMzkxLDE4MiBAQCBkY2FjaGVfZnJlZSAoRENBQ0hF ICpkY2FjaGUpCiAgICB0byBvciBmcm9tIGRlYnVnZ2VyIGFkZHJlc3MgTVlB RERSLiAgV3JpdGUgdG8gaW5mZXJpb3IgaWYgU0hPVUxEX1dSSVRFIGlzCiAg ICBub256ZXJvLiAKIAotICAgUmV0dXJucyBsZW5ndGggb2YgZGF0YSB3cml0 dGVuIG9yIHJlYWQ7IDAgZm9yIGVycm9yLiAgCi0KLSAgIFRoaXMgcm91dGlu ZSBpcyBpbmRlbmRlZCB0byBiZSBjYWxsZWQgYnkgcmVtb3RlX3hmZXJfIGZ1 bmN0aW9ucy4gKi8KKyAgIFJldHVybnMgbGVuZ3RoIG9mIGRhdGEgd3JpdHRl biBvciByZWFkOyAwIGZvciBlcnJvci4gICovCiAKIGludAotZGNhY2hlX3hm ZXJfbWVtb3J5IChEQ0FDSEUgKmRjYWNoZSwgQ09SRV9BRERSIG1lbWFkZHIs IGdkYl9ieXRlICpteWFkZHIsCitkY2FjaGVfeGZlcl9tZW1vcnkgKHN0cnVj dCB0YXJnZXRfb3BzICpvcHMsIERDQUNIRSAqZGNhY2hlLAorCQkgICAgQ09S RV9BRERSIG1lbWFkZHIsIGdkYl9ieXRlICpteWFkZHIsCiAJCSAgICBpbnQg bGVuLCBpbnQgc2hvdWxkX3dyaXRlKQogewogICBpbnQgaTsKKyAgaW50IHJl czsKICAgaW50ICgqeGZ1bmMpIChEQ0FDSEUgKmRjYWNoZSwgQ09SRV9BRERS IGFkZHIsIGdkYl9ieXRlICpwdHIpOwogICB4ZnVuYyA9IHNob3VsZF93cml0 ZSA/IGRjYWNoZV9wb2tlX2J5dGUgOiBkY2FjaGVfcGVla19ieXRlOwogCisg IC8qIERvIHdyaXRlLXRocm91Z2ggZmlyc3QsIHNvIHRoYXQgaWYgaXQgZmFp bHMsIHdlIGRvbid0IHdyaXRlIHRvCisgICAgIHRoZSBjYWNoZSBhdCBhbGwu ICAqLworCisgIGlmIChzaG91bGRfd3JpdGUpCisgICAgeworICAgICAgcmVz ID0gdGFyZ2V0X3dyaXRlIChvcHMsIFRBUkdFVF9PQkpFQ1RfUkFXX01FTU9S WSwKKwkJCSAgTlVMTCwgbXlhZGRyLCBtZW1hZGRyLCBsZW4pOworICAgICAg aWYgKHJlcyA8IGxlbikKKwlyZXR1cm4gMDsKKyAgICB9CisgICAgICAKICAg Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgIHsKICAgICAgIGlmICgh eGZ1bmMgKGRjYWNoZSwgbWVtYWRkciArIGksIG15YWRkciArIGkpKQogCXJl dHVybiAwOwogICAgIH0KKyAgICAKKyAgcmV0dXJuIGxlbjsKK30KIAotICAv KiBGSVhNRTogVGhlcmUgbWF5IGJlIHNvbWUgYmVuZWZpdCBmcm9tIG1vdmlu ZyB0aGUgY2FjaGUgd3JpdGViYWNrCi0gICAgIHRvIGEgaGlnaGVyIGxheWVy LCBhcyBpdCBjb3VsZCBvY2N1ciBhZnRlciBhIHNlcXVlbmNlIG9mIHNtYWxs ZXIKLSAgICAgd3JpdGVzIGhhdmUgYmVlbiBjb21wbGV0ZWQgKGFzIHdoZW4g YSBzdGFjayBmcmFtZSBpcyBjb25zdHJ1Y3RlZAotICAgICBmb3IgYW4gaW5m ZXJpb3IgZnVuY3Rpb24gY2FsbCkuICBOb3RlIHRoYXQgb25seSBtb3Zpbmcg aXQgdXAgb25lCi0gICAgIGxldmVsIHRvIHRhcmdldF94ZmVyX21lbW9yeSgp IChhbHNvIHRhcmdldF94ZmVyX21lbW9yeV9wYXJ0aWFsKCkpCi0gICAgIGlz IG5vdCBzdWZmaWNlbnQsIHNpbmNlIHdlIHdhbnQgdG8gY29hbGVzY2UgbWVt b3J5IHRyYW5zZmVycyB0aGF0Ci0gICAgIGFyZSAibG9naWNhbGx5IiBjb25u ZWN0ZWQgYnV0IG5vdCBhY3R1YWxseSBhIHNpbmdsZSBjYWxsIHRvIG9uZQot ICAgICBvZiB0aGUgbWVtb3J5IHRyYW5zZmVyIGZ1bmN0aW9ucy4gKi8KKy8q IEZJWE1FOiBUaGVyZSB3b3VsZCBiZSBzb21lIGJlbmVmaXQgdG8gbWFraW5n IHRoZSBjYWNoZSB3cml0ZS1iYWNrIGFuZAorICAgbW92aW5nIHRoZSB3cml0 ZWJhY2sgb3BlcmF0aW9uIHRvIGEgaGlnaGVyIGxheWVyLCBhcyBpdCBjb3Vs ZCBvY2N1cgorICAgYWZ0ZXIgYSBzZXF1ZW5jZSBvZiBzbWFsbGVyIHdyaXRl cyBoYXZlIGJlZW4gY29tcGxldGVkIChhcyB3aGVuIGEgc3RhY2sKKyAgIGZy YW1lIGlzIGNvbnN0cnVjdGVkIGZvciBhbiBpbmZlcmlvciBmdW5jdGlvbiBj YWxsKS4gIE5vdGUgdGhhdCBvbmx5CisgICBtb3ZpbmcgaXQgdXAgb25lIGxl dmVsIHRvIHRhcmdldF94ZmVyX21lbW9yeVtfcGFydGlhbF0oKSBpcyBub3QK KyAgIHN1ZmZpY2llbnQgc2luY2Ugd2Ugd2FudCB0byBjb2FsZXNjZSBtZW1v cnkgdHJhbnNmZXJzIHRoYXQgYXJlCisgICAibG9naWNhbGx5IiBjb25uZWN0 ZWQgYnV0IG5vdCBhY3R1YWxseSBhIHNpbmdsZSBjYWxsIHRvIG9uZSBvZiB0 aGUKKyAgIG1lbW9yeSB0cmFuc2ZlciBmdW5jdGlvbnMuICovCiAKLSAgaWYg KHNob3VsZF93cml0ZSkKLSAgICBkY2FjaGVfd3JpdGViYWNrIChkY2FjaGUp OworLyogSnVzdCB1cGRhdGUgYW55IGNhY2hlIGxpbmVzIHdoaWNoIGFyZSBh bHJlYWR5IHByZXNlbnQuICBUaGlzIGlzIGNhbGxlZAorICAgYnkgbWVtb3J5 X3hmZXJfcGFydGlhbCBpbiBjYXNlcyB3aGVyZSB0aGUgYWNjZXNzIHdvdWxk IG90aGVyd2lzZSBub3QgZ28KKyAgIHRocm91Z2ggdGhlIGNhY2hlLiAgKi8K Kwordm9pZAorZGNhY2hlX3VwZGF0ZSAoRENBQ0hFICpkY2FjaGUsIENPUkVf QUREUiBtZW1hZGRyLCBnZGJfYnl0ZSAqbXlhZGRyLCBpbnQgbGVuKQorewor ICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIGRj YWNoZV9wb2tlX2J5dGUgKGRjYWNoZSwgbWVtYWRkciArIGksIG15YWRkciAr IGkpOworfQorCitzdGF0aWMgdm9pZAorZGNhY2hlX3ByaW50X2xpbmUgKGlu dCBpbmRleG5vLCBpbnQgbGluZW5vKQoreworICBpbnQgajsKKyAgc3RydWN0 IGRjYWNoZV9ibG9jayAqcDsKKworICBpZiAoIWxhc3RfY2FjaGUpCisgICAg eworICAgICAgcHJpbnRmX2ZpbHRlcmVkIChfKCJObyBkYXRhIGNhY2hlIGF2 YWlsYWJsZS5cbiIpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgcCA9 IGxhc3RfY2FjaGUtPmJsb2Nrc1tpbmRleG5vXS5oZWFkOworCisgIHdoaWxl IChsaW5lbm8gPiAwICYmIHApCisgICAgeworICAgICAgcCA9IHAtPm5leHQ7 CisgICAgICBsaW5lbm8tLTsKKyAgICB9CisKKyAgaWYgKCFwKQorICAgIHsK KyAgICAgIHByaW50Zl9maWx0ZXJlZCAoXygiTm8gc3VjaCBjYWNoZSBsaW5l IGV4aXN0cy5cbiIpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCi0g IHJldHVybiBsZW47CisgIHByaW50Zl9maWx0ZXJlZCAoXygiSW5kZXggJWQs IGxpbmUgJWQ6IGFkZHJlc3MgJWx4IFslZCBoaXRzXVxuIiksCisJCSAgaW5k ZXhubywgbGluZW5vLCBwLT5hZGRyLCBwLT5yZWZzKTsKKworICBmb3IgKGog PSAwOyBqIDwgTElORV9TSVpFOyBqKyspCisgICAgeworICAgICAgcHJpbnRm X2ZpbHRlcmVkICgiJTAyeCAiLCBwLT5kYXRhW2pdKTsKKworICAgICAgLyog UHJpbnQgYSBuZXdsaW5lIGV2ZXJ5IDE2IGJ5dGVzICg0OCBjaGFyYWN0ZXJz KSAqLworICAgICAgaWYgKChqICUgMTYgPT0gMTUpICYmIChqICE9IExJTkVf U0laRSAtIDEpKQorCXByaW50Zl9maWx0ZXJlZCAoIlxuIik7CisgICAgfQor ICBwcmludGZfZmlsdGVyZWQgKCJcbiIpOwogfQogCiBzdGF0aWMgdm9pZAog ZGNhY2hlX2luZm8gKGNoYXIgKmV4cCwgaW50IHR0eSkKIHsKICAgc3RydWN0 IGRjYWNoZV9ibG9jayAqcDsKKyAgaW50IGksIGxpbmVjb3VudCwgcmVmY291 bnQsIGxpbmVubzsKIAotICBwcmludGZfZmlsdGVyZWQgKF8oIkRjYWNoZSBs aW5lIHdpZHRoICVkLCBkZXB0aCAlZFxuIiksCi0JCSAgIExJTkVfU0laRSwg RENBQ0hFX1NJWkUpOworICBpZiAoZXhwKQorICAgIHsKKyAgICAgIGludCBp bmRleG5vLCBsaW5lbm87CisgICAgICBjaGFyICpsaW5lc3RhcnQ7CisgICAg ICBpbmRleG5vID0gc3RydG9sIChleHAsICZsaW5lc3RhcnQsIDEwKTsKKyAg ICAgIGlmIChsaW5lc3RhcnQgPT0gZXhwKQorCXsKKwkgIHByaW50Zl9maWx0 ZXJlZCAoXygiVXNhZ2U6IGluZm8gZGNhY2hlIFtpbmRleG51bWJlciBsaW5l bnVtYmVyXVxuIikpOworICAgICAgICAgIHJldHVybjsKKwl9CiAKLSAgaWYg KGxhc3RfY2FjaGUpCisgICAgICBsaW5lbm8gPSBzdHJ0b2wgKGxpbmVzdGFy dCArIDEsIE5VTEwsIDEwKTsKKyAgICAgIGRjYWNoZV9wcmludF9saW5lIChp bmRleG5vLCBsaW5lbm8pOworICAgICAgcmV0dXJuOworICAgIH0KKworICBw cmludGZfZmlsdGVyZWQgKF8oIkRjYWNoZSBsaW5lIHdpZHRoICVkLCBzZXRz ICVkLCBhc3NvYyAlZFxuIiksCisJCSAgIExJTkVfU0laRSwgRENBQ0hFX1NF VF9TSVpFLCBEQ0FDSEVfQVNTT0MpOworCisgIGlmICghbGFzdF9jYWNoZSkK ICAgICB7Ci0gICAgICBwcmludGZfZmlsdGVyZWQgKF8oIkNhY2hlIHN0YXRl OlxuIikpOworICAgICAgcHJpbnRmX2ZpbHRlcmVkIChfKCJObyBkYXRhIGNh Y2hlIGF2YWlsYWJsZS5cbiIpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CiAK LSAgICAgIGZvciAocCA9IGxhc3RfY2FjaGUtPnZhbGlkX2hlYWQ7IHA7IHAg PSBwLT5wKQotCXsKLQkgIGludCBqOwotCSAgcHJpbnRmX2ZpbHRlcmVkIChf KCJMaW5lIGF0ICVzLCByZWZlcmVuY2VkICVkIHRpbWVzXG4iKSwKLQkJCSAg IHBhZGRyIChwLT5hZGRyKSwgcC0+cmVmcyk7CisgIGxpbmVjb3VudCA9IDA7 CisgIHJlZmNvdW50ID0gMDsKIAotCSAgZm9yIChqID0gMDsgaiA8IExJTkVf U0laRTsgaisrKQotCSAgICBwcmludGZfZmlsdGVyZWQgKCIlMDJ4IiwgcC0+ ZGF0YVtqXSAmIDB4RkYpOwotCSAgcHJpbnRmX2ZpbHRlcmVkICgoIlxuIikp OworICBmb3IgKGkgPSAwOyBpIDwgRENBQ0hFX1NFVF9TSVpFOyBpKyspCisg ICAgeworICAgICAgcCA9IGxhc3RfY2FjaGUtPmJsb2Nrc1tpXS5oZWFkOwor ICAgICAgbGluZW5vID0gMDsKIAotCSAgZm9yIChqID0gMDsgaiA8IExJTkVf U0laRTsgaisrKQotCSAgICBwcmludGZfZmlsdGVyZWQgKCIgJWMiLCBzdGF0 ZV9jaGFyc1twLT5zdGF0ZVtqXV0pOwotCSAgcHJpbnRmX2ZpbHRlcmVkICgi XG4iKTsKKyAgICAgIHdoaWxlIChwKQorCXsKKyAgICAgICAgICBwcmludGZf ZmlsdGVyZWQgKF8oIkluZGV4ICVkLCBsaW5lICVkOiBhZGRyZXNzICVseCBb JWQgaGl0c11cbiIpLAorCQkJICBpLCBsaW5lbm8sIHAtPmFkZHIsIHAtPnJl ZnMpOworCSAgbGluZWNvdW50Kys7CisJICBsaW5lbm8rKzsKKwkgIHJlZmNv dW50ICs9IHAtPnJlZnM7CisJICBwID0gcC0+bmV4dDsKIAl9CiAgICAgfQor CisgIHByaW50Zl9maWx0ZXJlZCAoXygiQ2FjaGUgc3RhdGU6ICVkIGFjdGl2 ZSBsaW5lcywgJWQgaGl0c1xuIiksIGxpbmVjb3VudCwgcmVmY291bnQpOwog fQogCiB2b2lkCiBfaW5pdGlhbGl6ZV9kY2FjaGUgKHZvaWQpCiB7Ci0gIGFk ZF9zZXRzaG93X2Jvb2xlYW5fY21kICgicmVtb3RlY2FjaGUiLCBjbGFzc19z dXBwb3J0LAotCQkJICAgJmRjYWNoZV9lbmFibGVkX3AsIF8oIlwKLVNldCBj YWNoZSB1c2UgZm9yIHJlbW90ZSB0YXJnZXRzLiIpLCBfKCJcCi1TaG93IGNh Y2hlIHVzZSBmb3IgcmVtb3RlIHRhcmdldHMuIiksIF8oIlwKLVdoZW4gb24s IHVzZSBkYXRhIGNhY2hpbmcgZm9yIHJlbW90ZSB0YXJnZXRzLiAgRm9yIG1h bnkgcmVtb3RlIHRhcmdldHNcblwKLXRoaXMgb3B0aW9uIGNhbiBvZmZlciBi ZXR0ZXIgdGhyb3VnaHB1dCBmb3IgcmVhZGluZyB0YXJnZXQgbWVtb3J5Llxu XAotVW5mb3J0dW5hdGVseSwgZ2RiIGRvZXMgbm90IGN1cnJlbnRseSBrbm93 IGFueXRoaW5nIGFib3V0IHZvbGF0aWxlXG5cCi1yZWdpc3RlcnMgYW5kIHRo dXMgZGF0YSBjYWNoaW5nIHdpbGwgcHJvZHVjZSBpbmNvcnJlY3QgcmVzdWx0 cyB3aXRoXG5cCi12b2xhdGlsZSByZWdpc3RlcnMgYXJlIGluIHVzZS4gIEJ5 IGRlZmF1bHQsIHRoaXMgb3B0aW9uIGlzIG9mZi4iKSwKKyAgYWRkX3NldHNo b3dfYm9vbGVhbl9jbWQgKCJzdGFja2NhY2hlIiwgY2xhc3Nfc3VwcG9ydCwK KwkJCSAgICZkY2FjaGVfc3RhY2tfZW5hYmxlZF9wLCBfKCJcCitTZXQgY2Fj aGUgdXNlIGZvciBzdGFjayBhY2Nlc3MuIiksIF8oIlwKK1Nob3cgY2FjaGUg dXNlIGZvciBzdGFjayBhY2Nlc3MuIiksIF8oIlwKK1doZW4gb24sIHVzZSB0 aGUgZGF0YSBjYWNoZSBmb3IgYWxsIHN0YWNrIGFjY2VzcywgcmVnYXJkbGVz cyBvZiBhbnlcblwKK2NvbmZpZ3VyZWQgbWVtb3J5IHJlZ2lvbnMuICBUaGlz IGltcHJvdmVzIHJlbW90ZSBwZXJmb3JtYW5jZSBzaWduaWZpY2FudGx5Llxu XAorQnkgZGVmYXVsdCwgY2FjaGluZyBmb3Igc3RhY2sgYWNjZXNzIGlzIG9m Zi4iKSwKIAkJCSAgIE5VTEwsCiAJCQkgICBzaG93X2RjYWNoZV9lbmFibGVk X3AsCiAJCQkgICAmc2V0bGlzdCwgJnNob3dsaXN0KTsKIAorICBhZGRfc2V0 c2hvd19ib29sZWFuX2NtZCAoInJlbW90ZWNhY2hlIiwgY2xhc3Nfc3VwcG9y dCwKKwkJCSAgICZyZW1vdGVjYWNoZV9lbmFibGVkX3AsIF8oIlwKK1NldCBy ZW1vdGVjYWNoZSBmbGFnLiIpLCBfKCJcCitTaG93IHJlbW90ZWNhY2hlIGZs YWcuIiksIF8oIlwKK1RoaXMgdXNlZCB0byBlbmFibGUgdGhlIGRhdGEgY2Fj aGUgZm9yIHJlbW90ZSB0YXJnZXRzLiAgVGhlIGNhY2hlXG5cCitmdW5jdGlv bmFsaXR5IGlzIG5vdyBjb250cm9sbGVkIGJ5IHRoZSBtZW1vcnkgcmVnaW9u IHN5c3RlbSBhbmQgdGhlXG5cCitcInN0YWNrY2FjaGVcIiBmbGFnOyBcInJl bW90ZWNhY2hlXCIgbm93IGRvZXMgbm90aGluZyBhbmQgZXhpc3RzIG9ubHlc blwKK2ZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIiksCisJCQkgICBOVUxM LAorCQkJICAgc2hvd19yZW1vdGVjYWNoZV9lbmFibGVkX3AsCisJCQkgICAm c2V0bGlzdCwgJnNob3dsaXN0KTsKKwogICBhZGRfaW5mbyAoImRjYWNoZSIs IGRjYWNoZV9pbmZvLAogCSAgICBfKCJcCi1QcmludCBpbmZvcm1hdGlvbiBv biB0aGUgZGNhY2hlIHBlcmZvcm1hbmNlLlxuXAotVGhlIHN0YXRlIG9mIGVh Y2ggY2FjaGVkIGJ5dGUgaXMgcmVwcmVzZW50ZWQgYnkgYSBsZXR0ZXI6XG5c Ci0gIEkgPSBpbnZhbGlkXG5cCi0gIEQgPSBkaXJ0eVxuXAotICBWID0gdmFs aWQiKSk7CitQcmludCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGF0YSBjYWNo ZS5cblwKK1dpdGggbm8gYXJndW1lbnRzLCB0aGlzIGNvbW1hbmQgcHJpbnRz IHRoZSBjYWNoZSBjb25maWd1cmF0aW9uIGFuZCBhXG5cCitzdW1tYXJ5IG9m IGVhY2ggbGluZSBpbiB0aGUgY2FjaGUuIFVzZSBcImluZm8gZGNhY2hlIDxp bmRleG5vPiA8bGluZW5vPlwiXG5cCit0byBkdW1wIHRoZSBjb250ZW50cyBv ZiBhIGdpdmVuIGxpbmUuIikpOwogfQpkaWZmIC0tZ2l0IGEvZ2RiL2RjYWNo ZS5oIGIvZ2RiL2RjYWNoZS5oCmluZGV4IDMyMDc3YTYuLmZkYzIyYzUgMTAw NjQ0Ci0tLSBhL2dkYi9kY2FjaGUuaAorKysgYi9nZGIvZGNhY2hlLmgKQEAg LTM1LDcgKzM1LDEzIEBAIHZvaWQgZGNhY2hlX2ZyZWUgKERDQUNIRSAqKTsK IAogLyogU2ltcGxlIHRvIGNhbGwgZnJvbSA8cmVtb3RlPl94ZmVyX21lbW9y eSAqLwogCi1pbnQgZGNhY2hlX3hmZXJfbWVtb3J5IChEQ0FDSEUgKmNhY2hl LCBDT1JFX0FERFIgbWVtLCBnZGJfYnl0ZSAqbXksCi0JCQlpbnQgbGVuLCBp bnQgc2hvdWxkX3dyaXRlKTsKK2ludCBkY2FjaGVfeGZlcl9tZW1vcnkgKHN0 cnVjdCB0YXJnZXRfb3BzICpvcHMsIERDQUNIRSAqY2FjaGUsIENPUkVfQURE UiBtZW0sCisJCQlnZGJfYnl0ZSAqbXksIGludCBsZW4sIGludCBzaG91bGRf d3JpdGUpOworCit2b2lkIGRjYWNoZV91cGRhdGUgKERDQUNIRSAqZGNhY2hl LCBDT1JFX0FERFIgbWVtYWRkciwgZ2RiX2J5dGUgKm15YWRkciwKKwkJICAg IGludCBsZW4pOworCisvKiBTaG91bGQgd2UgdXNlIHRoZSBkY2FjaGUgZm9y IHN0YWNrIGFjY2Vzcz8gKi8KK2V4dGVybiBpbnQgZGNhY2hlX3N0YWNrX2Vu YWJsZWRfcDsKIAogI2VuZGlmIC8qIERDQUNIRV9IICovCmRpZmYgLS1naXQg YS9nZGIvdGFyZ2V0LmMgYi9nZGIvdGFyZ2V0LmMKaW5kZXggN2E1Yjc2OC4u OGMzYjJiZCAxMDA2NDQKLS0tIGEvZ2RiL3RhcmdldC5jCisrKyBiL2dkYi90 YXJnZXQuYwpAQCAtMTIxNCwxNiArMTIxNCwxNCBAQCBtZW1vcnlfeGZlcl9w YXJ0aWFsIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCB2b2lkICpyZWFkYnVm LCBjb25zdCB2b2lkICp3cml0ZWJ1ZgogCiAgIGlmIChyZWdpb24tPmF0dHJp Yi5jYWNoZSkKICAgICB7Ci0gICAgICAvKiBGSVhNRSBkcm93LzIwMDYtMDgt MDk6IFRoaXMgY2FsbCBkaXNjYXJkcyBPUFMsIHNvIHRoZSByYXcKLQkgbWVt b3J5IHJlcXVlc3Qgd2lsbCBzdGFydCBiYWNrIGF0IGN1cnJlbnRfdGFyZ2V0 LiAgKi8KICAgICAgIGlmIChyZWFkYnVmICE9IE5VTEwpCi0JcmVzID0gZGNh Y2hlX3hmZXJfbWVtb3J5ICh0YXJnZXRfZGNhY2hlLCBtZW1hZGRyLCByZWFk YnVmLAorCXJlcyA9IGRjYWNoZV94ZmVyX21lbW9yeSAob3BzLCB0YXJnZXRf ZGNhY2hlLCBtZW1hZGRyLCByZWFkYnVmLAogCQkJCSAgcmVnX2xlbiwgMCk7 CiAgICAgICBlbHNlCiAJLyogRklYTUUgZHJvdy8yMDA2LTA4LTA5OiBJZiB3 ZSdyZSBnb2luZyB0byBwcmVzZXJ2ZSBjb25zdAogCSAgIGNvcnJlY3RuZXNz IGRjYWNoZV94ZmVyX21lbW9yeSBzaG91bGQgdGFrZSByZWFkYnVmIGFuZAog CSAgIHdyaXRlYnVmLiAgKi8KLQlyZXMgPSBkY2FjaGVfeGZlcl9tZW1vcnkg KHRhcmdldF9kY2FjaGUsIG1lbWFkZHIsCisJcmVzID0gZGNhY2hlX3hmZXJf bWVtb3J5IChvcHMsIHRhcmdldF9kY2FjaGUsIG1lbWFkZHIsCiAJCQkJICAo dm9pZCAqKSB3cml0ZWJ1ZiwKIAkJCQkgIHJlZ19sZW4sIDEpOwogICAgICAg aWYgKHJlcyA8PSAwKQo= --0016e6dd89f53b5dc1046d814fa7 Content-Type: text/plain; charset=US-ASCII; name="part2-use-cache-for-stack.patch.txt" Content-Disposition: attachment; filename="part2-use-cache-for-stack.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fwjjn9lb1 Content-length: 15059 ZGlmZiAtLWdpdCBhL2dkYi9jb3JlZmlsZS5jIGIvZ2RiL2NvcmVmaWxlLmMK aW5kZXggZTc0NjMwYi4uNjk5NzFlYSAxMDA2NDQKLS0tIGEvZ2RiL2NvcmVm aWxlLmMKKysrIGIvZ2RiL2NvcmVmaWxlLmMKQEAgLTIyOCw2ICsyMjgsNyBA QCBtZW1vcnlfZXJyb3IgKGludCBzdGF0dXMsIENPUkVfQUREUiBtZW1hZGRy KQogfQogCiAvKiBTYW1lIGFzIHRhcmdldF9yZWFkX21lbW9yeSwgYnV0IHJl cG9ydCBhbiBlcnJvciBpZiBjYW4ndCByZWFkLiAgKi8KKwogdm9pZAogcmVh ZF9tZW1vcnkgKENPUkVfQUREUiBtZW1hZGRyLCBnZGJfYnl0ZSAqbXlhZGRy LCBpbnQgbGVuKQogewpAQCAtMjM3LDYgKzIzOCwxNyBAQCByZWFkX21lbW9y eSAoQ09SRV9BRERSIG1lbWFkZHIsIGdkYl9ieXRlICpteWFkZHIsIGludCBs ZW4pCiAgICAgbWVtb3J5X2Vycm9yIChzdGF0dXMsIG1lbWFkZHIpOwogfQog CisvKiBTYW1lIGFzIHRhcmdldF9yZWFkX3N0YWNrLCBidXQgcmVwb3J0IGFu IGVycm9yIGlmIGNhbid0IHJlYWQuICAqLworCit2b2lkCityZWFkX3N0YWNr IChDT1JFX0FERFIgbWVtYWRkciwgZ2RiX2J5dGUgKm15YWRkciwgaW50IGxl bikKK3sKKyAgaW50IHN0YXR1czsKKyAgc3RhdHVzID0gdGFyZ2V0X3JlYWRf c3RhY2sgKG1lbWFkZHIsIG15YWRkciwgbGVuKTsKKyAgaWYgKHN0YXR1cyAh PSAwKQorICAgIG1lbW9yeV9lcnJvciAoc3RhdHVzLCBtZW1hZGRyKTsKK30K KwogLyogQXJndW1lbnQgLyByZXR1cm4gcmVzdWx0IHN0cnVjdCBmb3IgdXNl IHdpdGgKICAgIGRvX2NhcHR1cmVkX3JlYWRfbWVtb3J5X2ludGVnZXIoKS4g IE1FTUFERFIgYW5kIExFTiBhcmUgZmlsbGVkIGluCiAgICBieSBnZGJfcmVh ZF9tZW1vcnlfaW50ZWdlcigpLiAgUkVTVUxUIGlzIHRoZSBjb250ZW50cyB0 aGF0IHdlcmUKZGlmZiAtLWdpdCBhL2dkYi9kd2FyZjJsb2MuYyBiL2dkYi9k d2FyZjJsb2MuYwppbmRleCAxNmQ4Y2VlLi4xMjAyNjlkIDEwMDY0NAotLS0g YS9nZGIvZHdhcmYybG9jLmMKKysrIGIvZ2RiL2R3YXJmMmxvYy5jCkBAIC0y NjQsNiArMjY0LDcgQEAgZHdhcmYyX2V2YWx1YXRlX2xvY19kZXNjIChzdHJ1 Y3Qgc3ltYm9sICp2YXIsIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwKICAg ICAgIHJldHZhbCA9IGFsbG9jYXRlX3ZhbHVlIChTWU1CT0xfVFlQRSAodmFy KSk7CiAgICAgICBWQUxVRV9MVkFMIChyZXR2YWwpID0gbHZhbF9tZW1vcnk7 CiAgICAgICBzZXRfdmFsdWVfbGF6eSAocmV0dmFsLCAxKTsKKyAgICAgIHNl dF92YWx1ZV9zdGFjayAocmV0dmFsLCAxKTsKICAgICAgIHNldF92YWx1ZV9h ZGRyZXNzIChyZXR2YWwsIGFkZHJlc3MpOwogICAgIH0KIApkaWZmIC0tZ2l0 IGEvZ2RiL2ZyYW1lLXVud2luZC5jIGIvZ2RiL2ZyYW1lLXVud2luZC5jCmlu ZGV4IDk4ZDZiNDMuLjg2NmExNTYgMTAwNjQ0Ci0tLSBhL2dkYi9mcmFtZS11 bndpbmQuYworKysgYi9nZGIvZnJhbWUtdW53aW5kLmMKQEAgLTE1MSw3ICsx NTEsNyBAQCBmcmFtZV91bndpbmRfZ290X21lbW9yeSAoc3RydWN0IGZyYW1l X2luZm8gKmZyYW1lLCBpbnQgcmVnbnVtLCBDT1JFX0FERFIgYWRkcikKIHsK ICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAo ZnJhbWUpOwogCi0gIHJldHVybiB2YWx1ZV9hdF9sYXp5IChyZWdpc3Rlcl90 eXBlIChnZGJhcmNoLCByZWdudW0pLCBhZGRyKTsKKyAgcmV0dXJuIHZhbHVl X2F0X2xhenlfc3RhY2sgKHJlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIHJlZ251 bSksIGFkZHIpOwogfQogCiAvKiBSZXR1cm4gYSB2YWx1ZSB3aGljaCBpbmRp Y2F0ZXMgdGhhdCBGUkFNRSdzIHNhdmVkIHZlcnNpb24gb2YKZGlmZiAtLWdp dCBhL2dkYi9nZGJjb3JlLmggYi9nZGIvZ2RiY29yZS5oCmluZGV4IGVjM2Ux YTguLmQzMDNjNDQgMTAwNjQ0Ci0tLSBhL2dkYi9nZGJjb3JlLmgKKysrIGIv Z2RiL2dkYmNvcmUuaApAQCAtNDcsNiArNDcsMTAgQEAgZXh0ZXJuIHZvaWQg bWVtb3J5X2Vycm9yIChpbnQgc3RhdHVzLCBDT1JFX0FERFIgbWVtYWRkcik7 CiAKIGV4dGVybiB2b2lkIHJlYWRfbWVtb3J5IChDT1JFX0FERFIgbWVtYWRk ciwgZ2RiX2J5dGUgKm15YWRkciwgaW50IGxlbik7CiAKKy8qIExpa2UgdGFy Z2V0X3JlYWRfc3RhY2ssIGJ1dCByZXBvcnQgYW4gZXJyb3IgaWYgY2FuJ3Qg cmVhZC4gICovCisKK2V4dGVybiB2b2lkIHJlYWRfc3RhY2sgKENPUkVfQURE UiBtZW1hZGRyLCBnZGJfYnl0ZSAqbXlhZGRyLCBpbnQgbGVuKTsKKwogLyog UmVhZCBhbiBpbnRlZ2VyIGZyb20gZGVidWdnZWQgbWVtb3J5LCBnaXZlbiBh ZGRyZXNzIGFuZCBudW1iZXIgb2YKICAgIGJ5dGVzLiAgKi8KIApkaWZmIC0t Z2l0IGEvZ2RiL3RhcmdldC5jIGIvZ2RiL3RhcmdldC5jCmluZGV4IDhjM2Iy YmQuLjdjMDRiM2MgMTAwNjQ0Ci0tLSBhL2dkYi90YXJnZXQuYworKysgYi9n ZGIvdGFyZ2V0LmMKQEAgLTExMzIsOCArMTEzMiw5IEBAIHRhcmdldF9zZWN0 aW9uX2J5X2FkZHIgKHN0cnVjdCB0YXJnZXRfb3BzICp0YXJnZXQsIENPUkVf QUREUiBhZGRyKQogICAgdmFsdWUgYXJlIGp1c3QgYXMgZm9yIHRhcmdldF94 ZmVyX3BhcnRpYWwuICAqLwogCiBzdGF0aWMgTE9OR0VTVAotbWVtb3J5X3hm ZXJfcGFydGlhbCAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgdm9pZCAqcmVh ZGJ1ZiwgY29uc3Qgdm9pZCAqd3JpdGVidWYsCi0JCSAgICAgVUxPTkdFU1Qg bWVtYWRkciwgTE9OR0VTVCBsZW4pCittZW1vcnlfeGZlcl9wYXJ0aWFsIChz dHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBlbnVtIHRhcmdldF9vYmplY3Qgb2Jq ZWN0LAorCQkgICAgIHZvaWQgKnJlYWRidWYsIGNvbnN0IHZvaWQgKndyaXRl YnVmLCBVTE9OR0VTVCBtZW1hZGRyLAorCQkgICAgIExPTkdFU1QgbGVuKQog ewogICBMT05HRVNUIHJlczsKICAgaW50IHJlZ19sZW47CkBAIC0xMjEyLDcg KzEyMTMsOCBAQCBtZW1vcnlfeGZlcl9wYXJ0aWFsIChzdHJ1Y3QgdGFyZ2V0 X29wcyAqb3BzLCB2b2lkICpyZWFkYnVmLCBjb25zdCB2b2lkICp3cml0ZWJ1 ZgogICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICBpZiAocmVnaW9uLT5h dHRyaWIuY2FjaGUpCisgIGlmIChyZWdpb24tPmF0dHJpYi5jYWNoZQorICAg ICAgfHwgKGRjYWNoZV9zdGFja19lbmFibGVkX3AgJiYgb2JqZWN0ID09IFRB UkdFVF9PQkpFQ1RfU1RBQ0tfTUVNT1JZKSkKICAgICB7CiAgICAgICBpZiAo cmVhZGJ1ZiAhPSBOVUxMKQogCXJlcyA9IGRjYWNoZV94ZmVyX21lbW9yeSAo b3BzLCB0YXJnZXRfZGNhY2hlLCBtZW1hZGRyLCByZWFkYnVmLApAQCAtMTIz NCw2ICsxMjM2LDE1IEBAIG1lbW9yeV94ZmVyX3BhcnRpYWwgKHN0cnVjdCB0 YXJnZXRfb3BzICpvcHMsIHZvaWQgKnJlYWRidWYsIGNvbnN0IHZvaWQgKndy aXRlYnVmCiAJfQogICAgIH0KIAorICAvKiBNYWtlIHN1cmUgdGhlIGNhY2hl IGdldHMgdXBkYXRlZCBubyBtYXR0ZXIgd2hhdCAtIGlmIHdlIGFyZSB3cml0 aW5nCisgICAgIHRvIHRoZSBzdGFjaywgZXZlbiBpZiB0aGlzIHdyaXRlIGlz IG5vdCB0YWdnZWQgYXMgc3VjaCwgd2Ugc3RpbGwgbmVlZAorICAgICB0byB1 cGRhdGUgdGhlIGNhY2hlLiAqLworICBpZiAocmVhZGJ1ZiA9PSBOVUxMICYm ICFyZWdpb24tPmF0dHJpYi5jYWNoZSAmJgorICAgICAgZGNhY2hlX3N0YWNr X2VuYWJsZWRfcCAmJiBvYmplY3QgIT0gVEFSR0VUX09CSkVDVF9TVEFDS19N RU1PUlkpCisgICAgeworICAgICAgZGNhY2hlX3VwZGF0ZSAodGFyZ2V0X2Rj YWNoZSwgbWVtYWRkciwgKHZvaWQgKikgd3JpdGVidWYsIHJlZ19sZW4pOwor ICAgIH0KKwogICAvKiBJZiBub25lIG9mIHRob3NlIG1ldGhvZHMgZm91bmQg dGhlIG1lbW9yeSB3ZSB3YW50ZWQsIGZhbGwgYmFjawogICAgICB0byBhIHRh cmdldCBwYXJ0aWFsIHRyYW5zZmVyLiAgTm9ybWFsbHkgYSBzaW5nbGUgY2Fs bCB0bwogICAgICB0b194ZmVyX3BhcnRpYWwgaXMgZW5vdWdoOyBpZiBpdCBk b2Vzbid0IHJlY29nbml6ZSBhbiBvYmplY3QKQEAgLTEyOTcsOCArMTMwOCw5 IEBAIHRhcmdldF94ZmVyX3BhcnRpYWwgKHN0cnVjdCB0YXJnZXRfb3BzICpv cHMsCiAgIC8qIElmIHRoaXMgaXMgYSBtZW1vcnkgdHJhbnNmZXIsIGxldCB0 aGUgbWVtb3J5LXNwZWNpZmljIGNvZGUKICAgICAgaGF2ZSBhIGxvb2sgYXQg aXQgaW5zdGVhZC4gIE1lbW9yeSB0cmFuc2ZlcnMgYXJlIG1vcmUKICAgICAg Y29tcGxpY2F0ZWQuICAqLwotICBpZiAob2JqZWN0ID09IFRBUkdFVF9PQkpF Q1RfTUVNT1JZKQotICAgIHJldHZhbCA9IG1lbW9yeV94ZmVyX3BhcnRpYWwg KG9wcywgcmVhZGJ1Ziwgd3JpdGVidWYsIG9mZnNldCwgbGVuKTsKKyAgaWYg KG9iamVjdCA9PSBUQVJHRVRfT0JKRUNUX01FTU9SWSB8fCBvYmplY3QgPT0g VEFSR0VUX09CSkVDVF9TVEFDS19NRU1PUlkpCisgICAgcmV0dmFsID0gbWVt b3J5X3hmZXJfcGFydGlhbCAob3BzLCBvYmplY3QsIHJlYWRidWYsCisJCQkJ ICB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4pOwogICBlbHNlCiAgICAgewogICAg ICAgZW51bSB0YXJnZXRfb2JqZWN0IHJhd19vYmplY3QgPSBvYmplY3Q7CkBA IC0xMzgwLDYgKzEzOTIsMjMgQEAgdGFyZ2V0X3JlYWRfbWVtb3J5IChDT1JF X0FERFIgbWVtYWRkciwgZ2RiX2J5dGUgKm15YWRkciwgaW50IGxlbikKICAg ICByZXR1cm4gRUlPOwogfQogCisvKiBMaWtlIHRhcmdldF9yZWFkX21lbW9y eSwgYnV0IHNwZWNpZnkgZXhwbGljaXRseSB0aGF0IHRoaXMgaXMgYSByZWFk IGZyb20KKyAgIHRoZSB0YXJnZXQncyBzdGFjay4gVGhpcyBtYXkgdHJpZ2dl ciBkaWZmZXJlbnQgY2FjaGUgYmVoYXZpb3IuICovCisKK2ludAordGFyZ2V0 X3JlYWRfc3RhY2sgKENPUkVfQUREUiBtZW1hZGRyLCBnZGJfYnl0ZSAqbXlh ZGRyLCBpbnQgbGVuKQoreworICAvKiBEaXNwYXRjaCB0byB0aGUgdG9wbW9z dCB0YXJnZXQsIG5vdCB0aGUgZmxhdHRlbmVkIGN1cnJlbnRfdGFyZ2V0Lgor ICAgICBNZW1vcnkgYWNjZXNzZXMgY2hlY2sgdGFyZ2V0LT50b19oYXNfKGFs bF8pbWVtb3J5LCBhbmQgdGhlCisgICAgIGZsYXR0ZW5lZCB0YXJnZXQgZG9l c24ndCBpbmhlcml0IHRob3NlLiAgKi8KKworICBpZiAodGFyZ2V0X3JlYWQg KGN1cnJlbnRfdGFyZ2V0LmJlbmVhdGgsIFRBUkdFVF9PQkpFQ1RfU1RBQ0tf TUVNT1JZLCBOVUxMLAorCQkgICBteWFkZHIsIG1lbWFkZHIsIGxlbikgPT0g bGVuKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgcmV0dXJuIEVJTzsK K30KKwogaW50CiB0YXJnZXRfd3JpdGVfbWVtb3J5IChDT1JFX0FERFIgbWVt YWRkciwgY29uc3QgZ2RiX2J5dGUgKm15YWRkciwgaW50IGxlbikKIHsKZGlm ZiAtLWdpdCBhL2dkYi90YXJnZXQuaCBiL2dkYi90YXJnZXQuaAppbmRleCA4 OWQ5OWJiLi5lZmRiY2VhIDEwMDY0NAotLS0gYS9nZGIvdGFyZ2V0LmgKKysr IGIvZ2RiL3RhcmdldC5oCkBAIC0yMDIsNiArMjAyLDEwIEBAIGVudW0gdGFy Z2V0X29iamVjdAogICAgICBUYXJnZXQgaW1wbGVtZW50YXRpb25zIG9mIHRv X3hmZXJfcGFydGlhbCBuZXZlciBuZWVkIHRvIGhhbmRsZQogICAgICB0aGlz IG9iamVjdCwgYW5kIG1vc3QgY2FsbGVycyBzaG91bGQgbm90IHVzZSBpdC4g ICovCiAgIFRBUkdFVF9PQkpFQ1RfUkFXX01FTU9SWSwKKyAgLyogTWVtb3J5 IGtub3duIHRvIGJlIHBhcnQgb2YgdGhlIHRhcmdldCdzIHN0YWNrLiBUaGlz IGlzIGNhY2hlZCBldmVuCisgICAgIGlmIGl0IGlzIG5vdCBpbiBhIHJlZ2lv biBtYXJrZWQgYXMgc3VjaCwgc2luY2UgaXQgaXMga25vd24gdG8gYmUKKyAg ICAgIm5vcm1hbCIgUkFNLiAqLworICBUQVJHRVRfT0JKRUNUX1NUQUNLX01F TU9SWSwKICAgLyogS2VybmVsIFVud2luZCBUYWJsZS4gIFNlZSAiaWE2NC10 ZGVwLmMiLiAgKi8KICAgVEFSR0VUX09CSkVDVF9VTldJTkRfVEFCTEUsCiAg IC8qIFRyYW5zZmVyIGF1eGlsbGlhcnkgdmVjdG9yLiAgKi8KQEAgLTY2Myw2 ICs2NjcsOCBAQCBleHRlcm4gaW50IHRhcmdldF9yZWFkX3N0cmluZyAoQ09S RV9BRERSLCBjaGFyICoqLCBpbnQsIGludCAqKTsKIAogZXh0ZXJuIGludCB0 YXJnZXRfcmVhZF9tZW1vcnkgKENPUkVfQUREUiBtZW1hZGRyLCBnZGJfYnl0 ZSAqbXlhZGRyLCBpbnQgbGVuKTsKIAorZXh0ZXJuIGludCB0YXJnZXRfcmVh ZF9zdGFjayAoQ09SRV9BRERSIG1lbWFkZHIsIGdkYl9ieXRlICpteWFkZHIs IGludCBsZW4pOworCiBleHRlcm4gaW50IHRhcmdldF93cml0ZV9tZW1vcnkg KENPUkVfQUREUiBtZW1hZGRyLCBjb25zdCBnZGJfYnl0ZSAqbXlhZGRyLAog CQkJCWludCBsZW4pOwogCmRpZmYgLS1naXQgYS9nZGIvdmFsb3BzLmMgYi9n ZGIvdmFsb3BzLmMKaW5kZXggMWQxOTM5My4uYTA3YzQ5NSAxMDA2NDQKLS0t IGEvZ2RiL3ZhbG9wcy5jCisrKyBiL2dkYi92YWxvcHMuYwpAQCAtNTYyLDYg KzU2MiwzOSBAQCB2YWx1ZV9vbmUgKHN0cnVjdCB0eXBlICp0eXBlLCBlbnVt IGx2YWxfdHlwZSBsdikKICAgcmV0dXJuIHZhbDsKIH0KIAorLyogSGVscGVy IGZ1bmN0aW9uIGZvciB2YWx1ZV9hdCwgdmFsdWVfYXRfbGF6eSwgYW5kIHZh bHVlX2F0X2xhenlfc3RhY2suICAqLworCitzdGF0aWMgc3RydWN0IHZhbHVl ICoKK2dldF92YWx1ZV9hdCAoc3RydWN0IHR5cGUgKnR5cGUsIENPUkVfQURE UiBhZGRyLCBpbnQgbGF6eSwgaW50IHN0YWNrKQoreworICBzdHJ1Y3QgdmFs dWUgKnZhbDsKKworICBpZiAoVFlQRV9DT0RFIChjaGVja190eXBlZGVmICh0 eXBlKSkgPT0gVFlQRV9DT0RFX1ZPSUQpCisgICAgZXJyb3IgKF8oIkF0dGVt cHQgdG8gZGVyZWZlcmVuY2UgYSBnZW5lcmljIHBvaW50ZXIuIikpOworCisg IGlmIChsYXp5KQorICAgIHsKKyAgICAgIHZhbCA9IGFsbG9jYXRlX3ZhbHVl X2xhenkgKHR5cGUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHZh bCA9IGFsbG9jYXRlX3ZhbHVlICh0eXBlKTsKKworICAgICAgaWYgKHN0YWNr KQorICAgICAgICByZWFkX3N0YWNrIChhZGRyLCB2YWx1ZV9jb250ZW50c19h bGxfcmF3ICh2YWwpLCBUWVBFX0xFTkdUSCAodHlwZSkpOworICAgICAgZWxz ZQorICAgICAgICByZWFkX21lbW9yeSAoYWRkciwgdmFsdWVfY29udGVudHNf YWxsX3JhdyAodmFsKSwgVFlQRV9MRU5HVEggKHR5cGUpKTsKKyAgICB9CisK KyAgaWYgKHN0YWNrKQorICAgIHNldF92YWx1ZV9zdGFjayAodmFsLCAxKTsK KworICBWQUxVRV9MVkFMICh2YWwpID0gbHZhbF9tZW1vcnk7CisgIHNldF92 YWx1ZV9hZGRyZXNzICh2YWwsIGFkZHIpOworCisgIHJldHVybiB2YWw7Cit9 CisKIC8qIFJldHVybiBhIHZhbHVlIHdpdGggdHlwZSBUWVBFIGxvY2F0ZWQg YXQgQUREUi4KIAogICAgQ2FsbCB2YWx1ZV9hdCBvbmx5IGlmIHRoZSBkYXRh IG5lZWRzIHRvIGJlIGZldGNoZWQgaW1tZWRpYXRlbHk7CkBAIC01NzcsMTkg KzYxMCw3IEBAIHZhbHVlX29uZSAoc3RydWN0IHR5cGUgKnR5cGUsIGVudW0g bHZhbF90eXBlIGx2KQogc3RydWN0IHZhbHVlICoKIHZhbHVlX2F0IChzdHJ1 Y3QgdHlwZSAqdHlwZSwgQ09SRV9BRERSIGFkZHIpCiB7Ci0gIHN0cnVjdCB2 YWx1ZSAqdmFsOwotCi0gIGlmIChUWVBFX0NPREUgKGNoZWNrX3R5cGVkZWYg KHR5cGUpKSA9PSBUWVBFX0NPREVfVk9JRCkKLSAgICBlcnJvciAoXygiQXR0 ZW1wdCB0byBkZXJlZmVyZW5jZSBhIGdlbmVyaWMgcG9pbnRlci4iKSk7Ci0K LSAgdmFsID0gYWxsb2NhdGVfdmFsdWUgKHR5cGUpOwotCi0gIHJlYWRfbWVt b3J5IChhZGRyLCB2YWx1ZV9jb250ZW50c19hbGxfcmF3ICh2YWwpLCBUWVBF X0xFTkdUSCAodHlwZSkpOwotCi0gIFZBTFVFX0xWQUwgKHZhbCkgPSBsdmFs X21lbW9yeTsKLSAgc2V0X3ZhbHVlX2FkZHJlc3MgKHZhbCwgYWRkcik7Ci0K LSAgcmV0dXJuIHZhbDsKKyAgcmV0dXJuIGdldF92YWx1ZV9hdCAodHlwZSwg YWRkciwgMCwgMCk7CiB9CiAKIC8qIFJldHVybiBhIGxhenkgdmFsdWUgd2l0 aCB0eXBlIFRZUEUgbG9jYXRlZCBhdCBBRERSIChjZi4gdmFsdWVfYXQpLiAg Ki8KQEAgLTU5NywxNyArNjE4LDE3IEBAIHZhbHVlX2F0IChzdHJ1Y3QgdHlw ZSAqdHlwZSwgQ09SRV9BRERSIGFkZHIpCiBzdHJ1Y3QgdmFsdWUgKgogdmFs dWVfYXRfbGF6eSAoc3RydWN0IHR5cGUgKnR5cGUsIENPUkVfQUREUiBhZGRy KQogewotICBzdHJ1Y3QgdmFsdWUgKnZhbDsKLQotICBpZiAoVFlQRV9DT0RF IChjaGVja190eXBlZGVmICh0eXBlKSkgPT0gVFlQRV9DT0RFX1ZPSUQpCi0g ICAgZXJyb3IgKF8oIkF0dGVtcHQgdG8gZGVyZWZlcmVuY2UgYSBnZW5lcmlj IHBvaW50ZXIuIikpOworICByZXR1cm4gZ2V0X3ZhbHVlX2F0ICh0eXBlLCBh ZGRyLCAxLCAwKTsKK30KIAotICB2YWwgPSBhbGxvY2F0ZV92YWx1ZV9sYXp5 ICh0eXBlKTsKKy8qIFJldHVybiBhIGxhenkgdmFsdWUgd2l0aCB0eXBlIFRZ UEUgbG9jYXRlZCBhdCBBRERSIChjZi4gdmFsdWVfYXQpLiAgSWYKKyAgIGFu ZCB3aGVuIHRoZSB2YWx1ZSBpcyBhY3R1YWxseSBmZXRjaGVkLCBpdCB3aWxs IGJlIG1hcmtlZCBhcyBhIHN0YWNrCisgICBhY2Nlc3MuICAqLwogCi0gIFZB TFVFX0xWQUwgKHZhbCkgPSBsdmFsX21lbW9yeTsKLSAgc2V0X3ZhbHVlX2Fk ZHJlc3MgKHZhbCwgYWRkcik7Ci0KLSAgcmV0dXJuIHZhbDsKK3N0cnVjdCB2 YWx1ZSAqCit2YWx1ZV9hdF9sYXp5X3N0YWNrIChzdHJ1Y3QgdHlwZSAqdHlw ZSwgQ09SRV9BRERSIGFkZHIpCit7CisgIHJldHVybiBnZXRfdmFsdWVfYXQg KHR5cGUsIGFkZHIsIDEsIDEpOwogfQogCiAvKiBDYWxsZWQgb25seSBmcm9t IHRoZSB2YWx1ZV9jb250ZW50cyBhbmQgdmFsdWVfY29udGVudHNfYWxsKCkK QEAgLTYzNCw4ICs2NTUsMTIgQEAgdmFsdWVfZmV0Y2hfbGF6eSAoc3RydWN0 IHZhbHVlICp2YWwpCiAgICAgICBDT1JFX0FERFIgYWRkciA9IHZhbHVlX2Fk ZHJlc3MgKHZhbCk7CiAgICAgICBpbnQgbGVuZ3RoID0gVFlQRV9MRU5HVEgg KGNoZWNrX3R5cGVkZWYgKHZhbHVlX2VuY2xvc2luZ190eXBlICh2YWwpKSk7 CiAKLSAgICAgIGlmIChsZW5ndGgpCi0JcmVhZF9tZW1vcnkgKGFkZHIsIHZh bHVlX2NvbnRlbnRzX2FsbF9yYXcgKHZhbCksIGxlbmd0aCk7CisgICAgICBp ZiAobGVuZ3RoKSB7CisJaWYgKHZhbHVlX3N0YWNrICh2YWwpKQorCSAgcmVh ZF9zdGFjayAoYWRkciwgdmFsdWVfY29udGVudHNfYWxsX3JhdyAodmFsKSwg bGVuZ3RoKTsKKyAgICAgICAgZWxzZQorCSAgcmVhZF9tZW1vcnkgKGFkZHIs IHZhbHVlX2NvbnRlbnRzX2FsbF9yYXcgKHZhbCksIGxlbmd0aCk7CisgICAg ICB9CiAgICAgfQogICBlbHNlIGlmIChWQUxVRV9MVkFMICh2YWwpID09IGx2 YWxfcmVnaXN0ZXIpCiAgICAgewpkaWZmIC0tZ2l0IGEvZ2RiL3ZhbHVlLmMg Yi9nZGIvdmFsdWUuYwppbmRleCA3NTY2OTIxLi45ZTcwYjFjIDEwMDY0NAot LS0gYS9nZGIvdmFsdWUuYworKysgYi9nZGIvdmFsdWUuYwpAQCAtMTkwLDYg KzE5MCwxMCBAQCBzdHJ1Y3QgdmFsdWUKICAgLyogSWYgdmFsdWUgaXMgYSB2 YXJpYWJsZSwgaXMgaXQgaW5pdGlhbGl6ZWQgb3Igbm90LiAgKi8KICAgaW50 IGluaXRpYWxpemVkOwogCisgIC8qIElmIHZhbHVlIGlzIGZyb20gdGhlIHN0 YWNrLiBJZiB0aGlzIGlzIHNldCwgcmVhZF9zdGFjayB3aWxsIGJlCisgICAg IHVzZWQgaW5zdGVhZCBvZiByZWFkX21lbW9yeSB0byBlbmFibGUgZXh0cmEg Y2FjaGluZy4gKi8KKyAgaW50IHN0YWNrOworCiAgIC8qIEFjdHVhbCBjb250 ZW50cyBvZiB0aGUgdmFsdWUuICBUYXJnZXQgYnl0ZS1vcmRlci4gIE5VTEwg b3Igbm90CiAgICAgIHZhbGlkIGlmIGxhenkgaXMgbm9uemVyby4gICovCiAg IGdkYl9ieXRlICpjb250ZW50czsKQEAgLTQzMyw2ICs0MzcsMTggQEAgc2V0 X3ZhbHVlX2xhenkgKHN0cnVjdCB2YWx1ZSAqdmFsdWUsIGludCB2YWwpCiAg IHZhbHVlLT5sYXp5ID0gdmFsOwogfQogCitpbnQKK3ZhbHVlX3N0YWNrIChz dHJ1Y3QgdmFsdWUgKnZhbHVlKQoreworICByZXR1cm4gdmFsdWUtPnN0YWNr OworfQorCit2b2lkCitzZXRfdmFsdWVfc3RhY2sgKHN0cnVjdCB2YWx1ZSAq dmFsdWUsIGludCB2YWwpCit7CisgIHZhbHVlLT5zdGFjayA9IHZhbDsKK30K KwogY29uc3QgZ2RiX2J5dGUgKgogdmFsdWVfY29udGVudHMgKHN0cnVjdCB2 YWx1ZSAqdmFsdWUpCiB7CmRpZmYgLS1naXQgYS9nZGIvdmFsdWUuaCBiL2dk Yi92YWx1ZS5oCmluZGV4IGMzMWNjZTUuLmMyM2IwZGYgMTAwNjQ0Ci0tLSBh L2dkYi92YWx1ZS5oCisrKyBiL2dkYi92YWx1ZS5oCkBAIC0yMTQsNiArMjE0 LDkgQEAgZXh0ZXJuIHZvaWQgKnZhbHVlX2NvbXB1dGVkX2Nsb3N1cmUgKHN0 cnVjdCB2YWx1ZSAqdmFsdWUpOwogZXh0ZXJuIGludCB2YWx1ZV9sYXp5IChz dHJ1Y3QgdmFsdWUgKik7CiBleHRlcm4gdm9pZCBzZXRfdmFsdWVfbGF6eSAo c3RydWN0IHZhbHVlICp2YWx1ZSwgaW50IHZhbCk7CiAKK2V4dGVybiBpbnQg dmFsdWVfc3RhY2sgKHN0cnVjdCB2YWx1ZSAqKTsKK2V4dGVybiB2b2lkIHNl dF92YWx1ZV9zdGFjayAoc3RydWN0IHZhbHVlICp2YWx1ZSwgaW50IHZhbCk7 CisKIC8qIHZhbHVlX2NvbnRlbnRzKCkgYW5kIHZhbHVlX2NvbnRlbnRzX3Jh dygpIGJvdGggcmV0dXJuIHRoZSBhZGRyZXNzCiAgICBvZiB0aGUgZ2RiIGJ1 ZmZlciB1c2VkIHRvIGhvbGQgYSBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0 aGUgbHZhbC4KICAgIHZhbHVlX2NvbnRlbnRzKCkgaXMgdXNlZCB3aGVuIHRo ZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGFyZSBuZWVkZWQKQEAgLTM0Miw2 ICszNDUsNyBAQCBleHRlcm4gc3RydWN0IHZhbHVlICp2YWx1ZV9mcm9tX2Rl Y2Zsb2F0IChzdHJ1Y3QgdHlwZSAqdHlwZSwKIAogZXh0ZXJuIHN0cnVjdCB2 YWx1ZSAqdmFsdWVfYXQgKHN0cnVjdCB0eXBlICp0eXBlLCBDT1JFX0FERFIg YWRkcik7CiBleHRlcm4gc3RydWN0IHZhbHVlICp2YWx1ZV9hdF9sYXp5IChz dHJ1Y3QgdHlwZSAqdHlwZSwgQ09SRV9BRERSIGFkZHIpOworZXh0ZXJuIHN0 cnVjdCB2YWx1ZSAqdmFsdWVfYXRfbGF6eV9zdGFjayAoc3RydWN0IHR5cGUg KnR5cGUsIENPUkVfQUREUiBhZGRyKTsKIAogZXh0ZXJuIHN0cnVjdCB2YWx1 ZSAqdmFsdWVfZnJvbV9jb250ZW50c19hbmRfYWRkcmVzcyAoc3RydWN0IHR5 cGUgKiwKIAkJCQkJCSAgICAgIGNvbnN0IGdkYl9ieXRlICosCg== --0016e6dd89f53b5dc1046d814fa7--