Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nWraq-000360-Kv for pgsql-hackers@arkaria.postgresql.org; Wed, 23 Mar 2022 03:23:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nWrao-0006yl-9b for pgsql-hackers@arkaria.postgresql.org; Wed, 23 Mar 2022 03:23:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nWran-0006ya-Pp for pgsql-hackers@lists.postgresql.org; Wed, 23 Mar 2022 03:23:25 +0000 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nWraj-0003R3-Al for pgsql-hackers@lists.postgresql.org; Wed, 23 Mar 2022 03:23:25 +0000 Received: by mail-pg1-x52d.google.com with SMTP id bc27so141600pgb.4 for ; Tue, 22 Mar 2022 20:23:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=rYEwe7RRQDP8a7A8mHEpSLBYMrATD5EZcmFE2aqTHt8=; b=fA5P3bKPfDA0XUMXc8ZYshbS6Y3d7PO3N/PPclzJsII1D3ihlGjynYSqVDteapFQ1m 86Dimx2xj3ooMRJIzBy9tgVCAp9olAXOmtwKZomd8QVWkBiNPzmSHN/Pt5OOSLY4q/nQ /THIlqJWvwjt/gVKGFAP00ZC8AdH9FHtsd3chqG4NrvO1CtWVY4+Jrr2UHBHUSChqL0Y HMdGs1t4x3/A/yuvv9NWltJvqPIwEAd3CUoU9DgzvDz+qwMlLVdDFMkeaNrNvak6GV1H ygIx0aVnDmSTRU/WLzKtLBEhsw9jfac7H0P+onu+2WP/B3WnMw352La6qWrqfdr/JtvR wVZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=rYEwe7RRQDP8a7A8mHEpSLBYMrATD5EZcmFE2aqTHt8=; b=lpgd6BFZVcj5dSaQkgh8kdAbd9rlwn8hhPlc6aTc7JcFBDrYllqpbIxVcvYC/YsbZM Q+ie2nj0vSr5sqQaG5WtZHgYTJlRAXuLRjaW1s3ns7MU5kn0j0n7ANirEI2hA6WcLWSa vV41Hfzzs+3MOhw2d9Ts1K5qhZvNIHSYFsM+ejidZgNbgb6iReAzfuYLlHPeYkIJd1LJ toyUvUnvdJ9yDwSgJf7lZpX6+s3K8EH+xrIaqaNqGqLzUGm0g3FX9B6y+zYFEcJwtveI EP9gc1mTolILqKcU4F6V9f8Ib0Gz4r1eNo7s/s63c9NyAKtyHoMthlLpzsKHxeFq5/Le XyPA== X-Gm-Message-State: AOAM530uoUoyDjAVXeYknkgKRiP7uPRVFXzgSkmV6RRMxX87aWUy5f8T x8riwbzO1JeLPeU6OA91c4cVMjYhYE8QhaVWYM0= X-Google-Smtp-Source: ABdhPJzvPyBQghIUDlDkPxVUetWBkrLlKj1MCBL3tTAp68g+xxQttAuNGWzn6tuuJHuDWDRNbbMSQyvL2Bf6Jc8jW54= X-Received: by 2002:a63:f30b:0:b0:382:9728:cc67 with SMTP id l11-20020a63f30b000000b003829728cc67mr7881790pgh.54.1648005798976; Tue, 22 Mar 2022 20:23:18 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: David Rowley Date: Wed, 23 Mar 2022 16:23:02 +1300 Message-ID: Subject: Re: Window Function "Run Conditions" To: Zhihong Yu Cc: Andy Fan , PostgreSQL Developers Content-Type: multipart/mixed; boundary="0000000000003c75dc05dada40b1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003c75dc05dada40b1 Content-Type: text/plain; charset="UTF-8" On Wed, 23 Mar 2022 at 12:50, Zhihong Yu wrote: > The following code seems to be common between if / else blocks (w.r.t. wfunc_left) of find_window_run_conditions(). > It would be nice if this code can be shared. I remember thinking about that and thinking that I didn't want to overcomplicate the if conditions for the strategy tests. I'd thought these would have become: if ((wfunc_left && (strategy == BTLessStrategyNumber || strategy == BTLessEqualStrategyNumber)) || (!wfunc_left && (strategy == BTGreaterStrategyNumber || strategy == BTGreaterEqualStrategyNumber))) which I didn't think was very readable. That caused me to keep it separate. On reflection, we can just leave the strategy checks as they are, then add the additional code for checking wfunc_left when checking the res->monotonic, i.e: if ((wfunc_left && (res->monotonic & MONOTONICFUNC_INCREASING)) || (!wfunc_left && (res->monotonic & MONOTONICFUNC_DECREASING))) I think that's more readable than doubling up the strategy checks, so I've done it that way in the attached. > > + WindowClause *wclause = (WindowClause *) > + list_nth(subquery->windowClause, > + wfunc->winref - 1); > > The code would be more readable if list_nth() is indented. That's just the way pgindent put it. > + /* Check the left side of the OpExpr */ > > It seems the code for checking left / right is the same. It would be better to extract and reuse the code. I've moved some of that code into find_window_run_conditions() which removes about 10 lines of code. Updated patch attached. Thanks for looking. David --0000000000003c75dc05dada40b1 Content-Type: text/plain; charset="US-ASCII"; name="v3-0001-Teach-planner-and-executor-about-monotonic-window.patch" Content-Disposition: attachment; filename="v3-0001-Teach-planner-and-executor-about-monotonic-window.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1300uo90 RnJvbSBkYjM5M2IwMWNlNmRkNDhmM2E0OWQzNjdhMjhkNzgwNDUxMGJkMWY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogU2F0LCA4IE1heSAyMDIxIDIzOjQzOjI1ICsxMjAwClN1YmplY3Q6IFtQQVRDSCB2M10gVGVh Y2ggcGxhbm5lciBhbmQgZXhlY3V0b3IgYWJvdXQgbW9ub3RvbmljIHdpbmRvdyBmdW5jcwoKV2lu ZG93IGZ1bmN0aW9ucyBzdWNoIGFzIHJvd19udW1iZXIoKSBhbHdheXMgcmV0dXJuIGEgdmFsdWUg aGlnaGVyIHRoYW4KdGhlIG9uZSBwcmV2aW91c2x5IGluIGFueSBnaXZlbiBwYXJ0aXRpb24uICBJ ZiBhIHF1ZXJ5IHdlcmUgdG8gb25seQpyZXF1ZXN0IHRoZSBmaXJzdCBmZXcgcm93IG51bWJlcnMs IHRoZW4gdHJhZGl0aW9uYWxseSB3ZSB3b3VsZCBjb250aW51ZQpldmFsdWF0aW5nIHRoZSBXaW5k b3dBZ2cgbm9kZSB1bnRpbCBhbGwgdHVwbGVzIGFyZSBleGhhdXN0ZWQuICBIb3dldmVyLCBpdApp cyBwb3NzaWJsZSBpZiBzb21lb25lLCBzYXkgb25seSB3YW50ZWQgYWxsIHJvdyBudW1iZXJzIDw9 IDEwLCB0aGVuIHdlCmNvdWxkIGp1c3Qgc3RvcCBvbmNlIHdlIGdldCBudW1iZXIgMTEuCgpIZXJl IHdlIGltcGxlbWVudCBtZWFucyB0byBkbyBqdXN0IHRoYXQuICBUaGlzIGlzIGRvbmUgYnkgd2F5 IG9mIGFkZGluZyBhCnByb3N1cHBvcnQgZnVuY3Rpb24gdG8gdmFyaW91cyBvZiB0aGUgYnVpbHQt aW4gd2luZG93IGZ1bmN0aW9ucyBhbmQgYWRkaW5nCnN1cHBvcnRpbmcgY29kZSB0byBhbGxvdyB0 aGUgc3VwcG9ydCBmdW5jdGlvbiB0byBpbmZvcm0gdGhlIHBsYW5uZXIgaWYKdGhlIGZ1bmN0aW9u IGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZywgbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nLCBi b3RoCm9yIG5laXRoZXIuICBUaGUgcGxhbm5lciBpcyB0aGVuIGFibGUgdG8gbWFrZSB1c2Ugb2Yg dGhhdCBpbmZvcm1hdGlvbiBhbmQKcG9zc2libHkgYWxsb3cgdGhlIGV4ZWN1dG9yIHRvIHNob3J0 LWNpcmN1aXQgZXhlY3V0aW9uIGJ5IHdheSBvZiBhZGRpbmcgYQoicnVuIGNvbmRpdGlvbiIgdG8g dGhlIFdpbmRvd0FnZyB0byBpbnN0cnVjdCBpdCB0byBydW4gd2hpbGUgdGhpcwpjb25kaXRpb24g aXMgdHJ1ZSBhbmQgc3RvcCB3aGVuIGl0IGJlY29tZXMgZmFsc2UuCgpUaGlzIG9wdGltaXphdGlv biBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlIHN1YnF1ZXJ5IGNvbnRhaW5zIG9ubHkgYQpzaW5n bGUgd2luZG93IGNsYXVzZS4gIFRoZSBwcm9ibGVtIHdpdGggaGF2aW5nIG11bHRpcGxlIGNsYXVz ZXMgaXMgdGhhdCBhdAp0aGUgdGltZSB3aGVuIHdlJ3JlIGxvb2tpbmcgZm9yIHJ1biBjb25kaXRp b25zLCB3ZSBkb24ndCB5ZXQga25vdyB0aGUKb3JkZXIgdGhhdCB0aGUgd2luZG93IGNsYXVzZXMg d2lsbCBiZSBldmFsdWF0ZWQuICBXZSBjYW5ub3QgYWRkIGEgcnVuCmNvbmRpdGlvbiB0byBhIHdp bmRvdyBjbGF1c2UgdGhhdCBpcyBldmFsdWF0ZWQgZmlyc3QgYXMgd2UgbWF5IHN0b3AKZXhlY3V0 aW9uIGFuZCBub3Qgb3V0cHV0IHJvd3MgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIGEgd2luZG93IGNs YXVzZSB3aGljaAp3aWxsIGJlIGV2YWx1YXRlZCBsYXRlci4KCkhlcmUgd2UgYWRkIHByb3N1cHBv cnQgZnVuY3Rpb25zIHRvIGFsbG93IHRoaXMgdG8gd29yayBmb3I7IHJvd19udW1iZXIoKSwKcmFu aygpLCBkZW5zZV9yYW5rKCksIGNvdW50KCopIGFuZCBjb3VudChleHByKS4KCkF1dGhvcjogRGF2 aWQgUm93bGV5ClJldmlld2VkLWJ5OiBBbmR5IEZhbiwgWmhpaG9uZyBZdQpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL0NBQXBIRHZxdnAzQXQ4Kyt5RjhpajA2c2Rjb28xU19iMllvYVQ5 RDROZitNT2J6c3JMUUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4 cGxhaW4uYyAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93 QWdnLmMgICAgfCAgMjggKy0KIHNyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jICAgICAgICAg ICB8ICAgNCArCiBzcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMgICAgICAgICAgfCAgIDIg Kwogc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyAgICAgICAgICAgIHwgICA0ICsKIHNyYy9i YWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAzMjcgKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgfCAgIDcgKy0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAgICB8ICAgOCArCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvaW50OC5jICAgICAgICAgICAgfCAgNDUgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3dpbmRvd2Z1bmNzLmMgICAgIHwgIDYzICsrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0ICAgICAgICAgfCAgMzUgKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aCAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCAgICAgICAgICAg ICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgfCAg IDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgIHwgIDIwICsrCiBz cmMvaW5jbHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaCAgICAgICAgfCAgNjEgKysrKy0KIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dCAgICB8IDMxNSArKysrKysrKysrKysrKysr KysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2luZG93LnNxbCAgICAgICAgIHwgMTY1ICsr KysrKysrKysrKwogMTkgZmlsZXMgY2hhbmdlZCwgMTA4MyBpbnNlcnRpb25zKCspLCAxOCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggOWY2MzIyODViNi4uOTJjYTRhY2Y1 MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMTk4NSw2ICsxOTg1LDEwIEBAIEV4cGxhaW5O b2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJc2hvd19pbnN0 cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJCQkJCQkJ CSAgIHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CisJCWNhc2UgVF9XaW5kb3dBZ2c6CisJCQlz aG93X3VwcGVyX3F1YWwoKChXaW5kb3dBZ2cgKikgcGxhbiktPnJ1bmNvbmRpdGlvbm9yaWcsCisJ CQkJCQkJIlJ1biBDb25kaXRpb24iLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOworCQkJYnJl YWs7CiAJCWNhc2UgVF9Hcm91cDoKIAkJCXNob3dfZ3JvdXBfa2V5cyhjYXN0Tm9kZShHcm91cFN0 YXRlLCBwbGFuc3RhdGUpLCBhbmNlc3RvcnMsIGVzKTsKIAkJCXNob3dfdXBwZXJfcXVhbChwbGFu LT5xdWFsLCAiRmlsdGVyIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVXaW5kb3dBZ2cuYwppbmRleCAwOGNlMDVjYTVhLi4zZTRmMDBlMTYyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCkBAIC0yMDIzLDYgKzIwMjMsNyBAQCBzdGF0aWMg VHVwbGVUYWJsZVNsb3QgKgogRXhlY1dpbmRvd0FnZyhQbGFuU3RhdGUgKnBzdGF0ZSkKIHsKIAlX aW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUgPSBjYXN0Tm9kZShXaW5kb3dBZ2dTdGF0ZSwgcHN0YXRl KTsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIAlFeHByQ29udGV4dCAqZWNvbnRleHQ7CiAJaW50 CQkJaTsKIAlpbnQJCQludW1mdW5jczsKQEAgLTIyMzUsNyArMjIzNiwyMCBAQCBFeGVjV2luZG93 QWdnKFBsYW5TdGF0ZSAqcHN0YXRlKQogCSAqLwogCWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUg PSB3aW5zdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdDsKIAotCXJldHVybiBFeGVjUHJvamVjdCh3 aW5zdGF0ZS0+c3MucHMucHNfUHJvakluZm8pOworCXNsb3QgPSBFeGVjUHJvamVjdCh3aW5zdGF0 ZS0+c3MucHMucHNfUHJvakluZm8pOworCisJLyoKKwkgKiBOb3cgZXZhbHVhdGUgdGhlIHJ1biBj b25kaXRpb24gdG8gc2VlIGlmIHdlIG5lZWQgdG8gY29udGludWUgZnVydGhlcgorCSAqIHdpdGgg ZXhlY3V0aW9uLgorCSAqLworCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IHNsb3Q7CisJaWYg KCFFeGVjUXVhbCh3aW5zdGF0ZS0+cnVuY29uZGl0aW9uLCBlY29udGV4dCkpCisJeworCQl3aW5z dGF0ZS0+YWxsX2RvbmUgPSB0cnVlOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gc2xv dDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzMDcsNiArMjMyMSwxOCBAQCBFeGVj SW5pdFdpbmRvd0FnZyhXaW5kb3dBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdz KQogCUFzc2VydChub2RlLT5wbGFuLnF1YWwgPT0gTklMKTsKIAl3aW5zdGF0ZS0+c3MucHMucXVh bCA9IE5VTEw7CiAKKwkvKgorCSAqIFNldHVwIHRoZSBydW4gY29uZGl0aW9uLCBpZiB3ZSByZWNl aXZlZCBvbmUgZnJvbSB0aGUgcXVlcnkgcGxhbm5lci4KKwkgKiBXaGVuIHNldCwgdGhpcyBjYW4g YWxsb3cgdXMgdG8gZmluaXNoIGV4ZWN1dGlvbiBlYXJseSBiZWNhdXNlIHdlIGtub3cKKwkgKiBz b21lIGhpZ2hlci1sZXZlbCBmaWx0ZXIgZXhpc3RzIHRoYXQgd291bGQganVzdCBmaWx0ZXIgb3V0 IGFueSBmdXJ0aGVyCisJICogcmVzdWx0cyB0aGF0IHdlIHByb2R1Y2UuCisJICovCisJaWYgKG5v ZGUtPnJ1bmNvbmRpdGlvbiAhPSBOSUwpCisJCXdpbnN0YXRlLT5ydW5jb25kaXRpb24gPSBFeGVj SW5pdFF1YWwobm9kZS0+cnVuY29uZGl0aW9uLAorCQkJCQkJCQkJCQkgIChQbGFuU3RhdGUgKikg d2luc3RhdGUpOworCWVsc2UKKwkJd2luc3RhdGUtPnJ1bmNvbmRpdGlvbiA9IE5VTEw7CisKIAkv KgogCSAqIGluaXRpYWxpemUgY2hpbGQgbm9kZXMKIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL25vZGVzL2NvcHlmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKaW5k ZXggZDRmODQ1NWEyYi4uZTI2ODRhNWRkMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMv Y29weWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKQEAgLTExMDIs NiArMTEwMiw4IEBAIF9jb3B5V2luZG93QWdnKGNvbnN0IFdpbmRvd0FnZyAqZnJvbSkKIAlDT1BZ X1NDQUxBUl9GSUVMRChmcmFtZU9wdGlvbnMpOwogCUNPUFlfTk9ERV9GSUVMRChzdGFydE9mZnNl dCk7CiAJQ09QWV9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJQ09QWV9OT0RFX0ZJRUxEKHJ1bmNv bmRpdGlvbik7CisJQ09QWV9OT0RFX0ZJRUxEKHJ1bmNvbmRpdGlvbm9yaWcpOwogCUNPUFlfU0NB TEFSX0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1bmMpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKGVuZEluUmFu Z2VGdW5jKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChpblJhbmdlQ29sbCk7CkBAIC0yNTc5LDYgKzI1 ODEsOCBAQCBfY29weVdpbmRvd0NsYXVzZShjb25zdCBXaW5kb3dDbGF1c2UgKmZyb20pCiAJQ09Q WV9TQ0FMQVJfRklFTEQoZnJhbWVPcHRpb25zKTsKIAlDT1BZX05PREVfRklFTEQoc3RhcnRPZmZz ZXQpOwogCUNPUFlfTk9ERV9GSUVMRChlbmRPZmZzZXQpOworCUNPUFlfTk9ERV9GSUVMRChydW5j b25kaXRpb24pOworCUNPUFlfTk9ERV9GSUVMRChydW5jb25kaXRpb25vcmlnKTsKIAlDT1BZX1ND QUxBUl9GSUVMRChzdGFydEluUmFuZ2VGdW5jKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChlbmRJblJh bmdlRnVuYyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoaW5SYW5nZUNvbGwpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxm dW5jcy5jCmluZGV4IGYxMDAyYWZlN2EuLjE0OWE5YjFkMzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL25vZGVzL2VxdWFsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNz LmMKQEAgLTI4NzksNiArMjg3OSw4IEBAIF9lcXVhbFdpbmRvd0NsYXVzZShjb25zdCBXaW5kb3dD bGF1c2UgKmEsIGNvbnN0IFdpbmRvd0NsYXVzZSAqYikKIAlDT01QQVJFX1NDQUxBUl9GSUVMRChm cmFtZU9wdGlvbnMpOwogCUNPTVBBUkVfTk9ERV9GSUVMRChzdGFydE9mZnNldCk7CiAJQ09NUEFS RV9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJQ09NUEFSRV9OT0RFX0ZJRUxEKHJ1bmNvbmRpdGlv bik7CisJQ09NUEFSRV9OT0RFX0ZJRUxEKHJ1bmNvbmRpdGlvbm9yaWcpOwogCUNPTVBBUkVfU0NB TEFSX0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1bmMpOwogCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGVuZElu UmFuZ2VGdW5jKTsKIAlDT01QQVJFX1NDQUxBUl9GSUVMRChpblJhbmdlQ29sbCk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0 ZnVuY3MuYwppbmRleCA2YmRhZDQ2MmM3Li4zNDlkYTI4NzU4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMK QEAgLTgyNyw2ICs4MjcsOCBAQCBfb3V0V2luZG93QWdnKFN0cmluZ0luZm8gc3RyLCBjb25zdCBX aW5kb3dBZ2cgKm5vZGUpCiAJV1JJVEVfSU5UX0ZJRUxEKGZyYW1lT3B0aW9ucyk7CiAJV1JJVEVf Tk9ERV9GSUVMRChzdGFydE9mZnNldCk7CiAJV1JJVEVfTk9ERV9GSUVMRChlbmRPZmZzZXQpOwor CVdSSVRFX05PREVfRklFTEQocnVuY29uZGl0aW9uKTsKKwlXUklURV9OT0RFX0ZJRUxEKHJ1bmNv bmRpdGlvbm9yaWcpOwogCVdSSVRFX09JRF9GSUVMRChzdGFydEluUmFuZ2VGdW5jKTsKIAlXUklU RV9PSURfRklFTEQoZW5kSW5SYW5nZUZ1bmMpOwogCVdSSVRFX09JRF9GSUVMRChpblJhbmdlQ29s bCk7CkBAIC0zMTQ4LDYgKzMxNTAsOCBAQCBfb3V0V2luZG93Q2xhdXNlKFN0cmluZ0luZm8gc3Ry LCBjb25zdCBXaW5kb3dDbGF1c2UgKm5vZGUpCiAJV1JJVEVfSU5UX0ZJRUxEKGZyYW1lT3B0aW9u cyk7CiAJV1JJVEVfTk9ERV9GSUVMRChzdGFydE9mZnNldCk7CiAJV1JJVEVfTk9ERV9GSUVMRChl bmRPZmZzZXQpOworCVdSSVRFX05PREVfRklFTEQocnVuY29uZGl0aW9uKTsKKwlXUklURV9OT0RF X0ZJRUxEKHJ1bmNvbmRpdGlvbm9yaWcpOwogCVdSSVRFX09JRF9GSUVMRChzdGFydEluUmFuZ2VG dW5jKTsKIAlXUklURV9PSURfRklFTEQoZW5kSW5SYW5nZUZ1bmMpOwogCVdSSVRFX09JRF9GSUVM RChpblJhbmdlQ29sbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3Mu YyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IDNmNjhmN2MxOGQuLjQ4ODJm MmI3MmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBAIC0zODIsNiArMzgyLDggQEAgX3JlYWRXaW5k b3dDbGF1c2Uodm9pZCkKIAlSRUFEX0lOVF9GSUVMRChmcmFtZU9wdGlvbnMpOwogCVJFQURfTk9E RV9GSUVMRChzdGFydE9mZnNldCk7CiAJUkVBRF9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJUkVB RF9OT0RFX0ZJRUxEKHJ1bmNvbmRpdGlvbik7CisJUkVBRF9OT0RFX0ZJRUxEKHJ1bmNvbmRpdGlv bm9yaWcpOwogCVJFQURfT0lEX0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1bmMpOwogCVJFQURfT0lEX0ZJ RUxEKGVuZEluUmFuZ2VGdW5jKTsKIAlSRUFEX09JRF9GSUVMRChpblJhbmdlQ29sbCk7CkBAIC0y MzQ3LDYgKzIzNDksOCBAQCBfcmVhZFdpbmRvd0FnZyh2b2lkKQogCVJFQURfSU5UX0ZJRUxEKGZy YW1lT3B0aW9ucyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlSRUFEX05PREVf RklFTEQoZW5kT2Zmc2V0KTsKKwlSRUFEX05PREVfRklFTEQocnVuY29uZGl0aW9uKTsKKwlSRUFE X05PREVfRklFTEQocnVuY29uZGl0aW9ub3JpZyk7CiAJUkVBRF9PSURfRklFTEQoc3RhcnRJblJh bmdlRnVuYyk7CiAJUkVBRF9PSURfRklFTEQoZW5kSW5SYW5nZUZ1bmMpOwogCVJFQURfT0lEX0ZJ RUxEKGluUmFuZ2VDb2xsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2FsbHBhdGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4 IDE2OWIxZDUzZmMuLjVlYjQzNDNlNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg Im5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1 ZGUgIm5vZGVzL3N1cHBvcnRub2Rlcy5oIgogI2lmZGVmIE9QVElNSVpFUl9ERUJVRwogI2luY2x1 ZGUgIm5vZGVzL3ByaW50LmgiCiAjZW5kaWYKQEAgLTIxNTcsNiArMjE1OCwzMTMgQEAgaGFzX211 bHRpcGxlX2Jhc2VyZWxzKFBsYW5uZXJJbmZvICpyb290KQogCXJldHVybiBmYWxzZTsKIH0KIAor LyoKKyAqIGZpbmRfd2luZG93X3J1bl9jb25kaXRpb25zCisgKgkJRGV0ZXJtaW5lIGlmICd3ZnVu YycgaXMgcmVhbGx5IGEgV2luZG93RnVuYyBhbmQgY2FsbCBpdHMgcHJvc3VwcG9ydAorICoJCWZ1 bmN0aW9uIHRvIGRldGVybWluZSB0aGUgZnVuY3Rpb25zIG1vbm90b25pYyBwcm9wZXJ0aWVzLiAg V2UgdGhlbgorICoJCXNlZSBpZiAnb3BleHByJyBjYW4gYmUgdXNlZCB0byBzdG9wIHByb2Nlc3Np bmcgV2luZG93QWdnIG5vZGVzIGVhcmx5LgorICoKKyAqIEZvciBleGFtcGxlIHJvd19udW1iZXIo KSBvdmVyIChvcmRlciBieSAuLi4pIGFsd2F5cyBwcm9kdWNlcyBhIHZhbHVlIG9uZQorICogaGln aGVyIHRoYW4gdGhlIHByZXZpb3VzLiAgSWYgc29tZW9uZSBoYXMgYSB3aW5kb3cgZnVuY3Rpb24g c3VjaCBhcyB0aGF0CisgKiBpbiBhIHN1YnF1ZXJ5IGFuZCBqdXN0IHdhbnRzLCBzYXkgYWxsIHJv d3Mgd2l0aCBhIHJvdyBudW1iZXIgbGVzcyB0aGFuIG9yCisgKiBlcXVhbCB0byAxMCwgdGhlbiB3 ZSBtYXkgYXMgd2VsbCBzdG9wIHByb2Nlc3NpbmcgdGhlIHdpbmRvd2FnZyBvbmNlIHRoZSByb3cK KyAqIG51bWJlciByZWFjaGVzIDExLiAgSGVyZSB3ZSBsb29rIGZvciBvcGV4cHJzIHRoYXQgbWln aHQgaGVscCB1cyB0byBzdG9wCisgKiBkb2luZyBuZWVkbGVzcyBleHRyYSBwcm9jZXNzaW5nIGlu IFdpbmRvd0FnZyBub2Rlcy4KKyAqCisgKiBUbyBkbyB0aGlzIHdlIG1ha2UgdXNlIG9mIHRoZSB3 aW5kb3cgZnVuY3Rpb24ncyBwcm9zdXBwb3J0IGZ1bmN0aW9uIHRvCisgKiBkZXRlcm1pbmUgaWYg dGhlIGdpdmVuIHdpbmRvdyBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiB3aW5kb3cgY2xhdXNlIGlz IGEKKyAqIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nIGZ1bmN0aW9uLgor ICoKKyAqICcqa2VlcF9vcmlnaW5hbCcgaXMgc2V0IHRvIHRydWUgaWYgdGhlIGNhbGxlciBzaG91 bGQgYWxzbyB1c2UgJ29wZXhwcicgZm9yCisgKiBpdHMgb3JpZ2luYWwgcHVycG9zZS4gIFRoaXMg aXMgc2V0IHRvIGZhbHNlIGlmIHRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0CisgKiB0aGUgcnVu IGNvbmRpdGlvbiB3aWxsIGhhbmRsZSBhbGwgb2YgdGhlIHJlcXVpcmVkIGZpbHRlcmluZyBvciBp ZiB0aGUgZ2l2ZW4KKyAqICdvcGV4cHInIGlzIG5vdCBzdXBwb3J0ZWQuCisgKgorICogUmV0dXJu cyB0cnVlIGlmIGEgcnVuIGNvbmRpdGlvbiBxdWFsIHdhcyBmb3VuZCBhbmQgYWRkZWQgdG8gdGhl CisgKiBhcHByb3ByaWF0ZSBXaW5kb3dDbGF1c2UgJ3J1bmNvbmRpdGlvbicgbGlzdCBhbmQgc2V0 cyAqa2VlcF9vcmlnaW5hbAorICogYWNjb3JkaW5nbHkuICBSZXR1cm5zIGZhbHNlIGlmIHdmdW5j IGlzIG5vdCBhIFdpbmRvd0Z1bmMgb3Igd2UncmUgdW5hYmxlIHRvCisgKiB1c2UgJ29wZXhwcicg YXMgYSBydW4gY29uZGl0aW9uLgorICovCitzdGF0aWMgYm9vbAorZmluZF93aW5kb3dfcnVuX2Nv bmRpdGlvbnMoUXVlcnkgKnN1YnF1ZXJ5LCBSYW5nZVRibEVudHJ5ICpydGUsIEluZGV4IHJ0aSwK KwkJCQkJCSAgIEF0dHJOdW1iZXIgYXR0bm8sIFdpbmRvd0Z1bmMgKndmdW5jLCBPcEV4cHIgKm9w ZXhwciwKKwkJCQkJCSAgIGJvb2wgd2Z1bmNfbGVmdCwgYm9vbCAqa2VlcF9vcmlnaW5hbCkKK3sK KwlPaWQJCQlwcm9zdXBwb3J0OworCUV4cHIJICAgKm90aGVyZXhwcjsKKwlTdXBwb3J0UmVxdWVz dFdGdW5jTW9ub3RvbmljIHJlcTsKKwlTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljICpyZXM7 CisJV2luZG93Q2xhdXNlICp3Y2xhdXNlOworCUxpc3QJICAgKm9waW5mb3M7CisJT3BFeHByCSAg ICpydW5vcGV4cHI7CisJTGlzdENlbGwgICAqbGM7CisKKwkqa2VlcF9vcmlnaW5hbCA9IHRydWU7 CisKKwl3aGlsZSAoSXNBKHdmdW5jLCBSZWxhYmVsVHlwZSkpCisJCXdmdW5jID0gKFdpbmRvd0Z1 bmMgKikgKChSZWxhYmVsVHlwZSAqKSB3ZnVuYyktPmFyZzsKKworCS8qIHdlIGNhbiBvbmx5IHdv cmsgd2l0aCB3aW5kb3cgZnVuY3Rpb25zICovCisJaWYgKCFJc0Eod2Z1bmMsIFdpbmRvd0Z1bmMp KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBmaW5kIHRoZSB3aW5kb3cgY2xhdXNlIGJlbG9uZ2lu ZyB0byB0aGUgd2luZG93IGZ1bmN0aW9uICovCisJd2NsYXVzZSA9IChXaW5kb3dDbGF1c2UgKikg bGlzdF9udGgoc3VicXVlcnktPndpbmRvd0NsYXVzZSwKKwkJCQkJCQkJCQl3ZnVuYy0+d2lucmVm IC0gMSk7CisKKwkvKgorCSAqIEN1cnJlbnRseSB0aGUgV2luZG93QWdnIG5vZGUganVzdCBzdG9w cyB3aGVuIHRoZSBydW4gY29uZGl0aW9uIGlzIG5vCisJICogbG9uZ2VyIHRydWUuICBJZiB0aGVy ZSBpcyBhIFBBUlRJVElPTiBCWSBjbGF1c2UgdGhlbiB3ZSBjYW5ub3QganVzdAorCSAqIHN0b3Ag YXMgb3RoZXIgcGFydGl0aW9ucyBzdGlsbCBuZWVkIHRvIGJlIHByb2Nlc3NlZC4KKwkgKi8KKwlp ZiAod2NsYXVzZS0+cGFydGl0aW9uQ2xhdXNlICE9IE5JTCkKKwkJcmV0dXJuIGZhbHNlOworCisJ cHJvc3VwcG9ydCA9IGdldF9mdW5jX3N1cHBvcnQod2Z1bmMtPndpbmZub2lkKTsKKworCS8qIENo ZWNrIGlmIHRoZXJlJ3MgYSBzdXBwb3J0IGZ1bmN0aW9uIGZvciAnd2Z1bmMnICovCisJaWYgKCFP aWRJc1ZhbGlkKHByb3N1cHBvcnQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBnZXQgdGhlIEV4 cHIgZnJvbSB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgT3BFeHByICovCisJaWYgKHdmdW5jX2xlZnQp CisJCW90aGVyZXhwciA9IGxzZWNvbmQob3BleHByLT5hcmdzKTsKKwllbHNlCisJCW90aGVyZXhw ciA9IGxpbml0aWFsKG9wZXhwci0+YXJncyk7CisKKwkvKgorCSAqIFRoZSB2YWx1ZSBiZWluZyBj b21wYXJlZCBtdXN0IG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIHRoZQorCSAq IHdpbmRvdyBwYXJ0aXRpb24uCisJICovCisJaWYgKCFpc19wc2V1ZG9fY29uc3RhbnRfY2xhdXNl KChOb2RlICopIG90aGVyZXhwcikpCisJCXJldHVybiBmYWxzZTsKKworCXJlcS50eXBlID0gVF9T dXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljOworCXJlcS53aW5kb3dfZnVuYyA9IHdmdW5jOwor CXJlcS53aW5kb3dfY2xhdXNlID0gd2NsYXVzZTsKKworCS8qIGNhbGwgdGhlIHN1cHBvcnQgZnVu Y3Rpb24gKi8KKwlyZXMgPSAoU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYyAqKQorCQlEYXR1 bUdldFBvaW50ZXIoT2lkRnVuY3Rpb25DYWxsMShwcm9zdXBwb3J0LAorCQkJCQkJCQkJCSBQb2lu dGVyR2V0RGF0dW0oJnJlcSkpKTsKKworCS8qCisJICogTm90aGluZyB0byBkbyBpZiB0aGUgZnVu Y3Rpb24gaXMgbmVpdGhlciBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgb3IKKwkgKiBtb25vdG9u aWNhbGx5IGRlY3JlYXNpbmcuCisJICovCisJaWYgKHJlcyA9PSBOVUxMIHx8IHJlcy0+bW9ub3Rv bmljID09IE1PTk9UT05JQ0ZVTkNfTk9ORSkKKwkJcmV0dXJuIGZhbHNlOworCisJcnVub3BleHBy ID0gTlVMTDsKKwlvcGluZm9zID0gZ2V0X29wX2J0cmVlX2ludGVycHJldGF0aW9uKG9wZXhwci0+ b3Bubyk7CisKKwlmb3JlYWNoKGxjLCBvcGluZm9zKQorCXsKKwkJT3BCdHJlZUludGVycHJldGF0 aW9uICpvcGluZm8gPSAoT3BCdHJlZUludGVycHJldGF0aW9uICopIGxmaXJzdChsYyk7CisJCWlu dAkJCXN0cmF0ZWd5ID0gb3BpbmZvLT5zdHJhdGVneTsKKworCQkvKiBoYW5kbGUgPCAvIDw9ICov CisJCWlmIChzdHJhdGVneSA9PSBCVExlc3NTdHJhdGVneU51bWJlciB8fAorCQkJc3RyYXRlZ3kg PT0gQlRMZXNzRXF1YWxTdHJhdGVneU51bWJlcikKKwkJeworCQkJLyoKKwkJCSAqIDwgLyA8PSBp cyBzdXBwb3J0ZWQgZm9yIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBmdW5jdGlvbnMgaW4KKwkJ CSAqIHRoZSBmb3JtIDx3ZnVuYz4gb3AgPHBzZXVkb2NvbnN0PiBhbmQgPHBzZXVkb2NvbnN0PiBv cCA8d2Z1bmM+CisJCQkgKiBmb3IgbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIGZ1bmN0aW9ucy4K KwkJCSAqLworCQkJaWYgKCh3ZnVuY19sZWZ0ICYmIChyZXMtPm1vbm90b25pYyAmIE1PTk9UT05J Q0ZVTkNfSU5DUkVBU0lORykpIHx8CisJCQkJKCF3ZnVuY19sZWZ0ICYmIChyZXMtPm1vbm90b25p YyAmIE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORykpKQorCQkJeworCQkJCSprZWVwX29yaWdpbmFs ID0gZmFsc2U7CisJCQkJcnVub3BleHByID0gb3BleHByOworCQkJfQorCQkJYnJlYWs7CisJCX0K KwkJLyogaGFuZGxlID4gLyA+PSAqLworCQllbHNlIGlmIChzdHJhdGVneSA9PSBCVEdyZWF0ZXJT dHJhdGVneU51bWJlciB8fAorCQkJCSBzdHJhdGVneSA9PSBCVEdyZWF0ZXJFcXVhbFN0cmF0ZWd5 TnVtYmVyKQorCQl7CisJCQkvKgorCQkJICogPiAvID49IGlzIHN1cHBvcnRlZCBmb3IgbW9ub3Rv bmljYWxseSBkZWNyZWFzaW5nIGZ1bmN0aW9ucyBpbgorCQkJICogdGhlIGZvcm0gPHdmdW5jPiBv cCA8cHNldWRvY29uc3Q+IGFuZCA8cHNldWRvY29uc3Q+IG9wIDx3ZnVuYz4KKwkJCSAqIGZvciBt b25vdG9uaWNhbGx5IGluY3JlYXNpbmcgZnVuY3Rpb25zLgorCQkJICovCisJCQlpZiAoKHdmdW5j X2xlZnQgJiYgKHJlcy0+bW9ub3RvbmljICYgTU9OT1RPTklDRlVOQ19ERUNSRUFTSU5HKSkgfHwK KwkJCQkoIXdmdW5jX2xlZnQgJiYgKHJlcy0+bW9ub3RvbmljICYgTU9OT1RPTklDRlVOQ19JTkNS RUFTSU5HKSkpCisJCQl7CisJCQkJKmtlZXBfb3JpZ2luYWwgPSBmYWxzZTsKKwkJCQlydW5vcGV4 cHIgPSBvcGV4cHI7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQkvKiBoYW5kbGUgPSAqLworCQll bHNlIGlmIChzdHJhdGVneSA9PSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIpCisJCXsKKwkJCU9wRXhw cgkgICAqbmV3b3BleHByOworCQkJT2lkCQkJb3A7CisJCQlpbnQxNgkJbmV3c3RyYXRlZ3k7CisK KwkJCS8qCisJCQkgKiBXaGVuIGJvdGggbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGFuZCBkZWNy ZWFzaW5nIHRoZW4gdGhlCisJCQkgKiByZXR1cm4gdmFsdWUgb2YgdGhlIHdpbmRvdyBmdW5jdGlv biB3aWxsIGJlIHRoZSBzYW1lIGVhY2ggdGltZS4KKwkJCSAqIFdlIGNhbiBzaW1wbHkgdXNlICdv cGV4cHInIGFzIHRoZSBydW4gY29uZGl0aW9uIHdpdGhvdXQKKwkJCSAqIG1vZGlmeWluZyBpdC4K KwkJCSAqLworCQkJaWYgKChyZXMtPm1vbm90b25pYyAmIE1PTk9UT05JQ0ZVTkNfQk9USCkgPT0g TU9OT1RPTklDRlVOQ19CT1RIKQorCQkJeworCQkJCSprZWVwX29yaWdpbmFsID0gZmFsc2U7CisJ CQkJcnVub3BleHByID0gb3BleHByOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKgorCQkJICog V2hlbiBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgd2UgbWFrZSBhIHF1YWwgd2l0aCA8d2Z1bmM+ IDw9CisJCQkgKiA8dmFsdWU+IG9yIDx2YWx1ZT4gPj0gPHdmdW5jPiBpbiBvcmRlciB0byBmaWx0 ZXIgb3V0IHZhbHVlcworCQkJICogd2hpY2ggYXJlIGFib3ZlIHRoZSB2YWx1ZSBpbiB0aGUgZXF1 YWxpdHkgY29uZGl0aW9uLiAgRm9yCisJCQkgKiBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgZnVu Y3Rpb25zIHdlIHdhbnQgdG8gZmlsdGVyIHZhbHVlcworCQkJICogYmVsb3cgdGhlIHZhbHVlIGlu IHRoZSBlcXVhbGl0eSBjb25kaXRpb24uCisJCQkgKi8KKwkJCWlmIChyZXMtPm1vbm90b25pYyAm IE1PTk9UT05JQ0ZVTkNfSU5DUkVBU0lORykKKwkJCQluZXdzdHJhdGVneSA9IHdmdW5jX2xlZnQg PyBCVExlc3NFcXVhbFN0cmF0ZWd5TnVtYmVyIDogQlRHcmVhdGVyRXF1YWxTdHJhdGVneU51bWJl cjsKKwkJCWVsc2UKKwkJCQluZXdzdHJhdGVneSA9IHdmdW5jX2xlZnQgPyBCVEdyZWF0ZXJFcXVh bFN0cmF0ZWd5TnVtYmVyIDogQlRMZXNzRXF1YWxTdHJhdGVneU51bWJlcjsKKworCQkJb3AgPSBn ZXRfb3BmYW1pbHlfbWVtYmVyKG9waW5mby0+b3BmYW1pbHlfaWQsCisJCQkJCQkJCQkgb3BpbmZv LT5vcGxlZnR0eXBlLAorCQkJCQkJCQkJIG9waW5mby0+b3ByaWdodHR5cGUsCisJCQkJCQkJCQkg bmV3c3RyYXRlZ3kpOworCisJCQkvKgorCQkJICogQnVpbGQgYSBPcEV4cHIgd2l0aCB0aGUgd2lu ZG93IGZ1bmN0aW9uIG9uIHRoZSBzYW1lIHNpZGUgYXMgaXQKKwkJCSAqIHdhcyBpbiB0aGUgb3Jp Z2luYWwgT3BFeHByLgorCQkJICovCisJCQlpZiAod2Z1bmNfbGVmdCkKKwkJCQluZXdvcGV4cHIg PSAoT3BFeHByICopIG1ha2Vfb3BjbGF1c2Uob3AsCisJCQkJCQkJCQkJCQkJIG9wZXhwci0+b3By ZXN1bHR0eXBlLAorCQkJCQkJCQkJCQkJCSBvcGV4cHItPm9wcmV0c2V0LAorCQkJCQkJCQkJCQkJ CSAoRXhwciAqKSB3ZnVuYywKKwkJCQkJCQkJCQkJCQkgb3RoZXJleHByLAorCQkJCQkJCQkJCQkJ CSBvcGV4cHItPm9wY29sbGlkLAorCQkJCQkJCQkJCQkJCSBvcGV4cHItPmlucHV0Y29sbGlkKTsK KwkJCWVsc2UKKwkJCQluZXdvcGV4cHIgPSAoT3BFeHByICopIG1ha2Vfb3BjbGF1c2Uob3AsCisJ CQkJCQkJCQkJCQkJIG9wZXhwci0+b3ByZXN1bHR0eXBlLAorCQkJCQkJCQkJCQkJCSBvcGV4cHIt Pm9wcmV0c2V0LAorCQkJCQkJCQkJCQkJCSBvdGhlcmV4cHIsCisJCQkJCQkJCQkJCQkJIChFeHBy ICopIHdmdW5jLAorCQkJCQkJCQkJCQkJCSBvcGV4cHItPm9wY29sbGlkLAorCQkJCQkJCQkJCQkJ CSBvcGV4cHItPmlucHV0Y29sbGlkKTsKKworCQkJbmV3b3BleHByLT5vcGZ1bmNpZCA9IGdldF9v cGNvZGUob3ApOworCisJCQkqa2VlcF9vcmlnaW5hbCA9IHRydWU7CisJCQlydW5vcGV4cHIgPSBu ZXdvcGV4cHI7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChydW5vcGV4cHIgIT0gTlVMTCkK Kwl7CisJCUV4cHIJICAgKm9yaWdleHByOworCisJCXdjbGF1c2UtPnJ1bmNvbmRpdGlvbiA9IGxh cHBlbmQod2NsYXVzZS0+cnVuY29uZGl0aW9uLCBydW5vcGV4cHIpOworCisJCS8qIGFsc28gY3Jl YXRlIGEgdmVyc2lvbiBvZiB0aGUgcXVhbCB0aGF0IHdlIGNhbiBkaXNwbGF5IGluIEVYUExBSU4g Ki8KKwkJaWYgKHdmdW5jX2xlZnQpCisJCQlvcmlnZXhwciA9IG1ha2Vfb3BjbGF1c2UocnVub3Bl eHByLT5vcG5vLAorCQkJCQkJCQkJIHJ1bm9wZXhwci0+b3ByZXN1bHR0eXBlLAorCQkJCQkJCQkJ IHJ1bm9wZXhwci0+b3ByZXRzZXQsIChFeHByICopIHdmdW5jLAorCQkJCQkJCQkJIG90aGVyZXhw ciwgcnVub3BleHByLT5vcGNvbGxpZCwKKwkJCQkJCQkJCSBydW5vcGV4cHItPmlucHV0Y29sbGlk KTsKKwkJZWxzZQorCQkJb3JpZ2V4cHIgPSBtYWtlX29wY2xhdXNlKHJ1bm9wZXhwci0+b3BubywK KwkJCQkJCQkJCSBydW5vcGV4cHItPm9wcmVzdWx0dHlwZSwKKwkJCQkJCQkJCSBydW5vcGV4cHIt Pm9wcmV0c2V0LAorCQkJCQkJCQkJIG90aGVyZXhwciwgKEV4cHIgKikgd2Z1bmMsCisJCQkJCQkJ CQkgcnVub3BleHByLT5vcGNvbGxpZCwKKwkJCQkJCQkJCSBydW5vcGV4cHItPmlucHV0Y29sbGlk KTsKKworCQl3Y2xhdXNlLT5ydW5jb25kaXRpb25vcmlnID0gbGFwcGVuZCh3Y2xhdXNlLT5ydW5j b25kaXRpb25vcmlnLCBvcmlnZXhwcik7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qIHVuc3Vw cG9ydGVkIE9wRXhwciAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIGNoZWNrX2FuZF9w dXNoX3dpbmRvd19xdWFscworICoJCUNoZWNrIGlmICdyaW5mbycgaXMgYSBxdWFsIHRoYXQgY2Fu IGJlIHB1c2hlZCBpbnRvIGEgV2luZG93RnVuYyBhcyBhCisgKgkJJ3J1bmNvbmRpdGlvbicgcXVh bC4gIFRoZXNlLCB3aGVuIHByZXNlbnQsIGNhdXNlIHRoZSB3aW5kb3cgZnVuY3Rpb24KKyAqCQll dmFsdWF0aW9uIHRvIHN0b3Agd2hlbiB0aGUgY29uZGl0aW9uIGJlY29tZXMgZmFsc2UuCisgKgor ICogUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc3RpbGwgbXVzdCBrZWVwIHRoZSBvcmlnaW5h bCBxdWFsIG9yIGZhbHNlIGlmCisgKiB0aGUgY2FsbGVyIGNhbiBzYWZlbHkgaWdub3JlIHRoZSBv cmlnaW5hbCBxdWFsIGJlY2F1c2UgdGhlIHdpbmRvdyBmdW5jdGlvbgorICogd2lsbCB1c2UgdGhl IHJ1biBjb25kaXRpb24gdG8gc3RvcCBhdCB0aGUgcmlnaHQgdGltZS4KKyAqLworc3RhdGljIGJv b2wKK2NoZWNrX2FuZF9wdXNoX3dpbmRvd19xdWFscyhRdWVyeSAqc3VicXVlcnksIFJhbmdlVGJs RW50cnkgKnJ0ZSwgSW5kZXggcnRpLAorCQkJCQkJCU5vZGUgKmNsYXVzZSkKK3sKKwlPcEV4cHIJ ICAgKm9wZXhwciA9IChPcEV4cHIgKikgY2xhdXNlOworCWJvb2wJCWtlZXBfb3JpZ2luYWwgPSB0 cnVlOworCVZhcgkJICAgKnZhcjE7CisJVmFyCQkgICAqdmFyMjsKKworCS8qIFdlJ3JlIG9ubHkg YWJsZSB0byB1c2UgT3BFeHBycyB3aXRoIDIgb3BlcmFuZHMgKi8KKwlpZiAoIUlzQShvcGV4cHIs IE9wRXhwcikpCisJCXJldHVybiB0cnVlOworCisJaWYgKGxpc3RfbGVuZ3RoKG9wZXhwci0+YXJn cykgIT0gMikKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlIGRvbid0IGN1cnJlbnRseSBh dHRlbXB0IHRvIGdlbmVyYXRlIHdpbmRvdyBmdW5jdGlvbiBydW4gY29uZGl0aW9ucworCSAqIHdo ZW4gdGhlcmUgYXJlIG11bHRpcGxlIHdpbmRvdyBjbGF1c2VzLiAgSXQgbWF5IHNlZW0gcG9zc2li bGUgdG8gcmVsYXgKKwkgKiB0aGlzIGEgYml0IGFuZCBlbnN1cmUgd2Ugb25seSBwdXQgcnVuIGNv bmRpdGlvbnMgb24gdGhlIGZpbmFsIHdpbmRvdworCSAqIGNsYXVzZSB0byBiZSBldmFsdWF0ZWQs IGhvd2V2ZXIsIGN1cnJlbnRseSB3ZSd2ZSB5ZXQgdG8gZGV0ZXJtaW5lIHRoZQorCSAqIG9yZGVy IHRoYXQgdGhlIHdpbmRvdyBjbGF1c2VzIHdpbGwgYmUgZXZhbHVhdGVkLiAgVGhpcydzIGRvbmUg bGF0ZXIgaW4KKwkgKiBzZWxlY3RfYWN0aXZlX3dpbmRvd3MoKS4gIElmIHdlIHdlcmUgdG8gcHV0 IHJ1biBjb25kaXRpb25zIG9uIGFueXRoaW5nCisJICogYXBhcnQgZnJvbSB0aGUgZmluYWwgd2lu ZG93IGNsYXVzZSB0byBiZSBldmFsdWF0ZWQgdGhlbiB3ZSBtYXkgZmlsdGVyCisJICogcm93cyB0 aGF0IGFyZSByZXF1aXJlZCBmb3IgYSB5ZXQtdG8tYmUtZXZhbHVhdGVkIHdpbmRvdyBjbGF1c2Uu CisJICovCisJaWYgKGxpc3RfbGVuZ3RoKHN1YnF1ZXJ5LT53aW5kb3dDbGF1c2UpID4gMSkKKwkJ cmV0dXJuIHRydWU7CisKKwkvKgorCSAqIENoZWNrIGZvciBwbGFpbiBWYXJzIHdoaWNoIHJlZmVy ZW5jZSB3aW5kb3cgZnVuY3Rpb25zIGluIHRoZSBzdWJxdWVyeS4KKwkgKiBJZiB3ZSBmaW5kIGFu eSwgd2UnbGwgYXNrIGZpbmRfd2luZG93X3J1bl9jb25kaXRpb25zKCkgaWYgJ29wZXhwcicgY2Fu CisJICogYmUgdXNlZCBhcyBhIHJ1biBjb25kaXRpb24gdG8gYWxsb3cgdXMgdG8gc3RvcCB3aW5k b3dhZ2cgZXhlY3V0aW9uCisJICogZWFybHkuCisJICovCisKKwkvKiBDaGVjayB0aGUgbGVmdCBz aWRlIG9mIHRoZSBPcEV4cHIgKi8KKwl2YXIxID0gbGluaXRpYWwob3BleHByLT5hcmdzKTsKKwlp ZiAoSXNBKHZhcjEsIFZhcikgJiYgdmFyMS0+dmFyYXR0bm8gPiAwKQorCXsKKwkJVGFyZ2V0RW50 cnkgKnRsZSA9IGxpc3RfbnRoKHN1YnF1ZXJ5LT50YXJnZXRMaXN0LCB2YXIxLT52YXJhdHRubyAt IDEpOworCQlXaW5kb3dGdW5jICp3ZnVuYyA9IChXaW5kb3dGdW5jICopIHRsZS0+ZXhwcjsKKwor CQlpZiAoZmluZF93aW5kb3dfcnVuX2NvbmRpdGlvbnMoc3VicXVlcnksIHJ0ZSwgcnRpLCB0bGUt PnJlc25vLCB3ZnVuYywKKwkJCQkJCQkJCSAgIG9wZXhwciwgdHJ1ZSwgJmtlZXBfb3JpZ2luYWwp KQorCQkJcmV0dXJuIGtlZXBfb3JpZ2luYWw7CisJfQorCisJLyogYW5kIGNoZWNrIHRoZSByaWdo dCBzaWRlICovCisJdmFyMiA9IGxzZWNvbmQob3BleHByLT5hcmdzKTsKKwlpZiAoSXNBKHZhcjIs IFZhcikgJiYgdmFyMi0+dmFyYXR0bm8gPiAwKQorCXsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IGxp c3RfbnRoKHN1YnF1ZXJ5LT50YXJnZXRMaXN0LCB2YXIyLT52YXJhdHRubyAtIDEpOworCQlXaW5k b3dGdW5jICp3ZnVuYyA9IChXaW5kb3dGdW5jICopIHRsZS0+ZXhwcjsKKworCQlpZiAoZmluZF93 aW5kb3dfcnVuX2NvbmRpdGlvbnMoc3VicXVlcnksIHJ0ZSwgcnRpLCB0bGUtPnJlc25vLCB3ZnVu YywKKwkJCQkJCQkJCSAgIG9wZXhwciwgZmFsc2UsICZrZWVwX29yaWdpbmFsKSkKKwkJCXJldHVy biBrZWVwX29yaWdpbmFsOworCX0KKworCXJldHVybiB0cnVlOworfQorCiAvKgogICogc2V0X3N1 YnF1ZXJ5X3BhdGhsaXN0CiAgKgkJR2VuZXJhdGUgU3VicXVlcnlTY2FuIGFjY2VzcyBwYXRocyBm b3IgYSBzdWJxdWVyeSBSVEUKQEAgLTIyNDUsMTkgKzI1NTMsMzAgQEAgc2V0X3N1YnF1ZXJ5X3Bh dGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCWZvcmVhY2gobCwg cmVsLT5iYXNlcmVzdHJpY3RpbmZvKQogCQl7CiAJCQlSZXN0cmljdEluZm8gKnJpbmZvID0gKFJl c3RyaWN0SW5mbyAqKSBsZmlyc3QobCk7CisJCQlOb2RlCSAgICpjbGF1c2UgPSAoTm9kZSAqKSBy aW5mby0+Y2xhdXNlOwogCiAJCQlpZiAoIXJpbmZvLT5wc2V1ZG9jb25zdGFudCAmJgogCQkJCXF1 YWxfaXNfcHVzaGRvd25fc2FmZShzdWJxdWVyeSwgcnRpLCByaW5mbywgJnNhZmV0eUluZm8pKQog CQkJewotCQkJCU5vZGUJICAgKmNsYXVzZSA9IChOb2RlICopIHJpbmZvLT5jbGF1c2U7Ci0KIAkJ CQkvKiBQdXNoIGl0IGRvd24gKi8KIAkJCQlzdWJxdWVyeV9wdXNoX3F1YWwoc3VicXVlcnksIHJ0 ZSwgcnRpLCBjbGF1c2UpOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCS8qIEtlZXAgaXQgaW4g dGhlIHVwcGVyIHF1ZXJ5ICovCi0JCQkJdXBwZXJyZXN0cmljdGxpc3QgPSBsYXBwZW5kKHVwcGVy cmVzdHJpY3RsaXN0LCByaW5mbyk7CisJCQkJLyoKKwkJCQkgKiBTaW5jZSB3ZSBjYW4ndCBwdXNo IHRoZSBxdWFsIGRvd24gaW50byB0aGUgc3VicXVlcnksIGNoZWNrCisJCQkJICogaWYgaXQgaGFw cGVucyB0byByZWZlcmVuY2UgYSB3aW5kb3cgZnVuY3Rpb24uICBJZiBzbyB0aGVuCisJCQkJICog aXQgbWlnaHQgYmUgdXNlZnVsIHRvIGFsbG93IHRoZSB3aW5kb3cgZXZhbHVhdGlvbiB0byBzdG9w CisJCQkJICogZWFybHkuCisJCQkJICovCisJCQkJaWYgKGNoZWNrX2FuZF9wdXNoX3dpbmRvd19x dWFscyhzdWJxdWVyeSwgcnRlLCBydGksIGNsYXVzZSkpCisJCQkJeworCQkJCQkvKgorCQkJCQkg KiBJdCdzIG5vdCBhIHN1aXRhYmxlIHdpbmRvdyBydW4gY29uZGl0aW9uIHF1YWwgb3IgaXQgaXMs CisJCQkJCSAqIGJ1dCB0aGUgb3JpZ2luYWwgbXVzdCBhbHNvIGJlIGtlcHQgaW4gdGhlIHVwcGVy IHF1ZXJ5LgorCQkJCQkgKi8KKwkJCQkJdXBwZXJyZXN0cmljdGxpc3QgPSBsYXBwZW5kKHVwcGVy cmVzdHJpY3RsaXN0LCByaW5mbyk7CisJCQkJfQogCQkJfQogCQl9CiAJCXJlbC0+YmFzZXJlc3Ry aWN0aW5mbyA9IHVwcGVycmVzdHJpY3RsaXN0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jCmluZGV4IGZhMDY5YTIxN2MuLjFjNzUwYmQ3YTQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTI4OCw2ICsyODgsNyBAQCBzdGF0aWMgV2luZG93 QWdnICptYWtlX3dpbmRvd2FnZyhMaXN0ICp0bGlzdCwgSW5kZXggd2lucmVmLAogCQkJCQkJCQkg aW50IGZyYW1lT3B0aW9ucywgTm9kZSAqc3RhcnRPZmZzZXQsIE5vZGUgKmVuZE9mZnNldCwKIAkJ CQkJCQkJIE9pZCBzdGFydEluUmFuZ2VGdW5jLCBPaWQgZW5kSW5SYW5nZUZ1bmMsCiAJCQkJCQkJ CSBPaWQgaW5SYW5nZUNvbGwsIGJvb2wgaW5SYW5nZUFzYywgYm9vbCBpblJhbmdlTnVsbHNGaXJz dCwKKwkJCQkJCQkJIExpc3QgKnJ1bmNvbmRpdGlvbiwgTGlzdCAqcnVuY29uZGl0aW9ub3JpZywK IAkJCQkJCQkJIFBsYW4gKmxlZnR0cmVlKTsKIHN0YXRpYyBHcm91cCAqbWFrZV9ncm91cChMaXN0 ICp0bGlzdCwgTGlzdCAqcXVhbCwgaW50IG51bUdyb3VwQ29scywKIAkJCQkJCSBBdHRyTnVtYmVy ICpncnBDb2xJZHgsIE9pZCAqZ3JwT3BlcmF0b3JzLCBPaWQgKmdycENvbGxhdGlvbnMsCkBAIC0y NjQxLDYgKzI2NDIsOCBAQCBjcmVhdGVfd2luZG93YWdnX3BsYW4oUGxhbm5lckluZm8gKnJvb3Qs IFdpbmRvd0FnZ1BhdGggKmJlc3RfcGF0aCkKIAkJCQkJCSAgd2MtPmluUmFuZ2VDb2xsLAogCQkJ CQkJICB3Yy0+aW5SYW5nZUFzYywKIAkJCQkJCSAgd2MtPmluUmFuZ2VOdWxsc0ZpcnN0LAorCQkJ CQkJICB3Yy0+cnVuY29uZGl0aW9uLAorCQkJCQkJICB3Yy0+cnVuY29uZGl0aW9ub3JpZywKIAkJ CQkJCSAgc3VicGxhbik7CiAKIAljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5wbGFuLCAo UGF0aCAqKSBiZXN0X3BhdGgpOwpAQCAtNjUyNSw3ICs2NTI4LDcgQEAgbWFrZV93aW5kb3dhZ2co TGlzdCAqdGxpc3QsIEluZGV4IHdpbnJlZiwKIAkJCSAgIGludCBmcmFtZU9wdGlvbnMsIE5vZGUg KnN0YXJ0T2Zmc2V0LCBOb2RlICplbmRPZmZzZXQsCiAJCQkgICBPaWQgc3RhcnRJblJhbmdlRnVu YywgT2lkIGVuZEluUmFuZ2VGdW5jLAogCQkJICAgT2lkIGluUmFuZ2VDb2xsLCBib29sIGluUmFu Z2VBc2MsIGJvb2wgaW5SYW5nZU51bGxzRmlyc3QsCi0JCQkgICBQbGFuICpsZWZ0dHJlZSkKKwkJ CSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwgTGlzdCAqcnVuY29uZGl0aW9ub3JpZywgUGxhbiAqbGVm dHRyZWUpCiB7CiAJV2luZG93QWdnICAqbm9kZSA9IG1ha2VOb2RlKFdpbmRvd0FnZyk7CiAJUGxh bgkgICAqcGxhbiA9ICZub2RlLT5wbGFuOwpAQCAtNjU0Miw2ICs2NTQ1LDggQEAgbWFrZV93aW5k b3dhZ2coTGlzdCAqdGxpc3QsIEluZGV4IHdpbnJlZiwKIAlub2RlLT5mcmFtZU9wdGlvbnMgPSBm cmFtZU9wdGlvbnM7CiAJbm9kZS0+c3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsKIAlub2RlLT5l bmRPZmZzZXQgPSBlbmRPZmZzZXQ7CisJbm9kZS0+cnVuY29uZGl0aW9uID0gcnVuY29uZGl0aW9u OworCW5vZGUtPnJ1bmNvbmRpdGlvbm9yaWcgPSBydW5jb25kaXRpb25vcmlnOwogCW5vZGUtPnN0 YXJ0SW5SYW5nZUZ1bmMgPSBzdGFydEluUmFuZ2VGdW5jOwogCW5vZGUtPmVuZEluUmFuZ2VGdW5j ID0gZW5kSW5SYW5nZUZ1bmM7CiAJbm9kZS0+aW5SYW5nZUNvbGwgPSBpblJhbmdlQ29sbDsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCBhN2IxMWI3ZjAzLi5lYWViYTE3MDg4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC04OTcsNiArODk3LDE0IEBA IHNldF9wbGFuX3JlZnMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4sIGludCBydG9mZnNl dCkKIAkJCQkJZml4X3NjYW5fZXhwcihyb290LCB3cGxhbi0+c3RhcnRPZmZzZXQsIHJ0b2Zmc2V0 LCAxKTsKIAkJCQl3cGxhbi0+ZW5kT2Zmc2V0ID0KIAkJCQkJZml4X3NjYW5fZXhwcihyb290LCB3 cGxhbi0+ZW5kT2Zmc2V0LCBydG9mZnNldCwgMSk7CisJCQkJd3BsYW4tPnJ1bmNvbmRpdGlvbiA9 IGZpeF9zY2FuX2xpc3Qocm9vdCwKKwkJCQkJCQkJCQkJCQl3cGxhbi0+cnVuY29uZGl0aW9uLAor CQkJCQkJCQkJCQkJCXJ0b2Zmc2V0LAorCQkJCQkJCQkJCQkJCU5VTV9FWEVDX1RMSVNUKHBsYW4p KTsKKwkJCQl3cGxhbi0+cnVuY29uZGl0aW9ub3JpZyA9IGZpeF9zY2FuX2xpc3Qocm9vdCwKKwkJ CQkJCQkJCQkJCQkJd3BsYW4tPnJ1bmNvbmRpdGlvbm9yaWcsCisJCQkJCQkJCQkJCQkJCXJ0b2Zm c2V0LAorCQkJCQkJCQkJCQkJCQlOVU1fRVhFQ19UTElTVChwbGFuKSk7CiAJCQl9CiAJCQlicmVh azsKIAkJY2FzZSBUX1Jlc3VsdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9p bnQ4LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvaW50OC5jCmluZGV4IDRhODcxMTRhNGYuLmI0 YmNjMjZkNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUg Im5vZGVzL3N1cHBvcnRub2Rlcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIK ICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgogCiAKIHR5cGVkZWYgc3RydWN0CkBAIC03OTEsNiArNzkyLDcgQEAgaW50OGRlYyhQR19GVU5D VElPTl9BUkdTKQogfQogCiAKKwogLyoKICAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhhY3RseSBs aWtlIGludDhpbmMvaW50OGRlYyBidXQgYXJlIHVzZWQgZm9yCiAgKiBhZ2dyZWdhdGVzIHRoYXQg Y291bnQgb25seSBub24tbnVsbCB2YWx1ZXMuICBTaW5jZSB0aGUgZnVuY3Rpb25zIGFyZQpAQCAt ODE4LDYgKzgyMCw0OSBAQCBpbnQ4ZGVjX2FueShQR19GVU5DVElPTl9BUkdTKQogCXJldHVybiBp bnQ4ZGVjKGZjaW5mbyk7CiB9CiAKKy8qCisgKiBpbnQ4aW5jX3N1cHBvcnQKKyAqCQlwcm9zdXBw b3J0IGZ1bmN0aW9uIGZvciBpbnQ4aW5jKCkgYW5kIGludDhpbmNfYW55KCkKKyAqLworRGF0dW0K K2ludDhpbmNfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCU5vZGUJICAgKnJhd3JlcSA9 IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJaWYgKElzQShyYXdyZXEsIFN1cHBv cnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMpKQorCXsKKwkJU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90 b25pYyAqcmVxID0gKFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMgKikgcmF3cmVxOworCQlN b25vdG9uaWNGdW5jdGlvbiBtb25vdG9uaWMgPSBNT05PVE9OSUNGVU5DX05PTkU7CisJCWludAkJ CWZyYW1lT3B0aW9ucyA9IHJlcS0+d2luZG93X2NsYXVzZS0+ZnJhbWVPcHRpb25zOworCisJCS8q IE5vIE9SREVSIEJZIGNsYXVzZSB0aGVuIGFsbCByb3dzIGFyZSBwZWVycyAqLworCQlpZiAocmVx LT53aW5kb3dfY2xhdXNlLT5vcmRlckNsYXVzZSA9PSBOSUwpCisJCQltb25vdG9uaWMgPSBNT05P VE9OSUNGVU5DX0JPVEg7CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSB0YWtl IGludG8gYWNjb3VudCB0aGUgZnJhbWUgb3B0aW9ucy4gIFdoZW4gdGhlIGZyYW1lCisJCQkgKiBi b3VuZCBpcyB0aGUgc3RhcnQgb2YgdGhlIHdpbmRvdyB0aGVuIHRoZSByZXN1bHRpbmcgdmFsdWUg Y2FuCisJCQkgKiBuZXZlciBkZWNyZWFzZSwgdGhlcmVmb3JlIGlzIG1vbm90b25pY2FsbHkgaW5j cmVhc2luZworCQkJICovCisJCQlpZiAoZnJhbWVPcHRpb25zICYgRlJBTUVPUFRJT05fU1RBUlRf VU5CT1VOREVEX1BSRUNFRElORykKKwkJCQltb25vdG9uaWMgfD0gTU9OT1RPTklDRlVOQ19JTkNS RUFTSU5HOworCisJCQkvKgorCQkJICogTGlrZXdpc2UsIGlmIHRoZSBmcmFtZSBib3VuZCBpcyB0 aGUgZW5kIG9mIHRoZSB3aW5kb3cgdGhlbiB0aGUKKwkJCSAqIHJlc3VsdGluZyB2YWx1ZSBjYW4g bmV2ZXIgaW5jcmVhc2UuCisJCQkgKi8KKwkJCWlmIChmcmFtZU9wdGlvbnMgJiBGUkFNRU9QVElP Tl9FTkRfVU5CT1VOREVEX0ZPTExPV0lORykKKwkJCQltb25vdG9uaWMgfD0gTU9OT1RPTklDRlVO Q19ERUNSRUFTSU5HOworCQl9CisKKwkJcmVxLT5tb25vdG9uaWMgPSBtb25vdG9uaWM7CisJCVBH X1JFVFVSTl9QT0lOVEVSKHJlcSk7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7Cit9 CisKIAogRGF0dW0KIGludDhsYXJnZXIoUEdfRlVOQ1RJT05fQVJHUykKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC93aW5kb3dmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3dpbmRvd2Z1bmNzLmMKaW5kZXggM2UwY2M5YmUxYS4uNTk2NTY0ZmExNSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3dpbmRvd2Z1bmNzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqLwogI2luY2x1ZGUgInBv c3RncmVzLmgiCiAKKyNpbmNsdWRlICJub2Rlcy9zdXBwb3J0bm9kZXMuaCIKICNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgIndpbmRvd2FwaS5oIgogCkBAIC04OCw2ICs4OSwy NiBAQCB3aW5kb3dfcm93X251bWJlcihQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9JTlQ2 NChjdXJwb3MgKyAxKTsKIH0KIAorLyoKKyAqIHdpbmRvd19yb3dfbnVtYmVyX3N1cHBvcnQKKyAq CQlwcm9zdXBwb3J0IGZ1bmN0aW9uIGZvciB3aW5kb3dfcm93X251bWJlcigpCisgKi8KK0RhdHVt Cit3aW5kb3dfcm93X251bWJlcl9zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTm9kZQkg ICAqcmF3cmVxID0gKE5vZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlpZiAoSXNBKHJh d3JlcSwgU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYykpCisJeworCQlTdXBwb3J0UmVxdWVz dFdGdW5jTW9ub3RvbmljICpyZXEgPSAoU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYyAqKSBy YXdyZXE7CisKKwkJLyogcm93X251bWJlcigpIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyAq LworCQlyZXEtPm1vbm90b25pYyA9IE1PTk9UT05JQ0ZVTkNfSU5DUkVBU0lORzsKKwkJUEdfUkVU VVJOX1BPSU5URVIocmVxKTsKKwl9CisKKwlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKK30KIAog LyoKICAqIHJhbmsKQEAgLTExMCw2ICsxMzEsMjcgQEAgd2luZG93X3JhbmsoUEdfRlVOQ1RJT05f QVJHUykKIAlQR19SRVRVUk5fSU5UNjQoY29udGV4dC0+cmFuayk7CiB9CiAKKy8qCisgKiB3aW5k b3dfcmFua19zdXBwb3J0CisgKgkJcHJvc3VwcG9ydCBmdW5jdGlvbiBmb3Igd2luZG93X3Jhbmso KQorICovCitEYXR1bQord2luZG93X3Jhbmtfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQorewor CU5vZGUJICAgKnJhd3JlcSA9IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJaWYg KElzQShyYXdyZXEsIFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMpKQorCXsKKwkJU3VwcG9y dFJlcXVlc3RXRnVuY01vbm90b25pYyAqcmVxID0gKFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9u aWMgKikgcmF3cmVxOworCisJCS8qIHJhbmsoKSBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcg Ki8KKwkJcmVxLT5tb25vdG9uaWMgPSBNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkc7CisJCVBHX1JF VFVSTl9QT0lOVEVSKHJlcSk7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7Cit9CisK IC8qCiAgKiBkZW5zZV9yYW5rCiAgKiBSYW5rIGluY3JlYXNlcyBieSAxIHdoZW4ga2V5IGNvbHVt bnMgY2hhbmdlLgpAQCAtMTMwLDYgKzE3MiwyNyBAQCB3aW5kb3dfZGVuc2VfcmFuayhQR19GVU5D VElPTl9BUkdTKQogCVBHX1JFVFVSTl9JTlQ2NChjb250ZXh0LT5yYW5rKTsKIH0KIAorLyoKKyAq IHdpbmRvd19kZW5zZV9yYW5rX3N1cHBvcnQKKyAqCQlwcm9zdXBwb3J0IGZ1bmN0aW9uIGZvciB3 aW5kb3dfZGVuc2VfcmFuaygpCisgKi8KK0RhdHVtCit3aW5kb3dfZGVuc2VfcmFua19zdXBwb3J0 KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTm9kZQkgICAqcmF3cmVxID0gKE5vZGUgKikgUEdfR0VU QVJHX1BPSU5URVIoMCk7CisKKwlpZiAoSXNBKHJhd3JlcSwgU3VwcG9ydFJlcXVlc3RXRnVuY01v bm90b25pYykpCisJeworCQlTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljICpyZXEgPSAoU3Vw cG9ydFJlcXVlc3RXRnVuY01vbm90b25pYyAqKSByYXdyZXE7CisKKwkJLyogZGVuc2VfcmFuaygp IGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyAqLworCQlyZXEtPm1vbm90b25pYyA9IE1PTk9U T05JQ0ZVTkNfSU5DUkVBU0lORzsKKwkJUEdfUkVUVVJOX1BPSU5URVIocmVxKTsKKwl9CisKKwlQ R19SRVRVUk5fUE9JTlRFUihOVUxMKTsKK30KKwogLyoKICAqIHBlcmNlbnRfcmFuawogICogcmV0 dXJuIGZyYWN0aW9uIGJldHdlZW4gMCBhbmQgMSBpbmNsdXNpdmUsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdAppbmRleCBkOGU4NzE1ZWQxLi45OTBhNTA5OGQ1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKQEAgLTY2NDEsMTEgKzY2NDEsMTYgQEAKICMgY291bnQgaGFzIHR3byBmb3JtczogY291bnQo YW55KSBhbmQgY291bnQoKikKIHsgb2lkID0+ICcyMTQ3JywKICAgZGVzY3IgPT4gJ251bWJlciBv ZiBpbnB1dCByb3dzIGZvciB3aGljaCB0aGUgaW5wdXQgZXhwcmVzc2lvbiBpcyBub3QgbnVsbCcs Ci0gIHByb25hbWUgPT4gJ2NvdW50JywgcHJva2luZCA9PiAnYScsIHByb2lzc3RyaWN0ID0+ICdm JywgcHJvcmV0dHlwZSA9PiAnaW50OCcsCi0gIHByb2FyZ3R5cGVzID0+ICdhbnknLCBwcm9zcmMg PT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKKyAgcHJvbmFtZSA9PiAnY291bnQnLCBwcm9zdXBwb3J0 ID0+ICdpbnQ4aW5jX3N1cHBvcnQnLCBwcm9raW5kID0+ICdhJywKKyAgcHJvaXNzdHJpY3QgPT4g J2YnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJ2FueScsCisgIHByb3Ny YyA9PiAnYWdncmVnYXRlX2R1bW15JyB9LAogeyBvaWQgPT4gJzI4MDMnLCBkZXNjciA9PiAnbnVt YmVyIG9mIGlucHV0IHJvd3MnLAotICBwcm9uYW1lID0+ICdjb3VudCcsIHByb2tpbmQgPT4gJ2En LCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHR5cGUgPT4gJ2ludDgnLAotICBwcm9hcmd0eXBl cyA9PiAnJywgcHJvc3JjID0+ICdhZ2dyZWdhdGVfZHVtbXknIH0sCisgIHByb25hbWUgPT4gJ2Nv dW50JywgcHJvc3VwcG9ydCA9PiAnaW50OGluY19zdXBwb3J0JywgcHJva2luZCA9PiAnYScsCisg IHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ ICcnLAorICBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKK3sgb2lkID0+ICc4ODAyJywg ZGVzY3IgPT4gJ3BsYW5uZXIgc3VwcG9ydCBmb3IgY291bnQgcnVuIGNvbmRpdGlvbicsCisgIHBy b25hbWUgPT4gJ2ludDhpbmNfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAg cHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICdpbnQ4aW5jX3N1cHBvcnQnIH0s CiAKIHsgb2lkID0+ICcyNzE4JywKICAgZGVzY3IgPT4gJ3BvcHVsYXRpb24gdmFyaWFuY2Ugb2Yg YmlnaW50IGlucHV0IHZhbHVlcyAoc3F1YXJlIG9mIHRoZSBwb3B1bGF0aW9uIHN0YW5kYXJkIGRl dmlhdGlvbiknLApAQCAtMTAwNzksMTQgKzEwMDg0LDI2IEBACiAKICMgU1FMLXNwZWMgd2luZG93 IGZ1bmN0aW9ucwogeyBvaWQgPT4gJzMxMDAnLCBkZXNjciA9PiAncm93IG51bWJlciB3aXRoaW4g cGFydGl0aW9uJywKLSAgcHJvbmFtZSA9PiAncm93X251bWJlcicsIHByb2tpbmQgPT4gJ3cnLCBw cm9pc3N0cmljdCA9PiAnZicsCi0gIHByb3JldHR5cGUgPT4gJ2ludDgnLCBwcm9hcmd0eXBlcyA9 PiAnJywgcHJvc3JjID0+ICd3aW5kb3dfcm93X251bWJlcicgfSwKKyAgcHJvbmFtZSA9PiAncm93 X251bWJlcicsIHByb3N1cHBvcnQgPT4gJ3dpbmRvd19yb3dfbnVtYmVyX3N1cHBvcnQnLAorICBw cm9raW5kID0+ICd3JywgcHJvaXNzdHJpY3QgPT4gJ2YnLCAgcHJvcmV0dHlwZSA9PiAnaW50OCcs CisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3dpbmRvd19yb3dfbnVtYmVyJyB9LAor eyBvaWQgPT4gJzg3OTknLCBkZXNjciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciByb3dfbnVtYmVy IHJ1biBjb25kaXRpb24nLAorICBwcm9uYW1lID0+ICd3aW5kb3dfcm93X251bWJlcl9zdXBwb3J0 JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwn LCBwcm9zcmMgPT4gJ3dpbmRvd19yb3dfbnVtYmVyX3N1cHBvcnQnIH0sCiB7IG9pZCA9PiAnMzEw MScsIGRlc2NyID0+ICdpbnRlZ2VyIHJhbmsgd2l0aCBnYXBzJywKLSAgcHJvbmFtZSA9PiAncmFu aycsIHByb2tpbmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHR5cGUgPT4gJ2lu dDgnLAorICBwcm9uYW1lID0+ICdyYW5rJywgcHJvc3VwcG9ydCA9PiAnd2luZG93X3Jhbmtfc3Vw cG9ydCcsCisgIHByb2tpbmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHR5cGUg PT4gJ2ludDgnLAogICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICd3aW5kb3dfcmFuaycg fSwKK3sgb2lkID0+ICc4ODAwJywgZGVzY3IgPT4gJ3BsYW5uZXIgc3VwcG9ydCBmb3IgcmFuayBy dW4gY29uZGl0aW9uJywKKyAgcHJvbmFtZSA9PiAnd2luZG93X3Jhbmtfc3VwcG9ydCcsIHByb3Jl dHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3Jj ID0+ICd3aW5kb3dfcmFua19zdXBwb3J0JyB9LAogeyBvaWQgPT4gJzMxMDInLCBkZXNjciA9PiAn aW50ZWdlciByYW5rIHdpdGhvdXQgZ2FwcycsCi0gIHByb25hbWUgPT4gJ2RlbnNlX3JhbmsnLCBw cm9raW5kID0+ICd3JywgcHJvaXNzdHJpY3QgPT4gJ2YnLAotICBwcm9yZXR0eXBlID0+ICdpbnQ4 JywgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAnd2luZG93X2RlbnNlX3JhbmsnIH0sCisg IHByb25hbWUgPT4gJ2RlbnNlX3JhbmsnLCBwcm9zdXBwb3J0ID0+ICd3aW5kb3dfZGVuc2VfcmFu a19zdXBwb3J0JywKKyAgcHJva2luZCA9PiAndycsIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0 dHlwZSA9PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ICcnLAorICBwcm9zcmMgPT4gJ3dpbmRvd19k ZW5zZV9yYW5rJyB9LAoreyBvaWQgPT4gJzg4MDEnLCBkZXNjciA9PiAncGxhbm5lciBzdXBwb3J0 IGZvciBkZW5zZSByYW5rIHJ1biBjb25kaXRpb24nLAorICBwcm9uYW1lID0+ICd3aW5kb3dfZGVu c2VfcmFua19zdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBl cyA9PiAnaW50ZXJuYWwnLCBwcm9zcmMgPT4gJ3dpbmRvd19kZW5zZV9yYW5rX3N1cHBvcnQnIH0s CiB7IG9pZCA9PiAnMzEwMycsIGRlc2NyID0+ICdmcmFjdGlvbmFsIHJhbmsgd2l0aGluIHBhcnRp dGlvbicsCiAgIHByb25hbWUgPT4gJ3BlcmNlbnRfcmFuaycsIHByb2tpbmQgPT4gJ3cnLCBwcm9p c3N0cmljdCA9PiAnZicsCiAgIHByb3JldHR5cGUgPT4gJ2Zsb2F0OCcsIHByb2FyZ3R5cGVzID0+ ICcnLCBwcm9zcmMgPT4gJ3dpbmRvd19wZXJjZW50X3JhbmsnIH0sCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o CmluZGV4IDQ0ZGQ3M2ZjODAuLmU0MTg1MGViOWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0y NDI0LDYgKzI0MjQsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93QWdnU3RhdGUKIAlNZW1vcnlD b250ZXh0IGN1cmFnZ2NvbnRleHQ7CS8qIGN1cnJlbnQgYWdncmVnYXRlJ3Mgd29ya2luZyBkYXRh ICovCiAJRXhwckNvbnRleHQgKnRtcGNvbnRleHQ7CS8qIHNob3J0LXRlcm0gZXZhbHVhdGlvbiBj b250ZXh0ICovCiAKKwlFeHByU3RhdGUgICpydW5jb25kaXRpb247CS8qIENvbmRpdGlvbiB3aGlj aCBtdXN0IHJlbWFpbiB0cnVlIG90aGVyd2lzZQorCQkJCQkJCQkgKiBleGVjdXRpb24gb2YgdGhl IFdpbmRvd0FnZyB3aWxsIGZpbmlzaCwgb3IKKwkJCQkJCQkJICogTlVMTCBpZiB0aGVyZSBpcyBu byBzdWNoIGNvbmRpdGlvbi4gKi8KKwogCWJvb2wJCWFsbF9maXJzdDsJCS8qIHRydWUgaWYgdGhl IHNjYW4gaXMgc3RhcnRpbmcgKi8KIAlib29sCQlhbGxfZG9uZTsJCS8qIHRydWUgaWYgdGhlIHNj YW4gaXMgZmluaXNoZWQgKi8KIAlib29sCQlwYXJ0aXRpb25fc3Bvb2xlZDsJLyogdHJ1ZSBpZiBh bGwgdHVwbGVzIGluIGN1cnJlbnQgcGFydGl0aW9uCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAppbmRleCA1ZDA3NWYwYzM0 Li41MjE0NTc1ZDg5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTUyNyw3ICs1MjcsOCBAQCB0eXBlZGVmIGVu dW0gTm9kZVRhZwogCVRfU3VwcG9ydFJlcXVlc3RTZWxlY3Rpdml0eSwJLyogaW4gbm9kZXMvc3Vw cG9ydG5vZGVzLmggKi8KIAlUX1N1cHBvcnRSZXF1ZXN0Q29zdCwJCS8qIGluIG5vZGVzL3N1cHBv cnRub2Rlcy5oICovCiAJVF9TdXBwb3J0UmVxdWVzdFJvd3MsCQkvKiBpbiBub2Rlcy9zdXBwb3J0 bm9kZXMuaCAqLwotCVRfU3VwcG9ydFJlcXVlc3RJbmRleENvbmRpdGlvbgkvKiBpbiBub2Rlcy9z dXBwb3J0bm9kZXMuaCAqLworCVRfU3VwcG9ydFJlcXVlc3RJbmRleENvbmRpdGlvbiwgLyogaW4g bm9kZXMvc3VwcG9ydG5vZGVzLmggKi8KKwlUX1N1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMJ LyogaW4gbm9kZXMvc3VwcG9ydG5vZGVzLmggKi8KIH0gTm9kZVRhZzsKIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3Bh cnNlbm9kZXMuaAppbmRleCAyZjYxOGNiMjI5Li40ODgxZGFmODg3IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vu b2Rlcy5oCkBAIC0xMzk2LDYgKzEzOTYsOCBAQCB0eXBlZGVmIHN0cnVjdCBXaW5kb3dDbGF1c2UK IAlpbnQJCQlmcmFtZU9wdGlvbnM7CS8qIGZyYW1lX2NsYXVzZSBvcHRpb25zLCBzZWUgV2luZG93 RGVmICovCiAJTm9kZQkgICAqc3RhcnRPZmZzZXQ7CS8qIGV4cHJlc3Npb24gZm9yIHN0YXJ0aW5n IGJvdW5kLCBpZiBhbnkgKi8KIAlOb2RlCSAgICplbmRPZmZzZXQ7CQkvKiBleHByZXNzaW9uIGZv ciBlbmRpbmcgYm91bmQsIGlmIGFueSAqLworCUxpc3QJICAgKnJ1bmNvbmRpdGlvbjsJLyogRXhl YyBXaW5kb3dBZ2cgd2hpbGUgdGhpcyBpcyB0cnVlICovCisJTGlzdAkgICAqcnVuY29uZGl0aW9u b3JpZzsJLyogRVhQTEFJTiBjb21wYXRpYmxlIHZlcnNpb24gb2YgYWJvdmUgKi8KIAlPaWQJCQlz dGFydEluUmFuZ2VGdW5jOwkvKiBpbl9yYW5nZSBmdW5jdGlvbiBmb3Igc3RhcnRPZmZzZXQgKi8K IAlPaWQJCQllbmRJblJhbmdlRnVuYzsgLyogaW5fcmFuZ2UgZnVuY3Rpb24gZm9yIGVuZE9mZnNl dCAqLwogCU9pZAkJCWluUmFuZ2VDb2xsOwkvKiBjb2xsYXRpb24gZm9yIGluX3JhbmdlIHRlc3Rz ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDBiNTE4Y2U2YjIuLjIzMzBiOTBhMDMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oCkBAIC05MTEsNiArOTExLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93 QWdnCiAJaW50CQkJZnJhbWVPcHRpb25zOwkvKiBmcmFtZV9jbGF1c2Ugb3B0aW9ucywgc2VlIFdp bmRvd0RlZiAqLwogCU5vZGUJICAgKnN0YXJ0T2Zmc2V0OwkvKiBleHByZXNzaW9uIGZvciBzdGFy dGluZyBib3VuZCwgaWYgYW55ICovCiAJTm9kZQkgICAqZW5kT2Zmc2V0OwkJLyogZXhwcmVzc2lv biBmb3IgZW5kaW5nIGJvdW5kLCBpZiBhbnkgKi8KKwlMaXN0CSAgICpydW5jb25kaXRpb247CS8q IENvbmRpdGlvbnMgdGhhdCBtdXN0IHJlbWFpbiB0cnVlIGluIG9yZGVyCisJCQkJCQkJCSAqIGZv ciBleGVjdXRpb24gdG8gY29udGludWUgKi8KKwlMaXN0CSAgICpydW5jb25kaXRpb25vcmlnOwkv KiBydW5jb25kaXRpb24gZm9yIGRpc3BsYXkgaW4gRVhQTEFJTiAqLwogCS8qIHRoZXNlIGZpZWxk cyBhcmUgdXNlZCB3aXRoIFJBTkdFIG9mZnNldCBQUkVDRURJTkcvRk9MTE9XSU5HOiAqLwogCU9p ZAkJCXN0YXJ0SW5SYW5nZUZ1bmM7CS8qIGluX3JhbmdlIGZ1bmN0aW9uIGZvciBzdGFydE9mZnNl dCAqLwogCU9pZAkJCWVuZEluUmFuZ2VGdW5jOyAvKiBpbl9yYW5nZSBmdW5jdGlvbiBmb3IgZW5k T2Zmc2V0ICovCkBAIC0xMzA5LDQgKzEzMTIsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbkludmFs SXRlbQogCXVpbnQzMgkJaGFzaFZhbHVlOwkJLyogaGFzaCB2YWx1ZSBvZiBvYmplY3QncyBjYWNo ZSBsb29rdXAga2V5ICovCiB9IFBsYW5JbnZhbEl0ZW07CiAKKy8qCisgKiBNb25vdG9uaWNGdW5j dGlvbgorICoKKyAqIEFsbG93cyB0aGUgcGxhbm5lciB0byB0cmFjayBtb25vdG9uaWMgcHJvcGVy dGllcyBvZiBmdW5jdGlvbnMuICBBIGZ1bmN0aW9uCisgKiBpcyBtb25vdG9uaWNhbGx5IGluY3Jl YXNpbmcgaWYgYSBzdWJzZXF1ZW50IGNhbGwgY2Fubm90IHlpZWxkIGEgbG93ZXIgdmFsdWUKKyAq IHRoYW4gdGhlIHByZXZpb3VzIGNhbGwuICBBIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBmdW5j dGlvbiBjYW5ub3QgeWllbGQgYQorICogaGlnaGVyIHZhbHVlIG9uIHN1YnNlcXVlbnQgY2FsbHMs IGFuZCBhIGZ1bmN0aW9uIHdoaWNoIGlzIGJvdGggbXVzdCByZXR1cm4KKyAqIHRoZSBzYW1lIHZh bHVlIG9uIGVhY2ggY2FsbC4KKyAqLwordHlwZWRlZiBlbnVtIE1vbm90b25pY0Z1bmN0aW9uCit7 CisJTU9OT1RPTklDRlVOQ19OT05FID0gMCwKKwlNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkcgPSAo MSA8PCAwKSwKKwlNT05PVE9OSUNGVU5DX0RFQ1JFQVNJTkcgPSAoMSA8PCAxKSwKKwlNT05PVE9O SUNGVU5DX0JPVEggPSBNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkcgfCBNT05PVE9OSUNGVU5DX0RF Q1JFQVNJTkcKK30gTW9ub3RvbmljRnVuY3Rpb247CisKICNlbmRpZgkJCQkJCQkvKiBQTEFOTk9E RVNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvc3VwcG9ydG5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaAppbmRleCA4OGI2MWIzYWIzLi4wNTM4YTQ1 MDk0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaApAQCAtMzMsMTIgKzMzLDEyIEBACiAjaWZu ZGVmIFNVUFBPUlROT0RFU19ICiAjZGVmaW5lIFNVUFBPUlROT0RFU19ICiAKLSNpbmNsdWRlICJu b2Rlcy9wcmltbm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKIAogc3RydWN0 IFBsYW5uZXJJbmZvOwkJCQkvKiBhdm9pZCBpbmNsdWRpbmcgcGF0aG5vZGVzLmggaGVyZSAqLwog c3RydWN0IEluZGV4T3B0SW5mbzsKIHN0cnVjdCBTcGVjaWFsSm9pbkluZm87Ci0KK3N0cnVjdCBX aW5kb3dDbGF1c2U7CiAKIC8qCiAgKiBUaGUgU2ltcGxpZnkgcmVxdWVzdCBhbGxvd3MgdGhlIHN1 cHBvcnQgZnVuY3Rpb24gdG8gcGVyZm9ybSBwbGFuLXRpbWUKQEAgLTIzOSw0ICsyMzksNjEgQEAg dHlwZWRlZiBzdHJ1Y3QgU3VwcG9ydFJlcXVlc3RJbmRleENvbmRpdGlvbgogCQkJCQkJCQkgKiBl cXVpdmFsZW50IG9mIHRoZSBmdW5jdGlvbiBjYWxsICovCiB9IFN1cHBvcnRSZXF1ZXN0SW5kZXhD b25kaXRpb247CiAKKy8qIC0tLS0tLS0tLS0KKyAqIFRvIGFsbG93IG1vcmUgZWZmaWNpZW50IGV4 ZWN1dGlvbiBvZiBhbnkgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGFuZC9vcgorICogbW9ub3Rv bmljYWxseSBkZWNyZWFzaW5nIHdpbmRvdyBmdW5jdGlvbnMsIHdlIHN1cHBvcnQgY2FsbGluZyB0 aGUgd2luZG93CisgKiBmdW5jdGlvbidzIHByb3N1cHBvcnQgZnVuY3Rpb24gcGFzc2luZyBhbG9u ZyB0aGlzIHN0cnVjdCB3aGVuZXZlciB0aGUKKyAqIHBsYW5uZXIgc2VlcyBhbiBPcEV4cHIgcXVh bCBkaXJlY3RseSByZWZlcmVuY2UgYSB3aW5kb3cgZnVuY3Rpb24gaW4gYQorICogc3VicXVlcnku ICBXaGVuIHRoZSBwbGFubmVyIGVuY291bnRlcnMgdGhpcywgd2UgcG9wdWxhdGUgdGhpcyBzdHJ1 Y3QgYW5kCisgKiBwYXNzIGl0IGFsb25nIHRvIHRoZSB3aW5kb3cgZnVuY3Rpb24ncyBwcm9zdXBw b3J0IGZ1bmN0aW9uIHNvIHRoYXQgaXQgY2FuCisgKiBldmFsdWF0ZSBpZiB0aGUgZ2l2ZW4gV2lu ZG93RnVuYyBpczsKKyAqCisgKiBhKSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcsIG9yCisgKiBi KSBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcsIG9yCisgKiBjKSBib3RoIG1vbm90b25pY2FsbHkg aW5jcmVhc2luZyBhbmQgZGVjcmVhc2luZywgb3IKKyAqIGQpIG5vbmUgb2YgdGhlIGFib3ZlLgor ICoKKyAqIEEgZnVuY3Rpb24gdGhhdCBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgY2FuIG5l dmVyIHJldHVybiBhIHZhbHVlIHRoYXQKKyAqIGlzIGxvd2VyIHRoYW4gYSB2YWx1ZSByZXR1cm5l ZCBpbiBhICJwcmV2aW91cyBjYWxsIi4gIEEgbW9ub3RvbmljYWxseQorICogZGVjcmVhc2luZyBm dW5jdGlvbiBjYW4gbmV2ZXIgcmV0dXJuIGEgdmFsdWUgaGlnaGVyIHRoYW4gYSB2YWx1ZSByZXR1 cm5lZAorICogaW4gYSBwcmV2aW91cyBjYWxsLiAgQSBmdW5jdGlvbiB0aGF0IGlzIGJvdGggbXVz dCByZXR1cm4gdGhlIHNhbWUgdmFsdWUKKyAqIGVhY2ggdGltZS4KKyAqCisgKiBXZSBkZWZpbmUg InByZXZpb3VzIGNhbGwiIHRvIG1lYW4gYSBwcmV2aW91cyBjYWxsIHRvIHRoZSBzYW1lIFdpbmRv d0Z1bmMKKyAqIHN0cnVjdCBpbiB0aGUgc2FtZSB3aW5kb3cgcGFydGl0aW9uLgorICoKKyAqIHJv d19udW1iZXIoKSBpcyBhbiBleGFtcGxlIG9mIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGZ1 bmN0aW9uLiAgVGhlCisgKiByZXR1cm4gdmFsdWUgd2lsbCBiZSByZXNldCBiYWNrIHRvIDEgaW4g ZWFjaCBuZXcgcGFydGl0aW9uLiAgQW4gZXhhbXBsZSBvZgorICogYSBtb25vdG9uaWNhbGx5IGlu Y3JlYXNpbmcgYW5kIGRlY3JlYXNpbmcgZnVuY3Rpb24gaXMgQ09VTlQoKikgT1ZFUiAoKS4KKyAq IFNpbmNlIHRoZXJlIGlzIG5vIE9SREVSIEJZIGNsYXVzZSBpbiB0aGlzIGV4YW1wbGUsIGFsbCBy b3dzIGluIHRoZQorICogcGFydGl0aW9uIGFyZSBwZWVycyBhbmQgYWxsIHJvd3Mgd2l0aGluIHRo ZSBwYXJ0aXRpb24gd2lsbCBiZSB3aXRoaW4gdGhlCisgKiBmcmFtZSBib3VuZC4gIExpa2V3aXNl IGZvciBDT1VOVCgqKSBPVkVSKE9SREVSIEJZIGEgUk9XUyBCRVRXRUVOIFVOQk9VTkRFRAorICog UFJFQ0VESU5HIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HKS4KKyAqCisgKiBDT1VOVCgqKSBPVkVS IChPUkRFUiBCWSBhIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExP V0lORykKKyAqIGlzIGFuIGV4YW1wbGUgb2YgYSBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgZnVu Y3Rpb24uCisgKgorICogSW5wdXRzOgorICoJJ3dpbmRvd19mdW5jJyBpcyB0aGUgcG9pbnRlciB0 byB0aGUgd2luZG93IGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4KKyAqCisgKgknd2luZG93X2NsYXVz ZScgcG9pbnRlciB0byB0aGUgV2luZG93Q2xhdXNlIGRhdGEuICBTdXBwb3J0IGZ1bmN0aW9ucyBj YW4KKyAqCXVzZSB0aGlzIHRvIGNoZWNrIGZyYW1lIGJvdW5kcyBhbmQgcGFydGl0aW9uIGJ5IGNs YXVzZXMsIGV0Yy4KKyAqCisgKiBPdXRwdXRzOgorICoJJ21vbm90b25pYycgdGhlIHJlc3VsdGlu ZyBNb25vdG9uaWNGdW5jdGlvbiB2YWx1ZSBmb3IgdGhlIGdpdmVuIGlucHV0CisgKgl3aW5kb3cg ZnVuY3Rpb24gYW5kIHdpbmRvdyBjbGF1c2UuCisgKiAtLS0tLS0tLS0tCisgKi8KK3R5cGVkZWYg c3RydWN0IFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMKK3sKKwlOb2RlVGFnCQl0eXBlOwor CisJLyogSW5wdXQgZmllbGRzOiAqLworCVdpbmRvd0Z1bmMgKndpbmRvd19mdW5jOwkvKiBQb2lu dGVyIHRvIHRoZSB3aW5kb3cgZnVuY3Rpb24gZGF0YSAqLworCXN0cnVjdCBXaW5kb3dDbGF1c2Ug KndpbmRvd19jbGF1c2U7IC8qIFBvaW50ZXIgdG8gdGhlIHdpbmRvdyBjbGF1c2UgZGF0YSAqLwor CisJLyogT3V0cHV0IGZpZWxkczogKi8KKwlNb25vdG9uaWNGdW5jdGlvbiBtb25vdG9uaWM7Cit9 IFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWM7CisKICNlbmRpZgkJCQkJCQkvKiBTVVBQT1JU Tk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0CmluZGV4IGJiOWZmN2Yw N2IuLmZkZjA1M2FjODMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2lu ZG93Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQKQEAgLTMz MzYsNiArMzMzNiwzMjEgQEAgV0hFUkUgZGVwbmFtZSA9ICdzYWxlcyc7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CiAoOSByb3dzKQogCistLSBU ZXN0IHdpbmRvdyBmdW5jdGlvbiBydW4gY29uZGl0aW9ucyBhcmUgcHJvcGVybHkgcHVzaGVkIGRv d24gaW50byB0aGUKKy0tIFdpbmRvd0FnZworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHJvd19udW1iZXIoKSBPVkVSIChPUkRF UiBCWSBlbXBubykgcm4KKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIHJuIDwgMzsKKyAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIFJ1biBD b25kaXRpb246IChyb3dfbnVtYmVyKCkgT1ZFUiAoPykgPCAzKQorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuZW1wbm8KKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBl bXBzYWxhcnkKKyg1IHJvd3MpCisKKy0tIFRoZSBmb2xsb3dpbmcgMyBzdGF0ZW1lbnRzIHNob3Vs ZCByZXN1bHQgdGhlIHNhbWUgcmVzdWx0LgorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5v LAorICAgICAgICAgIHJvd19udW1iZXIoKSBPVkVSIChPUkRFUiBCWSBlbXBubykgcm4KKyAgIEZS T00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIHJuIDwgMzsKKyBlbXBubyB8IHJuIAorLS0tLS0tLSst LS0tCisgICAgIDEgfCAgMQorICAgICAyIHwgIDIKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkg ZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAzID4gcm47CisgZW1wbm8g fCBybiAKKy0tLS0tLS0rLS0tLQorICAgICAxIHwgIDEKKyAgICAgMiB8ICAyCisoMiByb3dzKQor CitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgcm93X251bWJlcigp IE9WRVIgKE9SREVSIEJZIGVtcG5vKSBybgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUg MiA+PSBybjsKKyBlbXBubyB8IHJuIAorLS0tLS0tLSstLS0tCisgICAgIDEgfCAgMQorICAgICAy IHwgIDIKKygyIHJvd3MpCisKKy0tIEVuc3VyZSByIDw9IDMgaXMgcHVzaGVkIGRvd24gaW50byB0 aGUgcnVuIGNvbmRpdGlvbiBvZiB0aGUgd2luZG93IGFnZworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAg ICAgICByYW5rKCkgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIHIKKyAgIEZST00gZW1wc2Fs YXJ5KSBlbXAKK1dIRVJFIHIgPD0gMzsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFdp bmRvd0FnZworICAgUnVuIENvbmRpdGlvbjogKHJhbmsoKSBPVkVSICg/KSA8PSAzKQorICAgLT4g IFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuc2FsYXJ5IERFU0MKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg1IHJvd3MpCisKK1NFTEVDVCAqIEZST00KKyAg KFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgcmFuaygpIE9WRVIg KE9SREVSIEJZIHNhbGFyeSBERVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBy IDw9IDM7CisgZW1wbm8gfCBzYWxhcnkgfCByIAorLS0tLS0tLSstLS0tLS0tLSstLS0KKyAgICAg OCB8ICAgNjAwMCB8IDEKKyAgICAxMCB8ICAgNTIwMCB8IDIKKyAgICAxMSB8ICAgNTIwMCB8IDIK KygzIHJvd3MpCisKKy0tIEVuc3VyZSBkciA9IDEgaXMgY29udmVydGVkIHRvIGRyIDw9IDEgdG8g Z2V0IGFsbCByb3dzIGxlYWRpbmcgdXAgdG8gZHIgPSAxCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAg ICAgIGRlbnNlX3JhbmsoKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykgZHIKKyAgIEZST00g ZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGRyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFN1YnF1ZXJ5IFNjYW4gb24gZW1wCisgICBGaWx0 ZXI6IChlbXAuZHIgPSAxKQorICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgUnVuIENvbmRpdGlv bjogKGRlbnNlX3JhbmsoKSBPVkVSICg/KSA8PSAxKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAg ICAgICAgICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuc2FsYXJ5IERFU0MKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg3IHJvd3MpCisKK1NFTEVDVCAqIEZST00KKyAg KFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgZGVuc2VfcmFuaygp IE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBkcgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAor V0hFUkUgZHIgPSAxOworIGVtcG5vIHwgc2FsYXJ5IHwgZHIgCistLS0tLS0tKy0tLS0tLS0tKy0t LS0KKyAgICAgOCB8ICAgNjAwMCB8ICAxCisoMSByb3cpCisKKy0tIENoZWNrIENPVU5UKCkgYW5k IENPVU5UKCopCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1Qg ZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVS IEJZIHNhbGFyeSBERVNDKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7 CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICBSdW4gQ29u ZGl0aW9uOiAoY291bnQoKikgT1ZFUiAoPykgPD0gMykKKyAgIC0+ICBTb3J0CisgICAgICAgICBT b3J0IEtleTogZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g ZW1wc2FsYXJ5CisoNSByb3dzKQorCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisg ICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFy eSBERVNDKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7CisgZW1wbm8g fCBzYWxhcnkgfCBjIAorLS0tLS0tLSstLS0tLS0tLSstLS0KKyAgICAgOCB8ICAgNjAwMCB8IDEK KyAgICAxMCB8ICAgNTIwMCB8IDMKKyAgICAxMSB8ICAgNTIwMCB8IDMKKygzIHJvd3MpCisKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAg ICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoZW1wbm8pIE9WRVIgKE9SREVSIEJZIHNhbGFy eSBERVNDKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7CisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFdp bmRvd0FnZworICAgUnVuIENvbmRpdGlvbjogKGNvdW50KGVtcHNhbGFyeS5lbXBubykgT1ZFUiAo PykgPD0gMykKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZW1wc2FsYXJ5LnNhbGFy eSBERVNDCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNSByb3dzKQorCitT RUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAg ICAgIGNvdW50KGVtcG5vKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykgYworICAgRlJPTSBl bXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworIGVtcG5vIHwgc2FsYXJ5IHwgYyAKKy0tLS0t LS0rLS0tLS0tLS0rLS0tCisgICAgIDggfCAgIDYwMDAgfCAxCisgICAgMTAgfCAgIDUyMDAgfCAz CisgICAgMTEgfCAgIDUyMDAgfCAzCisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAg ICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDIFJPV1MgQkVUV0VFTiBDVVJS RU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVt cAorV0hFUkUgYyA+PSAzOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFdpbmRv d0FnZworICAgUnVuIENvbmRpdGlvbjogKGNvdW50KCopIE9WRVIgKD8pID49IDMpCisgICAtPiAg U29ydAorICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVTQworICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAg ICAgICAgICBjb3VudCgqKSBPVkVSICgpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJF IDExIDw9IGM7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cK KyAgIFJ1biBDb25kaXRpb246ICgxMSA8PSBjb3VudCgqKSBPVkVSICg/KSkKKyAgIC0+ICBTZXEg U2NhbiBvbiBlbXBzYWxhcnkKKygzIHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAg Y291bnQoKikgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMsCisgICAgICAgICAgZGVuc2Vf cmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBkcgorICAgRlJPTSBlbXBzYWxhcnkp IGVtcAorV0hFUkUgZHIgPSAxOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRlcjogKGVtcC5k ciA9IDEpCisgICAtPiAgV2luZG93QWdnCisgICAgICAgICBSdW4gQ29uZGl0aW9uOiAoZGVuc2Vf cmFuaygpIE9WRVIgKD8pIDw9IDEpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAg U29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVTQworICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGVtcHNhbGFyeQorKDcgcm93cykKKworLS0gVGVzdHMgdG8gZW5zdXJlIHdlIGRvbid0 IHB1c2ggZG93biB0aGUgcnVuIGNvbmRpdGlvbiB3aGVuIGl0J3Mgbm90IHZhbGlkIHRvCistLSBk byBzby4KKy0tIEVuc3VyZSB3ZSBkb24ndCBwdXNoIGRvd24gdGhlIGNsYXVzZSB3aGVuIHRoZXJl IGlzIGEgUEFSVElUSU9OIEJZIGNsYXVzZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHJvd19udW1iZXIoKSBPVkVSIChQQVJU SVRJT04gQlkgZGVwbmFtZSBPUkRFUiBCWSBlbXBubykgcm4KKyAgIEZST00gZW1wc2FsYXJ5KSBl bXAKK1dIRVJFIHJuIDwgMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZp bHRlcjogKGVtcC5ybiA8IDMpCisgICAtPiAgV2luZG93QWdnCisgICAgICAgICAtPiAgU29ydAor ICAgICAgICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5kZXBuYW1lLCBlbXBzYWxhcnkuZW1w bm8KKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg2IHJvd3MpCisK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAg ICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoZW1wbm8pIE9WRVIgKFBBUlRJVElPTiBC WSBkZXBuYW1lIE9SREVSIEJZIHNhbGFyeSBERVNDKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1w CitXSEVSRSBjIDw9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFN1YnF1ZXJ5IFNjYW4gb24g ZW1wCisgICBGaWx0ZXI6IChlbXAuYyA8PSAzKQorICAgLT4gIFdpbmRvd0FnZworICAgICAgICAg LT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuZGVwbmFtZSwgZW1w c2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2Fs YXJ5CisoNiByb3dzKQorCistLSBFbnN1cmUgd2UgZG9uJ3QgcHVzaCBkb3duIHdoZW4gdGhlIGZy YW1lIG9wdGlvbnMgc2hvdyB0aGF0IHRoZSB3aW5kb3cKKy0tIGZ1bmN0aW9uIGlzIG5vdCBtb25v dG9uaWNhbGx5IGluY3JlYXNpbmcKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoKikg T1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBV TkJPVU5ERUQgRk9MTE9XSU5HKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9 IDM7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTdWJxdWVyeSBT Y2FuIG9uIGVtcAorICAgRmlsdGVyOiAoZW1wLmMgPD0gMykKKyAgIC0+ICBXaW5kb3dBZ2cKKyAg ICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZW1wc2FsYXJ5LnNhbGFy eSBERVNDCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNiByb3dz KQorCistLSBFbnN1cmUgd2UgZG9uJ3QgcHVzaCBkb3duIHdoZW4gdGhlIHdpbmRvdyBmdW5jdGlv bidzIG1vbm90b25pYyBwcm9wZXJ0aWVzCistLSBkb24ndCBtYXRjaCB0aGF0IG9mIHRoZSBjbGF1 c2VzLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5v LAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBz YWxhcnkpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIDMgPD0gYzsKKyAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRlcjog KDMgPD0gZW1wLmMpCisgICAtPiAgV2luZG93QWdnCisgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg2IHJvd3MpCisKKy0tIEVuc3VyZSB3ZSBkb24ndCBwdXNo ZG93biB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSB3aW5kb3cgY2xhdXNlcyB0byBldmFsdWF0ZQor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAg ICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBlbXBubyBE RVNDKSBjLAorICAgICAgICAgIGRlbnNlX3JhbmsoKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVT QykgZHIKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGRyID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFN1 YnF1ZXJ5IFNjYW4gb24gZW1wCisgICBGaWx0ZXI6IChlbXAuZHIgPSAxKQorICAgLT4gIFdpbmRv d0FnZworICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBlbXBzYWxh cnkuZW1wbm8gREVTQworICAgICAgICAgICAgICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgICAg ICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBl bXBzYWxhcnkuc2FsYXJ5IERFU0MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBlbXBzYWxhcnkKKyg5IHJvd3MpCisKIC0tIFRlc3QgU29ydCBub2RlIGNvbGxhcHNp bmcKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCAqIEZST00KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cu c3FsCmluZGV4IDQxYThlMGQxNTIuLjA5NDA0NWI4NzMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3dpbmRvdy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2luZG93LnNx bApAQCAtOTg4LDYgKzk4OCwxNzEgQEAgU0VMRUNUICogRlJPTQogICAgRlJPTSBlbXBzYWxhcnkp IGVtcAogV0hFUkUgZGVwbmFtZSA9ICdzYWxlcyc7CiAKKy0tIFRlc3Qgd2luZG93IGZ1bmN0aW9u IHJ1biBjb25kaXRpb25zIGFyZSBwcm9wZXJseSBwdXNoZWQgZG93biBpbnRvIHRoZQorLS0gV2lu ZG93QWdnCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1w bm8sCisgICAgICAgICAgcm93X251bWJlcigpIE9WRVIgKE9SREVSIEJZIGVtcG5vKSBybgorICAg RlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgcm4gPCAzOworCistLSBUaGUgZm9sbG93aW5nIDMg c3RhdGVtZW50cyBzaG91bGQgcmVzdWx0IHRoZSBzYW1lIHJlc3VsdC4KK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkg ZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAo T1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAzID4gcm47 CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVy KCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVS RSAyID49IHJuOworCistLSBFbnN1cmUgciA8PSAzIGlzIHB1c2hlZCBkb3duIGludG8gdGhlIHJ1 biBjb25kaXRpb24gb2YgdGhlIHdpbmRvdyBhZ2cKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAg cmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkg ZW1wCitXSEVSRSByIDw9IDM7CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAg ICAgICAgICBzYWxhcnksCisgICAgICAgICAgcmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBE RVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSByIDw9IDM7CisKKy0tIEVuc3Vy ZSBkciA9IDEgaXMgY29udmVydGVkIHRvIGRyIDw9IDEgdG8gZ2V0IGFsbCByb3dzIGxlYWRpbmcg dXAgdG8gZHIgPSAxCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxF Q1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGRlbnNlX3JhbmsoKSBPVkVS IChPUkRFUiBCWSBzYWxhcnkgREVTQykgZHIKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJF IGRyID0gMTsKKworU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNh bGFyeSwKKyAgICAgICAgICBkZW5zZV9yYW5rKCkgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0Mp IGRyCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBkciA9IDE7CisKKy0tIENoZWNrIENP VU5UKCkgYW5kIENPVU5UKCopCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisg IChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9W RVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVS RSBjIDw9IDM7CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBz YWxhcnksCisgICAgICAgICAgY291bnQoKikgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMK KyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwK KyAgICAgICAgICBjb3VudChlbXBubykgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAg IEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKworU0VMRUNUICogRlJPTQorICAo U0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudChlbXBubykg T1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dI RVJFIGMgPD0gMzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VM RUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChP UkRFUiBCWSBzYWxhcnkgREVTQyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRF RCBGT0xMT1dJTkcpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPj0gMzsKKwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAg ICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSICgpIGMKKyAgIEZST00gZW1w c2FsYXJ5KSBlbXAKK1dIRVJFIDExIDw9IGM7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAg Y291bnQoKikgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMsCisgICAgICAgICAgZGVuc2Vf cmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBkcgorICAgRlJPTSBlbXBzYWxhcnkp IGVtcAorV0hFUkUgZHIgPSAxOworCistLSBUZXN0cyB0byBlbnN1cmUgd2UgZG9uJ3QgcHVzaCBk b3duIHRoZSBydW4gY29uZGl0aW9uIHdoZW4gaXQncyBub3QgdmFsaWQgdG8KKy0tIGRvIHNvLgor CistLSBFbnN1cmUgd2UgZG9uJ3QgcHVzaCBkb3duIHRoZSBjbGF1c2Ugd2hlbiB0aGVyZSBpcyBh IFBBUlRJVElPTiBCWSBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoUEFSVElUSU9O IEJZIGRlcG5hbWUgT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitX SEVSRSBybiA8IDM7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNF TEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoZW1wbm8pIE9W RVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lIE9SREVSIEJZIHNhbGFyeSBERVNDKSBjCisgICBGUk9N IGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7CisKKy0tIEVuc3VyZSB3ZSBkb24ndCBwdXNo IGRvd24gd2hlbiB0aGUgZnJhbWUgb3B0aW9ucyBzaG93IHRoYXQgdGhlIHdpbmRvdworLS0gZnVu Y3Rpb24gaXMgbm90IG1vbm90b25pY2FsbHkgaW5jcmVhc2luZworRVhQTEFJTiAoQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAg ICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQyBST1dTIEJFVFdFRU4g Q1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpIGMKKyAgIEZST00gZW1wc2FsYXJ5 KSBlbXAKK1dIRVJFIGMgPD0gMzsKKworLS0gRW5zdXJlIHdlIGRvbid0IHB1c2ggZG93biB3aGVu IHRoZSB3aW5kb3cgZnVuY3Rpb24ncyBtb25vdG9uaWMgcHJvcGVydGllcworLS0gZG9uJ3QgbWF0 Y2ggdGhhdCBvZiB0aGUgY2xhdXNlcy4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQo KikgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5KSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVS RSAzIDw9IGM7CisKKy0tIEVuc3VyZSB3ZSBkb24ndCBwdXNoZG93biB3aGVuIHRoZXJlIGFyZSBt dWx0aXBsZSB3aW5kb3cgY2xhdXNlcyB0byBldmFsdWF0ZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAg ICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBlbXBubyBERVNDKSBjLAorICAgICAgICAgIGRl bnNlX3JhbmsoKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykgZHIKKyAgIEZST00gZW1wc2Fs YXJ5KSBlbXAKK1dIRVJFIGRyID0gMTsKKwogLS0gVGVzdCBTb3J0IG5vZGUgY29sbGFwc2luZwog RVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUICogRlJPTQotLSAKMi4zMi4wCgo= --0000000000003c75dc05dada40b1--