<?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>184280</bug_id>
          
          <creation_ts>2018-04-03 15:57:27 -0700</creation_ts>
          <short_desc>Don&apos;t do index masking or poisoning for DirectArguments</short_desc>
          <delta_ts>2018-04-04 11:00:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1411582</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-03 15:57:27 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411587</commentid>
    <comment_count>1</comment_count>
      <attachid>337126</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-03 16:27:39 -0700</bug_when>
    <thetext>Created attachment 337126
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411588</commentid>
    <comment_count>2</comment_count>
      <attachid>337126</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-03 16:28:10 -0700</bug_when>
    <thetext>Comment on attachment 337126
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:-2936
&gt; -2018-03-09  Filip Pizlo  &lt;fpizlo@apple.com&gt;
&gt; -
&gt; -        Split DirectArguments into JSValueOOB and JSValueStrict parts
&gt; -        https://bugs.webkit.org/show_bug.cgi?id=183458
&gt; -
&gt; -        Reviewed by Yusuke Suzuki.
&gt; -        
&gt; -        Our Spectre plan for JSValue objects is to allow inline JSValue stores and loads guarded by
&gt; -        unmitigated structure checks. This works because objects reachable from JSValues (i.e. JSValue
&gt; -        objects, like String, Symbol, and any descendant of JSObject) will only contain fields that it&apos;s OK
&gt; -        to read and write within a Spectre mitigation window. Writes are important, because within the
&gt; -        window, a write could appear to be made speculatively and rolled out later. This means that:
&gt; -        
&gt; -        - JSValue objects cannot have lengths, masks, or anything else inline.
&gt; -        
&gt; -        - JSValue objects cannot have an inline type that is used as part of a Spectre mitigation for a type
&gt; -          check, unless that type is in the form of a poison key.
&gt; -        
&gt; -        This means that the dynamic poisoning that I previously landed for DirectArguments is wrong. It also
&gt; -        means that it&apos;s wrong for DirectArguments to have an inline length.
&gt; -        
&gt; -        This changes DirectArguments to use poisoning according to the universal formula:
&gt; -        
&gt; -        - The random accessed portions are out-of-line, pointed to by a poisoned pointer.
&gt; -        
&gt; -        - No inline length.
&gt; -        
&gt; -        Surprisingly, this is perf-neutral. It&apos;s probably perf-neutral because our compiler optimizations
&gt; -        amortize whatever cost there was.
&gt; -

I&apos;ll revert this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411590</commentid>
    <comment_count>3</comment_count>
      <attachid>337128</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-03 16:28:52 -0700</bug_when>
    <thetext>Created attachment 337128
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411593</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-03 16:33:49 -0700</bug_when>
    <thetext>Attachment 337128 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/DirectArguments.h:123:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 1 in 14 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>1411599</commentid>
    <comment_count>5</comment_count>
      <attachid>337132</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-03 16:58:57 -0700</bug_when>
    <thetext>Created attachment 337132
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411600</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-03 17:01:12 -0700</bug_when>
    <thetext>Attachment 337132 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/DirectArguments.h:123:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411789</commentid>
    <comment_count>7</comment_count>
      <attachid>337132</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-04-04 10:44:02 -0700</bug_when>
    <thetext>Comment on attachment 337132
the patch

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

rs=me

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:15570
&gt; +    LValue dynamicPoison(LValue value, LValue poison)

Do we still need these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411797</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-04 10:59:00 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/230266/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411798</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-04 10:59:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/39180055&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411799</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-04 11:00:07 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #7)
&gt; Comment on attachment 337132 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=337132&amp;action=review
&gt; 
&gt; rs=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:15570
&gt; &gt; +    LValue dynamicPoison(LValue value, LValue poison)
&gt; 
&gt; Do we still need these?

Probably not.  We might still use them for scoped arguments poisoning or something.  I&apos;ll kill them once I&apos;m done killing other things.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337126</attachid>
            <date>2018-04-03 16:27:39 -0700</date>
            <delta_ts>2018-04-03 16:28:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75823</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMjI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE4LTA0LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RG9uJ3QgZG8gaW5kZXggbWFza2luZyBvciBwb2lzb25pbmcgZm9yIERpcmVjdEFyZ3VtZW50cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjgwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFy
