<?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>226112</bug_id>
          
          <creation_ts>2021-05-21 14:14:30 -0700</creation_ts>
          <short_desc>Make CGColorSpaceRef argument coding match other CF objects and use CGColorSpaceCreateWithPropertyList for fallback</short_desc>
          <delta_ts>2021-05-21 19:24:19 -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>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762581</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-21 14:14:30 -0700</bug_when>
    <thetext>Make CGColorSpaceRef argument coding match other CF objects and use CGColorSpaceCreateWithPropertyList for fallback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762585</commentid>
    <comment_count>1</comment_count>
      <attachid>429339</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-21 14:19:43 -0700</bug_when>
    <thetext>Created attachment 429339
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762589</commentid>
    <comment_count>2</comment_count>
      <attachid>429341</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-21 14:21:54 -0700</bug_when>
    <thetext>Created attachment 429341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762627</commentid>
    <comment_count>3</comment_count>
      <attachid>429341</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-21 15:51:05 -0700</bug_when>
    <thetext>Comment on attachment 429341
Patch

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

&gt; Source/WebKit/Shared/cf/ArgumentCodersCF.cpp:700
&gt; +    auto propertyList = adoptCF(CGColorSpaceCopyPropertyList(colorSpace));
&gt; +    encoder &lt;&lt; CGColorSpaceEncodingScheme::PropertyList;
&gt; +    encoder &lt;&lt; propertyList;

No need for this local variable. Maybe we can write this?

    encoder &lt;&lt; CGColorSpaceEncodingScheme::PropertyList &lt;&lt; adoptCF(CGColorSpaceCopyPropertyList(colorSpace));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762690</commentid>
    <comment_count>4</comment_count>
      <attachid>429374</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-21 17:18:47 -0700</bug_when>
    <thetext>Created attachment 429374
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762700</commentid>
    <comment_count>5</comment_count>
      <attachid>429379</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-21 18:04:12 -0700</bug_when>
    <thetext>Created attachment 429379
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762729</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-21 19:23:50 -0700</bug_when>
    <thetext>Committed r277906 (238039@main): &lt;https://commits.webkit.org/238039@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429379.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762730</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-21 19:24:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/78339484&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429339</attachid>
            <date>2021-05-21 14:19:43 -0700</date>
            <delta_ts>2021-05-21 14:21:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226112-20210521141942.patch</filename>
            <type>text/plain</type>
            <size>56928</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc4ODYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAyMS0wNS0yMSAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBDR0NvbG9yU3BhY2VSZWYgYXJn
dW1lbnQgY29kaW5nIG1hdGNoIG90aGVyIENGIG9iamVjdHMgYW5kIHVzZSBDR0NvbG9yU3BhY2VD
cmVhdGVXaXRoUHJvcGVydHlMaXN0IGZvciBmYWxsYmFjaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHByZWN1cnNvciB0byBzb21lIGNv
bG9yIHNwYWNlIHR5cGUgdW5pZmljYXRpb24uIFRoaXMgY2hhbmdlOgorICAgICAgICAKKyAgICAg
ICAgLSBNb2Rlcm5pemVzIENGIGFydWdtZW50IGNvZGVycyB0byB1c2UgQXJndW1lbnRDb2RlciBz
cGVjaWFsaXphdGlvbi4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHdlIG5vdyBzdXBwb3J0IGVu
Y29kaW5nIENGIHR5cGVzIGJvdGggYXMgcGxhaW4gdHlwZXMgYW5kIFJldGFpblB0cjw+IHR5cGVz
LCB3aXRoCisgICAgICAgICAgZGVjb2RpbmcgYmVpbmcga2VwdCBvbmx5IHN1cHBvcmluZyBSZXRh
aW5QdHI8PnMsIGFzIGRlY29kaW5nIGludG8gbm9uLXNtYXJ0IHBvaW50ZXIKKyAgICAgICAgICBp
cyBub3QgdmVyeSB1c2VmdWwuCisgICAgICAgIC0gTW92ZSBDR0NvbG9yU3BhY2VSZWYgY29kaW5n
IHRvIEFyZ3VtZW50Q29kZXJzQ0YgYW5kIHVzZSBDR0NvbG9yU3BhY2VDb3B5UHJvcGVydHlMaXN0
CisgICAgICAgICAgYW5kIENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhQcm9wZXJ0eUxpc3QgYXMgdGhl
IGZhbGxiYWNrIGNvZGluZyAoaWYgdGhlcmUgaXMgbm8gbmFtZSksCisgICAgICAgICAgbWF0Y2hp
bmcgd2hhdCBvdGhlciBsaWJyYXJpZXMgb24gbWFjT1MgYW5kIGlPUyBkby4KKyAgICAgICAgLSBT
d2l0Y2ggQ29sb3JTcGFjZURhdGEgdG8gYmUgYSBzdHJ1Y3Qgd3JhcHBpbmcgYW4gT3B0aW9uYWw8
UmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4+CisgICAgICAgICAgYW5kIHVzZSB0aGUgbmV3IHNo
YXJlZCBjb2RpbmcuIFRoaXMgd2lsbCBiZSByZXBsYWNlZCBlbnRpcmVseSBpbiBzdWJzZXF1ZW50
IGNoYW5nZXMKKyAgICAgICAgICBzbyBJIGRpZG4ndCB3YW50IHRvIGNoYW5nZSB0aGlzIHRvbyBt
dWNoIG5vdy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tOgorICAgICAgICAoSVBD
OjplbmNvZGVEYXRhSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNvZGVEYXRhSW50ZXJuYWwp
OgorICAgICAgICAoSVBDOjplbmNvZGVEYXRlSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNv
ZGVEYXRlSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjplbmNvZGVOdW1iZXJJbnRlcm5hbCk6Cisg
ICAgICAgIChJUEM6OmRlY29kZU51bWJlckludGVybmFsKToKKyAgICAgICAgKElQQzo6ZW5jb2Rl
U2VjdXJlQ29kaW5nSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNvZGVTZWN1cmVDb2RpbmdJ
bnRlcm5hbCk6CisgICAgICAgIChJUEM6OmVuY29kZVN0cmluZ0ludGVybmFsKToKKyAgICAgICAg
KElQQzo6ZGVjb2RlU3RyaW5nSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjplbmNvZGVVUkxJbnRl
cm5hbCk6CisgICAgICAgIChJUEM6OmRlY29kZVVSTEludGVybmFsKToKKyAgICAgICAgKiBTaGFy
ZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxSZWY8Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAg
ICAqIFNoYXJlZC9Gb250SW5mby5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZvbnRJbmZvOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpGb250SW5mbzo6ZGVjb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwOgorICAg
ICAgICAoSVBDOjp0eXBlRnJvbUNGVHlwZVJlZik6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8Q0ZUeXBlUmVmPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXRh
aW5QdHI8Q0ZUeXBlUmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
Q0ZBcnJheVJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWlu
UHRyPENGQXJyYXlSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxD
RkJvb2xlYW5SZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFp
blB0cjxDRkJvb2xlYW5SZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxDRkRhdGFSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFp
blB0cjxDRkRhdGFSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxD
RkRhdGVSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRkRhdGVSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDRkRp
Y3Rpb25hcnlSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxDRk51bWJlclJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
UmV0YWluUHRyPENGTnVtYmVyUmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50
Q29kZXI8Q0ZTdHJpbmdSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVy
PFJldGFpblB0cjxDRlN0cmluZ1JlZj4+OjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVu
dENvZGVyPENGVVJMUmVmPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxS
ZXRhaW5QdHI8Q0ZVUkxSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxDR0NvbG9yU3BhY2VSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVy
PFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxTZWNDZXJ0aWZpY2F0ZVJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8UmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPj46OmRlY29kZSk6CisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPjo6ZW5jb2RlKToKKyAg
ICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPj46
OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U2VjQWNjZXNzQ29udHJvbFJl
Zj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPFNlY0Fj
Y2Vzc0NvbnRyb2xSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxT
ZWNUcnVzdFJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWlu
UHRyPFNlY1RydXN0UmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OmVuY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChJUEM6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL2Nm
L0FyZ3VtZW50Q29kZXJzQ0YuaDoKKyAgICAgICAgKElQQzo6Q0ZSZXRhaW5QdHJBcmd1bWVudENv
ZGVyOjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvQ29sb3JTcGFjZURhdGEubW06Cisg
ICAgICAgIChXZWJLaXQ6OkNvbG9yU3BhY2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpDb2xvclNwYWNlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgICogU2hhcmVkL21hYy9TZWNJdGVtUmVxdWVzdERhdGEuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpTZWNJdGVtUmVxdWVzdERhdGE6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlNlY0l0ZW1SZXF1ZXN0RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1NlY0l0
ZW1SZXNwb25zZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpTZWNJdGVtUmVzcG9uc2VEYXRh
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTZWNJdGVtUmVzcG9uc2VEYXRhOjpk
ZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1t
OgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46
OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6ZW5jb2RlTlNFcnJvcik6CisgICAgICAg
IChJUEM6OmRlY29kZU5TRXJyb3IpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcj46OmVuY29kZSk6CisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyPjo6ZGVj
b2RlKToKKwogMjAyMS0wNS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkb3B0IENoZWNrZWRMb2NrIGluIE1lZGlhRm9ybWF0UmVhZGVyIGFuZCBmaXggdGhy
ZWFkaW5nIGJ1ZwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlz
aW9uIDI3Nzg3MykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmUKICAgICBlbmNvZGVyIDw8
IHVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzOwogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcjsKLSAgICBJUEM6
OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CisgICAgZW5jb2RlciA8
PCBuZXR3b3JrQVRTQ29udGV4dDsKICNlbmRpZgogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIg
PDwgY29va2llQWNjZXB0UG9saWN5OwpAQCAtMTE1LDcgKzExNSw3IEBAIGJvb2wgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC51aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgcmVzdWx0Lm5l
dHdvcmtBVFNDb250ZXh0KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5uZXR3b3Jr
QVRTQ29udGV4dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjc3ODczKQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbkNy
ZWF0aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwgYm91bmRJbnRlcmZhY2VJZGVudGlm
aWVyOwogICAgIGVuY29kZXIgPDwgYWxsb3dzQ2VsbHVsYXJBY2Nlc3M7CiAjaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcHJveHlDb25maWd1cmF0aW9uLmdldCgp
KTsKKyAgICBlbmNvZGVyIDw8IHByb3h5Q29uZmlndXJhdGlvbjsKICAgICBlbmNvZGVyIDw8IHNv
dXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IHNvdXJjZUFw
cGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGF0dHJpYnV0ZWRC
dW5kbGVJZGVudGlmaWVyOwpAQCAtMTA4LDcgKzEwOCw3IEBAIE9wdGlvbmFsPE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXIKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eUNvbmZpZ3VyYXRpb247Ci0gICAgaWYgKCFJUEM6
OmRlY29kZShkZWNvZGVyLCBwcm94eUNvbmZpZ3VyYXRpb24pKQorICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocHJveHlDb25maWd1cmF0aW9uKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICAKICAgICBPcHRpb25hbDxTdHJpbmc+IHNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
ZmllcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0ZvbnRJbmZvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Gb250SW5mby5jcHAJKHJldmlzaW9uIDI3Nzg3MykK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0ZvbnRJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCB2b2lkIEZvbnRJbmZvOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPihmb250
QXR0cmlidXRlRGljdGlvbmFyeSk7CiAgICAgaWYgKGZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5KQot
ICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBmb250QXR0cmlidXRlRGljdGlvbmFyeS5nZXQo
KSk7CisgICAgICAgIGVuY29kZXIgPDwgZm9udEF0dHJpYnV0ZURpY3Rpb25hcnk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShlbmNvZGVyKTsKICNlbmRpZgpAQCAtNTUsNyArNTUsNyBAQCBib29s
IEZvbnRJbmZvOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvCiAgICAgaWYgKCFoYXNGb250QXR0
cmlidXRlRGljdGlvbmFyeSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIUlQQzo6
ZGVjb2RlKGRlY29kZXIsIGZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5KSkKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjc3ODczKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksNyBAQCB2b2lkIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kCiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIG5ldHdv
cmtBVFNDb250ZXh0LmdldCgpKTsKKyAgICBlbmNvZGVyIDw8IG5ldHdvcmtBVFNDb250ZXh0Owog
I2VuZGlmCiAKICNpZiBQTEFURk9STShXQVlMQU5EKQpAQCAtMzg3LDcgKzM4Nyw3IEBAIGJvb2wg
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2QKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBwYXJhbWV0ZXJzLm5ldHdv
cmtBVFNDb250ZXh0KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubmV0d29y
a0FUU0NvbnRleHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tCShy
ZXZpc2lvbiAyNzc4NzMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENv
ZGVyc0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsMTMgKzMwNiwxMyBAQCBzdGF0aWMg
aW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBl
bmNvZGVEYXRhSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNEYXRhICpkYXRhKQogewotICAg
IGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2UgQ0ZEYXRhUmVmKWRhdGEpOworICAgIGVuY29kZXIg
PDwgKF9fYnJpZGdlIENGRGF0YVJlZilkYXRhOwogfQogCiBzdGF0aWMgaW5saW5lIE9wdGlvbmFs
PFJldGFpblB0cjxpZD4+IGRlY29kZURhdGFJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2Rlciwg
ZGF0YSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICByZXR1cm4geyBhZG9wdE5TKChOU0RhdGEgKilkYXRhLmxlYWtSZWYo
KSkgfTsKIH0KQEAgLTMyMSwxMyArMzIxLDEzIEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0
YWluUHRyPGlkPj4gZGUKIAogc3RhdGljIGlubGluZSB2b2lkIGVuY29kZURhdGVJbnRlcm5hbChF
bmNvZGVyJiBlbmNvZGVyLCBOU0RhdGUgKmRhdGUpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChf
X2JyaWRnZSBDRkRhdGVSZWYpZGF0ZSk7CisgICAgZW5jb2RlciA8PCAoX19icmlkZ2UgQ0ZEYXRl
UmVmKWRhdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVj
b2RlRGF0ZUludGVybmFsKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgUmV0YWluUHRyPENGRGF0
ZVJlZj4gZGF0ZTsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBkYXRlKSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGRhdGUpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJl
dHVybiB7IGFkb3B0TlMoKE5TRGF0ZSAqKWRhdGUubGVha1JlZigpKSB9OwogfQpAQCAtNDE0LDEz
ICs0MTQsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZUZvbgogCiBz
dGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlTnVtYmVySW50ZXJuYWwoRW5jb2RlciYgZW5jb2Rlciwg
TlNOdW1iZXIgKm51bWJlcikKIHsKLSAgICBlbmNvZGUoZW5jb2RlciwgKF9fYnJpZGdlIENGTnVt
YmVyUmVmKW51bWJlcik7CisgICAgZW5jb2RlciA8PCAoX19icmlkZ2UgQ0ZOdW1iZXJSZWYpbnVt
YmVyOwogfQogCiBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZU51
bWJlckludGVybmFsKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgUmV0YWluUHRyPENGTnVtYmVy
UmVmPiBudW1iZXI7Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgbnVtYmVyKSkKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKG51bWJlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgcmV0dXJuIHsgYWRvcHROUygoTlNOdW1iZXIgKiludW1iZXIubGVha1JlZigpKSB9OwogfQpA
QCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZVNlY3VyZUNvZGluZ0ludGVybmFs
KEUKICAgICBbYXJjaGl2ZXIgZmluaXNoRW5jb2RpbmddOwogICAgIFthcmNoaXZlciBzZXREZWxl
Z2F0ZTpuaWxdOwogCi0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRkRhdGFSZWYpW2Fy
Y2hpdmVyIGVuY29kZWREYXRhXSk7CisgICAgZW5jb2RlciA8PCAoX19icmlkZ2UgQ0ZEYXRhUmVm
KVthcmNoaXZlciBlbmNvZGVkRGF0YV07CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8
aWQ+PiBkZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmF5
PENsYXNzPiAqYWxsb3dlZENsYXNzZXMpCkBAIC00NDgsNyArNDQ4LDcgQEAgc3RhdGljIE9wdGlv
bmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlYwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAgICBpZiAoIWRlY29kZShkZWNv
ZGVyLCBkYXRhKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEpKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byB1bmFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5
ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ0Zyb21EYXRhOihfX2JyaWRnZSBOU0Rh
dGEgKilkYXRhLmdldCgpIGVycm9yOm51bGxwdHJdKTsKQEAgLTQ3NywxMyArNDc3LDEzIEBAIHN0
YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTZWMKIAogc3RhdGljIGlubGluZSB2
b2lkIGVuY29kZVN0cmluZ0ludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TU3RyaW5nICpzdHJp
bmcpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHJpbmcp
OworICAgIGVuY29kZXIgPDwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKXN0cmluZzsKIH0KIAogc3Rh
dGljIGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTdHJpbmdJbnRlcm5hbChE
ZWNvZGVyJiBkZWNvZGVyKQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3RyaW5nOwot
ICAgIGlmICghZGVjb2RlKGRlY29kZXIsIHN0cmluZykpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdHJpbmcpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiB7IGFk
b3B0TlMoKE5TU3RyaW5nICopc3RyaW5nLmxlYWtSZWYoKSkgfTsKIH0KQEAgLTQ5MiwxMyArNDky
LDEzIEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGUKIAogc3RhdGlj
IGlubGluZSB2b2lkIGVuY29kZVVSTEludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TVVJMICpV
UkwpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRlVSTFJlZilVUkwpOworICAg
IGVuY29kZXIgPDwgKF9fYnJpZGdlIENGVVJMUmVmKVVSTDsKIH0KIAogc3RhdGljIGlubGluZSBP
cHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVVUkxJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVy
KQogewogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gVVJMOwotICAgIGlmICghZGVjb2RlKGRlY29k
ZXIsIFVSTCkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShVUkwpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIHJldHVybiB7IGFkb3B0TlMoKE5TVVJMICopVVJMLmxlYWtSZWYo
KSkgfTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVu
dENvZGVyc0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29h
L1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCShyZXZpc2lvbiAyNzc4NzMpCisrKyBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDMxLDcgKzQzMSw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZWY8Rm9u
dD4+OjplbmNvZGVQbGEKICAgICBhdXRvIGN0Rm9udCA9IHBsYXRmb3JtRGF0YS5mb250KCk7CiAg
ICAgYXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9y
KGN0Rm9udCkpOwogICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRv
ckNvcHlBdHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLmdldCgpKSk7Ci0gICAgSVBDOjplbmNvZGUo
ZW5jb2RlciwgYXR0cmlidXRlcy5nZXQoKSk7CisgICAgZW5jb2RlciA8PCBhdHRyaWJ1dGVzOwog
CiAgICAgY29uc3QgYXV0byYgY3JlYXRpb25EYXRhID0gcGxhdGZvcm1EYXRhLmNyZWF0aW9uRGF0
YSgpOwogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4oY3JlYXRpb25EYXRhKTsKQEAg
LTQ5OSw4ICs0OTksOSBAQCBPcHRpb25hbDxGb250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVy
CiAgICAgaWYgKCFzeW50aGV0aWNPYmxpcXVlLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVz
OwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgYXR0cmlidXRlcykpCisgICAgT3B0aW9u
YWw8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+IGF0dHJpYnV0ZXM7CisgICAgZGVjb2RlciA+
PiBhdHRyaWJ1dGVzOworICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIE9wdGlvbmFsPGJvb2w+IGluY2x1ZGVzQ3JlYXRpb25EYXRhOwpAQCAt
NTI1LDcgKzUyNiw3IEBAIE9wdGlvbmFsPEZvbnRQbGF0Zm9ybURhdGE+IEFyZ3VtZW50Q29kZXIK
ICAgICAgICAgYXV0byBiYXNlRm9udERlc2NyaXB0b3IgPSBmb250Q3VzdG9tUGxhdGZvcm1EYXRh
LT5mb250RGVzY3JpcHRvci5nZXQoKTsKICAgICAgICAgaWYgKCFiYXNlRm9udERlc2NyaXB0b3Ip
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBhdXRvIGZvbnREZXNj
cmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVz
KGJhc2VGb250RGVzY3JpcHRvciwgYXR0cmlidXRlcy5nZXQoKSkpOworICAgICAgICBhdXRvIGZv
bnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhBdHRy
aWJ1dGVzKGJhc2VGb250RGVzY3JpcHRvciwgYXR0cmlidXRlcy0+Z2V0KCkpKTsKICAgICAgICAg
YXV0byBjdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250
RGVzY3JpcHRvci5nZXQoKSwgc2l6ZS52YWx1ZSgpLCBudWxscHRyKSk7CiAKICAgICAgICAgYXV0
byBjcmVhdGlvbkRhdGEgPSBGb250UGxhdGZvcm1EYXRhOjpDcmVhdGlvbkRhdGEgeyBmb250RmFj
ZURhdGEudmFsdWUoKSwgaXRlbUluQ29sbGVjdGlvbi52YWx1ZSgpIH07CkBAIC01NDUsNyArNTQ2
LDcgQEAgT3B0aW9uYWw8Rm9udFBsYXRmb3JtRGF0YT4gQXJndW1lbnRDb2RlcgogICAgIFJldGFp
blB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGZpbmRGb250RGVzY3Jp
cHRvcihyZWZlcmVuY2VVUkwudmFsdWUoKSwgcG9zdFNjcmlwdE5hbWUudmFsdWUoKSk7CiAgICAg
aWYgKCFmb250RGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBm
b250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoQXR0
cmlidXRlcyhmb250RGVzY3JpcHRvci5nZXQoKSwgYXR0cmlidXRlcy5nZXQoKSkpOworICAgIGZv
bnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhBdHRy
aWJ1dGVzKGZvbnREZXNjcmlwdG9yLmdldCgpLCBhdHRyaWJ1dGVzLT5nZXQoKSkpOwogICAgIGF1
dG8gY3RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERl
c2NyaXB0b3IuZ2V0KCksIHNpemUudmFsdWUoKSwgbnVsbHB0cikpOwogCiAgICAgcmV0dXJuIEZv
bnRQbGF0Zm9ybURhdGEoY3RGb250LmdldCgpLCBzaXplLnZhbHVlKCksIHN5bnRoZXRpY0JvbGQu
dmFsdWUoKSwgc3ludGhldGljT2JsaXF1ZS52YWx1ZSgpLCBvcmllbnRhdGlvbi52YWx1ZSgpLCB3
aWR0aFZhcmlhbnQudmFsdWUoKSwgdGV4dFJlbmRlcmluZ01vZGUudmFsdWUoKSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2lu
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI3Nzg3MykKKysrIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBQbHVnaW5Qcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjplbgogICAgIGVuY29kZXIgPDwgdGVybWluYXRpb25UaW1lb3V0Owog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVuY29kZXIgPDwgYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z1BvcnQ7Ci0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkp
OworICAgIGVuY29kZXIgPDwgbmV0d29ya0FUU0NvbnRleHQ7CiAjZW5kaWYKIH0KIApAQCAtNjEs
NyArNjEsNyBAQCBib29sIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWNjZWxlcmF0
ZWRDb21wb3NpdGluZ1BvcnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFJUEM6
OmRlY29kZShkZWNvZGVyLCByZXN1bHQubmV0d29ya0FUU0NvbnRleHQpKQorICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0Lm5ldHdvcmtBVFNDb250ZXh0KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50Q29k
ZXJzQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50
Q29kZXJzQ0YuY3BwCShyZXZpc2lvbiAyNzc4NzMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9j
Zi9Bcmd1bWVudENvZGVyc0NGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAog
I2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJEZWNvZGVyLmgiCiAjaW5jbHVk
ZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgiCisjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJh
aXRzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUHJvY2Vzc1By
aXZpbGVnZS5oPgpAQCAtNzIsNiArNzQsNyBAQCBlbnVtIGNsYXNzIENGVHlwZSA6IHVpbnQ4X3Qg
ewogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiAgICAgU2VjVHJ1c3QsCiAjZW5k
aWYKKyAgICBDR0NvbG9yU3BhY2UsCiAgICAgTnVsbHB0ciwKICAgICBVbmtub3duLAogfTsKQEAg
LTEwMiw2ICsxMDUsOCBAQCBzdGF0aWMgQ0ZUeXBlIHR5cGVGcm9tQ0ZUeXBlUmVmKENGVHlwZVJl
CiAgICAgICAgIHJldHVybiBDRlR5cGU6OkNGU3RyaW5nOwogICAgIGlmICh0eXBlSUQgPT0gQ0ZV
UkxHZXRUeXBlSUQoKSkKICAgICAgICAgcmV0dXJuIENGVHlwZTo6Q0ZVUkw7CisgICAgaWYgKHR5
cGVJRCA9PSBDR0NvbG9yU3BhY2VHZXRUeXBlSUQoKSkKKyAgICAgICAgcmV0dXJuIENGVHlwZTo6
Q0dDb2xvclNwYWNlOwogICAgIGlmICh0eXBlSUQgPT0gU2VjQ2VydGlmaWNhdGVHZXRUeXBlSUQo
KSkKICAgICAgICAgcmV0dXJuIENGVHlwZTo6U2VjQ2VydGlmaWNhdGU7CiAjaWYgSEFWRShTRUNf
S0VZQ0hBSU4pCkBAIC0xMjEsNTQgKzEyNiw1OSBAQCBzdGF0aWMgQ0ZUeXBlIHR5cGVGcm9tQ0ZU
eXBlUmVmKENGVHlwZVJlCiAgICAgcmV0dXJuIENGVHlwZTo6VW5rbm93bjsKIH0KIAotdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZUeXBlUmVmIHR5cGVSZWYpCisKK3RlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZUeXBlUmVmPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIENGVHlwZVJlZiB0eXBlUmVmKQogewotICAgIENGVHlwZSB0eXBlID0g
dHlwZUZyb21DRlR5cGVSZWYodHlwZVJlZik7CisgICAgYXV0byB0eXBlID0gdHlwZUZyb21DRlR5
cGVSZWYodHlwZVJlZik7CiAgICAgZW5jb2RlciA8PCB0eXBlOwogCiAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgY2FzZSBDRlR5cGU6OkNGQXJyYXk6Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBz
dGF0aWNfY2FzdDxDRkFycmF5UmVmPih0eXBlUmVmKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Q0ZBcnJheVJlZj4odHlwZVJlZik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IENGVHlwZTo6Q0ZCb29sZWFuOgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8
Q0ZCb29sZWFuUmVmPih0eXBlUmVmKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Q0ZCb29sZWFuUmVmPih0eXBlUmVmKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ0ZUeXBl
OjpDRkRhdGE6Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxDRkRhdGFSZWY+
KHR5cGVSZWYpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxDRkRhdGFSZWY+KHR5
cGVSZWYpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDRlR5cGU6OkNGRGF0ZToKLSAgICAg
ICAgZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PENGRGF0ZVJlZj4odHlwZVJlZikpOworICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PENGRGF0ZVJlZj4odHlwZVJlZik7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIENGVHlwZTo6Q0ZEaWN0aW9uYXJ5OgotICAgICAgICBlbmNvZGUo
ZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPih0eXBlUmVmKSk7CisgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPih0eXBlUmVmKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQ0ZUeXBlOjpDRk51bGw6CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIENGVHlwZTo6Q0ZOdW1iZXI6Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBzdGF0aWNf
Y2FzdDxDRk51bWJlclJlZj4odHlwZVJlZikpOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PENGTnVtYmVyUmVmPih0eXBlUmVmKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ0ZU
eXBlOjpDRlN0cmluZzoKLSAgICAgICAgZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PENGU3Ry
aW5nUmVmPih0eXBlUmVmKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZTdHJp
bmdSZWY+KHR5cGVSZWYpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDRlR5cGU6OkNGVVJM
OgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Q0ZVUkxSZWY+KHR5cGVSZWYp
KTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxDRlVSTFJlZj4odHlwZVJlZik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENGVHlwZTo6Q0dDb2xvclNwYWNlOgorICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PENHQ29sb3JTcGFjZVJlZj4oY29uc3RfY2FzdDx2b2lkKj4o
dHlwZVJlZikpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDRlR5cGU6OlNlY0NlcnRpZmlj
YXRlOgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8U2VjQ2VydGlmaWNhdGVS
ZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8U2VjQ2VydGlmaWNhdGVSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKTsK
ICAgICAgICAgcmV0dXJuOwogI2lmIEhBVkUoU0VDX0tFWUNIQUlOKQogICAgIGNhc2UgQ0ZUeXBl
OjpTZWNLZXljaGFpbkl0ZW06Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxT
ZWNLZXljaGFpbkl0ZW1SZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKSk7CisgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8U2VjS2V5Y2hhaW5JdGVtUmVmPihjb25zdF9jYXN0PHZv
aWQqPih0eXBlUmVmKSk7CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogI2lmIEhBVkUoU0VDX0FD
Q0VTU19DT05UUk9MKQogICAgIGNhc2UgQ0ZUeXBlOjpTZWNBY2Nlc3NDb250cm9sOgotICAgICAg
ICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8U2VjQWNjZXNzQ29udHJvbFJlZj4oY29uc3Rf
Y2FzdDx2b2lkKj4odHlwZVJlZikpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxT
ZWNBY2Nlc3NDb250cm9sUmVmPihjb25zdF9jYXN0PHZvaWQqPih0eXBlUmVmKSk7CiAgICAgICAg
IHJldHVybjsKICNlbmRpZgogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiAgICAg
Y2FzZSBDRlR5cGU6OlNlY1RydXN0OgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nh
c3Q8U2VjVHJ1c3RSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKSk7CisgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8U2VjVHJ1c3RSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVS
ZWYpKTsKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgY2FzZSBDRlR5cGU6Ok51bGxwdHI6
CkBAIC0xODAsNDYgKzE5MCw1MCBAQCB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRlR5
cGVSZWYgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFJldGFpblB0cjxDRlR5cGVSZWY+JiByZXN1bHQpCit0ZW1wbGF0ZSB2b2lk
IEFyZ3VtZW50Q29kZXI8Q0ZUeXBlUmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBDRlR5
cGVSZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGVHlwZVJlZj46OmVuY29kZTxT
dHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBDRlR5cGVS
ZWYpOworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGVHlwZVJlZj4+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGVHlwZVJlZj4mIHJlc3VsdCkKIHsKLSAgICBD
RlR5cGUgdHlwZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHR5cGUpKQorICAgIE9wdGlvbmFs
PENGVHlwZT4gdHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBzd2l0Y2ggKCp0
eXBlKSB7CiAgICAgY2FzZSBDRlR5cGU6OkNGQXJyYXk6IHsKICAgICAgICAgUmV0YWluUHRyPENG
QXJyYXlSZWY+IGFycmF5OwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBhcnJheSkpCisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyYXkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXN1bHQgPSBhZG9wdENGKGFycmF5LmxlYWtSZWYoKSk7CisgICAgICAg
IHJlc3VsdCA9IFdURk1vdmUoYXJyYXkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgY2FzZSBDRlR5cGU6OkNGQm9vbGVhbjogewogICAgICAgICBSZXRhaW5QdHI8Q0ZCb29sZWFu
UmVmPiBib29sZWFuOwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBib29sZWFuKSkKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShib29sZWFuKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihib29sZWFuLmxlYWtSZWYoKSk7CisgICAg
ICAgIHJlc3VsdCA9IFdURk1vdmUoYm9vbGVhbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICBjYXNlIENGVHlwZTo6Q0ZEYXRhOiB7CiAgICAgICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGRhdGE7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIGRhdGEpKQorICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICByZXN1bHQgPSBhZG9wdENGKGRhdGEubGVha1JlZigpKTsKKyAgICAgICAgcmVzdWx0ID0g
V1RGTW92ZShkYXRhKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQ0ZU
eXBlOjpDRkRhdGU6IHsKICAgICAgICAgUmV0YWluUHRyPENGRGF0ZVJlZj4gZGF0ZTsKLSAgICAg
ICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgZGF0ZSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoZGF0ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGFk
b3B0Q0YoZGF0ZS5sZWFrUmVmKCkpOworICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGRhdGUpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBDRlR5cGU6OkNGRGljdGlvbmFy
eTogewogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkaWN0aW9uYXJ5OwotICAg
ICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBkaWN0aW9uYXJ5KSkKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShkaWN0aW9uYXJ5KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmVzdWx0ID0gYWRvcHRDRihkaWN0aW9uYXJ5LmxlYWtSZWYoKSk7CisgICAgICAgIHJlc3Vs
dCA9IFdURk1vdmUoZGljdGlvbmFyeSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBjYXNlIENGVHlwZTo6Q0ZOdWxsOgpAQCAtMjI3LDU2ICsyNDEsNjMgQEAgYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBj
YXNlIENGVHlwZTo6Q0ZOdW1iZXI6IHsKICAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBu
dW1iZXI7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIG51bWJlcikpCisgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobnVtYmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgcmVzdWx0ID0gYWRvcHRDRihudW1iZXIubGVha1JlZigpKTsKKyAgICAgICAgcmVzdWx0
ID0gV1RGTW92ZShudW1iZXIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2Fz
ZSBDRlR5cGU6OkNGU3RyaW5nOiB7CiAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3Ry
aW5nOwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBzdHJpbmcpKQorICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHN0cmluZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJlc3VsdCA9IGFkb3B0Q0Yoc3RyaW5nLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc3VsdCA9
IFdURk1vdmUoc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2Ug
Q0ZUeXBlOjpDRlVSTDogewogICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybDsKLSAgICAg
ICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgdXJsKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSBXVEZN
b3ZlKHVybCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIENGVHlwZTo6
Q0dDb2xvclNwYWNlOiB7CisgICAgICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9y
U3BhY2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YodXJsLmxlYWtSZWYo
KSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoY29sb3JTcGFjZSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBjYXNlIENGVHlwZTo6U2VjQ2VydGlmaWNhdGU6IHsKICAgICAg
ICAgUmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPiBjZXJ0aWZpY2F0ZTsKLSAgICAgICAgaWYg
KCFkZWNvZGUoZGVjb2RlciwgY2VydGlmaWNhdGUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGNlcnRpZmljYXRlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVz
dWx0ID0gYWRvcHRDRihjZXJ0aWZpY2F0ZS5sZWFrUmVmKCkpOworICAgICAgICByZXN1bHQgPSBX
VEZNb3ZlKGNlcnRpZmljYXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEhB
VkUoU0VDX0tFWUNIQUlOKQogICAgIGNhc2UgQ0ZUeXBlOjpTZWNLZXljaGFpbkl0ZW06IHsKICAg
ICAgICAgUmV0YWluUHRyPFNlY0tleWNoYWluSXRlbVJlZj4ga2V5Y2hhaW5JdGVtOwotICAgICAg
ICBpZiAoIWRlY29kZShkZWNvZGVyLCBrZXljaGFpbkl0ZW0pKQorICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGtleWNoYWluSXRlbSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJlc3VsdCA9IGFkb3B0Q0Yoa2V5Y2hhaW5JdGVtLmxlYWtSZWYoKSk7CisgICAgICAgIHJl
c3VsdCA9IFdURk1vdmUoa2V5Y2hhaW5JdGVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogI2VuZGlmCiAjaWYgSEFWRShTRUNfQUNDRVNTX0NPTlRST0wpCiAgICAgY2FzZSBDRlR5cGU6
OlNlY0FjY2Vzc0NvbnRyb2w6IHsKICAgICAgICAgUmV0YWluUHRyPFNlY0FjY2Vzc0NvbnRyb2xS
ZWY+IGFjY2Vzc0NvbnRyb2w7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIGFjY2Vzc0Nv
bnRyb2wpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFjY2Vzc0NvbnRyb2wpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSBhZG9wdENGKGFjY2Vzc0Nv
bnRyb2wubGVha1JlZigpKTsKKyAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShhY2Nlc3NDb250cm9s
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgSEFWRShTRUNfVFJV
U1RfU0VSSUFMSVpBVElPTikKICAgICBjYXNlIENGVHlwZTo6U2VjVHJ1c3Q6IHsKICAgICAgICAg
UmV0YWluUHRyPFNlY1RydXN0UmVmPiB0cnVzdDsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2Rl
ciwgdHJ1c3QpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRydXN0KSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRih0cnVzdC5sZWFrUmVm
KCkpOworICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKHRydXN0KTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogI2VuZGlmCkBAIC0yOTEsNyArMzEyLDggQEAgYm9vbCBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZBcnJheVJlZiBhcnJheSkKK3RlbXBsYXRlPHR5cGVuYW1l
IEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZBcnJheVJlZj46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBDRkFycmF5UmVmIGFycmF5KQogewogICAgIGlmICghYXJyYXkpIHsKICAgICAg
ICAgZW5jb2RlciA8PCB0cnVlOwpAQCAtMzE4LDExICszNDAsMTQgQEAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgQ0ZBcnJheVJlZgogICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewogICAgICAgICBpZiAoaW52YWxpZEluZGljaWVzLmNvbnRhaW5zKGkpKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCB2YWx1ZXNbaV0pOwor
ICAgICAgICBlbmNvZGVyIDw8ICB2YWx1ZXNbaV07CiAgICAgfQogfQogCi1ib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4mIHJlc3VsdCkKK3RlbXBsYXRl
IHZvaWQgQXJndW1lbnRDb2RlcjxDRkFycmF5UmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXIm
LCBDRkFycmF5UmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRkFycmF5UmVmPjo6
ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYs
IENGQXJyYXlSZWYpOworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGQXJyYXlSZWY+
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRkFycmF5UmVmPiYgcmVzdWx0
KQogewogICAgIGJvb2wgaXNOdWxsID0gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShp
c051bGwpKQpAQCAtMzQxLDcgKzM2Niw3IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFJldGFpblB0cjwKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAg
ICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGVsZW1lbnQ7Ci0gICAgICAgIGlmICghZGVjb2Rl
KGRlY29kZXIsIGVsZW1lbnQpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVsZW1lbnQp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghZWxlbWVudCkKQEAg
LTM1NCwxMiArMzc5LDE2IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0
cjwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Q0ZCb29sZWFuUmVmIGJvb2xlYW4pCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBB
cmd1bWVudENvZGVyPENGQm9vbGVhblJlZj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRkJv
b2xlYW5SZWYgYm9vbGVhbikKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGJvb2w+KENG
Qm9vbGVhbkdldFZhbHVlKGJvb2xlYW4pKTsKIH0KIAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgUmV0YWluUHRyPENGQm9vbGVhblJlZj4mIHJlc3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJn
dW1lbnRDb2RlcjxDRkJvb2xlYW5SZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIENGQm9v
bGVhblJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZCb29sZWFuUmVmPjo6ZW5j
b2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIENG
Qm9vbGVhblJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZCb29sZWFuUmVm
Pj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZCb29sZWFuUmVmPiYgcmVz
dWx0KQogewogICAgIGJvb2wgYm9vbGVhbjsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJvb2xl
YW4pKQpAQCAtMzY5LDcgKzM5OCw4IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJl
dGFpblB0cjwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgQ0ZEYXRhUmVmIGRhdGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBB
cmd1bWVudENvZGVyPENGRGF0YVJlZj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRkRhdGFS
ZWYgZGF0YSkKIHsKICAgICBDRkluZGV4IGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRhKTsK
ICAgICBjb25zdCBVSW50OCogYnl0ZVB0ciA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YSk7CkBAIC0z
NzcsNyArNDA3LDEwIEBAIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGRGF0YVJlZiAK
ICAgICBlbmNvZGVyIDw8IElQQzo6RGF0YVJlZmVyZW5jZShieXRlUHRyLCBsZW5ndGgpOwogfQog
Ci1ib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgcmVz
dWx0KQordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGRGF0YVJlZj46OmVuY29kZTxFbmNv
ZGVyPihFbmNvZGVyJiwgQ0ZEYXRhUmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxD
RkRhdGFSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyJiwgQ0ZEYXRhUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxD
RkRhdGFSZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRkRhdGFSZWY+
JiByZXN1bHQpCiB7CiAgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7CiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShkYXRhUmVmZXJlbmNlKSkKQEAgLTM4NywxMiArNDIwLDE2IEBA
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZEYXRlUmVmIGRhdGUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGRGF0ZVJlZj46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRkRhdGVSZWYgZGF0ZSkKIHsKICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGRvdWJsZT4oQ0ZEYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGUpKTsKIH0K
IAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGRGF0ZVJlZj4mIHJl
c3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRkRhdGVSZWY+OjplbmNvZGU8RW5j
b2Rlcj4oRW5jb2RlciYsIENGRGF0ZVJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8
Q0ZEYXRlUmVmPjo6ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0
aW9uRW5jb2RlciYsIENGRGF0ZVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8
Q0ZEYXRlUmVmPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRlUmVm
PiYgcmVzdWx0KQogewogICAgIGRvdWJsZSBhYnNvbHV0ZVRpbWU7CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShhYnNvbHV0ZVRpbWUpKQpAQCAtNDAyLDcgKzQzOSw4IEBAIGJvb2wgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnkpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGRGljdGlvbmFyeVJl
Zj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSkK
IHsKICAgICBpZiAoIWRpY3Rpb25hcnkpIHsKICAgICAgICAgZW5jb2RlciA8PCB0cnVlOwpAQCAt
NDM1LDEyICs0NzMsMTUgQEAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZEaWN0aW9u
YQogICAgICAgICBpZiAoaW52YWxpZEtleXMuY29udGFpbnMoa2V5c1tpXSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBlbmNvZGUoZW5jb2Rlciwga2V5c1tpXSk7Ci0gICAgICAg
IGVuY29kZShlbmNvZGVyLCB2YWx1ZXNbaV0pOworICAgICAgICBlbmNvZGVyIDw8IGtleXNbaV07
CisgICAgICAgIGVuY29kZXIgPDwgdmFsdWVzW2ldOwogICAgIH0KIH0KIAotYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4mIHJlc3VsdCkKK3Rl
bXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRkRpY3Rpb25hcnlSZWY+OjplbmNvZGU8RW5jb2Rl
cj4oRW5jb2RlciYsIENGRGljdGlvbmFyeVJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29k
ZXI8Q0ZEaWN0aW9uYXJ5UmVmPjo6ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJl
YW1Db25uZWN0aW9uRW5jb2RlciYsIENGRGljdGlvbmFyeVJlZik7CisKK2Jvb2wgQXJndW1lbnRD
b2RlcjxSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgcmVzdWx0KQogewogICAgIGJvb2wgaXNOdWxs
ID0gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc051bGwpKQpAQCAtNDU4LDIxICs0
OTksMjIgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIFJl
dGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBkaWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICBmb3IgKHVpbnQ2NF90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGtl
eTsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2Rlciwga2V5KSB8fCAha2V5KQorICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGtleSkgfHwgIWtleSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFk
ZWNvZGUoZGVjb2RlciwgdmFsdWUpIHx8ICF2YWx1ZSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh2YWx1ZSkgfHwgIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIGtleS5nZXQoKSwgdmFs
dWUuZ2V0KCkpOwogICAgIH0KIAotICAgIHJlc3VsdCA9IGFkb3B0Q0YoZGljdGlvbmFyeS5sZWFr
UmVmKCkpOworICAgIHJlc3VsdCA9IFdURk1vdmUoZGljdGlvbmFyeSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGTnVtYmVyUmVmIG51bWJl
cikKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZOdW1i
ZXJSZWY+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZOdW1iZXJSZWYgbnVtYmVyKQogewog
ICAgIENGTnVtYmVyVHlwZSBudW1iZXJUeXBlID0gQ0ZOdW1iZXJHZXRUeXBlKG51bWJlcik7CiAK
QEAgLTQ4NCw2ICs1MjYsOSBAQCB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRk51bWJl
clJlCiAgICAgZW5jb2RlciA8PCBJUEM6OkRhdGFSZWZlcmVuY2UoYnVmZmVyKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGTnVtYmVyUmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVu
Y29kZXImLCBDRk51bWJlclJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZOdW1i
ZXJSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rpb25F
bmNvZGVyJiwgQ0ZOdW1iZXJSZWYpOworCiBzdGF0aWMgc2l6ZV90IHNpemVGb3JOdW1iZXJUeXBl
KENGTnVtYmVyVHlwZSBudW1iZXJUeXBlKQogewogICAgIHN3aXRjaCAobnVtYmVyVHlwZSkgewpA
QCAtNTI0LDcgKzU2OSw3IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZUZvck51bWJlclR5cGUoQ0ZOdW1i
ZXIKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0
YWluUHRyPENGTnVtYmVyUmVmPiYgcmVzdWx0KQorYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRk51bWJlclJlZj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGTnVt
YmVyUmVmPiYgcmVzdWx0KQogewogICAgIE9wdGlvbmFsPHVpbnQ4X3Q+IG51bWJlclR5cGVGcm9t
SVBDOwogICAgIGRlY29kZXIgPj4gbnVtYmVyVHlwZUZyb21JUEM7CkBAIC01NDYsNyArNTkxLDgg
QEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRlN0cmluZ1JlZiBzdHJp
bmcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGU3Ry
aW5nUmVmPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGU3RyaW5nUmVmIHN0cmluZykKIHsK
ICAgICBDRkluZGV4IGxlbmd0aCA9IENGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7CiAgICAgQ0ZT
dHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IENGU3RyaW5nR2V0RmFzdGVzdEVuY29kaW5nKHN0cmlu
Zyk7CkBAIC01NjUsNyArNjExLDEwIEBAIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENG
U3RyaW5nUmUKICAgICBlbmNvZGVyIDw8IElQQzo6RGF0YVJlZmVyZW5jZShidWZmZXIpOwogfQog
Ci1ib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+JiBy
ZXN1bHQpCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZTdHJpbmdSZWY+OjplbmNvZGU8
RW5jb2Rlcj4oRW5jb2RlciYsIENGU3RyaW5nUmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRD
b2RlcjxDRlN0cmluZ1JlZj46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFt
Q29ubmVjdGlvbkVuY29kZXImLCBDRlN0cmluZ1JlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4mIHJlc3VsdCkKIHsKICAgICBPcHRpb25hbDx1aW50MzJfdD4gZW5jb2Rp
bmdGcm9tSVBDOwogICAgIGRlY29kZXIgPj4gZW5jb2RpbmdGcm9tSVBDOwpAQCAtNTg4LDEyICs2
MzcsMTMgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRlVSTFJlZiB1
cmwpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGVVJM
UmVmPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGVVJMUmVmIHVybCkKIHsKICAgICBDRlVS
TFJlZiBiYXNlVVJMID0gQ0ZVUkxHZXRCYXNlVVJMKHVybCk7CiAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxib29sPihiYXNlVVJMKTsKICAgICBpZiAoYmFzZVVSTCkKLSAgICAgICAgZW5jb2Rl
KGVuY29kZXIsIGJhc2VVUkwpOworICAgICAgICBlbmNvZGVyIDw8IGJhc2VVUkw7CiAKICAgICBX
VEY6OlVSTENoYXJCdWZmZXIgdXJsQnl0ZXM7CiAgICAgV1RGOjpnZXRVUkxCeXRlcyh1cmwsIHVy
bEJ5dGVzKTsKQEAgLTYwMSwxNCArNjUxLDE3IEBAIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIENGVVJMUmVmIHUKICAgICBlbmNvZGVyIDw8IGRhdGFSZWZlcmVuY2U7CiB9CiAKLWJvb2wg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRlVSTFJlZj4mIHJlc3VsdCkKK3Rl
bXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRlVSTFJlZj46OmVuY29kZTxFbmNvZGVyPihFbmNv
ZGVyJiwgQ0ZVUkxSZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGVVJMUmVmPjo6
ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYs
IENGVVJMUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRlVSTFJlZj4+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGVVJMUmVmPiYgcmVzdWx0KQogewog
ICAgIFJldGFpblB0cjxDRlVSTFJlZj4gYmFzZVVSTDsKICAgICBib29sIGhhc0Jhc2VVUkw7CiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNCYXNlVVJMKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmIChoYXNCYXNlVVJMKSB7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIGJh
c2VVUkwpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJhc2VVUkwpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjMxLDE2ICs2ODQsNzcgQEAgYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFNlY0NlcnRpZmljYXRlUmVmIGNlcnRpZmlj
YXRlKQorZW51bSBjbGFzcyBDR0NvbG9yU3BhY2VFbmNvZGluZ1NjaGVtZSB7IE5hbWUsIFByb3Bl
cnR5TGlzdCB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENv
ZGVyPENHQ29sb3JTcGFjZVJlZj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDR0NvbG9yU3Bh
Y2VSZWYgY29sb3JTcGFjZSkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYWRv
cHRDRihTZWNDZXJ0aWZpY2F0ZUNvcHlEYXRhKGNlcnRpZmljYXRlKSk7Ci0gICAgZW5jb2RlKGVu
Y29kZXIsIGRhdGEuZ2V0KCkpOworICAgIGlmIChhdXRvIG5hbWUgPSBDR0NvbG9yU3BhY2VHZXRO
YW1lKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGVuY29kZXIgPDwgQ0dDb2xvclNwYWNlRW5jb2Rp
bmdTY2hlbWU6Ok5hbWU7CisgICAgICAgIGVuY29kZXIgPDwgbmFtZTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8gcHJvcGVydHlMaXN0ID0gYWRvcHRDRihDR0NvbG9yU3BhY2VD
b3B5UHJvcGVydHlMaXN0KGNvbG9yU3BhY2UpKTsKKyAgICBlbmNvZGVyIDw8IENHQ29sb3JTcGFj
ZUVuY29kaW5nU2NoZW1lOjpQcm9wZXJ0eUxpc3Q7CisgICAgZW5jb2RlciA8PCBwcm9wZXJ0eUxp
c3Q7CiB9CiAKLWJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNDZXJ0
aWZpY2F0ZVJlZj4mIHJlc3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDR0NvbG9y
U3BhY2VSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIENHQ29sb3JTcGFjZVJlZik7Cit0
ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0dDb2xvclNwYWNlUmVmPjo6ZW5jb2RlPFN0cmVh
bUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIENHQ29sb3JTcGFj
ZVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPj46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiYgcmVz
dWx0KQoreworICAgIENHQ29sb3JTcGFjZUVuY29kaW5nU2NoZW1lIGVuY29kaW5nU2NoZW1lOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW5jb2RpbmdTY2hlbWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzd2l0Y2ggKGVuY29kaW5nU2NoZW1lKSB7CisgICAgY2FzZSBDR0NvbG9y
U3BhY2VFbmNvZGluZ1NjaGVtZTo6TmFtZTogeworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IG5hbWU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0Nv
bG9yU3BhY2VDcmVhdGVXaXRoTmFtZShuYW1lLmdldCgpKSk7CisgICAgICAgIGlmICghY29sb3JT
cGFjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXN1bHQgPSBXVEZN
b3ZlKGNvbG9yU3BhY2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBD
R0NvbG9yU3BhY2VFbmNvZGluZ1NjaGVtZTo6UHJvcGVydHlMaXN0OiB7CisgICAgICAgIFJldGFp
blB0cjxDRlR5cGVSZWY+IHByb3BlcnR5TGlzdDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShwcm9wZXJ0eUxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1
dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aFByb3BlcnR5TGlz
dChwcm9wZXJ0eUxpc3QuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCFjb2xvclNwYWNlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoY29sb3JTcGFj
ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4KK3ZvaWQgQXJndW1lbnRDb2RlcjxTZWNDZXJ0aWZpY2F0ZVJlZj46OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBTZWNDZXJ0aWZpY2F0ZVJlZiBjZXJ0aWZpY2F0ZSkKK3sKKyAgICBh
dXRvIGRhdGEgPSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ29weURhdGEoY2VydGlmaWNhdGUpKTsK
KyAgICBlbmNvZGVyIDw8IGRhdGE7Cit9CisKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxT
ZWNDZXJ0aWZpY2F0ZVJlZj46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgU2VjQ2VydGlmaWNh
dGVSZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFNlY0NlcnRpZmljYXRlUmVmPjo6
ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYs
IFNlY0NlcnRpZmljYXRlUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxTZWND
ZXJ0aWZpY2F0ZVJlZj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNlY0Nl
cnRpZmljYXRlUmVmPiYgcmVzdWx0KQogewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7
Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgZGF0YSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gYWRvcHRDRihT
ZWNDZXJ0aWZpY2F0ZUNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEuZ2V0KCkpKTsKQEAgLTY0OCwyMyAr
NzYyLDI3IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKIH0KIAog
I2lmIEhBVkUoU0VDX0tFWUNIQUlOKQotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgU2Vj
S2V5Y2hhaW5JdGVtUmVmIGtleWNoYWluSXRlbSkKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
Cit2b2lkIEFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIFNlY0tleWNoYWluSXRlbVJlZiBrZXljaGFpbkl0ZW0pCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3ND
cmVkZW50aWFscykpOwogCiAgICAgQ0ZEYXRhUmVmIGRhdGE7CiAgICAgaWYgKFNlY0tleWNoYWlu
SXRlbUNyZWF0ZVBlcnNpc3RlbnRSZWZlcmVuY2Uoa2V5Y2hhaW5JdGVtLCAmZGF0YSkgPT0gZXJy
U2VjU3VjY2VzcykgewotICAgICAgICBlbmNvZGUoZW5jb2RlciwgZGF0YSk7CisgICAgICAgIGVu
Y29kZXIgPDwgZGF0YTsKICAgICAgICAgQ0ZSZWxlYXNlKGRhdGEpOwogICAgIH0KIH0KIAotYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNlY0tleWNoYWluSXRlbVJlZj4m
IHJlc3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxTZWNLZXljaGFpbkl0ZW1SZWY+
OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIFNlY0tleWNoYWluSXRlbVJlZik7Cit0ZW1wbGF0
ZSB2b2lkIEFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPjo6ZW5jb2RlPFN0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIFNlY0tleWNoYWluSXRl
bVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVm
Pj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVm
PiYgcmVzdWx0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJv
Y2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzQ3JlZGVudGlhbHMpKTsKIAogICAgIFJldGFpblB0cjxD
RkRhdGFSZWY+IGRhdGE7Ci0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBkYXRhKSkKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBDRkRhdGFSZWYgZHJlZiA9IGRhdGEuZ2V0KCk7CkBAIC02ODIsMTcgKzgwMCwyMSBAQCBib29s
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8CiAjZW5kaWYKIAogI2lmIEhBVkUo
U0VDX0FDQ0VTU19DT05UUk9MKQotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgU2VjQWNj
ZXNzQ29udHJvbFJlZiBhY2Nlc3NDb250cm9sKQordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4K
K3ZvaWQgQXJndW1lbnRDb2RlcjxTZWNBY2Nlc3NDb250cm9sUmVmPjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIFNlY0FjY2Vzc0NvbnRyb2xSZWYgYWNjZXNzQ29udHJvbCkKIHsKLSAgICBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihTZWNBY2Nlc3NDb250cm9sQ29weURhdGEo
YWNjZXNzQ29udHJvbCkpOworICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoU2VjQWNjZXNzQ29udHJv
bENvcHlEYXRhKGFjY2Vzc0NvbnRyb2wpKTsKICAgICBpZiAoZGF0YSkKLSAgICAgICAgZW5jb2Rl
KGVuY29kZXIsIGRhdGEuZ2V0KCkpOworICAgICAgICBlbmNvZGVyIDw8IGRhdGE7CiB9CiAKLWJv
b2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNBY2Nlc3NDb250cm9sUmVm
PiYgcmVzdWx0KQordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFNlY0FjY2Vzc0NvbnRyb2xS
ZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIFNlY0FjY2Vzc0NvbnRyb2xSZWYpOwordGVt
cGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFNlY0FjY2Vzc0NvbnRyb2xSZWY+OjplbmNvZGU8U3Ry
ZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiwgU2VjQWNjZXNz
Q29udHJvbFJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjQWNjZXNzQ29u
dHJvbFJlZj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNlY0FjY2Vzc0Nv
bnRyb2xSZWY+JiByZXN1bHQpCiB7CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAg
ICBpZiAoIWRlY29kZShkZWNvZGVyLCBkYXRhKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRh
dGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXN1bHQgPSBhZG9wdENGKFNlY0Fj
Y2Vzc0NvbnRyb2xDcmVhdGVGcm9tRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkYXRhLmdldCgp
LCBudWxscHRyKSk7CkBAIC03MDQsNyArODI2LDggQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgUmV0YWluUHRyPAogI2VuZGlmCiAKICNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFU
SU9OKQotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgU2VjVHJ1c3RSZWYgdHJ1c3QpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPFNlY1RydXN0UmVm
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFNlY1RydXN0UmVmIHRydXN0KQogewogICAgIGF1
dG8gZGF0YSA9IGFkb3B0Q0YoU2VjVHJ1c3RTZXJpYWxpemUodHJ1c3QsIG51bGxwdHIpKTsKICAg
ICBpZiAoIWRhdGEpIHsKQEAgLTcxMywxMCArODM2LDEzIEBAIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIFNlY1RydXN0UmUKICAgICB9CiAKICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAg
SVBDOjplbmNvZGUoZW5jb2RlciwgZGF0YS5nZXQoKSk7CisgICAgZW5jb2RlciA8PCBkYXRhOwog
fQogCi1ib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+
JiByZXN1bHQpCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8U2VjVHJ1c3RSZWY+OjplbmNv
ZGU8RW5jb2Rlcj4oRW5jb2RlciYsIFNlY1RydXN0UmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1l
bnRDb2RlcjxTZWNUcnVzdFJlZj46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3Ry
ZWFtQ29ubmVjdGlvbkVuY29kZXImLCBTZWNUcnVzdFJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2Rl
cjxSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFp
blB0cjxTZWNUcnVzdFJlZj4mIHJlc3VsdCkKIHsKICAgICBib29sIGhhc1RydXN0OwogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaGFzVHJ1c3QpKQpAQCAtNzI2LDcgKzg1Miw3IEBAIGJvb2wgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0cnVzdERhdGE7Ci0gICAgaWYgKCFJUEM6OmRlY29k
ZShkZWNvZGVyLCB0cnVzdERhdGEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUodHJ1c3REYXRh
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byB0cnVzdCA9IGFkb3B0Q0YoU2Vj
VHJ1c3REZXNlcmlhbGl6ZSh0cnVzdERhdGEuZ2V0KCksIG51bGxwdHIpKTsKQEAgLTc0NCwyOCAr
ODcwLDM3IEBAIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PElQQzo6Q0ZUeXBlPiB7CiAgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBJUEM6
OkNGVHlwZSwKLSAgICBJUEM6OkNGVHlwZTo6Q0ZBcnJheSwKLSAgICBJUEM6OkNGVHlwZTo6Q0ZC
b29sZWFuLAotICAgIElQQzo6Q0ZUeXBlOjpDRkRhdGEsCi0gICAgSVBDOjpDRlR5cGU6OkNGRGF0
ZSwKLSAgICBJUEM6OkNGVHlwZTo6Q0ZEaWN0aW9uYXJ5LAotICAgIElQQzo6Q0ZUeXBlOjpDRk51
bGwsCi0gICAgSVBDOjpDRlR5cGU6OkNGTnVtYmVyLAotICAgIElQQzo6Q0ZUeXBlOjpDRlN0cmlu
ZywKLSAgICBJUEM6OkNGVHlwZTo6Q0ZVUkwsCi0gICAgSVBDOjpDRlR5cGU6OlNlY0NlcnRpZmlj
YXRlLAorICAgICAgICBJUEM6OkNGVHlwZSwKKyAgICAgICAgSVBDOjpDRlR5cGU6OkNGQXJyYXks
CisgICAgICAgIElQQzo6Q0ZUeXBlOjpDRkJvb2xlYW4sCisgICAgICAgIElQQzo6Q0ZUeXBlOjpD
RkRhdGEsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpDRkRhdGUsCisgICAgICAgIElQQzo6Q0ZUeXBl
OjpDRkRpY3Rpb25hcnksCisgICAgICAgIElQQzo6Q0ZUeXBlOjpDRk51bGwsCisgICAgICAgIElQ
Qzo6Q0ZUeXBlOjpDRk51bWJlciwKKyAgICAgICAgSVBDOjpDRlR5cGU6OkNGU3RyaW5nLAorICAg
ICAgICBJUEM6OkNGVHlwZTo6Q0ZVUkwsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpTZWNDZXJ0aWZp
Y2F0ZSwKICNpZiBIQVZFKFNFQ19LRVlDSEFJTikKLSAgICBJUEM6OkNGVHlwZTo6U2VjS2V5Y2hh
aW5JdGVtLAorICAgICAgICBJUEM6OkNGVHlwZTo6U2VjS2V5Y2hhaW5JdGVtLAogI2VuZGlmCiAj
aWYgSEFWRShTRUNfQUNDRVNTX0NPTlRST0wpCi0gICAgSVBDOjpDRlR5cGU6OlNlY0FjY2Vzc0Nv
bnRyb2wsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpTZWNBY2Nlc3NDb250cm9sLAogI2VuZGlmCiAj
aWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICBJUEM6OkNGVHlwZTo6U2VjVHJ1
c3QsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpTZWNUcnVzdCwKICNlbmRpZgotICAgIElQQzo6Q0ZU
eXBlOjpOdWxscHRyLAotICAgIElQQzo6Q0ZUeXBlOjpVbmtub3duCisgICAgICAgIElQQzo6Q0ZU
eXBlOjpDR0NvbG9yU3BhY2UsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpOdWxscHRyLAorICAgICAg
ICBJUEM6OkNGVHlwZTo6VW5rbm93bgorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPElQQzo6Q0dDb2xvclNwYWNlRW5jb2RpbmdTY2hlbWU+IHsKKyAgICB1c2luZyB2
YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBJUEM6OkNHQ29sb3JTcGFjZUVuY29kaW5nU2No
ZW1lLAorICAgICAgICBJUEM6OkNHQ29sb3JTcGFjZUVuY29kaW5nU2NoZW1lOjpOYW1lLAorICAg
ICAgICBJUEM6OkNHQ29sb3JTcGFjZUVuY29kaW5nU2NoZW1lOjpQcm9wZXJ0eUxpc3QKICAgICA+
OwogfTsKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0Yu
aAkocmV2aXNpb24gMjc3ODczKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvY2YvQXJndW1lbnRD
b2RlcnNDRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw5IEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBBcmd1bWVudENvZGVyc0NGX2gK
LSNkZWZpbmUgQXJndW1lbnRDb2RlcnNDRl9oCisjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFy
Z3VtZW50Q29kZXIuaCIKICNpbmNsdWRlIDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZS5oPgogI2lu
Y2x1ZGUgPFNlY3VyaXR5L1NlY1RydXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpA
QCAtMzQsNzEgKzM0LDE1NiBAQAogI2luY2x1ZGUgPFNlY3VyaXR5L1NlY0tleWNoYWluSXRlbS5o
PgogI2VuZGlmCiAKK3R5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSogQ0dDb2xvclNwYWNlUmVm
OworCiBuYW1lc3BhY2UgSVBDIHsKIAogY2xhc3MgRW5jb2RlcjsKIGNsYXNzIERlY29kZXI7CiAK
Ky8vIE5PVEU6IFRoZXNlIGNvZGVycyBhcmUgc3RydWN0dXJlZCBzdWNoIHRoYXQgdGhleSBleHBv
c2UgZW5jb2RlciBmdW5jdGlvbnMgZm9yIGJvdGggQ0ZUeXBlIGFuZCBSZXRhaW5QdHI8Q0ZUeXBl
PgorLy8gYnV0IG9ubHkgYSBkZWNvZGVyIG9ubHkgZm9yIFJldGFpblB0cjxDRlR5cGU+LgorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IENGUmV0YWluUHRyQXJndW1lbnRDb2RlciB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFJldGFpblB0cjxUPiYgcmV0YWluUHRyKQorICAgIHsKKyAgICAgICAg
QXJndW1lbnRDb2RlcjxUPjo6ZW5jb2RlKGVuY29kZXIsIHJldGFpblB0ci5nZXQoKSk7CisgICAg
fQorfTsKKworLy8gQ0ZUeXBlUmVmCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENG
VHlwZVJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiwgQ0ZUeXBlUmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8UmV0YWluUHRyPENGVHlwZVJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVy
PENGVHlwZVJlZj4geworICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUo
RGVjb2RlciYsIFJldGFpblB0cjxDRlR5cGVSZWY+Jik7Cit9OworCiAvLyBDRkFycmF5UmVmCi12
b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZBcnJheVJlZik7Ci1XQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkFycmF5UmVmPiYgcmVzdWx0KTsKK3RlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0ZBcnJheVJlZj4geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZBcnJheVJlZik7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRkFycmF5
UmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZBcnJheVJlZj4geworICAgIHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkFy
cmF5UmVmPiYpOworfTsKIAogLy8gQ0ZCb29sZWFuUmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwg
Q0ZCb29sZWFuUmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwg
UmV0YWluUHRyPENGQm9vbGVhblJlZj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPENGQm9vbGVhblJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZCb29sZWFuUmVmKTsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGQm9vbGVhblJlZj4+IDogQ0ZS
ZXRhaW5QdHJBcmd1bWVudENvZGVyPENGQm9vbGVhblJlZj4geworICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkJvb2xlYW5SZWY+
Jik7Cit9OwogCiAvLyBDRkRhdGFSZWYKLXZvaWQgZW5jb2RlKEVuY29kZXImLCBDRkRhdGFSZWYp
OwotV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0ZEYXRh
UmVmPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBDRkRhdGFSZWYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZE
YXRhUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNv
ZGVyJiwgUmV0YWluUHRyPENGRGF0YVJlZj4mKTsKK307CiAKIC8vIENGRGF0ZVJlZgotdm9pZCBl
bmNvZGUoRW5jb2RlciYsIENGRGF0ZVJlZik7Ci1XQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkRhdGVSZWY+JiByZXN1bHQpOwordGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxDRkRhdGVSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGRGF0ZVJlZik7Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRkRhdGVSZWY+PiA6IENG
UmV0YWluUHRyQXJndW1lbnRDb2RlcjxDRkRhdGVSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZEYXRlUmVmPiYpOwor
fTsKIAogLy8gQ0ZEaWN0aW9uYXJ5UmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZEaWN0aW9u
YXJ5UmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPENGRGljdGlvbmFyeVJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZEaWN0aW9uYXJ5UmVmKTsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+
IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPENGRGljdGlvbmFyeVJlZj4geworICAgIHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+Jik7Cit9OwogCiAvLyBDRk51bWJlclJlZgotdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIENGTnVtYmVyUmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVy
JiwgUmV0YWluUHRyPENGTnVtYmVyUmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8Q0ZOdW1iZXJSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVy
PiBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGTnVtYmVyUmVmKTsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGTnVtYmVyUmVmPj4gOiBDRlJl
dGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZOdW1iZXJSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+Jik7
Cit9OwogCiAvLyBDRlN0cmluZ1JlZgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGU3RyaW5nUmVm
KTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiYgcmVzdWx0KTsKLQotLy8gQ0ZUeXBlUmVmCi12b2lkIGVuY29kZShFbmNvZGVy
JiwgQ0ZUeXBlUmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwg
UmV0YWluUHRyPENGVHlwZVJlZj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPENGU3RyaW5nUmVmPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBDRlN0cmluZ1JlZik7Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IDogQ0ZSZXRhaW5Q
dHJBcmd1bWVudENvZGVyPENGU3RyaW5nUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGU3RyaW5nUmVmPiYpOworfTsK
IAogLy8gQ0ZVUkxSZWYKLXZvaWQgZW5jb2RlKEVuY29kZXImLCBDRlVSTFJlZik7Ci1XQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRlVSTFJlZj4mIHJl
c3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENGVVJMUmVmPiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBD
RlVSTFJlZik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRlVSTFJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPENGVVJMUmVmPiB7CisgICAg
c3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRy
PENGVVJMUmVmPiYpOworfTsKKworLy8gQ0dDb2xvclNwYWNlUmVmCit0ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPENHQ29sb3JTcGFjZVJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0dDb2xvclNwYWNlUmVmKTsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENHQ29sb3JT
cGFjZVJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPENHQ29sb3JTcGFjZVJlZj4gewor
ICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFp
blB0cjxDR0NvbG9yU3BhY2VSZWY+Jik7Cit9OwogCiAvLyBTZWNDZXJ0aWZpY2F0ZVJlZgotdm9p
ZCBlbmNvZGUoRW5jb2RlciYsIFNlY0NlcnRpZmljYXRlUmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPiYgcmVz
dWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8U2VjQ2VydGlmaWNhdGVSZWY+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYsIFNlY0NlcnRpZmljYXRlUmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8UmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPj4gOiBDRlJldGFpblB0ckFyZ3Vt
ZW50Q29kZXI8U2VjQ2VydGlmaWNhdGVSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8U2VjQ2VydGlmaWNhdGVSZWY+Jik7
Cit9OwogCiAjaWYgSEFWRShTRUNfS0VZQ0hBSU4pCiAvLyBTZWNLZXljaGFpbkl0ZW1SZWYKLXZv
aWQgZW5jb2RlKEVuY29kZXImLCBTZWNLZXljaGFpbkl0ZW1SZWYpOwotV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPiYg
cmVzdWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVt
UmVmPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBTZWNLZXljaGFpbkl0ZW1SZWYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPj4gOiBDRlJldGFpblB0
ckFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPFNlY0tleWNoYWluSXRl
bVJlZj4mKTsKK307CiAjZW5kaWYKIAogI2lmIEhBVkUoU0VDX0FDQ0VTU19DT05UUk9MKQogLy8g
U2VjQWNjZXNzQ29udHJvbFJlZgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIFNlY0FjY2Vzc0NvbnRy
b2xSZWYpOwotV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5Q
dHI8U2VjQWNjZXNzQ29udHJvbFJlZj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFNlY0FjY2Vzc0NvbnRyb2xSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIFNlY0FjY2Vzc0NvbnRyb2xSZWYp
OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjQWNj
ZXNzQ29udHJvbFJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPFNlY0FjY2Vzc0NvbnRy
b2xSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBSZXRhaW5QdHI8U2VjQWNjZXNzQ29udHJvbFJlZj4mKTsKK307CiAjZW5kaWYKIAogI2lm
IEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiAvLyBTZWNUcnVzdFJlZgotdm9pZCBlbmNv
ZGUoRW5jb2RlciYsIFNlY1RydXN0UmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29k
ZShEZWNvZGVyJiwgUmV0YWluUHRyPFNlY1RydXN0UmVmPiYpOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxTZWNUcnVzdFJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgU2VjVHJ1c3RSZWYpOworfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+PiA6IENG
UmV0YWluUHRyQXJndW1lbnRDb2RlcjxTZWNUcnVzdFJlZj4geworICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxTZWNUcnVzdFJlZj4m
KTsKK307CiAjZW5kaWYKIAogQ0ZUeXBlUmVmIHRva2VuTnVsbHB0clR5cGVSZWYoKTsKIAogfSAv
LyBuYW1lc3BhY2UgSVBDCi0KLSNlbmRpZiAvLyBBcmd1bWVudENvZGVyc0NGX2gKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQ29sb3JTcGFjZURhdGEubW0JKHJldmlzaW9uIDI3Nzg3
MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNzcgKzMzLDI4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1lbnVt
IEVuY29kZWREYXRhVHlwZSB7Ci0gICAgTnVsbCwKLSAgICBOYW1lLAotICAgIERhdGEsCi19Owot
CiB2b2lkIENvbG9yU3BhY2VEYXRhOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogewotICAgIGlmIChjZ0NvbG9yU3BhY2UpIHsKLSAgICAgICAgLy8gVHJ5IHRvIGVuY29kZSB0
aGUgbmFtZS4KLSAgICAgICAgaWYgKFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZSA9IGFkb3B0
Q0YoQ0dDb2xvclNwYWNlQ29weU5hbWUoY2dDb2xvclNwYWNlLmdldCgpKSkpIHsKLSAgICAgICAg
ICAgIGVuY29kZXIgPDwgTmFtZTsKLSAgICAgICAgICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIG5h
bWUuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
RmFpbGluZyB0aGF0LCBqdXN0IGVuY29kZSB0aGUgSUNDIGRhdGEuCi0gICAgICAgIGlmIChSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBwcm9maWxlRGF0YSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ29weUlD
Q0RhdGEoY2dDb2xvclNwYWNlLmdldCgpKSkpIHsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgRGF0
YTsKLSAgICAgICAgICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIHByb2ZpbGVEYXRhLmdldCgpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBjb2xv
ciBzcGFjZSB3YXMgbnVsbCBvciBmYWlsZWQgdG8gYmUgZW5jb2RlZC4KLSAgICBlbmNvZGVyIDw8
IE51bGw7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPihjZ0NvbG9yU3BhY2UpOwor
ICAgIGlmIChjZ0NvbG9yU3BhY2UpCisgICAgICAgIGVuY29kZXIgPDwgY2dDb2xvclNwYWNlOwog
fQogCiBib29sIENvbG9yU3BhY2VEYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBD
b2xvclNwYWNlRGF0YSYgY29sb3JTcGFjZURhdGEpCiB7Ci0gICAgRW5jb2RlZERhdGFUeXBlIGRh
dGFUeXBlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YVR5cGUpKQorICAgIGJvb2wgaGFz
Q0dDb2xvclNwYWNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzQ0dDb2xvclNwYWNlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNh
c2UgTnVsbDoKLSAgICAgICAgY29sb3JTcGFjZURhdGEuY2dDb2xvclNwYWNlID0gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBOYW1lOiB7Ci0gICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gbmFtZTsKLSAgICAgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBu
YW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBjb2xvclNwYWNlRGF0
YS5jZ0NvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKG5hbWUu
Z2V0KCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgRGF0YTogewot
ICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgICAgICBpZiAoIUlQQzo6ZGVj
b2RlKGRlY29kZXIsIGRhdGEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGNvbG9yU3BhY2VEYXRhLmNnQ29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRl
V2l0aElDQ0RhdGEoZGF0YS5nZXQoKSkpOworICAgIGlmICghaGFzQ0dDb2xvclNwYWNlKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgfQogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNv
bG9yU3BhY2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGNvbG9yU3BhY2VEYXRhLmNnQ29sb3JTcGFjZSA9IFdU
Rk1vdmUoY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJLaXQ6OkVuY29kZWREYXRhVHlwZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8Ci0gICAgICAgIFdlYktpdDo6RW5jb2RlZERhdGFUeXBlLAotICAgICAgICBXZWJLaXQ6OkVu
Y29kZWREYXRhVHlwZTo6TnVsbCwKLSAgICAgICAgV2ViS2l0OjpFbmNvZGVkRGF0YVR5cGU6Ok5h
bWUsCi0gICAgICAgIFdlYktpdDo6RW5jb2RlZERhdGFUeXBlOjpEYXRhCi0gICAgPjsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NlY0l0
ZW1SZXF1ZXN0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L1NlY0l0ZW1SZXF1ZXN0RGF0YS5jcHAJKHJldmlzaW9uIDI3Nzg3MykKKysrIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9TZWNJdGVtUmVxdWVzdERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MCwxMSArNTAsMTEgQEAgdm9pZCBTZWNJdGVtUmVxdWVzdERhdGE6OmVuY29kZShJUEM6OkVuYwog
CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPihtX3F1ZXJ5RGljdGlvbmFyeSk7CiAg
ICAgaWYgKG1fcXVlcnlEaWN0aW9uYXJ5KQotICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBt
X3F1ZXJ5RGljdGlvbmFyeS5nZXQoKSk7CisgICAgICAgIGVuY29kZXIgPDwgbV9xdWVyeURpY3Rp
b25hcnk7CiAKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGJvb2w+KG1fYXR0cmlidXRlc1Rv
TWF0Y2gpOwogICAgIGlmIChtX2F0dHJpYnV0ZXNUb01hdGNoKQotICAgICAgICBJUEM6OmVuY29k
ZShlbmNvZGVyLCBtX2F0dHJpYnV0ZXNUb01hdGNoLmdldCgpKTsKKyAgICAgICAgZW5jb2RlciA8
PCBtX2F0dHJpYnV0ZXNUb01hdGNoOwogfQogCiBib29sIFNlY0l0ZW1SZXF1ZXN0RGF0YTo6ZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgU2VjSXRlbVJlcXVlc3REYXRhJiBzZWNJdGVtUmVx
dWVzdERhdGEpCkBAIC02NiwxNCArNjYsMTQgQEAgYm9vbCBTZWNJdGVtUmVxdWVzdERhdGE6OmRl
Y29kZShJUEM6OkRlYwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZXhwZWN0UXVlcnkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZXhwZWN0UXVlcnkgJiYgIUlQQzo6ZGVjb2Rl
KGRlY29kZXIsIHNlY0l0ZW1SZXF1ZXN0RGF0YS5tX3F1ZXJ5RGljdGlvbmFyeSkpCisgICAgaWYg
KGV4cGVjdFF1ZXJ5ICYmICFkZWNvZGVyLmRlY29kZShzZWNJdGVtUmVxdWVzdERhdGEubV9xdWVy
eURpY3Rpb25hcnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgYm9vbCBleHBl
Y3RBdHRyaWJ1dGVzOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZXhwZWN0QXR0cmlidXRlcykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoZXhwZWN0QXR0cmlidXRlcyAm
JiAhSVBDOjpkZWNvZGUoZGVjb2Rlciwgc2VjSXRlbVJlcXVlc3REYXRhLm1fYXR0cmlidXRlc1Rv
TWF0Y2gpKQorICAgIGlmIChleHBlY3RBdHRyaWJ1dGVzICYmICFkZWNvZGVyLmRlY29kZShzZWNJ
dGVtUmVxdWVzdERhdGEubV9hdHRyaWJ1dGVzVG9NYXRjaCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9TZWNJdGVtUmVzcG9uc2VEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvU2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAJKHJldmlzaW9uIDI3Nzg3MykKKysrIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TZWNJdGVtUmVzcG9uc2VEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCB2b2lkIFNlY0l0ZW1SZXNwb25zZURhdGE6OmVuY29kZShJ
UEM6OkVuCiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxpbnQ2NF90PihtX3Jlc3VsdENvZGUp
OwogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4obV9yZXN1bHRPYmplY3QpOwogICAg
IGlmIChtX3Jlc3VsdE9iamVjdCkKLSAgICAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbV9yZXN1
bHRPYmplY3QuZ2V0KCkpOworICAgICAgICBlbmNvZGVyIDw8IG1fcmVzdWx0T2JqZWN0OwogfQog
CiBPcHRpb25hbDxTZWNJdGVtUmVzcG9uc2VEYXRhPiBTZWNJdGVtUmVzcG9uc2VEYXRhOjpkZWNv
ZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQpAQCAtNTYsNyArNTYsNyBAQCBPcHRpb25hbDxTZWNJ
dGVtUmVzcG9uc2VEYXRhPiBTZWNJdGVtUmVzCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiByZXN1bHQ7Ci0gICAgaWYgKGV4cGVjdFJlc3Vs
dE9iamVjdCAmJiAhSVBDOjpkZWNvZGUoZGVjb2RlciwgcmVzdWx0KSkKKyAgICBpZiAoZXhwZWN0
UmVzdWx0T2JqZWN0ICYmICFkZWNvZGVyLmRlY29kZShyZXN1bHQpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIHt7IHN0YXRpY19jYXN0PE9TU3RhdHVzPihyZXN1
bHRDb2RlKSwgV1RGTW92ZShyZXN1bHQpIH19OwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCShyZXZpc2lvbiAyNzc4
NzMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsMTEgQEAgdm9pZCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OkNlcnRpZmljYXRlSQogICAgIHN3aXRjaCAoY2VydGlmaWNhdGVJbmZvLnR5cGUo
KSkgewogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiAgICAgY2FzZSBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OlRydXN0OgotICAgICAgICBJUEM6OmVuY29kZShlbmNv
ZGVyLCBjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSk7CisgICAgICAgIGVuY29kZXIgPDwgUmV0YWlu
UHRyPFNlY1RydXN0UmVmPiB7IGNlcnRpZmljYXRlSW5mby50cnVzdCgpIH07CiAgICAgICAgIGJy
ZWFrOwogI2VuZGlmCiAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OkNl
cnRpZmljYXRlQ2hhaW46Ci0gICAgICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIGNlcnRpZmljYXRl
SW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkpOworICAgICAgICBlbmNvZGVyIDw8IFJldGFpblB0cjxD
RkFycmF5UmVmPiB7IGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgfTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmU6
CiAgICAgICAgIC8vIERvIG5vdGhpbmcuCkBAIC03Myw3ICs3Myw3IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUkKICNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFU
SU9OKQogICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpUcnVzdDogewog
ICAgICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+IHRydXN0OwotICAgICAgICBpZiAoIUlQQzo6
ZGVjb2RlKGRlY29kZXIsIHRydXN0KSB8fCAhdHJ1c3QpCisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodHJ1c3QpIHx8ICF0cnVzdCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICBjZXJ0aWZpY2F0ZUluZm8gPSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oV1RGTW92ZSh0
cnVzdCkpOwpAQCAtODIsNyArODIsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJCiAjZW5kaWYKICAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlw
ZTo6Q2VydGlmaWNhdGVDaGFpbjogewogICAgICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY2Vy
dGlmaWNhdGVDaGFpbjsKLSAgICAgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBjZXJ0aWZp
Y2F0ZUNoYWluKSB8fCAhY2VydGlmaWNhdGVDaGFpbikKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShjZXJ0aWZpY2F0ZUNoYWluKSB8fCAhY2VydGlmaWNhdGVDaGFpbikKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICBjZXJ0aWZpY2F0ZUluZm8gPSBXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm8oV1RGTW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7CkBAIC0xNjYsNyArMTY2LDcg
QEAgc3RhdGljIHZvaWQgZW5jb2RlTlNFcnJvcihFbmNvZGVyJiBlbmNvZAogICAgICAgICBDRkRp
Y3Rpb25hcnlTZXRWYWx1ZShmaWx0ZXJlZFVzZXJJbmZvLmdldCgpLCAoX19icmlkZ2UgQ0ZTdHJp
bmdSZWYpTlNVUkxFcnJvckZhaWxpbmdVUkxQZWVyVHJ1c3RFcnJvcktleSwgcGVlclRydXN0KTsK
ICNlbmRpZgogCi0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgZmlsdGVyZWRVc2VySW5mby5nZXQo
KSk7CisgICAgZW5jb2RlciA8PCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiB7IFdURk1vdmUo
ZmlsdGVyZWRVc2VySW5mbykgfTsKIAogICAgIGlmIChpZCB1bmRlcmx5aW5nRXJyb3IgPSBbdXNl
ckluZm8gb2JqZWN0Rm9yS2V5Ok5TVW5kZXJseWluZ0Vycm9yS2V5XSkgewogICAgICAgICBBU1NF
UlQoW3VuZGVybHlpbmdFcnJvciBpc0tpbmRPZkNsYXNzOltOU0Vycm9yIGNsYXNzXV0pOwpAQCAt
MTkyLDcgKzE5Miw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNFcnJvcj4gZGVjb2RlTlNFcnJvcigK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHVz
ZXJJbmZvOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgdXNlckluZm8pIHx8ICF1c2Vy
SW5mbykKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVzZXJJbmZvKSB8fCAhdXNlckluZm8pCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKICAgICBib29sIGhhc1VuZGVybHlpbmdFcnJvciA9IGZhbHNl
OwpAQCAtMzc3LDEzICszNzcsMTMgQEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvbnRl
bnRGaWx0ZQogewogICAgIGF1dG8gYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZEFyY2hpdmVy
IGFsbG9jXSBpbml0UmVxdWlyaW5nU2VjdXJlQ29kaW5nOllFU10pOwogICAgIGNvbnRlbnRGaWx0
ZXJVbmJsb2NrSGFuZGxlci5lbmNvZGUoYXJjaGl2ZXIuZ2V0KCkpOwotICAgIElQQzo6ZW5jb2Rl
KGVuY29kZXIsIChfX2JyaWRnZSBDRkRhdGFSZWYpYXJjaGl2ZXIuZ2V0KCkuZW5jb2RlZERhdGEp
OworICAgIGVuY29kZXIgPDwgKF9fYnJpZGdlIENGRGF0YVJlZilhcmNoaXZlci5nZXQoKS5lbmNv
ZGVkRGF0YTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXJV
bmJsb2NrSGFuZGxlcj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpDb250ZW50
RmlsdGVyVW5ibG9ja0hhbmRsZXImIGNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcikKIHsKICAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2Rl
ciwgZGF0YSkgfHwgIWRhdGEpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhKSB8fCAhZGF0
YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byB1bmFyY2hpdmVyID0gYWRvcHRO
UyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ0Zyb21EYXRhOihfX2Jy
aWRnZSBOU0RhdGEgKilkYXRhLmdldCgpIGVycm9yOm51bGxwdHJdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429341</attachid>
            <date>2021-05-21 14:21:54 -0700</date>
            <delta_ts>2021-05-21 17:18:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226112-20210521142153.patch</filename>
            <type>text/plain</type>
            <size>56871</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc4ODYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAyMS0wNS0yMSAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBDR0NvbG9yU3BhY2VSZWYgYXJn
dW1lbnQgY29kaW5nIG1hdGNoIG90aGVyIENGIG9iamVjdHMgYW5kIHVzZSBDR0NvbG9yU3BhY2VD
cmVhdGVXaXRoUHJvcGVydHlMaXN0IGZvciBmYWxsYmFjaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHByZWN1cnNvciB0byBzb21lIGNv
bG9yIHNwYWNlIHR5cGUgdW5pZmljYXRpb24uIFRoaXMgY2hhbmdlOgorICAgICAgICAKKyAgICAg
ICAgLSBNb2Rlcm5pemVzIENGIGFydWdtZW50IGNvZGVycyB0byB1c2UgQXJndW1lbnRDb2RlciBz
cGVjaWFsaXphdGlvbi4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHdlIG5vdyBzdXBwb3J0IGVu
Y29kaW5nIENGIHR5cGVzIGJvdGggYXMgcGxhaW4gdHlwZXMgYW5kIFJldGFpblB0cjw+IHR5cGVz
LCB3aXRoCisgICAgICAgICAgZGVjb2RpbmcgYmVpbmcga2VwdCBvbmx5IHN1cHBvcmluZyBSZXRh
aW5QdHI8PnMsIGFzIGRlY29kaW5nIGludG8gbm9uLXNtYXJ0IHBvaW50ZXIKKyAgICAgICAgICBp
cyBub3QgdmVyeSB1c2VmdWwuCisgICAgICAgIC0gTW92ZSBDR0NvbG9yU3BhY2VSZWYgY29kaW5n
IHRvIEFyZ3VtZW50Q29kZXJzQ0YgYW5kIHVzZSBDR0NvbG9yU3BhY2VDb3B5UHJvcGVydHlMaXN0
CisgICAgICAgICAgYW5kIENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhQcm9wZXJ0eUxpc3QgYXMgdGhl
IGZhbGxiYWNrIGNvZGluZyAoaWYgdGhlcmUgaXMgbm8gbmFtZSksCisgICAgICAgICAgbWF0Y2hp
bmcgd2hhdCBvdGhlciBsaWJyYXJpZXMgb24gbWFjT1MgYW5kIGlPUyBkby4KKyAgICAgICAgLSBT
d2l0Y2ggQ29sb3JTcGFjZURhdGEgdG8gYmUgYSBzdHJ1Y3Qgd3JhcHBpbmcgYW4gT3B0aW9uYWw8
UmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4+CisgICAgICAgICAgYW5kIHVzZSB0aGUgbmV3IHNo
YXJlZCBjb2RpbmcuIFRoaXMgd2lsbCBiZSByZXBsYWNlZCBlbnRpcmVseSBpbiBzdWJzZXF1ZW50
IGNoYW5nZXMKKyAgICAgICAgICBzbyBJIGRpZG4ndCB3YW50IHRvIGNoYW5nZSB0aGlzIHRvbyBt
dWNoIG5vdy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tOgorICAgICAgICAoSVBD
OjplbmNvZGVEYXRhSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNvZGVEYXRhSW50ZXJuYWwp
OgorICAgICAgICAoSVBDOjplbmNvZGVEYXRlSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNv
ZGVEYXRlSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjplbmNvZGVOdW1iZXJJbnRlcm5hbCk6Cisg
ICAgICAgIChJUEM6OmRlY29kZU51bWJlckludGVybmFsKToKKyAgICAgICAgKElQQzo6ZW5jb2Rl
U2VjdXJlQ29kaW5nSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNvZGVTZWN1cmVDb2RpbmdJ
bnRlcm5hbCk6CisgICAgICAgIChJUEM6OmVuY29kZVN0cmluZ0ludGVybmFsKToKKyAgICAgICAg
KElQQzo6ZGVjb2RlU3RyaW5nSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjplbmNvZGVVUkxJbnRl
cm5hbCk6CisgICAgICAgIChJUEM6OmRlY29kZVVSTEludGVybmFsKToKKyAgICAgICAgKiBTaGFy
ZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxSZWY8Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAg
ICAqIFNoYXJlZC9Gb250SW5mby5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZvbnRJbmZvOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpGb250SW5mbzo6ZGVjb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwOgorICAg
ICAgICAoSVBDOjp0eXBlRnJvbUNGVHlwZVJlZik6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8Q0ZUeXBlUmVmPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXRh
aW5QdHI8Q0ZUeXBlUmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
Q0ZBcnJheVJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWlu
UHRyPENGQXJyYXlSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxD
RkJvb2xlYW5SZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFp
blB0cjxDRkJvb2xlYW5SZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxDRkRhdGFSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFp
blB0cjxDRkRhdGFSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxD
RkRhdGVSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRkRhdGVSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDRkRp
Y3Rpb25hcnlSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxDRk51bWJlclJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
UmV0YWluUHRyPENGTnVtYmVyUmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50
Q29kZXI8Q0ZTdHJpbmdSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVy
PFJldGFpblB0cjxDRlN0cmluZ1JlZj4+OjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVu
dENvZGVyPENGVVJMUmVmPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxS
ZXRhaW5QdHI8Q0ZVUkxSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxDR0NvbG9yU3BhY2VSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVy
PFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxTZWNDZXJ0aWZpY2F0ZVJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8UmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPj46OmRlY29kZSk6CisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPjo6ZW5jb2RlKToKKyAg
ICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPj46
OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U2VjQWNjZXNzQ29udHJvbFJl
Zj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPFNlY0Fj
Y2Vzc0NvbnRyb2xSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxT
ZWNUcnVzdFJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWlu
UHRyPFNlY1RydXN0UmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OmVuY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChJUEM6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL2Nm
L0FyZ3VtZW50Q29kZXJzQ0YuaDoKKyAgICAgICAgKElQQzo6Q0ZSZXRhaW5QdHJBcmd1bWVudENv
ZGVyOjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvQ29sb3JTcGFjZURhdGEubW06Cisg
ICAgICAgIChXZWJLaXQ6OkNvbG9yU3BhY2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpDb2xvclNwYWNlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgICogU2hhcmVkL21hYy9TZWNJdGVtUmVxdWVzdERhdGEuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpTZWNJdGVtUmVxdWVzdERhdGE6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlNlY0l0ZW1SZXF1ZXN0RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1NlY0l0
ZW1SZXNwb25zZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpTZWNJdGVtUmVzcG9uc2VEYXRh
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTZWNJdGVtUmVzcG9uc2VEYXRhOjpk
ZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1t
OgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46
OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6ZW5jb2RlTlNFcnJvcik6CisgICAgICAg
IChJUEM6OmRlY29kZU5TRXJyb3IpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcj46OmVuY29kZSk6CisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyPjo6ZGVj
b2RlKToKKwogMjAyMS0wNS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkb3B0IENoZWNrZWRMb2NrIGluIE1lZGlhRm9ybWF0UmVhZGVyIGFuZCBmaXggdGhy
ZWFkaW5nIGJ1ZwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlz
aW9uIDI3Nzg3MykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmUKICAgICBlbmNvZGVyIDw8
IHVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzOwogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcjsKLSAgICBJUEM6
OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CisgICAgZW5jb2RlciA8
PCBuZXR3b3JrQVRTQ29udGV4dDsKICNlbmRpZgogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIg
PDwgY29va2llQWNjZXB0UG9saWN5OwpAQCAtMTE1LDcgKzExNSw3IEBAIGJvb2wgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC51aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgcmVzdWx0Lm5l
dHdvcmtBVFNDb250ZXh0KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5uZXR3b3Jr
QVRTQ29udGV4dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjc3ODczKQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbkNy
ZWF0aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwgYm91bmRJbnRlcmZhY2VJZGVudGlm
aWVyOwogICAgIGVuY29kZXIgPDwgYWxsb3dzQ2VsbHVsYXJBY2Nlc3M7CiAjaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcHJveHlDb25maWd1cmF0aW9uLmdldCgp
KTsKKyAgICBlbmNvZGVyIDw8IHByb3h5Q29uZmlndXJhdGlvbjsKICAgICBlbmNvZGVyIDw8IHNv
dXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IHNvdXJjZUFw
cGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGF0dHJpYnV0ZWRC
dW5kbGVJZGVudGlmaWVyOwpAQCAtMTA4LDcgKzEwOCw3IEBAIE9wdGlvbmFsPE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXIKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eUNvbmZpZ3VyYXRpb247Ci0gICAgaWYgKCFJUEM6
OmRlY29kZShkZWNvZGVyLCBwcm94eUNvbmZpZ3VyYXRpb24pKQorICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocHJveHlDb25maWd1cmF0aW9uKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICAKICAgICBPcHRpb25hbDxTdHJpbmc+IHNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
ZmllcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0ZvbnRJbmZvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Gb250SW5mby5jcHAJKHJldmlzaW9uIDI3Nzg3MykK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0ZvbnRJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCB2b2lkIEZvbnRJbmZvOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPihmb250
QXR0cmlidXRlRGljdGlvbmFyeSk7CiAgICAgaWYgKGZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5KQot
ICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBmb250QXR0cmlidXRlRGljdGlvbmFyeS5nZXQo
KSk7CisgICAgICAgIGVuY29kZXIgPDwgZm9udEF0dHJpYnV0ZURpY3Rpb25hcnk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShlbmNvZGVyKTsKICNlbmRpZgpAQCAtNTUsNyArNTUsNyBAQCBib29s
IEZvbnRJbmZvOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvCiAgICAgaWYgKCFoYXNGb250QXR0
cmlidXRlRGljdGlvbmFyeSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIUlQQzo6
ZGVjb2RlKGRlY29kZXIsIGZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5KSkKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjc3ODczKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksNyBAQCB2b2lkIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kCiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIG5ldHdv
cmtBVFNDb250ZXh0LmdldCgpKTsKKyAgICBlbmNvZGVyIDw8IG5ldHdvcmtBVFNDb250ZXh0Owog
I2VuZGlmCiAKICNpZiBQTEFURk9STShXQVlMQU5EKQpAQCAtMzg3LDcgKzM4Nyw3IEBAIGJvb2wg
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2QKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBwYXJhbWV0ZXJzLm5ldHdv
cmtBVFNDb250ZXh0KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubmV0d29y
a0FUU0NvbnRleHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tCShy
ZXZpc2lvbiAyNzc4NzMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENv
ZGVyc0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsMTMgKzMwNiwxMyBAQCBzdGF0aWMg
aW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBl
bmNvZGVEYXRhSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNEYXRhICpkYXRhKQogewotICAg
IGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2UgQ0ZEYXRhUmVmKWRhdGEpOworICAgIGVuY29kZXIg
PDwgKF9fYnJpZGdlIENGRGF0YVJlZilkYXRhOwogfQogCiBzdGF0aWMgaW5saW5lIE9wdGlvbmFs
PFJldGFpblB0cjxpZD4+IGRlY29kZURhdGFJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2Rlciwg
ZGF0YSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICByZXR1cm4geyBhZG9wdE5TKChOU0RhdGEgKilkYXRhLmxlYWtSZWYo
KSkgfTsKIH0KQEAgLTMyMSwxMyArMzIxLDEzIEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0
YWluUHRyPGlkPj4gZGUKIAogc3RhdGljIGlubGluZSB2b2lkIGVuY29kZURhdGVJbnRlcm5hbChF
bmNvZGVyJiBlbmNvZGVyLCBOU0RhdGUgKmRhdGUpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChf
X2JyaWRnZSBDRkRhdGVSZWYpZGF0ZSk7CisgICAgZW5jb2RlciA8PCAoX19icmlkZ2UgQ0ZEYXRl
UmVmKWRhdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVj
b2RlRGF0ZUludGVybmFsKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgUmV0YWluUHRyPENGRGF0
ZVJlZj4gZGF0ZTsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBkYXRlKSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGRhdGUpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJl
dHVybiB7IGFkb3B0TlMoKE5TRGF0ZSAqKWRhdGUubGVha1JlZigpKSB9OwogfQpAQCAtNDE0LDEz
ICs0MTQsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZUZvbgogCiBz
dGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlTnVtYmVySW50ZXJuYWwoRW5jb2RlciYgZW5jb2Rlciwg
TlNOdW1iZXIgKm51bWJlcikKIHsKLSAgICBlbmNvZGUoZW5jb2RlciwgKF9fYnJpZGdlIENGTnVt
YmVyUmVmKW51bWJlcik7CisgICAgZW5jb2RlciA8PCAoX19icmlkZ2UgQ0ZOdW1iZXJSZWYpbnVt
YmVyOwogfQogCiBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZU51
bWJlckludGVybmFsKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgUmV0YWluUHRyPENGTnVtYmVy
UmVmPiBudW1iZXI7Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgbnVtYmVyKSkKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKG51bWJlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgcmV0dXJuIHsgYWRvcHROUygoTlNOdW1iZXIgKiludW1iZXIubGVha1JlZigpKSB9OwogfQpA
QCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZVNlY3VyZUNvZGluZ0ludGVybmFs
KEUKICAgICBbYXJjaGl2ZXIgZmluaXNoRW5jb2RpbmddOwogICAgIFthcmNoaXZlciBzZXREZWxl
Z2F0ZTpuaWxdOwogCi0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRkRhdGFSZWYpW2Fy
Y2hpdmVyIGVuY29kZWREYXRhXSk7CisgICAgZW5jb2RlciA8PCAoX19icmlkZ2UgQ0ZEYXRhUmVm
KVthcmNoaXZlciBlbmNvZGVkRGF0YV07CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8
aWQ+PiBkZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmF5
PENsYXNzPiAqYWxsb3dlZENsYXNzZXMpCkBAIC00NDgsNyArNDQ4LDcgQEAgc3RhdGljIE9wdGlv
bmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlYwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAgICBpZiAoIWRlY29kZShkZWNv
ZGVyLCBkYXRhKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEpKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byB1bmFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5
ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ0Zyb21EYXRhOihfX2JyaWRnZSBOU0Rh
dGEgKilkYXRhLmdldCgpIGVycm9yOm51bGxwdHJdKTsKQEAgLTQ3NywxMyArNDc3LDEzIEBAIHN0
YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTZWMKIAogc3RhdGljIGlubGluZSB2
b2lkIGVuY29kZVN0cmluZ0ludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TU3RyaW5nICpzdHJp
bmcpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHJpbmcp
OworICAgIGVuY29kZXIgPDwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKXN0cmluZzsKIH0KIAogc3Rh
dGljIGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTdHJpbmdJbnRlcm5hbChE
ZWNvZGVyJiBkZWNvZGVyKQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3RyaW5nOwot
ICAgIGlmICghZGVjb2RlKGRlY29kZXIsIHN0cmluZykpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdHJpbmcpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiB7IGFk
b3B0TlMoKE5TU3RyaW5nICopc3RyaW5nLmxlYWtSZWYoKSkgfTsKIH0KQEAgLTQ5MiwxMyArNDky
LDEzIEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGUKIAogc3RhdGlj
IGlubGluZSB2b2lkIGVuY29kZVVSTEludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TVVJMICpV
UkwpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRlVSTFJlZilVUkwpOworICAg
IGVuY29kZXIgPDwgKF9fYnJpZGdlIENGVVJMUmVmKVVSTDsKIH0KIAogc3RhdGljIGlubGluZSBP
cHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVVUkxJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVy
KQogewogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gVVJMOwotICAgIGlmICghZGVjb2RlKGRlY29k
ZXIsIFVSTCkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShVUkwpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIHJldHVybiB7IGFkb3B0TlMoKE5TVVJMICopVVJMLmxlYWtSZWYo
KSkgfTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVu
dENvZGVyc0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29h
L1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCShyZXZpc2lvbiAyNzc4NzMpCisrKyBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDMxLDcgKzQzMSw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZWY8Rm9u
dD4+OjplbmNvZGVQbGEKICAgICBhdXRvIGN0Rm9udCA9IHBsYXRmb3JtRGF0YS5mb250KCk7CiAg
ICAgYXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9y
KGN0Rm9udCkpOwogICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRv
ckNvcHlBdHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLmdldCgpKSk7Ci0gICAgSVBDOjplbmNvZGUo
ZW5jb2RlciwgYXR0cmlidXRlcy5nZXQoKSk7CisgICAgZW5jb2RlciA8PCBhdHRyaWJ1dGVzOwog
CiAgICAgY29uc3QgYXV0byYgY3JlYXRpb25EYXRhID0gcGxhdGZvcm1EYXRhLmNyZWF0aW9uRGF0
YSgpOwogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4oY3JlYXRpb25EYXRhKTsKQEAg
LTQ5OSw4ICs0OTksOSBAQCBPcHRpb25hbDxGb250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVy
CiAgICAgaWYgKCFzeW50aGV0aWNPYmxpcXVlLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVz
OwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgYXR0cmlidXRlcykpCisgICAgT3B0aW9u
YWw8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+IGF0dHJpYnV0ZXM7CisgICAgZGVjb2RlciA+
PiBhdHRyaWJ1dGVzOworICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIE9wdGlvbmFsPGJvb2w+IGluY2x1ZGVzQ3JlYXRpb25EYXRhOwpAQCAt
NTI1LDcgKzUyNiw3IEBAIE9wdGlvbmFsPEZvbnRQbGF0Zm9ybURhdGE+IEFyZ3VtZW50Q29kZXIK
ICAgICAgICAgYXV0byBiYXNlRm9udERlc2NyaXB0b3IgPSBmb250Q3VzdG9tUGxhdGZvcm1EYXRh
LT5mb250RGVzY3JpcHRvci5nZXQoKTsKICAgICAgICAgaWYgKCFiYXNlRm9udERlc2NyaXB0b3Ip
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBhdXRvIGZvbnREZXNj
cmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVz
KGJhc2VGb250RGVzY3JpcHRvciwgYXR0cmlidXRlcy5nZXQoKSkpOworICAgICAgICBhdXRvIGZv
bnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhBdHRy
aWJ1dGVzKGJhc2VGb250RGVzY3JpcHRvciwgYXR0cmlidXRlcy0+Z2V0KCkpKTsKICAgICAgICAg
YXV0byBjdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250
RGVzY3JpcHRvci5nZXQoKSwgc2l6ZS52YWx1ZSgpLCBudWxscHRyKSk7CiAKICAgICAgICAgYXV0
byBjcmVhdGlvbkRhdGEgPSBGb250UGxhdGZvcm1EYXRhOjpDcmVhdGlvbkRhdGEgeyBmb250RmFj
ZURhdGEudmFsdWUoKSwgaXRlbUluQ29sbGVjdGlvbi52YWx1ZSgpIH07CkBAIC01NDUsNyArNTQ2
LDcgQEAgT3B0aW9uYWw8Rm9udFBsYXRmb3JtRGF0YT4gQXJndW1lbnRDb2RlcgogICAgIFJldGFp
blB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGZpbmRGb250RGVzY3Jp
cHRvcihyZWZlcmVuY2VVUkwudmFsdWUoKSwgcG9zdFNjcmlwdE5hbWUudmFsdWUoKSk7CiAgICAg
aWYgKCFmb250RGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBm
b250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoQXR0
cmlidXRlcyhmb250RGVzY3JpcHRvci5nZXQoKSwgYXR0cmlidXRlcy5nZXQoKSkpOworICAgIGZv
bnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhBdHRy
aWJ1dGVzKGZvbnREZXNjcmlwdG9yLmdldCgpLCBhdHRyaWJ1dGVzLT5nZXQoKSkpOwogICAgIGF1
dG8gY3RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERl
c2NyaXB0b3IuZ2V0KCksIHNpemUudmFsdWUoKSwgbnVsbHB0cikpOwogCiAgICAgcmV0dXJuIEZv
bnRQbGF0Zm9ybURhdGEoY3RGb250LmdldCgpLCBzaXplLnZhbHVlKCksIHN5bnRoZXRpY0JvbGQu
dmFsdWUoKSwgc3ludGhldGljT2JsaXF1ZS52YWx1ZSgpLCBvcmllbnRhdGlvbi52YWx1ZSgpLCB3
aWR0aFZhcmlhbnQudmFsdWUoKSwgdGV4dFJlbmRlcmluZ01vZGUudmFsdWUoKSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2lu
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI3Nzg3MykKKysrIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBQbHVnaW5Qcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjplbgogICAgIGVuY29kZXIgPDwgdGVybWluYXRpb25UaW1lb3V0Owog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVuY29kZXIgPDwgYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z1BvcnQ7Ci0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkp
OworICAgIGVuY29kZXIgPDwgbmV0d29ya0FUU0NvbnRleHQ7CiAjZW5kaWYKIH0KIApAQCAtNjEs
NyArNjEsNyBAQCBib29sIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWNjZWxlcmF0
ZWRDb21wb3NpdGluZ1BvcnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFJUEM6
OmRlY29kZShkZWNvZGVyLCByZXN1bHQubmV0d29ya0FUU0NvbnRleHQpKQorICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0Lm5ldHdvcmtBVFNDb250ZXh0KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50Q29k
ZXJzQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50
Q29kZXJzQ0YuY3BwCShyZXZpc2lvbiAyNzc4NzMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9j
Zi9Bcmd1bWVudENvZGVyc0NGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAog
I2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJEZWNvZGVyLmgiCiAjaW5jbHVk
ZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyLmgiCisjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJh
aXRzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUHJvY2Vzc1By
aXZpbGVnZS5oPgpAQCAtNzIsNiArNzQsNyBAQCBlbnVtIGNsYXNzIENGVHlwZSA6IHVpbnQ4X3Qg
ewogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiAgICAgU2VjVHJ1c3QsCiAjZW5k
aWYKKyAgICBDR0NvbG9yU3BhY2UsCiAgICAgTnVsbHB0ciwKICAgICBVbmtub3duLAogfTsKQEAg
LTEwMiw2ICsxMDUsOCBAQCBzdGF0aWMgQ0ZUeXBlIHR5cGVGcm9tQ0ZUeXBlUmVmKENGVHlwZVJl
CiAgICAgICAgIHJldHVybiBDRlR5cGU6OkNGU3RyaW5nOwogICAgIGlmICh0eXBlSUQgPT0gQ0ZV
UkxHZXRUeXBlSUQoKSkKICAgICAgICAgcmV0dXJuIENGVHlwZTo6Q0ZVUkw7CisgICAgaWYgKHR5
cGVJRCA9PSBDR0NvbG9yU3BhY2VHZXRUeXBlSUQoKSkKKyAgICAgICAgcmV0dXJuIENGVHlwZTo6
Q0dDb2xvclNwYWNlOwogICAgIGlmICh0eXBlSUQgPT0gU2VjQ2VydGlmaWNhdGVHZXRUeXBlSUQo
KSkKICAgICAgICAgcmV0dXJuIENGVHlwZTo6U2VjQ2VydGlmaWNhdGU7CiAjaWYgSEFWRShTRUNf
S0VZQ0hBSU4pCkBAIC0xMjEsNTQgKzEyNiw1OSBAQCBzdGF0aWMgQ0ZUeXBlIHR5cGVGcm9tQ0ZU
eXBlUmVmKENGVHlwZVJlCiAgICAgcmV0dXJuIENGVHlwZTo6VW5rbm93bjsKIH0KIAotdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZUeXBlUmVmIHR5cGVSZWYpCisKK3RlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZUeXBlUmVmPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIENGVHlwZVJlZiB0eXBlUmVmKQogewotICAgIENGVHlwZSB0eXBlID0g
dHlwZUZyb21DRlR5cGVSZWYodHlwZVJlZik7CisgICAgYXV0byB0eXBlID0gdHlwZUZyb21DRlR5
cGVSZWYodHlwZVJlZik7CiAgICAgZW5jb2RlciA8PCB0eXBlOwogCiAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgY2FzZSBDRlR5cGU6OkNGQXJyYXk6Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBz
dGF0aWNfY2FzdDxDRkFycmF5UmVmPih0eXBlUmVmKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Q0ZBcnJheVJlZj4odHlwZVJlZik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IENGVHlwZTo6Q0ZCb29sZWFuOgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8
Q0ZCb29sZWFuUmVmPih0eXBlUmVmKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Q0ZCb29sZWFuUmVmPih0eXBlUmVmKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ0ZUeXBl
OjpDRkRhdGE6Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxDRkRhdGFSZWY+
KHR5cGVSZWYpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxDRkRhdGFSZWY+KHR5
cGVSZWYpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDRlR5cGU6OkNGRGF0ZToKLSAgICAg
ICAgZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PENGRGF0ZVJlZj4odHlwZVJlZikpOworICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PENGRGF0ZVJlZj4odHlwZVJlZik7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIENGVHlwZTo6Q0ZEaWN0aW9uYXJ5OgotICAgICAgICBlbmNvZGUo
ZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPih0eXBlUmVmKSk7CisgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPih0eXBlUmVmKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQ0ZUeXBlOjpDRk51bGw6CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIENGVHlwZTo6Q0ZOdW1iZXI6Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBzdGF0aWNf
Y2FzdDxDRk51bWJlclJlZj4odHlwZVJlZikpOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PENGTnVtYmVyUmVmPih0eXBlUmVmKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ0ZU
eXBlOjpDRlN0cmluZzoKLSAgICAgICAgZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PENGU3Ry
aW5nUmVmPih0eXBlUmVmKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZTdHJp
bmdSZWY+KHR5cGVSZWYpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDRlR5cGU6OkNGVVJM
OgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Q0ZVUkxSZWY+KHR5cGVSZWYp
KTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxDRlVSTFJlZj4odHlwZVJlZik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENGVHlwZTo6Q0dDb2xvclNwYWNlOgorICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PENHQ29sb3JTcGFjZVJlZj4oY29uc3RfY2FzdDx2b2lkKj4o
dHlwZVJlZikpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDRlR5cGU6OlNlY0NlcnRpZmlj
YXRlOgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8U2VjQ2VydGlmaWNhdGVS
ZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8U2VjQ2VydGlmaWNhdGVSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKTsK
ICAgICAgICAgcmV0dXJuOwogI2lmIEhBVkUoU0VDX0tFWUNIQUlOKQogICAgIGNhc2UgQ0ZUeXBl
OjpTZWNLZXljaGFpbkl0ZW06Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxT
ZWNLZXljaGFpbkl0ZW1SZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKSk7CisgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8U2VjS2V5Y2hhaW5JdGVtUmVmPihjb25zdF9jYXN0PHZv
aWQqPih0eXBlUmVmKSk7CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogI2lmIEhBVkUoU0VDX0FD
Q0VTU19DT05UUk9MKQogICAgIGNhc2UgQ0ZUeXBlOjpTZWNBY2Nlc3NDb250cm9sOgotICAgICAg
ICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8U2VjQWNjZXNzQ29udHJvbFJlZj4oY29uc3Rf
Y2FzdDx2b2lkKj4odHlwZVJlZikpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxT
ZWNBY2Nlc3NDb250cm9sUmVmPihjb25zdF9jYXN0PHZvaWQqPih0eXBlUmVmKSk7CiAgICAgICAg
IHJldHVybjsKICNlbmRpZgogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiAgICAg
Y2FzZSBDRlR5cGU6OlNlY1RydXN0OgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nh
c3Q8U2VjVHJ1c3RSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKSk7CisgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8U2VjVHJ1c3RSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVS
ZWYpKTsKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgY2FzZSBDRlR5cGU6Ok51bGxwdHI6
CkBAIC0xODAsNDYgKzE5MCw1MCBAQCB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRlR5
cGVSZWYgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFJldGFpblB0cjxDRlR5cGVSZWY+JiByZXN1bHQpCit0ZW1wbGF0ZSB2b2lk
IEFyZ3VtZW50Q29kZXI8Q0ZUeXBlUmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBDRlR5
cGVSZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGVHlwZVJlZj46OmVuY29kZTxT
dHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBDRlR5cGVS
ZWYpOworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGVHlwZVJlZj4+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGVHlwZVJlZj4mIHJlc3VsdCkKIHsKLSAgICBD
RlR5cGUgdHlwZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHR5cGUpKQorICAgIE9wdGlvbmFs
PENGVHlwZT4gdHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBzd2l0Y2ggKCp0
eXBlKSB7CiAgICAgY2FzZSBDRlR5cGU6OkNGQXJyYXk6IHsKICAgICAgICAgUmV0YWluUHRyPENG
QXJyYXlSZWY+IGFycmF5OwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBhcnJheSkpCisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyYXkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXN1bHQgPSBhZG9wdENGKGFycmF5LmxlYWtSZWYoKSk7CisgICAgICAg
IHJlc3VsdCA9IFdURk1vdmUoYXJyYXkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgY2FzZSBDRlR5cGU6OkNGQm9vbGVhbjogewogICAgICAgICBSZXRhaW5QdHI8Q0ZCb29sZWFu
UmVmPiBib29sZWFuOwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBib29sZWFuKSkKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShib29sZWFuKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihib29sZWFuLmxlYWtSZWYoKSk7CisgICAg
ICAgIHJlc3VsdCA9IFdURk1vdmUoYm9vbGVhbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICBjYXNlIENGVHlwZTo6Q0ZEYXRhOiB7CiAgICAgICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGRhdGE7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIGRhdGEpKQorICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICByZXN1bHQgPSBhZG9wdENGKGRhdGEubGVha1JlZigpKTsKKyAgICAgICAgcmVzdWx0ID0g
V1RGTW92ZShkYXRhKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQ0ZU
eXBlOjpDRkRhdGU6IHsKICAgICAgICAgUmV0YWluUHRyPENGRGF0ZVJlZj4gZGF0ZTsKLSAgICAg
ICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgZGF0ZSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoZGF0ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGFk
b3B0Q0YoZGF0ZS5sZWFrUmVmKCkpOworICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGRhdGUpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBDRlR5cGU6OkNGRGljdGlvbmFy
eTogewogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkaWN0aW9uYXJ5OwotICAg
ICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBkaWN0aW9uYXJ5KSkKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShkaWN0aW9uYXJ5KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmVzdWx0ID0gYWRvcHRDRihkaWN0aW9uYXJ5LmxlYWtSZWYoKSk7CisgICAgICAgIHJlc3Vs
dCA9IFdURk1vdmUoZGljdGlvbmFyeSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBjYXNlIENGVHlwZTo6Q0ZOdWxsOgpAQCAtMjI3LDU2ICsyNDEsNjMgQEAgYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBj
YXNlIENGVHlwZTo6Q0ZOdW1iZXI6IHsKICAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBu
dW1iZXI7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIG51bWJlcikpCisgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobnVtYmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgcmVzdWx0ID0gYWRvcHRDRihudW1iZXIubGVha1JlZigpKTsKKyAgICAgICAgcmVzdWx0
ID0gV1RGTW92ZShudW1iZXIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2Fz
ZSBDRlR5cGU6OkNGU3RyaW5nOiB7CiAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3Ry
aW5nOwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBzdHJpbmcpKQorICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHN0cmluZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJlc3VsdCA9IGFkb3B0Q0Yoc3RyaW5nLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc3VsdCA9
IFdURk1vdmUoc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2Ug
Q0ZUeXBlOjpDRlVSTDogewogICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybDsKLSAgICAg
ICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgdXJsKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSBXVEZN
b3ZlKHVybCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIENGVHlwZTo6
Q0dDb2xvclNwYWNlOiB7CisgICAgICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9y
U3BhY2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YodXJsLmxlYWtSZWYo
KSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoY29sb3JTcGFjZSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBjYXNlIENGVHlwZTo6U2VjQ2VydGlmaWNhdGU6IHsKICAgICAg
ICAgUmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPiBjZXJ0aWZpY2F0ZTsKLSAgICAgICAgaWYg
KCFkZWNvZGUoZGVjb2RlciwgY2VydGlmaWNhdGUpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGNlcnRpZmljYXRlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVz
dWx0ID0gYWRvcHRDRihjZXJ0aWZpY2F0ZS5sZWFrUmVmKCkpOworICAgICAgICByZXN1bHQgPSBX
VEZNb3ZlKGNlcnRpZmljYXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEhB
VkUoU0VDX0tFWUNIQUlOKQogICAgIGNhc2UgQ0ZUeXBlOjpTZWNLZXljaGFpbkl0ZW06IHsKICAg
ICAgICAgUmV0YWluUHRyPFNlY0tleWNoYWluSXRlbVJlZj4ga2V5Y2hhaW5JdGVtOwotICAgICAg
ICBpZiAoIWRlY29kZShkZWNvZGVyLCBrZXljaGFpbkl0ZW0pKQorICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGtleWNoYWluSXRlbSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJlc3VsdCA9IGFkb3B0Q0Yoa2V5Y2hhaW5JdGVtLmxlYWtSZWYoKSk7CisgICAgICAgIHJl
c3VsdCA9IFdURk1vdmUoa2V5Y2hhaW5JdGVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogI2VuZGlmCiAjaWYgSEFWRShTRUNfQUNDRVNTX0NPTlRST0wpCiAgICAgY2FzZSBDRlR5cGU6
OlNlY0FjY2Vzc0NvbnRyb2w6IHsKICAgICAgICAgUmV0YWluUHRyPFNlY0FjY2Vzc0NvbnRyb2xS
ZWY+IGFjY2Vzc0NvbnRyb2w7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIGFjY2Vzc0Nv
bnRyb2wpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFjY2Vzc0NvbnRyb2wpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSBhZG9wdENGKGFjY2Vzc0Nv
bnRyb2wubGVha1JlZigpKTsKKyAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShhY2Nlc3NDb250cm9s
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgSEFWRShTRUNfVFJV
U1RfU0VSSUFMSVpBVElPTikKICAgICBjYXNlIENGVHlwZTo6U2VjVHJ1c3Q6IHsKICAgICAgICAg
UmV0YWluUHRyPFNlY1RydXN0UmVmPiB0cnVzdDsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2Rl
ciwgdHJ1c3QpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRydXN0KSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRih0cnVzdC5sZWFrUmVm
KCkpOworICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKHRydXN0KTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogI2VuZGlmCkBAIC0yOTEsNyArMzEyLDggQEAgYm9vbCBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZBcnJheVJlZiBhcnJheSkKK3RlbXBsYXRlPHR5cGVuYW1l
IEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZBcnJheVJlZj46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBDRkFycmF5UmVmIGFycmF5KQogewogICAgIGlmICghYXJyYXkpIHsKICAgICAg
ICAgZW5jb2RlciA8PCB0cnVlOwpAQCAtMzE4LDExICszNDAsMTQgQEAgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgQ0ZBcnJheVJlZgogICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewogICAgICAgICBpZiAoaW52YWxpZEluZGljaWVzLmNvbnRhaW5zKGkpKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCB2YWx1ZXNbaV0pOwor
ICAgICAgICBlbmNvZGVyIDw8ICB2YWx1ZXNbaV07CiAgICAgfQogfQogCi1ib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4mIHJlc3VsdCkKK3RlbXBsYXRl
IHZvaWQgQXJndW1lbnRDb2RlcjxDRkFycmF5UmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXIm
LCBDRkFycmF5UmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRkFycmF5UmVmPjo6
ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYs
IENGQXJyYXlSZWYpOworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGQXJyYXlSZWY+
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRkFycmF5UmVmPiYgcmVzdWx0
KQogewogICAgIGJvb2wgaXNOdWxsID0gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShp
c051bGwpKQpAQCAtMzQxLDcgKzM2Niw3IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFJldGFpblB0cjwKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAg
ICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGVsZW1lbnQ7Ci0gICAgICAgIGlmICghZGVjb2Rl
KGRlY29kZXIsIGVsZW1lbnQpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVsZW1lbnQp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghZWxlbWVudCkKQEAg
LTM1NCwxMiArMzc5LDE2IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0
cjwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Q0ZCb29sZWFuUmVmIGJvb2xlYW4pCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBB
cmd1bWVudENvZGVyPENGQm9vbGVhblJlZj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRkJv
b2xlYW5SZWYgYm9vbGVhbikKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGJvb2w+KENG
Qm9vbGVhbkdldFZhbHVlKGJvb2xlYW4pKTsKIH0KIAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgUmV0YWluUHRyPENGQm9vbGVhblJlZj4mIHJlc3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJn
dW1lbnRDb2RlcjxDRkJvb2xlYW5SZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIENGQm9v
bGVhblJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZCb29sZWFuUmVmPjo6ZW5j
b2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIENG
Qm9vbGVhblJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZCb29sZWFuUmVm
Pj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZCb29sZWFuUmVmPiYgcmVz
dWx0KQogewogICAgIGJvb2wgYm9vbGVhbjsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJvb2xl
YW4pKQpAQCAtMzY5LDcgKzM5OCw4IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJl
dGFpblB0cjwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgQ0ZEYXRhUmVmIGRhdGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBB
cmd1bWVudENvZGVyPENGRGF0YVJlZj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRkRhdGFS
ZWYgZGF0YSkKIHsKICAgICBDRkluZGV4IGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRhKTsK
ICAgICBjb25zdCBVSW50OCogYnl0ZVB0ciA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YSk7CkBAIC0z
NzcsNyArNDA3LDEwIEBAIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGRGF0YVJlZiAK
ICAgICBlbmNvZGVyIDw8IElQQzo6RGF0YVJlZmVyZW5jZShieXRlUHRyLCBsZW5ndGgpOwogfQog
Ci1ib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgcmVz
dWx0KQordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGRGF0YVJlZj46OmVuY29kZTxFbmNv
ZGVyPihFbmNvZGVyJiwgQ0ZEYXRhUmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxD
RkRhdGFSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyJiwgQ0ZEYXRhUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxD
RkRhdGFSZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRkRhdGFSZWY+
JiByZXN1bHQpCiB7CiAgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7CiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShkYXRhUmVmZXJlbmNlKSkKQEAgLTM4NywxMiArNDIwLDE2IEBA
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZEYXRlUmVmIGRhdGUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGRGF0ZVJlZj46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRkRhdGVSZWYgZGF0ZSkKIHsKICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGRvdWJsZT4oQ0ZEYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGUpKTsKIH0K
IAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGRGF0ZVJlZj4mIHJl
c3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRkRhdGVSZWY+OjplbmNvZGU8RW5j
b2Rlcj4oRW5jb2RlciYsIENGRGF0ZVJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8
Q0ZEYXRlUmVmPjo6ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0
aW9uRW5jb2RlciYsIENGRGF0ZVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8
Q0ZEYXRlUmVmPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRlUmVm
PiYgcmVzdWx0KQogewogICAgIGRvdWJsZSBhYnNvbHV0ZVRpbWU7CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShhYnNvbHV0ZVRpbWUpKQpAQCAtNDAyLDcgKzQzOSw4IEBAIGJvb2wgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnkpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGRGljdGlvbmFyeVJl
Zj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSkK
IHsKICAgICBpZiAoIWRpY3Rpb25hcnkpIHsKICAgICAgICAgZW5jb2RlciA8PCB0cnVlOwpAQCAt
NDM1LDEyICs0NzMsMTUgQEAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZEaWN0aW9u
YQogICAgICAgICBpZiAoaW52YWxpZEtleXMuY29udGFpbnMoa2V5c1tpXSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBlbmNvZGUoZW5jb2Rlciwga2V5c1tpXSk7Ci0gICAgICAg
IGVuY29kZShlbmNvZGVyLCB2YWx1ZXNbaV0pOworICAgICAgICBlbmNvZGVyIDw8IGtleXNbaV07
CisgICAgICAgIGVuY29kZXIgPDwgdmFsdWVzW2ldOwogICAgIH0KIH0KIAotYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4mIHJlc3VsdCkKK3Rl
bXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRkRpY3Rpb25hcnlSZWY+OjplbmNvZGU8RW5jb2Rl
cj4oRW5jb2RlciYsIENGRGljdGlvbmFyeVJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29k
ZXI8Q0ZEaWN0aW9uYXJ5UmVmPjo6ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJl
YW1Db25uZWN0aW9uRW5jb2RlciYsIENGRGljdGlvbmFyeVJlZik7CisKK2Jvb2wgQXJndW1lbnRD
b2RlcjxSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgcmVzdWx0KQogewogICAgIGJvb2wgaXNOdWxs
ID0gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc051bGwpKQpAQCAtNDU4LDIxICs0
OTksMjIgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIFJl
dGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBkaWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICBmb3IgKHVpbnQ2NF90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGtl
eTsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2Rlciwga2V5KSB8fCAha2V5KQorICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGtleSkgfHwgIWtleSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFk
ZWNvZGUoZGVjb2RlciwgdmFsdWUpIHx8ICF2YWx1ZSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh2YWx1ZSkgfHwgIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIGtleS5nZXQoKSwgdmFs
dWUuZ2V0KCkpOwogICAgIH0KIAotICAgIHJlc3VsdCA9IGFkb3B0Q0YoZGljdGlvbmFyeS5sZWFr
UmVmKCkpOworICAgIHJlc3VsdCA9IFdURk1vdmUoZGljdGlvbmFyeSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGTnVtYmVyUmVmIG51bWJl
cikKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZOdW1i
ZXJSZWY+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZOdW1iZXJSZWYgbnVtYmVyKQogewog
ICAgIENGTnVtYmVyVHlwZSBudW1iZXJUeXBlID0gQ0ZOdW1iZXJHZXRUeXBlKG51bWJlcik7CiAK
QEAgLTQ4NCw2ICs1MjYsOSBAQCB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRk51bWJl
clJlCiAgICAgZW5jb2RlciA8PCBJUEM6OkRhdGFSZWZlcmVuY2UoYnVmZmVyKTsKIH0KIAordGVt
cGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGTnVtYmVyUmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVu
Y29kZXImLCBDRk51bWJlclJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZOdW1i
ZXJSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rpb25F
bmNvZGVyJiwgQ0ZOdW1iZXJSZWYpOworCiBzdGF0aWMgc2l6ZV90IHNpemVGb3JOdW1iZXJUeXBl
KENGTnVtYmVyVHlwZSBudW1iZXJUeXBlKQogewogICAgIHN3aXRjaCAobnVtYmVyVHlwZSkgewpA
QCAtNTI0LDcgKzU2OSw3IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZUZvck51bWJlclR5cGUoQ0ZOdW1i
ZXIKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0
YWluUHRyPENGTnVtYmVyUmVmPiYgcmVzdWx0KQorYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRk51bWJlclJlZj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGTnVt
YmVyUmVmPiYgcmVzdWx0KQogewogICAgIE9wdGlvbmFsPHVpbnQ4X3Q+IG51bWJlclR5cGVGcm9t
SVBDOwogICAgIGRlY29kZXIgPj4gbnVtYmVyVHlwZUZyb21JUEM7CkBAIC01NDYsNyArNTkxLDgg
QEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRlN0cmluZ1JlZiBzdHJp
bmcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGU3Ry
aW5nUmVmPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGU3RyaW5nUmVmIHN0cmluZykKIHsK
ICAgICBDRkluZGV4IGxlbmd0aCA9IENGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7CiAgICAgQ0ZT
dHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IENGU3RyaW5nR2V0RmFzdGVzdEVuY29kaW5nKHN0cmlu
Zyk7CkBAIC01NjUsNyArNjExLDEwIEBAIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENG
U3RyaW5nUmUKICAgICBlbmNvZGVyIDw8IElQQzo6RGF0YVJlZmVyZW5jZShidWZmZXIpOwogfQog
Ci1ib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+JiBy
ZXN1bHQpCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZTdHJpbmdSZWY+OjplbmNvZGU8
RW5jb2Rlcj4oRW5jb2RlciYsIENGU3RyaW5nUmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRD
b2RlcjxDRlN0cmluZ1JlZj46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFt
Q29ubmVjdGlvbkVuY29kZXImLCBDRlN0cmluZ1JlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4mIHJlc3VsdCkKIHsKICAgICBPcHRpb25hbDx1aW50MzJfdD4gZW5jb2Rp
bmdGcm9tSVBDOwogICAgIGRlY29kZXIgPj4gZW5jb2RpbmdGcm9tSVBDOwpAQCAtNTg4LDEyICs2
MzcsMTMgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRlVSTFJlZiB1
cmwpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGVVJM
UmVmPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGVVJMUmVmIHVybCkKIHsKICAgICBDRlVS
TFJlZiBiYXNlVVJMID0gQ0ZVUkxHZXRCYXNlVVJMKHVybCk7CiAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxib29sPihiYXNlVVJMKTsKICAgICBpZiAoYmFzZVVSTCkKLSAgICAgICAgZW5jb2Rl
KGVuY29kZXIsIGJhc2VVUkwpOworICAgICAgICBlbmNvZGVyIDw8IGJhc2VVUkw7CiAKICAgICBX
VEY6OlVSTENoYXJCdWZmZXIgdXJsQnl0ZXM7CiAgICAgV1RGOjpnZXRVUkxCeXRlcyh1cmwsIHVy
bEJ5dGVzKTsKQEAgLTYwMSwxNCArNjUxLDE3IEBAIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIENGVVJMUmVmIHUKICAgICBlbmNvZGVyIDw8IGRhdGFSZWZlcmVuY2U7CiB9CiAKLWJvb2wg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRlVSTFJlZj4mIHJlc3VsdCkKK3Rl
bXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRlVSTFJlZj46OmVuY29kZTxFbmNvZGVyPihFbmNv
ZGVyJiwgQ0ZVUkxSZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGVVJMUmVmPjo6
ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYs
IENGVVJMUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRlVSTFJlZj4+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGVVJMUmVmPiYgcmVzdWx0KQogewog
ICAgIFJldGFpblB0cjxDRlVSTFJlZj4gYmFzZVVSTDsKICAgICBib29sIGhhc0Jhc2VVUkw7CiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNCYXNlVVJMKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmIChoYXNCYXNlVVJMKSB7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIGJh
c2VVUkwpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJhc2VVUkwpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjMxLDE2ICs2ODQsNzcgQEAgYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFNlY0NlcnRpZmljYXRlUmVmIGNlcnRpZmlj
YXRlKQorZW51bSBjbGFzcyBDR0NvbG9yU3BhY2VFbmNvZGluZ1NjaGVtZSB7IE5hbWUsIFByb3Bl
cnR5TGlzdCB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENv
ZGVyPENHQ29sb3JTcGFjZVJlZj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDR0NvbG9yU3Bh
Y2VSZWYgY29sb3JTcGFjZSkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYWRv
cHRDRihTZWNDZXJ0aWZpY2F0ZUNvcHlEYXRhKGNlcnRpZmljYXRlKSk7Ci0gICAgZW5jb2RlKGVu
Y29kZXIsIGRhdGEuZ2V0KCkpOworICAgIGlmIChhdXRvIG5hbWUgPSBDR0NvbG9yU3BhY2VHZXRO
YW1lKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGVuY29kZXIgPDwgQ0dDb2xvclNwYWNlRW5jb2Rp
bmdTY2hlbWU6Ok5hbWU7CisgICAgICAgIGVuY29kZXIgPDwgbmFtZTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8gcHJvcGVydHlMaXN0ID0gYWRvcHRDRihDR0NvbG9yU3BhY2VD
b3B5UHJvcGVydHlMaXN0KGNvbG9yU3BhY2UpKTsKKyAgICBlbmNvZGVyIDw8IENHQ29sb3JTcGFj
ZUVuY29kaW5nU2NoZW1lOjpQcm9wZXJ0eUxpc3Q7CisgICAgZW5jb2RlciA8PCBwcm9wZXJ0eUxp
c3Q7CiB9CiAKLWJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNDZXJ0
aWZpY2F0ZVJlZj4mIHJlc3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDR0NvbG9y
U3BhY2VSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIENHQ29sb3JTcGFjZVJlZik7Cit0
ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0dDb2xvclNwYWNlUmVmPjo6ZW5jb2RlPFN0cmVh
bUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIENHQ29sb3JTcGFj
ZVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPj46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiYgcmVz
dWx0KQoreworICAgIENHQ29sb3JTcGFjZUVuY29kaW5nU2NoZW1lIGVuY29kaW5nU2NoZW1lOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW5jb2RpbmdTY2hlbWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzd2l0Y2ggKGVuY29kaW5nU2NoZW1lKSB7CisgICAgY2FzZSBDR0NvbG9y
U3BhY2VFbmNvZGluZ1NjaGVtZTo6TmFtZTogeworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IG5hbWU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0Nv
bG9yU3BhY2VDcmVhdGVXaXRoTmFtZShuYW1lLmdldCgpKSk7CisgICAgICAgIGlmICghY29sb3JT
cGFjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXN1bHQgPSBXVEZN
b3ZlKGNvbG9yU3BhY2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBD
R0NvbG9yU3BhY2VFbmNvZGluZ1NjaGVtZTo6UHJvcGVydHlMaXN0OiB7CisgICAgICAgIFJldGFp
blB0cjxDRlR5cGVSZWY+IHByb3BlcnR5TGlzdDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShwcm9wZXJ0eUxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1
dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aFByb3BlcnR5TGlz
dChwcm9wZXJ0eUxpc3QuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCFjb2xvclNwYWNlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoY29sb3JTcGFj
ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4KK3ZvaWQgQXJndW1lbnRDb2RlcjxTZWNDZXJ0aWZpY2F0ZVJlZj46OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBTZWNDZXJ0aWZpY2F0ZVJlZiBjZXJ0aWZpY2F0ZSkKK3sKKyAgICBh
dXRvIGRhdGEgPSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ29weURhdGEoY2VydGlmaWNhdGUpKTsK
KyAgICBlbmNvZGVyIDw8IGRhdGE7Cit9CisKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxT
ZWNDZXJ0aWZpY2F0ZVJlZj46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgU2VjQ2VydGlmaWNh
dGVSZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFNlY0NlcnRpZmljYXRlUmVmPjo6
ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYs
IFNlY0NlcnRpZmljYXRlUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxTZWND
ZXJ0aWZpY2F0ZVJlZj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNlY0Nl
cnRpZmljYXRlUmVmPiYgcmVzdWx0KQogewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7
Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgZGF0YSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gYWRvcHRDRihT
ZWNDZXJ0aWZpY2F0ZUNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEuZ2V0KCkpKTsKQEAgLTY0OCwyMyAr
NzYyLDI3IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKIH0KIAog
I2lmIEhBVkUoU0VDX0tFWUNIQUlOKQotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgU2Vj
S2V5Y2hhaW5JdGVtUmVmIGtleWNoYWluSXRlbSkKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
Cit2b2lkIEFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIFNlY0tleWNoYWluSXRlbVJlZiBrZXljaGFpbkl0ZW0pCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3ND
cmVkZW50aWFscykpOwogCiAgICAgQ0ZEYXRhUmVmIGRhdGE7CiAgICAgaWYgKFNlY0tleWNoYWlu
SXRlbUNyZWF0ZVBlcnNpc3RlbnRSZWZlcmVuY2Uoa2V5Y2hhaW5JdGVtLCAmZGF0YSkgPT0gZXJy
U2VjU3VjY2VzcykgewotICAgICAgICBlbmNvZGUoZW5jb2RlciwgZGF0YSk7CisgICAgICAgIGVu
Y29kZXIgPDwgZGF0YTsKICAgICAgICAgQ0ZSZWxlYXNlKGRhdGEpOwogICAgIH0KIH0KIAotYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNlY0tleWNoYWluSXRlbVJlZj4m
IHJlc3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxTZWNLZXljaGFpbkl0ZW1SZWY+
OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIFNlY0tleWNoYWluSXRlbVJlZik7Cit0ZW1wbGF0
ZSB2b2lkIEFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPjo6ZW5jb2RlPFN0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIFNlY0tleWNoYWluSXRl
bVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVm
Pj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVm
PiYgcmVzdWx0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJv
Y2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzQ3JlZGVudGlhbHMpKTsKIAogICAgIFJldGFpblB0cjxD
RkRhdGFSZWY+IGRhdGE7Ci0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBkYXRhKSkKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBDRkRhdGFSZWYgZHJlZiA9IGRhdGEuZ2V0KCk7CkBAIC02ODIsMTcgKzgwMCwyMSBAQCBib29s
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8CiAjZW5kaWYKIAogI2lmIEhBVkUo
U0VDX0FDQ0VTU19DT05UUk9MKQotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgU2VjQWNj
ZXNzQ29udHJvbFJlZiBhY2Nlc3NDb250cm9sKQordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4K
K3ZvaWQgQXJndW1lbnRDb2RlcjxTZWNBY2Nlc3NDb250cm9sUmVmPjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIFNlY0FjY2Vzc0NvbnRyb2xSZWYgYWNjZXNzQ29udHJvbCkKIHsKLSAgICBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihTZWNBY2Nlc3NDb250cm9sQ29weURhdGEo
YWNjZXNzQ29udHJvbCkpOworICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoU2VjQWNjZXNzQ29udHJv
bENvcHlEYXRhKGFjY2Vzc0NvbnRyb2wpKTsKICAgICBpZiAoZGF0YSkKLSAgICAgICAgZW5jb2Rl
KGVuY29kZXIsIGRhdGEuZ2V0KCkpOworICAgICAgICBlbmNvZGVyIDw8IGRhdGE7CiB9CiAKLWJv
b2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNBY2Nlc3NDb250cm9sUmVm
PiYgcmVzdWx0KQordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFNlY0FjY2Vzc0NvbnRyb2xS
ZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIFNlY0FjY2Vzc0NvbnRyb2xSZWYpOwordGVt
cGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFNlY0FjY2Vzc0NvbnRyb2xSZWY+OjplbmNvZGU8U3Ry
ZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiwgU2VjQWNjZXNz
Q29udHJvbFJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjQWNjZXNzQ29u
dHJvbFJlZj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNlY0FjY2Vzc0Nv
bnRyb2xSZWY+JiByZXN1bHQpCiB7CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAg
ICBpZiAoIWRlY29kZShkZWNvZGVyLCBkYXRhKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRh
dGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXN1bHQgPSBhZG9wdENGKFNlY0Fj
Y2Vzc0NvbnRyb2xDcmVhdGVGcm9tRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkYXRhLmdldCgp
LCBudWxscHRyKSk7CkBAIC03MDQsNyArODI2LDggQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgUmV0YWluUHRyPAogI2VuZGlmCiAKICNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFU
SU9OKQotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgU2VjVHJ1c3RSZWYgdHJ1c3QpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPFNlY1RydXN0UmVm
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFNlY1RydXN0UmVmIHRydXN0KQogewogICAgIGF1
dG8gZGF0YSA9IGFkb3B0Q0YoU2VjVHJ1c3RTZXJpYWxpemUodHJ1c3QsIG51bGxwdHIpKTsKICAg
ICBpZiAoIWRhdGEpIHsKQEAgLTcxMywxMCArODM2LDEzIEBAIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIFNlY1RydXN0UmUKICAgICB9CiAKICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAg
SVBDOjplbmNvZGUoZW5jb2RlciwgZGF0YS5nZXQoKSk7CisgICAgZW5jb2RlciA8PCBkYXRhOwog
fQogCi1ib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+
JiByZXN1bHQpCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8U2VjVHJ1c3RSZWY+OjplbmNv
ZGU8RW5jb2Rlcj4oRW5jb2RlciYsIFNlY1RydXN0UmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1l
bnRDb2RlcjxTZWNUcnVzdFJlZj46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3Ry
ZWFtQ29ubmVjdGlvbkVuY29kZXImLCBTZWNUcnVzdFJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2Rl
cjxSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFp
blB0cjxTZWNUcnVzdFJlZj4mIHJlc3VsdCkKIHsKICAgICBib29sIGhhc1RydXN0OwogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaGFzVHJ1c3QpKQpAQCAtNzI2LDcgKzg1Miw3IEBAIGJvb2wgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0cnVzdERhdGE7Ci0gICAgaWYgKCFJUEM6OmRlY29k
ZShkZWNvZGVyLCB0cnVzdERhdGEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUodHJ1c3REYXRh
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byB0cnVzdCA9IGFkb3B0Q0YoU2Vj
VHJ1c3REZXNlcmlhbGl6ZSh0cnVzdERhdGEuZ2V0KCksIG51bGxwdHIpKTsKQEAgLTc0NCwyOCAr
ODcwLDM3IEBAIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PElQQzo6Q0ZUeXBlPiB7CiAgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBJUEM6
OkNGVHlwZSwKLSAgICBJUEM6OkNGVHlwZTo6Q0ZBcnJheSwKLSAgICBJUEM6OkNGVHlwZTo6Q0ZC
b29sZWFuLAotICAgIElQQzo6Q0ZUeXBlOjpDRkRhdGEsCi0gICAgSVBDOjpDRlR5cGU6OkNGRGF0
ZSwKLSAgICBJUEM6OkNGVHlwZTo6Q0ZEaWN0aW9uYXJ5LAotICAgIElQQzo6Q0ZUeXBlOjpDRk51
bGwsCi0gICAgSVBDOjpDRlR5cGU6OkNGTnVtYmVyLAotICAgIElQQzo6Q0ZUeXBlOjpDRlN0cmlu
ZywKLSAgICBJUEM6OkNGVHlwZTo6Q0ZVUkwsCi0gICAgSVBDOjpDRlR5cGU6OlNlY0NlcnRpZmlj
YXRlLAorICAgICAgICBJUEM6OkNGVHlwZSwKKyAgICAgICAgSVBDOjpDRlR5cGU6OkNGQXJyYXks
CisgICAgICAgIElQQzo6Q0ZUeXBlOjpDRkJvb2xlYW4sCisgICAgICAgIElQQzo6Q0ZUeXBlOjpD
RkRhdGEsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpDRkRhdGUsCisgICAgICAgIElQQzo6Q0ZUeXBl
OjpDRkRpY3Rpb25hcnksCisgICAgICAgIElQQzo6Q0ZUeXBlOjpDRk51bGwsCisgICAgICAgIElQ
Qzo6Q0ZUeXBlOjpDRk51bWJlciwKKyAgICAgICAgSVBDOjpDRlR5cGU6OkNGU3RyaW5nLAorICAg
ICAgICBJUEM6OkNGVHlwZTo6Q0ZVUkwsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpTZWNDZXJ0aWZp
Y2F0ZSwKICNpZiBIQVZFKFNFQ19LRVlDSEFJTikKLSAgICBJUEM6OkNGVHlwZTo6U2VjS2V5Y2hh
aW5JdGVtLAorICAgICAgICBJUEM6OkNGVHlwZTo6U2VjS2V5Y2hhaW5JdGVtLAogI2VuZGlmCiAj
aWYgSEFWRShTRUNfQUNDRVNTX0NPTlRST0wpCi0gICAgSVBDOjpDRlR5cGU6OlNlY0FjY2Vzc0Nv
bnRyb2wsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpTZWNBY2Nlc3NDb250cm9sLAogI2VuZGlmCiAj
aWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICBJUEM6OkNGVHlwZTo6U2VjVHJ1
c3QsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpTZWNUcnVzdCwKICNlbmRpZgotICAgIElQQzo6Q0ZU
eXBlOjpOdWxscHRyLAotICAgIElQQzo6Q0ZUeXBlOjpVbmtub3duCisgICAgICAgIElQQzo6Q0ZU
eXBlOjpDR0NvbG9yU3BhY2UsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpOdWxscHRyLAorICAgICAg
ICBJUEM6OkNGVHlwZTo6VW5rbm93bgorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPElQQzo6Q0dDb2xvclNwYWNlRW5jb2RpbmdTY2hlbWU+IHsKKyAgICB1c2luZyB2
YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBJUEM6OkNHQ29sb3JTcGFjZUVuY29kaW5nU2No
ZW1lLAorICAgICAgICBJUEM6OkNHQ29sb3JTcGFjZUVuY29kaW5nU2NoZW1lOjpOYW1lLAorICAg
ICAgICBJUEM6OkNHQ29sb3JTcGFjZUVuY29kaW5nU2NoZW1lOjpQcm9wZXJ0eUxpc3QKICAgICA+
OwogfTsKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0Yu
aAkocmV2aXNpb24gMjc3ODczKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvY2YvQXJndW1lbnRD
b2RlcnNDRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw5IEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBBcmd1bWVudENvZGVyc0NGX2gK
LSNkZWZpbmUgQXJndW1lbnRDb2RlcnNDRl9oCisjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFy
Z3VtZW50Q29kZXIuaCIKICNpbmNsdWRlIDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZS5oPgogI2lu
Y2x1ZGUgPFNlY3VyaXR5L1NlY1RydXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpA
QCAtMzQsNzEgKzM0LDE1NiBAQAogI2luY2x1ZGUgPFNlY3VyaXR5L1NlY0tleWNoYWluSXRlbS5o
PgogI2VuZGlmCiAKK3R5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSogQ0dDb2xvclNwYWNlUmVm
OworCiBuYW1lc3BhY2UgSVBDIHsKIAogY2xhc3MgRW5jb2RlcjsKIGNsYXNzIERlY29kZXI7CiAK
Ky8vIE5PVEU6IFRoZXNlIGNvZGVycyBhcmUgc3RydWN0dXJlZCBzdWNoIHRoYXQgdGhleSBleHBv
c2UgZW5jb2RlciBmdW5jdGlvbnMgZm9yIGJvdGggQ0ZUeXBlIGFuZCBSZXRhaW5QdHI8Q0ZUeXBl
PgorLy8gYnV0IG9ubHkgYSBkZWNvZGVyIG9ubHkgZm9yIFJldGFpblB0cjxDRlR5cGU+LgorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IENGUmV0YWluUHRyQXJndW1lbnRDb2RlciB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFJldGFpblB0cjxUPiYgcmV0YWluUHRyKQorICAgIHsKKyAgICAgICAg
QXJndW1lbnRDb2RlcjxUPjo6ZW5jb2RlKGVuY29kZXIsIHJldGFpblB0ci5nZXQoKSk7CisgICAg
fQorfTsKKworLy8gQ0ZUeXBlUmVmCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENG
VHlwZVJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiwgQ0ZUeXBlUmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8UmV0YWluUHRyPENGVHlwZVJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVy
PENGVHlwZVJlZj4geworICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUo
RGVjb2RlciYsIFJldGFpblB0cjxDRlR5cGVSZWY+Jik7Cit9OworCiAvLyBDRkFycmF5UmVmCi12
b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZBcnJheVJlZik7Ci1XQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkFycmF5UmVmPiYgcmVzdWx0KTsKK3RlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0ZBcnJheVJlZj4geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZBcnJheVJlZik7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRkFycmF5
UmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZBcnJheVJlZj4geworICAgIHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkFy
cmF5UmVmPiYpOworfTsKIAogLy8gQ0ZCb29sZWFuUmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwg
Q0ZCb29sZWFuUmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwg
UmV0YWluUHRyPENGQm9vbGVhblJlZj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPENGQm9vbGVhblJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZCb29sZWFuUmVmKTsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGQm9vbGVhblJlZj4+IDogQ0ZS
ZXRhaW5QdHJBcmd1bWVudENvZGVyPENGQm9vbGVhblJlZj4geworICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkJvb2xlYW5SZWY+
Jik7Cit9OwogCiAvLyBDRkRhdGFSZWYKLXZvaWQgZW5jb2RlKEVuY29kZXImLCBDRkRhdGFSZWYp
OwotV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0ZEYXRh
UmVmPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBDRkRhdGFSZWYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZE
YXRhUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNv
ZGVyJiwgUmV0YWluUHRyPENGRGF0YVJlZj4mKTsKK307CiAKIC8vIENGRGF0ZVJlZgotdm9pZCBl
bmNvZGUoRW5jb2RlciYsIENGRGF0ZVJlZik7Ci1XQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkRhdGVSZWY+JiByZXN1bHQpOwordGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxDRkRhdGVSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGRGF0ZVJlZik7Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRkRhdGVSZWY+PiA6IENG
UmV0YWluUHRyQXJndW1lbnRDb2RlcjxDRkRhdGVSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZEYXRlUmVmPiYpOwor
fTsKIAogLy8gQ0ZEaWN0aW9uYXJ5UmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZEaWN0aW9u
YXJ5UmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPENGRGljdGlvbmFyeVJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZEaWN0aW9uYXJ5UmVmKTsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+
IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPENGRGljdGlvbmFyeVJlZj4geworICAgIHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+Jik7Cit9OwogCiAvLyBDRk51bWJlclJlZgotdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIENGTnVtYmVyUmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVy
JiwgUmV0YWluUHRyPENGTnVtYmVyUmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8Q0ZOdW1iZXJSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVy
PiBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGTnVtYmVyUmVmKTsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGTnVtYmVyUmVmPj4gOiBDRlJl
dGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZOdW1iZXJSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVT
RURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+Jik7
Cit9OwogCiAvLyBDRlN0cmluZ1JlZgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGU3RyaW5nUmVm
KTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiYgcmVzdWx0KTsKLQotLy8gQ0ZUeXBlUmVmCi12b2lkIGVuY29kZShFbmNvZGVy
JiwgQ0ZUeXBlUmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwg
UmV0YWluUHRyPENGVHlwZVJlZj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPENGU3RyaW5nUmVmPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBDRlN0cmluZ1JlZik7Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IDogQ0ZSZXRhaW5Q
dHJBcmd1bWVudENvZGVyPENGU3RyaW5nUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGU3RyaW5nUmVmPiYpOworfTsK
IAogLy8gQ0ZVUkxSZWYKLXZvaWQgZW5jb2RlKEVuY29kZXImLCBDRlVSTFJlZik7Ci1XQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRlVSTFJlZj4mIHJl
c3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENGVVJMUmVmPiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBD
RlVSTFJlZik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRlVSTFJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPENGVVJMUmVmPiB7CisgICAg
c3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRy
PENGVVJMUmVmPiYpOworfTsKKworLy8gQ0dDb2xvclNwYWNlUmVmCit0ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPENHQ29sb3JTcGFjZVJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0dDb2xvclNwYWNlUmVmKTsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENHQ29sb3JT
cGFjZVJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPENHQ29sb3JTcGFjZVJlZj4gewor
ICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFp
blB0cjxDR0NvbG9yU3BhY2VSZWY+Jik7Cit9OwogCiAvLyBTZWNDZXJ0aWZpY2F0ZVJlZgotdm9p
ZCBlbmNvZGUoRW5jb2RlciYsIFNlY0NlcnRpZmljYXRlUmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPiYgcmVz
dWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8U2VjQ2VydGlmaWNhdGVSZWY+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYsIFNlY0NlcnRpZmljYXRlUmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8UmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPj4gOiBDRlJldGFpblB0ckFyZ3Vt
ZW50Q29kZXI8U2VjQ2VydGlmaWNhdGVSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8U2VjQ2VydGlmaWNhdGVSZWY+Jik7
Cit9OwogCiAjaWYgSEFWRShTRUNfS0VZQ0hBSU4pCiAvLyBTZWNLZXljaGFpbkl0ZW1SZWYKLXZv
aWQgZW5jb2RlKEVuY29kZXImLCBTZWNLZXljaGFpbkl0ZW1SZWYpOwotV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPiYg
cmVzdWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVt
UmVmPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBTZWNLZXljaGFpbkl0ZW1SZWYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPj4gOiBDRlJldGFpblB0
ckFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPFNlY0tleWNoYWluSXRl
bVJlZj4mKTsKK307CiAjZW5kaWYKIAogI2lmIEhBVkUoU0VDX0FDQ0VTU19DT05UUk9MKQogLy8g
U2VjQWNjZXNzQ29udHJvbFJlZgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIFNlY0FjY2Vzc0NvbnRy
b2xSZWYpOwotV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5Q
dHI8U2VjQWNjZXNzQ29udHJvbFJlZj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFNlY0FjY2Vzc0NvbnRyb2xSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIFNlY0FjY2Vzc0NvbnRyb2xSZWYp
OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjQWNj
ZXNzQ29udHJvbFJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPFNlY0FjY2Vzc0NvbnRy
b2xSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBSZXRhaW5QdHI8U2VjQWNjZXNzQ29udHJvbFJlZj4mKTsKK307CiAjZW5kaWYKIAogI2lm
IEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiAvLyBTZWNUcnVzdFJlZgotdm9pZCBlbmNv
ZGUoRW5jb2RlciYsIFNlY1RydXN0UmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29k
ZShEZWNvZGVyJiwgUmV0YWluUHRyPFNlY1RydXN0UmVmPiYpOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxTZWNUcnVzdFJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgU2VjVHJ1c3RSZWYpOworfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+PiA6IENG
UmV0YWluUHRyQXJndW1lbnRDb2RlcjxTZWNUcnVzdFJlZj4geworICAgIHN0YXRpYyBXQVJOX1VO
VVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxTZWNUcnVzdFJlZj4m
KTsKK307CiAjZW5kaWYKIAogQ0ZUeXBlUmVmIHRva2VuTnVsbHB0clR5cGVSZWYoKTsKIAogfSAv
LyBuYW1lc3BhY2UgSVBDCi0KLSNlbmRpZiAvLyBBcmd1bWVudENvZGVyc0NGX2gKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQ29sb3JTcGFjZURhdGEubW0JKHJldmlzaW9uIDI3Nzg3
MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNzcgKzMzLDI4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1lbnVt
IEVuY29kZWREYXRhVHlwZSB7Ci0gICAgTnVsbCwKLSAgICBOYW1lLAotICAgIERhdGEsCi19Owot
CiB2b2lkIENvbG9yU3BhY2VEYXRhOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogewotICAgIGlmIChjZ0NvbG9yU3BhY2UpIHsKLSAgICAgICAgLy8gVHJ5IHRvIGVuY29kZSB0
aGUgbmFtZS4KLSAgICAgICAgaWYgKFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZSA9IGFkb3B0
Q0YoQ0dDb2xvclNwYWNlQ29weU5hbWUoY2dDb2xvclNwYWNlLmdldCgpKSkpIHsKLSAgICAgICAg
ICAgIGVuY29kZXIgPDwgTmFtZTsKLSAgICAgICAgICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIG5h
bWUuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
RmFpbGluZyB0aGF0LCBqdXN0IGVuY29kZSB0aGUgSUNDIGRhdGEuCi0gICAgICAgIGlmIChSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBwcm9maWxlRGF0YSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ29weUlD
Q0RhdGEoY2dDb2xvclNwYWNlLmdldCgpKSkpIHsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgRGF0
YTsKLSAgICAgICAgICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIHByb2ZpbGVEYXRhLmdldCgpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBjb2xv
ciBzcGFjZSB3YXMgbnVsbCBvciBmYWlsZWQgdG8gYmUgZW5jb2RlZC4KLSAgICBlbmNvZGVyIDw8
IE51bGw7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPihjZ0NvbG9yU3BhY2UpOwor
ICAgIGlmIChjZ0NvbG9yU3BhY2UpCisgICAgICAgIGVuY29kZXIgPDwgY2dDb2xvclNwYWNlOwog
fQogCiBib29sIENvbG9yU3BhY2VEYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBD
b2xvclNwYWNlRGF0YSYgY29sb3JTcGFjZURhdGEpCiB7Ci0gICAgRW5jb2RlZERhdGFUeXBlIGRh
dGFUeXBlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YVR5cGUpKQorICAgIGJvb2wgaGFz
Q0dDb2xvclNwYWNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzQ0dDb2xvclNwYWNlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNh
c2UgTnVsbDoKLSAgICAgICAgY29sb3JTcGFjZURhdGEuY2dDb2xvclNwYWNlID0gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBOYW1lOiB7Ci0gICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gbmFtZTsKLSAgICAgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBu
YW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBjb2xvclNwYWNlRGF0
YS5jZ0NvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKG5hbWUu
Z2V0KCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgRGF0YTogewot
ICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgICAgICBpZiAoIUlQQzo6ZGVj
b2RlKGRlY29kZXIsIGRhdGEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGNvbG9yU3BhY2VEYXRhLmNnQ29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRl
V2l0aElDQ0RhdGEoZGF0YS5nZXQoKSkpOworICAgIGlmICghaGFzQ0dDb2xvclNwYWNlKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgfQogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNv
bG9yU3BhY2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGNvbG9yU3BhY2VEYXRhLmNnQ29sb3JTcGFjZSA9IFdU
Rk1vdmUoY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJLaXQ6OkVuY29kZWREYXRhVHlwZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8Ci0gICAgICAgIFdlYktpdDo6RW5jb2RlZERhdGFUeXBlLAotICAgICAgICBXZWJLaXQ6OkVu
Y29kZWREYXRhVHlwZTo6TnVsbCwKLSAgICAgICAgV2ViS2l0OjpFbmNvZGVkRGF0YVR5cGU6Ok5h
bWUsCi0gICAgICAgIFdlYktpdDo6RW5jb2RlZERhdGFUeXBlOjpEYXRhCi0gICAgPjsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NlY0l0
ZW1SZXF1ZXN0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L1NlY0l0ZW1SZXF1ZXN0RGF0YS5jcHAJKHJldmlzaW9uIDI3Nzg3MykKKysrIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9TZWNJdGVtUmVxdWVzdERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MCwxMSArNTAsMTEgQEAgdm9pZCBTZWNJdGVtUmVxdWVzdERhdGE6OmVuY29kZShJUEM6OkVuYwog
CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPihtX3F1ZXJ5RGljdGlvbmFyeSk7CiAg
ICAgaWYgKG1fcXVlcnlEaWN0aW9uYXJ5KQotICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBt
X3F1ZXJ5RGljdGlvbmFyeS5nZXQoKSk7CisgICAgICAgIGVuY29kZXIgPDwgbV9xdWVyeURpY3Rp
b25hcnk7CiAKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGJvb2w+KG1fYXR0cmlidXRlc1Rv
TWF0Y2gpOwogICAgIGlmIChtX2F0dHJpYnV0ZXNUb01hdGNoKQotICAgICAgICBJUEM6OmVuY29k
ZShlbmNvZGVyLCBtX2F0dHJpYnV0ZXNUb01hdGNoLmdldCgpKTsKKyAgICAgICAgZW5jb2RlciA8
PCBtX2F0dHJpYnV0ZXNUb01hdGNoOwogfQogCiBib29sIFNlY0l0ZW1SZXF1ZXN0RGF0YTo6ZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgU2VjSXRlbVJlcXVlc3REYXRhJiBzZWNJdGVtUmVx
dWVzdERhdGEpCkBAIC02NiwxNCArNjYsMTQgQEAgYm9vbCBTZWNJdGVtUmVxdWVzdERhdGE6OmRl
Y29kZShJUEM6OkRlYwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZXhwZWN0UXVlcnkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZXhwZWN0UXVlcnkgJiYgIUlQQzo6ZGVjb2Rl
KGRlY29kZXIsIHNlY0l0ZW1SZXF1ZXN0RGF0YS5tX3F1ZXJ5RGljdGlvbmFyeSkpCisgICAgaWYg
KGV4cGVjdFF1ZXJ5ICYmICFkZWNvZGVyLmRlY29kZShzZWNJdGVtUmVxdWVzdERhdGEubV9xdWVy
eURpY3Rpb25hcnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgYm9vbCBleHBl
Y3RBdHRyaWJ1dGVzOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZXhwZWN0QXR0cmlidXRlcykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoZXhwZWN0QXR0cmlidXRlcyAm
JiAhSVBDOjpkZWNvZGUoZGVjb2Rlciwgc2VjSXRlbVJlcXVlc3REYXRhLm1fYXR0cmlidXRlc1Rv
TWF0Y2gpKQorICAgIGlmIChleHBlY3RBdHRyaWJ1dGVzICYmICFkZWNvZGVyLmRlY29kZShzZWNJ
dGVtUmVxdWVzdERhdGEubV9hdHRyaWJ1dGVzVG9NYXRjaCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9TZWNJdGVtUmVzcG9uc2VEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvU2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAJKHJldmlzaW9uIDI3Nzg3MykKKysrIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TZWNJdGVtUmVzcG9uc2VEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCB2b2lkIFNlY0l0ZW1SZXNwb25zZURhdGE6OmVuY29kZShJ
UEM6OkVuCiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxpbnQ2NF90PihtX3Jlc3VsdENvZGUp
OwogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4obV9yZXN1bHRPYmplY3QpOwogICAg
IGlmIChtX3Jlc3VsdE9iamVjdCkKLSAgICAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbV9yZXN1
bHRPYmplY3QuZ2V0KCkpOworICAgICAgICBlbmNvZGVyIDw8IG1fcmVzdWx0T2JqZWN0OwogfQog
CiBPcHRpb25hbDxTZWNJdGVtUmVzcG9uc2VEYXRhPiBTZWNJdGVtUmVzcG9uc2VEYXRhOjpkZWNv
ZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQpAQCAtNTYsNyArNTYsNyBAQCBPcHRpb25hbDxTZWNJ
dGVtUmVzcG9uc2VEYXRhPiBTZWNJdGVtUmVzCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiByZXN1bHQ7Ci0gICAgaWYgKGV4cGVjdFJlc3Vs
dE9iamVjdCAmJiAhSVBDOjpkZWNvZGUoZGVjb2RlciwgcmVzdWx0KSkKKyAgICBpZiAoZXhwZWN0
UmVzdWx0T2JqZWN0ICYmICFkZWNvZGVyLmRlY29kZShyZXN1bHQpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIHt7IHN0YXRpY19jYXN0PE9TU3RhdHVzPihyZXN1
bHRDb2RlKSwgV1RGTW92ZShyZXN1bHQpIH19OwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCShyZXZpc2lvbiAyNzc4
NzMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsMTEgQEAgdm9pZCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OkNlcnRpZmljYXRlSQogICAgIHN3aXRjaCAoY2VydGlmaWNhdGVJbmZvLnR5cGUo
KSkgewogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiAgICAgY2FzZSBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OlRydXN0OgotICAgICAgICBJUEM6OmVuY29kZShlbmNv
ZGVyLCBjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSk7CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlm
aWNhdGVJbmZvLnRydXN0KCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OkNlcnRpZmljYXRlQ2hhaW46Ci0gICAgICAgIElQ
Qzo6ZW5jb2RlKGVuY29kZXIsIGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkpOwor
ICAgICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpO
b25lOgogICAgICAgICAvLyBEbyBub3RoaW5nLgpAQCAtNzMsNyArNzMsNyBAQCBib29sIEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJCiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFM
SVpBVElPTikKICAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3Q6
IHsKICAgICAgICAgUmV0YWluUHRyPFNlY1RydXN0UmVmPiB0cnVzdDsKLSAgICAgICAgaWYgKCFJ
UEM6OmRlY29kZShkZWNvZGVyLCB0cnVzdCkgfHwgIXRydXN0KQorICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRydXN0KSB8fCAhdHJ1c3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgY2VydGlmaWNhdGVJbmZvID0gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1v
dmUodHJ1c3QpKTsKQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkNlcnRpZmljYXRlSQogI2VuZGlmCiAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86
OlR5cGU6OkNlcnRpZmljYXRlQ2hhaW46IHsKICAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+
IGNlcnRpZmljYXRlQ2hhaW47Ci0gICAgICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgY2Vy
dGlmaWNhdGVDaGFpbikgfHwgIWNlcnRpZmljYXRlQ2hhaW4pCisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoY2VydGlmaWNhdGVDaGFpbikgfHwgIWNlcnRpZmljYXRlQ2hhaW4pCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2VydGlmaWNhdGVJbmZvID0gV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUoY2VydGlmaWNhdGVDaGFpbikpOwpAQCAtMTY2LDcgKzE2
Niw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZU5TRXJyb3IoRW5jb2RlciYgZW5jb2QKICAgICAgICAg
Q0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZmlsdGVyZWRVc2VySW5mby5nZXQoKSwgKF9fYnJpZGdlIENG
U3RyaW5nUmVmKU5TVVJMRXJyb3JGYWlsaW5nVVJMUGVlclRydXN0RXJyb3JLZXksIHBlZXJUcnVz
dCk7CiAjZW5kaWYKIAotICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIGZpbHRlcmVkVXNlckluZm8u
Z2V0KCkpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihmaWx0
ZXJlZFVzZXJJbmZvLmdldCgpKTsKIAogICAgIGlmIChpZCB1bmRlcmx5aW5nRXJyb3IgPSBbdXNl
ckluZm8gb2JqZWN0Rm9yS2V5Ok5TVW5kZXJseWluZ0Vycm9yS2V5XSkgewogICAgICAgICBBU1NF
UlQoW3VuZGVybHlpbmdFcnJvciBpc0tpbmRPZkNsYXNzOltOU0Vycm9yIGNsYXNzXV0pOwpAQCAt
MTkyLDcgKzE5Miw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNFcnJvcj4gZGVjb2RlTlNFcnJvcigK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHVz
ZXJJbmZvOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgdXNlckluZm8pIHx8ICF1c2Vy
SW5mbykKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVzZXJJbmZvKSB8fCAhdXNlckluZm8pCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKICAgICBib29sIGhhc1VuZGVybHlpbmdFcnJvciA9IGZhbHNl
OwpAQCAtMzc3LDEzICszNzcsMTMgQEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvbnRl
bnRGaWx0ZQogewogICAgIGF1dG8gYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZEFyY2hpdmVy
IGFsbG9jXSBpbml0UmVxdWlyaW5nU2VjdXJlQ29kaW5nOllFU10pOwogICAgIGNvbnRlbnRGaWx0
ZXJVbmJsb2NrSGFuZGxlci5lbmNvZGUoYXJjaGl2ZXIuZ2V0KCkpOwotICAgIElQQzo6ZW5jb2Rl
KGVuY29kZXIsIChfX2JyaWRnZSBDRkRhdGFSZWYpYXJjaGl2ZXIuZ2V0KCkuZW5jb2RlZERhdGEp
OworICAgIGVuY29kZXIgPDwgKF9fYnJpZGdlIENGRGF0YVJlZilhcmNoaXZlci5nZXQoKS5lbmNv
ZGVkRGF0YTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXJV
bmJsb2NrSGFuZGxlcj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpDb250ZW50
RmlsdGVyVW5ibG9ja0hhbmRsZXImIGNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcikKIHsKICAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2Rl
ciwgZGF0YSkgfHwgIWRhdGEpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhKSB8fCAhZGF0
YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byB1bmFyY2hpdmVyID0gYWRvcHRO
UyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ0Zyb21EYXRhOihfX2Jy
aWRnZSBOU0RhdGEgKilkYXRhLmdldCgpIGVycm9yOm51bGxwdHJdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429374</attachid>
            <date>2021-05-21 17:18:47 -0700</date>
            <delta_ts>2021-05-21 18:14:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226112-20210521171846.patch</filename>
            <type>text/plain</type>
            <size>57534</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc4OTkpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAyMS0wNS0yMSAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBDR0NvbG9yU3BhY2VSZWYgYXJn
dW1lbnQgY29kaW5nIG1hdGNoIG90aGVyIENGIG9iamVjdHMgYW5kIHVzZSBDR0NvbG9yU3BhY2VD
cmVhdGVXaXRoUHJvcGVydHlMaXN0IGZvciBmYWxsYmFjaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgVGhpcyBpcyBhIHByZWN1cnNvciB0byBzb21lIGNvbG9y
IHNwYWNlIHR5cGUgdW5pZmljYXRpb24uIFRoaXMgY2hhbmdlOgorICAgICAgICAKKyAgICAgICAg
LSBNb2Rlcm5pemVzIENGIGFydWdtZW50IGNvZGVycyB0byB1c2UgQXJndW1lbnRDb2RlciBzcGVj
aWFsaXphdGlvbi4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHdlIG5vdyBzdXBwb3J0IGVuY29k
aW5nIENGIHR5cGVzIGJvdGggYXMgcGxhaW4gdHlwZXMgYW5kIFJldGFpblB0cjw+IHR5cGVzLCB3
aXRoCisgICAgICAgICAgZGVjb2RpbmcgYmVpbmcga2VwdCBvbmx5IHN1cHBvcmluZyBSZXRhaW5Q
dHI8PnMsIGFzIGRlY29kaW5nIGludG8gbm9uLXNtYXJ0IHBvaW50ZXIKKyAgICAgICAgICBpcyBu
b3QgdmVyeSB1c2VmdWwuCisgICAgICAgIC0gTW92ZSBDR0NvbG9yU3BhY2VSZWYgY29kaW5nIHRv
IEFyZ3VtZW50Q29kZXJzQ0YgYW5kIHVzZSBDR0NvbG9yU3BhY2VDb3B5UHJvcGVydHlMaXN0Cisg
ICAgICAgICAgYW5kIENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhQcm9wZXJ0eUxpc3QgYXMgdGhlIGZh
bGxiYWNrIGNvZGluZyAoaWYgdGhlcmUgaXMgbm8gbmFtZSksCisgICAgICAgICAgbWF0Y2hpbmcg
d2hhdCBvdGhlciBsaWJyYXJpZXMgb24gbWFjT1MgYW5kIGlPUyBkby4KKyAgICAgICAgLSBTd2l0
Y2ggQ29sb3JTcGFjZURhdGEgdG8gYmUgYSBzdHJ1Y3Qgd3JhcHBpbmcgYW4gT3B0aW9uYWw8UmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4+CisgICAgICAgICAgYW5kIHVzZSB0aGUgbmV3IHNoYXJl
ZCBjb2RpbmcuIFRoaXMgd2lsbCBiZSByZXBsYWNlZCBlbnRpcmVseSBpbiBzdWJzZXF1ZW50IGNo
YW5nZXMKKyAgICAgICAgICBzbyBJIGRpZG4ndCB3YW50IHRvIGNoYW5nZSB0aGlzIHRvbyBtdWNo
IG5vdy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAg
ICAqIFNoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tOgorICAgICAgICAoSVBDOjpl
bmNvZGVEYXRhSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNvZGVEYXRhSW50ZXJuYWwpOgor
ICAgICAgICAoSVBDOjplbmNvZGVEYXRlSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNvZGVE
YXRlSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjplbmNvZGVOdW1iZXJJbnRlcm5hbCk6CisgICAg
ICAgIChJUEM6OmRlY29kZU51bWJlckludGVybmFsKToKKyAgICAgICAgKElQQzo6ZW5jb2RlU2Vj
dXJlQ29kaW5nSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNvZGVTZWN1cmVDb2RpbmdJbnRl
cm5hbCk6CisgICAgICAgIChJUEM6OmVuY29kZVN0cmluZ0ludGVybmFsKToKKyAgICAgICAgKElQ
Qzo6ZGVjb2RlU3RyaW5nSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjplbmNvZGVVUkxJbnRlcm5h
bCk6CisgICAgICAgIChJUEM6OmRlY29kZVVSTEludGVybmFsKToKKyAgICAgICAgKiBTaGFyZWQv
Q29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxSZWY8Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAq
IFNoYXJlZC9Gb250SW5mby5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZvbnRJbmZvOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpGb250SW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBT
aGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVj
b2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRl
Y29kZSk6CisgICAgICAgICogU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwOgorICAgICAg
ICAoSVBDOjp0eXBlRnJvbUNGVHlwZVJlZik6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
Q0ZUeXBlUmVmPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXRhaW5Q
dHI8Q0ZUeXBlUmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q0ZB
cnJheVJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWluUHRy
PENGQXJyYXlSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDRkJv
b2xlYW5SZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRkJvb2xlYW5SZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxD
RkRhdGFSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRkRhdGFSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDRkRh
dGVSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFpblB0cjxD
RkRhdGVSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDRkRpY3Rp
b25hcnlSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxDRk51bWJlclJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0
YWluUHRyPENGTnVtYmVyUmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8Q0ZTdHJpbmdSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4+OjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENv
ZGVyPENGVVJMUmVmPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXRh
aW5QdHI8Q0ZVUkxSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxD
R0NvbG9yU3BhY2VSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxTZWNDZXJ0aWZpY2F0ZVJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPj46OmRlY29kZSk6CisgICAgICAg
IChJUEM6OkFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPjo6ZW5jb2RlKToKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPj46OmRl
Y29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U2VjQWNjZXNzQ29udHJvbFJlZj46
OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPFNlY0FjY2Vz
c0NvbnRyb2xSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTZWNU
cnVzdFJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWluUHRy
PFNlY1RydXN0UmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OmVuY29kZSk6IERlbGV0ZWQu
CisgICAgICAgIChJUEM6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL2NmL0Fy
Z3VtZW50Q29kZXJzQ0YuaDoKKyAgICAgICAgKElQQzo6Q0ZSZXRhaW5QdHJBcmd1bWVudENvZGVy
OjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvQ29sb3JTcGFjZURhdGEubW06CisgICAg
ICAgIChXZWJLaXQ6OkNvbG9yU3BhY2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpDb2xvclNwYWNlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgICogU2hhcmVkL21hYy9TZWNJdGVtUmVxdWVzdERhdGEuY3BwOgorICAgICAgICAoV2ViS2l0
OjpTZWNJdGVtUmVxdWVzdERhdGE6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNl
Y0l0ZW1SZXF1ZXN0RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1NlY0l0ZW1S
ZXNwb25zZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpTZWNJdGVtUmVzcG9uc2VEYXRhOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTZWNJdGVtUmVzcG9uc2VEYXRhOjpkZWNv
ZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tOgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVu
Y29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJ
bmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6ZW5jb2RlTlNFcnJvcik6CisgICAgICAgIChJ
UEM6OmRlY29kZU5TRXJyb3IpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6Q29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyPjo6ZGVjb2Rl
KToKKwogMjAyMS0wNS0yMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbQ29jb2FdIEV4cGFuZCBJT0tpdCBtZXRob2QgZmlsdGVycyB0byBjb3ZlciBpdGVt
cyBlbmNvdW50ZXJlZCBkdXJpbmcgdGVzdGluZwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAJKHJldmlzaW9uIDI3Nzg5OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmUKICAgICBlbmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xz
OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQnVuZGxlSWRl
bnRpZmllcjsKLSAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQo
KSk7CisgICAgZW5jb2RlciA8PCBuZXR3b3JrQVRTQ29udGV4dDsKICNlbmRpZgogI2lmIFVTRShT
T1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwpAQCAtMTE1LDcgKzExNSw3
IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51aVByb2Nlc3NCdW5kbGVJ
ZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghSVBDOjpkZWNvZGUo
ZGVjb2RlciwgcmVzdWx0Lm5ldHdvcmtBVFNDb250ZXh0KSkKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5uZXR3b3JrQVRTQ29udGV4dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNl
bmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24g
Mjc3ODk5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNy
ZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9p
ZCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwgYm91
bmRJbnRlcmZhY2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgYWxsb3dzQ2VsbHVsYXJBY2Nl
c3M7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcHJveHlD
b25maWd1cmF0aW9uLmdldCgpKTsKKyAgICBlbmNvZGVyIDw8IHByb3h5Q29uZmlndXJhdGlvbjsK
ICAgICBlbmNvZGVyIDw8IHNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKICAgICBl
bmNvZGVyIDw8IHNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcjsKICAgICBlbmNv
ZGVyIDw8IGF0dHJpYnV0ZWRCdW5kbGVJZGVudGlmaWVyOwpAQCAtMTA4LDcgKzEwOCw3IEBAIE9w
dGlvbmFsPE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXIKICAgICAKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eUNvbmZpZ3VyYXRp
b247Ci0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBwcm94eUNvbmZpZ3VyYXRpb24pKQor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocHJveHlDb25maWd1cmF0aW9uKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBPcHRpb25hbDxTdHJpbmc+IHNvdXJjZUFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0ZvbnRJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Gb250SW5mby5jcHAJ
KHJldmlzaW9uIDI3Nzg5OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0ZvbnRJbmZvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCB2b2lkIEZvbnRJbmZvOjplbmNvZGUoSVBD
OjpFbmNvZGVyJiBlbmNvCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxib29sPihmb250QXR0cmlidXRlRGljdGlvbmFyeSk7CiAgICAgaWYgKGZvbnRBdHRy
aWJ1dGVEaWN0aW9uYXJ5KQotICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBmb250QXR0cmli
dXRlRGljdGlvbmFyeS5nZXQoKSk7CisgICAgICAgIGVuY29kZXIgPDwgZm9udEF0dHJpYnV0ZURp
Y3Rpb25hcnk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmNvZGVyKTsKICNlbmRpZgpAQCAt
NTUsNyArNTUsNyBAQCBib29sIEZvbnRJbmZvOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvCiAg
ICAgaWYgKCFoYXNGb250QXR0cmlidXRlRGljdGlvbmFyeSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIGZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVE
aWN0aW9uYXJ5KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZvbnRJbmZvLmZvbnRBdHRyaWJ1
dGVEaWN0aW9uYXJ5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oZGVjb2Rlcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjc3ODk5KQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmVuY29kCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIElQQzo6ZW5j
b2RlKGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKKyAgICBlbmNvZGVyIDw8IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXQVlMQU5EKQpAQCAtMzg3
LDcgKzM4Nyw3IEBAIGJvb2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2QKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVy
LCBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnND
b2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVu
dENvZGVyc0NvY29hLm1tCShyZXZpc2lvbiAyNzc4OTkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsMTMg
KzMwNiwxMyBAQCBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlCiAKIHN0
YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVEYXRhSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNE
YXRhICpkYXRhKQogewotICAgIGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2UgQ0ZEYXRhUmVmKWRh
dGEpOworICAgIGVuY29kZXIgPDwgKF9fYnJpZGdlIENGRGF0YVJlZilkYXRhOwogfQogCiBzdGF0
aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZURhdGFJbnRlcm5hbChEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgaWYg
KCFkZWNvZGUoZGVjb2RlciwgZGF0YSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhKSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICByZXR1cm4geyBhZG9wdE5TKChOU0Rh
dGEgKilkYXRhLmxlYWtSZWYoKSkgfTsKIH0KQEAgLTMyMSwxMyArMzIxLDEzIEBAIHN0YXRpYyBp
bmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGUKIAogc3RhdGljIGlubGluZSB2b2lkIGVu
Y29kZURhdGVJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0RhdGUgKmRhdGUpCiB7Ci0gICAg
ZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRkRhdGVSZWYpZGF0ZSk7CisgICAgZW5jb2RlciA8
PCAoX19icmlkZ2UgQ0ZEYXRlUmVmKWRhdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8
UmV0YWluUHRyPGlkPj4gZGVjb2RlRGF0ZUludGVybmFsKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgUmV0YWluUHRyPENGRGF0ZVJlZj4gZGF0ZTsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBk
YXRlKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGUpKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIHJldHVybiB7IGFkb3B0TlMoKE5TRGF0ZSAqKWRhdGUubGVha1JlZigp
KSB9OwogfQpAQCAtNDE0LDEzICs0MTQsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxp
ZD4+IGRlY29kZUZvbgogCiBzdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlTnVtYmVySW50ZXJuYWwo
RW5jb2RlciYgZW5jb2RlciwgTlNOdW1iZXIgKm51bWJlcikKIHsKLSAgICBlbmNvZGUoZW5jb2Rl
ciwgKF9fYnJpZGdlIENGTnVtYmVyUmVmKW51bWJlcik7CisgICAgZW5jb2RlciA8PCAoX19icmlk
Z2UgQ0ZOdW1iZXJSZWYpbnVtYmVyOwogfQogCiBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFp
blB0cjxpZD4+IGRlY29kZU51bWJlckludGVybmFsKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
UmV0YWluUHRyPENGTnVtYmVyUmVmPiBudW1iZXI7Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2Rlciwg
bnVtYmVyKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG51bWJlcikpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHsgYWRvcHROUygoTlNOdW1iZXIgKiludW1iZXIu
bGVha1JlZigpKSB9OwogfQpAQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZVNl
Y3VyZUNvZGluZ0ludGVybmFsKEUKICAgICBbYXJjaGl2ZXIgZmluaXNoRW5jb2RpbmddOwogICAg
IFthcmNoaXZlciBzZXREZWxlZ2F0ZTpuaWxdOwogCi0gICAgZW5jb2RlKGVuY29kZXIsIChfX2Jy
aWRnZSBDRkRhdGFSZWYpW2FyY2hpdmVyIGVuY29kZWREYXRhXSk7CisgICAgZW5jb2RlciA8PCAo
X19icmlkZ2UgQ0ZEYXRhUmVmKVthcmNoaXZlciBlbmNvZGVkRGF0YV07CiB9CiAKIHN0YXRpYyBP
cHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbChEZWNvZGVy
JiBkZWNvZGVyLCBOU0FycmF5PENsYXNzPiAqYWxsb3dlZENsYXNzZXMpCkBAIC00NDgsNyArNDQ4
LDcgQEAgc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlYwogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAg
ICBpZiAoIWRlY29kZShkZWNvZGVyLCBkYXRhKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRh
dGEpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byB1bmFyY2hpdmVy
ID0gYWRvcHROUyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ0Zyb21E
YXRhOihfX2JyaWRnZSBOU0RhdGEgKilkYXRhLmdldCgpIGVycm9yOm51bGxwdHJdKTsKQEAgLTQ3
NywxMyArNDc3LDEzIEBAIHN0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTZWMK
IAogc3RhdGljIGlubGluZSB2b2lkIGVuY29kZVN0cmluZ0ludGVybmFsKEVuY29kZXImIGVuY29k
ZXIsIE5TU3RyaW5nICpzdHJpbmcpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBD
RlN0cmluZ1JlZilzdHJpbmcpOworICAgIGVuY29kZXIgPDwgKF9fYnJpZGdlIENGU3RyaW5nUmVm
KXN0cmluZzsKIH0KIAogc3RhdGljIGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNv
ZGVTdHJpbmdJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc3RyaW5nOwotICAgIGlmICghZGVjb2RlKGRlY29kZXIsIHN0cmluZykpCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHJldHVybiB7IGFkb3B0TlMoKE5TU3RyaW5nICopc3RyaW5nLmxlYWtSZWYoKSkgfTsK
IH0KQEAgLTQ5MiwxMyArNDkyLDEzIEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRy
PGlkPj4gZGUKIAogc3RhdGljIGlubGluZSB2b2lkIGVuY29kZVVSTEludGVybmFsKEVuY29kZXIm
IGVuY29kZXIsIE5TVVJMICpVUkwpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBD
RlVSTFJlZilVUkwpOworICAgIGVuY29kZXIgPDwgKF9fYnJpZGdlIENGVVJMUmVmKVVSTDsKIH0K
IAogc3RhdGljIGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVVUkxJbnRlcm5h
bChEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gVVJMOwotICAg
IGlmICghZGVjb2RlKGRlY29kZXIsIFVSTCkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShVUkwp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiB7IGFkb3B0TlMoKE5T
VVJMICopVVJMLmxlYWtSZWYoKSkgfTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCShyZXZpc2lv
biAyNzc4OTkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRD
b2RlcnNDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMxLDcgKzQzMSw3IEBAIHZvaWQgQXJn
dW1lbnRDb2RlcjxSZWY8Rm9udD4+OjplbmNvZGVQbGEKICAgICBhdXRvIGN0Rm9udCA9IHBsYXRm
b3JtRGF0YS5mb250KCk7CiAgICAgYXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250
Q29weUZvbnREZXNjcmlwdG9yKGN0Rm9udCkpOwogICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0
Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLmdldCgpKSk7
Ci0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgYXR0cmlidXRlcy5nZXQoKSk7CisgICAgZW5jb2Rl
ciA8PCBhdHRyaWJ1dGVzOwogCiAgICAgY29uc3QgYXV0byYgY3JlYXRpb25EYXRhID0gcGxhdGZv
cm1EYXRhLmNyZWF0aW9uRGF0YSgpOwogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4o
Y3JlYXRpb25EYXRhKTsKQEAgLTQ5OSw4ICs0OTksOSBAQCBPcHRpb25hbDxGb250UGxhdGZvcm1E
YXRhPiBBcmd1bWVudENvZGVyCiAgICAgaWYgKCFzeW50aGV0aWNPYmxpcXVlLmhhc1ZhbHVlKCkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBhdHRyaWJ1dGVzOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgYXR0cmli
dXRlcykpCisgICAgT3B0aW9uYWw8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+IGF0dHJpYnV0
ZXM7CisgICAgZGVjb2RlciA+PiBhdHRyaWJ1dGVzOworICAgIGlmICghYXR0cmlidXRlcykKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIE9wdGlvbmFsPGJvb2w+IGluY2x1ZGVz
Q3JlYXRpb25EYXRhOwpAQCAtNTI1LDcgKzUyNiw3IEBAIE9wdGlvbmFsPEZvbnRQbGF0Zm9ybURh
dGE+IEFyZ3VtZW50Q29kZXIKICAgICAgICAgYXV0byBiYXNlRm9udERlc2NyaXB0b3IgPSBmb250
Q3VzdG9tUGxhdGZvcm1EYXRhLT5mb250RGVzY3JpcHRvci5nZXQoKTsKICAgICAgICAgaWYgKCFi
YXNlRm9udERlc2NyaXB0b3IpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
ICAgICBhdXRvIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRl
Q29weVdpdGhBdHRyaWJ1dGVzKGJhc2VGb250RGVzY3JpcHRvciwgYXR0cmlidXRlcy5nZXQoKSkp
OworICAgICAgICBhdXRvIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9y
Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGJhc2VGb250RGVzY3JpcHRvciwgYXR0cmlidXRlcy0+
Z2V0KCkpKTsKICAgICAgICAgYXV0byBjdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhG
b250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6ZS52YWx1ZSgpLCBudWxscHRy
KSk7CiAKICAgICAgICAgYXV0byBjcmVhdGlvbkRhdGEgPSBGb250UGxhdGZvcm1EYXRhOjpDcmVh
dGlvbkRhdGEgeyBmb250RmFjZURhdGEudmFsdWUoKSwgaXRlbUluQ29sbGVjdGlvbi52YWx1ZSgp
IH07CkBAIC01NDUsNyArNTQ2LDcgQEAgT3B0aW9uYWw8Rm9udFBsYXRmb3JtRGF0YT4gQXJndW1l
bnRDb2RlcgogICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRv
ciA9IGZpbmRGb250RGVzY3JpcHRvcihyZWZlcmVuY2VVUkwudmFsdWUoKSwgcG9zdFNjcmlwdE5h
bWUudmFsdWUoKSk7CiAgICAgaWYgKCFmb250RGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRv
ckNyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250RGVzY3JpcHRvci5nZXQoKSwgYXR0cmlidXRl
cy5nZXQoKSkpOworICAgIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9y
Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLmdldCgpLCBhdHRyaWJ1dGVz
LT5nZXQoKSkpOwogICAgIGF1dG8gY3RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9u
dERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUudmFsdWUoKSwgbnVsbHB0cikp
OwogCiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoY3RGb250LmdldCgpLCBzaXplLnZhbHVl
KCksIHN5bnRoZXRpY0JvbGQudmFsdWUoKSwgc3ludGhldGljT2JsaXF1ZS52YWx1ZSgpLCBvcmll
bnRhdGlvbi52YWx1ZSgpLCB3aWR0aFZhcmlhbnQudmFsdWUoKSwgdGV4dFJlbmRlcmluZ01vZGUu
dmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9u
IDI3Nzg5OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9p
ZCBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbgogICAgIGVuY29kZXIgPDwgdGVy
bWluYXRpb25UaW1lb3V0OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVuY29kZXIgPDwgYWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQ7Ci0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29y
a0FUU0NvbnRleHQuZ2V0KCkpOworICAgIGVuY29kZXIgPDwgbmV0d29ya0FUU0NvbnRleHQ7CiAj
ZW5kaWYKIH0KIApAQCAtNjEsNyArNjEsNyBAQCBib29sIFBsdWdpblByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmRlCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCByZXN1bHQubmV0d29ya0FUU0NvbnRl
eHQpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm5ldHdvcmtBVFNDb250ZXh0KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hh
cmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwCShyZXZpc2lvbiAyNzc4OTkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9jZi9Bcmd1bWVudENvZGVyc0NGLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJE
ZWNvZGVyLmgiCiAjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyLmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgpAQCAtNzIsNiArNzQsNyBAQCBlbnVtIGNsYXNz
IENGVHlwZSA6IHVpbnQ4X3QgewogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiAg
ICAgU2VjVHJ1c3QsCiAjZW5kaWYKKyAgICBDR0NvbG9yU3BhY2UsCiAgICAgTnVsbHB0ciwKICAg
ICBVbmtub3duLAogfTsKQEAgLTEwMiw2ICsxMDUsOCBAQCBzdGF0aWMgQ0ZUeXBlIHR5cGVGcm9t
Q0ZUeXBlUmVmKENGVHlwZVJlCiAgICAgICAgIHJldHVybiBDRlR5cGU6OkNGU3RyaW5nOwogICAg
IGlmICh0eXBlSUQgPT0gQ0ZVUkxHZXRUeXBlSUQoKSkKICAgICAgICAgcmV0dXJuIENGVHlwZTo6
Q0ZVUkw7CisgICAgaWYgKHR5cGVJRCA9PSBDR0NvbG9yU3BhY2VHZXRUeXBlSUQoKSkKKyAgICAg
ICAgcmV0dXJuIENGVHlwZTo6Q0dDb2xvclNwYWNlOwogICAgIGlmICh0eXBlSUQgPT0gU2VjQ2Vy
dGlmaWNhdGVHZXRUeXBlSUQoKSkKICAgICAgICAgcmV0dXJuIENGVHlwZTo6U2VjQ2VydGlmaWNh
dGU7CiAjaWYgSEFWRShTRUNfS0VZQ0hBSU4pCkBAIC0xMjEsNTQgKzEyNiw1OSBAQCBzdGF0aWMg
Q0ZUeXBlIHR5cGVGcm9tQ0ZUeXBlUmVmKENGVHlwZVJlCiAgICAgcmV0dXJuIENGVHlwZTo6VW5r
bm93bjsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZUeXBlUmVmIHR5cGVS
ZWYpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZU
eXBlUmVmPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGVHlwZVJlZiB0eXBlUmVmKQogewot
ICAgIENGVHlwZSB0eXBlID0gdHlwZUZyb21DRlR5cGVSZWYodHlwZVJlZik7CisgICAgYXV0byB0
eXBlID0gdHlwZUZyb21DRlR5cGVSZWYodHlwZVJlZik7CiAgICAgZW5jb2RlciA8PCB0eXBlOwog
CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBDRlR5cGU6OkNGQXJyYXk6Ci0gICAgICAg
IGVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPih0eXBlUmVmKSk7CisgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4odHlwZVJlZik7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIENGVHlwZTo6Q0ZCb29sZWFuOgotICAgICAgICBlbmNvZGUoZW5j
b2Rlciwgc3RhdGljX2Nhc3Q8Q0ZCb29sZWFuUmVmPih0eXBlUmVmKSk7CisgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZCb29sZWFuUmVmPih0eXBlUmVmKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgQ0ZUeXBlOjpDRkRhdGE6Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBzdGF0
aWNfY2FzdDxDRkRhdGFSZWY+KHR5cGVSZWYpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxDRkRhdGFSZWY+KHR5cGVSZWYpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDRlR5
cGU6OkNGRGF0ZToKLSAgICAgICAgZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PENGRGF0ZVJl
Zj4odHlwZVJlZikpOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PENGRGF0ZVJlZj4o
dHlwZVJlZik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENGVHlwZTo6Q0ZEaWN0aW9uYXJ5
OgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPih0
eXBlUmVmKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVm
Pih0eXBlUmVmKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ0ZUeXBlOjpDRk51bGw6CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENGVHlwZTo6Q0ZOdW1iZXI6Ci0gICAgICAgIGVuY29k
ZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4odHlwZVJlZikpOworICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPih0eXBlUmVmKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQ0ZUeXBlOjpDRlN0cmluZzoKLSAgICAgICAgZW5jb2RlKGVuY29kZXIs
IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPih0eXBlUmVmKSk7CisgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHR5cGVSZWYpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDRlR5cGU6OkNGVVJMOgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8
Q0ZVUkxSZWY+KHR5cGVSZWYpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxDRlVS
TFJlZj4odHlwZVJlZik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENGVHlwZTo6Q0dDb2xv
clNwYWNlOgorICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PENHQ29sb3JTcGFjZVJlZj4o
Y29uc3RfY2FzdDx2b2lkKj4odHlwZVJlZikpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBD
RlR5cGU6OlNlY0NlcnRpZmljYXRlOgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nh
c3Q8U2VjQ2VydGlmaWNhdGVSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKSk7CisgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8U2VjQ2VydGlmaWNhdGVSZWY+KGNvbnN0X2Nhc3Q8
dm9pZCo+KHR5cGVSZWYpKTsKICAgICAgICAgcmV0dXJuOwogI2lmIEhBVkUoU0VDX0tFWUNIQUlO
KQogICAgIGNhc2UgQ0ZUeXBlOjpTZWNLZXljaGFpbkl0ZW06Ci0gICAgICAgIGVuY29kZShlbmNv
ZGVyLCBzdGF0aWNfY2FzdDxTZWNLZXljaGFpbkl0ZW1SZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5
cGVSZWYpKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8U2VjS2V5Y2hhaW5JdGVt
UmVmPihjb25zdF9jYXN0PHZvaWQqPih0eXBlUmVmKSk7CiAgICAgICAgIHJldHVybjsKICNlbmRp
ZgogI2lmIEhBVkUoU0VDX0FDQ0VTU19DT05UUk9MKQogICAgIGNhc2UgQ0ZUeXBlOjpTZWNBY2Nl
c3NDb250cm9sOgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8U2VjQWNjZXNz
Q29udHJvbFJlZj4oY29uc3RfY2FzdDx2b2lkKj4odHlwZVJlZikpKTsKKyAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxTZWNBY2Nlc3NDb250cm9sUmVmPihjb25zdF9jYXN0PHZvaWQqPih0
eXBlUmVmKSk7CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogI2lmIEhBVkUoU0VDX1RSVVNUX1NF
UklBTElaQVRJT04pCiAgICAgY2FzZSBDRlR5cGU6OlNlY1RydXN0OgotICAgICAgICBlbmNvZGUo
ZW5jb2Rlciwgc3RhdGljX2Nhc3Q8U2VjVHJ1c3RSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVS
ZWYpKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8U2VjVHJ1c3RSZWY+KGNvbnN0
X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKTsKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgY2Fz
ZSBDRlR5cGU6Ok51bGxwdHI6CkBAIC0xODAsNDYgKzE5MCw1MCBAQCB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBDRlR5cGVSZWYgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LWJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRlR5cGVSZWY+JiByZXN1
bHQpCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZUeXBlUmVmPjo6ZW5jb2RlPEVuY29k
ZXI+KEVuY29kZXImLCBDRlR5cGVSZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENG
VHlwZVJlZj46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlv
bkVuY29kZXImLCBDRlR5cGVSZWYpOworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENG
VHlwZVJlZj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGVHlwZVJlZj4m
IHJlc3VsdCkKIHsKLSAgICBDRlR5cGUgdHlwZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHR5
cGUpKQorICAgIE9wdGlvbmFsPENGVHlwZT4gdHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7Cisg
ICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBzd2l0Y2ggKCp0eXBlKSB7CiAgICAgY2FzZSBDRlR5cGU6OkNGQXJyYXk6IHsKICAg
ICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5OwotICAgICAgICBpZiAoIWRlY29kZShk
ZWNvZGVyLCBhcnJheSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyYXkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSBhZG9wdENGKGFycmF5Lmxl
YWtSZWYoKSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoYXJyYXkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBDRlR5cGU6OkNGQm9vbGVhbjogewogICAgICAgICBS
ZXRhaW5QdHI8Q0ZCb29sZWFuUmVmPiBib29sZWFuOwotICAgICAgICBpZiAoIWRlY29kZShkZWNv
ZGVyLCBib29sZWFuKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShib29sZWFuKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihib29sZWFu
LmxlYWtSZWYoKSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoYm9vbGVhbik7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIENGVHlwZTo6Q0ZEYXRhOiB7CiAgICAgICAg
IFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIs
IGRhdGEpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSBhZG9wdENGKGRhdGEubGVha1JlZigpKTsK
KyAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShkYXRhKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIGNhc2UgQ0ZUeXBlOjpDRkRhdGU6IHsKICAgICAgICAgUmV0YWluUHRyPENGRGF0
ZVJlZj4gZGF0ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgZGF0ZSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoZGF0ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YoZGF0ZS5sZWFrUmVmKCkpOworICAgICAgICByZXN1bHQg
PSBXVEZNb3ZlKGRhdGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBD
RlR5cGU6OkNGRGljdGlvbmFyeTogewogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBkaWN0aW9uYXJ5OwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBkaWN0aW9uYXJ5KSkK
KyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkaWN0aW9uYXJ5KSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihkaWN0aW9uYXJ5LmxlYWtSZWYo
KSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoZGljdGlvbmFyeSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBjYXNlIENGVHlwZTo6Q0ZOdWxsOgpAQCAtMjI3LDU2ICsyNDEs
NjMgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIENGVHlwZTo6Q0ZOdW1iZXI6IHsKICAgICAgICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiBudW1iZXI7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIG51
bWJlcikpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobnVtYmVyKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihudW1iZXIubGVha1JlZigp
KTsKKyAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShudW1iZXIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgY2FzZSBDRlR5cGU6OkNGU3RyaW5nOiB7CiAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gc3RyaW5nOwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBzdHJp
bmcpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cmluZykpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGFkb3B0Q0Yoc3RyaW5nLmxlYWtSZWYoKSk7
CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIGNhc2UgQ0ZUeXBlOjpDRlVSTDogewogICAgICAgICBSZXRhaW5QdHI8Q0ZV
UkxSZWY+IHVybDsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgdXJsKSkKKyAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZSh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXN1bHQgPSBXVEZNb3ZlKHVybCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBjYXNlIENGVHlwZTo6Q0dDb2xvclNwYWNlOiB7CisgICAgICAgIFJldGFpblB0cjxDR0Nv
bG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29s
b3JTcGFjZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGFk
b3B0Q0YodXJsLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoY29sb3JTcGFj
ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIENGVHlwZTo6U2VjQ2Vy
dGlmaWNhdGU6IHsKICAgICAgICAgUmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPiBjZXJ0aWZp
Y2F0ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgY2VydGlmaWNhdGUpKQorICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihjZXJ0aWZpY2F0ZS5sZWFrUmVmKCkpOwor
ICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGNlcnRpZmljYXRlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogI2lmIEhBVkUoU0VDX0tFWUNIQUlOKQogICAgIGNhc2UgQ0ZUeXBlOjpTZWNL
ZXljaGFpbkl0ZW06IHsKICAgICAgICAgUmV0YWluUHRyPFNlY0tleWNoYWluSXRlbVJlZj4ga2V5
Y2hhaW5JdGVtOwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBrZXljaGFpbkl0ZW0pKQor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleWNoYWluSXRlbSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGFkb3B0Q0Yoa2V5Y2hhaW5JdGVtLmxlYWtS
ZWYoKSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoa2V5Y2hhaW5JdGVtKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgSEFWRShTRUNfQUNDRVNTX0NPTlRST0wp
CiAgICAgY2FzZSBDRlR5cGU6OlNlY0FjY2Vzc0NvbnRyb2w6IHsKICAgICAgICAgUmV0YWluUHRy
PFNlY0FjY2Vzc0NvbnRyb2xSZWY+IGFjY2Vzc0NvbnRyb2w7Ci0gICAgICAgIGlmICghZGVjb2Rl
KGRlY29kZXIsIGFjY2Vzc0NvbnRyb2wpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFj
Y2Vzc0NvbnRyb2wpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQg
PSBhZG9wdENGKGFjY2Vzc0NvbnRyb2wubGVha1JlZigpKTsKKyAgICAgICAgcmVzdWx0ID0gV1RG
TW92ZShhY2Nlc3NDb250cm9sKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlm
CiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKICAgICBjYXNlIENGVHlwZTo6U2Vj
VHJ1c3Q6IHsKICAgICAgICAgUmV0YWluUHRyPFNlY1RydXN0UmVmPiB0cnVzdDsKLSAgICAgICAg
aWYgKCFkZWNvZGUoZGVjb2RlciwgdHJ1c3QpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHRydXN0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRv
cHRDRih0cnVzdC5sZWFrUmVmKCkpOworICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKHRydXN0KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCkBAIC0yOTEsNyArMzEyLDggQEAg
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZBcnJheVJlZiBhcnJheSkK
K3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZBcnJheVJl
Zj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRkFycmF5UmVmIGFycmF5KQogewogICAgIGlm
ICghYXJyYXkpIHsKICAgICAgICAgZW5jb2RlciA8PCB0cnVlOwpAQCAtMzE4LDExICszNDAsMTQg
QEAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZBcnJheVJlZgogICAgIGZvciAoQ0ZJ
bmRleCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBpZiAoaW52YWxpZEluZGljaWVz
LmNvbnRhaW5zKGkpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGVuY29kZShlbmNv
ZGVyLCB2YWx1ZXNbaV0pOworICAgICAgICBlbmNvZGVyIDw8IHZhbHVlc1tpXTsKICAgICB9CiB9
CiAKLWJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRkFycmF5UmVmPiYg
cmVzdWx0KQordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGQXJyYXlSZWY+OjplbmNvZGU8
RW5jb2Rlcj4oRW5jb2RlciYsIENGQXJyYXlSZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENv
ZGVyPENGQXJyYXlSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyJiwgQ0ZBcnJheVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRh
aW5QdHI8Q0ZBcnJheVJlZj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENG
QXJyYXlSZWY+JiByZXN1bHQpCiB7CiAgICAgYm9vbCBpc051bGwgPSBmYWxzZTsKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGlzTnVsbCkpCkBAIC0zNDEsNyArMzY2LDcgQEAgYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gZWxlbWVudDsKLSAg
ICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgZWxlbWVudCkpCisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
aWYgKCFlbGVtZW50KQpAQCAtMzU0LDEyICszNzksMTYgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBDRkJvb2xlYW5SZWYgYm9vbGVhbikKK3RlbXBsYXRlPHR5cGVuYW1l
IEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZCb29sZWFuUmVmPjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIENGQm9vbGVhblJlZiBib29sZWFuKQogewogICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Ym9vbD4oQ0ZCb29sZWFuR2V0VmFsdWUoYm9vbGVhbikpOwogfQogCi1ib29sIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZCb29sZWFuUmVmPiYgcmVzdWx0KQor
dGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGQm9vbGVhblJlZj46OmVuY29kZTxFbmNvZGVy
PihFbmNvZGVyJiwgQ0ZCb29sZWFuUmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxD
RkJvb2xlYW5SZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5l
Y3Rpb25FbmNvZGVyJiwgQ0ZCb29sZWFuUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFp
blB0cjxDRkJvb2xlYW5SZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxD
RkJvb2xlYW5SZWY+JiByZXN1bHQpCiB7CiAgICAgYm9vbCBib29sZWFuOwogICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoYm9vbGVhbikpCkBAIC0zNjksMTUgKzM5OCwxNiBAQCBib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGRGF0YVJlZiBkYXRhKQordGVtcGxhdGU8dHlwZW5h
bWUgRW5jb2Rlcj4KK3ZvaWQgQXJndW1lbnRDb2RlcjxDRkRhdGFSZWY+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgQ0ZEYXRhUmVmIGRhdGEpCiB7Ci0gICAgQ0ZJbmRleCBsZW5ndGggPSBDRkRh
dGFHZXRMZW5ndGgoZGF0YSk7Ci0gICAgY29uc3QgVUludDgqIGJ5dGVQdHIgPSBDRkRhdGFHZXRC
eXRlUHRyKGRhdGEpOwotCi0gICAgZW5jb2RlciA8PCBJUEM6OkRhdGFSZWZlcmVuY2UoYnl0ZVB0
ciwgbGVuZ3RoKTsKKyAgICBlbmNvZGVyIDw8IElQQzo6RGF0YVJlZmVyZW5jZShDRkRhdGFHZXRC
eXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkpOwogfQogCi1ib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgcmVzdWx0KQordGVtcGxhdGUg
dm9pZCBBcmd1bWVudENvZGVyPENGRGF0YVJlZj46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwg
Q0ZEYXRhUmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRkRhdGFSZWY+OjplbmNv
ZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiwgQ0ZE
YXRhUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRkRhdGFSZWY+Pjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRkRhdGFSZWY+JiByZXN1bHQpCiB7CiAg
ICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7CiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShkYXRhUmVmZXJlbmNlKSkKQEAgLTM4NywxMiArNDE3LDE2IEBAIGJvb2wgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZEYXRlUmVmIGRhdGUpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGRGF0ZVJlZj46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBDRkRhdGVSZWYgZGF0ZSkKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGRvdWJsZT4oQ0ZEYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGUpKTsKIH0KIAotYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGRGF0ZVJlZj4mIHJlc3VsdCkKK3RlbXBsYXRl
IHZvaWQgQXJndW1lbnRDb2RlcjxDRkRhdGVSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYs
IENGRGF0ZVJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZEYXRlUmVmPjo6ZW5j
b2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIENG
RGF0ZVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZEYXRlUmVmPj46OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRlUmVmPiYgcmVzdWx0KQogewog
ICAgIGRvdWJsZSBhYnNvbHV0ZVRpbWU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhYnNvbHV0
ZVRpbWUpKQpAQCAtNDAyLDcgKzQzNiw4IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFJldGFpblB0cjwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGRGljdGlvbmFyeVJlZj46OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSkKIHsKICAgICBpZiAoIWRp
Y3Rpb25hcnkpIHsKICAgICAgICAgZW5jb2RlciA8PCB0cnVlOwpAQCAtNDM1LDEyICs0NzAsMTQg
QEAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZEaWN0aW9uYQogICAgICAgICBpZiAo
aW52YWxpZEtleXMuY29udGFpbnMoa2V5c1tpXSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBlbmNvZGUoZW5jb2Rlciwga2V5c1tpXSk7Ci0gICAgICAgIGVuY29kZShlbmNvZGVy
LCB2YWx1ZXNbaV0pOworICAgICAgICBlbmNvZGVyIDw8IGtleXNbaV0gPDwgdmFsdWVzW2ldOwog
ICAgIH0KIH0KIAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4mIHJlc3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRkRpY3Rp
b25hcnlSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIENGRGljdGlvbmFyeVJlZik7Cit0
ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZEaWN0aW9uYXJ5UmVmPjo6ZW5jb2RlPFN0cmVh
bUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIENGRGljdGlvbmFy
eVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgcmVz
dWx0KQogewogICAgIGJvb2wgaXNOdWxsID0gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShpc051bGwpKQpAQCAtNDU4LDIxICs0OTUsMjIgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgUmV0YWluUHRyPAogICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBk
aWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKICAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAg
IFJldGFpblB0cjxDRlR5cGVSZWY+IGtleTsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2Rlciwg
a2V5KSB8fCAha2V5KQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkgfHwgIWtleSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVm
PiB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgdmFsdWUpIHx8ICF2YWx1ZSkK
KyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkgfHwgIXZhbHVlKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25h
cnkuZ2V0KCksIGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwogICAgIH0KIAotICAgIHJlc3VsdCA9
IGFkb3B0Q0YoZGljdGlvbmFyeS5sZWFrUmVmKCkpOworICAgIHJlc3VsdCA9IFdURk1vdmUoZGlj
dGlvbmFyeSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIENGTnVtYmVyUmVmIG51bWJlcikKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2
b2lkIEFyZ3VtZW50Q29kZXI8Q0ZOdW1iZXJSZWY+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Q0ZOdW1iZXJSZWYgbnVtYmVyKQogewogICAgIENGTnVtYmVyVHlwZSBudW1iZXJUeXBlID0gQ0ZO
dW1iZXJHZXRUeXBlKG51bWJlcik7CiAKQEAgLTQ4MCwxMCArNTE4LDEyIEBAIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIENGTnVtYmVyUmUKICAgICBib29sIHJlc3VsdCA9IENGTnVtYmVy
R2V0VmFsdWUobnVtYmVyLCBudW1iZXJUeXBlLCBidWZmZXIuZGF0YSgpKTsKICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKIAotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4obnVtYmVyVHlwZSk7Ci0gICAgZW5jb2RlciA8PCBJUEM6OkRhdGFSZWZlcmVuY2UoYnVm
ZmVyKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG51bWJlclR5cGUpIDw8
IElQQzo6RGF0YVJlZmVyZW5jZShidWZmZXIpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50
Q29kZXI8Q0ZOdW1iZXJSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIENGTnVtYmVyUmVm
KTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRk51bWJlclJlZj46OmVuY29kZTxTdHJl
YW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBDRk51bWJlclJl
Zik7CisKIHN0YXRpYyBzaXplX3Qgc2l6ZUZvck51bWJlclR5cGUoQ0ZOdW1iZXJUeXBlIG51bWJl
clR5cGUpCiB7CiAgICAgc3dpdGNoIChudW1iZXJUeXBlKSB7CkBAIC01MjQsNyArNTY0LDcgQEAg
c3RhdGljIHNpemVfdCBzaXplRm9yTnVtYmVyVHlwZShDRk51bWJlcgogICAgIHJldHVybiAwOwog
fQogCi1ib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+
JiByZXN1bHQpCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGTnVtYmVyUmVmPj46OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+JiByZXN1bHQpCiB7
CiAgICAgT3B0aW9uYWw8dWludDhfdD4gbnVtYmVyVHlwZUZyb21JUEM7CiAgICAgZGVjb2RlciA+
PiBudW1iZXJUeXBlRnJvbUlQQzsKQEAgLTU0Niw3ICs1ODYsOCBAQCBib29sIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIENGU3RyaW5nUmVmIHN0cmluZykKK3RlbXBsYXRlPHR5cGVu
YW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZTdHJpbmdSZWY+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgQ0ZTdHJpbmdSZWYgc3RyaW5nKQogewogICAgIENGSW5kZXggbGVuZ3Ro
ID0gQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKICAgICBDRlN0cmluZ0VuY29kaW5nIGVuY29k
aW5nID0gQ0ZTdHJpbmdHZXRGYXN0ZXN0RW5jb2Rpbmcoc3RyaW5nKTsKQEAgLTU2MSwxMSArNjAy
LDEzIEBAIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGU3RyaW5nUmUKICAgICBudW1D
b252ZXJ0ZWRCeXRlcyA9IENGU3RyaW5nR2V0Qnl0ZXMoc3RyaW5nLCByYW5nZSwgZW5jb2Rpbmcs
IDAsIGZhbHNlLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpLCAmYnVmZmVyTGVuZ3RoKTsK
ICAgICBBU1NFUlQobnVtQ29udmVydGVkQnl0ZXMgPT0gbGVuZ3RoKTsKIAotICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGVuY29kaW5nKTsKLSAgICBlbmNvZGVyIDw8IElQQzo6
RGF0YVJlZmVyZW5jZShidWZmZXIpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGVuY29kaW5nKSA8PCBJUEM6OkRhdGFSZWZlcmVuY2UoYnVmZmVyKTsKIH0KIAotYm9vbCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGU3RyaW5nUmVmPiYgcmVzdWx0KQor
dGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGU3RyaW5nUmVmPjo6ZW5jb2RlPEVuY29kZXI+
KEVuY29kZXImLCBDRlN0cmluZ1JlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZT
dHJpbmdSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyJiwgQ0ZTdHJpbmdSZWYpOworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRy
PENGU3RyaW5nUmVmPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+JiByZXN1bHQpCiB7CiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGVuY29kaW5nRnJvbUlQ
QzsKICAgICBkZWNvZGVyID4+IGVuY29kaW5nRnJvbUlQQzsKQEAgLTU4OCwyNyArNjMxLDMwIEBA
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZVUkxSZWYgdXJsKQordGVt
cGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KK3ZvaWQgQXJndW1lbnRDb2RlcjxDRlVSTFJlZj46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRlVSTFJlZiB1cmwpCiB7CiAgICAgQ0ZVUkxSZWYgYmFz
ZVVSTCA9IENGVVJMR2V0QmFzZVVSTCh1cmwpOwogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Ym9vbD4oYmFzZVVSTCk7CiAgICAgaWYgKGJhc2VVUkwpCi0gICAgICAgIGVuY29kZShlbmNvZGVy
LCBiYXNlVVJMKTsKKyAgICAgICAgZW5jb2RlciA8PCBiYXNlVVJMOwogCiAgICAgV1RGOjpVUkxD
aGFyQnVmZmVyIHVybEJ5dGVzOwogICAgIFdURjo6Z2V0VVJMQnl0ZXModXJsLCB1cmxCeXRlcyk7
Ci0gICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4odXJsQnl0ZXMuZGF0YSgpKSwgdXJsQnl0ZXMuc2l6ZSgpKTsKLSAgICBl
bmNvZGVyIDw8IGRhdGFSZWZlcmVuY2U7CisgICAgZW5jb2RlciA8PCBJUEM6OkRhdGFSZWZlcmVu
Y2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odXJsQnl0ZXMuZGF0YSgpKSwgdXJs
Qnl0ZXMuc2l6ZSgpKTsKIH0KIAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWlu
UHRyPENGVVJMUmVmPiYgcmVzdWx0KQordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGVVJM
UmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBDRlVSTFJlZik7Cit0ZW1wbGF0ZSB2b2lk
IEFyZ3VtZW50Q29kZXI8Q0ZVUkxSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+
KFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiwgQ0ZVUkxSZWYpOworCitib29sIEFyZ3VtZW50Q29k
ZXI8UmV0YWluUHRyPENGVVJMUmVmPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5Q
dHI8Q0ZVUkxSZWY+JiByZXN1bHQpCiB7CiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBiYXNlVVJM
OwogICAgIGJvb2wgaGFzQmFzZVVSTDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0Jhc2VV
UkwpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGhhc0Jhc2VVUkwpIHsKLSAgICAg
ICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgYmFzZVVSTCkpCisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoYmFzZVVSTCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC02
MzEsMTYgKzY3Nyw3NCBAQCBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
U2VjQ2VydGlmaWNhdGVSZWYgY2VydGlmaWNhdGUpCitlbnVtIGNsYXNzIENHQ29sb3JTcGFjZUVu
Y29kaW5nU2NoZW1lIHsgTmFtZSwgUHJvcGVydHlMaXN0IH07CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0dDb2xvclNwYWNlUmVmPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlKQoreworICAgIGlmIChh
dXRvIG5hbWUgPSBDR0NvbG9yU3BhY2VHZXROYW1lKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGVu
Y29kZXIgPDwgQ0dDb2xvclNwYWNlRW5jb2RpbmdTY2hlbWU6Ok5hbWUgPDwgbmFtZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGVuY29kZXIgPDwgQ0dDb2xvclNwYWNlRW5jb2RpbmdT
Y2hlbWU6OlByb3BlcnR5TGlzdCA8PCBhZG9wdENGKENHQ29sb3JTcGFjZUNvcHlQcm9wZXJ0eUxp
c3QoY29sb3JTcGFjZSkpCit9CisKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDR0NvbG9y
U3BhY2VSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIENHQ29sb3JTcGFjZVJlZik7Cit0
ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0dDb2xvclNwYWNlUmVmPjo6ZW5jb2RlPFN0cmVh
bUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIENHQ29sb3JTcGFj
ZVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPj46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiYgcmVz
dWx0KQoreworICAgIENHQ29sb3JTcGFjZUVuY29kaW5nU2NoZW1lIGVuY29kaW5nU2NoZW1lOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW5jb2RpbmdTY2hlbWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzd2l0Y2ggKGVuY29kaW5nU2NoZW1lKSB7CisgICAgY2FzZSBDR0NvbG9y
U3BhY2VFbmNvZGluZ1NjaGVtZTo6TmFtZTogeworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IG5hbWU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0Nv
bG9yU3BhY2VDcmVhdGVXaXRoTmFtZShuYW1lLmdldCgpKSk7CisgICAgICAgIGlmICghY29sb3JT
cGFjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXN1bHQgPSBXVEZN
b3ZlKGNvbG9yU3BhY2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBD
R0NvbG9yU3BhY2VFbmNvZGluZ1NjaGVtZTo6UHJvcGVydHlMaXN0OiB7CisgICAgICAgIFJldGFp
blB0cjxDRlR5cGVSZWY+IHByb3BlcnR5TGlzdDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShwcm9wZXJ0eUxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1
dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aFByb3BlcnR5TGlz
dChwcm9wZXJ0eUxpc3QuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCFjb2xvclNwYWNlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoY29sb3JTcGFj
ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4KK3ZvaWQgQXJndW1lbnRDb2RlcjxTZWNDZXJ0aWZpY2F0ZVJlZj46OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBTZWNDZXJ0aWZpY2F0ZVJlZiBjZXJ0aWZpY2F0ZSkKIHsKLSAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihTZWNDZXJ0aWZpY2F0ZUNvcHlEYXRh
KGNlcnRpZmljYXRlKSk7Ci0gICAgZW5jb2RlKGVuY29kZXIsIGRhdGEuZ2V0KCkpOworICAgIGF1
dG8gZGF0YSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDb3B5RGF0YShjZXJ0aWZpY2F0ZSkpOwor
ICAgIGVuY29kZXIgPDwgZGF0YTsKIH0KIAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
UmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPiYgcmVzdWx0KQordGVtcGxhdGUgdm9pZCBBcmd1
bWVudENvZGVyPFNlY0NlcnRpZmljYXRlUmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBT
ZWNDZXJ0aWZpY2F0ZVJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8U2VjQ2VydGlm
aWNhdGVSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyJiwgU2VjQ2VydGlmaWNhdGVSZWYpOworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0
YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRh
aW5QdHI8U2VjQ2VydGlmaWNhdGVSZWY+JiByZXN1bHQpCiB7CiAgICAgUmV0YWluUHRyPENGRGF0
YVJlZj4gZGF0YTsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBkYXRhKSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXN1bHQg
PSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ3JlYXRlV2l0aERhdGEoMCwgZGF0YS5nZXQoKSkpOwpA
QCAtNjQ4LDIzICs3NTIsMjcgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWlu
UHRyPAogfQogCiAjaWYgSEFWRShTRUNfS0VZQ0hBSU4pCi12b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBTZWNLZXljaGFpbkl0ZW1SZWYga2V5Y2hhaW5JdGVtKQordGVtcGxhdGU8dHlwZW5h
bWUgRW5jb2Rlcj4KK3ZvaWQgQXJndW1lbnRDb2RlcjxTZWNLZXljaGFpbkl0ZW1SZWY+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgU2VjS2V5Y2hhaW5JdGVtUmVmIGtleWNoYWluSXRlbSkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6
OkNhbkFjY2Vzc0NyZWRlbnRpYWxzKSk7CiAKICAgICBDRkRhdGFSZWYgZGF0YTsKICAgICBpZiAo
U2VjS2V5Y2hhaW5JdGVtQ3JlYXRlUGVyc2lzdGVudFJlZmVyZW5jZShrZXljaGFpbkl0ZW0sICZk
YXRhKSA9PSBlcnJTZWNTdWNjZXNzKSB7Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBkYXRhKTsK
KyAgICAgICAgZW5jb2RlciA8PCBkYXRhOwogICAgICAgICBDRlJlbGVhc2UoZGF0YSk7CiAgICAg
fQogfQogCi1ib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjS2V5Y2hh
aW5JdGVtUmVmPiYgcmVzdWx0KQordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPFNlY0tleWNo
YWluSXRlbVJlZj46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgU2VjS2V5Y2hhaW5JdGVtUmVm
KTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxTZWNLZXljaGFpbkl0ZW1SZWY+OjplbmNv
ZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiwgU2Vj
S2V5Y2hhaW5JdGVtUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxTZWNLZXlj
aGFpbkl0ZW1SZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNLZXlj
aGFpbkl0ZW1SZWY+JiByZXN1bHQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFzUHJvY2Vzc1By
aXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NDcmVkZW50aWFscykpOwogCiAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIs
IGRhdGEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIENGRGF0YVJlZiBkcmVmID0gZGF0YS5nZXQoKTsKQEAgLTY4MiwxNyArNzkw
LDIxIEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICNlbmRpZgog
CiAjaWYgSEFWRShTRUNfQUNDRVNTX0NPTlRST0wpCi12b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBTZWNBY2Nlc3NDb250cm9sUmVmIGFjY2Vzc0NvbnRyb2wpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPFNlY0FjY2Vzc0NvbnRyb2xSZWY+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgU2VjQWNjZXNzQ29udHJvbFJlZiBhY2Nlc3NDb250cm9sKQog
ewotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBhZG9wdENGKFNlY0FjY2Vzc0NvbnRy
b2xDb3B5RGF0YShhY2Nlc3NDb250cm9sKSk7CisgICAgYXV0byBkYXRhID0gYWRvcHRDRihTZWNB
Y2Nlc3NDb250cm9sQ29weURhdGEoYWNjZXNzQ29udHJvbCkpOwogICAgIGlmIChkYXRhKQotICAg
ICAgICBlbmNvZGUoZW5jb2RlciwgZGF0YS5nZXQoKSk7CisgICAgICAgIGVuY29kZXIgPDwgZGF0
YTsKIH0KIAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNlY0FjY2Vz
c0NvbnRyb2xSZWY+JiByZXN1bHQpCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8U2VjQWNj
ZXNzQ29udHJvbFJlZj46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgU2VjQWNjZXNzQ29udHJv
bFJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8U2VjQWNjZXNzQ29udHJvbFJlZj46
OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIm
LCBTZWNBY2Nlc3NDb250cm9sUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxT
ZWNBY2Nlc3NDb250cm9sUmVmPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8
U2VjQWNjZXNzQ29udHJvbFJlZj4mIHJlc3VsdCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBkYXRhOwotICAgIGlmICghZGVjb2RlKGRlY29kZXIsIGRhdGEpKQorICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoZGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJlc3VsdCA9IGFk
b3B0Q0YoU2VjQWNjZXNzQ29udHJvbENyZWF0ZUZyb21EYXRhKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGRhdGEuZ2V0KCksIG51bGxwdHIpKTsKQEAgLTcwNCw3ICs4MTYsOCBAQCBib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8CiAjZW5kaWYKIAogI2lmIEhBVkUoU0VDX1RSVVNU
X1NFUklBTElaQVRJT04pCi12b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBTZWNUcnVzdFJl
ZiB0cnVzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8
U2VjVHJ1c3RSZWY+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgU2VjVHJ1c3RSZWYgdHJ1c3Qp
CiB7CiAgICAgYXV0byBkYXRhID0gYWRvcHRDRihTZWNUcnVzdFNlcmlhbGl6ZSh0cnVzdCwgbnVs
bHB0cikpOwogICAgIGlmICghZGF0YSkgewpAQCAtNzEyLDExICs4MjUsMTMgQEAgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgU2VjVHJ1c3RSZQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZW5jb2RlciA8PCB0cnVlOwotICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIGRhdGEuZ2V0
KCkpOworICAgIGVuY29kZXIgPDwgdHJ1ZSA8PCBkYXRhOwogfQogCi1ib29sIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+JiByZXN1bHQpCit0ZW1wbGF0ZSB2
b2lkIEFyZ3VtZW50Q29kZXI8U2VjVHJ1c3RSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYs
IFNlY1RydXN0UmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxTZWNUcnVzdFJlZj46
OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXIm
LCBTZWNUcnVzdFJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjVHJ1c3RS
ZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNUcnVzdFJlZj4mIHJl
c3VsdCkKIHsKICAgICBib29sIGhhc1RydXN0OwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFz
VHJ1c3QpKQpAQCAtNzI2LDcgKzg0MSw3IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFJldGFpblB0cjwKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiB0cnVzdERhdGE7Ci0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCB0cnVzdERhdGEp
KQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUodHJ1c3REYXRhKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgYXV0byB0cnVzdCA9IGFkb3B0Q0YoU2VjVHJ1c3REZXNlcmlhbGl6ZSh0cnVz
dERhdGEuZ2V0KCksIG51bGxwdHIpKTsKQEAgLTc0NCwyOCArODU5LDM3IEBAIG5hbWVzcGFjZSBX
VEYgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPElQQzo6Q0ZUeXBlPiB7CiAgICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBJUEM6OkNGVHlwZSwKLSAgICBJUEM6OkNG
VHlwZTo6Q0ZBcnJheSwKLSAgICBJUEM6OkNGVHlwZTo6Q0ZCb29sZWFuLAotICAgIElQQzo6Q0ZU
eXBlOjpDRkRhdGEsCi0gICAgSVBDOjpDRlR5cGU6OkNGRGF0ZSwKLSAgICBJUEM6OkNGVHlwZTo6
Q0ZEaWN0aW9uYXJ5LAotICAgIElQQzo6Q0ZUeXBlOjpDRk51bGwsCi0gICAgSVBDOjpDRlR5cGU6
OkNGTnVtYmVyLAotICAgIElQQzo6Q0ZUeXBlOjpDRlN0cmluZywKLSAgICBJUEM6OkNGVHlwZTo6
Q0ZVUkwsCi0gICAgSVBDOjpDRlR5cGU6OlNlY0NlcnRpZmljYXRlLAorICAgICAgICBJUEM6OkNG
VHlwZSwKKyAgICAgICAgSVBDOjpDRlR5cGU6OkNGQXJyYXksCisgICAgICAgIElQQzo6Q0ZUeXBl
OjpDRkJvb2xlYW4sCisgICAgICAgIElQQzo6Q0ZUeXBlOjpDRkRhdGEsCisgICAgICAgIElQQzo6
Q0ZUeXBlOjpDRkRhdGUsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpDRkRpY3Rpb25hcnksCisgICAg
ICAgIElQQzo6Q0ZUeXBlOjpDRk51bGwsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpDRk51bWJlciwK
KyAgICAgICAgSVBDOjpDRlR5cGU6OkNGU3RyaW5nLAorICAgICAgICBJUEM6OkNGVHlwZTo6Q0ZV
UkwsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpTZWNDZXJ0aWZpY2F0ZSwKICNpZiBIQVZFKFNFQ19L
RVlDSEFJTikKLSAgICBJUEM6OkNGVHlwZTo6U2VjS2V5Y2hhaW5JdGVtLAorICAgICAgICBJUEM6
OkNGVHlwZTo6U2VjS2V5Y2hhaW5JdGVtLAogI2VuZGlmCiAjaWYgSEFWRShTRUNfQUNDRVNTX0NP
TlRST0wpCi0gICAgSVBDOjpDRlR5cGU6OlNlY0FjY2Vzc0NvbnRyb2wsCisgICAgICAgIElQQzo6
Q0ZUeXBlOjpTZWNBY2Nlc3NDb250cm9sLAogI2VuZGlmCiAjaWYgSEFWRShTRUNfVFJVU1RfU0VS
SUFMSVpBVElPTikKLSAgICBJUEM6OkNGVHlwZTo6U2VjVHJ1c3QsCisgICAgICAgIElQQzo6Q0ZU
eXBlOjpTZWNUcnVzdCwKICNlbmRpZgotICAgIElQQzo6Q0ZUeXBlOjpOdWxscHRyLAotICAgIElQ
Qzo6Q0ZUeXBlOjpVbmtub3duCisgICAgICAgIElQQzo6Q0ZUeXBlOjpDR0NvbG9yU3BhY2UsCisg
ICAgICAgIElQQzo6Q0ZUeXBlOjpOdWxscHRyLAorICAgICAgICBJUEM6OkNGVHlwZTo6VW5rbm93
bgorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPElQQzo6Q0dDb2xv
clNwYWNlRW5jb2RpbmdTY2hlbWU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAor
ICAgICAgICBJUEM6OkNHQ29sb3JTcGFjZUVuY29kaW5nU2NoZW1lLAorICAgICAgICBJUEM6OkNH
Q29sb3JTcGFjZUVuY29kaW5nU2NoZW1lOjpOYW1lLAorICAgICAgICBJUEM6OkNHQ29sb3JTcGFj
ZUVuY29kaW5nU2NoZW1lOjpQcm9wZXJ0eUxpc3QKICAgICA+OwogfTsKIApJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuaAkocmV2aXNpb24gMjc3ODk5KQor
KysgU291cmNlL1dlYktpdC9TaGFyZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw5ICsyMyw5IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBBcmd1bWVudENvZGVyc0NGX2gKLSNkZWZpbmUgQXJndW1lbnRDb2Rl
cnNDRl9oCisjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXIuaCIKICNpbmNs
dWRlIDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZS5oPgogI2luY2x1ZGUgPFNlY3VyaXR5L1NlY1Ry
dXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtMzQsNzEgKzM0LDE1NiBAQAog
I2luY2x1ZGUgPFNlY3VyaXR5L1NlY0tleWNoYWluSXRlbS5oPgogI2VuZGlmCiAKK3R5cGVkZWYg
c3RydWN0IENHQ29sb3JTcGFjZSogQ0dDb2xvclNwYWNlUmVmOworCiBuYW1lc3BhY2UgSVBDIHsK
IAogY2xhc3MgRW5jb2RlcjsKIGNsYXNzIERlY29kZXI7CiAKKy8vIE5PVEU6IFRoZXNlIGNvZGVy
cyBhcmUgc3RydWN0dXJlZCBzdWNoIHRoYXQgdGhleSBleHBvc2UgZW5jb2RlciBmdW5jdGlvbnMg
Zm9yIGJvdGggQ0ZUeXBlIGFuZCBSZXRhaW5QdHI8Q0ZUeXBlPgorLy8gYnV0IG9ubHkgYSBkZWNv
ZGVyIG9ubHkgZm9yIFJldGFpblB0cjxDRlR5cGU+LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
c3RydWN0IENGUmV0YWluUHRyQXJndW1lbnRDb2RlciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJldGFp
blB0cjxUPiYgcmV0YWluUHRyKQorICAgIHsKKyAgICAgICAgQXJndW1lbnRDb2RlcjxUPjo6ZW5j
b2RlKGVuY29kZXIsIHJldGFpblB0ci5nZXQoKSk7CisgICAgfQorfTsKKworLy8gQ0ZUeXBlUmVm
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENGVHlwZVJlZj4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZUeXBl
UmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENG
VHlwZVJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPENGVHlwZVJlZj4geworICAgIHN0
YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxD
RlR5cGVSZWY+Jik7Cit9OworCiAvLyBDRkFycmF5UmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwg
Q0ZBcnJheVJlZik7Ci1XQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJl
dGFpblB0cjxDRkFycmF5UmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8Q0ZBcnJheVJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZBcnJheVJlZik7Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRkFycmF5UmVmPj4gOiBDRlJldGFpblB0ckFy
Z3VtZW50Q29kZXI8Q0ZBcnJheVJlZj4geworICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkFycmF5UmVmPiYpOworfTsKIAogLy8g
Q0ZCb29sZWFuUmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZCb29sZWFuUmVmKTsKLVdBUk5f
VU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGQm9vbGVhblJl
Zj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENGQm9vbGVhblJl
Zj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgQ0ZCb29sZWFuUmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8UmV0YWluUHRyPENGQm9vbGVhblJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVy
PENGQm9vbGVhblJlZj4geworICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkJvb2xlYW5SZWY+Jik7Cit9OwogCiAvLyBDRkRhdGFS
ZWYKLXZvaWQgZW5jb2RlKEVuY29kZXImLCBDRkRhdGFSZWYpOwotV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgcmVzdWx0KTsKK3Rl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0ZEYXRhUmVmPiB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBDRkRhdGFSZWYp
OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZEYXRh
UmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZEYXRhUmVmPiB7CisgICAgc3RhdGlj
IFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGRGF0
YVJlZj4mKTsKK307CiAKIC8vIENGRGF0ZVJlZgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGRGF0
ZVJlZik7Ci1XQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0
cjxDRkRhdGVSZWY+JiByZXN1bHQpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxD
RkRhdGVSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIENGRGF0ZVJlZik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFJldGFpblB0cjxDRkRhdGVSZWY+PiA6IENGUmV0YWluUHRyQXJndW1lbnRDb2Rl
cjxDRkRhdGVSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBSZXRhaW5QdHI8Q0ZEYXRlUmVmPiYpOworfTsKIAogLy8gQ0ZEaWN0aW9uYXJ5
UmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZEaWN0aW9uYXJ5UmVmKTsKLVdBUk5fVU5VU0VE
X1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4m
IHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENGRGljdGlvbmFyeVJl
Zj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgQ0ZEaWN0aW9uYXJ5UmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVu
dENvZGVyPENGRGljdGlvbmFyeVJlZj4geworICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+Jik7Cit9Owog
CiAvLyBDRk51bWJlclJlZgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGTnVtYmVyUmVmKTsKLVdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGTnVtYmVy
UmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0ZOdW1iZXJS
ZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIENGTnVtYmVyUmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8UmV0YWluUHRyPENGTnVtYmVyUmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8
Q0ZOdW1iZXJSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+Jik7Cit9OwogCiAvLyBDRlN0cmluZ1Jl
Zgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGU3RyaW5nUmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGU3RyaW5nUmVmPiYgcmVzdWx0KTsK
LQotLy8gQ0ZUeXBlUmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZUeXBlUmVmKTsKLVdBUk5f
VU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGVHlwZVJlZj4m
IHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENGU3RyaW5nUmVmPiB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXImLCBDRlN0cmluZ1JlZik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPENGU3Ry
aW5nUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNv
ZGVyJiwgUmV0YWluUHRyPENGU3RyaW5nUmVmPiYpOworfTsKIAogLy8gQ0ZVUkxSZWYKLXZvaWQg
ZW5jb2RlKEVuY29kZXImLCBDRlVSTFJlZik7Ci1XQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGUoRGVjb2RlciYsIFJldGFpblB0cjxDRlVSTFJlZj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPENGVVJMUmVmPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5j
b2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBDRlVSTFJlZik7Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRlVSTFJlZj4+IDogQ0ZSZXRh
aW5QdHJBcmd1bWVudENvZGVyPENGVVJMUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGVVJMUmVmPiYpOworfTsKKwor
Ly8gQ0dDb2xvclNwYWNlUmVmCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENHQ29s
b3JTcGFjZVJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiwgQ0dDb2xvclNwYWNlUmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4+IDogQ0ZSZXRhaW5Q
dHJBcmd1bWVudENvZGVyPENHQ29sb3JTcGFjZVJlZj4geworICAgIHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
Jik7Cit9OwogCiAvLyBTZWNDZXJ0aWZpY2F0ZVJlZgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIFNl
Y0NlcnRpZmljYXRlUmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVy
JiwgUmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8U2VjQ2VydGlmaWNhdGVSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIFNlY0NlcnRpZmljYXRl
UmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPFNl
Y0NlcnRpZmljYXRlUmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8U2VjQ2VydGlmaWNh
dGVSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBSZXRhaW5QdHI8U2VjQ2VydGlmaWNhdGVSZWY+Jik7Cit9OwogCiAjaWYgSEFWRShTRUNf
S0VZQ0hBSU4pCiAvLyBTZWNLZXljaGFpbkl0ZW1SZWYKLXZvaWQgZW5jb2RlKEVuY29kZXImLCBT
ZWNLZXljaGFpbkl0ZW1SZWYpOwotV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPiB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBTZWNLZXljaGFp
bkl0ZW1SZWYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5Q
dHI8U2VjS2V5Y2hhaW5JdGVtUmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8U2VjS2V5
Y2hhaW5JdGVtUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29k
ZShEZWNvZGVyJiwgUmV0YWluUHRyPFNlY0tleWNoYWluSXRlbVJlZj4mKTsKK307CiAjZW5kaWYK
IAogI2lmIEhBVkUoU0VDX0FDQ0VTU19DT05UUk9MKQogLy8gU2VjQWNjZXNzQ29udHJvbFJlZgot
dm9pZCBlbmNvZGUoRW5jb2RlciYsIFNlY0FjY2Vzc0NvbnRyb2xSZWYpOwotV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8U2VjQWNjZXNzQ29udHJvbFJl
Zj4mIHJlc3VsdCk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFNlY0FjY2Vzc0Nv
bnRyb2xSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIFNlY0FjY2Vzc0NvbnRyb2xSZWYpOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjQWNjZXNzQ29udHJvbFJlZj4+IDogQ0ZS
ZXRhaW5QdHJBcmd1bWVudENvZGVyPFNlY0FjY2Vzc0NvbnRyb2xSZWY+IHsKKyAgICBzdGF0aWMg
V0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8U2VjQWNj
ZXNzQ29udHJvbFJlZj4mKTsKK307CiAjZW5kaWYKIAogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklB
TElaQVRJT04pCiAvLyBTZWNUcnVzdFJlZgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIFNlY1RydXN0
UmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRy
PFNlY1RydXN0UmVmPiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxTZWNUcnVz
dFJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiwgU2VjVHJ1c3RSZWYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+PiA6IENGUmV0YWluUHRyQXJndW1lbnRDb2Rl
cjxTZWNUcnVzdFJlZj4geworICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNv
ZGUoRGVjb2RlciYsIFJldGFpblB0cjxTZWNUcnVzdFJlZj4mKTsKK307CiAjZW5kaWYKIAogQ0ZU
eXBlUmVmIHRva2VuTnVsbHB0clR5cGVSZWYoKTsKIAogfSAvLyBuYW1lc3BhY2UgSVBDCi0KLSNl
bmRpZiAvLyBBcmd1bWVudENvZGVyc0NGX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9Db2xvclNwYWNlRGF0YS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvQ29sb3JTcGFjZURhdGEubW0JKHJldmlzaW9uIDI3Nzg5OSkKKysrIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNzcgKzMz
LDI4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1lbnVtIEVuY29kZWREYXRhVHlwZSB7Ci0g
ICAgTnVsbCwKLSAgICBOYW1lLAotICAgIERhdGEsCi19OwotCiB2b2lkIENvbG9yU3BhY2VEYXRh
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGlmIChjZ0NvbG9y
U3BhY2UpIHsKLSAgICAgICAgLy8gVHJ5IHRvIGVuY29kZSB0aGUgbmFtZS4KLSAgICAgICAgaWYg
KFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ29weU5h
bWUoY2dDb2xvclNwYWNlLmdldCgpKSkpIHsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgTmFtZTsK
LSAgICAgICAgICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIG5hbWUuZ2V0KCkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmFpbGluZyB0aGF0LCBqdXN0IGVu
Y29kZSB0aGUgSUNDIGRhdGEuCi0gICAgICAgIGlmIChSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm9m
aWxlRGF0YSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ29weUlDQ0RhdGEoY2dDb2xvclNwYWNlLmdl
dCgpKSkpIHsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgRGF0YTsKLSAgICAgICAgICAgIElQQzo6
ZW5jb2RlKGVuY29kZXIsIHByb2ZpbGVEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBjb2xvciBzcGFjZSB3YXMgbnVsbCBvciBm
YWlsZWQgdG8gYmUgZW5jb2RlZC4KLSAgICBlbmNvZGVyIDw8IE51bGw7CisgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxib29sPihjZ0NvbG9yU3BhY2UpOworICAgIGlmIChjZ0NvbG9yU3BhY2Up
CisgICAgICAgIGVuY29kZXIgPDwgY2dDb2xvclNwYWNlOwogfQogCiBib29sIENvbG9yU3BhY2VE
YXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBDb2xvclNwYWNlRGF0YSYgY29sb3JT
cGFjZURhdGEpCiB7Ci0gICAgRW5jb2RlZERhdGFUeXBlIGRhdGFUeXBlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoZGF0YVR5cGUpKQorICAgIGJvb2wgaGFzQ0dDb2xvclNwYWNlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaGFzQ0dDb2xvclNwYWNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNhc2UgTnVsbDoKLSAgICAgICAgY29s
b3JTcGFjZURhdGEuY2dDb2xvclNwYWNlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgY2FzZSBOYW1lOiB7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZTsK
LSAgICAgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBuYW1lKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBjb2xvclNwYWNlRGF0YS5jZ0NvbG9yU3BhY2UgPSBhZG9w
dENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKG5hbWUuZ2V0KCkpKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgRGF0YTogewotICAgICAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBkYXRhOwotICAgICAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIGRhdGEpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNvbG9yU3BhY2VEYXRhLmNnQ29s
b3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aElDQ0RhdGEoZGF0YS5nZXQo
KSkpOworICAgIGlmICghaGFzQ0dDb2xvclNwYWNlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgfQogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGNvbG9yU3BhY2VEYXRhLmNnQ29sb3JTcGFjZSA9IFdURk1vdmUoY29sb3JTcGFjZSk7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJLaXQ6OkVuY29kZWREYXRh
VHlwZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYktpdDo6
RW5jb2RlZERhdGFUeXBlLAotICAgICAgICBXZWJLaXQ6OkVuY29kZWREYXRhVHlwZTo6TnVsbCwK
LSAgICAgICAgV2ViS2l0OjpFbmNvZGVkRGF0YVR5cGU6Ok5hbWUsCi0gICAgICAgIFdlYktpdDo6
RW5jb2RlZERhdGFUeXBlOjpEYXRhCi0gICAgPjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpJ
bmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NlY0l0ZW1SZXF1ZXN0RGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NlY0l0ZW1SZXF1ZXN0RGF0YS5j
cHAJKHJldmlzaW9uIDI3Nzg5OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TZWNJdGVt
UmVxdWVzdERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMSArNTAsMTEgQEAgdm9pZCBT
ZWNJdGVtUmVxdWVzdERhdGE6OmVuY29kZShJUEM6OkVuYwogCiAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxib29sPihtX3F1ZXJ5RGljdGlvbmFyeSk7CiAgICAgaWYgKG1fcXVlcnlEaWN0aW9u
YXJ5KQotICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBtX3F1ZXJ5RGljdGlvbmFyeS5nZXQo
KSk7CisgICAgICAgIGVuY29kZXIgPDwgbV9xdWVyeURpY3Rpb25hcnk7CiAKICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGJvb2w+KG1fYXR0cmlidXRlc1RvTWF0Y2gpOwogICAgIGlmIChtX2F0
dHJpYnV0ZXNUb01hdGNoKQotICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBtX2F0dHJpYnV0
ZXNUb01hdGNoLmdldCgpKTsKKyAgICAgICAgZW5jb2RlciA8PCBtX2F0dHJpYnV0ZXNUb01hdGNo
OwogfQogCiBib29sIFNlY0l0ZW1SZXF1ZXN0RGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVj
b2RlciwgU2VjSXRlbVJlcXVlc3REYXRhJiBzZWNJdGVtUmVxdWVzdERhdGEpCkBAIC02NiwxNCAr
NjYsMTQgQEAgYm9vbCBTZWNJdGVtUmVxdWVzdERhdGE6OmRlY29kZShJUEM6OkRlYwogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoZXhwZWN0UXVlcnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoZXhwZWN0UXVlcnkgJiYgIUlQQzo6ZGVjb2RlKGRlY29kZXIsIHNlY0l0ZW1SZXF1
ZXN0RGF0YS5tX3F1ZXJ5RGljdGlvbmFyeSkpCisgICAgaWYgKGV4cGVjdFF1ZXJ5ICYmICFkZWNv
ZGVyLmRlY29kZShzZWNJdGVtUmVxdWVzdERhdGEubV9xdWVyeURpY3Rpb25hcnkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgYm9vbCBleHBlY3RBdHRyaWJ1dGVzOwogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoZXhwZWN0QXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKLSAgICBpZiAoZXhwZWN0QXR0cmlidXRlcyAmJiAhSVBDOjpkZWNvZGUoZGVjb2Rl
ciwgc2VjSXRlbVJlcXVlc3REYXRhLm1fYXR0cmlidXRlc1RvTWF0Y2gpKQorICAgIGlmIChleHBl
Y3RBdHRyaWJ1dGVzICYmICFkZWNvZGVyLmRlY29kZShzZWNJdGVtUmVxdWVzdERhdGEubV9hdHRy
aWJ1dGVzVG9NYXRjaCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4g
dHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TZWNJdGVtUmVzcG9uc2VEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvU2VjSXRlbVJlc3Bv
bnNlRGF0YS5jcHAJKHJldmlzaW9uIDI3Nzg5OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9TZWNJdGVtUmVzcG9uc2VEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QCB2b2lkIFNlY0l0ZW1SZXNwb25zZURhdGE6OmVuY29kZShJUEM6OkVuCiAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxpbnQ2NF90PihtX3Jlc3VsdENvZGUpOwogICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Ym9vbD4obV9yZXN1bHRPYmplY3QpOwogICAgIGlmIChtX3Jlc3VsdE9iamVjdCkK
LSAgICAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbV9yZXN1bHRPYmplY3QuZ2V0KCkpOworICAg
ICAgICBlbmNvZGVyIDw8IG1fcmVzdWx0T2JqZWN0OwogfQogCiBPcHRpb25hbDxTZWNJdGVtUmVz
cG9uc2VEYXRhPiBTZWNJdGVtUmVzcG9uc2VEYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyKQpAQCAtNTYsNyArNTYsNyBAQCBPcHRpb25hbDxTZWNJdGVtUmVzcG9uc2VEYXRhPiBTZWNJ
dGVtUmVzCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBSZXRhaW5QdHI8Q0ZU
eXBlUmVmPiByZXN1bHQ7Ci0gICAgaWYgKGV4cGVjdFJlc3VsdE9iamVjdCAmJiAhSVBDOjpkZWNv
ZGUoZGVjb2RlciwgcmVzdWx0KSkKKyAgICBpZiAoZXhwZWN0UmVzdWx0T2JqZWN0ICYmICFkZWNv
ZGVyLmRlY29kZShyZXN1bHQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
cmV0dXJuIHt7IHN0YXRpY19jYXN0PE9TU3RhdHVzPihyZXN1bHRDb2RlKSwgV1RGTW92ZShyZXN1
bHQpIH19OwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENv
ZGVyc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCShyZXZpc2lvbiAyNzc4OTkpCisrKyBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC01MSwxMSArNTEsMTEgQEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRl
SQogICAgIHN3aXRjaCAoY2VydGlmaWNhdGVJbmZvLnR5cGUoKSkgewogI2lmIEhBVkUoU0VDX1RS
VVNUX1NFUklBTElaQVRJT04pCiAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5
cGU6OlRydXN0OgotICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZUluZm8u
dHJ1c3QoKSk7CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLnRydXN0KCk7CiAg
ICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86
OlR5cGU6OkNlcnRpZmljYXRlQ2hhaW46Ci0gICAgICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIGNl
cnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkpOworICAgICAgICBlbmNvZGVyIDw8IGNl
cnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpOb25lOgogICAgICAgICAvLyBEbyBu
b3RoaW5nLgpAQCAtNzMsNyArNzMsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJCiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKICAgICBjYXNlIFdl
YkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3Q6IHsKICAgICAgICAgUmV0YWluUHRy
PFNlY1RydXN0UmVmPiB0cnVzdDsKLSAgICAgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCB0
cnVzdCkgfHwgIXRydXN0KQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRydXN0KSB8fCAh
dHJ1c3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2VydGlmaWNhdGVJ
bmZvID0gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUodHJ1c3QpKTsKQEAgLTgyLDcg
KzgyLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSQogI2VuZGlm
CiAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OkNlcnRpZmljYXRlQ2hh
aW46IHsKICAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNlcnRpZmljYXRlQ2hhaW47Ci0g
ICAgICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgY2VydGlmaWNhdGVDaGFpbikgfHwgIWNl
cnRpZmljYXRlQ2hhaW4pCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2VydGlmaWNhdGVD
aGFpbikgfHwgIWNlcnRpZmljYXRlQ2hhaW4pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgY2VydGlmaWNhdGVJbmZvID0gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1v
dmUoY2VydGlmaWNhdGVDaGFpbikpOwpAQCAtMTY2LDcgKzE2Niw3IEBAIHN0YXRpYyB2b2lkIGVu
Y29kZU5TRXJyb3IoRW5jb2RlciYgZW5jb2QKICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUo
ZmlsdGVyZWRVc2VySW5mby5nZXQoKSwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKU5TVVJMRXJyb3JG
YWlsaW5nVVJMUGVlclRydXN0RXJyb3JLZXksIHBlZXJUcnVzdCk7CiAjZW5kaWYKIAotICAgIElQ
Qzo6ZW5jb2RlKGVuY29kZXIsIGZpbHRlcmVkVXNlckluZm8uZ2V0KCkpOworICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihmaWx0ZXJlZFVzZXJJbmZvLmdldCgpKTsK
IAogICAgIGlmIChpZCB1bmRlcmx5aW5nRXJyb3IgPSBbdXNlckluZm8gb2JqZWN0Rm9yS2V5Ok5T
VW5kZXJseWluZ0Vycm9yS2V5XSkgewogICAgICAgICBBU1NFUlQoW3VuZGVybHlpbmdFcnJvciBp
c0tpbmRPZkNsYXNzOltOU0Vycm9yIGNsYXNzXV0pOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRp
YyBSZXRhaW5QdHI8TlNFcnJvcj4gZGVjb2RlTlNFcnJvcigKICAgICAgICAgcmV0dXJuIG5pbDsK
IAogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHVzZXJJbmZvOwotICAgIGlmICghSVBD
OjpkZWNvZGUoZGVjb2RlciwgdXNlckluZm8pIHx8ICF1c2VySW5mbykKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHVzZXJJbmZvKSB8fCAhdXNlckluZm8pCiAgICAgICAgIHJldHVybiBuaWw7CiAK
ICAgICBib29sIGhhc1VuZGVybHlpbmdFcnJvciA9IGZhbHNlOwpAQCAtMzc3LDEzICszNzcsMTMg
QEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvbnRlbnRGaWx0ZQogewogICAgIGF1dG8g
YXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZEFyY2hpdmVyIGFsbG9jXSBpbml0UmVxdWlyaW5n
U2VjdXJlQ29kaW5nOllFU10pOwogICAgIGNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlci5lbmNv
ZGUoYXJjaGl2ZXIuZ2V0KCkpOwotICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBD
RkRhdGFSZWYpYXJjaGl2ZXIuZ2V0KCkuZW5jb2RlZERhdGEpOworICAgIGVuY29kZXIgPDwgKF9f
YnJpZGdlIENGRGF0YVJlZilhcmNoaXZlci5nZXQoKS5lbmNvZGVkRGF0YTsKIH0KIAogYm9vbCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcj46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIm
IGNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcikKIHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBkYXRhOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgZGF0YSkgfHwgIWRhdGEpCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhKSB8fCAhZGF0YSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgYXV0byB1bmFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRVbmFyY2hpdmVy
IGFsbG9jXSBpbml0Rm9yUmVhZGluZ0Zyb21EYXRhOihfX2JyaWRnZSBOU0RhdGEgKilkYXRhLmdl
dCgpIGVycm9yOm51bGxwdHJdKTsK
</data>
<flag name="commit-queue"
          id="450549"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429379</attachid>
            <date>2021-05-21 18:04:12 -0700</date>
            <delta_ts>2021-05-21 19:23:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226112-20210521180411.patch</filename>
            <type>text/plain</type>
            <size>57512</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc5MDIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAyMS0wNS0yMSAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBDR0NvbG9yU3BhY2VSZWYgYXJn
dW1lbnQgY29kaW5nIG1hdGNoIG90aGVyIENGIG9iamVjdHMgYW5kIHVzZSBDR0NvbG9yU3BhY2VD
cmVhdGVXaXRoUHJvcGVydHlMaXN0IGZvciBmYWxsYmFjaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgVGhpcyBpcyBhIHByZWN1cnNvciB0byBzb21lIGNvbG9y
IHNwYWNlIHR5cGUgdW5pZmljYXRpb24uIFRoaXMgY2hhbmdlOgorICAgICAgICAKKyAgICAgICAg
LSBNb2Rlcm5pemVzIENGIGFydWdtZW50IGNvZGVycyB0byB1c2UgQXJndW1lbnRDb2RlciBzcGVj
aWFsaXphdGlvbi4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHdlIG5vdyBzdXBwb3J0IGVuY29k
aW5nIENGIHR5cGVzIGJvdGggYXMgcGxhaW4gdHlwZXMgYW5kIFJldGFpblB0cjw+IHR5cGVzLCB3
aXRoCisgICAgICAgICAgZGVjb2RpbmcgYmVpbmcga2VwdCBvbmx5IHN1cHBvcmluZyBSZXRhaW5Q
dHI8PnMsIGFzIGRlY29kaW5nIGludG8gbm9uLXNtYXJ0IHBvaW50ZXIKKyAgICAgICAgICBpcyBu
b3QgdmVyeSB1c2VmdWwuCisgICAgICAgIC0gTW92ZSBDR0NvbG9yU3BhY2VSZWYgY29kaW5nIHRv
IEFyZ3VtZW50Q29kZXJzQ0YgYW5kIHVzZSBDR0NvbG9yU3BhY2VDb3B5UHJvcGVydHlMaXN0Cisg
ICAgICAgICAgYW5kIENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhQcm9wZXJ0eUxpc3QgYXMgdGhlIGZh
bGxiYWNrIGNvZGluZyAoaWYgdGhlcmUgaXMgbm8gbmFtZSksCisgICAgICAgICAgbWF0Y2hpbmcg
d2hhdCBvdGhlciBsaWJyYXJpZXMgb24gbWFjT1MgYW5kIGlPUyBkby4KKyAgICAgICAgLSBTd2l0
Y2ggQ29sb3JTcGFjZURhdGEgdG8gYmUgYSBzdHJ1Y3Qgd3JhcHBpbmcgYW4gT3B0aW9uYWw8UmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4+CisgICAgICAgICAgYW5kIHVzZSB0aGUgbmV3IHNoYXJl
ZCBjb2RpbmcuIFRoaXMgd2lsbCBiZSByZXBsYWNlZCBlbnRpcmVseSBpbiBzdWJzZXF1ZW50IGNo
YW5nZXMKKyAgICAgICAgICBzbyBJIGRpZG4ndCB3YW50IHRvIGNoYW5nZSB0aGlzIHRvbyBtdWNo
IG5vdy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAg
ICAqIFNoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tOgorICAgICAgICAoSVBDOjpl
bmNvZGVEYXRhSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNvZGVEYXRhSW50ZXJuYWwpOgor
ICAgICAgICAoSVBDOjplbmNvZGVEYXRlSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNvZGVE
YXRlSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjplbmNvZGVOdW1iZXJJbnRlcm5hbCk6CisgICAg
ICAgIChJUEM6OmRlY29kZU51bWJlckludGVybmFsKToKKyAgICAgICAgKElQQzo6ZW5jb2RlU2Vj
dXJlQ29kaW5nSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjpkZWNvZGVTZWN1cmVDb2RpbmdJbnRl
cm5hbCk6CisgICAgICAgIChJUEM6OmVuY29kZVN0cmluZ0ludGVybmFsKToKKyAgICAgICAgKElQ
Qzo6ZGVjb2RlU3RyaW5nSW50ZXJuYWwpOgorICAgICAgICAoSVBDOjplbmNvZGVVUkxJbnRlcm5h
bCk6CisgICAgICAgIChJUEM6OmRlY29kZVVSTEludGVybmFsKToKKyAgICAgICAgKiBTaGFyZWQv
Q29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxSZWY8Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAq
IFNoYXJlZC9Gb250SW5mby5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZvbnRJbmZvOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpGb250SW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBT
aGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVj
b2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRl
Y29kZSk6CisgICAgICAgICogU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwOgorICAgICAg
ICAoSVBDOjp0eXBlRnJvbUNGVHlwZVJlZik6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
Q0ZUeXBlUmVmPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXRhaW5Q
dHI8Q0ZUeXBlUmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q0ZB
cnJheVJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWluUHRy
PENGQXJyYXlSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDRkJv
b2xlYW5SZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRkJvb2xlYW5SZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxD
RkRhdGFSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRkRhdGFSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDRkRh
dGVSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFpblB0cjxD
RkRhdGVSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDRkRpY3Rp
b25hcnlSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxDRk51bWJlclJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0
YWluUHRyPENGTnVtYmVyUmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8Q0ZTdHJpbmdSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4+OjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENv
ZGVyPENGVVJMUmVmPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXRh
aW5QdHI8Q0ZVUkxSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxD
R0NvbG9yU3BhY2VSZWY+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxTZWNDZXJ0aWZpY2F0ZVJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPj46OmRlY29kZSk6CisgICAgICAg
IChJUEM6OkFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPjo6ZW5jb2RlKToKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPj46OmRl
Y29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U2VjQWNjZXNzQ29udHJvbFJlZj46
OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPFNlY0FjY2Vz
c0NvbnRyb2xSZWY+Pjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTZWNU
cnVzdFJlZj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmV0YWluUHRy
PFNlY1RydXN0UmVmPj46OmRlY29kZSk6CisgICAgICAgIChJUEM6OmVuY29kZSk6IERlbGV0ZWQu
CisgICAgICAgIChJUEM6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL2NmL0Fy
Z3VtZW50Q29kZXJzQ0YuaDoKKyAgICAgICAgKElQQzo6Q0ZSZXRhaW5QdHJBcmd1bWVudENvZGVy
OjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvQ29sb3JTcGFjZURhdGEubW06CisgICAg
ICAgIChXZWJLaXQ6OkNvbG9yU3BhY2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpDb2xvclNwYWNlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgICogU2hhcmVkL21hYy9TZWNJdGVtUmVxdWVzdERhdGEuY3BwOgorICAgICAgICAoV2ViS2l0
OjpTZWNJdGVtUmVxdWVzdERhdGE6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNl
Y0l0ZW1SZXF1ZXN0RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1NlY0l0ZW1S
ZXNwb25zZURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpTZWNJdGVtUmVzcG9uc2VEYXRhOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTZWNJdGVtUmVzcG9uc2VEYXRhOjpkZWNv
ZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tOgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVu
Y29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJ
bmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6ZW5jb2RlTlNFcnJvcik6CisgICAgICAgIChJ
UEM6OmRlY29kZU5TRXJyb3IpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6Q29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyPjo6ZGVjb2Rl
KToKKwogMjAyMS0wNS0yMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbQ29jb2FdIEV4cGFuZCBJT0tpdCBtZXRob2QgZmlsdGVycyB0byBjb3ZlciBpdGVt
cyBlbmNvdW50ZXJlZCBkdXJpbmcgdGVzdGluZwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAJKHJldmlzaW9uIDI3NzkwMikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmUKICAgICBlbmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xz
OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQnVuZGxlSWRl
bnRpZmllcjsKLSAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQo
KSk7CisgICAgZW5jb2RlciA8PCBuZXR3b3JrQVRTQ29udGV4dDsKICNlbmRpZgogI2lmIFVTRShT
T1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwpAQCAtMTE1LDcgKzExNSw3
IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51aVByb2Nlc3NCdW5kbGVJ
ZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghSVBDOjpkZWNvZGUo
ZGVjb2RlciwgcmVzdWx0Lm5ldHdvcmtBVFNDb250ZXh0KSkKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5uZXR3b3JrQVRTQ29udGV4dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNl
bmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24g
Mjc3OTAyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNy
ZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9p
ZCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVyczo6ZQogICAgIGVuY29kZXIgPDwgYm91
bmRJbnRlcmZhY2VJZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgYWxsb3dzQ2VsbHVsYXJBY2Nl
c3M7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcHJveHlD
b25maWd1cmF0aW9uLmdldCgpKTsKKyAgICBlbmNvZGVyIDw8IHByb3h5Q29uZmlndXJhdGlvbjsK
ICAgICBlbmNvZGVyIDw8IHNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKICAgICBl
bmNvZGVyIDw8IHNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcjsKICAgICBlbmNv
ZGVyIDw8IGF0dHJpYnV0ZWRCdW5kbGVJZGVudGlmaWVyOwpAQCAtMTA4LDcgKzEwOCw3IEBAIE9w
dGlvbmFsPE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXIKICAgICAKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eUNvbmZpZ3VyYXRp
b247Ci0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBwcm94eUNvbmZpZ3VyYXRpb24pKQor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocHJveHlDb25maWd1cmF0aW9uKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBPcHRpb25hbDxTdHJpbmc+IHNvdXJjZUFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0ZvbnRJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Gb250SW5mby5jcHAJ
KHJldmlzaW9uIDI3NzkwMikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0ZvbnRJbmZvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCB2b2lkIEZvbnRJbmZvOjplbmNvZGUoSVBD
OjpFbmNvZGVyJiBlbmNvCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxib29sPihmb250QXR0cmlidXRlRGljdGlvbmFyeSk7CiAgICAgaWYgKGZvbnRBdHRy
aWJ1dGVEaWN0aW9uYXJ5KQotICAgICAgICBJUEM6OmVuY29kZShlbmNvZGVyLCBmb250QXR0cmli
dXRlRGljdGlvbmFyeS5nZXQoKSk7CisgICAgICAgIGVuY29kZXIgPDwgZm9udEF0dHJpYnV0ZURp
Y3Rpb25hcnk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmNvZGVyKTsKICNlbmRpZgpAQCAt
NTUsNyArNTUsNyBAQCBib29sIEZvbnRJbmZvOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvCiAg
ICAgaWYgKCFoYXNGb250QXR0cmlidXRlRGljdGlvbmFyeSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIGZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVE
aWN0aW9uYXJ5KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZvbnRJbmZvLmZvbnRBdHRyaWJ1
dGVEaWN0aW9uYXJ5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oZGVjb2Rlcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjc3OTAyKQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmVuY29kCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIElQQzo6ZW5j
b2RlKGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKKyAgICBlbmNvZGVyIDw8IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXQVlMQU5EKQpAQCAtMzg3
LDcgKzM4Nyw3IEBAIGJvb2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2QKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVy
LCBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnND
b2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVu
dENvZGVyc0NvY29hLm1tCShyZXZpc2lvbiAyNzc5MDIpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsMTMg
KzMwNiwxMyBAQCBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlCiAKIHN0
YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVEYXRhSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNE
YXRhICpkYXRhKQogewotICAgIGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2UgQ0ZEYXRhUmVmKWRh
dGEpOworICAgIGVuY29kZXIgPDwgKF9fYnJpZGdlIENGRGF0YVJlZilkYXRhOwogfQogCiBzdGF0
aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZURhdGFJbnRlcm5hbChEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgaWYg
KCFkZWNvZGUoZGVjb2RlciwgZGF0YSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhKSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICByZXR1cm4geyBhZG9wdE5TKChOU0Rh
dGEgKilkYXRhLmxlYWtSZWYoKSkgfTsKIH0KQEAgLTMyMSwxMyArMzIxLDEzIEBAIHN0YXRpYyBp
bmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGUKIAogc3RhdGljIGlubGluZSB2b2lkIGVu
Y29kZURhdGVJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0RhdGUgKmRhdGUpCiB7Ci0gICAg
ZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRkRhdGVSZWYpZGF0ZSk7CisgICAgZW5jb2RlciA8
PCAoX19icmlkZ2UgQ0ZEYXRlUmVmKWRhdGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8
UmV0YWluUHRyPGlkPj4gZGVjb2RlRGF0ZUludGVybmFsKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgUmV0YWluUHRyPENGRGF0ZVJlZj4gZGF0ZTsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBk
YXRlKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGUpKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIHJldHVybiB7IGFkb3B0TlMoKE5TRGF0ZSAqKWRhdGUubGVha1JlZigp
KSB9OwogfQpAQCAtNDE0LDEzICs0MTQsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxp
ZD4+IGRlY29kZUZvbgogCiBzdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlTnVtYmVySW50ZXJuYWwo
RW5jb2RlciYgZW5jb2RlciwgTlNOdW1iZXIgKm51bWJlcikKIHsKLSAgICBlbmNvZGUoZW5jb2Rl
ciwgKF9fYnJpZGdlIENGTnVtYmVyUmVmKW51bWJlcik7CisgICAgZW5jb2RlciA8PCAoX19icmlk
Z2UgQ0ZOdW1iZXJSZWYpbnVtYmVyOwogfQogCiBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFp
blB0cjxpZD4+IGRlY29kZU51bWJlckludGVybmFsKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
UmV0YWluUHRyPENGTnVtYmVyUmVmPiBudW1iZXI7Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2Rlciwg
bnVtYmVyKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG51bWJlcikpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHsgYWRvcHROUygoTlNOdW1iZXIgKiludW1iZXIu
bGVha1JlZigpKSB9OwogfQpAQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZVNl
Y3VyZUNvZGluZ0ludGVybmFsKEUKICAgICBbYXJjaGl2ZXIgZmluaXNoRW5jb2RpbmddOwogICAg
IFthcmNoaXZlciBzZXREZWxlZ2F0ZTpuaWxdOwogCi0gICAgZW5jb2RlKGVuY29kZXIsIChfX2Jy
aWRnZSBDRkRhdGFSZWYpW2FyY2hpdmVyIGVuY29kZWREYXRhXSk7CisgICAgZW5jb2RlciA8PCAo
X19icmlkZ2UgQ0ZEYXRhUmVmKVthcmNoaXZlciBlbmNvZGVkRGF0YV07CiB9CiAKIHN0YXRpYyBP
cHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbChEZWNvZGVy
JiBkZWNvZGVyLCBOU0FycmF5PENsYXNzPiAqYWxsb3dlZENsYXNzZXMpCkBAIC00NDgsNyArNDQ4
LDcgQEAgc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlYwogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAg
ICBpZiAoIWRlY29kZShkZWNvZGVyLCBkYXRhKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRh
dGEpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byB1bmFyY2hpdmVy
ID0gYWRvcHROUyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ0Zyb21E
YXRhOihfX2JyaWRnZSBOU0RhdGEgKilkYXRhLmdldCgpIGVycm9yOm51bGxwdHJdKTsKQEAgLTQ3
NywxMyArNDc3LDEzIEBAIHN0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTZWMK
IAogc3RhdGljIGlubGluZSB2b2lkIGVuY29kZVN0cmluZ0ludGVybmFsKEVuY29kZXImIGVuY29k
ZXIsIE5TU3RyaW5nICpzdHJpbmcpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBD
RlN0cmluZ1JlZilzdHJpbmcpOworICAgIGVuY29kZXIgPDwgKF9fYnJpZGdlIENGU3RyaW5nUmVm
KXN0cmluZzsKIH0KIAogc3RhdGljIGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNv
ZGVTdHJpbmdJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc3RyaW5nOwotICAgIGlmICghZGVjb2RlKGRlY29kZXIsIHN0cmluZykpCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHJldHVybiB7IGFkb3B0TlMoKE5TU3RyaW5nICopc3RyaW5nLmxlYWtSZWYoKSkgfTsK
IH0KQEAgLTQ5MiwxMyArNDkyLDEzIEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRy
PGlkPj4gZGUKIAogc3RhdGljIGlubGluZSB2b2lkIGVuY29kZVVSTEludGVybmFsKEVuY29kZXIm
IGVuY29kZXIsIE5TVVJMICpVUkwpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBD
RlVSTFJlZilVUkwpOworICAgIGVuY29kZXIgPDwgKF9fYnJpZGdlIENGVVJMUmVmKVVSTDsKIH0K
IAogc3RhdGljIGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVVUkxJbnRlcm5h
bChEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gVVJMOwotICAg
IGlmICghZGVjb2RlKGRlY29kZXIsIFVSTCkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShVUkwp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiB7IGFkb3B0TlMoKE5T
VVJMICopVVJMLmxlYWtSZWYoKSkgfTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCShyZXZpc2lv
biAyNzc5MDIpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRD
b2RlcnNDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMxLDcgKzQzMSw3IEBAIHZvaWQgQXJn
dW1lbnRDb2RlcjxSZWY8Rm9udD4+OjplbmNvZGVQbGEKICAgICBhdXRvIGN0Rm9udCA9IHBsYXRm
b3JtRGF0YS5mb250KCk7CiAgICAgYXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250
Q29weUZvbnREZXNjcmlwdG9yKGN0Rm9udCkpOwogICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0
Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLmdldCgpKSk7
Ci0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgYXR0cmlidXRlcy5nZXQoKSk7CisgICAgZW5jb2Rl
ciA8PCBhdHRyaWJ1dGVzOwogCiAgICAgY29uc3QgYXV0byYgY3JlYXRpb25EYXRhID0gcGxhdGZv
cm1EYXRhLmNyZWF0aW9uRGF0YSgpOwogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4o
Y3JlYXRpb25EYXRhKTsKQEAgLTQ5OSw4ICs0OTksOSBAQCBPcHRpb25hbDxGb250UGxhdGZvcm1E
YXRhPiBBcmd1bWVudENvZGVyCiAgICAgaWYgKCFzeW50aGV0aWNPYmxpcXVlLmhhc1ZhbHVlKCkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBhdHRyaWJ1dGVzOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgYXR0cmli
dXRlcykpCisgICAgT3B0aW9uYWw8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+IGF0dHJpYnV0
ZXM7CisgICAgZGVjb2RlciA+PiBhdHRyaWJ1dGVzOworICAgIGlmICghYXR0cmlidXRlcykKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIE9wdGlvbmFsPGJvb2w+IGluY2x1ZGVz
Q3JlYXRpb25EYXRhOwpAQCAtNTI1LDcgKzUyNiw3IEBAIE9wdGlvbmFsPEZvbnRQbGF0Zm9ybURh
dGE+IEFyZ3VtZW50Q29kZXIKICAgICAgICAgYXV0byBiYXNlRm9udERlc2NyaXB0b3IgPSBmb250
Q3VzdG9tUGxhdGZvcm1EYXRhLT5mb250RGVzY3JpcHRvci5nZXQoKTsKICAgICAgICAgaWYgKCFi
YXNlRm9udERlc2NyaXB0b3IpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
ICAgICBhdXRvIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRl
Q29weVdpdGhBdHRyaWJ1dGVzKGJhc2VGb250RGVzY3JpcHRvciwgYXR0cmlidXRlcy5nZXQoKSkp
OworICAgICAgICBhdXRvIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9y
Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGJhc2VGb250RGVzY3JpcHRvciwgYXR0cmlidXRlcy0+
Z2V0KCkpKTsKICAgICAgICAgYXV0byBjdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhG
b250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6ZS52YWx1ZSgpLCBudWxscHRy
KSk7CiAKICAgICAgICAgYXV0byBjcmVhdGlvbkRhdGEgPSBGb250UGxhdGZvcm1EYXRhOjpDcmVh
dGlvbkRhdGEgeyBmb250RmFjZURhdGEudmFsdWUoKSwgaXRlbUluQ29sbGVjdGlvbi52YWx1ZSgp
IH07CkBAIC01NDUsNyArNTQ2LDcgQEAgT3B0aW9uYWw8Rm9udFBsYXRmb3JtRGF0YT4gQXJndW1l
bnRDb2RlcgogICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRv
ciA9IGZpbmRGb250RGVzY3JpcHRvcihyZWZlcmVuY2VVUkwudmFsdWUoKSwgcG9zdFNjcmlwdE5h
bWUudmFsdWUoKSk7CiAgICAgaWYgKCFmb250RGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRv
ckNyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250RGVzY3JpcHRvci5nZXQoKSwgYXR0cmlidXRl
cy5nZXQoKSkpOworICAgIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9y
Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLmdldCgpLCBhdHRyaWJ1dGVz
LT5nZXQoKSkpOwogICAgIGF1dG8gY3RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9u
dERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUudmFsdWUoKSwgbnVsbHB0cikp
OwogCiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoY3RGb250LmdldCgpLCBzaXplLnZhbHVl
KCksIHN5bnRoZXRpY0JvbGQudmFsdWUoKSwgc3ludGhldGljT2JsaXF1ZS52YWx1ZSgpLCBvcmll
bnRhdGlvbi52YWx1ZSgpLCB3aWR0aFZhcmlhbnQudmFsdWUoKSwgdGV4dFJlbmRlcmluZ01vZGUu
dmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9u
IDI3NzkwMikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9p
ZCBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbgogICAgIGVuY29kZXIgPDwgdGVy
bWluYXRpb25UaW1lb3V0OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVuY29kZXIgPDwgYWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQ7Ci0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29y
a0FUU0NvbnRleHQuZ2V0KCkpOworICAgIGVuY29kZXIgPDwgbmV0d29ya0FUU0NvbnRleHQ7CiAj
ZW5kaWYKIH0KIApAQCAtNjEsNyArNjEsNyBAQCBib29sIFBsdWdpblByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmRlCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCByZXN1bHQubmV0d29ya0FUU0NvbnRl
eHQpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm5ldHdvcmtBVFNDb250ZXh0KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hh
cmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
U2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwCShyZXZpc2lvbiAyNzc5MDIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9jZi9Bcmd1bWVudENvZGVyc0NGLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJE
ZWNvZGVyLmgiCiAjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIlN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyLmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgpAQCAtNzIsNiArNzQsNyBAQCBlbnVtIGNsYXNz
IENGVHlwZSA6IHVpbnQ4X3QgewogI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCiAg
ICAgU2VjVHJ1c3QsCiAjZW5kaWYKKyAgICBDR0NvbG9yU3BhY2UsCiAgICAgTnVsbHB0ciwKICAg
ICBVbmtub3duLAogfTsKQEAgLTEwMiw2ICsxMDUsOCBAQCBzdGF0aWMgQ0ZUeXBlIHR5cGVGcm9t
Q0ZUeXBlUmVmKENGVHlwZVJlCiAgICAgICAgIHJldHVybiBDRlR5cGU6OkNGU3RyaW5nOwogICAg
IGlmICh0eXBlSUQgPT0gQ0ZVUkxHZXRUeXBlSUQoKSkKICAgICAgICAgcmV0dXJuIENGVHlwZTo6
Q0ZVUkw7CisgICAgaWYgKHR5cGVJRCA9PSBDR0NvbG9yU3BhY2VHZXRUeXBlSUQoKSkKKyAgICAg
ICAgcmV0dXJuIENGVHlwZTo6Q0dDb2xvclNwYWNlOwogICAgIGlmICh0eXBlSUQgPT0gU2VjQ2Vy
dGlmaWNhdGVHZXRUeXBlSUQoKSkKICAgICAgICAgcmV0dXJuIENGVHlwZTo6U2VjQ2VydGlmaWNh
dGU7CiAjaWYgSEFWRShTRUNfS0VZQ0hBSU4pCkBAIC0xMjEsNTQgKzEyNiw1OSBAQCBzdGF0aWMg
Q0ZUeXBlIHR5cGVGcm9tQ0ZUeXBlUmVmKENGVHlwZVJlCiAgICAgcmV0dXJuIENGVHlwZTo6VW5r
bm93bjsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZUeXBlUmVmIHR5cGVS
ZWYpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZU
eXBlUmVmPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGVHlwZVJlZiB0eXBlUmVmKQogewot
ICAgIENGVHlwZSB0eXBlID0gdHlwZUZyb21DRlR5cGVSZWYodHlwZVJlZik7CisgICAgYXV0byB0
eXBlID0gdHlwZUZyb21DRlR5cGVSZWYodHlwZVJlZik7CiAgICAgZW5jb2RlciA8PCB0eXBlOwog
CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBDRlR5cGU6OkNGQXJyYXk6Ci0gICAgICAg
IGVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPih0eXBlUmVmKSk7CisgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4odHlwZVJlZik7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIENGVHlwZTo6Q0ZCb29sZWFuOgotICAgICAgICBlbmNvZGUoZW5j
b2Rlciwgc3RhdGljX2Nhc3Q8Q0ZCb29sZWFuUmVmPih0eXBlUmVmKSk7CisgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZCb29sZWFuUmVmPih0eXBlUmVmKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgQ0ZUeXBlOjpDRkRhdGE6Ci0gICAgICAgIGVuY29kZShlbmNvZGVyLCBzdGF0
aWNfY2FzdDxDRkRhdGFSZWY+KHR5cGVSZWYpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxDRkRhdGFSZWY+KHR5cGVSZWYpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDRlR5
cGU6OkNGRGF0ZToKLSAgICAgICAgZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PENGRGF0ZVJl
Zj4odHlwZVJlZikpOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PENGRGF0ZVJlZj4o
dHlwZVJlZik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENGVHlwZTo6Q0ZEaWN0aW9uYXJ5
OgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPih0
eXBlUmVmKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVm
Pih0eXBlUmVmKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ0ZUeXBlOjpDRk51bGw6CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENGVHlwZTo6Q0ZOdW1iZXI6Ci0gICAgICAgIGVuY29k
ZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4odHlwZVJlZikpOworICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPih0eXBlUmVmKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQ0ZUeXBlOjpDRlN0cmluZzoKLSAgICAgICAgZW5jb2RlKGVuY29kZXIs
IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPih0eXBlUmVmKSk7CisgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHR5cGVSZWYpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDRlR5cGU6OkNGVVJMOgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8
Q0ZVUkxSZWY+KHR5cGVSZWYpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxDRlVS
TFJlZj4odHlwZVJlZik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENGVHlwZTo6Q0dDb2xv
clNwYWNlOgorICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PENHQ29sb3JTcGFjZVJlZj4o
Y29uc3RfY2FzdDx2b2lkKj4odHlwZVJlZikpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBD
RlR5cGU6OlNlY0NlcnRpZmljYXRlOgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nh
c3Q8U2VjQ2VydGlmaWNhdGVSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKSk7CisgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8U2VjQ2VydGlmaWNhdGVSZWY+KGNvbnN0X2Nhc3Q8
dm9pZCo+KHR5cGVSZWYpKTsKICAgICAgICAgcmV0dXJuOwogI2lmIEhBVkUoU0VDX0tFWUNIQUlO
KQogICAgIGNhc2UgQ0ZUeXBlOjpTZWNLZXljaGFpbkl0ZW06Ci0gICAgICAgIGVuY29kZShlbmNv
ZGVyLCBzdGF0aWNfY2FzdDxTZWNLZXljaGFpbkl0ZW1SZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5
cGVSZWYpKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8U2VjS2V5Y2hhaW5JdGVt
UmVmPihjb25zdF9jYXN0PHZvaWQqPih0eXBlUmVmKSk7CiAgICAgICAgIHJldHVybjsKICNlbmRp
ZgogI2lmIEhBVkUoU0VDX0FDQ0VTU19DT05UUk9MKQogICAgIGNhc2UgQ0ZUeXBlOjpTZWNBY2Nl
c3NDb250cm9sOgotICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8U2VjQWNjZXNz
Q29udHJvbFJlZj4oY29uc3RfY2FzdDx2b2lkKj4odHlwZVJlZikpKTsKKyAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxTZWNBY2Nlc3NDb250cm9sUmVmPihjb25zdF9jYXN0PHZvaWQqPih0
eXBlUmVmKSk7CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogI2lmIEhBVkUoU0VDX1RSVVNUX1NF
UklBTElaQVRJT04pCiAgICAgY2FzZSBDRlR5cGU6OlNlY1RydXN0OgotICAgICAgICBlbmNvZGUo
ZW5jb2Rlciwgc3RhdGljX2Nhc3Q8U2VjVHJ1c3RSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KHR5cGVS
ZWYpKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8U2VjVHJ1c3RSZWY+KGNvbnN0
X2Nhc3Q8dm9pZCo+KHR5cGVSZWYpKTsKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgY2Fz
ZSBDRlR5cGU6Ok51bGxwdHI6CkBAIC0xODAsNDYgKzE5MCw1MCBAQCB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBDRlR5cGVSZWYgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LWJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRlR5cGVSZWY+JiByZXN1
bHQpCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZUeXBlUmVmPjo6ZW5jb2RlPEVuY29k
ZXI+KEVuY29kZXImLCBDRlR5cGVSZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENG
VHlwZVJlZj46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlv
bkVuY29kZXImLCBDRlR5cGVSZWYpOworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENG
VHlwZVJlZj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGVHlwZVJlZj4m
IHJlc3VsdCkKIHsKLSAgICBDRlR5cGUgdHlwZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHR5
cGUpKQorICAgIE9wdGlvbmFsPENGVHlwZT4gdHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7Cisg
ICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBzd2l0Y2ggKCp0eXBlKSB7CiAgICAgY2FzZSBDRlR5cGU6OkNGQXJyYXk6IHsKICAg
ICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5OwotICAgICAgICBpZiAoIWRlY29kZShk
ZWNvZGVyLCBhcnJheSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyYXkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSBhZG9wdENGKGFycmF5Lmxl
YWtSZWYoKSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoYXJyYXkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBDRlR5cGU6OkNGQm9vbGVhbjogewogICAgICAgICBS
ZXRhaW5QdHI8Q0ZCb29sZWFuUmVmPiBib29sZWFuOwotICAgICAgICBpZiAoIWRlY29kZShkZWNv
ZGVyLCBib29sZWFuKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShib29sZWFuKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihib29sZWFu
LmxlYWtSZWYoKSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoYm9vbGVhbik7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIENGVHlwZTo6Q0ZEYXRhOiB7CiAgICAgICAg
IFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIs
IGRhdGEpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSBhZG9wdENGKGRhdGEubGVha1JlZigpKTsK
KyAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShkYXRhKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIGNhc2UgQ0ZUeXBlOjpDRkRhdGU6IHsKICAgICAgICAgUmV0YWluUHRyPENGRGF0
ZVJlZj4gZGF0ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgZGF0ZSkpCisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoZGF0ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YoZGF0ZS5sZWFrUmVmKCkpOworICAgICAgICByZXN1bHQg
PSBXVEZNb3ZlKGRhdGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBD
RlR5cGU6OkNGRGljdGlvbmFyeTogewogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBkaWN0aW9uYXJ5OwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBkaWN0aW9uYXJ5KSkK
KyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkaWN0aW9uYXJ5KSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihkaWN0aW9uYXJ5LmxlYWtSZWYo
KSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoZGljdGlvbmFyeSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBjYXNlIENGVHlwZTo6Q0ZOdWxsOgpAQCAtMjI3LDU2ICsyNDEs
NjMgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIENGVHlwZTo6Q0ZOdW1iZXI6IHsKICAgICAgICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiBudW1iZXI7Ci0gICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIG51
bWJlcikpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobnVtYmVyKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihudW1iZXIubGVha1JlZigp
KTsKKyAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShudW1iZXIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgY2FzZSBDRlR5cGU6OkNGU3RyaW5nOiB7CiAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gc3RyaW5nOwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBzdHJp
bmcpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cmluZykpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGFkb3B0Q0Yoc3RyaW5nLmxlYWtSZWYoKSk7
CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIGNhc2UgQ0ZUeXBlOjpDRlVSTDogewogICAgICAgICBSZXRhaW5QdHI8Q0ZV
UkxSZWY+IHVybDsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgdXJsKSkKKyAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZSh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXN1bHQgPSBXVEZNb3ZlKHVybCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBjYXNlIENGVHlwZTo6Q0dDb2xvclNwYWNlOiB7CisgICAgICAgIFJldGFpblB0cjxDR0Nv
bG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29s
b3JTcGFjZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGFk
b3B0Q0YodXJsLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoY29sb3JTcGFj
ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIENGVHlwZTo6U2VjQ2Vy
dGlmaWNhdGU6IHsKICAgICAgICAgUmV0YWluUHRyPFNlY0NlcnRpZmljYXRlUmVmPiBjZXJ0aWZp
Y2F0ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgY2VydGlmaWNhdGUpKQorICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihjZXJ0aWZpY2F0ZS5sZWFrUmVmKCkpOwor
ICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGNlcnRpZmljYXRlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogI2lmIEhBVkUoU0VDX0tFWUNIQUlOKQogICAgIGNhc2UgQ0ZUeXBlOjpTZWNL
ZXljaGFpbkl0ZW06IHsKICAgICAgICAgUmV0YWluUHRyPFNlY0tleWNoYWluSXRlbVJlZj4ga2V5
Y2hhaW5JdGVtOwotICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBrZXljaGFpbkl0ZW0pKQor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleWNoYWluSXRlbSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGFkb3B0Q0Yoa2V5Y2hhaW5JdGVtLmxlYWtS
ZWYoKSk7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoa2V5Y2hhaW5JdGVtKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgSEFWRShTRUNfQUNDRVNTX0NPTlRST0wp
CiAgICAgY2FzZSBDRlR5cGU6OlNlY0FjY2Vzc0NvbnRyb2w6IHsKICAgICAgICAgUmV0YWluUHRy
PFNlY0FjY2Vzc0NvbnRyb2xSZWY+IGFjY2Vzc0NvbnRyb2w7Ci0gICAgICAgIGlmICghZGVjb2Rl
KGRlY29kZXIsIGFjY2Vzc0NvbnRyb2wpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFj
Y2Vzc0NvbnRyb2wpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQg
PSBhZG9wdENGKGFjY2Vzc0NvbnRyb2wubGVha1JlZigpKTsKKyAgICAgICAgcmVzdWx0ID0gV1RG
TW92ZShhY2Nlc3NDb250cm9sKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlm
CiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKICAgICBjYXNlIENGVHlwZTo6U2Vj
VHJ1c3Q6IHsKICAgICAgICAgUmV0YWluUHRyPFNlY1RydXN0UmVmPiB0cnVzdDsKLSAgICAgICAg
aWYgKCFkZWNvZGUoZGVjb2RlciwgdHJ1c3QpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHRydXN0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVzdWx0ID0gYWRv
cHRDRih0cnVzdC5sZWFrUmVmKCkpOworICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKHRydXN0KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCkBAIC0yOTEsNyArMzEyLDggQEAg
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZBcnJheVJlZiBhcnJheSkK
K3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZBcnJheVJl
Zj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRkFycmF5UmVmIGFycmF5KQogewogICAgIGlm
ICghYXJyYXkpIHsKICAgICAgICAgZW5jb2RlciA8PCB0cnVlOwpAQCAtMzE4LDExICszNDAsMTQg
QEAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZBcnJheVJlZgogICAgIGZvciAoQ0ZJ
bmRleCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBpZiAoaW52YWxpZEluZGljaWVz
LmNvbnRhaW5zKGkpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGVuY29kZShlbmNv
ZGVyLCB2YWx1ZXNbaV0pOworICAgICAgICBlbmNvZGVyIDw8IHZhbHVlc1tpXTsKICAgICB9CiB9
CiAKLWJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRkFycmF5UmVmPiYg
cmVzdWx0KQordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGQXJyYXlSZWY+OjplbmNvZGU8
RW5jb2Rlcj4oRW5jb2RlciYsIENGQXJyYXlSZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1bWVudENv
ZGVyPENGQXJyYXlSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNv
bm5lY3Rpb25FbmNvZGVyJiwgQ0ZBcnJheVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRh
aW5QdHI8Q0ZBcnJheVJlZj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENG
QXJyYXlSZWY+JiByZXN1bHQpCiB7CiAgICAgYm9vbCBpc051bGwgPSBmYWxzZTsKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGlzTnVsbCkpCkBAIC0zNDEsNyArMzY2LDcgQEAgYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gZWxlbWVudDsKLSAg
ICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgZWxlbWVudCkpCisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
aWYgKCFlbGVtZW50KQpAQCAtMzU0LDEyICszNzksMTYgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgUmV0YWluUHRyPAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBDRkJvb2xlYW5SZWYgYm9vbGVhbikKK3RlbXBsYXRlPHR5cGVuYW1l
IEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZCb29sZWFuUmVmPjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIENGQm9vbGVhblJlZiBib29sZWFuKQogewogICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Ym9vbD4oQ0ZCb29sZWFuR2V0VmFsdWUoYm9vbGVhbikpOwogfQogCi1ib29sIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZCb29sZWFuUmVmPiYgcmVzdWx0KQor
dGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGQm9vbGVhblJlZj46OmVuY29kZTxFbmNvZGVy
PihFbmNvZGVyJiwgQ0ZCb29sZWFuUmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxD
RkJvb2xlYW5SZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5l
Y3Rpb25FbmNvZGVyJiwgQ0ZCb29sZWFuUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFp
blB0cjxDRkJvb2xlYW5SZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxD
RkJvb2xlYW5SZWY+JiByZXN1bHQpCiB7CiAgICAgYm9vbCBib29sZWFuOwogICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoYm9vbGVhbikpCkBAIC0zNjksMTUgKzM5OCwxNiBAQCBib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGRGF0YVJlZiBkYXRhKQordGVtcGxhdGU8dHlwZW5h
bWUgRW5jb2Rlcj4KK3ZvaWQgQXJndW1lbnRDb2RlcjxDRkRhdGFSZWY+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgQ0ZEYXRhUmVmIGRhdGEpCiB7Ci0gICAgQ0ZJbmRleCBsZW5ndGggPSBDRkRh
dGFHZXRMZW5ndGgoZGF0YSk7Ci0gICAgY29uc3QgVUludDgqIGJ5dGVQdHIgPSBDRkRhdGFHZXRC
eXRlUHRyKGRhdGEpOwotCi0gICAgZW5jb2RlciA8PCBJUEM6OkRhdGFSZWZlcmVuY2UoYnl0ZVB0
ciwgbGVuZ3RoKTsKKyAgICBlbmNvZGVyIDw8IElQQzo6RGF0YVJlZmVyZW5jZShDRkRhdGFHZXRC
eXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkpOwogfQogCi1ib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgcmVzdWx0KQordGVtcGxhdGUg
dm9pZCBBcmd1bWVudENvZGVyPENGRGF0YVJlZj46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwg
Q0ZEYXRhUmVmKTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRkRhdGFSZWY+OjplbmNv
ZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiwgQ0ZE
YXRhUmVmKTsKKworYm9vbCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRkRhdGFSZWY+Pjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRkRhdGFSZWY+JiByZXN1bHQpCiB7CiAg
ICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7CiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShkYXRhUmVmZXJlbmNlKSkKQEAgLTM4NywxMiArNDE3LDE2IEBAIGJvb2wgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZEYXRlUmVmIGRhdGUpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGRGF0ZVJlZj46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBDRkRhdGVSZWYgZGF0ZSkKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGRvdWJsZT4oQ0ZEYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGUpKTsKIH0KIAotYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGRGF0ZVJlZj4mIHJlc3VsdCkKK3RlbXBsYXRl
IHZvaWQgQXJndW1lbnRDb2RlcjxDRkRhdGVSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYs
IENGRGF0ZVJlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZEYXRlUmVmPjo6ZW5j
b2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIENG
RGF0ZVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZEYXRlUmVmPj46OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRlUmVmPiYgcmVzdWx0KQogewog
ICAgIGRvdWJsZSBhYnNvbHV0ZVRpbWU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhYnNvbHV0
ZVRpbWUpKQpAQCAtNDAyLDcgKzQzNiw4IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFJldGFpblB0cjwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPgordm9pZCBBcmd1bWVudENvZGVyPENGRGljdGlvbmFyeVJlZj46OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSkKIHsKICAgICBpZiAoIWRp
Y3Rpb25hcnkpIHsKICAgICAgICAgZW5jb2RlciA8PCB0cnVlOwpAQCAtNDM1LDEyICs0NzAsMTQg
QEAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZEaWN0aW9uYQogICAgICAgICBpZiAo
aW52YWxpZEtleXMuY29udGFpbnMoa2V5c1tpXSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBlbmNvZGUoZW5jb2Rlciwga2V5c1tpXSk7Ci0gICAgICAgIGVuY29kZShlbmNvZGVy
LCB2YWx1ZXNbaV0pOworICAgICAgICBlbmNvZGVyIDw8IGtleXNbaV0gPDwgdmFsdWVzW2ldOwog
ICAgIH0KIH0KIAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4mIHJlc3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRkRpY3Rp
b25hcnlSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIENGRGljdGlvbmFyeVJlZik7Cit0
ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZEaWN0aW9uYXJ5UmVmPjo6ZW5jb2RlPFN0cmVh
bUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIENGRGljdGlvbmFy
eVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgcmVz
dWx0KQogewogICAgIGJvb2wgaXNOdWxsID0gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShpc051bGwpKQpAQCAtNDU4LDIxICs0OTUsMjIgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgUmV0YWluUHRyPAogICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBk
aWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKICAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAg
IFJldGFpblB0cjxDRlR5cGVSZWY+IGtleTsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2Rlciwg
a2V5KSB8fCAha2V5KQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkgfHwgIWtleSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVm
PiB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgdmFsdWUpIHx8ICF2YWx1ZSkK
KyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkgfHwgIXZhbHVlKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25h
cnkuZ2V0KCksIGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwogICAgIH0KIAotICAgIHJlc3VsdCA9
IGFkb3B0Q0YoZGljdGlvbmFyeS5sZWFrUmVmKCkpOworICAgIHJlc3VsdCA9IFdURk1vdmUoZGlj
dGlvbmFyeSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIENGTnVtYmVyUmVmIG51bWJlcikKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2
b2lkIEFyZ3VtZW50Q29kZXI8Q0ZOdW1iZXJSZWY+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Q0ZOdW1iZXJSZWYgbnVtYmVyKQogewogICAgIENGTnVtYmVyVHlwZSBudW1iZXJUeXBlID0gQ0ZO
dW1iZXJHZXRUeXBlKG51bWJlcik7CiAKQEAgLTQ4MCwxMCArNTE4LDEyIEBAIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIENGTnVtYmVyUmUKICAgICBib29sIHJlc3VsdCA9IENGTnVtYmVy
R2V0VmFsdWUobnVtYmVyLCBudW1iZXJUeXBlLCBidWZmZXIuZGF0YSgpKTsKICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKIAotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4obnVtYmVyVHlwZSk7Ci0gICAgZW5jb2RlciA8PCBJUEM6OkRhdGFSZWZlcmVuY2UoYnVm
ZmVyKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG51bWJlclR5cGUpIDw8
IElQQzo6RGF0YVJlZmVyZW5jZShidWZmZXIpOwogfQogCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50
Q29kZXI8Q0ZOdW1iZXJSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIENGTnVtYmVyUmVm
KTsKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRk51bWJlclJlZj46OmVuY29kZTxTdHJl
YW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBDRk51bWJlclJl
Zik7CisKIHN0YXRpYyBzaXplX3Qgc2l6ZUZvck51bWJlclR5cGUoQ0ZOdW1iZXJUeXBlIG51bWJl
clR5cGUpCiB7CiAgICAgc3dpdGNoIChudW1iZXJUeXBlKSB7CkBAIC01MjQsNyArNTY0LDcgQEAg
c3RhdGljIHNpemVfdCBzaXplRm9yTnVtYmVyVHlwZShDRk51bWJlcgogICAgIHJldHVybiAwOwog
fQogCi1ib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+
JiByZXN1bHQpCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGTnVtYmVyUmVmPj46OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+JiByZXN1bHQpCiB7
CiAgICAgT3B0aW9uYWw8dWludDhfdD4gbnVtYmVyVHlwZUZyb21JUEM7CiAgICAgZGVjb2RlciA+
PiBudW1iZXJUeXBlRnJvbUlQQzsKQEAgLTU0Niw3ICs1ODYsOCBAQCBib29sIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIENGU3RyaW5nUmVmIHN0cmluZykKK3RlbXBsYXRlPHR5cGVu
YW1lIEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZTdHJpbmdSZWY+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgQ0ZTdHJpbmdSZWYgc3RyaW5nKQogewogICAgIENGSW5kZXggbGVuZ3Ro
ID0gQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKICAgICBDRlN0cmluZ0VuY29kaW5nIGVuY29k
aW5nID0gQ0ZTdHJpbmdHZXRGYXN0ZXN0RW5jb2Rpbmcoc3RyaW5nKTsKQEAgLTU2MSwxMSArNjAy
LDEzIEBAIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIENGU3RyaW5nUmUKICAgICBudW1D
b252ZXJ0ZWRCeXRlcyA9IENGU3RyaW5nR2V0Qnl0ZXMoc3RyaW5nLCByYW5nZSwgZW5jb2Rpbmcs
IDAsIGZhbHNlLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpLCAmYnVmZmVyTGVuZ3RoKTsK
ICAgICBBU1NFUlQobnVtQ29udmVydGVkQnl0ZXMgPT0gbGVuZ3RoKTsKIAotICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGVuY29kaW5nKTsKLSAgICBlbmNvZGVyIDw8IElQQzo6
RGF0YVJlZmVyZW5jZShidWZmZXIpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGVuY29kaW5nKSA8PCBJUEM6OkRhdGFSZWZlcmVuY2UoYnVmZmVyKTsKIH0KIAotYm9vbCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGU3RyaW5nUmVmPiYgcmVzdWx0KQor
dGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGU3RyaW5nUmVmPjo6ZW5jb2RlPEVuY29kZXI+
KEVuY29kZXImLCBDRlN0cmluZ1JlZik7Cit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZT
dHJpbmdSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyJiwgQ0ZTdHJpbmdSZWYpOworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRy
PENGU3RyaW5nUmVmPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+JiByZXN1bHQpCiB7CiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGVuY29kaW5nRnJvbUlQ
QzsKICAgICBkZWNvZGVyID4+IGVuY29kaW5nRnJvbUlQQzsKQEAgLTU4OCwyNyArNjMxLDMwIEBA
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjwKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZVUkxSZWYgdXJsKQordGVt
cGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KK3ZvaWQgQXJndW1lbnRDb2RlcjxDRlVSTFJlZj46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBDRlVSTFJlZiB1cmwpCiB7CiAgICAgQ0ZVUkxSZWYgYmFz
ZVVSTCA9IENGVVJMR2V0QmFzZVVSTCh1cmwpOwogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Ym9vbD4oYmFzZVVSTCk7CiAgICAgaWYgKGJhc2VVUkwpCi0gICAgICAgIGVuY29kZShlbmNvZGVy
LCBiYXNlVVJMKTsKKyAgICAgICAgZW5jb2RlciA8PCBiYXNlVVJMOwogCiAgICAgV1RGOjpVUkxD
aGFyQnVmZmVyIHVybEJ5dGVzOwogICAgIFdURjo6Z2V0VVJMQnl0ZXModXJsLCB1cmxCeXRlcyk7
Ci0gICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4odXJsQnl0ZXMuZGF0YSgpKSwgdXJsQnl0ZXMuc2l6ZSgpKTsKLSAgICBl
bmNvZGVyIDw8IGRhdGFSZWZlcmVuY2U7CisgICAgZW5jb2RlciA8PCBJUEM6OkRhdGFSZWZlcmVu
Y2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odXJsQnl0ZXMuZGF0YSgpKSwgdXJs
Qnl0ZXMuc2l6ZSgpKTsKIH0KIAotYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWlu
UHRyPENGVVJMUmVmPiYgcmVzdWx0KQordGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENGVVJM
UmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBDRlVSTFJlZik7Cit0ZW1wbGF0ZSB2b2lk
IEFyZ3VtZW50Q29kZXI8Q0ZVUkxSZWY+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+
KFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiwgQ0ZVUkxSZWYpOworCitib29sIEFyZ3VtZW50Q29k
ZXI8UmV0YWluUHRyPENGVVJMUmVmPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5Q
dHI8Q0ZVUkxSZWY+JiByZXN1bHQpCiB7CiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBiYXNlVVJM
OwogICAgIGJvb2wgaGFzQmFzZVVSTDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0Jhc2VV
UkwpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGhhc0Jhc2VVUkwpIHsKLSAgICAg
ICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgYmFzZVVSTCkpCisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoYmFzZVVSTCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC02
MzEsMTYgKzY3Nyw3MyBAQCBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
U2VjQ2VydGlmaWNhdGVSZWYgY2VydGlmaWNhdGUpCitlbnVtIGNsYXNzIENHQ29sb3JTcGFjZUVu
Y29kaW5nU2NoZW1lIHsgTmFtZSwgUHJvcGVydHlMaXN0IH07CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8Q0dDb2xvclNwYWNlUmVmPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlKQoreworICAgIGlmIChh
dXRvIG5hbWUgPSBDR0NvbG9yU3BhY2VHZXROYW1lKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGVu
Y29kZXIgPDwgQ0dDb2xvclNwYWNlRW5jb2RpbmdTY2hlbWU6Ok5hbWUgPDwgbmFtZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGVuY29kZXIgPDwgQ0dDb2xvclNwYWNlRW5jb2RpbmdT
Y2hlbWU6OlByb3BlcnR5TGlzdCA8PCBhZG9wdENGKENHQ29sb3JTcGFjZUNvcHlQcm9wZXJ0eUxp
c3QoY29sb3JTcGFjZSkpOworfQorCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8Q0dDb2xv
clNwYWNlUmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBDR0NvbG9yU3BhY2VSZWYpOwor
dGVtcGxhdGUgdm9pZCBBcmd1bWVudENvZGVyPENHQ29sb3JTcGFjZVJlZj46OmVuY29kZTxTdHJl
YW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBDR0NvbG9yU3Bh
Y2VSZWYpOworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4mIHJl
c3VsdCkKK3sKKyAgICBDR0NvbG9yU3BhY2VFbmNvZGluZ1NjaGVtZSBlbmNvZGluZ1NjaGVtZTsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVuY29kaW5nU2NoZW1lKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3dpdGNoIChlbmNvZGluZ1NjaGVtZSkgeworICAgIGNhc2UgQ0dDb2xv
clNwYWNlRW5jb2RpbmdTY2hlbWU6Ok5hbWU6IHsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBuYW1lOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dD
b2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUobmFtZS5nZXQoKSkpOworICAgICAgICBpZiAoIWNvbG9y
U3BhY2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0ID0gV1RG
TW92ZShjb2xvclNwYWNlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2Ug
Q0dDb2xvclNwYWNlRW5jb2RpbmdTY2hlbWU6OlByb3BlcnR5TGlzdDogeworICAgICAgICBSZXRh
aW5QdHI8Q0ZUeXBlUmVmPiBwcm9wZXJ0eUxpc3Q7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocHJvcGVydHlMaXN0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBh
dXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhQcm9wZXJ0eUxp
c3QocHJvcGVydHlMaXN0LmdldCgpKSk7CisgICAgICAgIGlmICghY29sb3JTcGFjZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGNvbG9yU3Bh
Y2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1l
IEVuY29kZXI+Cit2b2lkIEFyZ3VtZW50Q29kZXI8U2VjQ2VydGlmaWNhdGVSZWY+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgU2VjQ2VydGlmaWNhdGVSZWYgY2VydGlmaWNhdGUpCiB7Ci0gICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDb3B5RGF0
YShjZXJ0aWZpY2F0ZSkpOwotICAgIGVuY29kZShlbmNvZGVyLCBkYXRhLmdldCgpKTsKKyAgICBl
bmNvZGVyIDw8IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDb3B5RGF0YShjZXJ0aWZpY2F0ZSkpOwog
fQogCi1ib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjQ2VydGlmaWNh
dGVSZWY+JiByZXN1bHQpCit0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8U2VjQ2VydGlmaWNh
dGVSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIFNlY0NlcnRpZmljYXRlUmVmKTsKK3Rl
bXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxTZWNDZXJ0aWZpY2F0ZVJlZj46OmVuY29kZTxTdHJl
YW1Db25uZWN0aW9uRW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBTZWNDZXJ0aWZp
Y2F0ZVJlZik7CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjQ2VydGlmaWNhdGVS
ZWY+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNDZXJ0aWZpY2F0ZVJl
Zj4mIHJlc3VsdCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgIGlmICgh
ZGVjb2RlKGRlY29kZXIsIGRhdGEpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJlc3VsdCA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNh
dGVDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLmdldCgpKSk7CkBAIC02NDgsMjMgKzc1MSwyNyBAQCBi
b29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8CiB9CiAKICNpZiBIQVZFKFNF
Q19LRVlDSEFJTikKLXZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFNlY0tleWNoYWluSXRl
bVJlZiBrZXljaGFpbkl0ZW0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBBcmd1
bWVudENvZGVyPFNlY0tleWNoYWluSXRlbVJlZj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBT
ZWNLZXljaGFpbkl0ZW1SZWYga2V5Y2hhaW5JdGVtKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGhh
c1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzQ3JlZGVudGlhbHMp
KTsKIAogICAgIENGRGF0YVJlZiBkYXRhOwogICAgIGlmIChTZWNLZXljaGFpbkl0ZW1DcmVhdGVQ
ZXJzaXN0ZW50UmVmZXJlbmNlKGtleWNoYWluSXRlbSwgJmRhdGEpID09IGVyclNlY1N1Y2Nlc3Mp
IHsKLSAgICAgICAgZW5jb2RlKGVuY29kZXIsIGRhdGEpOworICAgICAgICBlbmNvZGVyIDw8IGRh
dGE7CiAgICAgICAgIENGUmVsZWFzZShkYXRhKTsKICAgICB9CiB9CiAKLWJvb2wgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNLZXljaGFpbkl0ZW1SZWY+JiByZXN1bHQpCit0
ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29kZXI8U2VjS2V5Y2hhaW5JdGVtUmVmPjo6ZW5jb2RlPEVu
Y29kZXI+KEVuY29kZXImLCBTZWNLZXljaGFpbkl0ZW1SZWYpOwordGVtcGxhdGUgdm9pZCBBcmd1
bWVudENvZGVyPFNlY0tleWNoYWluSXRlbVJlZj46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5j
b2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBTZWNLZXljaGFpbkl0ZW1SZWYpOworCiti
b29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPFNlY0tleWNoYWluSXRlbVJlZj4+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNlY0tleWNoYWluSXRlbVJlZj4mIHJlc3VsdCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxl
Z2U6OkNhbkFjY2Vzc0NyZWRlbnRpYWxzKSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBk
YXRhOwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgZGF0YSkpCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ0ZEYXRhUmVm
IGRyZWYgPSBkYXRhLmdldCgpOwpAQCAtNjgyLDE3ICs3ODksMjEgQEAgYm9vbCBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogI2VuZGlmCiAKICNpZiBIQVZFKFNFQ19BQ0NFU1Nf
Q09OVFJPTCkKLXZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFNlY0FjY2Vzc0NvbnRyb2xS
ZWYgYWNjZXNzQ29udHJvbCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2b2lkIEFyZ3Vt
ZW50Q29kZXI8U2VjQWNjZXNzQ29udHJvbFJlZj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBT
ZWNBY2Nlc3NDb250cm9sUmVmIGFjY2Vzc0NvbnRyb2wpCiB7Ci0gICAgUmV0YWluUHRyPENGRGF0
YVJlZj4gZGF0YSA9IGFkb3B0Q0YoU2VjQWNjZXNzQ29udHJvbENvcHlEYXRhKGFjY2Vzc0NvbnRy
b2wpKTsKKyAgICBhdXRvIGRhdGEgPSBhZG9wdENGKFNlY0FjY2Vzc0NvbnRyb2xDb3B5RGF0YShh
Y2Nlc3NDb250cm9sKSk7CiAgICAgaWYgKGRhdGEpCi0gICAgICAgIGVuY29kZShlbmNvZGVyLCBk
YXRhLmdldCgpKTsKKyAgICAgICAgZW5jb2RlciA8PCBkYXRhOwogfQogCi1ib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjQWNjZXNzQ29udHJvbFJlZj4mIHJlc3VsdCkK
K3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxTZWNBY2Nlc3NDb250cm9sUmVmPjo6ZW5jb2Rl
PEVuY29kZXI+KEVuY29kZXImLCBTZWNBY2Nlc3NDb250cm9sUmVmKTsKK3RlbXBsYXRlIHZvaWQg
QXJndW1lbnRDb2RlcjxTZWNBY2Nlc3NDb250cm9sUmVmPjo6ZW5jb2RlPFN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIFNlY0FjY2Vzc0NvbnRyb2xSZWYp
OworCitib29sIEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPFNlY0FjY2Vzc0NvbnRyb2xSZWY+Pjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNBY2Nlc3NDb250cm9sUmVmPiYg
cmVzdWx0KQogewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgaWYgKCFkZWNv
ZGUoZGVjb2RlciwgZGF0YSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gYWRvcHRDRihTZWNBY2Nlc3NDb250cm9s
Q3JlYXRlRnJvbURhdGEoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGF0YS5nZXQoKSwgbnVsbHB0cikp
OwpAQCAtNzA0LDcgKzgxNSw4IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFp
blB0cjwKICNlbmRpZgogCiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLXZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIFNlY1RydXN0UmVmIHRydXN0KQordGVtcGxhdGU8dHlw
ZW5hbWUgRW5jb2Rlcj4KK3ZvaWQgQXJndW1lbnRDb2RlcjxTZWNUcnVzdFJlZj46OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBTZWNUcnVzdFJlZiB0cnVzdCkKIHsKICAgICBhdXRvIGRhdGEgPSBh
ZG9wdENGKFNlY1RydXN0U2VyaWFsaXplKHRydXN0LCBudWxscHRyKSk7CiAgICAgaWYgKCFkYXRh
KSB7CkBAIC03MTIsMTEgKzgyNCwxMyBAQCB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBT
ZWNUcnVzdFJlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbmNvZGVyIDw8IHRydWU7
Ci0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgZGF0YS5nZXQoKSk7CisgICAgZW5jb2RlciA8PCB0
cnVlIDw8IGRhdGE7CiB9CiAKLWJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0
cjxTZWNUcnVzdFJlZj4mIHJlc3VsdCkKK3RlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxTZWNU
cnVzdFJlZj46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgU2VjVHJ1c3RSZWYpOwordGVtcGxh
dGUgdm9pZCBBcmd1bWVudENvZGVyPFNlY1RydXN0UmVmPjo6ZW5jb2RlPFN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIFNlY1RydXN0UmVmKTsKKworYm9v
bCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxTZWNUcnVzdFJlZj4+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgUmV0YWluUHRyPFNlY1RydXN0UmVmPiYgcmVzdWx0KQogewogICAgIGJvb2wgaGFz
VHJ1c3Q7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNUcnVzdCkpCkBAIC03MjYsNyArODQw
LDcgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRydXN0RGF0YTsKLSAgICBp
ZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIHRydXN0RGF0YSkpCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh0cnVzdERhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIHRydXN0
ID0gYWRvcHRDRihTZWNUcnVzdERlc2VyaWFsaXplKHRydXN0RGF0YS5nZXQoKSwgbnVsbHB0cikp
OwpAQCAtNzQ0LDI4ICs4NTgsMzcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8SVBDOjpDRlR5cGU+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFs
dWVzPAotICAgIElQQzo6Q0ZUeXBlLAotICAgIElQQzo6Q0ZUeXBlOjpDRkFycmF5LAotICAgIElQ
Qzo6Q0ZUeXBlOjpDRkJvb2xlYW4sCi0gICAgSVBDOjpDRlR5cGU6OkNGRGF0YSwKLSAgICBJUEM6
OkNGVHlwZTo6Q0ZEYXRlLAotICAgIElQQzo6Q0ZUeXBlOjpDRkRpY3Rpb25hcnksCi0gICAgSVBD
OjpDRlR5cGU6OkNGTnVsbCwKLSAgICBJUEM6OkNGVHlwZTo6Q0ZOdW1iZXIsCi0gICAgSVBDOjpD
RlR5cGU6OkNGU3RyaW5nLAotICAgIElQQzo6Q0ZUeXBlOjpDRlVSTCwKLSAgICBJUEM6OkNGVHlw
ZTo6U2VjQ2VydGlmaWNhdGUsCisgICAgICAgIElQQzo6Q0ZUeXBlLAorICAgICAgICBJUEM6OkNG
VHlwZTo6Q0ZBcnJheSwKKyAgICAgICAgSVBDOjpDRlR5cGU6OkNGQm9vbGVhbiwKKyAgICAgICAg
SVBDOjpDRlR5cGU6OkNGRGF0YSwKKyAgICAgICAgSVBDOjpDRlR5cGU6OkNGRGF0ZSwKKyAgICAg
ICAgSVBDOjpDRlR5cGU6OkNGRGljdGlvbmFyeSwKKyAgICAgICAgSVBDOjpDRlR5cGU6OkNGTnVs
bCwKKyAgICAgICAgSVBDOjpDRlR5cGU6OkNGTnVtYmVyLAorICAgICAgICBJUEM6OkNGVHlwZTo6
Q0ZTdHJpbmcsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpDRlVSTCwKKyAgICAgICAgSVBDOjpDRlR5
cGU6OlNlY0NlcnRpZmljYXRlLAogI2lmIEhBVkUoU0VDX0tFWUNIQUlOKQotICAgIElQQzo6Q0ZU
eXBlOjpTZWNLZXljaGFpbkl0ZW0sCisgICAgICAgIElQQzo6Q0ZUeXBlOjpTZWNLZXljaGFpbkl0
ZW0sCiAjZW5kaWYKICNpZiBIQVZFKFNFQ19BQ0NFU1NfQ09OVFJPTCkKLSAgICBJUEM6OkNGVHlw
ZTo6U2VjQWNjZXNzQ29udHJvbCwKKyAgICAgICAgSVBDOjpDRlR5cGU6OlNlY0FjY2Vzc0NvbnRy
b2wsCiAjZW5kaWYKICNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQotICAgIElQQzo6
Q0ZUeXBlOjpTZWNUcnVzdCwKKyAgICAgICAgSVBDOjpDRlR5cGU6OlNlY1RydXN0LAogI2VuZGlm
Ci0gICAgSVBDOjpDRlR5cGU6Ok51bGxwdHIsCi0gICAgSVBDOjpDRlR5cGU6OlVua25vd24KKyAg
ICAgICAgSVBDOjpDRlR5cGU6OkNHQ29sb3JTcGFjZSwKKyAgICAgICAgSVBDOjpDRlR5cGU6Ok51
bGxwdHIsCisgICAgICAgIElQQzo6Q0ZUeXBlOjpVbmtub3duCisgICAgPjsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8SVBDOjpDR0NvbG9yU3BhY2VFbmNvZGluZ1NjaGVtZT4g
eworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIElQQzo6Q0dDb2xvclNw
YWNlRW5jb2RpbmdTY2hlbWUsCisgICAgICAgIElQQzo6Q0dDb2xvclNwYWNlRW5jb2RpbmdTY2hl
bWU6Ok5hbWUsCisgICAgICAgIElQQzo6Q0dDb2xvclNwYWNlRW5jb2RpbmdTY2hlbWU6OlByb3Bl
cnR5TGlzdAogICAgID47CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9jZi9Bcmd1
bWVudENvZGVyc0NGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvY2YvQXJn
dW1lbnRDb2RlcnNDRi5oCShyZXZpc2lvbiAyNzc5MDIpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9jZi9Bcmd1bWVudENvZGVyc0NGLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDkgQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEFyZ3Vt
ZW50Q29kZXJzQ0ZfaAotI2RlZmluZSBBcmd1bWVudENvZGVyc0NGX2gKKyNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiQXJndW1lbnRDb2Rlci5oIgogI2luY2x1ZGUgPFNlY3VyaXR5L1NlY0NlcnRp
ZmljYXRlLmg+CiAjaW5jbHVkZSA8U2VjdXJpdHkvU2VjVHJ1c3QuaD4KICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CkBAIC0zNCw3MSArMzQsMTU2IEBACiAjaW5jbHVkZSA8U2VjdXJpdHkvU2Vj
S2V5Y2hhaW5JdGVtLmg+CiAjZW5kaWYKIAordHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNwYWNlKiBD
R0NvbG9yU3BhY2VSZWY7CisKIG5hbWVzcGFjZSBJUEMgewogCiBjbGFzcyBFbmNvZGVyOwogY2xh
c3MgRGVjb2RlcjsKIAorLy8gTk9URTogVGhlc2UgY29kZXJzIGFyZSBzdHJ1Y3R1cmVkIHN1Y2gg
dGhhdCB0aGV5IGV4cG9zZSBlbmNvZGVyIGZ1bmN0aW9ucyBmb3IgYm90aCBDRlR5cGUgYW5kIFJl
dGFpblB0cjxDRlR5cGU+CisvLyBidXQgb25seSBhIGRlY29kZXIgb25seSBmb3IgUmV0YWluUHRy
PENGVHlwZT4uCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ0ZSZXRhaW5QdHJBcmd1
bWVudENvZGVyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmV0YWluUHRyPFQ+JiByZXRhaW5QdHIpCisg
ICAgeworICAgICAgICBBcmd1bWVudENvZGVyPFQ+OjplbmNvZGUoZW5jb2RlciwgcmV0YWluUHRy
LmdldCgpKTsKKyAgICB9Cit9OworCisvLyBDRlR5cGVSZWYKK3RlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8Q0ZUeXBlUmVmPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4g
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBDRlR5cGVSZWYpOworfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZUeXBlUmVmPj4gOiBDRlJldGFpblB0
ckFyZ3VtZW50Q29kZXI8Q0ZUeXBlUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVS
TiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGVHlwZVJlZj4mKTsKK307CisKIC8v
IENGQXJyYXlSZWYKLXZvaWQgZW5jb2RlKEVuY29kZXImLCBDRkFycmF5UmVmKTsKLVdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGQXJyYXlSZWY+JiBy
ZXN1bHQpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxDRkFycmF5UmVmPiB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
LCBDRkFycmF5UmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0
YWluUHRyPENGQXJyYXlSZWY+PiA6IENGUmV0YWluUHRyQXJndW1lbnRDb2RlcjxDRkFycmF5UmVm
PiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwg
UmV0YWluUHRyPENGQXJyYXlSZWY+Jik7Cit9OwogCiAvLyBDRkJvb2xlYW5SZWYKLXZvaWQgZW5j
b2RlKEVuY29kZXImLCBDRkJvb2xlYW5SZWYpOwotV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVj
b2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZCb29sZWFuUmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0ZCb29sZWFuUmVmPiB7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBDRkJvb2xlYW5SZWYp
OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZCb29s
ZWFuUmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZCb29sZWFuUmVmPiB7CisgICAg
c3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRy
PENGQm9vbGVhblJlZj4mKTsKK307CiAKIC8vIENGRGF0YVJlZgotdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIENGRGF0YVJlZik7Ci1XQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYs
IFJldGFpblB0cjxDRkRhdGFSZWY+JiByZXN1bHQpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxDRkRhdGFSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGRGF0YVJlZik7Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxDRkRhdGFSZWY+PiA6IENGUmV0YWluUHRyQXJn
dW1lbnRDb2RlcjxDRkRhdGFSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJv
b2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYpOworfTsKIAogLy8gQ0ZE
YXRlUmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZEYXRlUmVmKTsKLVdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRyPENGRGF0ZVJlZj4mIHJlc3VsdCk7
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPENGRGF0ZVJlZj4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZEYXRl
UmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENG
RGF0ZVJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPENGRGF0ZVJlZj4geworICAgIHN0
YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxD
RkRhdGVSZWY+Jik7Cit9OwogCiAvLyBDRkRpY3Rpb25hcnlSZWYKLXZvaWQgZW5jb2RlKEVuY29k
ZXImLCBDRkRpY3Rpb25hcnlSZWYpOwotV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERl
Y29kZXImLCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8Q0ZEaWN0aW9uYXJ5UmVmPiB7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBDRkRpY3Rpb25hcnlS
ZWYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZEaWN0aW9uYXJ5UmVm
PiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4mKTsKK307CiAKIC8vIENGTnVtYmVyUmVmCi12b2lk
IGVuY29kZShFbmNvZGVyJiwgQ0ZOdW1iZXJSZWYpOwotV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+JiByZXN1bHQpOwordGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxDRk51bWJlclJlZj4geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgQ0ZOdW1iZXJSZWYp
OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8Q0ZOdW1i
ZXJSZWY+PiA6IENGUmV0YWluUHRyQXJndW1lbnRDb2RlcjxDRk51bWJlclJlZj4geworICAgIHN0
YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxD
Rk51bWJlclJlZj4mKTsKK307CiAKIC8vIENGU3RyaW5nUmVmCi12b2lkIGVuY29kZShFbmNvZGVy
JiwgQ0ZTdHJpbmdSZWYpOwotV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXIm
LCBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+JiByZXN1bHQpOwotCi0vLyBDRlR5cGVSZWYKLXZvaWQg
ZW5jb2RlKEVuY29kZXImLCBDRlR5cGVSZWYpOwotV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVj
b2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8Q0ZTdHJpbmdSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGU3RyaW5nUmVmKTsKK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmV0YWluUHRyPENGU3RyaW5nUmVm
Pj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZTdHJpbmdSZWY+IHsKKyAgICBzdGF0aWMg
V0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+Jik7Cit9OwogCiAvLyBDRlVSTFJlZgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIENGVVJM
UmVmKTsKLVdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRy
PENGVVJMUmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0ZV
UkxSZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNv
ZGUoRW5jb2RlciYsIENGVVJMUmVmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8UmV0YWluUHRyPENGVVJMUmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8Q0ZV
UkxSZWY+IHsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBSZXRhaW5QdHI8Q0ZVUkxSZWY+Jik7Cit9OworCisvLyBDR0NvbG9yU3BhY2VSZWYKK3Rl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8Q0dDb2xvclNwYWNlUmVmPiB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBDR0Nv
bG9yU3BhY2VSZWYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRh
aW5QdHI8Q0dDb2xvclNwYWNlUmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8Q0dDb2xv
clNwYWNlUmVmPiB7CisgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShE
ZWNvZGVyJiwgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4mKTsKK307CiAKIC8vIFNlY0NlcnRp
ZmljYXRlUmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwgU2VjQ2VydGlmaWNhdGVSZWYpOwotV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8U2VjQ2VydGlm
aWNhdGVSZWY+JiByZXN1bHQpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxTZWND
ZXJ0aWZpY2F0ZVJlZj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2
b2lkIGVuY29kZShFbmNvZGVyJiwgU2VjQ2VydGlmaWNhdGVSZWYpOworfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZXRhaW5QdHI8U2VjQ2VydGlmaWNhdGVSZWY+PiA6IENG
UmV0YWluUHRyQXJndW1lbnRDb2RlcjxTZWNDZXJ0aWZpY2F0ZVJlZj4geworICAgIHN0YXRpYyBX
QVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxTZWNDZXJ0
aWZpY2F0ZVJlZj4mKTsKK307CiAKICNpZiBIQVZFKFNFQ19LRVlDSEFJTikKIC8vIFNlY0tleWNo
YWluSXRlbVJlZgotdm9pZCBlbmNvZGUoRW5jb2RlciYsIFNlY0tleWNoYWluSXRlbVJlZik7Ci1X
QVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxTZWNLZXlj
aGFpbkl0ZW1SZWY+JiByZXN1bHQpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxT
ZWNLZXljaGFpbkl0ZW1SZWY+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIFNlY0tleWNoYWluSXRlbVJlZik7Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxTZWNLZXljaGFpbkl0ZW1SZWY+
PiA6IENGUmV0YWluUHRyQXJndW1lbnRDb2RlcjxTZWNLZXljaGFpbkl0ZW1SZWY+IHsKKyAgICBz
dGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8
U2VjS2V5Y2hhaW5JdGVtUmVmPiYpOworfTsKICNlbmRpZgogCiAjaWYgSEFWRShTRUNfQUNDRVNT
X0NPTlRST0wpCiAvLyBTZWNBY2Nlc3NDb250cm9sUmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwg
U2VjQWNjZXNzQ29udHJvbFJlZik7Ci1XQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVj
b2RlciYsIFJldGFpblB0cjxTZWNBY2Nlc3NDb250cm9sUmVmPiYgcmVzdWx0KTsKK3RlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8U2VjQWNjZXNzQ29udHJvbFJlZj4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgU2VjQWNj
ZXNzQ29udHJvbFJlZik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJl
dGFpblB0cjxTZWNBY2Nlc3NDb250cm9sUmVmPj4gOiBDRlJldGFpblB0ckFyZ3VtZW50Q29kZXI8
U2VjQWNjZXNzQ29udHJvbFJlZj4geworICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFJldGFpblB0cjxTZWNBY2Nlc3NDb250cm9sUmVmPiYpOworfTsK
ICNlbmRpZgogCiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKIC8vIFNlY1RydXN0
UmVmCi12b2lkIGVuY29kZShFbmNvZGVyJiwgU2VjVHJ1c3RSZWYpOwotV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+Jik7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFNlY1RydXN0UmVmPiB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBTZWNUcnVzdFJl
Zik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJldGFpblB0cjxTZWNU
cnVzdFJlZj4+IDogQ0ZSZXRhaW5QdHJBcmd1bWVudENvZGVyPFNlY1RydXN0UmVmPiB7CisgICAg
c3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmV0YWluUHRy
PFNlY1RydXN0UmVmPiYpOworfTsKICNlbmRpZgogCiBDRlR5cGVSZWYgdG9rZW5OdWxscHRyVHlw
ZVJlZigpOwogCiB9IC8vIG5hbWVzcGFjZSBJUEMKLQotI2VuZGlmIC8vIEFyZ3VtZW50Q29kZXJz
Q0ZfaApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0NvbG9yU3BhY2VEYXRhLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbQko
cmV2aXNpb24gMjc3OTAyKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0NvbG9yU3BhY2VE
YXRhLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3NyArMzMsMjggQEAKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWVudW0gRW5jb2RlZERhdGFUeXBlIHsKLSAgICBOdWxsLAotICAgIE5hbWUsCi0g
ICAgRGF0YSwKLX07Ci0KIHZvaWQgQ29sb3JTcGFjZURhdGE6OmVuY29kZShJUEM6OkVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgaWYgKGNnQ29sb3JTcGFjZSkgewotICAgICAgICAvLyBU
cnkgdG8gZW5jb2RlIHRoZSBuYW1lLgotICAgICAgICBpZiAoUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBuYW1lID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDb3B5TmFtZShjZ0NvbG9yU3BhY2UuZ2V0KCkp
KSkgewotICAgICAgICAgICAgZW5jb2RlciA8PCBOYW1lOwotICAgICAgICAgICAgSVBDOjplbmNv
ZGUoZW5jb2RlciwgbmFtZS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBGYWlsaW5nIHRoYXQsIGp1c3QgZW5jb2RlIHRoZSBJQ0MgZGF0YS4KLSAg
ICAgICAgaWYgKFJldGFpblB0cjxDRkRhdGFSZWY+IHByb2ZpbGVEYXRhID0gYWRvcHRDRihDR0Nv
bG9yU3BhY2VDb3B5SUNDRGF0YShjZ0NvbG9yU3BhY2UuZ2V0KCkpKSkgewotICAgICAgICAgICAg
ZW5jb2RlciA8PCBEYXRhOwotICAgICAgICAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcHJvZmls
ZURhdGEuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gVGhlIGNvbG9yIHNwYWNlIHdhcyBudWxsIG9yIGZhaWxlZCB0byBiZSBlbmNvZGVkLgot
ICAgIGVuY29kZXIgPDwgTnVsbDsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGJvb2w+KGNn
Q29sb3JTcGFjZSk7CisgICAgaWYgKGNnQ29sb3JTcGFjZSkKKyAgICAgICAgZW5jb2RlciA8PCBj
Z0NvbG9yU3BhY2U7CiB9CiAKIGJvb2wgQ29sb3JTcGFjZURhdGE6OmRlY29kZShJUEM6OkRlY29k
ZXImIGRlY29kZXIsIENvbG9yU3BhY2VEYXRhJiBjb2xvclNwYWNlRGF0YSkKIHsKLSAgICBFbmNv
ZGVkRGF0YVR5cGUgZGF0YVR5cGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhVHlwZSkp
CisgICAgYm9vbCBoYXNDR0NvbG9yU3BhY2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXND
R0NvbG9yU3BhY2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKGRhdGFU
eXBlKSB7Ci0gICAgY2FzZSBOdWxsOgotICAgICAgICBjb2xvclNwYWNlRGF0YS5jZ0NvbG9yU3Bh
Y2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIE5hbWU6IHsKLSAg
ICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lOwotICAgICAgICBpZiAoIUlQQzo6ZGVj
b2RlKGRlY29kZXIsIG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGNvbG9yU3BhY2VEYXRhLmNnQ29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRl
V2l0aE5hbWUobmFtZS5nZXQoKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
Y2FzZSBEYXRhOiB7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgICAg
IGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgZGF0YSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgY29sb3JTcGFjZURhdGEuY2dDb2xvclNwYWNlID0gYWRvcHRDRihDR0Nv
bG9yU3BhY2VDcmVhdGVXaXRoSUNDRGF0YShkYXRhLmdldCgpKSk7CisgICAgaWYgKCFoYXNDR0Nv
bG9yU3BhY2UpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICB9CiAKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgUmV0YWluUHRyPENHQ29s
b3JTcGFjZVJlZj4gY29sb3JTcGFjZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yU3Bh
Y2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgY29sb3JTcGFjZURhdGEuY2dD
b2xvclNwYWNlID0gV1RGTW92ZShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYktpdDo6RW5jb2RlZERhdGFUeXBlPiB7Ci0gICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKLSAgICAgICAgV2ViS2l0OjpFbmNvZGVkRGF0YVR5cGUsCi0gICAg
ICAgIFdlYktpdDo6RW5jb2RlZERhdGFUeXBlOjpOdWxsLAotICAgICAgICBXZWJLaXQ6OkVuY29k
ZWREYXRhVHlwZTo6TmFtZSwKLSAgICAgICAgV2ViS2l0OjpFbmNvZGVkRGF0YVR5cGU6OkRhdGEK
LSAgICA+OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvU2VjSXRlbVJlcXVlc3REYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvU2VjSXRlbVJlcXVlc3REYXRhLmNwcAkocmV2aXNpb24gMjc3OTAyKQor
KysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NlY0l0ZW1SZXF1ZXN0RGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDExICs1MCwxMSBAQCB2b2lkIFNlY0l0ZW1SZXF1ZXN0RGF0YTo6ZW5j
b2RlKElQQzo6RW5jCiAKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGJvb2w+KG1fcXVlcnlE
aWN0aW9uYXJ5KTsKICAgICBpZiAobV9xdWVyeURpY3Rpb25hcnkpCi0gICAgICAgIElQQzo6ZW5j
b2RlKGVuY29kZXIsIG1fcXVlcnlEaWN0aW9uYXJ5LmdldCgpKTsKKyAgICAgICAgZW5jb2RlciA8
PCBtX3F1ZXJ5RGljdGlvbmFyeTsKIAogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4o
bV9hdHRyaWJ1dGVzVG9NYXRjaCk7CiAgICAgaWYgKG1fYXR0cmlidXRlc1RvTWF0Y2gpCi0gICAg
ICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIG1fYXR0cmlidXRlc1RvTWF0Y2guZ2V0KCkpOworICAg
ICAgICBlbmNvZGVyIDw8IG1fYXR0cmlidXRlc1RvTWF0Y2g7CiB9CiAKIGJvb2wgU2VjSXRlbVJl
cXVlc3REYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBTZWNJdGVtUmVxdWVzdERh
dGEmIHNlY0l0ZW1SZXF1ZXN0RGF0YSkKQEAgLTY2LDE0ICs2NiwxNCBAQCBib29sIFNlY0l0ZW1S
ZXF1ZXN0RGF0YTo6ZGVjb2RlKElQQzo6RGVjCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShleHBl
Y3RRdWVyeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChleHBlY3RRdWVyeSAm
JiAhSVBDOjpkZWNvZGUoZGVjb2Rlciwgc2VjSXRlbVJlcXVlc3REYXRhLm1fcXVlcnlEaWN0aW9u
YXJ5KSkKKyAgICBpZiAoZXhwZWN0UXVlcnkgJiYgIWRlY29kZXIuZGVjb2RlKHNlY0l0ZW1SZXF1
ZXN0RGF0YS5tX3F1ZXJ5RGljdGlvbmFyeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
ICAgICBib29sIGV4cGVjdEF0dHJpYnV0ZXM7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShleHBl
Y3RBdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChleHBl
Y3RBdHRyaWJ1dGVzICYmICFJUEM6OmRlY29kZShkZWNvZGVyLCBzZWNJdGVtUmVxdWVzdERhdGEu
bV9hdHRyaWJ1dGVzVG9NYXRjaCkpCisgICAgaWYgKGV4cGVjdEF0dHJpYnV0ZXMgJiYgIWRlY29k
ZXIuZGVjb2RlKHNlY0l0ZW1SZXF1ZXN0RGF0YS5tX2F0dHJpYnV0ZXNUb01hdGNoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL1NlY0l0ZW1SZXNwb25zZURhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TZWNJdGVtUmVzcG9uc2VEYXRhLmNwcAkocmV2aXNpb24g
Mjc3OTAyKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NlY0l0ZW1SZXNwb25zZURhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgU2VjSXRlbVJlc3BvbnNl
RGF0YTo6ZW5jb2RlKElQQzo6RW4KICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGludDY0X3Q+
KG1fcmVzdWx0Q29kZSk7CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPihtX3Jlc3Vs
dE9iamVjdCk7CiAgICAgaWYgKG1fcmVzdWx0T2JqZWN0KQotICAgICAgICBJUEM6OmVuY29kZShl
bmNvZGVyLCBtX3Jlc3VsdE9iamVjdC5nZXQoKSk7CisgICAgICAgIGVuY29kZXIgPDwgbV9yZXN1
bHRPYmplY3Q7CiB9CiAKIE9wdGlvbmFsPFNlY0l0ZW1SZXNwb25zZURhdGE+IFNlY0l0ZW1SZXNw
b25zZURhdGE6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCkBAIC01Niw3ICs1Niw3IEBA
IE9wdGlvbmFsPFNlY0l0ZW1SZXNwb25zZURhdGE+IFNlY0l0ZW1SZXMKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAogICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJlc3VsdDsKLSAgICBp
ZiAoZXhwZWN0UmVzdWx0T2JqZWN0ICYmICFJUEM6OmRlY29kZShkZWNvZGVyLCByZXN1bHQpKQor
ICAgIGlmIChleHBlY3RSZXN1bHRPYmplY3QgJiYgIWRlY29kZXIuZGVjb2RlKHJlc3VsdCkpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICByZXR1cm4ge3sgc3RhdGljX2Nhc3Q8
T1NTdGF0dXM+KHJlc3VsdENvZGUpLCBXVEZNb3ZlKHJlc3VsdCkgfX07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0J
KHJldmlzaW9uIDI3NzkwMikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJn
dW1lbnRDb2RlcnNNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDExICs1MSwxMSBAQCB2b2lk
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJCiAgICAgc3dpdGNoIChjZXJ0aWZp
Y2F0ZUluZm8udHlwZSgpKSB7CiAjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKICAg
ICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3Q6Ci0gICAgICAgIElQ
Qzo6ZW5jb2RlKGVuY29kZXIsIGNlcnRpZmljYXRlSW5mby50cnVzdCgpKTsKKyAgICAgICAgZW5j
b2RlciA8PCBjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFp
bjoKLSAgICAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGVJbmZvLmNlcnRpZmlj
YXRlQ2hhaW4oKSk7CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLmNlcnRpZmlj
YXRlQ2hhaW4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm86OlR5cGU6Ok5vbmU6CiAgICAgICAgIC8vIERvIG5vdGhpbmcuCkBAIC03Myw3ICs3Myw3
IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUkKICNpZiBIQVZFKFNF
Q19UUlVTVF9TRVJJQUxJWkFUSU9OKQogICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
OjpUeXBlOjpUcnVzdDogewogICAgICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+IHRydXN0Owot
ICAgICAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIHRydXN0KSB8fCAhdHJ1c3QpCisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodHJ1c3QpIHx8ICF0cnVzdCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICBjZXJ0aWZpY2F0ZUluZm8gPSBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8oV1RGTW92ZSh0cnVzdCkpOwpAQCAtODIsNyArODIsNyBAQCBib29sIEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJCiAjZW5kaWYKICAgICBjYXNlIFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbjogewogICAgICAgICBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4gY2VydGlmaWNhdGVDaGFpbjsKLSAgICAgICAgaWYgKCFJUEM6OmRlY29k
ZShkZWNvZGVyLCBjZXJ0aWZpY2F0ZUNoYWluKSB8fCAhY2VydGlmaWNhdGVDaGFpbikKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZUNoYWluKSB8fCAhY2VydGlmaWNhdGVD
aGFpbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjZXJ0aWZpY2F0ZUlu
Zm8gPSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oV1RGTW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7
CkBAIC0xNjYsNyArMTY2LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlTlNFcnJvcihFbmNvZGVyJiBl
bmNvZAogICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShmaWx0ZXJlZFVzZXJJbmZvLmdldCgp
LCAoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpTlNVUkxFcnJvckZhaWxpbmdVUkxQZWVyVHJ1c3RFcnJv
cktleSwgcGVlclRydXN0KTsKICNlbmRpZgogCi0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgZmls
dGVyZWRVc2VySW5mby5nZXQoKSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxDRkRpY3Rp
b25hcnlSZWY+KGZpbHRlcmVkVXNlckluZm8uZ2V0KCkpOwogCiAgICAgaWYgKGlkIHVuZGVybHlp
bmdFcnJvciA9IFt1c2VySW5mbyBvYmplY3RGb3JLZXk6TlNVbmRlcmx5aW5nRXJyb3JLZXldKSB7
CiAgICAgICAgIEFTU0VSVChbdW5kZXJseWluZ0Vycm9yIGlzS2luZE9mQ2xhc3M6W05TRXJyb3Ig
Y2xhc3NdXSk7CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIFJldGFpblB0cjxOU0Vycm9yPiBk
ZWNvZGVOU0Vycm9yKAogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gdXNlckluZm87Ci0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCB1c2Vy
SW5mbykgfHwgIXVzZXJJbmZvKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUodXNlckluZm8pIHx8
ICF1c2VySW5mbykKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIGJvb2wgaGFzVW5kZXJseWlu
Z0Vycm9yID0gZmFsc2U7CkBAIC0zNzcsMTMgKzM3NywxMyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6Q29udGVudEZpbHRlCiB7CiAgICAgYXV0byBhcmNoaXZlciA9IGFkb3B0TlMoW1tO
U0tleWVkQXJjaGl2ZXIgYWxsb2NdIGluaXRSZXF1aXJpbmdTZWN1cmVDb2Rpbmc6WUVTXSk7CiAg
ICAgY29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyLmVuY29kZShhcmNoaXZlci5nZXQoKSk7Ci0g
ICAgSVBDOjplbmNvZGUoZW5jb2RlciwgKF9fYnJpZGdlIENGRGF0YVJlZilhcmNoaXZlci5nZXQo
KS5lbmNvZGVkRGF0YSk7CisgICAgZW5jb2RlciA8PCAoX19icmlkZ2UgQ0ZEYXRhUmVmKWFyY2hp
dmVyLmdldCgpLmVuY29kZWREYXRhOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
Q29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdl
YkNvcmU6OkNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlciYgY29udGVudEZpbHRlclVuYmxvY2tI
YW5kbGVyKQogewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgaWYgKCFJUEM6
OmRlY29kZShkZWNvZGVyLCBkYXRhKSB8fCAhZGF0YSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGRhdGEpIHx8ICFkYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIHVuYXJj
aGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZFVuYXJjaGl2ZXIgYWxsb2NdIGluaXRGb3JSZWFkaW5n
RnJvbURhdGE6KF9fYnJpZGdlIE5TRGF0YSAqKWRhdGEuZ2V0KCkgZXJyb3I6bnVsbHB0cl0pOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>