Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rd7XK-003vrL-70 for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Feb 2024 11:46:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rd7XG-00ArSS-Tp for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Feb 2024 11:46:43 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rd7XG-00ArSJ-GE for pgsql-hackers@lists.postgresql.org; Thu, 22 Feb 2024 11:46:43 +0000 Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rd7XD-000Kd1-Kn for pgsql-hackers@postgresql.org; Thu, 22 Feb 2024 11:46:42 +0000 Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-2d2505352e6so32532091fa.3 for ; Thu, 22 Feb 2024 03:46:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708602398; x=1709207198; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ETqLw1nEkKHVPZuvrLwaq/kuQpJZS/yfKUg6UAeoNuI=; b=DpGOGVgUcW9HRkrPu+sGnyuK3mrJuvACQYI8fJKxTJBBDGseVW//G4ZJrRwZWYYABB UCeel8Mzw9xbR2a4hQrM6rnKDUa7IVenq4wmN2v5S6u2o5+fXaNXtdvjPjHEVnpUHjW6 OmH6ePUMrtVNvokhJUSBzIv4Mc0hpxdtYvW8yjtn129Xs8M8MBGxiH5112gh6d1txwyQ l6fiYPh7iv5rrb0rTlIR71e04Be0v+hy6VIwHnDuwOEIsrI25ET4qi7rfmsPgRpkEBBK j9TWUT2djhMtUuQjJRGBt+sU6795XSugjEFtqGbpH/vdKJC+eQlCWI2tCFy5FGU8y7xW d3Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708602398; x=1709207198; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ETqLw1nEkKHVPZuvrLwaq/kuQpJZS/yfKUg6UAeoNuI=; b=eS93vW5W/bmkx5pLbI1sS7P05X2eOycvv5Bh+8+CYdHeDPVOg578p1r+E80Lh+QBk0 jJDDEMH3e4tsfFWmiTt+6YRIIE+BcU17mnv6p1aY40UyprP+7SX12XDhp6zyKSjdNlaW xCBhe9zy306McbDRlJy4cUsuU7i3xEh8AGMzToMhZNAoXaiJp4dPjVx4ZxckWXm8e49F 9Nu2TtiuB9HMHo0nPJ+vPeHcKUSmMtCIVOMG17NpiQZNloVpKhZACpmYUPe+x8BE7yQ+ S1C3XB3SNpf8c0SakhnQQEjfS0XpPB6iOmwEnEJuw338XSBmlS1uEeTOep2cZ1AbaWBI L82g== X-Gm-Message-State: AOJu0YyDrQ4IVJLmKKk4tgYv/JQNSH6rFBletjdsx7I+XPwb1bCR04+S GOmr9LMN/J/ExLQyhQLcAkEsuKLarQZduBmZGD3TR7ylfkBjDEaG9XzFYiUkO8ZgXgHQG+wPoHJ 7rxkW5GM3d+YBMowb+q4rKxCUW28= X-Google-Smtp-Source: AGHT+IGDvnVem01qtAIZkEhzpWG6J9IpEs8z311/sQbJDWgiPyJZiuIAE6Vv1KVDWvJxcvyRPojH+J7hBVhnaeStAFk= X-Received: by 2002:a05:6512:49d:b0:512:98d1:d5e1 with SMTP id v29-20020a056512049d00b0051298d1d5e1mr10888577lfq.21.1708602397872; Thu, 22 Feb 2024 03:46:37 -0800 (PST) MIME-Version: 1.0 References: <20210719195950.gavgs6ujzmjfaiig@alap3.anarazel.de> <20230719085236.jltxal2eztqrprfg@awork3.anarazel.de> In-Reply-To: From: David Rowley Date: Fri, 23 Feb 2024 00:46:26 +1300 Message-ID: Subject: Re: Avoid stack frame setup in performance critical routines using tail calls To: Andres Freund Cc: pgsql-hackers@postgresql.org, Robert Haas , Michael Paquier , Tomas Vondra Content-Type: multipart/mixed; boundary="000000000000fced810611f6fe80" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fced810611f6fe80 Content-Type: text/plain; charset="UTF-8" I've rebased the 0001 patch and gone over it again and made a few additional changes besides what I mentioned in my review. On Wed, 9 Aug 2023 at 20:44, David Rowley wrote: > Here's a review of v2-0001: > 2. Why do you need to add the NULL check here? > > #ifdef USE_VALGRIND > - if (method != MCTX_ALIGNED_REDIRECT_ID) > + if (ret != NULL && method != MCTX_ALIGNED_REDIRECT_ID) > VALGRIND_MEMPOOL_CHANGE(context, pointer, ret, size); > #endif I removed this NULL check as we're calling the realloc function with no flags, so it shouldn't return NULL as it'll error out from any OOM errors. > 3. > > /* > * XXX: Probably no need to check for huge allocations, we only support > * one size? Which could theoretically be huge, but that'd not make > * sense... > */ > > They can't be huge per Assert(fullChunkSize <= MEMORYCHUNK_MAX_VALUE) > in SlabContextCreate(). I removed this comment and adjusted the comment just below that which checks the 'size' matches the expected slab chunk size. i.e. /* * Make sure we only allow correct request size. This doubles as the * MemoryContextCheckSize check. */ if (unlikely(size != slab->chunkSize)) > 4. It would be good to see some API documentation in the > MemoryContextMethods struct. This adds a lot of responsibility onto > the context implementation without any extra documentation to explain > what, for example, palloc is responsible for and what the alloc > function needs to do itself. I've done that too. I also added header comments for MemoryContextAllocationFailure and MemoryContextSizeFailure and added some comments to explain in places like palloc() to warn people not to add checks after the 'alloc' call. The rebased patch is 0001 and all of my changes are in 0002. I will rebase your original 0002 patch later. I think 0001 is much more important, as evident by the reported benchmarks on this thread. In absence of anyone else looking at this, I think it's ready to go. If anyone is following along and wants to review or test it, please do so soon. David --000000000000fced810611f6fe80 Content-Type: text/plain; charset="US-ASCII"; name="v3-0001-Optimize-palloc-etc-to-allow-sibling-calls.patch" Content-Disposition: attachment; filename="v3-0001-Optimize-palloc-etc-to-allow-sibling-calls.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lsx5p8ax0 RnJvbSA4NTQ3NTFhZWIxZDBiOTE3YmY2ZTk2YzMwZTgwZjg0ODBmOTZlODgzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMTggSnVsIDIwMjMgMTg6NTU6NTggLTA3MDAKU3ViamVjdDogW1BBVENIIHYzIDEv Ml0gT3B0aW1pemUgcGFsbG9jKCkgZXRjIHRvIGFsbG93IHNpYmxpbmcgY2FsbHMKClRoZSByZWFz b24gcGFsbG9jKCkgZXRjIHByZXZpb3VzbHkgY291bGRuJ3QgdXNlIHNpYmxpbmcgY2FsbHMgaXMg dGhhdCB0aGV5IGRpZApjaGVjayB0aGUgcmV0dXJuZWQgdmFsdWUgKHRvIGUuZy4gcmFpc2UgYW4g ZXJyb3Igd2hlbiB0aGUgYWxsb2NhdGlvbgpmYWlscykuIFB1c2ggdGhlIGVycm9yIGhhbmRsaW5n IGRvd24gaW50byB0aGUgbWVtb3J5IGNvbnRleHQgaW1wbGVtZW50YXRpb24gLQp0aGV5IGNhbiBh dm9pZCBwZXJmb3JtaW5nIHRoZSBjaGVjayBhdCBhbGwgaW4gdGhlIGhvdCBjb2RlIHBhdGhzLgot LS0KIHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYWxpZ25lZGFsbG9jLmMgfCAgMTEgKy0KIHNyYy9i YWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jICAgICAgICAgfCAgMjMgKystLQogc3JjL2JhY2tlbmQv dXRpbHMvbW1nci9nZW5lcmF0aW9uLmMgICB8ICAxNCArKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21t Z3IvbWN4dC5jICAgICAgICAgfCAxNzIgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9i YWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jICAgICAgICAgfCAgMTIgKy0KIHNyYy9pbmNsdWRlL25v ZGVzL21lbW5vZGVzLmggICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL21lbXV0 aWxzX2ludGVybmFsLmggfCAgMjkgKysrLS0KIDcgZmlsZXMgY2hhbmdlZCwgMTAxIGluc2VydGlv bnMoKyksIDE2NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t bWdyL2FsaWduZWRhbGxvYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9hbGlnbmVkYWxsb2Mu YwppbmRleCA3MjA0ZmU2NGFlLi5jMjY2ZmIzZGJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9tbWdyL2FsaWduZWRhbGxvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYWxp Z25lZGFsbG9jLmMKQEAgLTU3LDcgKzU3LDcgQEAgQWxpZ25lZEFsbG9jRnJlZSh2b2lkICpwb2lu dGVyKQogICoJCW1lbW9yeSB3aWxsIGJlIHVuaW5pdGlhbGl6ZWQuCiAgKi8KIHZvaWQgKgotQWxp Z25lZEFsbG9jUmVhbGxvYyh2b2lkICpwb2ludGVyLCBTaXplIHNpemUpCitBbGlnbmVkQWxsb2NS ZWFsbG9jKHZvaWQgKnBvaW50ZXIsIFNpemUgc2l6ZSwgaW50IGZsYWdzKQogewogCU1lbW9yeUNo dW5rICpyZWRpcmNodW5rID0gUG9pbnRlckdldE1lbW9yeUNodW5rKHBvaW50ZXIpOwogCVNpemUJ CWFsaWdudG87CkBAIC05NywxNCArOTcsMTcgQEAgQWxpZ25lZEFsbG9jUmVhbGxvYyh2b2lkICpw b2ludGVyLCBTaXplIHNpemUpCiAjZW5kaWYKIAogCWN0eCA9IEdldE1lbW9yeUNodW5rQ29udGV4 dCh1bmFsaWduZWQpOwotCW5ld3B0ciA9IE1lbW9yeUNvbnRleHRBbGxvY0FsaWduZWQoY3R4LCBz aXplLCBhbGlnbnRvLCAwKTsKKwluZXdwdHIgPSBNZW1vcnlDb250ZXh0QWxsb2NBbGlnbmVkKGN0 eCwgc2l6ZSwgYWxpZ250bywgZmxhZ3MpOwogCiAJLyoKIAkgKiBXZSBtYXkgbWVtY3B5IGJleW9u ZCB0aGUgZW5kIG9mIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uIHJlcXVlc3Qgc2l6ZSwKIAkgKiBz byB3ZSBtdXN0IG1hcmsgdGhlIGVudGlyZSBhbGxvY2F0aW9uIGFzIGRlZmluZWQuCiAJICovCi0J VkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChwb2ludGVyLCBvbGRfc2l6ZSk7Ci0JbWVtY3B5KG5l d3B0ciwgcG9pbnRlciwgTWluKHNpemUsIG9sZF9zaXplKSk7CisJaWYgKGxpa2VseShuZXdwdHIg IT0gTlVMTCkpCisJeworCQlWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKHBvaW50ZXIsIG9sZF9z aXplKTsKKwkJbWVtY3B5KG5ld3B0ciwgcG9pbnRlciwgTWluKHNpemUsIG9sZF9zaXplKSk7CisJ fQogCXBmcmVlKHVuYWxpZ25lZCk7CiAKIAlyZXR1cm4gbmV3cHRyOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbW1nci9hc2V0LmMgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL2FzZXQu YwppbmRleCAyZjk5ZmE5YTJmLi44MWMzMTIwYzJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9tbWdyL2FzZXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL2FzZXQuYwpAQCAt NzAwLDcgKzcwMCw3IEBAIEFsbG9jU2V0RGVsZXRlKE1lbW9yeUNvbnRleHQgY29udGV4dCkKICAq IHJldHVybiBzcGFjZSB0aGF0IGlzIG1hcmtlZCBOT0FDQ0VTUyAtIEFsbG9jU2V0UmVhbGxvYyBo YXMgdG8gYmV3YXJlIQogICovCiB2b2lkICoKLUFsbG9jU2V0QWxsb2MoTWVtb3J5Q29udGV4dCBj b250ZXh0LCBTaXplIHNpemUpCitBbGxvY1NldEFsbG9jKE1lbW9yeUNvbnRleHQgY29udGV4dCwg U2l6ZSBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJQWxsb2NTZXQJc2V0ID0gKEFsbG9jU2V0KSBjb250 ZXh0OwogCUFsbG9jQmxvY2sJYmxvY2s7CkBAIC03MTcsNiArNzE3LDkgQEAgQWxsb2NTZXRBbGxv YyhNZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSkKIAkgKi8KIAlpZiAoc2l6ZSA+IHNl dC0+YWxsb2NDaHVua0xpbWl0KQogCXsKKwkJLyogY2hlY2sgc2l6ZSwgb25seSBhbGxvY2F0aW9u IHBhdGggd2hlcmUgdGhlIGxpbWl0cyBjb3VsZCBiZSBoaXQgKi8KKwkJTWVtb3J5Q29udGV4dENo ZWNrU2l6ZShjb250ZXh0LCBzaXplLCBmbGFncyk7CisKICNpZmRlZiBNRU1PUllfQ09OVEVYVF9D SEVDS0lORwogCQkvKiBlbnN1cmUgdGhlcmUncyBhbHdheXMgc3BhY2UgZm9yIHRoZSBzZW50aW5l bCBieXRlICovCiAJCWNodW5rX3NpemUgPSBNQVhBTElHTihzaXplICsgMSk7CkBAIC03MjcsNyAr NzMwLDcgQEAgQWxsb2NTZXRBbGxvYyhNZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSkK IAkJYmxrc2l6ZSA9IGNodW5rX3NpemUgKyBBTExPQ19CTE9DS0hEUlNaICsgQUxMT0NfQ0hVTktI RFJTWjsKIAkJYmxvY2sgPSAoQWxsb2NCbG9jaykgbWFsbG9jKGJsa3NpemUpOwogCQlpZiAoYmxv Y2sgPT0gTlVMTCkKLQkJCXJldHVybiBOVUxMOworCQkJcmV0dXJuIE1lbW9yeUNvbnRleHRBbGxv Y2F0aW9uRmFpbHVyZShjb250ZXh0LCBzaXplLCBmbGFncyk7CiAKIAkJY29udGV4dC0+bWVtX2Fs bG9jYXRlZCArPSBibGtzaXplOwogCkBAIC05NDAsNyArOTQzLDcgQEAgQWxsb2NTZXRBbGxvYyhN ZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSkKIAkJfQogCiAJCWlmIChibG9jayA9PSBO VUxMKQotCQkJcmV0dXJuIE5VTEw7CisJCQlyZXR1cm4gTWVtb3J5Q29udGV4dEFsbG9jYXRpb25G YWlsdXJlKGNvbnRleHQsIHNpemUsIGZsYWdzKTsKIAogCQljb250ZXh0LT5tZW1fYWxsb2NhdGVk ICs9IGJsa3NpemU7CiAKQEAgLTExMDYsNyArMTEwOSw3IEBAIEFsbG9jU2V0RnJlZSh2b2lkICpw b2ludGVyKQogICogcmVxdWVzdCBzaXplLikKICAqLwogdm9pZCAqCi1BbGxvY1NldFJlYWxsb2Mo dm9pZCAqcG9pbnRlciwgU2l6ZSBzaXplKQorQWxsb2NTZXRSZWFsbG9jKHZvaWQgKnBvaW50ZXIs IFNpemUgc2l6ZSwgaW50IGZsYWdzKQogewogCUFsbG9jQmxvY2sJYmxvY2s7CiAJQWxsb2NTZXQJ c2V0OwpAQCAtMTEzOSw2ICsxMTQyLDkgQEAgQWxsb2NTZXRSZWFsbG9jKHZvaWQgKnBvaW50ZXIs IFNpemUgc2l6ZSkKIAogCQlzZXQgPSBibG9jay0+YXNldDsKIAorCQkvKiBjaGVjayBzaXplLCBv bmx5IGFsbG9jYXRpb24gcGF0aCB3aGVyZSB0aGUgbGltaXRzIGNvdWxkIGJlIGhpdCAqLworCQlN ZW1vcnlDb250ZXh0Q2hlY2tTaXplKChNZW1vcnlDb250ZXh0KSBzZXQsIHNpemUsIGZsYWdzKTsK KwogCQlvbGRjaGtzaXplID0gYmxvY2stPmVuZHB0ciAtIChjaGFyICopIHBvaW50ZXI7CiAKICNp ZmRlZiBNRU1PUllfQ09OVEVYVF9DSEVDS0lORwpAQCAtMTE2NSw3ICsxMTcxLDggQEAgQWxsb2NT ZXRSZWFsbG9jKHZvaWQgKnBvaW50ZXIsIFNpemUgc2l6ZSkKIAkJewogCQkJLyogRGlzYWxsb3cg YWNjZXNzIHRvIHRoZSBjaHVuayBoZWFkZXIuICovCiAJCQlWQUxHUklORF9NQUtFX01FTV9OT0FD Q0VTUyhjaHVuaywgQUxMT0NfQ0hVTktIRFJTWik7Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCXJldHVy biBNZW1vcnlDb250ZXh0QWxsb2NhdGlvbkZhaWx1cmUoJnNldC0+aGVhZGVyLCBzaXplLCBmbGFn cyk7CisKIAkJfQogCiAJCS8qIHVwZGF0ZWQgc2VwYXJhdGVseSwgbm90IHRvIHVuZGVyZmxvdyB3 aGVuIChvbGRibGtzaXplID4gYmxrc2l6ZSkgKi8KQEAgLTEzMjUsMTUgKzEzMzIsMTUgQEAgQWxs b2NTZXRSZWFsbG9jKHZvaWQgKnBvaW50ZXIsIFNpemUgc2l6ZSkKIAkJQWxsb2NQb2ludGVyIG5l d1BvaW50ZXI7CiAJCVNpemUJCW9sZHNpemU7CiAKLQkJLyogYWxsb2NhdGUgbmV3IGNodW5rICov Ci0JCW5ld1BvaW50ZXIgPSBBbGxvY1NldEFsbG9jKChNZW1vcnlDb250ZXh0KSBzZXQsIHNpemUp OworCQkvKiBhbGxvY2F0ZSBuZXcgY2h1bmsgKGFsc28gY2hlY2tzIHNpemUgZm9yIHVzKSAqLwor CQluZXdQb2ludGVyID0gQWxsb2NTZXRBbGxvYygoTWVtb3J5Q29udGV4dCkgc2V0LCBzaXplLCBm bGFncyk7CiAKIAkJLyogbGVhdmUgaW1tZWRpYXRlbHkgaWYgcmVxdWVzdCB3YXMgbm90IGNvbXBs ZXRlZCAqLwogCQlpZiAobmV3UG9pbnRlciA9PSBOVUxMKQogCQl7CiAJCQkvKiBEaXNhbGxvdyBh Y2Nlc3MgdG8gdGhlIGNodW5rIGhlYWRlci4gKi8KIAkJCVZBTEdSSU5EX01BS0VfTUVNX05PQUND RVNTKGNodW5rLCBBTExPQ19DSFVOS0hEUlNaKTsKLQkJCXJldHVybiBOVUxMOworCQkJcmV0dXJu IE1lbW9yeUNvbnRleHRBbGxvY2F0aW9uRmFpbHVyZSgoTWVtb3J5Q29udGV4dCkgc2V0LCBzaXpl LCBmbGFncyk7CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1n ci9nZW5lcmF0aW9uLmMgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL2dlbmVyYXRpb24uYwppbmRl eCBmOTAxNmE3ZWQ3Li40YjQxNTViODYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9t bWdyL2dlbmVyYXRpb24uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL2dlbmVyYXRpb24u YwpAQCAtMzQ0LDcgKzM0NCw3IEBAIEdlbmVyYXRpb25EZWxldGUoTWVtb3J5Q29udGV4dCBjb250 ZXh0KQogICogcmV0dXJuIHNwYWNlIHRoYXQgaXMgbWFya2VkIE5PQUNDRVNTIC0gR2VuZXJhdGlv blJlYWxsb2MgaGFzIHRvIGJld2FyZSEKICAqLwogdm9pZCAqCi1HZW5lcmF0aW9uQWxsb2MoTWVt b3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUpCitHZW5lcmF0aW9uQWxsb2MoTWVtb3J5Q29u dGV4dCBjb250ZXh0LCBTaXplIHNpemUsIGludCBmbGFncykKIHsKIAlHZW5lcmF0aW9uQ29udGV4 dCAqc2V0ID0gKEdlbmVyYXRpb25Db250ZXh0ICopIGNvbnRleHQ7CiAJR2VuZXJhdGlvbkJsb2Nr ICpibG9jazsKQEAgLTM2Nyw5ICszNjcsMTEgQEAgR2VuZXJhdGlvbkFsbG9jKE1lbW9yeUNvbnRl eHQgY29udGV4dCwgU2l6ZSBzaXplKQogCXsKIAkJU2l6ZQkJYmxrc2l6ZSA9IHJlcXVpcmVkX3Np emUgKyBHZW5lcmF0aW9uX0JMT0NLSERSU1o7CiAKKwkJTWVtb3J5Q29udGV4dENoZWNrU2l6ZSgo TWVtb3J5Q29udGV4dCkgc2V0LCBzaXplLCBmbGFncyk7CisKIAkJYmxvY2sgPSAoR2VuZXJhdGlv bkJsb2NrICopIG1hbGxvYyhibGtzaXplKTsKIAkJaWYgKGJsb2NrID09IE5VTEwpCi0JCQlyZXR1 cm4gTlVMTDsKKwkJCXJldHVybiBNZW1vcnlDb250ZXh0QWxsb2NhdGlvbkZhaWx1cmUoY29udGV4 dCwgc2l6ZSwgZmxhZ3MpOwogCiAJCWNvbnRleHQtPm1lbV9hbGxvY2F0ZWQgKz0gYmxrc2l6ZTsK IApAQCAtNDcyLDcgKzQ3NCw3IEBAIEdlbmVyYXRpb25BbGxvYyhNZW1vcnlDb250ZXh0IGNvbnRl eHQsIFNpemUgc2l6ZSkKIAkJCWJsb2NrID0gKEdlbmVyYXRpb25CbG9jayAqKSBtYWxsb2MoYmxr c2l6ZSk7CiAKIAkJCWlmIChibG9jayA9PSBOVUxMKQotCQkJCXJldHVybiBOVUxMOworCQkJCXJl dHVybiBNZW1vcnlDb250ZXh0QWxsb2NhdGlvbkZhaWx1cmUoY29udGV4dCwgc2l6ZSwgZmxhZ3Mp OwogCiAJCQljb250ZXh0LT5tZW1fYWxsb2NhdGVkICs9IGJsa3NpemU7CiAKQEAgLTczNyw3ICs3 MzksNyBAQCBHZW5lcmF0aW9uRnJlZSh2b2lkICpwb2ludGVyKQogICoJCWludG8gdGhlIG9sZCBj aHVuayAtIGluIHRoYXQgY2FzZSB3ZSBqdXN0IHVwZGF0ZSBjaHVuayBoZWFkZXIuCiAgKi8KIHZv aWQgKgotR2VuZXJhdGlvblJlYWxsb2Modm9pZCAqcG9pbnRlciwgU2l6ZSBzaXplKQorR2VuZXJh dGlvblJlYWxsb2Modm9pZCAqcG9pbnRlciwgU2l6ZSBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJTWVt b3J5Q2h1bmsgKmNodW5rID0gUG9pbnRlckdldE1lbW9yeUNodW5rKHBvaW50ZXIpOwogCUdlbmVy YXRpb25Db250ZXh0ICpzZXQ7CkBAIC04NDAsMTQgKzg0MiwxNCBAQCBHZW5lcmF0aW9uUmVhbGxv Yyh2b2lkICpwb2ludGVyLCBTaXplIHNpemUpCiAJfQogCiAJLyogYWxsb2NhdGUgbmV3IGNodW5r ICovCi0JbmV3UG9pbnRlciA9IEdlbmVyYXRpb25BbGxvYygoTWVtb3J5Q29udGV4dCkgc2V0LCBz aXplKTsKKwluZXdQb2ludGVyID0gR2VuZXJhdGlvbkFsbG9jKChNZW1vcnlDb250ZXh0KSBzZXQs IHNpemUsIGZsYWdzKTsKIAogCS8qIGxlYXZlIGltbWVkaWF0ZWx5IGlmIHJlcXVlc3Qgd2FzIG5v dCBjb21wbGV0ZWQgKi8KIAlpZiAobmV3UG9pbnRlciA9PSBOVUxMKQogCXsKIAkJLyogRGlzYWxs b3cgYWNjZXNzIHRvIHRoZSBjaHVuayBoZWFkZXIuICovCiAJCVZBTEdSSU5EX01BS0VfTUVNX05P QUNDRVNTKGNodW5rLCBHZW5lcmF0aW9uX0NIVU5LSERSU1opOwotCQlyZXR1cm4gTlVMTDsKKwkJ cmV0dXJuIE1lbW9yeUNvbnRleHRBbGxvY2F0aW9uRmFpbHVyZSgoTWVtb3J5Q29udGV4dCkgc2V0 LCBzaXplLCBmbGFncyk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L21tZ3IvbWN4dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKaW5kZXggYWQ3NDA5 YTAyYy4uMjk0N2IyMDQ2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0 LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKQEAgLTM0LDcgKzM0LDcgQEAK IAogCiBzdGF0aWMgdm9pZCBCb2d1c0ZyZWUodm9pZCAqcG9pbnRlcik7Ci1zdGF0aWMgdm9pZCAq Qm9ndXNSZWFsbG9jKHZvaWQgKnBvaW50ZXIsIFNpemUgc2l6ZSk7CitzdGF0aWMgdm9pZCAqQm9n dXNSZWFsbG9jKHZvaWQgKnBvaW50ZXIsIFNpemUgc2l6ZSwgaW50IGZsYWdzKTsKIHN0YXRpYyBN ZW1vcnlDb250ZXh0IEJvZ3VzR2V0Q2h1bmtDb250ZXh0KHZvaWQgKnBvaW50ZXIpOwogc3RhdGlj IFNpemUgQm9ndXNHZXRDaHVua1NwYWNlKHZvaWQgKnBvaW50ZXIpOwogCkBAIC0yMzcsNyArMjM3 LDcgQEAgQm9ndXNGcmVlKHZvaWQgKnBvaW50ZXIpCiB9CiAKIHN0YXRpYyB2b2lkICoKLUJvZ3Vz UmVhbGxvYyh2b2lkICpwb2ludGVyLCBTaXplIHNpemUpCitCb2d1c1JlYWxsb2Modm9pZCAqcG9p bnRlciwgU2l6ZSBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJZWxvZyhFUlJPUiwgInJlcGFsbG9jIGNh bGxlZCB3aXRoIGludmFsaWQgcG9pbnRlciAlcCAoaGVhZGVyIDB4JTAxNmxseCkiLAogCQkgcG9p bnRlciwgKHVuc2lnbmVkIGxvbmcgbG9uZykgR2V0TWVtb3J5Q2h1bmtIZWFkZXIocG9pbnRlcikp OwpAQCAtMTAyMyw2ICsxMDIzLDI3IEBAIE1lbW9yeUNvbnRleHRDcmVhdGUoTWVtb3J5Q29udGV4 dCBub2RlLAogCVZBTEdSSU5EX0NSRUFURV9NRU1QT09MKG5vZGUsIDAsIGZhbHNlKTsKIH0KIAor dm9pZCAqCitNZW1vcnlDb250ZXh0QWxsb2NhdGlvbkZhaWx1cmUoTWVtb3J5Q29udGV4dCBjb250 ZXh0LCBTaXplIHNpemUsIGludCBmbGFncykKK3sKKwlpZiAoKGZsYWdzICYgTUNYVF9BTExPQ19O T19PT00pID09IDApCisJeworCQlNZW1vcnlDb250ZXh0U3RhdHMoVG9wTWVtb3J5Q29udGV4dCk7 CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwK KwkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IiksCisJCQkJIGVycmRldGFpbCgiRmFpbGVkIG9u IHJlcXVlc3Qgb2Ygc2l6ZSAlenUgaW4gbWVtb3J5IGNvbnRleHQgXCIlc1wiLiIsCisJCQkJCQkg ICBzaXplLCBjb250ZXh0LT5uYW1lKSkpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZAor TWVtb3J5Q29udGV4dFNpemVGYWlsdXJlKE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6ZSBzaXpl LCBpbnQgZmxhZ3MpCit7CisJZWxvZyhFUlJPUiwgImludmFsaWQgbWVtb3J5IGFsbG9jIHJlcXVl c3Qgc2l6ZSAlenUiLCBzaXplKTsKK30KKwogLyoKICAqIE1lbW9yeUNvbnRleHRBbGxvYwogICoJ CUFsbG9jYXRlIHNwYWNlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGNvbnRleHQuCkBAIC0xMDM4LDI4 ICsxMDU5LDkgQEAgTWVtb3J5Q29udGV4dEFsbG9jKE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6 ZSBzaXplKQogCUFzc2VydChNZW1vcnlDb250ZXh0SXNWYWxpZChjb250ZXh0KSk7CiAJQXNzZXJ0 Tm90SW5Dcml0aWNhbFNlY3Rpb24oY29udGV4dCk7CiAKLQlpZiAoIUFsbG9jU2l6ZUlzVmFsaWQo c2l6ZSkpCi0JCWVsb2coRVJST1IsICJpbnZhbGlkIG1lbW9yeSBhbGxvYyByZXF1ZXN0IHNpemUg JXp1Iiwgc2l6ZSk7Ci0KIAljb250ZXh0LT5pc1Jlc2V0ID0gZmFsc2U7CiAKLQlyZXQgPSBjb250 ZXh0LT5tZXRob2RzLT5hbGxvYyhjb250ZXh0LCBzaXplKTsKLQlpZiAodW5saWtlbHkocmV0ID09 IE5VTEwpKQotCXsKLQkJTWVtb3J5Q29udGV4dFN0YXRzKFRvcE1lbW9yeUNvbnRleHQpOwotCi0J CS8qCi0JCSAqIEhlcmUsIGFuZCBlbHNld2hlcmUgaW4gdGhpcyBtb2R1bGUsIHdlIHNob3cgdGhl IHRhcmdldCBjb250ZXh0J3MKLQkJICogIm5hbWUiIGJ1dCBub3QgaXRzICJpZGVudCIgKGlmIGFu eSkgaW4gdXNlci12aXNpYmxlIGVycm9yIG1lc3NhZ2VzLgotCQkgKiBUaGUgImlkZW50IiBzdHJp bmcgbWlnaHQgY29udGFpbiBzZWN1cml0eS1zZW5zaXRpdmUgZGF0YSwgc3VjaCBhcwotCQkgKiB2 YWx1ZXMgaW4gU1FMIGNvbW1hbmRzLgotCQkgKi8KLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJy Y29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAotCQkJCSBlcnJtc2coIm91dCBvZiBtZW1vcnki KSwKLQkJCQkgZXJyZGV0YWlsKCJGYWlsZWQgb24gcmVxdWVzdCBvZiBzaXplICV6dSBpbiBtZW1v cnkgY29udGV4dCBcIiVzXCIuIiwKLQkJCQkJCSAgIHNpemUsIGNvbnRleHQtPm5hbWUpKSk7Ci0J fQorCXJldCA9IGNvbnRleHQtPm1ldGhvZHMtPmFsbG9jKGNvbnRleHQsIHNpemUsIDApOwogCiAJ VkFMR1JJTkRfTUVNUE9PTF9BTExPQyhjb250ZXh0LCByZXQsIHNpemUpOwogCkBAIC0xMDgxLDI0 ICsxMDgzLDE2IEBAIE1lbW9yeUNvbnRleHRBbGxvY1plcm8oTWVtb3J5Q29udGV4dCBjb250ZXh0 LCBTaXplIHNpemUpCiAJQXNzZXJ0KE1lbW9yeUNvbnRleHRJc1ZhbGlkKGNvbnRleHQpKTsKIAlB c3NlcnROb3RJbkNyaXRpY2FsU2VjdGlvbihjb250ZXh0KTsKIAotCWlmICghQWxsb2NTaXplSXNW YWxpZChzaXplKSkKLQkJZWxvZyhFUlJPUiwgImludmFsaWQgbWVtb3J5IGFsbG9jIHJlcXVlc3Qg c2l6ZSAlenUiLCBzaXplKTsKLQogCWNvbnRleHQtPmlzUmVzZXQgPSBmYWxzZTsKIAotCXJldCA9 IGNvbnRleHQtPm1ldGhvZHMtPmFsbG9jKGNvbnRleHQsIHNpemUpOwotCWlmICh1bmxpa2VseShy ZXQgPT0gTlVMTCkpCi0JewotCQlNZW1vcnlDb250ZXh0U3RhdHMoVG9wTWVtb3J5Q29udGV4dCk7 Ci0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwK LQkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IiksCi0JCQkJIGVycmRldGFpbCgiRmFpbGVkIG9u IHJlcXVlc3Qgb2Ygc2l6ZSAlenUgaW4gbWVtb3J5IGNvbnRleHQgXCIlc1wiLiIsCi0JCQkJCQkg ICBzaXplLCBjb250ZXh0LT5uYW1lKSkpOwotCX0KKwlyZXQgPSBjb250ZXh0LT5tZXRob2RzLT5h bGxvYyhjb250ZXh0LCBzaXplLCAwKTsKIAogCVZBTEdSSU5EX01FTVBPT0xfQUxMT0MoY29udGV4 dCwgcmV0LCBzaXplKTsKIAorCS8qCisJICogWFhYOiBTaG91bGQgdGhpcyBhbHNvIGJlIG1vdmVk IGludG8gYWxsb2MoKT8gV2UgY291bGQgcG9zc2libHkgYXZvaWQKKwkgKiB6ZXJvaW5nIGluIHNv bWUgY2FzZXMgKGUuZy4gaWYgd2UgdXNlZCBtbWFwKCkgb3Vyc2VsdmVzLgorCSAqLwogCU1lbVNl dEFsaWduZWQocmV0LCAwLCBzaXplKTsKIAogCXJldHVybiByZXQ7CkBAIC0xMTIyLDIwICsxMTE2 LDkgQEAgTWVtb3J5Q29udGV4dEFsbG9jRXh0ZW5kZWQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBT aXplIHNpemUsIGludCBmbGFncykKIAogCWNvbnRleHQtPmlzUmVzZXQgPSBmYWxzZTsKIAotCXJl dCA9IGNvbnRleHQtPm1ldGhvZHMtPmFsbG9jKGNvbnRleHQsIHNpemUpOworCXJldCA9IGNvbnRl eHQtPm1ldGhvZHMtPmFsbG9jKGNvbnRleHQsIHNpemUsIGZsYWdzKTsKIAlpZiAodW5saWtlbHko cmV0ID09IE5VTEwpKQotCXsKLQkJaWYgKChmbGFncyAmIE1DWFRfQUxMT0NfTk9fT09NKSA9PSAw KQotCQl7Ci0JCQlNZW1vcnlDb250ZXh0U3RhdHMoVG9wTWVtb3J5Q29udGV4dCk7Ci0JCQllcmVw b3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAotCQkJCQkg ZXJybXNnKCJvdXQgb2YgbWVtb3J5IiksCi0JCQkJCSBlcnJkZXRhaWwoIkZhaWxlZCBvbiByZXF1 ZXN0IG9mIHNpemUgJXp1IGluIG1lbW9yeSBjb250ZXh0IFwiJXNcIi4iLAotCQkJCQkJCSAgIHNp emUsIGNvbnRleHQtPm5hbWUpKSk7Ci0JCX0KIAkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJVkFMR1JJ TkRfTUVNUE9PTF9BTExPQyhjb250ZXh0LCByZXQsIHNpemUpOwogCkBAIC0xMjA3LDIyICsxMTkw LDExIEBAIHBhbGxvYyhTaXplIHNpemUpCiAJQXNzZXJ0KE1lbW9yeUNvbnRleHRJc1ZhbGlkKGNv bnRleHQpKTsKIAlBc3NlcnROb3RJbkNyaXRpY2FsU2VjdGlvbihjb250ZXh0KTsKIAotCWlmICgh QWxsb2NTaXplSXNWYWxpZChzaXplKSkKLQkJZWxvZyhFUlJPUiwgImludmFsaWQgbWVtb3J5IGFs bG9jIHJlcXVlc3Qgc2l6ZSAlenUiLCBzaXplKTsKLQogCWNvbnRleHQtPmlzUmVzZXQgPSBmYWxz ZTsKIAotCXJldCA9IGNvbnRleHQtPm1ldGhvZHMtPmFsbG9jKGNvbnRleHQsIHNpemUpOwotCWlm ICh1bmxpa2VseShyZXQgPT0gTlVMTCkpCi0JewotCQlNZW1vcnlDb250ZXh0U3RhdHMoVG9wTWVt b3J5Q29udGV4dCk7Ci0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRf T0ZfTUVNT1JZKSwKLQkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IiksCi0JCQkJIGVycmRldGFp bCgiRmFpbGVkIG9uIHJlcXVlc3Qgb2Ygc2l6ZSAlenUgaW4gbWVtb3J5IGNvbnRleHQgXCIlc1wi LiIsCi0JCQkJCQkgICBzaXplLCBjb250ZXh0LT5uYW1lKSkpOwotCX0KKwlyZXQgPSBjb250ZXh0 LT5tZXRob2RzLT5hbGxvYyhjb250ZXh0LCBzaXplLCAwKTsKIAorCUFzc2VydChyZXQgIT0gMCk7 CiAJVkFMR1JJTkRfTUVNUE9PTF9BTExPQyhjb250ZXh0LCByZXQsIHNpemUpOwogCiAJcmV0dXJu IHJldDsKQEAgLTEyMzgsMjEgKzEyMTAsOSBAQCBwYWxsb2MwKFNpemUgc2l6ZSkKIAlBc3NlcnQo TWVtb3J5Q29udGV4dElzVmFsaWQoY29udGV4dCkpOwogCUFzc2VydE5vdEluQ3JpdGljYWxTZWN0 aW9uKGNvbnRleHQpOwogCi0JaWYgKCFBbGxvY1NpemVJc1ZhbGlkKHNpemUpKQotCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBtZW1vcnkgYWxsb2MgcmVxdWVzdCBzaXplICV6dSIsIHNpemUpOwotCiAJ Y29udGV4dC0+aXNSZXNldCA9IGZhbHNlOwogCi0JcmV0ID0gY29udGV4dC0+bWV0aG9kcy0+YWxs b2MoY29udGV4dCwgc2l6ZSk7Ci0JaWYgKHVubGlrZWx5KHJldCA9PSBOVUxMKSkKLQl7Ci0JCU1l bW9yeUNvbnRleHRTdGF0cyhUb3BNZW1vcnlDb250ZXh0KTsKLQkJZXJlcG9ydChFUlJPUiwKLQkJ CQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAotCQkJCSBlcnJtc2coIm91dCBvZiBt ZW1vcnkiKSwKLQkJCQkgZXJyZGV0YWlsKCJGYWlsZWQgb24gcmVxdWVzdCBvZiBzaXplICV6dSBp biBtZW1vcnkgY29udGV4dCBcIiVzXCIuIiwKLQkJCQkJCSAgIHNpemUsIGNvbnRleHQtPm5hbWUp KSk7Ci0JfQorCXJldCA9IGNvbnRleHQtPm1ldGhvZHMtPmFsbG9jKGNvbnRleHQsIHNpemUsIDAp OwogCiAJVkFMR1JJTkRfTUVNUE9PTF9BTExPQyhjb250ZXh0LCByZXQsIHNpemUpOwogCkBAIC0x MjcxLDI0ICsxMjMxLDExIEBAIHBhbGxvY19leHRlbmRlZChTaXplIHNpemUsIGludCBmbGFncykK IAlBc3NlcnQoTWVtb3J5Q29udGV4dElzVmFsaWQoY29udGV4dCkpOwogCUFzc2VydE5vdEluQ3Jp dGljYWxTZWN0aW9uKGNvbnRleHQpOwogCi0JaWYgKCEoKGZsYWdzICYgTUNYVF9BTExPQ19IVUdF KSAhPSAwID8gQWxsb2NIdWdlU2l6ZUlzVmFsaWQoc2l6ZSkgOgotCQkgIEFsbG9jU2l6ZUlzVmFs aWQoc2l6ZSkpKQotCQllbG9nKEVSUk9SLCAiaW52YWxpZCBtZW1vcnkgYWxsb2MgcmVxdWVzdCBz aXplICV6dSIsIHNpemUpOwotCiAJY29udGV4dC0+aXNSZXNldCA9IGZhbHNlOwogCi0JcmV0ID0g Y29udGV4dC0+bWV0aG9kcy0+YWxsb2MoY29udGV4dCwgc2l6ZSk7CisJcmV0ID0gY29udGV4dC0+ bWV0aG9kcy0+YWxsb2MoY29udGV4dCwgc2l6ZSwgZmxhZ3MpOwogCWlmICh1bmxpa2VseShyZXQg PT0gTlVMTCkpCiAJewotCQlpZiAoKGZsYWdzICYgTUNYVF9BTExPQ19OT19PT00pID09IDApCi0J CXsKLQkJCU1lbW9yeUNvbnRleHRTdGF0cyhUb3BNZW1vcnlDb250ZXh0KTsKLQkJCWVyZXBvcnQo RVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCi0JCQkJCSBlcnJt c2coIm91dCBvZiBtZW1vcnkiKSwKLQkJCQkJIGVycmRldGFpbCgiRmFpbGVkIG9uIHJlcXVlc3Qg b2Ygc2l6ZSAlenUgaW4gbWVtb3J5IGNvbnRleHQgXCIlc1wiLiIsCi0JCQkJCQkJICAgc2l6ZSwg Y29udGV4dC0+bmFtZSkpKTsKLQkJfQogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTE0NTgsMjkg KzE0MDUsMTUgQEAgcmVwYWxsb2Modm9pZCAqcG9pbnRlciwgU2l6ZSBzaXplKQogI2VuZGlmCiAJ dm9pZAkgICAqcmV0OwogCi0JaWYgKCFBbGxvY1NpemVJc1ZhbGlkKHNpemUpKQotCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBtZW1vcnkgYWxsb2MgcmVxdWVzdCBzaXplICV6dSIsIHNpemUpOwotCiAJ QXNzZXJ0Tm90SW5Dcml0aWNhbFNlY3Rpb24oY29udGV4dCk7CiAKIAkvKiBpc1Jlc2V0IG11c3Qg YmUgZmFsc2UgYWxyZWFkeSAqLwogCUFzc2VydCghY29udGV4dC0+aXNSZXNldCk7CiAKLQlyZXQg PSBNQ1hUX01FVEhPRChwb2ludGVyLCByZWFsbG9jKSAocG9pbnRlciwgc2l6ZSk7Ci0JaWYgKHVu bGlrZWx5KHJldCA9PSBOVUxMKSkKLQl7Ci0JCU1lbW9yeUNvbnRleHQgY3h0ID0gR2V0TWVtb3J5 Q2h1bmtDb250ZXh0KHBvaW50ZXIpOwotCi0JCU1lbW9yeUNvbnRleHRTdGF0cyhUb3BNZW1vcnlD b250ZXh0KTsKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9N RU1PUlkpLAotCQkJCSBlcnJtc2coIm91dCBvZiBtZW1vcnkiKSwKLQkJCQkgZXJyZGV0YWlsKCJG YWlsZWQgb24gcmVxdWVzdCBvZiBzaXplICV6dSBpbiBtZW1vcnkgY29udGV4dCBcIiVzXCIuIiwK LQkJCQkJCSAgIHNpemUsIGN4dC0+bmFtZSkpKTsKLQl9CisJcmV0ID0gTUNYVF9NRVRIT0QocG9p bnRlciwgcmVhbGxvYykgKHBvaW50ZXIsIHNpemUsIDApOwogCiAjaWZkZWYgVVNFX1ZBTEdSSU5E Ci0JaWYgKG1ldGhvZCAhPSBNQ1RYX0FMSUdORURfUkVESVJFQ1RfSUQpCisJaWYgKHJldCAhPSBO VUxMICYmIG1ldGhvZCAhPSBNQ1RYX0FMSUdORURfUkVESVJFQ1RfSUQpCiAJCVZBTEdSSU5EX01F TVBPT0xfQ0hBTkdFKGNvbnRleHQsIHBvaW50ZXIsIHJldCwgc2l6ZSk7CiAjZW5kaWYKIApAQCAt MTUwMCwzMSArMTQzMywxNCBAQCByZXBhbGxvY19leHRlbmRlZCh2b2lkICpwb2ludGVyLCBTaXpl IHNpemUsIGludCBmbGFncykKICNlbmRpZgogCXZvaWQJICAgKnJldDsKIAotCWlmICghKChmbGFn cyAmIE1DWFRfQUxMT0NfSFVHRSkgIT0gMCA/IEFsbG9jSHVnZVNpemVJc1ZhbGlkKHNpemUpIDoK LQkJICBBbGxvY1NpemVJc1ZhbGlkKHNpemUpKSkKLQkJZWxvZyhFUlJPUiwgImludmFsaWQgbWVt b3J5IGFsbG9jIHJlcXVlc3Qgc2l6ZSAlenUiLCBzaXplKTsKLQogCUFzc2VydE5vdEluQ3JpdGlj YWxTZWN0aW9uKGNvbnRleHQpOwogCiAJLyogaXNSZXNldCBtdXN0IGJlIGZhbHNlIGFscmVhZHkg Ki8KIAlBc3NlcnQoIWNvbnRleHQtPmlzUmVzZXQpOwogCi0JcmV0ID0gTUNYVF9NRVRIT0QocG9p bnRlciwgcmVhbGxvYykgKHBvaW50ZXIsIHNpemUpOworCXJldCA9IE1DWFRfTUVUSE9EKHBvaW50 ZXIsIHJlYWxsb2MpIChwb2ludGVyLCBzaXplLCBmbGFncyk7CiAJaWYgKHVubGlrZWx5KHJldCA9 PSBOVUxMKSkKLQl7Ci0JCWlmICgoZmxhZ3MgJiBNQ1hUX0FMTE9DX05PX09PTSkgPT0gMCkKLQkJ ewotCQkJTWVtb3J5Q29udGV4dCBjeHQgPSBHZXRNZW1vcnlDaHVua0NvbnRleHQocG9pbnRlcik7 Ci0KLQkJCU1lbW9yeUNvbnRleHRTdGF0cyhUb3BNZW1vcnlDb250ZXh0KTsKLQkJCWVyZXBvcnQo RVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCi0JCQkJCSBlcnJt c2coIm91dCBvZiBtZW1vcnkiKSwKLQkJCQkJIGVycmRldGFpbCgiRmFpbGVkIG9uIHJlcXVlc3Qg b2Ygc2l6ZSAlenUgaW4gbWVtb3J5IGNvbnRleHQgXCIlc1wiLiIsCi0JCQkJCQkJICAgc2l6ZSwg Y3h0LT5uYW1lKSkpOwotCQl9CiAJCXJldHVybiBOVUxMOwotCX0KIAogCVZBTEdSSU5EX01FTVBP T0xfQ0hBTkdFKGNvbnRleHQsIHBvaW50ZXIsIHJldCwgc2l6ZSk7CiAKQEAgLTE1NjUsMjEgKzE0 ODEsOSBAQCBNZW1vcnlDb250ZXh0QWxsb2NIdWdlKE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6 ZSBzaXplKQogCUFzc2VydChNZW1vcnlDb250ZXh0SXNWYWxpZChjb250ZXh0KSk7CiAJQXNzZXJ0 Tm90SW5Dcml0aWNhbFNlY3Rpb24oY29udGV4dCk7CiAKLQlpZiAoIUFsbG9jSHVnZVNpemVJc1Zh bGlkKHNpemUpKQotCQllbG9nKEVSUk9SLCAiaW52YWxpZCBtZW1vcnkgYWxsb2MgcmVxdWVzdCBz aXplICV6dSIsIHNpemUpOwotCiAJY29udGV4dC0+aXNSZXNldCA9IGZhbHNlOwogCi0JcmV0ID0g Y29udGV4dC0+bWV0aG9kcy0+YWxsb2MoY29udGV4dCwgc2l6ZSk7Ci0JaWYgKHVubGlrZWx5KHJl dCA9PSBOVUxMKSkKLQl7Ci0JCU1lbW9yeUNvbnRleHRTdGF0cyhUb3BNZW1vcnlDb250ZXh0KTsK LQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAot CQkJCSBlcnJtc2coIm91dCBvZiBtZW1vcnkiKSwKLQkJCQkgZXJyZGV0YWlsKCJGYWlsZWQgb24g cmVxdWVzdCBvZiBzaXplICV6dSBpbiBtZW1vcnkgY29udGV4dCBcIiVzXCIuIiwKLQkJCQkJCSAg IHNpemUsIGNvbnRleHQtPm5hbWUpKSk7Ci0JfQorCXJldCA9IGNvbnRleHQtPm1ldGhvZHMtPmFs bG9jKGNvbnRleHQsIHNpemUsIE1DWFRfQUxMT0NfSFVHRSk7CiAKIAlWQUxHUklORF9NRU1QT09M X0FMTE9DKGNvbnRleHQsIHJldCwgc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21tZ3Ivc2xhYi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9zbGFiLmMKaW5kZXggYjhm MDBjZmM3Yy4uMTM0NWM4ZDUwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9z bGFiLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9zbGFiLmMKQEAgLTQ5Niw3ICs0OTYs NyBAQCBTbGFiRGVsZXRlKE1lbW9yeUNvbnRleHQgY29udGV4dCkKICAqCQlyZXF1ZXN0IGNvdWxk IG5vdCBiZSBjb21wbGV0ZWQ7IG1lbW9yeSBpcyBhZGRlZCB0byB0aGUgc2xhYi4KICAqLwogdm9p ZCAqCi1TbGFiQWxsb2MoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUpCitTbGFiQWxs b2MoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUsIGludCBmbGFncykKIHsKIAlTbGFi Q29udGV4dCAqc2xhYiA9IChTbGFiQ29udGV4dCAqKSBjb250ZXh0OwogCVNsYWJCbG9jayAgKmJs b2NrOwpAQCAtNTA0LDYgKzUwNCwxMiBAQCBTbGFiQWxsb2MoTWVtb3J5Q29udGV4dCBjb250ZXh0 LCBTaXplIHNpemUpCiAKIAlBc3NlcnQoU2xhYklzVmFsaWQoc2xhYikpOwogCisJLyoKKwkgKiBY WFg6IFByb2JhYmx5IG5vIG5lZWQgdG8gY2hlY2sgZm9yIGh1Z2UgYWxsb2NhdGlvbnMsIHdlIG9u bHkgc3VwcG9ydAorCSAqIG9uZSBzaXplPyBXaGljaCBjb3VsZCB0aGVvcmV0aWNhbGx5IGJlIGh1 Z2UsIGJ1dCB0aGF0J2Qgbm90IG1ha2UKKwkgKiBzZW5zZS4uLgorCSAqLworCiAJLyogc2FuaXR5 IGNoZWNrIHRoYXQgdGhpcyBpcyBwb2ludGluZyB0byBhIHZhbGlkIGJsb2NrbGlzdCAqLwogCUFz c2VydChzbGFiLT5jdXJCbG9ja2xpc3RJbmRleCA+PSAwKTsKIAlBc3NlcnQoc2xhYi0+Y3VyQmxv Y2tsaXN0SW5kZXggPD0gU2xhYkJsb2NrbGlzdEluZGV4KHNsYWIsIHNsYWItPmNodW5rc1BlckJs b2NrKSk7CkBAIC01NDYsNyArNTUyLDcgQEAgU2xhYkFsbG9jKE1lbW9yeUNvbnRleHQgY29udGV4 dCwgU2l6ZSBzaXplKQogCQkJYmxvY2sgPSAoU2xhYkJsb2NrICopIG1hbGxvYyhzbGFiLT5ibG9j a1NpemUpOwogCiAJCQlpZiAodW5saWtlbHkoYmxvY2sgPT0gTlVMTCkpCi0JCQkJcmV0dXJuIE5V TEw7CisJCQkJcmV0dXJuIE1lbW9yeUNvbnRleHRBbGxvY2F0aW9uRmFpbHVyZShjb250ZXh0LCBz aXplLCBmbGFncyk7CiAKIAkJCWJsb2NrLT5zbGFiID0gc2xhYjsKIAkJCWNvbnRleHQtPm1lbV9h bGxvY2F0ZWQgKz0gc2xhYi0+YmxvY2tTaXplOwpAQCAtNzcwLDcgKzc3Niw3IEBAIFNsYWJGcmVl KHZvaWQgKnBvaW50ZXIpCiAgKiByZWFsbG9jIGlzIHVzdWFsbHkgdXNlZCB0byBlbmxhcmdlIHRo ZSBjaHVuay4KICAqLwogdm9pZCAqCi1TbGFiUmVhbGxvYyh2b2lkICpwb2ludGVyLCBTaXplIHNp emUpCitTbGFiUmVhbGxvYyh2b2lkICpwb2ludGVyLCBTaXplIHNpemUsIGludCBmbGFncykKIHsK IAlNZW1vcnlDaHVuayAqY2h1bmsgPSBQb2ludGVyR2V0TWVtb3J5Q2h1bmsocG9pbnRlcik7CiAJ U2xhYkJsb2NrICAqYmxvY2s7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWVtbm9kZXMuaAppbmRleCBhNDhmN2U1YTE4Li5jYzhj YzU4YTBjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL21lbW5vZGVzLmgKQEAgLTU3LDEwICs1NywxMCBAQCB0eXBlZGVmIHZv aWQgKCpNZW1vcnlTdGF0c1ByaW50RnVuYykgKE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAq cGFzc3RocnUsCiAKIHR5cGVkZWYgc3RydWN0IE1lbW9yeUNvbnRleHRNZXRob2RzCiB7Ci0Jdm9p ZAkgICAqKCphbGxvYykgKE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6ZSBzaXplKTsKKwl2b2lk CSAgICooKmFsbG9jKSAoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUsIGludCBmbGFn cyk7CiAJLyogY2FsbCB0aGlzIGZyZWVfcCBpbiBjYXNlIHNvbWVvbmUgI2RlZmluZSdzIGZyZWUo KSAqLwogCXZvaWQJCSgqZnJlZV9wKSAodm9pZCAqcG9pbnRlcik7Ci0Jdm9pZAkgICAqKCpyZWFs bG9jKSAodm9pZCAqcG9pbnRlciwgU2l6ZSBzaXplKTsKKwl2b2lkCSAgICooKnJlYWxsb2MpICh2 b2lkICpwb2ludGVyLCBTaXplIHNpemUsIGludCBmbGFncyk7CiAJdm9pZAkJKCpyZXNldCkgKE1l bW9yeUNvbnRleHQgY29udGV4dCk7CiAJdm9pZAkJKCpkZWxldGVfY29udGV4dCkgKE1lbW9yeUNv bnRleHQgY29udGV4dCk7CiAJTWVtb3J5Q29udGV4dCAoKmdldF9jaHVua19jb250ZXh0KSAodm9p ZCAqcG9pbnRlcik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9tZW11dGlsc19pbnRl cm5hbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRpbHNfaW50ZXJuYWwuaAppbmRleCBlMGM0 ZjNkNWFmLi5lNWNlY2Q3MTIyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9tZW11dGls c19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxzX2ludGVybmFsLmgK QEAgLTE5LDkgKzE5LDkgQEAKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogCiAvKiBUaGVz ZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBNZW1vcnlDb250ZXh0IEFQSSBmb3IgQWxsb2NTZXQg Y29udGV4dC4gKi8KLWV4dGVybiB2b2lkICpBbGxvY1NldEFsbG9jKE1lbW9yeUNvbnRleHQgY29u dGV4dCwgU2l6ZSBzaXplKTsKK2V4dGVybiB2b2lkICpBbGxvY1NldEFsbG9jKE1lbW9yeUNvbnRl eHQgY29udGV4dCwgU2l6ZSBzaXplLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgQWxsb2NTZXRG cmVlKHZvaWQgKnBvaW50ZXIpOwotZXh0ZXJuIHZvaWQgKkFsbG9jU2V0UmVhbGxvYyh2b2lkICpw b2ludGVyLCBTaXplIHNpemUpOworZXh0ZXJuIHZvaWQgKkFsbG9jU2V0UmVhbGxvYyh2b2lkICpw b2ludGVyLCBTaXplIHNpemUsIGludCBmbGFncyk7CiBleHRlcm4gdm9pZCBBbGxvY1NldFJlc2V0 KE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRlcm4gdm9pZCBBbGxvY1NldERlbGV0ZShNZW1v cnlDb250ZXh0IGNvbnRleHQpOwogZXh0ZXJuIE1lbW9yeUNvbnRleHQgQWxsb2NTZXRHZXRDaHVu a0NvbnRleHQodm9pZCAqcG9pbnRlcik7CkBAIC0zNiw5ICszNiw5IEBAIGV4dGVybiB2b2lkIEFs bG9jU2V0Q2hlY2soTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKICNlbmRpZgogCiAvKiBUaGVzZSBm dW5jdGlvbnMgaW1wbGVtZW50IHRoZSBNZW1vcnlDb250ZXh0IEFQSSBmb3IgR2VuZXJhdGlvbiBj b250ZXh0LiAqLwotZXh0ZXJuIHZvaWQgKkdlbmVyYXRpb25BbGxvYyhNZW1vcnlDb250ZXh0IGNv bnRleHQsIFNpemUgc2l6ZSk7CitleHRlcm4gdm9pZCAqR2VuZXJhdGlvbkFsbG9jKE1lbW9yeUNv bnRleHQgY29udGV4dCwgU2l6ZSBzaXplLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgR2VuZXJh dGlvbkZyZWUodm9pZCAqcG9pbnRlcik7Ci1leHRlcm4gdm9pZCAqR2VuZXJhdGlvblJlYWxsb2Mo dm9pZCAqcG9pbnRlciwgU2l6ZSBzaXplKTsKK2V4dGVybiB2b2lkICpHZW5lcmF0aW9uUmVhbGxv Yyh2b2lkICpwb2ludGVyLCBTaXplIHNpemUsIGludCBmbGFncyk7CiBleHRlcm4gdm9pZCBHZW5l cmF0aW9uUmVzZXQoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIGV4dGVybiB2b2lkIEdlbmVyYXRp b25EZWxldGUoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIGV4dGVybiBNZW1vcnlDb250ZXh0IEdl bmVyYXRpb25HZXRDaHVua0NvbnRleHQodm9pZCAqcG9pbnRlcik7CkBAIC01NCw5ICs1NCw5IEBA IGV4dGVybiB2b2lkIEdlbmVyYXRpb25DaGVjayhNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogCiAK IC8qIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIE1lbW9yeUNvbnRleHQgQVBJIGZvciBT bGFiIGNvbnRleHQuICovCi1leHRlcm4gdm9pZCAqU2xhYkFsbG9jKE1lbW9yeUNvbnRleHQgY29u dGV4dCwgU2l6ZSBzaXplKTsKK2V4dGVybiB2b2lkICpTbGFiQWxsb2MoTWVtb3J5Q29udGV4dCBj b250ZXh0LCBTaXplIHNpemUsIGludCBmbGFncyk7CiBleHRlcm4gdm9pZCBTbGFiRnJlZSh2b2lk ICpwb2ludGVyKTsKLWV4dGVybiB2b2lkICpTbGFiUmVhbGxvYyh2b2lkICpwb2ludGVyLCBTaXpl IHNpemUpOworZXh0ZXJuIHZvaWQgKlNsYWJSZWFsbG9jKHZvaWQgKnBvaW50ZXIsIFNpemUgc2l6 ZSwgaW50IGZsYWdzKTsKIGV4dGVybiB2b2lkIFNsYWJSZXNldChNZW1vcnlDb250ZXh0IGNvbnRl eHQpOwogZXh0ZXJuIHZvaWQgU2xhYkRlbGV0ZShNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogZXh0 ZXJuIE1lbW9yeUNvbnRleHQgU2xhYkdldENodW5rQ29udGV4dCh2b2lkICpwb2ludGVyKTsKQEAg LTc1LDcgKzc1LDcgQEAgZXh0ZXJuIHZvaWQgU2xhYkNoZWNrKE1lbW9yeUNvbnRleHQgY29udGV4 dCk7CiAgKiBwYXJ0IG9mIGEgZnVsbHktZmxlZGdlZCBNZW1vcnlDb250ZXh0IHR5cGUuCiAgKi8K IGV4dGVybiB2b2lkIEFsaWduZWRBbGxvY0ZyZWUodm9pZCAqcG9pbnRlcik7Ci1leHRlcm4gdm9p ZCAqQWxpZ25lZEFsbG9jUmVhbGxvYyh2b2lkICpwb2ludGVyLCBTaXplIHNpemUpOworZXh0ZXJu IHZvaWQgKkFsaWduZWRBbGxvY1JlYWxsb2Modm9pZCAqcG9pbnRlciwgU2l6ZSBzaXplLCBpbnQg ZmxhZ3MpOwogZXh0ZXJuIE1lbW9yeUNvbnRleHQgQWxpZ25lZEFsbG9jR2V0Q2h1bmtDb250ZXh0 KHZvaWQgKnBvaW50ZXIpOwogZXh0ZXJuIFNpemUgQWxpZ25lZEFsbG9jR2V0Q2h1bmtTcGFjZSh2 b2lkICpwb2ludGVyKTsKIApAQCAtMTMzLDQgKzEzMywxOSBAQCBleHRlcm4gdm9pZCBNZW1vcnlD b250ZXh0Q3JlYXRlKE1lbW9yeUNvbnRleHQgbm9kZSwKIAkJCQkJCQkJTWVtb3J5Q29udGV4dCBw YXJlbnQsCiAJCQkJCQkJCWNvbnN0IGNoYXIgKm5hbWUpOwogCitleHRlcm4gdm9pZCAqTWVtb3J5 Q29udGV4dEFsbG9jYXRpb25GYWlsdXJlKE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6ZSBzaXpl LCBpbnQgZmxhZ3MpOworCitleHRlcm4gdm9pZCBNZW1vcnlDb250ZXh0U2l6ZUZhaWx1cmUoTWVt b3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUsIGludCBmbGFncykgcGdfYXR0cmlidXRlX25v cmV0dXJuKCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorTWVtb3J5Q29udGV4dENoZWNrU2l6ZShN ZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwgaW50IGZsYWdzKQoreworCWlmICh1bmxp a2VseSghQWxsb2NTaXplSXNWYWxpZChzaXplKSkpCisJeworCQlpZiAoIShmbGFncyAmIE1DWFRf QUxMT0NfSFVHRSkgfHwgIUFsbG9jSHVnZVNpemVJc1ZhbGlkKHNpemUpKQorCQkJTWVtb3J5Q29u dGV4dFNpemVGYWlsdXJlKGNvbnRleHQsIHNpemUsIGZsYWdzKTsKKwl9Cit9CisKKwogI2VuZGlm CQkJCQkJCS8qIE1FTVVUSUxTX0lOVEVSTkFMX0ggKi8KLS0gCjIuNDAuMQoK --000000000000fced810611f6fe80 Content-Type: text/plain; charset="US-ASCII"; name="v3-0002-fixup-Optimize-palloc-etc-to-allow-sibling-calls.patch" Content-Disposition: attachment; filename="v3-0002-fixup-Optimize-palloc-etc-to-allow-sibling-calls.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lsx5pb771 RnJvbSA5YjZmZmRjZWIzYzZmNTkyZDNkMTU5N2IxOWYxMjQwZDRhNzhkODQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogRnJpLCAyMyBGZWIgMjAyNCAwMDoyNzowNyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjMgMi8y XSBmaXh1cCEgT3B0aW1pemUgcGFsbG9jKCkgZXRjIHRvIGFsbG93IHNpYmxpbmcgY2FsbHMKCi0t LQogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgICAgICAgICB8IDY3ICsrKysrKysrKysr KysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9zbGFiLmMgICAgICAgICB8 IDExICsrLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rlcy5oICAgICAgICAgIHwgMzggKysr KysrKysrKysrKysrCiBzcmMvaW5jbHVkZS91dGlscy9tZW11dGlsc19pbnRlcm5hbC5oIHwgIDcg Ky0tCiA0IGZpbGVzIGNoYW5nZWQsIDExMCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvbWN4dC5jCmluZGV4IDI5NDdiMjA0NmIuLmMyMTRkMzIzYzggMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21tZ3IvbWN4dC5jCkBAIC0xMDIzLDYgKzEwMjMsMTIgQEAgTWVtb3J5Q29udGV4dENyZWF0ZShN ZW1vcnlDb250ZXh0IG5vZGUsCiAJVkFMR1JJTkRfQ1JFQVRFX01FTVBPT0wobm9kZSwgMCwgZmFs c2UpOwogfQogCisvKgorICogTWVtb3J5Q29udGV4dEFsbG9jYXRpb25GYWlsdXJlCisgKgkJRm9y IHVzZSBieSBNZW1vcnlDb250ZXh0TWV0aG9kcyBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHdo ZW4gbWFsbG9jCisgKgkJcmV0dXJucyBOVUxMLiAgVGhlIGJhaGF2aW9yIGlzIHNwZWNpZmljIHRv IHdoZXRoZXIgTUNYVF9BTExPQ19OT19PT00KKyAqCQlpcyBpbiAnZmxhZ3MnLgorICovCiB2b2lk ICoKIE1lbW9yeUNvbnRleHRBbGxvY2F0aW9uRmFpbHVyZShNZW1vcnlDb250ZXh0IGNvbnRleHQs IFNpemUgc2l6ZSwgaW50IGZsYWdzKQogewpAQCAtMTAzOCw2ICsxMDQ0LDExIEBAIE1lbW9yeUNv bnRleHRBbGxvY2F0aW9uRmFpbHVyZShNZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwg aW50IGZsYWdzKQogCXJldHVybiBOVUxMOwogfQogCisvKgorICogTWVtb3J5Q29udGV4dFNpemVG YWlsdXJlCisgKgkJRm9yIHVzZSBieSBNZW1vcnlDb250ZXh0TWV0aG9kcyBpbXBsZW1lbnRhdGlv bnMgdG8gaGFuZGxlIGludmFsaWQKKyAqCQltZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0IHNpemVz LgorICovCiB2b2lkCiBNZW1vcnlDb250ZXh0U2l6ZUZhaWx1cmUoTWVtb3J5Q29udGV4dCBjb250 ZXh0LCBTaXplIHNpemUsIGludCBmbGFncykKIHsKQEAgLTEwNjEsNiArMTA3MiwxNiBAQCBNZW1v cnlDb250ZXh0QWxsb2MoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUpCiAKIAljb250 ZXh0LT5pc1Jlc2V0ID0gZmFsc2U7CiAKKwkvKgorCSAqIEZvciBlZmZpY2llbmN5IHJlYXNvbnMs IHdlIHB1cnBvc2VmdWxseSBvZmZsb2FkIHRoZSBoYW5kbGluZyBvZgorCSAqIGFsbG9jYXRpb24g ZmFpbHVyZXMgdG8gdGhlIE1lbW9yeUNvbnRleHRNZXRob2RzIGltcGxlbWVudGF0aW9uIGFzIHRo aXMKKwkgKiBhbGxvd3MgdGhlc2UgY2hlY2tzIHRvIGJlIHBlcmZvcm1lZCBvbmx5IHdoZW4gYW4g YWN0dWFsIG1hbGxvYyBuZWVkcyB0bworCSAqIGJlIGRvbmUgdG8gcmVxdWVzdCBtb3JlIG1lbW9y eSBmcm9tIHRoZSBPUy4gIEFkZGl0aW9uYWxseSwgbm90IGhhdmluZworCSAqIHRvIGV4ZWN1dGUg YW55IGluc3RydWN0aW9ucyBhZnRlciB0aGlzIGNhbGwgYWxsb3dzIHRoZSBjb21waWxlciB0byB1 c2UKKwkgKiB0aGUgdGFpbGNhbGwgb3B0aW1pemF0aW9uLiAgSWYgeW91J3JlIGNvbnNpZGVyaW5n IGFkZGluZyBjb2RlIGFmdGVyCisJICogdGhpcyBjYWxsLCBjb25zaWRlciBtYWtpbmcgaXQgdGhl IHJlc3BvbnNpYmlsaXR5IG9mIHRoZSAnYWxsb2MnCisJICogZnVuY3Rpb24gaW5zdGVhZC4KKwkg Ki8KIAlyZXQgPSBjb250ZXh0LT5tZXRob2RzLT5hbGxvYyhjb250ZXh0LCBzaXplLCAwKTsKIAog CVZBTEdSSU5EX01FTVBPT0xfQUxMT0MoY29udGV4dCwgcmV0LCBzaXplKTsKQEAgLTExOTIsOSAr MTIxMywxOSBAQCBwYWxsb2MoU2l6ZSBzaXplKQogCiAJY29udGV4dC0+aXNSZXNldCA9IGZhbHNl OwogCisJLyoKKwkgKiBGb3IgZWZmaWNpZW5jeSByZWFzb25zLCB3ZSBwdXJwb3NlZnVsbHkgb2Zm bG9hZCB0aGUgaGFuZGxpbmcgb2YKKwkgKiBhbGxvY2F0aW9uIGZhaWx1cmVzIHRvIHRoZSBNZW1v cnlDb250ZXh0TWV0aG9kcyBpbXBsZW1lbnRhdGlvbiBhcyB0aGlzCisJICogYWxsb3dzIHRoZXNl IGNoZWNrcyB0byBiZSBwZXJmb3JtZWQgb25seSB3aGVuIGFuIGFjdHVhbCBtYWxsb2MgbmVlZHMg dG8KKwkgKiBiZSBkb25lIHRvIHJlcXVlc3QgbW9yZSBtZW1vcnkgZnJvbSB0aGUgT1MuICBBZGRp dGlvbmFsbHksIG5vdCBoYXZpbmcKKwkgKiB0byBleGVjdXRlIGFueSBpbnN0cnVjdGlvbnMgYWZ0 ZXIgdGhpcyBjYWxsIGFsbG93cyB0aGUgY29tcGlsZXIgdG8gdXNlCisJICogdGhlIHRhaWxjYWxs IG9wdGltaXphdGlvbi4gIElmIHlvdSdyZSBjb25zaWRlcmluZyBhZGRpbmcgY29kZSBhZnRlcgor CSAqIHRoaXMgY2FsbCwgY29uc2lkZXIgbWFraW5nIGl0IHRoZSByZXNwb25zaWJpbGl0eSBvZiB0 aGUgJ2FsbG9jJworCSAqIGZ1bmN0aW9uIGluc3RlYWQuCisJICovCiAJcmV0ID0gY29udGV4dC0+ bWV0aG9kcy0+YWxsb2MoY29udGV4dCwgc2l6ZSwgMCk7Ci0KLQlBc3NlcnQocmV0ICE9IDApOwor CS8qIFdlIGV4cGVjdCBPT00gdG8gYmUgaGFuZGxlZCBieSB0aGUgYWxsb2MgZnVuY3Rpb24gKi8K KwlBc3NlcnQocmV0ICE9IE5VTEwpOwogCVZBTEdSSU5EX01FTVBPT0xfQUxMT0MoY29udGV4dCwg cmV0LCBzaXplKTsKIAogCXJldHVybiByZXQ7CkBAIC0xNDEwLDEwICsxNDQxLDIwIEBAIHJlcGFs bG9jKHZvaWQgKnBvaW50ZXIsIFNpemUgc2l6ZSkKIAkvKiBpc1Jlc2V0IG11c3QgYmUgZmFsc2Ug YWxyZWFkeSAqLwogCUFzc2VydCghY29udGV4dC0+aXNSZXNldCk7CiAKKwkvKgorCSAqIEZvciBl ZmZpY2llbmN5IHJlYXNvbnMsIHdlIHB1cnBvc2VmdWxseSBvZmZsb2FkIHRoZSBoYW5kbGluZyBv ZgorCSAqIGFsbG9jYXRpb24gZmFpbHVyZXMgdG8gdGhlIE1lbW9yeUNvbnRleHRNZXRob2RzIGlt cGxlbWVudGF0aW9uIGFzIHRoaXMKKwkgKiBhbGxvd3MgdGhlc2UgY2hlY2tzIHRvIGJlIHBlcmZv cm1lZCBvbmx5IHdoZW4gYW4gYWN0dWFsIG1hbGxvYyBuZWVkcyB0bworCSAqIGJlIGRvbmUgdG8g cmVxdWVzdCBtb3JlIG1lbW9yeSBmcm9tIHRoZSBPUy4gIEFkZGl0aW9uYWxseSwgbm90IGhhdmlu ZworCSAqIHRvIGV4ZWN1dGUgYW55IGluc3RydWN0aW9ucyBhZnRlciB0aGlzIGNhbGwgYWxsb3dz IHRoZSBjb21waWxlciB0byB1c2UKKwkgKiB0aGUgdGFpbGNhbGwgb3B0aW1pemF0aW9uLiAgSWYg eW91J3JlIGNvbnNpZGVyaW5nIGFkZGluZyBjb2RlIGFmdGVyCisJICogdGhpcyBjYWxsLCBjb25z aWRlciBtYWtpbmcgaXQgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSAncmVhbGxvYycKKwkgKiBm dW5jdGlvbiBpbnN0ZWFkLgorCSAqLwogCXJldCA9IE1DWFRfTUVUSE9EKHBvaW50ZXIsIHJlYWxs b2MpIChwb2ludGVyLCBzaXplLCAwKTsKIAogI2lmZGVmIFVTRV9WQUxHUklORAotCWlmIChyZXQg IT0gTlVMTCAmJiBtZXRob2QgIT0gTUNUWF9BTElHTkVEX1JFRElSRUNUX0lEKQorCWlmIChtZXRo b2QgIT0gTUNUWF9BTElHTkVEX1JFRElSRUNUX0lEKQogCQlWQUxHUklORF9NRU1QT09MX0NIQU5H RShjb250ZXh0LCBwb2ludGVyLCByZXQsIHNpemUpOwogI2VuZGlmCiAKQEAgLTE0MzgsNiArMTQ3 OSwxNiBAQCByZXBhbGxvY19leHRlbmRlZCh2b2lkICpwb2ludGVyLCBTaXplIHNpemUsIGludCBm bGFncykKIAkvKiBpc1Jlc2V0IG11c3QgYmUgZmFsc2UgYWxyZWFkeSAqLwogCUFzc2VydCghY29u dGV4dC0+aXNSZXNldCk7CiAKKwkvKgorCSAqIEZvciBlZmZpY2llbmN5IHJlYXNvbnMsIHdlIHB1 cnBvc2VmdWxseSBvZmZsb2FkIHRoZSBoYW5kbGluZyBvZgorCSAqIGFsbG9jYXRpb24gZmFpbHVy ZXMgdG8gdGhlIE1lbW9yeUNvbnRleHRNZXRob2RzIGltcGxlbWVudGF0aW9uIGFzIHRoaXMKKwkg KiBhbGxvd3MgdGhlc2UgY2hlY2tzIHRvIGJlIHBlcmZvcm1lZCBvbmx5IHdoZW4gYW4gYWN0dWFs IG1hbGxvYyBuZWVkcyB0bworCSAqIGJlIGRvbmUgdG8gcmVxdWVzdCBtb3JlIG1lbW9yeSBmcm9t IHRoZSBPUy4gIEFkZGl0aW9uYWxseSwgbm90IGhhdmluZworCSAqIHRvIGV4ZWN1dGUgYW55IGlu c3RydWN0aW9ucyBhZnRlciB0aGlzIGNhbGwgYWxsb3dzIHRoZSBjb21waWxlciB0byB1c2UKKwkg KiB0aGUgdGFpbGNhbGwgb3B0aW1pemF0aW9uLiAgSWYgeW91J3JlIGNvbnNpZGVyaW5nIGFkZGlu ZyBjb2RlIGFmdGVyCisJICogdGhpcyBjYWxsLCBjb25zaWRlciBtYWtpbmcgaXQgdGhlIHJlc3Bv bnNpYmlsaXR5IG9mIHRoZSAncmVhbGxvYycKKwkgKiBmdW5jdGlvbiBpbnN0ZWFkLgorCSAqLwog CXJldCA9IE1DWFRfTUVUSE9EKHBvaW50ZXIsIHJlYWxsb2MpIChwb2ludGVyLCBzaXplLCBmbGFn cyk7CiAJaWYgKHVubGlrZWx5KHJldCA9PSBOVUxMKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNDgz LDYgKzE1MzQsMTYgQEAgTWVtb3J5Q29udGV4dEFsbG9jSHVnZShNZW1vcnlDb250ZXh0IGNvbnRl eHQsIFNpemUgc2l6ZSkKIAogCWNvbnRleHQtPmlzUmVzZXQgPSBmYWxzZTsKIAorCS8qCisJICog Rm9yIGVmZmljaWVuY3kgcmVhc29ucywgd2UgcHVycG9zZWZ1bGx5IG9mZmxvYWQgdGhlIGhhbmRs aW5nIG9mCisJICogYWxsb2NhdGlvbiBmYWlsdXJlcyB0byB0aGUgTWVtb3J5Q29udGV4dE1ldGhv ZHMgaW1wbGVtZW50YXRpb24gYXMgdGhpcworCSAqIGFsbG93cyB0aGVzZSBjaGVja3MgdG8gYmUg cGVyZm9ybWVkIG9ubHkgd2hlbiBhbiBhY3R1YWwgbWFsbG9jIG5lZWRzIHRvCisJICogYmUgZG9u ZSB0byByZXF1ZXN0IG1vcmUgbWVtb3J5IGZyb20gdGhlIE9TLiAgQWRkaXRpb25hbGx5LCBub3Qg aGF2aW5nCisJICogdG8gZXhlY3V0ZSBhbnkgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoaXMgY2FsbCBh bGxvd3MgdGhlIGNvbXBpbGVyIHRvIHVzZQorCSAqIHRoZSB0YWlsY2FsbCBvcHRpbWl6YXRpb24u ICBJZiB5b3UncmUgY29uc2lkZXJpbmcgYWRkaW5nIGNvZGUgYWZ0ZXIKKwkgKiB0aGlzIGNhbGws IGNvbnNpZGVyIG1ha2luZyBpdCB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlICdhbGxvYycKKwkg KiBmdW5jdGlvbiBpbnN0ZWFkLgorCSAqLwogCXJldCA9IGNvbnRleHQtPm1ldGhvZHMtPmFsbG9j KGNvbnRleHQsIHNpemUsIE1DWFRfQUxMT0NfSFVHRSk7CiAKIAlWQUxHUklORF9NRU1QT09MX0FM TE9DKGNvbnRleHQsIHJldCwgc2l6ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t bWdyL3NsYWIuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jCmluZGV4IDEzNDVjOGQ1 MDAuLmJjOTE0NDZjYjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jCkBAIC01MDQsMTcgKzUwNCwxNCBA QCBTbGFiQWxsb2MoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUsIGludCBmbGFncykK IAogCUFzc2VydChTbGFiSXNWYWxpZChzbGFiKSk7CiAKLQkvKgotCSAqIFhYWDogUHJvYmFibHkg bm8gbmVlZCB0byBjaGVjayBmb3IgaHVnZSBhbGxvY2F0aW9ucywgd2Ugb25seSBzdXBwb3J0Ci0J ICogb25lIHNpemU/IFdoaWNoIGNvdWxkIHRoZW9yZXRpY2FsbHkgYmUgaHVnZSwgYnV0IHRoYXQn ZCBub3QgbWFrZQotCSAqIHNlbnNlLi4uCi0JICovCi0KIAkvKiBzYW5pdHkgY2hlY2sgdGhhdCB0 aGlzIGlzIHBvaW50aW5nIHRvIGEgdmFsaWQgYmxvY2tsaXN0ICovCiAJQXNzZXJ0KHNsYWItPmN1 ckJsb2NrbGlzdEluZGV4ID49IDApOwogCUFzc2VydChzbGFiLT5jdXJCbG9ja2xpc3RJbmRleCA8 PSBTbGFiQmxvY2tsaXN0SW5kZXgoc2xhYiwgc2xhYi0+Y2h1bmtzUGVyQmxvY2spKTsKIAotCS8q IG1ha2Ugc3VyZSB3ZSBvbmx5IGFsbG93IGNvcnJlY3QgcmVxdWVzdCBzaXplICovCisJLyoKKwkg KiBNYWtlIHN1cmUgd2Ugb25seSBhbGxvdyBjb3JyZWN0IHJlcXVlc3Qgc2l6ZS4gIFRoaXMgZG91 YmxlcyBhcyB0aGUKKwkgKiBNZW1vcnlDb250ZXh0Q2hlY2tTaXplIGNoZWNrLgorCSAqLwogCWlm ICh1bmxpa2VseShzaXplICE9IHNsYWItPmNodW5rU2l6ZSkpCiAJCWVsb2coRVJST1IsICJ1bmV4 cGVjdGVkIGFsbG9jIGNodW5rIHNpemUgJXp1IChleHBlY3RlZCAldSkiLAogCQkJIHNpemUsIHNs YWItPmNodW5rU2l6ZSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvbWVtbm9kZXMuaAppbmRleCBjYzhjYzU4YTBjLi5lZGMwMjU3 ZjM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL21lbW5vZGVzLmgKQEAgLTU3LDIwICs1Nyw1OCBAQCB0eXBlZGVmIHZvaWQg KCpNZW1vcnlTdGF0c1ByaW50RnVuYykgKE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAqcGFz c3RocnUsCiAKIHR5cGVkZWYgc3RydWN0IE1lbW9yeUNvbnRleHRNZXRob2RzCiB7CisJLyoKKwkg KiBGdW5jdGlvbiB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdHMgb2YgJ3NpemUn IHRvIGFsbG9jYXRlCisJICogbWVtb3J5IGludG8gdGhlIGdpdmVuICdjb250ZXh0Jy4gIFRoZSBm dW5jdGlvbiBtdXN0IGhhbmRsZSBmbGFncworCSAqIE1DWFRfQUxMT0NfSFVHRSBhbmQgTUNYVF9B TExPQ19OT19PT00uICBNQ1hUX0FMTE9DX1pFUk8gaXMgaGFuZGxlZCBieQorCSAqIHRoZSBjYWxs aW5nIGZ1bmN0aW9uLgorCSAqLwogCXZvaWQJICAgKigqYWxsb2MpIChNZW1vcnlDb250ZXh0IGNv bnRleHQsIFNpemUgc2l6ZSwgaW50IGZsYWdzKTsKKwogCS8qIGNhbGwgdGhpcyBmcmVlX3AgaW4g Y2FzZSBzb21lb25lICNkZWZpbmUncyBmcmVlKCkgKi8KIAl2b2lkCQkoKmZyZWVfcCkgKHZvaWQg KnBvaW50ZXIpOworCisJLyoKKwkgKiBGdW5jdGlvbiB0byBoYW5kbGUgYSBzaXplIGNoYW5nZSBy ZXF1ZXN0IGZvciBhbiBleGlzdGluZyBhbGxvY2F0aW9uLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlv biBtdXN0IGhhbmRsZSBmbGFncyBNQ1hUX0FMTE9DX0hVR0UgYW5kCisJICogTUNYVF9BTExPQ19O T19PT00uICBNQ1hUX0FMTE9DX1pFUk8gaXMgaGFuZGxlZCBieSB0aGUgY2FsbGluZyBmdW5jdGlv bi4KKwkgKi8KIAl2b2lkCSAgICooKnJlYWxsb2MpICh2b2lkICpwb2ludGVyLCBTaXplIHNpemUs IGludCBmbGFncyk7CisKKwkvKgorCSAqIEludmFsaWRhdGUgYWxsIHByZXZpb3VzIGFsbG9jYXRp b25zIGluIHRoZSBnaXZlbiBtZW1vcnkgY29udGV4dCBhbmQKKwkgKiBwcmVwYXJlIHRoZSBjb250 ZXh0IGZvciBhIG5ldyBzZXQgb2YgYWxsb2NhdGlvbnMuICBJbXBsZW1lbnRhdGlvbnMgbWF5CisJ ICogb3B0aW9uYWxseSBmcmVlKCkgZXhjZXNzIG1lbW9yeSBiYWNrIHRvIHRoZSBPUyBkdXJpbmcg dGhpcyB0aW1lLgorCSAqLwogCXZvaWQJCSgqcmVzZXQpIChNZW1vcnlDb250ZXh0IGNvbnRleHQp OworCisJLyogRnJlZSBhbGwgbWVtb3J5IGNvbnN1bWVkIGJ5IHRoZSBnaXZlbiBNZW1vcnlDb250 ZXh0LiAqLwogCXZvaWQJCSgqZGVsZXRlX2NvbnRleHQpIChNZW1vcnlDb250ZXh0IGNvbnRleHQp OworCisJLyogUmV0dXJuIHRoZSBNZW1vcnlDb250ZXh0IHRoYXQgdGhlIGdpdmVuIHBvaW50ZXIg YmVsb25ncyB0by4gKi8KIAlNZW1vcnlDb250ZXh0ICgqZ2V0X2NodW5rX2NvbnRleHQpICh2b2lk ICpwb2ludGVyKTsKKworCS8qCisJICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29uc3Vt ZWQgYnkgdGhlIGdpdmVuIHBvaW50ZXIgd2l0aGluIGl0cworCSAqIG1lbW9yeSBjb250ZXh0LCBp bmNsdWRpbmcgdGhlIG92ZXJoZWFkIG9mIGFsaWdubWVudCBhbmQgY2h1bmsgaGVhZGVycy4KKwkg Ki8KIAlTaXplCQkoKmdldF9jaHVua19zcGFjZSkgKHZvaWQgKnBvaW50ZXIpOworCisJLyoKKwkg KiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gTWVtb3J5Q29udGV4dCBoYXMgbm90IGhhZCBhbnkg YWxsb2NhdGlvbnMKKwkgKiBzaW5jZSBpdCB3YXMgY3JlYXRlZCBvciBsYXN0IHJlc2V0LgorCSAq LwogCWJvb2wJCSgqaXNfZW1wdHkpIChNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogCXZvaWQJCSgq c3RhdHMpIChNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJCQkgIE1lbW9yeVN0YXRzUHJpbnRG dW5jIHByaW50ZnVuYywgdm9pZCAqcGFzc3RocnUsCiAJCQkJCQkgIE1lbW9yeUNvbnRleHRDb3Vu dGVycyAqdG90YWxzLAogCQkJCQkJICBib29sIHByaW50X3RvX3N0ZGVycik7CiAjaWZkZWYgTUVN T1JZX0NPTlRFWFRfQ0hFQ0tJTkcKKworCS8qCisJICogUGVyZm9ybSB2YWxpZGF0aW9uIGNoZWNr cyBvbiB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgcmFpc2UgYW55IGRpc2NvdmVyZWQKKwkgKiBhbm9t YWxpZXMgYXMgV0FSTklOR3MuCisJICovCiAJdm9pZAkJKCpjaGVjaykgKE1lbW9yeUNvbnRleHQg Y29udGV4dCk7CiAjZW5kaWYKIH0gTWVtb3J5Q29udGV4dE1ldGhvZHM7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9tZW11dGlsc19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv bWVtdXRpbHNfaW50ZXJuYWwuaAppbmRleCBlNWNlY2Q3MTIyLi5hZDEwNDhmZDgyIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9tZW11dGlsc19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL21lbXV0aWxzX2ludGVybmFsLmgKQEAgLTEzMyw5ICsxMzMsMTEgQEAgZXh0ZXJu IHZvaWQgTWVtb3J5Q29udGV4dENyZWF0ZShNZW1vcnlDb250ZXh0IG5vZGUsCiAJCQkJCQkJCU1l bW9yeUNvbnRleHQgcGFyZW50LAogCQkJCQkJCQljb25zdCBjaGFyICpuYW1lKTsKIAotZXh0ZXJu IHZvaWQgKk1lbW9yeUNvbnRleHRBbGxvY2F0aW9uRmFpbHVyZShNZW1vcnlDb250ZXh0IGNvbnRl eHQsIFNpemUgc2l6ZSwgaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkICpNZW1vcnlDb250ZXh0QWxs b2NhdGlvbkZhaWx1cmUoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUsCisJCQkJCQkJ CQkJCWludCBmbGFncyk7CiAKLWV4dGVybiB2b2lkIE1lbW9yeUNvbnRleHRTaXplRmFpbHVyZShN ZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwgaW50IGZsYWdzKSBwZ19hdHRyaWJ1dGVf bm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIE1lbW9yeUNvbnRleHRTaXplRmFpbHVyZShNZW1vcnlD b250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwKKwkJCQkJCQkJCSBpbnQgZmxhZ3MpIHBnX2F0dHJp YnV0ZV9ub3JldHVybigpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKIE1lbW9yeUNvbnRleHRDaGVj a1NpemUoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUsIGludCBmbGFncykKQEAgLTE0 Nyw1ICsxNDksNCBAQCBNZW1vcnlDb250ZXh0Q2hlY2tTaXplKE1lbW9yeUNvbnRleHQgY29udGV4 dCwgU2l6ZSBzaXplLCBpbnQgZmxhZ3MpCiAJfQogfQogCi0KICNlbmRpZgkJCQkJCQkvKiBNRU1V VElMU19JTlRFUk5BTF9IICovCi0tIAoyLjQwLjEKCg== --000000000000fced810611f6fe80--