<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>171767</bug_id>
          
          <creation_ts>2017-05-05 19:11:34 -0700</creation_ts>
          <short_desc>Air::ShufflePair::inst is wrong</short_desc>
          <delta_ts>2017-05-08 14:24:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>171392</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1305484</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-05 19:11:34 -0700</bug_when>
    <thetext>It may return an invalid Inst.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305485</commentid>
    <comment_count>1</comment_count>
      <attachid>309259</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-05 19:12:16 -0700</bug_when>
    <thetext>Created attachment 309259
WIP

Still need to test on ARM where things are actually interesting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305491</commentid>
    <comment_count>2</comment_count>
      <attachid>309259</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-05 20:10:58 -0700</bug_when>
    <thetext>Comment on attachment 309259
WIP

View in context: https://bugs.webkit.org/attachment.cgi?id=309259&amp;action=review

I like how this turned out.

&gt; Source/JavaScriptCore/b3/air/AirEmitShuffle.cpp:106
&gt; -Inst ShufflePair::inst(Code* code, Value* origin) const
&gt; +Vector&lt;Inst&gt; ShufflePair::insts(Code&amp; code, Value* origin) const
&gt;  {
&gt; -    if (UNLIKELY(src().isMemory() &amp;&amp; dst().isMemory())) {
&gt; -        RELEASE_ASSERT(code);
&gt; -        return Inst(moveFor(bank(), width()), origin, src(), dst(), code-&gt;newTmp(bank()));
&gt; -    }
&gt; +    // FIXME: This function should really worry about encodable offsets.
&gt; +
&gt; +    if (UNLIKELY(src().isMemory() &amp;&amp; dst().isMemory()))
&gt; +        return { Inst(moveFor(bank(), width()), origin, src(), dst(), code.newTmp(bank())) };
&gt;  
&gt; -    if (src().isSomeImm())
&gt; -        return Inst(Move, origin, Arg::bigImm(src().value()), dst());
&gt; +    if (isValidForm(moveFor(bank(), width()), src().kind(), dst().kind()))
&gt; +        return { Inst(moveFor(bank(), width()), origin, src(), dst()) };
&gt;  
&gt; -    return Inst(moveFor(bank(), width()), origin, src(), dst());
&gt; +    // We must be a store immediate or a move immediate to tmp if we reach here. The reason:
&gt; +    // 1. It&apos;s always valid to do a load from Addr into a tmp using Move/Move32/MoveFloat/MoveDouble.
&gt; +    // 2. It&apos;s also always valid to do a Tmp-&gt;Tmp move.
&gt; +    // 3. It&apos;s also always valid to do a Tmp-&gt;Addr store.
&gt; +    ASSERT(src().isSomeImm());
&gt; +    Tmp tmp = code.newTmp(bank());
&gt; +    ASSERT(isValidForm(Move, Arg::BigImm, Arg::Tmp));
&gt; +    ASSERT(isValidForm(moveFor(bank(), width()), Arg::Tmp, dst().kind()));
&gt; +    return {
&gt; +        Inst(Move, origin, Arg::bigImm(src().value()), tmp),
&gt; +        Inst(moveFor(bank(), width()), origin, tmp, dst()),
&gt; +    };
&gt;  }

I was super curious how the full shuffler handles this, and it looks like it has exactly this logic in handleShiftPair.  Up to you if you want to try to unify them.  It could get ugly - you want to use a tmp, that code wants to find a scratch - so it&apos;s OK if they are separate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305493</commentid>
    <comment_count>3</comment_count>
      <attachid>309259</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-05 20:11:52 -0700</bug_when>
    <thetext>Comment on attachment 309259
WIP

View in context: https://bugs.webkit.org/attachment.cgi?id=309259&amp;action=review

&gt; Source/JavaScriptCore/b3/air/AirEmitShuffle.h:79
&gt; +    Vector&lt;Inst&gt; insts(Code&amp;, Value* origin) const;

How about Vector&lt;Inst, 2&gt;

Since it&apos;s never than 2 insts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306054</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-08 14:24:11 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 171392 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309259</attachid>
            <date>2017-05-05 19:12:16 -0700</date>
            <delta_ts>2017-05-05 19:12:16 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>10831</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hl
