From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id D82563858284 for ; Tue, 30 Aug 2022 09:27:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D82563858284 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661851657; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=gEbDnRVFtiQXQA/FjYYCkmze8k8uvzFX51TrGa9N6oM=; b=TsCIgGcn2m3EV2K69DpqPw+jZyFmGCw/1s46gUGK8Yy5VDOm8m224j/ODbmJIp/ivRplyy 7kz+8UdqpnwVBtX/KAiAOqUgnAESOBNZJnIeCkWtnqtZxorMUqW7XNtdlJgz8UL/H0z7f7 PYpZiv81kcwJyeBtF64mtVQeEUv0OgM= Received: from mail-oo1-f69.google.com (mail-oo1-f69.google.com [209.85.161.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-537-PsmtFLghP0aPaAVTin8Brw-1; Tue, 30 Aug 2022 05:27:35 -0400 X-MC-Unique: PsmtFLghP0aPaAVTin8Brw-1 Received: by mail-oo1-f69.google.com with SMTP id b19-20020a4a3413000000b00448add2bb38so4948318ooa.11 for ; Tue, 30 Aug 2022 02:27:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=gEbDnRVFtiQXQA/FjYYCkmze8k8uvzFX51TrGa9N6oM=; b=ANprvCaNa0ZOgh/9lFq7EdJ9hRYLVClXtJsuCuQQux/EwoBgjRoLxl+PwSNdpKmfpQ rbJQkS5WvLTCtAWV06fQYMJLkYdsycqeZjXK4JCD62+ivNQJmJxDBQgjLl1SzKJGLEos 9iKXi1q2R71ZesKN4Rv9QqIfFisvF8hmKzU4817kZSdx5U6vH7qA7pEzNe+3anfz4pIW hjvvGdm/XdagXH+0AeGM7bI9rg3gE4cHN8fasq1RNoWKzbEU5WC8mXab6KKZn4FBMaU/ ZxxOPFK8kdSbksrNfxCDLp74fj3v0xK44CEKo80fOmyR3BrIsobKUHu07EVDyubcMVgN CI9Q== X-Gm-Message-State: ACgBeo3Ypt2qWXocACLtc9qh3x7Ke71BQ9ALmUZ/QgeAOSnXPhJgTkff NSjIk2niTzDTYO3pyZiu5/ebqFD7anQ2uhoYvuZnfXaE/VUOtfQwW7PkLHg7X9i0PVjKkilCiMq Zqq5Q8Nu/Cd2y9JJA8Q98Ep3eOK6J7eZS/w== X-Received: by 2002:a05:6830:448c:b0:638:96f5:a077 with SMTP id r12-20020a056830448c00b0063896f5a077mr8254099otv.335.1661851654586; Tue, 30 Aug 2022 02:27:34 -0700 (PDT) X-Google-Smtp-Source: AA6agR5YJG7vkhgaeTzTK7ahynnWtveQpAoyDJ0Z+7qqEmamAXo9XFRKLVJ6jpf4bscwCqp5Rah+3Fd/kHAsDH22bHA= X-Received: by 2002:a05:6830:448c:b0:638:96f5:a077 with SMTP id r12-20020a056830448c00b0063896f5a077mr8254096otv.335.1661851654294; Tue, 30 Aug 2022 02:27:34 -0700 (PDT) MIME-Version: 1.0 References: <20220823114224.904934-1-aldyh@redhat.com> <36232923-497e-0de4-414f-41c1b33fbb30@moene.org> In-Reply-To: <36232923-497e-0de4-414f-41c1b33fbb30@moene.org> From: Aldy Hernandez Date: Tue, 30 Aug 2022 11:27:23 +0200 Message-ID: Subject: Re: [PATCH] Add support for floating point endpoints to frange. To: Toon Moene Cc: Jakub Jelinek , gcc-patches , "MacLeod, Andrew" X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000865a2605e771fd68" X-Spam-Status: No, score=-5.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000865a2605e771fd68 Content-Type: text/plain; charset="UTF-8" OK, I'm good to go. As the patch was getting rather large, I have split it into two parts. The first is the core endpoints support to frange along with removal of the +-INF markers (since they are no longer needed). The second part is the FP relational operators. Splitting it up should help in reviewing/improving the code for readers. Also, it always helps regression hunting to have smaller pieces ;-). Retested on x86-64 Linux. Pushed. On Mon, Aug 29, 2022 at 4:42 PM Toon Moene wrote: > > On 8/29/22 16:36, Aldy Hernandez wrote: > > > On Mon, Aug 29, 2022 at 4:30 PM Toon Moene wrote: > >> > >> On 8/29/22 16:15, Aldy Hernandez wrote: > >> > >>> But even with -ffinite-math-only, is there any benefit to propagating > >>> a known NAN? For example: > >> > >> The original intent (in 2002) for the option -ffinite-math-only was for > >> the optimizers to ignore all the various exceptions to common > >> optimizations because they might not work correctly when presented with > >> a NaN or an Inf. > >> > >> I do not know what the effect for floating point range information would > >> be - offhand. > >> > >> But in the *spirit* of this option would be to ignore that the range > >> [5.0, 5.0] would "also" contain NaN, for instance. > > > > Hmm, this is somewhat similar to what Jakub suggested. Perhaps we > > could categorically set !NAN for !HONOR_NANS at frange construction > > time? > > > > For reference: > > bool > > HONOR_NANS (machine_mode m) > > { > > return MODE_HAS_NANS (m) && !flag_finite_math_only; > > } > > > > Thanks. > > Aldy > > > > Yep, I think that would do it. > > Thanks, > > -- > Toon Moene - e-mail: toon@moene.org - phone: +31 346 214290 > Saturnushof 14, 3738 XG Maartensdijk, The Netherlands > --000000000000865a2605e771fd68 Content-Type: application/x-patch; name="0002-Add-support-for-floating-point-endpoints-to-frange.patch" Content-Disposition: attachment; filename="0002-Add-support-for-floating-point-endpoints-to-frange.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7fvvbgy0 RnJvbSA3ZGVkMWMwMjVhNDRkOWUzZTE0MWJkMWM3Njk0YWVmMzkzMWFjYjY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogVHVlLCAzMCBBdWcgMjAyMiAwODoyMzozMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBz dXBwb3J0IGZvciBmbG9hdGluZyBwb2ludCBlbmRwb2ludHMgdG8gZnJhbmdlLgoKVGhlIGN1cnJl bnQgaW1wbGVtZW50YXRpb24gb2YgZnJhbmdlIGlzIGp1c3QgYSB0eXBlIHdpdGggc29tZSBiaXRz IHRvCnJlcHJlc2VudCBOQU4gYW5kIElORi4gIFdlIGNhbiBkbyBiZXR0ZXIgYW5kIHJlcHJlc2Vu dCBlbmRwb2ludHMgdG8KdWx0aW1hdGVseSBzb2x2ZSBsb25nc3RhbmRpbmcgUFJzIHN1Y2ggYXMg UFIyNDAyMS4gIFRoaXMgcGF0Y2ggYWRkcwp0aGVzZSBlbmRwb2ludHMuICBJbiBmb2xsb3ctdXAg cGF0Y2hlcyBJIHdpbGwgYWRkIHN1cHBvcnQgZm9yIGEgYmFyZQpib25lcyBQTFVTX0VYUFIgcmFu Z2Utb3AtZmxvYXQgZW50cnkgdG8gc29sdmUgdGhlIFBSLgoKSSBoYXZlIGNob3NlbiB0byB1c2Ug UkVBTF9WQUxVRV9UWVBFcyBmb3IgdGhlIGVuZHBvaW50cywgc2luY2UgdGhhdCdzCndoYXQgd2Ug dXNlIHVuZGVybmVhdGggdGhlIHRyZWVzLiAgVGhpcyB3aWxsIGJlIHNvbWV3aGF0IGFuYWxvZ291 cyB0bwpvdXIgZXZlbnR1YWwgdXNlIG9mIHdpZGUtaW50cyBpbiB0aGUgaXJhbmdlLiAgTm8gc2Vu c2UgZ29pbmcgdGhyb3VnaAphZGRlZCBsZXZlbHMgb2YgaW5kaXJlY3Rpb24gaWYgd2UgY2FuIGF2 b2lkIGl0LiAgVGhhdCwgcGx1cyByZWFsLioKYWxyZWFkeSBoYXMgYSBuaWNlIEFQSSBmb3IgZGVh bGluZyB3aXRoIGZsb2F0cy4KCldpdGggdGhpcyBwYXRjaCwgcmFuZ2VzIHdpbGwgYmUgY2xvc2Vk IGZsb2F0IHBvaW50IGludGVydmFscywgd2hpY2gKbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gc2lt cGxlciwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIHRyYWNrIG9mCm9wZW4vY2xvc2VkIGlu dGVydmFscy4gIFRoaXMgaXMgY29uc2VydmF0aXZlIGVub3VnaCBmb3IgdXNlIGluIHRoZQpyYW5n ZXIgd29ybGQsIGFzIHdlJ2QgcmF0aGVyIGVyciBvbiB0aGUgc2lkZSBvZiBtb3JlIGVsZW1lbnRz IGluIGEKcmFuZ2UsIHRoYW4gbGVzcy4KCkZvciBleGFtcGxlLCBldmVuIHRob3VnaCB3ZSBjYW5u b3QgcHJlY2lzZWx5IHJlcHJlc2VudCB0aGUgb3BlbgppbnRlcnZhbCAoMy4wLCA1LjApIHdpdGgg dGhpcyBhcHByb2FjaCwgaXQgaXMgcGVyZmVjdGFibHkgcmVhc29uYWJsZQp0byByZXByZXNlbnQg aXQgYXMgWzMuMCwgNS4wXSBzaW5jZSB0aGUgY2xvc2VkIGludGVydmFsIGlzIGEgc3VwZXIgc2V0 Cm9mIHRoZSBvcGVuIG9uZS4gIEluIHRoZSBWUlAvcmFuZ2VyIHdvcmxkLCBpdCBpcyBhbHdheXMg YmV0dGVyIHRvCmVyciBvbiB0aGUgc2lkZSBvZiBtb3JlIGluZm9ybWF0aW9uIGluIGEgcmFuZ2Us IHRoYW4gbm90LiAgQWZ0ZXIgYWxsLAp3aGVuIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQg YSByYW5nZSwgd2UganVzdCB1c2UgVkFSWUlORyB3aGljaAppcyBhIGZhbmN5IHRlcm0gZm9yIGEg cmFuZ2Ugc3Bhbm5pbmcgdGhlIGVudGlyZSBkb21haW4uCgpTaW5jZSBSRUFMX1ZBTFVFX1RZUEVz IGhhdmUgcHJvcGVybHkgZGVmaW5lZCBpbmZpbml0eSBhbmQgTkFOCnNlbWFudGljcywgYWxsIHRo ZSBtYXRoIGNhbiBiZSBtYWRlIHRvIHdvcms6CgpbLUlORiwgMy4wXSAhTkFOICAgICAgICA9PiBO dW1iZXJzIDw9IDMuMCAoTkFOIGNhbm5vdCBoYXBwZW4pClszLjAsIDMuMF0gIAkJPT4gMy4wIG9y IE5BTi4KWzMuMCwgK0lORl0gICAgICAgICAgICAgPT4gTnVtYmVycyA+PSAzLjAgKE5BTiBpcyBw b3NzaWJsZSkKWy1JTkYsICtJTkZdICAgICAgICAgICAgPT4gVkFSWUlORyAoTkFOIGlzIHBvc3Np YmxlKQpbLUlORiwgK0lORl0gIU5BTiAgICAgICA9PiBFbnRpcmUgZG9tYWluLiAgTkFOIGNhbm5v dCBoYXBwZW4uCgpBbHNvLCBzaW5jZSBSRUFMX1ZBTFVFX1RZUEVzIGNhbiByZXByZXNlbnQgdGhl IG1pbmltdW0gYW5kIG1heGltdW0KcmVwcmVzZW50YWJsZSB2YWx1ZXMgb2YgYSBUWVBFX01PREUs IHdlIGNhbiBkaXNhbWJpZ3VhdGUgYmV0d2VlbiB0aGVtCmFuZCBuZWdhdGl2ZSBhbmQgcG9zaXRp dmUgaW5maW5pdHkgKHNlZSBnZXRfbWF4X2Zsb2F0IGluIHJlYWwuY2MpLgoKVGhpcyBhbHNvIG1h a2VzIHRoZSBtYXRoIGFsbCB3b3JrLiAgRm9yIGV4YW1wbGUsIHN1cHBvc2Ugd2Uga25vdwpub3Ro aW5nIGFib3V0IHggYW5kIHkgKFZBUllJTkcpLiAgT24gdGhlIFRSVUUgc2lkZSBvZiB4ID4geSwg d2UgY2FuCmRlZHVjZSB0aGF0OgoKICAgICAgICAoYSkgeCBjYW5ub3QgYmUgTkFOCiAgICAgICAg KGIpIHkgY2Fubm90IGJlIE5BTgogICAgICAgIChjKSB5IGNhbm5vdCBiZSArSU5GLgoKKGMpIG1l YW5zIHRoYXQgd2UgY2FuIGRyb3AgdGhlIHVwcGVyIGJvdW5kIG9mICJ5IiBmcm9tICtJTkYgdG8g dGhlCm1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZSBmb3IgaXRzIHR5cGUuCgpIYXZpbmcgZW5k cG9pbnRzIHdpdGggZGlmZmVyZW50IHJlcHJlc2VudGF0aW9uIGZvciBpbmZpbml0eSBhbmQgdGhl Cm1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZXMsIG1lYW5zIHdlIGNhbiBkcm9wIHRoZSArLUlO RiBwcm9wZXJ0aWVzCndlIGN1cnJlbnRseSBoYXZlIGluIHRoZSBmcmFuZ2UuCgpnY2MvQ2hhbmdl TG9nOgoKCSogcmFuZ2Utb3AtZmxvYXQuY2MgKGZyYW5nZV9zZXRfbmFuKTogTmV3LgoJKGZyYW5n ZV9kcm9wX2luZik6IE5ldy4KCShmcmFuZ2VfZHJvcF9uaW5mKTogTmV3LgoJKGZvcGVyYXRvcl9l cXVhbDo6b3AxX3JhbmdlKTogQWRqdXN0IGZvciBlbmRwb2ludHMuCgkoZm9wZXJhdG9yX2x0Ojpv cDFfcmFuZ2UpOiBTYW1lLgoJKGZvcGVyYXRvcl9sdDo6b3AyX3JhbmdlKTogU2FtZS4KCShmb3Bl cmF0b3JfZ3Q6Om9wMV9yYW5nZSk6IFNhbWUuCgkoZm9wZXJhdG9yX2d0OjpvcDJfcmFuZ2UpOiBT YW1lLgoJKGZvcGVyYXRvcl91bm9yZGVyZWQ6Om9wMV9yYW5nZSk6IFNhbWUuCgkqIHZhbHVlLXF1 ZXJ5LmNjIChyYW5nZV9xdWVyeTo6Z2V0X3RyZWVfcmFuZ2UpOiBTYW1lLgoJKiB2YWx1ZS1yYW5n ZS1wcmV0dHktcHJpbnQuY2MgKHZyYW5nZV9wcmludGVyOjp2aXNpdCk6IFNhbWUuCgkqIHZhbHVl LXJhbmdlLXN0b3JhZ2UuY2MgKGZyYW5nZV9zdG9yYWdlX3Nsb3Q6OmdldF9mcmFuZ2UpOiBTYW1l LgoJKiB2YWx1ZS1yYW5nZS5jYyAoZnJhbmdlOjpzZXQpOiBTYW1lLgoJKGZyYW5nZTo6bm9ybWFs aXplX2tpbmQpOiBTYW1lLgoJKGZyYW5nZTo6dW5pb25fKTogU2FtZS4KCShmcmFuZ2U6OmludGVy c2VjdCk6IFNhbWUuCgkoZnJhbmdlOjpvcGVyYXRvcj0pOiBTYW1lLgoJKGVhcmx5X25hbl9yZXNv bHZlKTogTmV3LgoJKGZyYW5nZTo6Y29udGFpbnNfcCk6IE5ldy4KCShmcmFuZ2U6OnNpbmdsZXRv bl9wKTogTmV3LgoJKGZyYW5nZTo6c2V0X25vbnplcm8pOiBOZXcuCgkoZnJhbmdlOjpub256ZXJv X3ApOiBOZXcuCgkoZnJhbmdlOjpzZXRfemVybyk6IE5ldy4KCShmcmFuZ2U6Onplcm9fcCk6IE5l dy4KCShmcmFuZ2U6OnNldF9ub25uZWdhdGl2ZSk6IE5ldy4KCShmcmFuZ2VfZmxvYXQpOiBOZXcu CgkoZnJhbmdlX25hbik6IE5ldy4KCShyYW5nZV90ZXN0c19uYW4pOiBOZXcuCgkocmFuZ2VfdGVz dHNfc2lnbmVkX3plcm9zKTogTmV3LgoJKHJhbmdlX3Rlc3RzX2Zsb2F0cyk6IE5ldy4KCShyYW5n ZV90ZXN0cyk6IE5ldy4KCSogdmFsdWUtcmFuZ2UuaCAoZnJhbmdlOjpsb3dlcl9ib3VuZCk6IE5l dy4KCShmcmFuZ2U6OnVwcGVyX2JvdW5kKTogTmV3LgoJKHZycF92YWxfbWluKTogVXNlIHJlYWxf aW5mIHdpdGggYSBzaWduIGluc3RlYWQgb2YgbmVnYXRpbmcgaW5mLgoJKGZyYW5nZTo6ZnJhbmdl KTogTmV3LgoJKGZyYW5nZTo6c2V0X3ZhcnlpbmcpOiBBZGp1c3QgZm9yIGVuZHBvaW50cy4KCShy ZWFsX21heF9yZXByZXNlbnRhYmxlKTogTmV3LgoJKHJlYWxfbWluX3JlcHJlc2VudGFibGUpOiBO ZXcuCi0tLQogZ2NjL3JhbmdlLW9wLWZsb2F0LmNjICAgICAgICAgICB8ICA3OSArKysrLS0KIGdj Yy92YWx1ZS1xdWVyeS5jYyAgICAgICAgICAgICAgfCAgIDkgKwogZ2NjL3ZhbHVlLXJhbmdlLXBy ZXR0eS1wcmludC5jYyB8ICAxNCArLQogZ2NjL3ZhbHVlLXJhbmdlLXN0b3JhZ2UuY2MgICAgICB8 ICAxMiArCiBnY2MvdmFsdWUtcmFuZ2UuY2MgICAgICAgICAgICAgIHwgNDYyICsrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tCiBnY2MvdmFsdWUtcmFuZ2UuaCAgICAgICAgICAgICAgIHwg IDg4ICsrKysrLQogNiBmaWxlcyBjaGFuZ2VkLCA1ODUgaW5zZXJ0aW9ucygrKSwgNzkgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL3JhbmdlLW9wLWZsb2F0LmNjIGIvZ2NjL3JhbmdlLW9w LWZsb2F0LmNjCmluZGV4IGZmOWZlMzEyYWNmLi5jYTQxMTM2ZjRjZCAxMDA2NDQKLS0tIGEvZ2Nj L3JhbmdlLW9wLWZsb2F0LmNjCisrKyBiL2djYy9yYW5nZS1vcC1mbG9hdC5jYwpAQCAtMTUwLDYg KzE1MCwxOCBAQCByYW5nZV9vcGVyYXRvcl9mbG9hdDo6b3AxX29wMl9yZWxhdGlvbiAoY29uc3Qg aXJhbmdlICZsaHMgQVRUUklCVVRFX1VOVVNFRCkgY29ucwogICByZXR1cm4gVlJFTF9WQVJZSU5H OwogfQogCisvLyBTZXQgUiB0byBbTkFOLCBOQU5dLgorCitzdGF0aWMgaW5saW5lIHZvaWQKK2Zy YW5nZV9zZXRfbmFuIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSkKK3sKKyAgUkVBTF9WQUxVRV9UWVBF IHJ2OworICBib29sIHJlcyA9IHJlYWxfbmFuICgmcnYsICIiLCAxLCBUWVBFX01PREUgKHR5cGUp KTsKKyAgaWYgKGZsYWdfY2hlY2tpbmcpCisgICAgZ2NjX2Fzc2VydCAocmVzKTsKKyAgci5zZXQg KHR5cGUsIHJ2LCBydik7Cit9CisKIC8vIFJldHVybiBUUlVFIGlmIE9QMSBhbmQgT1AyIGFyZSBr bm93biB0byBiZSBmcmVlIG9mIE5BTnMuCiAKIHN0YXRpYyBpbmxpbmUgYm9vbApAQCAtMTc4LDYg KzE5MCw0MCBAQCBmcmVsb3BfZWFybHlfcmVzb2x2ZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJ ICAmJiByZWxvcF9lYXJseV9yZXNvbHZlIChyLCB0eXBlLCBvcDEsIG9wMiwgcmVsLCBteV9yZWwp KTsKIH0KIAorLy8gQ3JvcCBSIHRvIFstSU5GLCBNQVhdIHdoZXJlIE1BWCBpcyB0aGUgbWF4aW11 bSByZXByZXNlbnRhYmxlIG51bWJlcgorLy8gZm9yIFRZUEUuCisKK3N0YXRpYyBpbmxpbmUgdm9p ZAorZnJhbmdlX2Ryb3BfaW5mIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSkKK3sKKyAgLy8gRklYTUU6 IGJ1aWxkX3JlYWwoKSBiYWlscyBvbiBkZWNpbWFsIGZsb2F0IG1vZGVzIHdoZW4gY2FsbGVkIHdp dGgKKyAgLy8gYSBtYXggcmVwcmVzZW50YWJsZSBlbmRwb2ludC4KKyAgaWYgKERFQ0lNQUxfRkxP QVRfTU9ERV9QIChUWVBFX01PREUgKHR5cGUpKSkKKyAgICByZXR1cm47CisKKyAgUkVBTF9WQUxV RV9UWVBFIG1heDsKKyAgcmVhbF9tYXhfcmVwcmVzZW50YWJsZSAoJm1heCwgdHlwZSk7CisgIGZy YW5nZSB0bXAgKHR5cGUsIHIubG93ZXJfYm91bmQgKCksIG1heCk7CisgIHIuaW50ZXJzZWN0ICh0 bXApOworfQorCisvLyBDcm9wIFIgdG8gW01JTiwgK0lORl0gd2hlcmUgTUlOIGlzIHRoZSBtaW5p bXVtIHJlcHJlc2VudGFibGUgbnVtYmVyCisvLyBmb3IgVFlQRS4KKworc3RhdGljIGlubGluZSB2 b2lkCitmcmFuZ2VfZHJvcF9uaW5mIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSkKK3sKKyAgLy8gRklY TUU6IGJ1aWxkX3JlYWwoKSBiYWlscyBvbiBkZWNpbWFsIGZsb2F0IG1vZGVzIHdoZW4gY2FsbGVk IHdpdGgKKyAgLy8gYSBtYXggcmVwcmVzZW50YWJsZSBlbmRwb2ludC4KKyAgaWYgKERFQ0lNQUxf RkxPQVRfTU9ERV9QIChUWVBFX01PREUgKHR5cGUpKSkKKyAgICByZXR1cm47CisKKyAgUkVBTF9W QUxVRV9UWVBFIG1pbjsKKyAgcmVhbF9taW5fcmVwcmVzZW50YWJsZSAoJm1pbiwgdHlwZSk7Cisg IGZyYW5nZSB0bXAgKHR5cGUsIG1pbiwgci51cHBlcl9ib3VuZCAoKSk7CisgIHIuaW50ZXJzZWN0 ICh0bXApOworfQorCiAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGZvbGRfcmFuZ2UgZm9y IHJlbGF0aW9uYWwgb3BlcmF0b3JzLgogLy8gVGhpcyBhbW91bnRzIHRvIHBhc3Npbmcgb24gYW55 IGtub3duIHJlbGF0aW9ucyBmcm9tIHRoZSBvcmFjbGUsIGlmZgogLy8gd2Uga25vdyB0aGUgb3Bl cmFuZHMgYXJlIG5vdCBOQU4gb3IgLWZmaW5pdGUtbWF0aC1vbmx5IGhvbGRzLgpAQCAtMjUyLDIx ICsyOTgsOCBAQCBmb3BlcmF0b3JfZXF1YWw6Om9wMV9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5 cGUsCiAgIHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkpCiAgICAgewogICAg IGNhc2UgQlJTX1RSVUU6Ci0gICAgICBpZiAoSE9OT1JfU0lHTkVEX1pFUk9TICh0eXBlKQotCSAg JiYgb3AyLmNvbnRhaW5zX3AgKGJ1aWxkX3plcm9fY3N0ICh0eXBlKSkpCi0JewotCSAgLy8gV2l0 aCBzaWduZWQgemVyb3MsIHggPT0gLTAuMCBkb2VzIG5vdCBtZWFuIHdlIGNhbiByZXBsYWNlCi0J ICAvLyB4IHdpdGggLTAuMCwgYmVjYXVzZSB4IG1heSBiZSBlaXRoZXIgKzAuMCBvciAtMC4wLgot CSAgci5zZXRfdmFyeWluZyAodHlwZSk7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIC8vIElmIGl0 J3MgdHJ1ZSwgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyBPUDIuCi0JICAvLwotCSAgLy8gSWYg dGhlIHJhbmdlIGRvZXMgbm90IGFjdHVhbGx5IGNvbnRhaW4gemVyb3MsIHRoaXMgc2hvdWxkCi0J ICAvLyBhbHdheXMgYmUgT0suCi0JICByID0gb3AyOwotCX0KKyAgICAgIC8vIElmIGl0J3MgdHJ1 ZSwgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyBPUDIuCisgICAgICByID0gb3AyOwogICAgICAg Ly8gVGhlIFRSVUUgc2lkZSBvZiBvcDEgPT0gb3AyIGltcGxpZXMgb3AxIGlzICFOQU4uCiAgICAg ICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsKICAgICAgIGJyZWFrOwpAQCAtMjc1LDcgKzMwOCw3 IEBAIGZvcGVyYXRvcl9lcXVhbDo6b3AxX3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKICAg ICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUpOwogICAgICAgLy8gVGhlIEZBTFNFIHNpZGUgb2Ygb3Ax ID09IG9wMSBpbXBsaWVzIG9wMSBpcyBhIE5BTi4KICAgICAgIGlmIChyZWwgPT0gVlJFTF9FUSkK LQlyLnNldF9uYW4gKGZwX3Byb3A6OllFUyk7CisJZnJhbmdlX3NldF9uYW4gKHIsIHR5cGUpOwog ICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgpAQCAtMzY1LDcgKzM5OCw4IEBAIGZvcGVyYXRv cl9sdDo6b3AxX3JhbmdlIChmcmFuZ2UgJnIsCiAgICAgICByLnNldF92YXJ5aW5nICh0eXBlKTsK ICAgICAgIC8vIFRoZSBUUlVFIHNpZGUgb2Ygb3AxIDwgb3AyIGltcGxpZXMgb3AxIGlzICFOQU4g YW5kICFJTkYuCiAgICAgICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsKLSAgICAgIHIuc2V0X2lu ZiAoZnBfcHJvcDo6Tk8pOworICAgICAgLy8geCA8IHkgaW1wbGllcyB4IGlzIG5vdCArSU5GLgor ICAgICAgZnJhbmdlX2Ryb3BfaW5mIChyLCB0eXBlKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2Fz ZSBCUlNfRkFMU0U6CkBAIC0zOTEsNyArNDI1LDggQEAgZm9wZXJhdG9yX2x0OjpvcDJfcmFuZ2Ug KGZyYW5nZSAmciwKICAgICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUpOwogICAgICAgLy8gVGhlIFRS VUUgc2lkZSBvZiBvcDEgPCBvcDIgaW1wbGllcyBvcDIgaXMgIU5BTiBhbmQgIU5JTkYuCiAgICAg ICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsKLSAgICAgIHIuc2V0X25pbmYgKGZwX3Byb3A6Ok5P KTsKKyAgICAgIC8vIHggPCB5IGltcGxpZXMgeSBpcyBub3QgLUlORi4KKyAgICAgIGZyYW5nZV9k cm9wX25pbmYgKHIsIHR5cGUpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJSU19GQUxTRToK QEAgLTQ5Myw3ICs1MjgsOCBAQCBmb3BlcmF0b3JfZ3Q6Om9wMV9yYW5nZSAoZnJhbmdlICZyLAog ICAgICAgci5zZXRfdmFyeWluZyAodHlwZSk7CiAgICAgICAvLyBUaGUgVFJVRSBzaWRlIG9mIG9w MSA+IG9wMiBpbXBsaWVzIG9wMSBpcyAhTkFOIGFuZCAhTklORi4KICAgICAgIHIuc2V0X25hbiAo ZnBfcHJvcDo6Tk8pOwotICAgICAgci5zZXRfbmluZiAoZnBfcHJvcDo6Tk8pOworICAgICAgLy8g eCA+IHkgaW1wbGllcyB4IGlzIG5vdCAtSU5GLgorICAgICAgZnJhbmdlX2Ryb3BfbmluZiAociwg dHlwZSk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQlJTX0ZBTFNFOgpAQCAtNTE5LDcgKzU1 NSw4IEBAIGZvcGVyYXRvcl9ndDo6b3AyX3JhbmdlIChmcmFuZ2UgJnIsCiAgICAgICByLnNldF92 YXJ5aW5nICh0eXBlKTsKICAgICAgIC8vIFRoZSBUUlVFIHNpZGUgb2Ygb3AxID4gb3AyIGltcGxp ZXMgb3AyIGlzICFOQU4gYW5kICFJTkYuCiAgICAgICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsK LSAgICAgIHIuc2V0X2luZiAoZnBfcHJvcDo6Tk8pOworICAgICAgLy8geCA+IHkgaW1wbGllcyB5 IGlzIG5vdCArSU5GLgorICAgICAgZnJhbmdlX2Ryb3BfaW5mIChyLCB0eXBlKTsKICAgICAgIGJy ZWFrOwogCiAgICAgY2FzZSBCUlNfRkFMU0U6CkBAIC02MzYsNyArNjczLDcgQEAgZm9wZXJhdG9y X3Vub3JkZXJlZDo6b3AxX3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKICAgICAgIC8vIFNp bmNlIGF0IGxlYXN0IG9uZSBvcGVyYW5kIG11c3QgYmUgTkFOLCBpZiBvbmUgb2YgdGhlbSBpcwog ICAgICAgLy8gbm90LCB0aGUgb3RoZXIgbXVzdCBiZS4KICAgICAgIGlmIChvcDIuZ2V0X25hbiAo KS5ub19wICgpKQotCXIuc2V0X25hbiAoZnBfcHJvcDo6WUVTKTsKKwlmcmFuZ2Vfc2V0X25hbiAo ciwgdHlwZSk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQlJTX0ZBTFNFOgpkaWZmIC0tZ2l0 IGEvZ2NjL3ZhbHVlLXF1ZXJ5LmNjIGIvZ2NjL3ZhbHVlLXF1ZXJ5LmNjCmluZGV4IDRhZjhlY2Ew MTcyLi40NjM3ZmI0MDllNSAxMDA2NDQKLS0tIGEvZ2NjL3ZhbHVlLXF1ZXJ5LmNjCisrKyBiL2dj Yy92YWx1ZS1xdWVyeS5jYwpAQCAtMjExLDEwICsyMTEsMTkgQEAgcmFuZ2VfcXVlcnk6OmdldF90 cmVlX3JhbmdlICh2cmFuZ2UgJnIsIHRyZWUgZXhwciwgZ2ltcGxlICpzdG10KQogICBzd2l0Y2gg KFRSRUVfQ09ERSAoZXhwcikpCiAgICAgewogICAgIGNhc2UgSU5URUdFUl9DU1Q6CisgICAgICBp ZiAoVFJFRV9PVkVSRkxPV19QIChleHByKSkKKwlleHByID0gZHJvcF90cmVlX292ZXJmbG93IChl eHByKTsKKyAgICAgIHIuc2V0IChleHByLCBleHByKTsKKyAgICAgIHJldHVybiB0cnVlOworCiAg ICAgY2FzZSBSRUFMX0NTVDoKICAgICAgIGlmIChUUkVFX09WRVJGTE9XX1AgKGV4cHIpKQogCWV4 cHIgPSBkcm9wX3RyZWVfb3ZlcmZsb3cgKGV4cHIpOwogICAgICAgci5zZXQgKGV4cHIsIGV4cHIp OworICAgICAgaWYgKHJlYWxfaXNuYW4gKFRSRUVfUkVBTF9DU1RfUFRSIChleHByKSkpCisJYXNf YSA8ZnJhbmdlPiAocikuc2V0X25hbiAoZnBfcHJvcDo6WUVTKTsKKyAgICAgIGVsc2UKKwlhc19h IDxmcmFuZ2U+IChyKS5zZXRfbmFuIChmcF9wcm9wOjpOTyk7CiAgICAgICByZXR1cm4gdHJ1ZTsK IAogICAgIGNhc2UgU1NBX05BTUU6CmRpZmYgLS1naXQgYS9nY2MvdmFsdWUtcmFuZ2UtcHJldHR5 LXByaW50LmNjIGIvZ2NjL3ZhbHVlLXJhbmdlLXByZXR0eS1wcmludC5jYwppbmRleCBjYmY1MGQz ZDg1NC4uZTY2ZDU2ZGEyOWQgMTAwNjQ0Ci0tLSBhL2djYy92YWx1ZS1yYW5nZS1wcmV0dHktcHJp bnQuY2MKKysrIGIvZ2NjL3ZhbHVlLXJhbmdlLXByZXR0eS1wcmludC5jYwpAQCAtMTIyLDIyICsx MjIsMzAgQEAgdnJhbmdlX3ByaW50ZXI6OnByaW50X2lyYW5nZV9iaXRtYXNrcyAoY29uc3QgaXJh bmdlICZyKSBjb25zdAogdm9pZAogdnJhbmdlX3ByaW50ZXI6OnZpc2l0IChjb25zdCBmcmFuZ2Ug JnIpIGNvbnN0CiB7CisgIHRyZWUgdHlwZSA9IHIudHlwZSAoKTsKKwogICBwcF9zdHJpbmcgKHBw LCAiW2ZyYW5nZV0gIik7CiAgIGlmIChyLnVuZGVmaW5lZF9wICgpKQogICAgIHsKICAgICAgIHBw X3N0cmluZyAocHAsICJVTkRFRklORUQiKTsKICAgICAgIHJldHVybjsKICAgICB9Ci0gIGR1bXBf Z2VuZXJpY19ub2RlIChwcCwgci50eXBlICgpLCAwLCBUREZfTk9ORSwgZmFsc2UpOworICBkdW1w X2dlbmVyaWNfbm9kZSAocHAsIHR5cGUsIDAsIFRERl9OT05FLCBmYWxzZSk7CiAgIHBwX3N0cmlu ZyAocHAsICIgIik7CiAgIGlmIChyLnZhcnlpbmdfcCAoKSkKICAgICB7CiAgICAgICBwcF9zdHJp bmcgKHBwLCAiVkFSWUlORyIpOwogICAgICAgcmV0dXJuOwogICAgIH0KKyAgcHBfY2hhcmFjdGVy IChwcCwgJ1snKTsKKyAgZHVtcF9nZW5lcmljX25vZGUgKHBwLAorCQkgICAgIGJ1aWxkX3JlYWwg KHR5cGUsIHIubG93ZXJfYm91bmQgKCkpLCAwLCBUREZfTk9ORSwgZmFsc2UpOworICBwcF9zdHJp bmcgKHBwLCAiLCAiKTsKKyAgZHVtcF9nZW5lcmljX25vZGUgKHBwLAorCQkgICAgIGJ1aWxkX3Jl YWwgKHR5cGUsIHIudXBwZXJfYm91bmQgKCkpLCAwLCBUREZfTk9ORSwgZmFsc2UpOworICBwcF9z dHJpbmcgKHBwLCAiXSAiKTsKKwogICBwcmludF9mcmFuZ2VfcHJvcCAoIk5BTiIsIHIuZ2V0X25h biAoKSk7Ci0gIHByaW50X2ZyYW5nZV9wcm9wICgiSU5GIiwgci5nZXRfaW5mICgpKTsKLSAgcHJp bnRfZnJhbmdlX3Byb3AgKCJOSU5GIiwgci5nZXRfbmluZiAoKSk7CiB9CiAKIC8vIFByaW50IHRo ZSBGUCBwcm9wZXJ0aWVzIGluIGFuIGZyYW5nZS4KZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5n ZS1zdG9yYWdlLmNjIGIvZ2NjL3ZhbHVlLXJhbmdlLXN0b3JhZ2UuY2MKaW5kZXggZWEzYjgzY2E2 NDEuLmFkZjIzYzM5ZjBkIDEwMDY0NAotLS0gYS9nY2MvdmFsdWUtcmFuZ2Utc3RvcmFnZS5jYwor KysgYi9nY2MvdmFsdWUtcmFuZ2Utc3RvcmFnZS5jYwpAQCAtMjYxLDYgKzI2MSwxOCBAQCBmcmFu Z2Vfc3RvcmFnZV9zbG90OjpnZXRfZnJhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSkgY29uc3QK IHsKICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoci5zdXBwb3J0c190eXBlX3AgKHR5cGUpKTsKIAor ICAvLyBGSVhNRTogTkFOcyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQsIGJlY2F1c2Ugd2UgbmVlZCBb TkFOLCBOQU5dIGluCisgIC8vIHRoZSByYW5nZSB0byBwcm9wZXJseSByZXByZXNlbnQgaXQsIG5v dCBqdXN0IHRoZSBOQU4gZmxhZyBpbiB0aGUKKyAgLy8gcHJvcGVydHkgYml0cy4gIFRoaXMgd2ls bCBnbyBhd2F5IHdoZW4gd2Ugc3RyZWFtIG91dCB0aGUKKyAgLy8gZW5kcG9pbnRzLgorICBpZiAo bV9wcm9wcy5nZXRfbmFuICgpLnllc19wICgpKQorICAgIHsKKyAgICAgIFJFQUxfVkFMVUVfVFlQ RSBydjsKKyAgICAgIHJlYWxfbmFuICgmcnYsICIiLCAxLCBUWVBFX01PREUgKHR5cGUpKTsKKyAg ICAgIHIuc2V0ICh0eXBlLCBydiwgcnYpOworICAgICAgcmV0dXJuOworICAgIH0KKwogICByLnNl dF92YXJ5aW5nICh0eXBlKTsKICAgci5tX3Byb3BzID0gbV9wcm9wczsKICAgci5ub3JtYWxpemVf a2luZCAoKTsKZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS5jYyBiL2djYy92YWx1ZS1yYW5n ZS5jYwppbmRleCBlZGQxMGJmNTc5NC4uYmNjNjY1MTcwMWIgMTAwNjQ0Ci0tLSBhL2djYy92YWx1 ZS1yYW5nZS5jYworKysgYi9nY2MvdmFsdWUtcmFuZ2UuY2MKQEAgLTI5MSw0MSArMjkxLDIwIEBA IGZyYW5nZTo6c2V0ICh0cmVlIG1pbiwgdHJlZSBtYXgsIHZhbHVlX3JhbmdlX2tpbmQga2luZCkK ICAgbV9raW5kID0ga2luZDsKICAgbV90eXBlID0gVFJFRV9UWVBFIChtaW4pOwogICBtX3Byb3Bz LnNldF92YXJ5aW5nICgpOworICBtX21pbiA9ICpUUkVFX1JFQUxfQ1NUX1BUUiAobWluKTsKKyAg bV9tYXggPSAqVFJFRV9SRUFMX0NTVF9QVFIgKG1heCk7CiAKLSAgYm9vbCBpc19taW4gPSB2cnBf dmFsX2lzX21pbiAobWluKTsKLSAgYm9vbCBpc19tYXggPSB2cnBfdmFsX2lzX21heCAobWF4KTsK ICAgYm9vbCBpc19uYW4gPSAocmVhbF9pc25hbiAoVFJFRV9SRUFMX0NTVF9QVFIgKG1pbikpCiAJ CSB8fCByZWFsX2lzbmFuIChUUkVFX1JFQUxfQ1NUX1BUUiAobWF4KSkpOwogCiAgIC8vIFJhbmdl cyB3aXRoIGEgTkFOIGFuZCBhIG5vbi1OQU4gZW5kcG9pbnQgYXJlIG5vbnNlbnNpY2FsLgogICBn Y2NfY2hlY2tpbmdfYXNzZXJ0ICghaXNfbmFuIHx8IG9wZXJhbmRfZXF1YWxfcCAobWluLCBtYXgp KTsKIAotICAvLyBUaGUgcHJvcGVydGllcyBmb3Igc2luZ2xldG9ucyBjYW4gYmUgYWxsIHNldCBh aGVhZCBvZiB0aW1lLgotICBpZiAob3BlcmFuZF9lcXVhbF9wIChtaW4sIG1heCkpCi0gICAgewot ICAgICAgLy8gU2V0IElORiBwcm9wZXJ0aWVzLgotICAgICAgaWYgKGlzX21pbikKLQltX3Byb3Bz Lm5pbmZfc2V0X3llcyAoKTsKLSAgICAgIGVsc2UKLQltX3Byb3BzLm5pbmZfc2V0X25vICgpOwot ICAgICAgaWYgKGlzX21heCkKLQltX3Byb3BzLmluZl9zZXRfeWVzICgpOwotICAgICAgZWxzZQot CW1fcHJvcHMuaW5mX3NldF9ubyAoKTsKLSAgICAgIC8vIFNldCBOQU4gcHJvcGVydHkuCi0gICAg ICBpZiAoaXNfbmFuKQotCW1fcHJvcHMubmFuX3NldF95ZXMgKCk7Ci0gICAgICBlbHNlCi0JbV9w cm9wcy5uYW5fc2V0X25vICgpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIC8vIE1hcmsg d2hlbiB0aGUgZW5kcG9pbnRzIGNhbid0IGJlICstSU5GLgotICAgICAgaWYgKCFpc19taW4pCi0J bV9wcm9wcy5uaW5mX3NldF9ubyAoKTsKLSAgICAgIGlmICghaXNfbWF4KQotCW1fcHJvcHMuaW5m X3NldF9ubyAoKTsKLSAgICB9CisgIC8vIFNldCBOQU4gcHJvcGVydHkgaWYgd2UncmUgYWJzb2x1 dGVseSBzdXJlLgorICBpZiAoaXNfbmFuICYmIG9wZXJhbmRfZXF1YWxfcCAobWluLCBtYXgpKQor ICAgIG1fcHJvcHMubmFuX3NldF95ZXMgKCk7CisgIGVsc2UgaWYgKCFIT05PUl9OQU5TIChtX3R5 cGUpKQorICAgIG1fcHJvcHMubmFuX3NldF9ubyAoKTsKIAogICAvLyBDaGVjayBmb3Igc3dhcHBl ZCByYW5nZXMuCiAgIGdjY19jaGVja2luZ19hc3NlcnQgKGlzX25hbiB8fCB0cmVlX2NvbXBhcmUg KExFX0VYUFIsIG1pbiwgbWF4KSk7CkBAIC0zMzYsNiArMzE1LDE2IEBAIGZyYW5nZTo6c2V0ICh0 cmVlIG1pbiwgdHJlZSBtYXgsIHZhbHVlX3JhbmdlX2tpbmQga2luZCkKICAgICB2ZXJpZnlfcmFu Z2UgKCk7CiB9CiAKKy8vIFNldHRlciBmb3IgZnJhbmdlIGZyb20gUkVBTF9WQUxVRV9UWVBFIGVu ZHBvaW50cy4KKwordm9pZAorZnJhbmdlOjpzZXQgKHRyZWUgdHlwZSwKKwkgICAgIGNvbnN0IFJF QUxfVkFMVUVfVFlQRSAmbWluLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJm1heCwKKwkgICAgIHZh bHVlX3JhbmdlX2tpbmQga2luZCkKK3sKKyAgc2V0IChidWlsZF9yZWFsICh0eXBlLCBtaW4pLCBi dWlsZF9yZWFsICh0eXBlLCBtYXgpLCBraW5kKTsKK30KKwogLy8gTm9ybWFsaXplIHJhbmdlIHRv IFZBUllJTkcgb3IgVU5ERUZJTkVELCBvciB2aWNlIHZlcnNhLiAgUmV0dXJuCiAvLyBUUlVFIGlm IGFueXRoaW5nIGNoYW5nZWQuCiAvLwpAQCAtMzQ3LDcgKzMzNiwxNSBAQCBmcmFuZ2U6OnNldCAo dHJlZSBtaW4sIHRyZWUgbWF4LCB2YWx1ZV9yYW5nZV9raW5kIGtpbmQpCiBib29sCiBmcmFuZ2U6 Om5vcm1hbGl6ZV9raW5kICgpCiB7Ci0gIGlmIChtX2tpbmQgPT0gVlJfUkFOR0UpCisgIC8vIFVu ZGVmaW5lZCBpcyB2aXJhbC4KKyAgaWYgKG1fcHJvcHMubmFuX3VuZGVmaW5lZF9wICgpKQorICAg IHsKKyAgICAgIHNldF91bmRlZmluZWQgKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg IGlmIChtX2tpbmQgPT0gVlJfUkFOR0UKKyAgICAgICYmIHJlYWxfaXNpbmYgKCZtX21pbiwgMSkK KyAgICAgICYmIHJlYWxfaXNpbmYgKCZtX21heCwgMCkpCiAgICAgewogICAgICAgLy8gTm8gRlAg cHJvcGVydGllcyBzZXQgbWVhbnMgdmFyeWluZy4KICAgICAgIGlmIChtX3Byb3BzLnZhcnlpbmdf cCAoKSkKQEAgLTM1NSwxNCArMzUyLDYgQEAgZnJhbmdlOjpub3JtYWxpemVfa2luZCAoKQogCSAg c2V0X3ZhcnlpbmcgKG1fdHlwZSk7CiAJICByZXR1cm4gdHJ1ZTsKIAl9Ci0gICAgICAvLyBVbmRl ZmluZWQgaXMgdmlyYWwuCi0gICAgICBpZiAobV9wcm9wcy5uYW5fdW5kZWZpbmVkX3AgKCkKLQkg IHx8IG1fcHJvcHMuaW5mX3VuZGVmaW5lZF9wICgpCi0JICB8fCBtX3Byb3BzLm5pbmZfdW5kZWZp bmVkX3AgKCkpCi0JewotCSAgc2V0X3VuZGVmaW5lZCAoKTsKLQkgIHJldHVybiB0cnVlOwotCX0K ICAgICB9CiAgIGVsc2UgaWYgKG1fa2luZCA9PSBWUl9WQVJZSU5HKQogICAgIHsKQEAgLTM3MCwx MiArMzU5LDMyIEBAIGZyYW5nZTo6bm9ybWFsaXplX2tpbmQgKCkKICAgICAgIGlmICghbV9wcm9w cy52YXJ5aW5nX3AgKCkpCiAJewogCSAgbV9raW5kID0gVlJfUkFOR0U7CisJICByZWFsX2luZiAo Jm1fbWluLCAxKTsKKwkgIHJlYWxfaW5mICgmbV9tYXgsIDApOwogCSAgcmV0dXJuIHRydWU7CiAJ fQogICAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQogCisvLyBJZiBib3RoIG9wZXJhbmRzIGFyZSBk ZWZpbml0ZWx5IE5BTiwgZG8gbm90aGluZyBhcyB0aGV5IGNvbWJpbmUKKy8vIHBlcmZlY3RseS4g IElmIE9UT0gsIG9ubHkgb25lIGlzIGEgTkFOLCBzZXQgUiB0byBWQVJZSU5HIGFzIHRoZXkKKy8v IGNhbid0IGJlIG5laXRoZXIgdW5pb25lZCBub3IgaW50ZXJzZWN0ZWQuICBSZXR1cm4gVFJVRSBp ZiB3ZQorLy8gY2hhbmdlZCBhbnl0aGluZy4KKworc3RhdGljIGlubGluZSBib29sCitlYXJseV9u YW5fcmVzb2x2ZSAoZnJhbmdlICZyLCBjb25zdCBmcmFuZ2UgJm90aGVyKQoreworICBnY2NfY2hl Y2tpbmdfYXNzZXJ0IChyLmdldF9uYW4gKCkueWVzX3AgKCkgfHwgb3RoZXIuZ2V0X25hbiAoKS55 ZXNfcCAoKSk7CisKKyAgLy8gVGhlcmUncyBub3RoaW5nIHRvIGRvIGZvciBib3RoIE5BTnMuCisg IGlmIChyLmdldF9uYW4gKCkueWVzX3AgKCkgPT0gb3RoZXIuZ2V0X25hbiAoKS55ZXNfcCAoKSkK KyAgICByZXR1cm4gZmFsc2U7CisgIC8vIEJ1dCBvbmx5IG9uZSBOQU4gY29tcGxpY2F0ZXMgdGhp bmdzLgorICByLnNldF92YXJ5aW5nIChyLnR5cGUgKCkpOworICByZXR1cm4gdHJ1ZTsKK30KKwog Ym9vbAogZnJhbmdlOjp1bmlvbl8gKGNvbnN0IHZyYW5nZSAmdikKIHsKQEAgLTM4OCwxMyArMzk3 LDM0IEBAIGZyYW5nZTo6dW5pb25fIChjb25zdCB2cmFuZ2UgJnYpCiAgICAgICAqdGhpcyA9IHI7 CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgIC8vID8/IFdlIGNvdWxkIGRvIGJldHRlciBo ZXJlLiAgWzUsNl0gVSBOQU4gc2hvdWxkIGJlIFs1LDZdIHdpdGggdGhlCisgIC8vIE5BTiBtYXli ZSBiaXRzIHNldC4gIEZvciBub3csIHRoaXMgaXMgY29uc2VydmF0aXZlbHkgY29ycmVjdC4KKyAg aWYgKGdldF9uYW4gKCkueWVzX3AgKCkgfHwgci5nZXRfbmFuICgpLnllc19wICgpKQorICAgIHJl dHVybiBlYXJseV9uYW5fcmVzb2x2ZSAoKnRoaXMsIHIpOwogCi0gIGJvb2wgcmV0ID0gbV9wcm9w cy51bmlvbl8gKHIubV9wcm9wcyk7Ci0gIHJldCB8PSBub3JtYWxpemVfa2luZCAoKTsKKyAgYm9v bCBjaGFuZ2VkID0gbV9wcm9wcy51bmlvbl8gKHIubV9wcm9wcyk7CisKKyAgLy8gTm90ZTogZm9y IHRoZSBjb21iaW5hdGlvbiBvZiB6ZXJvcyB0aGF0IGRpZmZlciBpbiBzaWduIHdlIGtlZXAKKyAg Ly8gdGhlIGVuZHBvaW50cyB1bnRvdWNoZWQuICBUaGlzIG1lYW5zIHRoYXQgZm9yIC0wLjAgVSAr MC4wLCB0aGUKKyAgLy8gcmVzdWx0IHdpbGwgYmUgLTAuMC4gIFVsdGltYXRlbHkgdGhpcyBkb2Vz bid0IG1hdHRlciwgYmVjYXVzZSB3ZQorICAvLyBrZWVwIHNpbmdsZXRvbiB6ZXJvcyBhbWJpZ3Vv dXMgdGhyb3VnaG91dCB0byBhdm9pZCBwcm9wYWdhdGluZworICAvLyB0aGVtLiAgU2VlIGZyYW5n ZTo6c2luZ2xldG9uX3AoKS4KKworICBpZiAocmVhbF9sZXNzICgmci5tX21pbiwgJm1fbWluKSkK KyAgICB7CisgICAgICBtX21pbiA9IHIubV9taW47CisgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAg ICB9CisgIGlmIChyZWFsX2xlc3MgKCZtX21heCwgJnIubV9tYXgpKQorICAgIHsKKyAgICAgIG1f bWF4ID0gci5tX21heDsKKyAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgIH0KKyAgY2hhbmdlZCB8 PSBub3JtYWxpemVfa2luZCAoKTsKIAogICBpZiAoZmxhZ19jaGVja2luZykKICAgICB2ZXJpZnlf cmFuZ2UgKCk7Ci0gIHJldHVybiByZXQ7CisgIHJldHVybiBjaGFuZ2VkOwogfQogCiBib29sCkBA IC00MTQsMTMgKzQ0NCwzOCBAQCBmcmFuZ2U6OmludGVyc2VjdCAoY29uc3QgdnJhbmdlICZ2KQog ICAgICAgKnRoaXMgPSByOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICBpZiAoZ2V0X25h biAoKS55ZXNfcCAoKSB8fCByLmdldF9uYW4gKCkueWVzX3AgKCkpCisgICAgcmV0dXJuIGVhcmx5 X25hbl9yZXNvbHZlICgqdGhpcywgcik7CisKKyAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wcy5pbnRl cnNlY3QgKHIubV9wcm9wcyk7CisKKyAgLy8gTm90ZTogZm9yIHRoZSBjb21iaW5hdGlvbiBvZiB6 ZXJvcyB0aGF0IGRpZmZlciBpbiBzaWduIHdlIGtlZXAKKyAgLy8gdGhlIGVuZHBvaW50cyB1bnRv dWNoZWQuICBUaGlzIG1lYW5zIHRoYXQgZm9yIC0wLjAgXiArMC4wLCB0aGUKKyAgLy8gcmVzdWx0 IHdpbGwgYmUgLTAuMC4gIFVsdGltYXRlbHkgdGhpcyBkb2Vzbid0IG1hdHRlciwgYmVjYXVzZSB3 ZQorICAvLyBrZWVwIHNpbmdsZXRvbiB6ZXJvcyBhbWJpZ3VvdXMgdGhyb3VnaG91dCB0byBhdm9p ZCBwcm9wYWdhdGluZworICAvLyB0aGVtLiAgU2VlIGZyYW5nZTo6c2luZ2xldG9uX3AoKS4KIAot ICBib29sIHJldCA9IG1fcHJvcHMuaW50ZXJzZWN0IChyLm1fcHJvcHMpOwotICByZXQgfD0gbm9y bWFsaXplX2tpbmQgKCk7CisgIGlmIChyZWFsX2xlc3MgKCZtX21pbiwgJnIubV9taW4pKQorICAg IHsKKyAgICAgIG1fbWluID0gci5tX21pbjsKKyAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgIH0K KyAgaWYgKHJlYWxfbGVzcyAoJnIubV9tYXgsICZtX21heCkpCisgICAgeworICAgICAgbV9tYXgg PSByLm1fbWF4OworICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgfQorICAvLyBJZiB0aGUgZW5k cG9pbnRzIGFyZSBzd2FwcGVkLCB0aGUgcmFuZ2VzIGFyZSBkaXNqb2ludC4KKyAgaWYgKHJlYWxf bGVzcyAoJm1fbWF4LCAmbV9taW4pKQorICAgIHsKKyAgICAgIHNldF91bmRlZmluZWQgKCk7Cisg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIGNoYW5nZWQgfD0gbm9ybWFsaXplX2tpbmQgKCk7 CiAKICAgaWYgKGZsYWdfY2hlY2tpbmcpCiAgICAgdmVyaWZ5X3JhbmdlICgpOwotICByZXR1cm4g cmV0OworICByZXR1cm4gY2hhbmdlZDsKIH0KIAogZnJhbmdlICYKQEAgLTQyOCw2ICs0ODMsOCBA QCBmcmFuZ2U6Om9wZXJhdG9yPSAoY29uc3QgZnJhbmdlICZzcmMpCiB7CiAgIG1fa2luZCA9IHNy Yy5tX2tpbmQ7CiAgIG1fdHlwZSA9IHNyYy5tX3R5cGU7CisgIG1fbWluID0gc3JjLm1fbWluOwor ICBtX21heCA9IHNyYy5tX21heDsKICAgbV9wcm9wcyA9IHNyYy5tX3Byb3BzOwogCiAgIGlmIChm bGFnX2NoZWNraW5nKQpAQCAtNDQ2LDcgKzUwMyw1OSBAQCBmcmFuZ2U6Om9wZXJhdG9yPT0gKGNv bnN0IGZyYW5nZSAmc3JjKSBjb25zdAogICAgICAgaWYgKHZhcnlpbmdfcCAoKSkKIAlyZXR1cm4g dHlwZXNfY29tcGF0aWJsZV9wIChtX3R5cGUsIHNyYy5tX3R5cGUpOwogCi0gICAgICByZXR1cm4g bV9wcm9wcyA9PSBzcmMubV9wcm9wczsKKyAgICAgIGlmIChtX3Byb3BzLmdldF9uYW4gKCkueWVz X3AgKCkKKwkgIHx8IHNyYy5tX3Byb3BzLmdldF9uYW4gKCkueWVzX3AgKCkpCisJcmV0dXJuIGZh bHNlOworCisgICAgICByZXR1cm4gKHJlYWxfaWRlbnRpY2FsICgmbV9taW4sICZzcmMubV9taW4p CisJICAgICAgJiYgcmVhbF9pZGVudGljYWwgKCZtX21heCwgJnNyYy5tX21heCkKKwkgICAgICAm JiBtX3Byb3BzID09IHNyYy5tX3Byb3BzCisJICAgICAgJiYgdHlwZXNfY29tcGF0aWJsZV9wICht X3R5cGUsIHNyYy5tX3R5cGUpKTsKKyAgICB9CisgIHJldHVybiBmYWxzZTsKK30KKworLy8gUmV0 dXJuIFRSVUUgaWYgcmFuZ2UgY29udGFpbnMgdGhlIFRSRUVfUkVBTF9DU1RfUFRSIGluIENTVC4K KworYm9vbAorZnJhbmdlOjpjb250YWluc19wICh0cmVlIGNzdCkgY29uc3QKK3sKKyAgaWYgKHVu ZGVmaW5lZF9wICgpKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAodmFyeWluZ19wICgpKQor ICAgIHJldHVybiB0cnVlOworCisgIGdjY19jaGVja2luZ19hc3NlcnQgKG1fa2luZCA9PSBWUl9S QU5HRSk7CisKKyAgcmV0dXJuIChyZWFsX2NvbXBhcmUgKEdFX0VYUFIsIFRSRUVfUkVBTF9DU1Rf UFRSIChjc3QpLCAmbV9taW4pCisJICAmJiByZWFsX2NvbXBhcmUgKExFX0VYUFIsIFRSRUVfUkVB TF9DU1RfUFRSIChjc3QpLCAmbV9tYXgpKTsKK30KKworLy8gSWYgcmFuZ2UgaXMgYSBzaW5nbGV0 b24sIHBsYWNlIGl0IGluIFJFU1VMVCBhbmQgcmV0dXJuIFRSVUUuICBJZgorLy8gUkVTVUxUIGlz IE5VTEwsIGp1c3QgcmV0dXJuIFRSVUUuCisvLworLy8gQSBOQU4gY2FuIG5ldmVyIGJlIGEgc2lu Z2xldG9uLCBhbmQgbmVpdGhlciBjYW4gYSAwLjAgaWYgd2UncmUKKy8vIGhvbm9yaW5nIHNpZ25l ZCB6ZXJvcyBiZWNhdXNlIHdlIGhhdmUgbm8gd2F5IG9mIHRlbGxpbmcgd2hpY2ggemVybworLy8g aXQgaXMuCisKK2Jvb2wKK2ZyYW5nZTo6c2luZ2xldG9uX3AgKHRyZWUgKnJlc3VsdCkgY29uc3QK K3sKKyAgaWYgKG1fa2luZCA9PSBWUl9SQU5HRSAmJiByZWFsX2lkZW50aWNhbCAoJm1fbWluLCAm bV9tYXgpKQorICAgIHsKKyAgICAgIC8vIElmIHdlJ3JlIGhvbm9yaW5nIHNpZ25lZCB6ZXJvcywg ZmFpbCBiZWNhdXNlIHdlIGRvbid0IGtub3cKKyAgICAgIC8vIHdoaWNoIHplcm8gd2UgaGF2ZS4g IFRoaXMgYXZvaWRzIHByb3BhZ2F0aW5nIHRoZSB3cm9uZyB6ZXJvLgorICAgICAgaWYgKEhPTk9S X1NJR05FRF9aRVJPUyAobV90eXBlKSAmJiB6ZXJvX3AgKCkpCisJcmV0dXJuIGZhbHNlOworCisg ICAgICAvLyBSZXR1cm4gZmFsc2UgZm9yIGFueSBzaW5nbGV0b24gdGhhdCBtYXkgYmUgYSBOQU4u CisgICAgICBpZiAoSE9OT1JfTkFOUyAobV90eXBlKSAmJiAhZ2V0X25hbiAoKS5ub19wICgpKQor CXJldHVybiBmYWxzZTsKKworICAgICAgaWYgKHJlc3VsdCkKKwkqcmVzdWx0ID0gYnVpbGRfcmVh bCAobV90eXBlLCBtX21pbik7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIHJldHVybiBm YWxzZTsKIH0KQEAgLTQ2NSwxMyArNTc0LDgyIEBAIGZyYW5nZTo6dmVyaWZ5X3JhbmdlICgpCiAg ICAgICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChtX3Byb3BzLnVuZGVmaW5lZF9wICgpKTsKICAgICAg IHJldHVybjsKICAgICB9CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFtX3Byb3BzLnVuZGVmaW5l ZF9wICgpKTsKKwogICBpZiAodmFyeWluZ19wICgpKQogICAgIHsKICAgICAgIGdjY19jaGVja2lu Z19hc3NlcnQgKG1fcHJvcHMudmFyeWluZ19wICgpKTsKICAgICAgIHJldHVybjsKICAgICB9CisK KyAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgaW52ZXJzZSBvZiBhbiBmcmFuZ2UgKHlldCkuCiAg IGdjY19jaGVja2luZ19hc3NlcnQgKG1fa2luZCA9PSBWUl9SQU5HRSk7Ci0gIGdjY19jaGVja2lu Z19hc3NlcnQgKCFtX3Byb3BzLnZhcnlpbmdfcCAoKSAmJiAhbV9wcm9wcy51bmRlZmluZWRfcCAo KSk7CisKKyAgYm9vbCBpc19uYW4gPSByZWFsX2lzbmFuICgmbV9taW4pIHx8IHJlYWxfaXNuYW4g KCZtX21heCk7CisgIGlmIChpc19uYW4pCisgICAgeworICAgICAgLy8gSWYgZWl0aGVyIGlzIGEg TkFOLCBib3RoIG11c3QgYmUgYSBOQU4uCisgICAgICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChyZWFs X2lkZW50aWNhbCAoJm1fbWluLCAmbV9tYXgpKTsKKyAgICAgIGdjY19jaGVja2luZ19hc3NlcnQg KGdldF9uYW4gKCkueWVzX3AgKCkpOworICAgIH0KKyAgZWxzZQorICAgIC8vIE1ha2Ugc3VyZSB3 ZSBkb24ndCBoYXZlIHN3YXBwZWQgcmFuZ2VzLgorICAgIGdjY19jaGVja2luZ19hc3NlcnQgKCFy ZWFsX2xlc3MgKCZtX21heCwgJm1fbWluKSk7CisKKyAgLy8gSWYgd2UncmUgYWJzb2x1dGVseSBz dXJlIHdlIGhhdmUgYSBOQU4sIHRoZSBlbmRwb2ludHMgc2hvdWxkCisgIC8vIHJlZmxlY3QgdGhp cywgb3RoZXJ3aXNlIHdlJ2QgaGF2ZSBtb3JlIHRoYW4gb25lIHdheSB0byByZXByZXNlbnQKKyAg Ly8gYSBOQU4uCisgIGlmIChtX3Byb3BzLmdldF9uYW4gKCkueWVzX3AgKCkpCisgICAgeworICAg ICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAocmVhbF9pc25hbiAoJm1fbWluKSk7CisgICAgICBnY2Nf Y2hlY2tpbmdfYXNzZXJ0IChyZWFsX2lzbmFuICgmbV9tYXgpKTsKKyAgICB9CisKKyAgLy8gSWYg YWxsIHRoZSBwcm9wZXJ0aWVzIGFyZSBjbGVhciwgd2UgYmV0dGVyIG5vdCBzcGFuIHRoZSBlbnRp cmUKKyAgLy8gZG9tYWluLCBiZWNhdXNlIHRoYXQgd291bGQgbWFrZSB1cyB2YXJ5aW5nLgorICBp ZiAobV9wcm9wcy52YXJ5aW5nX3AgKCkpCisgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIXJlYWxf aXNpbmYgKCZtX21pbiwgMSkgfHwgIXJlYWxfaXNpbmYgKCZtX21heCwgMCkpOworfQorCisvLyBX ZSBjYW4ndCBkbyBtdWNoIHdpdGggbm9uemVyb3MgeWV0Lgordm9pZAorZnJhbmdlOjpzZXRfbm9u emVybyAodHJlZSB0eXBlKQoreworICBzZXRfdmFyeWluZyAodHlwZSk7Cit9CisKKy8vIFdlIGNh bid0IGRvIG11Y2ggd2l0aCBub256ZXJvcyB5ZXQuCitib29sCitmcmFuZ2U6Om5vbnplcm9fcCAo KSBjb25zdAoreworICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFNldCByYW5nZSB0byBbKzAuMCwg KzAuMF0uCisKK3ZvaWQKK2ZyYW5nZTo6c2V0X3plcm8gKHRyZWUgdHlwZSkKK3sKKyAgdHJlZSB6 ZXJvID0gYnVpbGRfemVyb19jc3QgKHR5cGUpOworICBzZXQgKHplcm8sIHplcm8pOworfQorCisv LyBSZXR1cm4gVFJVRSBmb3IgYW55IFswLjAsIDAuMF0gcmVnYXJkbGVzcyBvZiBzaWduLgorCiti b29sCitmcmFuZ2U6Onplcm9fcCAoKSBjb25zdAoreworICByZXR1cm4gKG1fa2luZCA9PSBWUl9S QU5HRQorCSAgJiYgcmVhbF9pc3plcm8gKCZtX21pbikKKwkgICYmIHJlYWxfaXN6ZXJvICgmbV9t YXgpKTsKK30KKwordm9pZAorZnJhbmdlOjpzZXRfbm9ubmVnYXRpdmUgKHRyZWUgdHlwZSkKK3sK KyAgdHJlZSB6ZXJvID0gYnVpbGRfemVyb19jc3QgKHR5cGUpOworICB0cmVlIGluZiA9IHZycF92 YWxfbWF4ICh0eXBlKTsKKyAgc2V0ICh6ZXJvLCBpbmYpOwogfQogCiAvLyBIZXJlIHdlIGNvcHkg YmV0d2VlbiBhbnkgdHdvIGlyYW5nZSdzLiAgVGhlIHJhbmdlcyBjYW4gYmUgbGVnYWN5IG9yCkBA IC0zMzA0LDYgKzM0ODIsMTk5IEBAIHJhbmdlX3Rlc3RzX25vbnplcm9fYml0cyAoKQogICBBU1NF UlRfVFJVRSAocjAudmFyeWluZ19wICgpKTsKIH0KIAorLy8gQnVpbGQgYW4gZnJhbmdlIGZyb20g c3RyaW5nIGVuZHBvaW50cy4KKworc3RhdGljIGlubGluZSBmcmFuZ2UKK2ZyYW5nZV9mbG9hdCAo Y29uc3QgY2hhciAqbGIsIGNvbnN0IGNoYXIgKnViLCB0cmVlIHR5cGUgPSBmbG9hdF90eXBlX25v ZGUpCit7CisgIFJFQUxfVkFMVUVfVFlQRSBtaW4sIG1heDsKKyAgZ2NjX2Fzc2VydCAocmVhbF9m cm9tX3N0cmluZyAoJm1pbiwgbGIpID09IDApOworICBnY2NfYXNzZXJ0IChyZWFsX2Zyb21fc3Ry aW5nICgmbWF4LCB1YikgPT0gMCk7CisgIHJldHVybiBmcmFuZ2UgKHR5cGUsIG1pbiwgbWF4KTsK K30KKworLy8gQnVpbGQgYSBOQU4gb2YgdHlwZSBUWVBFLgorCitzdGF0aWMgaW5saW5lIGZyYW5n ZQorZnJhbmdlX25hbiAodHJlZSB0eXBlID0gZmxvYXRfdHlwZV9ub2RlKQoreworICBSRUFMX1ZB TFVFX1RZUEUgcjsKKworICBnY2NfYXNzZXJ0IChyZWFsX25hbiAoJnIsICIiLCAxLCBUWVBFX01P REUgKHR5cGUpKSk7CisgIHJldHVybiBmcmFuZ2UgKHR5cGUsIHIsIHIpOworfQorCitzdGF0aWMg dm9pZAorcmFuZ2VfdGVzdHNfbmFuICgpCit7CisgIGZyYW5nZSByMCwgcjE7CisKKyAgLy8gRXF1 YWwgcmFuZ2VzIGJ1dCB3aXRoIGRpZmZlcmluZyBOQU4gYml0cyBhcmUgbm90IGVxdWFsLgorICBy MSA9IGZyYW5nZV9mbG9hdCAoIjEwIiwgIjEyIik7CisgIHIwID0gcjE7CisgIEFTU0VSVF9FUSAo cjAsIHIxKTsKKyAgcjAuc2V0X25hbiAoZnBfcHJvcDo6Tk8pOworICBBU1NFUlRfTkUgKHIwLCBy MSk7CisgIHIwLnNldF9uYW4gKGZwX3Byb3A6OllFUyk7CisgIEFTU0VSVF9ORSAocjAsIHIxKTsK KyAgcjAuc2V0X25hbiAoZnBfcHJvcDo6VkFSWUlORyk7CisgIEFTU0VSVF9FUSAocjAsIHIxKTsK KworICAvLyBOQU4gcmFuZ2VzIGFyZSBub3QgZXF1YWwgdG8gZWFjaCBvdGhlci4KKyAgcjAgPSBm cmFuZ2VfbmFuICgpOworICByMSA9IHIwOworICBBU1NFUlRfRkFMU0UgKHIwID09IHIxKTsKKyAg QVNTRVJUX0ZBTFNFIChyMCA9PSByMCk7CisgIEFTU0VSVF9UUlVFIChyMCAhPSByMCk7CisKKyAg Ly8gTWFrZSBzdXJlIHRoYXQgY29tYmluaW5nIE5BTiBhbmQgSU5GIGRvZXNuJ3QgZ2l2ZSBhbnkg Y3JhenkgcmVzdWx0cy4KKyAgcjAgPSBmcmFuZ2VfbmFuICgpOworICBBU1NFUlRfVFJVRSAocjAu Z2V0X25hbiAoKS55ZXNfcCAoKSk7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiK0luZiIsICIrSW5m Iik7CisgIHIwLnVuaW9uXyAocjEpOworICAvLyBbSU5GLCBJTkZdIFUgTkFOID0gVkFSWUlORwor ICBBU1NFUlRfVFJVRSAocjAudmFyeWluZ19wICgpKTsKKworICAvLyBbSU5GLCBJTkZdIF4gTkFO ID0gVkFSWUlORworICByMCA9IGZyYW5nZV9uYW4gKCk7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgi K0luZiIsICIrSW5mIik7CisgIHIwLmludGVyc2VjdCAocjEpOworICBBU1NFUlRfVFJVRSAocjAu dmFyeWluZ19wICgpKTsKKworICAvLyBOQU4gXiBOQU4gPSBOQU4KKyAgcjAgPSBmcmFuZ2VfbmFu ICgpOworICByMSA9IGZyYW5nZV9uYW4gKCk7CisgIHIwLmludGVyc2VjdCAocjEpOworICBBU1NF UlRfVFJVRSAocjAuZ2V0X25hbiAoKS55ZXNfcCAoKSk7CisKKyAgLy8gVkFSWUlORyBeIE5BTiA9 IE5BTi4KKyAgcjAgPSBmcmFuZ2VfbmFuICgpOworICByMS5zZXRfdmFyeWluZyAoZmxvYXRfdHlw ZV9ub2RlKTsKKyAgcjAuaW50ZXJzZWN0IChyMSk7CisgIEFTU0VSVF9UUlVFIChyMC5nZXRfbmFu ICgpLnllc19wICgpKTsKK30KKworc3RhdGljIHZvaWQKK3JhbmdlX3Rlc3RzX3NpZ25lZF96ZXJv cyAoKQoreworICB0cmVlIHplcm8gPSBidWlsZF96ZXJvX2NzdCAoZmxvYXRfdHlwZV9ub2RlKTsK KyAgdHJlZSBuZWdfemVybyA9IGZvbGRfYnVpbGQxIChORUdBVEVfRVhQUiwgZmxvYXRfdHlwZV9u b2RlLCB6ZXJvKTsKKyAgZnJhbmdlIHIwLCByMTsKKworICAvLyA/PyBJZiAtMC4wID09ICswLjAs IHRoZW4gYSByYW5nZSBvZiBbLTAuMCwgLTAuMF0gc2hvdWxkCisgIC8vIGNvbnRhaW4gKzAuMCBh bmQgdmljZSB2ZXJzYS4gIFdlIHByb2JhYmx5IG5lZWQgYSBwcm9wZXJ0eSB0bworICAvLyB0cmFj ayBzaWduZWQgemVyb3MgaW4gdGhlIGZyYW5nZSBsaWtlIHdlIGRvIGZvciBOQU4sIHRvCisgIC8v IHByb3Blcmx5IG1vZGVsIGFsbCB0aGlzLgorICByMCA9IGZyYW5nZSAoemVybywgemVybyk7Cisg IHIxID0gZnJhbmdlIChuZWdfemVybywgbmVnX3plcm8pOworICBBU1NFUlRfVFJVRSAocjAuY29u dGFpbnNfcCAoemVybykpOworICBBU1NFUlRfVFJVRSAocjAuY29udGFpbnNfcCAobmVnX3plcm8p KTsKKyAgQVNTRVJUX1RSVUUgKHIxLmNvbnRhaW5zX3AgKHplcm8pKTsKKyAgQVNTRVJUX1RSVUUg KHIxLmNvbnRhaW5zX3AgKG5lZ196ZXJvKSk7Cit9CisKK3N0YXRpYyB2b2lkCityYW5nZV90ZXN0 c19mbG9hdHMgKCkKK3sKKyAgZnJhbmdlIHIwLCByMTsKKworICByYW5nZV90ZXN0c19uYW4gKCk7 CisKKyAgaWYgKEhPTk9SX1NJR05FRF9aRVJPUyAoZmxvYXRfdHlwZV9ub2RlKSkKKyAgICByYW5n ZV90ZXN0c19zaWduZWRfemVyb3MgKCk7CisKKyAgLy8gQSByYW5nZSBvZiBbLUlORiwrSU5GXSBp cyBhY3R1YWxseSBWQVJZSU5HLi4uCisgIHIwID0gZnJhbmdlX2Zsb2F0ICgiLUluZiIsICIrSW5m Iik7CisgIEFTU0VSVF9UUlVFIChyMC52YXJ5aW5nX3AgKCkpOworICAvLyAuLi51bmxlc3MgaXQg aGFzIHNvbWUgc3BlY2lhbCBwcm9wZXJ0eS4uLgorICByMC5zZXRfbmFuIChmcF9wcm9wOjpOTyk7 CisgIEFTU0VSVF9GQUxTRSAocjAudmFyeWluZ19wICgpKTsKKworICAvLyBUaGUgZW5kcG9pbnRz IG9mIGEgVkFSWUlORyBhcmUgKy1JTkYuCisgIFJFQUxfVkFMVUVfVFlQRSBpbmYsIG5pbmY7Cisg IHJlYWxfaW5mICgmaW5mLCAwKTsKKyAgcmVhbF9pbmYgKCZuaW5mLCAxKTsKKyAgcjAuc2V0X3Zh cnlpbmcgKGZsb2F0X3R5cGVfbm9kZSk7CisgIEFTU0VSVF9UUlVFIChyZWFsX2lkZW50aWNhbCAo JnIwLmxvd2VyX2JvdW5kICgpLCAmbmluZikpOworICBBU1NFUlRfVFJVRSAocmVhbF9pZGVudGlj YWwgKCZyMC51cHBlcl9ib3VuZCAoKSwgJmluZikpOworCisgIC8vIFRoZSBtYXhpbXVtIHJlcHJl c2VudGFibGUgcmFuZ2UgZm9yIGEgdHlwZSBpcyBzdGlsbCBhIHN1YnNldCBvZiBWQVJZSU5HLgor ICBSRUFMX1ZBTFVFX1RZUEUgcSwgcjsKKyAgcmVhbF9taW5fcmVwcmVzZW50YWJsZSAoJnEsIGZs b2F0X3R5cGVfbm9kZSk7CisgIHJlYWxfbWF4X3JlcHJlc2VudGFibGUgKCZyLCBmbG9hdF90eXBl X25vZGUpOworICByMCA9IGZyYW5nZSAoZmxvYXRfdHlwZV9ub2RlLCBxLCByKTsKKyAgLy8gcjAg aXMgbm90IGEgdmFyeWluZywgYmVjYXVzZSBpdCBkb2VzIG5vdCBpbmNsdWRlIC1JTkYvK0lORi4K KyAgQVNTRVJUX0ZBTFNFIChyMC52YXJ5aW5nX3AgKCkpOworICAvLyBUaGUgdXBwZXIgYm91bmQg b2YgcjAgbXVzdCBiZSBsZXNzIHRoYW4gK0lORi4KKyAgQVNTRVJUX1RSVUUgKHJlYWxfbGVzcyAo JnIwLnVwcGVyX2JvdW5kICgpLCAmaW5mKSk7CisgIC8vIFRoZSBsb3dlciBib3VuZCBvZiByMCBt dXN0IGJlIGdyZWF0ZXIgdGhhbiAtSU5GLgorICBBU1NFUlRfVFJVRSAocmVhbF9sZXNzICgmbmlu ZiwgJnIwLmxvd2VyX2JvdW5kICgpKSk7CisKKyAgLy8gRm9yIG1vc3QgYXJjaGl0ZWN0dXJlcywg d2hlcmUgZmxvYXQgYW5kIGRvdWJsZSBhcmUgZGlmZmVyZW50CisgIC8vIHNpemVzLCBoYXZpbmcg dGhlIHNhbWUgZW5kcG9pbnRzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhlCisgIC8vIHJh bmdlcyBhcmUgZXF1YWwuCisgIGlmICghdHlwZXNfY29tcGF0aWJsZV9wIChmbG9hdF90eXBlX25v ZGUsIGRvdWJsZV90eXBlX25vZGUpKQorICAgIHsKKyAgICAgIHIwID0gZnJhbmdlX2Zsb2F0ICgi My4wIiwgIjMuMCIsIGZsb2F0X3R5cGVfbm9kZSk7CisgICAgICByMSA9IGZyYW5nZV9mbG9hdCAo IjMuMCIsICIzLjAiLCBkb3VibGVfdHlwZV9ub2RlKTsKKyAgICAgIEFTU0VSVF9ORSAocjAsIHIx KTsKKyAgICB9CisKKyAgLy8gWzMsNV0gVSBbMTAsMTJdID0gWzMsMTJdLgorICByMCA9IGZyYW5n ZV9mbG9hdCAoIjMiLCAiNSIpOworICByMSA9IGZyYW5nZV9mbG9hdCAoIjEwIiwgIjEyIik7Cisg IHIwLnVuaW9uXyAocjEpOworICBBU1NFUlRfRVEgKHIwLCBmcmFuZ2VfZmxvYXQgKCIzIiwgIjEy IikpOworCisgIC8vIFs1LDEwXSBVIFs0LDhdID0gWzQsMTBdCisgIHIwID0gZnJhbmdlX2Zsb2F0 ICgiNSIsICIxMCIpOworICByMSA9IGZyYW5nZV9mbG9hdCAoIjQiLCAiOCIpOworICByMC51bmlv bl8gKHIxKTsKKyAgQVNTRVJUX0VRIChyMCwgZnJhbmdlX2Zsb2F0ICgiNCIsICIxMCIpKTsKKwor ICAvLyBbMyw1XSBVIFs0LDEwXSA9IFszLDEwXQorICByMCA9IGZyYW5nZV9mbG9hdCAoIjMiLCAi NSIpOworICByMSA9IGZyYW5nZV9mbG9hdCAoIjQiLCAiMTAiKTsKKyAgcjAudW5pb25fIChyMSk7 CisgIEFTU0VSVF9FUSAocjAsIGZyYW5nZV9mbG9hdCAoIjMiLCAiMTAiKSk7CisKKyAgLy8gWzQs MTBdIFUgWzUsMTFdID0gWzQsMTFdCisgIHIwID0gZnJhbmdlX2Zsb2F0ICgiNCIsICIxMCIpOwor ICByMSA9IGZyYW5nZV9mbG9hdCAoIjUiLCAiMTEiKTsKKyAgcjAudW5pb25fIChyMSk7CisgIEFT U0VSVF9FUSAocjAsIGZyYW5nZV9mbG9hdCAoIjQiLCAiMTEiKSk7CisKKyAgLy8gWzMsMTJdIF4g WzEwLDEyXSA9IFsxMCwxMl0uCisgIHIwID0gZnJhbmdlX2Zsb2F0ICgiMyIsICIxMiIpOworICBy MSA9IGZyYW5nZV9mbG9hdCAoIjEwIiwgIjEyIik7CisgIHIwLmludGVyc2VjdCAocjEpOworICBB U1NFUlRfRVEgKHIwLCBmcmFuZ2VfZmxvYXQgKCIxMCIsICIxMiIpKTsKKworICAvLyBbMTAsMTJd IF4gWzExLDExXSA9IFsxMSwxMV0KKyAgcjAgPSBmcmFuZ2VfZmxvYXQgKCIxMCIsICIxMiIpOwor ICByMSA9IGZyYW5nZV9mbG9hdCAoIjExIiwgIjExIik7CisgIHIwLmludGVyc2VjdCAocjEpOwor ICBBU1NFUlRfRVEgKHIwLCBmcmFuZ2VfZmxvYXQgKCIxMSIsICIxMSIpKTsKKworICAvLyBbMTAs MjBdIF4gWzUsMTVdID0gWzEwLDE1XQorICByMCA9IGZyYW5nZV9mbG9hdCAoIjEwIiwgIjIwIik7 CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiNSIsICAiMTUiKTsKKyAgcjAuaW50ZXJzZWN0IChyMSk7 CisgIEFTU0VSVF9FUSAocjAsIGZyYW5nZV9mbG9hdCAoIjEwIiwgIjE1IikpOworCisgIC8vIFsx MCwyMF0gXiBbMTUsMjVdID0gWzE1LDIwXQorICByMCA9IGZyYW5nZV9mbG9hdCAoIjEwIiwgIjIw Iik7CisgIHIxID0gZnJhbmdlX2Zsb2F0ICgiMTUiLCAiMjUiKTsKKyAgcjAuaW50ZXJzZWN0IChy MSk7CisgIEFTU0VSVF9FUSAocjAsIGZyYW5nZV9mbG9hdCAoIjE1IiwgIjIwIikpOworCisgIC8v IFsxMCwyMF0gXiBbMjEsMjVdID0gW10KKyAgcjAgPSBmcmFuZ2VfZmxvYXQgKCIxMCIsICIyMCIp OworICByMSA9IGZyYW5nZV9mbG9hdCAoIjIxIiwgIjI1Iik7CisgIHIwLmludGVyc2VjdCAocjEp OworICBBU1NFUlRfVFJVRSAocjAudW5kZWZpbmVkX3AgKCkpOworfQorCiB2b2lkCiByYW5nZV90 ZXN0cyAoKQogewpAQCAtMzMxMiw2ICszNjgzLDcgQEAgcmFuZ2VfdGVzdHMgKCkKICAgcmFuZ2Vf dGVzdHNfaW50X3JhbmdlX21heCAoKTsKICAgcmFuZ2VfdGVzdHNfc3RyaWN0X2VudW0gKCk7CiAg IHJhbmdlX3Rlc3RzX25vbnplcm9fYml0cyAoKTsKKyAgcmFuZ2VfdGVzdHNfZmxvYXRzICgpOwog ICByYW5nZV90ZXN0c19taXNjICgpOwogfQogCmRpZmYgLS1naXQgYS9nY2MvdmFsdWUtcmFuZ2Uu aCBiL2djYy92YWx1ZS1yYW5nZS5oCmluZGV4IGYwMDc1ZDBmYjFhLi40M2IyMzFiOGZlMCAxMDA2 NDQKLS0tIGEvZ2NjL3ZhbHVlLXJhbmdlLmgKKysrIGIvZ2NjL3ZhbHVlLXJhbmdlLmgKQEAgLTMx NCwxNCArMzE0LDEwIEBAIHB1YmxpYzoKICAgYm9vbCBpbnRlcnNlY3QgKGNvbnN0IGZyYW5nZV9w cm9wcyAmb3RoZXIpOwogICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IGZyYW5nZV9wcm9wcyAmb3Ro ZXIpIGNvbnN0OwogICBGUF9QUk9QX0FDQ0VTU09SKG5hbikKLSAgRlBfUFJPUF9BQ0NFU1NPUihp bmYpCi0gIEZQX1BST1BfQUNDRVNTT1IobmluZikKIHByaXZhdGU6CiAgIHVuaW9uIHsKICAgICBz dHJ1Y3QgewogICAgICAgdW5zaWduZWQgY2hhciBuYW4gOiAyOwotICAgICAgdW5zaWduZWQgY2hh ciBpbmYgOiAyOwotICAgICAgdW5zaWduZWQgY2hhciBuaW5mIDogMjsKICAgICB9IGJpdHM7CiAg ICAgdW5zaWduZWQgY2hhciBieXRlczsKICAgfSB1OwpAQCAtMzQ1LDM0ICszNDEsNjIgQEAgY2xh c3MgZnJhbmdlIDogcHVibGljIHZyYW5nZQogcHVibGljOgogICBmcmFuZ2UgKCk7CiAgIGZyYW5n ZSAoY29uc3QgZnJhbmdlICYpOworICBmcmFuZ2UgKHRyZWUsIHRyZWUsIHZhbHVlX3JhbmdlX2tp bmQgPSBWUl9SQU5HRSk7CisgIGZyYW5nZSAodHJlZSB0eXBlLCBjb25zdCBSRUFMX1ZBTFVFX1RZ UEUgJm1pbiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICZtYXgsCisJICB2YWx1ZV9yYW5nZV9raW5k ID0gVlJfUkFOR0UpOwogICBzdGF0aWMgYm9vbCBzdXBwb3J0c19wIChjb25zdF90cmVlIHR5cGUp CiAgIHsKICAgICByZXR1cm4gU0NBTEFSX0ZMT0FUX1RZUEVfUCAodHlwZSk7CiAgIH0KICAgdmly dHVhbCB0cmVlIHR5cGUgKCkgY29uc3Qgb3ZlcnJpZGU7CiAgIHZpcnR1YWwgdm9pZCBzZXQgKHRy ZWUsIHRyZWUsIHZhbHVlX3JhbmdlX2tpbmQgPSBWUl9SQU5HRSkgb3ZlcnJpZGU7CisgIHZvaWQg c2V0ICh0cmVlIHR5cGUsIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmLCBjb25zdCBSRUFMX1ZBTFVF X1RZUEUgJiwKKwkgICAgdmFsdWVfcmFuZ2Vfa2luZCA9IFZSX1JBTkdFKTsKICAgdmlydHVhbCB2 b2lkIHNldF92YXJ5aW5nICh0cmVlIHR5cGUpIG92ZXJyaWRlOwogICB2aXJ0dWFsIHZvaWQgc2V0 X3VuZGVmaW5lZCAoKSBvdmVycmlkZTsKICAgdmlydHVhbCBib29sIHVuaW9uXyAoY29uc3QgdnJh bmdlICYpIG92ZXJyaWRlOwogICB2aXJ0dWFsIGJvb2wgaW50ZXJzZWN0IChjb25zdCB2cmFuZ2Ug Jikgb3ZlcnJpZGU7CisgIHZpcnR1YWwgYm9vbCBjb250YWluc19wICh0cmVlKSBjb25zdCBvdmVy cmlkZTsKKyAgdmlydHVhbCBib29sIHNpbmdsZXRvbl9wICh0cmVlICpyZXN1bHQgPSBOVUxMKSBj b25zdCBvdmVycmlkZTsKICAgdmlydHVhbCBib29sIHN1cHBvcnRzX3R5cGVfcCAoY29uc3RfdHJl ZSB0eXBlKSBjb25zdCBvdmVycmlkZTsKICAgdmlydHVhbCB2b2lkIGFjY2VwdCAoY29uc3QgdnJh bmdlX3Zpc2l0b3IgJnYpIGNvbnN0IG92ZXJyaWRlOworICB2aXJ0dWFsIGJvb2wgemVyb19wICgp IGNvbnN0OworICB2aXJ0dWFsIGJvb2wgbm9uemVyb19wICgpIGNvbnN0OworICB2aXJ0dWFsIHZv aWQgc2V0X25vbnplcm8gKHRyZWUgdHlwZSk7CisgIHZpcnR1YWwgdm9pZCBzZXRfemVybyAodHJl ZSB0eXBlKTsKKyAgdmlydHVhbCB2b2lkIHNldF9ub25uZWdhdGl2ZSAodHJlZSB0eXBlKTsKICAg ZnJhbmdlJiBvcGVyYXRvcj0gKGNvbnN0IGZyYW5nZSAmKTsKICAgYm9vbCBvcGVyYXRvcj09IChj b25zdCBmcmFuZ2UgJikgY29uc3Q7CiAgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgZnJhbmdlICZy KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHIpOyB9CisgIGNvbnN0IFJFQUxfVkFMVUVfVFlQ RSAmbG93ZXJfYm91bmQgKCkgY29uc3Q7CisgIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmdXBwZXJf Ym91bmQgKCkgY29uc3Q7CiAKICAgLy8gRWFjaCBmcF9wcm9wIGNhbiBiZSBhY2Nlc3NlZCB3aXRo IGdldF9QUk9QKCkgYW5kIHNldF9QUk9QKCkuCiAgIEZSQU5HRV9QUk9QX0FDQ0VTU09SKG5hbikK LSAgRlJBTkdFX1BST1BfQUNDRVNTT1IoaW5mKQotICBGUkFOR0VfUFJPUF9BQ0NFU1NPUihuaW5m KQogcHJpdmF0ZToKICAgdm9pZCB2ZXJpZnlfcmFuZ2UgKCk7CiAgIGJvb2wgbm9ybWFsaXplX2tp bmQgKCk7CiAKICAgZnJhbmdlX3Byb3BzIG1fcHJvcHM7CiAgIHRyZWUgbV90eXBlOworICBSRUFM X1ZBTFVFX1RZUEUgbV9taW47CisgIFJFQUxfVkFMVUVfVFlQRSBtX21heDsKIH07CiAKK2lubGlu ZSBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJgorZnJhbmdlOjpsb3dlcl9ib3VuZCAoKSBjb25zdAor eworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghdW5kZWZpbmVkX3AgKCkpOworICByZXR1cm4gbV9t aW47Cit9CisKK2lubGluZSBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJgorZnJhbmdlOjp1cHBlcl9i b3VuZCAoKSBjb25zdAoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghdW5kZWZpbmVkX3AgKCkp OworICByZXR1cm4gbV9tYXg7Cit9CisKIC8vIGlzX2E8PiBhbmQgYXNfYTw+IGltcGxlbWVudGF0 aW9uIGZvciB2cmFuZ2UuCiAKIC8vIEFueXRoaW5nIHdlIGhhdmVuJ3Qgc3BlY2lhbGl6ZWQgaXMg YSBoYXJkIGZhaWwuCkBAIC0xMDUwLDEwICsxMDc0LDkgQEAgdnJwX3ZhbF9taW4gKGNvbnN0X3Ry ZWUgdHlwZSkKICAgICByZXR1cm4gYnVpbGRfemVyb19jc3QgKGNvbnN0X2Nhc3Q8dHJlZT4gKHR5 cGUpKTsKICAgaWYgKGZyYW5nZTo6c3VwcG9ydHNfcCAodHlwZSkpCiAgICAgewotICAgICAgUkVB TF9WQUxVRV9UWVBFIHJlYWwsIHJlYWxfbmluZjsKLSAgICAgIHJlYWxfaW5mICgmcmVhbCk7Ci0g ICAgICByZWFsX25pbmYgPSByZWFsX3ZhbHVlX25lZ2F0ZSAoJnJlYWwpOwotICAgICAgcmV0dXJu IGJ1aWxkX3JlYWwgKGNvbnN0X2Nhc3QgPHRyZWU+ICh0eXBlKSwgcmVhbF9uaW5mKTsKKyAgICAg IFJFQUxfVkFMVUVfVFlQRSBuaW5mOworICAgICAgcmVhbF9pbmYgKCZuaW5mLCAxKTsKKyAgICAg IHJldHVybiBidWlsZF9yZWFsIChjb25zdF9jYXN0IDx0cmVlPiAodHlwZSksIG5pbmYpOwogICAg IH0KICAgcmV0dXJuIE5VTExfVFJFRTsKIH0KQEAgLTEwOTYsNiArMTExOSwyNiBAQCBmcmFuZ2U6 OmZyYW5nZSAoY29uc3QgZnJhbmdlICZzcmMpCiAgICp0aGlzID0gc3JjOwogfQogCisvLyBmcmFu Z2UgY29uc3RydWN0b3IgZnJvbSBSRUFMX1ZBTFVFX1RZUEUgZW5kcG9pbnRzLgorCitpbmxpbmUK K2ZyYW5nZTo6ZnJhbmdlICh0cmVlIHR5cGUsCisJCWNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmbWlu LCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJm1heCwKKwkJdmFsdWVfcmFuZ2Vfa2luZCBraW5kKQor eworICBtX2Rpc2NyaW1pbmF0b3IgPSBWUl9GUkFOR0U7CisgIHNldCAodHlwZSwgbWluLCBtYXgs IGtpbmQpOworfQorCisvLyBmcmFuZ2UgY29uc3RydWN0b3IgZnJvbSB0cmVlcy4KKworaW5saW5l CitmcmFuZ2U6OmZyYW5nZSAodHJlZSBtaW4sIHRyZWUgbWF4LCB2YWx1ZV9yYW5nZV9raW5kIGtp bmQpCit7CisgIG1fZGlzY3JpbWluYXRvciA9IFZSX0ZSQU5HRTsKKyAgc2V0IChtaW4sIG1heCwg a2luZCk7Cit9CisKIGlubGluZSB0cmVlCiBmcmFuZ2U6OnR5cGUgKCkgY29uc3QKIHsKQEAgLTEx MDcsNiArMTE1MCw4IEBAIGZyYW5nZTo6c2V0X3ZhcnlpbmcgKHRyZWUgdHlwZSkKIHsKICAgbV9r aW5kID0gVlJfVkFSWUlORzsKICAgbV90eXBlID0gdHlwZTsKKyAgcmVhbF9pbmYgKCZtX21pbiwg MSk7CisgIHJlYWxfaW5mICgmbV9tYXgsIDApOwogICBtX3Byb3BzLnNldF92YXJ5aW5nICgpOwog fQogCkBAIC0xMTE2LDYgKzExNjEsMjkgQEAgZnJhbmdlOjpzZXRfdW5kZWZpbmVkICgpCiAgIG1f a2luZCA9IFZSX1VOREVGSU5FRDsKICAgbV90eXBlID0gTlVMTDsKICAgbV9wcm9wcy5zZXRfdW5k ZWZpbmVkICgpOworICBtZW1zZXQgKCZtX21pbiwgMCwgc2l6ZW9mIChtX21pbikpOworICBtZW1z ZXQgKCZtX21heCwgMCwgc2l6ZW9mIChtX21heCkpOworfQorCisvLyBTZXQgUiB0byBtYXhpbXVt IHJlcHJlc2VudGFibGUgdmFsdWUgZm9yIFRZUEUuCisKK2lubGluZSB2b2lkCityZWFsX21heF9y ZXByZXNlbnRhYmxlIChSRUFMX1ZBTFVFX1RZUEUgKnIsIHRyZWUgdHlwZSkKK3sKKyAgY2hhciBi dWZbMTI4XTsKKyAgZ2V0X21heF9mbG9hdCAoUkVBTF9NT0RFX0ZPUk1BVCAoVFlQRV9NT0RFICh0 eXBlKSksCisJCSBidWYsIHNpemVvZiAoYnVmKSwgZmFsc2UpOworICBpbnQgcmVzID0gcmVhbF9m cm9tX3N0cmluZyAociwgYnVmKTsKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIXJlcyk7Cit9CisK Ky8vIFNldCBSIHRvIG1pbmltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZSBmb3IgVFlQRS4KKworaW5s aW5lIHZvaWQKK3JlYWxfbWluX3JlcHJlc2VudGFibGUgKFJFQUxfVkFMVUVfVFlQRSAqciwgdHJl ZSB0eXBlKQoreworICByZWFsX21heF9yZXByZXNlbnRhYmxlIChyLCB0eXBlKTsKKyAgKnIgPSBy ZWFsX3ZhbHVlX25lZ2F0ZSAocik7CiB9CiAKICNlbmRpZiAvLyBHQ0NfVkFMVUVfUkFOR0VfSAot LSAKMi4zNy4xCgo= --000000000000865a2605e771fd68 Content-Type: application/x-patch; name="0003-Implement-relational-operators-for-frange-with-endpo.patch" Content-Disposition: attachment; filename="0003-Implement-relational-operators-for-frange-with-endpo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7fvvbhh1 RnJvbSA4YjA2MGUxMDBmNGNkOWNhYmYwYzdjMDI1ZGMzNGQ3ZDhlYjQ2YWMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogVHVlLCAzMCBBdWcgMjAyMiAwODoyMzo1MSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxl bWVudCByZWxhdGlvbmFsIG9wZXJhdG9ycyBmb3IgZnJhbmdlIHdpdGggZW5kcG9pbnRzLgoKVGhp cyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlbGF0aW9uYWwgcmFuZ2Ugb3BlcmF0b3Jz IGZvcgpmcmFuZ2UuICBUaGVzZSBhcmUgdGhlIGNvcmUgb3BlcmF0aW9ucyB0aGF0IHJlcXVpcmUg c3BlY2lmaWMgRlAgZG9tYWluCmtub3dsZWRnZS4KCmdjYy9DaGFuZ2VMb2c6CgoJKiByYW5nZS1v cC1mbG9hdC5jYyAoZmluaXRlX29wZXJhbmRfcCk6IE5ldy4KCShidWlsZF9sZSk6IE5ldy4KCShi dWlsZF9sdCk6IE5ldy4KCShidWlsZF9nZSk6IE5ldy4KCShidWlsZF9ndCk6IE5ldy4KCShmb3Bl cmF0b3JfZXF1YWw6OmZvbGRfcmFuZ2UpOiBOZXcgaW1wbGVtZW50YXRpb24gd2l0aCBlbmRwb2lu dHMuCgkoZm9wZXJhdG9yX2VxdWFsOjpvcDFfcmFuZ2UpOiBTYW1lLgoJKGZvcGVyYXRvcl9ub3Rf ZXF1YWw6OmZvbGRfcmFuZ2UpOiBTYW1lLgoJKGZvcGVyYXRvcl9ub3RfZXF1YWw6Om9wMV9yYW5n ZSk6IFNhbWUuCgkoZm9wZXJhdG9yX2x0Ojpmb2xkX3JhbmdlKTogU2FtZS4KCShmb3BlcmF0b3Jf bHQ6Om9wMV9yYW5nZSk6IFNhbWUuCgkoZm9wZXJhdG9yX2x0OjpvcDJfcmFuZ2UpOiBTYW1lLgoJ KGZvcGVyYXRvcl9sZTo6Zm9sZF9yYW5nZSk6IFNhbWUuCgkoZm9wZXJhdG9yX2xlOjpvcDFfcmFu Z2UpOiBTYW1lLgoJKGZvcGVyYXRvcl9sZTo6b3AyX3JhbmdlKTogU2FtZS4KCShmb3BlcmF0b3Jf Z3Q6OmZvbGRfcmFuZ2UpOiBTYW1lLgoJKGZvcGVyYXRvcl9ndDo6b3AxX3JhbmdlKTogU2FtZS4K CShmb3BlcmF0b3JfZ3Q6Om9wMl9yYW5nZSk6IFNhbWUuCgkoZm9wZXJhdG9yX2dlOjpmb2xkX3Jh bmdlKTogU2FtZS4KCShmb3BlcmF0b3JfZ2U6Om9wMV9yYW5nZSk6IFNhbWUuCgkoZm9wZXJhdG9y X2dlOjpvcDJfcmFuZ2UpOiBTYW1lLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJKiBnY2Mu ZGcvdHJlZS1zc2EvcmVjaXAtMy5jOiBBdm9pZCBwcmVtYXR1cmUgb3B0aW1pemF0aW9uIHNvIHRl c3QKCWhhcyBhIGNoYW5jZSB0byBzdWNjZWVkLgotLS0KIGdjYy9yYW5nZS1vcC1mbG9hdC5jYyAg ICAgICAgICAgICAgICAgICB8IDM1OCArKysrKysrKysrKysrKysrKysrKy0tLS0KIGdjYy90ZXN0 c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3JlY2lwLTMuYyB8ICAgNSArCiAyIGZpbGVzIGNoYW5nZWQs IDMwOSBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvcmFu Z2Utb3AtZmxvYXQuY2MgYi9nY2MvcmFuZ2Utb3AtZmxvYXQuY2MKaW5kZXggY2E0MTEzNmY0Y2Qu LmQ4NTkzMDlmODYzIDEwMDY0NAotLS0gYS9nY2MvcmFuZ2Utb3AtZmxvYXQuY2MKKysrIGIvZ2Nj L3JhbmdlLW9wLWZsb2F0LmNjCkBAIC0xNjIsNiArMTYyLDE0IEBAIGZyYW5nZV9zZXRfbmFuIChm cmFuZ2UgJnIsIHRyZWUgdHlwZSkKICAgci5zZXQgKHR5cGUsIHJ2LCBydik7CiB9CiAKKy8vIFJl dHVybiBUUlVFIGlmIE9QMSBpcyBrbm93biB0byBiZSBmcmVlIG9mIE5BTnMuCisKK3N0YXRpYyBp bmxpbmUgYm9vbAorZmluaXRlX29wZXJhbmRfcCAoY29uc3QgZnJhbmdlICZvcDEpCit7CisgIHJl dHVybiBmbGFnX2Zpbml0ZV9tYXRoX29ubHkgfHwgb3AxLmdldF9uYW4gKCkubm9fcCAoKTsKK30K KwogLy8gUmV0dXJuIFRSVUUgaWYgT1AxIGFuZCBPUDIgYXJlIGtub3duIHRvIGJlIGZyZWUgb2Yg TkFOcy4KIAogc3RhdGljIGlubGluZSBib29sCkBAIC0yNDAsNiArMjQ4LDQ1IEBAIGRlZmF1bHRf ZnJlbG9wX2ZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogICByZXR1cm4gdHJ1ZTsK IH0KIAorLy8gKFggPD0gVkFMKSBwcm9kdWNlcyB0aGUgcmFuZ2Ugb2YgW01JTiwgVkFMXS4KKwor c3RhdGljIHZvaWQKK2J1aWxkX2xlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwgY29uc3QgUkVBTF9W QUxVRV9UWVBFICZ2YWwpCit7CisgIFJFQUxfVkFMVUVfVFlQRSBtaW47CisgIHJlYWxfaW5mICgm bWluLCAxKTsKKyAgci5zZXQgKHR5cGUsIG1pbiwgdmFsKTsKK30KKworLy8gKFggPCBWQUwpIHBy b2R1Y2VzIHRoZSByYW5nZSBvZiBbTUlOLCBWQUwpLgorCitzdGF0aWMgdm9pZAorYnVpbGRfbHQg KGZyYW5nZSAmciwgdHJlZSB0eXBlLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJnZhbCkKK3sKKyAg Ly8gSGlqYWNrIExFIGJlY2F1c2Ugd2Ugb25seSBzdXBwb3J0IGNsb3NlZCBpbnRlcnZhbHMuCisg IGJ1aWxkX2xlIChyLCB0eXBlLCB2YWwpOworfQorCisvLyAoWCA+PSBWQUwpIHByb2R1Y2VzIHRo ZSByYW5nZSBvZiBbVkFMLCBNQVhdLgorCitzdGF0aWMgdm9pZAorYnVpbGRfZ2UgKGZyYW5nZSAm ciwgdHJlZSB0eXBlLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJnZhbCkKK3sKKyAgUkVBTF9WQUxV RV9UWVBFIG1heDsKKyAgcmVhbF9pbmYgKCZtYXgsIDApOworICByLnNldCAodHlwZSwgdmFsLCBt YXgpOworfQorCisvLyAoWCA+IFZBTCkgcHJvZHVjZXMgdGhlIHJhbmdlIG9mIChWQUwsIE1BWF0u CisKK3N0YXRpYyB2b2lkCitidWlsZF9ndCAoZnJhbmdlICZyLCB0cmVlIHR5cGUsIGNvbnN0IFJF QUxfVkFMVUVfVFlQRSAmdmFsKQoreworICAvLyBIaWphY2sgR0UgYmVjYXVzZSB3ZSBvbmx5IHN1 cHBvcnQgY2xvc2VkIGludGVydmFscy4KKyAgYnVpbGRfZ2UgKHIsIHR5cGUsIHZhbCk7Cit9CisK KwogY2xhc3MgZm9wZXJhdG9yX2lkZW50aXR5IDogcHVibGljIHJhbmdlX29wZXJhdG9yX2Zsb2F0 CiB7CiAgIHVzaW5nIHJhbmdlX29wZXJhdG9yX2Zsb2F0Ojpmb2xkX3JhbmdlOwpAQCAtMjcwLDEw ICszMTcsNyBAQCBjbGFzcyBmb3BlcmF0b3JfZXF1YWwgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3Jf ZmxvYXQKIAogICBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgICBj b25zdCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIsCi0JCSAgIHJlbGF0aW9uX2tpbmQg cmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZQotICB7Ci0gICAgcmV0dXJuIGRlZmF1bHRfZnJlbG9w X2ZvbGRfcmFuZ2UgKHIsIHR5cGUsIG9wMSwgb3AyLCByZWwsIFZSRUxfRVEpOwotICB9CisJCSAg IHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKICAgcmVsYXRpb25fa2lu ZCBvcDFfb3AyX3JlbGF0aW9uIChjb25zdCBpcmFuZ2UgJmxocykgY29uc3QgZmluYWwgb3ZlcnJp ZGUKICAgewogICAgIHJldHVybiBlcXVhbF9vcDFfb3AyX3JlbGF0aW9uIChsaHMpOwpAQCAtMjg5 LDYgKzMzMywzOSBAQCBjbGFzcyBmb3BlcmF0b3JfZXF1YWwgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0 b3JfZmxvYXQKICAgfQogfSBmb3BfZXF1YWw7CiAKK2Jvb2wKK2ZvcGVyYXRvcl9lcXVhbDo6Zm9s ZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCisJCQkgICAgIGNvbnN0IGZyYW5nZSAmb3Ax LCBjb25zdCBmcmFuZ2UgJm9wMiwKKwkJCSAgICAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0Cit7 CisgIGlmIChmcmVsb3BfZWFybHlfcmVzb2x2ZSAociwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJF TF9FUSkpCisgICAgcmV0dXJuIHRydWU7CisKKyAgLy8gV2UgY2FuIGJlIHN1cmUgdGhlIHZhbHVl cyBhcmUgYWx3YXlzIGVxdWFsIG9yIG5vdCBpZiBib3RoIHJhbmdlcworICAvLyBjb25zaXN0IG9m IGEgc2luZ2xlIHZhbHVlLCBhbmQgdGhlbiBjb21wYXJlIHRoZW0uCisgIGlmIChvcDEuc2luZ2xl dG9uX3AgKCkgJiYgb3AyLnNpbmdsZXRvbl9wICgpKQorICAgIHsKKyAgICAgIGlmIChvcDEgPT0g b3AyKQorCXIgPSByYW5nZV90cnVlICh0eXBlKTsKKyAgICAgIGVsc2UKKwlyID0gcmFuZ2VfZmFs c2UgKHR5cGUpOworICAgIH0KKyAgZWxzZSBpZiAoZmluaXRlX29wZXJhbmRzX3AgKG9wMSwgb3Ay KSkKKyAgICB7CisgICAgICAvLyBJZiByYW5nZXMgZG8gbm90IGludGVyc2VjdCwgd2Uga25vdyB0 aGUgcmFuZ2UgaXMgbm90IGVxdWFsLAorICAgICAgLy8gb3RoZXJ3aXNlIHdlIGRvbid0IGtub3cg YW55dGhpbmcgZm9yIHN1cmUuCisgICAgICBmcmFuZ2UgdG1wID0gb3AxOworICAgICAgdG1wLmlu dGVyc2VjdCAob3AyKTsKKyAgICAgIGlmICh0bXAudW5kZWZpbmVkX3AgKCkpCisJciA9IHJhbmdl X2ZhbHNlICh0eXBlKTsKKyAgICAgIGVsc2UKKwlyID0gcmFuZ2VfdHJ1ZV9hbmRfZmFsc2UgKHR5 cGUpOworICAgIH0KKyAgZWxzZQorICAgIHIgPSByYW5nZV90cnVlX2FuZF9mYWxzZSAodHlwZSk7 CisgIHJldHVybiB0cnVlOworfQorCiBib29sCiBmb3BlcmF0b3JfZXF1YWw6Om9wMV9yYW5nZSAo ZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICAgY29uc3QgaXJhbmdlICZsaHMsCkBAIC0zMDks NiArMzg2LDE0IEBAIGZvcGVyYXRvcl9lcXVhbDo6b3AxX3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUg dHlwZSwKICAgICAgIC8vIFRoZSBGQUxTRSBzaWRlIG9mIG9wMSA9PSBvcDEgaW1wbGllcyBvcDEg aXMgYSBOQU4uCiAgICAgICBpZiAocmVsID09IFZSRUxfRVEpCiAJZnJhbmdlX3NldF9uYW4gKHIs IHR5cGUpOworICAgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBmYWxzZSwgdGhlIG9ubHkgdGltZSB3 ZSBrbm93IGFueXRoaW5nIGlzCisgICAgICAvLyBpZiBPUDIgaXMgYSBjb25zdGFudC4KKyAgICAg IGVsc2UgaWYgKG9wMi5zaW5nbGV0b25fcCAoKQorCSAgICAgICB8fCAoZmluaXRlX29wZXJhbmRf cCAob3AyKSAmJiBvcDIuemVyb19wICgpKSkKKwl7CisJICBSRUFMX1ZBTFVFX1RZUEUgdG1wID0g b3AyLmxvd2VyX2JvdW5kICgpOworCSAgci5zZXQgKHR5cGUsIHRtcCwgdG1wLCBWUl9BTlRJX1JB TkdFKTsKKwl9CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CkBAIC0zMjQsMTAgKzQwOSw3 IEBAIGNsYXNzIGZvcGVyYXRvcl9ub3RfZXF1YWwgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3JfZmxv YXQKIAogICBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgICBjb25z dCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIsCi0JCSAgIHJlbGF0aW9uX2tpbmQgcmVs KSBjb25zdCBmaW5hbCBvdmVycmlkZQotICB7Ci0gICAgcmV0dXJuIGRlZmF1bHRfZnJlbG9wX2Zv bGRfcmFuZ2UgKHIsIHR5cGUsIG9wMSwgb3AyLCByZWwsIFZSRUxfTkUpOwotICB9CisJCSAgIHJl bGF0aW9uX2tpbmQgcmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKICAgcmVsYXRpb25fa2luZCBv cDFfb3AyX3JlbGF0aW9uIChjb25zdCBpcmFuZ2UgJmxocykgY29uc3QgZmluYWwgb3ZlcnJpZGUK ICAgewogICAgIHJldHVybiBub3RfZXF1YWxfb3AxX29wMl9yZWxhdGlvbiAobGhzKTsKQEAgLTMz Nyw2ICs0MTksMzkgQEAgY2xhc3MgZm9wZXJhdG9yX25vdF9lcXVhbCA6IHB1YmxpYyByYW5nZV9v cGVyYXRvcl9mbG9hdAogCQkgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdCBmaW5hbCBvdmVycmlk ZTsKIH0gZm9wX25vdF9lcXVhbDsKIAorYm9vbAorZm9wZXJhdG9yX25vdF9lcXVhbDo6Zm9sZF9y YW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCisJCQkJIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25z dCBmcmFuZ2UgJm9wMiwKKwkJCQkgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0Cit7CisgIGlmIChm cmVsb3BfZWFybHlfcmVzb2x2ZSAociwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJFTF9ORSkpCisg ICAgcmV0dXJuIHRydWU7CisKKyAgLy8gV2UgY2FuIGJlIHN1cmUgdGhlIHZhbHVlcyBhcmUgYWx3 YXlzIGVxdWFsIG9yIG5vdCBpZiBib3RoIHJhbmdlcworICAvLyBjb25zaXN0IG9mIGEgc2luZ2xl IHZhbHVlLCBhbmQgdGhlbiBjb21wYXJlIHRoZW0uCisgIGlmIChvcDEuc2luZ2xldG9uX3AgKCkg JiYgb3AyLnNpbmdsZXRvbl9wICgpKQorICAgIHsKKyAgICAgIGlmIChvcDEgIT0gb3AyKQorCXIg PSByYW5nZV90cnVlICh0eXBlKTsKKyAgICAgIGVsc2UKKwlyID0gcmFuZ2VfZmFsc2UgKHR5cGUp OworICAgIH0KKyAgZWxzZSBpZiAoZmluaXRlX29wZXJhbmRzX3AgKG9wMSwgb3AyKSkKKyAgICB7 CisgICAgICAvLyBJZiByYW5nZXMgZG8gbm90IGludGVyc2VjdCwgd2Uga25vdyB0aGUgcmFuZ2Ug aXMgbm90IGVxdWFsLAorICAgICAgLy8gb3RoZXJ3aXNlIHdlIGRvbid0IGtub3cgYW55dGhpbmcg Zm9yIHN1cmUuCisgICAgICBmcmFuZ2UgdG1wID0gb3AxOworICAgICAgdG1wLmludGVyc2VjdCAo b3AyKTsKKyAgICAgIGlmICh0bXAudW5kZWZpbmVkX3AgKCkpCisJciA9IHJhbmdlX3RydWUgKHR5 cGUpOworICAgICAgZWxzZQorCXIgPSByYW5nZV90cnVlX2FuZF9mYWxzZSAodHlwZSk7CisgICAg fQorICBlbHNlCisgICAgciA9IHJhbmdlX3RydWVfYW5kX2ZhbHNlICh0eXBlKTsKKyAgcmV0dXJu IHRydWU7Cit9CisKIGJvb2wKIGZvcGVyYXRvcl9ub3RfZXF1YWw6Om9wMV9yYW5nZSAoZnJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCQkJY29uc3QgaXJhbmdlICZsaHMsCkBAIC0zNDYsMTEgKzQ2MSwy MyBAQCBmb3BlcmF0b3Jfbm90X2VxdWFsOjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBl LAogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKICAgICBj YXNlIEJSU19UUlVFOgotICAgICAgci5zZXRfdmFyeWluZyAodHlwZSk7CisgICAgICAvLyBJZiB0 aGUgcmVzdWx0IGlzIHRydWUsIHRoZSBvbmx5IHRpbWUgd2Uga25vdyBhbnl0aGluZyBpcyBpZgor ICAgICAgLy8gT1AyIGlzIGEgY29uc3RhbnQuCisgICAgICBpZiAob3AyLnNpbmdsZXRvbl9wICgp KQorCXsKKwkgIC8vIFRoaXMgaXMgY29ycmVjdCBldmVuIGlmIG9wMSBpcyBOQU4sIGJlY2F1c2Ug dGhlIGZvbGxvd2luZworCSAgLy8gcmFuZ2Ugd291bGQgYmUgflt0bXAsIHRtcF0gd2l0aCB0aGUg TkFOIHByb3BlcnR5IHNldCB0bworCSAgLy8gbWF5YmUgKFZBUllJTkcpLgorCSAgUkVBTF9WQUxV RV9UWVBFIHRtcCA9IG9wMi5sb3dlcl9ib3VuZCAoKTsKKwkgIHIuc2V0ICh0eXBlLCB0bXAsIHRt cCwgVlJfQU5USV9SQU5HRSk7CisJfQorICAgICAgZWxzZQorCXIuc2V0X3ZhcnlpbmcgKHR5cGUp OwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJSU19GQUxTRToKLSAgICAgIHIuc2V0X3Zhcnlp bmcgKHR5cGUpOworICAgICAgLy8gSWYgaXQncyBmYWxzZSwgdGhlIHJlc3VsdCBpcyB0aGUgc2Ft ZSBhcyBPUDIuCisgICAgICByID0gb3AyOwogICAgICAgLy8gVGhlIEZBTFNFIHNpZGUgb2Ygb3Ax ICE9IG9wMiBpbXBsaWVzIG9wMSBpcyAhTkFOLgogICAgICAgci5zZXRfbmFuIChmcF9wcm9wOjpO Tyk7CiAgICAgICBicmVhazsKQEAgLTM2OSwxMCArNDk2LDcgQEAgY2xhc3MgZm9wZXJhdG9yX2x0 IDogcHVibGljIHJhbmdlX29wZXJhdG9yX2Zsb2F0CiAKICAgYm9vbCBmb2xkX3JhbmdlIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKIAkJICAgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAm b3AyLAotCQkgICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QgZmluYWwgb3ZlcnJpZGUKLSAgewot ICAgIHJldHVybiBkZWZhdWx0X2ZyZWxvcF9mb2xkX3JhbmdlIChyLCB0eXBlLCBvcDEsIG9wMiwg cmVsLCBWUkVMX0xUKTsKLSAgfQorCQkgICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QgZmluYWwg b3ZlcnJpZGU7CiAgIHJlbGF0aW9uX2tpbmQgb3AxX29wMl9yZWxhdGlvbiAoY29uc3QgaXJhbmdl ICZsaHMpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCiAgIHsKICAgICByZXR1cm4gbHRfb3AxX29wMl9y ZWxhdGlvbiAobGhzKTsKQEAgLTM4NSw2ICs1MDksMzEgQEAgY2xhc3MgZm9wZXJhdG9yX2x0IDog cHVibGljIHJhbmdlX29wZXJhdG9yX2Zsb2F0CiAJCSAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0 IGZpbmFsIG92ZXJyaWRlOwogfSBmb3BfbHQ7CiAKK2Jvb2wKK2ZvcGVyYXRvcl9sdDo6Zm9sZF9y YW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCisJCQkgIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25z dCBmcmFuZ2UgJm9wMiwKKwkJCSAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0Cit7CisgIGlmIChm cmVsb3BfZWFybHlfcmVzb2x2ZSAociwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJFTF9MVCkpCisg ICAgcmV0dXJuIHRydWU7CisKKyAgaWYgKGZpbml0ZV9vcGVyYW5kc19wIChvcDEsIG9wMikpCisg ICAgeworICAgICAgaWYgKHJlYWxfbGVzcyAoJm9wMS51cHBlcl9ib3VuZCAoKSwgJm9wMi5sb3dl cl9ib3VuZCAoKSkpCisJciA9IHJhbmdlX3RydWUgKHR5cGUpOworICAgICAgZWxzZSBpZiAoZmlu aXRlX29wZXJhbmRzX3AgKG9wMSwgb3AyKQorCSAgICAgICAmJiAhcmVhbF9sZXNzICgmb3AxLmxv d2VyX2JvdW5kICgpLCAmb3AyLnVwcGVyX2JvdW5kICgpKSkKKwlyID0gcmFuZ2VfZmFsc2UgKHR5 cGUpOworICAgICAgZWxzZQorCXIgPSByYW5nZV90cnVlX2FuZF9mYWxzZSAodHlwZSk7CisgICAg fQorICBlbHNlIGlmIChvcDEuZ2V0X25hbiAoKS55ZXNfcCAoKSB8fCBvcDIuZ2V0X25hbiAoKS55 ZXNfcCAoKSkKKyAgICByID0gcmFuZ2VfZmFsc2UgKHR5cGUpOworICBlbHNlCisgICAgciA9IHJh bmdlX3RydWVfYW5kX2ZhbHNlICh0eXBlKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wKIGZv cGVyYXRvcl9sdDo6b3AxX3JhbmdlIChmcmFuZ2UgJnIsCiAJCQkgdHJlZSB0eXBlLApAQCAtMzk1 LDE1ICs1NDQsMTQgQEAgZm9wZXJhdG9yX2x0OjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwKICAgc3dp dGNoIChnZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CiAgICAgY2FzZSBCUlNf VFJVRToKLSAgICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUpOwotICAgICAgLy8gVGhlIFRSVUUgc2lk ZSBvZiBvcDEgPCBvcDIgaW1wbGllcyBvcDEgaXMgIU5BTiBhbmQgIUlORi4KKyAgICAgIGJ1aWxk X2x0IChyLCB0eXBlLCBvcDIudXBwZXJfYm91bmQgKCkpOwogICAgICAgci5zZXRfbmFuIChmcF9w cm9wOjpOTyk7CiAgICAgICAvLyB4IDwgeSBpbXBsaWVzIHggaXMgbm90ICtJTkYuCiAgICAgICBm cmFuZ2VfZHJvcF9pbmYgKHIsIHR5cGUpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJSU19G QUxTRToKLSAgICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUpOworICAgICAgYnVpbGRfZ2UgKHIsIHR5 cGUsIG9wMi5sb3dlcl9ib3VuZCAoKSk7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CkBA IC00MjIsMTUgKzU3MCwxNCBAQCBmb3BlcmF0b3JfbHQ6Om9wMl9yYW5nZSAoZnJhbmdlICZyLAog ICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKICAgICBjYXNl IEJSU19UUlVFOgotICAgICAgci5zZXRfdmFyeWluZyAodHlwZSk7Ci0gICAgICAvLyBUaGUgVFJV RSBzaWRlIG9mIG9wMSA8IG9wMiBpbXBsaWVzIG9wMiBpcyAhTkFOIGFuZCAhTklORi4KKyAgICAg IGJ1aWxkX2d0IChyLCB0eXBlLCBvcDEubG93ZXJfYm91bmQgKCkpOwogICAgICAgci5zZXRfbmFu IChmcF9wcm9wOjpOTyk7CiAgICAgICAvLyB4IDwgeSBpbXBsaWVzIHkgaXMgbm90IC1JTkYuCiAg ICAgICBmcmFuZ2VfZHJvcF9uaW5mIChyLCB0eXBlKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2Fz ZSBCUlNfRkFMU0U6Ci0gICAgICByLnNldF92YXJ5aW5nICh0eXBlKTsKKyAgICAgIGJ1aWxkX2xl IChyLCB0eXBlLCBvcDEudXBwZXJfYm91bmQgKCkpOwogICAgICAgYnJlYWs7CiAKICAgICBkZWZh dWx0OgpAQCAtNDQ3LDEwICs1OTQsNyBAQCBjbGFzcyBmb3BlcmF0b3JfbGUgOiBwdWJsaWMgcmFu Z2Vfb3BlcmF0b3JfZmxvYXQKIAogICBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0 eXBlLAogCQkgICBjb25zdCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIsCi0JCSAgIHJl bGF0aW9uX2tpbmQgcmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZQotICB7Ci0gICAgcmV0dXJuIGRl ZmF1bHRfZnJlbG9wX2ZvbGRfcmFuZ2UgKHIsIHR5cGUsIG9wMSwgb3AyLCByZWwsIFZSRUxfTEUp OwotICB9CisJCSAgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKICAg cmVsYXRpb25fa2luZCBvcDFfb3AyX3JlbGF0aW9uIChjb25zdCBpcmFuZ2UgJmxocykgY29uc3Qg ZmluYWwgb3ZlcnJpZGUKICAgewogICAgIHJldHVybiBsZV9vcDFfb3AyX3JlbGF0aW9uIChsaHMp OwpAQCAtNDYwLDI5ICs2MDQsNzQgQEAgY2xhc3MgZm9wZXJhdG9yX2xlIDogcHVibGljIHJhbmdl X29wZXJhdG9yX2Zsb2F0CiAJCSAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0IGZpbmFsIG92ZXJy aWRlOwogICBib29sIG9wMl9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgY29uc3Qg aXJhbmdlICZsaHMsIGNvbnN0IGZyYW5nZSAmb3AxLAotCQkgIHJlbGF0aW9uX2tpbmQgcmVsKSBj b25zdCBmaW5hbCBvdmVycmlkZQotICB7Ci0gICAgcmV0dXJuIG9wMV9yYW5nZSAociwgdHlwZSwg bGhzLCBvcDEsIHJlbCk7Ci0gIH0KKwkJICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QgZmluYWwg b3ZlcnJpZGU7CiB9IGZvcF9sZTsKIAorYm9vbAorZm9wZXJhdG9yX2xlOjpmb2xkX3JhbmdlIChp cmFuZ2UgJnIsIHRyZWUgdHlwZSwKKwkJCSAgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5n ZSAmb3AyLAorCQkJICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QKK3sKKyAgaWYgKGZyZWxvcF9l YXJseV9yZXNvbHZlIChyLCB0eXBlLCBvcDEsIG9wMiwgcmVsLCBWUkVMX0xFKSkKKyAgICByZXR1 cm4gdHJ1ZTsKKworICBpZiAoZmluaXRlX29wZXJhbmRzX3AgKG9wMSwgb3AyKSkKKyAgICB7Cisg ICAgICBpZiAocmVhbF9jb21wYXJlIChMRV9FWFBSLCAmb3AxLnVwcGVyX2JvdW5kICgpLCAmb3Ay Lmxvd2VyX2JvdW5kICgpKSkKKwlyID0gcmFuZ2VfdHJ1ZSAodHlwZSk7CisgICAgICBlbHNlIGlm IChmaW5pdGVfb3BlcmFuZHNfcCAob3AxLCBvcDIpCisJICAgICAgICYmICFyZWFsX2NvbXBhcmUg KExFX0VYUFIsICZvcDEubG93ZXJfYm91bmQgKCksICZvcDIudXBwZXJfYm91bmQgKCkpKQorCXIg PSByYW5nZV9mYWxzZSAodHlwZSk7CisgICAgICBlbHNlCisJciA9IHJhbmdlX3RydWVfYW5kX2Zh bHNlICh0eXBlKTsKKyAgICB9CisgIGVsc2UgaWYgKG9wMS5nZXRfbmFuICgpLnllc19wICgpIHx8 IG9wMi5nZXRfbmFuICgpLnllc19wICgpKQorICAgIHIgPSByYW5nZV9mYWxzZSAodHlwZSk7Cisg IGVsc2UKKyAgICByID0gcmFuZ2VfdHJ1ZV9hbmRfZmFsc2UgKHR5cGUpOworICByZXR1cm4gdHJ1 ZTsKK30KKwogYm9vbAogZm9wZXJhdG9yX2xlOjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwKIAkJCSB0 cmVlIHR5cGUsCiAJCQkgY29uc3QgaXJhbmdlICZsaHMsCi0JCQkgY29uc3QgZnJhbmdlICZvcDIg QVRUUklCVVRFX1VOVVNFRCwKKwkJCSBjb25zdCBmcmFuZ2UgJm9wMiwKIAkJCSByZWxhdGlvbl9r aW5kKSBjb25zdAogewogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQog ICAgIHsKICAgICBjYXNlIEJSU19UUlVFOgotICAgICAgci5zZXRfdmFyeWluZyAodHlwZSk7Ci0g ICAgICAvLyBUaGUgVFJVRSBzaWRlIG9mIG9wMSA8PSBvcDIgaW1wbGllcyBvcDEgaXMgIU5BTi4K KyAgICAgIGJ1aWxkX2xlIChyLCB0eXBlLCBvcDIudXBwZXJfYm91bmQgKCkpOwogICAgICAgci5z ZXRfbmFuIChmcF9wcm9wOjpOTyk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQlJTX0ZBTFNF OgotICAgICAgci5zZXRfdmFyeWluZyAodHlwZSk7CisgICAgICBidWlsZF9ndCAociwgdHlwZSwg b3AyLmxvd2VyX2JvdW5kICgpKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAg IGJyZWFrOworICAgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wKK2ZvcGVyYXRvcl9sZTo6 b3AyX3JhbmdlIChmcmFuZ2UgJnIsCisJCQkgdHJlZSB0eXBlLAorCQkJIGNvbnN0IGlyYW5nZSAm bGhzLAorCQkJIGNvbnN0IGZyYW5nZSAmb3AxLAorCQkJIHJlbGF0aW9uX2tpbmQpIGNvbnN0Cit7 CisgIHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkpCisgICAgeworICAgIGNh c2UgQlJTX1RSVUU6CisgICAgICBidWlsZF9nZSAociwgdHlwZSwgb3AxLmxvd2VyX2JvdW5kICgp KTsKKyAgICAgIHIuc2V0X25hbiAoZnBfcHJvcDo6Tk8pOworICAgICAgYnJlYWs7CisKKyAgICBj YXNlIEJSU19GQUxTRToKKyAgICAgIGJ1aWxkX2x0IChyLCB0eXBlLCBvcDEudXBwZXJfYm91bmQg KCkpOwogICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgpAQCAtNDk5LDEwICs2ODgsNyBAQCBj bGFzcyBmb3BlcmF0b3JfZ3QgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQKIAogICBib29s IGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgICBjb25zdCBmcmFuZ2UgJm9w MSwgY29uc3QgZnJhbmdlICZvcDIsCi0JCSAgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdCBmaW5h bCBvdmVycmlkZQotICB7Ci0gICAgcmV0dXJuIGRlZmF1bHRfZnJlbG9wX2ZvbGRfcmFuZ2UgKHIs IHR5cGUsIG9wMSwgb3AyLCByZWwsIFZSRUxfR1QpOwotICB9CisJCSAgIHJlbGF0aW9uX2tpbmQg cmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKICAgcmVsYXRpb25fa2luZCBvcDFfb3AyX3JlbGF0 aW9uIChjb25zdCBpcmFuZ2UgJmxocykgY29uc3QgZmluYWwgb3ZlcnJpZGUKICAgewogICAgIHJl dHVybiBndF9vcDFfb3AyX3JlbGF0aW9uIChsaHMpOwpAQCAtNTE1LDYgKzcwMSwzMSBAQCBjbGFz cyBmb3BlcmF0b3JfZ3QgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQKIAkJICByZWxhdGlv bl9raW5kIHJlbCkgY29uc3QgZmluYWwgb3ZlcnJpZGU7CiB9IGZvcF9ndDsKIAorYm9vbAorZm9w ZXJhdG9yX2d0Ojpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKKwkJCSAgY29uc3Qg ZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAmb3AyLAorCQkJICByZWxhdGlvbl9raW5kIHJlbCkg Y29uc3QKK3sKKyAgaWYgKGZyZWxvcF9lYXJseV9yZXNvbHZlIChyLCB0eXBlLCBvcDEsIG9wMiwg cmVsLCBWUkVMX0dUKSkKKyAgICByZXR1cm4gdHJ1ZTsKKworICBpZiAoZmluaXRlX29wZXJhbmRz X3AgKG9wMSwgb3AyKSkKKyAgICB7CisgICAgICBpZiAocmVhbF9jb21wYXJlIChHVF9FWFBSLCAm b3AxLmxvd2VyX2JvdW5kICgpLCAmb3AyLnVwcGVyX2JvdW5kICgpKSkKKwlyID0gcmFuZ2VfdHJ1 ZSAodHlwZSk7CisgICAgICBlbHNlIGlmIChmaW5pdGVfb3BlcmFuZHNfcCAob3AxLCBvcDIpCisJ ICAgICAgICYmICFyZWFsX2NvbXBhcmUgKEdUX0VYUFIsICZvcDEudXBwZXJfYm91bmQgKCksICZv cDIubG93ZXJfYm91bmQgKCkpKQorCXIgPSByYW5nZV9mYWxzZSAodHlwZSk7CisgICAgICBlbHNl CisJciA9IHJhbmdlX3RydWVfYW5kX2ZhbHNlICh0eXBlKTsKKyAgICB9CisgIGVsc2UgaWYgKG9w MS5nZXRfbmFuICgpLnllc19wICgpIHx8IG9wMi5nZXRfbmFuICgpLnllc19wICgpKQorICAgIHIg PSByYW5nZV9mYWxzZSAodHlwZSk7CisgIGVsc2UKKyAgICByID0gcmFuZ2VfdHJ1ZV9hbmRfZmFs c2UgKHR5cGUpOworICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbAogZm9wZXJhdG9yX2d0OjpvcDFf cmFuZ2UgKGZyYW5nZSAmciwKIAkJCSB0cmVlIHR5cGUsCkBAIC01MjUsMTUgKzczNiwxNCBAQCBm b3BlcmF0b3JfZ3Q6Om9wMV9yYW5nZSAoZnJhbmdlICZyLAogICBzd2l0Y2ggKGdldF9ib29sX3N0 YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKICAgICBjYXNlIEJSU19UUlVFOgotICAgICAgci5z ZXRfdmFyeWluZyAodHlwZSk7Ci0gICAgICAvLyBUaGUgVFJVRSBzaWRlIG9mIG9wMSA+IG9wMiBp bXBsaWVzIG9wMSBpcyAhTkFOIGFuZCAhTklORi4KKyAgICAgIGJ1aWxkX2d0IChyLCB0eXBlLCBv cDIubG93ZXJfYm91bmQgKCkpOwogICAgICAgci5zZXRfbmFuIChmcF9wcm9wOjpOTyk7CiAgICAg ICAvLyB4ID4geSBpbXBsaWVzIHggaXMgbm90IC1JTkYuCiAgICAgICBmcmFuZ2VfZHJvcF9uaW5m IChyLCB0eXBlKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBCUlNfRkFMU0U6Ci0gICAgICBy LnNldF92YXJ5aW5nICh0eXBlKTsKKyAgICAgIGJ1aWxkX2xlIChyLCB0eXBlLCBvcDIudXBwZXJf Ym91bmQgKCkpOwogICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgpAQCAtNTUyLDE1ICs3NjIs MTQgQEAgZm9wZXJhdG9yX2d0OjpvcDJfcmFuZ2UgKGZyYW5nZSAmciwKICAgc3dpdGNoIChnZXRf Ym9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CiAgICAgY2FzZSBCUlNfVFJVRToKLSAg ICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUpOwotICAgICAgLy8gVGhlIFRSVUUgc2lkZSBvZiBvcDEg PiBvcDIgaW1wbGllcyBvcDIgaXMgIU5BTiBhbmQgIUlORi4KKyAgICAgIGJ1aWxkX2x0IChyLCB0 eXBlLCBvcDEudXBwZXJfYm91bmQgKCkpOwogICAgICAgci5zZXRfbmFuIChmcF9wcm9wOjpOTyk7 CiAgICAgICAvLyB4ID4geSBpbXBsaWVzIHkgaXMgbm90ICtJTkYuCiAgICAgICBmcmFuZ2VfZHJv cF9pbmYgKHIsIHR5cGUpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJSU19GQUxTRToKLSAg ICAgIHIuc2V0X3ZhcnlpbmcgKHR5cGUpOworICAgICAgYnVpbGRfZ2UgKHIsIHR5cGUsIG9wMS5s b3dlcl9ib3VuZCAoKSk7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CkBAIC01NzcsMTAg Kzc4Niw3IEBAIGNsYXNzIGZvcGVyYXRvcl9nZSA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcl9mbG9h dAogCiAgIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgIGNvbnN0 IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJICAgcmVsYXRpb25fa2luZCByZWwp IGNvbnN0IGZpbmFsIG92ZXJyaWRlCi0gIHsKLSAgICByZXR1cm4gZGVmYXVsdF9mcmVsb3BfZm9s ZF9yYW5nZSAociwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJFTF9HRSk7Ci0gIH0KKwkJICAgcmVs YXRpb25fa2luZCByZWwpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogICByZWxhdGlvbl9raW5kIG9w MV9vcDJfcmVsYXRpb24gKGNvbnN0IGlyYW5nZSAmbGhzKSBjb25zdCBmaW5hbCBvdmVycmlkZQog ICB7CiAgICAgcmV0dXJuIGdlX29wMV9vcDJfcmVsYXRpb24gKGxocyk7CkBAIC01OTAsMjkgKzc5 Niw3MyBAQCBjbGFzcyBmb3BlcmF0b3JfZ2UgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQK IAkJICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QgZmluYWwgb3ZlcnJpZGU7CiAgIGJvb2wgb3Ay X3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJICBjb25zdCBpcmFuZ2UgJmxocywgY29u c3QgZnJhbmdlICZvcDEsCi0JCSAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0IGZpbmFsIG92ZXJy aWRlCi0gIHsKLSAgICByZXR1cm4gb3AxX3JhbmdlIChyLCB0eXBlLCBsaHMsIG9wMSwgcmVsKTsK LSAgfQorCQkgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKIH0gZm9w X2dlOwogCitib29sCitmb3BlcmF0b3JfZ2U6OmZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0 eXBlLAorCQkJICBjb25zdCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIsCisJCQkgIHJl bGF0aW9uX2tpbmQgcmVsKSBjb25zdAoreworICBpZiAoZnJlbG9wX2Vhcmx5X3Jlc29sdmUgKHIs IHR5cGUsIG9wMSwgb3AyLCByZWwsIFZSRUxfR0UpKQorICAgIHJldHVybiB0cnVlOworCisgIGlm IChmaW5pdGVfb3BlcmFuZHNfcCAob3AxLCBvcDIpKQorICAgIHsKKyAgICAgIGlmIChyZWFsX2Nv bXBhcmUgKEdFX0VYUFIsICZvcDEubG93ZXJfYm91bmQgKCksICZvcDIudXBwZXJfYm91bmQgKCkp KQorCXIgPSByYW5nZV90cnVlICh0eXBlKTsKKyAgICAgIGVsc2UgaWYgKGZpbml0ZV9vcGVyYW5k c19wIChvcDEsIG9wMikKKwkgICAgICAgJiYgIXJlYWxfY29tcGFyZSAoR0VfRVhQUiwgJm9wMS51 cHBlcl9ib3VuZCAoKSwgJm9wMi5sb3dlcl9ib3VuZCAoKSkpCisJciA9IHJhbmdlX2ZhbHNlICh0 eXBlKTsKKyAgICAgIGVsc2UKKwlyID0gcmFuZ2VfdHJ1ZV9hbmRfZmFsc2UgKHR5cGUpOworICAg IH0KKyAgZWxzZSBpZiAob3AxLmdldF9uYW4gKCkueWVzX3AgKCkgfHwgb3AyLmdldF9uYW4gKCku eWVzX3AgKCkpCisgICAgciA9IHJhbmdlX2ZhbHNlICh0eXBlKTsKKyAgZWxzZQorICAgIHIgPSBy YW5nZV90cnVlX2FuZF9mYWxzZSAodHlwZSk7CisgIHJldHVybiB0cnVlOworfQorCiBib29sCiBm b3BlcmF0b3JfZ2U6Om9wMV9yYW5nZSAoZnJhbmdlICZyLAogCQkJIHRyZWUgdHlwZSwKIAkJCSBj b25zdCBpcmFuZ2UgJmxocywKLQkJCSBjb25zdCBmcmFuZ2UgJm9wMiBBVFRSSUJVVEVfVU5VU0VE LAorCQkJIGNvbnN0IGZyYW5nZSAmb3AyLAogCQkJIHJlbGF0aW9uX2tpbmQpIGNvbnN0CiB7CiAg IHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkpCiAgICAgewogICAgIGNhc2Ug QlJTX1RSVUU6Ci0gICAgICByLnNldF92YXJ5aW5nICh0eXBlKTsKLSAgICAgIC8vIFRoZSBUUlVF IHNpZGUgb2Ygb3AxID49IG9wMiBpbXBsaWVzIG9wMSBpcyAhTkFOLgorICAgICAgYnVpbGRfZ2Ug KHIsIHR5cGUsIG9wMi5sb3dlcl9ib3VuZCAoKSk7CiAgICAgICByLnNldF9uYW4gKGZwX3Byb3A6 Ok5PKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBCUlNfRkFMU0U6Ci0gICAgICByLnNldF92 YXJ5aW5nICh0eXBlKTsKKyAgICAgIGJ1aWxkX2x0IChyLCB0eXBlLCBvcDIudXBwZXJfYm91bmQg KCkpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQor ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbAorZm9wZXJhdG9yX2dlOjpvcDJfcmFuZ2UgKGZyYW5n ZSAmciwgdHJlZSB0eXBlLAorCQkJIGNvbnN0IGlyYW5nZSAmbGhzLAorCQkJIGNvbnN0IGZyYW5n ZSAmb3AxLAorCQkJIHJlbGF0aW9uX2tpbmQpIGNvbnN0Cit7CisgIHN3aXRjaCAoZ2V0X2Jvb2xf c3RhdGUgKHIsIGxocywgdHlwZSkpCisgICAgeworICAgIGNhc2UgQlJTX0ZBTFNFOgorICAgICAg YnVpbGRfZ3QgKHIsIHR5cGUsIG9wMS5sb3dlcl9ib3VuZCAoKSk7CisgICAgICBicmVhazsKKwor ICAgIGNhc2UgQlJTX1RSVUU6CisgICAgICBidWlsZF9sZSAociwgdHlwZSwgb3AxLnVwcGVyX2Jv dW5kICgpKTsKKyAgICAgIHIuc2V0X25hbiAoZnBfcHJvcDo6Tk8pOwogICAgICAgYnJlYWs7CiAK ICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Ev cmVjaXAtMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcmVjaXAtMy5jCmluZGV4 IDQxMGIyODA0NGI0Li4wMzZmMzJhOWMzMyAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdHJlZS1zc2EvcmVjaXAtMy5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L3JlY2lwLTMuYwpAQCAtMSw2ICsxLDExIEBACiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwogLyog eyBkZy1vcHRpb25zICItTzEgLWZuby10cmFwcGluZy1tYXRoIC1mdW5zYWZlLW1hdGgtb3B0aW1p emF0aW9ucyAtZmR1bXAtdHJlZS1yZWNpcCIgfSAqLwogCisvKiBUaGUgcmVjaXAgcGFzcyBoYXMg YSB0aHJlc2hvbGQgb2YgMyByZWNpcHJvY2FsIG9wZXJhdGlvbnMgYmVmb3JlIGl0IGF0dGVtcHRz CisgICB0byBvcHRpbWl6ZSBhIHNlcXVlbmNlLiAgV2l0aCBhIEZQIGVuYWJsZWQgcmFuZ2VyLCB3 ZSBlbGltaW5hdGUgb25lIG9mIHRoZW0KKyAgIGVhcmxpZXIsIGNhdXNpbmcgdGhlIHBhc3MgdG8g c2tpcCB0aGlzIG9wdGltaXphdGlvbi4gICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAi LWZuby10aHJlYWQtanVtcHMgLWZuby10cmVlLWRvbWluYXRvci1vcHRzIiB9ICovCisKIGRvdWJs ZSBGWzVdID0geyAwLjAsIDAuMCB9LCBlOwogCiAvKiBJbiB0aGlzIGNhc2UgdGhlIG9wdGltaXph dGlvbiBpcyBpbnRlcmVzdGluZy4gICovCi0tIAoyLjM3LjEKCg== --000000000000865a2605e771fd68--