<?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>200429</bug_id>
          
          <creation_ts>2019-08-04 13:14:58 -0700</creation_ts>
          <short_desc>Mangled WHLSL names don&apos;t need to allocate Strings</short_desc>
          <delta_ts>2019-08-04 22:55:02 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>roninmike8</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1558383</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-04 13:14:58 -0700</bug_when>
    <thetext>Mangled WHLSL names don&apos;t need to allocate Strings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558384</commentid>
    <comment_count>1</comment_count>
      <attachid>375507</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-04 13:23:01 -0700</bug_when>
    <thetext>Created attachment 375507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558385</commentid>
    <comment_count>2</comment_count>
      <attachid>375508</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-04 13:49:07 -0700</bug_when>
    <thetext>Created attachment 375508
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558399</commentid>
    <comment_count>3</comment_count>
      <attachid>375508</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-04 18:15:36 -0700</bug_when>
    <thetext>Comment on attachment 375508
Patch

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

r=me

Just curious: Did you measure any compile time speedup? I like to flip the “dumpPhaseTimes” Boolean to true in WHLSLPrepare and run some shaders to measure compile time changes. I’ll email you the web page I use.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLMangledNames.h:159
&gt; +                return string.is8Bit();

Why not an assert?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558413</commentid>
    <comment_count>4</comment_count>
      <attachid>375508</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-04 20:26:40 -0700</bug_when>
    <thetext>Comment on attachment 375508
Patch

Clearing flags on attachment: 375508

Committed r248266: &lt;https://trac.webkit.org/changeset/248266&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558414</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-04 20:26:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558415</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-04 20:27:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/53927415&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558426</commentid>
    <comment_count>7</comment_count>
    <who name="Mike Ronin">roninmike8</who>
    <bug_when>2019-08-04 22:55:02 -0700</bug_when>
    <thetext>Thanks for the bug and the appropriate fix.
Webroot Geek Squad provides the users of Secureanywhere with the best technical support and assistance for their queries and problems after they Install Webroot from: https://secureanywherewebroot.com/</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375507</attachid>
            <date>2019-08-04 13:23:01 -0700</date>
            <delta_ts>2019-08-04 13:49:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200429-20190804132300.patch</filename>
            <type>text/plain</type>
            <size>75539</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDE5LTA4LTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBNYW5nbGVkIFdITFNMIG5hbWVzIGRv
