<?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>151809</bug_id>
          
          <creation_ts>2015-12-03 10:28:17 -0800</creation_ts>
          <short_desc>B3 patchpoints should allow specifying output constraints</short_desc>
          <delta_ts>2015-12-04 04:30:50 -0800</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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>151860</dependson>
          <blocked>151808</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1145951</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-03 10:28:17 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146061</commentid>
    <comment_count>1</comment_count>
      <attachid>266560</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-03 14:34:51 -0800</bug_when>
    <thetext>Created attachment 266560
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146062</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-03 14:37:37 -0800</bug_when>
    <thetext>Attachment 266560 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:3734:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3736:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3745:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3760:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3762:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3771:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3788:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3790:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3801:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 9 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146088</commentid>
    <comment_count>3</comment_count>
      <attachid>266560</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-03 15:06:35 -0800</bug_when>
    <thetext>Comment on attachment 266560
the patch

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

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1711
&gt; +                    after.append(Inst(
&gt; +                        relaxedMoveForType(patchpointValue-&gt;type()), m_value, reg, tmp(patchpointValue)));

Either move it to one line or give a temporary name to that Inst.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1718
&gt; +                    after.append(Inst(
&gt; +                        moveForType(patchpointValue-&gt;type()), m_value, arg, tmp(patchpointValue)));

Ditto

&gt; Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:197
&gt; +        // We already verified this above.

Stale comment now.

&gt; Source/JavaScriptCore/b3/B3StackmapValue.h:102
&gt; +    // assume to know anything about what kind of value might have been stored. In B3&apos;s model of

Maybe &quot;Air&apos;s model&quot;?
The B3 IR does not care about registers.

&gt; Source/JavaScriptCore/b3/B3StackmapValue.h:126
&gt; +    // Note that a common use case of early clobber sets is to indicate that this is the set of registers
&gt; +    // that shall not be used for inputs to the value. But B3 supports two different ways of specifying
&gt; +    // this, the other being LateUse (not yet available to stackmaps directly, FIXME:

This does not sound right.

LateUse prevent us to use the register for anything clobbered and the results, but it can be an input to the value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146112</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-03 15:55:41 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 266560 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266560&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1711
&gt; &gt; +                    after.append(Inst(
&gt; &gt; +                        relaxedMoveForType(patchpointValue-&gt;type()), m_value, reg, tmp(patchpointValue)));
&gt; 
&gt; Either move it to one line or give a temporary name to that Inst.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1718
&gt; &gt; +                    after.append(Inst(
&gt; &gt; +                        moveForType(patchpointValue-&gt;type()), m_value, arg, tmp(patchpointValue)));
&gt; 
&gt; Ditto
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:197
&gt; &gt; +        // We already verified this above.
&gt; 
&gt; Stale comment now.

Not quite.  &quot;Above&quot; is the other method, isArgValidForValue().  You&apos;re expected to also call that one.  I&apos;ll change the comment to make it clear that it&apos;s referring to the other method.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3StackmapValue.h:102
&gt; &gt; +    // assume to know anything about what kind of value might have been stored. In B3&apos;s model of
&gt; 
&gt; Maybe &quot;Air&apos;s model&quot;?
&gt; The B3 IR does not care about registers.

Well, B3 IR does care about registers in the sense that StackmapValue allows you to specify the registers used for the inputs and output.  So, I think it&apos;s meaningful to talk about B3 having a model about what happens to registers before and after a StackmapValue.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3StackmapValue.h:126
&gt; &gt; +    // Note that a common use case of early clobber sets is to indicate that this is the set of registers
&gt; &gt; +    // that shall not be used for inputs to the value. But B3 supports two different ways of specifying
&gt; &gt; +    // this, the other being LateUse (not yet available to stackmaps directly, FIXME:
&gt; 
&gt; This does not sound right.
&gt; 
&gt; LateUse prevent us to use the register for anything clobbered and the
&gt; results, but it can be an input to the value.

I fixed the comment to make it clear that it refers to LateUse in combination with late clobber.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146116</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-03 16:12:37 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/193386</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266560</attachid>
            <date>2015-12-03 14:34:51 -0800</date>
            <delta_ts>2015-12-03 15:06:35 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28553</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkzMzc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE1LTEyLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgcGF0Y2hwb2ludHMgc2hvdWxkIGFsbG93IHNwZWNpZnlpbmcgb3V0cHV0IGNvbnN0cmFpbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE4MDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBKUyBjYWxs
IHBhdGNocG9pbnRzIHNob3VsZCBwdXQgdGhlaXIgcmVzdWx0IGludG8gdGhlIHJlc3VsdCByZWdp
c3Rlciwgd2hpbGUgbW9zdCBvdGhlciBwYXRjaHBvaW50cworICAgICAgICBzaG91bGQgcHV0IHRo
ZWlyIHJlc3VsdHMgaW50byBzb21lIHJlZ2lzdGVyLiBJIHRoaW5rIHRoYXQgaXQncyBiZXN0IGlm
IHdlIGp1c3QgYWxsb3cgYXJiaXRyYXJ5CisgICAgICAgIGNvbnN0cmFpbnRzIG9uIHRoZSByZXN1
bHQgb2YgYSBwYXRjaHBvaW50LiBBbmQgYnkgImFyYml0cmFyeSIgSSBtZWFuIGFsbG93aW5nIHRo
ZSBzYW1lIGtpbmRzIG9mCisgICAgICAgIGNvbnN0cmFpbnRzIGFzIHdlIGFsbG93IG9uIHRoZSBz
dGFja21hcCBjaGlsZHJlbi4KKworICAgICAgICBUaGlzIGFsc28gYWRkcyBhIGxhcmdlIGNvbW1l
bnQgaW4gQjNTdGFja21hcFZhbHVlLmggdGhhdCBsYXlzIG91dCB0aGUgcGhpbG9zb3BoeSBvZiBv
dXIgc3RhY2ttYXBzCisgICAgICAgIGFuZCBwYXRjaHBvaW50cy4gSSBmb3VuZCBpdCB1c2VmdWwg
dG8gd3JpdGUgZG93biB0aGUgcGxhbiBzaW5jZSBpdCdzIHByZXR0eSBzdWJ0bGUuCisKKyAgICAg
ICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpsb3dlcik6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6
OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6YWRtaXRzU3RhY2spOgorICAgICAgICAqIGIzL0IzUGF0
Y2hwb2ludFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6flBh
dGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OmR1bXBN
ZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0Y2hwb2ludFZhbHVl
KToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOgorICAgICAgICAoSlNDOjpCMzo6
UGF0Y2hwb2ludFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOgor
ICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpjb2RlKToKKyAgICAgICAgKiBiMy9CM1N0YWNr
bWFwU3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmlzVmFs
aWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0lt
cGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yVmFs
dWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yUmVw
KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAg
ICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBWYWx1
ZS5oOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWVS
ZXAuaDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpkb3VibGVWYWx1ZSk6CisgICAgICAg
ICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50TWFueUlt
bXMpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFBhdGNocG9pbnRXaXRoUmVnaXN0ZXJSZXN1bHQp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFBhdGNocG9pbnRXaXRoU3RhY2tBcmd1bWVudFJlc3Vs
dCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UGF0Y2hwb2ludFdpdGhBbnlSZXN1bHQpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdFNpbXBsZUNoZWNrKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6
CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisKIDIwMTUtMTItMDMgIFNhYW0gYmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgRlRMOjpPU1JFeGl0RGVzY3JpcHRvciBz
aG91bGQgdXNlIGxlc3MgbWVtb3J5IGJ5IGhhdmluZyBhIGNvbXBhbmlvbiBvYmplY3QgdGhhdCBk
aWVzIGFmdGVyIGNvbXBpbGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTkzMzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OTYsMTMgKzE2OTYsMzgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGVuc3VyZVNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lh
bCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEluc3QgaW5zdChQYXRjaCwgcGF0Y2hwb2lu
dFZhbHVlLCBBcmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAocGF0Y2hwb2ludFZhbHVlLT50eXBlKCkgIT0gVm9pZCkKLSAgICAg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChwYXRjaHBvaW50VmFsdWUpKTsKKworICAg
ICAgICAgICAgVmVjdG9yPEluc3Q+IGFmdGVyOworICAgICAgICAgICAgaWYgKHBhdGNocG9pbnRW
YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhdGNocG9p
bnRWYWx1ZS0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IFZhbHVlUmVwOjpBbnk6CisgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyOgorICAgICAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChwYXRjaHBvaW50
VmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6IHsKKyAgICAgICAgICAgICAgICAgICAgVG1wIHJlZyA9IFRt
cChwYXRjaHBvaW50VmFsdWUtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkpOworICAgICAgICAgICAg
ICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJlZyk7CisgICAgICAgICAgICAgICAgICAgIGFmdGVy
LmFwcGVuZChJbnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXhlZE1vdmVGb3JUeXBl
KHBhdGNocG9pbnRWYWx1ZS0+dHlwZSgpKSwgbV92YWx1ZSwgcmVnLCB0bXAocGF0Y2hwb2ludFZh
bHVlKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDogeworICAgICAgICAg
ICAgICAgICAgICBBcmcgYXJnID0gQXJnOjpjYWxsQXJnKHBhdGNocG9pbnRWYWx1ZS0+cmVzdWx0
Q29uc3RyYWludC5vZmZzZXRGcm9tU1AoKSk7CisgICAgICAgICAgICAgICAgICAgIGluc3QuYXJn
cy5hcHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIuYXBwZW5kKEluc3QoCisg
ICAgICAgICAgICAgICAgICAgICAgICBtb3ZlRm9yVHlwZShwYXRjaHBvaW50VmFsdWUtPnR5cGUo
KSksIG1fdmFsdWUsIGFyZywgdG1wKHBhdGNocG9pbnRWYWx1ZSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZmlsbFN0YWNrbWFwKGluc3QsIHBhdGNocG9pbnRW
YWx1ZSwgMCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVu
ZChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kVmVj
dG9yKGFmdGVyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZp
c2lvbiAxOTMzNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3Bl
Y2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0LDEwIEBAIGJvb2wgUGF0Y2hwb2lu
dFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW4KIAogICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwg
MikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpbnN0LmFyZ3NbMV0ua2luZCgpICE9
IEFyZzo6VG1wKQorICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGluc3Qub3JpZ2lu
LT5hczxQYXRjaHBvaW50VmFsdWU+KCk7CisgICAgaWYgKCFpc0FyZ1ZhbGlkRm9yVmFsdWUoaW5z
dC5hcmdzWzFdLCBwYXRjaHBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
aW5zdC5hcmdzWzFdLmlzVHlwZShpbnN0Lm9yaWdpbi0+YWlyVHlwZSgpKSkKKyAgICBpZiAoIWlz
QXJnVmFsaWRGb3JSZXAoY29kZSgpLCBpbnN0LmFyZ3NbMV0sIHBhdGNocG9pbnQtPnJlc3VsdENv
bnN0cmFpbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gaXNWYWxpZElt
cGwoMCwgMiwgaW5zdCk7CkBAIC03Nyw4ICs3OCwxOSBAQCBib29sIFBhdGNocG9pbnRTcGVjaWFs
OjphZG1pdHNTdGFjayhJbnN0CiAgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkK
ICAgICAgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAxLCBpbnN0LCBhcmdJbmRleCk7CiAK
LSAgICBpZiAoYXJnSW5kZXggPT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChh
cmdJbmRleCA9PSAxKSB7CisgICAgICAgIHN3aXRjaCAoaW5zdC5vcmlnaW4tPmFzPFBhdGNocG9p
bnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6QW55OgorICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoK
KyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogCiAg
ICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAyLCBpbnN0LCBhcmdJbmRleCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDE5MzM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDE2IEBAIFBhdGNocG9pbnRWYWx1
ZTo6flBhdGNocG9pbnRWYWx1ZSgpCiB7CiB9CiAKK3ZvaWQgUGF0Y2hwb2ludFZhbHVlOjpkdW1w
TWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IEJhc2U6OmR1bXBNZXRhKGNvbW1hLCBvdXQpOworICAgIG91dC5wcmludChjb21tYSwgInJlc3Vs
dENvbnN0cmFpbnQgPSAiLCByZXN1bHRDb25zdHJhaW50KTsKK30KKwogUGF0Y2hwb2ludFZhbHVl
OjpQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
bikKLSAgICA6IFN0YWNrbWFwVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFBhdGNocG9pbnQs
IHR5cGUsIG9yaWdpbikKKyAgICA6IEJhc2UoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFBhdGNocG9p
bnQsIHR5cGUsIG9yaWdpbikKICAgICAsIGVmZmVjdHMoRWZmZWN0czo6Zm9yQ2FsbCgpKQorICAg
ICwgcmVzdWx0Q29uc3RyYWludCh0eXBlID09IFZvaWQgPyBWYWx1ZVJlcDo6QW55IDogVmFsdWVS
ZXA6OlNvbWVSZWdpc3RlcikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDE5MzM3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
MiArMzYsMjkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIGNsYXNzIFBhdGNo
cG9pbnRWYWx1ZSA6IHB1YmxpYyBTdGFja21hcFZhbHVlIHsKIHB1YmxpYzoKKyAgICB0eXBlZGVm
IFN0YWNrbWFwVmFsdWUgQmFzZTsKKyAgICAKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29k
ZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CiAKICAgICB+UGF0Y2hw
b2ludFZhbHVlKCk7CiAKKyAgICAvLyBUaGUgZWZmZWN0cyBvZiB0aGUgcGF0Y2hwb2ludC4gVGhp
cyBkZWZhdWx0cyB0byBFZmZlY3RzOjpmb3JDYWxsKCksIGJ1dCB5b3UgY2FuIHNldCBpdCB0byBh
bnl0aGluZy4KKyAgICAvLworICAgIC8vIElmIHRoZXJlIGFyZSBubyBlZmZlY3RzLCBCMyBpcyBm
cmVlIHRvIGFzc3VtZSBhbnkgdXNlIG9mIHRoaXMgUGF0Y2hwb2ludFZhbHVlIGNhbiBiZSByZXBs
YWNlZCB3aXRoCisgICAgLy8gYSB1c2Ugb2YgYSBkaWZmZXJlbnQgUGF0Y2hwb2ludFZhbHVlLCBz
byBsb25nIGFzIHRoZSBvdGhlciBvbmUgYWxzbyBoYXMgbm8gZWZmZWN0cyBhbmQgaGFzIHRoZQor
ICAgIC8vIHNhbWUgY2hpbGRyZW4uIE5vdGUgdGhhdCB0aGlzIGNvbXBhcmlzb24gaWdub3JlcyBj
aGlsZCBjb25zdHJhaW50cywgdGhlIHJlc3VsdCBjb25zdHJhaW50LCBhbmQgYWxsCisgICAgLy8g
b3RoZXIgU3RhY2ttYXBWYWx1ZSBtZXRhLWRhdGEuIElmIHRoZXJlIGFyZSByZWFkIGVmZmVjdHMg
YnV0IG5vdCB3cml0ZSBlZmZlY3RzLCB0aGVuIHRoaXMgc2FtZSBzb3J0CisgICAgLy8gb2Ygc3Vi
c3RpdHV0aW9uIGNvdWxkIGJlIG1hZGUgc28gbG9uZyBhcyB0aGVyZSBhcmUgbm8gaW50ZXJmZXJp
bmcgd3JpdGVzLgogICAgIEVmZmVjdHMgZWZmZWN0czsKIAorICAgIC8vIFRoZSBpbnB1dCByZXBy
ZXNlbnRhdGlvbiAoaS5lLiBjb25zdHJhaW50KSBvZiB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGRl
ZmF1bHRzIHRvIEFueSBpZiB0aGUgdHlwZSBpcworICAgIC8vIFZvaWQgYW5kIGl0IGRlZmF1bHRz
IHRvIFNvbWVSZWdpc3RlciBvdGhlcndpc2UuIEl0J3MgaWxsZWdhbCB0byBtZXNzIHdpdGggdGhp
cyBpZiB0aGUgdHlwZSBpcyBWb2lkLgorICAgIC8vIE90aGVyd2lzZSB5b3UgY2FuIHNldCB0aGlz
IHRvIGFueSBpbnB1dCBjb25zdHJhaW50LgorICAgIFZhbHVlUmVwIHJlc3VsdENvbnN0cmFpbnQ7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2Nl
ZHVyZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlz
aW9uIDE5MzM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEFpcjo6
Q29kZSYgY29kZSgpIGNvbnN0IHsgcmV0dXJuICptX2NvZGU7IH0KICAgICBBaXI6OkNvZGUmIGNv
ZGUoKSB7IHJldHVybiAqbV9jb2RlOyB9CiAKLSAgICB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25z
dDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdDsKICAg
ICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0
OwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTMzNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMjYgKzEx
OCw4IEBAIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzOyArK2kp
IHsKICAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNB
cmdzKTsKICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdz
XTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewotICAgICAgICBjYXNl
IEFyZzo6VG1wOgotICAgICAgICBjYXNlIEFyZzo6SW1tOgotICAgICAgICBjYXNlIEFyZzo6SW1t
NjQ6Ci0gICAgICAgIGNhc2UgQXJnOjpTdGFjazoKLSAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6
Ci0gICAgICAgICAgICBicmVhazsgLy8gT0sKLSAgICAgICAgY2FzZSBBcmc6OkFkZHI6Ci0gICAg
ICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
Ci0gICAgICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5
cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CiAKLSAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5
cGUpKQorICAgICAgICBpZiAoIWlzQXJnVmFsaWRGb3JWYWx1ZShhcmcsIGNoaWxkKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE0OSwzOSArMTMxLDggQEAgYm9vbCBT
dGFja21hcFNwZWNpYWw6OmlzVmFsaWRJbXBsKAogICAgICAgICBWYWx1ZVJlcCYgcmVwID0gdmFs
dWUtPm1fcmVwc1tpXTsKICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSAtIG51bUlnbm9y
ZWRCM0FyZ3MgKyBudW1JZ25vcmVkQWlyQXJnc107CiAKLSAgICAgICAgc3dpdGNoIChyZXAua2lu
ZCgpKSB7Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToKLSAgICAgICAgICAgIC8vIFdlIGFs
cmVhZHkgdmVyaWZpZWQgdGhpcyBhYm92ZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6Ci0gICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKLSAgICAgICAgICAgIGlmIChhcmcgIT0gVG1w
KHJlcC5yZWcoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgotICAgICAgICAgICAgLy8gVGhp
cyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmFsdWVS
ZXA6OlN0YWNrQXJndW1lbnQ6Ci0gICAgICAgICAgICBpZiAoYXJnID09IEFyZzo6Y2FsbEFyZyhy
ZXAub2Zmc2V0RnJvbVNQKCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
aWYgKGFyZy5pc0FkZHIoKSAmJiBjb2RlKCkuZnJhbWVTaXplKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYXJnLmJhc2UoKSA9PSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCi0gICAg
ICAgICAgICAgICAgICAgICYmIGFyZy5vZmZzZXQoKSA9PSByZXAub2Zmc2V0RnJvbVNQKCkgLSBj
b2RlKCkuZnJhbWVTaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGlmIChhcmcuYmFzZSgpID09IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgICYmIGFyZy5vZmZzZXQoKSA9PSByZXAub2Zm
c2V0RnJvbVNQKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQor
ICAgICAgICBpZiAoIWlzQXJnVmFsaWRGb3JSZXAoY29kZSgpLCBhcmcsIHJlcCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgotICAg
ICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxNiw2ICsxNjcsNTcgQEAgdm9p
ZCBTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKAogICAgICAgICByZXN1bHQuYXBwZW5k
KHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbaV0pKTsKIH0KIAorYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZShjb25zdCBBcmc6OkFyZyYgYXJnLCBWYWx1
ZSogdmFsdWUpCit7CisgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OlRt
cDoKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICBjYXNlIEFy
Zzo6U3RhY2s6CisgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOyAvLyBPSwor
ICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgICAgICAgICAmJiBhcmcuYmFzZSgpICE9IFRtcChN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBl
KHZhbHVlLT50eXBlKCkpOworCisgICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7Cit9CisKK2Jv
b2wgU3RhY2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yUmVwKEFpcjo6Q29kZSYgY29kZSwgY29u
c3QgQWlyOjpBcmcmIGFyZywgY29uc3QgVmFsdWVSZXAmIHJlcCkKK3sKKyAgICBzd2l0Y2ggKHJl
cC5raW5kKCkpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIC8vIFdlIGFscmVh
ZHkgdmVyaWZpZWQgdGhpcyBhYm92ZS4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICByZXR1cm4gYXJnLmlzVG1wKCk7CisgICAg
Y2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgIHJldHVybiBhcmcgPT0gVG1wKHJlcC5y
ZWcoKSk7CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgaWYgKGFy
ZyA9PSBBcmc6OmNhbGxBcmcocmVwLm9mZnNldEZyb21TUCgpKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoYXJnLmlzQWRkcigpICYmIGNvZGUuZnJhbWVTaXplKCkpIHsK
KyAgICAgICAgICAgIGlmIChhcmcuYmFzZSgpID09IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlcikKKyAgICAgICAgICAgICAgICAmJiBhcmcub2Zmc2V0KCkgPT0gcmVwLm9mZnNldEZyb21T
UCgpIC0gY29kZS5mcmFtZVNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmIChhcmcuYmFzZSgpID09IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgJiYgYXJnLm9mZnNldCgpID09IHJlcC5vZmZz
ZXRGcm9tU1AoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogVmFsdWVS
ZXAgU3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JBcmcoQ29kZSYgY29kZSwgY29uc3QgQXJnJiBhcmcp
CiB7CiAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMTkzMzc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDYgKzY2LDggQEAgcHJvdGVjdGVkOgogICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRo
ZSBJbnN0J3MgYXJncywgc3RhcnRpbmcgd2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVu
IHZlY3Rvci4KICAgICB2b2lkIGFwcGVuZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQm
LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYp
OwogCisgICAgc3RhdGljIGJvb2wgaXNBcmdWYWxpZEZvclZhbHVlKGNvbnN0IEFpcjo6QXJnJiwg
VmFsdWUqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0FyZ1ZhbGlkRm9yUmVwKEFpcjo6Q29kZSYsIGNv
bnN0IEFpcjo6QXJnJiwgY29uc3QgVmFsdWVSZXAmKTsKICAgICBzdGF0aWMgVmFsdWVSZXAgcmVw
Rm9yQXJnKEFpcjo6Q29kZSYsIGNvbnN0IEFpcjo6QXJnJik7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAxOTMzNzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDYgKzk3LDc5IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJl
cD4mIHJlcHMoKSBjb25zdCB7IHJldHVybiBtX3JlcHM7IH0KIAorICAgIC8vIFN0YWNrbWFwcyBh
bGxvdyB5b3UgdG8gc3BlY2lmeSB0aGF0IHRoZSBvcGVyYXRpb24gbWF5IGNsb2JiZXIgc29tZSBy
ZWdpc3RlcnMuIENsb2JiZXJpbmcgYSByZWdpc3RlcgorICAgIC8vIG1lYW5zIHRoYXQgdGhlIG9w
ZXJhdGlvbiBhcHBlYXJzIHRvIHN0b3JlIGEgdmFsdWUgaW50byB0aGUgcmVnaXN0ZXIsIGJ1dCB0
aGUgY29tcGlsZXIgZG9lc24ndAorICAgIC8vIGFzc3VtZSB0byBrbm93IGFueXRoaW5nIGFib3V0
IHdoYXQga2luZCBvZiB2YWx1ZSBtaWdodCBoYXZlIGJlZW4gc3RvcmVkLiBJbiBCMydzIG1vZGVs
IG9mCisgICAgLy8gZXhlY3V0aW9uLCByZWdpc3RlcnMgYXJlIHJlYWQgb3Igd3JpdHRlbiBhdCBp
bnN0cnVjdGlvbiBib3VuZGFyaWVzIHJhdGhlciB0aGFuIGluc2lkZSB0aGUKKyAgICAvLyBpbnN0
cnVjdGlvbnMgdGhlbXNlbHZlcy4gQSByZWdpc3RlciBjb3VsZCBiZSByZWFkIG9yIHdyaXR0ZW4g
aW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBpbnN0cnVjdGlvbgorICAgIC8vIGV4ZWN1dGVzLCBvciBp
bW1lZGlhdGVseSBhZnRlci4gTm90ZSB0aGF0IGF0IGEgYm91bmRhcnkgYmV0d2VlbiBpbnN0cnVj
dGlvbiBBIGFuZCBpbnN0cnVjdGlvbiBCIHdlCisgICAgLy8gc2ltdWx0YW5lb3VzbHkgbG9vayBh
dCB3aGF0IEEgZG9lcyBhZnRlciBpdCBleGVjdXRlcyBhbmQgd2hhdCBCIGRvZXMgYmVmb3JlIGl0
IGV4ZWN1dGVzLiBUaGlzIGlzCisgICAgLy8gYmVjYXVzZSB3aGVuIHRoZSBjb21waWxlciBjb25z
aWRlcnMgd2hhdCBoYXBwZW5zIHRvIHJlZ2lzdGVycywgaXQgdmlld3MgdGhlIGJvdW5kYXJ5IGJl
dHdlZW4gdHdvCisgICAgLy8gaW5zdHJ1Y3Rpb25zIGFzIGEga2luZCBvZiBhdG9taWMgcG9pbnQg
d2hlcmUgdGhlIGxhdGUgZWZmZWN0cyBvZiBBIGhhcHBlbiBhdCB0aGUgc2FtZSB0aW1lIGFzIHRo
ZQorICAgIC8vIGVhcmx5IGVmZmVjdHMgb2YgQi4KKyAgICAvLworICAgIC8vIFRoZSBjb21waWxl
ciB2aWV3cyBhIHN0YWNrbWFwIGFzIGEgc2luZ2xlIGluc3RydWN0aW9uLCBldmVuIHRob3VnaCBv
ZiBjb3Vyc2UgdGhlIHN0YWNrbWFwIG1heSBiZQorICAgIC8vIGNvbXBvc2VkIG9mIGFueSBudW1i
ZXIgb2YgaW5zdHJ1Y3Rpb25zIChpZiBpdCdzIGEgUGF0Y2hwb2ludCkuIFlvdSBjYW4gY2xhaW0g
dGhhdCBhIHN0YWNrbWFwIHZhbHVlCisgICAgLy8gY2xvYmJlcnMgYSBzZXQgb2YgcmVnaXN0ZXJz
IGJlZm9yZSB0aGUgc3RhY2ttYXAncyBpbnN0cnVjdGlvbiBvciBhZnRlci4gQ2xvYmJlcmluZyBi
ZWZvcmUgaXMgY2FsbGVkCisgICAgLy8gZWFybHkgY2xvYmJlciwgd2hpbGUgY2xvYmJlcmluZyBh
ZnRlciBpcyBjYWxsZWQgbGF0ZSBjbG9iYmVyLgorICAgIC8vCisgICAgLy8gVGhpcyBpcyBxdWl0
ZSBmbGV4aWJsZSBidXQgaXQgaGFzIGl0cyBsaW1pdGF0aW9ucy4gQW55IHJlZ2lzdGVyIGxpc3Rl
ZCBhcyBhbiBlYXJseSBjbG9iYmVyIHdpbGwKKyAgICAvLyBpbnRlcmZlcmUgd2l0aCBhbGwgdXNl
cyBvZiB0aGUgc3RhY2ttYXAuIEFueSByZWdpc3RlciBsaXN0ZWQgYXMgYSBsYXRlIGNsb2JiZXIg
d2lsbCBpbnRlcmZlcmUgd2l0aAorICAgIC8vIGFsbCBkZWZzIG9mIHRoZSBzdGFja21hcCAoaS5l
LiB0aGUgcmVzdWx0KS4gVGhpcyBtZWFucyB0aGF0IGl0J3MgY3VycmVudGx5IG5vdCBwb3NzaWJs
ZSB0byBjbGFpbQorICAgIC8vIHRvIGNsb2JiZXIgYSByZWdpc3RlciB3aGlsZSBzdGlsbCBhbGxv
d2luZyB0aGF0IHJlZ2lzdGVyIHRvIGJlIHVzZWQgZm9yIGJvdGggYW4gaW5wdXQgYW5kIGFuIG91
dHB1dAorICAgIC8vIG9mIHRoZSBpbnN0cnVjdGlvbi4gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQg
QjMncyBzb2xlIGNsaWVudCAodGhlIEZUTCkgY3VycmVudGx5IG5ldmVyIHdhbnRzIHRvCisgICAg
Ly8gY29udmV5IHN1Y2ggYSBjb25zdHJhaW50LCBidXQgaXQgd2lsbCB3YW50IGl0IGV2ZW50dWFs
bHkgKEZJWE1FOgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTE4MjMpLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGEgY29tbW9uIHVzZSBjYXNlIG9m
IGVhcmx5IGNsb2JiZXIgc2V0cyBpcyB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgaXMgdGhlIHNldCBv
ZiByZWdpc3RlcnMKKyAgICAvLyB0aGF0IHNoYWxsIG5vdCBiZSB1c2VkIGZvciBpbnB1dHMgdG8g
dGhlIHZhbHVlLiBCdXQgQjMgc3VwcG9ydHMgdHdvIGRpZmZlcmVudCB3YXlzIG9mIHNwZWNpZnlp
bmcKKyAgICAvLyB0aGlzLCB0aGUgb3RoZXIgYmVpbmcgTGF0ZVVzZSAobm90IHlldCBhdmFpbGFi
bGUgdG8gc3RhY2ttYXBzIGRpcmVjdGx5LCBGSVhNRToKKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMzM1KS4gQSBsYXRlIHVzZSBtYWtlcyB0aGUgdXNl
IG9mIHRoYXQgdmFsdWUgYXBwZWFyIHRvCisgICAgLy8gaGFwcGVuIGFmdGVyIHRoZSBpbnN0cnVj
dGlvbi4gVGhpcyBtZWFucyB0aGF0IGEgbGF0ZSB1c2UgY2Fubm90IHVzZSB0aGUgc2FtZSByZWdp
c3RlciBhcyB0aGUgcmVzdWx0CisgICAgLy8gYW5kIGl0IGNhbm5vdCB1c2UgdGhlIHNhbWUgcmVn
aXN0ZXIgYXMgZWl0aGVyIGVhcmx5IG9yIGxhdGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4gTGF0ZSB1
c2VzIGFyZQorICAgIC8vIHVzdWFsbHkgYSBiZXR0ZXIgd2F5IG9mIHNheWluZyB0aGF0IGEgY2xv
YmJlcmVkIHJlZ2lzdGVyIGNhbm5vdCBiZSB1c2VkIGZvciBhbiBpbnB1dC4gRWFybHkgY2xvYmJl
cgorICAgIC8vIG1lYW5zIHRoYXQgc29tZSByZWdpc3RlcihzKSBpbnRlcmZlcmUgd2l0aCAqYWxs
KiBpbnB1dHMsIHdoaWxlIExhdGVVc2UgbWVhbnMgdGhhdCBzb21lIHZhbHVlCisgICAgLy8gaW50
ZXJmZXJlcyB3aXRoIHdoYXRldmVyIGlzIGxpdmUgYWZ0ZXIgdGhlIGluc3RydWN0aW9uLiBCZWxv
dyBpcyBhIGxpc3Qgb2YgZXhhbXBsZXMgb2YgaG93IHRoZSBGVEwKKyAgICAvLyBjYW4gaGFuZGxl
IGl0cyB2YXJpb3VzIGtpbmRzIG9mIHNjZW5hcmlvcyB1c2luZyBhIGNvbWJpbmF0aW9uIG9mIGVh
cmx5IGNsb2JiZXIsIGxhdGUgY2xvYmJlciwgYW5kCisgICAgLy8gbGF0ZSB1c2UuIFRoZXNlIGV4
YW1wbGVzIGFyZSBmb3IgWDg2XzY0LCB3Lmwuby5nLgorICAgIC8vCisgICAgLy8gQmFzaWMgQnlJ
ZCBwYXRjaHBvaW50OiBFYXJseSBhbmQgbGF0ZSBjbG9iYmVyIG9mIHIxMS4gRWFybHkgY2xvYmJl
ciBwcmV2ZW50cyBhbnkgaW5wdXRzIGZyb20gdXNpbmcKKyAgICAvLyByMTEgc2luY2UgdGhhdCB3
b3VsZCBtZXNzIHdpdGggdGhlIE1hY3JvQXNzZW1ibGVyJ3MgYXNzdW1wdGlvbnMgd2hlbiB3ZQor
ICAgIC8vIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS4gTGF0ZSBjbG9iYmVyIHRlbGxz
IEIzIHRoYXQgdGhlIHBhdGNocG9pbnQgbWF5IG92ZXJ3cml0ZSByMTEuCisgICAgLy8KKyAgICAv
LyBCeUlkIHBhdGNocG9pbnQgaW4gYSB0cnkgYmxvY2sgd2l0aCBzb21lIGxpdmUgc3RhdGU6IFRo
aXMgbWlnaHQgdGhyb3cgYW4gZXhjZXB0aW9uIGFmdGVyIGFscmVhZHkKKyAgICAvLyBhc3NpZ25p
bmcgdG8gdGhlIHJlc3VsdC4gU28sIHRoaXMgc2hvdWxkIExhdGVVc2UgYWxsIHN0YWNrbWFwIHZh
bHVlcyB0byBlbnN1cmUgdGhhdCB0aGUgc3RhY2ttYXAKKyAgICAvLyB2YWx1ZXMgZG9uJ3QgaW50
ZXJmZXJlIHdpdGggdGhlIHJlc3VsdC4gTm90ZSB0aGF0IHdlIGRvIG5vdCBMYXRlVXNlIHRoZSBu
b24tT1NSIGlucHV0cyBvZiB0aGUgQnlJZAorICAgIC8vIHNpbmNlIExhdGVVc2UgaW1wbGllcyB0
aGF0IHRoZSB1c2UgaXMgY29sZDogdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB3aWxsIGFzc3VtZSB0
aGF0IHRoZSB1c2UgaXMgbm90CisgICAgLy8gaW1wb3J0YW50IGZvciB0aGUgY3JpdGljYWwgcGF0
aC4gQWxzbywgZWFybHkgYW5kIGxhdGUgY2xvYmJlciBvZiByMTEuCisgICAgLy8KKyAgICAvLyBC
YXNpYyBCeUlkRmx1c2ggcGF0Y2hwb2ludDogV2UgY291bGQgZG8gRmx1c2ggdGhlIHNhbWUgd2F5
IHdlIGRpZCBpdCB3aXRoIExMVk06IGlnbm9yZSBpdCBhbmQgbGV0CisgICAgLy8gUG9seW1vcnBo
aWNBY2Nlc3MgZmlndXJlIGl0IG91dC4gT3IsIHdlIGNvdWxkIGFkZCBpbnRlcm5hbCBjbG9iYmVy
IHN1cHBvcnQgKEZJWE1FOgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTE4MjMpLiBPciwgd2UgY291bGQgZG8gaXQgYnkgZWFybHkgY2xvYmJlcmluZyBy
MTEsIGxhdGUKKyAgICAvLyBjbG9iYmVyaW5nIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMsIGFuZCBj
b25zdHJhaW5pbmcgdGhlIHJlc3VsdCB0byBzb21lIHJlZ2lzdGVyLiBPciwgd2UgY291bGQgZG8K
KyAgICAvLyB0aGF0IGJ1dCBsZWF2ZSB0aGUgcmVzdWx0IGNvbnN0cmFpbmVkIHRvIFNvbWVSZWdp
c3Rlciwgd2hpY2ggd2lsbCBjYXVzZSBpdCB0byB1c2UgYSBjYWxsZWUtc2F2ZQorICAgIC8vIHJl
Z2lzdGVyLiBJbnRlcm5hbCBjbG9iYmVyIHN1cHBvcnQgd291bGQgYWxsb3cgdXMgdG8gdXNlIFNv
bWVSZWdpc3RlciB3aGlsZSBnZXR0aW5nIHRoZSByZXN1bHQgaW50bworICAgIC8vIGEgdm9sYXRp
bGUgcmVnaXN0ZXIuCisgICAgLy8KKyAgICAvLyBCeUlkRmx1c2ggcGF0Y2hwb2ludCBpbiBhIHRy
eSBibG9jayB3aXRoIHNvbWUgbGl2ZSBzdGF0ZTogTGF0ZVVzZSBhbGwgZm9yLU9TUiBzdGFja21h
cCB2YWx1ZXMsCisgICAgLy8gZWFybHkgY2xvYmJlciBvZiByMTEgdG8gcHJldmVudCB0aGUgb3Ro
ZXIgaW5wdXRzIGZyb20gdXNpbmcgcjExLCBhbmQgbGF0ZSBjbG9iYmVyIG9mIGFsbCB2b2xhdGls
ZQorICAgIC8vIHJlZ2lzdGVycyB0byBtYWtlIHdheSBmb3IgdGhlIGNhbGwuIFRvIGhhbmRsZSB0
aGUgcmVzdWx0LCB3ZSBjb3VsZCBkbyBhbnkgb2Ygd2hhdCBpcyBsaXN0ZWQgaW4gdGhlCisgICAg
Ly8gcHJldmlvdXMgcGFyYWdyYXBoLgorICAgIC8vCisgICAgLy8gQmFzaWMgSlMgY2FsbDogRm9y
Y2UgYWxsIG5vbi1PU1IgaW5wdXRzIGludG8gc3BlY2lmaWMgbG9jYXRpb25zIChyZWdpc3Rlciwg
c3RhY2ssIHdoYXRldmVyKS4KKyAgICAvLyBBbGwgdm9sYXRpbGUgcmVnaXN0ZXJzIGFyZSBsYXRl
LWNsb2JiZXJlZC4gVGhlIG91dHB1dCBpcyBjb25zdHJhaW5lZCB0byBhIHJlZ2lzdGVyIGFzIHdl
bGwuCisgICAgLy8KKyAgICAvLyBKUyBjYWxsIGluIGEgdHJ5IGJsb2NrIHdpdGggc29tZSBsaXZl
IHN0YXRlOiBMYXRlVXNlIGFsbCBmb3ItT1NSIHN0YWNrbWFwIHZhbHVlcywgZnVsbHkgY29uc3Ry
YWluCisgICAgLy8gYWxsIG5vbi1PU1IgaW5wdXRzIGFuZCB0aGUgcmVzdWx0LCBhbmQgbGF0ZSBj
bG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuCisgICAgLy8KKyAgICAvLyBKUyB0YWlsIGNh
bGw6IFBhc3MgYWxsIGlucHV0cyBhcyBhIHdhcm0gdmFyaWFudCBvZiBBbnkgKEZJWE1FOgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE4MTEpLgorICAg
IC8vCisgICAgLy8gTm90ZSB0aGF0IHdlIGNhbm5vdCB5ZXQgZG8gYWxsIG9mIHRoZXNlIHRoaW5n
cyBiZWNhdXNlIGFsdGhvdWdoIEFpciBhbHJlYWR5IHN1cHBvcnRzIGFsbCBvZiB0aGVzZQorICAg
IC8vIHZhcmlvdXMgZm9ybXMgb2YgdXNlcyAoTGF0ZVVzZSBhbmQgd2FybSB1bmNvbnN0cmFpbmVk
IHVzZSksIEIzIGRvZXNuJ3QgeWV0IGV4cG9zZSBhbGwgb2YgaXQuIFRoZQorICAgIC8vIGJ1Z3Mg
YXJlOgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEz
MzUgKExhdGVVc2UpCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MTgxMSAod2FybSBBbnkpCiAgICAgdm9pZCBjbG9iYmVyRWFybHkoY29uc3QgUmVnaXN0
ZXJTZXQmIHNldCkKICAgICB7CiAgICAgICAgIG1fZWFybHlDbG9iYmVyZWQubWVyZ2Uoc2V0KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE5
MzM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgLy8g
cmV0dXJuIHR5cGUuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFBh
dGNocG9pbnQ6CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgPT0gVm9pZCkKKyAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+
cmVzdWx0Q29uc3RyYWludCA9PSBWYWx1ZVJlcDo6QW55LCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcENv
bnN0cmFpbnQodmFsdWUsIENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIHZhbHVlLT5hczxQYXRjaHBv
aW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQpKTsKICAgICAgICAgICAgICAgICB2YWxpZGF0
ZVN0YWNrbWFwKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQ2hlY2tBZGQ6CkBAIC0zMzgsMTQgKzM0MiwyNiBAQCBwcml2YXRlOgogICAgICAgICBTdGFj
a21hcFZhbHVlKiBzdGFja21hcCA9IHZhbHVlLT5hczxTdGFja21hcFZhbHVlPigpOwogICAgICAg
ICBWQUxJREFURShzdGFja21hcCwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgVkFMSURBVEUo
c3RhY2ttYXAtPm51bUNoaWxkcmVuKCkgPj0gc3RhY2ttYXAtPnJlcHMoKS5zaXplKCksICgiQXQg
IiwgKnN0YWNrbWFwKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFja21h
cC0+cmVwcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlcCYgcmVw
ID0gc3RhY2ttYXAtPnJlcHMoKVtpXTsKLSAgICAgICAgICAgIGlmIChyZXAua2luZCgpICE9IFZh
bHVlUmVwOjpSZWdpc3RlcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmIChyZXAucmVnKCkuaXNHUFIoKSkKLSAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludChz
dGFja21hcC0+Y2hpbGQoaSktPnR5cGUoKSksICgiQXQgIiwgKnN0YWNrbWFwKSk7CisgICAgICAg
IGZvciAoQ29uc3RyYWluZWRWYWx1ZSBjaGlsZCA6IHN0YWNrbWFwLT5jb25zdHJhaW5lZENoaWxk
cmVuKCkpCisgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwQ29uc3RyYWludChzdGFja21hcCwg
Y2hpbGQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlU3RhY2ttYXBDb25zdHJhaW50
KFZhbHVlKiBjb250ZXh0LCBjb25zdCBDb25zdHJhaW5lZFZhbHVlJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAodmFsdWUucmVwKCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OkFueToKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICBj
YXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKHZhbHVlLnJlcCgpLnJl
ZygpLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUudmFsdWUo
KS0+dHlwZSgpKSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBWQUxJREFURShpc0Zsb2F0KHN0YWNrbWFwLT5jaGlsZChp
KS0+dHlwZSgpKSwgKCJBdCAiLCAqc3RhY2ttYXApKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RShpc0Zsb2F0KHZhbHVlLnZhbHVlKCktPnR5cGUoKSksICgiQXQgIiwgKmNvbnRleHQsICI6ICIs
IHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFZBTElEQVRFKGZhbHNlLCAoIkF0ICIsICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMTkzMzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOwog
ICAgIH0KIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IEtpbmQgbV9raW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlz
aW9uIDE5MzM3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzIwLDYgKzM3MjAsODcgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludE1hbnlJ
bW1zKCkKICAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKIH0KIAordm9pZCB0
ZXN0UGF0Y2hwb2ludFdpdGhSZWdpc3RlclJlc3VsdCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJn
MSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
KyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hw
b2ludFZhbHVlPihwcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChDb25zdHJhaW5lZFZhbHVlKGFyZzEsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBw
YXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcyLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKSk7CisgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpy
ZWcoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAor
ICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6
ZSgpID09IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0gPT0gVmFsdWVSZXA6
OnJlZyhHUFJJbmZvOjpub25BcmdHUFIwKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
c1sxXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkp
OworICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zLnJlcHNbMV0uZ3ByKCksIEdQUkluZm86Om5v
bkFyZ0dQUjApOworICAgICAgICAgICAgaml0LmFkZDMyKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CisKKyAgICBD
SEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgMSwgMikgPT0gMyk7Cit9CisKK3ZvaWQgdGVz
dFBhdGNocG9pbnRXaXRoU3RhY2tBcmd1bWVudFJlc3VsdCgpCit7CisgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSog
YXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFw
cGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZzEsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcyLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKSk7CisgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVw
OjpzdGFja0FyZ3VtZW50KDApOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
CisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5z
aXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXSA9PSBWYWx1ZVJl
cDo6c3RhY2soLXN0YXRpY19jYXN0PGludHB0cl90Pihwcm9jLmZyYW1lU2l6ZSgpKSkpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKHBhcmFt
cy5yZXBzWzFdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgMCkpOworICAgICAgICAgICAgaml0LmFkZDMyKHBhcmFtcy5yZXBz
WzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgMCkpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJv
bFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKKworICAgIENIRUNL
KGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCAxLCAyKSA9PSAzKTsKK30KKwordm9pZCB0ZXN0UGF0
Y2hwb2ludFdpdGhBbnlSZXN1bHQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4o
cHJvYywgRG91YmxlLCBPcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFp
bmVkVmFsdWUoYXJnMSwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOworICAgIHBhdGNocG9pbnQt
PmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZzIsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsK
KyAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OkFueTsKKyAgICBw
YXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6YWxsRlBScygpKTsKKyAgICBwYXRj
aHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Cisg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldChHUFJJbmZvOjpyZWdUMCkpOworICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzBdLmlzU3RhY2soKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
c1sxXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkp
OworICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zLnJlcHNbMV0uZ3ByKCksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5hZGQzMihwYXJhbXMucmVwc1syXS5ncHIoKSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKEdQUkluZm86
OnJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShG
UFJJbmZvOjpmcFJlZ1QwLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIHBhcmFtcy5yZXBzWzBdLm9mZnNldEZyb21GUCgpKSk7CisgICAgICAgIH0pOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHBhdGNocG9pbnQpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxkb3VibGU+KHByb2MsIDEs
IDIpID09IDMpOworfQorCiB2b2lkIHRlc3RTaW1wbGVDaGVjaygpCiB7CiAgICAgUHJvY2VkdXJl
IHByb2M7CkBAIC01OTc5LDYgKzYwNjAsOSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50QW55KCkpOwogICAgIFJVTih0ZXN0UGF0Y2hwb2ludEFu
eUltbSgpKTsKICAgICBSVU4odGVzdFBhdGNocG9pbnRNYW55SW1tcygpKTsKKyAgICBSVU4odGVz
dFBhdGNocG9pbnRXaXRoUmVnaXN0ZXJSZXN1bHQoKSk7CisgICAgUlVOKHRlc3RQYXRjaHBvaW50
V2l0aFN0YWNrQXJndW1lbnRSZXN1bHQoKSk7CisgICAgUlVOKHRlc3RQYXRjaHBvaW50V2l0aEFu
eVJlc3VsdCgpKTsKICAgICBSVU4odGVzdFNpbXBsZUNoZWNrKCkpOwogICAgIFJVTih0ZXN0Q2hl
Y2tMZXNzVGhhbigpKTsKICAgICBSVU4odGVzdENoZWNrTWVnYUNvbWJvKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTkzMzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHN0YXRpYyBSZWdpc3RlclNldCB2
b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOwogICAgIHN0YXRpYyBSZWdpc3RlclNldCBzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKTsgLy8gVGhlIHVuaW9uIG9mIGNhbGxlZSBzYXZlcyBhbmQg
c3BlY2lhbCByZWdpc3RlcnMuCi0gICAgc3RhdGljIFJlZ2lzdGVyU2V0IG1hY3JvU2NyYXRjaFJl
Z2lzdGVycygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWdpc3RlclNldCBtYWNy
b1NjcmF0Y2hSZWdpc3RlcnMoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnaXN0
ZXJTZXQgYWxsR1BScygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWdpc3RlclNl
dCBhbGxGUFJzKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbFJlZ2lzdGVycygpOwo=
</data>
<flag name="review"
          id="291577"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>