<?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>154782</bug_id>
          
          <creation_ts>2016-02-27 16:34:08 -0800</creation_ts>
          <short_desc>FTL should lower its abstract heaps to B3 heap ranges</short_desc>
          <delta_ts>2016-02-28 13:07:38 -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>
          
          <blocked>154658</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1168920</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-27 16:34:08 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168921</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-27 16:34:47 -0800</bug_when>
    <thetext>This should unlock more load elimination in B3.  It&apos;s also essential for doing a good job on store elimination.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168926</commentid>
    <comment_count>2</comment_count>
      <attachid>272427</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-27 16:38:07 -0800</bug_when>
    <thetext>Created attachment 272427
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168950</commentid>
    <comment_count>3</comment_count>
      <attachid>272435</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-27 20:11:07 -0800</bug_when>
    <thetext>Created attachment 272435
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168951</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-27 20:13:30 -0800</bug_when>
    <thetext>Attachment 272435 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:109:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h:135:  JSCell_freeListNext is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 10 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>1169007</commentid>
    <comment_count>5</comment_count>
      <attachid>272435</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-28 11:10:12 -0800</bug_when>
    <thetext>Comment on attachment 272435
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:27
&gt; +        unnecessary here sine we tightly control the height of the heap hierarchy.

typo: since

&gt; Source/JavaScriptCore/b3/B3HeapRange.h:62
&gt; +        // Detects overflow in debug mode. Ranges are compiler-controlled so this is not likely
&gt; +        // to ever be an issue.

I don&apos;t think this comment is needed.

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:87
&gt; +        current = child-&gt;range().end();

Should this be taking the max() function? Or are children sorted?

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h:201
&gt; +    // It&apos;s super tempting to use lambdas for this, but I suspect that we&apos;ll create enough of
&gt; +    // these that we want to do it the hard way.

I don&apos;t think this comment is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169014</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-28 12:32:28 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 272435 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272435&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:27
&gt; &gt; +        unnecessary here sine we tightly control the height of the heap hierarchy.
&gt; 
&gt; typo: since

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3HeapRange.h:62
&gt; &gt; +        // Detects overflow in debug mode. Ranges are compiler-controlled so this is not likely
&gt; &gt; +        // to ever be an issue.
&gt; 
&gt; I don&apos;t think this comment is needed.

Removed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:87
&gt; &gt; +        current = child-&gt;range().end();
&gt; 
&gt; Should this be taking the max() function? Or are children sorted?

No, and they&apos;re not sorted.  This line of code ensures its own correctness: the next iteration&apos;s call to compute() will take the last iteration&apos;s end.  The compute() method takes begin as an argument, and sets the range such that the end is greater than the begin.  Therefore, &apos;current&apos; is always the current max.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h:201
&gt; &gt; +    // It&apos;s super tempting to use lambdas for this, but I suspect that we&apos;ll create enough of
&gt; &gt; +    // these that we want to do it the hard way.
&gt; 
&gt; I don&apos;t think this comment is needed.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169015</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-28 12:34:14 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/197299</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169023</commentid>
    <comment_count>8</comment_count>
      <attachid>272435</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-28 13:07:38 -0800</bug_when>
    <thetext>Comment on attachment 272435
the patch

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

&gt;&gt;&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:87
&gt;&gt;&gt; +        current = child-&gt;range().end();
&gt;&gt; 
&gt;&gt; Should this be taking the max() function? Or are children sorted?
&gt; 
&gt; No, and they&apos;re not sorted.  This line of code ensures its own correctness: the next iteration&apos;s call to compute() will take the last iteration&apos;s end.  The compute() method takes begin as an argument, and sets the range such that the end is greater than the begin.  Therefore, &apos;current&apos; is always the current max.

Right. Makes sense.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272427</attachid>
            <date>2016-02-27 16:38:07 -0800</date>
            <delta_ts>2016-02-27 20:11:07 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31491</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3MjU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBA
CisyMDE2LTAyLTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBsb3dlciBpdHMgYWJzdHJhY3QgaGVhcHMgdG8gQjMgaGVhcCByYW5nZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDc4MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsgaW4gcHJv
Z3Jlc3MuCisKKyAgICAgICAgKiBiMy9CM0hlYXBSYW5nZS5oOgorICAgICAgICAoSlNDOjpCMzo6
SGVhcFJhbmdlOjpIZWFwUmFuZ2UpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXAuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OmNoYW5nZVBhcmVudCk6CisgICAgICAgIChKU0M6
OkZUTDo6QWJzdHJhY3RIZWFwOjpjb21wdXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFj
dEhlYXA6OnNoYWxsb3dEdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OmR1
bXApOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6ZGVlcER1bXApOgorICAgICAg
ICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6YmFkUmFuZ2VFcnJvcik6CisgICAgICAgIChKU0M6
OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6SW5kZXhlZEFic3RyYWN0SGVhcCk6CisgICAgICAg
IChKU0M6OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6YmFzZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpJbmRleGVkQWJzdHJhY3RIZWFwOjphdFNsb3cpOgorICAgICAgICAoSlNDOjpGVEw6
OkluZGV4ZWRBYnN0cmFjdEhlYXA6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkFi
c3RyYWN0SGVhcDo6ZGVjb3JhdGVJbnN0cnVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkZUTDo6QWJzdHJhY3RGaWVsZDo6ZHVtcCk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTEFi
c3RyYWN0SGVhcC5oOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RI
ZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OmlzSW5pdGlhbGl6ZWQpOgor
ICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChK
U0M6OkZUTDo6QWJzdHJhY3RIZWFwOjpwYXJlbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkFic3Ry
YWN0SGVhcDo6aGVhcE5hbWUpOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6cmFu
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6b2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpJbmRleGVkQWJzdHJhY3RIZWFwOjphdEFueUluZGV4KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpJbmRleGVkQWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6OkZUTDo6SW5k
ZXhlZEFic3RyYWN0SGVhcDo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhl
ZEFic3RyYWN0SGVhcDo6cmV0dXJuSW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpGVEw6Oklu
ZGV4ZWRBYnN0cmFjdEhlYXA6OldpdGhvdXRaZXJvT3JPbmVIYXNoVHJhaXRzOjpjb25zdHJ1Y3RE
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6Oldp
dGhvdXRaZXJvT3JPbmVIYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6
OkZUTDo6QWJzdHJhY3RIZWFwOjpjaGFuZ2VQYXJlbnQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGVEw6OkFic3RyYWN0RmllbGQ6OkFic3RyYWN0RmllbGQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGVEw6OkFic3RyYWN0RmllbGQ6OmluaXRpYWxpemUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGVEw6OkFic3RyYWN0RmllbGQ6Om9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkFic3Ry
YWN0SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnkpOgorICAgICAgICAoSlND
OjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6On5BYnN0cmFjdEhlYXBSZXBvc2l0b3J5KToK
KyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZU1lbW9y
eSk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVD
Q2FsbFJlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRl
Y29yYXRlQ0NhbGxXcml0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3Np
dG9yeTo6ZGVjb3JhdGVQYXRjaHBvaW50UmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVQYXRjaHBvaW50V3JpdGUpOgorICAgICAgICAoSlND
OjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUlu
c3RydWN0aW9ucyk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaDoK
KyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpmb3JBcnJheVR5cGUp
OgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OkhlYXBGb3JWYWx1
ZTo6SGVhcEZvclZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAqIGZ0
bC9GVExPdXRwdXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZCk6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpsb2FkOFNpZ25FeHQzMik6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0Ojpsb2FkOFplcm9FeHQzMik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojps
b2FkMTZTaWduRXh0MzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZDE2WmVyb0V4
dDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6OnN0b3JlMzJBczgpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c3Rv
cmUzMkFzMTYpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6YmFzZUluZGV4KToKKyAgICAg
ICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjphZGRyZXNz
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFic29sdXRlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6OmxvYWQ4U2lnbkV4dDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmxvYWQ4WmVyb0V4dDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQxNlNpZ25F
eHQzMik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpsb2FkMTZaZXJvRXh0MzIpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRw
dXQ6OmxvYWQ2NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpsb2FkUHRyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6c3RvcmUzMik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpzdG9yZTY0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnN0b3JlUHRyKToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OnN0b3JlRG91YmxlKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFzY3JpYmVS
YW5nZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpub25OZWdhdGl2ZTMyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQzMk5vbk5lZ2F0aXZlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6Om5vdEVxdWFs
KToKKyAgICAgICAgKiBmdGwvRlRMVHlwZWRQb2ludGVyLmg6CisgICAgICAgIChKU0M6OkZUTDo6
VHlwZWRQb2ludGVyOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OlR5cGVkUG9pbnRl
cjo6aGVhcCk6CisgICAgICAgIChKU0M6OkZUTDo6VHlwZWRQb2ludGVyOjp2YWx1ZSk6CisKIDIw
MTYtMDItMjcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBDTG9v
cCBidWlsZCBmaXguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAko
cmV2aXNpb24gMTk3MjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewogLy8gQWxpYXMgYW5hbHlzaXMgaW4gQjMgaXMgZG9uZSBieSBjaGVja2luZyBp
ZiB0d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhpcyBpcyBwb3dlcmZ1bCBlbm91Z2gKIC8v
IHRvIGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMgYW5hbHlzaXMgdXNlZCBieSB0aGUgREZH
LCBGVEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVhY2ggbm9kZQogLy8gaW4gdGhlIHRyZWUg
b2YgYWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0IHJhbmdlLgorLy8KKy8vIE5vdGUgdGhh
dCB0aGUgJ2JlZ2luJyBpcyBpbmNsdXNpdmUsIHdoaWxlIHRoZSAnZW5kJyBpcyBleGNsdXNpdmUu
IFRoZXNlIHR3byByYW5nZXMgYXJlIG5vbi0KKy8vIG92ZXJsYXBwaW5nOgorLy8KKy8vICAgICBy
YW5nZUEgPSAwLi4uOAorLy8gICAgIHJhbmdlQiA9IDguLi4xNgogCiBjbGFzcyBIZWFwUmFuZ2Ug
ewogcHVibGljOgpAQCAtNDgsNiArNTQsMTUgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAg
ICBleHBsaWNpdCBIZWFwUmFuZ2UodW5zaWduZWQgdmFsdWUpCisgICAgICAgIDogbV9iZWdpbih2
YWx1ZSkKKyAgICAgICAgLCBtX2VuZCh2YWx1ZSArIDEpCisgICAgeworICAgICAgICAvLyBEZXRl
Y3RzIG92ZXJmbG93IGluIGRlYnVnIG1vZGUuIFJhbmdlcyBhcmUgY29tcGlsZXItY29udHJvbGxl
ZCBzbyB0aGlzIGlzIG5vdCBsaWtlbHkKKyAgICAgICAgLy8gdG8gZXZlciBiZSBhbiBpc3N1ZS4K
KyAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOworICAgIH0KKwogICAgIEhlYXBSYW5n
ZSh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKQogICAgICAgICA6IG1fYmVnaW4oYmVnaW4p
CiAgICAgICAgICwgbV9lbmQoZW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwLmNwcAkocmV2aXNpb24gMTk3MjU5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM4LDI0ICszOCw5NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAK
LXZvaWQgQWJzdHJhY3RIZWFwOjpkZWNvcmF0ZUluc3RydWN0aW9uKExWYWx1ZSBpbnN0cnVjdGlv
biwgY29uc3QgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYgcmVwb3NpdG9yeSkgY29uc3QKK3VzaW5n
IG5hbWVzcGFjZSBCMzsKKworQWJzdHJhY3RIZWFwOjpBYnN0cmFjdEhlYXAoQWJzdHJhY3RIZWFw
KiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lLCBwdHJkaWZmX3Qgb2Zmc2V0KQorICAgIDog
bV9vZmZzZXQob2Zmc2V0KQorICAgICwgbV9oZWFwTmFtZShoZWFwTmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oaW5zdHJ1Y3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShyZXBvc2l0b3J5KTsKKyAg
ICBjaGFuZ2VQYXJlbnQocGFyZW50KTsKK30KKwordm9pZCBBYnN0cmFjdEhlYXA6OmNoYW5nZVBh
cmVudChBYnN0cmFjdEhlYXAqIHBhcmVudCkKK3sKKyAgICBpZiAobV9wYXJlbnQpIHsKKyAgICAg
ICAgYm9vbCByZXN1bHQgPSBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmVGaXJzdCh0aGlzKTsK
KyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgfQorCisgICAgbV9wYXJlbnQgPSBwYXJlbnQ7
CisKKyAgICBpZiAocGFyZW50KSB7CisgICAgICAgIEFTU0VSVCghbV9wYXJlbnQtPm1fY2hpbGRy
ZW4uY29udGFpbnModGhpcykpOworICAgICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5hcHBlbmQo
dGhpcyk7CisgICAgfQorfQorCit2b2lkIEFic3RyYWN0SGVhcDo6Y29tcHV0ZSh1bnNpZ25lZCBi
ZWdpbikKK3sKKyAgICAvLyBUaGlzIHJlY3Vyc2l2ZWx5IGNvbXB1dGVzIHRoZSByYW5nZXMgb2Yg
dGhlIHRyZWUuIFRoaXMgc29sdmVzIHRoZSBmb2xsb3dpbmcgY29uc3RyYWludHMKKyAgICAvLyBp
biBsaW5lYXIgdGltZToKKyAgICAvLworICAgIC8vIC0gQSBub2RlJ3MgZW5kIGlzIGdyZWF0ZXIg
dGhhbiBpdHMgYmVnaW4uCisgICAgLy8gLSBBIG5vZGUncyBiZWdpbiBpcyBncmVhdGVyIHRoYW4g
b3IgZXF1YWwgdG8gaXRzIHBhcmVudCdzIGJlZ2luLgorICAgIC8vIC0gQSBub2RlJ3MgZW5kIGlz
IGxlc3MgdGhhbiBvciBlcXVhbCB0byBpdHMgcGFyZW50J3MgZW5kLgorICAgIC8vIC0gVGhlIHJh
bmdlcyBhcmUgYXMgc21hbGwgYXMgcG9zc2libGUuCisgICAgLy8KKyAgICAvLyBJdCdzIE9LIHRv
IHJlY3Vyc2UgYmVjYXVzZSB3ZSBrZWVwIHRoZSBkZXB0aCBvZiBvdXIgYWJzdHJhY3QgaGVhcCBo
aWVyYXJjaHkgZmFpcmx5IHNhbmUuCisgICAgLy8gSSB0aGluayB0aGF0IGl0IGdldHMgNCBkZWVw
IGF0IG1vc3QuCisKKyAgICBpZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
TXVzdCBzcGVjaWFsLWNhc2UgbGVhdmVzIHNvIHRoYXQgdGhleSB1c2UganVzdCBvbmUgc2xvdCBv
biB0aGUgbnVtYmVyIGxpbmUuCisgICAgICAgIG1fcmFuZ2UgPSBIZWFwUmFuZ2UoYmVnaW4pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdW5zaWduZWQgY3VycmVudCA9IGJlZ2luOwor
ICAgIGZvciAoQWJzdHJhY3RIZWFwKiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgY2hp
bGQtPmNvbXB1dGUoY3VycmVudCk7CisgICAgICAgIGN1cnJlbnQgPSBjaGlsZC0+cmFuZ2UoKS5l
bmQoKTsKKyAgICB9CisKKyAgICBtX3JhbmdlID0gSGVhcFJhbmdlKGJlZ2luLCBjdXJyZW50KTsK
K30KKwordm9pZCBBYnN0cmFjdEhlYXA6OnNoYWxsb3dEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KGhlYXBOYW1lKCksICIoIiwgbV9vZmZzZXQsICIpIik7Cisg
ICAgaWYgKG1fcmFuZ2UpCisgICAgICAgIG91dC5wcmludCgiPCIsIG1fcmFuZ2UsICI+Iik7CiB9
CiAKIHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0g
ICAgb3V0LnByaW50KGhlYXBOYW1lKCkpOworICAgIHNoYWxsb3dEdW1wKG91dCk7CiAgICAgaWYg
KG1fcGFyZW50KQogICAgICAgICBvdXQucHJpbnQoIi0+IiwgKm1fcGFyZW50KTsKIH0KIAotdm9p
ZCBBYnN0cmFjdEZpZWxkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit2b2lkIEFic3Ry
YWN0SGVhcDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCwgdW5zaWduZWQgaW5kZW50KSBjb25z
dAogewotICAgIG91dC5wcmludChoZWFwTmFtZSgpLCAiKCIsIG1fb2Zmc2V0LCAiKSIpOwotICAg
IGlmIChwYXJlbnQoKSkKLSAgICAgICAgb3V0LnByaW50KCItPiIsICpwYXJlbnQoKSk7CisgICAg
YXV0byBwcmludEluZGVudCA9IFsmXSAoKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlu
ZGVudDsgaS0tOykKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIpOworICAgIH07CisKKyAg
ICBwcmludEluZGVudCgpOworICAgIHNoYWxsb3dEdW1wKG91dCk7CisKKyAgICBpZiAobV9jaGls
ZHJlbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCI6XG4iKTsKKyAgICBmb3IgKEFic3RyYWN0SGVh
cCogY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICBjaGlsZC0+ZGVlcER1bXAob3V0LCBpbmRl
bnQgKyAxKTsKK30KKwordm9pZCBBYnN0cmFjdEhlYXA6OmJhZFJhbmdlRXJyb3IoKSBjb25zdAor
eworICAgIGRhdGFMb2coIkhlYXAgZG9lcyBub3QgaGF2ZSByYW5nZTogIiwgKnRoaXMsICJcbiIp
OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIEluZGV4ZWRBYnN0cmFj
dEhlYXA6OkluZGV4ZWRBYnN0cmFjdEhlYXAoQWJzdHJhY3RIZWFwKiBwYXJlbnQsIGNvbnN0IGNo
YXIqIGhlYXBOYW1lLCBwdHJkaWZmX3Qgb2Zmc2V0LCBzaXplX3QgZWxlbWVudFNpemUpCkBAIC04
MCwyMyArMTUyLDIzIEBAIFR5cGVkUG9pbnRlciBJbmRleGVkQWJzdHJhY3RIZWFwOjpiYXNlSW4K
ICAgICByZXR1cm4gVHlwZWRQb2ludGVyKGF0QW55SW5kZXgoKSwgb3V0LmFkZFB0cihyZXN1bHQs
IG1fb2Zmc2V0ICsgb2Zmc2V0KSk7CiB9CiAKLWNvbnN0IEFic3RyYWN0RmllbGQmIEluZGV4ZWRB
YnN0cmFjdEhlYXA6OmF0U2xvdyhwdHJkaWZmX3QgaW5kZXgpCitjb25zdCBBYnN0cmFjdEhlYXAm
IEluZGV4ZWRBYnN0cmFjdEhlYXA6OmF0U2xvdyhwdHJkaWZmX3QgaW5kZXgpCiB7CiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpID49IG1fc21hbGxJbmRpY2VzLnNpemUoKSk7
CiAgICAgCiAgICAgaWYgKFVOTElLRUxZKCFtX2xhcmdlSW5kaWNlcykpCiAgICAgICAgIG1fbGFy
Z2VJbmRpY2VzID0gc3RkOjptYWtlX3VuaXF1ZTxNYXBUeXBlPigpOwogCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEFic3RyYWN0RmllbGQ+JiBmaWVsZCA9IG1fbGFyZ2VJbmRpY2VzLT5hZGQoaW5kZXgs
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWJzdHJhY3RI
ZWFwPiYgZmllbGQgPSBtX2xhcmdlSW5kaWNlcy0+YWRkKGluZGV4LCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgaWYgKCFmaWVsZCkgewotICAgICAgICBmaWVsZCA9IHN0ZDo6bWFrZV91
bmlxdWU8QWJzdHJhY3RGaWVsZD4oKTsKKyAgICAgICAgZmllbGQgPSBzdGQ6Om1ha2VfdW5pcXVl
PEFic3RyYWN0SGVhcD4oKTsKICAgICAgICAgaW5pdGlhbGl6ZSgqZmllbGQsIGluZGV4KTsKICAg
ICB9CiAKICAgICByZXR1cm4gKmZpZWxkOwogfQogCi12b2lkIEluZGV4ZWRBYnN0cmFjdEhlYXA6
OmluaXRpYWxpemUoQWJzdHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBzaWduZWRJbmRleCkK
K3ZvaWQgSW5kZXhlZEFic3RyYWN0SGVhcDo6aW5pdGlhbGl6ZShBYnN0cmFjdEhlYXAmIGZpZWxk
LCBwdHJkaWZmX3Qgc2lnbmVkSW5kZXgpCiB7CiAgICAgLy8gQnVpbGQgdXAgYSBuYW1lIG9mIHRo
ZSBmb3JtOgogICAgIC8vCkBAIC0xMTUsOSArMTg3LDEwIEBAIHZvaWQgSW5kZXhlZEFic3RyYWN0
SGVhcDo6aW5pdGlhbGl6ZShBYnMKICAgICAvLwogICAgIC8vICAgIEJsYWhfbmVnX0EKICAgICAv
LwotICAgIC8vIFRoaXMgdXNlZCB0byBiZSBpbXBvcnRhbnQgYmVjYXVzZSB3ZSB1c2VkIHRvIHVz
ZSB0aGUgc3RyaW5nIHRvIGRpc3Rpbmd1aXNoIHRoZSB0eXBlcy4gVGhpcyBpcwotICAgIC8vIG5v
dCByZWxldmFudCBhbnltb3JlLCBhbmQgdGhpcyBjb2RlIHdpbGwgYmUgcmVtb3ZlZCBldmVudHVh
bGx5LgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU0MzE5CisgICAgLy8gVGhpcyBuYW1pbmcgY29udmVudGlvbiBjb21lcyBmcm9tIG91ciBw
cmV2aW91cyB1c2Ugb2YgTExWTS4gSXQncyBub3QgY2xlYXIgdGhhdCB3ZSBuZWVkCisgICAgLy8g
aXQgYW55bW9yZSwgdGhvdWdoIGl0IGlzIHNvcnQgb2YgbmlmdHkuIEJhc2ljYWxseSwgQjMgZG9l
c24ndCBuZWVkIHN0cmluZyBuYW1lcyBmb3IKKyAgICAvLyBhYnN0cmFjdCBoZWFwcywgYnV0IHRo
ZSBmYWN0IHRoYXQgd2UgaGF2ZSBhIHJlYXNvbmFibHkgZWZmaWNpZW50IHdheSB0byBhbHdheXMg
bmFtZSB0aGUKKyAgICAvLyBoZWFwcyB3aWxsIHByb2JhYmx5IGNvbWUgaW4gaGFuZHkgZm9yIGRl
YnVnZ2luZy4KICAgICAKICAgICBzdGF0aWMgY29uc3QgY2hhciogbmVnU3BsaXQgPSAiX25lZ18i
OwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwb3NTcGxpdCA9ICJfIjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTk3MjU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAor
I2luY2x1ZGUgIkIzSGVhcFJhbmdlLmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlIDxhcnJheT4KQEAgLTM5LDEwICs0
MCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotLy8gVGhpcyBpcyBo
ZXJlIGJlY2F1c2Ugd2UgdXNlZCB0byBnZW5lcmF0ZSBMTFZNJ3MgVEJBQS4gSW4gdGhlIGZ1dHVy
ZSB3ZSB3aWxsIHdhbnQgdG8gZ2VuZXJhdGUKLS8vIEIzIEhlYXBSYW5nZXMgaW5zdGVhZC4KLS8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzE5Ci0K
IGNsYXNzIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk7CiBjbGFzcyBPdXRwdXQ7CiBjbGFzcyBUeXBl
ZFBvaW50ZXI7CkBAIC01MSwzNSArNDgsMjkgQEAgY2xhc3MgQWJzdHJhY3RIZWFwIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdEhlYXApOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBBYnN0cmFjdEhlYXAoKQotICAgICAgICA6IG1fcGFyZW50KDApCi0g
ICAgICAgICwgbV9oZWFwTmFtZSgwKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQWJzdHJhY3RI
ZWFwKEFic3RyYWN0SGVhcCogcGFyZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSkKLSAgICAgICAg
OiBtX3BhcmVudChwYXJlbnQpCi0gICAgICAgICwgbV9oZWFwTmFtZShoZWFwTmFtZSkKICAgICB7
CiAgICAgfQogICAgIAorICAgIEFic3RyYWN0SGVhcChBYnN0cmFjdEhlYXAqIHBhcmVudCwgY29u
c3QgY2hhciogaGVhcE5hbWUsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKTsKKwogICAgIGJvb2wgaXNJ
bml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwTmFtZTsgfQogICAgIAotICAgIHZv
aWQgaW5pdGlhbGl6ZShBYnN0cmFjdEhlYXAqIHBhcmVudCwgY29uc3QgY2hhciogaGVhcE5hbWUp
CisgICAgdm9pZCBpbml0aWFsaXplKEFic3RyYWN0SGVhcCogcGFyZW50LCBjb25zdCBjaGFyKiBo
ZWFwTmFtZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewotICAgICAgICBtX3BhcmVudCA9
IHBhcmVudDsKKyAgICAgICAgY2hhbmdlUGFyZW50KHBhcmVudCk7CiAgICAgICAgIG1faGVhcE5h
bWUgPSBoZWFwTmFtZTsKKyAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgY2hhbmdlUGFyZW50KEFic3RyYWN0SGVhcCogcGFyZW50KQotICAgIHsKLSAgICAg
ICAgbV9wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgfQorICAgIHZvaWQgY2hhbmdlUGFyZW50KEFic3Ry
YWN0SGVhcCogcGFyZW50KTsKIAogICAgIEFic3RyYWN0SGVhcCogcGFyZW50KCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICByZXR1cm4gbV9w
YXJlbnQ7CiAgICAgfQorCisgICAgY29uc3QgVmVjdG9yPEFic3RyYWN0SGVhcCo+JiBjaGlsZHJl
bigpIGNvbnN0OwogICAgIAogICAgIGNvbnN0IGNoYXIqIGhlYXBOYW1lKCkgY29uc3QKICAgICB7
CkBAIC04Nyw0NyArNzgsNDQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9oZWFwTmFtZTsK
ICAgICB9CiAKLSAgICB2b2lkIGRlY29yYXRlSW5zdHJ1Y3Rpb24oTFZhbHVlIGluc3RydWN0aW9u
LCBjb25zdCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5JikgY29uc3Q7Ci0KLSAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeTsKLQotICAgIEFic3RyYWN0SGVhcCogbV9wYXJlbnQ7Ci0gICAgY29u
c3QgY2hhciogbV9oZWFwTmFtZTsKLX07Ci0KLS8vIFRoaW5rIG9mICJBYnN0cmFjdEZpZWxkIiBh
cyBiZWluZyBhbiAiQWJzdHJhY3RIZWFwV2l0aE9mZnNldCIuIEkgd291bGQgaGF2ZSBuYW1lZAot
Ly8gaXQgdGhlIGxhdHRlciBleGNlcHQgdGhhdCBJIGRvbid0IGxpa2UgdHlwaW5nIHRoYXQgbXVj
aC4KLWNsYXNzIEFic3RyYWN0RmllbGQgOiBwdWJsaWMgQWJzdHJhY3RIZWFwIHsKLXB1YmxpYzoK
LSAgICBBYnN0cmFjdEZpZWxkKCkKKyAgICBCMzo6SGVhcFJhbmdlIHJhbmdlKCkgY29uc3QKICAg
ICB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBub3QgaGF2ZSBhIHZhbGlkIHZhbHVlIHVudGlsIGFm
dGVyIGFsbCBsb3dlcmluZyBpcyBkb25lLiBEbyBhc3NvY2lhdGUgYW4KKyAgICAgICAgLy8gQWJz
dHJhY3RIZWFwIHdpdGggYSBCMzo6VmFsdWUqLCB1c2UgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
ZGVjb3JhdGVYWFgoKS4KKyAgICAgICAgaWYgKCFtX3JhbmdlKQorICAgICAgICAgICAgYmFkUmFu
Z2VFcnJvcigpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fcmFuZ2U7CiAgICAgfQotICAg
IAotICAgIEFic3RyYWN0RmllbGQoQWJzdHJhY3RIZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhl
YXBOYW1lLCBwdHJkaWZmX3Qgb2Zmc2V0KQotICAgICAgICA6IEFic3RyYWN0SGVhcChwYXJlbnQs
IGhlYXBOYW1lKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgaW5pdGlhbGl6ZShBYnN0cmFjdEhlYXAqIHBhcmVudCwgY29uc3QgY2hhciog
aGVhcE5hbWUsIHB0cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAgICAgICBBYnN0cmFjdEhlYXA6
OmluaXRpYWxpemUocGFyZW50LCBoZWFwTmFtZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0
OwotICAgIH0KLSAgICAKKworICAgIC8vIFdBUk5JTkc6IE5vdCBhbGwgYWJzdHJhY3QgaGVhcHMg
aGF2ZSBhIG1lYW5pbmdmdWwgb2Zmc2V0LgogICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQoKSk7CiAgICAgICAgIHJldHVybiBt
X29mZnNldDsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIGNvbXB1dGUodW5zaWduZWQgYmVnaW4g
PSAwKTsKKworICAgIC8vIFByaW50IGluZm9ybWF0aW9uIGFib3V0IGp1c3QgdGhpcyBoZWFwLgor
ICAgIHZvaWQgc2hhbGxvd0R1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIFByaW50
IGluZm9ybWF0aW9uIGFib3V0IHRoaXMgaGVhcCBhbmQgaXRzIGFuY2VzdG9ycy4gVGhpcyBpcyB0
aGUgZGVmYXVsdC4KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIC8v
IFByaW50IGluZm9ybWF0aW9uIGFib3V0IHRoaXMgaGVhcCBhbmQgaXRzIGRlc2NlbmRlbnRzLiBU
aGlzIGlzIGEgbXVsdGktbGluZSBkdW1wLgorICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0m
LCB1bnNpZ25lZCBpbmRlbnQgPSAwKSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBwdHJkaWZmX3Qg
bV9vZmZzZXQ7CisgICAgZnJpZW5kIGNsYXNzIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk7CisKKyAg
ICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgYmFkUmFuZ2VFcnJvcigpIGNvbnN0OworCisg
ICAgQWJzdHJhY3RIZWFwKiBtX3BhcmVudCB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8QWJzdHJh
Y3RIZWFwKj4gbV9jaGlsZHJlbjsKKyAgICBpbnRwdHJfdCBtX29mZnNldCB7IDAgfTsKKyAgICBC
Mzo6SGVhcFJhbmdlIG1fcmFuZ2U7CisgICAgY29uc3QgY2hhciogbV9oZWFwTmFtZSB7IG51bGxw
dHIgfTsKIH07CiAKIGNsYXNzIEluZGV4ZWRBYnN0cmFjdEhlYXAgewpAQCAtMTM3LDQxICsxMjUs
NDEgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFic3RyYWN0SGVhcCYgYXRBbnlJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1faGVhcEZvckFueUluZGV4OyB9CiAgICAgCi0gICAgY29uc3QgQWJz
dHJhY3RGaWVsZCYgYXQocHRyZGlmZl90IGluZGV4KQorICAgIGNvbnN0IEFic3RyYWN0SGVhcCYg
YXQocHRyZGlmZl90IGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVf
dD4oaW5kZXgpIDwgbV9zbWFsbEluZGljZXMuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHJl
dHVybkluaXRpYWxpemVkKG1fc21hbGxJbmRpY2VzW2luZGV4XSwgaW5kZXgpOwogICAgICAgICBy
ZXR1cm4gYXRTbG93KGluZGV4KTsKICAgICB9CiAgICAgCi0gICAgY29uc3QgQWJzdHJhY3RGaWVs
ZCYgb3BlcmF0b3JbXShwdHJkaWZmX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAg
IGNvbnN0IEFic3RyYWN0SGVhcCYgb3BlcmF0b3JbXShwdHJkaWZmX3QgaW5kZXgpIHsgcmV0dXJu
IGF0KGluZGV4KTsgfQogICAgIAogICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoT3V0cHV0JiBv
dXQsIExWYWx1ZSBiYXNlLCBMVmFsdWUgaW5kZXgsIEpTVmFsdWUgaW5kZXhBc0NvbnN0YW50ID0g
SlNWYWx1ZSgpLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCk7CiAgICAgCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgQWJzdHJhY3RGaWVsZCYg
cmV0dXJuSW5pdGlhbGl6ZWQoQWJzdHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBpbmRleCkK
KyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIHJldHVybkluaXRpYWxpemVkKEFic3RyYWN0SGVhcCYg
ZmllbGQsIHB0cmRpZmZfdCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghZmll
bGQuaXNJbml0aWFsaXplZCgpKSkKICAgICAgICAgICAgIGluaXRpYWxpemUoZmllbGQsIGluZGV4
KTsKICAgICAgICAgcmV0dXJuIGZpZWxkOwogICAgIH0KIAotICAgIGNvbnN0IEFic3RyYWN0Rmll
bGQmIGF0U2xvdyhwdHJkaWZmX3QgaW5kZXgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZShBYnN0cmFj
dEZpZWxkJiBmaWVsZCwgcHRyZGlmZl90IGluZGV4KTsKKyAgICBjb25zdCBBYnN0cmFjdEhlYXAm
IGF0U2xvdyhwdHJkaWZmX3QgaW5kZXgpOworICAgIHZvaWQgaW5pdGlhbGl6ZShBYnN0cmFjdEhl
YXAmIGZpZWxkLCBwdHJkaWZmX3QgaW5kZXgpOwogCiAgICAgQWJzdHJhY3RIZWFwIG1faGVhcEZv
ckFueUluZGV4OwogICAgIHNpemVfdCBtX2hlYXBOYW1lTGVuZ3RoOwogICAgIHB0cmRpZmZfdCBt
X29mZnNldDsKICAgICBzaXplX3QgbV9lbGVtZW50U2l6ZTsKLSAgICBzdGQ6OmFycmF5PEFic3Ry
YWN0RmllbGQsIDE2PiBtX3NtYWxsSW5kaWNlczsKKyAgICBzdGQ6OmFycmF5PEFic3RyYWN0SGVh
cCwgMTY+IG1fc21hbGxJbmRpY2VzOwogICAgIAogICAgIHN0cnVjdCBXaXRob3V0WmVyb09yT25l
SGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8cHRyZGlmZl90PiB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShwdHJkaWZmX3QmIHNsb3QpIHsgc2xv
dCA9IDE7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUocHRyZGlmZl90IHZh
bHVlKSB7IHJldHVybiB2YWx1ZSA9PSAxOyB9CiAgICAgfTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8
cHRyZGlmZl90LCBzdGQ6OnVuaXF1ZV9wdHI8QWJzdHJhY3RGaWVsZD4sIFdURjo6SW50SGFzaDxw
dHJkaWZmX3Q+LCBXaXRob3V0WmVyb09yT25lSGFzaFRyYWl0cz4gTWFwVHlwZTsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8cHRyZGlmZl90LCBzdGQ6OnVuaXF1ZV9wdHI8QWJzdHJhY3RIZWFwPiwgV1RG
OjpJbnRIYXNoPHB0cmRpZmZfdD4sIFdpdGhvdXRaZXJvT3JPbmVIYXNoVHJhaXRzPiBNYXBUeXBl
OwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXBUeXBlPiBtX2xhcmdlSW5kaWNlczsKICAg
ICBWZWN0b3I8Q1N0cmluZywgMTY+IG1fbGFyZ2VJbmRleE5hbWVzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
Y3BwCShyZXZpc2lvbiAxOTcyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgsMTEg
QEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgi
CiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgi
CiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCkBAIC0zOSw4ICs0MywxMCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBC
MzsKKwogQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSgpCi0g
ICAgOiByb290KDAsICJqc2NSb290IikKKyAgICA6IHJvb3QobnVsbHB0ciwgImpzY1Jvb3QiKQog
CiAjZGVmaW5lIEFCU1RSQUNUX0hFQVBfSU5JVElBTElaQVRJT04obmFtZSkgLCBuYW1lKCZyb290
LCAjbmFtZSkKICAgICBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQKEFCU1RSQUNUX0hFQVBfSU5JVElB
TElaQVRJT04pCkBAIC04MCw2ICs4Niw1MiBAQCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojp+QWJz
dHJhY3RIZWFwUmVwCiB7CiB9CiAKK3ZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3Jh
dGVNZW1vcnkoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwLCBWYWx1ZSogdmFsdWUpCit7CisgICAg
bV9oZWFwRm9yTWVtb3J5LmFwcGVuZChIZWFwRm9yVmFsdWUoaGVhcCwgdmFsdWUpKTsKK30KKwor
dm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUNDYWxsUmVhZChjb25zdCBBYnN0
cmFjdEhlYXAqIGhlYXAsIFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX2hlYXBGb3JDQ2FsbFJlYWQu
YXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCit2b2lkIEFic3RyYWN0SGVh
cFJlcG9zaXRvcnk6OmRlY29yYXRlQ0NhbGxXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqIGhlYXAs
IFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX2hlYXBGb3JDQ2FsbFdyaXRlLmFwcGVuZChIZWFwRm9y
VmFsdWUoaGVhcCwgdmFsdWUpKTsKK30KKwordm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpk
ZWNvcmF0ZVBhdGNocG9pbnRSZWFkKGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZh
bHVlKQoreworICAgIG1faGVhcEZvclBhdGNocG9pbnRSZWFkLmFwcGVuZChIZWFwRm9yVmFsdWUo
aGVhcCwgdmFsdWUpKTsKK30KKwordm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0
ZVBhdGNocG9pbnRXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqIGhlYXAsIFZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFw
LCB2YWx1ZSkpOworfQorCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5n
ZXNBbmREZWNvcmF0ZUluc3RydWN0aW9ucygpCit7CisgICAgcm9vdC5jb21wdXRlKCk7CisKKyAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGRhdGFMb2coIkFi
c3RyYWN0IEhlYXAgUmVwb3NpdG9yeTpcbiIpOworICAgICAgICByb290LmRlZXBEdW1wKFdURjo6
ZGF0YUZpbGUoKSk7CisgICAgfQorCisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hl
YXBGb3JNZW1vcnkpCisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+c2V0
UmFuZ2UoZW50cnkuaGVhcC0+cmFuZ2UoKSk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkg
OiBtX2hlYXBGb3JDQ2FsbFJlYWQpCisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVl
PigpLT5lZmZlY3RzLnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICBmb3IgKEhlYXBG
b3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckNDYWxsV3JpdGUpCisgICAgICAgIGVudHJ5LnZhbHVl
LT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7
CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZCkK
KyAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBl
bnRyeS5oZWFwLT5yYW5nZSgpOworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFw
Rm9yUGF0Y2hwb2ludFdyaXRlKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4o
KS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oCShyZXZpc2lvbiAxOTcyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgogI2luY2x1ZGUg
IkRGR0FycmF5TW9kZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUg
IkluZGV4aW5nVHlwZS5oIgpAQCAtMTI3LDExICsxMjgsMTEgQEAgcHVibGljOgogICAgIEZPUl9F
QUNIX0FCU1RSQUNUX0hFQVAoQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTikKICN1bmRlZiBBQlNU
UkFDVF9IRUFQX0RFQ0xBUkFUSU9OCiAKLSNkZWZpbmUgQUJTVFJBQ1RfRklFTERfREVDTEFSQVRJ
T04obmFtZSwgb2Zmc2V0KSBBYnN0cmFjdEZpZWxkIG5hbWU7CisjZGVmaW5lIEFCU1RSQUNUX0ZJ
RUxEX0RFQ0xBUkFUSU9OKG5hbWUsIG9mZnNldCkgQWJzdHJhY3RIZWFwIG5hbWU7CiAgICAgRk9S
X0VBQ0hfQUJTVFJBQ1RfRklFTEQoQUJTVFJBQ1RfRklFTERfREVDTEFSQVRJT04pCiAjdW5kZWYg
QUJTVFJBQ1RfRklFTERfREVDTEFSQVRJT04KICAgICAKLSAgICBBYnN0cmFjdEZpZWxkJiBKU0Nl
bGxfZnJlZUxpc3ROZXh0OworICAgIEFic3RyYWN0SGVhcCYgSlNDZWxsX2ZyZWVMaXN0TmV4dDsK
ICAgICAKICNkZWZpbmUgSU5ERVhFRF9BQlNUUkFDVF9IRUFQX0RFQ0xBUkFUSU9OKG5hbWUsIG9m
ZnNldCwgc2l6ZSkgSW5kZXhlZEFic3RyYWN0SGVhcCBuYW1lOwogICAgIEZPUl9FQUNIX0lOREVY
RURfQUJTVFJBQ1RfSEVBUChJTkRFWEVEX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04pCkBAIC0x
ODYsOCArMTg3LDM5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgZGVj
b3JhdGVNZW1vcnkoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9pZCBk
ZWNvcmF0ZUNDYWxsUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAgICB2
b2lkIGRlY29yYXRlQ0NhbGxXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsK
KyAgICB2b2lkIGRlY29yYXRlUGF0Y2hwb2ludFJlYWQoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6
OlZhbHVlKik7CisgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRXcml0ZShjb25zdCBBYnN0cmFj
dEhlYXAqLCBCMzo6VmFsdWUqKTsKKworICAgIHZvaWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRl
SW5zdHJ1Y3Rpb25zKCk7CisKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEFic3RyYWN0SGVh
cDsKKworICAgIC8vIEl0J3Mgc3VwZXIgdGVtcHRpbmcgdG8gdXNlIGxhbWJkYXMgZm9yIHRoaXMs
IGJ1dCBJIHN1c3BlY3QgdGhhdCB3ZSdsbCBjcmVhdGUgZW5vdWdoIG9mCisgICAgLy8gdGhlc2Ug
dGhhdCB3ZSB3YW50IHRvIGRvIGl0IHRoZSBoYXJkIHdheS4KKworICAgIHN0cnVjdCBIZWFwRm9y
VmFsdWUgeworICAgICAgICBIZWFwRm9yVmFsdWUoKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBIZWFwRm9yVmFsdWUoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwLCBCMzo6VmFsdWUq
IHZhbHVlKQorICAgICAgICAgICAgOiBoZWFwKGhlYXApCisgICAgICAgICAgICAsIHZhbHVlKHZh
bHVlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IEFic3Ry
YWN0SGVhcCogaGVhcCB7IG51bGxwdHIgfTsKKyAgICAgICAgQjM6OlZhbHVlKiB2YWx1ZSB7IG51
bGxwdHIgfTsKKyAgICB9OworCisgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yTWVt
b3J5OworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckNDYWxsUmVhZDsKKyAgICBW
ZWN0b3I8SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JDQ2FsbFdyaXRlOworICAgIFZlY3RvcjxIZWFw
Rm9yVmFsdWU+IG1faGVhcEZvclBhdGNocG9pbnRSZWFkOworICAgIFZlY3RvcjxIZWFwRm9yVmFs
dWU+IG1faGVhcEZvclBhdGNocG9pbnRXcml0ZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDE5NzI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDYgKzI3OSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIGZvciAoREZHOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKQogICAg
ICAgICAgICAgY29tcGlsZUJsb2NrKGJsb2NrKTsKIAorICAgICAgICAvLyBNYWtlIHN1cmUgZXZl
cnl0aGluZyBpcyBkZWNvcmF0ZWQuIFRoaXMgZG9lcyBhIGJ1bmNoIG9mIGRlZmVycmVkIGRlY29y
YXRpbmcuIFRoaXMgaGFzCisgICAgICAgIC8vIHRvIGhhcHBlbiBsYXN0IGJlY2F1c2Ugb3VyIGFi
c3RyYWN0IGhlYXBzIGFyZSBnZW5lcmF0ZWQgbGF6aWx5LiBUaGV5IGhhdmUgdG8gYmUKKyAgICAg
ICAgLy8gZ2VuZXJhdGVkIGxhemlseSBiZWNhdXNlIHdlIGhhdmUgYW4gaW5maW5pdGVuIG51bWJl
ciBvZiBudW1iZXJlZCwgaW5kZXhlZCwgYW5kCisgICAgICAgIC8vIGFic29sdXRlIGhlYXBzLiBX
ZSBvbmx5IGJlY29tZSBhd2FyZSBvZiB0aGUgb25lcyB3ZSBhY3R1YWxseSBtZW50aW9uIHdoaWxl
IGxvd2VyaW5nLgorICAgICAgICBtX2hlYXBzLmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3Ry
dWN0aW9ucygpOworCiAgICAgICAgIC8vIFdlIGNyZWF0ZSBhbGwgUGhpJ3MgdXAgZnJvbnQsIGJ1
dCB3ZSBtYXkgdGhlbiBkZWNpZGUgbm90IHRvIGNvbXBpbGUgdGhlIGJhc2ljIGJsb2NrCiAgICAg
ICAgIC8vIHRoYXQgd291bGQgaGF2ZSBjb250YWluZWQgb25lIG9mIHRoZW0uIFNvIHRoaXMgY3Jl
YXRlcyBvcnBoYW5zLCB3aGljaCB0cmlnZ2VycyBCMwogICAgICAgICAvLyB2YWxpZGF0aW9uIGZh
aWx1cmVzLiBDYWxsaW5nIHRoaXMgZml4ZXMgdGhlIGlzc3VlLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkocmV2aXNpb24gMTk3MjU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyAr
MTAyLDcgQEAgTFZhbHVlIE91dHB1dDo6bG9naWNhbE5vdChMVmFsdWUgdmFsdWUpCiBMVmFsdWUg
T3V0cHV0Ojpsb2FkKFR5cGVkUG9pbnRlciBwb2ludGVyLCBMVHlwZSB0eXBlKQogewogICAgIExW
YWx1ZSBsb2FkID0gbV9ibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHR5cGUsIG9yaWdpbigpLCBwb2ludGVyLnZhbHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRl
Y29yYXRlSW5zdHJ1Y3Rpb24obG9hZCwgKm1faGVhcHMpOworICAgIG1faGVhcHMtPmRlY29yYXRl
TWVtb3J5KHBvaW50ZXIuaGVhcCgpLCBsb2FkKTsKICAgICByZXR1cm4gbG9hZDsKIH0KIApAQCAt
MTUzLDQ3ICsxNTMsNDcgQEAgTFZhbHVlIE91dHB1dDo6dW5zaWduZWRUb0RvdWJsZShMVmFsdWUg
dgogTFZhbHVlIE91dHB1dDo6bG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7
CiAgICAgTFZhbHVlIGxvYWQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZDhTLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIudmFsdWUoKSk7Ci0gICAgcG9pbnRl
ci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAqbV9oZWFwcyk7CisgICAgbV9oZWFw
cy0+ZGVjb3JhdGVNZW1vcnkocG9pbnRlci5oZWFwKCksIGxvYWQpOwogICAgIHJldHVybiBsb2Fk
OwogfQogCiBMVmFsdWUgT3V0cHV0Ojpsb2FkOFplcm9FeHQzMihUeXBlZFBvaW50ZXIgcG9pbnRl
cikKIHsKICAgICBMVmFsdWUgbG9hZCA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkOFosIEludDMyLCBvcmlnaW4oKSwgcG9pbnRlci52YWx1ZSgpKTsKLSAgICBw
b2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKGxvYWQsICptX2hlYXBzKTsKKyAgICBt
X2hlYXBzLT5kZWNvcmF0ZU1lbW9yeShwb2ludGVyLmhlYXAoKSwgbG9hZCk7CiAgICAgcmV0dXJu
IGxvYWQ7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmxvYWQxNlNpZ25FeHQzMihUeXBlZFBvaW50ZXIg
cG9pbnRlcikKIHsKICAgICBMVmFsdWUgbG9hZCA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIudmFsdWUoKSk7
Ci0gICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAqbV9oZWFwcyk7
CisgICAgbV9oZWFwcy0+ZGVjb3JhdGVNZW1vcnkocG9pbnRlci5oZWFwKCksIGxvYWQpOwogICAg
IHJldHVybiBsb2FkOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpsb2FkMTZaZXJvRXh0MzIoVHlwZWRQ
b2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIGxvYWQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDE2WiwgSW50MzIsIG9yaWdpbigpLCBwb2ludGVyLnZh
bHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24obG9hZCwgKm1f
aGVhcHMpOworICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50ZXIuaGVhcCgpLCBsb2Fk
KTsKICAgICByZXR1cm4gbG9hZDsKIH0KIAogdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2YWx1
ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgdmFsdWUsIHBv
aW50ZXIudmFsdWUoKSk7Ci0gICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihz
dG9yZSwgKm1faGVhcHMpOworICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50ZXIuaGVh
cCgpLCBzdG9yZSk7CiB9CiAKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLnZhbHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24oc3Rv
cmUsICptX2hlYXBzKTsKKyAgICBtX2hlYXBzLT5kZWNvcmF0ZU1lbW9yeShwb2ludGVyLmhlYXAo
KSwgc3RvcmUpOwogfQogCiB2b2lkIE91dHB1dDo6c3RvcmUzMkFzMTYoTFZhbHVlIHZhbHVlLCBU
eXBlZFBvaW50ZXIgcG9pbnRlcikKIHsKICAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUxNiwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLnZhbHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24oc3Rv
cmUsICptX2hlYXBzKTsKKyAgICBtX2hlYXBzLT5kZWNvcmF0ZU1lbW9yeShwb2ludGVyLmhlYXAo
KSwgc3RvcmUpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpiYXNlSW5kZXgoTFZhbHVlIGJhc2UsIExW
YWx1ZSBpbmRleCwgU2NhbGUgc2NhbGUsIHB0cmRpZmZfdCBvZmZzZXQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE5NzI1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw3ICsy
ODksNyBAQCBwdWJsaWM6CiAgICAgLy8gQ29uc3RydWN0IGFuIGFkZHJlc3MgYnkgb2Zmc2V0dGlu
ZyBiYXNlIGJ5IHRoZSBhbW91bnQgc3BlY2lmaWVkIGJ5IHRoZSBmaWVsZCwKICAgICAvLyBhbmQg
b3B0aW9uYWxseSBhbiBhZGRpdGlvbmFsIGFtb3VudCAodXNlIHRoaXMgd2l0aCBjYXJlKSwgYW5k
IHRoZW4gY3JlYXRpbmcKICAgICAvLyBhIFR5cGVkUG9pbnRlciB3aXRoIHRoZSBnaXZlbiBmaWVs
ZCBhcyB0aGUgaGVhcC4KLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyhMVmFsdWUgYmFzZSwgY29u
c3QgQWJzdHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVk
UG9pbnRlciBhZGRyZXNzKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAmIGZpZWxkLCBw
dHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzKGZpZWxk
LCBiYXNlLCBvZmZzZXQgKyBmaWVsZC5vZmZzZXQoKSk7CiAgICAgfQpAQCAtMzEwLDE4ICszMTAs
MTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gVHlwZWRQb2ludGVyKG1faGVhcHMtPmFic29s
dXRlW2FkZHJlc3NdLCBjb25zdEludFB0cihhZGRyZXNzKSk7CiAgICAgfQogCi0gICAgTFZhbHVl
IGxvYWQ4U2lnbkV4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkg
eyByZXR1cm4gbG9hZDhTaWduRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZh
bHVlIGxvYWQ4WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVs
ZCkgeyByZXR1cm4gbG9hZDhaZXJvRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAg
TFZhbHVlIGxvYWQxNlNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYg
ZmllbGQpIHsgcmV0dXJuIGxvYWQxNlNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
LSAgICBMVmFsdWUgbG9hZDE2WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZp
ZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZDE2WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQp
KTsgfQotICAgIExWYWx1ZSBsb2FkMzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQm
IGZpZWxkKSB7IHJldHVybiBsb2FkMzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZh
bHVlIGxvYWQ2NChMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0
dXJuIGxvYWQ2NChhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICBMVmFsdWUgbG9hZFB0cihM
VmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWRQdHIo
YWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZhbHVlIGxvYWREb3VibGUoTFZhbHVlIGJh
c2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkRG91YmxlKGFkZHJl
c3MoYmFzZSwgZmllbGQpKTsgfQotICAgIHZvaWQgc3RvcmUzMihMVmFsdWUgdmFsdWUsIExWYWx1
ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZTMyKHZhbHVlLCBhZGRy
ZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICB2b2lkIHN0b3JlNjQoTFZhbHVlIHZhbHVlLCBMVmFs
dWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgc3RvcmU2NCh2YWx1ZSwgYWRk
cmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgdm9pZCBzdG9yZVB0cihMVmFsdWUgdmFsdWUsIExW
YWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZVB0cih2YWx1ZSwg
YWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgdm9pZCBzdG9yZURvdWJsZShMVmFsdWUgdmFs
dWUsIExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZURvdWJs
ZSh2YWx1ZSwgYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CisgICAgTFZhbHVlIGxvYWQ4U2lnbkV4
dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAmIGZpZWxkKSB7IHJldHVybiBsb2Fk
OFNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICBMVmFsdWUgbG9hZDhaZXJv
RXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxv
YWQ4WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQorICAgIExWYWx1ZSBsb2FkMTZT
aWduRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJu
IGxvYWQxNlNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICBMVmFsdWUgbG9h
ZDE2WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAmIGZpZWxkKSB7IHJl
dHVybiBsb2FkMTZaZXJvRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CisgICAgTFZhbHVl
IGxvYWQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBmaWVsZCkgeyByZXR1cm4g
bG9hZDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQorICAgIExWYWx1ZSBsb2FkNjQoTFZhbHVl
IGJhc2UsIGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ2NChhZGRyZXNz
KGJhc2UsIGZpZWxkKSk7IH0KKyAgICBMVmFsdWUgbG9hZFB0cihMVmFsdWUgYmFzZSwgY29uc3Qg
QWJzdHJhY3RIZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9hZFB0cihhZGRyZXNzKGJhc2UsIGZpZWxk
KSk7IH0KKyAgICBMVmFsdWUgbG9hZERvdWJsZShMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RI
ZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9hZERvdWJsZShhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
KyAgICB2b2lkIHN0b3JlMzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJh
Y3RIZWFwJiBmaWVsZCkgeyBzdG9yZTMyKHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
KyAgICB2b2lkIHN0b3JlNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJh
Y3RIZWFwJiBmaWVsZCkgeyBzdG9yZTY0KHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
KyAgICB2b2lkIHN0b3JlUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3Ry
YWN0SGVhcCYgZmllbGQpIHsgc3RvcmVQdHIodmFsdWUsIGFkZHJlc3MoYmFzZSwgZmllbGQpKTsg
fQorICAgIHZvaWQgc3RvcmVEb3VibGUoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwgY29uc3Qg
QWJzdHJhY3RIZWFwJiBmaWVsZCkgeyBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzcyhiYXNlLCBm
aWVsZCkpOyB9CiAKICAgICAvLyBGSVhNRTogRXhwbG9yZSBhZGRpbmcgc3VwcG9ydCBmb3IgdmFs
dWUgcmFuZ2UgY29uc3RyYWludHMgdG8gQjMuIE1heWJlIGl0IGNvdWxkIGJlIGFzIHNpbXBsZSBh
cyBoYXZpbmcKICAgICAvLyBhIGxvYWQgaW5zdHJ1Y3Rpb24gdGhhdCBndWFyYW50ZWVzIHRoYXQg
aXRzIHJlc3VsdCBpcyBub24tbmVnYXRpdmUuCkBAIC0zMjksNyArMzI5LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgYXNjcmliZVJhbmdlKExWYWx1ZSwgY29uc3QgVmFsdWVSYW5nZSYpIHsgfQogICAg
IExWYWx1ZSBub25OZWdhdGl2ZTMyKExWYWx1ZSBsb2FkSW5zdHJ1Y3Rpb24pIHsgcmV0dXJuIGxv
YWRJbnN0cnVjdGlvbjsgfQogICAgIExWYWx1ZSBsb2FkMzJOb25OZWdhdGl2ZShUeXBlZFBvaW50
ZXIgcG9pbnRlcikgeyByZXR1cm4gbG9hZDMyKHBvaW50ZXIpOyB9Ci0gICAgTFZhbHVlIGxvYWQz
Mk5vbk5lZ2F0aXZlKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBy
ZXR1cm4gbG9hZDMyKGJhc2UsIGZpZWxkKTsgfQorICAgIExWYWx1ZSBsb2FkMzJOb25OZWdhdGl2
ZShMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9hZDMy
KGJhc2UsIGZpZWxkKTsgfQogCiAgICAgTFZhbHVlIGVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OkVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CiAgICAgTFZhbHVlIG5vdEVxdWFsKExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFR5cGVkUG9pbnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVHlwZWRQb2ludGVyLmgJKHJldmlz
aW9uIDE5NzI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVHlwZWRQb2ludGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gIW1faGVhcDsKICAgICB9CiAgICAgCi0gICAgY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFwKCkg
Y29uc3QgeyByZXR1cm4gKm1faGVhcDsgfQorICAgIGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCgp
IGNvbnN0IHsgcmV0dXJuIG1faGVhcDsgfQogICAgIExWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KIAogcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272435</attachid>
            <date>2016-02-27 20:11:07 -0800</date>
            <delta_ts>2016-02-28 11:10:12 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34107</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3MjU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMSBA
QAorMjAxNi0wMi0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgbG93ZXIgaXRzIGFic3RyYWN0IGhlYXBzIHRvIEIzIGhlYXAgcmFuZ2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ3ODIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgRlRMIGNh
biBkZXNjcmliZSB0aGUgYWJzdHJhY3QgaGVhcHMgKHBvaW50cy10byBzZXRzKSB0aGF0IGEgbWVt
b3J5IG9wZXJhdGlvbiB3aWxsCisgICAgICAgIGFmZmVjdC4gVGhlIGFic3RyYWN0IGhlYXBzIGFy
ZSBhcnJhbmdlZCBhcyBhIGhpZXJhcmNoeS4gV2UgdXNlZCB0byB0cmFuc2Zvcm0gdGhpcyBpbnRv
CisgICAgICAgIFRCQUEgaGllcmFyY2hpZXMgaW4gTExWTSwgYnV0IHdlIG5ldmVyIGdvdCBhcm91
bmQgdG8gd2lyaW5nIHRoaXMgdXAgdG8gQjMncyBlcXVpdmFsZW50CisgICAgICAgIG5vdGlvbiAt
IHRoZSBIZWFwUmFuZ2UuIFRoYXQncyB3aGF0IHRoaXMgcGF0Y2ggZml4ZXMuCisKKyAgICAgICAg
QjMgaGFzIGEgbWluaW1hbGlzdGljIGFsaWFzIGFuYWx5c2lzLiBJdCByZXByZXNlbnRzIGFic3Ry
YWN0IGhlYXBzIHVzaW5nIHVuc2lnbmVkIDMyLWJpdAorICAgICAgICBpbnRlZ2Vycy4gVGhlcmUg
YXJlIDE8PDMyIGFic3RyYWN0IGhlYXBzLiBUaGUgQjMgY2xpZW50IGNhbiBkZXNjcmliZSB3aGF0
IGFuIG9wZXJhdGlvbgorICAgICAgICBhZmZlY3RzIGJ5IHNwZWNpZnlpbmcgYSBoZWFwIHJhbmdl
OiBhIGJlZ2luLi4uZW5kIHBhaXIgdGhhdCBzYXlzIHRoYXQgdGhlIG9wZXJhdGlvbgorICAgICAg
ICBhZmZlY3RzIGFsbCBhYnN0cmFjdCBoZWFwcyBIIHN1Y2ggdGhhdCBiZWdpbiA8PSBIIDwgZW5k
LgorCisgICAgICAgIFRoaXMgcGVjdWxpYXIgc2NoZW1lIHdhcyBhIGRlbGliZXJhdGUgYXR0ZW1w
dCB0byBkaXN0aWxsIHdoYXQgdGhlIGFic3RyYWN0IGhlYXAKKyAgICAgICAgaGllcmFyY2h5IGlz
IGFsbCBhYm91dC4gV2UgY2FuIGFzc2lnbiBiZWdpbi4uLmVuZCBudW1iZXJzIHRvIGFic3RyYWN0
IGhlYXBzIHNvIHRoYXQ6CisKKyAgICAgICAgLSBBIGhlYXAncyBlbmQgaXMgZ3JlYXRlciB0aGFu
IGl0cyBiZWdpbi4KKyAgICAgICAgLSBBIGhlYXAncyBiZWdpbiBpcyBncmVhdGVyIHRoYW4gb3Ig
ZXF1YWwgdG8gaXRzIHBhcmVudCdzIGJlZ2luLgorICAgICAgICAtIEEgaGVhcCdzIGVuZCBpcyBs
ZXNzIHRoYW4gb3IgZXF1YWwgdG8gaXRzIHBhcmVudCdzIGVuZC4KKworICAgICAgICBUaGlzIGlz
IGVhc3kgdG8gZG8gdXNpbmcgYSByZWN1cnNpdmUgdHJhdmVyc2FsIG9mIHRoZSBhYnN0cmFjdCBo
ZWFwIGhpZXJhcmNoeS4gSSBhbG1vc3QKKyAgICAgICAgd2VudCBmb3IgdGhlIGl0ZXJhdGl2ZSB0
cmF2ZXJzYWwsIHdoaWNoIGlzIGEgc3BsZW5kaWQgYWxnb3JpdGhtLCBidXQgaXQncyB0b3RhbGx5
CisgICAgICAgIHVubmVjZXNzYXJ5IGhlcmUgc2luZSB3ZSB0aWdodGx5IGNvbnRyb2wgdGhlIGhl
aWdodCBvZiB0aGUgaGVhcCBoaWVyYXJjaHkuCisKKyAgICAgICAgQmVjYXVzZSBhYnN0cmFjdCBo
ZWFwcyBhcmUgcHJvZHVjZWQgb24tdGhlLWZseSBieSBGVEwgbG93ZXJpbmcsIGR1ZSB0byB0aGUg
ZmFjdCB0aGF0IHdlCisgICAgICAgIGdlbmVyYXRlIG5ldyBvbmVzIGZvciBmaWVsZCBuYW1lcyBh
bmQgY29uc3RhbnQgaW5kaWNlcyB3ZSBlbmNvdW50ZXIsIHdlIGNhbid0IGFjdHVhbGx5CisgICAg
ICAgIGRlY29yYXRlIHRoZSBCMyBpbnN0cnVjdGlvbnMgd2UgY3JlYXRlIGluIGxvd2VyaW5nIHVu
dGlsIGFsbCBsb3dlcmluZyBpcyBkb25lLiBBZGRpbmcgYQorICAgICAgICBuZXcgYWJzdHJhY3Qg
aGVhcCB0byB0aGUgaGllcmFyY2h5IGFmdGVyIHJhbmdlcyB3ZXJlIGFscmVhZHkgY29tcHV0ZWQg
d291bGQgcmVxdWlyZQorICAgICAgICB1cGRhdGluZyB0aGUgcmFuZ2VzIG9mIGFueSBoZWFwcyAi
dG8gdGhlIHJpZ2h0IiBvZiB0aGF0IGhlYXAgaW4gdGhlIGhpZXJhcmNoeS4gVGhpcworICAgICAg
ICBwYXRjaCBzb2x2ZXMgdGhhdCBwcm9ibGVtIGJ5IHJlY29yZGluZyB0aGUgYXNzb2NpYXRpb25z
IGJldHdlZW4gYWJzdHJhY3QgaGVhcHMgYW5kIHRoZWlyCisgICAgICAgIGludGVuZGVkIHJvbGVz
IGluIHRoZSBnZW5lcmF0ZWQgSVIsIGFuZCB0aGVuIGRlY29yYXRpbmcgYWxsIG9mIHRoZSByZWxl
dmFudCBCMyB2YWx1ZXMKKyAgICAgICAgYWZ0ZXIgd2UgY29tcHV0ZSB0aGUgcmFuZ2VzIG9mIHRo
ZSBoaWVyYXJjaHkgYWZ0ZXIgbG93ZXJpbmcuCisKKyAgICAgICAgVGhpcyBpcyBwZXJmLW5ldXRy
YWwuIEkgd2FzIGhvcGluZyBmb3IgYSBzbWFsbCBzcGVlZC11cCwgYnV0IEkgY291bGQgbm90IGRl
dGVjdCBhCisgICAgICAgIHNwZWVkLXVwIG9uIGFueSBiZW5jaG1hcmsuIFRoYXQncyBub3QgdG9v
IHN1cnByaXNpbmcuIFdlIGFscmVhZHkgaGF2ZSB2ZXJ5IHByZWNpc2UgQ1NFCisgICAgICAgIGlu
IHRoZSBERkcsIHNvIHRoZXJlIGFyZW4ndCBtYW55IG9wcG9ydHVuaXRpZXMgbGVmdCBmb3IgdGhl
IEIzIENTRSBhbmQgaXQgbWF5IGhhdmUKKyAgICAgICAgYWxyZWFkeSBiZWVuIGdldHRpbmcgdGhl
IGJpZyBvbmVzIGV2ZW4gd2l0aG91dCBhbGlhcyBhbmFseXNpcy4KKworICAgICAgICBFdmVuIHdp
dGhvdXQgYSBzcGVlZC11cCwgdGhpcyBwYXRjaCBpcyB2YWx1YWJsZSBiZWNhdXNlIGl0IG1ha2Vz
IGl0IGVhc2llciB0byBpbXBsZW1lbnQKKyAgICAgICAgb3RoZXIgb3B0aW1pemF0aW9ucywgbGlr
ZSBzdG9yZSBlbGltaW5hdGlvbi4KKworICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmg6CisgICAg
ICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6OkhlYXBSYW5nZSk6CisgICAgICAgICogZnRsL0ZUTEFi
c3RyYWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjpBYnN0cmFj
dEhlYXApOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6Y2hhbmdlUGFyZW50KToK
KyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OmNvbXB1dGUpOgorICAgICAgICAoSlND
OjpGVEw6OkFic3RyYWN0SGVhcDo6c2hhbGxvd0R1bXApOgorICAgICAgICAoSlNDOjpGVEw6OkFi
c3RyYWN0SGVhcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjpkZWVw
RHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjpiYWRSYW5nZUVycm9yKToK
KyAgICAgICAgKEpTQzo6RlRMOjpJbmRleGVkQWJzdHJhY3RIZWFwOjpJbmRleGVkQWJzdHJhY3RI
ZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpJbmRleGVkQWJzdHJhY3RIZWFwOjpiYXNlSW5kZXgp
OgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6OmF0U2xvdyk6CisgICAg
ICAgIChKU0M6OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjpkZWNvcmF0ZUluc3RydWN0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEZpZWxkOjpkdW1wKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwLmg6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RI
ZWFwOjpBYnN0cmFjdEhlYXApOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6aXNJ
bml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjppbml0aWFsaXpl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OnBhcmVudCk6CisgICAgICAgIChK
U0M6OkZUTDo6QWJzdHJhY3RIZWFwOjpoZWFwTmFtZSk6CisgICAgICAgIChKU0M6OkZUTDo6QWJz
dHJhY3RIZWFwOjpyYW5nZSk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjpvZmZz
ZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6OmF0QW55SW5kZXgp
OgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6OmF0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpJbmRleGVkQWJzdHJhY3RIZWFwOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpJbmRleGVkQWJzdHJhY3RIZWFwOjpyZXR1cm5Jbml0aWFsaXplZCk6CisgICAgICAg
IChKU0M6OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6V2l0aG91dFplcm9Pck9uZUhhc2hUcmFp
dHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhlZEFi
c3RyYWN0SGVhcDo6V2l0aG91dFplcm9Pck9uZUhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OmNoYW5nZVBhcmVudCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RGaWVsZDo6QWJzdHJhY3RGaWVsZCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RGaWVsZDo6aW5pdGlhbGl6ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RGaWVsZDo6b2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk6
CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6fkFic3RyYWN0SGVh
cFJlcG9zaXRvcnkpOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6
OmRlY29yYXRlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5OjpkZWNvcmF0ZUNDYWxsUmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFw
UmVwb3NpdG9yeTo6ZGVjb3JhdGVDQ2FsbFdyaXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZVBhdGNocG9pbnRSZWFkKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZVBhdGNocG9pbnRXcml0ZSk6
CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6Y29tcHV0ZVJhbmdl
c0FuZERlY29yYXRlSW5zdHJ1Y3Rpb25zKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6
OmZvckFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9y
eTo6SGVhcEZvclZhbHVlOjpIZWFwRm9yVmFsdWUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRG
R1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsb3dlcik6
CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQ4U2lnbkV4dDMyKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQ4WmVyb0V4dDMyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6OmxvYWQxNlNpZ25FeHQzMik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
Ojpsb2FkMTZaZXJvRXh0MzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c3RvcmUpOgor
ICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c3RvcmUzMkFzOCk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0OjpzdG9yZTMyQXMxNik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpiYXNl
SW5kZXgpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmFkZHJlc3MpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6YWJzb2x1dGUpOgor
ICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZDhTaWduRXh0MzIpOgorICAgICAgICAoSlND
OjpGVEw6Ok91dHB1dDo6bG9hZDhaZXJvRXh0MzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1
dDo6bG9hZDE2U2lnbkV4dDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQxNlpl
cm9FeHQzMik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpsb2FkMzIpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6bG9hZDY0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6Omxv
YWRQdHIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZERvdWJsZSk6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjpzdG9yZTMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OnN0b3JlNjQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c3RvcmVQdHIpOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6c3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6YXNjcmliZVJhbmdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6Om5vbk5lZ2F0
aXZlMzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZDMyTm9uTmVnYXRpdmUpOgor
ICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6bm90RXF1YWwpOgorICAgICAgICAqIGZ0bC9GVExUeXBlZFBvaW50ZXIuaDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpUeXBlZFBvaW50ZXI6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZU
TDo6VHlwZWRQb2ludGVyOjpoZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpUeXBlZFBvaW50ZXI6
OnZhbHVlKToKKwogMjAxNi0wMi0yNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIENMb29wIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0hlYXBSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0hlYXBSYW5nZS5oCShyZXZpc2lvbiAxOTcyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNIZWFwUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAvLyBBbGlhcyBhbmFseXNpcyBpbiBCMyBpcyBkb25l
IGJ5IGNoZWNraW5nIGlmIHR3byBpbnRlZ2VyIHJhbmdlcyBvdmVybGFwLiBUaGlzIGlzIHBvd2Vy
ZnVsIGVub3VnaAogLy8gdG8gYmUgdXNlZCBmb3IgVEJBQS1zdHlsZSBhbGlhcyBhbmFseXNpcyB1
c2VkIGJ5IHRoZSBERkcsIEZUTCwgYW5kIExMVk06IHlvdSBqdXN0IHR1cm4gZWFjaCBub2RlCiAv
LyBpbiB0aGUgdHJlZSBvZiBhYnN0cmFjdCBoZWFwcyBpbnRvIGEgcHJlL3Bvc3QgcmFuZ2UuCisv
LworLy8gTm90ZSB0aGF0IHRoZSAnYmVnaW4nIGlzIGluY2x1c2l2ZSwgd2hpbGUgdGhlICdlbmQn
IGlzIGV4Y2x1c2l2ZS4gVGhlc2UgdHdvIHJhbmdlcyBhcmUgbm9uLQorLy8gb3ZlcmxhcHBpbmc6
CisvLworLy8gICAgIHJhbmdlQSA9IDAuLi44CisvLyAgICAgcmFuZ2VCID0gOC4uLjE2CiAKIGNs
YXNzIEhlYXBSYW5nZSB7CiBwdWJsaWM6CkBAIC00OCw2ICs1NCwxNSBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAorICAgIGV4cGxpY2l0IEhlYXBSYW5nZSh1bnNpZ25lZCB2YWx1ZSkKKyAgICAg
ICAgOiBtX2JlZ2luKHZhbHVlKQorICAgICAgICAsIG1fZW5kKHZhbHVlICsgMSkKKyAgICB7Cisg
ICAgICAgIC8vIERldGVjdHMgb3ZlcmZsb3cgaW4gZGVidWcgbW9kZS4gUmFuZ2VzIGFyZSBjb21w
aWxlci1jb250cm9sbGVkIHNvIHRoaXMgaXMgbm90IGxpa2VseQorICAgICAgICAvLyB0byBldmVy
IGJlIGFuIGlzc3VlLgorICAgICAgICBBU1NFUlQobV9lbmQgPj0gbV9iZWdpbik7CisgICAgfQor
CiAgICAgSGVhcFJhbmdlKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCiAgICAgICAgIDog
bV9iZWdpbihiZWdpbikKICAgICAgICAgLCBtX2VuZChlbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCShyZXZpc2lvbiAxOTcyNTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzgsMjQgKzM4LDk2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAotdm9pZCBBYnN0cmFjdEhlYXA6OmRlY29yYXRlSW5zdHJ1Y3Rpb24oTFZh
bHVlIGluc3RydWN0aW9uLCBjb25zdCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5JiByZXBvc2l0b3J5
KSBjb25zdAordXNpbmcgbmFtZXNwYWNlIEIzOworCitBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVh
cChBYnN0cmFjdEhlYXAqIHBhcmVudCwgY29uc3QgY2hhciogaGVhcE5hbWUsIHB0cmRpZmZfdCBv
ZmZzZXQpCisgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgLCBtX2hlYXBOYW1lKGhlYXBOYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShpbnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKHJl
cG9zaXRvcnkpOworICAgIGNoYW5nZVBhcmVudChwYXJlbnQpOworfQorCit2b2lkIEFic3RyYWN0
SGVhcDo6Y2hhbmdlUGFyZW50KEFic3RyYWN0SGVhcCogcGFyZW50KQoreworICAgIGlmIChtX3Bh
cmVudCkgeworICAgICAgICBib29sIHJlc3VsdCA9IG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92
ZUZpcnN0KHRoaXMpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIH0KKwor
ICAgIG1fcGFyZW50ID0gcGFyZW50OworCisgICAgaWYgKHBhcmVudCkgeworICAgICAgICBBU1NF
UlQoIW1fcGFyZW50LT5tX2NoaWxkcmVuLmNvbnRhaW5zKHRoaXMpKTsKKyAgICAgICAgbV9wYXJl
bnQtPm1fY2hpbGRyZW4uYXBwZW5kKHRoaXMpOworICAgIH0KK30KKwordm9pZCBBYnN0cmFjdEhl
YXA6OmNvbXB1dGUodW5zaWduZWQgYmVnaW4pCit7CisgICAgLy8gVGhpcyByZWN1cnNpdmVseSBj
b21wdXRlcyB0aGUgcmFuZ2VzIG9mIHRoZSB0cmVlLiBUaGlzIHNvbHZlcyB0aGUgZm9sbG93aW5n
IGNvbnN0cmFpbnRzCisgICAgLy8gaW4gbGluZWFyIHRpbWU6CisgICAgLy8KKyAgICAvLyAtIEEg
bm9kZSdzIGVuZCBpcyBncmVhdGVyIHRoYW4gaXRzIGJlZ2luLgorICAgIC8vIC0gQSBub2RlJ3Mg
YmVnaW4gaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGl0cyBwYXJlbnQncyBiZWdpbi4KKyAg
ICAvLyAtIEEgbm9kZSdzIGVuZCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gaXRzIHBhcmVudCdz
IGVuZC4KKyAgICAvLyAtIFRoZSByYW5nZXMgYXJlIGFzIHNtYWxsIGFzIHBvc3NpYmxlLgorICAg
IC8vCisgICAgLy8gSXQncyBPSyB0byByZWN1cnNlIGJlY2F1c2Ugd2Uga2VlcCB0aGUgZGVwdGgg
b2Ygb3VyIGFic3RyYWN0IGhlYXAgaGllcmFyY2h5IGZhaXJseSBzYW5lLgorICAgIC8vIEkgdGhp
bmsgdGhhdCBpdCBnZXRzIDQgZGVlcCBhdCBtb3N0LgorCisgICAgaWYgKG1fY2hpbGRyZW4uaXNF
bXB0eSgpKSB7CisgICAgICAgIC8vIE11c3Qgc3BlY2lhbC1jYXNlIGxlYXZlcyBzbyB0aGF0IHRo
ZXkgdXNlIGp1c3Qgb25lIHNsb3Qgb24gdGhlIG51bWJlciBsaW5lLgorICAgICAgICBtX3Jhbmdl
ID0gSGVhcFJhbmdlKGJlZ2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2ln
bmVkIGN1cnJlbnQgPSBiZWdpbjsKKyAgICBmb3IgKEFic3RyYWN0SGVhcCogY2hpbGQgOiBtX2No
aWxkcmVuKSB7CisgICAgICAgIGNoaWxkLT5jb21wdXRlKGN1cnJlbnQpOworICAgICAgICBjdXJy
ZW50ID0gY2hpbGQtPnJhbmdlKCkuZW5kKCk7CisgICAgfQorCisgICAgbV9yYW5nZSA9IEhlYXBS
YW5nZShiZWdpbiwgY3VycmVudCk7Cit9CisKK3ZvaWQgQWJzdHJhY3RIZWFwOjpzaGFsbG93RHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChoZWFwTmFtZSgpLCAi
KCIsIG1fb2Zmc2V0LCAiKSIpOworICAgIGlmIChtX3JhbmdlKQorICAgICAgICBvdXQucHJpbnQo
IjwiLCBtX3JhbmdlLCAiPiIpOwogfQogCiB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludChoZWFwTmFtZSgpKTsKKyAgICBzaGFs
bG93RHVtcChvdXQpOwogICAgIGlmIChtX3BhcmVudCkKICAgICAgICAgb3V0LnByaW50KCItPiIs
ICptX3BhcmVudCk7CiB9CiAKLXZvaWQgQWJzdHJhY3RGaWVsZDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAordm9pZCBBYnN0cmFjdEhlYXA6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQs
IHVuc2lnbmVkIGluZGVudCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoaGVhcE5hbWUoKSwgIigi
LCBtX29mZnNldCwgIikiKTsKLSAgICBpZiAocGFyZW50KCkpCi0gICAgICAgIG91dC5wcmludCgi
LT4iLCAqcGFyZW50KCkpOworICAgIGF1dG8gcHJpbnRJbmRlbnQgPSBbJl0gKCkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBpbmRlbnQ7IGktLTspCisgICAgICAgICAgICBvdXQucHJpbnQo
IiAgICAiKTsKKyAgICB9OworCisgICAgcHJpbnRJbmRlbnQoKTsKKyAgICBzaGFsbG93RHVtcChv
dXQpOworCisgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmludCgiOlxuIik7
CisgICAgZm9yIChBYnN0cmFjdEhlYXAqIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgY2hp
bGQtPmRlZXBEdW1wKG91dCwgaW5kZW50ICsgMSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RIZWFwOjpi
YWRSYW5nZUVycm9yKCkgY29uc3QKK3sKKyAgICBkYXRhTG9nKCJIZWFwIGRvZXMgbm90IGhhdmUg
cmFuZ2U6ICIsICp0aGlzLCAiXG4iKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiBJbmRleGVkQWJzdHJhY3RIZWFwOjpJbmRleGVkQWJzdHJhY3RIZWFwKEFic3RyYWN0
SGVhcCogcGFyZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSwgcHRyZGlmZl90IG9mZnNldCwgc2l6
ZV90IGVsZW1lbnRTaXplKQpAQCAtODAsMjMgKzE1MiwyMyBAQCBUeXBlZFBvaW50ZXIgSW5kZXhl
ZEFic3RyYWN0SGVhcDo6YmFzZUluCiAgICAgcmV0dXJuIFR5cGVkUG9pbnRlcihhdEFueUluZGV4
KCksIG91dC5hZGRQdHIocmVzdWx0LCBtX29mZnNldCArIG9mZnNldCkpOwogfQogCi1jb25zdCBB
YnN0cmFjdEZpZWxkJiBJbmRleGVkQWJzdHJhY3RIZWFwOjphdFNsb3cocHRyZGlmZl90IGluZGV4
KQorY29uc3QgQWJzdHJhY3RIZWFwJiBJbmRleGVkQWJzdHJhY3RIZWFwOjphdFNsb3cocHRyZGlm
Zl90IGluZGV4KQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA+PSBt
X3NtYWxsSW5kaWNlcy5zaXplKCkpOwogICAgIAogICAgIGlmIChVTkxJS0VMWSghbV9sYXJnZUlu
ZGljZXMpKQogICAgICAgICBtX2xhcmdlSW5kaWNlcyA9IHN0ZDo6bWFrZV91bmlxdWU8TWFwVHlw
ZT4oKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBYnN0cmFjdEZpZWxkPiYgZmllbGQgPSBtX2xh
cmdlSW5kaWNlcy0+YWRkKGluZGV4LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFic3RyYWN0SGVhcD4mIGZpZWxkID0gbV9sYXJnZUluZGljZXMtPmFkZChp
bmRleCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZmllbGQpIHsKLSAgICAg
ICAgZmllbGQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFic3RyYWN0RmllbGQ+KCk7CisgICAgICAgIGZp
ZWxkID0gc3RkOjptYWtlX3VuaXF1ZTxBYnN0cmFjdEhlYXA+KCk7CiAgICAgICAgIGluaXRpYWxp
emUoKmZpZWxkLCBpbmRleCk7CiAgICAgfQogCiAgICAgcmV0dXJuICpmaWVsZDsKIH0KIAotdm9p
ZCBJbmRleGVkQWJzdHJhY3RIZWFwOjppbml0aWFsaXplKEFic3RyYWN0RmllbGQmIGZpZWxkLCBw
dHJkaWZmX3Qgc2lnbmVkSW5kZXgpCit2b2lkIEluZGV4ZWRBYnN0cmFjdEhlYXA6OmluaXRpYWxp
emUoQWJzdHJhY3RIZWFwJiBmaWVsZCwgcHRyZGlmZl90IHNpZ25lZEluZGV4KQogewogICAgIC8v
IEJ1aWxkIHVwIGEgbmFtZSBvZiB0aGUgZm9ybToKICAgICAvLwpAQCAtMTE1LDkgKzE4NywxMCBA
QCB2b2lkIEluZGV4ZWRBYnN0cmFjdEhlYXA6OmluaXRpYWxpemUoQWJzCiAgICAgLy8KICAgICAv
LyAgICBCbGFoX25lZ19BCiAgICAgLy8KLSAgICAvLyBUaGlzIHVzZWQgdG8gYmUgaW1wb3J0YW50
IGJlY2F1c2Ugd2UgdXNlZCB0byB1c2UgdGhlIHN0cmluZyB0byBkaXN0aW5ndWlzaCB0aGUgdHlw
ZXMuIFRoaXMgaXMKLSAgICAvLyBub3QgcmVsZXZhbnQgYW55bW9yZSwgYW5kIHRoaXMgY29kZSB3
aWxsIGJlIHJlbW92ZWQgZXZlbnR1YWxseS4KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDMxOQorICAgIC8vIFRoaXMgbmFtaW5nIGNvbnZl
bnRpb24gY29tZXMgZnJvbSBvdXIgcHJldmlvdXMgdXNlIG9mIExMVk0uIEl0J3Mgbm90IGNsZWFy
IHRoYXQgd2UgbmVlZAorICAgIC8vIGl0IGFueW1vcmUsIHRob3VnaCBpdCBpcyBzb3J0IG9mIG5p
ZnR5LiBCYXNpY2FsbHksIEIzIGRvZXNuJ3QgbmVlZCBzdHJpbmcgbmFtZXMgZm9yCisgICAgLy8g
YWJzdHJhY3QgaGVhcHMsIGJ1dCB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgYSByZWFzb25hYmx5IGVm
ZmljaWVudCB3YXkgdG8gYWx3YXlzIG5hbWUgdGhlCisgICAgLy8gaGVhcHMgd2lsbCBwcm9iYWJs
eSBjb21lIGluIGhhbmR5IGZvciBkZWJ1Z2dpbmcuCiAgICAgCiAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIG5lZ1NwbGl0ID0gIl9uZWdfIjsKICAgICBzdGF0aWMgY29uc3QgY2hhciogcG9zU3BsaXQg
PSAiXyI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
LmgJKHJldmlzaW9uIDE5NzI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgogI2luY2x1ZGUg
IkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVk
ZSA8YXJyYXk+CkBAIC0zOSwxMCArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKLS8vIFRoaXMgaXMgaGVyZSBiZWNhdXNlIHdlIHVzZWQgdG8gZ2VuZXJhdGUgTExW
TSdzIFRCQUEuIEluIHRoZSBmdXR1cmUgd2Ugd2lsbCB3YW50IHRvIGdlbmVyYXRlCi0vLyBCMyBI
ZWFwUmFuZ2VzIGluc3RlYWQuCi0vLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NDMxOQotCiBjbGFzcyBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OwogY2xh
c3MgT3V0cHV0OwogY2xhc3MgVHlwZWRQb2ludGVyOwpAQCAtNTEsMzUgKzQ4LDI5IEBAIGNsYXNz
IEFic3RyYWN0SGVhcCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RIZWFwKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgQWJzdHJhY3RIZWFwKCkKLSAg
ICAgICAgOiBtX3BhcmVudCgwKQotICAgICAgICAsIG1faGVhcE5hbWUoMCkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIEFic3RyYWN0SGVhcChBYnN0cmFjdEhlYXAqIHBhcmVudCwgY29uc3QgY2hh
ciogaGVhcE5hbWUpCi0gICAgICAgIDogbV9wYXJlbnQocGFyZW50KQotICAgICAgICAsIG1faGVh
cE5hbWUoaGVhcE5hbWUpCiAgICAgewogICAgIH0KICAgICAKKyAgICBBYnN0cmFjdEhlYXAoQWJz
dHJhY3RIZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lLCBwdHJkaWZmX3Qgb2Zmc2V0
ID0gMCk7CisKICAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiAhIW1faGVh
cE5hbWU7IH0KICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoQWJzdHJhY3RIZWFwKiBwYXJlbnQs
IGNvbnN0IGNoYXIqIGhlYXBOYW1lKQorICAgIHZvaWQgaW5pdGlhbGl6ZShBYnN0cmFjdEhlYXAq
IHBhcmVudCwgY29uc3QgY2hhciogaGVhcE5hbWUsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAg
IHsKLSAgICAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIGNoYW5nZVBhcmVudChwYXJl
bnQpOwogICAgICAgICBtX2hlYXBOYW1lID0gaGVhcE5hbWU7CisgICAgICAgIG1fb2Zmc2V0ID0g
b2Zmc2V0OwogICAgIH0KICAgICAKLSAgICB2b2lkIGNoYW5nZVBhcmVudChBYnN0cmFjdEhlYXAq
IHBhcmVudCkKLSAgICB7Ci0gICAgICAgIG1fcGFyZW50ID0gcGFyZW50OwotICAgIH0KKyAgICB2
b2lkIGNoYW5nZVBhcmVudChBYnN0cmFjdEhlYXAqIHBhcmVudCk7CiAKICAgICBBYnN0cmFjdEhl
YXAqIHBhcmVudCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgp
KTsKICAgICAgICAgcmV0dXJuIG1fcGFyZW50OwogICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxB
YnN0cmFjdEhlYXAqPiYgY2hpbGRyZW4oKSBjb25zdDsKICAgICAKICAgICBjb25zdCBjaGFyKiBo
ZWFwTmFtZSgpIGNvbnN0CiAgICAgewpAQCAtODcsNDcgKzc4LDQ0IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faGVhcE5hbWU7CiAgICAgfQogCi0gICAgdm9pZCBkZWNvcmF0ZUluc3RydWN0
aW9uKExWYWx1ZSBpbnN0cnVjdGlvbiwgY29uc3QgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYpIGNv
bnN0OwotCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0g
ICAgZnJpZW5kIGNsYXNzIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk7Ci0KLSAgICBBYnN0cmFjdEhl
YXAqIG1fcGFyZW50OwotICAgIGNvbnN0IGNoYXIqIG1faGVhcE5hbWU7Ci19OwotCi0vLyBUaGlu
ayBvZiAiQWJzdHJhY3RGaWVsZCIgYXMgYmVpbmcgYW4gIkFic3RyYWN0SGVhcFdpdGhPZmZzZXQi
LiBJIHdvdWxkIGhhdmUgbmFtZWQKLS8vIGl0IHRoZSBsYXR0ZXIgZXhjZXB0IHRoYXQgSSBkb24n
dCBsaWtlIHR5cGluZyB0aGF0IG11Y2guCi1jbGFzcyBBYnN0cmFjdEZpZWxkIDogcHVibGljIEFi
c3RyYWN0SGVhcCB7Ci1wdWJsaWM6Ci0gICAgQWJzdHJhY3RGaWVsZCgpCisgICAgQjM6OkhlYXBS
YW5nZSByYW5nZSgpIGNvbnN0CiAgICAgeworICAgICAgICAvLyBUaGlzIHdpbGwgbm90IGhhdmUg
YSB2YWxpZCB2YWx1ZSB1bnRpbCBhZnRlciBhbGwgbG93ZXJpbmcgaXMgZG9uZS4gRG8gYXNzb2Np
YXRlIGFuCisgICAgICAgIC8vIEFic3RyYWN0SGVhcCB3aXRoIGEgQjM6OlZhbHVlKiwgdXNlIEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnk6OmRlY29yYXRlWFhYKCkuCisgICAgICAgIGlmICghbV9yYW5n
ZSkKKyAgICAgICAgICAgIGJhZFJhbmdlRXJyb3IoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBtX3JhbmdlOwogICAgIH0KLSAgICAKLSAgICBBYnN0cmFjdEZpZWxkKEFic3RyYWN0SGVhcCog
cGFyZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSwgcHRyZGlmZl90IG9mZnNldCkKLSAgICAgICAg
OiBBYnN0cmFjdEhlYXAocGFyZW50LCBoZWFwTmFtZSkKLSAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoQWJzdHJhY3RIZWFw
KiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lLCBwdHJkaWZmX3Qgb2Zmc2V0KQotICAgIHsK
LSAgICAgICAgQWJzdHJhY3RIZWFwOjppbml0aWFsaXplKHBhcmVudCwgaGVhcE5hbWUpOwotICAg
ICAgICBtX29mZnNldCA9IG9mZnNldDsKLSAgICB9Ci0gICAgCisKKyAgICAvLyBXQVJOSU5HOiBO
b3QgYWxsIGFic3RyYWN0IGhlYXBzIGhhdmUgYSBtZWFuaW5nZnVsIG9mZnNldC4KICAgICBwdHJk
aWZmX3Qgb2Zmc2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVk
KCkpOwogICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBj
b21wdXRlKHVuc2lnbmVkIGJlZ2luID0gMCk7CisKKyAgICAvLyBQcmludCBpbmZvcm1hdGlvbiBh
Ym91dCBqdXN0IHRoaXMgaGVhcC4KKyAgICB2b2lkIHNoYWxsb3dEdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKKyAgICAvLyBQcmludCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGhlYXAgYW5kIGl0
cyBhbmNlc3RvcnMuIFRoaXMgaXMgdGhlIGRlZmF1bHQuCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAKKyAgICAvLyBQcmludCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGhlYXAg
YW5kIGl0cyBkZXNjZW5kZW50cy4gVGhpcyBpcyBhIG11bHRpLWxpbmUgZHVtcC4KKyAgICB2b2lk
IGRlZXBEdW1wKFByaW50U3RyZWFtJiwgdW5zaWduZWQgaW5kZW50ID0gMCkgY29uc3Q7CisKIHBy
aXZhdGU6Ci0gICAgcHRyZGlmZl90IG1fb2Zmc2V0OworICAgIGZyaWVuZCBjbGFzcyBBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5OworCisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGJhZFJh
bmdlRXJyb3IoKSBjb25zdDsKKworICAgIEFic3RyYWN0SGVhcCogbV9wYXJlbnQgeyBudWxscHRy
IH07CisgICAgVmVjdG9yPEFic3RyYWN0SGVhcCo+IG1fY2hpbGRyZW47CisgICAgaW50cHRyX3Qg
bV9vZmZzZXQgeyAwIH07CisgICAgQjM6OkhlYXBSYW5nZSBtX3JhbmdlOworICAgIGNvbnN0IGNo
YXIqIG1faGVhcE5hbWUgeyBudWxscHRyIH07CiB9OwogCiBjbGFzcyBJbmRleGVkQWJzdHJhY3RI
ZWFwIHsKQEAgLTEzNyw0MSArMTI1LDQxIEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBBYnN0
cmFjdEhlYXAmIGF0QW55SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2hlYXBGb3JBbnlJbmRleDsg
fQogICAgIAotICAgIGNvbnN0IEFic3RyYWN0RmllbGQmIGF0KHB0cmRpZmZfdCBpbmRleCkKKyAg
ICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KHB0cmRpZmZfdCBpbmRleCkKICAgICB7CiAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA8IG1fc21hbGxJbmRpY2VzLnNpemUoKSkK
ICAgICAgICAgICAgIHJldHVybiByZXR1cm5Jbml0aWFsaXplZChtX3NtYWxsSW5kaWNlc1tpbmRl
eF0sIGluZGV4KTsKICAgICAgICAgcmV0dXJuIGF0U2xvdyhpbmRleCk7CiAgICAgfQogICAgIAot
ICAgIGNvbnN0IEFic3RyYWN0RmllbGQmIG9wZXJhdG9yW10ocHRyZGlmZl90IGluZGV4KSB7IHJl
dHVybiBhdChpbmRleCk7IH0KKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10ocHRy
ZGlmZl90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KICAgICAKICAgICBUeXBlZFBvaW50
ZXIgYmFzZUluZGV4KE91dHB1dCYgb3V0LCBMVmFsdWUgYmFzZSwgTFZhbHVlIGluZGV4LCBKU1Zh
bHVlIGluZGV4QXNDb25zdGFudCA9IEpTVmFsdWUoKSwgcHRyZGlmZl90IG9mZnNldCA9IDApOwog
ICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAg
IGNvbnN0IEFic3RyYWN0RmllbGQmIHJldHVybkluaXRpYWxpemVkKEFic3RyYWN0RmllbGQmIGZp
ZWxkLCBwdHJkaWZmX3QgaW5kZXgpCisgICAgY29uc3QgQWJzdHJhY3RIZWFwJiByZXR1cm5Jbml0
aWFsaXplZChBYnN0cmFjdEhlYXAmIGZpZWxkLCBwdHJkaWZmX3QgaW5kZXgpCiAgICAgewogICAg
ICAgICBpZiAoVU5MSUtFTFkoIWZpZWxkLmlzSW5pdGlhbGl6ZWQoKSkpCiAgICAgICAgICAgICBp
bml0aWFsaXplKGZpZWxkLCBpbmRleCk7CiAgICAgICAgIHJldHVybiBmaWVsZDsKICAgICB9CiAK
LSAgICBjb25zdCBBYnN0cmFjdEZpZWxkJiBhdFNsb3cocHRyZGlmZl90IGluZGV4KTsKLSAgICB2
b2lkIGluaXRpYWxpemUoQWJzdHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBpbmRleCk7Cisg
ICAgY29uc3QgQWJzdHJhY3RIZWFwJiBhdFNsb3cocHRyZGlmZl90IGluZGV4KTsKKyAgICB2b2lk
IGluaXRpYWxpemUoQWJzdHJhY3RIZWFwJiBmaWVsZCwgcHRyZGlmZl90IGluZGV4KTsKIAogICAg
IEFic3RyYWN0SGVhcCBtX2hlYXBGb3JBbnlJbmRleDsKICAgICBzaXplX3QgbV9oZWFwTmFtZUxl
bmd0aDsKICAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7CiAgICAgc2l6ZV90IG1fZWxlbWVudFNpemU7
Ci0gICAgc3RkOjphcnJheTxBYnN0cmFjdEZpZWxkLCAxNj4gbV9zbWFsbEluZGljZXM7CisgICAg
c3RkOjphcnJheTxBYnN0cmFjdEhlYXAsIDE2PiBtX3NtYWxsSW5kaWNlczsKICAgICAKICAgICBz
dHJ1Y3QgV2l0aG91dFplcm9Pck9uZUhhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRz
PHB0cmRpZmZfdD4gewogICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUo
cHRyZGlmZl90JiBzbG90KSB7IHNsb3QgPSAxOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzRGVs
ZXRlZFZhbHVlKHB0cmRpZmZfdCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gMTsgfQogICAgIH07
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPHB0cmRpZmZfdCwgc3RkOjp1bmlxdWVfcHRyPEFic3RyYWN0
RmllbGQ+LCBXVEY6OkludEhhc2g8cHRyZGlmZl90PiwgV2l0aG91dFplcm9Pck9uZUhhc2hUcmFp
dHM+IE1hcFR5cGU7CisgICAgdHlwZWRlZiBIYXNoTWFwPHB0cmRpZmZfdCwgc3RkOjp1bmlxdWVf
cHRyPEFic3RyYWN0SGVhcD4sIFdURjo6SW50SGFzaDxwdHJkaWZmX3Q+LCBXaXRob3V0WmVyb09y
T25lSGFzaFRyYWl0cz4gTWFwVHlwZTsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFwVHlw
ZT4gbV9sYXJnZUluZGljZXM7CiAgICAgVmVjdG9yPENTdHJpbmcsIDE2PiBtX2xhcmdlSW5kZXhO
YW1lczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMTk3MjU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDcgKzI4LDEyIEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1
ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRl
ICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgiCiAjaW5j
bHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCkBAIC0zOSw4ICs0NCwxMCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBCMzsKKwog
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSgpCi0gICAgOiBy
b290KDAsICJqc2NSb290IikKKyAgICA6IHJvb3QobnVsbHB0ciwgImpzY1Jvb3QiKQogCiAjZGVm
aW5lIEFCU1RSQUNUX0hFQVBfSU5JVElBTElaQVRJT04obmFtZSkgLCBuYW1lKCZyb290LCAjbmFt
ZSkKICAgICBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQKEFCU1RSQUNUX0hFQVBfSU5JVElBTElaQVRJ
T04pCkBAIC04MCw2ICs4Nyw1MiBAQCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojp+QWJzdHJhY3RI
ZWFwUmVwCiB7CiB9CiAKK3ZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6ZGVjb3JhdGVNZW1v
cnkoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwLCBWYWx1ZSogdmFsdWUpCit7CisgICAgbV9oZWFw
Rm9yTWVtb3J5LmFwcGVuZChIZWFwRm9yVmFsdWUoaGVhcCwgdmFsdWUpKTsKK30KKwordm9pZCBB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUNDYWxsUmVhZChjb25zdCBBYnN0cmFjdEhl
YXAqIGhlYXAsIFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX2hlYXBGb3JDQ2FsbFJlYWQuYXBwZW5k
KEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1ZSkpOworfQorCit2b2lkIEFic3RyYWN0SGVhcFJlcG9z
aXRvcnk6OmRlY29yYXRlQ0NhbGxXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqIGhlYXAsIFZhbHVl
KiB2YWx1ZSkKK3sKKyAgICBtX2hlYXBGb3JDQ2FsbFdyaXRlLmFwcGVuZChIZWFwRm9yVmFsdWUo
aGVhcCwgdmFsdWUpKTsKK30KKwordm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0
ZVBhdGNocG9pbnRSZWFkKGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCwgVmFsdWUqIHZhbHVlKQor
eworICAgIG1faGVhcEZvclBhdGNocG9pbnRSZWFkLmFwcGVuZChIZWFwRm9yVmFsdWUoaGVhcCwg
dmFsdWUpKTsKK30KKwordm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZVBhdGNo
cG9pbnRXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqIGhlYXAsIFZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGUuYXBwZW5kKEhlYXBGb3JWYWx1ZShoZWFwLCB2YWx1
ZSkpOworfQorCit2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5nZXNBbmRE
ZWNvcmF0ZUluc3RydWN0aW9ucygpCit7CisgICAgcm9vdC5jb21wdXRlKCk7CisKKyAgICBpZiAo
dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGRhdGFMb2coIkFic3RyYWN0
IEhlYXAgUmVwb3NpdG9yeTpcbiIpOworICAgICAgICByb290LmRlZXBEdW1wKFdURjo6ZGF0YUZp
bGUoKSk7CisgICAgfQorCisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JN
ZW1vcnkpCisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+c2V0UmFuZ2Uo
ZW50cnkuaGVhcC0+cmFuZ2UoKSk7CisgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hl
YXBGb3JDQ2FsbFJlYWQpCisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5l
ZmZlY3RzLnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICBmb3IgKEhlYXBGb3JWYWx1
ZSBlbnRyeSA6IG1faGVhcEZvckNDYWxsV3JpdGUpCisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxD
Q2FsbFZhbHVlPigpLT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAg
Zm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50UmVhZCkKKyAgICAg
ICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5o
ZWFwLT5yYW5nZSgpOworICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yUGF0
Y2hwb2ludFdyaXRlKQorICAgICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZm
ZWN0cy53cml0ZXMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShy
ZXZpc2lvbiAxOTcyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0Fy
cmF5TW9kZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUgIkluZGV4
aW5nVHlwZS5oIgpAQCAtMTI3LDExICsxMjgsMTEgQEAgcHVibGljOgogICAgIEZPUl9FQUNIX0FC
U1RSQUNUX0hFQVAoQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTikKICN1bmRlZiBBQlNUUkFDVF9I
RUFQX0RFQ0xBUkFUSU9OCiAKLSNkZWZpbmUgQUJTVFJBQ1RfRklFTERfREVDTEFSQVRJT04obmFt
ZSwgb2Zmc2V0KSBBYnN0cmFjdEZpZWxkIG5hbWU7CisjZGVmaW5lIEFCU1RSQUNUX0ZJRUxEX0RF
Q0xBUkFUSU9OKG5hbWUsIG9mZnNldCkgQWJzdHJhY3RIZWFwIG5hbWU7CiAgICAgRk9SX0VBQ0hf
QUJTVFJBQ1RfRklFTEQoQUJTVFJBQ1RfRklFTERfREVDTEFSQVRJT04pCiAjdW5kZWYgQUJTVFJB
Q1RfRklFTERfREVDTEFSQVRJT04KICAgICAKLSAgICBBYnN0cmFjdEZpZWxkJiBKU0NlbGxfZnJl
ZUxpc3ROZXh0OworICAgIEFic3RyYWN0SGVhcCYgSlNDZWxsX2ZyZWVMaXN0TmV4dDsKICAgICAK
ICNkZWZpbmUgSU5ERVhFRF9BQlNUUkFDVF9IRUFQX0RFQ0xBUkFUSU9OKG5hbWUsIG9mZnNldCwg
c2l6ZSkgSW5kZXhlZEFic3RyYWN0SGVhcCBuYW1lOwogICAgIEZPUl9FQUNIX0lOREVYRURfQUJT
VFJBQ1RfSEVBUChJTkRFWEVEX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04pCkBAIC0xODYsOCAr
MTg3LDM5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgZGVjb3JhdGVN
ZW1vcnkoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVlKik7CisgICAgdm9pZCBkZWNvcmF0
ZUNDYWxsUmVhZChjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAgICB2b2lkIGRl
Y29yYXRlQ0NhbGxXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAqLCBCMzo6VmFsdWUqKTsKKyAgICB2
b2lkIGRlY29yYXRlUGF0Y2hwb2ludFJlYWQoY29uc3QgQWJzdHJhY3RIZWFwKiwgQjM6OlZhbHVl
Kik7CisgICAgdm9pZCBkZWNvcmF0ZVBhdGNocG9pbnRXcml0ZShjb25zdCBBYnN0cmFjdEhlYXAq
LCBCMzo6VmFsdWUqKTsKKworICAgIHZvaWQgY29tcHV0ZVJhbmdlc0FuZERlY29yYXRlSW5zdHJ1
Y3Rpb25zKCk7CisKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEFic3RyYWN0SGVhcDsKKwor
ICAgIC8vIEl0J3Mgc3VwZXIgdGVtcHRpbmcgdG8gdXNlIGxhbWJkYXMgZm9yIHRoaXMsIGJ1dCBJ
IHN1c3BlY3QgdGhhdCB3ZSdsbCBjcmVhdGUgZW5vdWdoIG9mCisgICAgLy8gdGhlc2UgdGhhdCB3
ZSB3YW50IHRvIGRvIGl0IHRoZSBoYXJkIHdheS4KKworICAgIHN0cnVjdCBIZWFwRm9yVmFsdWUg
eworICAgICAgICBIZWFwRm9yVmFsdWUoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBIZWFwRm9yVmFsdWUoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwLCBCMzo6VmFsdWUqIHZhbHVl
KQorICAgICAgICAgICAgOiBoZWFwKGhlYXApCisgICAgICAgICAgICAsIHZhbHVlKHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IEFic3RyYWN0SGVh
cCogaGVhcCB7IG51bGxwdHIgfTsKKyAgICAgICAgQjM6OlZhbHVlKiB2YWx1ZSB7IG51bGxwdHIg
fTsKKyAgICB9OworCisgICAgVmVjdG9yPEhlYXBGb3JWYWx1ZT4gbV9oZWFwRm9yTWVtb3J5Owor
ICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1faGVhcEZvckNDYWxsUmVhZDsKKyAgICBWZWN0b3I8
SGVhcEZvclZhbHVlPiBtX2hlYXBGb3JDQ2FsbFdyaXRlOworICAgIFZlY3RvcjxIZWFwRm9yVmFs
dWU+IG1faGVhcEZvclBhdGNocG9pbnRSZWFkOworICAgIFZlY3RvcjxIZWFwRm9yVmFsdWU+IG1f
aGVhcEZvclBhdGNocG9pbnRXcml0ZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDE5NzI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDYgKzI3OSwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIGZvciAoREZHOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKQogICAgICAgICAg
ICAgY29tcGlsZUJsb2NrKGJsb2NrKTsKIAorICAgICAgICAvLyBNYWtlIHN1cmUgZXZlcnl0aGlu
ZyBpcyBkZWNvcmF0ZWQuIFRoaXMgZG9lcyBhIGJ1bmNoIG9mIGRlZmVycmVkIGRlY29yYXRpbmcu
IFRoaXMgaGFzCisgICAgICAgIC8vIHRvIGhhcHBlbiBsYXN0IGJlY2F1c2Ugb3VyIGFic3RyYWN0
IGhlYXBzIGFyZSBnZW5lcmF0ZWQgbGF6aWx5LiBUaGV5IGhhdmUgdG8gYmUKKyAgICAgICAgLy8g
Z2VuZXJhdGVkIGxhemlseSBiZWNhdXNlIHdlIGhhdmUgYW4gaW5maW5pdGVuIG51bWJlciBvZiBu
dW1iZXJlZCwgaW5kZXhlZCwgYW5kCisgICAgICAgIC8vIGFic29sdXRlIGhlYXBzLiBXZSBvbmx5
IGJlY29tZSBhd2FyZSBvZiB0aGUgb25lcyB3ZSBhY3R1YWxseSBtZW50aW9uIHdoaWxlIGxvd2Vy
aW5nLgorICAgICAgICBtX2hlYXBzLmNvbXB1dGVSYW5nZXNBbmREZWNvcmF0ZUluc3RydWN0aW9u
cygpOworCiAgICAgICAgIC8vIFdlIGNyZWF0ZSBhbGwgUGhpJ3MgdXAgZnJvbnQsIGJ1dCB3ZSBt
YXkgdGhlbiBkZWNpZGUgbm90IHRvIGNvbXBpbGUgdGhlIGJhc2ljIGJsb2NrCiAgICAgICAgIC8v
IHRoYXQgd291bGQgaGF2ZSBjb250YWluZWQgb25lIG9mIHRoZW0uIFNvIHRoaXMgY3JlYXRlcyBv
cnBoYW5zLCB3aGljaCB0cmlnZ2VycyBCMwogICAgICAgICAvLyB2YWxpZGF0aW9uIGZhaWx1cmVz
LiBDYWxsaW5nIHRoaXMgZml4ZXMgdGhlIGlzc3VlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmNwcAkocmV2aXNpb24gMTk3MjU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcg
QEAgTFZhbHVlIE91dHB1dDo6bG9naWNhbE5vdChMVmFsdWUgdmFsdWUpCiBMVmFsdWUgT3V0cHV0
Ojpsb2FkKFR5cGVkUG9pbnRlciBwb2ludGVyLCBMVHlwZSB0eXBlKQogewogICAgIExWYWx1ZSBs
b2FkID0gbV9ibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHR5cGUs
IG9yaWdpbigpLCBwb2ludGVyLnZhbHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRl
SW5zdHJ1Y3Rpb24obG9hZCwgKm1faGVhcHMpOworICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5
KHBvaW50ZXIuaGVhcCgpLCBsb2FkKTsKICAgICByZXR1cm4gbG9hZDsKIH0KIApAQCAtMTUzLDQ3
ICsxNTMsNDcgQEAgTFZhbHVlIE91dHB1dDo6dW5zaWduZWRUb0RvdWJsZShMVmFsdWUgdgogTFZh
bHVlIE91dHB1dDo6bG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAg
TFZhbHVlIGxvYWQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZDhTLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIudmFsdWUoKSk7Ci0gICAgcG9pbnRlci5oZWFw
KCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAqbV9oZWFwcyk7CisgICAgbV9oZWFwcy0+ZGVj
b3JhdGVNZW1vcnkocG9pbnRlci5oZWFwKCksIGxvYWQpOwogICAgIHJldHVybiBsb2FkOwogfQog
CiBMVmFsdWUgT3V0cHV0Ojpsb2FkOFplcm9FeHQzMihUeXBlZFBvaW50ZXIgcG9pbnRlcikKIHsK
ICAgICBMVmFsdWUgbG9hZCA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkOFosIEludDMyLCBvcmlnaW4oKSwgcG9pbnRlci52YWx1ZSgpKTsKLSAgICBwb2ludGVy
LmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKGxvYWQsICptX2hlYXBzKTsKKyAgICBtX2hlYXBz
LT5kZWNvcmF0ZU1lbW9yeShwb2ludGVyLmhlYXAoKSwgbG9hZCk7CiAgICAgcmV0dXJuIGxvYWQ7
CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmxvYWQxNlNpZ25FeHQzMihUeXBlZFBvaW50ZXIgcG9pbnRl
cikKIHsKICAgICBMVmFsdWUgbG9hZCA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkMTZTLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIudmFsdWUoKSk7Ci0gICAg
cG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAqbV9oZWFwcyk7CisgICAg
bV9oZWFwcy0+ZGVjb3JhdGVNZW1vcnkocG9pbnRlci5oZWFwKCksIGxvYWQpOwogICAgIHJldHVy
biBsb2FkOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpsb2FkMTZaZXJvRXh0MzIoVHlwZWRQb2ludGVy
IHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIGxvYWQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZDE2WiwgSW50MzIsIG9yaWdpbigpLCBwb2ludGVyLnZhbHVlKCkp
OwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24obG9hZCwgKm1faGVhcHMp
OworICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50ZXIuaGVhcCgpLCBsb2FkKTsKICAg
ICByZXR1cm4gbG9hZDsKIH0KIAogdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlw
ZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIu
dmFsdWUoKSk7Ci0gICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihzdG9yZSwg
Km1faGVhcHMpOworICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50ZXIuaGVhcCgpLCBz
dG9yZSk7CiB9CiAKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwgVHlwZWRQ
b2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZh
bHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24oc3RvcmUsICpt
X2hlYXBzKTsKKyAgICBtX2hlYXBzLT5kZWNvcmF0ZU1lbW9yeShwb2ludGVyLmhlYXAoKSwgc3Rv
cmUpOwogfQogCiB2b2lkIE91dHB1dDo6c3RvcmUzMkFzMTYoTFZhbHVlIHZhbHVlLCBUeXBlZFBv
aW50ZXIgcG9pbnRlcikKIHsKICAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUxNiwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZh
bHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24oc3RvcmUsICpt
X2hlYXBzKTsKKyAgICBtX2hlYXBzLT5kZWNvcmF0ZU1lbW9yeShwb2ludGVyLmhlYXAoKSwgc3Rv
cmUpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpiYXNlSW5kZXgoTFZhbHVlIGJhc2UsIExWYWx1ZSBp
bmRleCwgU2NhbGUgc2NhbGUsIHB0cmRpZmZfdCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE5NzI1OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw3ICsyODksNyBA
QCBwdWJsaWM6CiAgICAgLy8gQ29uc3RydWN0IGFuIGFkZHJlc3MgYnkgb2Zmc2V0dGluZyBiYXNl
IGJ5IHRoZSBhbW91bnQgc3BlY2lmaWVkIGJ5IHRoZSBmaWVsZCwKICAgICAvLyBhbmQgb3B0aW9u
YWxseSBhbiBhZGRpdGlvbmFsIGFtb3VudCAodXNlIHRoaXMgd2l0aCBjYXJlKSwgYW5kIHRoZW4g
Y3JlYXRpbmcKICAgICAvLyBhIFR5cGVkUG9pbnRlciB3aXRoIHRoZSBnaXZlbiBmaWVsZCBhcyB0
aGUgaGVhcC4KLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyhMVmFsdWUgYmFzZSwgY29uc3QgQWJz
dHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRl
ciBhZGRyZXNzKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAmIGZpZWxkLCBwdHJkaWZm
X3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzKGZpZWxkLCBiYXNl
LCBvZmZzZXQgKyBmaWVsZC5vZmZzZXQoKSk7CiAgICAgfQpAQCAtMzEwLDE4ICszMTAsMTggQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gVHlwZWRQb2ludGVyKG1faGVhcHMtPmFic29sdXRlW2Fk
ZHJlc3NdLCBjb25zdEludFB0cihhZGRyZXNzKSk7CiAgICAgfQogCi0gICAgTFZhbHVlIGxvYWQ4
U2lnbkV4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1
cm4gbG9hZDhTaWduRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZhbHVlIGxv
YWQ4WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBy
ZXR1cm4gbG9hZDhaZXJvRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZhbHVl
IGxvYWQxNlNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQp
IHsgcmV0dXJuIGxvYWQxNlNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICBM
VmFsdWUgbG9hZDE2WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBm
aWVsZCkgeyByZXR1cm4gbG9hZDE2WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQot
ICAgIExWYWx1ZSBsb2FkMzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxk
KSB7IHJldHVybiBsb2FkMzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZhbHVlIGxv
YWQ2NChMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxv
YWQ2NChhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICBMVmFsdWUgbG9hZFB0cihMVmFsdWUg
YmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWRQdHIoYWRkcmVz
cyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZhbHVlIGxvYWREb3VibGUoTFZhbHVlIGJhc2UsIGNv
bnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkRG91YmxlKGFkZHJlc3MoYmFz
ZSwgZmllbGQpKTsgfQotICAgIHZvaWQgc3RvcmUzMihMVmFsdWUgdmFsdWUsIExWYWx1ZSBiYXNl
LCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZTMyKHZhbHVlLCBhZGRyZXNzKGJh
c2UsIGZpZWxkKSk7IH0KLSAgICB2b2lkIHN0b3JlNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFz
ZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgc3RvcmU2NCh2YWx1ZSwgYWRkcmVzcyhi
YXNlLCBmaWVsZCkpOyB9Ci0gICAgdm9pZCBzdG9yZVB0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBi
YXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZVB0cih2YWx1ZSwgYWRkcmVz
cyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgdm9pZCBzdG9yZURvdWJsZShMVmFsdWUgdmFsdWUsIExW
YWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZURvdWJsZSh2YWx1
ZSwgYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CisgICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKExW
YWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAmIGZpZWxkKSB7IHJldHVybiBsb2FkOFNpZ25F
eHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIo
TFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ4WmVy
b0V4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQorICAgIExWYWx1ZSBsb2FkMTZTaWduRXh0
MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxvYWQx
NlNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICBMVmFsdWUgbG9hZDE2WmVy
b0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEhlYXAmIGZpZWxkKSB7IHJldHVybiBs
b2FkMTZaZXJvRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CisgICAgTFZhbHVlIGxvYWQz
MihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9hZDMy
KGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQorICAgIExWYWx1ZSBsb2FkNjQoTFZhbHVlIGJhc2Us
IGNvbnN0IEFic3RyYWN0SGVhcCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ2NChhZGRyZXNzKGJhc2Us
IGZpZWxkKSk7IH0KKyAgICBMVmFsdWUgbG9hZFB0cihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJh
Y3RIZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9hZFB0cihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
KyAgICBMVmFsdWUgbG9hZERvdWJsZShMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBm
aWVsZCkgeyByZXR1cm4gbG9hZERvdWJsZShhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICB2
b2lkIHN0b3JlMzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFw
JiBmaWVsZCkgeyBzdG9yZTMyKHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICB2
b2lkIHN0b3JlNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFw
JiBmaWVsZCkgeyBzdG9yZTY0KHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICB2
b2lkIHN0b3JlUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0SGVh
cCYgZmllbGQpIHsgc3RvcmVQdHIodmFsdWUsIGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQorICAg
IHZvaWQgc3RvcmVEb3VibGUoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJh
Y3RIZWFwJiBmaWVsZCkgeyBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzcyhiYXNlLCBmaWVsZCkp
OyB9CiAKICAgICAvLyBGSVhNRTogRXhwbG9yZSBhZGRpbmcgc3VwcG9ydCBmb3IgdmFsdWUgcmFu
Z2UgY29uc3RyYWludHMgdG8gQjMuIE1heWJlIGl0IGNvdWxkIGJlIGFzIHNpbXBsZSBhcyBoYXZp
bmcKICAgICAvLyBhIGxvYWQgaW5zdHJ1Y3Rpb24gdGhhdCBndWFyYW50ZWVzIHRoYXQgaXRzIHJl
c3VsdCBpcyBub24tbmVnYXRpdmUuCkBAIC0zMjksNyArMzI5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgYXNjcmliZVJhbmdlKExWYWx1ZSwgY29uc3QgVmFsdWVSYW5nZSYpIHsgfQogICAgIExWYWx1
ZSBub25OZWdhdGl2ZTMyKExWYWx1ZSBsb2FkSW5zdHJ1Y3Rpb24pIHsgcmV0dXJuIGxvYWRJbnN0
cnVjdGlvbjsgfQogICAgIExWYWx1ZSBsb2FkMzJOb25OZWdhdGl2ZShUeXBlZFBvaW50ZXIgcG9p
bnRlcikgeyByZXR1cm4gbG9hZDMyKHBvaW50ZXIpOyB9Ci0gICAgTFZhbHVlIGxvYWQzMk5vbk5l
Z2F0aXZlKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1cm4g
bG9hZDMyKGJhc2UsIGZpZWxkKTsgfQorICAgIExWYWx1ZSBsb2FkMzJOb25OZWdhdGl2ZShMVmFs
dWUgYmFzZSwgY29uc3QgQWJzdHJhY3RIZWFwJiBmaWVsZCkgeyByZXR1cm4gbG9hZDMyKGJhc2Us
IGZpZWxkKTsgfQogCiAgICAgTFZhbHVlIGVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFs
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CiAgICAgTFZhbHVlIG5vdEVxdWFsKExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFR5cGVkUG9pbnRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVHlwZWRQb2ludGVyLmgJKHJldmlzaW9uIDE5
NzI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVHlwZWRQb2ludGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gIW1f
aGVhcDsKICAgICB9CiAgICAgCi0gICAgY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFwKCkgY29uc3Qg
eyByZXR1cm4gKm1faGVhcDsgfQorICAgIGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCgpIGNvbnN0
IHsgcmV0dXJuIG1faGVhcDsgfQogICAgIExWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KIAogcHJpdmF0ZToK
</data>
<flag name="review"
          id="297209"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>