bid0IG5lZWQgdG8gYWxsb2NhdGUgU3RyaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNDI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmF0aGVyIHRoYW4gc3RvcmluZyBlYWNoIG1hbmdsZWQgbmFt
ZSAodHlwZSwgZW51bWVyYXRpb24sIHN0cnVjdHVyZSwgdmFyaWFibGUgYW5kIGZ1bmN0aW9uKQor
ICAgICAgICBhcyBhIFN0cmluZyBjb25zdHJ1Y3RlZCBvZiB0aGUgZm9ybSBtYWtlU3RyaW5nKCJz
b21lIHByZWZpeCIsIHVuc2lnbmVkIHZhbHVlKSwgbWFuZ2xlZCBuYW1lcworICAgICAgICBhcmUg
bm93IHN0b3JlZCBhcyBzdHJvbmdseSB0eXBlZCB1bnNpZ25lZCBpbnRlZ2VycyAoZWFjaCB3aXRo
IHRoZWlyIG93biBzdHJ1Y3QpLiBCeSBhZGRpbmcgCisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVy
IHNwZWNpYWxpemF0aW9ucyBmb3IgZWFjaCBtYW5nbGVkIG5hbWUgdHlwZSwgd2UgY2FuIGNvbXBs
ZXRlbHkgYXZvaWQgYWxsb2NhdGluZworICAgICAgICBhIFN0cmluZyBhbmQgaW5zdGVhZCB3cml0
ZSBkaXJlY3RseSBpbnRvIHRoZSB2YXJpb3VzIFN0cmluZ0J1aWxkZXJzIGJ1ZmZlcnMuCisKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9s
ZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6RW50cnlQb2ludFNjYWZmb2xkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6aW50ZXJuYWxUeXBlRm9yU2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmJ1aWx0SW5zU2lnbmF0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjptYW5n
bGVkSW5wdXRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VmVydGV4RW50
cnlQb2ludFNjYWZmb2xkaW5nOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNp
Z25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlZlcnRleEVudHJ5UG9p
bnRTY2FmZm9sZGluZzo6cGFjayk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZy
YWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZyYWdtZW50RW50cnlQb2ludFNj
YWZmb2xkaW5nOjpzaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpG
cmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkNvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkNvbXB1dGVFbnRyeVBv
aW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRl
RW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6
OnBhcmFtZXRlclZhcmlhYmxlcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlY2xhcmF0aW9uV3Jp
dGVyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OmFwcGVuZFJpZ2h0VmFsdWVXaXRoTnVsbGFiaWxpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmFwcGVu
ZFJpZ2h0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OmFwcGVuZExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dGFrZUxhc3RWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dGFr
ZUxhc3RWYWx1ZUFuZE51bGxhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp0YWtlTGFzdExlZnRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OmVtaXRMb29wKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVuZGVyRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjpSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OmNyZWF0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkNvbXB1dGVGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OkNvbXB1dGVGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpD
b21wdXRlRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpjcmVhdGVFbnRyeVBvaW50U2NhZmZvbGRp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpzaGFyZWRNZXRhbEZ1bmN0aW9u
cyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldy
aXRlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWFuZ2xl
ZE5hbWVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVk
VmFyaWFibGVOYW1lOjp0b1N0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6Ok1hbmdsZWRUeXBlTmFtZTo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkU3RydWN0dXJlRWxlbWVudE5hbWU6OnRvU3RyaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZEVudW1lcmF0aW9u
TWVtYmVyTmFtZTo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpNYW5nbGVkRnVuY3Rpb25OYW1lOjp0b1N0cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6
Ok1hbmdsZWROYW1lQWRhcHRvcjo6TWFuZ2xlZE5hbWVBZGFwdG9yKToKKyAgICAgICAgKFdURjo6
TWFuZ2xlZE5hbWVBZGFwdG9yOjpsZW5ndGgpOgorICAgICAgICAoV1RGOjpNYW5nbGVkTmFtZUFk
YXB0b3I6OmlzOEJpdCk6CisgICAgICAgIChXVEY6Ok1hbmdsZWROYW1lQWRhcHRvcjo6d3JpdGVU
byk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5h
dGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
d3JpdGVOYXRpdmVGdW5jdGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6QmFzZVR5cGVOYW1lTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6Om1hbmdsZWROYW1lIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OkFy
cmF5VHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlS
ZWZlcmVuY2VUeXBlTmFtZU5vZGU6OkFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVOYW1lTm9kZTo6UG9pbnRlclR5
cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlJlZmVyZW5jZVR5
cGVOYW1lTm9kZTo6UmVmZXJlbmNlVHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6TWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXI6Ok1ldGFsVHlwZURlY2xhcmF0
aW9uV3JpdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjpt
ZXRhbFR5cGVEZWNsYXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpU
eXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6VHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25N
ZW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Om1hbmds
ZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6VHlwZU5hbWVyOjpnZW5lcmF0ZU5leHRUeXBlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmdlbmVyYXRlTmV4
dEVudW1lcmF0aW9uTWVtYmVyTmFtZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmg6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlw
ZWxpbmVNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OnRyeVNldEZ1bmN0aW9ucyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwu
bW06CisgICAgICAgIChXZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorCiAyMDE5LTA4LTA0ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUGluZyBsb2FkcyBzaG91
bGQgbm90IHByZXZlbnQgcGFnZSBjYWNoaW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAkocmV2aXNpb24gMjQ4MjYxKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5j
bHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgIldITFNMTWFuZ2xlZE5hbWVzLmgiCiAjaW5j
bHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzcsOCArMzgsOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBzdHJ1Y3Qg
UmVuZGVyUHJlcGFyZVJlc3VsdCB7CiAgICAgU3RyaW5nIG1ldGFsU291cmNlOwotICAgIFN0cmlu
ZyBtYW5nbGVkVmVydGV4RW50cnlQb2ludE5hbWU7Ci0gICAgU3RyaW5nIG1hbmdsZWRGcmFnbWVu
dEVudHJ5UG9pbnROYW1lOworICAgIE1ldGFsOjpNYW5nbGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRW
ZXJ0ZXhFbnRyeVBvaW50TmFtZTsKKyAgICBNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZSBtYW5n
bGVkRnJhZ21lbnRFbnRyeVBvaW50TmFtZTsKIH07CiBFeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVz
dWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yJik7CiAKQEAgLTUwLDcgKzUxLDcgQEAgc3RydWN0IENvbXB1dGVEaW1lbnNpb25z
IHsKIAogc3RydWN0IENvbXB1dGVQcmVwYXJlUmVzdWx0IHsKICAgICBTdHJpbmcgbWV0YWxTb3Vy
Y2U7Ci0gICAgU3RyaW5nIG1hbmdsZWRFbnRyeVBvaW50TmFtZTsKKyAgICBNZXRhbDo6TWFuZ2xl
ZEZ1bmN0aW9uTmFtZSBtYW5nbGVkRW50cnlQb2ludE5hbWU7CiAgICAgQ29tcHV0ZURpbWVuc2lv
bnMgY29tcHV0ZURpbWVuc2lvbnM7CiB9OwogRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQs
IFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNj
cmlwdG9yJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRp
bmcuY3BwCShyZXZpc2lvbiAyNDgyNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhB
U1Q6OgogICAgIHJldHVybiBtYWtlU3RyaW5nKCJbW3VzZXIodXNlciIsIHN0YWdlSW5PdXRTZW1h
bnRpYy5pbmRleCgpLCAiKV1dIik7CiB9CiAKLUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6RW50cnlQ
b2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRp
b24sIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBv
aW50SXRlbXMmIGVudHJ5UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVz
b3VyY2VNYXAsIExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSkKK0VudHJ5UG9pbnRTY2FmZm9sZGluZzo6RW50cnlQb2ludFNj
YWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIElu
dHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRl
bXMmIGVudHJ5UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VN
YXAsIExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPE1hbmdsZWRWYXJpYWJsZU5hbWUoKT4m
JiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpCiAgICAgOiBtX2Z1bmN0aW9uRGVmaW5pdGlvbihm
dW5jdGlvbkRlZmluaXRpb24pCiAgICAgLCBtX2ludHJpbnNpY3MoaW50cmluc2ljcykKICAgICAs
IG1fdHlwZU5hbWVyKHR5cGVOYW1lcikKQEAgLTE5MiwzOCArMTkyLDM4IEBAIE9wdGlvbmFsPFN0
cmluZz4gRW50cnlQb2ludFNjYWZmb2xkaW5nOjoKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOwogfQogCi1zdGF0aWMgU3RyaW5nIGludGVybmFsVHlwZUZvclNlbWFudGljKGNv
bnN0IEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMpCitzdGF0aWMgU3RyaW5n
VmlldyBpbnRlcm5hbFR5cGVGb3JTZW1hbnRpYyhjb25zdCBBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYg
YnVpbHRJblNlbWFudGljKQogewogICAgIHN3aXRjaCAoYnVpbHRJblNlbWFudGljLnZhcmlhYmxl
KCkpIHsKICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJbnN0YW5j
ZUlEOgotICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAgICAgICAgcmV0dXJuICJ1aW50IjsK
ICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKLSAg
ICAgICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgICAgIHJldHVybiAidWludCI7CiAgICAgY2Fz
ZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlBTaXplOgotICAgICAgICByZXR1cm4g
ImZsb2F0Il9zdHI7CisgICAgICAgIHJldHVybiAiZmxvYXQiOwogICAgIGNhc2UgQVNUOjpCdWls
dEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlBvc2l0aW9uOgotICAgICAgICByZXR1cm4gImZsb2F0
NCJfc3RyOworICAgICAgICByZXR1cm4gImZsb2F0NCI7CiAgICAgY2FzZSBBU1Q6OkJ1aWx0SW5T
ZW1hbnRpYzo6VmFyaWFibGU6OlNWSXNGcm9udEZhY2U6Ci0gICAgICAgIHJldHVybiAiYm9vbCJf
c3RyOworICAgICAgICByZXR1cm4gImJvb2wiOwogICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50
aWM6OlZhcmlhYmxlOjpTVlNhbXBsZUluZGV4OgotICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsK
KyAgICAgICAgcmV0dXJuICJ1aW50IjsKICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpW
YXJpYWJsZTo6U1ZJbm5lckNvdmVyYWdlOgotICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAg
ICAgICAgcmV0dXJuICJ1aW50IjsKICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJp
YWJsZTo6U1ZUYXJnZXQ6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZEZXB0aDoK
LSAgICAgICAgcmV0dXJuICJmbG9hdCJfc3RyOworICAgICAgICByZXR1cm4gImZsb2F0IjsKICAg
ICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZDb3ZlcmFnZToKLSAgICAg
ICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgICAgIHJldHVybiAidWludCI7CiAgICAgY2FzZSBB
U1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKLSAgICAg
ICAgcmV0dXJuICJ1aW50MyJfc3RyOworICAgICAgICByZXR1cm4gInVpbnQzIjsKICAgICBjYXNl
IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cElEOgotICAgICAgICByZXR1
cm4gInVpbnQzIl9zdHI7CisgICAgICAgIHJldHVybiAidWludDMiOwogICAgIGNhc2UgQVNUOjpC
dWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkdyb3VwSW5kZXg6Ci0gICAgICAgIHJldHVybiAi
dWludCJfc3RyOworICAgICAgICByZXR1cm4gInVpbnQiOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IEFTU0VSVChidWlsdEluU2VtYW50aWMudmFyaWFibGUoKSA9PSBBU1Q6OkJ1aWx0SW5TZW1hbnRp
Yzo6VmFyaWFibGU6OlNWR3JvdXBUaHJlYWRJRCk7Ci0gICAgICAgIHJldHVybiAidWludDMiX3N0
cjsKKyAgICAgICAgcmV0dXJuICJ1aW50MyI7CiAgICAgfQogfQogCkBAIC0yNDAsMTAgKzI0MCwx
MSBAQCBPcHRpb25hbDxTdHJpbmc+IEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6CiAgICAgICAgIGF1
dG8mIGl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbbmFtZWRCdWlsdEluLmluZGV4SW5F
bnRyeVBvaW50SXRlbXNdOwogICAgICAgICBhdXRvJiBidWlsdEluU2VtYW50aWMgPSBXVEY6Omdl
dDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKml0ZW0uc2VtYW50aWMpOwogICAgICAgICBhdXRvIGlu
dGVybmFsVHlwZSA9IGludGVybmFsVHlwZUZvclNlbWFudGljKGJ1aWx0SW5TZW1hbnRpYyk7Ci0g
ICAgICAgIGlmIChpbnRlcm5hbFR5cGUuaXNOdWxsKCkpCi0gICAgICAgICAgICBpbnRlcm5hbFR5
cGUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKml0ZW0udW5uYW1lZFR5cGUpOwot
ICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IG5hbWVkQnVpbHRJbi52YXJpYWJsZU5hbWU7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoaW50ZXJuYWxUeXBlLCAnICcsIHZh
cmlhYmxlTmFtZSwgJyAnLCBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhidWlsdEluU2VtYW50aWMpKTsK
KyAgICAgICAgaWYgKCFpbnRlcm5hbFR5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKGludGVybmFsVHlwZSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCppdGVtLnVubmFtZWRUeXBlKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxl
eGlibGVBcHBlbmQoJyAnLCBuYW1lZEJ1aWx0SW4udmFyaWFibGVOYW1lLCAnICcsIGF0dHJpYnV0
ZUZvclNlbWFudGljKGJ1aWx0SW5TZW1hbnRpYykpOwogICAgIH0KICAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOwogfQpAQCAtMjU2LDcgKzI1Nyw3IEBAIFN0cmluZyBFbnRyeVBv
aW50U2NhZmZvbGRpbmc6Om1hbmdsZWRJbnAKICAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24q
IHN0cnVjdHVyZURlZmluaXRpb24gPSBudWxscHRyOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9mdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGlmIChtX2Z1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPm5hbWUoKSA9PSBw
YXRoWzBdKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX3BhcmFtZXRlclZh
cmlhYmxlc1tpXSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKG1f
cGFyYW1ldGVyVmFyaWFibGVzW2ldKTsKICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1f
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsK
ICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewogICAgICAg
ICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlm
eU5vZGUpOwpAQCAtMzU2LDcgKzM1Nyw3IEBAIFN0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6
OnVucGFja1Jlc28KICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCi1W
ZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZyhB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBp
bnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgRW50cnlQb2ludEl0ZW1zJiBlbnRyeVBv
aW50SXRlbXMsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlvdXQm
IGxheW91dCwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUsIEhhc2hNYXA8VmVydGV4QXR0cmlidXRlKiwgc2l6ZV90PiYgbWF0Y2hlZFZlcnRleEF0dHJp
YnV0ZXMpCitWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OlZlcnRleEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRy
aW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgRW50cnlQb2ludEl0ZW1z
JiBlbnRyeVBvaW50SXRlbXMsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFw
LCBMYXlvdXQmIGxheW91dCwgc3RkOjpmdW5jdGlvbjxNYW5nbGVkVmFyaWFibGVOYW1lKCk+JiYg
Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVf
dD4mIG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzKQogICAgIDogRW50cnlQb2ludFNjYWZmb2xkaW5n
KGZ1bmN0aW9uRGVmaW5pdGlvbiwgaW50cmluc2ljcywgdHlwZU5hbWVyLCBlbnRyeVBvaW50SXRl
bXMsIHJlc291cmNlTWFwLCBsYXlvdXQsIFdURk1vdmUoZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KSkKICAgICAsIG1fbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMobWF0Y2hlZFZlcnRleEF0dHJpYnV0
ZXMpCiAgICAgLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lKHR5cGVOYW1lci5nZW5lcmF0ZU5leHRUeXBl
TmFtZSgpKQpAQCAtMzc3LDkgKzM3OCwxMiBAQCBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6
OlZlcnRleEVudHJ5CiAgICAgICAgIGF1dG8mIG91dHB1dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVt
cy5vdXRwdXRzW2ldOwogICAgICAgICBOYW1lZE91dHB1dCBuYW1lZE91dHB1dDsKICAgICAgICAg
bmFtZWRPdXRwdXQuZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1lci5nZW5lcmF0ZU5leHRTdHJ1Y3R1
cmVFbGVtZW50TmFtZSgpOworICAgICAgICBTdHJpbmdWaWV3IGludGVybmFsVHlwZTsKICAgICAg
ICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpCdWlsdEluU2VtYW50aWM+KCpvdXRw
dXRJdGVtLnNlbWFudGljKSkKLSAgICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVybmFsVHlwZU5h
bWUgPSBpbnRlcm5hbFR5cGVGb3JTZW1hbnRpYyhXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRp
Yz4oKm91dHB1dEl0ZW0uc2VtYW50aWMpKTsKLSAgICAgICAgaWYgKG5hbWVkT3V0cHV0LmludGVy
bmFsVHlwZU5hbWUuaXNOdWxsKCkpCisgICAgICAgICAgICBpbnRlcm5hbFR5cGUgPSBpbnRlcm5h
bFR5cGVGb3JTZW1hbnRpYyhXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKm91dHB1dEl0
ZW0uc2VtYW50aWMpKTsKKyAgICAgICAgaWYgKCFpbnRlcm5hbFR5cGUuaXNOdWxsKCkpCisgICAg
ICAgICAgICBuYW1lZE91dHB1dC5pbnRlcm5hbFR5cGVOYW1lID0gaW50ZXJuYWxUeXBlLnRvU3Ry
aW5nKCk7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVybmFsVHlw
ZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm91dHB1dEl0ZW0udW5uYW1l
ZFR5cGUpOwogICAgICAgICBtX25hbWVkT3V0cHV0cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShu
YW1lZE91dHB1dCkpOwogICAgIH0KQEAgLTQxNSw3ICs0MTksNyBAQCBTdHJpbmcgVmVydGV4RW50
cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwCiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKIH0KIAotU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJl
KFN0cmluZyYgZnVuY3Rpb25OYW1lKQorU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGlu
Zzo6c2lnbmF0dXJlKE1hbmdsZWRGdW5jdGlvbk5hbWUgZnVuY3Rpb25OYW1lKQogewogICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKIApAQCAtNDQ0LDcgKzQ0OCw3IEBAIFN0cmluZyBW
ZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGEKICAgICByZXR1cm4gc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOwogfQogCi1TdHJpbmcgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpw
YWNrKGNvbnN0IFN0cmluZyYgaW5wdXRWYXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgb3V0cHV0
VmFyaWFibGVOYW1lKQorU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhN
YW5nbGVkVmFyaWFibGVOYW1lIGlucHV0VmFyaWFibGVOYW1lLCBNYW5nbGVkVmFyaWFibGVOYW1l
IG91dHB1dFZhcmlhYmxlTmFtZSkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CiAKQEAgLTQ2Myw3ICs0NjcsNyBAQCBTdHJpbmcgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5n
OjpwYWNrCiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotRnJhZ21l
bnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nKEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGlu
dHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9p
bnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYg
bGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSwgSGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNpemVfdD4mKQorRnJhZ21lbnRFbnRy
eVBvaW50U2NhZmZvbGRpbmc6OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJpbnNp
Y3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVt
cywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0
LCBzdGQ6OmZ1bmN0aW9uPE1hbmdsZWRWYXJpYWJsZU5hbWUoKT4mJiBnZW5lcmF0ZU5leHRWYXJp
YWJsZU5hbWUsIEhhc2hNYXA8QXR0YWNobWVudERlc2NyaXB0b3IqLCBzaXplX3Q+JikKICAgICA6
IEVudHJ5UG9pbnRTY2FmZm9sZGluZyhmdW5jdGlvbkRlZmluaXRpb24sIGludHJpbnNpY3MsIHR5
cGVOYW1lciwgZW50cnlQb2ludEl0ZW1zLCByZXNvdXJjZU1hcCwgbGF5b3V0LCBXVEZNb3ZlKGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkpCiAgICAgLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lKHR5cGVO
YW1lci5nZW5lcmF0ZU5leHRUeXBlTmFtZSgpKQogICAgICwgbV9yZXR1cm5TdHJ1Y3ROYW1lKHR5
cGVOYW1lci5nZW5lcmF0ZU5leHRUeXBlTmFtZSgpKQpAQCAtNDg2LDkgKzQ5MCwxMiBAQCBGcmFn
bWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6RnJhZ21lbnRFCiAgICAgICAgIGF1dG8mIG91dHB1
dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldOwogICAgICAgICBOYW1lZE91dHB1
dCBuYW1lZE91dHB1dDsKICAgICAgICAgbmFtZWRPdXRwdXQuZWxlbWVudE5hbWUgPSBtX3R5cGVO
YW1lci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOworICAgICAgICBTdHJpbmdW
aWV3IGludGVybmFsVHlwZTsKICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNU
OjpCdWlsdEluU2VtYW50aWM+KCpvdXRwdXRJdGVtLnNlbWFudGljKSkKLSAgICAgICAgICAgIG5h
bWVkT3V0cHV0LmludGVybmFsVHlwZU5hbWUgPSBpbnRlcm5hbFR5cGVGb3JTZW1hbnRpYyhXVEY6
OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKm91dHB1dEl0ZW0uc2VtYW50aWMpKTsKLSAgICAg
ICAgaWYgKG5hbWVkT3V0cHV0LmludGVybmFsVHlwZU5hbWUuaXNOdWxsKCkpCisgICAgICAgICAg
ICBpbnRlcm5hbFR5cGUgPSBpbnRlcm5hbFR5cGVGb3JTZW1hbnRpYyhXVEY6OmdldDxBU1Q6OkJ1
aWx0SW5TZW1hbnRpYz4oKm91dHB1dEl0ZW0uc2VtYW50aWMpKTsKKyAgICAgICAgaWYgKCFpbnRl
cm5hbFR5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICBuYW1lZE91dHB1dC5pbnRlcm5hbFR5cGVO
YW1lID0gaW50ZXJuYWxUeXBlLnRvU3RyaW5nKCk7CisgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG5hbWVkT3V0cHV0LmludGVybmFsVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm91dHB1dEl0ZW0udW5uYW1lZFR5cGUpOwogICAgICAgICBtX25hbWVkT3V0cHV0cy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZE91dHB1dCkpOwogICAgIH0KQEAgLTUyNCw3ICs1
MzEsNyBAQCBTdHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlCiAgICAgcmV0
dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIEZyYWdtZW50RW50cnlQ
b2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpCitTdHJpbmcg
RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZShNYW5nbGVkRnVuY3Rpb25O
YW1lIGZ1bmN0aW9uTmFtZSkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAK
QEAgLTU1Myw3ICs1NjAsNyBAQCBTdHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6
OnVuCiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIEZy
YWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKGNvbnN0IFN0cmluZyYgaW5wdXRWYXJp
YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgb3V0cHV0VmFyaWFibGVOYW1lKQorU3RyaW5nIEZyYWdt
ZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKE1hbmdsZWRWYXJpYWJsZU5hbWUgaW5wdXRW
YXJpYWJsZU5hbWUsIE1hbmdsZWRWYXJpYWJsZU5hbWUgb3V0cHV0VmFyaWFibGVOYW1lKQogewog
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKIApAQCAtNTcyLDcgKzU3OSw3IEBAIFN0
cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGEKICAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOwogfQogCi1Db21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpD
b21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5h
bWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwg
c2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPFN0cmlu
ZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkKK0NvbXB1dGVFbnRyeVBvaW50U2NhZmZv
bGRpbmc6OkNvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVy
JiB0eXBlTmFtZXIsIEVudHJ5UG9pbnRJdGVtcyYgZW50cnlQb2ludEl0ZW1zLCBIYXNoTWFwPEJp
bmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0JiBsYXlvdXQsIHN0ZDo6ZnVuY3Rp
b248TWFuZ2xlZFZhcmlhYmxlTmFtZSgpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkKICAg
ICA6IEVudHJ5UG9pbnRTY2FmZm9sZGluZyhmdW5jdGlvbkRlZmluaXRpb24sIGludHJpbnNpY3Ms
IHR5cGVOYW1lciwgZW50cnlQb2ludEl0ZW1zLCByZXNvdXJjZU1hcCwgbGF5b3V0LCBXVEZNb3Zl
KGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkpCiB7CiB9CkBAIC01ODIsNyArNTg5LDcgQEAgU3Ry
aW5nIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbAogICAgIHJldHVybiByZXNvdXJj
ZUhlbHBlclR5cGVzKCk7CiB9CiAKLVN0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5n
OjpzaWduYXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpCitTdHJpbmcgQ29tcHV0ZUVudHJ5UG9p
bnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKE1hbmdsZWRGdW5jdGlvbk5hbWUgZnVuY3Rpb25OYW1l
KQogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKIApAQCAtNjA3LDcgKzYxNCw3
IEBAIFN0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnAKICAgICByZXR1cm4g
dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygpOwogfQogCi1TdHJpbmcgQ29tcHV0ZUVu
dHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQor
U3RyaW5nIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2soTWFuZ2xlZFZhcmlhYmxl
TmFtZSwgTWFuZ2xlZFZhcmlhYmxlTmFtZSkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2lu
dFNjYWZmb2xkaW5nLmgJKHJldmlzaW9uIDI0ODI2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNs
dWRlICJXSExTTE1hbmdsZWROYW1lcy5oIgogI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlw
dG9yLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KQEAgLTUwLDE3ICs1MSwxOCBAQCBjbGFzcyBUeXBlTmFtZXI7CiAKIGNsYXNzIEVu
dHJ5UG9pbnRTY2FmZm9sZGluZyB7CiBwdWJsaWM6Ci0gICAgRW50cnlQb2ludFNjYWZmb2xkaW5n
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIEVudHJ5
UG9pbnRJdGVtcyYsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlv
dXQmLCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSk7
CiAgICAgdmlydHVhbCB+RW50cnlQb2ludFNjYWZmb2xkaW5nKCkgPSBkZWZhdWx0OwogCiAgICAg
dmlydHVhbCBTdHJpbmcgaGVscGVyVHlwZXMoKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2ln
bmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgc2ln
bmF0dXJlKE1hbmdsZWRGdW5jdGlvbk5hbWUpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyB1bnBh
Y2soKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgcGFjayhjb25zdCBTdHJpbmcmIGV4aXN0aW5n
VmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSkgPSAwOworICAgIHZpcnR1
YWwgU3RyaW5nIHBhY2soTWFuZ2xlZFZhcmlhYmxlTmFtZSBleGlzdGluZ1ZhcmlhYmxlTmFtZSwg
TWFuZ2xlZFZhcmlhYmxlTmFtZSkgPSAwOwogCi0gICAgVmVjdG9yPFN0cmluZz4mIHBhcmFtZXRl
clZhcmlhYmxlcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyVmFyaWFibGVzOyB9CisgICAgVmVjdG9y
PE1hbmdsZWRWYXJpYWJsZU5hbWU+JiBwYXJhbWV0ZXJWYXJpYWJsZXMoKSB7IHJldHVybiBtX3Bh
cmFtZXRlclZhcmlhYmxlczsgfQogCiBwcm90ZWN0ZWQ6CisgICAgRW50cnlQb2ludFNjYWZmb2xk
aW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIEVu
dHJ5UG9pbnRJdGVtcyYsIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBM
YXlvdXQmLCBzdGQ6OmZ1bmN0aW9uPE1hbmdsZWRWYXJpYWJsZU5hbWUoKT4mJiBnZW5lcmF0ZU5l
eHRWYXJpYWJsZU5hbWUpOworCiAgICAgU3RyaW5nIHJlc291cmNlSGVscGVyVHlwZXMoKTsKICAg
ICBPcHRpb25hbDxTdHJpbmc+IHJlc291cmNlU2lnbmF0dXJlKCk7CiAgICAgT3B0aW9uYWw8U3Ry
aW5nPiBidWlsdEluc1NpZ25hdHVyZSgpOwpAQCAtNzUsMjEgKzc3LDIxIEBAIHByb3RlY3RlZDoK
ICAgICBFbnRyeVBvaW50SXRlbXMmIG1fZW50cnlQb2ludEl0ZW1zOwogICAgIEhhc2hNYXA8Qmlu
ZGluZyosIHNpemVfdD4mIG1fcmVzb3VyY2VNYXA7CiAgICAgTGF5b3V0JiBtX2xheW91dDsKLSAg
ICBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiBtX2dlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZTsKKyAg
ICBzdGQ6OmZ1bmN0aW9uPE1hbmdsZWRWYXJpYWJsZU5hbWUoKT4gbV9nZW5lcmF0ZU5leHRWYXJp
YWJsZU5hbWU7CiAKICAgICBzdHJ1Y3QgTGVuZ3RoSW5mb3JtYXRpb24gewotICAgICAgICBTdHJp
bmcgZWxlbWVudE5hbWU7Ci0gICAgICAgIFN0cmluZyB0ZW1wb3JhcnlOYW1lOworICAgICAgICBN
YW5nbGVkU3RydWN0dXJlRWxlbWVudE5hbWUgZWxlbWVudE5hbWU7CisgICAgICAgIE1hbmdsZWRW
YXJpYWJsZU5hbWUgdGVtcG9yYXJ5TmFtZTsKICAgICAgICAgdW5zaWduZWQgaW5kZXg7CiAgICAg
fTsKICAgICBzdHJ1Y3QgTmFtZWRCaW5kaW5nIHsKLSAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1l
OworICAgICAgICBNYW5nbGVkU3RydWN0dXJlRWxlbWVudE5hbWUgZWxlbWVudE5hbWU7CiAgICAg
ICAgIHVuc2lnbmVkIGluZGV4OwogICAgICAgICBPcHRpb25hbDxMZW5ndGhJbmZvcm1hdGlvbj4g
bGVuZ3RoSW5mb3JtYXRpb247CiAgICAgfTsKICAgICBzdHJ1Y3QgTmFtZWRCaW5kR3JvdXAgewot
ICAgICAgICBTdHJpbmcgc3RydWN0TmFtZTsKLSAgICAgICAgU3RyaW5nIHZhcmlhYmxlTmFtZTsK
KyAgICAgICAgTWFuZ2xlZFR5cGVOYW1lIHN0cnVjdE5hbWU7CisgICAgICAgIE1hbmdsZWRWYXJp
YWJsZU5hbWUgdmFyaWFibGVOYW1lOwogICAgICAgICBWZWN0b3I8TmFtZWRCaW5kaW5nPiBuYW1l
ZEJpbmRpbmdzOwogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudEJ1ZmZlckluZGV4OwogICAgIH07
CkBAIC05Nyw4MyArOTksODEgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RydWN0IE5hbWVkQnVpbHRJ
biB7CiAgICAgICAgIHNpemVfdCBpbmRleEluRW50cnlQb2ludEl0ZW1zOwotICAgICAgICBTdHJp
bmcgdmFyaWFibGVOYW1lOworICAgICAgICBNYW5nbGVkVmFyaWFibGVOYW1lIHZhcmlhYmxlTmFt
ZTsKICAgICB9OwogICAgIFZlY3RvcjxOYW1lZEJ1aWx0SW4+IG1fbmFtZWRCdWlsdEluczsKIAot
ICAgIFZlY3RvcjxTdHJpbmc+IG1fcGFyYW1ldGVyVmFyaWFibGVzOworICAgIFZlY3RvcjxNYW5n
bGVkVmFyaWFibGVOYW1lPiBtX3BhcmFtZXRlclZhcmlhYmxlczsKIH07CiAKIGNsYXNzIFZlcnRl
eEVudHJ5UG9pbnRTY2FmZm9sZGluZyA6IHB1YmxpYyBFbnRyeVBvaW50U2NhZmZvbGRpbmcgewog
cHVibGljOgotICAgIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVm
aW5pdGlvbiYsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImLCBFbnRyeVBvaW50SXRlbXMmLCBIYXNo
TWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0Jiwgc3RkOjpmdW5jdGlv
bjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUsIEhhc2hNYXA8VmVydGV4QXR0
cmlidXRlKiwgc2l6ZV90PiYgbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpOworICAgIFZlcnRleEVu
dHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3Mm
LCBUeXBlTmFtZXImLCBFbnRyeVBvaW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+
JiByZXNvdXJjZU1hcCwgTGF5b3V0Jiwgc3RkOjpmdW5jdGlvbjxNYW5nbGVkVmFyaWFibGVOYW1l
KCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSos
IHNpemVfdD4mIG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzKTsKICAgICB2aXJ0dWFsIH5WZXJ0ZXhF
bnRyeVBvaW50U2NhZmZvbGRpbmcoKSA9IGRlZmF1bHQ7CiAKICAgICBTdHJpbmcgaGVscGVyVHlw
ZXMoKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgc2lnbmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1l
KSBvdmVycmlkZTsKKyAgICBTdHJpbmcgc2lnbmF0dXJlKE1hbmdsZWRGdW5jdGlvbk5hbWUpIG92
ZXJyaWRlOwogICAgIFN0cmluZyB1bnBhY2soKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgcGFjayhj
b25zdCBTdHJpbmcmIGV4aXN0aW5nVmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxl
TmFtZSkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHBhY2soTWFuZ2xlZFZhcmlhYmxlTmFtZSBleGlz
dGluZ1ZhcmlhYmxlTmFtZSwgTWFuZ2xlZFZhcmlhYmxlTmFtZSkgb3ZlcnJpZGU7CiAKIHByaXZh
dGU6CiAgICAgSGFzaE1hcDxWZXJ0ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+JiBtX21hdGNoZWRWZXJ0
ZXhBdHRyaWJ1dGVzOwotICAgIFN0cmluZyBtX3N0YWdlSW5TdHJ1Y3ROYW1lOwotICAgIFN0cmlu
ZyBtX3JldHVyblN0cnVjdE5hbWU7Ci0gICAgU3RyaW5nIG1fc3RhZ2VJblBhcmFtZXRlck5hbWU7
CisgICAgTWFuZ2xlZFR5cGVOYW1lIG1fc3RhZ2VJblN0cnVjdE5hbWU7CisgICAgTWFuZ2xlZFR5
cGVOYW1lIG1fcmV0dXJuU3RydWN0TmFtZTsKKyAgICBNYW5nbGVkVmFyaWFibGVOYW1lIG1fc3Rh
Z2VJblBhcmFtZXRlck5hbWU7CiAKICAgICBzdHJ1Y3QgTmFtZWRTdGFnZUluIHsKICAgICAgICAg
c2l6ZV90IGluZGV4SW5FbnRyeVBvaW50SXRlbXM7Ci0gICAgICAgIFN0cmluZyBlbGVtZW50TmFt
ZTsKKyAgICAgICAgTWFuZ2xlZFN0cnVjdHVyZUVsZW1lbnROYW1lIGVsZW1lbnROYW1lOwogICAg
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVJbmRleDsKICAgICB9OwogICAgIFZlY3RvcjxOYW1lZFN0
YWdlSW4+IG1fbmFtZWRTdGFnZUluczsKIAogICAgIHN0cnVjdCBOYW1lZE91dHB1dCB7Ci0gICAg
ICAgIFN0cmluZyBlbGVtZW50TmFtZTsKLSAgICAgICAgU3RyaW5nIGludGVybmFsVHlwZU5hbWU7
CisgICAgICAgIE1hbmdsZWRTdHJ1Y3R1cmVFbGVtZW50TmFtZSBlbGVtZW50TmFtZTsKKyAgICAg
ICAgTWFuZ2xlZE9yTmF0aXZlVHlwZU5hbWUgaW50ZXJuYWxUeXBlTmFtZTsKICAgICB9OwogICAg
IFZlY3RvcjxOYW1lZE91dHB1dD4gbV9uYW1lZE91dHB1dHM7CiB9OwogCiBjbGFzcyBGcmFnbWVu
dEVudHJ5UG9pbnRTY2FmZm9sZGluZyA6IHB1YmxpYyBFbnRyeVBvaW50U2NhZmZvbGRpbmcgewog
cHVibGljOgotICAgIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIEVudHJ5UG9pbnRJdGVtcyYsIEhh
c2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlvdXQmLCBzdGQ6OmZ1bmN0
aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSwgSGFzaE1hcDxBdHRhY2ht
ZW50RGVzY3JpcHRvciosIHNpemVfdD4mIG1hdGNoZWRDb2xvckF0dGFjaG1lbnRzKTsKKyAgICBG
cmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIElu
dHJpbnNpY3MmLCBUeXBlTmFtZXImLCBFbnRyeVBvaW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcq
LCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0Jiwgc3RkOjpmdW5jdGlvbjxNYW5nbGVkVmFy
aWFibGVOYW1lKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPEF0dGFjaG1l
bnREZXNjcmlwdG9yKiwgc2l6ZV90PiYgbWF0Y2hlZENvbG9yQXR0YWNobWVudHMpOwogICAgIHZp
cnR1YWwgfkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nKCkgPSBkZWZhdWx0OwogCiAgICAg
U3RyaW5nIGhlbHBlclR5cGVzKCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHNpZ25hdHVyZShTdHJp
bmcmIGZ1bmN0aW9uTmFtZSkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHNpZ25hdHVyZShNYW5nbGVk
RnVuY3Rpb25OYW1lKSBvdmVycmlkZTsKICAgICBTdHJpbmcgdW5wYWNrKCkgb3ZlcnJpZGU7Ci0g
ICAgU3RyaW5nIHBhY2soY29uc3QgU3RyaW5nJiBleGlzdGluZ1ZhcmlhYmxlTmFtZSwgY29uc3Qg
U3RyaW5nJiB2YXJpYWJsZU5hbWUpIG92ZXJyaWRlOworICAgIFN0cmluZyBwYWNrKE1hbmdsZWRW
YXJpYWJsZU5hbWUgZXhpc3RpbmdWYXJpYWJsZU5hbWUsIE1hbmdsZWRWYXJpYWJsZU5hbWUpIG92
ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFN0cmluZyBtX3N0YWdlSW5TdHJ1Y3ROYW1lOwotICAg
IFN0cmluZyBtX3JldHVyblN0cnVjdE5hbWU7Ci0gICAgU3RyaW5nIG1fc3RhZ2VJblBhcmFtZXRl
ck5hbWU7CisgICAgTWFuZ2xlZFR5cGVOYW1lIG1fc3RhZ2VJblN0cnVjdE5hbWU7CisgICAgTWFu
Z2xlZFR5cGVOYW1lIG1fcmV0dXJuU3RydWN0TmFtZTsKKyAgICBNYW5nbGVkVmFyaWFibGVOYW1l
IG1fc3RhZ2VJblBhcmFtZXRlck5hbWU7CiAKICAgICBzdHJ1Y3QgTmFtZWRTdGFnZUluIHsKICAg
ICAgICAgc2l6ZV90IGluZGV4SW5FbnRyeVBvaW50SXRlbXM7Ci0gICAgICAgIFN0cmluZyBlbGVt
ZW50TmFtZTsKKyAgICAgICAgTWFuZ2xlZFN0cnVjdHVyZUVsZW1lbnROYW1lIGVsZW1lbnROYW1l
OwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVJbmRleDsKICAgICB9OwogICAgIFZlY3RvcjxO
YW1lZFN0YWdlSW4+IG1fbmFtZWRTdGFnZUluczsKIAogICAgIHN0cnVjdCBOYW1lZE91dHB1dCB7
Ci0gICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKLSAgICAgICAgU3RyaW5nIGludGVybmFsVHlw
ZU5hbWU7CisgICAgICAgIE1hbmdsZWRTdHJ1Y3R1cmVFbGVtZW50TmFtZSBlbGVtZW50TmFtZTsK
KyAgICAgICAgTWFuZ2xlZE9yTmF0aXZlVHlwZU5hbWUgaW50ZXJuYWxUeXBlTmFtZTsKICAgICB9
OwogICAgIFZlY3RvcjxOYW1lZE91dHB1dD4gbV9uYW1lZE91dHB1dHM7CiB9OwogCiBjbGFzcyBD
b21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nIDogcHVibGljIEVudHJ5UG9pbnRTY2FmZm9sZGlu
ZyB7CiBwdWJsaWM6Ci0gICAgQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImLCBFbnRyeVBvaW50SXRlbXMm
LCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0Jiwgc3RkOjpm
dW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpOworICAgIENvbXB1
dGVFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mLCBJbnRyaW5z
aWNzJiwgVHlwZU5hbWVyJiwgRW50cnlQb2ludEl0ZW1zJiwgSGFzaE1hcDxCaW5kaW5nKiwgc2l6
ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYsIHN0ZDo6ZnVuY3Rpb248TWFuZ2xlZFZhcmlhYmxl
TmFtZSgpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSk7CiAgICAgdmlydHVhbCB+Q29tcHV0
ZUVudHJ5UG9pbnRTY2FmZm9sZGluZygpID0gZGVmYXVsdDsKIAogICAgIFN0cmluZyBoZWxwZXJU
eXBlcygpIG92ZXJyaWRlOwotICAgIFN0cmluZyBzaWduYXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5h
bWUpIG92ZXJyaWRlOworICAgIFN0cmluZyBzaWduYXR1cmUoTWFuZ2xlZEZ1bmN0aW9uTmFtZSkg
b3ZlcnJpZGU7CiAgICAgU3RyaW5nIHVucGFjaygpIG92ZXJyaWRlOwotICAgIFN0cmluZyBwYWNr
KGNvbnN0IFN0cmluZyYgZXhpc3RpbmdWYXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFyaWFi
bGVOYW1lKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKKyAgICBTdHJpbmcgcGFjayhNYW5nbGVkVmFy
aWFibGVOYW1lIGV4aXN0aW5nVmFyaWFibGVOYW1lLCBNYW5nbGVkVmFyaWFibGVOYW1lKSBvdmVy
cmlkZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCShy
ZXZpc2lvbiAyNDgyNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCBuYW1lc3BhY2UgTWV0YWwgewogCiBjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVy
IDogcHVibGljIFZpc2l0b3IgewogcHVibGljOgotICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0
ZXIoVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiwgU3RyaW5nPiYgZnVuY3Rpb25NYXBwaW5nKQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0
ZXIoVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZT4mIGZ1bmN0aW9uTWFwcGluZykKICAgICAgICAgOiBtX3R5
cGVOYW1lcih0eXBlTmFtZXIpCiAgICAgICAgICwgbV9mdW5jdGlvbk1hcHBpbmcoZnVuY3Rpb25N
YXBwaW5nKQogICAgIHsKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IFR5cGVOYW1lciYgbV90eXBlTmFtZXI7Ci0gICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qLCBTdHJpbmc+JiBtX2Z1bmN0aW9uTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiosIE1hbmdsZWRGdW5jdGlvbk5hbWU+JiBtX2Z1bmN0aW9uTWFwcGlu
ZzsKICAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKIH07CiAKQEAgLTc4LDE0ICs3
OCwxNCBAQCB2b2lkIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OnZpc2l0KEFTCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCk7ICsraSkgewogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoIiwgIik7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS0+
dHlwZSgpKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
W2ldLT50eXBlKCkpKTsKICAgICB9CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIp
OwogfQogCiBjbGFzcyBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgOiBwdWJsaWMgVmlzaXRvciB7
CiBwdWJsaWM6Ci0gICAgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJp
bnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFwcGluZywgTGF5b3V0JiBsYXlvdXQpCisgICAgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYg
dHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIE1hbmdsZWRGdW5j
dGlvbk5hbWU+JiBmdW5jdGlvbk1hcHBpbmcsIExheW91dCYgbGF5b3V0KQogICAgICAgICA6IG1f
aW50cmluc2ljcyhpbnRyaW5zaWNzKQogICAgICAgICAsIG1fdHlwZU5hbWVyKHR5cGVOYW1lcikK
ICAgICAgICAgLCBtX2Z1bmN0aW9uTWFwcGluZyhmdW5jdGlvbk1hcHBpbmcpCkBAIC0xNTAsMTAg
KzE1MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIFN0cmluZyBjb25zdGFudEV4cHJlc3Npb25TdHJp
bmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mKTsKIAotICAgIFN0cmluZyBnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInZhcmlhYmxl
IiwgbV92YXJpYWJsZUNvdW50KyspOwotICAgIH0KKyAgICBNYW5nbGVkVmFyaWFibGVOYW1lIGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpIHsgcmV0dXJuIHsgbV92YXJpYWJsZUNvdW50KysgfTsg
fQogCiAgICAgZW51bSBjbGFzcyBOdWxsYWJpbGl0eSA6IHVpbnQ4X3QgewogICAgICAgICBOb3RO
dWxsLApAQCAtMTYxLDE0ICsxNTgsMTQgQEAgcHJvdGVjdGVkOgogICAgIH07CiAKICAgICBzdHJ1
Y3QgU3RhY2tJdGVtIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAgICBTdHJpbmcgbGVm
dFZhbHVlOworICAgICAgICBNYW5nbGVkVmFyaWFibGVOYW1lIHZhbHVlOworICAgICAgICBPcHRp
b25hbDxNYW5nbGVkVmFyaWFibGVOYW1lPiBsZWZ0VmFsdWU7CiAgICAgICAgIE51bGxhYmlsaXR5
IHZhbHVlTnVsbGFiaWxpdHk7CiAgICAgICAgIE51bGxhYmlsaXR5IGxlZnRWYWx1ZU51bGxhYmls
aXR5OwogICAgIH07CiAKICAgICBzdHJ1Y3QgU3RhY2tWYWx1ZSB7Ci0gICAgICAgIFN0cmluZyB2
YWx1ZTsKKyAgICAgICAgTWFuZ2xlZFZhcmlhYmxlTmFtZSB2YWx1ZTsKICAgICAgICAgTnVsbGFi
aWxpdHkgbnVsbGFiaWxpdHk7CiAgICAgfTsKIApAQCAtMTc3LDMxICsxNzQsMjkgQEAgcHJvdGVj
dGVkOgogICAgIC8vIGFuZCBEZXJlZmVyZW5jZUV4cHJlc3Npb24uIE1ha2VQb2ludGVyRXhwcmVz
c2lvbiB3aWxsIHRyeSB0byBwcm9kdWNlIHJ2YWx1ZXMgd2hpY2ggYXJlCiAgICAgLy8gbm9uLW51
bGwsIGFuZCBEZXJlZmVyZW5jZUV4cHJlc3Npb24gd2lsbCB0YWtlIGEgbm9uLW51bGwgcnZhbHVl
IGFuZCB0cnkgdG8gcHJvZHVjZQogICAgIC8vIGEgbm9uLW51bGwgbHZhbHVlLgotICAgIHZvaWQg
YXBwZW5kUmlnaHRWYWx1ZVdpdGhOdWxsYWJpbGl0eShBU1Q6OkV4cHJlc3Npb24mLCBTdHJpbmcg
dmFsdWUsIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5KQorICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1
ZVdpdGhOdWxsYWJpbGl0eShBU1Q6OkV4cHJlc3Npb24mLCBNYW5nbGVkVmFyaWFibGVOYW1lIHZh
bHVlLCBOdWxsYWJpbGl0eSBudWxsYWJpbGl0eSkKICAgICB7Ci0gICAgICAgIG1fc3RhY2suYXBw
ZW5kKHsgV1RGTW92ZSh2YWx1ZSksIFN0cmluZygpLCBudWxsYWJpbGl0eSwgTnVsbGFiaWxpdHk6
OkNhbkJlTnVsbCB9KTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQoeyBXVEZNb3ZlKHZhbHVlKSwg
V1RGOjpudWxsb3B0LCBudWxsYWJpbGl0eSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCB9KTsKICAg
ICB9CiAKLSAgICB2b2lkIGFwcGVuZFJpZ2h0VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNz
aW9uLCBTdHJpbmcgdmFsdWUpCisgICAgdm9pZCBhcHBlbmRSaWdodFZhbHVlKEFTVDo6RXhwcmVz
c2lvbiYgZXhwcmVzc2lvbiwgTWFuZ2xlZFZhcmlhYmxlTmFtZSB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIGFwcGVuZFJpZ2h0VmFsdWVXaXRoTnVsbGFiaWxpdHkoZXhwcmVzc2lvbiwgV1RGTW92ZSh2
YWx1ZSksIE51bGxhYmlsaXR5OjpDYW5CZU51bGwpOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5k
TGVmdFZhbHVlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgU3RyaW5nIHZhbHVlLCBTdHJp
bmcgbGVmdFZhbHVlLCBOdWxsYWJpbGl0eSBudWxsYWJpbGl0eSkKKyAgICB2b2lkIGFwcGVuZExl
ZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIE1hbmdsZWRWYXJpYWJsZU5hbWUg
dmFsdWUsIE1hbmdsZWRWYXJpYWJsZU5hbWUgbGVmdFZhbHVlLCBOdWxsYWJpbGl0eSBudWxsYWJp
bGl0eSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZXhwcmVzc2lvbiwgZXhwcmVzc2lv
bi50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSk7CiAgICAgICAgIG1fc3RhY2su
YXBwZW5kKHsgV1RGTW92ZSh2YWx1ZSksIFdURk1vdmUobGVmdFZhbHVlKSwgTnVsbGFiaWxpdHk6
OkNhbkJlTnVsbCwgbnVsbGFiaWxpdHkgfSk7CiAgICAgfQogCi0gICAgU3RyaW5nIHRha2VMYXN0
VmFsdWUoKQorICAgIE1hbmdsZWRWYXJpYWJsZU5hbWUgdGFrZUxhc3RWYWx1ZSgpCiAgICAgewot
ICAgICAgICBBU1NFUlQobV9zdGFjay5sYXN0KCkudmFsdWUpOwogICAgICAgICByZXR1cm4gbV9z
dGFjay50YWtlTGFzdCgpLnZhbHVlOwogICAgIH0KIAogICAgIFN0YWNrVmFsdWUgdGFrZUxhc3RW
YWx1ZUFuZE51bGxhYmlsaXR5KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3N0YWNrLmxhc3Qo
KS52YWx1ZSk7CiAgICAgICAgIGF1dG8gbGFzdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICAg
ICAgcmV0dXJuIHsgbGFzdC52YWx1ZSwgbGFzdC52YWx1ZU51bGxhYmlsaXR5IH07CiAgICAgfQpA
QCAtMjEwLDcgKzIwNSw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3N0
YWNrLmxhc3QoKS5sZWZ0VmFsdWUpOwogICAgICAgICBhdXRvIGxhc3QgPSBtX3N0YWNrLnRha2VM
YXN0KCk7Ci0gICAgICAgIHJldHVybiB7IGxhc3QubGVmdFZhbHVlLCBsYXN0LmxlZnRWYWx1ZU51
bGxhYmlsaXR5IH07CisgICAgICAgIHJldHVybiB7ICpsYXN0LmxlZnRWYWx1ZSwgbGFzdC5sZWZ0
VmFsdWVOdWxsYWJpbGl0eSB9OwogICAgIH0KIAogICAgIGVudW0gY2xhc3MgQnJlYWtDb250ZXh0
IHsKQEAgLTIyMiwxNSArMjE3LDE1IEBAIHByb3RlY3RlZDoKIAogICAgIEludHJpbnNpY3MmIG1f
aW50cmluc2ljczsKICAgICBUeXBlTmFtZXImIG1fdHlwZU5hbWVyOwotICAgIEhhc2hNYXA8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiYgbV9mdW5jdGlvbk1hcHBpbmc7Ci0gICAg
SGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qLCBTdHJpbmc+IG1fdmFyaWFibGVNYXBw
aW5nOworICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgTWFuZ2xlZEZ1bmN0
aW9uTmFtZT4mIG1fZnVuY3Rpb25NYXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uKiwgTWFuZ2xlZFZhcmlhYmxlTmFtZT4gbV92YXJpYWJsZU1hcHBpbmc7CiAgICAg
U3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7CiAKICAgICBWZWN0b3I8U3RhY2tJdGVtPiBt
X3N0YWNrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeVBvaW50U2NhZmZvbGRpbmc+IG1fZW50
cnlQb2ludFNjYWZmb2xkaW5nOwogICAgIExheW91dCYgbV9sYXlvdXQ7CiAgICAgdW5zaWduZWQg
bV92YXJpYWJsZUNvdW50IHsgMCB9OwotICAgIFN0cmluZyBtX2JyZWFrT3V0T2ZDdXJyZW50TG9v
cEVhcmx5VmFyaWFibGU7CisgICAgT3B0aW9uYWw8TWFuZ2xlZFZhcmlhYmxlTmFtZT4gbV9icmVh
a091dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlOwogfTsKIAogdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbikKQEAgLTMwNyw5ICszMDIsOSBAQCB2b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
ImJyZWFrO1xuIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQnJlYWtDb250ZXh0OjpMb29w
OgotICAgICAgICBBU1NFUlQobV9icmVha091dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlLmxl
bmd0aCgpKTsKKyAgICAgICAgQVNTRVJUKG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJp
YWJsZSk7CiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAg
ICAgIG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSwgIiA9IHRydWU7XG4iCisg
ICAgICAgICAgICAqbV9icmVha091dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlLCAiID0gdHJ1
ZTtcbiIKICAgICAgICAgICAgICJicmVhaztcbiIKICAgICAgICAgKTsKICAgICAgICAgYnJlYWs7
CkBAIC0zMTgsNyArMzEzLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVAogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDb250aW51
ZSYpCiB7Ci0gICAgQVNTRVJUKG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZS5s
ZW5ndGgoKSk7CisgICAgQVNTRVJUKG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJs
ZSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiYnJlYWs7XG4iKTsKIH0KIApAQCAtMzM1
LDEwICszMzAsMTAgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAog
CiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6ZW1pdExvb3AoTG9vcENvbmRpdGlvbkxv
Y2F0aW9uIGxvb3BDb25kaXRpb25Mb2NhdGlvbiwgQVNUOjpFeHByZXNzaW9uKiBjb25kaXRpb25F
eHByZXNzaW9uLCBBU1Q6OkV4cHJlc3Npb24qIGluY3JlbWVudCwgQVNUOjpTdGF0ZW1lbnQmIGJv
ZHkpCiB7Ci0gICAgU2V0Rm9yU2NvcGU8U3RyaW5nPiBsb29wVmFyaWFibGVTY29wZShtX2JyZWFr
T3V0T2ZDdXJyZW50TG9vcEVhcmx5VmFyaWFibGUsIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
KTsKKyAgICBTZXRGb3JTY29wZTxPcHRpb25hbDxNYW5nbGVkVmFyaWFibGVOYW1lPj4gbG9vcFZh
cmlhYmxlU2NvcGUobV9icmVha091dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlLCBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKSk7CiAKICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoCi0gICAgICAgICJib29sICIsIG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJs
ZSwgIiA9IGZhbHNlO1xuIiwKKyAgICAgICAgImJvb2wgIiwgKm1fYnJlYWtPdXRPZkN1cnJlbnRM
b29wRWFybHlWYXJpYWJsZSwgIiA9IGZhbHNlO1xuIiwKICAgICAgICAgIndoaWxlICh0cnVlKSB7
XG4iCiAgICAgKTsKIApAQCAtMzUyLDcgKzM0Nyw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjplbWl0TG9vcCgKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYm9keSk7CiAgICAgbV9z
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAogICAgICAgICAifSB3aGlsZShmYWxzZSk7IFxu
IgotICAgICAgICAiaWYgKCIsIG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSwg
IikgYnJlYWs7XG4iCisgICAgICAgICJpZiAoIiwgKm1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFy
bHlWYXJpYWJsZSwgIikgYnJlYWs7XG4iCiAgICAgKTsKIAogICAgIGlmIChpbmNyZW1lbnQpIHsK
QEAgLTUxNiw3ICs1MTEsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUCiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgogICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxhY2Ug
dGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgYXBwZW5kUmlnaHRWYWx1ZShkb3RFeHByZXNzaW9uLCAiZHVtbXkiKTsKKyAgICBhcHBlbmRS
aWdodFZhbHVlKGRvdEV4cHJlc3Npb24sIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpKTsKIH0K
IAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6R2xvYmFsVmFyaWFi
bGVSZWZlcmVuY2UmIGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlKQpAQCAtNTM3LDcgKzUzMiw3IEBA
IHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAvLyBUaGlzIHNo
b3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3ODggUmVwbGFjZSB0aGlzIHdpdGggQVNTRVJUX05P
VF9SRUFDSEVEKCkuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBhcHBlbmRSaWdodFZhbHVl
KGluZGV4RXhwcmVzc2lvbiwgImR1bW15Iik7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShpbmRleEV4
cHJlc3Npb24sIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpKTsKIH0KIAogdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCkBAIC01NDUsNyArNTQwLDcgQEAgdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxvd2Vy
ZWQgYWxyZWFkeS4KICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NTc4OCBSZXBsYWNlIHRoaXMgd2l0aCBBU1NFUlRfTk9UX1JFQUNIRUQoKS4K
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIGFwcGVuZFJpZ2h0VmFsdWUocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLCAiZHVtbXkiKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbiwgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkpOwogfQogCiB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2
YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtNTc3LDcgKzU3Miw3IEBAIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQogewotICAgIFZlY3Rv
cjxTdHJpbmc+IGFyZ3VtZW50TmFtZXM7CisgICAgVmVjdG9yPE1hbmdsZWRWYXJpYWJsZU5hbWU+
IGFyZ3VtZW50TmFtZXM7CiAgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9u
LmFyZ3VtZW50cygpKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7CiAg
ICAgICAgIGFyZ3VtZW50TmFtZXMuYXBwZW5kKHRha2VMYXN0VmFsdWUoKSk7CkBAIC01OTEsNyAr
NTg2LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnROYW1lcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBpZiAoaSkKICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoYXJndW1lbnROYW1lc1tpXSk7CisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChhcmd1bWVudE5hbWVzW2ldKTsKICAgICB9CiAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogICAgIGFwcGVuZFJpZ2h0VmFsdWUo
Y2FsbEV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CkBAIC01OTksMTIgKzU5NCwxMyBAQCB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAKIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9u
KQogewotICAgIFN0cmluZyByZXN1bHQ7CisgICAgT3B0aW9uYWw8TWFuZ2xlZFZhcmlhYmxlTmFt
ZT4gcmVzdWx0OwogICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5s
aXN0KCkpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOwogICAgICAg
ICByZXN1bHQgPSB0YWtlTGFzdFZhbHVlKCk7CiAgICAgfQotICAgIGFwcGVuZFJpZ2h0VmFsdWUo
Y29tbWFFeHByZXNzaW9uLCByZXN1bHQpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIGFwcGVu
ZFJpZ2h0VmFsdWUoY29tbWFFeHByZXNzaW9uLCAqcmVzdWx0KTsKIH0KIAogdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24pCkBAIC03NTAsNyArNzQ2LDcgQEAgU3RyaW5nIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6Y29uc3RhbgogCiBjbGFzcyBSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXIgOiBwdWJsaWMgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyIHsKIHB1YmxpYzoKLSAgICBS
ZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlw
ZU5hbWVyJiB0eXBlTmFtZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3Ry
aW5nPiYgZnVuY3Rpb25NYXBwaW5nLCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYgbWF0Y2hlZFNl
bWFudGljcywgTGF5b3V0JiBsYXlvdXQpCisgICAgUmVuZGVyRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyKEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFw
PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIE1hbmdsZWRGdW5jdGlvbk5hbWU+JiBmdW5jdGlv
bk1hcHBpbmcsIE1hdGNoZWRSZW5kZXJTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlv
dXQmIGxheW91dCkKICAgICAgICAgOiBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoaW50cmluc2lj
cywgdHlwZU5hbWVyLCBmdW5jdGlvbk1hcHBpbmcsIGxheW91dCkKICAgICAgICAgLCBtX21hdGNo
ZWRTZW1hbnRpY3MoV1RGTW92ZShtYXRjaGVkU2VtYW50aWNzKSkKICAgICB7CkBAIC03NjQsNyAr
NzYwLDcgQEAgcHJpdmF0ZToKIAogc3RkOjp1bmlxdWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9sZGlu
Zz4gUmVuZGVyRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpjcmVhdGVFbnRyeVBvaW50U2NhZmZv
bGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIHsKLSAg
ICBhdXRvIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSA9IFt0aGlzXSgpIC0+IFN0cmluZyB7Cisg
ICAgYXV0byBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUgPSBbdGhpc10oKSAtPiBNYW5nbGVkVmFy
aWFibGVOYW1lIHsKICAgICAgICAgcmV0dXJuIHRoaXMtPmdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpOwogICAgIH07CiAgICAgaWYgKCZmdW5jdGlvbkRlZmluaXRpb24gPT0gbV9tYXRjaGVkU2Vt
YW50aWNzLnZlcnRleFNoYWRlcikKQEAgLTc3Niw3ICs3NzIsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
RW50cnlQb2ludFNjYWZmb2xkaW5nPiBSCiAKIGNsYXNzIENvbXB1dGVGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXIgOiBwdWJsaWMgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyIHsKIHB1YmxpYzoKLSAg
ICBDb21wdXRlRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJpbnNpY3Ms
IFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbios
IFN0cmluZz4mIGZ1bmN0aW9uTWFwcGluZywgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MmJiBtYXRj
aGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKKyAgICBDb21wdXRlRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBI
YXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIE1hbmdsZWRGdW5jdGlvbk5hbWU+JiBm
dW5jdGlvbk1hcHBpbmcsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGlj
cywgTGF5b3V0JiBsYXlvdXQpCiAgICAgICAgIDogRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKGlu
dHJpbnNpY3MsIHR5cGVOYW1lciwgZnVuY3Rpb25NYXBwaW5nLCBsYXlvdXQpCiAgICAgICAgICwg
bV9tYXRjaGVkU2VtYW50aWNzKFdURk1vdmUobWF0Y2hlZFNlbWFudGljcykpCiAgICAgewpAQCAt
NzkwLDcgKzc4Niw3IEBAIHByaXZhdGU6CiAKIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeVBvaW50U2Nh
ZmZvbGRpbmc+IENvbXB1dGVGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmNyZWF0ZUVudHJ5UG9p
bnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9u
KQogewotICAgIGF1dG8gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lID0gW3RoaXNdKCkgLT4gU3Ry
aW5nIHsKKyAgICBhdXRvIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSA9IFt0aGlzXSgpIC0+IE1h
bmdsZWRWYXJpYWJsZU5hbWUgewogICAgICAgICByZXR1cm4gdGhpcy0+Z2VuZXJhdGVOZXh0VmFy
aWFibGVOYW1lKCk7CiAgICAgfTsKICAgICBpZiAoJmZ1bmN0aW9uRGVmaW5pdGlvbiA9PSBtX21h
dGNoZWRTZW1hbnRpY3Muc2hhZGVyKQpAQCAtNzk5LDcgKzc5NSw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxFbnRyeVBvaW50U2NhZmZvbGRpbmc+IEMKIH0KIAogc3RydWN0IFNoYXJlZE1ldGFsRnVuY3Rp
b25zUmVzdWx0IHsKLSAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmlu
Zz4gZnVuY3Rpb25NYXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZT4gZnVuY3Rpb25NYXBwaW5nOwogICAgIFN0cmluZyBtZXRh
bEZ1bmN0aW9uczsKIH07CiBzdGF0aWMgU2hhcmVkTWV0YWxGdW5jdGlvbnNSZXN1bHQgc2hhcmVk
TWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIGNv
bnN0IEhhc2hTZXQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKj4mIHJlYWNoYWJsZUZ1bmN0aW9u
cykKQEAgLTgwNywxMyArODAzLDEzIEBAIHN0YXRpYyBTaGFyZWRNZXRhbEZ1bmN0aW9uc1Jlc3Vs
dCBzaGFyZWQKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAKICAgICB1bnNpZ25l
ZCBudW1GdW5jdGlvbnMgPSAwOwotICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiwgU3RyaW5nPiBmdW5jdGlvbk1hcHBpbmc7CisgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24qLCBNYW5nbGVkRnVuY3Rpb25OYW1lPiBmdW5jdGlvbk1hcHBpbmc7CiAgICAgZm9y
IChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9ucygpKSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gZnVuY3Rpb25NYXBw
aW5nLmFkZCgmbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgbWFrZVN0cmluZygiZnVuY3Rpb24i
LCBudW1GdW5jdGlvbnMrKykpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGZ1bmN0aW9uTWFw
cGluZy5hZGQoJm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIE1hbmdsZWRGdW5jdGlvbk5hbWUg
eyBudW1GdW5jdGlvbnMrKyB9KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmlu
aXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewotICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IGZ1bmN0aW9uTWFwcGluZy5hZGQoJmZ1bmN0aW9uRGVmaW5pdGlvbiwgbWFrZVN0
cmluZygiZnVuY3Rpb24iLCBudW1GdW5jdGlvbnMrKykpOworICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IGZ1bmN0aW9uTWFwcGluZy5hZGQoJmZ1bmN0aW9uRGVmaW5pdGlvbiwgTWFuZ2xlZEZ1bmN0
aW9uTmFtZSB7IG51bUZ1bmN0aW9ucysrIH0pOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJl
c3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuaAkocmV2aXNpb24gMjQ4MjYxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAi
V0hMU0xNYW5nbGVkTmFtZXMuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljTWF0Y2hlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSwxNCArNDIsMTQgQEAgY2xhc3MgVHlwZU5hbWVy
OwogCiBzdHJ1Y3QgUmVuZGVyTWV0YWxGdW5jdGlvbnMgewogICAgIFN0cmluZyBtZXRhbFNvdXJj
ZTsKLSAgICBTdHJpbmcgbWFuZ2xlZFZlcnRleEVudHJ5UG9pbnROYW1lOwotICAgIFN0cmluZyBt
YW5nbGVkRnJhZ21lbnRFbnRyeVBvaW50TmFtZTsKKyAgICBNYW5nbGVkRnVuY3Rpb25OYW1lIG1h
bmdsZWRWZXJ0ZXhFbnRyeVBvaW50TmFtZTsKKyAgICBNYW5nbGVkRnVuY3Rpb25OYW1lIG1hbmds
ZWRGcmFnbWVudEVudHJ5UG9pbnROYW1lOwogfTsKIFJlbmRlck1ldGFsRnVuY3Rpb25zIG1ldGFs
RnVuY3Rpb25zKFByb2dyYW0mLCBUeXBlTmFtZXImLCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYs
IExheW91dCYpOwogCiBzdHJ1Y3QgQ29tcHV0ZU1ldGFsRnVuY3Rpb25zIHsKICAgICBTdHJpbmcg
bWV0YWxTb3VyY2U7Ci0gICAgU3RyaW5nIG1hbmdsZWRFbnRyeVBvaW50TmFtZTsKKyAgICBNYW5n
bGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRFbnRyeVBvaW50TmFtZTsKIH07CiBDb21wdXRlTWV0YWxG
dW5jdGlvbnMgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYsIFR5cGVOYW1lciYsIE1hdGNoZWRDb21w
dXRlU2VtYW50aWNzJiYsIExheW91dCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1hbmdsZWROYW1lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWFuZ2xlZE5hbWVz
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xNYW5nbGVkTmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0
YWwgeworCitzdHJ1Y3QgTWFuZ2xlZFZhcmlhYmxlTmFtZSB7CisgICAgdW5zaWduZWQgdmFsdWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBwcmVmaXggPSAidmFyaWFibGUiOwor
CisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbWFrZVN0cmluZyhwcmVmaXgs
IHZhbHVlKTsgfQorfTsKKworc3RydWN0IE1hbmdsZWRUeXBlTmFtZSB7CisgICAgdW5zaWduZWQg
dmFsdWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBwcmVmaXggPSAidHlwZSI7
CisKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBtYWtlU3RyaW5nKHByZWZp
eCwgdmFsdWUpOyB9Cit9OworCitzdHJ1Y3QgTWFuZ2xlZFN0cnVjdHVyZUVsZW1lbnROYW1lIHsK
KyAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHBy
ZWZpeCA9ICJzdHJ1Y3R1cmVFbGVtZW50IjsKKworICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0
IHsgcmV0dXJuIG1ha2VTdHJpbmcocHJlZml4LCB2YWx1ZSk7IH0KK307CisKK3N0cnVjdCBNYW5n
bGVkRW51bWVyYXRpb25NZW1iZXJOYW1lIHsKKyAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHByZWZpeCA9ICJlbnVtZXJhdGlvbk1lbWJlciI7CisK
KyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBtYWtlU3RyaW5nKHByZWZpeCwg
dmFsdWUpOyB9Cit9OworCitzdHJ1Y3QgTWFuZ2xlZEZ1bmN0aW9uTmFtZSB7CisgICAgdW5zaWdu
ZWQgdmFsdWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBwcmVmaXggPSAiZnVu
Y3Rpb24iOworCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbWFrZVN0cmlu
ZyhwcmVmaXgsIHZhbHVlKTsgfQorfTsKKwordXNpbmcgTWFuZ2xlZE9yTmF0aXZlVHlwZU5hbWUg
PSBWYXJpYW50PE1hbmdsZWRUeXBlTmFtZSwgU3RyaW5nPjsKKworfSAvLyBuYW1lc3BhY2UgTWV0
YWwKKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgTWFuZ2xlZE5hbWVUeXBlPgorY2xh
c3MgTWFuZ2xlZE5hbWVBZGFwdG9yIHsKK3B1YmxpYzoKKyAgICBNYW5nbGVkTmFtZUFkYXB0b3Io
TWFuZ2xlZE5hbWVUeXBlIG5hbWUpCisgICAgICAgIDogbV9uYW1lIHsgbmFtZSB9CisgICAgewor
ICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIHN0cmxlbihNYW5nbGVkTmFt
ZVR5cGU6OnByZWZpeCkgKyBsZW5ndGhPZk51bWJlckFzU3RyaW5nVW5zaWduZWQobV9uYW1lLnZh
bHVlKTsgfQorICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKiBkZXN0
aW5hdGlvbikKKyAgICB7CisgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRlc3Rp
bmF0aW9uLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oTWFuZ2xlZE5hbWVUeXBlOjpw
cmVmaXgpLCBzdHJsZW4oTWFuZ2xlZE5hbWVUeXBlOjpwcmVmaXgpKTsKKyAgICAgICAgd3JpdGVO
dW1iZXJUb0J1ZmZlclVuc2lnbmVkKG1fbmFtZS52YWx1ZSwgZGVzdGluYXRpb24gKyBzdHJsZW4o
TWFuZ2xlZE5hbWVUeXBlOjpwcmVmaXgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFuZ2xl
ZE5hbWVUeXBlIG1fbmFtZTsKK307CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0
ZXI8V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkVmFyaWFibGVOYW1lLCB2b2lkPiA6IHB1
YmxpYyBNYW5nbGVkTmFtZUFkYXB0b3I8V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkVmFy
aWFibGVOYW1lPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpNYW5nbGVkVmFyaWFibGVOYW1lIG5hbWUpCisgICAgICAgIDogTWFuZ2xlZE5h
bWVBZGFwdG9yKG5hbWUpCisgICAgeworICAgIH0KK307Cit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmlu
Z1R5cGVBZGFwdGVyPFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZFR5cGVOYW1lLCB2b2lk
PiA6IHB1YmxpYyBNYW5nbGVkTmFtZUFkYXB0b3I8V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5n
bGVkVHlwZU5hbWU+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihXZWJDb3JlOjpX
SExTTDo6TWV0YWw6Ok1hbmdsZWRUeXBlTmFtZSBuYW1lKQorICAgICAgICA6IE1hbmdsZWROYW1l
QWRhcHRvcihuYW1lKQorICAgIHsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdU
eXBlQWRhcHRlcjxXZWJDb3JlOjpXSExTTDo6TWV0YWw6Ok1hbmdsZWRTdHJ1Y3R1cmVFbGVtZW50
TmFtZSwgdm9pZD4gOiBwdWJsaWMgTWFuZ2xlZE5hbWVBZGFwdG9yPFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6TWFuZ2xlZFN0cnVjdHVyZUVsZW1lbnROYW1lPiB7CitwdWJsaWM6CisgICAgU3RyaW5n
VHlwZUFkYXB0ZXIoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkU3RydWN0dXJlRWxlbWVu
dE5hbWUgbmFtZSkKKyAgICAgICAgOiBNYW5nbGVkTmFtZUFkYXB0b3IobmFtZSkKKyAgICB7Cisg
ICAgfQorfTsKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8V2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpNYW5nbGVkRW51bWVyYXRpb25NZW1iZXJOYW1lLCB2b2lkPiA6IHB1YmxpYyBN
YW5nbGVkTmFtZUFkYXB0b3I8V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkRW51bWVyYXRp
b25NZW1iZXJOYW1lPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpNYW5nbGVkRW51bWVyYXRpb25NZW1iZXJOYW1lIG5hbWUpCisgICAgICAg
IDogTWFuZ2xlZE5hbWVBZGFwdG9yKG5hbWUpCisgICAgeworICAgIH0KK307Cit0ZW1wbGF0ZTw+
IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZEZ1
bmN0aW9uTmFtZSwgdm9pZD4gOiBwdWJsaWMgTWFuZ2xlZE5hbWVBZGFwdG9yPFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZT4geworcHVibGljOgorICAgIFN0cmluZ1R5
cGVBZGFwdGVyKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZSBuYW1l
KQorICAgICAgICA6IE1hbmdsZWROYW1lQWRhcHRvcihuYW1lKQorICAgIHsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6TWFuZ2xlZE9yTmF0aXZlVHlwZU5hbWUsIHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdU
eXBlQWRhcHRlcihjb25zdCBXZWJDb3JlOjpXSExTTDo6TWV0YWw6Ok1hbmdsZWRPck5hdGl2ZVR5
cGVOYW1lJiBuYW1lKQorICAgICAgICA6IG1fbmFtZSB7IG5hbWUgfQorICAgIHsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9uYW1lLAorICAgICAgICAgICAgWyZdIChjb25zdCBXZWJDb3JlOjpXSExTTDo6TWV0YWw6
Ok1hbmdsZWRUeXBlTmFtZSYgbWFuZ2xlZFR5cGVOYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHN0cmxlbihXZWJDb3JlOjpXSExTTDo6TWV0YWw6Ok1hbmdsZWRUeXBlTmFtZTo6cHJlZml4
KSArIGxlbmd0aE9mTnVtYmVyQXNTdHJpbmdVbnNpZ25lZChtYW5nbGVkVHlwZU5hbWUudmFsdWUp
OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgU3RyaW5nJiBzdHJpbmcp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLmxlbmd0aCgpOworICAgICAgICAgICAg
fQorICAgICAgICApOworICAgIH0KKworICAgIGJvb2wgaXM4Qml0KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fbmFtZSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkVHlwZU5hbWUmKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdIChjb25zdCBTdHJp
bmcmIHN0cmluZykgeworICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmcuaXM4Qml0KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKQor
ICAgIHsKKyAgICAgICAgV1RGOjpzd2l0Y2hPbihtX25hbWUsCisgICAgICAgICAgICBbJl0gKGNv
bnN0IFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZFR5cGVOYW1lJiBtYW5nbGVkVHlwZU5h
bWUpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0aW5h
dGlvbiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6TWFuZ2xlZFR5cGVOYW1lOjpwcmVmaXgpLCBzdHJsZW4oV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpNYW5nbGVkVHlwZU5hbWU6OnByZWZpeCkpOworICAgICAgICAgICAgICAgIHdyaXRlTnVtYmVy
VG9CdWZmZXJVbnNpZ25lZChtYW5nbGVkVHlwZU5hbWUudmFsdWUsIGRlc3RpbmF0aW9uICsgc3Ry
bGVuKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZFR5cGVOYW1lOjpwcmVmaXgpKTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nVmlldyB7IHN0cmluZyB9LmdldENoYXJhY3RlcnNXaXRoVXBj
b252ZXJ0KGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgY29uc3QgV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkT3JOYXRp
dmVUeXBlTmFtZSYgbV9uYW1lOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjQ4MjYxKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkK
IAorI2luY2x1ZGUgIldITFNMTWFuZ2xlZE5hbWVzLmgiCiAjaW5jbHVkZSAiV0hMU0xQaXBlbGlu
ZURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljTWF0Y2hlci5oIgogI2luY2x1
ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC00MiwxNSArNDMsMTUgQEAgbmFtZXNwYWNlIE1ldGFsIHsK
IAogc3RydWN0IFJlbmRlck1ldGFsQ29kZSB7CiAgICAgU3RyaW5nIG1ldGFsU291cmNlOwotICAg
IFN0cmluZyBtYW5nbGVkVmVydGV4RW50cnlQb2ludE5hbWU7Ci0gICAgU3RyaW5nIG1hbmdsZWRG
cmFnbWVudEVudHJ5UG9pbnROYW1lOworICAgIE1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZFZl
cnRleEVudHJ5UG9pbnROYW1lOworICAgIE1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZEZyYWdt
ZW50RW50cnlQb2ludE5hbWU7CiB9OwogLy8gQ2FuJ3QgZmFpbC4gQW55IGZhaWx1cmUgY2hlY2tz
IG5lZWQgdG8gYmUgZG9uZSBlYXJsaWVyLCBpbiB0aGUgYmFja2VuZC1hZ25vc3RpYyBwYXJ0IG9m
IHRoZSBjb21waWxlci4KIFJlbmRlck1ldGFsQ29kZSBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFt
JiwgTWF0Y2hlZFJlbmRlclNlbWFudGljcyYmIG1hdGNoZWRTZW1hbnRpY3MsIExheW91dCYpOwog
CiBzdHJ1Y3QgQ29tcHV0ZU1ldGFsQ29kZSB7CiAgICAgU3RyaW5nIG1ldGFsU291cmNlOwotICAg
IFN0cmluZyBtYW5nbGVkRW50cnlQb2ludE5hbWU7CisgICAgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBt
YW5nbGVkRW50cnlQb2ludE5hbWU7CiB9OwogLy8gQ2FuJ3QgZmFpbC4gQW55IGZhaWx1cmUgY2hl
Y2tzIG5lZWQgdG8gYmUgZG9uZSBlYXJsaWVyLCBpbiB0aGUgYmFja2VuZC1hZ25vc3RpYyBwYXJ0
IG9mIHRoZSBjb21waWxlci4KIENvbXB1dGVNZXRhbENvZGUgZ2VuZXJhdGVNZXRhbENvZGUoUHJv
Z3JhbSYsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAko
cmV2aXNpb24gMjQ4MjYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MCw3ICsxMjAsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVjdG9yU3VmZml4KGludCB2ZWN0CiAg
ICAgfQogfQogCi1TdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIFN0cmluZyYgb3V0cHV0RnVu
Y3Rpb25OYW1lLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lcikK
K1N0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBvdXRwdXRG
dW5jdGlvbk5hbWUsIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVy
KQogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5pc0Nhc3QoKSkgewpAQCAtMjA1LDE3ICsyMDUsMTggQEAgU3RyaW5n
IHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgIH0KIAogICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iX3N0cikp
IHsKLSAgICAgICAgYXV0byBtYW5nbGVkRmllbGROYW1lID0gWyZdKGNvbnN0IFN0cmluZyYgZmll
bGROYW1lKSAtPiBTdHJpbmcgeworICAgICAgICBhdXRvIGFwcGVuZE1hbmdsZWRGaWVsZE5hbWUg
PSBbJl0oU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgY29uc3QgU3RyaW5nJiBmaWVsZE5h
bWUpIHsKICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAg
YXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAg
ICAgICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7
CiAgICAgICAgICAgICAgICAgYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFT
VDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKICAgICAgICAgICAgICAgICBhdXRv
KiBzdHJ1Y3R1cmVFbGVtZW50ID0gc3RydWN0dXJlRGVmaW5pdGlvbi5maW5kKGZpZWxkTmFtZSk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZUVsZW1lbnQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KCpzdHJ1
Y3R1cmVFbGVtZW50KTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVyZUVs
ZW1lbnQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOwot
ICAgICAgICAgICAgcmV0dXJuIGZpZWxkTmFtZTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGZpZWxkTmFtZSk7CiAgICAgICAgIH07CiAKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKQEAgLTIyMywxMiArMjI0LDE2
IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAg
ICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUo
KSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICAg
ICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJz
dHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGZpZWxkTmFtZSA9
IGZpZWxkTmFtZS5zdWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAg
ICAgICBhdXRvIG1ldGFsRmllbGROYW1lID0gbWFuZ2xlZEZpZWxkTmFtZShmaWVsZE5hbWUpOwog
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKICAgICAgICAgICAgICAg
ICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFy
YW1ldGVyMU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iCi0gICAg
ICAgICAgICAgICAgIiAgICB2LiIsIG1ldGFsRmllbGROYW1lLCAiID0gbjtcbiIKKyAgICAgICAg
ICAgICAgICAiICAgIHYuIgorICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgYXV0byBmaWVs
ZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJh
dG9yLiJfc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5z
dWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBhcHBlbmRN
YW5nbGVkRmllbGROYW1lKHN0cmluZ0J1aWxkZXIsIGZpZWxkTmFtZSk7CisKKyAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgPSBuO1xuIgogICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHY7XG4iCiAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICk7CkBAIC0yMzYs
MTMgKzI0MSwxNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAg
ICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3Ro
KCkpOwogICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50
eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBh
dXRvIG1ldGFsRmllbGROYW1lID0gbWFuZ2xlZEZpZWxkTmFtZShmaWVsZE5hbWUpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAogICAgICAgICAgICAgbWV0YWxSZXR1cm5O
YW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIg
dikge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gdi4iLCBtZXRhbEZpZWxkTmFtZSwgIjtc
biIKKyAgICAgICAgICAgICIgICAgcmV0dXJuIHYuIgorICAgICAgICApOworCisgICAgICAgIGF1
dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5n
KCJvcGVyYXRvci4iX3N0ci5sZW5ndGgoKSk7CisgICAgICAgIGFwcGVuZE1hbmdsZWRGaWVsZE5h
bWUoc3RyaW5nQnVpbGRlciwgZmllbGROYW1lKTsKKyAgICAgICAgICAgIAorICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgiO1xuIgogICAgICAgICAgICAgIn1cbiIKICAgICAgICAgKTsKICAg
ICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKQEAgLTI1Miw5ICsyNjEsMTMg
QEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICBBU1NF
UlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwog
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBhdXRvIGZp
ZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3Bl
cmF0b3ImLiJfc3RyLmxlbmd0aCgpKTsKIAotICAgICAgICBTdHJpbmcgbWV0YWxGaWVsZE5hbWU7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICBtZXRh
bFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVy
TmFtZSwgIiB2KSB7XG4iCisgICAgICAgICAgICAiICAgIHJldHVybiAmKHYtPiIKKyAgICAgICAg
KTsKKworICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3ImLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgYXV0
byYgdW5uYW1lZFR5cGUgPSAqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0tPnR5cGUoKTsKICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCkudW5pZnlOb2RlKCk7CiAgICAgICAg
IGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwpA
QCAtMjYyLDEzICsyNzUsMTIgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRp
dmVGdQogICAgICAgICAgICAgYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFT
VDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKICAgICAgICAgICAgIGF1dG8qIHN0
cnVjdHVyZUVsZW1lbnQgPSBzdHJ1Y3R1cmVEZWZpbml0aW9uLmZpbmQoZmllbGROYW1lKTsKICAg
ICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVFbGVtZW50KTsKLSAgICAgICAgICAgIG1ldGFsRmll
bGROYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCgqc3RydWN0
dXJlRWxlbWVudCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVyZUVsZW1lbnQp
KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtZXRhbEZpZWxkTmFtZSA9IGZpZWxkTmFt
ZTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoZmllbGROYW1lKTsK
IAotICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0
YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRl
ck5hbWUsICIgdikge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gJih2LT4iLCBtZXRhbEZp
ZWxkTmFtZSwgIik7XG4iCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAorICAgICAgICAg
ICAgIik7XG4iCiAgICAgICAgICAgICAifVxuIgogICAgICAgICApOwogICAgICAgICByZXR1cm4g
c3RyaW5nQnVpbGRlci50b1N0cmluZygpOwpAQCAtNTEyLDEzICs1MjQsMTMgQEAgU3RyaW5nIHdy
aXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRleHR1cmVUeXBlKTsKICAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7
CiAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUobG9jYXRpb25UeXBlKTsKLSAgICAgICAgU3RyaW5nIG1ldGFsUGFyYW1ldGVyNE5h
bWU7CisgICAgICAgIE9wdGlvbmFsPE1hbmdsZWRUeXBlTmFtZT4gbWV0YWxQYXJhbWV0ZXI0TmFt
ZTsKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNp
emUoKSA9PSA0KQogICAgICAgICAgICAgbWV0YWxQYXJhbWV0ZXI0TmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzNdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUocmV0dXJuVHlwZSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxl
eGlibGVBcHBlbmQobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygn
LCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHRoZVRleHR1cmUsICIsIG1ldGFsUGFyYW1ldGVyMk5h
bWUsICIgdGhlU2FtcGxlciwgIiwgbWV0YWxQYXJhbWV0ZXIzTmFtZSwgIiBsb2NhdGlvbiIpOwot
ICAgICAgICBpZiAoIW1ldGFsUGFyYW1ldGVyNE5hbWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsIG1ldGFsUGFyYW1ldGVyNE5hbWUsICIg
b2Zmc2V0Iik7CisgICAgICAgIGlmIChtZXRhbFBhcmFtZXRlcjROYW1lKQorICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCAqbWV0YWxQYXJhbWV0ZXI0TmFtZSwg
IiBvZmZzZXQiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCiAgICAgICAgICAgICAi
KSB7XG4iCiAgICAgICAgICAgICAiICAgIHJldHVybiB0aGVUZXh0dXJlLnNhbXBsZSh0aGVTYW1w
bGVyLCAiCkBAIC01MjgsNyArNTQwLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNU
OjpOYXRpdmVGdQogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgibG9j
YXRpb24uIiwgInh5enciX3N0ci5zdWJzdHJpbmcoMCwgbG9jYXRpb25WZWN0b3JMZW5ndGggLSAx
KSwgIiwgbG9jYXRpb24uIiwgInh5enciX3N0ci5zdWJzdHJpbmcobG9jYXRpb25WZWN0b3JMZW5n
dGggLSAxLCAxKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoImxvY2F0aW9uIik7Ci0gICAgICAgIGlmICghbWV0YWxQYXJhbWV0ZXI0TmFtZS5pc051
bGwoKSkKKyAgICAgICAgaWYgKG1ldGFsUGFyYW1ldGVyNE5hbWUpCiAgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgiLCBvZmZzZXQiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIikiKTsKICAgICAgICAgaWYgKCF0ZXh0dXJlVHlwZS5pc0RlcHRoVGV4dHVyZSgpKQpAQCAt
NjIwLDIyICs2MzIsMjIgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVG
dQogICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgYXV0byB3aWR0aFR5cGVOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbaW5kZXhdLT50eXBlKCkpOwogICAgICAgICArK2luZGV4OwotICAgICAgICBTdHJp
bmcgaGVpZ2h0VHlwZU5hbWU7CisgICAgICAgIE9wdGlvbmFsPE1hbmdsZWRUeXBlTmFtZT4gaGVp
Z2h0VHlwZU5hbWU7CiAgICAgICAgIGlmICh0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkg
Pj0gMikgewogICAgICAgICAgICAgaGVpZ2h0VHlwZU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpbmRleF0t
PnR5cGUoKSk7CiAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICB9Ci0gICAgICAgIFN0cmlu
ZyBkZXB0aFR5cGVOYW1lOworICAgICAgICBPcHRpb25hbDxNYW5nbGVkVHlwZU5hbWU+IGRlcHRo
VHlwZU5hbWU7CiAgICAgICAgIGlmICh0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgPj0g
MykgewogICAgICAgICAgICAgZGVwdGhUeXBlTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2luZGV4XS0+dHlw
ZSgpKTsKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGVs
ZW1lbnRzVHlwZU5hbWU7CisgICAgICAgIE9wdGlvbmFsPE1hbmdsZWRUeXBlTmFtZT4gZWxlbWVu
dHNUeXBlTmFtZTsKICAgICAgICAgaWYgKHRleHR1cmVUeXBlLmlzVGV4dHVyZUFycmF5KCkpIHsK
ICAgICAgICAgICAgIGVsZW1lbnRzVHlwZU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpbmRleF0tPnR5cGUo
KSk7CiAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBudW1i
ZXJPZkxldmVsc1R5cGVOYW1lOworICAgICAgICBPcHRpb25hbDxNYW5nbGVkVHlwZU5hbWU+IG51
bWJlck9mTGV2ZWxzVHlwZU5hbWU7CiAgICAgICAgIGlmICghdGV4dHVyZVR5cGUuaXNXcml0YWJs
ZVRleHR1cmUoKSAmJiB0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgIT0gMSkgewogICAg
ICAgICAgICAgbnVtYmVyT2ZMZXZlbHNUeXBlTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2luZGV4XS0+dHlw
ZSgpKTsKICAgICAgICAgICAgICsraW5kZXg7CkBAIC02NDcsMTQgKzY1OSwxNCBAQCBTdHJpbmcg
d3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGlmICghdGV4dHVyZVR5
cGUuaXNXcml0YWJsZVRleHR1cmUoKSAmJiB0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkg
IT0gMSkKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIHVpbnQgbWlwTGV2ZWwi
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCB3aWR0aFR5cGVO
YW1lLCAiIHdpZHRoIik7Ci0gICAgICAgIGlmICghaGVpZ2h0VHlwZU5hbWUuaXNOdWxsKCkpCi0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsIGhlaWdodFR5cGVO
YW1lLCAiIGhlaWdodCIpOwotICAgICAgICBpZiAoIWRlcHRoVHlwZU5hbWUuaXNOdWxsKCkpCi0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsIGRlcHRoVHlwZU5h
bWUsICIgZGVwdGgiKTsKLSAgICAgICAgaWYgKCFlbGVtZW50c1R5cGVOYW1lLmlzTnVsbCgpKQot
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCBlbGVtZW50c1R5
cGVOYW1lLCAiIGVsZW1lbnRzIik7Ci0gICAgICAgIGlmICghbnVtYmVyT2ZMZXZlbHNUeXBlTmFt
ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiwg
IiwgbnVtYmVyT2ZMZXZlbHNUeXBlTmFtZSwgIiBudW1iZXJPZkxldmVscyIpOworICAgICAgICBp
ZiAoaGVpZ2h0VHlwZU5hbWUpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKCIsICIsICpoZWlnaHRUeXBlTmFtZSwgIiBoZWlnaHQiKTsKKyAgICAgICAgaWYgKGRlcHRo
VHlwZU5hbWUpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIs
ICpkZXB0aFR5cGVOYW1lLCAiIGRlcHRoIik7CisgICAgICAgIGlmIChlbGVtZW50c1R5cGVOYW1l
KQorICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCAqZWxlbWVu
dHNUeXBlTmFtZSwgIiBlbGVtZW50cyIpOworICAgICAgICBpZiAobnVtYmVyT2ZMZXZlbHNUeXBl
TmFtZSkKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgKm51
bWJlck9mTGV2ZWxzVHlwZU5hbWUsICIgbnVtYmVyT2ZMZXZlbHMiKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoCiAgICAgICAgICAgICAiKSB7XG4iCiAgICAgICAgICAgICAiICAgIGlm
ICh3aWR0aClcbiIKQEAgLTY2Myw3ICs2NzUsNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlv
bihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGlmICghdGV4dHVyZVR5cGUuaXNXcml0YWJsZVRleHR1
cmUoKSAmJiB0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgIT0gMSkKICAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJtaXBMZXZlbCIpOwogICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgiKTtcbiIpOwotICAgICAgICBpZiAoIWhlaWdodFR5cGVOYW1lLmlzTnVsbCgpKSB7
CisgICAgICAgIGlmIChoZWlnaHRUeXBlTmFtZSkgewogICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoCiAgICAgICAgICAgICAgICAgIiAgICBpZiAoaGVpZ2h0KVxuIgogICAgICAgICAg
ICAgICAgICIgICAgICAgICpoZWlnaHQgPSB0aGVUZXh0dXJlLmdldF9oZWlnaHQoIgpAQCAtNjcy
LDcgKzY4NCw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAg
ICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgibWlwTGV2ZWwiKTsKICAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KCFkZXB0aFR5cGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChkZXB0aFR5cGVOYW1lKSB7
CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKICAgICAgICAgICAgICAgICAiICAg
IGlmIChkZXB0aClcbiIKICAgICAgICAgICAgICAgICAiICAgICAgICAqZGVwdGggPSB0aGVUZXh0
dXJlLmdldF9kZXB0aCgiCkBAIC02ODEsMTMgKzY5MywxMyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVG
dW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIm1pcExldmVsIik7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIp
OwogICAgICAgICB9Ci0gICAgICAgIGlmICghZWxlbWVudHNUeXBlTmFtZS5pc051bGwoKSkgewor
ICAgICAgICBpZiAoZWxlbWVudHNUeXBlTmFtZSkgewogICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoCiAgICAgICAgICAgICAgICAgIiAgICBpZiAoZWxlbWVudHMpXG4iCiAgICAgICAg
ICAgICAgICAgIiAgICAgICAgKmVsZW1lbnRzID0gdGhlVGV4dHVyZS5nZXRfYXJyYXlfc2l6ZSgp
O1xuIgogICAgICAgICAgICAgKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIW51bWJlck9mTGV2
ZWxzVHlwZU5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKG51bWJlck9mTGV2ZWxzVHlwZU5h
bWUpIHsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAogICAgICAgICAgICAgICAg
ICIgICAgaWYgKG51bWJlck9mTGV2ZWxzKVxuIgogICAgICAgICAgICAgICAgICIgICAgICAgICpu
dW1iZXJPZkxldmVscyA9IHRoZVRleHR1cmUuZ2V0X251bV9taXBfbGV2ZWxzKCk7XG4iCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1
bmN0aW9uV3JpdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oCShyZXZpc2lvbiAyNDgy
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5h
dGl2ZUZ1bmN0aW9uV3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAog
I2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNp
bmNsdWRlICJXSExTTE1hbmdsZWROYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIE1ldGFsIHsKIAogY2xhc3MgVHlwZU5hbWVyOwogCi1T
dHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
LCBTdHJpbmcmIG91dHB1dEZ1bmN0aW9uTmFtZSwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYpOwor
U3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
JiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBvdXRwdXRGdW5jdGlvbk5hbWUsIEludHJpbnNpY3MmLCBU
eXBlTmFtZXImKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCShyZXZpc2lv
biAyNDgyNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTFR5cGVOYW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNw
YWNlIE1ldGFsIHsKIGNsYXNzIEJhc2VUeXBlTmFtZU5vZGUgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIEJhc2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9k
ZSogcGFyZW50LCBTdHJpbmcmJiBtYW5nbGVkTmFtZSkKKyAgICBCYXNlVHlwZU5hbWVOb2RlKEJh
c2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgTWFuZ2xlZFR5cGVOYW1lJiYgbWFuZ2xlZE5hbWUpCiAg
ICAgICAgIDogbV9wYXJlbnQocGFyZW50KQogICAgICAgICAsIG1fbWFuZ2xlZE5hbWUobWFuZ2xl
ZE5hbWUpCiAgICAgewpAQCAtNzcsMTggKzc3LDE4IEBAIHB1YmxpYzoKICAgICAgICAgbV9jaGls
ZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOwogICAgIH0KICAgICBCYXNlVHlwZU5hbWVOb2Rl
KiBwYXJlbnQoKSB7IHJldHVybiBtX3BhcmVudDsgfQotICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xl
ZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX21hbmdsZWROYW1lOyB9CisgICAgTWFuZ2xlZFR5cGVO
YW1lIG1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYW5nbGVkTmFtZTsgfQogCiBwcml2
YXRlOgogICAgIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+IG1fY2hpbGRyZW47
CiAgICAgQmFzZVR5cGVOYW1lTm9kZSogbV9wYXJlbnQ7Ci0gICAgU3RyaW5nIG1fbWFuZ2xlZE5h
bWU7CisgICAgTWFuZ2xlZFR5cGVOYW1lIG1fbWFuZ2xlZE5hbWU7CiB9OwogCiBjbGFzcyBBcnJh
eVR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBBcnJheVR5cGVOYW1lTm9kZShCYXNlVHlwZU5h
bWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWROYW1lLCB1bnNpZ25lZCBudW1FbGVtZW50
cykKKyAgICBBcnJheVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmds
ZWRUeXBlTmFtZSYmIG1hbmdsZWROYW1lLCB1bnNpZ25lZCBudW1FbGVtZW50cykKICAgICAgICAg
OiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCiAgICAgICAg
ICwgbV9udW1FbGVtZW50cyhudW1FbGVtZW50cykKICAgICB7CkBAIC0xMDQsNyArMTA0LDcgQEAg
cHJpdmF0ZToKIGNsYXNzIEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VU
eXBlTmFtZU5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3Ry
aW5nJiYgbWFuZ2xlZE5hbWUsIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKKyAgICBB
cnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmds
ZWRUeXBlTmFtZSYmIG1hbmdsZWROYW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2Up
CiAgICAgICAgIDogQmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUp
KQogICAgICAgICAsIG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICB7CkBAIC0xMjAs
NyArMTIwLDcgQEAgcHJpdmF0ZToKIGNsYXNzIFBvaW50ZXJUeXBlTmFtZU5vZGUgOiBwdWJsaWMg
QmFzZVR5cGVOYW1lTm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgUG9pbnRlclR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmlu
ZyYmIG1hbmdsZWROYW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCisgICAgUG9p
bnRlclR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmdsZWRUeXBlTmFt
ZSYmIG1hbmdsZWROYW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCiAgICAgICAg
IDogQmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpKQogICAgICAg
ICAsIG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICB7CkBAIC0xMzYsNyArMTM2LDcg
QEAgcHJpdmF0ZToKIGNsYXNzIFJlZmVyZW5jZVR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlw
ZU5hbWVOb2RlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBS
ZWZlcmVuY2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBTdHJpbmcmJiBt
YW5nbGVkTmFtZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKKyAgICBSZWZlcmVuY2VUeXBl
TmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBNYW5nbGVkVHlwZU5hbWUmJiBtYW5n
bGVkTmFtZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKICAgICAgICAgOiBCYXNlVHlwZU5h
bWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCiAgICAgICAgICwgbV9uYW1lZFR5
cGUobmFtZWRUeXBlKQogICAgIHsKQEAgLTM1NCw3ICszNTQsNyBAQCBCYXNlVHlwZU5hbWVOb2Rl
KiBUeXBlTmFtZXI6Omluc2VydChBU1Q6CiBjbGFzcyBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRl
ciA6IHB1YmxpYyBWaXNpdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcihzdGQ6OmZ1bmN0aW9uPFN0cmluZyhB
U1Q6Ok5hbWVkVHlwZSYpPiYmIG1hbmdsZWROYW1lRm9yTmFtZWRUeXBlKQorICAgIE1ldGFsVHlw
ZURlY2xhcmF0aW9uV3JpdGVyKHN0ZDo6ZnVuY3Rpb248TWFuZ2xlZE9yTmF0aXZlVHlwZU5hbWUo
QVNUOjpOYW1lZFR5cGUmKT4mJiBtYW5nbGVkTmFtZUZvck5hbWVkVHlwZSkKICAgICAgICAgOiBt
X21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKFdURk1vdmUobWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUp
KQogICAgIHsKICAgICB9CkBAIC0zNjcsMTMgKzM2NywxMyBAQCBwcml2YXRlOgogICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInN0cnVjdCAiLCBtX21hbmdsZWROYW1lRm9y
TmFtZWRUeXBlKHN0cnVjdHVyZURlZmluaXRpb24pLCAiO1xuIik7CiAgICAgfQogCi0gICAgc3Rk
OjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpOYW1lZFR5cGUmKT4gbV9tYW5nbGVkTmFtZUZvck5hbWVk
VHlwZTsKKyAgICBzdGQ6OmZ1bmN0aW9uPE1hbmdsZWRPck5hdGl2ZVR5cGVOYW1lKEFTVDo6TmFt
ZWRUeXBlJik+IG1fbWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGU7CiAgICAgU3RyaW5nQnVpbGRlciBt
X3N0cmluZ0J1aWxkZXI7CiB9OwogCiBTdHJpbmcgVHlwZU5hbWVyOjptZXRhbFR5cGVEZWNsYXJh
dGlvbnMoKQogewotICAgIE1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyIG1ldGFsVHlwZURlY2xh
cmF0aW9uV3JpdGVyKFsmXShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKSAtPiBTdHJpbmcgewor
ICAgIE1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVy
KFsmXShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKSAtPiBNYW5nbGVkT3JOYXRpdmVUeXBlTmFt
ZSB7CiAgICAgICAgIHJldHVybiBtYW5nbGVkTmFtZUZvclR5cGUobmFtZWRUeXBlKTsKICAgICB9
KTsKICAgICBtZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlci5WaXNpdG9yOjp2aXNpdChtX3Byb2dy
YW0pOwpAQCAtNDM2LDcgKzQzNiw3IEBAIHZvaWQgVHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVm
aW5pdGlvbigKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKICAgICB9IGVs
c2UgewogICAgICAgICBhdXRvJiB0eXBlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6VHlwZURl
ZmluaXRpb24+KG5hbWVkVHlwZSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoInR5cGVkZWYgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSks
ICcgJywgbWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uKSwgIjtcbiIpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ0eXBlZGVmICIsIG1hbmdsZWROYW1lRm9y
VHlwZSh0eXBlRGVmaW5pdGlvbi50eXBlKCkpLCAiIHR5cGUiLCBtYW5nbGVkTmFtZUZvclR5cGUo
dHlwZURlZmluaXRpb24pLCAiO1xuIik7CiAgICAgfQogICAgIGVtaXR0ZWROYW1lZFR5cGVzLmFk
ZCgmbmFtZWRUeXBlKTsKIH0KQEAgLTQ2MCwxMiArNDYwLDEyIEBAIFN0cmluZyBUeXBlTmFtZXI6
Om1ldGFsVHlwZURlZmluaXRpb25zKCkKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOwogfQogCi1TdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUpCitNYW5nbGVkVHlwZU5hbWUgVHlwZU5hbWVyOjptYW5nbGVk
TmFtZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCiB7CiAgICAgcmV0dXJu
IGZpbmQodW5uYW1lZFR5cGUsIG1fdHJpZSkubWFuZ2xlZE5hbWUoKTsKIH0KIAotU3RyaW5nIFR5
cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCitN
YW5nbGVkT3JOYXRpdmVUeXBlTmFtZSBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6
Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQogewogICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbj4obmFtZWRUeXBlKSkKICAgICAgICAgcmV0dXJuIG1hbmdsZWROYW1lRm9yVHlwZShk
b3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7CkBAIC00NzUs
MTQgKzQ3NSwxNCBAQCBTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUCiB9
CiAKIAotU3RyaW5nIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihB
U1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKK01hbmdsZWRFbnVtZXJh
dGlvbk1lbWJlck5hbWUgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVy
KEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQogewogICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZy5maW5kKCZlbnVtZXJhdGlvbk1l
bWJlcik7CiAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZW51bWVyYXRpb25NZW1iZXJNYXBwaW5n
LmVuZCgpKTsKICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwogfQogCi1TdHJpbmcgVHlwZU5h
bWVyOjptYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50
JiBzdHJ1Y3R1cmVFbGVtZW50KQorTWFuZ2xlZFN0cnVjdHVyZUVsZW1lbnROYW1lIFR5cGVOYW1l
cjo6bWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KEFTVDo6U3RydWN0dXJlRWxlbWVudCYg
c3RydWN0dXJlRWxlbWVudCkKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9zdHJ1Y3R1cmVFbGVt
ZW50TWFwcGluZy5maW5kKCZzdHJ1Y3R1cmVFbGVtZW50KTsKICAgICBBU1NFUlQoaXRlcmF0b3Ig
IT0gbV9zdHJ1Y3R1cmVFbGVtZW50TWFwcGluZy5lbmQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5h
bWVyLmgJKHJldmlzaW9uIDI0ODI2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsy
Nyw5IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xNYW5nbGVkTmFt
ZXMuaCIKICNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY0LDIwICs2MywxMyBAQCBwdWJs
aWM6CiAKICAgICAvLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBjYWxsaW5nIG1ldGFsVHlwZXMoKS4K
ICAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
Jik7Ci0gICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBlJik7Ci0g
ICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hbWVkVHlwZSYpOwotICAgIFN0cmlu
ZyBtYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKEFTVDo6RW51bWVyYXRpb25NZW1iZXIm
KTsKLSAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KEFTVDo6U3RydWN0
dXJlRWxlbWVudCYpOwotCi0gICAgU3RyaW5nIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJ0eXBlIiwgbV90eXBlQ291bnQrKyk7Ci0gICAg
fQotCi0gICAgU3RyaW5nIGdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJzdHJ1Y3R1cmVFbGVtZW50IiwgbV9zdHJ1Y3R1
cmVFbGVtZW50Q291bnQrKyk7Ci0gICAgfQorICAgIE1hbmdsZWRUeXBlTmFtZSBtYW5nbGVkTmFt
ZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYpOworICAgIE1hbmdsZWRPck5hdGl2ZVR5cGVOYW1l
IG1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hbWVkVHlwZSYpOworICAgIE1hbmdsZWRFbnVtZXJh
dGlvbk1lbWJlck5hbWUgbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihBU1Q6OkVudW1l
cmF0aW9uTWVtYmVyJik7CisgICAgTWFuZ2xlZFN0cnVjdHVyZUVsZW1lbnROYW1lIG1hbmdsZWRO
YW1lRm9yU3RydWN0dXJlRWxlbWVudChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKTsKKworICAgIE1h
bmdsZWRUeXBlTmFtZSBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpIHsgcmV0dXJuIHsgbV90eXBlQ291
bnQrKyB9OyB9CisgICAgTWFuZ2xlZFN0cnVjdHVyZUVsZW1lbnROYW1lIGdlbmVyYXRlTmV4dFN0
cnVjdHVyZUVsZW1lbnROYW1lKCkgeyByZXR1cm4geyBtX3N0cnVjdHVyZUVsZW1lbnRDb3VudCsr
IH07IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmKSBvdmVy
cmlkZTsKQEAgLTg4LDEwICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkV4
cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24m
KSBvdmVycmlkZTsKIAotICAgIFN0cmluZyBnZW5lcmF0ZU5leHRFbnVtZXJhdGlvbk1lbWJlck5h
bWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImVudW1lcmF0aW9uTWVtYmVy
IiwgbV9lbnVtZXJhdGlvbk1lbWJlckNvdW50KyspOwotICAgIH0KKyAgICBNYW5nbGVkRW51bWVy
YXRpb25NZW1iZXJOYW1lIGdlbmVyYXRlTmV4dEVudW1lcmF0aW9uTWVtYmVyTmFtZSgpIHsgcmV0
dXJuIHsgbV9lbnVtZXJhdGlvbk1lbWJlckNvdW50KysgfTsgfQogCiAgICAgdm9pZCBlbWl0TmFt
ZWRUeXBlRGVmaW5pdGlvbihBU1Q6Ok5hbWVkVHlwZSYsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUq
PiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVk
VW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJik7CiAgICAgdm9pZCBlbWl0VW5uYW1lZFR5cGVE
ZWZpbml0aW9uKEJhc2VUeXBlTmFtZU5vZGUmLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVt
aXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVubmFt
ZWRUeXBlcywgU3RyaW5nQnVpbGRlciYpOwpAQCAtMTA1LDEwICs5NCwxMCBAQCBwcml2YXRlOgog
ICAgIFByb2dyYW0mIG1fcHJvZ3JhbTsKICAgICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFt
ZU5vZGU+PiBtX3RyaWU7CiAgICAgSGFzaE1hcDxBU1Q6OlVubmFtZWRUeXBlKiwgQmFzZVR5cGVO
YW1lTm9kZSo+IG1fdW5uYW1lZFR5cGVNYXBwaW5nOwotICAgIEhhc2hNYXA8QVNUOjpOYW1lZFR5
cGUqLCBTdHJpbmc+IG1fbmFtZWRUeXBlTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6TmFtZWRU
eXBlKiwgTWFuZ2xlZFR5cGVOYW1lPiBtX25hbWVkVHlwZU1hcHBpbmc7CiAgICAgSGFzaE1hcDxB
U1Q6Ok5hbWVkVHlwZSosIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VUeXBlTmFt
ZU5vZGU+Pj4gbV9kZXBlbmRlbmN5R3JhcGg7Ci0gICAgSGFzaE1hcDxBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyKiwgU3RyaW5nPiBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZzsKLSAgICBIYXNoTWFw
PEFTVDo6U3RydWN0dXJlRWxlbWVudCosIFN0cmluZz4gbV9zdHJ1Y3R1cmVFbGVtZW50TWFwcGlu
ZzsKKyAgICBIYXNoTWFwPEFTVDo6RW51bWVyYXRpb25NZW1iZXIqLCBNYW5nbGVkRW51bWVyYXRp
b25NZW1iZXJOYW1lPiBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZzsKKyAgICBIYXNoTWFwPEFT
VDo6U3RydWN0dXJlRWxlbWVudCosIE1hbmdsZWRTdHJ1Y3R1cmVFbGVtZW50TmFtZT4gbV9zdHJ1
Y3R1cmVFbGVtZW50TWFwcGluZzsKICAgICB1bnNpZ25lZCBtX3R5cGVDb3VudCB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX2VudW1lcmF0aW9uTWVtYmVyQ291bnQgeyAwIH07CiAgICAgdW5zaWduZWQg
bV9zdHJ1Y3R1cmVFbGVtZW50Q291bnQgeyAwIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDgyNjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTk3MzQsNiArOTczNCw3IEBACiAJCTdDNzkwM0JDMUY4NkZGMzQwMDQ2M0E3
MCAvKiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNzk0MUUyMUM1NkMyOTMwMEE0QzU4RSAvKiBEYXRhRGV0ZWN0b3Jz
Q29yZVNvZnRMaW5rLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RGF0YURldGVjdG9yc0NvcmVTb2Z0TGluay5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M3OTQxRTMxQzU2QzI5MzAwQTRDNThFIC8qIERhdGFEZXRlY3RvcnNDb3JlU29mdExpbmsu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YURldGVjdG9yc0NvcmVTb2Z0
TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzdDNzY5QzIyRjY3RUNEMDAz
MkJDQ0QgLyogV0hMU0xNYW5nbGVkTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xNYW5nbGVk
TmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4MTM5QTMxRUQ2MjgxRDAw
Q0UyNkU4IC8qIEpTRE9NQXR0cmlidXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NQXR0cmlidXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODEz
OUE0MUVENjI4MUQwMENFMjZFOCAvKiBKU0RPTU9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0RPTU9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzgxMzlBNTFFRDYyODFEMDBDRTI2RTggLyogSlNET01PcGVyYXRpb25SZXR1cm5p
bmdQcm9taXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NT3BlcmF0
aW9uUmV0dXJuaW5nUHJvbWlzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcx
NzIsNiArMTcxNzMsNyBAQAogCQkJCTFDRUNCM0JCMjFGNTExQUEwMEY0NDU0MiAvKiBXSExTTEVu
dHJ5UG9pbnRTY2FmZm9sZGluZy5oICovLAogCQkJCTFDRUNCM0FGMjFGMkI5ODQwMEY0NDU0MiAv
KiBXSExTTEZ1bmN0aW9uV3JpdGVyLmNwcCAqLywKIAkJCQkxQ0VDQjNCMjIxRjJCOTg2MDBGNDQ1
NDIgLyogV0hMU0xGdW5jdGlvbldyaXRlci5oICovLAorCQkJCTdDN0M3NjlDMjJGNjdFQ0QwMDMy
QkNDRCAvKiBXSExTTE1hbmdsZWROYW1lcy5oICovLAogCQkJCTFDRUNCM0I1MjFGNTBBQzcwMEY0
NDU0MiAvKiBXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAgKi8sCiAJCQkJMUNFQ0IzQjYyMUY1
MEFDNzAwRjQ0NTQyIC8qIFdITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmggKi8sCiAJCQkJMUNFQ0Iz
QjgyMUY1MEQxMDAwRjQ0NTQyIC8qIFdITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1
dGVQaXBlbGluZU1ldGFsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQkocmV2aXNpb24g
MjQ4MjYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQ
VUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBA
IHN0YXRpYyBPcHRpb25hbDxXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMKICAgICAgICAgQVNTRVJU
KGNvbXB1dGVMaWJyYXJ5KTsKICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3NzEgT25jZSB3ZSB6ZXJvLWZpbGwgdmFyaWFibGVzLCB0
aGVyZSBzaG91bGQgYmUgbm8gd2FybmluZ3MsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIEFTU0VS
VCghZXJyb3IpIGhlcmUuCiAKLSAgICAgICAgY29tcHV0ZUVudHJ5UG9pbnQgPSB3aGxzbENvbXBp
bGVSZXN1bHQtPm1hbmdsZWRFbnRyeVBvaW50TmFtZTsKKyAgICAgICAgY29tcHV0ZUVudHJ5UG9p
bnQgPSB3aGxzbENvbXBpbGVSZXN1bHQtPm1hbmdsZWRFbnRyeVBvaW50TmFtZS50b1N0cmluZygp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbXB1dGVMaWJyYXJ5ID0gY29tcHV0ZVN0YWdlLm1v
ZHVsZS0+cGxhdGZvcm1TaGFkZXJNb2R1bGUoKTsKICAgICAgICAgY29tcHV0ZUVudHJ5UG9pbnQg
PSBjb21wdXRlU3RhZ2UuZW50cnlQb2ludDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQ
aXBlbGluZU1ldGFsLm1tCShyZXZpc2lvbiAyNDgyNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDExLDggKzQxMSw4IEBAIHN0YXRpYyBib29sIHRyeVNldEZ1bmN0aW9ucyhj
b25zdCBHUFVQaXAKICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTU3NzEgT25jZSB3ZSB6ZXJvLWZpbGwgdmFyaWFibGVzLCB0aGVyZSBz
aG91bGQgYmUgbm8gd2FybmluZ3MsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVCghZXJy
b3IpIGhlcmUuCiAKICAgICAgICAgZnJhZ21lbnRMaWJyYXJ5ID0gdmVydGV4TGlicmFyeTsKLSAg
ICAgICAgdmVydGV4RW50cnlQb2ludCA9IHdobHNsQ29tcGlsZVJlc3VsdC0+bWFuZ2xlZFZlcnRl
eEVudHJ5UG9pbnROYW1lOwotICAgICAgICBmcmFnbWVudEVudHJ5UG9pbnQgPSB3aGxzbENvbXBp
bGVSZXN1bHQtPm1hbmdsZWRGcmFnbWVudEVudHJ5UG9pbnROYW1lOworICAgICAgICB2ZXJ0ZXhF
bnRyeVBvaW50ID0gd2hsc2xDb21waWxlUmVzdWx0LT5tYW5nbGVkVmVydGV4RW50cnlQb2ludE5h
bWUudG9TdHJpbmcoKTsKKyAgICAgICAgZnJhZ21lbnRFbnRyeVBvaW50ID0gd2hsc2xDb21waWxl
UmVzdWx0LT5tYW5nbGVkRnJhZ21lbnRFbnRyeVBvaW50TmFtZS50b1N0cmluZygpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIHZlcnRleExpYnJhcnkgPSB2ZXJ0ZXhTdGFnZS5tb2R1bGUtPnBsYXRm
b3JtU2hhZGVyTW9kdWxlKCk7CiAgICAgICAgIHZlcnRleEVudHJ5UG9pbnQgPSB2ZXJ0ZXhTdGFn
ZS5lbnRyeVBvaW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375508</attachid>
            <date>2019-08-04 13:49:07 -0700</date>
            <delta_ts>2019-08-04 20:26:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200429-20190804134907.patch</filename>
            <type>text/plain</type>
            <size>75913</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAxOS0wOC0wNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgTWFuZ2xlZCBXSExTTCBuYW1lcyBk