Y2tWYWx1ZS5jcHAJKHJldmlzaW9uIDIxNjI1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NyBAQCBXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6fldhc21Cb3VuZHNDaGVja1ZhCiB7CiB9CiAKLVdh
c21Cb3VuZHNDaGVja1ZhbHVlOjpXYXNtQm91bmRzQ2hlY2tWYWx1ZShPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogcHRyLCB1bnNpZ25lZCBvZmZzZXQsIEdQUlJlZyBwaW5uZWRHUFIpCitXYXNtQm91bmRz
Q2hlY2tWYWx1ZTo6V2FzbUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luIG9yaWdpbiwgR1BSUmVnIHBp
bm5lZEdQUiwgVmFsdWUqIHB0ciwgdW5zaWduZWQgb2Zmc2V0KQogICAgIDogVmFsdWUoQ2hlY2tl
ZE9wY29kZSwgV2FzbUJvdW5kc0NoZWNrLCBvcmlnaW4sIHB0cikKICAgICAsIG1fb2Zmc2V0KG9m
ZnNldCkKICAgICAsIG1fYm91bmRzVHlwZShUeXBlOjpQaW5uZWQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgJKHJldmlzaW9u
IDIxNjI1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
V2FzbUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luLCBWYWx1ZSogcHRyLCB1bnNpZ25lZCBvZmZzZXQs
IEdQUlJlZyBwaW5uZWRHUFIpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhc21Cb3VuZHNDaGVj
a1ZhbHVlKE9yaWdpbiwgVmFsdWUqIHB0ciwgdW5zaWduZWQgb2Zmc2V0LCBzaXplX3QgbWF4aW11
bSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgV2FzbUJvdW5kc0NoZWNrVmFsdWUo
T3JpZ2luLCBHUFJSZWcgcGlubmVkR1BSLCBWYWx1ZSogcHRyLCB1bnNpZ25lZCBvZmZzZXQpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IFdhc21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdp
biwgVmFsdWUqIHB0ciwgdW5zaWduZWQgb2Zmc2V0LCBzaXplX3QgbWF4aW11bSk7CiAKICAgICB1
bnNpZ25lZCBtX29mZnNldDsKICAgICBUeXBlIG1fYm91bmRzVHlwZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMTYyNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyOTIsNyArMTAyOTIs
NyBAQCBpbnQgZnVuY3Rpb25XaXRoSGVsbGFBcmd1bWVudHMoaW50IGEsIGluCiB2b2lkIHRlc3RD
YWxsRnVuY3Rpb25XaXRoSGVsbGFBcmd1bWVudHMoKQogewogICAgIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxMzkyCi0gICAgcmV0dXJuOworICAg
IC8vcmV0dXJuOwogCiAgICAgUHJvY2VkdXJlIHByb2M7CiAgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKQEAgLTEwMzExLDYgKzEwMzExLDM3IEBAIHZvaWQgdGVzdENhbGxG
dW5jdGlvbldpdGhIZWxsYUFyZ3VtZW50cygKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4o
cHJvYykgPT0gZnVuY3Rpb25XaXRoSGVsbGFBcmd1bWVudHMoMSwgMiwgMywgNCwgNSwgNiwgNywg
OCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIs
IDIzLCAyNCwgMjUsIDI2KSk7CiB9CiAKK3VpbnQ2NF90IGZ1bmN0aW9uV2l0aEhlbGxhQXJndW1l
bnRzMih1aW50NjRfdCBhLCB1aW50NjRfdCBiLCB1aW50NjRfdCBjLCB1aW50NjRfdCBkLCB1aW50
NjRfdCBlLCB1aW50NjRfdCBmLCB1aW50NjRfdCBnLCB1aW50NjRfdCBoLCB1aW50NjRfdCBpLCB1
aW50NjRfdCBqLCB1aW50NjRfdCBrLCB1aW50NjRfdCBsLCB1aW50NjRfdCBtLCB1aW50NjRfdCBu
LCB1aW50NjRfdCBvLCB1aW50NjRfdCBwLCB1aW50NjRfdCBxLCB1aW50NjRfdCByLCB1aW50NjRf
dCBzLCB1aW50NjRfdCB0LCB1aW50NjRfdCB1LCB1aW50NjRfdCB2LCB1aW50NjRfdCB3LCB1aW50
NjRfdCB4LCB1aW50NjRfdCB5LCB1aW50NjRfdCB6KQoreworICAgIHJldHVybiAoYSA8PCAwKSAr
IChiIDw8IDEpICsgKGMgPDwgMikgKyAoZCA8PCAzKSArIChlIDw8IDQpICsgKGYgPDwgNSkgKyAo
ZyA8PCA2KSArIChoIDw8IDcpICsgKGkgPDwgOCkgKyAoaiA8PCA5KSArIChrIDw8IDEwKSArIChs
IDw8IDExKSArIChtIDw8IDEyKSArIChuIDw8IDEzKSArIChvIDw8IDE0KSArIChwIDw8IDE1KSAr
IChxIDw8IDE2KSArIChyIDw8IDE3KSArIChzIDw8IDE4KSArICh0IDw8IDE5KSArICh1IDw8IDIw
KSArICh2IDw8IDIxKSArICh3IDw8IDIyKSArICh4IDw8IDIzKSArICh5IDw8IDI0KSArICh6IDw8
IDI1KTsKK30KKwordm9pZCB0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhlbGxhQXJndW1lbnRzMigpCit7
CisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzEzOTIKKyAgICAvL3JldHVybjsKKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICB1aW50NjRfdCBsaW1pdCA9IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICsg
MjUwOworCisgICAgVmVjdG9yPFZhbHVlKj4gYXJnczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMjY7ICsraSkKKyAgICAgICAgYXJncy5hcHBlbmQocm9vdC0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxpbWl0IC0gaSkpOworCisgICAgQ0NhbGxWYWx1ZSog
Y2FsbCA9IHJvb3QtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgcHJvYywgSW50NjQs
IE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oZnVuY3Rpb25XaXRoSGVsbGFBcmd1bWVudHMy
KSkpOworICAgIGNhbGwtPmNoaWxkcmVuKCkuYXBwZW5kVmVjdG9yKGFyZ3MpOworICAgIAorICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjYWxs
KTsKKworICAgIGF1dG8gYSA9IGNvbXBpbGVBbmRSdW48dWludDY0X3Q+KHByb2MpOworICAgIGF1
dG8gYiA9IGZ1bmN0aW9uV2l0aEhlbGxhQXJndW1lbnRzMihsaW1pdCwgbGltaXQtMSwgbGltaXQt
MiwgbGltaXQtMywgbGltaXQtNCwgbGltaXQtNSwgbGltaXQtNiwgbGltaXQtNywgbGltaXQtOCwg
bGltaXQtOSwgbGltaXQtMTAsIGxpbWl0LTExLCBsaW1pdC0xMiwgbGltaXQtMTMsIGxpbWl0LTE0
LCBsaW1pdC0xNSwgbGltaXQtMTYsIGxpbWl0LTE3LCBsaW1pdC0xOCwgbGltaXQtMTksIGxpbWl0
LTIwLCBsaW1pdC0yMSwgbGltaXQtMjIsIGxpbWl0LTIzLCBsaW1pdC0yNCwgbGltaXQtMjUpOwor
ICAgIENIRUNLKGEgPT0gYik7Cit9CisKIHZvaWQgdGVzdFJldHVybkRvdWJsZShkb3VibGUgdmFs
dWUpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xNTIzOSw3ICsxNTI3MCw3IEBAIHZvaWQg
dGVzdERlcGVuZDY0KCkKIHZvaWQgdGVzdFdhc21Cb3VuZHNDaGVjayh1bnNpZ25lZCBvZmZzZXQp
CiB7CiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzEzOTIKLSAgICByZXR1cm47CisgICAgLy9yZXR1cm47CiAKICAgICBQcm9jZWR1cmUgcHJv
YzsKICAgICBHUFJSZWcgcGlubmVkID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwpAQCAtMTUyNTks
NyArMTUyOTAsNyBAQCB2b2lkIHRlc3RXYXNtQm91bmRzQ2hlY2sodW5zaWduZWQgb2Zmc2V0CiAg
ICAgVmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaWYgKHBvaW50ZXJUeXBlKCkg
IT0gSW50MzIpCiAgICAgICAgIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwgbGVmdCk7Ci0gICAgcm9vdC0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVj
a1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbGVmdCwgcGlubmVkLCBvZmZzZXQpOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHBpbm5lZCwg
bGVmdCwgb2Zmc2V0KTsKICAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDB4NDIpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwogCkBAIC0xNTQzNCw2ICsx
NTQ2NSwxNCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgIHJldHVybiAh
ZmlsdGVyIHx8ICEhc3RyY2FzZXN0cih0ZXN0TmFtZSwgZmlsdGVyKTsKICAgICB9OwogCisgICAg
UlVOKHRlc3RDYWxsRnVuY3Rpb25XaXRoSGVsbGFBcmd1bWVudHMyKCkpOworICAgIC8vVU5VU0VE
X1BBUkFNKHRlc3RXYXNtQm91bmRzQ2hlY2spOworICAgIC8vUlVOKHRlc3RXYXNtQm91bmRzQ2hl
Y2soMCkpOworICAgIC8vUlVOKHRlc3RXYXNtQm91bmRzQ2hlY2soMTAwKSk7CisgICAgLy9SVU4o
dGVzdFdhc21Cb3VuZHNDaGVjaygxMDAwMCkpOworICAgIC8vUlVOKHRlc3RXYXNtQm91bmRzQ2hl
Y2soc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gNSkpOworCisgICAgaWYg
KGZhbHNlKSB7CiAgICAgUlVOX05PVyh0ZXN0VGVybWluYWxQYXRjaHBvaW50VGhhdE5lZWRzVG9C
ZVNwaWxsZWQyKCkpOwogCiAgICAgUlVOKHRlc3Q0MigpKTsKQEAgLTE2OTIyLDYgKzE2OTYxLDcg
QEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgICAgICBSVU4odGVzdFRlcm5hcnlT
dWJJbnN0cnVjdGlvblNlbGVjdGlvbihJZGVudGl0eSwgSW50NjQsIEFpcjo6U3ViNjQpKTsKICAg
ICAgICAgUlVOKHRlc3RUZXJuYXJ5U3ViSW5zdHJ1Y3Rpb25TZWxlY3Rpb24oVHJ1bmMsIEludDMy
LCBBaXI6OlN1YjMyKSk7CiAgICAgfQorICAgIH0KIAogICAgIGlmICh0YXNrcy5pc0VtcHR5KCkp
CiAgICAgICAgIHVzYWdlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckVtaXRTaHVmZmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckVtaXRTaHVmZmxlLmNwcAkocmV2aXNpb24gMjE2MjUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJFbWl0U2h1ZmZsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDE3ICs4MSwyOCBAQCBCYW5rIFNodWZmbGVQYWlyOjpiYW5rKCkgY29uc3QKICAgICByZXR1cm4g
RlA7CiB9CiAKLUluc3QgU2h1ZmZsZVBhaXI6Omluc3QoQ29kZSogY29kZSwgVmFsdWUqIG9yaWdp
bikgY29uc3QKK1ZlY3RvcjxJbnN0PiBTaHVmZmxlUGFpcjo6aW5zdHMoQ29kZSYgY29kZSwgVmFs
dWUqIG9yaWdpbikgY29uc3QKIHsKLSAgICBpZiAoVU5MSUtFTFkoc3JjKCkuaXNNZW1vcnkoKSAm
JiBkc3QoKS5pc01lbW9yeSgpKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlKTsKLSAg
ICAgICAgcmV0dXJuIEluc3QobW92ZUZvcihiYW5rKCksIHdpZHRoKCkpLCBvcmlnaW4sIHNyYygp
LCBkc3QoKSwgY29kZS0+bmV3VG1wKGJhbmsoKSkpOwotICAgIH0KKyAgICAvLyBGSVhNRTogVGhp
cyBmdW5jdGlvbiBzaG91bGQgcmVhbGx5IHdvcnJ5IGFib3V0IGVuY29kYWJsZSBvZmZzZXRzLgor
CisgICAgaWYgKFVOTElLRUxZKHNyYygpLmlzTWVtb3J5KCkgJiYgZHN0KCkuaXNNZW1vcnkoKSkp
CisgICAgICAgIHJldHVybiB7IEluc3QobW92ZUZvcihiYW5rKCksIHdpZHRoKCkpLCBvcmlnaW4s
IHNyYygpLCBkc3QoKSwgY29kZS5uZXdUbXAoYmFuaygpKSkgfTsKIAotICAgIGlmIChzcmMoKS5p
c1NvbWVJbW0oKSkKLSAgICAgICAgcmV0dXJuIEluc3QoTW92ZSwgb3JpZ2luLCBBcmc6OmJpZ0lt
bShzcmMoKS52YWx1ZSgpKSwgZHN0KCkpOworICAgIGlmIChpc1ZhbGlkRm9ybShtb3ZlRm9yKGJh
bmsoKSwgd2lkdGgoKSksIHNyYygpLmtpbmQoKSwgZHN0KCkua2luZCgpKSkKKyAgICAgICAgcmV0
dXJuIHsgSW5zdChtb3ZlRm9yKGJhbmsoKSwgd2lkdGgoKSksIG9yaWdpbiwgc3JjKCksIGRzdCgp
KSB9OwogCi0gICAgcmV0dXJuIEluc3QobW92ZUZvcihiYW5rKCksIHdpZHRoKCkpLCBvcmlnaW4s
IHNyYygpLCBkc3QoKSk7CisgICAgLy8gV2UgbXVzdCBiZSBhIHN0b3JlIGltbWVkaWF0ZSBvciBh
IG1vdmUgaW1tZWRpYXRlIHRvIHRtcCBpZiB3ZSByZWFjaCBoZXJlLiBUaGUgcmVhc29uOgorICAg
IC8vIDEuIEl0J3MgYWx3YXlzIHZhbGlkIHRvIGRvIGEgbG9hZCBmcm9tIEFkZHIgaW50byBhIHRt
cCB1c2luZyBNb3ZlL01vdmUzMi9Nb3ZlRmxvYXQvTW92ZURvdWJsZS4KKyAgICAvLyAyLiBJdCdz
IGFsc28gYWx3YXlzIHZhbGlkIHRvIGRvIGEgVG1wLT5UbXAgbW92ZS4KKyAgICAvLyAzLiBJdCdz
IGFsc28gYWx3YXlzIHZhbGlkIHRvIGRvIGEgVG1wLT5BZGRyIHN0b3JlLgorICAgIEFTU0VSVChz
cmMoKS5pc1NvbWVJbW0oKSk7CisgICAgVG1wIHRtcCA9IGNvZGUubmV3VG1wKGJhbmsoKSk7Cisg
ICAgQVNTRVJUKGlzVmFsaWRGb3JtKE1vdmUsIEFyZzo6QmlnSW1tLCBBcmc6OlRtcCkpOworICAg
IEFTU0VSVChpc1ZhbGlkRm9ybShtb3ZlRm9yKGJhbmsoKSwgd2lkdGgoKSksIEFyZzo6VG1wLCBk
c3QoKS5raW5kKCkpKTsKKyAgICByZXR1cm4geworICAgICAgICBJbnN0KE1vdmUsIG9yaWdpbiwg
QXJnOjpiaWdJbW0oc3JjKCkudmFsdWUoKSksIHRtcCksCisgICAgICAgIEluc3QobW92ZUZvcihi
YW5rKCksIHdpZHRoKCkpLCBvcmlnaW4sIHRtcCwgZHN0KCkpLAorICAgIH07CiB9CiAKIHZvaWQg
U2h1ZmZsZVBhaXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVmZmxlLmgJKHJldmlzaW9uIDIxNjI1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzQsMTAgKzc0LDkgQEAgcHVibGljOgogICAgIAogICAgIEJhbmsgYmFu
aygpIGNvbnN0OwogCi0gICAgLy8gQ3JlYXRlcyBhbiBpbnN0cnVjdGlvbiBmb3IgdGhlIG1vdmUg
cmVwcmVzZW50ZWQgYnkgdGhpcyBzaHVmZmxlIHBhaXIuIFlvdSBuZWVkIHRvIHBhc3MKLSAgICAv
LyBDb2RlIGlmIHRoaXMgaXMgYSBtZW1vcnktPm1lbW9yeSBwYWlyLiBZb3UgY2FuIHBhc3MgbnVs
bCBpZiB5b3Uga25vdyB0aGF0IGl0J3Mgbm90LiBJbgotICAgIC8vIGZhY3QsIHBhc3NpbmcgbnVs
bCBpcyBhIGdvb2Qgd2F5IHRvIGFzc2VydCB0aGF0IHRoaXMgaXMgbm90IGEgbWVtb3J5LT5tZW1v
cnkgcGFpci4KLSAgICBJbnN0IGluc3QoQ29kZSosIFZhbHVlKiBvcmlnaW4pIGNvbnN0OworICAg
IC8vIENyZWF0ZXMgYW4gaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgZm9yIHRoZSBtb3ZlIHJlcHJlc2Vu
dGVkIGJ5IHRoaXMgc2h1ZmZsZSBwYWlyLgorICAgIC8vIFlvdSBuZWVkIHRvIHBhc3MgQ29kZSBi
ZWNhdXNlIHdlIG1heSBuZWVkIHRvIGNyZWF0ZSBhIHRtcC4KKyAgICBWZWN0b3I8SW5zdD4gaW5z
dHMoQ29kZSYsIFZhbHVlKiBvcmlnaW4pIGNvbnN0OwogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMjE2MjUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogdm9p
ZCBsb3dlck1hY3JvcyhDb2RlJiBjb2RlKQogewogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShj
b2RlLCAiQWlyOjpsb3dlck1hY3JvcyIpOwotCisgICAgCiAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsraW5zdEluZGV4KSB7CkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgbG93ZXJNYWNyb3MoQ29k
ZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBkb24ndCBnbyBpbnRvIGFyZ3Vt
ZW50IHJlZ2lzdGVycy4KICAgICAgICAgICAgICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFp
ciA6IHNodWZmbGVQYWlycykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIuZHN0
KCkuaXNNZW1vcnkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0SW5zdChpbnN0SW5kZXgsIHBhaXIuaW5zdCgmY29kZSwgaW5zdC5vcmlnaW4pKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoaW5zdElu
ZGV4LCBwYWlyLmluc3RzKGNvZGUsIGluc3Qub3JpZ2luKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIEZpbGwgdGhl
IGFyZ3VtZW50IHJlZ2lzdGVycyBieSBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBvbmUuIFRoaXMg
YXZvaWRzCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgbG93ZXJNYWNyb3MoQ29kZSYgY29kZSkKICAg
ICAgICAgICAgICAgICAgICAgLy8gaW5jaWRlbnRhbGx5IGNsb2JiZXJlZC4KICAgICAgICAgICAg
ICAgICAgICAgZm9yIChTaHVmZmxlUGFpciYgcGFpciA6IHNodWZmbGVQYWlycykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwYWlyLmRzdCgpLmlzTWVtb3J5KCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3QoaW5zdEluZGV4LCBwYWly
Lmluc3QobnVsbHB0ciwgaW5zdC5vcmlnaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdHMoaW5zdEluZGV4LCBwYWlyLmluc3RzKGNvZGUsIGlu
c3Qub3JpZ2luKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDIxNjI1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY4LDcgKzU2OCw3IEBAIGlu
bGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW4KICAgICAgICAgLy8gV2UncmUg
bm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGwsIHdlIG11c3QgdGhlcmVmb3JlIGNoZWNr
IHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRoZSBjdXJyZW50IG1lbW9yeSBzaXplLgog
ICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNTRVJUKHNpemVPZk9w
ZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIHNp
emVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEsIG1fbWVtb3J5U2l6ZUdQUik7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIG1fbWVtb3J5U2l6ZUdQUiwgcG9pbnRlciwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0
IC0gMSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>