ZCk6CisgICAgICAgICogZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNT
bG93UGF0aEdlbmVyYXRvcjo6Q2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJh
dG9yKToKKyAgICAgICAgKiBkZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93
bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEZyb21Bcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0VG9Bcmd1bWVudHMpOgorICAg
ICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0RnJvbUFyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQdXRUb0FyZ3VtZW50cyk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZHluYW1pY1BvaXNvbik6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmR5bmFtaWNQb2lzb25PbkxvYWRl
ZFR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpkeW5hbWljUG9p
c29uT25UeXBlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2Nh
dGVWYXJpYWJsZVNpemVkSGVhcENlbGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2VjdXJp
dHlLaW5kLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RGly
ZWN0QXJndW1lbnRzR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwOgorICAgICAg
ICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkRpcmVjdEFyZ3VtZW50czo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkRp
cmVjdEFyZ3VtZW50czo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpj
cmVhdGVCeUNvcHlpbmcpOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmVzdGltYXRl
ZFNpemUpOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKToKKyAgICAgICAg
KEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpE
aXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50c1NpemUpOgorICAgICAgICAqIHJ1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9KU0NQb2lzb24uaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
IChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE4LTA0LTAyICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIGJtYWxsb2Mgc2hvdWxk
IGNvbXB1dGUgaXRzIG93biBlc3RpbWF0ZSBvZiBpdHMgZm9vdHByaW50CkBAIC0yOTA0LDg5ICsy
OTY0LDYgQEAKICAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgogICAgICAgICAoSlNDOjpv
dmVycmlkZURlZmF1bHRzKToKIAotMjAxOC0wMy0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgotCi0gICAgICAgIFNwbGl0IERpcmVjdEFyZ3VtZW50cyBpbnRvIEpTVmFsdWVPT0Ig
YW5kIEpTVmFsdWVTdHJpY3QgcGFydHMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4MzQ1OAotCi0gICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1
a2kuCi0gICAgICAgIAotICAgICAgICBPdXIgU3BlY3RyZSBwbGFuIGZvciBKU1ZhbHVlIG9iamVj
dHMgaXMgdG8gYWxsb3cgaW5saW5lIEpTVmFsdWUgc3RvcmVzIGFuZCBsb2FkcyBndWFyZGVkIGJ5
Ci0gICAgICAgIHVubWl0aWdhdGVkIHN0cnVjdHVyZSBjaGVja3MuIFRoaXMgd29ya3MgYmVjYXVz
ZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIEpTVmFsdWVzIChpLmUuIEpTVmFsdWUKLSAgICAgICAg
b2JqZWN0cywgbGlrZSBTdHJpbmcsIFN5bWJvbCwgYW5kIGFueSBkZXNjZW5kYW50IG9mIEpTT2Jq
ZWN0KSB3aWxsIG9ubHkgY29udGFpbiBmaWVsZHMgdGhhdCBpdCdzIE9LCi0gICAgICAgIHRvIHJl
YWQgYW5kIHdyaXRlIHdpdGhpbiBhIFNwZWN0cmUgbWl0aWdhdGlvbiB3aW5kb3cuIFdyaXRlcyBh
cmUgaW1wb3J0YW50LCBiZWNhdXNlIHdpdGhpbiB0aGUKLSAgICAgICAgd2luZG93LCBhIHdyaXRl
IGNvdWxkIGFwcGVhciB0byBiZSBtYWRlIHNwZWN1bGF0aXZlbHkgYW5kIHJvbGxlZCBvdXQgbGF0
ZXIuIFRoaXMgbWVhbnMgdGhhdDoKLSAgICAgICAgCi0gICAgICAgIC0gSlNWYWx1ZSBvYmplY3Rz
IGNhbm5vdCBoYXZlIGxlbmd0aHMsIG1hc2tzLCBvciBhbnl0aGluZyBlbHNlIGlubGluZS4KLSAg
ICAgICAgCi0gICAgICAgIC0gSlNWYWx1ZSBvYmplY3RzIGNhbm5vdCBoYXZlIGFuIGlubGluZSB0
eXBlIHRoYXQgaXMgdXNlZCBhcyBwYXJ0IG9mIGEgU3BlY3RyZSBtaXRpZ2F0aW9uIGZvciBhIHR5
cGUKLSAgICAgICAgICBjaGVjaywgdW5sZXNzIHRoYXQgdHlwZSBpcyBpbiB0aGUgZm9ybSBvZiBh
IHBvaXNvbiBrZXkuCi0gICAgICAgIAotICAgICAgICBUaGlzIG1lYW5zIHRoYXQgdGhlIGR5bmFt
aWMgcG9pc29uaW5nIHRoYXQgSSBwcmV2aW91c2x5IGxhbmRlZCBmb3IgRGlyZWN0QXJndW1lbnRz
IGlzIHdyb25nLiBJdCBhbHNvCi0gICAgICAgIG1lYW5zIHRoYXQgaXQncyB3cm9uZyBmb3IgRGly
ZWN0QXJndW1lbnRzIHRvIGhhdmUgYW4gaW5saW5lIGxlbmd0aC4KLSAgICAgICAgCi0gICAgICAg
IFRoaXMgY2hhbmdlcyBEaXJlY3RBcmd1bWVudHMgdG8gdXNlIHBvaXNvbmluZyBhY2NvcmRpbmcg
dG8gdGhlIHVuaXZlcnNhbCBmb3JtdWxhOgotICAgICAgICAKLSAgICAgICAgLSBUaGUgcmFuZG9t
IGFjY2Vzc2VkIHBvcnRpb25zIGFyZSBvdXQtb2YtbGluZSwgcG9pbnRlZCB0byBieSBhIHBvaXNv
bmVkIHBvaW50ZXIuCi0gICAgICAgIAotICAgICAgICAtIE5vIGlubGluZSBsZW5ndGguCi0gICAg
ICAgIAotICAgICAgICBTdXJwcmlzaW5nbHksIHRoaXMgaXMgcGVyZi1uZXV0cmFsLiBJdCdzIHBy
b2JhYmx5IHBlcmYtbmV1dHJhbCBiZWNhdXNlIG91ciBjb21waWxlciBvcHRpbWl6YXRpb25zCi0g
ICAgICAgIGFtb3J0aXplIHdoYXRldmVyIGNvc3QgdGhlcmUgd2FzLgotCi0gICAgICAgICogYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6Ci0gICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRl
V2l0aEd1YXJkKToKLSAgICAgICAgKiBkZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Ns
b3dQYXRoR2VuZXJhdG9yLmg6Ci0gICAgICAgIChKU0M6OkRGRzo6Q2FsbENyZWF0ZURpcmVjdEFy
Z3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1Bh
dGhHZW5lcmF0b3IpOgotICAgICAgICAqIGRmZy9ERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRz
V2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3IuaDogQWRkZWQuCi0gICAgICAgIChKU0M6
OkRGRzo6Q2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2Vu
ZXJhdG9yOjpDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhH
ZW5lcmF0b3IpOgotICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Ci0gICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1l
bnRzKToKLSAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5
TGVuZ3RoKToKLSAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0
ZURpcmVjdEFyZ3VtZW50cyk6Ci0gICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRGcm9tQXJndW1lbnRzKToKLSAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVB1dFRvQXJndW1lbnRzKToKLSAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oOgotICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgotICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgot
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgot
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlRGlyZWN0
QXJndW1lbnRzKToKLSAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUdldEZyb21Bcmd1bWVudHMpOgotICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlUHV0VG9Bcmd1bWVudHMpOgotICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlQ2hlY2tTdWJDbGFzcyk6Ci0gICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmFsbG9jYXRlVmFyaWFibGVTaXplZEhlYXBDZWxsKToKLSAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZHluYW1pY1BvaXNvbik6IERlbGV0ZWQuCi0gICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmR5bmFtaWNQb2lzb25PbkxvYWRlZFR5
cGUpOiBEZWxldGVkLgotICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpkeW5h
bWljUG9pc29uT25UeXBlKTogRGVsZXRlZC4KLSAgICAgICAgKiBoZWFwL1NlY3VyaXR5S2luZC5o
OgotICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Ci0gICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMpOgotICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X3RvX2FyZ3VtZW50cyk6Ci0gICAgICAgIChKU0M6OkpJVDo6ZW1pdERpcmVjdEFyZ3Vt
ZW50c0dldEJ5VmFsKToKLSAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6
Ci0gICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMpOgotICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyk6Ci0gICAgICAgICogbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc206Ci0gICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbToKLSAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
OgotICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKLSAgICAgICAgKEpTQzo6
RGlyZWN0QXJndW1lbnRzOjpEaXJlY3RBcmd1bWVudHMpOgotICAgICAgICAoSlNDOjpEaXJlY3RB
cmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgotICAgICAgICAoSlNDOjpEaXJlY3RBcmd1
bWVudHM6OmNyZWF0ZSk6Ci0gICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y3JlYXRlQnlD
b3B5aW5nKToKLSAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjplc3RpbWF0ZWRTaXplKToK
LSAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKToKLSAgICAgICAg
KEpTQzo6RGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyk6Ci0gICAgICAgIChKU0M6OkRp
cmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKToKLSAgICAgICAgKEpTQzo6RGlyZWN0QXJn
dW1lbnRzOjptYXBwZWRBcmd1bWVudHNTaXplKToKLSAgICAgICAgKiBydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oOgotICAgICAgICAqIHJ1bnRpbWUvSlNDUG9pc29uLmg6Ci0gICAgICAgICogcnVu
dGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oOgotICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oOgotICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgotICAgICAgICAoSlNDOjpW
TTo6Vk0pOgotICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKLQogMjAxOC0wMy0xMSAgWXVzdWtlIFN1
enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbQjNdIEFib3ZlL0JlbG93
IHNob3VsZCBiZSBzdHJlbmd0aC1yZWR1Y2VkIGZvciBjb21wYXJpc29uIHdpdGggMApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIzMDIyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDYgQEAKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0Yy
NzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3
RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgfTsK
IAkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUIxODE2MzVGMzAw
NTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93
UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjI2QTdBMzIw
NTM4OTVDMDA5MEExNDEgLyogREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93bkxl
bmd0aFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjI2QTdBMjIwNTM4OTU4MDA5MEExNDEgLyogREZHQ2FsbENyZWF0ZURp
cmVjdEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9yLmggKi87IH07CiAJ
CTBGMkFDNTY3MUU4QTBCNzkwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjUx
RThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggKi87IH07CiAJ
CTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNr
QnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRT
dGFja0J5TGluZWFyU2Nhbi5oICovOyB9OwogCQkwRjJBQzU2RjFFOEQ3QjAzMDAwMUVFM0YgLyog
QWlyUGhhc2VJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTZEMUU4RDdBRkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlv
blNldC5oICovOyB9OwpAQCAtMjA2NCw3ICsyMDYzLDYgQEAKIAkJMEYyNUYxQUIxODE2MzVGMzAw
NTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjZBN0EyMjA1Mzg5NTgwMDkwQTE0MSAv
KiBERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5l
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FsbENyZWF0ZURp
cmVjdEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjc1RjJDMUVDRTA3OTYw
MDYyMEQ0NyAvKiBJbnRyaW5zaWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW50cmluc2ljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQUM1
NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckZpeFNwaWxsc0FmdGVyVGVybWlu
YWxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBB
aXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeFNw
aWxsc0FmdGVyVGVybWluYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTQ5
LDcgKzcxNDcsNiBAQAogCQkJCTg2RUM5REI1MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29k
ZVBhcnNlci5oICovLAogCQkJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJy
YXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTBGQkRCOUFDMUFCMEZCQzYw
MDBCNTdFNSAvKiBERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3Iu
aCAqLywKLQkJCQkwRjI2QTdBMjIwNTM4OTU4MDA5MEExNDEgLyogREZHQ2FsbENyZWF0ZURpcmVj
dEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJMEZE
ODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8sCiAJCQkJMEZE
ODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovLAogCQkJCTBGRkZD
OTRCMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgKi8sCkBAIC04NTA4LDcgKzg1
MDUsNiBAQAogCQkJCTg2RUM5REM1MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0Nh
bGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkJEQjlBRDFBQjBGQkM2MDAwQjU3RTUgLyogREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Ns
b3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI2QTdBMzIwNTM4OTVDMDA5
MEExNDEgLyogREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQ
YXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNE
QjEgLyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1ODE0RUY5
MEEyMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0IzQTI4
MTU0NEM5OTcwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHJldmlzaW9uIDIzMDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgzLDEyICszODMsOCBAQCB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAgICAgaml0LmJyYW5jaFRl
c3RQdHIoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAogICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9m
ZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKSk7Ci0gICAgICAgIGppdC5sb2FkUHRyKAotICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zm
c2V0T2ZTdG9yYWdlKCkpLAotICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0g
ICAgICAgIGppdC54b3JQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3Vt
ZW50c1BvaXNvbjo6a2V5KCkpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgaml0
LmxvYWQzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyh2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoSW5TdG9yYWdlKCkpLAor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIERpcmVjdEFyZ3VtZW50
czo6b2Zmc2V0T2ZMZW5ndGgoKSksCiAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KTsKICAgICAgICAgaml0LmJveEludDMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVn
cyk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQ3JlYXRlRGlyZWN0
QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjMwMjIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDE3ICszNCwxNiBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLS8vIFRoaXMgY2FsbHMgb3BlcmF0aW9uQ3JlYXRl
RGlyZWN0QXJndW1lbnRzIGJ1dCB0aGVuIHJlc3RvcmVzIHRoZSB2YWx1ZSBvZiBsZW5ndGhHUFIg
YW5kIHN0b3JhZ2VHUFIuCisvLyBUaGlzIGNhbGxzIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3Vt
ZW50cyBidXQgdGhlbiByZXN0b3JlcyB0aGUgdmFsdWUgb2YgbGVuZ3RoR1BSLgogY2xhc3MgQ2Fs
bENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yIDogcHVibGljIEp1bXBpbmdT
bG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+IHsKIHB1YmxpYzoKICAg
ICBDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBHUFJSZWcg
cmVzdWx0R1BSLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwKLSAgICAgICAgR1BSUmVn
IGxlbmd0aEdQUiwgR1BSUmVnIHN0b3JhZ2VHUFIsIHVuc2lnbmVkIG1pbkNhcGFjaXR5KQorICAg
ICAgICBHUFJSZWcgbGVuZ3RoR1BSLCB1bnNpZ25lZCBtaW5DYXBhY2l0eSkKICAgICAgICAgOiBK
dW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Pihmcm9tLCBq
aXQpCiAgICAgICAgICwgbV9yZXN1bHRHUFIocmVzdWx0R1BSKQogICAgICAgICAsIG1fc3RydWN0
dXJlKHN0cnVjdHVyZSkKICAgICAgICAgLCBtX2xlbmd0aEdQUihsZW5ndGhHUFIpCi0gICAgICAg
ICwgbV9zdG9yYWdlR1BSKHN0b3JhZ2VHUFIpCiAgICAgICAgICwgbV9taW5DYXBhY2l0eShtaW5D
YXBhY2l0eSkKICAgICB7CiAgICAgICAgIGppdC0+c2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBs
KGZhbHNlLCBtX3BsYW5zLCByZXN1bHRHUFIpOwpAQCAtNjIsMTEgKzYxLDcgQEAgcHJvdGVjdGVk
OgogICAgICAgICAgICAgaml0LT5zaWxlbnRGaWxsKG1fcGxhbnNbaV0pOwogICAgICAgICBqaXQt
Pm1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGppdC0+bV9qaXQubG9hZFB0cigKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVzdWx0R1BSLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgbV9zdG9yYWdlR1BSKTsKLSAgICAgICAgaml0LT5t
X2ppdC54b3JQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihE
aXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSwgbV9zdG9yYWdlR1BSKTsKLSAgICAgICAgaml0
LT5tX2ppdC5sb2FkMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3N0
b3JhZ2VHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSksIG1f
bGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVzdWx0
R1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLCBtX2xlbmd0aEdQUik7CiAg
ICAgICAgIGp1bXBUbyhqaXQpOwogICAgIH0KICAgICAKQEAgLTc0LDcgKzY5LDYgQEAgcHJpdmF0
ZToKICAgICBHUFJSZWcgbV9yZXN1bHRHUFI7CiAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBtX3N0
cnVjdHVyZTsKICAgICBHUFJSZWcgbV9sZW5ndGhHUFI7Ci0gICAgR1BSUmVnIG1fc3RvcmFnZUdQ
UjsKICAgICB1bnNpZ25lZCBtX21pbkNhcGFjaXR5OwogICAgIFZlY3RvcjxTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLCAyPiBtX3BsYW5zOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxs
Q3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3IuaAko
cmV2aXNpb24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQ3Jl
YXRlRGlyZWN0QXJndW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3IuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQot
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJERkdTbG93UGF0aEdlbmVyYXRv
ci5oIgotI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCi0jaW5jbHVkZSAiRGlyZWN0QXJn
dW1lbnRzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gVGhpcyBj
YWxscyBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMgYnV0IHRoZW4gcmVzdG9yZXMgdGhl
IHZhbHVlIG9mIHN0b3JhZ2VHUFIuCi1jbGFzcyBDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0
aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMgSnVtcGluZ1Nsb3dQYXRoR2Vu
ZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4gewotcHVibGljOgotICAgIENhbGxDcmVh
dGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93UGF0aEdlbmVyYXRvcigKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEdQ
UlJlZyByZXN1bHRHUFIsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlLAotICAgICAgICB1
bnNpZ25lZCBrbm93bkxlbmd0aCwgR1BSUmVnIHN0b3JhZ2VHUFIsIHVuc2lnbmVkIG1pbkNhcGFj
aXR5KQotICAgICAgICA6IEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Q+KGZyb20sIGppdCkKLSAgICAgICAgLCBtX3Jlc3VsdEdQUihyZXN1bHRHUFIpCi0g
ICAgICAgICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgICAgICAsIG1fa25vd25MZW5ndGgo
a25vd25MZW5ndGgpCi0gICAgICAgICwgbV9zdG9yYWdlR1BSKHN0b3JhZ2VHUFIpCi0gICAgICAg
ICwgbV9taW5DYXBhY2l0eShtaW5DYXBhY2l0eSkKLSAgICB7Ci0gICAgICAgIGppdC0+c2lsZW50
U3BpbGxBbGxSZWdpc3RlcnNJbXBsKGZhbHNlLCBtX3BsYW5zLCByZXN1bHRHUFIpOwotICAgIH0K
LQotcHJvdGVjdGVkOgotICAgIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCog
aml0KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbGlua0Zyb20oaml0KTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGxhbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBq
aXQtPnNpbGVudFNwaWxsKG1fcGxhbnNbaV0pOwotICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24o
Ci0gICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMsIG1fcmVzdWx0R1BS
LCBtX3N0cnVjdHVyZSwgbV9rbm93bkxlbmd0aCwgbV9taW5DYXBhY2l0eSk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgaml0LT5z
aWxlbnRGaWxsKG1fcGxhbnNbaV0pOwotICAgICAgICBqaXQtPm1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7Ci0gICAgICAgIGppdC0+bV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKG1fcmVzdWx0R1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFn
ZSgpKSwgbV9zdG9yYWdlR1BSKTsKLSAgICAgICAgaml0LT5tX2ppdC54b3JQdHIoCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihEaXJlY3RBcmd1bWVudHNQb2lzb246
OmtleSgpKSwgbV9zdG9yYWdlR1BSKTsKLSAgICAgICAganVtcFRvKGppdCk7Ci0gICAgfQotICAg
IAotcHJpdmF0ZToKLSAgICBHUFJSZWcgbV9yZXN1bHRHUFI7Ci0gICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBtX3N0cnVjdHVyZTsKLSAgICB1bnNpZ25lZCBtX2tub3duTGVuZ3RoOwotICAgIEdQUlJl
ZyBtX3N0b3JhZ2VHUFI7Ci0gICAgdW5zaWduZWQgbV9taW5DYXBhY2l0eTsKLSAgICBWZWN0b3I8
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbiwgMj4gbV9wbGFuczsKLX07Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIz
MDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiREZHQXJyYXlpZnlT
bG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQ
YXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Ns
b3dQYXRoR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50
c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRG
dXp6LmgiCkBAIC02NTA1LDEzICs2NTA0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uRGkKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CiAgICAgSlNWYWx1ZVJlZ3NUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAg
IEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBiYXNlUmVnID0g
YmFzZS5ncHIoKTsKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBHUFJSZWcgc2Ny
YXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOwogICAgIAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwpA
QCAtNjUyMywyNCArNjUyMCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkRpCiAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMoKSkpKTsKLSAg
ICAKLSAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlUmVnLCBEaXJl
Y3RBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgbV9qaXQu
eG9yUHRyKFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIHN0b3Jh
Z2VSZWcpOwotICAgIAotICAgIG1faml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aEluU3RvcmFnZSgpKSwgc2Ny
YXRjaFJlZyk7CisKKyAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VS
ZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSksIHNjcmF0Y2hSZWcpOwogICAg
IGF1dG8gaXNPdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywgc2NyYXRjaFJlZyk7CiAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzSW5Cb3VuZHMoKSkKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywg
SlNWYWx1ZVNvdXJjZSgpLCAwLCBpc091dE9mQm91bmRzKTsKICAgICAKLSAgICBtX2ppdC5lbWl0
UHJlcGFyZVByZWNpc2VJbmRleE1hc2szMihwcm9wZXJ0eVJlZywgc2NyYXRjaFJlZywgc2NyYXRj
aFJlZyk7Ci0KICAgICBtX2ppdC5sb2FkVmFsdWUoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoCi0gICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpLAorICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSksCiAgICAgICAgIHJlc3VsdFJlZ3MpOwogICAgIAotICAgIG1faml0LmFuZFB0cihzY3JhdGNo
UmVnLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0KICAgICBpZiAoIW5vZGUtPmFycmF5TW9k
ZSgpLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKQEAgLTY3MjUsMTEgKzY3MTUsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1hcHBlZEFyZ3VtZW50cygpKSkpOwogICAg
ICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCBy
ZXN1bHRSZWcpOwotICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbVB0cihEaXJlY3RBcmd1
bWVudHNQb2lzb246OmtleSgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAgbV9qaXQubG9hZDMyKAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0UmVnLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mTGVuZ3RoSW5TdG9yYWdlKCkpLCByZXN1bHRSZWcpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZz
ZXRPZkxlbmd0aCgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAgCiAgICAgICAgIGludDMyUmVzdWx0
KHJlc3VsdFJlZywgbm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNzA1NCwxNDYgKzcwNDEsMTAw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmEKIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogewot
ICAgIFZNJiB2bSA9ICptX2ppdC52bSgpOwotICAgIAotICAgIGJvb2wgbGVuZ3RoSXNLbm93biA9
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKLSAgICAgICAgJiYgIW5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpOwotICAgIHVuc2ln
bmVkIGtub3duTGVuZ3RoID0gVUlOVF9NQVg7CisgICAgLy8gRklYTUU6IEEgbW9yZSBlZmZlY3Rp
dmUgd2F5IG9mIGRlYWxpbmcgd2l0aCB0aGUgYXJndW1lbnQgY291bnQgYW5kIGNhbGxlZSBpcyB0
byBoYXZlCisgICAgLy8gdGhlbSBiZSBleHBsaWNpdCBhcmd1bWVudHMgdG8gdGhpcyBub2RlLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyMDcKICAg
ICAKLSAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9Ci0gICAgICAgIG1faml0Lmdy
YXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCkpOworICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMp
OworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgbGVu
Z3RoOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIHNj
cmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2Ny
YXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIGxlbmd0aEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAg
SlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdz
KHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgIAogICAgIHVuc2lnbmVkIG1pbkNh
cGFjaXR5ID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5udW1QYXJhbWV0ZXJzKCkgLSAxOwotICAgIAotICAgIEdQUlJlZyByZXN1bHRH
UFI7Ci0gICAgR1BSUmVnIGxlbmd0aEdQUjsKLSAgICBHUFJSZWcgc2NyYXRjaDFHUFI7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gyR1BSOwotICAgIEdQUlJlZyBzdG9yYWdlR1BSOwotICAgIEpTVmFsdWVS
ZWdzIHZhbHVlUmVnczsKLSAgICAKLSAgICBhdXRvIGxvYWRMZW5ndGggPSBbJl0gKCkgeworICAg
ICAgICAKKyAgICB1bnNpZ25lZCBrbm93bkxlbmd0aDsKKyAgICBib29sIGxlbmd0aElzS25vd247
IC8vIGlmIGZhbHNlLCBsZW5ndGhHUFIgd2lsbCBoYXZlIHRoZSBsZW5ndGguCisgICAgaWYgKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgJiYgIW5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgIGtu
b3duTGVuZ3RoID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOworICAgICAgICBsZW5ndGhJc0tub3duID0gdHJ1ZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBrbm93bkxlbmd0aCA9IFVJTlRfTUFYOworICAgICAgICBs
ZW5ndGhJc0tub3duID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlYWxMZW5ndGgodGhpcyk7CisgICAgICAgIGxlbmd0aC5hZG9wdChyZWFsTGVuZ3RoKTsKKyAg
ICAgICAgbGVuZ3RoR1BSID0gbGVuZ3RoLmdwcigpOworCiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBtX2ppdC5hcmd1bWVudENvdW50KG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZv
cihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCBsZW5ndGhHUFIpOwogICAgICAgICBtX2ppdC5zdWIz
MihUcnVzdGVkSW1tMzIoMSksIGxlbmd0aEdQUik7Ci0gICAgfTsKKyAgICB9CiAgICAgICAgIAot
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQ7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxOwotICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMjsKLSAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZTsKLSAgICBH
UFJUZW1wb3JhcnkgbGVuZ3RoOwotCi0gICAgaWYgKGlzWDg2KCkgJiYgaXMzMkJpdCgpICYmICFs
ZW5ndGhJc0tub3duKSB7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlYWxSZXN1bHQo
dGhpcyk7Ci0gICAgICAgIHJlc3VsdC5hZG9wdChyZWFsUmVzdWx0KTsKLSAgICAgICAgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHRHUFIgPT0g
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBsZW5n
dGhHUFIgPSBHUFJJbmZvOjpyZWdUMTsgLy8gQ2FuIGJlIGFueXRoaW5nIHdlIGxpa2UgYmVjYXVz
ZSByZWdpc3RlcnMgYXJlIGZsdXNoZWQuCi0gICAgICAgIHNjcmF0Y2gxR1BSID0gR1BSSW5mbzo6
cmVnVDI7Ci0gICAgICAgIHNjcmF0Y2gyR1BSID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAgICAgIHN0
b3JhZ2VHUFIgPSBHUFJJbmZvOjpyZWdUNDsKLSAgICAgICAgdmFsdWVSZWdzID0gSlNWYWx1ZVJl
Z3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUik7Ci0gICAg
ICAgIGxvYWRMZW5ndGgoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVE
aXJlY3RBcmd1bWVudHMsIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBsZW5ndGhHUFIsIG1pbkNhcGFj
aXR5KTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6
b2Zmc2V0T2ZTdG9yYWdlKCkpLCBzdG9yYWdlR1BSKTsKLSAgICAgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIHN0b3JhZ2VHUFIpOwot
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
RGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aEluU3RvcmFnZSgpKSwgbGVuZ3RoR1BSKTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogQSBtb3JlIGVmZmVjdGl2ZSB3YXkgb2Yg
ZGVhbGluZyB3aXRoIHRoZSBhcmd1bWVudCBjb3VudCBhbmQgY2FsbGVlIGlzIHRvIGhhdmUKLSAg
ICAgICAgLy8gdGhlbSBiZSBleHBsaWNpdCBhcmd1bWVudHMgdG8gdGhpcyBub2RlLgotICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMjA3Ci0gICAg
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZWFsUmVzdWx0KHRoaXMpOwotICAgICAgICByZXN1bHQu
YWRvcHQocmVhbFJlc3VsdCk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZWFsU2NyYXRjaDEodGhp
cyk7Ci0gICAgICAgIHNjcmF0Y2gxLmFkb3B0KHJlYWxTY3JhdGNoMSk7Ci0gICAgICAgIEdQUlRl
bXBvcmFyeSByZWFsU2NyYXRjaDIodGhpcyk7Ci0gICAgICAgIHNjcmF0Y2gyLmFkb3B0KHJlYWxT
Y3JhdGNoMik7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZWFsU3RvcmFnZSh0aGlzKTsKLSAgICAg
ICAgc3RvcmFnZS5hZG9wdChyZWFsU3RvcmFnZSk7Ci0gICAgICAgIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLSAgICAgICAgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKLSAgICAgICAg
c2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKLSAgICAgICAgbGVuZ3RoR1BSID0gSW52YWxp
ZEdQUlJlZzsKLSAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIHZh
bHVlUmVncyA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhzY3JhdGNoMUdQUiwg
c2NyYXRjaDJHUFIpOworICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0KKyAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUo
KSk7CiAgICAgICAgIAotICAgICAgICBpZiAobGVuZ3RoSXNLbm93bikKLSAgICAgICAgICAgIGtu
b3duTGVuZ3RoID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZWFsTGVuZ3RoKHRoaXMpOwotICAgICAgICAgICAgbGVuZ3RoLmFkb3B0KHJl
YWxMZW5ndGgpOwotICAgICAgICAgICAgbGVuZ3RoR1BSID0gbGVuZ3RoLmdwcigpOworICAgIC8v
IFVzZSBhIGRpZmZlcmVudCBzdHJhdGVneSBmb3IgYWxsb2NhdGluZyB0aGUgb2JqZWN0IGRlcGVu
ZGluZyBvbiB3aGV0aGVyIHdlIGtub3cgaXRzCisgICAgLy8gc2l6ZSBzdGF0aWNhbGx5LgorICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBpZiAobGVuZ3RoSXNLbm93bikg
eworICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAg
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZTxEaXJlY3RBcmd1bWVudHM+KAor
ICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZs
eSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLAorICAgICAgICAgICAgc2xvd1BhdGgsIERpcmVj
dEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUoc3RkOjptYXgoa25vd25MZW5ndGgsIG1pbkNhcGFj
aXR5KSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBsb2FkTGVuZ3RoKCk7CisgICAgICAg
IG1faml0LnN0b3JlMzIoCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoa25vd25MZW5ndGgpLAor
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBEaXJlY3RBcmd1bWVu
dHM6Om9mZnNldE9mTGVuZ3RoKCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCB0b29GZXdBcmd1bWVudHM7CisgICAgICAgIGlmIChtaW5DYXBhY2l0eSkgeworICAg
ICAgICAgICAgdG9vRmV3QXJndW1lbnRzID0KKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MihKSVRDb21waWxlcjo6QmVsb3csIGxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKG1pbkNhcGFjaXR5
KSk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFVzZSBhIGRpZmZlcmVudCBzdHJh
dGVneSBmb3IgYWxsb2NhdGluZyB0aGUgb2JqZWN0IGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGtu
b3cgaXRzCi0gICAgICAgIC8vIHNpemUgc3RhdGljYWxseS4KLSAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgICAgICBpZiAobGVuZ3RoSXNLbm93bikgewotICAgICAg
ICAgICAgSklUQWxsb2NhdG9yIHN0b3JhZ2VBbGxvY2F0b3IgPSBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KAotICAgICAgICAgICAgICAgIHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFs
bG9jYXRvckZvck5vblZpcnR1YWwoCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZVNpemUoc3RkOjptYXgoa25vd25MZW5ndGgsIG1pbkNhcGFjaXR5KSksCi0gICAg
ICAgICAgICAgICAgICAgIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSk7Ci0g
ICAgICAgIAotICAgICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIHN0b3Jh
Z2VBbGxvY2F0b3IsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xvd1BhdGgpOwotICAgICAg
ICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdl
SGVhZGVyU2l6ZSgpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKAot
ICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihrbm93bkxlbmd0aCksCi0gICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZz
ZXRPZkxlbmd0aEluU3RvcmFnZSgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCB0b29GZXdBcmd1bWVudHM7Ci0gICAgICAgICAgICBpZiAobWluQ2Fw
YWNpdHkpIHsKLSAgICAgICAgICAgICAgICB0b29GZXdBcmd1bWVudHMgPQotICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6QmVsb3csIGxlbmd0aEdQUiwgVHJ1
c3RlZEltbTMyKG1pbkNhcGFjaXR5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2pp
dC5sc2hpZnQzMihsZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaDFHUFIpOwotICAg
ICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZUhlYWRlclNpemUoKSksIHNjcmF0Y2gxR1BSKTsKLSAgICAgICAgICAgIGlmIChtaW5DYXBhY2l0
eSkgewotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1w
KCk7Ci0gICAgICAgICAgICAgICAgdG9vRmV3QXJndW1lbnRzLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHM6OnN0b3Jh
Z2VTaXplKG1pbkNhcGFjaXR5KSksIHNjcmF0Y2gxR1BSKTsKLSAgICAgICAgICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAotICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIs
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDFH
UFIsIHNjcmF0Y2gyR1BSLCBzbG93UGF0aCk7Ci0gICAgICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1
c3RlZEltbVB0cihEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VIZWFkZXJTaXplKCkpLCBzdG9yYWdl
R1BSKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgbGVuZ3Ro
R1BSLAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIERp
cmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSkpOworICAgICAgICBtX2pp
dC5sc2hpZnQzMihsZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaDFHUFIpOworICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zm
c2V0KCkpLCBzY3JhdGNoMUdQUik7CisgICAgICAgIGlmIChtaW5DYXBhY2l0eSkgeworICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAg
IHRvb0Zld0FyZ3VtZW50cy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKG1pbkNhcGFjaXR5KSks
IHNjcmF0Y2gxR1BSKTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICB9
Ci0gICAgCisgICAgICAgIAorICAgICAgICBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkSlNPYmpl
Y3Q8RGlyZWN0QXJndW1lbnRzPigKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLAorICAg
ICAgICAgICAgc2xvd1BhdGgpOworICAgICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlMzIo
Ci0gICAgICAgICAgICBUcnVzdGVkSW1tMzIobWluQ2FwYWNpdHkpLAotICAgICAgICAgICAgSklU
Q29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1p
bkNhcGFjaXR5SW5TdG9yYWdlKCkpKTsKKyAgICAgICAgICAgIGxlbmd0aEdQUiwgSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkp
KTsKKyAgICB9CisgICAgICAgIAorICAgIG1faml0LnN0b3JlMzIoCisgICAgICAgIFRydXN0ZWRJ
bW0zMihtaW5DYXBhY2l0eSksCisgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQ
UiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1pbkNhcGFjaXR5KCkpKTsKKyAgICAgICAgCisg
ICAgbV9qaXQuc3RvcmVQdHIoCisgICAgICAgIFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1hcHBl
ZEFyZ3VtZW50cygpKSk7CisKKyAgICBtX2ppdC5zdG9yZVB0cigKKyAgICAgICAgVHJ1c3RlZElt
bVB0cihudWxscHRyKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mTW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKCkpKTsKICAgICAKLSAg
ICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBl
bWl0QWxsb2NhdGVKU09iamVjdDxEaXJlY3RBcmd1bWVudHM+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xv
d1BhdGgpOwotICAgICAgICBtX2ppdC5tb3ZlKHN0b3JhZ2VHUFIsIHNjcmF0Y2gxR1BSKTsKLSAg
ICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjpr
ZXkoKSksIHNjcmF0Y2gxR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaDFHUFIs
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRP
ZlN0b3JhZ2UoKSkpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoCi0gICAgICAg
ICAgICBUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMoKSkpOwotCi0gICAg
ICAgIG1faml0LnN0b3JlUHRyKAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihudWxscHRyKSwg
SklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9m
TW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKCkpKTsKLSAgICAKLSAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBnZW5lcmF0b3I7Ci0gICAgICAgIGlmIChsZW5ndGhJ
c0tub3duKSB7Ci0gICAgICAgICAgICBnZW5lcmF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxD
cmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93UGF0aEdlbmVyYXRvcj4oCi0g
ICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBrbm93
bkxlbmd0aCwgc3RvcmFnZUdQUiwgbWluQ2FwYWNpdHkpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZ2VuZXJhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsQ3JlYXRlRGlyZWN0QXJn
dW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I+KAotICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlz
LCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgbGVuZ3RoR1BSLCBzdG9yYWdlR1BSLCBtaW5DYXBhY2l0
eSk7Ci0gICAgICAgIH0KKyAgICBpZiAobGVuZ3RoSXNLbm93bikgeworICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCByZXN1bHRH
UFIsIHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCwgbWluQ2FwYWNpdHkp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIGdlbmVyYXRvciA9IHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yPigKKyAgICAgICAg
ICAgIHNsb3dQYXRoLCB0aGlzLCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgbGVuZ3RoR1BSLCBtaW5D
YXBhY2l0eSk7CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoZ2VuZXJhdG9y
KSk7CiAgICAgfQotICAgIAorICAgICAgICAKICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSkgewogICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgbV9qaXQubG9hZFB0
cigKQEAgLTcyMTksNyArNzE2MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVh
dGVEaXJlY3QKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ZDo6bWF4KGtub3du
TGVuZ3RoLCBtaW5DYXBhY2l0eSk7ICsraSkgewogICAgICAgICAgICAgbV9qaXQubG9hZFZhbHVl
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHN0YXJ0ICsgaSksIHZhbHVlUmVncyk7CiAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVZhbHVlKAotICAgICAgICAgICAgICAgIHZhbHVlUmVncywgSklUQ29t
cGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgaSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSk7CisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLCBKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZTbG90KGkpKSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lOwpAQCAtNzI0MCwx
MyArNzE4MSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0CiAg
ICAgICAgIG1faml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIs
IGxlbmd0aEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHRHUFIsIGxlbmd0aEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsCisgICAgICAgICAg
ICAgICAgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkpKTsKICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBsZW5ndGhHUFIpLmxpbmtUbyhs
b29wLCAmbV9qaXQpOwogICAgICAgICBpZiAoZG9uZS5pc1NldCgpKQogICAgICAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CiAgICAgfQotICAgIAotICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSk7
CisgICAgICAgIAorICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CiAgICAgICAg
IAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTcyNTksOSArNzIwMSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRGcm9tQXJndW0KICAgICBHUFJSZWcg
YXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSByZXN1bHQucmVncygpOwogICAgIAotICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OkFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFnZSgp
KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1t
UHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSk7Ci0gICAgbV9qaXQubG9hZFZhbHVlKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpLCBub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRSZWdzKTsKKyAgICBtX2ppdC5s
b2FkVmFsdWUoSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVu
dHM6Om9mZnNldE9mU2xvdChub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgp
KSksIHJlc3VsdFJlZ3MpOwogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9
CiAKQEAgLTcyNjksMTUgKzcyMDksMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dFRvQXJndW1lbgogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwotICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgIAogICAgIEdQUlJl
ZyBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7Ci0gICAgR1BSUmVnIHN0b3JhZ2VHUFIg
PSBzdG9yYWdlLmdwcigpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFs
dWVSZWdzKCk7CiAgICAgCi0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhh
cmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCBzdG9yYWdl
R1BSKTsKLSAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbVB0cihEaXJlY3RBcmd1bWVudHNQb2lz
b246OmtleSgpKSwgc3RvcmFnZUdQUik7Ci0gICAgbV9qaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3Ms
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG5vZGUtPmNhcHR1cmVkQXJndW1lbnRz
T2Zmc2V0KCkub2Zmc2V0KCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAg
IG1faml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBKSVRDb21waWxlcjo6QWRkcmVzcyhhcmd1bWVu
dHNHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZTbG90KG5vZGUtPmNhcHR1cmVkQXJndW1l
bnRzT2Zmc2V0KCkub2Zmc2V0KCkpKSk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oCShyZXZpc2lvbiAyMzAyMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIgKzUx
LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhCdXR0ZXJm
bHlfdmVjdG9yTGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpIFwKICAg
ICBtYWNybyhDYWxsRnJhbWVfY2FsbGVyRnJhbWUsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKSkgXAogICAgIG1hY3JvKENsYXNzSW5mb19wYXJlbnRDbGFzcywgQ2xhc3NJbmZvOjpvZmZz
ZXRPZlBhcmVudENsYXNzKCkpIFwKLSAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9s
ZW5ndGgsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSkgXAotICAg
IG1hY3JvKERpcmVjdEFyZ3VtZW50c19TdG9yYWdlX21pbkNhcGFjaXR5LCBEaXJlY3RBcmd1bWVu
dHM6Om9mZnNldE9mTWluQ2FwYWNpdHlJblN0b3JhZ2UoKSkgXAogICAgIG1hY3JvKERpcmVjdEFy
Z3VtZW50c19jYWxsZWUsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZDYWxsZWUoKSkgXAorICAg
IG1hY3JvKERpcmVjdEFyZ3VtZW50c19sZW5ndGgsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZM
ZW5ndGgoKSkgXAorICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19taW5DYXBhY2l0eSwgRGlyZWN0
QXJndW1lbnRzOjpvZmZzZXRPZk1pbkNhcGFjaXR5KCkpIFwKICAgICBtYWNybyhEaXJlY3RBcmd1
bWVudHNfbWFwcGVkQXJndW1lbnRzLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJn
dW1lbnRzKCkpIFwKICAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfbW9kaWZpZWRBcmd1bWVudHNE
ZXNjcmlwdG9yLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTW9kaWZpZWRBcmd1bWVudHNEZXNj
cmlwdG9yKCkpIFwKLSAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgRGlyZWN0QXJn
dW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0
ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSkgXAogICAgIG1hY3JvKEdldHRlclNl
dHRlcl9zZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSkgXAogICAgIG1hY3Jv
KEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVu
Z3RoKCkpIFwKQEAgLTEzMyw3ICsxMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAogICAg
IG1hY3JvKEFycmF5U3RvcmFnZV92ZWN0b3IsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCks
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBcCiAgICAgbWFjcm8oQ29tcGxldGVTdWJz
cGFjZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwgQ29tcGxldGVTdWJzcGFjZTo6b2Zmc2V0T2ZBbGxv
Y2F0b3JGb3JTaXplU3RlcCgpLCBzaXplb2YoQWxsb2NhdG9yKSkgXAotICAgIG1hY3JvKERpcmVj
dEFyZ3VtZW50c19TdG9yYWdlX3N0b3JhZ2UsIDAsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwK
KyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgRGlyZWN0QXJndW1lbnRzOjpzdG9y
YWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU0xleGlj
YWxFbnZpcm9ubWVudF92YXJpYWJsZXMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JDb250ZW50cywgMCwgc2l6
ZW9mKFdyaXRlQmFycmllcjxKU1N0cmluZz4pKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2Zp
YmVycywgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkZpYmVycygpLCBzaXplb2YoV3JpdGVCYXJyaWVy
PEpTU3RyaW5nPikpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIzMDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3NCwxMCArMzY3
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICAgICAg
RXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdE51bGwobV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1faGVhcHMuRGlyZWN0QXJndW1l
bnRzX21hcHBlZEFyZ3VtZW50cykpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9v
dXQuYml0WG9yKAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSksCi0gICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSkpOwot
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9o
ZWFwcy5EaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9sZW5ndGgpKTsKKyAgICAgICAgICAgIHNldElu
dDMyKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RBcmd1
bWVudHNfbGVuZ3RoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMzg0NCwxNiArMzg0MSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEV4
b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgICAgICBtX291
dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbWFw
cGVkQXJndW1lbnRzKSkpOwogCi0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0Lmxv
YWRQdHIoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSk7Ci0gICAgICAgICAg
ICBzdG9yYWdlID0gbV9vdXQuYml0WG9yKHN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKERpcmVj
dEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZh
bHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuRGly
ZWN0QXJndW1lbnRzX1N0b3JhZ2VfbGVuZ3RoKTsKKyAgICAgICAgICAgIExWYWx1ZSBsZW5ndGgg
PSBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19s
ZW5ndGgpOwogICAgICAgICAgICAgYXV0byBpc091dE9mQm91bmRzID0gbV9vdXQuYWJvdmVPckVx
dWFsKGluZGV4LCBsZW5ndGgpOwogICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBu
b1ZhbHVlKCksIG51bGxwdHIsIGlzT3V0T2ZCb3VuZHMpOwogICAgICAgICAgICAgICAgIFR5cGVk
UG9pbnRlciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBt
X2hlYXBzLkRpcmVjdEFyZ3VtZW50c19TdG9yYWdlX3N0b3JhZ2UsIHN0b3JhZ2UsIG1fb3V0Lnpl
cm9FeHRQdHIoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHByZWNpc2VJbmRl
eE1hc2szMihtX291dC5sb2FkNjQoYWRkcmVzcyksIGluZGV4LCBsZW5ndGgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgbV9vdXQu
emVyb0V4dFB0cihpbmRleCkpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9h
ZDY0KGFkZHJlc3MpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAK
QEAgLTM4NjUsMTAgKzM4NTksMTAgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywgc2xvd0Nhc2UpOwogICAgICAg
ICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAg
ICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9zdG9yYWdlLCBzdG9yYWdlLAor
ICAgICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsCisgICAgICAg
ICAgICAgICAgYmFzZSwKICAgICAgICAgICAgICAgICBtX291dC56ZXJvRXh0KGluZGV4LCBwb2lu
dGVyVHlwZSgpKSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIHByZWNpc2VJbmRleE1hc2szMihtX291dC5sb2Fk
NjQoYWRkcmVzcyksIGluZGV4LCBsZW5ndGgpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQubG9hZDY0KGFkZHJlc3MpKTsKICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CkBAIC01MTgxLDM5ICs1MTc1LDI5IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBBcmd1bWVudHNMZW5ndGggbGVuZ3RoID0gZ2V0QXJn
dW1lbnRzTGVuZ3RoKCk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgZmFzdFN0b3JhZ2U7CiAg
ICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0OwogICAgICAgICBpZiAobGVuZ3RoLmlzS25vd24pIHsK
LSAgICAgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5jb25zdEludDMyKAotICAgICAg
ICAgICAgICAgIHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbCgKLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdl
U2l6ZShzdGQ6Om1heChsZW5ndGgua25vd24sIG1pbkNhcGFjaXR5KSksCi0gICAgICAgICAgICAg
ICAgICAgIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKS5vZmZzZXQoKSk7Ci0K
LSAgICAgICAgICAgIGZhc3RTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChhbGxvY2F0b3IsIHNs
b3dQYXRoKTsKKyAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxEaXJlY3RB
cmd1bWVudHM+KAorICAgICAgICAgICAgICAgIERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNp
emUoc3RkOjptYXgobGVuZ3RoLmtub3duLCBtaW5DYXBhY2l0eSkpLCBzdHJ1Y3R1cmUsCisgICAg
ICAgICAgICAgICAgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgTFZhbHVlIHNpemUgPSBtX291dC5hZGQoCiAgICAgICAgICAgICAgICAg
bV9vdXQuc2hsKGxlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMigzKSksCi0gICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VIZWFkZXJTaXpl
KCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6
c3RvcmFnZU9mZnNldCgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNpemUgPSBtX291
dC5zZWxlY3QoCiAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKGxlbmd0aC52YWx1
ZSwgbV9vdXQuY29uc3RJbnQzMihtaW5DYXBhY2l0eSkpLAotICAgICAgICAgICAgICAgIHNpemUs
IG1fb3V0LmNvbnN0SW50MzIoRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlU2l6ZShtaW5DYXBhY2l0
eSkpKTsKLSAgICAgICAgCi0gICAgICAgICAgICBmYXN0U3RvcmFnZSA9IGFsbG9jYXRlVmFyaWFi
bGVTaXplZEhlYXBDZWxsKAotICAgICAgICAgICAgICAgIHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UsIG1fb3V0Lnplcm9FeHRQdHIoc2l6ZSksIHNsb3dQYXRoKTsKKyAgICAgICAg
ICAgICAgICBzaXplLCBtX291dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlv
blNpemUobWluQ2FwYWNpdHkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZhc3RPYmpl
Y3QgPSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKKyAgICAg
ICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKHNpemUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0
clplcm8sIHNsb3dQYXRoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZmFzdFN0b3Jh
Z2UgPSBtX291dC5hZGQoZmFzdFN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZUhlYWRlclNpemUoKSkpOwotICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0
aC52YWx1ZSwgZmFzdFN0b3JhZ2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX1N0b3JhZ2VfbGVu
Z3RoKTsKLSAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5
KSwgZmFzdFN0b3JhZ2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX1N0b3JhZ2VfbWluQ2FwYWNp
dHkpOwotICAgICAgICAKLSAgICAgICAgZmFzdE9iamVjdCA9IGFsbG9jYXRlT2JqZWN0PERpcmVj
dEFyZ3VtZW50cz4oc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7Ci0gCi0g
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmJpdFhvcihmYXN0U3RvcmFnZSwgbV9vdXQuY29u
c3RJbnRQdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSkpLCBmYXN0T2JqZWN0LCBtX2hl
YXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5n
dGgudmFsdWUsIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCk7Cisg
ICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtaW5DYXBhY2l0eSksIGZhc3RP
YmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX21pbkNhcGFjaXR5KTsKICAgICAgICAgbV9v
dXQuc3RvcmVQdHIobV9vdXQuaW50UHRyWmVybywgZmFzdE9iamVjdCwgbV9oZWFwcy5EaXJlY3RB
cmd1bWVudHNfbWFwcGVkQXJndW1lbnRzKTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQu
aW50UHRyWmVybywgZmFzdE9iamVjdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9yKTsKICAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
c3RTdG9yYWdlQW5jaG9yID0gbV9vdXQuYW5jaG9yKGZhc3RTdG9yYWdlKTsKICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTUyMjcsMTQgKzUyMTEs
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihtaW5DYXBhY2l0eSkpOwogICAgICAgICAgICAgfSwgbGVuZ3RoLnZhbHVlKTsKICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsK
LSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1N0b3JhZ2UgPSBtX291dC5hbmNob3IoCi0gICAg
ICAgICAgICBtX291dC5iaXRYb3IoCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihjYWxs
UmVzdWx0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlKSwKLSAgICAgICAgICAgICAg
ICBtX291dC5jb25zdEludFB0cihEaXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSkpOwogICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2Ug
PSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgZmFzdFN0b3JhZ2VBbmNob3IsIHNsb3dTdG9yYWdl
KTsKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KTsKIAogICAgICAgICBtX291dC5zdG9yZVB0cihnZXRDdXJyZW50
Q2FsbGVlKCksIHJlc3VsdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfY2FsbGVlKTsKQEAgLTUy
NDQsNyArNTIyMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RkOjptYXgobGVuZ3RoLmtub3duLCBtaW5DYXBhY2l0eSk7ICsraSkgewogICAgICAg
ICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ2
NChhZGRyZXNzRm9yKHN0YXJ0ICsgaSkpLAotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBt
X2hlYXBzLkRpcmVjdEFyZ3VtZW50c19TdG9yYWdlX3N0b3JhZ2VbaV0pOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2VbaV0pOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgTFZhbHVlIHN0YWNrQmFz
ZSA9IGdldEFyZ3VtZW50c1N0YXJ0KCk7CkBAIC01MjcyLDcgKzUyNTEsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbV9vdXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0
LmludFB0ck9uZSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAogICAgICAgICAgICAgICAg
IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHN0YWNrQmFz
ZSwgaW5kZXgpKSwKLSAgICAgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5EaXJl
Y3RBcmd1bWVudHNfU3RvcmFnZV9zdG9yYWdlLCBzdG9yYWdlLCBpbmRleCkpOworICAgICAgICAg
ICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBy
ZXN1bHQsIGluZGV4KSk7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBuZXh0SW5kZXggPSBt
X291dC5hbmNob3IoaW5kZXgpOwogICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShw
cmV2aW91c0luZGV4LCBuZXh0SW5kZXgpOwogICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmlzTnVsbChpbmRleCksIHVuc3VyZShlbmQpLCB1bnN1cmUobG9vcCkpOwpAQCAtNjcyOCwyMyAr
NjcwNywxOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEZyb21Bcmd1bWVu
dHMoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5iaXRYb3IoCi0gICAg
ICAgICAgICBtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMu
RGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIo
RGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSkpOwogICAgICAgICBzZXRKU1ZhbHVlKAogICAg
ICAgICAgICAgbV9vdXQubG9hZDY0KAotICAgICAgICAgICAgICAgIHN0b3JhZ2UsCi0gICAgICAg
ICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9zdG9yYWdlW21fbm9kZS0+
Y2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKS5vZmZzZXQoKV0pKTsKKyAgICAgICAgICAgICAgICBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0
QXJndW1lbnRzX3N0b3JhZ2VbbV9ub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNl
dCgpXSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3VtZW50cygpCiAg
ICAgewotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmJpdFhvcigKLSAgICAgICAgICAg
IG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5EaXJlY3RB
cmd1bWVudHNfc3RvcmFnZSksCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihEaXJlY3RB
cmd1bWVudHNQb2lzb246OmtleSgpKSk7CiAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLCBzdG9yYWdlLAotICAgICAgICAgICAg
bV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9zdG9yYWdlW21fbm9kZS0+Y2FwdHVyZWRB
cmd1bWVudHNPZmZzZXQoKS5vZmZzZXQoKV0pOworICAgICAgICAgICAgbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMigpKSwKKyAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCisg
ICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW21fbm9kZS0+Y2FwdHVy
ZWRBcmd1bWVudHNPZmZzZXQoKS5vZmZzZXQoKV0pOwogICAgIH0KIAogICAgIHZvaWQgY29tcGls
ZUdldEFyZ3VtZW50KCkKQEAgLTExODc0LDcgKzExODQ4LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUoY2VsbCk7CiAgICAgICAgICAg
ICBMVmFsdWUgcG9pc29uZWRDbGFzc0luZm8gPSBtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9o
ZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKTsKLSAgICAgICAgICAgIExWYWx1ZSBjbGFzc0luZm8g
PSBtX291dC5iaXRYb3IocG9pc29uZWRDbGFzc0luZm8sIG1fb3V0LmNvbnN0SW50UHRyKEdsb2Jh
bERhdGFQb2lzb246OmtleSgpKSk7CisgICAgICAgICAgICBMVmFsdWUgY2xhc3NJbmZvID0gbV9v
dXQuYml0WG9yKHBvaXNvbmVkQ2xhc3NJbmZvLCBtX291dC5jb25zdEludDY0KEdsb2JhbERhdGFQ
b2lzb246OmtleSgpKSk7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvdGhlckF0U3RhcnQg
PSBtX291dC5hbmNob3IoY2xhc3NJbmZvKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7
CiAKQEAgLTEyNjQzLDEyICsxMjYxNyw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBhbGxv
Y2F0ZUNlbGwoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUsIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCi0g
ICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZEhlYXBDZWxsKENvbXBsZXRlU3Vic3BhY2Um
IHN1YnNwYWNlLCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0gICAgewotICAg
ICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZShzdWJzcGFjZSwgc2l6ZSwg
c2xvd1BhdGgpOwotICAgICAgICByZXR1cm4gYWxsb2NhdGVIZWFwQ2VsbChhbGxvY2F0b3IsIHNs
b3dQYXRoKTsKLSAgICB9Ci0gICAgCiAgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLmdldCgpLT5pbmxp
bmVDYXBhY2l0eSgpKTsKQEAgLTE1NTk5LDYgKzE1NTY3LDMyIEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBwcmVjaXNlSW5kZXhNYXNrNjQodmFsdWUsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIElu
dDY0KSwgbV9vdXQuemVyb0V4dChsaW1pdCwgSW50NjQpKTsKICAgICB9CiAgICAgCisgICAgTFZh
bHVlIGR5bmFtaWNQb2lzb24oTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pc29uKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb3V0LmFkZCgKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAg
bV9vdXQuc2hsKAorICAgICAgICAgICAgICAgIG1fb3V0Lnplcm9FeHQocG9pc29uLCBwb2ludGVy
VHlwZSgpKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKDQwKSkpOworICAgIH0K
KyAgICAKKyAgICBMVmFsdWUgZHluYW1pY1BvaXNvbk9uTG9hZGVkVHlwZShMVmFsdWUgdmFsdWUs
IExWYWx1ZSBhY3R1YWxUeXBlLCBKU1R5cGUgZXhwZWN0ZWRUeXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGR5bmFtaWNQb2lzb24oCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgIG1f
b3V0LmJpdFhvcigKKyAgICAgICAgICAgICAgICBtX291dC5vcGFxdWUoYWN0dWFsVHlwZSksCisg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihleHBlY3RlZFR5cGUpKSk7CisgICAgfQor
ICAgIAorICAgIExWYWx1ZSBkeW5hbWljUG9pc29uT25UeXBlKExWYWx1ZSB2YWx1ZSwgSlNUeXBl
IGV4cGVjdGVkVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBkeW5hbWljUG9pc29uT25Mb2Fk
ZWRUeXBlKAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBtX291dC5sb2FkOFplcm9F
eHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAgIGV4
cGVjdGVkVHlwZSk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KICAg
ICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUsIExWYWx1ZSBmdW5jdGlvbiwgQXJncyYmLi4uIGFy
Z3MpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlLaW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlLaW5k
LmgJKHJldmlzaW9uIDIzMDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3Vy
aXR5S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw2IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi0vLyBOT1RFOiBTZWN1cml0eUtpbmQgaXMgZm9yIGRpc3RhbmNpbmcuIEJ1dCBjYWdp
bmcgaW1wbGllcyBkaXN0YW5jaW5nLiBTbywgdGhpbmdzIHRoYXQgaGF2ZSB0aGVpciBvd24KLS8v
IGNhZ2VzIChsaWtlIHR5cGVkIGFycmF5cykgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGUg
c2VjdXJpdHkga2luZC4KIGVudW0gY2xhc3MgU2VjdXJpdHlLaW5kIDogdWludDhfdCB7CiAgICAg
Ly8gVGhlIEpTVmFsdWVPT0Igc2VjdXJpdHkga2luZCBpcyBmb3IgY2VsbHMgdGhhdCBjb250YWlu
IEpWYWx1ZXMgYW5kIGNhbiBiZSBhY2Nlc3NlZCBvdXQtb2YtYm91bmRzCiAgICAgLy8gdXAgdG8g
bWluaW11bURpc3RhbmNlQmV0d2VlbkNlbGxzRnJvbURpZmZlcmVudE9yaWdpbnMuCkBAIC00Mywx
MSArNDEsNyBAQCBlbnVtIGNsYXNzIFNlY3VyaXR5S2luZCA6IHVpbnQ4X3QgewogICAgIC8vIFRo
ZSBKU1ZhbHVlU3RyaWN0IHNlY3VyaXR5IGtpbmQgaXMgZm9yIGNlbGxzIHRoYXQgY29udGFpbiBK
U1ZhbHVlcyBidXQgY2Fubm90IGJlIGFjY2Vzc2VkCiAgICAgLy8gb3V0LW9mLWJvdW5kcy4gQ3Vy
cmVudGx5LCBpdCdzIG5vdCBlc3NlbnRpYWwgdG8ga2VlcCB0aGlzIHNlcGFyYXRlIGZyb20gRGFu
Z2Vyb3VzQml0cy4gV2UncmUKICAgICAvLyB1c2luZyB0aGlzIHRvIGdldCBzb21lIHdpZ2dsZSBy
b29tIGZvciBob3cgd2UgaGFuZGxlIGFycmF5IGVsZW1lbnRzLiBGb3IgZXhhbXBsZSwgd2UgbWln
aHQgd2FudAotICAgIC8vIHRvIGFsbG93IE9PQiByZWFkcyBidXQgbm90IE9PQiB3cml0ZXMsIHNp
bmNlIEpTVmFsdWVTdHJpY3QgY29udGFpbnMgb25seSBKU1ZhbHVlcyBhbmQgbGVuZ3RoIGZpZWxk
cy4KLSAgICAvLyBVc2luZyBTcGVjdHJlIHRvIHJlYWQgdGhlIGxlbmd0aCBmaWVsZHMgaXMgbm90
IHVzZWZ1bCBmb3IgYXR0YWNrZXJzIHNpbmNlIHRoZXkgY2FuIHJlYWQgdGhlbSBhbnl3YXkuCi0g
ICAgLy8gU28sIHRoZXkgd2lsbCBvbmx5IHdhbnQgdG8gd3JpdGUgdG8gbGVuZ3RoIGZpZWxkcywg
aW4gb3JkZXIgdG8gY29uZnVzZSBhIHN1YnNlcXVlbnQgYm91bmRzIGNoZWNrLgotICAgIC8vIFRo
ZXkgY2FuIGRvIHRoYXQgd2l0aGluIGEgc3BlY3VsYXRpb24gd2luZG93LiBIb3dldmVyLCB3ZSBj
dXJyZW50bHkgdXNlIHByZWNpc2UgaW5kZXggbWFza2luZyBmb3IKLSAgICAvLyB0aGlzLgorICAg
IC8vIHRvIGFsbG93IE9PQiByZWFkcyBidXQgbm90IE9PQiB3cml0ZXMuCiAgICAgLy8KICAgICAv
LyBJdCdzIGlsbGVnYWwgdG8gdXNlIHRoaXMgZm9yIGFueSBzdWJjbGFzcyBvZiBKU09iamVjdCwg
SlNTdHJpbmcsIG9yIFN5bWJvbCwgb3IgYW55IG90aGVyIGNlbGwKICAgICAvLyB0aGF0IGNvdWxk
IGJlIHJlZmVyZW5jZWQgZnJvbSBhIEpTVmFsdWUuIFlvdSBtdXN0IHVzZSBwb2lzb25lZCBwb2lu
dGVycyB0byBwb2ludCBhdCB0aGVzZSBjZWxscy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjMw
MjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwNyw5ICsxMTA3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fYXJndW1lbnRzKElucwogICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CiAgICAgCiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywg
cmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpvZmZz
ZXRPZlN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlZ1QxKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSArIFBheWxvYWRPZmZzZXQpLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlZ1QwKTsKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKIH0KQEAgLTExMjMsMTAgKzExMjIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJn
dW1lbnRzKEluc3RyCiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiAgICAgCiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRP
ZlN0b3JhZ2UoKSksIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRkcmVz
cyhyZWdUMCwgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFBheWxvYWRP
ZmZzZXQpKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikgKyBUYWdPZmZzZXQpKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDIzMDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg3LDkgKzEwODcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoSW5zCiAgICAgaW50IGluZGV4ID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgRGly
ZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICB4b3JQdHIoVHJ1
c3RlZEltbVB0cihEaXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSwgcmVnVDApOwotICAgIGxv
YWQ2NChBZGRyZXNzKHJlZ1QwLCBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSwgcmVnVDApOworICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0
b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCBy
ZWdUMCk7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KQEAgLTExMDIsOSArMTEwMCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19hcmd1bWVudHMoSW5zdHIKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGFyZ3VtZW50cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0
T2ZTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgeG9yUHRyKFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJn
dW1lbnRzUG9pc29uOjprZXkoKSksIHJlZ1QwKTsKLSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNz
KHJlZ1QwLCBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgc3Rv
cmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0
KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKICAgICBlbWl0
V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KQEAg
LTE0MDQsMTYgKzE0MDAsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREaXJlY3RBcmd1bWVu
dHNHZQogICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIHNjcmF0Y2gpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwg
c2NyYXRjaCwgVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKICAgICAKLSAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSks
IHNjcmF0Y2gpOwotICAgIHhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1BvaXNv
bjo6a2V5KCkpLCBzY3JhdGNoKTsKLSAgICAKLSAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoLCBE
aXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoSW5TdG9yYWdlKCkpLCBzY3JhdGNoMik7Cisg
ICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgp
KSwgc2NyYXRjaDIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCBwcm9wZXJ0eSwgc2NyYXRjaDIpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVk
QXJndW1lbnRzKCkpKSk7CiAgICAgCi0gICAgZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIo
cHJvcGVydHksIHNjcmF0Y2gyLCBzY3JhdGNoMik7Ci0gICAgbG9hZFZhbHVlKEJhc2VJbmRleChz
Y3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNFaWdodCksIHJlc3VsdCk7Ci0gICAgYW5kUHRyKHNjcmF0
Y2gyLCByZXN1bHQucGF5bG9hZEdQUigpKTsKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KGJhc2Us
IHByb3BlcnR5LCBUaW1lc0VpZ2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSks
IHJlc3VsdCk7CiAgICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCShyZXZpc2lvbiAyMzAyMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjUzMSw5ICsy
NTMxLDggQEAgX2xsaW50X29wX2dldF9mcm9tX2FyZ3VtZW50czoKICAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oMiwgdDApCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XSwgdDAK
ICAgICBsb2FkaSAxMltQQ10sIHQxCi0gICAgbG9hZHAgRGlyZWN0QXJndW1lbnRzOjptX3N0b3Jh
Z2VbdDBdLCB0MAotICAgIGxvYWRpIFRhZ09mZnNldFt0MCwgdDEsIDhdLCB0MgotICAgIGxvYWRp
IFBheWxvYWRPZmZzZXRbdDAsIHQxLCA4XSwgdDMKKyAgICBsb2FkaSBEaXJlY3RBcmd1bWVudHNf
c3RvcmFnZSArIFRhZ09mZnNldFt0MCwgdDEsIDhdLCB0MgorICAgIGxvYWRpIERpcmVjdEFyZ3Vt
ZW50c19zdG9yYWdlICsgUGF5bG9hZE9mZnNldFt0MCwgdDEsIDhdLCB0MwogICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbigxLCB0MSkKICAgICB2YWx1ZVByb2ZpbGUodDIsIHQzLCAxNiwgdDApCiAg
ICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbY2ZyLCB0MSwgOF0KQEAgLTI1NDgsMTAgKzI1NDcsOSBA
QCBfbGxpbnRfb3BfcHV0X3RvX2FyZ3VtZW50czoKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2Nm
ciwgdDAsIDhdLCB0MAogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MSkKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MiwgdDMpCi0gICAgbG9hZHAgRGlyZWN0QXJndW1lbnRz
OjptX3N0b3JhZ2VbdDBdLCB0MAogICAgIGxvYWRpIDhbUENdLCB0MQotICAgIHN0b3JlaSB0Miwg
VGFnT2Zmc2V0W3QwLCB0MSwgOF0KLSAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbdDAsIHQx
LCA4XQorICAgIHN0b3JlaSB0MiwgRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UgKyBUYWdPZmZzZXRb
dDAsIHQxLCA4XQorICAgIHN0b3JlaSB0MywgRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UgKyBQYXls
b2FkT2Zmc2V0W3QwLCB0MSwgOF0KICAgICBkaXNwYXRjaCg0KQogCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAyMzAyMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjU2Miw5ICsyNTYyLDcgQEAg
X2xsaW50X29wX2dldF9mcm9tX2FyZ3VtZW50czoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAg
bG9hZFZhcmlhYmxlKDIsIHQwKQogICAgIGxvYWRpIDI0W1BCLCBQQywgOF0sIHQxCi0gICAgbG9h
ZHAgRGlyZWN0QXJndW1lbnRzOjptX3N0b3JhZ2VbdDBdLCB0MAotICAgIHVucG9pc29uKF9nX0Rp
cmVjdEFyZ3VtZW50c1BvaXNvbiwgdDAsIHQzKQotICAgIGxvYWRxIFt0MCwgdDEsIDhdLCB0MAor
ICAgIGxvYWRxIERpcmVjdEFyZ3VtZW50c19zdG9yYWdlW3QwLCB0MSwgOF0sIHQwCiAgICAgdmFs
dWVQcm9maWxlKHQwLCA0LCB0MSkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDEpCiAg
ICAgc3RvcmVxIHQwLCBbY2ZyLCB0MSwgOF0KQEAgLTI1NzcsOSArMjU3NSw3IEBAIF9sbGludF9v
cF9wdXRfdG9fYXJndW1lbnRzOgogICAgIGxvYWRpIDE2W1BCLCBQQywgOF0sIHQxCiAgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDMsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDMs
IHQyKQotICAgIGxvYWRwIERpcmVjdEFyZ3VtZW50czo6bV9zdG9yYWdlW3QwXSwgdDAKLSAgICB1
bnBvaXNvbihfZ19EaXJlY3RBcmd1bWVudHNQb2lzb24sIHQwLCB0MykKLSAgICBzdG9yZXEgdDIs
IFt0MCwgdDEsIDhdCisgICAgc3RvcmVxIHQyLCBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZVt0MCwg
dDEsIDhdCiAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcygxLCAzKQogICAgIGRpc3BhdGNoKGNv
bnN0ZXhwciBvcF9wdXRfdG9fYXJndW1lbnRzX2xlbmd0aCkKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNp
b24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAgZW5kCiBjb25zdCBT
bG90U2l6ZSA9IDgKIAogY29uc3QgSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzID0gKHNp
emVvZiBKU0xleGljYWxFbnZpcm9ubWVudCArIFNsb3RTaXplIC0gMSkgJiB+KFNsb3RTaXplIC0g
MSkKK2NvbnN0IERpcmVjdEFyZ3VtZW50c19zdG9yYWdlID0gKHNpemVvZiBEaXJlY3RBcmd1bWVu
dHMgKyBTbG90U2l6ZSAtIDEpICYgfihTbG90U2l6ZSAtIDEpCiAKIGNvbnN0IFN0YWNrQWxpZ25t
ZW50ID0gMTYKIGNvbnN0IFN0YWNrQWxpZ25tZW50U2xvdHMgPSAyCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9u
IDIzMDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDI3ICszNiwyMiBAQCBTVEFUSUNfQVNTRVJUX0lT
X1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBEaXJlY3RBcmd1bWVu
dHM6OnNfaW5mbyA9IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoRGlyZWN0QXJndW1lbnRzKSB9OwogCi1EaXJlY3RBcmd1
bWVudHM6OkRpcmVjdEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UpCitEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3Vt
ZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIGNhcGFjaXR5KQogICAgIDogR2VuZXJpY0FyZ3VtZW50cyh2bSwgc3RydWN0dXJlKQotICAg
ICwgbV9zdG9yYWdlKHZtLCB0aGlzLCBzdG9yYWdlKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQor
ICAgICwgbV9taW5DYXBhY2l0eShjYXBhY2l0eSkKIHsKICAgICAvLyBXaGVuIHdlIGNvbnN0cnVj
dCB0aGUgb2JqZWN0IGZyb20gQysrIGNvZGUsIHdlIGV4cGVjdCB0aGUgY2FwYWNpdHkgdG8gYmUg
YXQgbGVhc3QgYXMgbGFyZ2UgYXMKICAgICAvLyBsZW5ndGguIEpJVC1hbGxvY2F0ZWQgRGlyZWN0
QXJndW1lbnRzIG9iamVjdHMgcGxheSBldmlsIHRyaWNrcywgdGhvdWdoLgotICAgIEFTU0VSVChz
dG9yYWdlSGVhZGVyKHN0b3JhZ2UpLm1pbkNhcGFjaXR5ID49IHN0b3JhZ2VIZWFkZXIoc3RvcmFn
ZSkubGVuZ3RoKTsKKyAgICBBU1NFUlQoY2FwYWNpdHkgPj0gbGVuZ3RoKTsKIH0KIAogRGlyZWN0
QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCiAgICAgVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBjYXBh
Y2l0eSkKIHsKLSAgICB2b2lkKiByYXdTdG9yYWdlUHRyID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKAotICAgICAgICB2bSwgc3RvcmFnZVNpemUo
Y2FwYWNpdHkpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7Ci0gICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8V3JpdGVCYXJyaWVy
PFVua25vd24+Kj4ocmF3U3RvcmFnZVB0cikgKyAxOwotICAgIHN0b3JhZ2VIZWFkZXIoc3RvcmFn
ZSkubGVuZ3RoID0gbGVuZ3RoOwotICAgIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkubWluQ2FwYWNp
dHkgPSBjYXBhY2l0eTsKLSAgICAKICAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9Ci0gICAg
ICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERpcmVjdEFyZ3VtZW50cz4odm0uaGVhcCkp
Ci0gICAgICAgIERpcmVjdEFyZ3VtZW50cyh2bSwgc3RydWN0dXJlLCBzdG9yYWdlKTsKKyAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGlyZWN0QXJndW1lbnRzPih2bS5oZWFwLCBh
bGxvY2F0aW9uU2l6ZShjYXBhY2l0eSkpKQorICAgICAgICBEaXJlY3RBcmd1bWVudHModm0sIHN0
cnVjdHVyZSwgbGVuZ3RoLCBjYXBhY2l0eSk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTY0LDEwICs1OSw5IEBAIERpcmVjdEFyZ3Vt
ZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUKIERpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJn
dW1lbnRzOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBjYXBhY2l0eSkKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0K
LSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UgPSByZXN1bHQtPnN0b3JhZ2UoKTsK
KyAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYXBhY2l0eTsgaS0tOykKLSAgICAgICAgc3Rv
cmFnZVtpXS5jbGVhcigpOworICAgICAgICByZXN1bHQtPnN0b3JhZ2UoKVtpXS5jbGVhcigpOwog
ICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC04MSw5ICs3NSw4IEBAIERpcmVjdEFyZ3Vt
ZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUKICAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3Vs
dCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCiAgICAgICAgIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsK
ICAgICAKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UgPSByZXN1bHQtPnN0b3Jh
Z2UoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYXBhY2l0eTsgaS0tOykKLSAgICAgICAgc3Rv
cmFnZVtpXS5zZXQodm0sIHJlc3VsdCwgZXhlYy0+Z2V0QXJndW1lbnRVbnNhZmUoaSkpOworICAg
ICAgICByZXN1bHQtPnN0b3JhZ2UoKVtpXS5zZXQodm0sIHJlc3VsdCwgZXhlYy0+Z2V0QXJndW1l
bnRVbnNhZmUoaSkpOwogICAgIAogICAgIHJlc3VsdC0+c2V0Q2FsbGVlKHZtLCBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpKTsKICAgICAKQEAgLTk0LDcgKzg3LDcgQEAgc2l6
ZV90IERpcmVjdEFyZ3VtZW50czo6ZXN0aW1hdGVkU2l6ZShKUwogewogICAgIERpcmVjdEFyZ3Vt
ZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihjZWxsKTsKICAgICBz
aXplX3QgbWFwcGVkQXJndW1lbnRzU2l6ZSA9IHRoaXNPYmplY3QtPm1fbWFwcGVkQXJndW1lbnRz
ID8gdGhpc09iamVjdC0+bWFwcGVkQXJndW1lbnRzU2l6ZSgpICogc2l6ZW9mKGJvb2wpIDogMDsK
LSAgICBzaXplX3QgbW9kaWZpZWRBcmd1bWVudHNTaXplID0gdGhpc09iamVjdC0+bV9tb2RpZmll
ZEFyZ3VtZW50c0Rlc2NyaXB0b3IgPyB0aGlzT2JqZWN0LT5zdG9yYWdlSGVhZGVyKCkubGVuZ3Ro
ICogc2l6ZW9mKGJvb2wpIDogMDsKKyAgICBzaXplX3QgbW9kaWZpZWRBcmd1bWVudHNTaXplID0g
dGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IgPyB0aGlzT2JqZWN0LT5t
X2xlbmd0aCAqIHNpemVvZihib29sKSA6IDA7CiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNp
emUoY2VsbCkgKyBtYXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1bWVudHNTaXplOwog
fQogCkBAIC0xMDQsMTQgKzk3LDExIEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxk
cmVuKEpTQ2UKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAg
IHZpc2l0b3IubWFya0F1eGlsaWFyeSgmdGhpc09iamVjdC0+c3RvcmFnZUhlYWRlcigpKTsKLSAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5zdG9yYWdlKCksIHN0ZDo6bWF4KHRo
aXNPYmplY3QtPnN0b3JhZ2VIZWFkZXIoKS5sZW5ndGgsIHRoaXNPYmplY3QtPnN0b3JhZ2VIZWFk
ZXIoKS5taW5DYXBhY2l0eSkpOwotICAgIAorICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNP
YmplY3QtPnN0b3JhZ2UoKSwgc3RkOjptYXgodGhpc09iamVjdC0+bV9sZW5ndGgsIHRoaXNPYmpl
Y3QtPm1fbWluQ2FwYWNpdHkpKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Nh
bGxlZSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+bV9tYXBwZWRBcmd1bWVudHMpCiAgICAgICAg
IHZpc2l0b3IubWFya0F1eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cy5nZXQo
KSk7Ci0gICAgCiAgICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENo
aWxkcmVuKHRoaXNDZWxsLCB2aXNpdG9yKTsKIH0KIApAQCAtMTI0LDE0ICsxMTQsMTQgQEAgdm9p
ZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKFZNJgogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFtX21hcHBlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKHN0b3JhZ2VIZWFkZXIoKS5sZW5ndGgpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fbGVuZ3RoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdsb2JhbE9i
amVjdCgpLT5hcnJheVByb3RvVmFsdWVzRnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIAogICAgIHZvaWQqIGJhY2tpbmdT
dG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tYXBwZWRBcmd1bWVudHMua2luZCku
YWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBtYXBwZWRBcmd1bWVudHNTaXplKCksIG51bGxwdHIsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICBib29sKiBvdmVycmlkZXMgPSBzdGF0
aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsKICAgICBtX21hcHBlZEFyZ3VtZW50cy5zZXQo
dm0sIHRoaXMsIG92ZXJyaWRlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc3RvcmFnZUhlYWRl
cigpLmxlbmd0aDsgaS0tOykKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0tOykK
ICAgICAgICAgb3ZlcnJpZGVzW2ldID0gZmFsc2U7CiB9CiAKQEAgLTE1MCwxMiArMTQwLDExIEBA
IHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiAKIHZvaWQgRGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAg
ICAgaWYgKCFtX21hcHBlZEFyZ3VtZW50cykgewotICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHN0
ZDo6bWluKGxlbmd0aCArIG9mZnNldCwgc3RvcmFnZUhlYWRlcigpLmxlbmd0aCk7CisgICAgICAg
IHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4obGVuZ3RoICsgb2Zmc2V0LCBtX2xlbmd0aCk7CiAg
ICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IGZpcnN0
RWxlbWVudERlc3QgLSBvZmZzZXQ7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3Rv
cmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKICAgICAgICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbGlt
aXQ7ICsraSkKLSAgICAgICAgICAgIGV4ZWMtPnIoc3RhcnQgKyBpKSA9IHN0b3JhZ2VbaV0uZ2V0
KCk7CisgICAgICAgICAgICBleGVjLT5yKHN0YXJ0ICsgaSkgPSBzdG9yYWdlKClbaV0uZ2V0KCk7
CiAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBleGVjLT5yKHN0
YXJ0ICsgaSkgPSBnZXQoZXhlYywgaSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2OSw3ICsxNTgs
NyBAQCB1bnNpZ25lZCBEaXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50CiAgICAgLy8gV2Ug
YWx3YXlzIGFsbG9jYXRlIHNvbWV0aGluZzsgaW4gdGhlIHJlbGF0aXZlbHkgdW5jb21tb24gY2Fz
ZSBvZiBvdmVycmlkaW5nIGFuIGVtcHR5IGFyZ3VtZW50IHdlCiAgICAgLy8gc3RpbGwgYWxsb2Nh
dGUgc28gdGhhdCBtX21hcHBlZEFyZ3VtZW50cyBpcyBub24tbnVsbC4gV2UgdXNlIHRoYXQgdG8g
aW5kaWNhdGUgdGhhdCB0aGUgb3RoZXIgcHJvcGVydGllcwogICAgIC8vIChsZW5ndGgsIGV0Yykg
YXJlIG92ZXJyaWRkZW4uCi0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4Pihz
dG9yYWdlSGVhZGVyKCkubGVuZ3RoID8gc3RvcmFnZUhlYWRlcigpLmxlbmd0aCA6IDEpOworICAg
IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8OD4obV9sZW5ndGggPyBtX2xlbmd0aCA6
IDEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMzAyMjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsMjQgKzMyLDI1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7Ci0gICAgCiAvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBv
YmplY3QgdGhhdCB3ZSBjcmVhdGUgd2hlbiB5b3Ugc2F5ICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1
bmN0aW9uLAogLy8gYW5kIG5vbmUgb2YgdGhlIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgaW4gdGhl
IGZ1bmN0aW9uJ3MgYWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgY29weSBhbGwKIC8vIG9m
IGl0cyBhcmd1bWVudHMgaW50byB0aGlzIG9iamVjdCwgYW5kIGFsbCBzdWJzZXF1ZW50IGFjY2Vz
c2VzIHRvIHRoZSBhcmd1bWVudHMgd2lsbCBnbyB0aHJvdWdoCiAvLyB0aGlzIG9iamVjdCB0aGVy
ZWFmdGVyLiBTcGVjaWFsIHN1cHBvcnQgaXMgaW4gcGxhY2UgZm9yIG1pc2NoZXZpb3VzIGV2ZW50
cyBsaWtlIHRoZSBhcmd1bWVudHMKIC8vIGJlaW5nIGRlbGV0ZWQgKHNvbWV0aGluZyBsaWtlICJk
ZWxldGUgYXJndW1lbnRzWzBdIikgb3IgcmVjb25maWd1cmVkIChicm9hZGx5LCB3ZSBzYXkgZGVs
ZXRpb25zCiAvLyBhbmQgcmVjb25maWd1cmF0aW9ucyBtZWFuIHRoYXQgdGhlIHJlc3BlY3RpdmUg
YXJndW1lbnQgd2FzICJvdmVycmlkZGVuIikuCisvLworLy8gVG8gc3BlZWQgYWxsb2NhdGlvbiwg
dGhpcyBvYmplY3Qgd2lsbCBob2xkIGFsbCBvZiB0aGUgYXJndW1lbnRzIGluLXBsYWNlLiBUaGUg
YXJndW1lbnRzIGFzIHdlbGwKKy8vIGFzIGEgdGFibGUgb2YgZmxhZ3Mgc2F5aW5nIHdoaWNoIGFy
Z3VtZW50cyB3ZXJlIG92ZXJyaWRkZW4uCiBjbGFzcyBEaXJlY3RBcmd1bWVudHMgZmluYWwgOiBw
dWJsaWMgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+IHsKIHByaXZhdGU6Ci0gICAg
RGlyZWN0QXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKiwgV3JpdGVCYXJyaWVyPFVua25vd24+KiBz
dG9yYWdlKTsKKyAgICBEaXJlY3RBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIGNhcGFjaXR5KTsKICAgICAKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUNlbGxUeXBlOjpuZWVkc0Rlc3RydWN0aW9u
KTsKLSAgICAgICAgcmV0dXJuICZ2bS5kaXJlY3RBcmd1bWVudHNTcGFjZTsKKyAgICAgICAgcmV0
dXJuICZ2bS5qc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7CiAgICAgfQogCiAgICAgLy8gQ3JlYXRl
cyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ1dCBsZWF2ZXMgaXQgdW5pbml0aWFsaXplZC4gVGhpcyBp
cyBkYW5nZXJvdXMgaWYgd2UgR0MgcmlnaHQKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogICAg
IAogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBzdG9yYWdlSGVhZGVyKCkubGVuZ3RoOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CiAg
ICAgfQogICAgIAogICAgIHVpbnQzMl90IGxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkBA
IC04MSwzMyArODIsMjkgQEAgcHVibGljOgogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKGV4ZWMpOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBzdG9yYWdlSGVhZGVyKCkubGVuZ3RoOworICAgICAgICByZXR1cm4gbV9sZW5n
dGg7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNNYXBwZWRBcmd1bWVudCh1aW50MzJfdCBpKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGkgPCBzdG9yYWdlSGVhZGVyKCkubGVuZ3RoICYm
ICghbV9tYXBwZWRBcmd1bWVudHMgfHwgIW1fbWFwcGVkQXJndW1lbnRzW2ldKTsKKyAgICAgICAg
cmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fbWFwcGVkQXJndW1lbnRzIHx8ICFtX21hcHBlZEFy
Z3VtZW50c1tpXSk7CiAgICAgfQogCiAgICAgYm9vbCBpc01hcHBlZEFyZ3VtZW50SW5ERkcodWlu
dDMyX3QgaSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpIDwgc3RvcmFnZUhlYWRlcigp
Lmxlbmd0aCAmJiAhb3ZlcnJvZGVUaGluZ3MoKTsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0
aCAmJiAhb3ZlcnJvZGVUaGluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICBKU1ZhbHVlIGdldElu
ZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oaXNNYXBwZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogc3RvcmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICAgICAgYXV0
byogcHRyID0gJnN0b3JhZ2VbaV07Ci0gICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrUHRy
KGksIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkubGVuZ3RoLCBwdHIpLT5nZXQoKTsKKyAgICAgICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpcyktPnN0b3JhZ2UoKVtpXS5n
ZXQoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoVk0mIHZtLCB1aW50
MzJfdCBpLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oaXNNYXBwZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogc3RvcmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICAgICAgYXV0byogcHRy
ID0gJnN0b3JhZ2VbaV07Ci0gICAgICAgIHByZWNpc2VJbmRleE1hc2tQdHIoaSwgc3RvcmFnZUhl
YWRlcihzdG9yYWdlKS5sZW5ndGgsIHB0ciktPnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAg
ICBzdG9yYWdlKClbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogICAgIAogICAgIEpT
RnVuY3Rpb24qIGNhbGxlZSgpCkBAIC0xMjMsMTMgKzEyMCw4IEBAIHB1YmxpYzoKICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIGFyZ3VtZW50KERpcmVjdEFyZ3VtZW50c09mZnNldCBvZmZzZXQp
CiAgICAgewogICAgICAgICBBU1NFUlQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04ob2Zmc2V0Lm9mZnNldCgpIDwgc3RkOjptYXgoc3RvcmFnZUhlYWRl
cigpLmxlbmd0aCwgc3RvcmFnZUhlYWRlcigpLm1pbkNhcGFjaXR5KSk7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogc3RvcmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICAgICAgYXV0
byogcHRyID0gJnN0b3JhZ2Vbb2Zmc2V0Lm9mZnNldCgpXTsKLSAgICAgICAgcmV0dXJuICpwcmVj
aXNlSW5kZXhNYXNrUHRyKAotICAgICAgICAgICAgb2Zmc2V0Lm9mZnNldCgpLAotICAgICAgICAg
ICAgc3RkOjptYXgoc3RvcmFnZUhlYWRlcihzdG9yYWdlKS5sZW5ndGgsIHN0b3JhZ2VIZWFkZXIo
c3RvcmFnZSkubWluQ2FwYWNpdHkpLAotICAgICAgICAgICAgcHRyKTsKKyAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ob2Zmc2V0Lm9mZnNldCgpIDwgc3RkOjptYXgobV9s
ZW5ndGgsIG1fbWluQ2FwYWNpdHkpKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2UoKVtvZmZzZXQu
b2Zmc2V0KCldOwogICAgIH0KICAgICAKICAgICAvLyBNZXRob2RzIGludGVuZGVkIGZvciB1c2Ug
YnkgdGhlIEdlbmVyaWNBcmd1bWVudHMgbWl4aW4uCkBAIC0xNDAsMTcgKzEzMiwxNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JJZk5lY2Vzc2Fy
eShWTSYgdm0pCiAgICAgewotICAgICAgICBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50
cz46OmluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JJZk5lY2Vzc2FyeSh2bSwgc3RvcmFn
ZUhlYWRlcigpLmxlbmd0aCk7CisgICAgICAgIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1l
bnRzPjo6aW5pdE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcklmTmVjZXNzYXJ5KHZtLCBtX2xl
bmd0aCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihW
TSYgdm0sIHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgR2VuZXJpY0FyZ3VtZW50czxE
aXJlY3RBcmd1bWVudHM+OjpzZXRNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih2bSwgaW5kZXgs
IHN0b3JhZ2VIZWFkZXIoKS5sZW5ndGgpOworICAgICAgICBHZW5lcmljQXJndW1lbnRzPERpcmVj
dEFyZ3VtZW50cz46OnNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHZtLCBpbmRleCwgbV9s
ZW5ndGgpOwogICAgIH0KIAogICAgIGJvb2wgaXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1
bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPERp
cmVjdEFyZ3VtZW50cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIHN0b3Jh
Z2VIZWFkZXIoKS5sZW5ndGgpOworICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJl
Y3RBcmd1bWVudHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0
aCk7CiAgICAgfQogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgVmlydHVh
bFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKQEAgLTE2MCw1NSArMTUyLDM4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
KTsKICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKERpcmVjdEFyZ3VtZW50cywgbV9jYWxsZWUpOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJl
Y3RBcmd1bWVudHMsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZN
aW5DYXBhY2l0eSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMsIG1f
bWluQ2FwYWNpdHkpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1hcHBlZEFyZ3Vt
ZW50cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMsIG1fbWFwcGVk
QXJndW1lbnRzKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RpZmllZEFyZ3Vt
ZW50c0Rlc2NyaXB0b3IoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGlyZWN0QXJndW1lbnRz
LCBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mU3RvcmFnZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVu
dHMsIG1fc3RvcmFnZSk7IH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGhJ
blN0b3JhZ2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RvcmFnZUhlYWRlciwgbGVuZ3Ro
KSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1pbkNhcGFjaXR5SW5TdG9yYWdlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0b3JhZ2VIZWFkZXIsIG1pbkNhcGFjaXR5KSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pOyB9CiAgICAgCi0gICAgc3RhdGljIHNpemVfdCBzdG9yYWdlU2l6ZShDaGVja2VkPHNpemVf
dD4gY2FwYWNpdHkpCisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlT2Zmc2V0KCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAoc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiAoY2FwYWNpdHkg
KyBzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSkudW5zYWZlR2V0KCk7CisgICAgICAgIHJldHVybiBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNp
emVvZihEaXJlY3RBcmd1bWVudHMpKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHNpemVfdCBz
dG9yYWdlSGVhZGVyU2l6ZSgpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
OyB9Ci0gICAgCi0gICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShzaXplX3QgaW5saW5l
U2l6ZSkKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mU2xvdChDaGVja2VkPHNpemVfdD4gaW5k
ZXgpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5saW5lU2l6ZSk7Ci0gICAgICAg
IHJldHVybiBzaXplb2YoRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIChzdG9yYWdl
T2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGluZGV4KS51bnNhZmVH
ZXQoKTsKICAgICB9CiAgICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7Ci0gICAgCi0gICAgc3RydWN0IFN0b3JhZ2VIZWFkZXIgewotICAgICAgICB1
aW50MzJfdCBsZW5ndGg7IC8vIEFsd2F5cyB0aGUgYWN0dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBh
cmd1bWVudHMgYW5kIG5ldmVyIHdoYXQgd2FzIHN0b3JlZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVy
dHkuCi0gICAgICAgIHVpbnQzMl90IG1pbkNhcGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5k
IGxlbmd0aCBkZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJl
IHRoZSBhY3R1YWwgY2FwYWNpdHksIG9yIG1heWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJh
bmdlIGl0IHRoaXMgd2F5IHRvIGJlIGtpbmQgdG8gdGhlIEpJVHMuCi0gICAgfTsKLSAgICAKLSAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UoKSBjb25zdAorICAgIHN0YXRpYyBzaXpl
X3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IGNhcGFjaXR5KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fc3RvcmFnZS5nZXQoKS51bnBvaXNvbmVkKCk7CisgICAgICAgIHJldHVybiBv
ZmZzZXRPZlNsb3QoY2FwYWNpdHkpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgU3RvcmFnZUhl
YWRlciYgc3RvcmFnZUhlYWRlcihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UpCi0gICAg
ewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihTdG9yYWdlSGVhZGVyKSA9PSBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSwgIlN0b3JhZ2VIZWFkZXIgbmVlZHMgdG8gYmUgdGhlIHNh
bWUgc2l6ZSBhcyBhIEpTVmFsdWUiKTsKLSAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8U3Rv
cmFnZUhlYWRlcio+KHN0b3JhZ2UgLSAxKTsKLSAgICB9Ci0KLSAgICBTdG9yYWdlSGVhZGVyJiBz
dG9yYWdlSGVhZGVyKCkgY29uc3QKK3ByaXZhdGU6CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBzdG9yYWdlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdG9yYWdlSGVhZGVyKHN0b3JhZ2Uo
KSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
Yml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIHN0b3JhZ2VPZmZzZXQoKSk7CiAgICAgfQogICAg
IAogICAgIHVuc2lnbmVkIG1hcHBlZEFyZ3VtZW50c1NpemUoKTsKICAgICAKICAgICBXcml0ZUJh
cnJpZXI8SlNGdW5jdGlvbj4gbV9jYWxsZWU7CisgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIEFs
d2F5cyB0aGUgYWN0dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5kIG5ldmVyIHdo
YXQgd2FzIHN0b3JlZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgdWludDMyX3QgbV9t
aW5DYXBhY2l0eTsgLy8gVGhlIG1heCBvZiB0aGlzIGFuZCBsZW5ndGggZGV0ZXJtaW5lcyB0aGUg
Y2FwYWNpdHkgb2YgdGhpcyBvYmplY3QuIEl0IG1heSBiZSB0aGUgYWN0dWFsIGNhcGFjaXR5LCBv
ciBtYXliZSBzb21ldGhpbmcgc21hbGxlci4gV2UgYXJyYW5nZSBpdCB0aGlzIHdheSB0byBiZSBr
aW5kIHRvIHRoZSBKSVRzLgogICAgIENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZl
LCBib29sPiBtX21hcHBlZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQg
bGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0
aWVzLgotICAgIEF1eGlsaWFyeUJhcnJpZXI8UG9pc29uZWQ8RGlyZWN0QXJndW1lbnRzUG9pc29u
LCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qPj4gbV9zdG9yYWdlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAko
cmV2aXNpb24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUG9p
c29uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgdihBcnJheVByb3RvdHlwZSkgXAogICAgIHYoQ29kZUJsb2NrKSBcCiAgICAgdihEYXRlSW5z
dGFuY2UpIFwKLSAgICB2KERpcmVjdEFyZ3VtZW50cykgXAogICAgIHYoR2xvYmFsRGF0YSkgXAog
ICAgIHYoSklUQ29kZSkgXAogICAgIHYoSlNBUElXcmFwcGVyT2JqZWN0KSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50
LmgJKHJldmlzaW9uIDIzMDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotLy8gVGhpcyBp
cyBTcGVjdHJlLXNhZmUgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgaXRzIGxlbmd0aCBpbmxpbmUu
CiBjbGFzcyBKU0xleGljYWxFbnZpcm9ubWVudCA6IHB1YmxpYyBKU1N5bWJvbFRhYmxlT2JqZWN0
IHsKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyMzAyMjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDYgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gRklYTUU6IFRo
aXMgbmVlZHMgdG8gYmUgcG9pc29uZWQuCiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBt
X3N5bWJvbFRhYmxlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkocmV2aXNpb24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5
cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgYXN5bmNHZW5lcmF0b3JGdW5jdGlvblNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGNlbGxKU1ZhbHVlT09CSGVhcENlbGxUeXBlLmdldCgp
LCBKU0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24pCiAgICAgLCBib3VuZEZ1bmN0aW9uU3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgY2VsbEpTVmFsdWVPT0JIZWFwQ2VsbFR5cGUuZ2V0KCksIEpT
Qm91bmRGdW5jdGlvbikKICAgICAsIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uU3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgY2VsbEpTVmFsdWVPT0JIZWFwQ2VsbFR5cGUuZ2V0KCksIEpT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pCi0gICAgLCBkaXJlY3RBcmd1bWVudHNTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBjZWxsSlNWYWx1ZU9PQkhlYXBDZWxsVHlwZS5nZXQoKSwg
RGlyZWN0QXJndW1lbnRzKQogICAgICwgZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBEaXJl
Y3RFdmFsRXhlY3V0YWJsZSkKICAgICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBjZWxsRGFuZ2Vyb3VzQml0c0hlYXBDZWxsVHlwZS5nZXQo
KSwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSkKICAgICAsIGZ1bmN0aW9uRXhlY3V0YWJsZVNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUu
Z2V0KCksIEZ1bmN0aW9uRXhlY3V0YWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkocmV2aXNpb24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzQ1LDcgKzM0NSw2IEBAIHB1YmxpYzoKICAgICBJc29T
dWJzcGFjZSBhc3luY0dlbmVyYXRvckZ1bmN0aW9uU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgYm91
bmRGdW5jdGlvblNwYWNlOwogICAgIElzb1N1YnNwYWNlIGN1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uU3BhY2U7Ci0gICAgSXNvU3Vic3BhY2UgZGlyZWN0QXJndW1lbnRzU3BhY2U7CiAgICAgSXNv
U3Vic3BhY2UgZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBleGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgZnVuY3Rpb25FeGVj
dXRhYmxlU3BhY2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337128</attachid>
            <date>2018-04-03 16:28:52 -0700</date>
            <delta_ts>2018-04-03 16:58:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>71199</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMjI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE4LTA0LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RG9uJ3QgZG8gaW5kZXggbWFza2luZyBvciBwb2lzb25pbmcgZm9yIERpcmVjdEFyZ3VtZW50cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjgwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFy
ZCk6CisgICAgICAgICogZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNT
bG93UGF0aEdlbmVyYXRvcjo6Q2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJh
dG9yKToKKyAgICAgICAgKiBkZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93
bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEZyb21Bcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0VG9Bcmd1bWVudHMpOgorICAg
ICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0RnJvbUFyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQdXRUb0FyZ3VtZW50cyk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZHluYW1pY1BvaXNvbik6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmR5bmFtaWNQb2lzb25PbkxvYWRl
ZFR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpkeW5hbWljUG9p
c29uT25UeXBlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2Nh
dGVWYXJpYWJsZVNpemVkSGVhcENlbGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2VjdXJp
dHlLaW5kLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RGly
ZWN0QXJndW1lbnRzR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwOgorICAgICAg
ICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkRpcmVjdEFyZ3VtZW50czo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkRp
cmVjdEFyZ3VtZW50czo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpj
cmVhdGVCeUNvcHlpbmcpOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmVzdGltYXRl
ZFNpemUpOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKToKKyAgICAgICAg
KEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpE
aXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50c1NpemUpOgorICAgICAgICAqIHJ1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9KU0NQb2lzb24uaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
IChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE4LTA0LTAyICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIGJtYWxsb2Mgc2hvdWxk
IGNvbXB1dGUgaXRzIG93biBlc3RpbWF0ZSBvZiBpdHMgZm9vdHByaW50CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Miw3ICsxNjIsNiBAQAogCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyog
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAv
KiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovOyB9OwogCQkwRjI1
RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMU2xvd1BhdGhDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2Fs
bEtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
NUYxQUQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjZBN0EzMjA1Mzg5NUMw
MDkwQTE0MSAvKiBERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0aEtub3duTGVuZ3RoU2xv
d1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjZBN0EyMjA1Mzg5NTgwMDkwQTE0MSAvKiBERkdDYWxsQ3JlYXRlRGlyZWN0QXJn
dW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgfTsKIAkJMEYyQUM1
NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2NTFFOEEwQjc2
MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLzsgfTsKIAkJMEYyQUM1
NkIxRThBMEJENTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVh
clNjYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkFDNTY5MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlM
aW5lYXJTY2FuLmggKi87IH07CiAJCTBGMkFDNTZGMUU4RDdCMDMwMDAxRUUzRiAvKiBBaXJQaGFz
ZUluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQUM1NkQxRThEN0FGRjAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0Lmgg
Ki87IH07CkBAIC0yMDY0LDcgKzIwNjMsNiBAQAogCQkwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMU2xvd1BhdGhDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFNsb3dQYXRoQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1Bh
dGhDYWxsS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFNs
b3dQYXRoQ2FsbEtleS5jcHA7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TFNsb3dQYXRoQ2FsbEtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExT
bG93UGF0aENhbGxLZXkuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGxLZXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyNkE3QTIyMDUzODk1ODAwOTBBMTQxIC8qIERGR0Nh
bGxDcmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93UGF0aEdlbmVyYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxsQ3JlYXRlRGlyZWN0QXJn
dW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdD
YWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNzVGMkMxRUNFMDc5NjAwNjIwRDQ3
IC8qIEludHJpbnNpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnRyaW5zaWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJBQzU2NDFFOEEw
Qjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3Bw
OyBwYXRoID0gYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQUM1NjUxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNw
aWxsc0FmdGVyVGVybWluYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmg7IHBhdGggPSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxNDksNyArNzE0
Nyw2IEBACiAJCQkJODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2Vy
LmggKi8sCiAJCQkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9j
YXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJMEZCREI5QUMxQUIwRkJDNjAwMEI1N0U1
IC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oICovLAot
CQkJCTBGMjZBN0EyMjA1Mzg5NTgwMDkwQTE0MSAvKiBERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1l
bnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3IuaCAqLywKIAkJCQkwRkQ4MkUxRTE0
MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLywKIAkJCQkwRkQ4MkUxRjE0
MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8sCiAJCQkJMEZGRkM5NEIxNEVG
OTA5NTAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCAqLywKQEAgLTg1MDgsNyArODUwNSw2IEBA
CiAJCQkJODZFQzlEQzUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5
QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkRCOUFE
MUFCMEZCQzYwMDBCNTdFNSAvKiBERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMjZBN0EzMjA1Mzg5NUMwMDkwQTE0MSAv
KiBERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5l
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBE
RkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTU4MTRFRjkwQTIwMEM3
MjUzMiAvKiBERkdDRkFQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQjNBMjgxNTQ0Qzk5
NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAko
cmV2aXNpb24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODMsMTIgKzM4Myw4IEBAIHZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdFB0cigK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZN
YXBwZWRBcmd1bWVudHMoKSkpKTsKLSAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0
b3JhZ2UoKSksCi0gICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICAgICAg
aml0LnhvclB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9p
c29uOjprZXkoKSksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICBqaXQubG9hZDMy
KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BS
KCksIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSksCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZz
ZXRPZkxlbmd0aCgpKSwKICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzKTsKICAg
ICAgICAgc3RhdGUuc3VjY2VlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVu
dHNTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAyMzAyMjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTcgKzM0LDE2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotLy8gVGhpcyBjYWxscyBvcGVyYXRpb25DcmVhdGVEaXJlY3RB
cmd1bWVudHMgYnV0IHRoZW4gcmVzdG9yZXMgdGhlIHZhbHVlIG9mIGxlbmd0aEdQUiBhbmQgc3Rv
cmFnZUdQUi4KKy8vIFRoaXMgY2FsbHMgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzIGJ1
dCB0aGVuIHJlc3RvcmVzIHRoZSB2YWx1ZSBvZiBsZW5ndGhHUFIuCiBjbGFzcyBDYWxsQ3JlYXRl
RGlyZWN0QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMgSnVtcGluZ1Nsb3dQYXRo
R2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4gewogcHVibGljOgogICAgIENhbGxD
cmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEdQUlJlZyByZXN1bHRH
UFIsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlLAotICAgICAgICBHUFJSZWcgbGVuZ3Ro
R1BSLCBHUFJSZWcgc3RvcmFnZUdQUiwgdW5zaWduZWQgbWluQ2FwYWNpdHkpCisgICAgICAgIEdQ
UlJlZyBsZW5ndGhHUFIsIHVuc2lnbmVkIG1pbkNhcGFjaXR5KQogICAgICAgICA6IEp1bXBpbmdT
bG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+KGZyb20sIGppdCkKICAg
ICAgICAgLCBtX3Jlc3VsdEdQUihyZXN1bHRHUFIpCiAgICAgICAgICwgbV9zdHJ1Y3R1cmUoc3Ry
dWN0dXJlKQogICAgICAgICAsIG1fbGVuZ3RoR1BSKGxlbmd0aEdQUikKLSAgICAgICAgLCBtX3N0
b3JhZ2VHUFIoc3RvcmFnZUdQUikKICAgICAgICAgLCBtX21pbkNhcGFjaXR5KG1pbkNhcGFjaXR5
KQogICAgIHsKICAgICAgICAgaml0LT5zaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoZmFsc2Us
IG1fcGxhbnMsIHJlc3VsdEdQUik7CkBAIC02MiwxMSArNjEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICAgICBqaXQtPnNpbGVudEZpbGwobV9wbGFuc1tpXSk7CiAgICAgICAgIGppdC0+bV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgaml0LT5tX2ppdC5sb2FkUHRyKAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9yZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6
b2Zmc2V0T2ZTdG9yYWdlKCkpLCBtX3N0b3JhZ2VHUFIpOwotICAgICAgICBqaXQtPm1faml0Lnhv
clB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKERpcmVjdEFy
Z3VtZW50c1BvaXNvbjo6a2V5KCkpLCBtX3N0b3JhZ2VHUFIpOwotICAgICAgICBqaXQtPm1faml0
LmxvYWQzMigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fc3RvcmFnZUdQ
UiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aEluU3RvcmFnZSgpKSwgbV9sZW5ndGhH
UFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9yZXN1bHRHUFIsIERp
cmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSksIG1fbGVuZ3RoR1BSKTsKICAgICAgICAg
anVtcFRvKGppdCk7CiAgICAgfQogICAgIApAQCAtNzQsNyArNjksNiBAQCBwcml2YXRlOgogICAg
IEdQUlJlZyBtX3Jlc3VsdEdQUjsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG1fc3RydWN0dXJl
OwogICAgIEdQUlJlZyBtX2xlbmd0aEdQUjsKLSAgICBHUFJSZWcgbV9zdG9yYWdlR1BSOwogICAg
IHVuc2lnbmVkIG1fbWluQ2FwYWNpdHk7CiAgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBs
YW4sIDI+IG1fcGxhbnM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
YWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxDcmVhdGVE
aXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lv
biAyMzAyMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxDcmVhdGVEaXJl
Y3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93UGF0aEdlbmVyYXRvci5oCShub25leGlzdGVu
dCkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVk
ZSAiREZHT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCi0j
aW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKLSNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMu
aCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0vLyBUaGlzIGNhbGxzIG9w
ZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cyBidXQgdGhlbiByZXN0b3JlcyB0aGUgdmFsdWUg
b2Ygc3RvcmFnZUdQUi4KLWNsYXNzIENhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25M
ZW5ndGhTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7Ci1wdWJsaWM6Ci0gICAgQ2FsbENyZWF0ZURpcmVj
dEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgR1BSUmVnIHJl
c3VsdEdQUiwgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUsCi0gICAgICAgIHVuc2lnbmVk
IGtub3duTGVuZ3RoLCBHUFJSZWcgc3RvcmFnZUdQUiwgdW5zaWduZWQgbWluQ2FwYWNpdHkpCi0g
ICAgICAgIDogSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dD4oZnJvbSwgaml0KQotICAgICAgICAsIG1fcmVzdWx0R1BSKHJlc3VsdEdQUikKLSAgICAgICAg
LCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9rbm93bkxlbmd0aChrbm93bkxl
bmd0aCkKLSAgICAgICAgLCBtX3N0b3JhZ2VHUFIoc3RvcmFnZUdQUikKLSAgICAgICAgLCBtX21p
bkNhcGFjaXR5KG1pbkNhcGFjaXR5KQotICAgIHsKLSAgICAgICAgaml0LT5zaWxlbnRTcGlsbEFs
bFJlZ2lzdGVyc0ltcGwoZmFsc2UsIG1fcGxhbnMsIHJlc3VsdEdQUik7Ci0gICAgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpIG92
ZXJyaWRlCi0gICAgewotICAgICAgICBsaW5rRnJvbShqaXQpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wbGFucy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGppdC0+c2ls
ZW50U3BpbGwobV9wbGFuc1tpXSk7Ci0gICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbigKLSAgICAg
ICAgICAgIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbV9yZXN1bHRHUFIsIG1fc3Ry
dWN0dXJlLCBtX2tub3duTGVuZ3RoLCBtX21pbkNhcGFjaXR5KTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9wbGFucy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICBqaXQtPnNpbGVudEZp
bGwobV9wbGFuc1tpXSk7Ci0gICAgICAgIGppdC0+bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAg
ICAgICAgaml0LT5tX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobV9yZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCBt
X3N0b3JhZ2VHUFIpOwotICAgICAgICBqaXQtPm1faml0LnhvclB0cigKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkp
LCBtX3N0b3JhZ2VHUFIpOwotICAgICAgICBqdW1wVG8oaml0KTsKLSAgICB9Ci0gICAgCi1wcml2
YXRlOgotICAgIEdQUlJlZyBtX3Jlc3VsdEdQUjsKLSAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG1f
c3RydWN0dXJlOwotICAgIHVuc2lnbmVkIG1fa25vd25MZW5ndGg7Ci0gICAgR1BSUmVnIG1fc3Rv
cmFnZUdQUjsKLSAgICB1bnNpZ25lZCBtX21pbkNhcGFjaXR5OwotICAgIFZlY3RvcjxTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuLCAyPiBtX3BsYW5zOwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjMwMjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJERkdBcnJheWlmeVNsb3dQYXRo
R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhH
ZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0aEtu
b3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMu
aCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdEZ1enouaCIK
QEAgLTY1MDUsMTMgKzY1MDQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25EaQogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgR1BSVGVt
cG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdw
cigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVn
ID0gc2NyYXRjaC5ncHIoKTsKLSAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
CiAgICAgCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CkBAIC02NTIz
LDI0ICs2NTIwLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGkK
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
RGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1hcHBlZEFyZ3VtZW50cygpKSkpOwotICAgIAotICAg
IG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3Vt
ZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCBzdG9yYWdlUmVnKTsKLSAgICBtX2ppdC54b3JQdHIo
VHJ1c3RlZEltbVB0cihEaXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc3RvcmFnZVJlZyk7
Ci0gICAgCi0gICAgbV9qaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoSW5TdG9yYWdlKCkpLCBzY3JhdGNoUmVn
KTsKKworICAgIG1faml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZVJlZywgRGly
ZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgYXV0byBp
c091dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBzY3JhdGNoUmVnKTsKICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kcygpKQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVl
U291cmNlKCksIDAsIGlzT3V0T2ZCb3VuZHMpOwogICAgIAotICAgIG1faml0LmVtaXRQcmVwYXJl
UHJlY2lzZUluZGV4TWFzazMyKHByb3BlcnR5UmVnLCBzY3JhdGNoUmVnLCBzY3JhdGNoUmVnKTsK
LQogICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCgKLSAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCksCisgICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwKICAg
ICAgICAgcmVzdWx0UmVncyk7CiAgICAgCi0gICAgbV9qaXQuYW5kUHRyKHNjcmF0Y2hSZWcsIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLQogICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kcygpKSB7CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKApAQCAtNjcyNSwxMSArNjcxNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBE
aXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKSk7CiAgICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJl
Zyk7Ci0gICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1Bv
aXNvbjo6a2V5KCkpLCByZXN1bHRSZWcpOwogICAgICAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIERpcmVjdEFyZ3VtZW50czo6
b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVu
Z3RoKCkpLCByZXN1bHRSZWcpOwogICAgICAgICAKICAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0
UmVnLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC03MDU0LDE0NiArNzA0MSwxMDAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5vZGUpCiB7Ci0gICAgVk0m
IHZtID0gKm1faml0LnZtKCk7Ci0gICAgCi0gICAgYm9vbCBsZW5ndGhJc0tub3duID0gbm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQotICAgICAgICAmJiAhbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCk7Ci0gICAgdW5zaWduZWQga25v
d25MZW5ndGggPSBVSU5UX01BWDsKKyAgICAvLyBGSVhNRTogQSBtb3JlIGVmZmVjdGl2ZSB3YXkg
b2YgZGVhbGluZyB3aXRoIHRoZSBhcmd1bWVudCBjb3VudCBhbmQgY2FsbGVlIGlzIHRvIGhhdmUK
KyAgICAvLyB0aGVtIGJlIGV4cGxpY2l0IGFyZ3VtZW50cyB0byB0aGlzIG5vZGUuCisgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjIwNwogICAgIAotICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0KLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5y
ZWdpc3RlclN0cnVjdHVyZShtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBsZW5ndGg7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDFH
UFIgPSBzY3JhdGNoMS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5n
cHIoKTsKKyAgICBHUFJSZWcgbGVuZ3RoR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBKU1ZhbHVl
UmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3Moc2NyYXRj
aDFHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgCiAgICAgdW5zaWduZWQgbWluQ2FwYWNpdHkg
PSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPm51bVBhcmFtZXRlcnMoKSAtIDE7Ci0gICAgCi0gICAgR1BSUmVnIHJlc3VsdEdQUjsKLSAg
ICBHUFJSZWcgbGVuZ3RoR1BSOwotICAgIEdQUlJlZyBzY3JhdGNoMUdQUjsKLSAgICBHUFJSZWcg
c2NyYXRjaDJHUFI7Ci0gICAgR1BSUmVnIHN0b3JhZ2VHUFI7Ci0gICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzOwotICAgIAotICAgIGF1dG8gbG9hZExlbmd0aCA9IFsmXSAoKSB7CisgICAgICAgIAor
ICAgIHVuc2lnbmVkIGtub3duTGVuZ3RoOworICAgIGJvb2wgbGVuZ3RoSXNLbm93bjsgLy8gaWYg
ZmFsc2UsIGxlbmd0aEdQUiB3aWxsIGhhdmUgdGhlIGxlbmd0aC4KKyAgICBpZiAobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAmJiAhbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAga25vd25MZW5n
dGggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDE7CisgICAgICAgIGxlbmd0aElzS25vd24gPSB0cnVlOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGtub3duTGVuZ3RoID0gVUlOVF9NQVg7CisgICAgICAgIGxlbmd0aElz
S25vd24gPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbExl
bmd0aCh0aGlzKTsKKyAgICAgICAgbGVuZ3RoLmFkb3B0KHJlYWxMZW5ndGgpOworICAgICAgICBs
ZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7CisKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IG1faml0LmFyZ3VtZW50Q291bnQobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciksIGxlbmd0aEdQUik7CiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgbGVuZ3RoR1BSKTsKLSAgICB9OworICAgIH0KICAgICAgICAgCi0gICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdDsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDE7Ci0gICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyOwotICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlOwotICAgIEdQUlRlbXBv
cmFyeSBsZW5ndGg7Ci0KLSAgICBpZiAoaXNYODYoKSAmJiBpczMyQml0KCkgJiYgIWxlbmd0aElz
S25vd24pIHsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVhbFJlc3VsdCh0aGlzKTsK
LSAgICAgICAgcmVzdWx0LmFkb3B0KHJlYWxSZXN1bHQpOwotICAgICAgICByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdEdQUiA9PSBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGxlbmd0aEdQUiA9
IEdQUkluZm86OnJlZ1QxOyAvLyBDYW4gYmUgYW55dGhpbmcgd2UgbGlrZSBiZWNhdXNlIHJlZ2lz
dGVycyBhcmUgZmx1c2hlZC4KLSAgICAgICAgc2NyYXRjaDFHUFIgPSBHUFJJbmZvOjpyZWdUMjsK
LSAgICAgICAgc2NyYXRjaDJHUFIgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICAgICAgc3RvcmFnZUdQ
UiA9IEdQUkluZm86OnJlZ1Q0OwotICAgICAgICB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVnczo6d2l0
aFR3b0F2YWlsYWJsZVJlZ3Moc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgbG9h
ZExlbmd0aCgpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFy
Z3VtZW50cywgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIGxlbmd0aEdQUiwgbWluQ2FwYWNpdHkpOwot
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRP
ZlN0b3JhZ2UoKSksIHN0b3JhZ2VHUFIpOwotICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZElt
bVB0cihEaXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBEaXJlY3RB
cmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoSW5TdG9yYWdlKCkpLCBsZW5ndGhHUFIpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBIG1vcmUgZWZmZWN0aXZlIHdheSBvZiBkZWFsaW5n
IHdpdGggdGhlIGFyZ3VtZW50IGNvdW50IGFuZCBjYWxsZWUgaXMgdG8gaGF2ZQotICAgICAgICAv
LyB0aGVtIGJlIGV4cGxpY2l0IGFyZ3VtZW50cyB0byB0aGlzIG5vZGUuCi0gICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyMDcKLSAgICAKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlYWxSZXN1bHQodGhpcyk7Ci0gICAgICAgIHJlc3VsdC5hZG9wdChy
ZWFsUmVzdWx0KTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlYWxTY3JhdGNoMSh0aGlzKTsKLSAg
ICAgICAgc2NyYXRjaDEuYWRvcHQocmVhbFNjcmF0Y2gxKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlYWxTY3JhdGNoMih0aGlzKTsKLSAgICAgICAgc2NyYXRjaDIuYWRvcHQocmVhbFNjcmF0Y2gy
KTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlYWxTdG9yYWdlKHRoaXMpOwotICAgICAgICBzdG9y
YWdlLmFkb3B0KHJlYWxTdG9yYWdlKTsKLSAgICAgICAgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOwotICAgICAgICBzY3JhdGNo
MkdQUiA9IHNjcmF0Y2gyLmdwcigpOwotICAgICAgICBsZW5ndGhHUFIgPSBJbnZhbGlkR1BSUmVn
OwotICAgICAgICBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgdmFsdWVSZWdz
ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHNjcmF0Y2gxR1BSLCBzY3JhdGNo
MkdQUik7CisgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPQorICAgICAgICBtX2pp
dC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChsZW5ndGhJc0tub3duKQotICAgICAgICAgICAga25vd25MZW5n
dGggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDE7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlYWxMZW5ndGgodGhpcyk7Ci0gICAgICAgICAgICBsZW5ndGguYWRvcHQocmVhbExlbmd0
aCk7Ci0gICAgICAgICAgICBsZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7CisgICAgLy8gVXNlIGEg
ZGlmZmVyZW50IHN0cmF0ZWd5IGZvciBhbGxvY2F0aW5nIHRoZSBvYmplY3QgZGVwZW5kaW5nIG9u
IHdoZXRoZXIgd2Uga25vdyBpdHMKKyAgICAvLyBzaXplIHN0YXRpY2FsbHkuCisgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIGlmIChsZW5ndGhJc0tub3duKSB7CisgICAg
ICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAgICAgZW1p
dEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPERpcmVjdEFyZ3VtZW50cz4oCisgICAgICAg
ICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3Jh
dGNoMUdQUiwgc2NyYXRjaDJHUFIsCisgICAgICAgICAgICBzbG93UGF0aCwgRGlyZWN0QXJndW1l
bnRzOjphbGxvY2F0aW9uU2l6ZShzdGQ6Om1heChrbm93bkxlbmd0aCwgbWluQ2FwYWNpdHkpKSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGxvYWRMZW5ndGgoKTsKKyAgICAgICAgbV9qaXQu
c3RvcmUzMigKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihrbm93bkxlbmd0aCksCisgICAgICAg
ICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zm
c2V0T2ZMZW5ndGgoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IHRvb0Zld0FyZ3VtZW50czsKKyAgICAgICAgaWYgKG1pbkNhcGFjaXR5KSB7CisgICAgICAgICAg
ICB0b29GZXdBcmd1bWVudHMgPQorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKEpJVENv
bXBpbGVyOjpCZWxvdywgbGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIobWluQ2FwYWNpdHkpKTsKICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gVXNlIGEgZGlmZmVyZW50IHN0cmF0ZWd5IGZv
ciBhbGxvY2F0aW5nIHRoZSBvYmplY3QgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Uga25vdyBpdHMK
LSAgICAgICAgLy8gc2l6ZSBzdGF0aWNhbGx5LgotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7Ci0gICAgICAgIGlmIChsZW5ndGhJc0tub3duKSB7Ci0gICAgICAgICAgICBK
SVRBbGxvY2F0b3Igc3RvcmFnZUFsbG9jYXRvciA9IEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoCi0g
ICAgICAgICAgICAgICAgdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbCgKLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0QXJndW1lbnRzOjpzdG9y
YWdlU2l6ZShzdGQ6Om1heChrbm93bkxlbmd0aCwgbWluQ2FwYWNpdHkpKSwKLSAgICAgICAgICAg
ICAgICAgICAgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKTsKLSAgICAgICAg
Ci0gICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgc3RvcmFnZUFsbG9j
YXRvciwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzbG93UGF0aCk7Ci0gICAgICAgICAgICBt
X2ppdC5hZGRQdHIoVHJ1c3RlZEltbVB0cihEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VIZWFkZXJT
aXplKCkpLCBzdG9yYWdlR1BSKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoCi0gICAgICAg
ICAgICAgICAgVHJ1c3RlZEltbTMyKGtub3duTGVuZ3RoKSwKLSAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVu
Z3RoSW5TdG9yYWdlKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIHRvb0Zld0FyZ3VtZW50czsKLSAgICAgICAgICAgIGlmIChtaW5DYXBhY2l0eSkg
ewotICAgICAgICAgICAgICAgIHRvb0Zld0FyZ3VtZW50cyA9Ci0gICAgICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpCZWxvdywgbGVuZ3RoR1BSLCBUcnVzdGVkSW1t
MzIobWluQ2FwYWNpdHkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1faml0LmxzaGlm
dDMyKGxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoMUdQUik7Ci0gICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlSGVhZGVy
U2l6ZSgpKSwgc2NyYXRjaDFHUFIpOwotICAgICAgICAgICAgaWYgKG1pbkNhcGFjaXR5KSB7Ci0g
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAg
ICAgICAgICAgICAgICB0b29GZXdBcmd1bWVudHMubGluaygmbV9qaXQpOwotICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZVNpemUo
bWluQ2FwYWNpdHkpKSwgc2NyYXRjaDFHUFIpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygm
bV9qaXQpOwotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmVtaXRB
bGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCi0gICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgdm0uanNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMUdQUiwgc2Ny
YXRjaDJHUFIsIHNsb3dQYXRoKTsKLSAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1t
UHRyKERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZUhlYWRlclNpemUoKSksIHN0b3JhZ2VHUFIpOwot
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBsZW5ndGhHUFIsCi0g
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgRGlyZWN0QXJn
dW1lbnRzOjpvZmZzZXRPZkxlbmd0aEluU3RvcmFnZSgpKSk7CisgICAgICAgIG1faml0LmxzaGlm
dDMyKGxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoMUdQUik7CisgICAgICAgIG1f
aml0LmFkZDMyKFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSks
IHNjcmF0Y2gxR1BSKTsKKyAgICAgICAgaWYgKG1pbkNhcGFjaXR5KSB7CisgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgdG9vRmV3
QXJndW1lbnRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWluQ2FwYWNpdHkpKSwgc2NyYXRj
aDFHUFIpOworICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KLSAgICAK
KyAgICAgICAgCisgICAgICAgIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRKU09iamVjdDxEaXJl
Y3RBcmd1bWVudHM+KAorICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsCisgICAgICAgICAg
ICBzbG93UGF0aCk7CisgICAgICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmUzMigKLSAgICAg
ICAgICAgIFRydXN0ZWRJbW0zMihtaW5DYXBhY2l0eSksCi0gICAgICAgICAgICBKSVRDb21waWxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWluQ2FwYWNp
dHlJblN0b3JhZ2UoKSkpOworICAgICAgICAgICAgbGVuZ3RoR1BSLCBKSVRDb21waWxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSkpOworICAg
IH0KKyAgICAgICAgCisgICAgbV9qaXQuc3RvcmUzMigKKyAgICAgICAgVHJ1c3RlZEltbTMyKG1p
bkNhcGFjaXR5KSwKKyAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBEaXJl
Y3RBcmd1bWVudHM6Om9mZnNldE9mTWluQ2FwYWNpdHkoKSkpOworICAgICAgICAKKyAgICBtX2pp
dC5zdG9yZVB0cigKKyAgICAgICAgVHJ1c3RlZEltbVB0cihudWxscHRyKSwgSklUQ29tcGlsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1l
bnRzKCkpKTsKKworICAgIG1faml0LnN0b3JlUHRyKAorICAgICAgICBUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6
b2Zmc2V0T2ZNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IoKSkpOwogICAgIAotICAgICAgICBh
dXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxv
Y2F0ZUpTT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzbG93UGF0aCk7
Ci0gICAgICAgIG1faml0Lm1vdmUoc3RvcmFnZUdQUiwgc2NyYXRjaDFHUFIpOwotICAgICAgICBt
X2ppdC54b3JQdHIoVHJ1c3RlZEltbVB0cihEaXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSwg
c2NyYXRjaDFHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoMUdQUiwgSklUQ29t
cGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFn
ZSgpKSk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cigKLSAgICAgICAgICAgIFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgRGly
ZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1hcHBlZEFyZ3VtZW50cygpKSk7Ci0KLSAgICAgICAgbV9q
aXQuc3RvcmVQdHIoCi0gICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZNb2RpZmll
ZEFyZ3VtZW50c0Rlc2NyaXB0b3IoKSkpOwotICAgIAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2xvd1BhdGhHZW5lcmF0b3I+IGdlbmVyYXRvcjsKLSAgICAgICAgaWYgKGxlbmd0aElzS25vd24p
IHsKLSAgICAgICAgICAgIGdlbmVyYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbENyZWF0ZURp
cmVjdEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9yPigKLSAgICAgICAg
ICAgICAgICBzbG93UGF0aCwgdGhpcywgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIGtub3duTGVuZ3Ro
LCBzdG9yYWdlR1BSLCBtaW5DYXBhY2l0eSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBnZW5lcmF0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNT
bG93UGF0aEdlbmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIHJlc3Vs
dEdQUiwgc3RydWN0dXJlLCBsZW5ndGhHUFIsIHN0b3JhZ2VHUFIsIG1pbkNhcGFjaXR5KTsKLSAg
ICAgICAgfQorICAgIGlmIChsZW5ndGhJc0tub3duKSB7CisgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMsIHJlc3VsdEdQUiwgc3Ry
dWN0dXJlLAorICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoLCBtaW5DYXBhY2l0eSkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
Q3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICAgICAgc2xv
d1BhdGgsIHRoaXMsIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBsZW5ndGhHUFIsIG1pbkNhcGFjaXR5
KTsKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShnZW5lcmF0b3IpKTsKICAg
ICB9Ci0gICAgCisgICAgICAgIAogICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKSB7CiAgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKApAQCAt
NzIxOSw3ICs3MTYwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVj
dAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RkOjptYXgoa25vd25MZW5ndGgs
IG1pbkNhcGFjaXR5KTsgKytpKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3Ioc3RhcnQgKyBpKSwgdmFsdWVSZWdzKTsKICAgICAgICAgICAgIG1f
aml0LnN0b3JlVmFsdWUoCi0gICAgICAgICAgICAgICAgdmFsdWVSZWdzLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsK
KyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQ
UiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlNsb3QoaSkpKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmU7CkBAIC03MjQwLDEzICs3MTgx
LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3QKICAgICAgICAg
bV9qaXQuc3RvcmVWYWx1ZSgKICAgICAgICAgICAgIHZhbHVlUmVncywKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgc3RvcmFnZUdQUiwgbGVuZ3Ro
R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgICAgIHJlc3VsdEdQ
UiwgbGVuZ3RoR1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwKKyAgICAgICAgICAgICAgICBE
aXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSkpOwogICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGxlbmd0aEdQUikubGlua1RvKGxvb3AsICZt
X2ppdCk7CiAgICAgICAgIGlmIChkb25lLmlzU2V0KCkpCiAgICAgICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKICAgICB9Ci0gICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKTsKKyAgICAg
ICAgCisgICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKICAgICAgICAgCiAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtNzI1OSw5ICs3MjAxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEZyb21Bcmd1bQogICAgIEdQUlJlZyBhcmd1bWVu
dHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJl
c3VsdC5yZWdzKCk7CiAgICAgCi0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoRGly
ZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAg
ICBtX2ppdC5sb2FkVmFsdWUoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCksIG5vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCkgKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdFJlZ3MpOworICAgIG1faml0LmxvYWRWYWx1
ZShKSVRDb21waWxlcjo6QWRkcmVzcyhhcmd1bWVudHNHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zm
c2V0T2ZTbG90KG5vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCkpKSwgcmVz
dWx0UmVncyk7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KIApAQCAt
NzI2OSwxNSArNzIwOSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0VG9Bcmd1
bWVuCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
Ci0gICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGFyZ3Vt
ZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKLSAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2UuZ3ByKCk7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3Mo
KTsKICAgICAKLSAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ3VtZW50
c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHN0b3JhZ2VHUFIpOwot
ICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5
KCkpLCBzdG9yYWdlR1BSKTsKLSAgICBtX2ppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgSklUQ29t
cGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgbm9kZS0+Y2FwdHVyZWRBcmd1bWVudHNPZmZzZXQo
KS5vZmZzZXQoKSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgbV9qaXQu
c3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ3VtZW50c0dQUiwg
RGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlNsb3Qobm9kZS0+Y2FwdHVyZWRBcmd1bWVudHNPZmZz
ZXQoKS5vZmZzZXQoKSkpKTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmgJKHJldmlzaW9uIDIzMDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMiArNTEsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKEJ1dHRlcmZseV92ZWN0
b3JMZW5ndGgsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkgXAogICAgIG1hY3Jv
KENhbGxGcmFtZV9jYWxsZXJGcmFtZSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSBc
CiAgICAgbWFjcm8oQ2xhc3NJbmZvX3BhcmVudENsYXNzLCBDbGFzc0luZm86Om9mZnNldE9mUGFy
ZW50Q2xhc3MoKSkgXAotICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19TdG9yYWdlX2xlbmd0aCwg
RGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aEluU3RvcmFnZSgpKSBcCi0gICAgbWFjcm8o
RGlyZWN0QXJndW1lbnRzX1N0b3JhZ2VfbWluQ2FwYWNpdHksIERpcmVjdEFyZ3VtZW50czo6b2Zm
c2V0T2ZNaW5DYXBhY2l0eUluU3RvcmFnZSgpKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRz
X2NhbGxlZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkNhbGxlZSgpKSBcCisgICAgbWFjcm8o
RGlyZWN0QXJndW1lbnRzX2xlbmd0aCwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgp
KSBcCisgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX21pbkNhcGFjaXR5LCBEaXJlY3RBcmd1bWVu
dHM6Om9mZnNldE9mTWluQ2FwYWNpdHkoKSkgXAogICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19t
YXBwZWRBcmd1bWVudHMsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMo
KSkgXAogICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0
b3IsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Io
KSkgXAotICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6
Om9mZnNldE9mU3RvcmFnZSgpKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRlciwgR2V0
dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX3Nl
dHRlciwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZlNldHRlcigpKSBcCiAgICAgbWFjcm8oSlNBcnJh
eUJ1ZmZlclZpZXdfbGVuZ3RoLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkg
XApAQCAtMTMzLDcgKzEzMiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICNk
ZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAgICAgbWFjcm8o
QXJyYXlTdG9yYWdlX3ZlY3RvciwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSwgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpIFwKICAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2Fs
bG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZv
clNpemVTdGVwKCksIHNpemVvZihBbGxvY2F0b3IpKSBcCi0gICAgbWFjcm8oRGlyZWN0QXJndW1l
bnRzX1N0b3JhZ2Vfc3RvcmFnZSwgMCwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAorICAgIG1h
Y3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTTGV4aWNhbEVudmly
b25tZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCAwLCBzaXplb2YoV3Jp
dGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmliZXJzLCBK
U1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJp
bmc+KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkocmV2aXNpb24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjc0LDEwICszNjc0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgICAgICBFeG90aWNP
YmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICAgICAgbV9vdXQubm90
TnVsbChtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbWFw
cGVkQXJndW1lbnRzKSkpOwotICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5iaXRY
b3IoCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlKSwKLSAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludFB0cihEaXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSk7Ci0gICAgICAg
ICAgICBzZXRJbnQzMihtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBzLkRp
cmVjdEFyZ3VtZW50c19TdG9yYWdlX2xlbmd0aCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9v
dXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19s
ZW5ndGgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0zODQ0LDE2ICszODQxLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgRXhvdGljT2Jq
ZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgICAgIG1fb3V0Lm5vdE51
bGwobV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19tYXBwZWRBcmd1
bWVudHMpKSk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihi
YXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlKTsKLSAgICAgICAgICAgIHN0b3Jh
Z2UgPSBtX291dC5iaXRYb3Ioc3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoRGlyZWN0QXJndW1l
bnRzUG9pc29uOjprZXkoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgbGVu
Z3RoID0gbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5EaXJlY3RBcmd1
bWVudHNfU3RvcmFnZV9sZW5ndGgpOworICAgICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0
LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCk7
CiAgICAgICAgICAgICBhdXRvIGlzT3V0T2ZCb3VuZHMgPSBtX291dC5hYm92ZU9yRXF1YWwoaW5k
ZXgsIGxlbmd0aCk7CiAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91
bmRzKCkpIHsKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUo
KSwgbnVsbHB0ciwgaXNPdXRPZkJvdW5kcyk7CiAgICAgICAgICAgICAgICAgVHlwZWRQb2ludGVy
IGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIG1faGVhcHMu
RGlyZWN0QXJndW1lbnRzX1N0b3JhZ2Vfc3RvcmFnZSwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0
cihpbmRleCkpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocHJlY2lzZUluZGV4TWFzazMy
KG1fb3V0LmxvYWQ2NChhZGRyZXNzKSwgaW5kZXgsIGxlbmd0aCkpOworICAgICAgICAgICAgICAg
ICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBtX291dC56ZXJvRXh0
UHRyKGluZGV4KSk7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRk
cmVzcykpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMzg2
NSwxMCArMzg1OSwxMCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBzbG93Q2FzZSk7CiAgICAgICAgICAgICBU
eXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICBt
X2hlYXBzLkRpcmVjdEFyZ3VtZW50c19TdG9yYWdlX3N0b3JhZ2UsIHN0b3JhZ2UsCisgICAgICAg
ICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwKKyAgICAgICAgICAgICAg
ICBiYXNlLAogICAgICAgICAgICAgICAgIG1fb3V0Lnplcm9FeHQoaW5kZXgsIHBvaW50ZXJUeXBl
KCkpKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNo
b3IoCi0gICAgICAgICAgICAgICAgcHJlY2lzZUluZGV4TWFzazMyKG1fb3V0LmxvYWQ2NChhZGRy
ZXNzKSwgaW5kZXgsIGxlbmd0aCkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5sb2FkNjQoYWRkcmVzcykpOwogICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhz
bG93Q2FzZSwgY29udGludWF0aW9uKTsKQEAgLTUxODEsMzkgKzUxNzUsMjkgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIEFyZ3VtZW50c0xlbmd0aCBsZW5ndGggPSBnZXRBcmd1bWVudHNM
ZW5ndGgoKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBmYXN0U3RvcmFnZTsKICAgICAgICAg
TFZhbHVlIGZhc3RPYmplY3Q7CiAgICAgICAgIGlmIChsZW5ndGguaXNLbm93bikgewotICAgICAg
ICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IG1fb3V0LmNvbnN0SW50MzIoCi0gICAgICAgICAgICAg
ICAgdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKAotICAgICAgICAgICAgICAgICAgICBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VTaXplKHN0
ZDo6bWF4KGxlbmd0aC5rbm93biwgbWluQ2FwYWNpdHkpKSwKLSAgICAgICAgICAgICAgICAgICAg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpLm9mZnNldCgpKTsKLQotICAgICAg
ICAgICAgZmFzdFN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgc2xvd1BhdGgp
OworICAgICAgICAgICAgZmFzdE9iamVjdCA9IGFsbG9jYXRlT2JqZWN0PERpcmVjdEFyZ3VtZW50
cz4oCisgICAgICAgICAgICAgICAgRGlyZWN0QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6ZShzdGQ6
Om1heChsZW5ndGgua25vd24sIG1pbkNhcGFjaXR5KSksIHN0cnVjdHVyZSwKKyAgICAgICAgICAg
ICAgICBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBMVmFsdWUgc2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgICAgICBtX291dC5z
aGwobGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKDMpKSwKLSAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZUhlYWRlclNpemUoKSkpOwor
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdl
T2Zmc2V0KCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2l6ZSA9IG1fb3V0LnNlbGVj
dCgKICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwobGVuZ3RoLnZhbHVlLCBtX291
dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSksCi0gICAgICAgICAgICAgICAgc2l6ZSwgbV9vdXQu
Y29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VTaXplKG1pbkNhcGFjaXR5KSkpOwot
ICAgICAgICAKLSAgICAgICAgICAgIGZhc3RTdG9yYWdlID0gYWxsb2NhdGVWYXJpYWJsZVNpemVk
SGVhcENlbGwoCi0gICAgICAgICAgICAgICAgdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZSwgbV9vdXQuemVyb0V4dFB0cihzaXplKSwgc2xvd1BhdGgpOworICAgICAgICAgICAgICAg
IHNpemUsIG1fb3V0LmNvbnN0SW50MzIoRGlyZWN0QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6ZSht
aW5DYXBhY2l0eSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmFzdE9iamVjdCA9IGFs
bG9jYXRlVmFyaWFibGVTaXplZE9iamVjdDxEaXJlY3RBcmd1bWVudHM+KAorICAgICAgICAgICAg
ICAgIG1fb3V0Lnplcm9FeHRQdHIoc2l6ZSksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywg
c2xvd1BhdGgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmYXN0U3RvcmFnZSA9IG1f
b3V0LmFkZChmYXN0U3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlSGVhZGVyU2l6ZSgpKSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLnZhbHVl
LCBmYXN0U3RvcmFnZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9sZW5ndGgpOwot
ICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobWluQ2FwYWNpdHkpLCBmYXN0
U3RvcmFnZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9taW5DYXBhY2l0eSk7Ci0g
ICAgICAgIAotICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8RGlyZWN0QXJndW1l
bnRzPihzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKLSAKLSAgICAgICAg
bV9vdXQuc3RvcmVQdHIobV9vdXQuYml0WG9yKGZhc3RTdG9yYWdlLCBtX291dC5jb25zdEludFB0
cihEaXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSksIGZhc3RPYmplY3QsIG1faGVhcHMuRGly
ZWN0QXJndW1lbnRzX3N0b3JhZ2UpOworICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aC52YWx1
ZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbGVuZ3RoKTsKKyAgICAgICAg
bV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSwgZmFzdE9iamVjdCwg
bV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbWluQ2FwYWNpdHkpOwogICAgICAgICBtX291dC5zdG9y
ZVB0cihtX291dC5pbnRQdHJaZXJvLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50
c19tYXBwZWRBcmd1bWVudHMpOwogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJa
ZXJvLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19tb2RpZmllZEFyZ3VtZW50
c0Rlc2NyaXB0b3IpOwogICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFN0b3Jh
Z2VBbmNob3IgPSBtX291dC5hbmNob3IoZmFzdFN0b3JhZ2UpOwogICAgICAgICBWYWx1ZUZyb21C
bG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOwogICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtNTIyNywxNCArNTIxMSw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1p
bkNhcGFjaXR5KSk7CiAgICAgICAgICAgICB9LCBsZW5ndGgudmFsdWUpOwogICAgICAgICBWYWx1
ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwotICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93U3RvcmFnZSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAg
IG1fb3V0LmJpdFhvcigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKGNhbGxSZXN1bHQs
IG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UpLAotICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50UHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKSk7CiAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0
LnBoaShwb2ludGVyVHlwZSgpLCBmYXN0U3RvcmFnZUFuY2hvciwgc2xvd1N0b3JhZ2UpOwogICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGZhc3RSZXN1bHQs
IHNsb3dSZXN1bHQpOwogCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGdldEN1cnJlbnRDYWxsZWUo
KSwgcmVzdWx0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19jYWxsZWUpOwpAQCAtNTI0NCw3ICs1
MjIzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGQ6Om1heChsZW5ndGgua25vd24sIG1pbkNhcGFjaXR5KTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmU2NCgKICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDY0KGFkZHJl
c3NGb3Ioc3RhcnQgKyBpKSksCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsIG1faGVhcHMu
RGlyZWN0QXJndW1lbnRzX1N0b3JhZ2Vfc3RvcmFnZVtpXSk7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZVtpXSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBMVmFsdWUgc3RhY2tCYXNlID0gZ2V0
QXJndW1lbnRzU3RhcnQoKTsKQEAgLTUyNzIsNyArNTI1MSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5zdWIocHJldmlvdXNJbmRleCwgbV9vdXQuaW50UHRy
T25lKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCiAgICAgICAgICAgICAgICAgbV9vdXQu
bG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgc3RhY2tCYXNlLCBpbmRl
eCkpLAotICAgICAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkRpcmVjdEFyZ3Vt
ZW50c19TdG9yYWdlX3N0b3JhZ2UsIHN0b3JhZ2UsIGluZGV4KSk7CisgICAgICAgICAgICAgICAg
bV9vdXQuYmFzZUluZGV4KG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIHJlc3VsdCwg
aW5kZXgpKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5leHRJbmRleCA9IG1fb3V0LmFu
Y2hvcihpbmRleCk7CiAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHByZXZpb3Vz
SW5kZXgsIG5leHRJbmRleCk7CiAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNOdWxs
KGluZGV4KSwgdW5zdXJlKGVuZCksIHVuc3VyZShsb29wKSk7CkBAIC02NzI4LDIzICs2NzA3LDE4
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0RnJvbUFyZ3VtZW50cygpCiAg
ICAgewotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmJpdFhvcigKLSAgICAgICAgICAg
IG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5EaXJlY3RB
cmd1bWVudHNfc3RvcmFnZSksCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihEaXJlY3RB
cmd1bWVudHNQb2lzb246OmtleSgpKSk7CiAgICAgICAgIHNldEpTVmFsdWUoCiAgICAgICAgICAg
ICBtX291dC5sb2FkNjQoCi0gICAgICAgICAgICAgICAgc3RvcmFnZSwKLSAgICAgICAgICAgICAg
ICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19TdG9yYWdlX3N0b3JhZ2VbbV9ub2RlLT5jYXB0dXJl
ZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpXSkpOworICAgICAgICAgICAgICAgIGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVu
dHNfc3RvcmFnZVttX25vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCldKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVB1dFRvQXJndW1lbnRzKCkKICAgICB7Ci0g
ICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQuYml0WG9yKAotICAgICAgICAgICAgbV9vdXQu
bG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50
c19zdG9yYWdlKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKERpcmVjdEFyZ3VtZW50
c1BvaXNvbjo6a2V5KCkpKTsKICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgIGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSksIHN0b3JhZ2UsCi0gICAgICAgICAgICBtX2hlYXBz
LkRpcmVjdEFyZ3VtZW50c19TdG9yYWdlX3N0b3JhZ2VbbV9ub2RlLT5jYXB0dXJlZEFyZ3VtZW50
c09mZnNldCgpLm9mZnNldCgpXSk7CisgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQyKCkpLAorICAgICAgICAgICAgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAg
ICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2VbbV9ub2RlLT5jYXB0dXJlZEFyZ3Vt
ZW50c09mZnNldCgpLm9mZnNldCgpXSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlR2V0QXJn
dW1lbnQoKQpAQCAtMTE4NzQsNyArMTE4NDgsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBM
VmFsdWUgc3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZShjZWxsKTsKICAgICAgICAgICAgIExWYWx1
ZSBwb2lzb25lZENsYXNzSW5mbyA9IG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0
cnVjdHVyZV9jbGFzc0luZm8pOwotICAgICAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0
LmJpdFhvcihwb2lzb25lZENsYXNzSW5mbywgbV9vdXQuY29uc3RJbnRQdHIoR2xvYmFsRGF0YVBv
aXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5iaXRY
b3IocG9pc29uZWRDbGFzc0luZm8sIG1fb3V0LmNvbnN0SW50NjQoR2xvYmFsRGF0YVBvaXNvbjo6
a2V5KCkpKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG90aGVyQXRTdGFydCA9IG1fb3V0
LmFuY2hvcihjbGFzc0luZm8pOwogICAgICAgICAgICAgbV9vdXQuanVtcChsb29wKTsKIApAQCAt
MTI2NDMsMTIgKzEyNjE3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlQ2Vs
bChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKLSAgICBMVmFs
dWUgYWxsb2NhdGVWYXJpYWJsZVNpemVkSGVhcENlbGwoQ29tcGxldGVTdWJzcGFjZSYgc3Vic3Bh
Y2UsIExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIExW
YWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKHN1YnNwYWNlLCBzaXplLCBzbG93UGF0
aCk7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgc2xvd1BhdGgp
OwotICAgIH0KLSAgICAKICAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUuZ2V0KCktPmlubGluZUNhcGFj
aXR5KCkpOwpAQCAtMTU1OTksNiArMTU1NjcsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IHByZWNpc2VJbmRleE1hc2s2NCh2YWx1ZSwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpLCBt
X291dC56ZXJvRXh0KGxpbWl0LCBJbnQ2NCkpOwogICAgIH0KICAgICAKKyAgICBMVmFsdWUgZHlu
YW1pY1BvaXNvbihMVmFsdWUgdmFsdWUsIExWYWx1ZSBwb2lzb24pCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vdXQuYWRkKAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBtX291dC5z
aGwoCisgICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dChwb2lzb24sIHBvaW50ZXJUeXBlKCkp
LAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoNDApKSk7CisgICAgfQorICAgIAor
ICAgIExWYWx1ZSBkeW5hbWljUG9pc29uT25Mb2FkZWRUeXBlKExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IGFjdHVhbFR5cGUsIEpTVHlwZSBleHBlY3RlZFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
ZHluYW1pY1BvaXNvbigKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgbV9vdXQuYml0
WG9yKAorICAgICAgICAgICAgICAgIG1fb3V0Lm9wYXF1ZShhY3R1YWxUeXBlKSwKKyAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKGV4cGVjdGVkVHlwZSkpKTsKKyAgICB9CisgICAgCisg
ICAgTFZhbHVlIGR5bmFtaWNQb2lzb25PblR5cGUoTFZhbHVlIHZhbHVlLCBKU1R5cGUgZXhwZWN0
ZWRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGR5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUo
CisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZh
bHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgZXhwZWN0ZWRU
eXBlKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgogICAgIExWYWx1
ZSB2bUNhbGwoTFR5cGUgdHlwZSwgTFZhbHVlIGZ1bmN0aW9uLCBBcmdzJiYuLi4gYXJncykKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eUtpbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eUtpbmQuaAkocmV2
aXNpb24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlLaW5k
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LS8vIE5PVEU6IFNlY3VyaXR5S2luZCBpcyBmb3IgZGlzdGFuY2luZy4gQnV0IGNhZ2luZyBpbXBs
aWVzIGRpc3RhbmNpbmcuIFNvLCB0aGluZ3MgdGhhdCBoYXZlIHRoZWlyIG93bgotLy8gY2FnZXMg
KGxpa2UgdHlwZWQgYXJyYXlzKSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBzZWN1cml0
eSBraW5kLgogZW51bSBjbGFzcyBTZWN1cml0eUtpbmQgOiB1aW50OF90IHsKICAgICAvLyBUaGUg
SlNWYWx1ZU9PQiBzZWN1cml0eSBraW5kIGlzIGZvciBjZWxscyB0aGF0IGNvbnRhaW4gSlZhbHVl
cyBhbmQgY2FuIGJlIGFjY2Vzc2VkIG91dC1vZi1ib3VuZHMKICAgICAvLyB1cCB0byBtaW5pbXVt
RGlzdGFuY2VCZXR3ZWVuQ2VsbHNGcm9tRGlmZmVyZW50T3JpZ2lucy4KQEAgLTQzLDExICs0MSw3
IEBAIGVudW0gY2xhc3MgU2VjdXJpdHlLaW5kIDogdWludDhfdCB7CiAgICAgLy8gVGhlIEpTVmFs
dWVTdHJpY3Qgc2VjdXJpdHkga2luZCBpcyBmb3IgY2VsbHMgdGhhdCBjb250YWluIEpTVmFsdWVz
IGJ1dCBjYW5ub3QgYmUgYWNjZXNzZWQKICAgICAvLyBvdXQtb2YtYm91bmRzLiBDdXJyZW50bHks
IGl0J3Mgbm90IGVzc2VudGlhbCB0byBrZWVwIHRoaXMgc2VwYXJhdGUgZnJvbSBEYW5nZXJvdXNC
aXRzLiBXZSdyZQogICAgIC8vIHVzaW5nIHRoaXMgdG8gZ2V0IHNvbWUgd2lnZ2xlIHJvb20gZm9y
IGhvdyB3ZSBoYW5kbGUgYXJyYXkgZWxlbWVudHMuIEZvciBleGFtcGxlLCB3ZSBtaWdodCB3YW50
Ci0gICAgLy8gdG8gYWxsb3cgT09CIHJlYWRzIGJ1dCBub3QgT09CIHdyaXRlcywgc2luY2UgSlNW
YWx1ZVN0cmljdCBjb250YWlucyBvbmx5IEpTVmFsdWVzIGFuZCBsZW5ndGggZmllbGRzLgotICAg
IC8vIFVzaW5nIFNwZWN0cmUgdG8gcmVhZCB0aGUgbGVuZ3RoIGZpZWxkcyBpcyBub3QgdXNlZnVs
IGZvciBhdHRhY2tlcnMgc2luY2UgdGhleSBjYW4gcmVhZCB0aGVtIGFueXdheS4KLSAgICAvLyBT
bywgdGhleSB3aWxsIG9ubHkgd2FudCB0byB3cml0ZSB0byBsZW5ndGggZmllbGRzLCBpbiBvcmRl
ciB0byBjb25mdXNlIGEgc3Vic2VxdWVudCBib3VuZHMgY2hlY2suCi0gICAgLy8gVGhleSBjYW4g
ZG8gdGhhdCB3aXRoaW4gYSBzcGVjdWxhdGlvbiB3aW5kb3cuIEhvd2V2ZXIsIHdlIGN1cnJlbnRs
eSB1c2UgcHJlY2lzZSBpbmRleCBtYXNraW5nIGZvcgotICAgIC8vIHRoaXMuCisgICAgLy8gdG8g
YWxsb3cgT09CIHJlYWRzIGJ1dCBub3QgT09CIHdyaXRlcy4KICAgICAvLwogICAgIC8vIEl0J3Mg
aWxsZWdhbCB0byB1c2UgdGhpcyBmb3IgYW55IHN1YmNsYXNzIG9mIEpTT2JqZWN0LCBKU1N0cmlu
Zywgb3IgU3ltYm9sLCBvciBhbnkgb3RoZXIgY2VsbAogICAgIC8vIHRoYXQgY291bGQgYmUgcmVm
ZXJlbmNlZCBmcm9tIGEgSlNWYWx1ZS4gWW91IG11c3QgdXNlIHBvaXNvbmVkIHBvaW50ZXJzIHRv
IHBvaW50IGF0IHRoZXNlIGNlbGxzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyMzAyMjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTA3LDkgKzExMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9hcmd1bWVudHMoSW5zCiAgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKICAgICAKICAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mU3Rv
cmFnZSgpKSwgcmVnVDApOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVnVDEpOwotICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsg
UGF5bG9hZE9mZnNldCksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0
QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVnVDEpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDApOwogICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQpA
QCAtMTEyMywxMCArMTEyMiw5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMo
SW5zdHIKICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICAKICAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFn
ZSgpKSwgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDIpOwotICAgIHN0
b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDAsIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikgKyBUYWdPZmZzZXQpKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1Qw
LCBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCkp
OworICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3Rv
cmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRh
Z09mZnNldCkpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSArIFBheWxvYWRPZmZzZXQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2
aXNpb24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODcsOSArMTA4Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhJbnMKICAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHhvclB0cihUcnVzdGVkSW1t
UHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCByZWdUMCk7Ci0gICAgbG9hZDY0KEFk
ZHJlc3MocmVnVDAsIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdU
MCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsK
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQpAQCAtMTEwMiw5ICsxMTAwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X2FyZ3VtZW50cyhJbnN0cgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3Jh
Z2UoKSksIHJlZ1QwKTsKLSAgICB4b3JQdHIoVHJ1c3RlZEltbVB0cihEaXJlY3RBcmd1bWVudHNQ
b2lzb246OmtleSgpKSwgcmVnVDApOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAs
IGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICBzdG9yZTY0KHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGlu
ZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAogICAgIGVtaXRXcml0ZUJh
cnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQpAQCAtMTQwNCwx
NiArMTQwMCwxMSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERpcmVjdEFyZ3VtZW50c0dlCiAg
ICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2Ny
YXRjaCk7CiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNo
LCBUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzVHlwZSkpOwogICAgIAotICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgc2NyYXRj
aCk7Ci0gICAgeG9yUHRyKFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXko
KSksIHNjcmF0Y2gpOwotICAgIAotICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2gsIERpcmVjdEFy
Z3VtZW50czo6b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSksIHNjcmF0Y2gyKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3Jh
dGNoMik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5LCBzY3JhdGNoMikpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVu
dHMoKSkpKTsKICAgICAKLSAgICBlbWl0UHJlcGFyZVByZWNpc2VJbmRleE1hc2szMihwcm9wZXJ0
eSwgc2NyYXRjaDIsIHNjcmF0Y2gyKTsKLSAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gs
IHByb3BlcnR5LCBUaW1lc0VpZ2h0KSwgcmVzdWx0KTsKLSAgICBhbmRQdHIoc2NyYXRjaDIsIHJl
c3VsdC5wYXlsb2FkR1BSKCkpOworICAgIGxvYWRWYWx1ZShCYXNlSW5kZXgoYmFzZSwgcHJvcGVy
dHksIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0
KTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20J
KHJldmlzaW9uIDIzMDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMxLDkgKzI1MzEsOCBA
QCBfbGxpbnRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
bigyLCB0MCkKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MAogICAgIGxv
YWRpIDEyW1BDXSwgdDEKLSAgICBsb2FkcCBEaXJlY3RBcmd1bWVudHM6Om1fc3RvcmFnZVt0MF0s
IHQwCi0gICAgbG9hZGkgVGFnT2Zmc2V0W3QwLCB0MSwgOF0sIHQyCi0gICAgbG9hZGkgUGF5bG9h
ZE9mZnNldFt0MCwgdDEsIDhdLCB0MworICAgIGxvYWRpIERpcmVjdEFyZ3VtZW50c19zdG9yYWdl
ICsgVGFnT2Zmc2V0W3QwLCB0MSwgOF0sIHQyCisgICAgbG9hZGkgRGlyZWN0QXJndW1lbnRzX3N0
b3JhZ2UgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0sIHQzCiAgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDEsIHQxKQogICAgIHZhbHVlUHJvZmlsZSh0MiwgdDMsIDE2LCB0MCkKICAgICBzdG9y
ZWkgdDIsIFRhZ09mZnNldFtjZnIsIHQxLCA4XQpAQCAtMjU0OCwxMCArMjU0Nyw5IEBAIF9sbGlu
dF9vcF9wdXRfdG9fYXJndW1lbnRzOgogICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwg
OF0sIHQwCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQxKQogICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUodDEsIHQyLCB0MykKLSAgICBsb2FkcCBEaXJlY3RBcmd1bWVudHM6Om1fc3Rv
cmFnZVt0MF0sIHQwCiAgICAgbG9hZGkgOFtQQ10sIHQxCi0gICAgc3RvcmVpIHQyLCBUYWdPZmZz
ZXRbdDAsIHQxLCA4XQotICAgIHN0b3JlaSB0MywgUGF5bG9hZE9mZnNldFt0MCwgdDEsIDhdCisg
ICAgc3RvcmVpIHQyLCBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSArIFRhZ09mZnNldFt0MCwgdDEs
IDhdCisgICAgc3RvcmVpIHQzLCBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSArIFBheWxvYWRPZmZz
ZXRbdDAsIHQxLCA4XQogICAgIGRpc3BhdGNoKDQpCiAKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlz
aW9uIDIzMDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYyLDkgKzI1NjIsNyBAQCBfbGxpbnRf
b3BfZ2V0X2Zyb21fYXJndW1lbnRzOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkVmFy
aWFibGUoMiwgdDApCiAgICAgbG9hZGkgMjRbUEIsIFBDLCA4XSwgdDEKLSAgICBsb2FkcCBEaXJl
Y3RBcmd1bWVudHM6Om1fc3RvcmFnZVt0MF0sIHQwCi0gICAgdW5wb2lzb24oX2dfRGlyZWN0QXJn
dW1lbnRzUG9pc29uLCB0MCwgdDMpCi0gICAgbG9hZHEgW3QwLCB0MSwgOF0sIHQwCisgICAgbG9h
ZHEgRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2VbdDAsIHQxLCA4XSwgdDAKICAgICB2YWx1ZVByb2Zp
bGUodDAsIDQsIHQxKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKICAgICBzdG9y
ZXEgdDAsIFtjZnIsIHQxLCA4XQpAQCAtMjU3Nyw5ICsyNTc1LDcgQEAgX2xsaW50X29wX3B1dF90
b19hcmd1bWVudHM6CiAgICAgbG9hZGkgMTZbUEIsIFBDLCA4XSwgdDEKICAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMywgdDMpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MywgdDIpCi0g
ICAgbG9hZHAgRGlyZWN0QXJndW1lbnRzOjptX3N0b3JhZ2VbdDBdLCB0MAotICAgIHVucG9pc29u
KF9nX0RpcmVjdEFyZ3VtZW50c1BvaXNvbiwgdDAsIHQzKQotICAgIHN0b3JlcSB0MiwgW3QwLCB0
MSwgOF0KKyAgICBzdG9yZXEgdDIsIERpcmVjdEFyZ3VtZW50c19zdG9yYWdlW3QwLCB0MSwgOF0K
ICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAgICAgZGlzcGF0Y2goY29uc3RleHBy
IG9wX3B1dF90b19hcmd1bWVudHNfbGVuZ3RoKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMzAy
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsNyBAQCBlbmQKIGNvbnN0IFNsb3RTaXpl
ID0gOAogCiBjb25zdCBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXMgPSAoc2l6ZW9mIEpT
TGV4aWNhbEVudmlyb25tZW50ICsgU2xvdFNpemUgLSAxKSAmIH4oU2xvdFNpemUgLSAxKQorY29u
c3QgRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UgPSAoc2l6ZW9mIERpcmVjdEFyZ3VtZW50cyArIFNs
b3RTaXplIC0gMSkgJiB+KFNsb3RTaXplIC0gMSkKIAogY29uc3QgU3RhY2tBbGlnbm1lbnQgPSAx
NgogY29uc3QgU3RhY2tBbGlnbm1lbnRTbG90cyA9IDIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjMwMjIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsMjcgKzM2LDIyIEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklB
TExZX0RFU1RSVUNUSUJMRSgKIAogY29uc3QgQ2xhc3NJbmZvIERpcmVjdEFyZ3VtZW50czo6c19p
bmZvID0geyAiQXJndW1lbnRzIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShEaXJlY3RBcmd1bWVudHMpIH07CiAKLURpcmVjdEFyZ3VtZW50czo6
RGlyZWN0QXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdyaXRlQmFycmll
cjxVbmtub3duPiogc3RvcmFnZSkKK0RpcmVjdEFyZ3VtZW50czo6RGlyZWN0QXJndW1lbnRzKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgY2Fw
YWNpdHkpCiAgICAgOiBHZW5lcmljQXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX3N0
b3JhZ2Uodm0sIHRoaXMsIHN0b3JhZ2UpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBt
X21pbkNhcGFjaXR5KGNhcGFjaXR5KQogewogICAgIC8vIFdoZW4gd2UgY29uc3RydWN0IHRoZSBv
YmplY3QgZnJvbSBDKysgY29kZSwgd2UgZXhwZWN0IHRoZSBjYXBhY2l0eSB0byBiZSBhdCBsZWFz
dCBhcyBsYXJnZSBhcwogICAgIC8vIGxlbmd0aC4gSklULWFsbG9jYXRlZCBEaXJlY3RBcmd1bWVu
dHMgb2JqZWN0cyBwbGF5IGV2aWwgdHJpY2tzLCB0aG91Z2guCi0gICAgQVNTRVJUKHN0b3JhZ2VI
ZWFkZXIoc3RvcmFnZSkubWluQ2FwYWNpdHkgPj0gc3RvcmFnZUhlYWRlcihzdG9yYWdlKS5sZW5n
dGgpOworICAgIEFTU0VSVChjYXBhY2l0eSA+PSBsZW5ndGgpOwogfQogCiBEaXJlY3RBcmd1bWVu
dHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlVW5pbml0aWFsaXplZCgKICAgICBWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGNhcGFjaXR5KQog
ewotICAgIHZvaWQqIHJhd1N0b3JhZ2VQdHIgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCi0gICAgICAgIHZtLCBzdG9yYWdlU2l6ZShjYXBhY2l0
eSksIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKLSAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93
bj4qPihyYXdTdG9yYWdlUHRyKSArIDE7Ci0gICAgc3RvcmFnZUhlYWRlcihzdG9yYWdlKS5sZW5n
dGggPSBsZW5ndGg7Ci0gICAgc3RvcmFnZUhlYWRlcihzdG9yYWdlKS5taW5DYXBhY2l0eSA9IGNh
cGFjaXR5OwotICAgIAogICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0KLSAgICAgICAgbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGlyZWN0QXJndW1lbnRzPih2bS5oZWFwKSkKLSAgICAg
ICAgRGlyZWN0QXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UpOworICAgICAgICBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEaXJlY3RBcmd1bWVudHM+KHZtLmhlYXAsIGFsbG9jYXRp
b25TaXplKGNhcGFjaXR5KSkpCisgICAgICAgIERpcmVjdEFyZ3VtZW50cyh2bSwgc3RydWN0dXJl
LCBsZW5ndGgsIGNhcGFjaXR5KTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjQsMTAgKzU5LDkgQEAgRGlyZWN0QXJndW1lbnRzKiBE
aXJlY3RBcmd1bWVudHM6OmNyZWF0ZQogRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6
OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkIGNhcGFjaXR5KQogewogICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRl
VW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBsZW5ndGgsIGNhcGFjaXR5KTsKLQotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSA9IHJlc3VsdC0+c3RvcmFnZSgpOworICAgIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IGNhcGFjaXR5OyBpLS07KQotICAgICAgICBzdG9yYWdlW2ld
LmNsZWFyKCk7CisgICAgICAgIHJlc3VsdC0+c3RvcmFnZSgpW2ldLmNsZWFyKCk7CiAgICAgCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTgxLDkgKzc1LDggQEAgRGlyZWN0QXJndW1lbnRzKiBE
aXJlY3RBcmd1bWVudHM6OmNyZWF0ZQogICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gY3Jl
YXRlVW5pbml0aWFsaXplZCgKICAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCksIGxlbmd0aCwgY2FwYWNpdHkpOwogICAgIAot
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSA9IHJlc3VsdC0+c3RvcmFnZSgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IGNhcGFjaXR5OyBpLS07KQotICAgICAgICBzdG9yYWdlW2ld
LnNldCh2bSwgcmVzdWx0LCBleGVjLT5nZXRBcmd1bWVudFVuc2FmZShpKSk7CisgICAgICAgIHJl
c3VsdC0+c3RvcmFnZSgpW2ldLnNldCh2bSwgcmVzdWx0LCBleGVjLT5nZXRBcmd1bWVudFVuc2Fm
ZShpKSk7CiAgICAgCiAgICAgcmVzdWx0LT5zZXRDYWxsZWUodm0sIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oZXhlYy0+anNDYWxsZWUoKSkpOwogICAgIApAQCAtOTQsNyArODcsNyBAQCBzaXplX3QgRGly
ZWN0QXJndW1lbnRzOjplc3RpbWF0ZWRTaXplKEpTCiB7CiAgICAgRGlyZWN0QXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0ganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KGNlbGwpOwogICAgIHNpemVfdCBt
YXBwZWRBcmd1bWVudHNTaXplID0gdGhpc09iamVjdC0+bV9tYXBwZWRBcmd1bWVudHMgPyB0aGlz
T2JqZWN0LT5tYXBwZWRBcmd1bWVudHNTaXplKCkgKiBzaXplb2YoYm9vbCkgOiAwOwotICAgIHNp
emVfdCBtb2RpZmllZEFyZ3VtZW50c1NpemUgPSB0aGlzT2JqZWN0LT5tX21vZGlmaWVkQXJndW1l
bnRzRGVzY3JpcHRvciA/IHRoaXNPYmplY3QtPnN0b3JhZ2VIZWFkZXIoKS5sZW5ndGggKiBzaXpl
b2YoYm9vbCkgOiAwOworICAgIHNpemVfdCBtb2RpZmllZEFyZ3VtZW50c1NpemUgPSB0aGlzT2Jq
ZWN0LT5tX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvciA/IHRoaXNPYmplY3QtPm1fbGVuZ3Ro
ICogc2l6ZW9mKGJvb2wpIDogMDsKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxs
KSArIG1hcHBlZEFyZ3VtZW50c1NpemUgKyBtb2RpZmllZEFyZ3VtZW50c1NpemU7CiB9CiAKQEAg
LTEwNCwxNCArOTcsMTEgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlND
ZQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgdmlzaXRv
ci5tYXJrQXV4aWxpYXJ5KCZ0aGlzT2JqZWN0LT5zdG9yYWdlSGVhZGVyKCkpOwotICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnN0b3JhZ2UoKSwgc3RkOjptYXgodGhpc09iamVj
dC0+c3RvcmFnZUhlYWRlcigpLmxlbmd0aCwgdGhpc09iamVjdC0+c3RvcmFnZUhlYWRlcigpLm1p
bkNhcGFjaXR5KSk7Ci0gICAgCisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+
c3RvcmFnZSgpLCBzdGQ6Om1heCh0aGlzT2JqZWN0LT5tX2xlbmd0aCwgdGhpc09iamVjdC0+bV9t
aW5DYXBhY2l0eSkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsK
IAogICAgIGlmICh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cykKICAgICAgICAgdmlzaXRv
ci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbWFwcGVkQXJndW1lbnRzLmdldCgpKTsKLSAg
ICAKICAgICBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRyZW4o
dGhpc0NlbGwsIHZpc2l0b3IpOwogfQogCkBAIC0xMjQsMTQgKzExNCwxNCBAQCB2b2lkIERpcmVj
dEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MoVk0mCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1f
bWFwcGVkQXJndW1lbnRzKTsKICAgICAKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoc3RvcmFnZUhlYWRlcigpLmxlbmd0aCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV9sZW5ndGgpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFsT2JqZWN0KCkt
PmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgCiAgICAgdm9pZCogYmFja2luZ1N0b3JlID0g
dm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFyZ3VtZW50cy5raW5kKS5hbGxvY2F0
ZU5vblZpcnR1YWwodm0sIG1hcHBlZEFyZ3VtZW50c1NpemUoKSwgbnVsbHB0ciwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgIGJvb2wqIG92ZXJyaWRlcyA9IHN0YXRpY19jYXN0
PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgIG1fbWFwcGVkQXJndW1lbnRzLnNldCh2bSwgdGhp
cywgb3ZlcnJpZGVzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdG9yYWdlSGVhZGVyKCkubGVu
Z3RoOyBpLS07KQorICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQogICAgICAg
ICBvdmVycmlkZXNbaV0gPSBmYWxzZTsKIH0KIApAQCAtMTUwLDEyICsxNDAsMTEgQEAgdm9pZCBE
aXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1lbnQoVk0mIAogdm9pZCBEaXJlY3RBcmd1bWVudHM6
OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVs
ZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAo
IW1fbWFwcGVkQXJndW1lbnRzKSB7Ci0gICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4o
bGVuZ3RoICsgb2Zmc2V0LCBzdG9yYWdlSGVhZGVyKCkubGVuZ3RoKTsKKyAgICAgICAgdW5zaWdu
ZWQgbGltaXQgPSBzdGQ6Om1pbihsZW5ndGggKyBvZmZzZXQsIG1fbGVuZ3RoKTsKICAgICAgICAg
dW5zaWduZWQgaTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0gZmlyc3RFbGVtZW50
RGVzdCAtIG9mZnNldDsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0g
dGhpcy0+c3RvcmFnZSgpOwogICAgICAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsaW1pdDsgKytp
KQotICAgICAgICAgICAgZXhlYy0+cihzdGFydCArIGkpID0gc3RvcmFnZVtpXS5nZXQoKTsKKyAg
ICAgICAgICAgIGV4ZWMtPnIoc3RhcnQgKyBpKSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAg
ICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgIGV4ZWMtPnIoc3RhcnQgKyBp
KSA9IGdldChleGVjLCBpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTY5LDcgKzE1OCw3IEBAIHVu
c2lnbmVkIERpcmVjdEFyZ3VtZW50czo6bWFwcGVkQXJndW1lbnQKICAgICAvLyBXZSBhbHdheXMg
YWxsb2NhdGUgc29tZXRoaW5nOyBpbiB0aGUgcmVsYXRpdmVseSB1bmNvbW1vbiBjYXNlIG9mIG92
ZXJyaWRpbmcgYW4gZW1wdHkgYXJndW1lbnQgd2UKICAgICAvLyBzdGlsbCBhbGxvY2F0ZSBzbyB0
aGF0IG1fbWFwcGVkQXJndW1lbnRzIGlzIG5vbi1udWxsLiBXZSB1c2UgdGhhdCB0byBpbmRpY2F0
ZSB0aGF0IHRoZSBvdGhlciBwcm9wZXJ0aWVzCiAgICAgLy8gKGxlbmd0aCwgZXRjKSBhcmUgb3Zl
cnJpZGRlbi4KLSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KHN0b3JhZ2VI
ZWFkZXIoKS5sZW5ndGggPyBzdG9yYWdlSGVhZGVyKCkubGVuZ3RoIDogMSk7CisgICAgcmV0dXJu
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihtX2xlbmd0aCA/IG1fbGVuZ3RoIDogMSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDIzMDIyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiwyNCArMzIsMjUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKLSAgICAKIC8vIFRoaXMgaXMgYW4gQXJndW1lbnRzLWNsYXNzIG9iamVjdCB0
aGF0IHdlIGNyZWF0ZSB3aGVuIHlvdSBzYXkgImFyZ3VtZW50cyIgaW5zaWRlIGEgZnVuY3Rpb24s
CiAvLyBhbmQgbm9uZSBvZiB0aGUgYXJndW1lbnRzIGFyZSBjYXB0dXJlZCBpbiB0aGUgZnVuY3Rp
b24ncyBhY3RpdmF0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBjb3B5IGFsbAogLy8gb2YgaXRzIGFy
Z3VtZW50cyBpbnRvIHRoaXMgb2JqZWN0LCBhbmQgYWxsIHN1YnNlcXVlbnQgYWNjZXNzZXMgdG8g
dGhlIGFyZ3VtZW50cyB3aWxsIGdvIHRocm91Z2gKIC8vIHRoaXMgb2JqZWN0IHRoZXJlYWZ0ZXIu
IFNwZWNpYWwgc3VwcG9ydCBpcyBpbiBwbGFjZSBmb3IgbWlzY2hldmlvdXMgZXZlbnRzIGxpa2Ug
dGhlIGFyZ3VtZW50cwogLy8gYmVpbmcgZGVsZXRlZCAoc29tZXRoaW5nIGxpa2UgImRlbGV0ZSBh
cmd1bWVudHNbMF0iKSBvciByZWNvbmZpZ3VyZWQgKGJyb2FkbHksIHdlIHNheSBkZWxldGlvbnMK
IC8vIGFuZCByZWNvbmZpZ3VyYXRpb25zIG1lYW4gdGhhdCB0aGUgcmVzcGVjdGl2ZSBhcmd1bWVu
dCB3YXMgIm92ZXJyaWRkZW4iKS4KKy8vCisvLyBUbyBzcGVlZCBhbGxvY2F0aW9uLCB0aGlzIG9i
amVjdCB3aWxsIGhvbGQgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4tcGxhY2UuIFRoZSBhcmd1bWVu
dHMgYXMgd2VsbAorLy8gYXMgYSB0YWJsZSBvZiBmbGFncyBzYXlpbmcgd2hpY2ggYXJndW1lbnRz
IHdlcmUgb3ZlcnJpZGRlbi4KIGNsYXNzIERpcmVjdEFyZ3VtZW50cyBmaW5hbCA6IHB1YmxpYyBH
ZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz4gewogcHJpdmF0ZToKLSAgICBEaXJlY3RB
cmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2Up
OworICAgIERpcmVjdEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgY2FwYWNpdHkpOwogICAgIAogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
ICAgICByZXR1cm4gJnZtLmRpcmVjdEFyZ3VtZW50c1NwYWNlOworICAgICAgICByZXR1cm4gJnZt
LmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKICAgICB9CiAKICAgICAvLyBDcmVhdGVzIGFuIGFy
Z3VtZW50cyBvYmplY3QgYnV0IGxlYXZlcyBpdCB1bmluaXRpYWxpemVkLiBUaGlzIGlzIGRhbmdl
cm91cyBpZiB3ZSBHQyByaWdodApAQCAtNjgsNyArNjksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dWludDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0
b3JhZ2VIZWFkZXIoKS5sZW5ndGg7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKICAgICB9CiAg
ICAgCiAgICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKQEAgLTgxLDMz
ICs4MiwyOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAg
ICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoZXhlYyk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHN0b3JhZ2VIZWFkZXIoKS5sZW5ndGg7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCBpc01hcHBlZEFyZ3VtZW50KHVpbnQzMl90IGkpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gaSA8IHN0b3JhZ2VIZWFkZXIoKS5sZW5ndGggJiYgKCFtX21h
cHBlZEFyZ3VtZW50cyB8fCAhbV9tYXBwZWRBcmd1bWVudHNbaV0pOworICAgICAgICByZXR1cm4g
aSA8IG1fbGVuZ3RoICYmICghbV9tYXBwZWRBcmd1bWVudHMgfHwgIW1fbWFwcGVkQXJndW1lbnRz
W2ldKTsKICAgICB9CiAKICAgICBib29sIGlzTWFwcGVkQXJndW1lbnRJbkRGRyh1aW50MzJfdCBp
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGkgPCBzdG9yYWdlSGVhZGVyKCkubGVuZ3Ro
ICYmICFvdmVycm9kZVRoaW5ncygpOworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICFv
dmVycm9kZVRoaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlj
a2x5KHVpbnQzMl90IGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpc01hcHBlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBzdG9yYWdlID0gdGhpcy0+c3RvcmFnZSgpOwotICAgICAgICBhdXRvKiBwdHIg
PSAmc3RvcmFnZVtpXTsKLSAgICAgICAgcmV0dXJuIHByZWNpc2VJbmRleE1hc2tQdHIoaSwgc3Rv
cmFnZUhlYWRlcihzdG9yYWdlKS5sZW5ndGgsIHB0ciktPmdldCgpOworICAgICAgICByZXR1cm4g
Y29uc3RfY2FzdDxEaXJlY3RBcmd1bWVudHMqPih0aGlzKS0+c3RvcmFnZSgpW2ldLmdldCgpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVpbnQzMl90IGks
IEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihpc01hcHBlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBzdG9yYWdlID0gdGhpcy0+c3RvcmFnZSgpOwotICAgICAgICBhdXRvKiBwdHIgPSAmc3Rv
cmFnZVtpXTsKLSAgICAgICAgcHJlY2lzZUluZGV4TWFza1B0cihpLCBzdG9yYWdlSGVhZGVyKHN0
b3JhZ2UpLmxlbmd0aCwgcHRyKS0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3Jh
Z2UoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgSlNGdW5jdGlv
biogY2FsbGVlKCkKQEAgLTEyMywxMyArMTIwLDggQEAgcHVibGljOgogICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgYXJndW1lbnQoRGlyZWN0QXJndW1lbnRzT2Zmc2V0IG9mZnNldCkKICAgICB7
CiAgICAgICAgIEFTU0VSVChvZmZzZXQpOwotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihvZmZzZXQub2Zmc2V0KCkgPCBzdGQ6Om1heChzdG9yYWdlSGVhZGVyKCkubGVu
Z3RoLCBzdG9yYWdlSGVhZGVyKCkubWluQ2FwYWNpdHkpKTsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBzdG9yYWdlID0gdGhpcy0+c3RvcmFnZSgpOwotICAgICAgICBhdXRvKiBwdHIg
PSAmc3RvcmFnZVtvZmZzZXQub2Zmc2V0KCldOwotICAgICAgICByZXR1cm4gKnByZWNpc2VJbmRl
eE1hc2tQdHIoCi0gICAgICAgICAgICBvZmZzZXQub2Zmc2V0KCksCi0gICAgICAgICAgICBzdGQ6
Om1heChzdG9yYWdlSGVhZGVyKHN0b3JhZ2UpLmxlbmd0aCwgc3RvcmFnZUhlYWRlcihzdG9yYWdl
KS5taW5DYXBhY2l0eSksCi0gICAgICAgICAgICBwdHIpOworICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQub2Zmc2V0KCkgPCBzdGQ6Om1heChtX2xlbmd0aCwg
bV9taW5DYXBhY2l0eSkpOworICAgICAgICByZXR1cm4gc3RvcmFnZSgpW29mZnNldC5vZmZzZXQo
KV07CiAgICAgfQogICAgIAogICAgIC8vIE1ldGhvZHMgaW50ZW5kZWQgZm9yIHVzZSBieSB0aGUg
R2VuZXJpY0FyZ3VtZW50cyBtaXhpbi4KQEAgLTE0MCwxNyArMTMyLDE3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgaW5pdE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcklmTmVjZXNzYXJ5KFZNJiB2
bSkKICAgICB7Ci0gICAgICAgIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6aW5p
dE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcklmTmVjZXNzYXJ5KHZtLCBzdG9yYWdlSGVhZGVy
KCkubGVuZ3RoKTsKKyAgICAgICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojpp
bml0TW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9ySWZOZWNlc3Nhcnkodm0sIG1fbGVuZ3RoKTsK
ICAgICB9CiAKICAgICB2b2lkIHNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKFZNJiB2bSwg
dW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFy
Z3VtZW50cz46OnNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHZtLCBpbmRleCwgc3RvcmFn
ZUhlYWRlcigpLmxlbmd0aCk7CisgICAgICAgIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1l
bnRzPjo6c2V0TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3Iodm0sIGluZGV4LCBtX2xlbmd0aCk7
CiAgICAgfQogCiAgICAgYm9vbCBpc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHVuc2lnbmVk
IGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJn
dW1lbnRzPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCwgc3RvcmFnZUhlYWRl
cigpLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3Vt
ZW50cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fbGVuZ3RoKTsKICAg
ICB9CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBWaXJ0dWFsUmVnaXN0
ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwpA
QCAtMTYwLDU1ICsxNTIsMzggQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogICAg
IAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWxsZWUoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRGlyZWN0QXJndW1lbnRzLCBtX2NhbGxlZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERpcmVjdEFyZ3Vt
ZW50cywgbV9sZW5ndGgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1pbkNhcGFj
aXR5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERpcmVjdEFyZ3VtZW50cywgbV9taW5DYXBh
Y2l0eSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERpcmVjdEFyZ3VtZW50cywgbV9tYXBwZWRBcmd1bWVu
dHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMsIG1fbW9k
aWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZTdG9yYWdlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERpcmVjdEFyZ3VtZW50cywgbV9z
dG9yYWdlKTsgfQotCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aEluU3RvcmFn
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdG9yYWdlSGVhZGVyLCBsZW5ndGgpIC0gc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mTWluQ2FwYWNpdHlJblN0b3JhZ2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RvcmFn
ZUhlYWRlciwgbWluQ2FwYWNpdHkpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7IH0K
ICAgICAKLSAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXplKENoZWNrZWQ8c2l6ZV90PiBjYXBh
Y2l0eSkKKyAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VPZmZzZXQoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIChzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChjYXBhY2l0eSArIHN0YXRp
Y19jYXN0PHNpemVfdD4oMSkpKS51bnNhZmVHZXQoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKERp
cmVjdEFyZ3VtZW50cykpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VI
ZWFkZXJTaXplKCkgeyByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7IH0KLSAg
ICAKLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHNpemVfdCBpbmxpbmVTaXplKQor
ICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZTbG90KENoZWNrZWQ8c2l6ZV90PiBpbmRleCkKICAg
ICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbmxpbmVTaXplKTsKLSAgICAgICAgcmV0dXJu
IHNpemVvZihEaXJlY3RBcmd1bWVudHMpOworICAgICAgICByZXR1cm4gKHN0b3JhZ2VPZmZzZXQo
KSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaW5kZXgpLnVuc2FmZUdldCgpOwog
ICAgIH0KICAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKLSAgICAKLSAgICBzdHJ1Y3QgU3RvcmFnZUhlYWRlciB7Ci0gICAgICAgIHVpbnQzMl90
IGxlbmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50
cyBhbmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KLSAg
ICAgICAgdWludDMyX3QgbWluQ2FwYWNpdHk7IC8vIFRoZSBtYXggb2YgdGhpcyBhbmQgbGVuZ3Ro
IGRldGVybWluZXMgdGhlIGNhcGFjaXR5IG9mIHRoaXMgb2JqZWN0LiBJdCBtYXkgYmUgdGhlIGFj
dHVhbCBjYXBhY2l0eSwgb3IgbWF5YmUgc29tZXRoaW5nIHNtYWxsZXIuIFdlIGFycmFuZ2UgaXQg
dGhpcyB3YXkgdG8gYmUga2luZCB0byB0aGUgSklUcy4KLSAgICB9OwotICAgIAotICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogc3RvcmFnZSgpIGNvbnN0CisgICAgc3RhdGljIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gY2FwYWNpdHkpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9zdG9yYWdlLmdldCgpLnVucG9pc29uZWQoKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9m
U2xvdChjYXBhY2l0eSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBTdG9yYWdlSGVhZGVyJiBz
dG9yYWdlSGVhZGVyKFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSkKLSAgICB7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFN0b3JhZ2VIZWFkZXIpID09IHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pLCAiU3RvcmFnZUhlYWRlciBuZWVkcyB0byBiZSB0aGUgc2FtZSBzaXpl
IGFzIGEgSlNWYWx1ZSIpOwotICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxTdG9yYWdlSGVh
ZGVyKj4oc3RvcmFnZSAtIDEpOwotICAgIH0KLQotICAgIFN0b3JhZ2VIZWFkZXImIHN0b3JhZ2VI
ZWFkZXIoKSBjb25zdAorcHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3Jh
Z2UoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSgpKTsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc3RvcmFnZU9mZnNldCgpKTsKICAgICB9CiAgICAgCiAgICAg
dW5zaWduZWQgbWFwcGVkQXJndW1lbnRzU2l6ZSgpOwogICAgIAogICAgIFdyaXRlQmFycmllcjxK
U0Z1bmN0aW9uPiBtX2NhbGxlZTsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRo
ZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMg
c3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICB1aW50MzJfdCBtX21pbkNhcGFj
aXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBkZXRlcm1pbmVzIHRoZSBjYXBhY2l0
eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1YWwgY2FwYWNpdHksIG9yIG1heWJl
IHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRoaXMgd2F5IHRvIGJlIGtpbmQgdG8g
dGhlIEpJVHMuCiAgICAgQ2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+
IG1fbWFwcGVkQXJndW1lbnRzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgs
IGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCi0g
ICAgQXV4aWxpYXJ5QmFycmllcjxQb2lzb25lZDxEaXJlY3RBcmd1bWVudHNQb2lzb24sIFdyaXRl
QmFycmllcjxVbmtub3duPio+PiBtX3N0b3JhZ2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1BvaXNvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1BvaXNvbi5oCShyZXZpc2lv
biAyMzAyMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KEFy
cmF5UHJvdG90eXBlKSBcCiAgICAgdihDb2RlQmxvY2spIFwKICAgICB2KERhdGVJbnN0YW5jZSkg
XAotICAgIHYoRGlyZWN0QXJndW1lbnRzKSBcCiAgICAgdihHbG9iYWxEYXRhKSBcCiAgICAgdihK
SVRDb2RlKSBcCiAgICAgdihKU0FQSVdyYXBwZXJPYmplY3QpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2
aXNpb24gMjMwMjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0vLyBUaGlzIGlzIFNwZWN0
cmUtc2FmZSBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBpdHMgbGVuZ3RoIGlubGluZS4KIGNsYXNz
IEpTTGV4aWNhbEVudmlyb25tZW50IDogcHVibGljIEpTU3ltYm9sVGFibGVPYmplY3QgewogICAg
IGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDIzMDIyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogICAgIAogcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVGhpcyBuZWVk
cyB0byBiZSBwb2lzb25lZC4KICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fc3ltYm9s
VGFibGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZp
c2lvbiAyMzAyMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2MSw3ICsyNjEsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAgICAgLCBhc3luY0dlbmVyYXRvckZ1bmN0aW9uU3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgY2VsbEpTVmFsdWVPT0JIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTQXN5
bmNHZW5lcmF0b3JGdW5jdGlvbikKICAgICAsIGJvdW5kRnVuY3Rpb25TcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBjZWxsSlNWYWx1ZU9PQkhlYXBDZWxsVHlwZS5nZXQoKSwgSlNCb3VuZEZ1
bmN0aW9uKQogICAgICwgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25TcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBjZWxsSlNWYWx1ZU9PQkhlYXBDZWxsVHlwZS5nZXQoKSwgSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbikKLSAgICAsIGRpcmVjdEFyZ3VtZW50c1NwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGNlbGxKU1ZhbHVlT09CSGVhcENlbGxUeXBlLmdldCgpLCBEaXJlY3RB
cmd1bWVudHMpCiAgICAgLCBkaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIERpcmVjdEV2YWxF
eGVjdXRhYmxlKQogICAgICwgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGNlbGxEYW5nZXJvdXNCaXRzSGVhcENlbGxUeXBlLmdldCgpLCBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlKQogICAgICwgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwg
RnVuY3Rpb25FeGVjdXRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShy
ZXZpc2lvbiAyMzAyMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDUsNyArMzQ1LDYgQEAgcHVibGljOgogICAgIElzb1N1YnNwYWNl
IGFzeW5jR2VuZXJhdG9yRnVuY3Rpb25TcGFjZTsKICAgICBJc29TdWJzcGFjZSBib3VuZEZ1bmN0
aW9uU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25TcGFj
ZTsKLSAgICBJc29TdWJzcGFjZSBkaXJlY3RBcmd1bWVudHNTcGFjZTsKICAgICBJc29TdWJzcGFj
ZSBkaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIGV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2VTcGFjZTsKICAgICBJc29TdWJzcGFjZSBmdW5jdGlvbkV4ZWN1dGFibGVT
cGFjZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337132</attachid>
            <date>2018-04-03 16:58:57 -0700</date>
            <delta_ts>2018-04-04 10:44:02 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69370</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMjI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDE4LTA0LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RG9uJ3QgZG8gaW5kZXggbWFza2luZyBvciBwb2lzb25pbmcgZm9yIERpcmVjdEFyZ3VtZW50cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjgwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFy
ZCk6CisgICAgICAgICogZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNT
bG93UGF0aEdlbmVyYXRvcjo6Q2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJh
dG9yKToKKyAgICAgICAgKiBkZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93
bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEZyb21Bcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0VG9Bcmd1bWVudHMpOgorICAg
ICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0RnJvbUFyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQdXRUb0FyZ3VtZW50cyk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZHluYW1pY1BvaXNvbik6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmR5bmFtaWNQb2lzb25PbkxvYWRl
ZFR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpkeW5hbWljUG9p
c29uT25UeXBlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2Nh
dGVWYXJpYWJsZVNpemVkSGVhcENlbGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2VjdXJp
dHlLaW5kLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RGly
ZWN0QXJndW1lbnRzR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwOgorICAgICAg
ICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkRpcmVjdEFyZ3VtZW50czo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkRp
cmVjdEFyZ3VtZW50czo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpj
cmVhdGVCeUNvcHlpbmcpOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmVzdGltYXRl
ZFNpemUpOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKToKKyAgICAgICAg
KEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpE
aXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50c1NpemUpOgorICAgICAgICAqIHJ1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9KU0NQb2lzb24uaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgICogcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisKIDIwMTgtMDQtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBHQyBzaG91bGRuJ3QgZG8gb2JqZWN0IGRpc3RhbmNpbmcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzAyMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw2IEBACiAJCTBGMjU2QzM2MTYyN0Iw
QUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3
QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgg
Ki87IH07CiAJCTBGMjVGMUIyMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFCMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYy
NkE3QTMyMDUzODk1QzAwOTBBMTQxIC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNXaXRo
S25vd25MZW5ndGhTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNkE3QTIyMDUzODk1ODAwOTBBMTQxIC8qIERGR0NhbGxD
cmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93UGF0aEdlbmVyYXRvci5oICov
OyB9OwogCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJt
aW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oICov
OyB9OwogCQkwRjJBQzU2QjFFOEEwQkQ1MDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaCAqLzsgfTsKIAkJMEYyQUM1NkYxRThEN0IwMzAwMDFF
RTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2RDFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJ
bnNlcnRpb25TZXQuaCAqLzsgfTsKQEAgLTIwNjIsNyArMjA2MSw2IEBACiAJCTBGMjVGMUFCMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsLmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFDMTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5LmNwcDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENh
bGxLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI1RjFBRDE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEZUTFNsb3dQYXRoQ2FsbEtleS5oOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjI2QTdBMjIwNTM4OTU4MDA5
MEExNDEgLyogREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQ
YXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxD
cmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93UGF0aEdlbmVyYXRvci5oOyBw
YXRoID0gZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93
UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI3NUYyQzFF
Q0UwNzk2MDA2MjBENDcgLyogSW50cmluc2ljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEludHJpbnNpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMkFDNTY0MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5jcHA7IHBhdGggPSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVF
M0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9B
aXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzEzOSw3ICs3MTM3LDYgQEAKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZH
Qnl0ZUNvZGVQYXJzZXIuaCAqLywKIAkJCQkwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZH
Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLywKIAkJCQkwRkJEQjlBQzFB
QjBGQkM2MDAwQjU3RTUgLyogREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2Vu
ZXJhdG9yLmggKi8sCi0JCQkJMEYyNkE3QTIyMDUzODk1ODAwOTBBMTQxIC8qIERGR0NhbGxDcmVh
dGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93UGF0aEdlbmVyYXRvci5oICovLAog
CQkJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovLAog
CQkJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLywKIAkJ
CQkwRkZGQzk0QjE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwICovLApAQCAtODQ5
OCw3ICs4NDk1LDYgQEAKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNv
ZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAv
KiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCREI5QUQxQUIwRkJDNjAwMEI1N0U1IC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1
bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyNkE3QTMyMDUz
ODk1QzAwOTBBMTQxIC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5n
dGhTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0Qy
RjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5
NTgxNEVGOTBBMjAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMzAyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MywxMiArMzgzLDgg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgICAgIGppdC5i
cmFuY2hUZXN0UHRyKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgRGlyZWN0QXJndW1l
bnRzOjpvZmZzZXRPZk1hcHBlZEFyZ3VtZW50cygpKSkpOwotICAgICAgICBqaXQubG9hZFB0cigK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBEaXJlY3RBcmd1bWVu
dHM6Om9mZnNldE9mU3RvcmFnZSgpKSwKLSAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BS
KCkpOwotICAgICAgICBqaXQueG9yUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihEaXJl
Y3RBcmd1bWVudHNQb2lzb246OmtleSgpKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAg
ICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3ModmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aEluU3RvcmFn
ZSgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBEaXJlY3RB
cmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLAogICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxv
YWRHUFIoKSk7CiAgICAgICAgIGppdC5ib3hJbnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2
YWx1ZVJlZ3MpOwogICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbENyZWF0
ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIzMDIyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Ns
b3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxNyArMzQsMTYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBUaGlzIGNhbGxzIG9wZXJhdGlv
bkNyZWF0ZURpcmVjdEFyZ3VtZW50cyBidXQgdGhlbiByZXN0b3JlcyB0aGUgdmFsdWUgb2YgbGVu
Z3RoR1BSIGFuZCBzdG9yYWdlR1BSLgorLy8gVGhpcyBjYWxscyBvcGVyYXRpb25DcmVhdGVEaXJl
Y3RBcmd1bWVudHMgYnV0IHRoZW4gcmVzdG9yZXMgdGhlIHZhbHVlIG9mIGxlbmd0aEdQUi4KIGNs
YXNzIENhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBK
dW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7CiBwdWJs
aWM6CiAgICAgQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yKAogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwg
R1BSUmVnIHJlc3VsdEdQUiwgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUsCi0gICAgICAg
IEdQUlJlZyBsZW5ndGhHUFIsIEdQUlJlZyBzdG9yYWdlR1BSLCB1bnNpZ25lZCBtaW5DYXBhY2l0
eSkKKyAgICAgICAgR1BSUmVnIGxlbmd0aEdQUiwgdW5zaWduZWQgbWluQ2FwYWNpdHkpCiAgICAg
ICAgIDogSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4o
ZnJvbSwgaml0KQogICAgICAgICAsIG1fcmVzdWx0R1BSKHJlc3VsdEdQUikKICAgICAgICAgLCBt
X3N0cnVjdHVyZShzdHJ1Y3R1cmUpCiAgICAgICAgICwgbV9sZW5ndGhHUFIobGVuZ3RoR1BSKQot
ICAgICAgICAsIG1fc3RvcmFnZUdQUihzdG9yYWdlR1BSKQogICAgICAgICAsIG1fbWluQ2FwYWNp
dHkobWluQ2FwYWNpdHkpCiAgICAgewogICAgICAgICBqaXQtPnNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzSW1wbChmYWxzZSwgbV9wbGFucywgcmVzdWx0R1BSKTsKQEAgLTYyLDExICs2MSw3IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgICAgIGppdC0+c2lsZW50RmlsbChtX3BsYW5zW2ldKTsKICAgICAg
ICAgaml0LT5tX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBqaXQtPm1faml0LmxvYWRQ
dHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3Jlc3VsdEdQUiwgRGly
ZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIG1fc3RvcmFnZUdQUik7Ci0gICAgICAg
IGppdC0+bV9qaXQueG9yUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIG1fc3RvcmFnZUdQUik7Ci0gICAg
ICAgIGppdC0+bV9qaXQubG9hZDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobV9zdG9yYWdlR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoSW5TdG9yYWdl
KCkpLCBtX2xlbmd0aEdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyht
X3Jlc3VsdEdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSwgbV9sZW5ndGhH
UFIpOwogICAgICAgICBqdW1wVG8oaml0KTsKICAgICB9CiAgICAgCkBAIC03NCw3ICs2OSw2IEBA
IHByaXZhdGU6CiAgICAgR1BSUmVnIG1fcmVzdWx0R1BSOwogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUgbV9zdHJ1Y3R1cmU7CiAgICAgR1BSUmVnIG1fbGVuZ3RoR1BSOwotICAgIEdQUlJlZyBtX3N0
b3JhZ2VHUFI7CiAgICAgdW5zaWduZWQgbV9taW5DYXBhY2l0eTsKICAgICBWZWN0b3I8U2lsZW50
UmVnaXN0ZXJTYXZlUGxhbiwgMj4gbV9wbGFuczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93
UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDIzMDIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9y
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKERGR19K
SVQpCi0KLSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiREZHU2xvd1BhdGhH
ZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkRp
cmVjdEFyZ3VtZW50cy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLS8v
IFRoaXMgY2FsbHMgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzIGJ1dCB0aGVuIHJlc3Rv
cmVzIHRoZSB2YWx1ZSBvZiBzdG9yYWdlR1BSLgotY2xhc3MgQ2FsbENyZWF0ZURpcmVjdEFyZ3Vt
ZW50c1dpdGhLbm93bkxlbmd0aFNsb3dQYXRoR2VuZXJhdG9yIDogcHVibGljIEp1bXBpbmdTbG93
UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+IHsKLXB1YmxpYzoKLSAgICBD
YWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0b3Io
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxhdGl2ZUpJVCog
aml0LCBHUFJSZWcgcmVzdWx0R1BSLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwKLSAg
ICAgICAgdW5zaWduZWQga25vd25MZW5ndGgsIEdQUlJlZyBzdG9yYWdlR1BSLCB1bnNpZ25lZCBt
aW5DYXBhY2l0eSkKLSAgICAgICAgOiBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0Pihmcm9tLCBqaXQpCi0gICAgICAgICwgbV9yZXN1bHRHUFIocmVzdWx0
R1BSKQotICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX2tub3du
TGVuZ3RoKGtub3duTGVuZ3RoKQotICAgICAgICAsIG1fc3RvcmFnZUdQUihzdG9yYWdlR1BSKQot
ICAgICAgICAsIG1fbWluQ2FwYWNpdHkobWluQ2FwYWNpdHkpCi0gICAgewotICAgICAgICBqaXQt
PnNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1wbChmYWxzZSwgbV9wbGFucywgcmVzdWx0R1BSKTsK
LSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRp
dmVKSVQqIGppdCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGxpbmtGcm9tKGppdCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BsYW5zLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgaml0LT5zaWxlbnRTcGlsbChtX3BsYW5zW2ldKTsKLSAgICAgICAgaml0LT5jYWxsT3Bl
cmF0aW9uKAotICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCBtX3Jl
c3VsdEdQUiwgbV9zdHJ1Y3R1cmUsIG1fa25vd25MZW5ndGgsIG1fbWluQ2FwYWNpdHkpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3BsYW5zLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAg
IGppdC0+c2lsZW50RmlsbChtX3BsYW5zW2ldKTsKLSAgICAgICAgaml0LT5tX2ppdC5leGNlcHRp
b25DaGVjaygpOwotICAgICAgICBqaXQtPm1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3Jlc3VsdEdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRP
ZlN0b3JhZ2UoKSksIG1fc3RvcmFnZUdQUik7Ci0gICAgICAgIGppdC0+bV9qaXQueG9yUHRyKAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRz
UG9pc29uOjprZXkoKSksIG1fc3RvcmFnZUdQUik7Ci0gICAgICAgIGp1bXBUbyhqaXQpOwotICAg
IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgR1BSUmVnIG1fcmVzdWx0R1BSOwotICAgIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgbV9zdHJ1Y3R1cmU7Ci0gICAgdW5zaWduZWQgbV9rbm93bkxlbmd0aDsKLSAg
ICBHUFJSZWcgbV9zdG9yYWdlR1BSOwotICAgIHVuc2lnbmVkIG1fbWluQ2FwYWNpdHk7Ci0gICAg
VmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4sIDI+IG1fcGxhbnM7Ci19OwotCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAyMzAyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkRGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdDYWxsQXJyYXlBbGxvY2F0
b3JTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR0NhbGxDcmVhdGVEaXJlY3RBcmd1
bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkRGR0NhbGxDcmVhdGVEaXJlY3RB
cmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRG
R0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKICNpbmNsdWRlICJERkdP
U1JFeGl0RnV6ei5oIgpAQCAtNjUwNSwxMyArNjUwNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkRpCiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwogICAgIEpTVmFsdWVS
ZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKLSAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICAKICAgICBHUFJSZWcgYmFz
ZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTY1MjMsMjQgKzY1MjAsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25EaQogICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkp
KSk7Ci0gICAgCi0gICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZVJl
ZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHN0b3JhZ2VSZWcpOwotICAg
IG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkp
LCBzdG9yYWdlUmVnKTsKLSAgICAKLSAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2Uo
KSksIHNjcmF0Y2hSZWcpOworCisgICAgbV9qaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoUmVn
KTsKICAgICBhdXRvIGlzT3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzKCkpCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVTb3VyY2UoKSwgMCwgaXNPdXRPZkJvdW5kcyk7CiAgICAgCi0gICAgbV9q
aXQuZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIocHJvcGVydHlSZWcsIHNjcmF0Y2hSZWcs
IHNjcmF0Y2hSZWcpOwotCiAgICAgbV9qaXQubG9hZFZhbHVlKAogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwKKyAgICAgICAgICAgIGJhc2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdl
T2Zmc2V0KCkpLAogICAgICAgICByZXN1bHRSZWdzKTsKICAgICAKLSAgICBtX2ppdC5hbmRQdHIo
c2NyYXRjaFJlZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCiAgICAgaWYgKCFub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCkBAIC02NzI1LDExICs2NzE1LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMoKSkp
KTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFn
ZSgpKSwgcmVzdWx0UmVnKTsKLSAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoRGly
ZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgIG1faml0Lmxv
YWQzMigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgRGly
ZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aEluU3RvcmFnZSgpKSwgcmVzdWx0UmVnKTsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50
czo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgIAogICAgICAgICBpbnQz
MlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICBicmVhazsKQEAgLTcwNTQsMTQ2ICs3
MDQxLDEwMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhCiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSogbm9k
ZSkKIHsKLSAgICBWTSYgdm0gPSAqbV9qaXQudm0oKTsKLSAgICAKLSAgICBib29sIGxlbmd0aElz
S25vd24gPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCi0gICAgICAgICYm
ICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKTsKLSAg
ICB1bnNpZ25lZCBrbm93bkxlbmd0aCA9IFVJTlRfTUFYOworICAgIC8vIEZJWE1FOiBBIG1vcmUg
ZWZmZWN0aXZlIHdheSBvZiBkZWFsaW5nIHdpdGggdGhlIGFyZ3VtZW50IGNvdW50IGFuZCBjYWxs
ZWUgaXMgdG8gaGF2ZQorICAgIC8vIHRoZW0gYmUgZXhwbGljaXQgYXJndW1lbnRzIHRvIHRoaXMg
bm9kZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQy
MjA3CiAgICAgCi0gICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPQotICAgICAgICBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsK
KyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
MSh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9y
YXJ5IGxlbmd0aDsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEdQ
UlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoMkdQ
UiA9IHNjcmF0Y2gyLmdwcigpOworICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxh
YmxlUmVncyhzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIpOworICAgICAgICAKICAgICB1bnNpZ25l
ZCBtaW5DYXBhY2l0eSA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKS0+bnVtUGFyYW1ldGVycygpIC0gMTsKLSAgICAKLSAgICBHUFJSZWcg
cmVzdWx0R1BSOwotICAgIEdQUlJlZyBsZW5ndGhHUFI7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxR1BS
OwotICAgIEdQUlJlZyBzY3JhdGNoMkdQUjsKLSAgICBHUFJSZWcgc3RvcmFnZUdQUjsKLSAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3M7Ci0gICAgCi0gICAgYXV0byBsb2FkTGVuZ3RoID0gWyZdICgp
IHsKKyAgICAgICAgCisgICAgdW5zaWduZWQga25vd25MZW5ndGg7CisgICAgYm9vbCBsZW5ndGhJ
c0tub3duOyAvLyBpZiBmYWxzZSwgbGVuZ3RoR1BSIHdpbGwgaGF2ZSB0aGUgbGVuZ3RoLgorICAg
IGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICYmICFu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAg
ICAgICBrbm93bkxlbmd0aCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKKyAgICAgICAgbGVuZ3RoSXNLbm93biA9
IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAga25vd25MZW5ndGggPSBVSU5UX01BWDsKKyAg
ICAgICAgbGVuZ3RoSXNLbm93biA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgIEdQUlRl
bXBvcmFyeSByZWFsTGVuZ3RoKHRoaXMpOworICAgICAgICBsZW5ndGguYWRvcHQocmVhbExlbmd0
aCk7CisgICAgICAgIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKKwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbV9qaXQuYXJndW1lbnRDb3VudChub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgbGVuZ3RoR1BSKTsKICAgICAgICAgbV9q
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBsZW5ndGhHUFIpOwotICAgIH07CisgICAgfQogICAg
ICAgICAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0OwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
MTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDI7Ci0gICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2U7
Ci0gICAgR1BSVGVtcG9yYXJ5IGxlbmd0aDsKLQotICAgIGlmIChpc1g4NigpICYmIGlzMzJCaXQo
KSAmJiAhbGVuZ3RoSXNLbm93bikgewotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZWFs
UmVzdWx0KHRoaXMpOwotICAgICAgICByZXN1bHQuYWRvcHQocmVhbFJlc3VsdCk7Ci0gICAgICAg
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
R1BSID09IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAg
ICAgbGVuZ3RoR1BSID0gR1BSSW5mbzo6cmVnVDE7IC8vIENhbiBiZSBhbnl0aGluZyB3ZSBsaWtl
IGJlY2F1c2UgcmVnaXN0ZXJzIGFyZSBmbHVzaGVkLgotICAgICAgICBzY3JhdGNoMUdQUiA9IEdQ
UkluZm86OnJlZ1QyOwotICAgICAgICBzY3JhdGNoMkdQUiA9IEdQUkluZm86OnJlZ1QzOwotICAg
ICAgICBzdG9yYWdlR1BSID0gR1BSSW5mbzo6cmVnVDQ7Ci0gICAgICAgIHZhbHVlUmVncyA9IEpT
VmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIp
OwotICAgICAgICBsb2FkTGVuZ3RoKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q3JlYXRlRGlyZWN0QXJndW1lbnRzLCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgbGVuZ3RoR1BSLCBt
aW5DYXBhY2l0eSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgIG1faml0Lnhv
clB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzdG9yYWdl
R1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSksIGxlbmd0
aEdQUik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IEEgbW9yZSBlZmZlY3RpdmUg
d2F5IG9mIGRlYWxpbmcgd2l0aCB0aGUgYXJndW1lbnQgY291bnQgYW5kIGNhbGxlZSBpcyB0byBo
YXZlCi0gICAgICAgIC8vIHRoZW0gYmUgZXhwbGljaXQgYXJndW1lbnRzIHRvIHRoaXMgbm9kZS4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjIw
NwotICAgIAotICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFJlc3VsdCh0aGlzKTsKLSAgICAgICAg
cmVzdWx0LmFkb3B0KHJlYWxSZXN1bHQpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFNjcmF0
Y2gxKHRoaXMpOwotICAgICAgICBzY3JhdGNoMS5hZG9wdChyZWFsU2NyYXRjaDEpOwotICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVhbFNjcmF0Y2gyKHRoaXMpOwotICAgICAgICBzY3JhdGNoMi5hZG9w
dChyZWFsU2NyYXRjaDIpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFN0b3JhZ2UodGhpcyk7
Ci0gICAgICAgIHN0b3JhZ2UuYWRvcHQocmVhbFN0b3JhZ2UpOwotICAgICAgICByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7Ci0g
ICAgICAgIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgICAgIGxlbmd0aEdQUiA9
IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotICAg
ICAgICB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3Moc2NyYXRj
aDFHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9
CisgICAgICAgIG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+ZGlyZWN0QXJndW1lbnRzU3Ry
dWN0dXJlKCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGxlbmd0aElzS25vd24pCi0gICAgICAg
ICAgICBrbm93bkxlbmd0aCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVhbExlbmd0aCh0aGlzKTsKLSAgICAgICAgICAgIGxlbmd0aC5h
ZG9wdChyZWFsTGVuZ3RoKTsKLSAgICAgICAgICAgIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsK
KyAgICAvLyBVc2UgYSBkaWZmZXJlbnQgc3RyYXRlZ3kgZm9yIGFsbG9jYXRpbmcgdGhlIG9iamVj
dCBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSBrbm93IGl0cworICAgIC8vIHNpemUgc3RhdGljYWxs
eS4KKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgaWYgKGxlbmd0aElz
S25vd24pIHsKKyAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OworICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8RGlyZWN0QXJndW1l
bnRzPigKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBi
dXR0ZXJmbHksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwKKyAgICAgICAgICAgIHNsb3dQYXRo
LCBEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKHN0ZDo6bWF4KGtub3duTGVuZ3RoLCBt
aW5DYXBhY2l0eSkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbG9hZExlbmd0aCgpOwor
ICAgICAgICBtX2ppdC5zdG9yZTMyKAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGtub3duTGVu
Z3RoKSwKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgRGlyZWN0
QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgdG9vRmV3QXJndW1lbnRzOworICAgICAgICBpZiAobWluQ2FwYWNpdHkp
IHsKKyAgICAgICAgICAgIHRvb0Zld0FyZ3VtZW50cyA9CisgICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoSklUQ29tcGlsZXI6OkJlbG93LCBsZW5ndGhHUFIsIFRydXN0ZWRJbW0zMihtaW5D
YXBhY2l0eSkpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBVc2UgYSBkaWZmZXJl
bnQgc3RyYXRlZ3kgZm9yIGFsbG9jYXRpbmcgdGhlIG9iamVjdCBkZXBlbmRpbmcgb24gd2hldGhl
ciB3ZSBrbm93IGl0cwotICAgICAgICAvLyBzaXplIHN0YXRpY2FsbHkuCi0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICAgICAgaWYgKGxlbmd0aElzS25vd24pIHsK
LSAgICAgICAgICAgIEpJVEFsbG9jYXRvciBzdG9yYWdlQWxsb2NhdG9yID0gSklUQWxsb2NhdG9y
Ojpjb25zdGFudCgKLSAgICAgICAgICAgICAgICB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKAotICAgICAgICAgICAgICAgICAgICBEaXJlY3RB
cmd1bWVudHM6OnN0b3JhZ2VTaXplKHN0ZDo6bWF4KGtub3duTGVuZ3RoLCBtaW5DYXBhY2l0eSkp
LAotICAgICAgICAgICAgICAgICAgICBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cykpOwotICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZShzdG9yYWdlR1BS
LCBzdG9yYWdlQWxsb2NhdG9yLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dQYXRoKTsK
LSAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50czo6
c3RvcmFnZUhlYWRlclNpemUoKSksIHN0b3JhZ2VHUFIpOwotICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMigKLSAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoa25vd25MZW5ndGgpLAotICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIERpcmVjdEFyZ3VtZW50
czo6b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdG9vRmV3QXJndW1lbnRzOwotICAgICAgICAgICAgaWYg
KG1pbkNhcGFjaXR5KSB7Ci0gICAgICAgICAgICAgICAgdG9vRmV3QXJndW1lbnRzID0KLSAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkJlbG93LCBsZW5ndGhH
UFIsIFRydXN0ZWRJbW0zMihtaW5DYXBhY2l0eSkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9qaXQubHNoaWZ0MzIobGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gxR1BS
KTsKLSAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VIZWFkZXJTaXplKCkpLCBzY3JhdGNoMUdQUik7Ci0gICAgICAgICAgICBpZiAobWlu
Q2FwYWNpdHkpIHsKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwotICAgICAgICAgICAgICAgIHRvb0Zld0FyZ3VtZW50cy5saW5rKCZtX2ppdCk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRz
OjpzdG9yYWdlU2l6ZShtaW5DYXBhY2l0eSkpLCBzY3JhdGNoMUdQUik7Ci0gICAgICAgICAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAg
ICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCgKLSAgICAgICAgICAgICAgICBzdG9y
YWdlR1BSLCB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSwgc2NyYXRjaDFHUFIsIHNj
cmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xvd1BhdGgpOwotICAgICAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlSGVhZGVyU2l6ZSgpKSwg
c3RvcmFnZUdQUik7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAg
IGxlbmd0aEdQUiwKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoSW5TdG9yYWdlKCkpKTsKKyAgICAg
ICAgbV9qaXQubHNoaWZ0MzIobGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gxR1BS
KTsKKyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50czo6c3Rv
cmFnZU9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBpZiAobWluQ2FwYWNpdHkpIHsK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAg
ICAgICAgICB0b29GZXdBcmd1bWVudHMubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6ZShtaW5DYXBh
Y2l0eSkpLCBzY3JhdGNoMUdQUik7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAg
ICAgICAgfQotICAgIAorICAgICAgICAKKyAgICAgICAgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXpl
ZEpTT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCisgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQ
UiwKKyAgICAgICAgICAgIHNsb3dQYXRoKTsKKyAgICAgICAgICAgIAogICAgICAgICBtX2ppdC5z
dG9yZTMyKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG1pbkNhcGFjaXR5KSwKLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zm
c2V0T2ZNaW5DYXBhY2l0eUluU3RvcmFnZSgpKSk7CisgICAgICAgICAgICBsZW5ndGhHUFIsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxl
bmd0aCgpKSk7CisgICAgfQorICAgICAgICAKKyAgICBtX2ppdC5zdG9yZTMyKAorICAgICAgICBU
cnVzdGVkSW1tMzIobWluQ2FwYWNpdHkpLAorICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZNaW5DYXBhY2l0eSgpKSk7CisgICAg
ICAgIAorICAgIG1faml0LnN0b3JlUHRyKAorICAgICAgICBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0
T2ZNYXBwZWRBcmd1bWVudHMoKSkpOworCisgICAgbV9qaXQuc3RvcmVQdHIoCisgICAgICAgIFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgRGly
ZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcigpKSk7CiAg
ICAgCi0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8RGlyZWN0QXJndW1lbnRzPihyZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJH
UFIsIHNsb3dQYXRoKTsKLSAgICAgICAgbV9qaXQubW92ZShzdG9yYWdlR1BSLCBzY3JhdGNoMUdQ
Uik7Ci0gICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1Bv
aXNvbjo6a2V5KCkpLCBzY3JhdGNoMUdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0
Y2gxR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6
b2Zmc2V0T2ZTdG9yYWdlKCkpKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKAot
ICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihudWxscHRyKSwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKTsK
LQotICAgICAgICBtX2ppdC5zdG9yZVB0cigKLSAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgRGlyZWN0QXJndW1lbnRzOjpv
ZmZzZXRPZk1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcigpKSk7Ci0gICAgCi0gICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gZ2VuZXJhdG9yOwotICAgICAgICBpZiAo
bGVuZ3RoSXNLbm93bikgewotICAgICAgICAgICAgZ2VuZXJhdG9yID0gc3RkOjptYWtlX3VuaXF1
ZTxDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzV2l0aEtub3duTGVuZ3RoU2xvd1BhdGhHZW5lcmF0
b3I+KAotICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCByZXN1bHRHUFIsIHN0cnVjdHVy
ZSwga25vd25MZW5ndGgsIHN0b3JhZ2VHUFIsIG1pbkNhcGFjaXR5KTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGdlbmVyYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbENyZWF0ZURp
cmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yPigKLSAgICAgICAgICAgICAgICBzbG93UGF0
aCwgdGhpcywgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIGxlbmd0aEdQUiwgc3RvcmFnZUdQUiwgbWlu
Q2FwYWNpdHkpOwotICAgICAgICB9CisgICAgaWYgKGxlbmd0aElzS25vd24pIHsKKyAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAg
ICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywg
cmVzdWx0R1BSLCBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAga25vd25MZW5ndGgsIG1pbkNh
cGFjaXR5KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBzdGQ6Om1h
a2VfdW5pcXVlPENhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcj4oCisg
ICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIGxlbmd0aEdQ
UiwgbWluQ2FwYWNpdHkpOwogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKGdl
bmVyYXRvcikpOwogICAgIH0KLSAgICAKKyAgICAgICAgCiAgICAgaWYgKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoCkBAIC03MjE5LDcgKzcxNjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ3JlYXRlRGlyZWN0CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGQ6Om1h
eChrbm93bkxlbmd0aCwgbWluQ2FwYWNpdHkpOyArK2kpIHsKICAgICAgICAgICAgIG1faml0Lmxv
YWRWYWx1ZShKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGFydCArIGkpLCB2YWx1ZVJlZ3MpOwog
ICAgICAgICAgICAgbV9qaXQuc3RvcmVWYWx1ZSgKLSAgICAgICAgICAgICAgICB2YWx1ZVJlZ3Ms
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIGkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkpOworICAgICAgICAgICAgICAgIHZhbHVlUmVncywgSklUQ29tcGlsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mU2xvdChpKSkpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZTsKQEAg
LTcyNDAsMTMgKzcxODEsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURp
cmVjdAogICAgICAgICBtX2ppdC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgdmFsdWVSZWdzLAog
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICBzdG9y
YWdlR1BSLCBsZW5ndGhHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0R1BSLCBsZW5ndGhHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LAorICAg
ICAgICAgICAgICAgIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSk7CiAgICAgICAg
IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbGVuZ3RoR1BSKS5s
aW5rVG8obG9vcCwgJm1faml0KTsKICAgICAgICAgaWYgKGRvbmUuaXNTZXQoKSkKICAgICAgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIH0KLSAgICAKLSAgICBtX2ppdC5tdXRhdG9yRmVu
Y2Uodm0pOworICAgICAgICAKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwog
ICAgICAgICAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkBAIC03MjU5LDkg
KzcyMDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RnJvbUFyZ3VtCiAgICAg
R1BSUmVnIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICAKLSAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0
b3JhZ2UoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICBtX2ppdC54b3JQdHIoVHJ1
c3RlZEltbVB0cihEaXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSwgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCkpOwotICAgIG1faml0LmxvYWRWYWx1ZShKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZS0+Y2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKS5vZmZz
ZXQoKSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0UmVncyk7CisgICAg
bV9qaXQubG9hZFZhbHVlKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ3VtZW50c0dQUiwgRGlyZWN0
QXJndW1lbnRzOjpvZmZzZXRPZlNsb3Qobm9kZS0+Y2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKS5v
ZmZzZXQoKSkpLCByZXN1bHRSZWdzKTsKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOwogfQogCkBAIC03MjY5LDE1ICs3MjA5LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRUb0FyZ3VtZW4KIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1bWVudHMo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKLSAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICAKICAg
ICBHUFJSZWcgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOwotICAgIEdQUlJlZyBzdG9y
YWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1
ZS5qc1ZhbHVlUmVncygpOwogICAgIAotICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoYXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwg
c3RvcmFnZUdQUik7Ci0gICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1l
bnRzUG9pc29uOjprZXkoKSksIHN0b3JhZ2VHUFIpOwotICAgIG1faml0LnN0b3JlVmFsdWUodmFs
dWVSZWdzLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBub2RlLT5jYXB0dXJlZEFy
Z3VtZW50c09mZnNldCgpLm9mZnNldCgpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
KTsKKyAgICBtX2ppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YXJndW1lbnRzR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mU2xvdChub2RlLT5jYXB0dXJl
ZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpKSkpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjMwMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDEyICs1MSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8o
QnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgp
KSBcCiAgICAgbWFjcm8oQ2FsbEZyYW1lX2NhbGxlckZyYW1lLCBDYWxsRnJhbWU6OmNhbGxlckZy
YW1lT2Zmc2V0KCkpIFwKICAgICBtYWNybyhDbGFzc0luZm9fcGFyZW50Q2xhc3MsIENsYXNzSW5m
bzo6b2Zmc2V0T2ZQYXJlbnRDbGFzcygpKSBcCi0gICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX1N0
b3JhZ2VfbGVuZ3RoLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoSW5TdG9yYWdlKCkp
IFwKLSAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9taW5DYXBhY2l0eSwgRGlyZWN0
QXJndW1lbnRzOjpvZmZzZXRPZk1pbkNhcGFjaXR5SW5TdG9yYWdlKCkpIFwKICAgICBtYWNybyhE
aXJlY3RBcmd1bWVudHNfY2FsbGVlLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mQ2FsbGVlKCkp
IFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfbGVuZ3RoLCBEaXJlY3RBcmd1bWVudHM6Om9m
ZnNldE9mTGVuZ3RoKCkpIFwKKyAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfbWluQ2FwYWNpdHks
IERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZNaW5DYXBhY2l0eSgpKSBcCiAgICAgbWFjcm8oRGly
ZWN0QXJndW1lbnRzX21hcHBlZEFyZ3VtZW50cywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1h
cHBlZEFyZ3VtZW50cygpKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvciwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1vZGlmaWVkQXJndW1l
bnRzRGVzY3JpcHRvcigpKSBcCi0gICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERp
cmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpIFwKICAgICBtYWNybyhHZXR0ZXJTZXR0
ZXJfZ2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpIFwKICAgICBtYWNybyhH
ZXR0ZXJTZXR0ZXJfc2V0dGVyLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpIFwKICAg
ICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19sZW5ndGgsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZkxlbmd0aCgpKSBcCkBAIC0xMzMsNyArMTMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8p
IFwKICAgICBtYWNybyhBcnJheVN0b3JhZ2VfdmVjdG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgXAogICAgIG1hY3JvKENvbXBs
ZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNl
dE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKEFsbG9jYXRvcikpIFwKLSAgICBtYWNy
byhEaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9zdG9yYWdlLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSBcCisgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8o
SlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMs
IDAsIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXAogICAgIG1hY3JvKEpTUm9wZVN0
cmluZ19maWJlcnMsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcnMoKSwgc2l6ZW9mKFdyaXRl
QmFycmllcjxKU1N0cmluZz4pKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMzAyMjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NzQs
MTAgKzM2NzQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAg
ICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAg
ICAgICBtX291dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVj
dEFyZ3VtZW50c19tYXBwZWRBcmd1bWVudHMpKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFn
ZSA9IG1fb3V0LmJpdFhvcigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UpLAotICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5
KCkpKTsKLSAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3Jh
Z2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX1N0b3JhZ2VfbGVuZ3RoKSk7CisgICAgICAgICAg
ICBzZXRJbnQzMihtX291dC5sb2FkMzJOb25OZWdhdGl2ZShhcmd1bWVudHMsIG1faGVhcHMuRGly
ZWN0QXJndW1lbnRzX2xlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTM4NDQsMTYgKzM4NDEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICAg
ICAgbV9vdXQubm90TnVsbChtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1l
bnRzX21hcHBlZEFyZ3VtZW50cykpKTsKIAotICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBt
X291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UpOwotICAg
ICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmJpdFhvcihzdG9yYWdlLCBtX291dC5jb25zdEludFB0
cihEaXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hl
YXBzLkRpcmVjdEFyZ3VtZW50c19TdG9yYWdlX2xlbmd0aCk7CisgICAgICAgICAgICBMVmFsdWUg
bGVuZ3RoID0gbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1
bWVudHNfbGVuZ3RoKTsKICAgICAgICAgICAgIGF1dG8gaXNPdXRPZkJvdW5kcyA9IG1fb3V0LmFi
b3ZlT3JFcXVhbChpbmRleCwgbGVuZ3RoKTsKICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5
TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdXRPZkJv
dW5kcywgbm9WYWx1ZSgpLCBudWxscHRyLCBpc091dE9mQm91bmRzKTsKICAgICAgICAgICAgICAg
ICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAg
ICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9zdG9yYWdlLCBzdG9yYWdlLCBt
X291dC56ZXJvRXh0UHRyKGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShwcmVj
aXNlSW5kZXhNYXNrMzIobV9vdXQubG9hZDY0KGFkZHJlc3MpLCBpbmRleCwgbGVuZ3RoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2Us
IG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LmxvYWQ2NChhZGRyZXNzKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogCkBAIC0zODY1LDEwICszODU5LDEwIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5Cb3VuZHMsIHNsb3dDYXNlKTsK
ICAgICAgICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAg
ICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX1N0b3JhZ2Vfc3RvcmFnZSwgc3Rv
cmFnZSwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLAor
ICAgICAgICAgICAgICAgIGJhc2UsCiAgICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dChpbmRl
eCwgcG9pbnRlclR5cGUoKSkpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICBwcmVjaXNlSW5kZXhNYXNrMzIobV9v
dXQubG9hZDY0KGFkZHJlc3MpLCBpbmRleCwgbGVuZ3RoKSk7CisgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ2NChhZGRyZXNzKSk7
CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwpAQCAtNTE4MSwzOSArNTE3NSwy
OSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGxlbmd0aCA9
IGdldEFyZ3VtZW50c0xlbmd0aCgpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGZhc3RTdG9y
YWdlOwogICAgICAgICBMVmFsdWUgZmFzdE9iamVjdDsKICAgICAgICAgaWYgKGxlbmd0aC5pc0tu
b3duKSB7Ci0gICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gbV9vdXQuY29uc3RJbnQzMigK
LSAgICAgICAgICAgICAgICB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRvckZvck5vblZpcnR1YWwoCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdEFyZ3VtZW50czo6
c3RvcmFnZVNpemUoc3RkOjptYXgobGVuZ3RoLmtub3duLCBtaW5DYXBhY2l0eSkpLAotICAgICAg
ICAgICAgICAgICAgICBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cykub2Zmc2V0
KCkpOwotCi0gICAgICAgICAgICBmYXN0U3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2Nh
dG9yLCBzbG93UGF0aCk7CisgICAgICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8
RGlyZWN0QXJndW1lbnRzPigKKyAgICAgICAgICAgICAgICBEaXJlY3RBcmd1bWVudHM6OmFsbG9j
YXRpb25TaXplKHN0ZDo6bWF4KGxlbmd0aC5rbm93biwgbWluQ2FwYWNpdHkpKSwgc3RydWN0dXJl
LAorICAgICAgICAgICAgICAgIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIExWYWx1ZSBzaXplID0gbV9vdXQuYWRkKAogICAgICAgICAg
ICAgICAgIG1fb3V0LnNobChsZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMykpLAotICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlSGVh
ZGVyU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1
bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzaXpl
ID0gbV9vdXQuc2VsZWN0KAogICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChsZW5n
dGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobWluQ2FwYWNpdHkpKSwKLSAgICAgICAgICAgICAg
ICBzaXplLCBtX291dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZVNpemUobWlu
Q2FwYWNpdHkpKSk7Ci0gICAgICAgIAotICAgICAgICAgICAgZmFzdFN0b3JhZ2UgPSBhbGxvY2F0
ZVZhcmlhYmxlU2l6ZWRIZWFwQ2VsbCgKLSAgICAgICAgICAgICAgICB2bSgpLmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLCBtX291dC56ZXJvRXh0UHRyKHNpemUpLCBzbG93UGF0aCk7Cisg
ICAgICAgICAgICAgICAgc2l6ZSwgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFs
bG9jYXRpb25TaXplKG1pbkNhcGFjaXR5KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBm
YXN0T2JqZWN0ID0gYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4o
CisgICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0cihzaXplKSwgc3RydWN0dXJlLCBtX291
dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZh
c3RTdG9yYWdlID0gbV9vdXQuYWRkKGZhc3RTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VIZWFkZXJTaXplKCkpKTsKLSAgICAgICAgbV9vdXQuc3RvcmUz
MihsZW5ndGgudmFsdWUsIGZhc3RTdG9yYWdlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19TdG9y
YWdlX2xlbmd0aCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtaW5D
YXBhY2l0eSksIGZhc3RTdG9yYWdlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19TdG9yYWdlX21p
bkNhcGFjaXR5KTsKLSAgICAgICAgCi0gICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZU9iamVj
dDxEaXJlY3RBcmd1bWVudHM+KHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgp
OwotIAotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5iaXRYb3IoZmFzdFN0b3JhZ2UsIG1f
b3V0LmNvbnN0SW50UHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKSwgZmFzdE9iamVj
dCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSk7CisgICAgICAgIG1fb3V0LnN0b3Jl
MzIobGVuZ3RoLnZhbHVlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5n
dGgpOworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobWluQ2FwYWNpdHkp
LCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19taW5DYXBhY2l0eSk7CiAgICAg
ICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIGZhc3RPYmplY3QsIG1faGVhcHMu
RGlyZWN0QXJndW1lbnRzX21hcHBlZEFyZ3VtZW50cyk7CiAgICAgICAgIG1fb3V0LnN0b3JlUHRy
KG1fb3V0LmludFB0clplcm8sIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX21v
ZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik7CiAgICAgICAgIAotICAgICAgICBWYWx1ZUZyb21C
bG9jayBmYXN0U3RvcmFnZUFuY2hvciA9IG1fb3V0LmFuY2hvcihmYXN0U3RvcmFnZSk7CiAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdE9iamVjdCk7
CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC01MjI3LDE0
ICs1MjExLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobWluQ2FwYWNpdHkpKTsKICAgICAgICAgICAgIH0sIGxlbmd0aC52YWx1ZSk7
CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJl
c3VsdCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dTdG9yYWdlID0gbV9vdXQuYW5jaG9y
KAotICAgICAgICAgICAgbV9vdXQuYml0WG9yKAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQ
dHIoY2FsbFJlc3VsdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSksCi0gICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSkp
KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBz
dG9yYWdlID0gbV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGZhc3RTdG9yYWdlQW5jaG9yLCBzbG93
U3RvcmFnZSk7CiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkocG9pbnRlclR5cGUo
KSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIoZ2V0
Q3VycmVudENhbGxlZSgpLCByZXN1bHQsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2NhbGxlZSk7
CkBAIC01MjQ0LDcgKzUyMjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN0ZDo6bWF4KGxlbmd0aC5rbm93biwgbWluQ2FwYWNpdHkpOyArK2kpIHsK
ICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAogICAgICAgICAgICAgICAgICAgICBtX291
dC5sb2FkNjQoYWRkcmVzc0ZvcihzdGFydCArIGkpKSwKLSAgICAgICAgICAgICAgICAgICAgc3Rv
cmFnZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfU3RvcmFnZV9zdG9yYWdlW2ldKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW2ld
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIExWYWx1ZSBz
dGFja0Jhc2UgPSBnZXRBcmd1bWVudHNTdGFydCgpOwpAQCAtNTI3Miw3ICs1MjUxLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnN1YihwcmV2aW91c0luZGV4
LCBtX291dC5pbnRQdHJPbmUpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKICAgICAgICAg
ICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCBz
dGFja0Jhc2UsIGluZGV4KSksCi0gICAgICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1faGVh
cHMuRGlyZWN0QXJndW1lbnRzX1N0b3JhZ2Vfc3RvcmFnZSwgc3RvcmFnZSwgaW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3Rv
cmFnZSwgcmVzdWx0LCBpbmRleCkpOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmV4dElu
ZGV4ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5n
VG9QaGkocHJldmlvdXNJbmRleCwgbmV4dEluZGV4KTsKICAgICAgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC5pc051bGwoaW5kZXgpLCB1bnN1cmUoZW5kKSwgdW5zdXJlKGxvb3ApKTsKQEAgLTY3
MjgsMjMgKzY3MDcsMTggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRGcm9t
QXJndW1lbnRzKCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQuYml0WG9y
KAotICAgICAgICAgICAgbV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBt
X2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKICAgICAgICAgc2V0SlNWYWx1
ZSgKICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCgKLSAgICAgICAgICAgICAgICBzdG9yYWdlLAot
ICAgICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX1N0b3JhZ2Vfc3RvcmFnZVtt
X25vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCldKSk7CisgICAgICAgICAg
ICAgICAgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAgICBtX2hlYXBz
LkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW21fbm9kZS0+Y2FwdHVyZWRBcmd1bWVudHNPZmZzZXQo
KS5vZmZzZXQoKV0pKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUHV0VG9Bcmd1bWVu
dHMoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5iaXRYb3IoCi0gICAg
ICAgICAgICBtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMu
RGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIo
RGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSkpOwogICAgICAgICBtX291dC5zdG9yZTY0KAot
ICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKSwgc3RvcmFnZSwKLSAgICAg
ICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX1N0b3JhZ2Vfc3RvcmFnZVttX25vZGUtPmNh
cHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCldKTsKKyAgICAgICAgICAgIGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDIoKSksCisgICAgICAgICAgICBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpLAorICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZVttX25vZGUt
PmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCldKTsKICAgICB9CiAKICAgICB2b2lk
IGNvbXBpbGVHZXRBcmd1bWVudCgpCkBAIC0xMTg3NCw3ICsxMTg0OCw3IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKGNlbGwpOwogICAg
ICAgICAgICAgTFZhbHVlIHBvaXNvbmVkQ2xhc3NJbmZvID0gbV9vdXQubG9hZFB0cihzdHJ1Y3R1
cmUsIG1faGVhcHMuU3RydWN0dXJlX2NsYXNzSW5mbyk7Ci0gICAgICAgICAgICBMVmFsdWUgY2xh
c3NJbmZvID0gbV9vdXQuYml0WG9yKHBvaXNvbmVkQ2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0
cihHbG9iYWxEYXRhUG9pc29uOjprZXkoKSkpOworICAgICAgICAgICAgTFZhbHVlIGNsYXNzSW5m
byA9IG1fb3V0LmJpdFhvcihwb2lzb25lZENsYXNzSW5mbywgbV9vdXQuY29uc3RJbnQ2NChHbG9i
YWxEYXRhUG9pc29uOjprZXkoKSkpOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3RoZXJB
dFN0YXJ0ID0gbV9vdXQuYW5jaG9yKGNsYXNzSW5mbyk7CiAgICAgICAgICAgICBtX291dC5qdW1w
KGxvb3ApOwogCkBAIC0xMjY0MywxMiArMTI2MTcsNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gYWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7CiAgICAgfQog
ICAgIAotICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRIZWFwQ2VsbChDb21wbGV0ZVN1
YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQotICAg
IHsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoc3Vic3BhY2Us
IHNpemUsIHNsb3dQYXRoKTsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlSGVhcENlbGwoYWxsb2Nh
dG9yLCBzbG93UGF0aCk7Ci0gICAgfQotICAgIAogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5nZXQo
KS0+aW5saW5lQ2FwYWNpdHkoKSk7CkBAIC0xNTU5OSw2ICsxNTU2NywzMiBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gcHJlY2lzZUluZGV4TWFzazY0KHZhbHVlLCBtX291dC56ZXJvRXh0KGlu
ZGV4LCBJbnQ2NCksIG1fb3V0Lnplcm9FeHQobGltaXQsIEludDY0KSk7CiAgICAgfQogICAgIAor
ICAgIExWYWx1ZSBkeW5hbWljUG9pc29uKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHBvaXNvbikKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX291dC5hZGQoCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAg
ICAgICAgIG1fb3V0LnNobCgKKyAgICAgICAgICAgICAgICBtX291dC56ZXJvRXh0KHBvaXNvbiwg
cG9pbnRlclR5cGUoKSksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMig0MCkpKTsK
KyAgICB9CisgICAgCisgICAgTFZhbHVlIGR5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUoTFZhbHVl
IHZhbHVlLCBMVmFsdWUgYWN0dWFsVHlwZSwgSlNUeXBlIGV4cGVjdGVkVHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBkeW5hbWljUG9pc29uKAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAg
ICAgICBtX291dC5iaXRYb3IoCisgICAgICAgICAgICAgICAgbV9vdXQub3BhcXVlKGFjdHVhbFR5
cGUpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZXhwZWN0ZWRUeXBlKSkpOwor
ICAgIH0KKyAgICAKKyAgICBMVmFsdWUgZHluYW1pY1BvaXNvbk9uVHlwZShMVmFsdWUgdmFsdWUs
IEpTVHlwZSBleHBlY3RlZFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gZHluYW1pY1BvaXNv
bk9uTG9hZGVkVHlwZSgKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgbV9vdXQubG9h
ZDhaZXJvRXh0MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisgICAgICAg
ICAgICBleHBlY3RlZFR5cGUpOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgTFZhbHVlIHZtQ2FsbChMVHlwZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24sIEFyZ3Mm
Ji4uLiBhcmdzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjMwMjI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwNyw5ICsxMTA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
YXJndW1lbnRzKElucwogICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CiAgICAgCiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2Uo
KSksIHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlZ1QxKTsKLSAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFBheWxv
YWRPZmZzZXQpLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSArIFRhZ09mZnNldCksIHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlZ1QwKTsKICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTEx
MjMsMTAgKzExMjIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKEluc3Ry
CiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgCiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSks
IHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QyKTsKLSAgICBzdG9yZTMy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgaW5k
ZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFBheWxvYWRPZmZzZXQpKTsKKyAg
ICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZz
ZXQpKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KyBQYXlsb2FkT2Zmc2V0KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9u
IDIzMDIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg3LDkgKzEwODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9hcmd1bWVudHMoSW5zCiAgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRz
OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICB4b3JQdHIoVHJ1c3RlZEltbVB0cihE
aXJlY3RBcmd1bWVudHNQb2lzb246OmtleSgpKSwgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNz
KHJlZ1QwLCBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwor
ICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7CiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KQEAgLTExMDIsOSArMTEwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1
bWVudHMoSW5zdHIKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywg
cmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkp
LCByZWdUMCk7Ci0gICAgeG9yUHRyKFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29u
OjprZXkoKSksIHJlZ1QwKTsKLSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBpbmRl
eCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgc3RvcmU2NChyZWdUMSwg
QWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVy
KGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KQEAgLTE0MDQsMTYgKzE0
MDAsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREaXJlY3RBcmd1bWVudHNHZQogICAgIGxv
YWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gp
OwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1
c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKICAgICAKLSAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHNjcmF0Y2gpOwot
ICAgIHhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBz
Y3JhdGNoKTsKLSAgICAKLSAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoLCBEaXJlY3RBcmd1bWVu
dHM6Om9mZnNldE9mTGVuZ3RoSW5TdG9yYWdlKCkpLCBzY3JhdGNoMik7CisgICAgbG9hZDMyKEFk
ZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaDIp
OwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwg
c2NyYXRjaDIpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoTm9uWmVybywg
QWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkp
KSk7CiAgICAgCi0gICAgZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIocHJvcGVydHksIHNj
cmF0Y2gyLCBzY3JhdGNoMik7Ci0gICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3JhdGNoLCBwcm9w
ZXJ0eSwgVGltZXNFaWdodCksIHJlc3VsdCk7Ci0gICAgYW5kUHRyKHNjcmF0Y2gyLCByZXN1bHQu
cGF5bG9hZEdQUigpKTsKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBU
aW1lc0VpZ2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7CiAg
ICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZp
c2lvbiAyMzAyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjUzMSw5ICsyNTMxLDggQEAgX2xs
aW50X29wX2dldF9mcm9tX2FyZ3VtZW50czoKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwg
dDApCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XSwgdDAKICAgICBsb2FkaSAx
MltQQ10sIHQxCi0gICAgbG9hZHAgRGlyZWN0QXJndW1lbnRzOjptX3N0b3JhZ2VbdDBdLCB0MAot
ICAgIGxvYWRpIFRhZ09mZnNldFt0MCwgdDEsIDhdLCB0MgotICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXRbdDAsIHQxLCA4XSwgdDMKKyAgICBsb2FkaSBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSArIFRh
Z09mZnNldFt0MCwgdDEsIDhdLCB0MgorICAgIGxvYWRpIERpcmVjdEFyZ3VtZW50c19zdG9yYWdl
ICsgUGF5bG9hZE9mZnNldFt0MCwgdDEsIDhdLCB0MwogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
bigxLCB0MSkKICAgICB2YWx1ZVByb2ZpbGUodDIsIHQzLCAxNiwgdDApCiAgICAgc3RvcmVpIHQy
LCBUYWdPZmZzZXRbY2ZyLCB0MSwgOF0KQEAgLTI1NDgsMTAgKzI1NDcsOSBAQCBfbGxpbnRfb3Bf
cHV0X3RvX2FyZ3VtZW50czoKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0
MAogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHQxLCB0MiwgdDMpCi0gICAgbG9hZHAgRGlyZWN0QXJndW1lbnRzOjptX3N0b3JhZ2Vb
dDBdLCB0MAogICAgIGxvYWRpIDhbUENdLCB0MQotICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W3Qw
LCB0MSwgOF0KLSAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbdDAsIHQxLCA4XQorICAgIHN0
b3JlaSB0MiwgRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UgKyBUYWdPZmZzZXRbdDAsIHQxLCA4XQor
ICAgIHN0b3JlaSB0MywgRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UgKyBQYXlsb2FkT2Zmc2V0W3Qw
LCB0MSwgOF0KICAgICBkaXNwYXRjaCg0KQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAy
MzAyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjU2Miw5ICsyNTYyLDcgQEAgX2xsaW50X29wX2dl
dF9mcm9tX2FyZ3VtZW50czoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZFZhcmlhYmxl
KDIsIHQwKQogICAgIGxvYWRpIDI0W1BCLCBQQywgOF0sIHQxCi0gICAgbG9hZHAgRGlyZWN0QXJn
dW1lbnRzOjptX3N0b3JhZ2VbdDBdLCB0MAotICAgIHVucG9pc29uKF9nX0RpcmVjdEFyZ3VtZW50
c1BvaXNvbiwgdDAsIHQzKQotICAgIGxvYWRxIFt0MCwgdDEsIDhdLCB0MAorICAgIGxvYWRxIERp
cmVjdEFyZ3VtZW50c19zdG9yYWdlW3QwLCB0MSwgOF0sIHQwCiAgICAgdmFsdWVQcm9maWxlKHQw
LCA0LCB0MSkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDEpCiAgICAgc3RvcmVxIHQw
LCBbY2ZyLCB0MSwgOF0KQEAgLTI1NzcsOSArMjU3NSw3IEBAIF9sbGludF9vcF9wdXRfdG9fYXJn
dW1lbnRzOgogICAgIGxvYWRpIDE2W1BCLCBQQywgOF0sIHQxCiAgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDMsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDMsIHQyKQotICAgIGxv
YWRwIERpcmVjdEFyZ3VtZW50czo6bV9zdG9yYWdlW3QwXSwgdDAKLSAgICB1bnBvaXNvbihfZ19E
aXJlY3RBcmd1bWVudHNQb2lzb24sIHQwLCB0MykKLSAgICBzdG9yZXEgdDIsIFt0MCwgdDEsIDhd
CisgICAgc3RvcmVxIHQyLCBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZVt0MCwgdDEsIDhdCiAgICAg
d3JpdGVCYXJyaWVyT25PcGVyYW5kcygxLCAzKQogICAgIGRpc3BhdGNoKGNvbnN0ZXhwciBvcF9w
dXRfdG9fYXJndW1lbnRzX2xlbmd0aCkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjMwMjI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAgZW5kCiBjb25zdCBTbG90U2l6ZSA9IDgK
IAogY29uc3QgSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzID0gKHNpemVvZiBKU0xleGlj
YWxFbnZpcm9ubWVudCArIFNsb3RTaXplIC0gMSkgJiB+KFNsb3RTaXplIC0gMSkKK2NvbnN0IERp
cmVjdEFyZ3VtZW50c19zdG9yYWdlID0gKHNpemVvZiBEaXJlY3RBcmd1bWVudHMgKyBTbG90U2l6
ZSAtIDEpICYgfihTbG90U2l6ZSAtIDEpCiAKIGNvbnN0IFN0YWNrQWxpZ25tZW50ID0gMTYKIGNv
bnN0IFN0YWNrQWxpZ25tZW50U2xvdHMgPSAyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDIzMDIyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDI3ICszNiwyMiBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBEaXJlY3RBcmd1bWVudHM6OnNfaW5mbyA9
IHsgIkFyZ3VtZW50cyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoRGlyZWN0QXJndW1lbnRzKSB9OwogCi1EaXJlY3RBcmd1bWVudHM6OkRpcmVj
dEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHN0b3JhZ2UpCitEaXJlY3RBcmd1bWVudHM6OkRpcmVjdEFyZ3VtZW50cyhWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGNhcGFjaXR5
KQogICAgIDogR2VuZXJpY0FyZ3VtZW50cyh2bSwgc3RydWN0dXJlKQotICAgICwgbV9zdG9yYWdl
KHZtLCB0aGlzLCBzdG9yYWdlKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9taW5D
YXBhY2l0eShjYXBhY2l0eSkKIHsKICAgICAvLyBXaGVuIHdlIGNvbnN0cnVjdCB0aGUgb2JqZWN0
IGZyb20gQysrIGNvZGUsIHdlIGV4cGVjdCB0aGUgY2FwYWNpdHkgdG8gYmUgYXQgbGVhc3QgYXMg
bGFyZ2UgYXMKICAgICAvLyBsZW5ndGguIEpJVC1hbGxvY2F0ZWQgRGlyZWN0QXJndW1lbnRzIG9i
amVjdHMgcGxheSBldmlsIHRyaWNrcywgdGhvdWdoLgotICAgIEFTU0VSVChzdG9yYWdlSGVhZGVy
KHN0b3JhZ2UpLm1pbkNhcGFjaXR5ID49IHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkubGVuZ3RoKTsK
KyAgICBBU1NFUlQoY2FwYWNpdHkgPj0gbGVuZ3RoKTsKIH0KIAogRGlyZWN0QXJndW1lbnRzKiBE
aXJlY3RBcmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCiAgICAgVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBjYXBhY2l0eSkKIHsKLSAg
ICB2b2lkKiByYXdTdG9yYWdlUHRyID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdGVOb25WaXJ0dWFsKAotICAgICAgICB2bSwgc3RvcmFnZVNpemUoY2FwYWNpdHkpLCBu
dWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7Ci0gICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
cmF3U3RvcmFnZVB0cikgKyAxOwotICAgIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkubGVuZ3RoID0g
bGVuZ3RoOwotICAgIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkubWluQ2FwYWNpdHkgPSBjYXBhY2l0
eTsKLSAgICAKICAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9Ci0gICAgICAgIG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPERpcmVjdEFyZ3VtZW50cz4odm0uaGVhcCkpCi0gICAgICAgIERp
cmVjdEFyZ3VtZW50cyh2bSwgc3RydWN0dXJlLCBzdG9yYWdlKTsKKyAgICAgICAgbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8RGlyZWN0QXJndW1lbnRzPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6
ZShjYXBhY2l0eSkpKQorICAgICAgICBEaXJlY3RBcmd1bWVudHModm0sIHN0cnVjdHVyZSwgbGVu
Z3RoLCBjYXBhY2l0eSk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTY0LDEwICs1OSw5IEBAIERpcmVjdEFyZ3VtZW50cyogRGlyZWN0
QXJndW1lbnRzOjpjcmVhdGUKIERpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25l
ZCBjYXBhY2l0eSkKIHsKICAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgbGVuZ3RoLCBjYXBhY2l0eSk7Ci0KLSAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UgPSByZXN1bHQtPnN0b3JhZ2UoKTsKKyAgICAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBjYXBhY2l0eTsgaS0tOykKLSAgICAgICAgc3RvcmFnZVtpXS5jbGVh
cigpOworICAgICAgICByZXN1bHQtPnN0b3JhZ2UoKVtpXS5jbGVhcigpOwogICAgIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkBAIC04MSw5ICs3NSw4IEBAIERpcmVjdEFyZ3VtZW50cyogRGlyZWN0
QXJndW1lbnRzOjpjcmVhdGUKICAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQoCiAgICAgICAgIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRp
cmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKICAgICAKLSAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UgPSByZXN1bHQtPnN0b3JhZ2UoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBjYXBhY2l0eTsgaS0tOykKLSAgICAgICAgc3RvcmFnZVtpXS5zZXQo
dm0sIHJlc3VsdCwgZXhlYy0+Z2V0QXJndW1lbnRVbnNhZmUoaSkpOworICAgICAgICByZXN1bHQt
PnN0b3JhZ2UoKVtpXS5zZXQodm0sIHJlc3VsdCwgZXhlYy0+Z2V0QXJndW1lbnRVbnNhZmUoaSkp
OwogICAgIAogICAgIHJlc3VsdC0+c2V0Q2FsbGVlKHZtLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4
ZWMtPmpzQ2FsbGVlKCkpKTsKICAgICAKQEAgLTk0LDcgKzg3LDcgQEAgc2l6ZV90IERpcmVjdEFy
Z3VtZW50czo6ZXN0aW1hdGVkU2l6ZShKUwogewogICAgIERpcmVjdEFyZ3VtZW50cyogdGhpc09i
amVjdCA9IGpzQ2FzdDxEaXJlY3RBcmd1bWVudHMqPihjZWxsKTsKICAgICBzaXplX3QgbWFwcGVk
QXJndW1lbnRzU2l6ZSA9IHRoaXNPYmplY3QtPm1fbWFwcGVkQXJndW1lbnRzID8gdGhpc09iamVj
dC0+bWFwcGVkQXJndW1lbnRzU2l6ZSgpICogc2l6ZW9mKGJvb2wpIDogMDsKLSAgICBzaXplX3Qg
bW9kaWZpZWRBcmd1bWVudHNTaXplID0gdGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rl
c2NyaXB0b3IgPyB0aGlzT2JqZWN0LT5zdG9yYWdlSGVhZGVyKCkubGVuZ3RoICogc2l6ZW9mKGJv
b2wpIDogMDsKKyAgICBzaXplX3QgbW9kaWZpZWRBcmd1bWVudHNTaXplID0gdGhpc09iamVjdC0+
bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IgPyB0aGlzT2JqZWN0LT5tX2xlbmd0aCAqIHNp
emVvZihib29sKSA6IDA7CiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCkgKyBt
YXBwZWRBcmd1bWVudHNTaXplICsgbW9kaWZpZWRBcmd1bWVudHNTaXplOwogfQogCkBAIC0xMDQs
MTQgKzk3LDExIEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIHZpc2l0b3IubWFy
a0F1eGlsaWFyeSgmdGhpc09iamVjdC0+c3RvcmFnZUhlYWRlcigpKTsKLSAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5zdG9yYWdlKCksIHN0ZDo6bWF4KHRoaXNPYmplY3QtPnN0
b3JhZ2VIZWFkZXIoKS5sZW5ndGgsIHRoaXNPYmplY3QtPnN0b3JhZ2VIZWFkZXIoKS5taW5DYXBh
Y2l0eSkpOwotICAgIAorICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnN0b3Jh
Z2UoKSwgc3RkOjptYXgodGhpc09iamVjdC0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1fbWluQ2Fw
YWNpdHkpKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiAKICAg
ICBpZiAodGhpc09iamVjdC0+bV9tYXBwZWRBcmd1bWVudHMpCiAgICAgICAgIHZpc2l0b3IubWFy
a0F1eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cy5nZXQoKSk7Ci0gICAgCiAg
ICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKHRoaXND
ZWxsLCB2aXNpdG9yKTsKIH0KIApAQCAtMTI0LDE0ICsxMTQsMTQgQEAgdm9pZCBEaXJlY3RBcmd1
bWVudHM6Om92ZXJyaWRlVGhpbmdzKFZNJgogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX21hcHBl
ZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKHN0b3JhZ2VIZWFkZXIoKS5sZW5ndGgpLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fbGVuZ3RoKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdsb2JhbE9iamVjdCgpLT5hcnJh
eVByb3RvVmFsdWVzRnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOwogICAgIAogICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tYXBwZWRBcmd1bWVudHMua2luZCkuYWxsb2NhdGVOb25W
aXJ0dWFsKHZtLCBtYXBwZWRBcmd1bWVudHNTaXplKCksIG51bGxwdHIsIEFsbG9jYXRpb25GYWls
dXJlTW9kZTo6QXNzZXJ0KTsKICAgICBib29sKiBvdmVycmlkZXMgPSBzdGF0aWNfY2FzdDxib29s
Kj4oYmFja2luZ1N0b3JlKTsKICAgICBtX21hcHBlZEFyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG92
ZXJyaWRlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc3RvcmFnZUhlYWRlcigpLmxlbmd0aDsg
aS0tOykKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0tOykKICAgICAgICAgb3Zl
cnJpZGVzW2ldID0gZmFsc2U7CiB9CiAKQEAgLTE1MCwxMiArMTQwLDExIEBAIHZvaWQgRGlyZWN0
QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiAKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5
VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFtX21h
cHBlZEFyZ3VtZW50cykgewotICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHN0ZDo6bWluKGxlbmd0
aCArIG9mZnNldCwgc3RvcmFnZUhlYWRlcigpLmxlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIGxp
bWl0ID0gc3RkOjptaW4obGVuZ3RoICsgb2Zmc2V0LCBtX2xlbmd0aCk7CiAgICAgICAgIHVuc2ln
bmVkIGk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IGZpcnN0RWxlbWVudERlc3Qg
LSBvZmZzZXQ7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSA9IHRoaXMt
PnN0b3JhZ2UoKTsKICAgICAgICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbGltaXQ7ICsraSkKLSAg
ICAgICAgICAgIGV4ZWMtPnIoc3RhcnQgKyBpKSA9IHN0b3JhZ2VbaV0uZ2V0KCk7CisgICAgICAg
ICAgICBleGVjLT5yKHN0YXJ0ICsgaSkgPSBzdG9yYWdlKClbaV0uZ2V0KCk7CiAgICAgICAgIGZv
ciAoOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBleGVjLT5yKHN0YXJ0ICsgaSkgPSBn
ZXQoZXhlYywgaSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2OSw3ICsxNTgsNyBAQCB1bnNpZ25l
ZCBEaXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50CiAgICAgLy8gV2UgYWx3YXlzIGFsbG9j
YXRlIHNvbWV0aGluZzsgaW4gdGhlIHJlbGF0aXZlbHkgdW5jb21tb24gY2FzZSBvZiBvdmVycmlk
aW5nIGFuIGVtcHR5IGFyZ3VtZW50IHdlCiAgICAgLy8gc3RpbGwgYWxsb2NhdGUgc28gdGhhdCBt
X21hcHBlZEFyZ3VtZW50cyBpcyBub24tbnVsbC4gV2UgdXNlIHRoYXQgdG8gaW5kaWNhdGUgdGhh
dCB0aGUgb3RoZXIgcHJvcGVydGllcwogICAgIC8vIChsZW5ndGgsIGV0YykgYXJlIG92ZXJyaWRk
ZW4uCi0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihzdG9yYWdlSGVhZGVy
KCkubGVuZ3RoID8gc3RvcmFnZUhlYWRlcigpLmxlbmd0aCA6IDEpOworICAgIHJldHVybiBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8OD4obV9sZW5ndGggPyBtX2xlbmd0aCA6IDEpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMzAyMjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
MjQgKzMyLDI1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7Ci0gICAgCiAvLyBUaGlzIGlzIGFuIEFyZ3VtZW50cy1jbGFzcyBvYmplY3QgdGhhdCB3
ZSBjcmVhdGUgd2hlbiB5b3Ugc2F5ICJhcmd1bWVudHMiIGluc2lkZSBhIGZ1bmN0aW9uLAogLy8g
YW5kIG5vbmUgb2YgdGhlIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgaW4gdGhlIGZ1bmN0aW9uJ3Mg
YWN0aXZhdGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgY29weSBhbGwKIC8vIG9mIGl0cyBhcmd1bWVu
dHMgaW50byB0aGlzIG9iamVjdCwgYW5kIGFsbCBzdWJzZXF1ZW50IGFjY2Vzc2VzIHRvIHRoZSBh
cmd1bWVudHMgd2lsbCBnbyB0aHJvdWdoCiAvLyB0aGlzIG9iamVjdCB0aGVyZWFmdGVyLiBTcGVj
aWFsIHN1cHBvcnQgaXMgaW4gcGxhY2UgZm9yIG1pc2NoZXZpb3VzIGV2ZW50cyBsaWtlIHRoZSBh
cmd1bWVudHMKIC8vIGJlaW5nIGRlbGV0ZWQgKHNvbWV0aGluZyBsaWtlICJkZWxldGUgYXJndW1l
bnRzWzBdIikgb3IgcmVjb25maWd1cmVkIChicm9hZGx5LCB3ZSBzYXkgZGVsZXRpb25zCiAvLyBh
bmQgcmVjb25maWd1cmF0aW9ucyBtZWFuIHRoYXQgdGhlIHJlc3BlY3RpdmUgYXJndW1lbnQgd2Fz
ICJvdmVycmlkZGVuIikuCisvLworLy8gVG8gc3BlZWQgYWxsb2NhdGlvbiwgdGhpcyBvYmplY3Qg
d2lsbCBob2xkIGFsbCBvZiB0aGUgYXJndW1lbnRzIGluLXBsYWNlLiBUaGUgYXJndW1lbnRzIGFz
IHdlbGwKKy8vIGFzIGEgdGFibGUgb2YgZmxhZ3Mgc2F5aW5nIHdoaWNoIGFyZ3VtZW50cyB3ZXJl
IG92ZXJyaWRkZW4uCiBjbGFzcyBEaXJlY3RBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMgR2VuZXJp
Y0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+IHsKIHByaXZhdGU6Ci0gICAgRGlyZWN0QXJndW1l
bnRzKFZNJiwgU3RydWN0dXJlKiwgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKTsKKyAg
ICBEaXJlY3RBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIGNhcGFjaXR5KTsKICAgICAKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIUNlbGxUeXBlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAg
cmV0dXJuICZ2bS5kaXJlY3RBcmd1bWVudHNTcGFjZTsKKyAgICAgICAgcmV0dXJuICZ2bS5qc1Zh
bHVlR2lnYWNhZ2VDZWxsU3BhY2U7CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlcyBhbiBhcmd1bWVu
dHMgb2JqZWN0IGJ1dCBsZWF2ZXMgaXQgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBkYW5nZXJvdXMg
aWYgd2UgR0MgcmlnaHQKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgogICAgIAogICAgIHVpbnQz
Ml90IGludGVybmFsTGVuZ3RoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdG9yYWdl
SGVhZGVyKCkubGVuZ3RoOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CiAgICAgfQogICAgIAog
ICAgIHVpbnQzMl90IGxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkBAIC04MSwzMyArODIs
MjkgQEAgcHVibGljOgogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLnRvVUludDMyKGV4ZWMpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBz
dG9yYWdlSGVhZGVyKCkubGVuZ3RoOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgaXNNYXBwZWRBcmd1bWVudCh1aW50MzJfdCBpKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIGkgPCBzdG9yYWdlSGVhZGVyKCkubGVuZ3RoICYmICghbV9tYXBwZWRB
cmd1bWVudHMgfHwgIW1fbWFwcGVkQXJndW1lbnRzW2ldKTsKKyAgICAgICAgcmV0dXJuIGkgPCBt
X2xlbmd0aCAmJiAoIW1fbWFwcGVkQXJndW1lbnRzIHx8ICFtX21hcHBlZEFyZ3VtZW50c1tpXSk7
CiAgICAgfQogCiAgICAgYm9vbCBpc01hcHBlZEFyZ3VtZW50SW5ERkcodWludDMyX3QgaSkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpIDwgc3RvcmFnZUhlYWRlcigpLmxlbmd0aCAmJiAh
b3ZlcnJvZGVUaGluZ3MoKTsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAhb3ZlcnJv
ZGVUaGluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1
aW50MzJfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaXNNYXBwZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogc3RvcmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICAgICAgYXV0byogcHRyID0gJnN0
b3JhZ2VbaV07Ci0gICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrUHRyKGksIHN0b3JhZ2VI
ZWFkZXIoc3RvcmFnZSkubGVuZ3RoLCBwdHIpLT5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpcyktPnN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoVk0mIHZtLCB1aW50MzJfdCBpLCBKU1Zh
bHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaXNNYXBwZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
c3RvcmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICAgICAgYXV0byogcHRyID0gJnN0b3JhZ2Vb
aV07Ci0gICAgICAgIHByZWNpc2VJbmRleE1hc2tQdHIoaSwgc3RvcmFnZUhlYWRlcihzdG9yYWdl
KS5sZW5ndGgsIHB0ciktPnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdlKClb
aV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQogICAgIAogICAgIEpTRnVuY3Rpb24qIGNh
bGxlZSgpCkBAIC0xMjMsMTMgKzEyMCw4IEBAIHB1YmxpYzoKICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGFyZ3VtZW50KERpcmVjdEFyZ3VtZW50c09mZnNldCBvZmZzZXQpCiAgICAgewogICAg
ICAgICBBU1NFUlQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04ob2Zmc2V0Lm9mZnNldCgpIDwgc3RkOjptYXgoc3RvcmFnZUhlYWRlcigpLmxlbmd0aCwg
c3RvcmFnZUhlYWRlcigpLm1pbkNhcGFjaXR5KSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogc3RvcmFnZSA9IHRoaXMtPnN0b3JhZ2UoKTsKLSAgICAgICAgYXV0byogcHRyID0gJnN0
b3JhZ2Vbb2Zmc2V0Lm9mZnNldCgpXTsKLSAgICAgICAgcmV0dXJuICpwcmVjaXNlSW5kZXhNYXNr
UHRyKAotICAgICAgICAgICAgb2Zmc2V0Lm9mZnNldCgpLAotICAgICAgICAgICAgc3RkOjptYXgo
c3RvcmFnZUhlYWRlcihzdG9yYWdlKS5sZW5ndGgsIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkubWlu
Q2FwYWNpdHkpLAotICAgICAgICAgICAgcHRyKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04ob2Zmc2V0Lm9mZnNldCgpIDwgc3RkOjptYXgobV9sZW5ndGgsIG1fbWlu
Q2FwYWNpdHkpKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2UoKVtvZmZzZXQub2Zmc2V0KCldOwog
ICAgIH0KICAgICAKICAgICAvLyBNZXRob2RzIGludGVuZGVkIGZvciB1c2UgYnkgdGhlIEdlbmVy
aWNBcmd1bWVudHMgbWl4aW4uCkBAIC0xNDAsMTcgKzEzMiwxNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JJZk5lY2Vzc2FyeShWTSYgdm0pCiAg
ICAgewotICAgICAgICBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OmluaXRNb2Rp
ZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JJZk5lY2Vzc2FyeSh2bSwgc3RvcmFnZUhlYWRlcigpLmxl
bmd0aCk7CisgICAgICAgIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJndW1lbnRzPjo6aW5pdE1v
ZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcklmTmVjZXNzYXJ5KHZtLCBtX2xlbmd0aCk7CiAgICAg
fQogCiAgICAgdm9pZCBzZXRNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihWTSYgdm0sIHVuc2ln
bmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVu
dHM+OjpzZXRNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih2bSwgaW5kZXgsIHN0b3JhZ2VIZWFk
ZXIoKS5sZW5ndGgpOworICAgICAgICBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46
OnNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKHZtLCBpbmRleCwgbV9sZW5ndGgpOwogICAg
IH0KIAogICAgIGJvb2wgaXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRl
eCkKICAgICB7Ci0gICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50
cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIHN0b3JhZ2VIZWFkZXIoKS5s
ZW5ndGgpOworICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+
Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX2xlbmd0aCk7CiAgICAgfQog
CiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKQEAgLTE2
MCw1NSArMTUyLDM4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICAKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKERpcmVjdEFyZ3VtZW50cywgbV9jYWxsZWUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMs
IG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNaW5DYXBhY2l0eSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMsIG1fbWluQ2FwYWNpdHkp
OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1hcHBlZEFyZ3VtZW50cygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMsIG1fbWFwcGVkQXJndW1lbnRzKTsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0
b3IoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGlyZWN0QXJndW1lbnRzLCBtX21vZGlmaWVk
QXJndW1lbnRzRGVzY3JpcHRvcik7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU3Rv
cmFnZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEaXJlY3RBcmd1bWVudHMsIG1fc3RvcmFn
ZSk7IH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RvcmFnZUhlYWRlciwgbGVuZ3RoKSAtIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1p
bkNhcGFjaXR5SW5TdG9yYWdlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0b3JhZ2VIZWFk
ZXIsIG1pbkNhcGFjaXR5KSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAgICAg
Ci0gICAgc3RhdGljIHNpemVfdCBzdG9yYWdlU2l6ZShDaGVja2VkPHNpemVfdD4gY2FwYWNpdHkp
CisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVy
biAoc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiAoY2FwYWNpdHkgKyBzdGF0aWNfY2Fz
dDxzaXplX3Q+KDEpKSkudW5zYWZlR2V0KCk7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+KHNpemVvZihEaXJlY3RB
cmd1bWVudHMpKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHNpemVfdCBzdG9yYWdlSGVhZGVy
U2l6ZSgpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9Ci0gICAgCi0g
ICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShzaXplX3QgaW5saW5lU2l6ZSkKKyAgICBz
dGF0aWMgc2l6ZV90IG9mZnNldE9mU2xvdChDaGVja2VkPHNpemVfdD4gaW5kZXgpCiAgICAgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5saW5lU2l6ZSk7Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoRGlyZWN0QXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIChzdG9yYWdlT2Zmc2V0KCkgKyBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGluZGV4KS51bnNhZmVHZXQoKTsKICAgICB9
CiAgICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
Ci0gICAgCi0gICAgc3RydWN0IFN0b3JhZ2VIZWFkZXIgewotICAgICAgICB1aW50MzJfdCBsZW5n
dGg7IC8vIEFsd2F5cyB0aGUgYWN0dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5k
IG5ldmVyIHdoYXQgd2FzIHN0b3JlZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCi0gICAgICAg
IHVpbnQzMl90IG1pbkNhcGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBkZXRl
cm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1YWwg
Y2FwYWNpdHksIG9yIG1heWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRoaXMg
d2F5IHRvIGJlIGtpbmQgdG8gdGhlIEpJVHMuCi0gICAgfTsKLSAgICAKLSAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHN0b3JhZ2UoKSBjb25zdAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlv
blNpemUoQ2hlY2tlZDxzaXplX3Q+IGNhcGFjaXR5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
c3RvcmFnZS5nZXQoKS51bnBvaXNvbmVkKCk7CisgICAgICAgIHJldHVybiBvZmZzZXRPZlNsb3Qo
Y2FwYWNpdHkpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgU3RvcmFnZUhlYWRlciYgc3RvcmFn
ZUhlYWRlcihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UpCi0gICAgewotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihTdG9yYWdlSGVhZGVyKSA9PSBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSwgIlN0b3JhZ2VIZWFkZXIgbmVlZHMgdG8gYmUgdGhlIHNhbWUgc2l6ZSBhcyBh
IEpTVmFsdWUiKTsKLSAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8U3RvcmFnZUhlYWRlcio+
KHN0b3JhZ2UgLSAxKTsKLSAgICB9Ci0KLSAgICBTdG9yYWdlSGVhZGVyJiBzdG9yYWdlSGVhZGVy
KCkgY29uc3QKK3ByaXZhdGU6CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdG9yYWdlSGVhZGVyKHN0b3JhZ2UoKSk7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSArIHN0b3JhZ2VPZmZzZXQoKSk7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIG1hcHBlZEFyZ3VtZW50c1NpemUoKTsKICAgICAKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5j
dGlvbj4gbV9jYWxsZWU7CisgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIEFsd2F5cyB0aGUgYWN0
dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5kIG5ldmVyIHdoYXQgd2FzIHN0b3Jl
ZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgdWludDMyX3QgbV9taW5DYXBhY2l0eTsg
Ly8gVGhlIG1heCBvZiB0aGlzIGFuZCBsZW5ndGggZGV0ZXJtaW5lcyB0aGUgY2FwYWNpdHkgb2Yg
dGhpcyBvYmplY3QuIEl0IG1heSBiZSB0aGUgYWN0dWFsIGNhcGFjaXR5LCBvciBtYXliZSBzb21l
dGhpbmcgc21hbGxlci4gV2UgYXJyYW5nZSBpdCB0aGlzIHdheSB0byBiZSBraW5kIHRvIHRoZSBK
SVRzLgogICAgIENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPiBtX21h
cHBlZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxs
ZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgotICAgIEF1
eGlsaWFyeUJhcnJpZXI8UG9pc29uZWQ8RGlyZWN0QXJndW1lbnRzUG9pc29uLCBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qPj4gbV9zdG9yYWdlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAkocmV2aXNpb24gMjMw
MjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUG9pc29uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihBcnJheVBy
b3RvdHlwZSkgXAogICAgIHYoQ29kZUJsb2NrKSBcCiAgICAgdihEYXRlSW5zdGFuY2UpIFwKLSAg
ICB2KERpcmVjdEFyZ3VtZW50cykgXAogICAgIHYoR2xvYmFsRGF0YSkgXAogICAgIHYoSklUQ29k
ZSkgXAogICAgIHYoSlNBUElXcmFwcGVyT2JqZWN0KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9u
IDIzMDIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmly
b25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotLy8gVGhpcyBpcyBTcGVjdHJlLXNh
ZmUgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgaXRzIGxlbmd0aCBpbmxpbmUuCiBjbGFzcyBKU0xl
eGljYWxFbnZpcm9ubWVudCA6IHB1YmxpYyBKU1N5bWJvbFRhYmxlT2JqZWN0IHsKICAgICBmcmll
bmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5oCShyZXZpc2lvbiAyMzAyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDYg
QEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8g
YmUgcG9pc29uZWQuCiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxl
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24g
MjMwMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjAsNyArMjYwLDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgICwgYXN5bmNHZW5lcmF0b3JGdW5jdGlvblNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGNlbGxKU1ZhbHVlT09CSGVhcENlbGxUeXBlLmdldCgpLCBKU0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24pCiAgICAgLCBib3VuZEZ1bmN0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgY2VsbEpTVmFsdWVPT0JIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTQm91bmRGdW5jdGlv
bikKICAgICAsIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgY2VsbEpTVmFsdWVPT0JIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24pCi0gICAgLCBkaXJlY3RBcmd1bWVudHNTcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBjZWxsSlNWYWx1ZU9PQkhlYXBDZWxsVHlwZS5nZXQoKSwgRGlyZWN0QXJndW1l
bnRzKQogICAgICwgZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBEaXJlY3RFdmFsRXhlY3V0
YWJsZSkKICAgICAsIGV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2VTcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBjZWxsRGFuZ2Vyb3VzQml0c0hlYXBDZWxsVHlwZS5nZXQoKSwgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZSkKICAgICAsIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEZ1bmN0
aW9uRXhlY3V0YWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNp
b24gMjMwMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ0LDcgKzM0NCw2IEBAIHB1YmxpYzoKICAgICBJc29TdWJzcGFjZSBhc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgYm91bmRGdW5jdGlvblNw
YWNlOwogICAgIElzb1N1YnNwYWNlIGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uU3BhY2U7Ci0g
ICAgSXNvU3Vic3BhY2UgZGlyZWN0QXJndW1lbnRzU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgZGly
ZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBleGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7
Cg==
</data>
<flag name="review"
          id="355565"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>