b24ndCBuZWVkIHRvIGFsbG9jYXRlIFN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDQyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRvIGF2b2lkIGFsbG9jYXRpbmcgc3RyaW5ncyBmb3IgZWFj
aCBtYW5nbGVkIG5hbWUgdXNlZCB0byB0cmFuc2Zvcm0gV0hMU0wgdG8gTWV0YWwsIHdoaWNoIHdl
J2QKKyAgICAgICAgbGlrZSB0byBhdm9pZCBzaW5jZSBpdCBpcyBib3RoIHVubmVjZXNzYXJpbHkg
ZXhwZW5zaXZlIGluIHRpbWUgYW5kIHNwYWNlLCB3ZSBjYW4gaW5zdGVhZCBqdXN0CisgICAgICAg
IHN0b3JlIHRoZSB1bmlxdWUgaW50ZWdlciBpZGVudGlmaWVyIHRoYXQgd2FzIGJlaW5nIHVzZWQg
dG8gY29uc3RydWN0IHRoZSBTdHJpbmcuIAorICAgICAgICAKKyAgICAgICAgU2luY2UgdGhlIGV4
aXN0aW5nIG1hbmdsZWQgbmFtZXMgd2VyZSBhbGwgb2YgdGhlIGZvcm0gInByZWZpeCIgKyB1bnNp
Z25lZCBpbnRlZ2VyIHZhbHVlICh3aGVyZSAKKyAgICAgICAgcHJlZml4IGNvdWxkIGJlICJ0eXBl
IiwgImVudW1lcmF0aW9uTWVtYmVyIiwgInN0cnVjdHVyZUVsZW1lbnQiLCAidmFyaWFibGUiIG9y
ICJmdW5jdGlvbiIpIHdlCisgICAgICAgIHN0cm9uZ2x5IHR5cGUgdGhlIGludGVnZXIgYnkgc3Rv
cmluZyBpdCBpbiBhIHN0cnVjdCAoTWFuZ2xlZFZhcmlhYmxlTmFtZSwgTWFuZ2xlZFR5cGVOYW1l
LCBldGMuKQorICAgICAgICBXaGVuIHRoZSBmdWxsIG5hbWUgaXMgYWN0dWFsbHkgbmVlZGVkLCBT
dHJpbmdUeXBlQWRhcHRlcidzIHNwZWNpYWxpemVkIGZvciB0aGUgc3RydWN0cyBhcmUKKyAgICAg
ICAgdXNlZCB0byB3cml0ZSBkaXJlY3RseSBpbnRvIHRoZSBwcmVhbGxvY2F0ZWQgYnVmZmVycyBv
ZiBTdHJpbmdCdWlsZGVycyBvciBtYWtlU3RyaW5nKCkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTE1hbmdsZWROYW1lcy5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZFZhcmlhYmxlTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6Ok1hbmdsZWRUeXBlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6Ok1hbmdsZWRTdHJ1Y3R1cmVFbGVtZW50TmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6Ok1hbmdsZWRFbnVtZXJhdGlvbk1lbWJlck5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkRnVuY3Rpb25OYW1lKToKKyAgICAgICAg
QWRkcyBzdHJ1Y3RzIGZvciBlYWNoIHR5cGUgb2YgbWFuZ2xlZCBuYW1lIGFuZCBTdHJpbmdUeXBl
QWRhcHRlciBzcGVjaWFsaXphdGlvbnMgZm9yCisgICAgICAgIGVhY2ggdG8gYWxsb3cgdGhlaXIg
dXNlIGluIFN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoKSBvciBtYWtlU3RyaW5nKCkuIAor
ICAgICAgICAKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhIFZhcmlhbnQsIE1hbmdsZWRPck5hdGl2
ZVR5cGVOYW1lLCBvZiBNYW5nbGVkVHlwZU5hbWUgYW5kIFN0cmluZyBpcyAKKyAgICAgICAgZGVj
bGFyZWQgdG8gYWxsb3cgZm9yIHRoZSBmZXcgY2FzZXMgd2hlcmUgYSBuYXRpdmUgdHlwZSAoZS5n
LiBmbG9hdDQpIGlzIG5lZWRlZC4gVGhlCisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyIGZvciBN
YW5nbGVkT3JOYXRpdmVUeXBlTmFtZSBjb3VsZCBiZSBnZW5lcmFsaXplZCBmb3IgYW55IFZhcmlh
bnQKKyAgICAgICAgaW4gdGhlIGZ1dHVyZSwgYnV0IEkgbGVmdCBpdCBub24tZ2VuZXJhbCBmb3Ig
bm93LCBhcyBpdCBpcyBub24tb2J2aW91cyBpZiBvbmUgd291bGQKKyAgICAgICAgd2FudCB0byBz
dG9yZSBWYXJpYW50PFR5cGVzLi4uPiwgYW5kIGhhdmUgZWFjaCBtZW1iZXIgZnVuY3Rpb24gY29u
c3RydWN0IGEgdGVtcG9yYXJ5CisgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyLCBvciBzdG9yZSBh
IFZhcmlhbnQ8U3RyaW5nVHlwZUFkYXB0ZXI8VHlwZXM+Li4uPiBhbmQgcGVyZm9ybSBjb252ZXJz
aW9uCisgICAgICAgIGluIHRoZSBjb25zdHJ1Y3Rpb24uCisKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6RW50cnlQb2lu
dFNjYWZmb2xkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6aW50ZXJuYWxU
eXBlRm9yU2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OmJ1aWx0SW5zU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjptYW5nbGVkSW5wdXRQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5n
OjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZyYWdtZW50RW50cnlQb2ludFNj
YWZmb2xkaW5nOjpGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6cGFjayk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1
dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkNvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRlRW50cnlQb2ludFNjYWZmb2xk
aW5nOjpzaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRl
RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhcmFtZXRlclZhcmlhYmxl
cyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldy
aXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVjbGFy
YXRpb25Xcml0ZXI6OkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyOjp2aXNpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6RnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmFw
cGVuZFJpZ2h0VmFsdWVXaXRoTnVsbGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmFwcGVuZFJpZ2h0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmFw
cGVuZExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dGFrZUxhc3RWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dGFrZUxhc3RWYWx1ZUFuZE51bGxh
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp0YWtlTGFzdExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVuZGVyRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjpSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmNyZWF0ZUVudHJ5
UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1
dGVGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OkNvbXB1dGVGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpDb21wdXRlRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjpjcmVhdGVFbnRyeVBvaW50U2NhZmZvbGRpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpzaGFyZWRNZXRhbEZ1bmN0aW9ucyk6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmg6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldy
aXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OndyaXRlTmF0aXZlRnVu
Y3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZl
RnVuY3Rpb25Xcml0ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTFR5cGVOYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VU
eXBlTmFtZU5vZGU6OkJhc2VUeXBlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjptYW5nbGVkTmFtZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OkFycmF5VHlwZU5hbWVOb2RlOjpBcnJheVR5cGVOYW1lTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkFycmF5UmVmZXJlbmNlVHlwZU5h
bWVOb2RlOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OlBvaW50ZXJUeXBlTmFtZU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGU6OlJl
ZmVyZW5jZVR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6Ok1l
dGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyOjpNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6bWV0YWxUeXBlRGVjbGFy
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjplbWl0
TmFtZWRUeXBlRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5
cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6VHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclN0cnVj
dHVyZUVsZW1lbnQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
VHlwZU5hbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6
Z2VuZXJhdGVOZXh0VHlwZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpU
eXBlTmFtZXI6OmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjpnZW5lcmF0ZU5leHRFbnVtZXJhdGlvbk1l
bWJlck5hbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5o
OgorICAgICAgICBSZXBsYWNlIHVzZXMgb2YgU3RyaW5nIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1h
bmdsZWQgbmFtZSB0eXBlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICBBZGQgV0hMU0xNYW5nbGVkTmFtZXMuaAorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6dHJ5U2V0RnVuY3Rpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbToKKyAgICAgICAgKFdlYkNv
cmU6OnRyeVNldEZ1bmN0aW9ucyk6CisgICAgICAgIENvbnZlcnQgdGhlIG1hbmdsZWQgbmFtZXMg
dG8gU3RyaW5ncyBmb3IgcGFzc2luZyB0byBNZXRhbCBBUEkuIE5PVEU6IFdlIGNvdWxkIGF2b2lk
IGhhdmluZyB0aGUKKyAgICAgICAgdG9TdHJpbmcoKSBtZW1iZXIgZnVuY3Rpb24gb24gTWFuZ2xl
ZEZ1bmN0aW9uTmFtZSBpZiB3ZSBhbGxvd2VkIG1ha2VTdHJpbmcoKSB0byB0YWtlIGEgc2luZ2xl
CisgICAgICAgIGFyZ3VtZW50LgorCiAyMDE5LTA4LTA0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgUGluZyBsb2FkcyBzaG91bGQgbm90IHByZXZlbnQgcGFnZSBj
YWNoaW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBy
ZXBhcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByZXBhcmUuaAkocmV2aXNpb24gMjQ4MjYxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFcnJvci5oIgor
I2luY2x1ZGUgIldITFNMTWFuZ2xlZE5hbWVzLmgiCiAjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURl
c2NyaXB0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzcsOCAr
MzgsOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBzdHJ1Y3QgUmVuZGVyUHJlcGFyZVJlc3VsdCB7
CiAgICAgU3RyaW5nIG1ldGFsU291cmNlOwotICAgIFN0cmluZyBtYW5nbGVkVmVydGV4RW50cnlQ
b2ludE5hbWU7Ci0gICAgU3RyaW5nIG1hbmdsZWRGcmFnbWVudEVudHJ5UG9pbnROYW1lOworICAg
IE1ldGFsOjpNYW5nbGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRWZXJ0ZXhFbnRyeVBvaW50TmFtZTsK
KyAgICBNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZSBtYW5nbGVkRnJhZ21lbnRFbnRyeVBvaW50
TmFtZTsKIH07CiBFeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUo
U3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7CiAKQEAgLTUw
LDcgKzUxLDcgQEAgc3RydWN0IENvbXB1dGVEaW1lbnNpb25zIHsKIAogc3RydWN0IENvbXB1dGVQ
cmVwYXJlUmVzdWx0IHsKICAgICBTdHJpbmcgbWV0YWxTb3VyY2U7Ci0gICAgU3RyaW5nIG1hbmds
ZWRFbnRyeVBvaW50TmFtZTsKKyAgICBNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZSBtYW5nbGVk
RW50cnlQb2ludE5hbWU7CiAgICAgQ29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnM7
CiB9OwogRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJp
bmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCShyZXZpc2lvbiAyNDgy
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVu
dHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAg
c3RhdGljIFN0cmluZyBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhBU1Q6OgogICAgIHJldHVybiBtYWtl
U3RyaW5nKCJbW3VzZXIodXNlciIsIHN0YWdlSW5PdXRTZW1hbnRpYy5pbmRleCgpLCAiKV1dIik7
CiB9CiAKLUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6RW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJp
bnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJ
dGVtcywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5
b3V0LCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkK
K0VudHJ5UG9pbnRTY2FmZm9sZGluZzo6RW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJpbnNpY3Ms
IFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVtcywg
SGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0LCBz
dGQ6OmZ1bmN0aW9uPE1hbmdsZWRWYXJpYWJsZU5hbWUoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUpCiAgICAgOiBtX2Z1bmN0aW9uRGVmaW5pdGlvbihmdW5jdGlvbkRlZmluaXRpb24pCiAg
ICAgLCBtX2ludHJpbnNpY3MoaW50cmluc2ljcykKICAgICAsIG1fdHlwZU5hbWVyKHR5cGVOYW1l
cikKQEAgLTE5MiwzOCArMTkyLDM4IEBAIE9wdGlvbmFsPFN0cmluZz4gRW50cnlQb2ludFNjYWZm
b2xkaW5nOjoKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCi1zdGF0
aWMgU3RyaW5nIGludGVybmFsVHlwZUZvclNlbWFudGljKGNvbnN0IEFTVDo6QnVpbHRJblNlbWFu
dGljJiBidWlsdEluU2VtYW50aWMpCitzdGF0aWMgU3RyaW5nVmlldyBpbnRlcm5hbFR5cGVGb3JT
ZW1hbnRpYyhjb25zdCBBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKQogewog
ICAgIHN3aXRjaCAoYnVpbHRJblNlbWFudGljLnZhcmlhYmxlKCkpIHsKICAgICBjYXNlIEFTVDo6
QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJbnN0YW5jZUlEOgotICAgICAgICByZXR1cm4g
InVpbnQiX3N0cjsKKyAgICAgICAgcmV0dXJuICJ1aW50IjsKICAgICBjYXNlIEFTVDo6QnVpbHRJ
blNlbWFudGljOjpWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKLSAgICAgICAgcmV0dXJuICJ1aW50Il9z
dHI7CisgICAgICAgIHJldHVybiAidWludCI7CiAgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRp
Yzo6VmFyaWFibGU6OlBTaXplOgotICAgICAgICByZXR1cm4gImZsb2F0Il9zdHI7CisgICAgICAg
IHJldHVybiAiZmxvYXQiOwogICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxl
OjpTVlBvc2l0aW9uOgotICAgICAgICByZXR1cm4gImZsb2F0NCJfc3RyOworICAgICAgICByZXR1
cm4gImZsb2F0NCI7CiAgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNW
SXNGcm9udEZhY2U6Ci0gICAgICAgIHJldHVybiAiYm9vbCJfc3RyOworICAgICAgICByZXR1cm4g
ImJvb2wiOwogICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlNhbXBs
ZUluZGV4OgotICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAgICAgICAgcmV0dXJuICJ1aW50
IjsKICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJbm5lckNvdmVy
YWdlOgotICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAgICAgICAgcmV0dXJuICJ1aW50IjsK
ICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZUYXJnZXQ6Ci0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBjYXNlIEFTVDo6
QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZEZXB0aDoKLSAgICAgICAgcmV0dXJuICJmbG9h
dCJfc3RyOworICAgICAgICByZXR1cm4gImZsb2F0IjsKICAgICBjYXNlIEFTVDo6QnVpbHRJblNl
bWFudGljOjpWYXJpYWJsZTo6U1ZDb3ZlcmFnZToKLSAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7
CisgICAgICAgIHJldHVybiAidWludCI7CiAgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6
VmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKLSAgICAgICAgcmV0dXJuICJ1aW50MyJfc3Ry
OworICAgICAgICByZXR1cm4gInVpbnQzIjsKICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGlj
OjpWYXJpYWJsZTo6U1ZHcm91cElEOgotICAgICAgICByZXR1cm4gInVpbnQzIl9zdHI7CisgICAg
ICAgIHJldHVybiAidWludDMiOwogICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlh
YmxlOjpTVkdyb3VwSW5kZXg6Ci0gICAgICAgIHJldHVybiAidWludCJfc3RyOworICAgICAgICBy
ZXR1cm4gInVpbnQiOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChidWlsdEluU2VtYW50
aWMudmFyaWFibGUoKSA9PSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBU
aHJlYWRJRCk7Ci0gICAgICAgIHJldHVybiAidWludDMiX3N0cjsKKyAgICAgICAgcmV0dXJuICJ1
aW50MyI7CiAgICAgfQogfQogCkBAIC0yNDAsMTAgKzI0MCwxMSBAQCBPcHRpb25hbDxTdHJpbmc+
IEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6CiAgICAgICAgIGF1dG8mIGl0ZW0gPSBtX2VudHJ5UG9p
bnRJdGVtcy5pbnB1dHNbbmFtZWRCdWlsdEluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdOwogICAg
ICAgICBhdXRvJiBidWlsdEluU2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRp
Yz4oKml0ZW0uc2VtYW50aWMpOwogICAgICAgICBhdXRvIGludGVybmFsVHlwZSA9IGludGVybmFs
VHlwZUZvclNlbWFudGljKGJ1aWx0SW5TZW1hbnRpYyk7Ci0gICAgICAgIGlmIChpbnRlcm5hbFR5
cGUuaXNOdWxsKCkpCi0gICAgICAgICAgICBpbnRlcm5hbFR5cGUgPSBtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKml0ZW0udW5uYW1lZFR5cGUpOwotICAgICAgICBhdXRvIHZhcmlhYmxl
TmFtZSA9IG5hbWVkQnVpbHRJbi52YXJpYWJsZU5hbWU7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoaW50ZXJuYWxUeXBlLCAnICcsIHZhcmlhYmxlTmFtZSwgJyAnLCBhdHRy
aWJ1dGVGb3JTZW1hbnRpYyhidWlsdEluU2VtYW50aWMpKTsKKyAgICAgICAgaWYgKCFpbnRlcm5h
bFR5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KGludGVybmFsVHlwZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCppdGVtLnVubmFt
ZWRUeXBlKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoJyAnLCBuYW1l
ZEJ1aWx0SW4udmFyaWFibGVOYW1lLCAnICcsIGF0dHJpYnV0ZUZvclNlbWFudGljKGJ1aWx0SW5T
ZW1hbnRpYykpOwogICAgIH0KICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwog
fQpAQCAtMjU2LDcgKzI1Nyw3IEBAIFN0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6Om1hbmds
ZWRJbnAKICAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmluaXRpb24g
PSBudWxscHRyOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2Z1bmN0aW9uRGVm
aW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPm5hbWUoKSA9PSBwYXRoWzBdKSB7Ci0gICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX3BhcmFtZXRlclZhcmlhYmxlc1tpXSk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKG1fcGFyYW1ldGVyVmFyaWFibGVzW2ld
KTsKICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG1fZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgICAgIGlmIChpczxB
U1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVk
VHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwpAQCAtMzU2LDcgKzM1
Nyw3IEBAIFN0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFja1Jlc28KICAgICByZXR1
cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCi1WZXJ0ZXhFbnRyeVBvaW50U2NhZmZv
bGRpbmc6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYgZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXIm
IHR5cGVOYW1lciwgRW50cnlQb2ludEl0ZW1zJiBlbnRyeVBvaW50SXRlbXMsIEhhc2hNYXA8Qmlu
ZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlvdXQmIGxheW91dCwgc3RkOjpmdW5jdGlv
bjxTdHJpbmcoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUsIEhhc2hNYXA8VmVydGV4QXR0
cmlidXRlKiwgc2l6ZV90PiYgbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpCitWZXJ0ZXhFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBU
eXBlTmFtZXImIHR5cGVOYW1lciwgRW50cnlQb2ludEl0ZW1zJiBlbnRyeVBvaW50SXRlbXMsIEhh
c2hNYXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlvdXQmIGxheW91dCwgc3Rk
OjpmdW5jdGlvbjxNYW5nbGVkVmFyaWFibGVOYW1lKCk+JiYgZ2VuZXJhdGVOZXh0VmFyaWFibGVO
YW1lLCBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVfdD4mIG1hdGNoZWRWZXJ0ZXhBdHRy
aWJ1dGVzKQogICAgIDogRW50cnlQb2ludFNjYWZmb2xkaW5nKGZ1bmN0aW9uRGVmaW5pdGlvbiwg
aW50cmluc2ljcywgdHlwZU5hbWVyLCBlbnRyeVBvaW50SXRlbXMsIHJlc291cmNlTWFwLCBsYXlv
dXQsIFdURk1vdmUoZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKSkKICAgICAsIG1fbWF0Y2hlZFZl
cnRleEF0dHJpYnV0ZXMobWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpCiAgICAgLCBtX3N0YWdlSW5T
dHJ1Y3ROYW1lKHR5cGVOYW1lci5nZW5lcmF0ZU5leHRUeXBlTmFtZSgpKQpAQCAtMzc3LDkgKzM3
OCwxMiBAQCBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OlZlcnRleEVudHJ5CiAgICAgICAg
IGF1dG8mIG91dHB1dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldOwogICAgICAg
ICBOYW1lZE91dHB1dCBuYW1lZE91dHB1dDsKICAgICAgICAgbmFtZWRPdXRwdXQuZWxlbWVudE5h
bWUgPSBtX3R5cGVOYW1lci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOworICAg
ICAgICBTdHJpbmdWaWV3IGludGVybmFsVHlwZTsKICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8QVNUOjpCdWlsdEluU2VtYW50aWM+KCpvdXRwdXRJdGVtLnNlbWFudGljKSkKLSAg
ICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVybmFsVHlwZU5hbWUgPSBpbnRlcm5hbFR5cGVGb3JT
ZW1hbnRpYyhXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKm91dHB1dEl0ZW0uc2VtYW50
aWMpKTsKLSAgICAgICAgaWYgKG5hbWVkT3V0cHV0LmludGVybmFsVHlwZU5hbWUuaXNOdWxsKCkp
CisgICAgICAgICAgICBpbnRlcm5hbFR5cGUgPSBpbnRlcm5hbFR5cGVGb3JTZW1hbnRpYyhXVEY6
OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKm91dHB1dEl0ZW0uc2VtYW50aWMpKTsKKyAgICAg
ICAgaWYgKCFpbnRlcm5hbFR5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICBuYW1lZE91dHB1dC5p
bnRlcm5hbFR5cGVOYW1lID0gaW50ZXJuYWxUeXBlLnRvU3RyaW5nKCk7CisgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVybmFsVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm91dHB1dEl0ZW0udW5uYW1lZFR5cGUpOwogICAgICAgICBtX25h
bWVkT3V0cHV0cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZE91dHB1dCkpOwogICAgIH0K
QEAgLTQxNSw3ICs0MTksNyBAQCBTdHJpbmcgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpo
ZWxwCiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIFZl
cnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1l
KQorU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKE1hbmdsZWRG
dW5jdGlvbk5hbWUgZnVuY3Rpb25OYW1lKQogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKIApAQCAtNDQ0LDcgKzQ0OCw3IEBAIFN0cmluZyBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZv
bGRpbmc6OnVucGEKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCi1T
dHJpbmcgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKGNvbnN0IFN0cmluZyYgaW5w
dXRWYXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgb3V0cHV0VmFyaWFibGVOYW1lKQorU3RyaW5n
IFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayhNYW5nbGVkVmFyaWFibGVOYW1lIGlu
cHV0VmFyaWFibGVOYW1lLCBNYW5nbGVkVmFyaWFibGVOYW1lIG91dHB1dFZhcmlhYmxlTmFtZSkK
IHsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAKQEAgLTQ2Myw3ICs0NjcsNyBA
QCBTdHJpbmcgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrCiAgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRp
bmc6OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
JiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYg
dHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5k
aW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9u
PFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSwgSGFzaE1hcDxBdHRhY2htZW50
RGVzY3JpcHRvciosIHNpemVfdD4mKQorRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkZy
YWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24sIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5h
bWVyLCBFbnRyeVBvaW50SXRlbXMmIGVudHJ5UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwg
c2l6ZV90PiYgcmVzb3VyY2VNYXAsIExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPE1hbmds
ZWRWYXJpYWJsZU5hbWUoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUsIEhhc2hNYXA8QXR0
YWNobWVudERlc2NyaXB0b3IqLCBzaXplX3Q+JikKICAgICA6IEVudHJ5UG9pbnRTY2FmZm9sZGlu
ZyhmdW5jdGlvbkRlZmluaXRpb24sIGludHJpbnNpY3MsIHR5cGVOYW1lciwgZW50cnlQb2ludEl0
ZW1zLCByZXNvdXJjZU1hcCwgbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSkpCiAgICAgLCBtX3N0YWdlSW5TdHJ1Y3ROYW1lKHR5cGVOYW1lci5nZW5lcmF0ZU5leHRUeXBl
TmFtZSgpKQogICAgICwgbV9yZXR1cm5TdHJ1Y3ROYW1lKHR5cGVOYW1lci5nZW5lcmF0ZU5leHRU
eXBlTmFtZSgpKQpAQCAtNDg2LDkgKzQ5MCwxMiBAQCBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9s
ZGluZzo6RnJhZ21lbnRFCiAgICAgICAgIGF1dG8mIG91dHB1dEl0ZW0gPSBtX2VudHJ5UG9pbnRJ
dGVtcy5vdXRwdXRzW2ldOwogICAgICAgICBOYW1lZE91dHB1dCBuYW1lZE91dHB1dDsKICAgICAg
ICAgbmFtZWRPdXRwdXQuZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1lci5nZW5lcmF0ZU5leHRTdHJ1
Y3R1cmVFbGVtZW50TmFtZSgpOworICAgICAgICBTdHJpbmdWaWV3IGludGVybmFsVHlwZTsKICAg
ICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpCdWlsdEluU2VtYW50aWM+KCpv
dXRwdXRJdGVtLnNlbWFudGljKSkKLSAgICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVybmFsVHlw
ZU5hbWUgPSBpbnRlcm5hbFR5cGVGb3JTZW1hbnRpYyhXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1h
bnRpYz4oKm91dHB1dEl0ZW0uc2VtYW50aWMpKTsKLSAgICAgICAgaWYgKG5hbWVkT3V0cHV0Lmlu
dGVybmFsVHlwZU5hbWUuaXNOdWxsKCkpCisgICAgICAgICAgICBpbnRlcm5hbFR5cGUgPSBpbnRl
cm5hbFR5cGVGb3JTZW1hbnRpYyhXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKm91dHB1
dEl0ZW0uc2VtYW50aWMpKTsKKyAgICAgICAgaWYgKCFpbnRlcm5hbFR5cGUuaXNOdWxsKCkpCisg
ICAgICAgICAgICBuYW1lZE91dHB1dC5pbnRlcm5hbFR5cGVOYW1lID0gaW50ZXJuYWxUeXBlLnRv
U3RyaW5nKCk7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVybmFs
VHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm91dHB1dEl0ZW0udW5u
YW1lZFR5cGUpOwogICAgICAgICBtX25hbWVkT3V0cHV0cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZShuYW1lZE91dHB1dCkpOwogICAgIH0KQEAgLTUyNCw3ICs1MzEsNyBAQCBTdHJpbmcgRnJhZ21l
bnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlCiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKIH0KIAotU3RyaW5nIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWdu
YXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpCitTdHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2Nh
ZmZvbGRpbmc6OnNpZ25hdHVyZShNYW5nbGVkRnVuY3Rpb25OYW1lIGZ1bmN0aW9uTmFtZSkKIHsK
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAKQEAgLTU1Myw3ICs1NjAsNyBAQCBT
dHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnVuCiAgICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIEZyYWdtZW50RW50cnlQb2ludFNjYWZm
b2xkaW5nOjpwYWNrKGNvbnN0IFN0cmluZyYgaW5wdXRWYXJpYWJsZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgb3V0cHV0VmFyaWFibGVOYW1lKQorU3RyaW5nIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xk
aW5nOjpwYWNrKE1hbmdsZWRWYXJpYWJsZU5hbWUgaW5wdXRWYXJpYWJsZU5hbWUsIE1hbmdsZWRW
YXJpYWJsZU5hbWUgb3V0cHV0VmFyaWFibGVOYW1lKQogewogICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKIApAQCAtNTcyLDcgKzU3OSw3IEBAIFN0cmluZyBGcmFnbWVudEVudHJ5UG9p
bnRTY2FmZm9sZGluZzo6cGEKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwog
fQogCi1Db21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpDb21wdXRlRW50cnlQb2ludFNjYWZm
b2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIEludHJp
bnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBFbnRyeVBvaW50SXRlbXMm
IGVudHJ5UG9pbnRJdGVtcywgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAs
IExheW91dCYgbGF5b3V0LCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSkKK0NvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkNvbXB1dGVFbnRyeVBv
aW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlv
biwgSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEVudHJ5UG9p
bnRJdGVtcyYgZW50cnlQb2ludEl0ZW1zLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNv
dXJjZU1hcCwgTGF5b3V0JiBsYXlvdXQsIHN0ZDo6ZnVuY3Rpb248TWFuZ2xlZFZhcmlhYmxlTmFt
ZSgpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSkKICAgICA6IEVudHJ5UG9pbnRTY2FmZm9s
ZGluZyhmdW5jdGlvbkRlZmluaXRpb24sIGludHJpbnNpY3MsIHR5cGVOYW1lciwgZW50cnlQb2lu
dEl0ZW1zLCByZXNvdXJjZU1hcCwgbGF5b3V0LCBXVEZNb3ZlKGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSkpCiB7CiB9CkBAIC01ODIsNyArNTg5LDcgQEAgU3RyaW5nIENvbXB1dGVFbnRyeVBvaW50
U2NhZmZvbGRpbmc6OmhlbAogICAgIHJldHVybiByZXNvdXJjZUhlbHBlclR5cGVzKCk7CiB9CiAK
LVN0cmluZyBDb21wdXRlRW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUoU3RyaW5nJiBm
dW5jdGlvbk5hbWUpCitTdHJpbmcgQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0
dXJlKE1hbmdsZWRGdW5jdGlvbk5hbWUgZnVuY3Rpb25OYW1lKQogewogICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKIApAQCAtNjA3LDcgKzYxNCw3IEBAIFN0cmluZyBDb21wdXRlRW50
cnlQb2ludFNjYWZmb2xkaW5nOjp1bnAKICAgICByZXR1cm4gdW5wYWNrUmVzb3VyY2VzQW5kTmFt
ZWRCdWlsdElucygpOwogfQogCi1TdHJpbmcgQ29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZzo6
cGFjayhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQorU3RyaW5nIENvbXB1dGVFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnBhY2soTWFuZ2xlZFZhcmlhYmxlTmFtZSwgTWFuZ2xlZFZhcmlhYmxl
TmFtZSkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVu
dHJ5UG9pbnRTY2FmZm9sZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgJKHJldmlz
aW9uIDI0ODI2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTE1hbmdsZWROYW1l
cy5oIgogI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUwLDE3ICs1
MSwxOCBAQCBjbGFzcyBUeXBlTmFtZXI7CiAKIGNsYXNzIEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7
CiBwdWJsaWM6Ci0gICAgRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJiwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIEVudHJ5UG9pbnRJdGVtcyYsIEhhc2hNYXA8
QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlvdXQmLCBzdGQ6OmZ1bmN0aW9uPFN0
cmluZygpPiYmIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSk7CiAgICAgdmlydHVhbCB+RW50cnlQ
b2ludFNjYWZmb2xkaW5nKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCBTdHJpbmcgaGVscGVy
VHlwZXMoKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2lnbmF0dXJlKFN0cmluZyYgZnVuY3Rp
b25OYW1lKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgc2lnbmF0dXJlKE1hbmdsZWRGdW5jdGlv
bk5hbWUpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyB1bnBhY2soKSA9IDA7Ci0gICAgdmlydHVh
bCBTdHJpbmcgcGFjayhjb25zdCBTdHJpbmcmIGV4aXN0aW5nVmFyaWFibGVOYW1lLCBjb25zdCBT
dHJpbmcmIHZhcmlhYmxlTmFtZSkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHBhY2soTWFuZ2xl
ZFZhcmlhYmxlTmFtZSBleGlzdGluZ1ZhcmlhYmxlTmFtZSwgTWFuZ2xlZFZhcmlhYmxlTmFtZSkg
PSAwOwogCi0gICAgVmVjdG9yPFN0cmluZz4mIHBhcmFtZXRlclZhcmlhYmxlcygpIHsgcmV0dXJu
IG1fcGFyYW1ldGVyVmFyaWFibGVzOyB9CisgICAgVmVjdG9yPE1hbmdsZWRWYXJpYWJsZU5hbWU+
JiBwYXJhbWV0ZXJWYXJpYWJsZXMoKSB7IHJldHVybiBtX3BhcmFtZXRlclZhcmlhYmxlczsgfQog
CiBwcm90ZWN0ZWQ6CisgICAgRW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uJiwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIEVudHJ5UG9pbnRJdGVtcyYsIEhhc2hN
YXA8QmluZGluZyosIHNpemVfdD4mIHJlc291cmNlTWFwLCBMYXlvdXQmLCBzdGQ6OmZ1bmN0aW9u
PE1hbmdsZWRWYXJpYWJsZU5hbWUoKT4mJiBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpOworCiAg
ICAgU3RyaW5nIHJlc291cmNlSGVscGVyVHlwZXMoKTsKICAgICBPcHRpb25hbDxTdHJpbmc+IHJl
c291cmNlU2lnbmF0dXJlKCk7CiAgICAgT3B0aW9uYWw8U3RyaW5nPiBidWlsdEluc1NpZ25hdHVy
ZSgpOwpAQCAtNzUsMjEgKzc3LDIxIEBAIHByb3RlY3RlZDoKICAgICBFbnRyeVBvaW50SXRlbXMm
IG1fZW50cnlQb2ludEl0ZW1zOwogICAgIEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4mIG1fcmVz
b3VyY2VNYXA7CiAgICAgTGF5b3V0JiBtX2xheW91dDsKLSAgICBzdGQ6OmZ1bmN0aW9uPFN0cmlu
ZygpPiBtX2dlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZTsKKyAgICBzdGQ6OmZ1bmN0aW9uPE1hbmds
ZWRWYXJpYWJsZU5hbWUoKT4gbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWU7CiAKICAgICBzdHJ1
Y3QgTGVuZ3RoSW5mb3JtYXRpb24gewotICAgICAgICBTdHJpbmcgZWxlbWVudE5hbWU7Ci0gICAg
ICAgIFN0cmluZyB0ZW1wb3JhcnlOYW1lOworICAgICAgICBNYW5nbGVkU3RydWN0dXJlRWxlbWVu
dE5hbWUgZWxlbWVudE5hbWU7CisgICAgICAgIE1hbmdsZWRWYXJpYWJsZU5hbWUgdGVtcG9yYXJ5
TmFtZTsKICAgICAgICAgdW5zaWduZWQgaW5kZXg7CiAgICAgfTsKICAgICBzdHJ1Y3QgTmFtZWRC
aW5kaW5nIHsKLSAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOworICAgICAgICBNYW5nbGVkU3Ry
dWN0dXJlRWxlbWVudE5hbWUgZWxlbWVudE5hbWU7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4Owog
ICAgICAgICBPcHRpb25hbDxMZW5ndGhJbmZvcm1hdGlvbj4gbGVuZ3RoSW5mb3JtYXRpb247CiAg
ICAgfTsKICAgICBzdHJ1Y3QgTmFtZWRCaW5kR3JvdXAgewotICAgICAgICBTdHJpbmcgc3RydWN0
TmFtZTsKLSAgICAgICAgU3RyaW5nIHZhcmlhYmxlTmFtZTsKKyAgICAgICAgTWFuZ2xlZFR5cGVO
YW1lIHN0cnVjdE5hbWU7CisgICAgICAgIE1hbmdsZWRWYXJpYWJsZU5hbWUgdmFyaWFibGVOYW1l
OwogICAgICAgICBWZWN0b3I8TmFtZWRCaW5kaW5nPiBuYW1lZEJpbmRpbmdzOwogICAgICAgICB1
bnNpZ25lZCBhcmd1bWVudEJ1ZmZlckluZGV4OwogICAgIH07CkBAIC05Nyw4MyArOTksODEgQEAg
cHJvdGVjdGVkOgogCiAgICAgc3RydWN0IE5hbWVkQnVpbHRJbiB7CiAgICAgICAgIHNpemVfdCBp
bmRleEluRW50cnlQb2ludEl0ZW1zOwotICAgICAgICBTdHJpbmcgdmFyaWFibGVOYW1lOworICAg
ICAgICBNYW5nbGVkVmFyaWFibGVOYW1lIHZhcmlhYmxlTmFtZTsKICAgICB9OwogICAgIFZlY3Rv
cjxOYW1lZEJ1aWx0SW4+IG1fbmFtZWRCdWlsdEluczsKIAotICAgIFZlY3RvcjxTdHJpbmc+IG1f
cGFyYW1ldGVyVmFyaWFibGVzOworICAgIFZlY3RvcjxNYW5nbGVkVmFyaWFibGVOYW1lPiBtX3Bh
cmFtZXRlclZhcmlhYmxlczsKIH07CiAKIGNsYXNzIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGlu
ZyA6IHB1YmxpYyBFbnRyeVBvaW50U2NhZmZvbGRpbmcgewogcHVibGljOgotICAgIFZlcnRleEVu
dHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3Mm
LCBUeXBlTmFtZXImLCBFbnRyeVBvaW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+
JiByZXNvdXJjZU1hcCwgTGF5b3V0Jiwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUsIEhhc2hNYXA8VmVydGV4QXR0cmlidXRlKiwgc2l6ZV90PiYgbWF0
Y2hlZFZlcnRleEF0dHJpYnV0ZXMpOworICAgIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZyhB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImLCBFbnRyeVBv
aW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0
Jiwgc3RkOjpmdW5jdGlvbjxNYW5nbGVkVmFyaWFibGVOYW1lKCk+JiYgZ2VuZXJhdGVOZXh0VmFy
aWFibGVOYW1lLCBIYXNoTWFwPFZlcnRleEF0dHJpYnV0ZSosIHNpemVfdD4mIG1hdGNoZWRWZXJ0
ZXhBdHRyaWJ1dGVzKTsKICAgICB2aXJ0dWFsIH5WZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmco
KSA9IGRlZmF1bHQ7CiAKICAgICBTdHJpbmcgaGVscGVyVHlwZXMoKSBvdmVycmlkZTsKLSAgICBT
dHJpbmcgc2lnbmF0dXJlKFN0cmluZyYgZnVuY3Rpb25OYW1lKSBvdmVycmlkZTsKKyAgICBTdHJp
bmcgc2lnbmF0dXJlKE1hbmdsZWRGdW5jdGlvbk5hbWUpIG92ZXJyaWRlOwogICAgIFN0cmluZyB1
bnBhY2soKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgcGFjayhjb25zdCBTdHJpbmcmIGV4aXN0aW5n
VmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSkgb3ZlcnJpZGU7CisgICAg
U3RyaW5nIHBhY2soTWFuZ2xlZFZhcmlhYmxlTmFtZSBleGlzdGluZ1ZhcmlhYmxlTmFtZSwgTWFu
Z2xlZFZhcmlhYmxlTmFtZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgSGFzaE1hcDxWZXJ0
ZXhBdHRyaWJ1dGUqLCBzaXplX3Q+JiBtX21hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzOwotICAgIFN0
cmluZyBtX3N0YWdlSW5TdHJ1Y3ROYW1lOwotICAgIFN0cmluZyBtX3JldHVyblN0cnVjdE5hbWU7
Ci0gICAgU3RyaW5nIG1fc3RhZ2VJblBhcmFtZXRlck5hbWU7CisgICAgTWFuZ2xlZFR5cGVOYW1l
IG1fc3RhZ2VJblN0cnVjdE5hbWU7CisgICAgTWFuZ2xlZFR5cGVOYW1lIG1fcmV0dXJuU3RydWN0
TmFtZTsKKyAgICBNYW5nbGVkVmFyaWFibGVOYW1lIG1fc3RhZ2VJblBhcmFtZXRlck5hbWU7CiAK
ICAgICBzdHJ1Y3QgTmFtZWRTdGFnZUluIHsKICAgICAgICAgc2l6ZV90IGluZGV4SW5FbnRyeVBv
aW50SXRlbXM7Ci0gICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICAgICAgTWFuZ2xlZFN0
cnVjdHVyZUVsZW1lbnROYW1lIGVsZW1lbnROYW1lOwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVJbmRleDsKICAgICB9OwogICAgIFZlY3RvcjxOYW1lZFN0YWdlSW4+IG1fbmFtZWRTdGFnZUlu
czsKIAogICAgIHN0cnVjdCBOYW1lZE91dHB1dCB7Ci0gICAgICAgIFN0cmluZyBlbGVtZW50TmFt
ZTsKLSAgICAgICAgU3RyaW5nIGludGVybmFsVHlwZU5hbWU7CisgICAgICAgIE1hbmdsZWRTdHJ1
Y3R1cmVFbGVtZW50TmFtZSBlbGVtZW50TmFtZTsKKyAgICAgICAgTWFuZ2xlZE9yTmF0aXZlVHlw
ZU5hbWUgaW50ZXJuYWxUeXBlTmFtZTsKICAgICB9OwogICAgIFZlY3RvcjxOYW1lZE91dHB1dD4g
bV9uYW1lZE91dHB1dHM7CiB9OwogCiBjbGFzcyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGlu
ZyA6IHB1YmxpYyBFbnRyeVBvaW50U2NhZmZvbGRpbmcgewogcHVibGljOgotICAgIEZyYWdtZW50
RW50cnlQb2ludFNjYWZmb2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2lj
cyYsIFR5cGVOYW1lciYsIEVudHJ5UG9pbnRJdGVtcyYsIEhhc2hNYXA8QmluZGluZyosIHNpemVf
dD4mIHJlc291cmNlTWFwLCBMYXlvdXQmLCBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiYmIGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSwgSGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNpemVf
dD4mIG1hdGNoZWRDb2xvckF0dGFjaG1lbnRzKTsKKyAgICBGcmFnbWVudEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJpbnNpY3MmLCBUeXBlTmFtZXIm
LCBFbnRyeVBvaW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+JiByZXNvdXJjZU1h
cCwgTGF5b3V0Jiwgc3RkOjpmdW5jdGlvbjxNYW5nbGVkVmFyaWFibGVOYW1lKCk+JiYgZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lLCBIYXNoTWFwPEF0dGFjaG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90
PiYgbWF0Y2hlZENvbG9yQXR0YWNobWVudHMpOwogICAgIHZpcnR1YWwgfkZyYWdtZW50RW50cnlQ
b2ludFNjYWZmb2xkaW5nKCkgPSBkZWZhdWx0OwogCiAgICAgU3RyaW5nIGhlbHBlclR5cGVzKCkg
b3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHNpZ25hdHVyZShTdHJpbmcmIGZ1bmN0aW9uTmFtZSkgb3Zl
cnJpZGU7CisgICAgU3RyaW5nIHNpZ25hdHVyZShNYW5nbGVkRnVuY3Rpb25OYW1lKSBvdmVycmlk
ZTsKICAgICBTdHJpbmcgdW5wYWNrKCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHBhY2soY29uc3Qg
U3RyaW5nJiBleGlzdGluZ1ZhcmlhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUp
IG92ZXJyaWRlOworICAgIFN0cmluZyBwYWNrKE1hbmdsZWRWYXJpYWJsZU5hbWUgZXhpc3RpbmdW
YXJpYWJsZU5hbWUsIE1hbmdsZWRWYXJpYWJsZU5hbWUpIG92ZXJyaWRlOwogCiBwcml2YXRlOgot
ICAgIFN0cmluZyBtX3N0YWdlSW5TdHJ1Y3ROYW1lOwotICAgIFN0cmluZyBtX3JldHVyblN0cnVj
dE5hbWU7Ci0gICAgU3RyaW5nIG1fc3RhZ2VJblBhcmFtZXRlck5hbWU7CisgICAgTWFuZ2xlZFR5
cGVOYW1lIG1fc3RhZ2VJblN0cnVjdE5hbWU7CisgICAgTWFuZ2xlZFR5cGVOYW1lIG1fcmV0dXJu
U3RydWN0TmFtZTsKKyAgICBNYW5nbGVkVmFyaWFibGVOYW1lIG1fc3RhZ2VJblBhcmFtZXRlck5h
bWU7CiAKICAgICBzdHJ1Y3QgTmFtZWRTdGFnZUluIHsKICAgICAgICAgc2l6ZV90IGluZGV4SW5F
bnRyeVBvaW50SXRlbXM7Ci0gICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICAgICAgTWFu
Z2xlZFN0cnVjdHVyZUVsZW1lbnROYW1lIGVsZW1lbnROYW1lOwogICAgICAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVJbmRleDsKICAgICB9OwogICAgIFZlY3RvcjxOYW1lZFN0YWdlSW4+IG1fbmFtZWRT
dGFnZUluczsKIAogICAgIHN0cnVjdCBOYW1lZE91dHB1dCB7Ci0gICAgICAgIFN0cmluZyBlbGVt
ZW50TmFtZTsKLSAgICAgICAgU3RyaW5nIGludGVybmFsVHlwZU5hbWU7CisgICAgICAgIE1hbmds
ZWRTdHJ1Y3R1cmVFbGVtZW50TmFtZSBlbGVtZW50TmFtZTsKKyAgICAgICAgTWFuZ2xlZE9yTmF0
aXZlVHlwZU5hbWUgaW50ZXJuYWxUeXBlTmFtZTsKICAgICB9OwogICAgIFZlY3RvcjxOYW1lZE91
dHB1dD4gbV9uYW1lZE91dHB1dHM7CiB9OwogCiBjbGFzcyBDb21wdXRlRW50cnlQb2ludFNjYWZm
b2xkaW5nIDogcHVibGljIEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7CiBwdWJsaWM6Ci0gICAgQ29t
cHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYsIEludHJp
bnNpY3MmLCBUeXBlTmFtZXImLCBFbnRyeVBvaW50SXRlbXMmLCBIYXNoTWFwPEJpbmRpbmcqLCBz
aXplX3Q+JiByZXNvdXJjZU1hcCwgTGF5b3V0Jiwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4mJiBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUpOworICAgIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRp
bmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJiwgRW50
cnlQb2ludEl0ZW1zJiwgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PiYgcmVzb3VyY2VNYXAsIExh
eW91dCYsIHN0ZDo6ZnVuY3Rpb248TWFuZ2xlZFZhcmlhYmxlTmFtZSgpPiYmIGdlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSk7CiAgICAgdmlydHVhbCB+Q29tcHV0ZUVudHJ5UG9pbnRTY2FmZm9sZGlu
ZygpID0gZGVmYXVsdDsKIAogICAgIFN0cmluZyBoZWxwZXJUeXBlcygpIG92ZXJyaWRlOwotICAg
IFN0cmluZyBzaWduYXR1cmUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpIG92ZXJyaWRlOworICAgIFN0
cmluZyBzaWduYXR1cmUoTWFuZ2xlZEZ1bmN0aW9uTmFtZSkgb3ZlcnJpZGU7CiAgICAgU3RyaW5n
IHVucGFjaygpIG92ZXJyaWRlOwotICAgIFN0cmluZyBwYWNrKGNvbnN0IFN0cmluZyYgZXhpc3Rp
bmdWYXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lKSBvdmVycmlkZTsKLQot
cHJpdmF0ZToKKyAgICBTdHJpbmcgcGFjayhNYW5nbGVkVmFyaWFibGVOYW1lIGV4aXN0aW5nVmFy
aWFibGVOYW1lLCBNYW5nbGVkVmFyaWFibGVOYW1lKSBvdmVycmlkZTsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25X
cml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDgyNjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3Jp
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgTWV0YWwg
ewogCiBjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyIDogcHVibGljIFZpc2l0b3Igewog
cHVibGljOgotICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIoVHlwZU5hbWVyJiB0eXBlTmFt
ZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiYgZnVuY3Rpb25N
YXBwaW5nKQorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIoVHlwZU5hbWVyJiB0eXBlTmFt
ZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgTWFuZ2xlZEZ1bmN0aW9uTmFt
ZT4mIGZ1bmN0aW9uTWFwcGluZykKICAgICAgICAgOiBtX3R5cGVOYW1lcih0eXBlTmFtZXIpCiAg
ICAgICAgICwgbV9mdW5jdGlvbk1hcHBpbmcoZnVuY3Rpb25NYXBwaW5nKQogICAgIHsKQEAgLTYz
LDcgKzYzLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFR5cGVOYW1lciYgbV90eXBlTmFt
ZXI7Ci0gICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBtX2Z1
bmN0aW9uTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIE1h
bmdsZWRGdW5jdGlvbk5hbWU+JiBtX2Z1bmN0aW9uTWFwcGluZzsKICAgICBTdHJpbmdCdWlsZGVy
IG1fc3RyaW5nQnVpbGRlcjsKIH07CiAKQEAgLTc4LDE0ICs3OCwxNCBAQCB2b2lkIEZ1bmN0aW9u
RGVjbGFyYXRpb25Xcml0ZXI6OnZpc2l0KEFTCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBp
ZiAoaSkKICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpm
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKSk7CisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKmZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpKTsKICAgICB9
CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogfQogCiBjbGFzcyBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXIgOiBwdWJsaWMgVmlzaXRvciB7CiBwdWJsaWM6Ci0gICAgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlw
ZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0
aW9uTWFwcGluZywgTGF5b3V0JiBsYXlvdXQpCisgICAgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
KEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIE1hbmdsZWRGdW5jdGlvbk5hbWU+JiBmdW5jdGlvbk1h
cHBpbmcsIExheW91dCYgbGF5b3V0KQogICAgICAgICA6IG1faW50cmluc2ljcyhpbnRyaW5zaWNz
KQogICAgICAgICAsIG1fdHlwZU5hbWVyKHR5cGVOYW1lcikKICAgICAgICAgLCBtX2Z1bmN0aW9u
TWFwcGluZyhmdW5jdGlvbk1hcHBpbmcpCkBAIC0xNTAsMTAgKzE1MCw3IEBAIHByb3RlY3RlZDoK
IAogICAgIFN0cmluZyBjb25zdGFudEV4cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJl
c3Npb24mKTsKIAotICAgIFN0cmluZyBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInZhcmlhYmxlIiwgbV92YXJpYWJsZUNvdW50Kysp
OwotICAgIH0KKyAgICBNYW5nbGVkVmFyaWFibGVOYW1lIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpIHsgcmV0dXJuIHsgbV92YXJpYWJsZUNvdW50KysgfTsgfQogCiAgICAgZW51bSBjbGFzcyBO
dWxsYWJpbGl0eSA6IHVpbnQ4X3QgewogICAgICAgICBOb3ROdWxsLApAQCAtMTYxLDE0ICsxNTgs
MTQgQEAgcHJvdGVjdGVkOgogICAgIH07CiAKICAgICBzdHJ1Y3QgU3RhY2tJdGVtIHsKLSAgICAg
ICAgU3RyaW5nIHZhbHVlOwotICAgICAgICBTdHJpbmcgbGVmdFZhbHVlOworICAgICAgICBNYW5n
bGVkVmFyaWFibGVOYW1lIHZhbHVlOworICAgICAgICBPcHRpb25hbDxNYW5nbGVkVmFyaWFibGVO
YW1lPiBsZWZ0VmFsdWU7CiAgICAgICAgIE51bGxhYmlsaXR5IHZhbHVlTnVsbGFiaWxpdHk7CiAg
ICAgICAgIE51bGxhYmlsaXR5IGxlZnRWYWx1ZU51bGxhYmlsaXR5OwogICAgIH07CiAKICAgICBz
dHJ1Y3QgU3RhY2tWYWx1ZSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgTWFuZ2xl
ZFZhcmlhYmxlTmFtZSB2YWx1ZTsKICAgICAgICAgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CiAg
ICAgfTsKIApAQCAtMTc3LDMxICsxNzQsMjkgQEAgcHJvdGVjdGVkOgogICAgIC8vIGFuZCBEZXJl
ZmVyZW5jZUV4cHJlc3Npb24uIE1ha2VQb2ludGVyRXhwcmVzc2lvbiB3aWxsIHRyeSB0byBwcm9k
dWNlIHJ2YWx1ZXMgd2hpY2ggYXJlCiAgICAgLy8gbm9uLW51bGwsIGFuZCBEZXJlZmVyZW5jZUV4
cHJlc3Npb24gd2lsbCB0YWtlIGEgbm9uLW51bGwgcnZhbHVlIGFuZCB0cnkgdG8gcHJvZHVjZQog
ICAgIC8vIGEgbm9uLW51bGwgbHZhbHVlLgotICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1ZVdpdGhO
dWxsYWJpbGl0eShBU1Q6OkV4cHJlc3Npb24mLCBTdHJpbmcgdmFsdWUsIE51bGxhYmlsaXR5IG51
bGxhYmlsaXR5KQorICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1ZVdpdGhOdWxsYWJpbGl0eShBU1Q6
OkV4cHJlc3Npb24mLCBNYW5nbGVkVmFyaWFibGVOYW1lIHZhbHVlLCBOdWxsYWJpbGl0eSBudWxs
YWJpbGl0eSkKICAgICB7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RGTW92ZSh2YWx1ZSks
IFN0cmluZygpLCBudWxsYWJpbGl0eSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCB9KTsKKyAgICAg
ICAgbV9zdGFjay5hcHBlbmQoeyBXVEZNb3ZlKHZhbHVlKSwgV1RGOjpudWxsb3B0LCBudWxsYWJp
bGl0eSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCB9KTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGVu
ZFJpZ2h0VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBTdHJpbmcgdmFsdWUpCisg
ICAgdm9pZCBhcHBlbmRSaWdodFZhbHVlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgTWFu
Z2xlZFZhcmlhYmxlTmFtZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIGFwcGVuZFJpZ2h0VmFsdWVX
aXRoTnVsbGFiaWxpdHkoZXhwcmVzc2lvbiwgV1RGTW92ZSh2YWx1ZSksIE51bGxhYmlsaXR5OjpD
YW5CZU51bGwpOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kTGVmdFZhbHVlKEFTVDo6RXhwcmVz
c2lvbiYgZXhwcmVzc2lvbiwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgbGVmdFZhbHVlLCBOdWxsYWJp
bGl0eSBudWxsYWJpbGl0eSkKKyAgICB2b2lkIGFwcGVuZExlZnRWYWx1ZShBU1Q6OkV4cHJlc3Np
b24mIGV4cHJlc3Npb24sIE1hbmdsZWRWYXJpYWJsZU5hbWUgdmFsdWUsIE1hbmdsZWRWYXJpYWJs
ZU5hbWUgbGVmdFZhbHVlLCBOdWxsYWJpbGl0eSBudWxsYWJpbGl0eSkKICAgICB7CiAgICAgICAg
IEFTU0VSVF9VTlVTRUQoZXhwcmVzc2lvbiwgZXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigpLmxl
ZnRBZGRyZXNzU3BhY2UoKSk7CiAgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RGTW92ZSh2YWx1
ZSksIFdURk1vdmUobGVmdFZhbHVlKSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCwgbnVsbGFiaWxp
dHkgfSk7CiAgICAgfQogCi0gICAgU3RyaW5nIHRha2VMYXN0VmFsdWUoKQorICAgIE1hbmdsZWRW
YXJpYWJsZU5hbWUgdGFrZUxhc3RWYWx1ZSgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9zdGFj
ay5sYXN0KCkudmFsdWUpOwogICAgICAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpLnZhbHVl
OwogICAgIH0KIAogICAgIFN0YWNrVmFsdWUgdGFrZUxhc3RWYWx1ZUFuZE51bGxhYmlsaXR5KCkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3N0YWNrLmxhc3QoKS52YWx1ZSk7CiAgICAgICAgIGF1
dG8gbGFzdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICAgICAgcmV0dXJuIHsgbGFzdC52YWx1
ZSwgbGFzdC52YWx1ZU51bGxhYmlsaXR5IH07CiAgICAgfQpAQCAtMjEwLDcgKzIwNSw3IEBAIHBy
b3RlY3RlZDoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3N0YWNrLmxhc3QoKS5sZWZ0VmFsdWUp
OwogICAgICAgICBhdXRvIGxhc3QgPSBtX3N0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIHJldHVy
biB7IGxhc3QubGVmdFZhbHVlLCBsYXN0LmxlZnRWYWx1ZU51bGxhYmlsaXR5IH07CisgICAgICAg
IHJldHVybiB7ICpsYXN0LmxlZnRWYWx1ZSwgbGFzdC5sZWZ0VmFsdWVOdWxsYWJpbGl0eSB9Owog
ICAgIH0KIAogICAgIGVudW0gY2xhc3MgQnJlYWtDb250ZXh0IHsKQEAgLTIyMiwxNSArMjE3LDE1
IEBAIHByb3RlY3RlZDoKIAogICAgIEludHJpbnNpY3MmIG1faW50cmluc2ljczsKICAgICBUeXBl
TmFtZXImIG1fdHlwZU5hbWVyOwotICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiwgU3RyaW5nPiYgbV9mdW5jdGlvbk1hcHBpbmc7Ci0gICAgSGFzaE1hcDxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24qLCBTdHJpbmc+IG1fdmFyaWFibGVNYXBwaW5nOworICAgIEhhc2hNYXA8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZT4mIG1fZnVuY3Rpb25N
YXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiwgTWFuZ2xlZFZh
cmlhYmxlTmFtZT4gbV92YXJpYWJsZU1hcHBpbmc7CiAgICAgU3RyaW5nQnVpbGRlciBtX3N0cmlu
Z0J1aWxkZXI7CiAKICAgICBWZWN0b3I8U3RhY2tJdGVtPiBtX3N0YWNrOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxFbnRyeVBvaW50U2NhZmZvbGRpbmc+IG1fZW50cnlQb2ludFNjYWZmb2xkaW5nOwog
ICAgIExheW91dCYgbV9sYXlvdXQ7CiAgICAgdW5zaWduZWQgbV92YXJpYWJsZUNvdW50IHsgMCB9
OwotICAgIFN0cmluZyBtX2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVhcmx5VmFyaWFibGU7CisgICAg
T3B0aW9uYWw8TWFuZ2xlZFZhcmlhYmxlTmFtZT4gbV9icmVha091dE9mQ3VycmVudExvb3BFYXJs
eVZhcmlhYmxlOwogfTsKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikK
QEAgLTMwNyw5ICszMDIsOSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImJyZWFrO1xuIik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQnJlYWtDb250ZXh0OjpMb29wOgotICAgICAgICBBU1NFUlQobV9i
cmVha091dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlLmxlbmd0aCgpKTsKKyAgICAgICAgQVNT
RVJUKG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSk7CiAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1fYnJlYWtPdXRPZkN1cnJl
bnRMb29wRWFybHlWYXJpYWJsZSwgIiA9IHRydWU7XG4iCisgICAgICAgICAgICAqbV9icmVha091
dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlLCAiID0gdHJ1ZTtcbiIKICAgICAgICAgICAgICJi
cmVhaztcbiIKICAgICAgICAgKTsKICAgICAgICAgYnJlYWs7CkBAIC0zMTgsNyArMzEzLDcgQEAg
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogCiB2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDb250aW51ZSYpCiB7Ci0gICAgQVNTRVJUKG1f
YnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZS5sZW5ndGgoKSk7CisgICAgQVNTRVJU
KG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSk7CiAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgiYnJlYWs7XG4iKTsKIH0KIApAQCAtMzM1LDEwICszMzAsMTAgQEAgdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogCiB2b2lkIEZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6ZW1pdExvb3AoTG9vcENvbmRpdGlvbkxvY2F0aW9uIGxvb3BDb25kaXRpb25M
b2NhdGlvbiwgQVNUOjpFeHByZXNzaW9uKiBjb25kaXRpb25FeHByZXNzaW9uLCBBU1Q6OkV4cHJl
c3Npb24qIGluY3JlbWVudCwgQVNUOjpTdGF0ZW1lbnQmIGJvZHkpCiB7Ci0gICAgU2V0Rm9yU2Nv
cGU8U3RyaW5nPiBsb29wVmFyaWFibGVTY29wZShtX2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVhcmx5
VmFyaWFibGUsIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpKTsKKyAgICBTZXRGb3JTY29wZTxP
cHRpb25hbDxNYW5nbGVkVmFyaWFibGVOYW1lPj4gbG9vcFZhcmlhYmxlU2NvcGUobV9icmVha091
dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlLCBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKSk7
CiAKICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAgICJib29sICIs
IG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSwgIiA9IGZhbHNlO1xuIiwKKyAg
ICAgICAgImJvb2wgIiwgKm1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSwgIiA9
IGZhbHNlO1xuIiwKICAgICAgICAgIndoaWxlICh0cnVlKSB7XG4iCiAgICAgKTsKIApAQCAtMzUy
LDcgKzM0Nyw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjplbWl0TG9vcCgKICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoYm9keSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxl
QXBwZW5kKAogICAgICAgICAifSB3aGlsZShmYWxzZSk7IFxuIgotICAgICAgICAiaWYgKCIsIG1f
YnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSwgIikgYnJlYWs7XG4iCisgICAgICAg
ICJpZiAoIiwgKm1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSwgIikgYnJlYWs7
XG4iCiAgICAgKTsKIAogICAgIGlmIChpbmNyZW1lbnQpIHsKQEAgLTUxNiw3ICs1MTEsNyBAQCB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgLy8gVGhpcyBzaG91
bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxhY2UgdGhpcyB3aXRoIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpLgogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgYXBwZW5kUmlnaHRWYWx1ZShk
b3RFeHByZXNzaW9uLCAiZHVtbXkiKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGRvdEV4cHJlc3Np
b24sIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6R2xvYmFsVmFyaWFibGVSZWZlcmVuY2UmIGdsb2JhbFZh
cmlhYmxlUmVmZXJlbmNlKQpAQCAtNTM3LDcgKzUzMiw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVh
ZHkuCiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTU3ODggUmVwbGFjZSB0aGlzIHdpdGggQVNTRVJUX05PVF9SRUFDSEVEKCkuCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICBhcHBlbmRSaWdodFZhbHVlKGluZGV4RXhwcmVzc2lvbiwgImR1
bW15Iik7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShpbmRleEV4cHJlc3Npb24sIGdlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSgpKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24pCkBAIC01NDUsNyArNTQwLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVAogICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxvd2VyZWQgYWxyZWFkeS4KICAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc4OCBSZXBs
YWNlIHRoaXMgd2l0aCBBU1NFUlRfTk9UX1JFQUNIRUQoKS4KICAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIGFwcGVuZFJpZ2h0VmFsdWUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCAiZHVtbXki
KTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKCkpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQpA
QCAtNTc3LDcgKzU3Miw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1QKIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJl
c3Npb24mIGNhbGxFeHByZXNzaW9uKQogewotICAgIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50TmFt
ZXM7CisgICAgVmVjdG9yPE1hbmdsZWRWYXJpYWJsZU5hbWU+IGFyZ3VtZW50TmFtZXM7CiAgICAg
Zm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKSB7CiAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7CiAgICAgICAgIGFyZ3VtZW50TmFtZXMu
YXBwZW5kKHRha2VMYXN0VmFsdWUoKSk7CkBAIC01OTEsNyArNTg2LDcgQEAgdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJndW1lbnROYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoaSkKICAgICAgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoYXJndW1lbnROYW1lc1tpXSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJs
ZUFwcGVuZChhcmd1bWVudE5hbWVzW2ldKTsKICAgICB9CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgiKTtcbiIpOwogICAgIGFwcGVuZFJpZ2h0VmFsdWUoY2FsbEV4cHJlc3Npb24sIHZhcmlh
YmxlTmFtZSk7CkBAIC01OTksMTIgKzU5NCwxMyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dmlzaXQoQVNUCiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQogewotICAgIFN0cmluZyByZXN1
bHQ7CisgICAgT3B0aW9uYWw8TWFuZ2xlZFZhcmlhYmxlTmFtZT4gcmVzdWx0OwogICAgIGZvciAo
YXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5saXN0KCkpIHsKICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOwogICAgICAgICByZXN1bHQgPSB0YWtlTGFzdFZh
bHVlKCk7CiAgICAgfQotICAgIGFwcGVuZFJpZ2h0VmFsdWUoY29tbWFFeHByZXNzaW9uLCByZXN1
bHQpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoY29tbWFFeHBy
ZXNzaW9uLCAqcmVzdWx0KTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCkBA
IC03NTAsNyArNzQ2LDcgQEAgU3RyaW5nIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y29uc3Rh
bgogCiBjbGFzcyBSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgOiBwdWJsaWMgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyIHsKIHB1YmxpYzoKLSAgICBSZW5kZXJGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXIoSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEhh
c2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiYgZnVuY3Rpb25NYXBwaW5n
LCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlv
dXQpCisgICAgUmVuZGVyRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJp
bnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiosIE1hbmdsZWRGdW5jdGlvbk5hbWU+JiBmdW5jdGlvbk1hcHBpbmcsIE1hdGNoZWRSZW5k
ZXJTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKICAgICAgICAg
OiBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoaW50cmluc2ljcywgdHlwZU5hbWVyLCBmdW5jdGlv
bk1hcHBpbmcsIGxheW91dCkKICAgICAgICAgLCBtX21hdGNoZWRTZW1hbnRpY3MoV1RGTW92ZSht
YXRjaGVkU2VtYW50aWNzKSkKICAgICB7CkBAIC03NjQsNyArNzYwLDcgQEAgcHJpdmF0ZToKIAog
c3RkOjp1bmlxdWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gUmVuZGVyRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjpjcmVhdGVFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIHsKLSAgICBhdXRvIGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSA9IFt0aGlzXSgpIC0+IFN0cmluZyB7CisgICAgYXV0byBnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUgPSBbdGhpc10oKSAtPiBNYW5nbGVkVmFyaWFibGVOYW1lIHsKICAgICAgICAg
cmV0dXJuIHRoaXMtPmdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIH07CiAgICAgaWYg
KCZmdW5jdGlvbkRlZmluaXRpb24gPT0gbV9tYXRjaGVkU2VtYW50aWNzLnZlcnRleFNoYWRlcikK
QEAgLTc3Niw3ICs3NzIsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xkaW5n
PiBSCiAKIGNsYXNzIENvbXB1dGVGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgOiBwdWJsaWMgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyIHsKIHB1YmxpYzoKLSAgICBDb21wdXRlRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVy
LCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFw
cGluZywgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQm
IGxheW91dCkKKyAgICBDb21wdXRlRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3Mm
IGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbiosIE1hbmdsZWRGdW5jdGlvbk5hbWU+JiBmdW5jdGlvbk1hcHBpbmcsIE1hdGNo
ZWRDb21wdXRlU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlvdXQpCiAg
ICAgICAgIDogRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKGludHJpbnNpY3MsIHR5cGVOYW1lciwg
ZnVuY3Rpb25NYXBwaW5nLCBsYXlvdXQpCiAgICAgICAgICwgbV9tYXRjaGVkU2VtYW50aWNzKFdU
Rk1vdmUobWF0Y2hlZFNlbWFudGljcykpCiAgICAgewpAQCAtNzkwLDcgKzc4Niw3IEBAIHByaXZh
dGU6CiAKIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeVBvaW50U2NhZmZvbGRpbmc+IENvbXB1dGVGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OmNyZWF0ZUVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQogewotICAgIGF1dG8gZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lID0gW3RoaXNdKCkgLT4gU3RyaW5nIHsKKyAgICBhdXRvIGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSA9IFt0aGlzXSgpIC0+IE1hbmdsZWRWYXJpYWJsZU5hbWUgewog
ICAgICAgICByZXR1cm4gdGhpcy0+Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgfTsK
ICAgICBpZiAoJmZ1bmN0aW9uRGVmaW5pdGlvbiA9PSBtX21hdGNoZWRTZW1hbnRpY3Muc2hhZGVy
KQpAQCAtNzk5LDcgKzc5NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeVBvaW50U2NhZmZvbGRp
bmc+IEMKIH0KIAogc3RydWN0IFNoYXJlZE1ldGFsRnVuY3Rpb25zUmVzdWx0IHsKLSAgICBIYXNo
TWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4gZnVuY3Rpb25NYXBwaW5nOwor
ICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgTWFuZ2xlZEZ1bmN0aW9uTmFt
ZT4gZnVuY3Rpb25NYXBwaW5nOwogICAgIFN0cmluZyBtZXRhbEZ1bmN0aW9uczsKIH07CiBzdGF0
aWMgU2hhcmVkTWV0YWxGdW5jdGlvbnNSZXN1bHQgc2hhcmVkTWV0YWxGdW5jdGlvbnMoUHJvZ3Jh
bSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIGNvbnN0IEhhc2hTZXQ8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKj4mIHJlYWNoYWJsZUZ1bmN0aW9ucykKQEAgLTgwNywxMyArODAzLDEz
IEBAIHN0YXRpYyBTaGFyZWRNZXRhbEZ1bmN0aW9uc1Jlc3VsdCBzaGFyZWQKICAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAKICAgICB1bnNpZ25lZCBudW1GdW5jdGlvbnMgPSAwOwot
ICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiBmdW5jdGlvbk1h
cHBpbmc7CisgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBNYW5nbGVkRnVu
Y3Rpb25OYW1lPiBmdW5jdGlvbk1hcHBpbmc7CiAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7Ci0g
ICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gZnVuY3Rpb25NYXBwaW5nLmFkZCgmbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiwgbWFrZVN0cmluZygiZnVuY3Rpb24iLCBudW1GdW5jdGlvbnMrKykpOwor
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGZ1bmN0aW9uTWFwcGluZy5hZGQoJm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24sIE1hbmdsZWRGdW5jdGlvbk5hbWUgeyBudW1GdW5jdGlvbnMrKyB9KTsK
ICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
ICAgICB9CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0
aW9uRGVmaW5pdGlvbnMoKSkgewotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGZ1bmN0aW9uTWFw
cGluZy5hZGQoJmZ1bmN0aW9uRGVmaW5pdGlvbiwgbWFrZVN0cmluZygiZnVuY3Rpb24iLCBudW1G
dW5jdGlvbnMrKykpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGZ1bmN0aW9uTWFwcGluZy5h
ZGQoJmZ1bmN0aW9uRGVmaW5pdGlvbiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSB7IG51bUZ1bmN0aW9u
cysrIH0pOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaAkocmV2
aXNpb24gMjQ4MjYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xNYW5nbGVkTmFtZXMuaCIK
ICNpbmNsdWRlICJXSExTTFNlbWFudGljTWF0Y2hlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00MSwxNCArNDIsMTQgQEAgY2xhc3MgVHlwZU5hbWVyOwogCiBzdHJ1Y3QgUmVuZGVyTWV0
YWxGdW5jdGlvbnMgewogICAgIFN0cmluZyBtZXRhbFNvdXJjZTsKLSAgICBTdHJpbmcgbWFuZ2xl
ZFZlcnRleEVudHJ5UG9pbnROYW1lOwotICAgIFN0cmluZyBtYW5nbGVkRnJhZ21lbnRFbnRyeVBv
aW50TmFtZTsKKyAgICBNYW5nbGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRWZXJ0ZXhFbnRyeVBvaW50
TmFtZTsKKyAgICBNYW5nbGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRGcmFnbWVudEVudHJ5UG9pbnRO
YW1lOwogfTsKIFJlbmRlck1ldGFsRnVuY3Rpb25zIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mLCBU
eXBlTmFtZXImLCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYsIExheW91dCYpOwogCiBzdHJ1Y3Qg
Q29tcHV0ZU1ldGFsRnVuY3Rpb25zIHsKICAgICBTdHJpbmcgbWV0YWxTb3VyY2U7Ci0gICAgU3Ry
aW5nIG1hbmdsZWRFbnRyeVBvaW50TmFtZTsKKyAgICBNYW5nbGVkRnVuY3Rpb25OYW1lIG1hbmds
ZWRFbnRyeVBvaW50TmFtZTsKIH07CiBDb21wdXRlTWV0YWxGdW5jdGlvbnMgbWV0YWxGdW5jdGlv
bnMoUHJvZ3JhbSYsIFR5cGVOYW1lciYsIE1hdGNoZWRDb21wdXRlU2VtYW50aWNzJiYsIExheW91
dCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTE1hbmdsZWROYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWFuZ2xlZE5hbWVzLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNYW5nbGVkTmFt
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0YWwgeworCitzdHJ1Y3QgTWFuZ2xl
ZFZhcmlhYmxlTmFtZSB7CisgICAgdW5zaWduZWQgdmFsdWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBjb25zdCBjaGFyKiBwcmVmaXggPSAidmFyaWFibGUiOworfTsKKworc3RydWN0IE1hbmdsZWRU
eXBlTmFtZSB7CisgICAgdW5zaWduZWQgdmFsdWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25z
dCBjaGFyKiBwcmVmaXggPSAidHlwZSI7Cit9OworCitzdHJ1Y3QgTWFuZ2xlZFN0cnVjdHVyZUVs
ZW1lbnROYW1lIHsKKyAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGNv
bnN0IGNoYXIqIHByZWZpeCA9ICJzdHJ1Y3R1cmVFbGVtZW50IjsKK307CisKK3N0cnVjdCBNYW5n
bGVkRW51bWVyYXRpb25NZW1iZXJOYW1lIHsKKyAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHByZWZpeCA9ICJlbnVtZXJhdGlvbk1lbWJlciI7Cit9
OworCitzdHJ1Y3QgTWFuZ2xlZEZ1bmN0aW9uTmFtZSB7CisgICAgdW5zaWduZWQgdmFsdWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBwcmVmaXggPSAiZnVuY3Rpb24iOworCisg
ICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbWFrZVN0cmluZyhwcmVmaXgsIHZh
bHVlKTsgfQorfTsKKwordXNpbmcgTWFuZ2xlZE9yTmF0aXZlVHlwZU5hbWUgPSBWYXJpYW50PE1h
bmdsZWRUeXBlTmFtZSwgU3RyaW5nPjsKKworfSAvLyBuYW1lc3BhY2UgTWV0YWwKKworfSAvLyBu
YW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgTWFuZ2xlZE5hbWVUeXBlPgorY2xhc3MgTWFuZ2xlZE5h
bWVBZGFwdG9yIHsKK3B1YmxpYzoKKyAgICBNYW5nbGVkTmFtZUFkYXB0b3IoTWFuZ2xlZE5hbWVU
eXBlIG5hbWUpCisgICAgICAgIDogbV9uYW1lIHsgbmFtZSB9CisgICAgeworICAgIH0KKworICAg
IHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIHN0cmxlbihNYW5nbGVkTmFtZVR5cGU6OnByZWZp
eCkgKyBsZW5ndGhPZk51bWJlckFzU3RyaW5nVW5zaWduZWQobV9uYW1lLnZhbHVlKTsgfQorICAg
IGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKiBkZXN0aW5hdGlvbikKKyAg
ICB7CisgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRlc3RpbmF0aW9uLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oTWFuZ2xlZE5hbWVUeXBlOjpwcmVmaXgpLCBzdHJs
ZW4oTWFuZ2xlZE5hbWVUeXBlOjpwcmVmaXgpKTsKKyAgICAgICAgd3JpdGVOdW1iZXJUb0J1ZmZl
clVuc2lnbmVkKG1fbmFtZS52YWx1ZSwgZGVzdGluYXRpb24gKyBzdHJsZW4oTWFuZ2xlZE5hbWVU
eXBlOjpwcmVmaXgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFuZ2xlZE5hbWVUeXBlIG1f
bmFtZTsKK307CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8V2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpNYW5nbGVkVmFyaWFibGVOYW1lLCB2b2lkPiA6IHB1YmxpYyBNYW5nbGVk
TmFtZUFkYXB0b3I8V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkVmFyaWFibGVOYW1lPiB7
CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpN
YW5nbGVkVmFyaWFibGVOYW1lIG5hbWUpCisgICAgICAgIDogTWFuZ2xlZE5hbWVBZGFwdG9yKG5h
bWUpCisgICAgeworICAgIH0KK307Cit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVy
PFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZFR5cGVOYW1lLCB2b2lkPiA6IHB1YmxpYyBN
YW5nbGVkTmFtZUFkYXB0b3I8V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkVHlwZU5hbWU+
IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihXZWJDb3JlOjpXSExTTDo6TWV0YWw6
Ok1hbmdsZWRUeXBlTmFtZSBuYW1lKQorICAgICAgICA6IE1hbmdsZWROYW1lQWRhcHRvcihuYW1l
KQorICAgIHsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6Ok1hbmdsZWRTdHJ1Y3R1cmVFbGVtZW50TmFtZSwgdm9pZD4g
OiBwdWJsaWMgTWFuZ2xlZE5hbWVBZGFwdG9yPFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xl
ZFN0cnVjdHVyZUVsZW1lbnROYW1lPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkU3RydWN0dXJlRWxlbWVudE5hbWUgbmFtZSkK
KyAgICAgICAgOiBNYW5nbGVkTmFtZUFkYXB0b3IobmFtZSkKKyAgICB7CisgICAgfQorfTsKK3Rl
bXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpN
YW5nbGVkRW51bWVyYXRpb25NZW1iZXJOYW1lLCB2b2lkPiA6IHB1YmxpYyBNYW5nbGVkTmFtZUFk
YXB0b3I8V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkRW51bWVyYXRpb25NZW1iZXJOYW1l
PiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpNYW5nbGVkRW51bWVyYXRpb25NZW1iZXJOYW1lIG5hbWUpCisgICAgICAgIDogTWFuZ2xlZE5h
bWVBZGFwdG9yKG5hbWUpCisgICAgeworICAgIH0KK307Cit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmlu
Z1R5cGVBZGFwdGVyPFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZSwg
dm9pZD4gOiBwdWJsaWMgTWFuZ2xlZE5hbWVBZGFwdG9yPFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
TWFuZ2xlZEZ1bmN0aW9uTmFtZT4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKFdl
YkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZSBuYW1lKQorICAgICAgICA6
IE1hbmdsZWROYW1lQWRhcHRvcihuYW1lKQorICAgIHsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZE9y
TmF0aXZlVHlwZU5hbWUsIHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihj
b25zdCBXZWJDb3JlOjpXSExTTDo6TWV0YWw6Ok1hbmdsZWRPck5hdGl2ZVR5cGVOYW1lJiBuYW1l
KQorICAgICAgICA6IG1fbmFtZSB7IG5hbWUgfQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBsZW5ndGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9uYW1lLAor
ICAgICAgICAgICAgWyZdIChjb25zdCBXZWJDb3JlOjpXSExTTDo6TWV0YWw6Ok1hbmdsZWRUeXBl
TmFtZSYgbWFuZ2xlZFR5cGVOYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmxlbihX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6Ok1hbmdsZWRUeXBlTmFtZTo6cHJlZml4KSArIGxlbmd0aE9m
TnVtYmVyQXNTdHJpbmdVbnNpZ25lZChtYW5nbGVkVHlwZU5hbWUudmFsdWUpOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3RyaW5nLmxlbmd0aCgpOworICAgICAgICAgICAgfQorICAgICAgICAp
OworICAgIH0KKworICAgIGJvb2wgaXM4Qml0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fbmFtZSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpNYW5nbGVkVHlwZU5hbWUmKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdIChjb25zdCBTdHJpbmcmIHN0cmluZykg
eworICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmcuaXM4Qml0KCk7CisgICAgICAgICAgICB9
CisgICAgICAgICk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gdm9pZCB3cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAg
ICAgV1RGOjpzd2l0Y2hPbihtX25hbWUsCisgICAgICAgICAgICBbJl0gKGNvbnN0IFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6TWFuZ2xlZFR5cGVOYW1lJiBtYW5nbGVkVHlwZU5hbWUpIHsKKyAgICAg
ICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFdlYkNvcmU6OldITFNMOjpNZXRhbDo6TWFuZ2xlZFR5
cGVOYW1lOjpwcmVmaXgpLCBzdHJsZW4oV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkVHlw
ZU5hbWU6OnByZWZpeCkpOworICAgICAgICAgICAgICAgIHdyaXRlTnVtYmVyVG9CdWZmZXJVbnNp
Z25lZChtYW5nbGVkVHlwZU5hbWUudmFsdWUsIGRlc3RpbmF0aW9uICsgc3RybGVuKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6TWFuZ2xlZFR5cGVOYW1lOjpwcmVmaXgpKTsKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICBbJl0gKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7CisgICAgICAgICAgICAg
ICAgU3RyaW5nVmlldyB7IHN0cmluZyB9LmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRlc3Rp
bmF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgY29uc3QgV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNYW5nbGVkT3JOYXRpdmVUeXBlTmFtZSYg
bV9uYW1lOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjQ4MjYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUg
IldITFNMTWFuZ2xlZE5hbWVzLmgiCiAjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3Iu
aCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljTWF0Y2hlci5oIgogI2luY2x1ZGUgPHd0Zi9WYXJp
YW50Lmg+CkBAIC00MiwxNSArNDMsMTUgQEAgbmFtZXNwYWNlIE1ldGFsIHsKIAogc3RydWN0IFJl
bmRlck1ldGFsQ29kZSB7CiAgICAgU3RyaW5nIG1ldGFsU291cmNlOwotICAgIFN0cmluZyBtYW5n
bGVkVmVydGV4RW50cnlQb2ludE5hbWU7Ci0gICAgU3RyaW5nIG1hbmdsZWRGcmFnbWVudEVudHJ5
UG9pbnROYW1lOworICAgIE1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZFZlcnRleEVudHJ5UG9p
bnROYW1lOworICAgIE1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZEZyYWdtZW50RW50cnlQb2lu
dE5hbWU7CiB9OwogLy8gQ2FuJ3QgZmFpbC4gQW55IGZhaWx1cmUgY2hlY2tzIG5lZWQgdG8gYmUg
ZG9uZSBlYXJsaWVyLCBpbiB0aGUgYmFja2VuZC1hZ25vc3RpYyBwYXJ0IG9mIHRoZSBjb21waWxl
ci4KIFJlbmRlck1ldGFsQ29kZSBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFtJiwgTWF0Y2hlZFJl
bmRlclNlbWFudGljcyYmIG1hdGNoZWRTZW1hbnRpY3MsIExheW91dCYpOwogCiBzdHJ1Y3QgQ29t
cHV0ZU1ldGFsQ29kZSB7CiAgICAgU3RyaW5nIG1ldGFsU291cmNlOwotICAgIFN0cmluZyBtYW5n
bGVkRW50cnlQb2ludE5hbWU7CisgICAgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBtYW5nbGVkRW50cnlQ
b2ludE5hbWU7CiB9OwogLy8gQ2FuJ3QgZmFpbC4gQW55IGZhaWx1cmUgY2hlY2tzIG5lZWQgdG8g
YmUgZG9uZSBlYXJsaWVyLCBpbiB0aGUgYmFja2VuZC1hZ25vc3RpYyBwYXJ0IG9mIHRoZSBjb21w
aWxlci4KIENvbXB1dGVNZXRhbENvZGUgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYsIE1hdGNo
ZWRDb21wdXRlU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0Jik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0
aW9uV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ4
MjYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xO
YXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBA
QCBzdGF0aWMgY29uc3QgY2hhciogdmVjdG9yU3VmZml4KGludCB2ZWN0CiAgICAgfQogfQogCi1T
dHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIFN0cmluZyYgb3V0cHV0RnVuY3Rpb25OYW1lLCBJ
bnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lcikKK1N0cmluZyB3cml0
ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBvdXRwdXRGdW5jdGlvbk5hbWUs
IEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQogewogICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5pc0Nhc3QoKSkgewpAQCAtMjA1LDE3ICsyMDUsMTggQEAgU3RyaW5nIHdyaXRlTmF0aXZl
RnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKLSAgICAgICAg
YXV0byBtYW5nbGVkRmllbGROYW1lID0gWyZdKGNvbnN0IFN0cmluZyYgZmllbGROYW1lKSAtPiBT
dHJpbmcgeworICAgICAgICBhdXRvIGFwcGVuZE1hbmdsZWRGaWVsZE5hbWUgPSBbJl0oU3RyaW5n
QnVpbGRlciYgc3RyaW5nQnVpbGRlciwgY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUpIHsKICAgICAg
ICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgYXV0byYgbmFtZWRU
eXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAgICAgICBp
ZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CiAgICAgICAgICAg
ICAgICAgYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKICAgICAgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVF
bGVtZW50ID0gc3RydWN0dXJlRGVmaW5pdGlvbi5maW5kKGZpZWxkTmFtZSk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZUVsZW1lbnQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KCpzdHJ1Y3R1cmVFbGVtZW50
KTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVyZUVsZW1lbnQpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQo
aXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOwotICAgICAgICAgICAg
cmV0dXJuIGZpZWxkTmFtZTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGZpZWxk
TmFtZSk7CiAgICAgICAgIH07CiAKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKQEAgLTIyMywxMiArMjI0LDE2IEBAIFN0cmluZyB3
cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAg
ICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICAgICAgYXV0byBmaWVs
ZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJh
dG9yLiJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5z
dWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgICAgICBhdXRvIG1l
dGFsRmllbGROYW1lID0gbWFuZ2xlZEZpZWxkTmFtZShmaWVsZE5hbWUpOwogICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKICAgICAgICAgICAgICAgICBtZXRhbFJldHVy
bk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUs
ICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iCi0gICAgICAgICAgICAgICAg
IiAgICB2LiIsIG1ldGFsRmllbGROYW1lLCAiID0gbjtcbiIKKyAgICAgICAgICAgICAgICAiICAg
IHYuIgorICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJpbmcoMCwg
ZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBhcHBlbmRNYW5nbGVkRmllbGRO
YW1lKHN0cmluZ0J1aWxkZXIsIGZpZWxkTmFtZSk7CisKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIgPSBuO1xuIgogICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHY7XG4iCiAg
ICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICk7CkBAIC0yMzYsMTMgKzI0MSwxNyBA
QCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIH0KIAog
ICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDEpOwotICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3RoKCkpOwogICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAg
ICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsRmll
bGROYW1lID0gbWFuZ2xlZEZpZWxkTmFtZShmaWVsZE5hbWUpOwogICAgICAgICBzdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKAogICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91
dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIgotICAg
ICAgICAgICAgIiAgICByZXR1cm4gdi4iLCBtZXRhbEZpZWxkTmFtZSwgIjtcbiIKKyAgICAgICAg
ICAgICIgICAgcmV0dXJuIHYuIgorICAgICAgICApOworCisgICAgICAgIGF1dG8gZmllbGROYW1l
ID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvci4i
X3N0ci5sZW5ndGgoKSk7CisgICAgICAgIGFwcGVuZE1hbmdsZWRGaWVsZE5hbWUoc3RyaW5nQnVp
bGRlciwgZmllbGROYW1lKTsKKyAgICAgICAgICAgIAorICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiO1xuIgogICAgICAgICAgICAgIn1cbiIKICAgICAgICAgKTsKICAgICAgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKQEAgLTI1Miw5ICsyNjEsMTMgQEAgU3RyaW5nIHdy
aXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICBBU1NFUlQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICBhdXRv
IG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBh
dXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3ImLiJfc3Ry
Lmxlbmd0aCgpKTsKIAotICAgICAgICBTdHJpbmcgbWV0YWxGaWVsZE5hbWU7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICBtZXRhbFJldHVybk5hbWUs
ICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7
XG4iCisgICAgICAgICAgICAiICAgIHJldHVybiAmKHYtPiIKKyAgICAgICAgKTsKKworICAgICAg
ICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0
cmluZygib3BlcmF0b3ImLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgYXV0byYgdW5uYW1lZFR5
cGUgPSAqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKTsK
ICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5u
YW1lZFR5cGUpLmVsZW1lbnRUeXBlKCkudW5pZnlOb2RlKCk7CiAgICAgICAgIGF1dG8mIG5hbWVk
VHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwpAQCAtMjYyLDEzICsy
NzUsMTIgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAg
ICAgICAgYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKICAgICAgICAgICAgIGF1dG8qIHN0cnVjdHVyZUVsZW1l
bnQgPSBzdHJ1Y3R1cmVEZWZpbml0aW9uLmZpbmQoZmllbGROYW1lKTsKICAgICAgICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmVFbGVtZW50KTsKLSAgICAgICAgICAgIG1ldGFsRmllbGROYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCgqc3RydWN0dXJlRWxlbWVudCk7
CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVyZUVsZW1lbnQpKTsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBtZXRhbEZpZWxkTmFtZSA9IGZpZWxkTmFtZTsKKyAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoZmllbGROYW1lKTsKIAotICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1l
LCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikg
e1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gJih2LT4iLCBtZXRhbEZpZWxkTmFtZSwgIik7
XG4iCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAorICAgICAgICAgICAgIik7XG4iCiAg
ICAgICAgICAgICAifVxuIgogICAgICAgICApOwogICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOwpAQCAtNTEyLDEzICs1MjQsMTMgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVu
Y3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRleHR1cmVUeXBlKTsKICAgICAgICAgYXV0byBt
ZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1
dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobG9j
YXRpb25UeXBlKTsKLSAgICAgICAgU3RyaW5nIG1ldGFsUGFyYW1ldGVyNE5hbWU7CisgICAgICAg
IE9wdGlvbmFsPE1hbmdsZWRUeXBlTmFtZT4gbWV0YWxQYXJhbWV0ZXI0TmFtZTsKICAgICAgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KQog
ICAgICAgICAgICAgbWV0YWxQYXJhbWV0ZXI0TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNdLT50eXBlKCkp
OwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUocmV0dXJuVHlwZSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
bWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFt
ZXRlcjFOYW1lLCAiIHRoZVRleHR1cmUsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgdGhlU2Ft
cGxlciwgIiwgbWV0YWxQYXJhbWV0ZXIzTmFtZSwgIiBsb2NhdGlvbiIpOwotICAgICAgICBpZiAo
IW1ldGFsUGFyYW1ldGVyNE5hbWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKCIsICIsIG1ldGFsUGFyYW1ldGVyNE5hbWUsICIgb2Zmc2V0Iik7Cisg
ICAgICAgIGlmIChtZXRhbFBhcmFtZXRlcjROYW1lKQorICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZCgiLCAiLCAqbWV0YWxQYXJhbWV0ZXI0TmFtZSwgIiBvZmZzZXQiKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCiAgICAgICAgICAgICAiKSB7XG4iCiAgICAg
ICAgICAgICAiICAgIHJldHVybiB0aGVUZXh0dXJlLnNhbXBsZSh0aGVTYW1wbGVyLCAiCkBAIC01
MjgsNyArNTQwLDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQog
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgibG9jYXRpb24uIiwgInh5
enciX3N0ci5zdWJzdHJpbmcoMCwgbG9jYXRpb25WZWN0b3JMZW5ndGggLSAxKSwgIiwgbG9jYXRp
b24uIiwgInh5enciX3N0ci5zdWJzdHJpbmcobG9jYXRpb25WZWN0b3JMZW5ndGggLSAxLCAxKSk7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoImxvY2F0
aW9uIik7Ci0gICAgICAgIGlmICghbWV0YWxQYXJhbWV0ZXI0TmFtZS5pc051bGwoKSkKKyAgICAg
ICAgaWYgKG1ldGFsUGFyYW1ldGVyNE5hbWUpCiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiLCBvZmZzZXQiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIikiKTsKICAg
ICAgICAgaWYgKCF0ZXh0dXJlVHlwZS5pc0RlcHRoVGV4dHVyZSgpKQpAQCAtNjIwLDIyICs2MzIs
MjIgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICAg
ICAgKytpbmRleDsKICAgICAgICAgYXV0byB3aWR0aFR5cGVOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaW5k
ZXhdLT50eXBlKCkpOwogICAgICAgICArK2luZGV4OwotICAgICAgICBTdHJpbmcgaGVpZ2h0VHlw
ZU5hbWU7CisgICAgICAgIE9wdGlvbmFsPE1hbmdsZWRUeXBlTmFtZT4gaGVpZ2h0VHlwZU5hbWU7
CiAgICAgICAgIGlmICh0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgPj0gMikgewogICAg
ICAgICAgICAgaGVpZ2h0VHlwZU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpbmRleF0tPnR5cGUoKSk7CiAg
ICAgICAgICAgICArK2luZGV4OwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBkZXB0aFR5cGVO
YW1lOworICAgICAgICBPcHRpb25hbDxNYW5nbGVkVHlwZU5hbWU+IGRlcHRoVHlwZU5hbWU7CiAg
ICAgICAgIGlmICh0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgPj0gMykgewogICAgICAg
ICAgICAgZGVwdGhUeXBlTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2luZGV4XS0+dHlwZSgpKTsKICAgICAg
ICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGVsZW1lbnRzVHlwZU5h
bWU7CisgICAgICAgIE9wdGlvbmFsPE1hbmdsZWRUeXBlTmFtZT4gZWxlbWVudHNUeXBlTmFtZTsK
ICAgICAgICAgaWYgKHRleHR1cmVUeXBlLmlzVGV4dHVyZUFycmF5KCkpIHsKICAgICAgICAgICAg
IGVsZW1lbnRzVHlwZU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpbmRleF0tPnR5cGUoKSk7CiAgICAgICAg
ICAgICArK2luZGV4OwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBudW1iZXJPZkxldmVsc1R5
cGVOYW1lOworICAgICAgICBPcHRpb25hbDxNYW5nbGVkVHlwZU5hbWU+IG51bWJlck9mTGV2ZWxz
VHlwZU5hbWU7CiAgICAgICAgIGlmICghdGV4dHVyZVR5cGUuaXNXcml0YWJsZVRleHR1cmUoKSAm
JiB0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgIT0gMSkgewogICAgICAgICAgICAgbnVt
YmVyT2ZMZXZlbHNUeXBlTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2luZGV4XS0+dHlwZSgpKTsKICAgICAg
ICAgICAgICsraW5kZXg7CkBAIC02NDcsMTQgKzY1OSwxNCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVG
dW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGlmICghdGV4dHVyZVR5cGUuaXNXcml0YWJs
ZVRleHR1cmUoKSAmJiB0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgIT0gMSkKICAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIHVpbnQgbWlwTGV2ZWwiKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCB3aWR0aFR5cGVOYW1lLCAiIHdpZHRo
Iik7Ci0gICAgICAgIGlmICghaGVpZ2h0VHlwZU5hbWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsIGhlaWdodFR5cGVOYW1lLCAiIGhlaWdo
dCIpOwotICAgICAgICBpZiAoIWRlcHRoVHlwZU5hbWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsIGRlcHRoVHlwZU5hbWUsICIgZGVwdGgi
KTsKLSAgICAgICAgaWYgKCFlbGVtZW50c1R5cGVOYW1lLmlzTnVsbCgpKQotICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCBlbGVtZW50c1R5cGVOYW1lLCAiIGVs
ZW1lbnRzIik7Ci0gICAgICAgIGlmICghbnVtYmVyT2ZMZXZlbHNUeXBlTmFtZS5pc051bGwoKSkK
LSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgbnVtYmVyT2ZM
ZXZlbHNUeXBlTmFtZSwgIiBudW1iZXJPZkxldmVscyIpOworICAgICAgICBpZiAoaGVpZ2h0VHlw
ZU5hbWUpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsICpo
ZWlnaHRUeXBlTmFtZSwgIiBoZWlnaHQiKTsKKyAgICAgICAgaWYgKGRlcHRoVHlwZU5hbWUpCisg
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsICpkZXB0aFR5cGVO
YW1lLCAiIGRlcHRoIik7CisgICAgICAgIGlmIChlbGVtZW50c1R5cGVOYW1lKQorICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCAqZWxlbWVudHNUeXBlTmFtZSwg
IiBlbGVtZW50cyIpOworICAgICAgICBpZiAobnVtYmVyT2ZMZXZlbHNUeXBlTmFtZSkKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgKm51bWJlck9mTGV2ZWxz
VHlwZU5hbWUsICIgbnVtYmVyT2ZMZXZlbHMiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoCiAgICAgICAgICAgICAiKSB7XG4iCiAgICAgICAgICAgICAiICAgIGlmICh3aWR0aClcbiIK
QEAgLTY2Myw3ICs2NzUsNyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2
ZUZ1CiAgICAgICAgIGlmICghdGV4dHVyZVR5cGUuaXNXcml0YWJsZVRleHR1cmUoKSAmJiB0ZXh0
dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgIT0gMSkKICAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJtaXBMZXZlbCIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtc
biIpOwotICAgICAgICBpZiAoIWhlaWdodFR5cGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGlm
IChoZWlnaHRUeXBlTmFtZSkgewogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCiAg
ICAgICAgICAgICAgICAgIiAgICBpZiAoaGVpZ2h0KVxuIgogICAgICAgICAgICAgICAgICIgICAg
ICAgICpoZWlnaHQgPSB0aGVUZXh0dXJlLmdldF9oZWlnaHQoIgpAQCAtNjcyLDcgKzY4NCw3IEBA
IFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgibWlwTGV2ZWwiKTsKICAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIpO1xuIik7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFkZXB0aFR5cGVO
YW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChkZXB0aFR5cGVOYW1lKSB7CiAgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKICAgICAgICAgICAgICAgICAiICAgIGlmIChkZXB0aClc
biIKICAgICAgICAgICAgICAgICAiICAgICAgICAqZGVwdGggPSB0aGVUZXh0dXJlLmdldF9kZXB0
aCgiCkBAIC02ODEsMTMgKzY5MywxMyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6
Ok5hdGl2ZUZ1CiAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIm1pcExldmVs
Iik7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogICAgICAgICB9
Ci0gICAgICAgIGlmICghZWxlbWVudHNUeXBlTmFtZS5pc051bGwoKSkgeworICAgICAgICBpZiAo
ZWxlbWVudHNUeXBlTmFtZSkgewogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCiAg
ICAgICAgICAgICAgICAgIiAgICBpZiAoZWxlbWVudHMpXG4iCiAgICAgICAgICAgICAgICAgIiAg
ICAgICAgKmVsZW1lbnRzID0gdGhlVGV4dHVyZS5nZXRfYXJyYXlfc2l6ZSgpO1xuIgogICAgICAg
ICAgICAgKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIW51bWJlck9mTGV2ZWxzVHlwZU5hbWUu
aXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKG51bWJlck9mTGV2ZWxzVHlwZU5hbWUpIHsKICAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAogICAgICAgICAgICAgICAgICIgICAgaWYgKG51
bWJlck9mTGV2ZWxzKVxuIgogICAgICAgICAgICAgICAgICIgICAgICAgICpudW1iZXJPZkxldmVs
cyA9IHRoZVRleHR1cmUuZ2V0X251bV9taXBfbGV2ZWxzKCk7XG4iCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oCShyZXZpc2lvbiAyNDgyNjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9u
V3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlICJXSExT
TE1hbmdsZWROYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ1LDcgKzQ1LDcg
QEAgbmFtZXNwYWNlIE1ldGFsIHsKIAogY2xhc3MgVHlwZU5hbWVyOwogCi1TdHJpbmcgd3JpdGVO
YXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mLCBTdHJpbmcmIG91
dHB1dEZ1bmN0aW9uTmFtZSwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYpOworU3RyaW5nIHdyaXRl
TmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiwgTWFuZ2xlZEZ1
bmN0aW9uTmFtZSBvdXRwdXRGdW5jdGlvbk5hbWUsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImKTsK
IAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTFR5cGVOYW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCShyZXZpc2lvbiAyNDgyNjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1l
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIE1ldGFsIHsK
IGNsYXNzIEJhc2VUeXBlTmFtZU5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIEJhc2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBT
dHJpbmcmJiBtYW5nbGVkTmFtZSkKKyAgICBCYXNlVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5v
ZGUqIHBhcmVudCwgTWFuZ2xlZFR5cGVOYW1lJiYgbWFuZ2xlZE5hbWUpCiAgICAgICAgIDogbV9w
YXJlbnQocGFyZW50KQogICAgICAgICAsIG1fbWFuZ2xlZE5hbWUobWFuZ2xlZE5hbWUpCiAgICAg
ewpAQCAtNzcsMTggKzc3LDE4IEBAIHB1YmxpYzoKICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQo
V1RGTW92ZShjaGlsZCkpOwogICAgIH0KICAgICBCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQoKSB7
IHJldHVybiBtX3BhcmVudDsgfQotICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xlZE5hbWUoKSBjb25z
dCB7IHJldHVybiBtX21hbmdsZWROYW1lOyB9CisgICAgTWFuZ2xlZFR5cGVOYW1lIG1hbmdsZWRO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYW5nbGVkTmFtZTsgfQogCiBwcml2YXRlOgogICAgIFZl
Y3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+IG1fY2hpbGRyZW47CiAgICAgQmFzZVR5
cGVOYW1lTm9kZSogbV9wYXJlbnQ7Ci0gICAgU3RyaW5nIG1fbWFuZ2xlZE5hbWU7CisgICAgTWFu
Z2xlZFR5cGVOYW1lIG1fbWFuZ2xlZE5hbWU7CiB9OwogCiBjbGFzcyBBcnJheVR5cGVOYW1lTm9k
ZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBBcnJheVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJl
bnQsIFN0cmluZyYmIG1hbmdsZWROYW1lLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICBBcnJh
eVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmdsZWRUeXBlTmFtZSYm
IG1hbmdsZWROYW1lLCB1bnNpZ25lZCBudW1FbGVtZW50cykKICAgICAgICAgOiBCYXNlVHlwZU5h
bWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCiAgICAgICAgICwgbV9udW1FbGVt
ZW50cyhudW1FbGVtZW50cykKICAgICB7CkBAIC0xMDQsNyArMTA0LDcgQEAgcHJpdmF0ZToKIGNs
YXNzIEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEFycmF5UmVmZXJl
bmNlVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3RyaW5nJiYgbWFuZ2xl
ZE5hbWUsIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKKyAgICBBcnJheVJlZmVyZW5j
ZVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmdsZWRUeXBlTmFtZSYm
IG1hbmdsZWROYW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCiAgICAgICAgIDog
QmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpKQogICAgICAgICAs
IG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICB7CkBAIC0xMjAsNyArMTIwLDcgQEAg
cHJpdmF0ZToKIGNsYXNzIFBvaW50ZXJUeXBlTmFtZU5vZGUgOiBwdWJsaWMgQmFzZVR5cGVOYW1l
Tm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUG9pbnRl
clR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWRO
YW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCisgICAgUG9pbnRlclR5cGVOYW1l
Tm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIE1hbmdsZWRUeXBlTmFtZSYmIG1hbmdsZWRO
YW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCiAgICAgICAgIDogQmFzZVR5cGVO
YW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpKQogICAgICAgICAsIG1fYWRkcmVz
c1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICB7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHJpdmF0ZToK
IGNsYXNzIFJlZmVyZW5jZVR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBSZWZlcmVuY2VUeXBl
TmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBTdHJpbmcmJiBtYW5nbGVkTmFtZSwg
QVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKKyAgICBSZWZlcmVuY2VUeXBlTmFtZU5vZGUoQmFz
ZVR5cGVOYW1lTm9kZSogcGFyZW50LCBNYW5nbGVkVHlwZU5hbWUmJiBtYW5nbGVkTmFtZSwgQVNU
OjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKICAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVu
dCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCiAgICAgICAgICwgbV9uYW1lZFR5cGUobmFtZWRUeXBl
KQogICAgIHsKQEAgLTM1NCw3ICszNTQsNyBAQCBCYXNlVHlwZU5hbWVOb2RlKiBUeXBlTmFtZXI6
Omluc2VydChBU1Q6CiBjbGFzcyBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlciA6IHB1YmxpYyBW
aXNpdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBNZXRh
bFR5cGVEZWNsYXJhdGlvbldyaXRlcihzdGQ6OmZ1bmN0aW9uPFN0cmluZyhBU1Q6Ok5hbWVkVHlw
ZSYpPiYmIG1hbmdsZWROYW1lRm9yTmFtZWRUeXBlKQorICAgIE1ldGFsVHlwZURlY2xhcmF0aW9u
V3JpdGVyKHN0ZDo6ZnVuY3Rpb248TWFuZ2xlZE9yTmF0aXZlVHlwZU5hbWUoQVNUOjpOYW1lZFR5
cGUmKT4mJiBtYW5nbGVkTmFtZUZvck5hbWVkVHlwZSkKICAgICAgICAgOiBtX21hbmdsZWROYW1l
Rm9yTmFtZWRUeXBlKFdURk1vdmUobWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUpKQogICAgIHsKICAg
ICB9CkBAIC0zNjcsMTMgKzM2NywxMyBAQCBwcml2YXRlOgogICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoInN0cnVjdCAiLCBtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKHN0
cnVjdHVyZURlZmluaXRpb24pLCAiO1xuIik7CiAgICAgfQogCi0gICAgc3RkOjpmdW5jdGlvbjxT
dHJpbmcoQVNUOjpOYW1lZFR5cGUmKT4gbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZTsKKyAgICBz
dGQ6OmZ1bmN0aW9uPE1hbmdsZWRPck5hdGl2ZVR5cGVOYW1lKEFTVDo6TmFtZWRUeXBlJik+IG1f
bWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGU7CiAgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxk
ZXI7CiB9OwogCiBTdHJpbmcgVHlwZU5hbWVyOjptZXRhbFR5cGVEZWNsYXJhdGlvbnMoKQogewot
ICAgIE1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVy
KFsmXShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKSAtPiBTdHJpbmcgeworICAgIE1ldGFsVHlw
ZURlY2xhcmF0aW9uV3JpdGVyIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyKFsmXShBU1Q6Ok5h
bWVkVHlwZSYgbmFtZWRUeXBlKSAtPiBNYW5nbGVkT3JOYXRpdmVUeXBlTmFtZSB7CiAgICAgICAg
IHJldHVybiBtYW5nbGVkTmFtZUZvclR5cGUobmFtZWRUeXBlKTsKICAgICB9KTsKICAgICBtZXRh
bFR5cGVEZWNsYXJhdGlvbldyaXRlci5WaXNpdG9yOjp2aXNpdChtX3Byb2dyYW0pOwpAQCAtNDYw
LDEyICs0NjAsMTIgQEAgU3RyaW5nIFR5cGVOYW1lcjo6bWV0YWxUeXBlRGVmaW5pdGlvbnMoKQog
ICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBUeXBlTmFt
ZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKK01h
bmdsZWRUeXBlTmFtZSBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSkKIHsKICAgICByZXR1cm4gZmluZCh1bm5hbWVkVHlwZSwgbV90cmll
KS5tYW5nbGVkTmFtZSgpOwogfQogCi1TdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5
cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK01hbmdsZWRPck5hdGl2ZVR5cGVOYW1lIFR5
cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCiB7
CiAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQogICAg
ICAgICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JUeXBlKGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKQEAgLTQ3NSwxNCArNDc1LDE0IEBAIFN0cmluZyBUeXBl
TmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1QKIH0KIAogCi1TdHJpbmcgVHlwZU5hbWVyOjpt
YW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVu
dW1lcmF0aW9uTWVtYmVyKQorTWFuZ2xlZEVudW1lcmF0aW9uTWVtYmVyTmFtZSBUeXBlTmFtZXI6
Om1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYg
ZW51bWVyYXRpb25NZW1iZXIpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fZW51bWVyYXRpb25N
ZW1iZXJNYXBwaW5nLmZpbmQoJmVudW1lcmF0aW9uTWVtYmVyKTsKICAgICBBU1NFUlQoaXRlcmF0
b3IgIT0gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBpbmcuZW5kKCkpOwogICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWU7CiB9CiAKLVN0cmluZyBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yU3RydWN0
dXJlRWxlbWVudChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCitNYW5n
bGVkU3RydWN0dXJlRWxlbWVudE5hbWUgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclN0cnVjdHVy
ZUVsZW1lbnQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQogewogICAg
IGF1dG8gaXRlcmF0b3IgPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nLmZpbmQoJnN0cnVjdHVy
ZUVsZW1lbnQpOwogICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBw
aW5nLmVuZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMVHlwZU5hbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaAkocmV2aXNpb24gMjQ4MjYxKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFt
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDkgQEAKIAogI2lmIEVOQUJMRShXRUJH
UFUpCiAKKyNpbmNsdWRlICJXSExTTE1hbmdsZWROYW1lcy5oIgogI2luY2x1ZGUgIldITFNMVmlz
aXRvci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQ29uY2F0ZW5hdGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51
bWJlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNjQsMjAgKzYzLDEzIEBAIHB1YmxpYzoKIAogICAgIC8vIE11c3QgYmUgY2Fs
bGVkIGFmdGVyIGNhbGxpbmcgbWV0YWxUeXBlcygpLgogICAgIFN0cmluZyBtYW5nbGVkTmFtZUZv
clR5cGUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKLSAgICBTdHJpbmcgbWFuZ2xlZE5h
bWVGb3JUeXBlKEFTVDo6VW5uYW1lZFR5cGUmKTsKLSAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JU
eXBlKEFTVDo6TmFtZWRUeXBlJik7Ci0gICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yRW51bWVyYXRp
b25NZW1iZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpOwotICAgIFN0cmluZyBtYW5nbGVkTmFt
ZUZvclN0cnVjdHVyZUVsZW1lbnQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50Jik7Ci0KLSAgICBTdHJp
bmcgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJp
bmcoInR5cGUiLCBtX3R5cGVDb3VudCsrKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZ2VuZXJhdGVO
ZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJp
bmcoInN0cnVjdHVyZUVsZW1lbnQiLCBtX3N0cnVjdHVyZUVsZW1lbnRDb3VudCsrKTsKLSAgICB9
CisgICAgTWFuZ2xlZFR5cGVOYW1lIG1hbmdsZWROYW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBl
Jik7CisgICAgTWFuZ2xlZE9yTmF0aXZlVHlwZU5hbWUgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6
TmFtZWRUeXBlJik7CisgICAgTWFuZ2xlZEVudW1lcmF0aW9uTWVtYmVyTmFtZSBtYW5nbGVkTmFt
ZUZvckVudW1lcmF0aW9uTWVtYmVyKEFTVDo6RW51bWVyYXRpb25NZW1iZXImKTsKKyAgICBNYW5n
bGVkU3RydWN0dXJlRWxlbWVudE5hbWUgbWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KEFT
VDo6U3RydWN0dXJlRWxlbWVudCYpOworCisgICAgTWFuZ2xlZFR5cGVOYW1lIGdlbmVyYXRlTmV4
dFR5cGVOYW1lKCkgeyByZXR1cm4geyBtX3R5cGVDb3VudCsrIH07IH0KKyAgICBNYW5nbGVkU3Ry
dWN0dXJlRWxlbWVudE5hbWUgZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKSB7IHJl
dHVybiB7IG1fc3RydWN0dXJlRWxlbWVudENvdW50KysgfTsgfQogCiBwcml2YXRlOgogICAgIHZv
aWQgdmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYpIG92ZXJyaWRlOwpAQCAtODgsMTAgKzgwLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogICAg
IHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogCi0gICAgU3RyaW5n
IGdlbmVyYXRlTmV4dEVudW1lcmF0aW9uTWVtYmVyTmFtZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gbWFrZVN0cmluZygiZW51bWVyYXRpb25NZW1iZXIiLCBtX2VudW1lcmF0aW9uTWVtYmVyQ291
bnQrKyk7Ci0gICAgfQorICAgIE1hbmdsZWRFbnVtZXJhdGlvbk1lbWJlck5hbWUgZ2VuZXJhdGVO
ZXh0RW51bWVyYXRpb25NZW1iZXJOYW1lKCkgeyByZXR1cm4geyBtX2VudW1lcmF0aW9uTWVtYmVy
Q291bnQrKyB9OyB9CiAKICAgICB2b2lkIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKEFTVDo6TmFt
ZWRUeXBlJiwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFz
aFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIFN0cmluZ0J1aWxk
ZXImKTsKICAgICB2b2lkIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oQmFzZVR5cGVOYW1lTm9k
ZSYsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8
QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJik7
CkBAIC0xMDUsMTAgKzk0LDEwIEBAIHByaXZhdGU6CiAgICAgUHJvZ3JhbSYgbV9wcm9ncmFtOwog
ICAgIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+IG1fdHJpZTsKICAgICBIYXNo
TWFwPEFTVDo6VW5uYW1lZFR5cGUqLCBCYXNlVHlwZU5hbWVOb2RlKj4gbV91bm5hbWVkVHlwZU1h
cHBpbmc7Ci0gICAgSGFzaE1hcDxBU1Q6Ok5hbWVkVHlwZSosIFN0cmluZz4gbV9uYW1lZFR5cGVN
YXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpOYW1lZFR5cGUqLCBNYW5nbGVkVHlwZU5hbWU+IG1f
bmFtZWRUeXBlTWFwcGluZzsKICAgICBIYXNoTWFwPEFTVDo6TmFtZWRUeXBlKiwgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFzZVR5cGVOYW1lTm9kZT4+PiBtX2RlcGVuZGVuY3lHcmFw
aDsKLSAgICBIYXNoTWFwPEFTVDo6RW51bWVyYXRpb25NZW1iZXIqLCBTdHJpbmc+IG1fZW51bWVy
YXRpb25NZW1iZXJNYXBwaW5nOwotICAgIEhhc2hNYXA8QVNUOjpTdHJ1Y3R1cmVFbGVtZW50Kiwg
U3RyaW5nPiBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpFbnVt
ZXJhdGlvbk1lbWJlciosIE1hbmdsZWRFbnVtZXJhdGlvbk1lbWJlck5hbWU+IG1fZW51bWVyYXRp
b25NZW1iZXJNYXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpTdHJ1Y3R1cmVFbGVtZW50KiwgTWFu
Z2xlZFN0cnVjdHVyZUVsZW1lbnROYW1lPiBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nOwogICAg
IHVuc2lnbmVkIG1fdHlwZUNvdW50IHsgMCB9OwogICAgIHVuc2lnbmVkIG1fZW51bWVyYXRpb25N
ZW1iZXJDb3VudCB7IDAgfTsKICAgICB1bnNpZ25lZCBtX3N0cnVjdHVyZUVsZW1lbnRDb3VudCB7
IDAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDI0ODI2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTczNCw2ICs5NzM0
LDcgQEAKIAkJN0M3OTAzQkMxRjg2RkYzNDAwNDYzQTcwIC8qIFBsYWNlaG9sZGVyUmVuZGVyaW5n
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M3OTQxRTIx
QzU2QzI5MzAwQTRDNThFIC8qIERhdGFEZXRlY3RvcnNDb3JlU29mdExpbmsubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEYXRhRGV0ZWN0b3JzQ29yZVNvZnRMaW5r
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzc5NDFFMzFDNTZDMjkzMDBBNEM1
OEUgLyogRGF0YURldGVjdG9yc0NvcmVTb2Z0TGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEYXRhRGV0ZWN0b3JzQ29yZVNvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDN0M3NjlDMjJGNjdFQ0QwMDMyQkNDRCAvKiBXSExTTE1hbmdsZWROYW1l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE1hbmdsZWROYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QzgxMzlBMzFFRDYyODFEMDBDRTI2RTggLyogSlNET01BdHRyaWJ1dGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01BdHRyaWJ1dGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4MTM5QTQxRUQ2MjgxRDAwQ0UyNkU4IC8qIEpT
RE9NT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NT3Bl
cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODEzOUE1MUVENjI4MUQw
MENFMjZFOCAvKiBKU0RPTU9wZXJhdGlvblJldHVybmluZ1Byb21pc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01PcGVyYXRpb25SZXR1cm5pbmdQcm9taXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzE3Miw2ICsxNzE3Myw3IEBACiAJCQkJMUNF
Q0IzQkIyMUY1MTFBQTAwRjQ0NTQyIC8qIFdITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmggKi8s
CiAJCQkJMUNFQ0IzQUYyMUYyQjk4NDAwRjQ0NTQyIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIuY3Bw
ICovLAogCQkJCTFDRUNCM0IyMjFGMkI5ODYwMEY0NDU0MiAvKiBXSExTTEZ1bmN0aW9uV3JpdGVy
LmggKi8sCisJCQkJN0M3Qzc2OUMyMkY2N0VDRDAwMzJCQ0NEIC8qIFdITFNMTWFuZ2xlZE5hbWVz
LmggKi8sCiAJCQkJMUNFQ0IzQjUyMUY1MEFDNzAwRjQ0NTQyIC8qIFdITFNMTWV0YWxDb2RlR2Vu
ZXJhdG9yLmNwcCAqLywKIAkJCQkxQ0VDQjNCNjIxRjUwQUM3MDBGNDQ1NDIgLyogV0hMU0xNZXRh
bENvZGVHZW5lcmF0b3IuaCAqLywKIAkJCQkxQ0VDQjNCODIxRjUwRDEwMDBGNDQ1NDIgLyogV0hM
U0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNv
bXB1dGVQaXBlbGluZU1ldGFsLm1tCShyZXZpc2lvbiAyNDgyNjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0J
KHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgc3RhdGljIE9wdGlvbmFsPFdITFNMOjpD
b21wdXRlRGltZW5zaW9ucwogICAgICAgICBBU1NFUlQoY29tcHV0ZUxpYnJhcnkpOwogICAgICAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc3
MSBPbmNlIHdlIHplcm8tZmlsbCB2YXJpYWJsZXMsIHRoZXJlIHNob3VsZCBiZSBubyB3YXJuaW5n
cywgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gQVNTRVJUKCFlcnJvcikgaGVyZS4KIAotICAgICAg
ICBjb21wdXRlRW50cnlQb2ludCA9IHdobHNsQ29tcGlsZVJlc3VsdC0+bWFuZ2xlZEVudHJ5UG9p
bnROYW1lOworICAgICAgICBjb21wdXRlRW50cnlQb2ludCA9IHdobHNsQ29tcGlsZVJlc3VsdC0+
bWFuZ2xlZEVudHJ5UG9pbnROYW1lLnRvU3RyaW5nKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
Y29tcHV0ZUxpYnJhcnkgPSBjb21wdXRlU3RhZ2UubW9kdWxlLT5wbGF0Zm9ybVNoYWRlck1vZHVs
ZSgpOwogICAgICAgICBjb21wdXRlRW50cnlQb2ludCA9IGNvbXB1dGVTdGFnZS5lbnRyeVBvaW50
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJl
bmRlclBpcGVsaW5lTWV0YWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0JKHJldmlzaW9u
IDI0ODI2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9H
UFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MTEsOCArNDExLDgg
QEAgc3RhdGljIGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBpcAogICAgICAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc3MSBPbmNl
IHdlIHplcm8tZmlsbCB2YXJpYWJsZXMsIHRoZXJlIHNob3VsZCBiZSBubyB3YXJuaW5ncywgc28g
d2Ugc2hvdWxkIGJlIGFibGUgdG8gQVNTRVJUKCFlcnJvcikgaGVyZS4KIAogICAgICAgICBmcmFn
bWVudExpYnJhcnkgPSB2ZXJ0ZXhMaWJyYXJ5OwotICAgICAgICB2ZXJ0ZXhFbnRyeVBvaW50ID0g
d2hsc2xDb21waWxlUmVzdWx0LT5tYW5nbGVkVmVydGV4RW50cnlQb2ludE5hbWU7Ci0gICAgICAg
IGZyYWdtZW50RW50cnlQb2ludCA9IHdobHNsQ29tcGlsZVJlc3VsdC0+bWFuZ2xlZEZyYWdtZW50
RW50cnlQb2ludE5hbWU7CisgICAgICAgIHZlcnRleEVudHJ5UG9pbnQgPSB3aGxzbENvbXBpbGVS
ZXN1bHQtPm1hbmdsZWRWZXJ0ZXhFbnRyeVBvaW50TmFtZS50b1N0cmluZygpOworICAgICAgICBm
cmFnbWVudEVudHJ5UG9pbnQgPSB3aGxzbENvbXBpbGVSZXN1bHQtPm1hbmdsZWRGcmFnbWVudEVu
dHJ5UG9pbnROYW1lLnRvU3RyaW5nKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmVydGV4TGli
cmFyeSA9IHZlcnRleFN0YWdlLm1vZHVsZS0+cGxhdGZvcm1TaGFkZXJNb2R1bGUoKTsKICAgICAg
ICAgdmVydGV4RW50cnlQb2ludCA9IHZlcnRleFN0YWdlLmVudHJ5UG9pbnQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>